## Summary Core data model, GitHub REST API wrappers, and stdin input parsing. ## Tasks - [x] `src/types.ts` — `SearchResult`, `ParsedResults`, `EpicMetadata`, `EpicConfig`, `ChecklistItem`, `DiffResult`, `DispatchGroup`, GitHub API types - [x] `src/api/api-utils.ts` — `fetchWithRetry` with rate-limit / 429 / 503 handling, `paginatedFetch` - [x] `src/api/github-api.ts` — `createIssue`, `updateIssue`, `getIssue`, `addComment`, `listLabels`, `listIssueTemplates`, `listOrgTeams`, `getTeamsForRepo`, `getCodeowners`, `searchIssues`, `createSubIssueLink` - [x] `src/input/stdin.ts` — `readStdin`, `detectFormat`, `parseMarkdown`, `parseJson`, `parseResults` ## Input format Markdown: ``` - [ ] `owner/repo` — `path:line` — text # Replay: github-code-search "TODO" --org acme ``` JSON: flat `SearchResult[]` or `{ items, replayCommand }` wrapper. ## Acceptance criteria - Unit tests in `src/api/api-utils.test.ts` and `src/input/stdin.test.ts` pass - Both markdown and JSON formats parse correctly
Summary
Core data model, GitHub REST API wrappers, and stdin input parsing.
Tasks
src/types.ts—SearchResult,ParsedResults,EpicMetadata,EpicConfig,ChecklistItem,DiffResult,DispatchGroup, GitHub API typessrc/api/api-utils.ts—fetchWithRetrywith rate-limit / 429 / 503 handling,paginatedFetchsrc/api/github-api.ts—createIssue,updateIssue,getIssue,addComment,listLabels,listIssueTemplates,listOrgTeams,getTeamsForRepo,getCodeowners,searchIssues,createSubIssueLinksrc/input/stdin.ts—readStdin,detectFormat,parseMarkdown,parseJson,parseResultsInput format
Markdown:
JSON: flat
SearchResult[]or{ items, replayCommand }wrapper.Acceptance criteria
src/api/api-utils.test.tsandsrc/input/stdin.test.tspass