Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .beads/issues.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,11 @@
{"id":"t2p-wln","title":"CLI integration","description":"Implement src/index.ts with Commander setup, wire up init and work commands, add CLI options (--model, --verbose), test global installation (npm link). Verify shebang works correctly.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-30T13:26:34.40176-05:00","updated_at":"2025-11-30T13:59:36.034896-05:00","closed_at":"2025-11-30T13:59:36.034896-05:00","dependencies":[{"issue_id":"t2p-wln","depends_on_id":"t2p-prg","type":"blocks","created_at":"2025-11-30T13:26:34.402376-05:00","created_by":"daemon","metadata":"{}"},{"issue_id":"t2p-wln","depends_on_id":"t2p-68n","type":"blocks","created_at":"2025-11-30T13:26:34.403063-05:00","created_by":"daemon","metadata":"{}"}]}
{"id":"t2p-wzt","title":"Refactor init.ts so that the embedded prompts are pulled from individual .md files in the source code","description":"Currently init.ts has large string constants (STYLE_TEMPLATE, WORK_TEMPLATE, SYSTEM_TEMPLATE, ANALYSIS_TEMPLATE) embedded in the code. Refactor to load these from individual .md files in the source code (e.g., src/templates/style.md).\n\nBenefits:\n- Easier to maintain and edit templates\n- Better separation of content from code\n- Cleaner TypeScript files\n- Templates can be reviewed/edited without reading TS code\n\nImplementation:\n- Create src/templates/ directory\n- Move each template constant to a .md file\n- Update init.ts to read from these files using readFileSync\n- Ensure templates are included in npm package distribution","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-30T14:48:00.459557-05:00","updated_at":"2025-11-30T14:52:49.196814-05:00","closed_at":"2025-11-30T14:52:49.196814-05:00"}
{"id":"t2p-x3h","title":"ship blog-from-x: Generate blog posts from successful X posts","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-24T10:06:25.728784-05:00","updated_at":"2025-12-24T10:12:35.814251-05:00","closed_at":"2025-12-24T10:12:35.814251-05:00","dependencies":[{"issue_id":"t2p-x3h","depends_on_id":"t2p-bb2","type":"blocks","created_at":"2025-12-24T10:07:19.949131-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-g06","type":"blocks","created_at":"2025-12-24T10:07:25.105074-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-4db","type":"blocks","created_at":"2025-12-24T10:07:30.294792-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-k7d","type":"blocks","created_at":"2025-12-24T10:07:35.583141-05:00","created_by":"ryw","metadata":"{}"}]}
{"id":"t2p-sec3","title":"Security: Use constant-time comparison for OAuth state parameter","description":"The state parameter comparison in x-auth.ts:199 uses !== which is vulnerable to timing attacks. While impact is low for localhost callback, best practice is to use crypto.timingSafeEqual() for state comparison.\n\nFile: src/services/x-auth.ts:199\nFix: Use crypto.timingSafeEqual(Buffer.from(state), Buffer.from(expectedState))\n\nSeverity: Low (localhost only)\nCategory: Security","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-sec4","title":"Security: Validate OAuth callback URL protocol and host","description":"The callback URL parsing in x-auth.ts:136-139 doesn't explicitly validate the protocol should be http:// or the host should be 127.0.0.1. Add explicit checks: callbackUrl.protocol === 'http:' && callbackUrl.hostname === '127.0.0.1'.\n\nFile: src/services/x-auth.ts:136-139\nSeverity: Medium\nCategory: Security","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-sec5","title":"Security: Generic error message for API key validation to prevent format leakage","description":"The API key format validation in anthropic.ts:24-27 reveals valid API key format in error messages. Attackers could use this to validate guessed keys.\n\nFile: src/services/anthropic.ts:24-27\nFix: Use generic error message without revealing valid format patterns.\n\nSeverity: Medium\nCategory: Security","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-perf4","title":"Performance: Use Set instead of Array.includes() in strategy-selector.ts","description":"The selectDiverse method in strategy-selector.ts:168 uses strategies.filter((s) => !selected.includes(s)) which is O(n*m). Replace with Set for O(1) lookups.\n\nFile: src/services/strategy-selector.ts:168\nFix: const selectedSet = new Set(selected); strategies.filter(s => !selectedSet.has(s.id));\n\nSeverity: Medium\nCategory: Performance","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-perf5","title":"Performance: Parallelize sequential LLM calls in work.ts with Promise.all()","description":"In work.ts:383,408, two LLM calls are made sequentially (generation and evaluation) when they could run in parallel. Use Promise.all() to parallelize independent calls.\n\nFile: src/commands/work.ts:383, 408\nSeverity: Medium\nCategory: Performance","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-perf6","title":"Performance: Parallelize API calls in blog.ts getThread/getReplies","description":"In blog.ts:658,671, getThread and getRepliesFromOthers are independent API calls that run sequentially. Use Promise.all() to parallelize.\n\nFile: src/commands/blog.ts:658, 671\nSeverity: Medium\nCategory: Performance","status":"open","priority":2,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-debt8","title":"Tech debt: Extract duplicate banger evaluation logic","description":"Both posts.ts:94-104 and work.ts:407-419 contain nearly identical banger score calculation logic. Extract to shared utility function in src/utils/banger-eval.ts.\n\nFiles: src/commands/posts.ts, src/commands/work.ts\nSeverity: Medium\nCategory: Code Duplication","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
{"id":"t2p-qual5","title":"Quality: Unify duplicate prompt building functions in work.ts","description":"The buildPrompt() (line 26) and buildStrategyPrompt() (line 102) functions in work.ts have 90% identical logic. Refactor to a single function with options.\n\nFile: src/commands/work.ts:26-36, 102-123\nSeverity: Low-Medium\nCategory: Code Quality","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-07T08:00:00Z","updated_at":"2026-03-07T08:00:00Z"}
Loading