@kosuke-ai/cli 0.0.57 → 1.0.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -434
- package/dist/commands/auth.js +117 -0
- package/dist/generated/commands/deploy/cancel.js +17 -0
- package/dist/generated/commands/deploy/messages.js +17 -0
- package/dist/generated/commands/deploy/run.js +60 -0
- package/dist/generated/commands/index.js +132 -0
- package/dist/generated/commands/preview/get.js +25 -0
- package/dist/generated/commands/preview/health.js +25 -0
- package/dist/generated/commands/preview/reset.js +27 -0
- package/dist/generated/commands/preview/share-create.js +36 -0
- package/dist/generated/commands/preview/share-delete.js +26 -0
- package/dist/generated/commands/preview/share-get.js +26 -0
- package/dist/generated/commands/preview/shared.js +17 -0
- package/dist/generated/commands/projects/create.js +37 -0
- package/dist/generated/commands/projects/delete.js +17 -0
- package/dist/generated/commands/projects/env-vars-add.js +21 -0
- package/dist/generated/commands/projects/env-vars-remove.js +21 -0
- package/dist/generated/commands/projects/get.js +17 -0
- package/dist/generated/commands/projects/list.js +15 -0
- package/dist/generated/commands/projects/services-add.js +87 -0
- package/dist/generated/commands/projects/services-list.js +18 -0
- package/dist/generated/commands/projects/services-remove.js +19 -0
- package/dist/generated/commands/projects/services-update.js +81 -0
- package/dist/generated/commands/projects/settings-get.js +18 -0
- package/dist/generated/commands/projects/settings-import.js +91 -0
- package/dist/generated/commands/projects/settings-update.js +77 -0
- package/dist/generated/commands/projects/skills.js +35 -0
- package/dist/generated/commands/projects/update.js +27 -0
- package/dist/generated/commands/sessions/activate.js +18 -0
- package/dist/generated/commands/sessions/checklist-generate.js +19 -0
- package/dist/generated/commands/sessions/checklist-get.js +19 -0
- package/dist/generated/commands/sessions/comments-add.js +63 -0
- package/dist/generated/commands/sessions/comments-delete.js +20 -0
- package/dist/generated/commands/sessions/comments-list.js +19 -0
- package/dist/generated/commands/sessions/comments-update.js +23 -0
- package/dist/generated/commands/sessions/create.js +126 -0
- package/dist/generated/commands/sessions/delete.js +18 -0
- package/dist/generated/commands/sessions/diff-files.js +19 -0
- package/dist/generated/commands/sessions/diff-patch.js +86 -0
- package/dist/generated/commands/sessions/edit-prompt.js +59 -0
- package/dist/generated/commands/sessions/files-get.js +27 -0
- package/dist/generated/commands/sessions/files-list.js +19 -0
- package/dist/generated/commands/sessions/files-write.js +41 -0
- package/dist/generated/commands/sessions/get.js +18 -0
- package/dist/generated/commands/sessions/git-commit-message.js +19 -0
- package/dist/generated/commands/sessions/git-commit.js +29 -0
- package/dist/generated/commands/sessions/git-push.js +19 -0
- package/dist/generated/commands/sessions/git-state.js +19 -0
- package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
- package/dist/generated/commands/sessions/jobs-get.js +20 -0
- package/dist/generated/commands/sessions/list.js +81 -0
- package/dist/generated/commands/sessions/messages.js +18 -0
- package/dist/generated/commands/sessions/search.js +23 -0
- package/dist/generated/commands/sessions/send.js +98 -0
- package/dist/generated/commands/sessions/update.js +72 -0
- package/dist/generated/commands/workspaces/access-status.js +29 -0
- package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
- package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
- package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
- package/dist/generated/commands/workspaces/credits.js +17 -0
- package/dist/generated/commands/workspaces/get.js +17 -0
- package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
- package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
- package/dist/generated/commands/workspaces/list.js +15 -0
- package/dist/generated/commands/workspaces/members.js +25 -0
- package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
- package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
- package/dist/generated/commands/workspaces/usage.js +32 -0
- package/dist/index.js +5 -595
- package/dist/program.js +46 -0
- package/dist/runtime/attach.js +139 -0
- package/dist/runtime/attachments.js +58 -0
- package/dist/runtime/client.js +12 -0
- package/dist/runtime/config.js +49 -0
- package/dist/runtime/credentials.js +24 -0
- package/dist/runtime/descriptor.js +7 -0
- package/dist/runtime/invoke.js +152 -0
- package/dist/runtime/runtime.js +41 -0
- package/dist/runtime/version.js +5 -0
- package/openapi.json +5222 -0
- package/package.json +21 -79
- package/LICENSE +0 -21
- package/claude.costs.json +0 -34
- package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
- package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/utils/file-discovery.test.js +0 -51
- package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
- package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.js +0 -34
- package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
- package/dist/__tests__/utils/logger.test.d.ts +0 -5
- package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger.test.js +0 -243
- package/dist/__tests__/utils/logger.test.js.map +0 -1
- package/dist/__tests__/utils/validator.test.d.ts +0 -5
- package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validator.test.js +0 -206
- package/dist/__tests__/utils/validator.test.js.map +0 -1
- package/dist/index.d.ts +0 -37
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kosuke/commands/analyse.d.ts +0 -15
- package/dist/kosuke/commands/analyse.d.ts.map +0 -1
- package/dist/kosuke/commands/analyse.js +0 -304
- package/dist/kosuke/commands/analyse.js.map +0 -1
- package/dist/kosuke/commands/build.d.ts +0 -35
- package/dist/kosuke/commands/build.d.ts.map +0 -1
- package/dist/kosuke/commands/build.js +0 -660
- package/dist/kosuke/commands/build.js.map +0 -1
- package/dist/kosuke/commands/fix.d.ts +0 -21
- package/dist/kosuke/commands/fix.d.ts.map +0 -1
- package/dist/kosuke/commands/fix.js +0 -256
- package/dist/kosuke/commands/fix.js.map +0 -1
- package/dist/kosuke/commands/getcode.d.ts +0 -29
- package/dist/kosuke/commands/getcode.d.ts.map +0 -1
- package/dist/kosuke/commands/getcode.js +0 -248
- package/dist/kosuke/commands/getcode.js.map +0 -1
- package/dist/kosuke/commands/lint.d.ts +0 -21
- package/dist/kosuke/commands/lint.d.ts.map +0 -1
- package/dist/kosuke/commands/lint.js +0 -342
- package/dist/kosuke/commands/lint.js.map +0 -1
- package/dist/kosuke/commands/migrate.d.ts +0 -38
- package/dist/kosuke/commands/migrate.d.ts.map +0 -1
- package/dist/kosuke/commands/migrate.js +0 -284
- package/dist/kosuke/commands/migrate.js.map +0 -1
- package/dist/kosuke/commands/plan.d.ts +0 -28
- package/dist/kosuke/commands/plan.d.ts.map +0 -1
- package/dist/kosuke/commands/plan.js +0 -684
- package/dist/kosuke/commands/plan.js.map +0 -1
- package/dist/kosuke/commands/requirements.d.ts +0 -52
- package/dist/kosuke/commands/requirements.d.ts.map +0 -1
- package/dist/kosuke/commands/requirements.js +0 -615
- package/dist/kosuke/commands/requirements.js.map +0 -1
- package/dist/kosuke/commands/review.d.ts +0 -26
- package/dist/kosuke/commands/review.d.ts.map +0 -1
- package/dist/kosuke/commands/review.js +0 -303
- package/dist/kosuke/commands/review.js.map +0 -1
- package/dist/kosuke/commands/serve.d.ts +0 -9
- package/dist/kosuke/commands/serve.d.ts.map +0 -1
- package/dist/kosuke/commands/serve.js +0 -17
- package/dist/kosuke/commands/serve.js.map +0 -1
- package/dist/kosuke/commands/ship.d.ts +0 -37
- package/dist/kosuke/commands/ship.d.ts.map +0 -1
- package/dist/kosuke/commands/ship.js +0 -375
- package/dist/kosuke/commands/ship.js.map +0 -1
- package/dist/kosuke/commands/sync-rules.d.ts +0 -9
- package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
- package/dist/kosuke/commands/sync-rules.js +0 -414
- package/dist/kosuke/commands/sync-rules.js.map +0 -1
- package/dist/kosuke/commands/test.d.ts +0 -42
- package/dist/kosuke/commands/test.d.ts.map +0 -1
- package/dist/kosuke/commands/test.js +0 -540
- package/dist/kosuke/commands/test.js.map +0 -1
- package/dist/kosuke/commands/tickets.d.ts +0 -43
- package/dist/kosuke/commands/tickets.d.ts.map +0 -1
- package/dist/kosuke/commands/tickets.js +0 -876
- package/dist/kosuke/commands/tickets.js.map +0 -1
- package/dist/kosuke/commands/validate-tickets.d.ts +0 -23
- package/dist/kosuke/commands/validate-tickets.d.ts.map +0 -1
- package/dist/kosuke/commands/validate-tickets.js +0 -360
- package/dist/kosuke/commands/validate-tickets.js.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
- package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.js +0 -42
- package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
- package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
- package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/validation.js +0 -38
- package/dist/kosuke/serve/middleware/validation.js.map +0 -1
- package/dist/kosuke/serve/routes/build.d.ts +0 -6
- package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/build.js +0 -226
- package/dist/kosuke/serve/routes/build.js.map +0 -1
- package/dist/kosuke/serve/routes/health.d.ts +0 -6
- package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/health.js +0 -11
- package/dist/kosuke/serve/routes/health.js.map +0 -1
- package/dist/kosuke/serve/routes/plan.d.ts +0 -6
- package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/plan.js +0 -106
- package/dist/kosuke/serve/routes/plan.js.map +0 -1
- package/dist/kosuke/serve/server.d.ts +0 -16
- package/dist/kosuke/serve/server.d.ts.map +0 -1
- package/dist/kosuke/serve/server.js +0 -67
- package/dist/kosuke/serve/server.js.map +0 -1
- package/dist/kosuke/serve/validation/build.d.ts +0 -41
- package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/build.js +0 -20
- package/dist/kosuke/serve/validation/build.js.map +0 -1
- package/dist/kosuke/serve/validation/plan.d.ts +0 -26
- package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/plan.js +0 -15
- package/dist/kosuke/serve/validation/plan.js.map +0 -1
- package/dist/kosuke/types.d.ts +0 -539
- package/dist/kosuke/types.d.ts.map +0 -1
- package/dist/kosuke/types.js +0 -5
- package/dist/kosuke/types.js.map +0 -1
- package/dist/kosuke/utils/batch-creator.d.ts +0 -14
- package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
- package/dist/kosuke/utils/batch-creator.js +0 -76
- package/dist/kosuke/utils/batch-creator.js.map +0 -1
- package/dist/kosuke/utils/claude-agent.d.ts +0 -140
- package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
- package/dist/kosuke/utils/claude-agent.js +0 -388
- package/dist/kosuke/utils/claude-agent.js.map +0 -1
- package/dist/kosuke/utils/constants.d.ts +0 -40
- package/dist/kosuke/utils/constants.d.ts.map +0 -1
- package/dist/kosuke/utils/constants.js +0 -54
- package/dist/kosuke/utils/constants.js.map +0 -1
- package/dist/kosuke/utils/file-discovery.d.ts +0 -15
- package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
- package/dist/kosuke/utils/file-discovery.js +0 -80
- package/dist/kosuke/utils/file-discovery.js.map +0 -1
- package/dist/kosuke/utils/git.d.ts +0 -41
- package/dist/kosuke/utils/git.d.ts.map +0 -1
- package/dist/kosuke/utils/git.js +0 -145
- package/dist/kosuke/utils/git.js.map +0 -1
- package/dist/kosuke/utils/github.d.ts +0 -17
- package/dist/kosuke/utils/github.d.ts.map +0 -1
- package/dist/kosuke/utils/github.js +0 -22
- package/dist/kosuke/utils/github.js.map +0 -1
- package/dist/kosuke/utils/interactive-input.d.ts +0 -22
- package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
- package/dist/kosuke/utils/interactive-input.js +0 -124
- package/dist/kosuke/utils/interactive-input.js.map +0 -1
- package/dist/kosuke/utils/json-parser.d.ts +0 -14
- package/dist/kosuke/utils/json-parser.d.ts.map +0 -1
- package/dist/kosuke/utils/json-parser.js +0 -40
- package/dist/kosuke/utils/json-parser.js.map +0 -1
- package/dist/kosuke/utils/logger.d.ts +0 -161
- package/dist/kosuke/utils/logger.d.ts.map +0 -1
- package/dist/kosuke/utils/logger.js +0 -234
- package/dist/kosuke/utils/logger.js.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
- package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
- package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
- package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.js +0 -154
- package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
- package/dist/kosuke/utils/repository-manager.d.ts +0 -13
- package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-manager.js +0 -94
- package/dist/kosuke/utils/repository-manager.js.map +0 -1
- package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
- package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-resolver.js +0 -186
- package/dist/kosuke/utils/repository-resolver.js.map +0 -1
- package/dist/kosuke/utils/tickets-manager.d.ts +0 -34
- package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/tickets-manager.js +0 -106
- package/dist/kosuke/utils/tickets-manager.js.map +0 -1
- package/dist/kosuke/utils/validator.d.ts +0 -45
- package/dist/kosuke/utils/validator.d.ts.map +0 -1
- package/dist/kosuke/utils/validator.js +0 -248
- package/dist/kosuke/utils/validator.js.map +0 -1
- package/dist/lib.d.ts +0 -104
- package/dist/lib.d.ts.map +0 -1
- package/dist/lib.js +0 -104
- package/dist/lib.js.map +0 -1
- package/dist/package.json +0 -99
|
@@ -1,615 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Requirements command - Interactive requirements gathering with Claude AI
|
|
3
|
-
*
|
|
4
|
-
* Strategy: Multi-turn conversation to build comprehensive requirements
|
|
5
|
-
* - User provides product description
|
|
6
|
-
* - Claude analyzes and extracts functionalities
|
|
7
|
-
* - Claude asks clarification questions
|
|
8
|
-
* - User answers questions (iterative until clear)
|
|
9
|
-
* - Generate docs.md with complete requirements
|
|
10
|
-
*
|
|
11
|
-
* Implementation: Uses Anthropic SDK directly with two custom tools:
|
|
12
|
-
* - write_docs: Create new docs.md file
|
|
13
|
-
* - edit_docs: Update existing docs.md file
|
|
14
|
-
*/
|
|
15
|
-
import Anthropic from '@anthropic-ai/sdk';
|
|
16
|
-
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
17
|
-
import { join } from 'path';
|
|
18
|
-
import { calculateCost } from '../utils/claude-agent.js';
|
|
19
|
-
import { askQuestion } from '../utils/interactive-input.js';
|
|
20
|
-
import { logger, setupCancellationHandler } from '../utils/logger.js';
|
|
21
|
-
import { DEFAULT_ANTHROPIC_MODEL } from '../utils/constants.js';
|
|
22
|
-
/**
|
|
23
|
-
* Tool definitions for docs.md management
|
|
24
|
-
*/
|
|
25
|
-
const REQUIREMENTS_TOOLS = [
|
|
26
|
-
{
|
|
27
|
-
name: 'write_docs',
|
|
28
|
-
description: 'Create a new docs.md file with comprehensive product requirements. Use this when creating the initial requirements document.',
|
|
29
|
-
input_schema: {
|
|
30
|
-
type: 'object',
|
|
31
|
-
properties: {
|
|
32
|
-
content: {
|
|
33
|
-
type: 'string',
|
|
34
|
-
description: 'Full markdown content for docs.md including all sections: Product Description (high-level overview and purpose), Core Functionalities (detailed feature descriptions), and Interface & Design (ASCII wireframes for all major pages/screens with component descriptions and user interactions). Do NOT include technical implementation details like database schemas, API endpoints, or code architecture.',
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
required: ['content'],
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'edit_docs',
|
|
42
|
-
description: 'Update an existing docs.md file with revised requirements. Use this when making changes to an existing requirements document.',
|
|
43
|
-
input_schema: {
|
|
44
|
-
type: 'object',
|
|
45
|
-
properties: {
|
|
46
|
-
content: {
|
|
47
|
-
type: 'string',
|
|
48
|
-
description: 'Full updated markdown content for docs.md with all revisions incorporated.',
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
required: ['content'],
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
];
|
|
55
|
-
/**
|
|
56
|
-
* Custom system prompt for requirements gathering
|
|
57
|
-
*/
|
|
58
|
-
const REQUIREMENTS_SYSTEM_PROMPT = `You are an expert product requirements analyst specializing in web applications.
|
|
59
|
-
|
|
60
|
-
**YOUR PRIMARY OBJECTIVE:** Create a comprehensive \`docs.md\` file that the user will review before implementation begins. This document must contain ALL requirements needed for developers to build the product.
|
|
61
|
-
|
|
62
|
-
**Your Workflow:**
|
|
63
|
-
|
|
64
|
-
1. **Initial Analysis (First User Request)**: When a user describes a product idea, analyze it carefully and present your understanding in this EXACT format:
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
## Product Description
|
|
68
|
-
[Brief description of what will be built - the core concept and purpose]
|
|
69
|
-
|
|
70
|
-
## Core Functionalities
|
|
71
|
-
- [Functionality 1]
|
|
72
|
-
- [Functionality 2]
|
|
73
|
-
- [Functionality 3]
|
|
74
|
-
...
|
|
75
|
-
|
|
76
|
-
## Interface & Design
|
|
77
|
-
Present the application structure as visual wireframes using markdown. For each page/screen:
|
|
78
|
-
|
|
79
|
-
### [Page Name]
|
|
80
|
-
\`\`\`
|
|
81
|
-
┌──────────────────────────────────────┐
|
|
82
|
-
│ Header/Navigation │
|
|
83
|
-
├──────────────────────────────────────┤
|
|
84
|
-
│ │
|
|
85
|
-
│ [Main Content Area] │
|
|
86
|
-
│ - Component 1 │
|
|
87
|
-
│ - Component 2 │
|
|
88
|
-
│ │
|
|
89
|
-
├──────────────────────────────────────┤
|
|
90
|
-
│ Footer │
|
|
91
|
-
└──────────────────────────────────────┘
|
|
92
|
-
\`\`\`
|
|
93
|
-
|
|
94
|
-
**Key Components:**
|
|
95
|
-
- Component descriptions
|
|
96
|
-
- User interactions
|
|
97
|
-
- Data displayed
|
|
98
|
-
|
|
99
|
-
## Clarification Questions & MVP Recommendations
|
|
100
|
-
|
|
101
|
-
For each clarification needed, provide BOTH a question AND a recommended approach for MVP:
|
|
102
|
-
|
|
103
|
-
1. **[Question topic]**
|
|
104
|
-
- Question: [Specific question]
|
|
105
|
-
- 💡 MVP Recommendation: [Simple, practical approach that reduces scope]
|
|
106
|
-
|
|
107
|
-
2. **[Question topic]**
|
|
108
|
-
- Question: [Specific question]
|
|
109
|
-
- 💡 MVP Recommendation: [Simple, practical approach that reduces scope]
|
|
110
|
-
|
|
111
|
-
3. **[Question topic]**
|
|
112
|
-
- Question: [Specific question]
|
|
113
|
-
- 💡 MVP Recommendation: [Simple, practical approach that reduces scope]
|
|
114
|
-
|
|
115
|
-
...
|
|
116
|
-
|
|
117
|
-
**Quick Response Option:** The user can reply "go for recommendations" or "use recommendations" to accept all MVP recommendations at once.
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
2. **Iterative Refinement**: As the user answers questions:
|
|
121
|
-
- If user says "go for recommendations" or "use recommendations", immediately accept ALL MVP recommendations and proceed to creating docs.md
|
|
122
|
-
- If user provides specific answers, acknowledge them and update your understanding
|
|
123
|
-
- Ask follow-up questions ONLY for remaining ambiguities
|
|
124
|
-
- Always prioritize simplicity and MVP scope
|
|
125
|
-
- Continue the conversation until EVERYTHING is crystal clear
|
|
126
|
-
|
|
127
|
-
3. **Final Deliverable - docs.md**: Once ALL questions are answered and requirements are 100% clear, use the \`write_docs\` tool to create the \`docs.md\` file. This is the FINAL DELIVERABLE that the user will review before implementation begins.
|
|
128
|
-
|
|
129
|
-
**docs.md MUST contain:**
|
|
130
|
-
- **Product Description** - High-level description of what will be built, the core concept and purpose
|
|
131
|
-
- **Core Functionalities** - Detailed feature descriptions (what the product should do)
|
|
132
|
-
- **Interface & Design** - ASCII wireframes for ALL major pages/screens with component descriptions and user interactions
|
|
133
|
-
|
|
134
|
-
**Critical Rules:**
|
|
135
|
-
- NEVER start implementation - you only gather requirements
|
|
136
|
-
- NEVER create docs.md until ALL clarification questions are answered (or user accepts recommendations)
|
|
137
|
-
- ALWAYS provide both questions AND MVP recommendations for each clarification point
|
|
138
|
-
- MVP recommendations should simplify scope, reduce complexity, and focus on core features
|
|
139
|
-
- If user says "go for recommendations" or similar, immediately accept ALL recommendations and create docs.md
|
|
140
|
-
- ALWAYS create comprehensive ASCII wireframes to visualize interfaces
|
|
141
|
-
- Focus on WHAT the product should do, not HOW to code it
|
|
142
|
-
- Be conversational and help the user think through edge cases
|
|
143
|
-
- Bias towards simplicity - this is an MVP, not a full-featured product
|
|
144
|
-
- Use the \`write_docs\` tool when creating the initial docs.md file
|
|
145
|
-
- Use the \`edit_docs\` tool if you need to update docs.md after user feedback
|
|
146
|
-
- The docs.md file is your SUCCESS CRITERIA - make it comprehensive and clear
|
|
147
|
-
- NEVER include technical implementation details (database schemas, API endpoints, code architecture, tech stack) in docs.md
|
|
148
|
-
- Keep docs.md focused on user-facing features, functionality, and interface design only
|
|
149
|
-
|
|
150
|
-
**Success = User reviews docs.md and says "Yes, this is exactly what I want to build"**`;
|
|
151
|
-
/**
|
|
152
|
-
* Execute a tool call (write or edit docs.md)
|
|
153
|
-
*/
|
|
154
|
-
function executeToolCall(toolName, toolInput, workspaceRoot) {
|
|
155
|
-
const docsPath = join(workspaceRoot, 'docs.md');
|
|
156
|
-
try {
|
|
157
|
-
if (toolName === 'write_docs') {
|
|
158
|
-
const content = toolInput.content;
|
|
159
|
-
writeFileSync(docsPath, content, 'utf-8');
|
|
160
|
-
console.log('\n✍️ Created docs.md with comprehensive requirements');
|
|
161
|
-
return 'Successfully created docs.md file';
|
|
162
|
-
}
|
|
163
|
-
else if (toolName === 'edit_docs') {
|
|
164
|
-
const content = toolInput.content;
|
|
165
|
-
writeFileSync(docsPath, content, 'utf-8');
|
|
166
|
-
console.log('\n✏️ Updated docs.md with revised requirements');
|
|
167
|
-
return 'Successfully updated docs.md file';
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
return `Unknown tool: ${toolName}`;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error writing docs.md';
|
|
175
|
-
console.error(`\n❌ Failed to write docs.md: ${errorMessage}`);
|
|
176
|
-
return `Error: ${errorMessage}`;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Format token usage for display
|
|
181
|
-
*/
|
|
182
|
-
function formatTokenUsage(inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens, cost) {
|
|
183
|
-
const breakdown = [];
|
|
184
|
-
if (inputTokens > 0)
|
|
185
|
-
breakdown.push(`${inputTokens.toLocaleString()} input`);
|
|
186
|
-
if (outputTokens > 0)
|
|
187
|
-
breakdown.push(`${outputTokens.toLocaleString()} output`);
|
|
188
|
-
if (cacheCreationTokens > 0)
|
|
189
|
-
breakdown.push(`${cacheCreationTokens.toLocaleString()} cache write`);
|
|
190
|
-
if (cacheReadTokens > 0)
|
|
191
|
-
breakdown.push(`${cacheReadTokens.toLocaleString()} cache read`);
|
|
192
|
-
return `💰 Cost: $${cost.toFixed(4)} (${breakdown.join(' + ')} tokens)`;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Process a single Claude interaction with streaming support
|
|
196
|
-
*/
|
|
197
|
-
async function processClaudeInteraction(userInput, previousMessages, workspaceRoot, onStream) {
|
|
198
|
-
const anthropic = new Anthropic({
|
|
199
|
-
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
200
|
-
});
|
|
201
|
-
// Build message history: use previous messages as-is if userInput is empty,
|
|
202
|
-
// otherwise add new user message (only used for first interaction)
|
|
203
|
-
const messages = userInput
|
|
204
|
-
? [
|
|
205
|
-
...previousMessages,
|
|
206
|
-
{
|
|
207
|
-
role: 'user',
|
|
208
|
-
content: userInput,
|
|
209
|
-
},
|
|
210
|
-
]
|
|
211
|
-
: previousMessages;
|
|
212
|
-
// Stream the response
|
|
213
|
-
const stream = await anthropic.messages.stream({
|
|
214
|
-
model: DEFAULT_ANTHROPIC_MODEL,
|
|
215
|
-
max_tokens: 8096,
|
|
216
|
-
system: REQUIREMENTS_SYSTEM_PROMPT,
|
|
217
|
-
tools: REQUIREMENTS_TOOLS,
|
|
218
|
-
messages,
|
|
219
|
-
});
|
|
220
|
-
let responseText = '';
|
|
221
|
-
const toolUses = [];
|
|
222
|
-
let isFirstOutput = true;
|
|
223
|
-
// Process stream events
|
|
224
|
-
for await (const event of stream) {
|
|
225
|
-
if (event.type === 'content_block_start') {
|
|
226
|
-
if (event.content_block.type === 'text') {
|
|
227
|
-
if (isFirstOutput) {
|
|
228
|
-
if (!onStream) {
|
|
229
|
-
process.stdout.write('\n> Claude:\n');
|
|
230
|
-
}
|
|
231
|
-
isFirstOutput = false;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
else if (event.type === 'content_block_delta') {
|
|
236
|
-
if (event.delta.type === 'text_delta') {
|
|
237
|
-
const delta = event.delta.text;
|
|
238
|
-
responseText += delta;
|
|
239
|
-
// Stream to console or callback
|
|
240
|
-
if (onStream) {
|
|
241
|
-
onStream(delta);
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
process.stdout.write(delta);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
else if (event.type === 'content_block_stop') {
|
|
249
|
-
// Content block finished
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
// Get final message from stream
|
|
253
|
-
const finalMessage = await stream.finalMessage();
|
|
254
|
-
// Extract tool uses from the response
|
|
255
|
-
for (const block of finalMessage.content) {
|
|
256
|
-
if (block.type === 'tool_use') {
|
|
257
|
-
toolUses.push({
|
|
258
|
-
id: block.id,
|
|
259
|
-
name: block.name,
|
|
260
|
-
input: block.input,
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
// Execute tools and build tool result messages
|
|
265
|
-
const hasToolCalls = toolUses.length > 0;
|
|
266
|
-
let updatedMessages = messages;
|
|
267
|
-
if (hasToolCalls) {
|
|
268
|
-
// Add assistant message with tool uses
|
|
269
|
-
updatedMessages = [
|
|
270
|
-
...messages,
|
|
271
|
-
{
|
|
272
|
-
role: 'assistant',
|
|
273
|
-
content: finalMessage.content,
|
|
274
|
-
},
|
|
275
|
-
];
|
|
276
|
-
// Execute each tool and collect results
|
|
277
|
-
const toolResults = toolUses.map((tool) => {
|
|
278
|
-
const result = executeToolCall(tool.name, tool.input, workspaceRoot);
|
|
279
|
-
return {
|
|
280
|
-
type: 'tool_result',
|
|
281
|
-
tool_use_id: tool.id,
|
|
282
|
-
content: result,
|
|
283
|
-
};
|
|
284
|
-
});
|
|
285
|
-
// Add tool results as user message
|
|
286
|
-
updatedMessages = [
|
|
287
|
-
...updatedMessages,
|
|
288
|
-
{
|
|
289
|
-
role: 'user',
|
|
290
|
-
content: toolResults,
|
|
291
|
-
},
|
|
292
|
-
];
|
|
293
|
-
// Continue conversation after tool execution to get final response
|
|
294
|
-
const followupStream = await anthropic.messages.stream({
|
|
295
|
-
model: DEFAULT_ANTHROPIC_MODEL,
|
|
296
|
-
max_tokens: 8096,
|
|
297
|
-
system: REQUIREMENTS_SYSTEM_PROMPT,
|
|
298
|
-
tools: REQUIREMENTS_TOOLS,
|
|
299
|
-
messages: updatedMessages,
|
|
300
|
-
});
|
|
301
|
-
let followupText = '';
|
|
302
|
-
for await (const event of followupStream) {
|
|
303
|
-
if (event.type === 'content_block_delta') {
|
|
304
|
-
if (event.delta.type === 'text_delta') {
|
|
305
|
-
const delta = event.delta.text;
|
|
306
|
-
followupText += delta;
|
|
307
|
-
// Stream followup response
|
|
308
|
-
if (onStream) {
|
|
309
|
-
onStream(delta);
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
process.stdout.write(delta);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
const followupMessage = await followupStream.finalMessage();
|
|
318
|
-
// Update response and messages
|
|
319
|
-
responseText += '\n' + followupText;
|
|
320
|
-
updatedMessages = [
|
|
321
|
-
...updatedMessages,
|
|
322
|
-
{
|
|
323
|
-
role: 'assistant',
|
|
324
|
-
content: followupMessage.content,
|
|
325
|
-
},
|
|
326
|
-
];
|
|
327
|
-
// Combine token usage from both calls
|
|
328
|
-
const finalUsage = finalMessage.usage;
|
|
329
|
-
const followupUsage = followupMessage.usage;
|
|
330
|
-
const combinedUsage = {
|
|
331
|
-
input_tokens: finalUsage.input_tokens + followupUsage.input_tokens,
|
|
332
|
-
output_tokens: finalUsage.output_tokens + followupUsage.output_tokens,
|
|
333
|
-
cache_creation_input_tokens: (finalUsage.cache_creation_input_tokens || 0) +
|
|
334
|
-
(followupUsage.cache_creation_input_tokens || 0),
|
|
335
|
-
cache_read_input_tokens: (finalUsage.cache_read_input_tokens || 0) + (followupUsage.cache_read_input_tokens || 0),
|
|
336
|
-
};
|
|
337
|
-
return {
|
|
338
|
-
response: responseText,
|
|
339
|
-
messages: updatedMessages,
|
|
340
|
-
inputTokens: combinedUsage.input_tokens,
|
|
341
|
-
outputTokens: combinedUsage.output_tokens,
|
|
342
|
-
cacheCreationTokens: combinedUsage.cache_creation_input_tokens,
|
|
343
|
-
cacheReadTokens: combinedUsage.cache_read_input_tokens,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
// No tool calls - just add assistant response to messages
|
|
348
|
-
updatedMessages = [
|
|
349
|
-
...messages,
|
|
350
|
-
{
|
|
351
|
-
role: 'assistant',
|
|
352
|
-
content: finalMessage.content,
|
|
353
|
-
},
|
|
354
|
-
];
|
|
355
|
-
const usage = finalMessage.usage;
|
|
356
|
-
return {
|
|
357
|
-
response: responseText,
|
|
358
|
-
messages: updatedMessages,
|
|
359
|
-
inputTokens: usage.input_tokens,
|
|
360
|
-
outputTokens: usage.output_tokens,
|
|
361
|
-
cacheCreationTokens: usage.cache_creation_input_tokens || 0,
|
|
362
|
-
cacheReadTokens: usage.cache_read_input_tokens || 0,
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Core requirements gathering function for programmatic use
|
|
368
|
-
* This is the non-interactive API that can be used by kosuke-core
|
|
369
|
-
*/
|
|
370
|
-
export async function requirementsCore(options) {
|
|
371
|
-
const { workspaceRoot, userMessage, previousMessages = [], isFirstRequest = false, onStream, } = options;
|
|
372
|
-
try {
|
|
373
|
-
// Validate API key
|
|
374
|
-
if (!process.env.ANTHROPIC_API_KEY) {
|
|
375
|
-
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
376
|
-
}
|
|
377
|
-
console.log(`📋 [RequirementsCore] Starting query`);
|
|
378
|
-
console.log(`📋 [RequirementsCore] Is first request: ${isFirstRequest}`);
|
|
379
|
-
console.log(`📋 [RequirementsCore] Previous messages: ${previousMessages.length}`);
|
|
380
|
-
// Process interaction
|
|
381
|
-
const result = await processClaudeInteraction(userMessage, previousMessages, workspaceRoot, onStream);
|
|
382
|
-
// Check if docs.md was created
|
|
383
|
-
let docsCreated = false;
|
|
384
|
-
let docsContent;
|
|
385
|
-
const docsPath = join(workspaceRoot, 'docs.md');
|
|
386
|
-
if (existsSync(docsPath)) {
|
|
387
|
-
docsContent = readFileSync(docsPath, 'utf-8');
|
|
388
|
-
docsCreated = true;
|
|
389
|
-
}
|
|
390
|
-
console.log(`✅ [RequirementsCore] Interaction complete`);
|
|
391
|
-
console.log(`✅ [RequirementsCore] Docs created: ${docsCreated}`);
|
|
392
|
-
return {
|
|
393
|
-
success: true,
|
|
394
|
-
response: result.response,
|
|
395
|
-
messages: result.messages,
|
|
396
|
-
docsCreated,
|
|
397
|
-
docsContent,
|
|
398
|
-
tokenUsage: {
|
|
399
|
-
input: result.inputTokens,
|
|
400
|
-
output: result.outputTokens,
|
|
401
|
-
cacheCreation: result.cacheCreationTokens,
|
|
402
|
-
cacheRead: result.cacheReadTokens,
|
|
403
|
-
},
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
catch (error) {
|
|
407
|
-
return {
|
|
408
|
-
success: false,
|
|
409
|
-
response: '',
|
|
410
|
-
messages: previousMessages,
|
|
411
|
-
docsCreated: false,
|
|
412
|
-
tokenUsage: {
|
|
413
|
-
input: 0,
|
|
414
|
-
output: 0,
|
|
415
|
-
cacheCreation: 0,
|
|
416
|
-
cacheRead: 0,
|
|
417
|
-
},
|
|
418
|
-
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
419
|
-
};
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Interactive requirements gathering loop
|
|
424
|
-
*/
|
|
425
|
-
async function interactiveSession(logContext) {
|
|
426
|
-
console.log(`
|
|
427
|
-
╔══════════════════════════════════════════════════════════════════════════════╗
|
|
428
|
-
║ Kosuke Requirements - Interactive Requirements Tool ║
|
|
429
|
-
╚══════════════════════════════════════════════════════════════════════════════╝
|
|
430
|
-
`);
|
|
431
|
-
console.log('💡 This tool will help you create comprehensive product requirements.\n');
|
|
432
|
-
console.log("📝 I'll analyze your product idea, ask clarification questions,");
|
|
433
|
-
console.log(' and generate a detailed docs.md file.\n');
|
|
434
|
-
console.log('✨ Tip: Enter to submit, Ctrl+J for new lines.\n');
|
|
435
|
-
// Set up global Ctrl+C handler for the entire interactive session
|
|
436
|
-
const handleSigInt = async () => {
|
|
437
|
-
console.log('\n\n👋 Exiting requirements gathering...\n');
|
|
438
|
-
if (logContext) {
|
|
439
|
-
await logger.complete(logContext, 'cancelled');
|
|
440
|
-
}
|
|
441
|
-
process.exit(0);
|
|
442
|
-
};
|
|
443
|
-
process.on('SIGINT', handleSigInt);
|
|
444
|
-
const session = {
|
|
445
|
-
productDescription: '',
|
|
446
|
-
messages: [],
|
|
447
|
-
isFirstRequest: true,
|
|
448
|
-
};
|
|
449
|
-
let totalInputTokens = 0;
|
|
450
|
-
let totalOutputTokens = 0;
|
|
451
|
-
let totalCacheCreationTokens = 0;
|
|
452
|
-
let totalCacheReadTokens = 0;
|
|
453
|
-
let totalCost = 0;
|
|
454
|
-
try {
|
|
455
|
-
// Initial product description
|
|
456
|
-
console.log("🚀 Let's start! Describe the web application you want to build:\n");
|
|
457
|
-
const productDescription = await askQuestion('You: ');
|
|
458
|
-
if (!productDescription) {
|
|
459
|
-
console.log('\n❌ No product description provided. Exiting.');
|
|
460
|
-
return {
|
|
461
|
-
messages: [],
|
|
462
|
-
tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
|
|
463
|
-
cost: 0,
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
session.productDescription = productDescription;
|
|
467
|
-
// Main conversation loop
|
|
468
|
-
let continueConversation = true;
|
|
469
|
-
while (continueConversation) {
|
|
470
|
-
console.log('\n🤔 Claude is thinking...\n');
|
|
471
|
-
// On first request, add the product description as first user message
|
|
472
|
-
if (session.messages.length === 0) {
|
|
473
|
-
session.messages.push({
|
|
474
|
-
role: 'user',
|
|
475
|
-
content: productDescription,
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
// Get Claude's response with streaming (messages already contain the latest user input)
|
|
479
|
-
const result = await processClaudeInteraction('', session.messages, process.cwd());
|
|
480
|
-
// Update session messages with Claude's response
|
|
481
|
-
session.messages = result.messages;
|
|
482
|
-
session.isFirstRequest = false;
|
|
483
|
-
// Track costs
|
|
484
|
-
totalInputTokens += result.inputTokens;
|
|
485
|
-
totalOutputTokens += result.outputTokens;
|
|
486
|
-
totalCacheCreationTokens += result.cacheCreationTokens;
|
|
487
|
-
totalCacheReadTokens += result.cacheReadTokens;
|
|
488
|
-
const batchCost = calculateCost(result.inputTokens, result.outputTokens, result.cacheCreationTokens, result.cacheReadTokens);
|
|
489
|
-
totalCost += batchCost;
|
|
490
|
-
// Display cost information (response already streamed)
|
|
491
|
-
console.log('\n' + '─'.repeat(90));
|
|
492
|
-
console.log(formatTokenUsage(result.inputTokens, result.outputTokens, result.cacheCreationTokens, result.cacheReadTokens, batchCost));
|
|
493
|
-
console.log('─'.repeat(90) + '\n');
|
|
494
|
-
// Check if docs.md was created
|
|
495
|
-
const docsPath = join(process.cwd(), 'docs.md');
|
|
496
|
-
if (existsSync(docsPath)) {
|
|
497
|
-
console.log('\n✅ Requirements document created: docs.md');
|
|
498
|
-
console.log('\n' + '═'.repeat(90));
|
|
499
|
-
console.log('📊 Total Session Cost:');
|
|
500
|
-
console.log(formatTokenUsage(totalInputTokens, totalOutputTokens, totalCacheCreationTokens, totalCacheReadTokens, totalCost));
|
|
501
|
-
console.log('═'.repeat(90));
|
|
502
|
-
console.log('\n🎉 Requirements gathering complete!\n');
|
|
503
|
-
continueConversation = false;
|
|
504
|
-
break;
|
|
505
|
-
}
|
|
506
|
-
// Ask for user response
|
|
507
|
-
console.log('💬 Your response (type "exit" to quit):\n');
|
|
508
|
-
const userResponse = await askQuestion('You: ');
|
|
509
|
-
if (!userResponse) {
|
|
510
|
-
console.log('\n⚠️ Empty response. Please provide an answer or type "exit".');
|
|
511
|
-
continue;
|
|
512
|
-
}
|
|
513
|
-
if (userResponse.toLowerCase() === 'exit') {
|
|
514
|
-
console.log('\n👋 Exiting requirements gathering.\n');
|
|
515
|
-
console.log('═'.repeat(90));
|
|
516
|
-
console.log('📊 Session Cost:');
|
|
517
|
-
console.log(formatTokenUsage(totalInputTokens, totalOutputTokens, totalCacheCreationTokens, totalCacheReadTokens, totalCost));
|
|
518
|
-
console.log('═'.repeat(90) + '\n');
|
|
519
|
-
continueConversation = false;
|
|
520
|
-
break;
|
|
521
|
-
}
|
|
522
|
-
// Add user response to messages
|
|
523
|
-
session.messages = [
|
|
524
|
-
...session.messages,
|
|
525
|
-
{
|
|
526
|
-
role: 'user',
|
|
527
|
-
content: userResponse,
|
|
528
|
-
},
|
|
529
|
-
];
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
catch (error) {
|
|
533
|
-
console.error('\n❌ Error during requirements gathering:', error);
|
|
534
|
-
throw error;
|
|
535
|
-
}
|
|
536
|
-
finally {
|
|
537
|
-
// Clean up signal handler
|
|
538
|
-
process.removeListener('SIGINT', handleSigInt);
|
|
539
|
-
}
|
|
540
|
-
// Return session data for logging
|
|
541
|
-
return {
|
|
542
|
-
messages: session.messages,
|
|
543
|
-
tokensUsed: {
|
|
544
|
-
input: totalInputTokens,
|
|
545
|
-
output: totalOutputTokens,
|
|
546
|
-
cacheCreation: totalCacheCreationTokens,
|
|
547
|
-
cacheRead: totalCacheReadTokens,
|
|
548
|
-
},
|
|
549
|
-
cost: totalCost,
|
|
550
|
-
};
|
|
551
|
-
}
|
|
552
|
-
/**
|
|
553
|
-
* Convert Anthropic messages to our conversation format
|
|
554
|
-
*/
|
|
555
|
-
function convertAnthropicMessagesToConversation(messages) {
|
|
556
|
-
return messages.map((msg) => {
|
|
557
|
-
const content = typeof msg.content === 'string'
|
|
558
|
-
? msg.content
|
|
559
|
-
: msg.content.map((block) => (block.type === 'text' ? block.text : '')).join('');
|
|
560
|
-
// Extract tool calls if present (for assistant messages)
|
|
561
|
-
let toolCalls;
|
|
562
|
-
if (typeof msg.content !== 'string') {
|
|
563
|
-
const toolUses = msg.content.filter((block) => block.type === 'tool_use');
|
|
564
|
-
if (toolUses.length > 0) {
|
|
565
|
-
toolCalls = toolUses.map((tool) => {
|
|
566
|
-
// Type guard for tool_use blocks
|
|
567
|
-
if ('name' in tool && 'input' in tool) {
|
|
568
|
-
return {
|
|
569
|
-
name: tool.name,
|
|
570
|
-
input: tool.input,
|
|
571
|
-
};
|
|
572
|
-
}
|
|
573
|
-
return { name: 'unknown', input: {} };
|
|
574
|
-
});
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
return {
|
|
578
|
-
role: msg.role === 'user' ? 'user' : 'assistant',
|
|
579
|
-
content,
|
|
580
|
-
timestamp: new Date().toISOString(),
|
|
581
|
-
toolCalls,
|
|
582
|
-
};
|
|
583
|
-
});
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* Main requirements command
|
|
587
|
-
*/
|
|
588
|
-
export async function requirementsCommand() {
|
|
589
|
-
// Initialize logging context
|
|
590
|
-
const logContext = logger.createContext('tickets', { noLogs: false });
|
|
591
|
-
const cleanupHandler = setupCancellationHandler(logContext);
|
|
592
|
-
try {
|
|
593
|
-
// Validate environment
|
|
594
|
-
if (!process.env.ANTHROPIC_API_KEY) {
|
|
595
|
-
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
596
|
-
}
|
|
597
|
-
// Start interactive session
|
|
598
|
-
const sessionData = await interactiveSession(logContext);
|
|
599
|
-
// Track metrics
|
|
600
|
-
logger.trackTokens(logContext, sessionData.tokensUsed);
|
|
601
|
-
// Convert Anthropic messages to our conversation format
|
|
602
|
-
logContext.conversationMessages = convertAnthropicMessagesToConversation(sessionData.messages);
|
|
603
|
-
// Log successful execution
|
|
604
|
-
await logger.complete(logContext, 'success');
|
|
605
|
-
cleanupHandler();
|
|
606
|
-
}
|
|
607
|
-
catch (error) {
|
|
608
|
-
console.error('\n❌ Requirements command failed:', error);
|
|
609
|
-
// Log failed execution
|
|
610
|
-
await logger.complete(logContext, 'error', error);
|
|
611
|
-
cleanupHandler();
|
|
612
|
-
throw error;
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
//# sourceMappingURL=requirements.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../../kosuke/commands/requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review command - Review git diff against CLAUDE.md rules
|
|
3
|
-
*
|
|
4
|
-
* This command reviews only the current git diff (uncommitted changes)
|
|
5
|
-
* for compliance with CLAUDE.md rules, fixes any issues found,
|
|
6
|
-
* and runs comprehensive linting afterwards.
|
|
7
|
-
* Note: This command does NOT support --pr flag (changes applied locally only).
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* kosuke review # Review current git diff
|
|
11
|
-
*/
|
|
12
|
-
import type { ReviewOptions, ReviewResult, ReviewStreamEvent } from '../types.js';
|
|
13
|
-
/**
|
|
14
|
-
* Streaming version of reviewCore - yields events for SSE integration
|
|
15
|
-
*/
|
|
16
|
-
export declare function reviewCoreStream(options?: ReviewOptions): AsyncGenerator<ReviewStreamEvent, void, void>;
|
|
17
|
-
/**
|
|
18
|
-
* Core review logic - reviews git diff only
|
|
19
|
-
* Consumes reviewCoreStream and adds console logging
|
|
20
|
-
*/
|
|
21
|
-
export declare function reviewCore(options?: ReviewOptions): Promise<ReviewResult>;
|
|
22
|
-
/**
|
|
23
|
-
* Main review command
|
|
24
|
-
*/
|
|
25
|
-
export declare function reviewCommand(options?: ReviewOptions): Promise<void>;
|
|
26
|
-
//# sourceMappingURL=review.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAiB,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA4EjG;;GAEG;AACH,wBAAuB,gBAAgB,CACrC,OAAO,GAAE,aAAkB,GAC1B,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,CA0H/C;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuEnF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD9E"}
|