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.
- package/README.md +205 -0
- package/agents/auditor.md +45 -0
- package/agents/worker.md +44 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/dist/state.d.ts +265 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +474 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/add-phase.d.ts +28 -0
- package/dist/tools/add-phase.d.ts.map +1 -0
- package/dist/tools/add-phase.js +69 -0
- package/dist/tools/add-phase.js.map +1 -0
- package/dist/tools/add-task.d.ts +30 -0
- package/dist/tools/add-task.d.ts.map +1 -0
- package/dist/tools/add-task.js +85 -0
- package/dist/tools/add-task.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/init.d.ts +34 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +75 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/mission-complete.d.ts +30 -0
- package/dist/tools/mission-complete.d.ts.map +1 -0
- package/dist/tools/mission-complete.js +85 -0
- package/dist/tools/mission-complete.js.map +1 -0
- package/dist/tools/mission-resume.d.ts +35 -0
- package/dist/tools/mission-resume.d.ts.map +1 -0
- package/dist/tools/mission-resume.js +87 -0
- package/dist/tools/mission-resume.js.map +1 -0
- package/dist/tools/scaffold.d.ts +24 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +129 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/tools/update-phase.d.ts +33 -0
- package/dist/tools/update-phase.d.ts.map +1 -0
- package/dist/tools/update-phase.js +101 -0
- package/dist/tools/update-phase.js.map +1 -0
- package/dist/tools/update-task.d.ts +34 -0
- package/dist/tools/update-task.d.ts.map +1 -0
- package/dist/tools/update-task.js +104 -0
- package/dist/tools/update-task.js.map +1 -0
- package/dist/tui/dashboard.d.ts +146 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +381 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/header.d.ts +39 -0
- package/dist/tui/header.d.ts.map +1 -0
- package/dist/tui/header.js +62 -0
- package/dist/tui/header.js.map +1 -0
- package/dist/tui/idle-view.d.ts +44 -0
- package/dist/tui/idle-view.d.ts.map +1 -0
- package/dist/tui/idle-view.js +87 -0
- package/dist/tui/idle-view.js.map +1 -0
- package/dist/tui/index.d.ts +13 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +15 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/past-runs.d.ts +49 -0
- package/dist/tui/past-runs.d.ts.map +1 -0
- package/dist/tui/past-runs.js +207 -0
- package/dist/tui/past-runs.js.map +1 -0
- package/dist/tui/phases-panel.d.ts +46 -0
- package/dist/tui/phases-panel.d.ts.map +1 -0
- package/dist/tui/phases-panel.js +161 -0
- package/dist/tui/phases-panel.js.map +1 -0
- package/dist/tui/progress-bar.d.ts +37 -0
- package/dist/tui/progress-bar.d.ts.map +1 -0
- package/dist/tui/progress-bar.js +123 -0
- package/dist/tui/progress-bar.js.map +1 -0
- package/dist/tui/styles.d.ts +8 -0
- package/dist/tui/styles.d.ts.map +1 -0
- package/dist/tui/styles.js +22 -0
- package/dist/tui/styles.js.map +1 -0
- package/dist/tui/tasks-panel.d.ts +48 -0
- package/dist/tui/tasks-panel.d.ts.map +1 -0
- package/dist/tui/tasks-panel.js +191 -0
- package/dist/tui/tasks-panel.js.map +1 -0
- package/package.json +42 -0
- package/skills/mission-memory/SKILL.md +88 -0
- package/skills/mission-orchestrator/SKILL.md +167 -0
- package/skills/mission-pm/SKILL.md +83 -0
- package/skills/mission-research/SKILL.md +66 -0
- package/skills/mission-tech-lead/SKILL.md +68 -0
- package/src/index.ts +659 -0
- package/src/state.ts +623 -0
- package/src/tools/add-phase.ts +98 -0
- package/src/tools/add-task.ts +121 -0
- package/src/tools/index.ts +18 -0
- package/src/tools/init.ts +109 -0
- package/src/tools/mission-complete.ts +118 -0
- package/src/tools/mission-resume.ts +119 -0
- package/src/tools/scaffold.ts +167 -0
- package/src/tools/update-phase.ts +140 -0
- package/src/tools/update-task.ts +145 -0
- package/src/tui/dashboard.ts +441 -0
- package/src/tui/header.ts +85 -0
- package/src/tui/idle-view.ts +114 -0
- package/src/tui/index.ts +20 -0
- package/src/tui/past-runs.ts +261 -0
- package/src/tui/phases-panel.ts +199 -0
- package/src/tui/progress-bar.ts +152 -0
- package/src/tui/styles.ts +27 -0
- package/src/tui/tasks-panel.ts +228 -0
- package/templates/state.json +5 -0
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
import { readState, readRun, writeRun, findPhase, generateTaskId, createTask, addTaskToRun, ensureDir, getTaskDir } from "../state.js";
|
|
11
|
+
/**
|
|
12
|
+
* Add a task to a phase in the active mission run
|
|
13
|
+
*
|
|
14
|
+
* @param params.phase_id - ID of the phase to add task to (e.g., "phase1")
|
|
15
|
+
* @param params.name - Human-readable task name (e.g., "Setup DB Schema")
|
|
16
|
+
* @param params.file - Path to task contract file
|
|
17
|
+
* @returns Result with generated task_id
|
|
18
|
+
*/
|
|
19
|
+
export function addTask(params) {
|
|
20
|
+
const result = {
|
|
21
|
+
success: false,
|
|
22
|
+
message: "",
|
|
23
|
+
taskId: null,
|
|
24
|
+
errors: []
|
|
25
|
+
};
|
|
26
|
+
try {
|
|
27
|
+
// Validate parameters
|
|
28
|
+
if (!params.phase_id || params.phase_id.trim() === "") {
|
|
29
|
+
result.errors.push("Phase ID is required");
|
|
30
|
+
result.message = "Failed to add task: phase_id is required";
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
if (!params.name || params.name.trim() === "") {
|
|
34
|
+
result.errors.push("Task name is required");
|
|
35
|
+
result.message = "Failed to add task: name is required";
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
if (!params.file || params.file.trim() === "") {
|
|
39
|
+
result.errors.push("Task file is required");
|
|
40
|
+
result.message = "Failed to add task: file is required";
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
// Get active run
|
|
44
|
+
const state = readState();
|
|
45
|
+
if (!state.active_run_id) {
|
|
46
|
+
result.errors.push("No active run");
|
|
47
|
+
result.message = "Failed to add task: no active mission run";
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
// Read run.json
|
|
51
|
+
const run = readRun(state.active_run_id);
|
|
52
|
+
if (!run) {
|
|
53
|
+
result.errors.push(`Run not found: ${state.active_run_id}`);
|
|
54
|
+
result.message = "Failed to add task: run not found";
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
// Find phase
|
|
58
|
+
const phase = findPhase(run, params.phase_id.trim());
|
|
59
|
+
if (!phase) {
|
|
60
|
+
result.errors.push(`Phase not found: ${params.phase_id}`);
|
|
61
|
+
result.message = "Failed to add task: phase not found";
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// Generate task ID
|
|
65
|
+
const taskId = generateTaskId(phase);
|
|
66
|
+
// Create task
|
|
67
|
+
const task = createTask(taskId, params.name.trim(), params.file.trim());
|
|
68
|
+
// Add to run
|
|
69
|
+
const updatedRun = addTaskToRun(run, params.phase_id.trim(), task);
|
|
70
|
+
writeRun(updatedRun);
|
|
71
|
+
// Create task directory
|
|
72
|
+
const taskDir = getTaskDir(state.active_run_id, taskId);
|
|
73
|
+
ensureDir(taskDir);
|
|
74
|
+
result.success = true;
|
|
75
|
+
result.taskId = taskId;
|
|
76
|
+
result.message = `Task added: ${taskId} - ${params.name}`;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
result.success = false;
|
|
80
|
+
result.message = `Error adding task: ${error instanceof Error ? error.message : String(error)}`;
|
|
81
|
+
result.errors.push(String(error));
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=add-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-task.js","sourceRoot":"","sources":["../../src/tools/add-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools index - exports all mission-control tools
|
|
3
|
+
*/
|
|
4
|
+
export { isScaffolded } from "../state.js";
|
|
5
|
+
export { missionScaffold, type ScaffoldResult } from "./scaffold.js";
|
|
6
|
+
export { missionInit, type InitOptions, type InitResult } from "./init.js";
|
|
7
|
+
export { addPhase, type AddPhaseParams, type AddPhaseResult } from "./add-phase.js";
|
|
8
|
+
export { addTask, type AddTaskParams, type AddTaskResult } from "./add-task.js";
|
|
9
|
+
export { updatePhase, type UpdatePhaseParams, type UpdatePhaseResult } from "./update-phase.js";
|
|
10
|
+
export { updateTask, type UpdateTaskParams, type UpdateTaskResult } from "./update-task.js";
|
|
11
|
+
export { missionComplete, type MissionCompleteParams, type MissionCompleteResult } from "./mission-complete.js";
|
|
12
|
+
export { missionResume, type MissionResumeParams, type MissionResumeResult } from "./mission-resume.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAG3E,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools index - exports all mission-control tools
|
|
3
|
+
*/
|
|
4
|
+
// Re-export isScaffolded from state
|
|
5
|
+
export { isScaffolded } from "../state.js";
|
|
6
|
+
// Command-only tools (called by /mission, not exposed to agents)
|
|
7
|
+
export { missionScaffold } from "./scaffold.js";
|
|
8
|
+
export { missionInit } from "./init.js";
|
|
9
|
+
// Agent tools (registered for LLM use)
|
|
10
|
+
export { addPhase } from "./add-phase.js";
|
|
11
|
+
export { addTask } from "./add-task.js";
|
|
12
|
+
export { updatePhase } from "./update-phase.js";
|
|
13
|
+
export { updateTask } from "./update-task.js";
|
|
14
|
+
export { missionComplete } from "./mission-complete.js";
|
|
15
|
+
export { missionResume } from "./mission-resume.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,iEAAiE;AACjE,OAAO,EAAE,eAAe,EAAuB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,WAAW,EAAqC,MAAM,WAAW,CAAC;AAE3E,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAA4C,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,OAAO,EAA0C,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAkD,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAgD,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAA0D,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,aAAa,EAAsD,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_init tool
|
|
3
|
+
*
|
|
4
|
+
* Creates a new mission run directory with run.json and updates state.json.
|
|
5
|
+
* Called when user clicks "Init new mission" button.
|
|
6
|
+
*
|
|
7
|
+
* This is a command-only tool (not exposed to agents).
|
|
8
|
+
*/
|
|
9
|
+
export interface InitOptions {
|
|
10
|
+
runId?: string;
|
|
11
|
+
phase?: string;
|
|
12
|
+
statusMessage?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface InitResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
runId: string | null;
|
|
18
|
+
runDir: string | null;
|
|
19
|
+
errors: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize a new mission run
|
|
23
|
+
*
|
|
24
|
+
* Creates:
|
|
25
|
+
* - run directory: .pi/mission-control/runs/<run-id>/
|
|
26
|
+
* - run.json with initial structure
|
|
27
|
+
* - empty artifact files (00-requirements.md, etc.)
|
|
28
|
+
* - tasks directory
|
|
29
|
+
*
|
|
30
|
+
* Updates:
|
|
31
|
+
* - state.json with active_run_id
|
|
32
|
+
*/
|
|
33
|
+
export declare function missionInit(options?: InitOptions): InitResult;
|
|
34
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CA6DjE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_init tool
|
|
3
|
+
*
|
|
4
|
+
* Creates a new mission run directory with run.json and updates state.json.
|
|
5
|
+
* Called when user clicks "Init new mission" button.
|
|
6
|
+
*
|
|
7
|
+
* This is a command-only tool (not exposed to agents).
|
|
8
|
+
*/
|
|
9
|
+
import { generateRunId, createInitialRun, createRunStructure, writeRun, updateState, readState, writeText, getRunDir, isScaffolded } from "../state.js";
|
|
10
|
+
/**
|
|
11
|
+
* Initialize a new mission run
|
|
12
|
+
*
|
|
13
|
+
* Creates:
|
|
14
|
+
* - run directory: .pi/mission-control/runs/<run-id>/
|
|
15
|
+
* - run.json with initial structure
|
|
16
|
+
* - empty artifact files (00-requirements.md, etc.)
|
|
17
|
+
* - tasks directory
|
|
18
|
+
*
|
|
19
|
+
* Updates:
|
|
20
|
+
* - state.json with active_run_id
|
|
21
|
+
*/
|
|
22
|
+
export function missionInit(options = {}) {
|
|
23
|
+
const result = {
|
|
24
|
+
success: false,
|
|
25
|
+
message: "",
|
|
26
|
+
runId: null,
|
|
27
|
+
runDir: null,
|
|
28
|
+
errors: []
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
// Check if scaffolding exists
|
|
32
|
+
if (!isScaffolded()) {
|
|
33
|
+
result.errors.push("Mission Control not scaffolded. Run scaffold first.");
|
|
34
|
+
result.message = "Initialization failed: scaffolding required";
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
// Check if there's already an active run
|
|
38
|
+
const currentState = readState();
|
|
39
|
+
if (currentState.active_run_id) {
|
|
40
|
+
result.errors.push(`Active run exists: ${currentState.active_run_id}. Complete or resume it first.`);
|
|
41
|
+
result.message = "Initialization failed: another run is active";
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
// Generate run ID
|
|
45
|
+
const runId = options.runId || generateRunId();
|
|
46
|
+
result.runId = runId;
|
|
47
|
+
// Create run structure
|
|
48
|
+
createRunStructure(runId);
|
|
49
|
+
result.runDir = getRunDir(runId);
|
|
50
|
+
// Create initial run.json
|
|
51
|
+
const run = createInitialRun(runId);
|
|
52
|
+
writeRun(run);
|
|
53
|
+
// Create empty artifact files
|
|
54
|
+
const runDir = getRunDir(runId);
|
|
55
|
+
writeText(`${runDir}/00-requirements.md`, `# Requirements\n\nRun ID: ${runId}\nCreated: ${run.started_at}\n\n<!-- Requirements will be written here by mission-orchestrator skill -->\n`);
|
|
56
|
+
writeText(`${runDir}/01-architecture.md`, `# Architecture\n\nRun ID: ${runId}\n\n<!-- Architecture will be written here by mission-tech-lead skill -->\n`);
|
|
57
|
+
writeText(`${runDir}/02-validation.md`, `# Validation Contract\n\nRun ID: ${runId}\n\n<!-- Validation criteria will be written here by mission-tech-lead skill -->\n`);
|
|
58
|
+
writeText(`${runDir}/short_term_memory.md`, `# Short-term Memory\n\nRun ID: ${runId}\n\n<!-- Learnings from this run will be accumulated here -->\n`);
|
|
59
|
+
// Update state.json
|
|
60
|
+
updateState({
|
|
61
|
+
active_run_id: runId,
|
|
62
|
+
current_phase: options.phase || "research",
|
|
63
|
+
current_status_message: options.statusMessage || "Mission initialized - waiting for requirements"
|
|
64
|
+
});
|
|
65
|
+
result.success = true;
|
|
66
|
+
result.message = `Mission initialized: ${runId}`;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
result.success = false;
|
|
70
|
+
result.message = `Initialization error: ${error instanceof Error ? error.message : String(error)}`;
|
|
71
|
+
result.errors.push(String(error));
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACb,MAAM,aAAa,CAAC;AAgBrB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,UAAuB,EAAE;IACnD,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,IAAI,CAAC;QACH,8BAA8B;QAC9B,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC1E,MAAM,CAAC,OAAO,GAAG,6CAA6C,CAAC;YAC/D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,SAAS,EAAE,CAAC;QACjC,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,YAAY,CAAC,aAAa,gCAAgC,CAAC,CAAC;YACrG,MAAM,CAAC,OAAO,GAAG,8CAA8C,CAAC;YAChE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;QAC/C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAErB,uBAAuB;QACvB,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,0BAA0B;QAC1B,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEd,8BAA8B;QAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,SAAS,CAAC,GAAG,MAAM,qBAAqB,EAAE,6BAA6B,KAAK,cAAc,GAAG,CAAC,UAAU,gFAAgF,CAAC,CAAC;QAC1L,SAAS,CAAC,GAAG,MAAM,qBAAqB,EAAE,6BAA6B,KAAK,6EAA6E,CAAC,CAAC;QAC3J,SAAS,CAAC,GAAG,MAAM,mBAAmB,EAAE,oCAAoC,KAAK,oFAAoF,CAAC,CAAC;QACvK,SAAS,CAAC,GAAG,MAAM,uBAAuB,EAAE,kCAAkC,KAAK,iEAAiE,CAAC,CAAC;QAEtJ,oBAAoB;QACpB,WAAW,CAAC;YACV,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;YAC1C,sBAAsB,EAAE,OAAO,CAAC,aAAa,IAAI,gDAAgD;SAClG,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,OAAO,GAAG,wBAAwB,KAAK,EAAE,CAAC;IAEnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnG,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
|
+
* mission_complete tool
|
|
3
|
+
*
|
|
4
|
+
* Agent tool to mark a mission run as complete.
|
|
5
|
+
* Sets run.json status to "done" and finish_at timestamp.
|
|
6
|
+
* Clears active_run_id from state.json.
|
|
7
|
+
*
|
|
8
|
+
* Used by: mission-orchestrator skill
|
|
9
|
+
*/
|
|
10
|
+
import { RunStatus } from "../state.js";
|
|
11
|
+
export interface MissionCompleteParams {
|
|
12
|
+
run_id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MissionCompleteResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
runId: string | null;
|
|
18
|
+
previousStatus: RunStatus | null;
|
|
19
|
+
newStatus: RunStatus;
|
|
20
|
+
finishAt: string;
|
|
21
|
+
errors: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Mark a mission run as complete
|
|
25
|
+
*
|
|
26
|
+
* @param params.run_id - ID of the run to complete
|
|
27
|
+
* @returns Result with completion info
|
|
28
|
+
*/
|
|
29
|
+
export declare function missionComplete(params: MissionCompleteParams): MissionCompleteResult;
|
|
30
|
+
//# sourceMappingURL=mission-complete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission-complete.d.ts","sourceRoot":"","sources":["../../src/tools/mission-complete.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAML,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,CA8EpF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_complete tool
|
|
3
|
+
*
|
|
4
|
+
* Agent tool to mark a mission run as complete.
|
|
5
|
+
* Sets run.json status to "done" and finish_at timestamp.
|
|
6
|
+
* Clears active_run_id from state.json.
|
|
7
|
+
*
|
|
8
|
+
* Used by: mission-orchestrator skill
|
|
9
|
+
*/
|
|
10
|
+
import { readState, readRun, writeRun, updateState, getTimestamp } from "../state.js";
|
|
11
|
+
/**
|
|
12
|
+
* Mark a mission run as complete
|
|
13
|
+
*
|
|
14
|
+
* @param params.run_id - ID of the run to complete
|
|
15
|
+
* @returns Result with completion info
|
|
16
|
+
*/
|
|
17
|
+
export function missionComplete(params) {
|
|
18
|
+
const result = {
|
|
19
|
+
success: false,
|
|
20
|
+
message: "",
|
|
21
|
+
runId: null,
|
|
22
|
+
previousStatus: null,
|
|
23
|
+
newStatus: "done",
|
|
24
|
+
finishAt: "",
|
|
25
|
+
errors: []
|
|
26
|
+
};
|
|
27
|
+
try {
|
|
28
|
+
// Validate parameters
|
|
29
|
+
if (!params.run_id || params.run_id.trim() === "") {
|
|
30
|
+
result.errors.push("Run ID is required");
|
|
31
|
+
result.message = "Failed to complete mission: run_id is required";
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
const runId = params.run_id.trim();
|
|
35
|
+
result.runId = runId;
|
|
36
|
+
// Read the run
|
|
37
|
+
const run = readRun(runId);
|
|
38
|
+
if (!run) {
|
|
39
|
+
result.errors.push(`Run not found: ${runId}`);
|
|
40
|
+
result.message = "Failed to complete mission: run not found";
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
result.previousStatus = run.status;
|
|
44
|
+
// Check if run is already completed
|
|
45
|
+
if (run.status === "done") {
|
|
46
|
+
result.success = true;
|
|
47
|
+
result.message = `Mission ${runId} is already complete`;
|
|
48
|
+
result.finishAt = run.finish_at || getTimestamp();
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
// Check if run is in a state that can be completed
|
|
52
|
+
if (run.status === "failed") {
|
|
53
|
+
result.errors.push(`Run ${runId} has failed status and cannot be marked complete`);
|
|
54
|
+
result.message = "Failed to complete mission: run has failed status";
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
const now = getTimestamp();
|
|
58
|
+
result.finishAt = now;
|
|
59
|
+
// Update run.json
|
|
60
|
+
const updatedRun = {
|
|
61
|
+
...run,
|
|
62
|
+
status: "done",
|
|
63
|
+
finish_at: now
|
|
64
|
+
};
|
|
65
|
+
writeRun(updatedRun);
|
|
66
|
+
// Clear active_run_id from state.json if it matches
|
|
67
|
+
const state = readState();
|
|
68
|
+
if (state.active_run_id === runId) {
|
|
69
|
+
updateState({
|
|
70
|
+
active_run_id: null,
|
|
71
|
+
current_phase: "idle",
|
|
72
|
+
current_status_message: "Mission complete"
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
result.success = true;
|
|
76
|
+
result.message = `Mission ${runId} marked as complete`;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
result.success = false;
|
|
80
|
+
result.message = `Error completing mission: ${error instanceof Error ? error.message : String(error)}`;
|
|
81
|
+
result.errors.push(String(error));
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=mission-complete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission-complete.js","sourceRoot":"","sources":["../../src/tools/mission-complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_resume tool
|
|
3
|
+
*
|
|
4
|
+
* Agent tool to resume a previously created mission run.
|
|
5
|
+
* Sets state.json active_run_id to the specified run_id.
|
|
6
|
+
*
|
|
7
|
+
* Used by: mission-orchestrator skill (when user asks to resume)
|
|
8
|
+
*/
|
|
9
|
+
import { RunStatus } from "../state.js";
|
|
10
|
+
export interface MissionResumeParams {
|
|
11
|
+
run_id: string;
|
|
12
|
+
phase?: string;
|
|
13
|
+
statusMessage?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface MissionResumeResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
message: string;
|
|
18
|
+
runId: string | null;
|
|
19
|
+
runStatus: RunStatus | null;
|
|
20
|
+
previousActiveRunId: string | null;
|
|
21
|
+
errors: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resume a mission run
|
|
25
|
+
*
|
|
26
|
+
* Sets the specified run as the active run in state.json.
|
|
27
|
+
* Fails if there's already a different active run.
|
|
28
|
+
*
|
|
29
|
+
* @param params.run_id - ID of the run to resume
|
|
30
|
+
* @param params.phase - Optional phase to set as current (defaults to run's current state)
|
|
31
|
+
* @param params.statusMessage - Optional status message
|
|
32
|
+
* @returns Result with resume info
|
|
33
|
+
*/
|
|
34
|
+
export declare function missionResume(params: MissionResumeParams): MissionResumeResult;
|
|
35
|
+
//# sourceMappingURL=mission-resume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission-resume.d.ts","sourceRoot":"","sources":["../../src/tools/mission-resume.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAIL,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CA4E9E"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_resume tool
|
|
3
|
+
*
|
|
4
|
+
* Agent tool to resume a previously created mission run.
|
|
5
|
+
* Sets state.json active_run_id to the specified run_id.
|
|
6
|
+
*
|
|
7
|
+
* Used by: mission-orchestrator skill (when user asks to resume)
|
|
8
|
+
*/
|
|
9
|
+
import { readState, readRun, updateState } from "../state.js";
|
|
10
|
+
/**
|
|
11
|
+
* Resume a mission run
|
|
12
|
+
*
|
|
13
|
+
* Sets the specified run as the active run in state.json.
|
|
14
|
+
* Fails if there's already a different active run.
|
|
15
|
+
*
|
|
16
|
+
* @param params.run_id - ID of the run to resume
|
|
17
|
+
* @param params.phase - Optional phase to set as current (defaults to run's current state)
|
|
18
|
+
* @param params.statusMessage - Optional status message
|
|
19
|
+
* @returns Result with resume info
|
|
20
|
+
*/
|
|
21
|
+
export function missionResume(params) {
|
|
22
|
+
const result = {
|
|
23
|
+
success: false,
|
|
24
|
+
message: "",
|
|
25
|
+
runId: null,
|
|
26
|
+
runStatus: null,
|
|
27
|
+
previousActiveRunId: null,
|
|
28
|
+
errors: []
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
// Validate parameters
|
|
32
|
+
if (!params.run_id || params.run_id.trim() === "") {
|
|
33
|
+
result.errors.push("Run ID is required");
|
|
34
|
+
result.message = "Failed to resume mission: run_id is required";
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
const runId = params.run_id.trim();
|
|
38
|
+
result.runId = runId;
|
|
39
|
+
// Read current state
|
|
40
|
+
const state = readState();
|
|
41
|
+
result.previousActiveRunId = state.active_run_id;
|
|
42
|
+
// Check if there's already a different active run
|
|
43
|
+
if (state.active_run_id && state.active_run_id !== runId) {
|
|
44
|
+
result.errors.push(`Another run is active: ${state.active_run_id}. Complete or pause it first.`);
|
|
45
|
+
result.message = "Failed to resume mission: another run is active";
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
// Read the run to verify it exists
|
|
49
|
+
const run = readRun(runId);
|
|
50
|
+
if (!run) {
|
|
51
|
+
result.errors.push(`Run not found: ${runId}`);
|
|
52
|
+
result.message = "Failed to resume mission: run not found";
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
result.runStatus = run.status;
|
|
56
|
+
// Check if run is in a resumable state
|
|
57
|
+
if (run.status === "done") {
|
|
58
|
+
result.errors.push(`Run ${runId} is already complete`);
|
|
59
|
+
result.message = "Failed to resume mission: run is already complete";
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
// Determine current phase
|
|
63
|
+
let currentPhase = params.phase || "execution";
|
|
64
|
+
if (!params.phase && run.phases.length > 0) {
|
|
65
|
+
// Find the first non-done phase
|
|
66
|
+
const activePhase = run.phases.find(p => p.status !== "done" && p.status !== "removed");
|
|
67
|
+
if (activePhase) {
|
|
68
|
+
currentPhase = activePhase.id;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Update state.json
|
|
72
|
+
updateState({
|
|
73
|
+
active_run_id: runId,
|
|
74
|
+
current_phase: currentPhase,
|
|
75
|
+
current_status_message: params.statusMessage || `Resumed mission: ${runId}`
|
|
76
|
+
});
|
|
77
|
+
result.success = true;
|
|
78
|
+
result.message = `Mission resumed: ${runId}`;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
result.success = false;
|
|
82
|
+
result.message = `Error resuming mission: ${error instanceof Error ? error.message : String(error)}`;
|
|
83
|
+
result.errors.push(String(error));
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=mission-resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission-resume.js","sourceRoot":"","sources":["../../src/tools/mission-resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mission_scaffold tool
|
|
3
|
+
*
|
|
4
|
+
* First-time setup tool - copies bundled worker/auditor agents and skills
|
|
5
|
+
* into project .pi dirs and creates mission-control directory structure.
|
|
6
|
+
*
|
|
7
|
+
* This is a command-only tool (not exposed to agents).
|
|
8
|
+
*/
|
|
9
|
+
export interface ScaffoldResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
created: string[];
|
|
13
|
+
skipped: string[];
|
|
14
|
+
errors: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Scaffold the mission-control environment
|
|
18
|
+
*
|
|
19
|
+
* Copies bundled worker/auditor agents and skills to project .pi dirs and creates
|
|
20
|
+
* the mission-control directory structure. Non-destructive -
|
|
21
|
+
* skips existing files rather than overwriting.
|
|
22
|
+
*/
|
|
23
|
+
export declare function missionScaffold(): ScaffoldResult;
|
|
24
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAuCD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,cAAc,CAuFhD"}
|