pi-mission-control 0.0.0-dev

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 (110) hide show
  1. package/README.md +205 -0
  2. package/agents/auditor.md +45 -0
  3. package/agents/worker.md +44 -0
  4. package/dist/index.d.ts +9 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +526 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/state.d.ts +265 -0
  9. package/dist/state.d.ts.map +1 -0
  10. package/dist/state.js +474 -0
  11. package/dist/state.js.map +1 -0
  12. package/dist/tools/add-phase.d.ts +28 -0
  13. package/dist/tools/add-phase.d.ts.map +1 -0
  14. package/dist/tools/add-phase.js +69 -0
  15. package/dist/tools/add-phase.js.map +1 -0
  16. package/dist/tools/add-task.d.ts +30 -0
  17. package/dist/tools/add-task.d.ts.map +1 -0
  18. package/dist/tools/add-task.js +85 -0
  19. package/dist/tools/add-task.js.map +1 -0
  20. package/dist/tools/index.d.ts +13 -0
  21. package/dist/tools/index.d.ts.map +1 -0
  22. package/dist/tools/index.js +16 -0
  23. package/dist/tools/index.js.map +1 -0
  24. package/dist/tools/init.d.ts +34 -0
  25. package/dist/tools/init.d.ts.map +1 -0
  26. package/dist/tools/init.js +75 -0
  27. package/dist/tools/init.js.map +1 -0
  28. package/dist/tools/mission-complete.d.ts +30 -0
  29. package/dist/tools/mission-complete.d.ts.map +1 -0
  30. package/dist/tools/mission-complete.js +85 -0
  31. package/dist/tools/mission-complete.js.map +1 -0
  32. package/dist/tools/mission-resume.d.ts +35 -0
  33. package/dist/tools/mission-resume.d.ts.map +1 -0
  34. package/dist/tools/mission-resume.js +87 -0
  35. package/dist/tools/mission-resume.js.map +1 -0
  36. package/dist/tools/scaffold.d.ts +24 -0
  37. package/dist/tools/scaffold.d.ts.map +1 -0
  38. package/dist/tools/scaffold.js +129 -0
  39. package/dist/tools/scaffold.js.map +1 -0
  40. package/dist/tools/update-phase.d.ts +33 -0
  41. package/dist/tools/update-phase.d.ts.map +1 -0
  42. package/dist/tools/update-phase.js +101 -0
  43. package/dist/tools/update-phase.js.map +1 -0
  44. package/dist/tools/update-task.d.ts +34 -0
  45. package/dist/tools/update-task.d.ts.map +1 -0
  46. package/dist/tools/update-task.js +104 -0
  47. package/dist/tools/update-task.js.map +1 -0
  48. package/dist/tui/dashboard.d.ts +146 -0
  49. package/dist/tui/dashboard.d.ts.map +1 -0
  50. package/dist/tui/dashboard.js +381 -0
  51. package/dist/tui/dashboard.js.map +1 -0
  52. package/dist/tui/header.d.ts +39 -0
  53. package/dist/tui/header.d.ts.map +1 -0
  54. package/dist/tui/header.js +62 -0
  55. package/dist/tui/header.js.map +1 -0
  56. package/dist/tui/idle-view.d.ts +44 -0
  57. package/dist/tui/idle-view.d.ts.map +1 -0
  58. package/dist/tui/idle-view.js +87 -0
  59. package/dist/tui/idle-view.js.map +1 -0
  60. package/dist/tui/index.d.ts +13 -0
  61. package/dist/tui/index.d.ts.map +1 -0
  62. package/dist/tui/index.js +15 -0
  63. package/dist/tui/index.js.map +1 -0
  64. package/dist/tui/past-runs.d.ts +49 -0
  65. package/dist/tui/past-runs.d.ts.map +1 -0
  66. package/dist/tui/past-runs.js +207 -0
  67. package/dist/tui/past-runs.js.map +1 -0
  68. package/dist/tui/phases-panel.d.ts +46 -0
  69. package/dist/tui/phases-panel.d.ts.map +1 -0
  70. package/dist/tui/phases-panel.js +161 -0
  71. package/dist/tui/phases-panel.js.map +1 -0
  72. package/dist/tui/progress-bar.d.ts +37 -0
  73. package/dist/tui/progress-bar.d.ts.map +1 -0
  74. package/dist/tui/progress-bar.js +123 -0
  75. package/dist/tui/progress-bar.js.map +1 -0
  76. package/dist/tui/styles.d.ts +8 -0
  77. package/dist/tui/styles.d.ts.map +1 -0
  78. package/dist/tui/styles.js +22 -0
  79. package/dist/tui/styles.js.map +1 -0
  80. package/dist/tui/tasks-panel.d.ts +48 -0
  81. package/dist/tui/tasks-panel.d.ts.map +1 -0
  82. package/dist/tui/tasks-panel.js +191 -0
  83. package/dist/tui/tasks-panel.js.map +1 -0
  84. package/package.json +42 -0
  85. package/skills/mission-memory/SKILL.md +88 -0
  86. package/skills/mission-orchestrator/SKILL.md +167 -0
  87. package/skills/mission-pm/SKILL.md +83 -0
  88. package/skills/mission-research/SKILL.md +66 -0
  89. package/skills/mission-tech-lead/SKILL.md +68 -0
  90. package/src/index.ts +659 -0
  91. package/src/state.ts +623 -0
  92. package/src/tools/add-phase.ts +98 -0
  93. package/src/tools/add-task.ts +121 -0
  94. package/src/tools/index.ts +18 -0
  95. package/src/tools/init.ts +109 -0
  96. package/src/tools/mission-complete.ts +118 -0
  97. package/src/tools/mission-resume.ts +119 -0
  98. package/src/tools/scaffold.ts +167 -0
  99. package/src/tools/update-phase.ts +140 -0
  100. package/src/tools/update-task.ts +145 -0
  101. package/src/tui/dashboard.ts +441 -0
  102. package/src/tui/header.ts +85 -0
  103. package/src/tui/idle-view.ts +114 -0
  104. package/src/tui/index.ts +20 -0
  105. package/src/tui/past-runs.ts +261 -0
  106. package/src/tui/phases-panel.ts +199 -0
  107. package/src/tui/progress-bar.ts +152 -0
  108. package/src/tui/styles.ts +27 -0
  109. package/src/tui/tasks-panel.ts +228 -0
  110. package/templates/state.json +5 -0
package/dist/state.js ADDED
@@ -0,0 +1,474 @@
1
+ /**
2
+ * State types and file helpers for mission-control
3
+ *
4
+ * Types for state.json, run.json, and file read/write operations.
5
+ * All tool mutations go through here.
6
+ */
7
+ import * as fs from "fs";
8
+ import * as path from "path";
9
+ // ============================================================================
10
+ // Default State Values
11
+ // ============================================================================
12
+ export const defaultState = {
13
+ active_run_id: null,
14
+ current_phase: "idle",
15
+ current_status_message: ""
16
+ };
17
+ // ============================================================================
18
+ // Path Helpers
19
+ // ============================================================================
20
+ /**
21
+ * Get the project root (cwd)
22
+ */
23
+ export function getProjectRoot() {
24
+ return process.cwd();
25
+ }
26
+ /**
27
+ * Get the base mission-control directory path
28
+ */
29
+ export function getMissionControlDir() {
30
+ return path.join(getProjectRoot(), ".pi", "mission-control");
31
+ }
32
+ /**
33
+ * Get the state.json file path
34
+ */
35
+ export function getStateFilePath() {
36
+ return path.join(getMissionControlDir(), "state.json");
37
+ }
38
+ /**
39
+ * Get the memory directory path
40
+ */
41
+ export function getMemoryDir() {
42
+ return path.join(getMissionControlDir(), "memory");
43
+ }
44
+ /**
45
+ * Get the long-term memory file path
46
+ */
47
+ export function getLongTermMemoryPath() {
48
+ return path.join(getMemoryDir(), "long_term.md");
49
+ }
50
+ /**
51
+ * Get the runs directory path
52
+ */
53
+ export function getRunsDir() {
54
+ return path.join(getMissionControlDir(), "runs");
55
+ }
56
+ /**
57
+ * Get a specific run directory path
58
+ */
59
+ export function getRunDir(runId) {
60
+ return path.join(getRunsDir(), runId);
61
+ }
62
+ /**
63
+ * Get the run.json file path for a specific run
64
+ */
65
+ export function getRunFilePath(runId) {
66
+ return path.join(getRunDir(runId), "run.json");
67
+ }
68
+ /**
69
+ * Get the tasks directory path for a specific run
70
+ */
71
+ export function getTasksDir(runId) {
72
+ return path.join(getRunDir(runId), "tasks");
73
+ }
74
+ /**
75
+ * Get a specific task directory path
76
+ */
77
+ export function getTaskDir(runId, taskId) {
78
+ return path.join(getTasksDir(runId), taskId);
79
+ }
80
+ // ============================================================================
81
+ // File I/O Helpers
82
+ // ============================================================================
83
+ /**
84
+ * Ensure a directory exists (recursive)
85
+ */
86
+ export function ensureDir(dirPath) {
87
+ if (!fs.existsSync(dirPath)) {
88
+ fs.mkdirSync(dirPath, { recursive: true });
89
+ }
90
+ }
91
+ /**
92
+ * Read and parse JSON file
93
+ */
94
+ export function readJson(filePath) {
95
+ try {
96
+ if (!fs.existsSync(filePath)) {
97
+ return null;
98
+ }
99
+ const content = fs.readFileSync(filePath, "utf-8");
100
+ return JSON.parse(content);
101
+ }
102
+ catch (error) {
103
+ console.error(`Error reading JSON file ${filePath}:`, error);
104
+ return null;
105
+ }
106
+ }
107
+ /**
108
+ * Write JSON file (with pretty formatting)
109
+ */
110
+ export function writeJson(filePath, data) {
111
+ ensureDir(path.dirname(filePath));
112
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
113
+ }
114
+ /**
115
+ * Read a text file
116
+ */
117
+ export function readText(filePath) {
118
+ try {
119
+ if (!fs.existsSync(filePath)) {
120
+ return null;
121
+ }
122
+ return fs.readFileSync(filePath, "utf-8");
123
+ }
124
+ catch (error) {
125
+ console.error(`Error reading text file ${filePath}:`, error);
126
+ return null;
127
+ }
128
+ }
129
+ /**
130
+ * Write a text file
131
+ */
132
+ export function writeText(filePath, content) {
133
+ ensureDir(path.dirname(filePath));
134
+ fs.writeFileSync(filePath, content, "utf-8");
135
+ }
136
+ /**
137
+ * Check if a file exists
138
+ */
139
+ export function fileExists(filePath) {
140
+ return fs.existsSync(filePath);
141
+ }
142
+ /**
143
+ * Copy a file from source to destination (skip if exists when specified)
144
+ */
145
+ export function copyFile(src, dest, skipIfExists = false) {
146
+ if (skipIfExists && fs.existsSync(dest)) {
147
+ return false;
148
+ }
149
+ ensureDir(path.dirname(dest));
150
+ fs.copyFileSync(src, dest);
151
+ return true;
152
+ }
153
+ /**
154
+ * Copy a directory recursively (skip existing files when specified)
155
+ * Returns count of files copied
156
+ */
157
+ export function copyDir(src, dest, skipIfExists = false) {
158
+ if (!fs.existsSync(src)) {
159
+ return 0;
160
+ }
161
+ ensureDir(dest);
162
+ let copiedCount = 0;
163
+ const entries = fs.readdirSync(src, { withFileTypes: true });
164
+ for (const entry of entries) {
165
+ const srcPath = path.join(src, entry.name);
166
+ const destPath = path.join(dest, entry.name);
167
+ if (entry.isDirectory()) {
168
+ copiedCount += copyDir(srcPath, destPath, skipIfExists);
169
+ }
170
+ else if (entry.isFile()) {
171
+ if (copyFile(srcPath, destPath, skipIfExists)) {
172
+ copiedCount++;
173
+ }
174
+ }
175
+ }
176
+ return copiedCount;
177
+ }
178
+ // ============================================================================
179
+ // State File Operations
180
+ // ============================================================================
181
+ /**
182
+ * Read the current state.json
183
+ * Returns default state if file doesn't exist
184
+ */
185
+ export function readState() {
186
+ const statePath = getStateFilePath();
187
+ const state = readJson(statePath);
188
+ return state ?? { ...defaultState };
189
+ }
190
+ /**
191
+ * Write state.json
192
+ */
193
+ export function writeState(state) {
194
+ const statePath = getStateFilePath();
195
+ writeJson(statePath, state);
196
+ }
197
+ /**
198
+ * Update specific fields in state.json
199
+ */
200
+ export function updateState(updates) {
201
+ const state = readState();
202
+ const updatedState = { ...state, ...updates };
203
+ writeState(updatedState);
204
+ return updatedState;
205
+ }
206
+ // ============================================================================
207
+ // Run File Operations
208
+ // ============================================================================
209
+ /**
210
+ * Read a run.json file
211
+ */
212
+ export function readRun(runId) {
213
+ const runPath = getRunFilePath(runId);
214
+ return readJson(runPath);
215
+ }
216
+ /**
217
+ * Write a run.json file
218
+ */
219
+ export function writeRun(run) {
220
+ const runPath = getRunFilePath(run.run_id);
221
+ writeJson(runPath, run);
222
+ }
223
+ /**
224
+ * Update specific fields in a run
225
+ */
226
+ export function updateRun(runId, updates) {
227
+ const run = readRun(runId);
228
+ if (!run) {
229
+ return null;
230
+ }
231
+ const updatedRun = { ...run, ...updates };
232
+ writeRun(updatedRun);
233
+ return updatedRun;
234
+ }
235
+ // ============================================================================
236
+ // Timestamp Helpers
237
+ // ============================================================================
238
+ /**
239
+ * Get current ISO timestamp
240
+ */
241
+ export function getTimestamp() {
242
+ return new Date().toISOString();
243
+ }
244
+ /**
245
+ * Generate a run ID from current timestamp
246
+ * Format: run-YYYYMMDD-HHmmss
247
+ */
248
+ export function generateRunId() {
249
+ const now = new Date();
250
+ const date = now.toISOString().slice(0, 10).replace(/-/g, "");
251
+ const time = now.toTimeString().slice(0, 8).replace(/:/g, "");
252
+ return `run-${date}-${time}`;
253
+ }
254
+ // ============================================================================
255
+ // Phase Helpers
256
+ // ============================================================================
257
+ /**
258
+ * Find a phase by ID in a run
259
+ */
260
+ export function findPhase(run, phaseId) {
261
+ return run.phases.find(p => p.id === phaseId);
262
+ }
263
+ /**
264
+ * Generate the next phase ID
265
+ */
266
+ export function generatePhaseId(run) {
267
+ const phaseCount = run.phases.length;
268
+ return `phase${phaseCount + 1}`;
269
+ }
270
+ /**
271
+ * Create a new phase
272
+ */
273
+ export function createPhase(id, name, file) {
274
+ return {
275
+ id,
276
+ name,
277
+ status: "pending",
278
+ started_at: null,
279
+ finish_at: null,
280
+ file,
281
+ tasks: []
282
+ };
283
+ }
284
+ /**
285
+ * Add a phase to a run
286
+ */
287
+ export function addPhaseToRun(run, phase) {
288
+ return {
289
+ ...run,
290
+ phases: [...run.phases, phase]
291
+ };
292
+ }
293
+ /**
294
+ * Update a phase in a run
295
+ */
296
+ export function updatePhaseInRun(run, phaseId, updates) {
297
+ return {
298
+ ...run,
299
+ phases: run.phases.map(p => p.id === phaseId ? { ...p, ...updates } : p)
300
+ };
301
+ }
302
+ // ============================================================================
303
+ // Task Helpers
304
+ // ============================================================================
305
+ /**
306
+ * Find a task by ID in a run (searches all phases)
307
+ */
308
+ export function findTask(run, taskId) {
309
+ for (let phaseIndex = 0; phaseIndex < run.phases.length; phaseIndex++) {
310
+ const phase = run.phases[phaseIndex];
311
+ const taskIndex = phase.tasks.findIndex(t => t.id === taskId);
312
+ if (taskIndex !== -1) {
313
+ return { phase, task: phase.tasks[taskIndex], phaseIndex, taskIndex };
314
+ }
315
+ }
316
+ return null;
317
+ }
318
+ /**
319
+ * Generate the next task ID for a phase
320
+ */
321
+ export function generateTaskId(phase) {
322
+ const taskCount = phase.tasks.length;
323
+ return `${phase.id}-task${taskCount + 1}`;
324
+ }
325
+ /**
326
+ * Create a new task
327
+ */
328
+ export function createTask(id, name, file) {
329
+ const taskDir = path.join("tasks", id);
330
+ return {
331
+ id,
332
+ name,
333
+ status: "pending",
334
+ started_at: null,
335
+ finish_at: null,
336
+ file,
337
+ paths: {
338
+ contract: path.join(taskDir, "contract.md"),
339
+ worker_output: path.join(taskDir, "worker-output.md"),
340
+ auditor_report: path.join(taskDir, "auditor-report.md")
341
+ }
342
+ };
343
+ }
344
+ /**
345
+ * Add a task to a phase within a run
346
+ */
347
+ export function addTaskToRun(run, phaseId, task) {
348
+ return {
349
+ ...run,
350
+ phases: run.phases.map(p => p.id === phaseId
351
+ ? { ...p, tasks: [...p.tasks, task] }
352
+ : p)
353
+ };
354
+ }
355
+ /**
356
+ * Update a task in a run
357
+ */
358
+ export function updateTaskInRun(run, taskId, updates) {
359
+ return {
360
+ ...run,
361
+ phases: run.phases.map(p => ({
362
+ ...p,
363
+ tasks: p.tasks.map(t => t.id === taskId ? { ...t, ...updates } : t)
364
+ }))
365
+ };
366
+ }
367
+ /**
368
+ * Check if all tasks in a phase are done
369
+ */
370
+ export function areAllTasksDone(phase) {
371
+ if (phase.tasks.length === 0)
372
+ return false;
373
+ return phase.tasks.every(t => t.status === "done");
374
+ }
375
+ /**
376
+ * Check if all phases in a run are done
377
+ */
378
+ export function areAllPhasesDone(run) {
379
+ if (run.phases.length === 0)
380
+ return false;
381
+ return run.phases.every(p => p.status === "done");
382
+ }
383
+ // ============================================================================
384
+ // Run Discovery
385
+ // ============================================================================
386
+ /**
387
+ * List all run IDs in the runs directory
388
+ */
389
+ export function listRunIds() {
390
+ const runsDir = getRunsDir();
391
+ if (!fs.existsSync(runsDir)) {
392
+ return [];
393
+ }
394
+ return fs.readdirSync(runsDir, { withFileTypes: true })
395
+ .filter(entry => entry.isDirectory() && entry.name.startsWith("run-"))
396
+ .map(entry => entry.name)
397
+ .sort();
398
+ }
399
+ /**
400
+ * List all runs with their basic info
401
+ */
402
+ export function listRuns() {
403
+ const runIds = listRunIds();
404
+ return runIds.map(runId => ({
405
+ runId,
406
+ run: readRun(runId)
407
+ }));
408
+ }
409
+ // ============================================================================
410
+ // Scaffold Check
411
+ // ============================================================================
412
+ /**
413
+ * Check if mission-control has been scaffolded
414
+ */
415
+ export function isScaffolded() {
416
+ return fileExists(getMissionControlDir());
417
+ }
418
+ // ============================================================================
419
+ // Initialization Helpers
420
+ // ============================================================================
421
+ /**
422
+ * Create the initial run.json structure
423
+ */
424
+ export function createInitialRun(runId) {
425
+ const now = getTimestamp();
426
+ return {
427
+ run_id: runId,
428
+ started_at: now,
429
+ finish_at: null,
430
+ status: "in_progress",
431
+ artifacts: {
432
+ requirements: "00-requirements.md",
433
+ architecture: "01-architecture.md",
434
+ validation: "02-validation.md"
435
+ },
436
+ phases: []
437
+ };
438
+ }
439
+ /**
440
+ * Create the base mission-control directory structure
441
+ */
442
+ export function createBaseStructure() {
443
+ ensureDir(getMissionControlDir());
444
+ ensureDir(getMemoryDir());
445
+ ensureDir(getRunsDir());
446
+ }
447
+ /**
448
+ * Create a new run directory structure
449
+ */
450
+ export function createRunStructure(runId) {
451
+ const runDir = getRunDir(runId);
452
+ ensureDir(runDir);
453
+ ensureDir(getTasksDir(runId));
454
+ }
455
+ // ============================================================================
456
+ // Status Transition Logic
457
+ // ============================================================================
458
+ /**
459
+ * Get the appropriate timestamp field to update based on status
460
+ */
461
+ export function getTimestampForStatus(status, currentStatus) {
462
+ const now = getTimestamp();
463
+ // Transition to in_progress sets started_at
464
+ if (status === "in_progress" && currentStatus !== "in_progress") {
465
+ return { started_at: now };
466
+ }
467
+ // Transition to terminal state sets finish_at
468
+ const terminalStatuses = ["done", "failed", "removed"];
469
+ if (terminalStatuses.includes(status) && !terminalStatuses.includes(currentStatus)) {
470
+ return { finish_at: now };
471
+ }
472
+ return null;
473
+ }
474
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * add_phase tool
3
+ *
4
+ * Agent tool to add a new phase to the current mission run.
5
+ * Auto-generates phase_id ("phase1", "phase2", ...).
6
+ * Sets status to "pending".
7
+ *
8
+ * Used by: mission-pm skill
9
+ */
10
+ export interface AddPhaseParams {
11
+ name: string;
12
+ file: string;
13
+ }
14
+ export interface AddPhaseResult {
15
+ success: boolean;
16
+ message: string;
17
+ phaseId: string | null;
18
+ errors: string[];
19
+ }
20
+ /**
21
+ * Add a phase to the active mission run
22
+ *
23
+ * @param params.name - Human-readable phase name (e.g., "Auth Backend")
24
+ * @param params.file - Path to phase definition/reference file
25
+ * @returns Result with generated phase_id
26
+ */
27
+ export declare function addPhase(params: AddPhaseParams): AddPhaseResult;
28
+ //# sourceMappingURL=add-phase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-phase.d.ts","sourceRoot":"","sources":["../../src/tools/add-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CA2D/D"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * add_phase tool
3
+ *
4
+ * Agent tool to add a new phase to the current mission run.
5
+ * Auto-generates phase_id ("phase1", "phase2", ...).
6
+ * Sets status to "pending".
7
+ *
8
+ * Used by: mission-pm skill
9
+ */
10
+ import { readState, readRun, writeRun, generatePhaseId, createPhase, addPhaseToRun } from "../state.js";
11
+ /**
12
+ * Add a phase to the active mission run
13
+ *
14
+ * @param params.name - Human-readable phase name (e.g., "Auth Backend")
15
+ * @param params.file - Path to phase definition/reference file
16
+ * @returns Result with generated phase_id
17
+ */
18
+ export function addPhase(params) {
19
+ const result = {
20
+ success: false,
21
+ message: "",
22
+ phaseId: null,
23
+ errors: []
24
+ };
25
+ try {
26
+ // Validate parameters
27
+ if (!params.name || params.name.trim() === "") {
28
+ result.errors.push("Phase name is required");
29
+ result.message = "Failed to add phase: name is required";
30
+ return result;
31
+ }
32
+ if (!params.file || params.file.trim() === "") {
33
+ result.errors.push("Phase file is required");
34
+ result.message = "Failed to add phase: file is required";
35
+ return result;
36
+ }
37
+ // Get active run
38
+ const state = readState();
39
+ if (!state.active_run_id) {
40
+ result.errors.push("No active run");
41
+ result.message = "Failed to add phase: no active mission run";
42
+ return result;
43
+ }
44
+ // Read run.json
45
+ const run = readRun(state.active_run_id);
46
+ if (!run) {
47
+ result.errors.push(`Run not found: ${state.active_run_id}`);
48
+ result.message = "Failed to add phase: run not found";
49
+ return result;
50
+ }
51
+ // Generate phase ID
52
+ const phaseId = generatePhaseId(run);
53
+ // Create phase
54
+ const phase = createPhase(phaseId, params.name.trim(), params.file.trim());
55
+ // Add to run
56
+ const updatedRun = addPhaseToRun(run, phase);
57
+ writeRun(updatedRun);
58
+ result.success = true;
59
+ result.phaseId = phaseId;
60
+ result.message = `Phase added: ${phaseId} - ${params.name}`;
61
+ }
62
+ catch (error) {
63
+ result.success = false;
64
+ result.message = `Error adding phase: ${error instanceof Error ? error.message : String(error)}`;
65
+ result.errors.push(String(error));
66
+ }
67
+ return result;
68
+ }
69
+ //# sourceMappingURL=add-phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-phase.js","sourceRoot":"","sources":["../../src/tools/add-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AAcrB;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAsB;IAC7C,MAAM,MAAM,GAAmB;QAC7B,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,IAAI,CAAC;QACH,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,GAAG,uCAAuC,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,GAAG,uCAAuC,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,iBAAiB;QACjB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,GAAG,4CAA4C,CAAC;YAC9D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,gBAAgB;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,OAAO,GAAG,oCAAoC,CAAC;YACtD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,oBAAoB;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAErC,eAAe;QACf,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3E,aAAa;QACb,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,QAAQ,CAAC,UAAU,CAAC,CAAC;QAErB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,OAAO,GAAG,gBAAgB,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * add_task tool
3
+ *
4
+ * Agent tool to add a new task to a phase.
5
+ * Auto-generates task_id from phase prefix ("phase1-task1", "phase1-task2", ...).
6
+ * Sets status to "pending".
7
+ *
8
+ * Used by: mission-pm skill
9
+ */
10
+ export interface AddTaskParams {
11
+ phase_id: string;
12
+ name: string;
13
+ file: string;
14
+ }
15
+ export interface AddTaskResult {
16
+ success: boolean;
17
+ message: string;
18
+ taskId: string | null;
19
+ errors: string[];
20
+ }
21
+ /**
22
+ * Add a task to a phase in the active mission run
23
+ *
24
+ * @param params.phase_id - ID of the phase to add task to (e.g., "phase1")
25
+ * @param params.name - Human-readable task name (e.g., "Setup DB Schema")
26
+ * @param params.file - Path to task contract file
27
+ * @returns Result with generated task_id
28
+ */
29
+ export declare function addTask(params: AddTaskParams): AddTaskResult;
30
+ //# sourceMappingURL=add-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-task.d.ts","sourceRoot":"","sources":["../../src/tools/add-task.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CA6E5D"}