├── src
├── index.css
├── App.tsx
├── main.tsx
├── specflow
│ ├── hooks
│ │ ├── index.ts
│ │ ├── useHotkeys.ts
│ │ ├── useClipboard.ts
│ │ └── useChainRunner.ts
│ ├── components
│ │ ├── SettingsIcon.tsx
│ │ ├── InlineCheckbox.tsx
│ │ ├── index.ts
│ │ ├── CodeSearchOutputPreview.tsx
│ │ ├── ToolbarButton.tsx
│ │ ├── CopyButton.tsx
│ │ ├── OutputViewerModal.tsx
│ │ ├── ConfirmModal.tsx
│ │ ├── ModelSelect.tsx
│ │ ├── ExpandableTextarea.tsx
│ │ ├── DropdownMenu.tsx
│ │ ├── MultiSelectInfo.tsx
│ │ ├── ArchivedMemberModal.tsx
│ │ ├── TextEditorModal.tsx
│ │ ├── Icons.tsx
│ │ ├── CanvasFilePicker.tsx
│ │ ├── RepoPickerModal.tsx
│ │ └── APISettingsModal.tsx
│ ├── ChainManager.tsx
│ ├── types.ts
│ ├── utils.ts
│ ├── api.ts
│ ├── i18n.ts
│ └── nodes.tsx
└── assets
│ └── react.svg
├── docs
└── images
│ ├── banner.png
│ ├── specflow-workflow.png
│ └── specflow-minimal-workflow.png
├── examples
└── example-repo
│ ├── README.md
│ └── src
│ ├── auth.ts
│ └── server.ts
├── tsconfig.json
├── server
├── rangeUtils.ts
├── repoContext.ts
├── searchRunLog.ts
├── openRouter.ts
├── defaultData.ts
├── repoBrowser.ts
├── index.ts
└── appData.ts
├── vite.config.ts
├── index.html
├── .gitignore
├── eslint.config.js
├── tsconfig.node.json
├── tsconfig.app.json
├── AGENTS.md
├── LICENSE
├── package.json
├── public
└── vite.svg
├── shared
├── rangeUtils.ts
└── appDataTypes.ts
├── README.zh.md
└── README.md
/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
--------------------------------------------------------------------------------
/docs/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shuxueshuxue/SpexFlow/HEAD/docs/images/banner.png
--------------------------------------------------------------------------------
/docs/images/specflow-workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shuxueshuxue/SpexFlow/HEAD/docs/images/specflow-workflow.png
--------------------------------------------------------------------------------
/docs/images/specflow-minimal-workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shuxueshuxue/SpexFlow/HEAD/docs/images/specflow-minimal-workflow.png
--------------------------------------------------------------------------------
/examples/example-repo/README.md:
--------------------------------------------------------------------------------
1 | # Example Repo (for Relace Search)
2 |
3 | This folder is a tiny “codebase” you can point the Relace Search tester at.
4 |
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/server/rangeUtils.ts:
--------------------------------------------------------------------------------
1 | export { mergeRanges, mergeCodeSearchOutputs } from '../shared/rangeUtils.js'
2 | export type { LineRange } from '../shared/rangeUtils.js'
3 |
4 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import './App.css'
2 | import { SpecFlowApp } from './specflow/SpecFlowApp'
3 |
4 | export default function App() {
5 | return
{content}
54 | {snapshotText}
63 |
64 |