247-cli 1.7.0 → 2.0.0

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.
Files changed (67) hide show
  1. package/agent/dist/db/index.d.ts.map +1 -1
  2. package/agent/dist/db/index.js +4 -16
  3. package/agent/dist/db/index.js.map +1 -1
  4. package/agent/dist/db/schema.d.ts +2 -63
  5. package/agent/dist/db/schema.d.ts.map +1 -1
  6. package/agent/dist/db/schema.js +1 -44
  7. package/agent/dist/db/schema.js.map +1 -1
  8. package/agent/dist/db/sessions.d.ts.map +1 -1
  9. package/agent/dist/db/sessions.js +3 -5
  10. package/agent/dist/db/sessions.js.map +1 -1
  11. package/agent/dist/lib/init-script.d.ts +0 -6
  12. package/agent/dist/lib/init-script.d.ts.map +1 -1
  13. package/agent/dist/lib/init-script.js +157 -48
  14. package/agent/dist/lib/init-script.js.map +1 -1
  15. package/agent/dist/routes/index.d.ts +0 -2
  16. package/agent/dist/routes/index.d.ts.map +1 -1
  17. package/agent/dist/routes/index.js +0 -2
  18. package/agent/dist/routes/index.js.map +1 -1
  19. package/agent/dist/server.d.ts.map +1 -1
  20. package/agent/dist/server.js +1 -10
  21. package/agent/dist/server.js.map +1 -1
  22. package/agent/dist/services/index.d.ts +0 -2
  23. package/agent/dist/services/index.d.ts.map +1 -1
  24. package/agent/dist/services/index.js +0 -1
  25. package/agent/dist/services/index.js.map +1 -1
  26. package/agent/dist/terminal.d.ts +0 -6
  27. package/agent/dist/terminal.d.ts.map +1 -1
  28. package/agent/dist/terminal.js +16 -6
  29. package/agent/dist/terminal.js.map +1 -1
  30. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  31. package/agent/dist/websocket-handlers.js +0 -30
  32. package/agent/dist/websocket-handlers.js.map +1 -1
  33. package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -191
  34. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  35. package/agent/node_modules/247-shared/dist/types/index.js +0 -13
  36. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  37. package/agent/node_modules/247-shared/package.json +1 -1
  38. package/dist/index.js +1 -1
  39. package/package.json +1 -1
  40. package/agent/dist/db/issues.d.ts +0 -83
  41. package/agent/dist/db/issues.d.ts.map +0 -1
  42. package/agent/dist/db/issues.js +0 -423
  43. package/agent/dist/db/issues.js.map +0 -1
  44. package/agent/dist/db/projects.d.ts +0 -63
  45. package/agent/dist/db/projects.d.ts.map +0 -1
  46. package/agent/dist/db/projects.js +0 -288
  47. package/agent/dist/db/projects.js.map +0 -1
  48. package/agent/dist/lib/planning-prompt.d.ts +0 -7
  49. package/agent/dist/lib/planning-prompt.d.ts.map +0 -1
  50. package/agent/dist/lib/planning-prompt.js +0 -51
  51. package/agent/dist/lib/planning-prompt.js.map +0 -1
  52. package/agent/dist/routes/issues.d.ts +0 -6
  53. package/agent/dist/routes/issues.d.ts.map +0 -1
  54. package/agent/dist/routes/issues.js +0 -235
  55. package/agent/dist/routes/issues.js.map +0 -1
  56. package/agent/dist/routes/managed-projects.d.ts +0 -7
  57. package/agent/dist/routes/managed-projects.d.ts.map +0 -1
  58. package/agent/dist/routes/managed-projects.js +0 -230
  59. package/agent/dist/routes/managed-projects.js.map +0 -1
  60. package/agent/dist/services/planner.d.ts +0 -79
  61. package/agent/dist/services/planner.d.ts.map +0 -1
  62. package/agent/dist/services/planner.js +0 -298
  63. package/agent/dist/services/planner.js.map +0 -1
  64. package/agent/dist/websocket-handlers-planning.d.ts +0 -10
  65. package/agent/dist/websocket-handlers-planning.d.ts.map +0 -1
  66. package/agent/dist/websocket-handlers-planning.js +0 -289
  67. package/agent/dist/websocket-handlers-planning.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Managed Projects API routes: CRUD operations for Project entities.
3
- * These are the Linear-like project management entities, not filesystem projects.
4
- */
5
- import { Router } from 'express';
6
- export declare function createManagedProjectRoutes(): Router;
7
- //# sourceMappingURL=managed-projects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-projects.d.ts","sourceRoot":"","sources":["../../src/routes/managed-projects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA+BjC,wBAAgB,0BAA0B,IAAI,MAAM,CAkQnD"}
@@ -1,230 +0,0 @@
1
- /**
2
- * Managed Projects API routes: CRUD operations for Project entities.
3
- * These are the Linear-like project management entities, not filesystem projects.
4
- */
5
- import { Router } from 'express';
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import { config } from '../config.js';
9
- import { getProject, getAllProjectsWithCounts, getArchivedProjects, getProjectsByStatus, createProject, updateProject, updateProjectStatus, updateProjectPlan, archiveProject, deleteProject, } from '../db/projects.js';
10
- import { getIssuesByProject, createIssues } from '../db/issues.js';
11
- import { generatePlanningPrompt } from '../lib/planning-prompt.js';
12
- // Helper to check if a folder exists in basePath
13
- function isValidBaseProject(projectName) {
14
- const basePath = config.projects.basePath.replace('~', process.env.HOME || '');
15
- const projectPath = path.join(basePath, projectName);
16
- try {
17
- return fs.existsSync(projectPath) && fs.statSync(projectPath).isDirectory();
18
- }
19
- catch {
20
- return false;
21
- }
22
- }
23
- export function createManagedProjectRoutes() {
24
- const router = Router();
25
- // List all projects (with issue counts)
26
- router.get('/', (req, res) => {
27
- const includeArchived = req.query.archived === 'true';
28
- const status = req.query.status;
29
- if (status) {
30
- res.json({
31
- success: true,
32
- projects: getProjectsByStatus(status),
33
- });
34
- }
35
- else if (includeArchived) {
36
- res.json({
37
- success: true,
38
- projects: [...getAllProjectsWithCounts(), ...getArchivedProjects()],
39
- });
40
- }
41
- else {
42
- res.json({
43
- success: true,
44
- projects: getAllProjectsWithCounts(),
45
- });
46
- }
47
- });
48
- // Get single project with issues
49
- router.get('/:id', (req, res) => {
50
- const project = getProject(req.params.id);
51
- if (!project) {
52
- return res.status(404).json({ success: false, error: 'Project not found' });
53
- }
54
- const issues = getIssuesByProject(req.params.id);
55
- res.json({
56
- success: true,
57
- project,
58
- issues,
59
- });
60
- });
61
- // Create project
62
- router.post('/', (req, res) => {
63
- const body = req.body;
64
- if (!body.name) {
65
- return res.status(400).json({ success: false, error: 'Missing required field: name' });
66
- }
67
- if (!body.baseProject) {
68
- return res.status(400).json({ success: false, error: 'Missing required field: baseProject' });
69
- }
70
- // Validate baseProject exists as a folder in basePath
71
- if (!isValidBaseProject(body.baseProject)) {
72
- return res.status(400).json({
73
- success: false,
74
- error: `Invalid baseProject: ${body.baseProject}. Folder does not exist in ${config.projects.basePath}`,
75
- });
76
- }
77
- try {
78
- const project = createProject({
79
- name: body.name,
80
- description: body.description ?? null,
81
- trustMode: body.trustMode ?? false,
82
- baseProject: body.baseProject,
83
- });
84
- res.status(201).json({
85
- success: true,
86
- project,
87
- });
88
- }
89
- catch (err) {
90
- console.error('[ManagedProjects] Create error:', err);
91
- res.status(500).json({ success: false, error: 'Failed to create project' });
92
- }
93
- });
94
- // Update project
95
- router.patch('/:id', (req, res) => {
96
- const body = req.body;
97
- const updated = updateProject(req.params.id, {
98
- name: body.name,
99
- description: body.description,
100
- status: body.status,
101
- trustMode: body.trustMode,
102
- });
103
- if (!updated) {
104
- return res.status(404).json({ success: false, error: 'Project not found' });
105
- }
106
- res.json({
107
- success: true,
108
- project: updated,
109
- });
110
- });
111
- // Update project status
112
- router.patch('/:id/status', (req, res) => {
113
- const { status } = req.body;
114
- if (!status) {
115
- return res.status(400).json({ success: false, error: 'Missing required field: status' });
116
- }
117
- const success = updateProjectStatus(req.params.id, status);
118
- if (!success) {
119
- return res.status(404).json({ success: false, error: 'Project not found' });
120
- }
121
- res.json({
122
- success: true,
123
- project: getProject(req.params.id),
124
- });
125
- });
126
- // Update project plan
127
- router.patch('/:id/plan', (req, res) => {
128
- const { plan } = req.body;
129
- if (!plan) {
130
- return res.status(400).json({ success: false, error: 'Missing required field: plan' });
131
- }
132
- const success = updateProjectPlan(req.params.id, plan);
133
- if (!success) {
134
- return res.status(404).json({ success: false, error: 'Project not found' });
135
- }
136
- res.json({
137
- success: true,
138
- project: getProject(req.params.id),
139
- });
140
- });
141
- // Archive project
142
- router.post('/:id/archive', (req, res) => {
143
- const archived = archiveProject(req.params.id);
144
- if (!archived) {
145
- return res.status(404).json({ success: false, error: 'Project not found' });
146
- }
147
- res.json({
148
- success: true,
149
- project: archived,
150
- });
151
- });
152
- // Delete project
153
- router.delete('/:id', (req, res) => {
154
- const deleted = deleteProject(req.params.id);
155
- if (!deleted) {
156
- return res.status(404).json({ success: false, error: 'Project not found' });
157
- }
158
- res.json({ success: true });
159
- });
160
- // Get issues for project
161
- router.get('/:id/issues', (req, res) => {
162
- const project = getProject(req.params.id);
163
- if (!project) {
164
- return res.status(404).json({ success: false, error: 'Project not found' });
165
- }
166
- const issues = getIssuesByProject(req.params.id);
167
- res.json({
168
- success: true,
169
- issues,
170
- });
171
- });
172
- // Batch create issues for project (from plan)
173
- router.post('/:id/issues/batch', (req, res) => {
174
- const project = getProject(req.params.id);
175
- if (!project) {
176
- return res.status(404).json({ success: false, error: 'Project not found' });
177
- }
178
- const { issues: issueSpecs } = req.body;
179
- if (!issueSpecs || !Array.isArray(issueSpecs)) {
180
- return res.status(400).json({ success: false, error: 'Missing required field: issues (array)' });
181
- }
182
- try {
183
- const createdIssues = createIssues(req.params.id, issueSpecs.map((spec) => ({
184
- title: spec.title,
185
- description: spec.description,
186
- priority: (spec.priority ?? 0),
187
- plan: spec.plan,
188
- })));
189
- // Update project status to active if it was planning
190
- if (project.status === 'planning') {
191
- updateProjectStatus(req.params.id, 'active');
192
- }
193
- res.status(201).json({
194
- success: true,
195
- issues: createdIssues,
196
- });
197
- }
198
- catch (err) {
199
- console.error('[ManagedProjects] Batch create issues error:', err);
200
- res.status(500).json({ success: false, error: 'Failed to create issues' });
201
- }
202
- });
203
- // Start planning session - returns info needed to launch a Claude session with planning prompt
204
- router.post('/:id/start-planning', (req, res) => {
205
- const project = getProject(req.params.id);
206
- if (!project) {
207
- return res.status(404).json({ success: false, error: 'Project not found' });
208
- }
209
- if (!project.baseProject) {
210
- return res.status(400).json({ success: false, error: 'Project has no baseProject configured' });
211
- }
212
- // Generate session name from project name
213
- const sessionName = `planning-${project.name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')}`;
214
- // Get the codebase path
215
- const basePath = config.projects.basePath.replace('~', process.env.HOME || '');
216
- const projectPath = path.join(basePath, project.baseProject);
217
- // Generate the planning prompt
218
- const agentPort = config.agent?.port ?? 4678;
219
- const prompt = generatePlanningPrompt(project.id, project.name, project.description ?? '', `http://localhost:${agentPort}`);
220
- res.json({
221
- success: true,
222
- sessionName,
223
- projectPath,
224
- baseProject: project.baseProject,
225
- prompt,
226
- });
227
- });
228
- return router;
229
- }
230
- //# sourceMappingURL=managed-projects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-projects.js","sourceRoot":"","sources":["../../src/routes/managed-projects.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Planner Service
3
- *
4
- * Manages project planning sessions using Claude Code.
5
- * The planner helps users break down projects into actionable issues
6
- * by asking clarifying questions and generating detailed plans.
7
- */
8
- import { EventEmitter } from 'events';
9
- import { type Terminal } from '../terminal.js';
10
- import type { PlanningPhase, PlanningQuestion, IssueSpec } from '247-shared';
11
- export interface PlanningSession {
12
- id: string;
13
- projectId: string;
14
- phase: PlanningPhase;
15
- startedAt: number;
16
- questions: PlanningQuestion[];
17
- answers: Map<string, string>;
18
- generatedPlan?: GeneratedPlan;
19
- terminal?: Terminal;
20
- outputBuffer: string;
21
- isWaitingForResponse: boolean;
22
- }
23
- export interface GeneratedPlan {
24
- summary: string;
25
- issues: IssueSpec[];
26
- risks: string[];
27
- estimatedComplexity: 'low' | 'medium' | 'high';
28
- }
29
- export interface PlannerEvents {
30
- 'phase-change': (sessionId: string, phase: PlanningPhase) => void;
31
- 'question': (sessionId: string, question: PlanningQuestion) => void;
32
- 'progress': (sessionId: string, message: string) => void;
33
- 'plan-ready': (sessionId: string, plan: GeneratedPlan) => void;
34
- 'issues-created': (sessionId: string, issueIds: string[]) => void;
35
- 'error': (sessionId: string, error: string) => void;
36
- 'output': (sessionId: string, output: string) => void;
37
- }
38
- export declare class PlannerService extends EventEmitter {
39
- private sessions;
40
- constructor();
41
- /**
42
- * Start a new planning session for a project
43
- */
44
- startPlanning(projectId: string, trustMode?: boolean): Promise<string>;
45
- /**
46
- * Answer a planning question
47
- */
48
- answerQuestion(sessionId: string, questionId: string, answer: string): void;
49
- /**
50
- * Approve the generated plan and create issues
51
- */
52
- approvePlan(sessionId: string): Promise<string[]>;
53
- /**
54
- * Cancel a planning session
55
- */
56
- cancelPlanning(sessionId: string): void;
57
- /**
58
- * Get planning session info by session ID
59
- */
60
- getSession(sessionId: string): PlanningSession | undefined;
61
- /**
62
- * Get planning session by project ID
63
- */
64
- getSessionByProjectId(projectId: string): PlanningSession | undefined;
65
- /**
66
- * Send input to the planning terminal
67
- */
68
- sendInput(sessionId: string, input: string): void;
69
- /**
70
- * Generate the initial planning prompt for Claude
71
- */
72
- private generatePlanningPrompt;
73
- /**
74
- * Parse terminal output for structured data (questions, plan)
75
- */
76
- private parseTerminalOutput;
77
- }
78
- export declare const plannerService: PlannerService;
79
- //# sourceMappingURL=planner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/services/planner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/D,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EAEV,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAClE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/D,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAMD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAA2C;;IAM3D;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAmFnF;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAmB3E;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA2CvD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAevC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IASrE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAajD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqE9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA+C5B;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -1,298 +0,0 @@
1
- /**
2
- * Planner Service
3
- *
4
- * Manages project planning sessions using Claude Code.
5
- * The planner helps users break down projects into actionable issues
6
- * by asking clarifying questions and generating detailed plans.
7
- */
8
- import { EventEmitter } from 'events';
9
- import { createTerminal } from '../terminal.js';
10
- import { config } from '../config.js';
11
- import * as projectsDb from '../db/projects.js';
12
- import * as issuesDb from '../db/issues.js';
13
- // ============================================================================
14
- // Planner Service
15
- // ============================================================================
16
- export class PlannerService extends EventEmitter {
17
- sessions = new Map();
18
- constructor() {
19
- super();
20
- }
21
- /**
22
- * Start a new planning session for a project
23
- */
24
- async startPlanning(projectId, trustMode = false) {
25
- const project = projectsDb.getProject(projectId);
26
- if (!project) {
27
- throw new Error(`Project not found: ${projectId}`);
28
- }
29
- const sessionId = `planning-${projectId}-${Date.now()}`;
30
- // Get the base project path
31
- const baseProject = project.baseProject;
32
- if (!baseProject) {
33
- throw new Error('Project has no base project configured');
34
- }
35
- const whitelist = config.projects.whitelist;
36
- if (!whitelist.includes(baseProject)) {
37
- throw new Error(`Base project not in whitelist: ${baseProject}`);
38
- }
39
- const projectPath = `${config.projects.basePath}/${baseProject}`.replace('~', process.env.HOME);
40
- const session = {
41
- id: sessionId,
42
- projectId,
43
- phase: 'gathering',
44
- startedAt: Date.now(),
45
- questions: [],
46
- answers: new Map(),
47
- outputBuffer: '',
48
- isWaitingForResponse: false,
49
- };
50
- this.sessions.set(sessionId, session);
51
- // Update project status
52
- projectsDb.updateProjectStatus(projectId, 'planning');
53
- // Create the planning prompt based on mode
54
- const planningPrompt = this.generatePlanningPrompt(project.name, project.description, trustMode);
55
- // Create a hidden terminal for Claude Code
56
- const terminal = createTerminal(projectPath, `planning-${projectId}`, {
57
- customEnvVars: {
58
- CLAUDE_PLANNING_SESSION: sessionId,
59
- CLAUDE_PLANNING_MODE: trustMode ? 'trust' : 'interactive',
60
- },
61
- });
62
- session.terminal = terminal;
63
- // Listen for terminal output
64
- terminal.onData((data) => {
65
- session.outputBuffer += data;
66
- this.emit('output', sessionId, data);
67
- // Parse output for questions, progress, and plan completion
68
- this.parseTerminalOutput(sessionId);
69
- });
70
- terminal.onExit(() => {
71
- console.log(`[Planner] Terminal exited for session ${sessionId}`);
72
- if (session.phase !== 'complete') {
73
- this.emit('error', sessionId, 'Planning session terminated unexpectedly');
74
- }
75
- });
76
- // Wait for terminal to be ready, then start Claude
77
- terminal.onReady(() => {
78
- console.log(`[Planner] Terminal ready, starting Claude for session ${sessionId}`);
79
- // Start Claude Code with the planning prompt
80
- terminal.write(`claude "${planningPrompt.replace(/"/g, '\\"')}"\n`);
81
- });
82
- this.emit('phase-change', sessionId, 'gathering');
83
- this.emit('progress', sessionId, 'Starting planning session...');
84
- return sessionId;
85
- }
86
- /**
87
- * Answer a planning question
88
- */
89
- answerQuestion(sessionId, questionId, answer) {
90
- const session = this.sessions.get(sessionId);
91
- if (!session) {
92
- throw new Error(`Planning session not found: ${sessionId}`);
93
- }
94
- if (!session.terminal) {
95
- throw new Error('Planning session has no active terminal');
96
- }
97
- session.answers.set(questionId, answer);
98
- session.isWaitingForResponse = false;
99
- // Send the answer to Claude
100
- session.terminal.write(`${answer}\n`);
101
- this.emit('progress', sessionId, 'Processing your answer...');
102
- }
103
- /**
104
- * Approve the generated plan and create issues
105
- */
106
- async approvePlan(sessionId) {
107
- const session = this.sessions.get(sessionId);
108
- if (!session) {
109
- throw new Error(`Planning session not found: ${sessionId}`);
110
- }
111
- if (!session.generatedPlan) {
112
- throw new Error('No plan to approve');
113
- }
114
- // Update phase
115
- session.phase = 'complete';
116
- this.emit('phase-change', sessionId, 'complete');
117
- // Create issues from the plan
118
- const issueInputs = session.generatedPlan.issues.map((spec) => ({
119
- title: spec.title,
120
- description: spec.description,
121
- priority: spec.priority,
122
- plan: spec.plan,
123
- }));
124
- const createdIssues = issuesDb.createIssues(session.projectId, issueInputs);
125
- const issueIds = createdIssues.map((issue) => issue.id);
126
- // Update project plan
127
- projectsDb.updateProjectPlan(session.projectId, session.generatedPlan.summary);
128
- projectsDb.updateProjectStatus(session.projectId, 'active');
129
- // Clean up terminal
130
- if (session.terminal) {
131
- session.terminal.write('\x03'); // Ctrl+C to exit Claude
132
- setTimeout(() => {
133
- session.terminal?.kill();
134
- }, 500);
135
- }
136
- this.emit('issues-created', sessionId, issueIds);
137
- this.emit('progress', sessionId, `Created ${issueIds.length} issues`);
138
- return issueIds;
139
- }
140
- /**
141
- * Cancel a planning session
142
- */
143
- cancelPlanning(sessionId) {
144
- const session = this.sessions.get(sessionId);
145
- if (!session) {
146
- return;
147
- }
148
- if (session.terminal) {
149
- session.terminal.write('\x03'); // Ctrl+C
150
- session.terminal.kill();
151
- }
152
- this.sessions.delete(sessionId);
153
- this.emit('progress', sessionId, 'Planning cancelled');
154
- }
155
- /**
156
- * Get planning session info by session ID
157
- */
158
- getSession(sessionId) {
159
- return this.sessions.get(sessionId);
160
- }
161
- /**
162
- * Get planning session by project ID
163
- */
164
- getSessionByProjectId(projectId) {
165
- for (const session of this.sessions.values()) {
166
- if (session.projectId === projectId) {
167
- return session;
168
- }
169
- }
170
- return undefined;
171
- }
172
- /**
173
- * Send input to the planning terminal
174
- */
175
- sendInput(sessionId, input) {
176
- const session = this.sessions.get(sessionId);
177
- if (!session || !session.terminal) {
178
- throw new Error('Planning session not found or no terminal');
179
- }
180
- session.terminal.write(input);
181
- }
182
- // ============================================================================
183
- // Private Methods
184
- // ============================================================================
185
- /**
186
- * Generate the initial planning prompt for Claude
187
- */
188
- generatePlanningPrompt(projectName, description, trustMode) {
189
- if (trustMode) {
190
- return `You are a project planning assistant. Create a detailed implementation plan for the following project:
191
-
192
- Project: ${projectName}
193
- ${description ? `Description: ${description}` : ''}
194
-
195
- Generate a comprehensive plan with:
196
- 1. A summary of the approach
197
- 2. A list of 3-8 concrete issues/tasks to implement this
198
- 3. For each issue, provide:
199
- - A clear title
200
- - A detailed description
201
- - Priority (0=none, 1=low, 2=medium, 3=high, 4=urgent)
202
- - An execution plan with specific steps
203
-
204
- Output your plan in the following format at the end:
205
- ===PLAN_START===
206
- {
207
- "summary": "...",
208
- "issues": [
209
- {
210
- "title": "...",
211
- "description": "...",
212
- "priority": 2,
213
- "plan": "Step 1: ...\\nStep 2: ..."
214
- }
215
- ],
216
- "risks": ["..."],
217
- "estimatedComplexity": "medium"
218
- }
219
- ===PLAN_END===`;
220
- }
221
- return `You are a project planning assistant. I need help planning the following project:
222
-
223
- Project: ${projectName}
224
- ${description ? `Description: ${description}` : ''}
225
-
226
- Please ask me clarifying questions one at a time to understand:
227
- - The scope and requirements
228
- - Technical constraints or preferences
229
- - Priority and timeline
230
-
231
- Format each question like this:
232
- ===QUESTION===
233
- {
234
- "id": "q1",
235
- "question": "Your question here?",
236
- "type": "text",
237
- "context": "Why you're asking this"
238
- }
239
- ===END_QUESTION===
240
-
241
- After gathering enough information (3-5 questions), generate a plan with format:
242
- ===PLAN_START===
243
- {
244
- "summary": "...",
245
- "issues": [...],
246
- "risks": ["..."],
247
- "estimatedComplexity": "low|medium|high"
248
- }
249
- ===PLAN_END===`;
250
- }
251
- /**
252
- * Parse terminal output for structured data (questions, plan)
253
- */
254
- parseTerminalOutput(sessionId) {
255
- const session = this.sessions.get(sessionId);
256
- if (!session)
257
- return;
258
- const output = session.outputBuffer;
259
- // Look for questions
260
- const questionMatch = output.match(/===QUESTION===\s*([\s\S]*?)\s*===END_QUESTION===/);
261
- if (questionMatch && !session.isWaitingForResponse) {
262
- try {
263
- const questionJson = questionMatch[1].trim();
264
- const question = JSON.parse(questionJson);
265
- session.questions.push(question);
266
- session.isWaitingForResponse = true;
267
- session.phase = 'gathering';
268
- // Clear the matched portion from buffer
269
- session.outputBuffer = output.replace(questionMatch[0], '');
270
- this.emit('question', sessionId, question);
271
- this.emit('phase-change', sessionId, 'gathering');
272
- }
273
- catch (e) {
274
- console.error('[Planner] Failed to parse question:', e);
275
- }
276
- }
277
- // Look for plan
278
- const planMatch = output.match(/===PLAN_START===\s*([\s\S]*?)\s*===PLAN_END===/);
279
- if (planMatch) {
280
- try {
281
- const planJson = planMatch[1].trim();
282
- const plan = JSON.parse(planJson);
283
- session.generatedPlan = plan;
284
- session.phase = 'review';
285
- // Clear the matched portion from buffer
286
- session.outputBuffer = output.replace(planMatch[0], '');
287
- this.emit('plan-ready', sessionId, plan);
288
- this.emit('phase-change', sessionId, 'review');
289
- }
290
- catch (e) {
291
- console.error('[Planner] Failed to parse plan:', e);
292
- }
293
- }
294
- }
295
- }
296
- // Singleton instance
297
- export const plannerService = new PlannerService();
298
- //# sourceMappingURL=planner.js.map