conductor-bridge 1.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.
- package/README.md +69 -0
- package/dist/bridge/index.d.ts +8 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +8 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/json-interchange.d.ts +94 -0
- package/dist/bridge/json-interchange.d.ts.map +1 -0
- package/dist/bridge/json-interchange.js +301 -0
- package/dist/bridge/json-interchange.js.map +1 -0
- package/dist/cli/commands/amend.d.ts +12 -0
- package/dist/cli/commands/amend.d.ts.map +1 -0
- package/dist/cli/commands/amend.js +205 -0
- package/dist/cli/commands/amend.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +12 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +60 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dispatch.d.ts +12 -0
- package/dist/cli/commands/dispatch.d.ts.map +1 -0
- package/dist/cli/commands/dispatch.js +207 -0
- package/dist/cli/commands/dispatch.js.map +1 -0
- package/dist/cli/commands/handoff.d.ts +31 -0
- package/dist/cli/commands/handoff.d.ts.map +1 -0
- package/dist/cli/commands/handoff.js +273 -0
- package/dist/cli/commands/handoff.js.map +1 -0
- package/dist/cli/commands/init.d.ts +12 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +301 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +206 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +148 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/handoff/encryption.d.ts +85 -0
- package/dist/handoff/encryption.d.ts.map +1 -0
- package/dist/handoff/encryption.js +308 -0
- package/dist/handoff/encryption.js.map +1 -0
- package/dist/handoff/index.d.ts +8 -0
- package/dist/handoff/index.d.ts.map +1 -0
- package/dist/handoff/index.js +10 -0
- package/dist/handoff/index.js.map +1 -0
- package/dist/handoff/mycelium-arc.d.ts +116 -0
- package/dist/handoff/mycelium-arc.d.ts.map +1 -0
- package/dist/handoff/mycelium-arc.js +410 -0
- package/dist/handoff/mycelium-arc.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +12 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/plan-parser.d.ts +29 -0
- package/dist/parsers/plan-parser.d.ts.map +1 -0
- package/dist/parsers/plan-parser.js +503 -0
- package/dist/parsers/plan-parser.js.map +1 -0
- package/dist/parsers/spec-parser.d.ts +10 -0
- package/dist/parsers/spec-parser.d.ts.map +1 -0
- package/dist/parsers/spec-parser.js +382 -0
- package/dist/parsers/spec-parser.js.map +1 -0
- package/dist/parsers/state-parser.d.ts +21 -0
- package/dist/parsers/state-parser.d.ts.map +1 -0
- package/dist/parsers/state-parser.js +378 -0
- package/dist/parsers/state-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +190 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/schemas/cognitive-state.d.ts +1523 -0
- package/dist/schemas/cognitive-state.d.ts.map +1 -0
- package/dist/schemas/cognitive-state.js +328 -0
- package/dist/schemas/cognitive-state.js.map +1 -0
- package/dist/schemas/enums.d.ts +124 -0
- package/dist/schemas/enums.d.ts.map +1 -0
- package/dist/schemas/enums.js +108 -0
- package/dist/schemas/enums.js.map +1 -0
- package/dist/schemas/index.d.ts +9 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/sync/adhd-continuity.d.ts +91 -0
- package/dist/sync/adhd-continuity.d.ts.map +1 -0
- package/dist/sync/adhd-continuity.js +302 -0
- package/dist/sync/adhd-continuity.js.map +1 -0
- package/dist/sync/convergence-tracker.d.ts +111 -0
- package/dist/sync/convergence-tracker.d.ts.map +1 -0
- package/dist/sync/convergence-tracker.js +299 -0
- package/dist/sync/convergence-tracker.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +15 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/state-sync.d.ts +105 -0
- package/dist/sync/state-sync.d.ts.map +1 -0
- package/dist/sync/state-sync.js +403 -0
- package/dist/sync/state-sync.js.map +1 -0
- package/dist/sync/watcher.d.ts +90 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +281 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +31 -0
- package/dist/utils/atomic-write.d.ts.map +1 -0
- package/dist/utils/atomic-write.js +69 -0
- package/dist/utils/atomic-write.js.map +1 -0
- package/dist/utils/error-handling.d.ts +70 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +109 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/file-lock.d.ts +46 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +117 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/rlm-navigator.d.ts +160 -0
- package/dist/utils/rlm-navigator.d.ts.map +1 -0
- package/dist/utils/rlm-navigator.js +368 -0
- package/dist/utils/rlm-navigator.js.map +1 -0
- package/dist/utils/safe-path.d.ts +44 -0
- package/dist/utils/safe-path.d.ts.map +1 -0
- package/dist/utils/safe-path.js +96 -0
- package/dist/utils/safe-path.js.map +1 -0
- package/dist/utils/timed-io.d.ts +51 -0
- package/dist/utils/timed-io.d.ts.map +1 -0
- package/dist/utils/timed-io.js +128 -0
- package/dist/utils/timed-io.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor status command
|
|
3
|
+
*
|
|
4
|
+
* Shows current orchestration status.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, access } from 'fs/promises';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { parseSpec } from '../../parsers/spec-parser.js';
|
|
10
|
+
import { parsePlan, countTasksByState } from '../../parsers/plan-parser.js';
|
|
11
|
+
import { parseState, getSessionDuration, isSessionStale } from '../../parsers/state-parser.js';
|
|
12
|
+
async function fileExists(path) {
|
|
13
|
+
try {
|
|
14
|
+
await access(path);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function findConductorFiles() {
|
|
22
|
+
const cwd = process.cwd();
|
|
23
|
+
const conductorDir = join(cwd, '.conductor');
|
|
24
|
+
if (!(await fileExists(conductorDir))) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
// Check for state.md first (always at root of .conductor/)
|
|
28
|
+
const statePath = join(conductorDir, 'state.md');
|
|
29
|
+
if (!(await fileExists(statePath))) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Parse state to find spec/plan paths
|
|
33
|
+
const stateContent = await readFile(statePath, 'utf-8');
|
|
34
|
+
const stateResult = parseState(stateContent);
|
|
35
|
+
if (!stateResult.success || !stateResult.data) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const state = stateResult.data;
|
|
39
|
+
// Resolve spec and plan paths relative to .conductor/
|
|
40
|
+
const specPath = join(conductorDir, state.frontmatter.spec || 'spec.md');
|
|
41
|
+
const planPath = join(conductorDir, state.frontmatter.plan || 'plan.md');
|
|
42
|
+
return { specPath, planPath, statePath, state };
|
|
43
|
+
}
|
|
44
|
+
function stateIcon(state) {
|
|
45
|
+
switch (state) {
|
|
46
|
+
case 'complete':
|
|
47
|
+
return chalk.green('[x]');
|
|
48
|
+
case 'in_progress':
|
|
49
|
+
return chalk.yellow('[~]');
|
|
50
|
+
case 'blocked':
|
|
51
|
+
return chalk.red('[!]');
|
|
52
|
+
default:
|
|
53
|
+
return chalk.gray('[ ]');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function progressBar(completed, total, width = 20) {
|
|
57
|
+
const percent = total > 0 ? completed / total : 0;
|
|
58
|
+
const filled = Math.round(percent * width);
|
|
59
|
+
const empty = width - filled;
|
|
60
|
+
const bar = chalk.green('#'.repeat(filled)) + chalk.gray('-'.repeat(empty));
|
|
61
|
+
return `[${bar}] ${Math.round(percent * 100)}%`;
|
|
62
|
+
}
|
|
63
|
+
export async function statusCommand(options) {
|
|
64
|
+
const files = await findConductorFiles();
|
|
65
|
+
if (!files) {
|
|
66
|
+
console.log(chalk.yellow('No .conductor/ directory found.'));
|
|
67
|
+
console.log('Run `conductor init` to initialize.');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
// Load spec
|
|
72
|
+
if (await fileExists(files.specPath)) {
|
|
73
|
+
const specContent = await readFile(files.specPath, 'utf-8');
|
|
74
|
+
const specResult = parseSpec(specContent);
|
|
75
|
+
if (specResult.success && specResult.data) {
|
|
76
|
+
files.spec = specResult.data;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Load plan
|
|
80
|
+
if (await fileExists(files.planPath)) {
|
|
81
|
+
const planContent = await readFile(files.planPath, 'utf-8');
|
|
82
|
+
const planResult = parsePlan(planContent);
|
|
83
|
+
if (planResult.success && planResult.data) {
|
|
84
|
+
files.plan = planResult.data;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// JSON output
|
|
88
|
+
if (options.json) {
|
|
89
|
+
console.log(JSON.stringify({
|
|
90
|
+
spec: files.spec
|
|
91
|
+
? {
|
|
92
|
+
id: files.spec.frontmatter.id,
|
|
93
|
+
version: files.spec.frontmatter.version,
|
|
94
|
+
status: files.spec.frontmatter.status,
|
|
95
|
+
successCriteria: files.spec.successCriteria.length,
|
|
96
|
+
completedCriteria: files.spec.successCriteria.filter((c) => c.completed)
|
|
97
|
+
.length,
|
|
98
|
+
}
|
|
99
|
+
: null,
|
|
100
|
+
plan: files.plan
|
|
101
|
+
? {
|
|
102
|
+
version: files.plan.frontmatter.plan_version,
|
|
103
|
+
status: files.plan.frontmatter.status,
|
|
104
|
+
tracks: files.plan.tracks.map((t) => ({
|
|
105
|
+
name: t.name,
|
|
106
|
+
status: t.status,
|
|
107
|
+
agent: t.agent,
|
|
108
|
+
tasks: t.tasks.length,
|
|
109
|
+
})),
|
|
110
|
+
metrics: files.plan.metrics,
|
|
111
|
+
}
|
|
112
|
+
: null,
|
|
113
|
+
state: files.state
|
|
114
|
+
? {
|
|
115
|
+
sessionId: files.state.frontmatter.session_id,
|
|
116
|
+
agent: files.state.frontmatter.agent,
|
|
117
|
+
currentAssignment: files.state.currentAssignment,
|
|
118
|
+
warnings: files.state.warnings,
|
|
119
|
+
sessionDuration: getSessionDuration(files.state),
|
|
120
|
+
isStale: isSessionStale(files.state),
|
|
121
|
+
}
|
|
122
|
+
: null,
|
|
123
|
+
}, null, 2));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Header
|
|
127
|
+
console.log(chalk.bold('\n=== Conductor Status ===\n'));
|
|
128
|
+
// Spec info
|
|
129
|
+
if (files.spec) {
|
|
130
|
+
const completedCriteria = files.spec.successCriteria.filter((c) => c.completed).length;
|
|
131
|
+
const totalCriteria = files.spec.successCriteria.length;
|
|
132
|
+
console.log(chalk.blue('Spec:'), files.spec.frontmatter.id);
|
|
133
|
+
console.log(chalk.gray(' Version:'), files.spec.frontmatter.version, chalk.gray(`(${files.spec.frontmatter.status})`));
|
|
134
|
+
console.log(chalk.gray(' Success Criteria:'), progressBar(completedCriteria, totalCriteria, 15), `${completedCriteria}/${totalCriteria}`);
|
|
135
|
+
if (options.verbose && files.spec.adrs.length > 0) {
|
|
136
|
+
console.log(chalk.gray(' ADRs:'));
|
|
137
|
+
for (const adr of files.spec.adrs) {
|
|
138
|
+
const statusColor = adr.status === 'accepted'
|
|
139
|
+
? chalk.green
|
|
140
|
+
: adr.status === 'proposed'
|
|
141
|
+
? chalk.yellow
|
|
142
|
+
: chalk.gray;
|
|
143
|
+
console.log(chalk.gray(` - ${adr.id}:`), adr.title, statusColor(`[${adr.status}]`));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
console.log('');
|
|
147
|
+
}
|
|
148
|
+
// Plan info
|
|
149
|
+
if (files.plan) {
|
|
150
|
+
const taskCounts = countTasksByState(files.plan);
|
|
151
|
+
const totalTasks = taskCounts.pending +
|
|
152
|
+
taskCounts.in_progress +
|
|
153
|
+
taskCounts.complete +
|
|
154
|
+
taskCounts.blocked;
|
|
155
|
+
console.log(chalk.blue('Plan:'), `v${files.plan.frontmatter.plan_version}`);
|
|
156
|
+
console.log(chalk.gray(' Progress:'), progressBar(files.plan.metrics.completedTracks, files.plan.metrics.totalTracks, 15), `${files.plan.metrics.completedTracks}/${files.plan.metrics.totalTracks} tracks`);
|
|
157
|
+
console.log(chalk.gray(' Tasks:'), chalk.green(`${taskCounts.complete} done`), chalk.yellow(`${taskCounts.in_progress} active`), chalk.gray(`${taskCounts.pending} pending`), taskCounts.blocked > 0 ? chalk.red(`${taskCounts.blocked} blocked`) : '');
|
|
158
|
+
console.log(chalk.gray('\n Tracks:'));
|
|
159
|
+
for (const track of files.plan.tracks) {
|
|
160
|
+
const trackTasks = track.tasks.length;
|
|
161
|
+
const trackComplete = track.tasks.filter((t) => t.state === 'complete').length;
|
|
162
|
+
console.log(` ${stateIcon(track.status)}`, track.name, chalk.gray(`(${track.agent})`), chalk.gray(`${trackComplete}/${trackTasks} tasks`));
|
|
163
|
+
if (options.verbose) {
|
|
164
|
+
for (const task of track.tasks) {
|
|
165
|
+
console.log(` ${stateIcon(task.state)}`, task.content);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
console.log('');
|
|
170
|
+
}
|
|
171
|
+
// State info
|
|
172
|
+
if (files.state) {
|
|
173
|
+
const duration = getSessionDuration(files.state);
|
|
174
|
+
const stale = isSessionStale(files.state);
|
|
175
|
+
console.log(chalk.blue('Session:'), files.state.frontmatter.session_id);
|
|
176
|
+
console.log(chalk.gray(' Agent:'), files.state.frontmatter.agent);
|
|
177
|
+
console.log(chalk.gray(' Duration:'), `${duration} min`, stale ? chalk.yellow('(stale)') : '');
|
|
178
|
+
if (files.state.currentAssignment) {
|
|
179
|
+
console.log(chalk.gray(' Current:'));
|
|
180
|
+
console.log(chalk.gray(' Track:'), files.state.currentAssignment.track);
|
|
181
|
+
console.log(chalk.gray(' Task:'), files.state.currentAssignment.task);
|
|
182
|
+
console.log(chalk.gray(' Iteration:'), files.state.currentAssignment.iteration);
|
|
183
|
+
}
|
|
184
|
+
// Warnings
|
|
185
|
+
if (files.state.warnings.length > 0) {
|
|
186
|
+
console.log(chalk.yellow('\n Warnings:'));
|
|
187
|
+
for (const warning of files.state.warnings) {
|
|
188
|
+
console.log(chalk.yellow(` ! ${warning}`));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Pending amendments
|
|
192
|
+
if (files.state.pendingAmendments.length > 0) {
|
|
193
|
+
console.log(chalk.magenta('\n Pending Amendments:'));
|
|
194
|
+
for (const amend of files.state.pendingAmendments) {
|
|
195
|
+
console.log(chalk.magenta(` - ${amend.id}:`), amend.title);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log('');
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error(chalk.red(`Failed to read status: ${error instanceof Error ? error.message : String(error)}`));
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Conductor CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for Conductor Bridge orchestration.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* conductor init # Create .conductor/ with templates
|
|
9
|
+
* conductor status # Show current state summary
|
|
10
|
+
* conductor dispatch # Send next pending track to assigned agent
|
|
11
|
+
* conductor sync # Pull agent changes back to plan.md
|
|
12
|
+
* conductor amend <file> # File an amendment proposal
|
|
13
|
+
* conductor accept <id> # Accept a pending amendment
|
|
14
|
+
* conductor reject <id> # Reject a pending amendment
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Conductor CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for Conductor Bridge orchestration.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* conductor init # Create .conductor/ with templates
|
|
9
|
+
* conductor status # Show current state summary
|
|
10
|
+
* conductor dispatch # Send next pending track to assigned agent
|
|
11
|
+
* conductor sync # Pull agent changes back to plan.md
|
|
12
|
+
* conductor amend <file> # File an amendment proposal
|
|
13
|
+
* conductor accept <id> # Accept a pending amendment
|
|
14
|
+
* conductor reject <id> # Reject a pending amendment
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from 'commander';
|
|
17
|
+
import { initCommand } from './commands/init.js';
|
|
18
|
+
import { statusCommand } from './commands/status.js';
|
|
19
|
+
import { dispatchCommand } from './commands/dispatch.js';
|
|
20
|
+
import { amendCommand } from './commands/amend.js';
|
|
21
|
+
import { daemonCommand } from './commands/daemon.js';
|
|
22
|
+
import { createCommand as handoffCreateCommand, receiveCommand as handoffReceiveCommand, statusCommand as handoffStatusCommand, listCommand as handoffListCommand, } from './commands/handoff.js';
|
|
23
|
+
const program = new Command();
|
|
24
|
+
program
|
|
25
|
+
.name('conductor')
|
|
26
|
+
.description('Multi-agent orchestration via Markdown')
|
|
27
|
+
.version('1.0.0');
|
|
28
|
+
// conductor init
|
|
29
|
+
program
|
|
30
|
+
.command('init')
|
|
31
|
+
.description('Initialize .conductor/ directory with templates')
|
|
32
|
+
.option('-p, --pattern <pattern>', 'Directory pattern: single-track or multi-track', 'multi-track')
|
|
33
|
+
.option('-f, --force', 'Overwrite existing files', false)
|
|
34
|
+
.action(initCommand);
|
|
35
|
+
// conductor status
|
|
36
|
+
program
|
|
37
|
+
.command('status')
|
|
38
|
+
.description('Show current orchestration status')
|
|
39
|
+
.option('-v, --verbose', 'Show detailed status', false)
|
|
40
|
+
.option('-j, --json', 'Output as JSON', false)
|
|
41
|
+
.action(statusCommand);
|
|
42
|
+
// conductor dispatch
|
|
43
|
+
program
|
|
44
|
+
.command('dispatch')
|
|
45
|
+
.description('Dispatch next pending track to assigned agent')
|
|
46
|
+
.option('-t, --track <track>', 'Specific track to dispatch')
|
|
47
|
+
.option('-d, --dry-run', 'Show what would be dispatched without executing', false)
|
|
48
|
+
.action(dispatchCommand);
|
|
49
|
+
// conductor sync
|
|
50
|
+
program
|
|
51
|
+
.command('sync')
|
|
52
|
+
.description('Sync state from agent execution back to plan')
|
|
53
|
+
.action(async () => {
|
|
54
|
+
const { syncBidirectional } = await import('../sync/state-sync.js');
|
|
55
|
+
const { join } = await import('path');
|
|
56
|
+
const chalk = (await import('chalk')).default;
|
|
57
|
+
const cwd = process.cwd();
|
|
58
|
+
const result = await syncBidirectional({
|
|
59
|
+
conductorDir: join(cwd, '.conductor'),
|
|
60
|
+
cognitiveStatePath: join(cwd, '.conductor', 'cognitive_state.json'),
|
|
61
|
+
autoSave: true,
|
|
62
|
+
autoSaveIntervalMs: 300000,
|
|
63
|
+
});
|
|
64
|
+
if (result.success) {
|
|
65
|
+
console.log(chalk.green('Sync complete'));
|
|
66
|
+
for (const change of result.changes) {
|
|
67
|
+
console.log(chalk.gray(` - ${change}`));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.log(chalk.red('Sync failed'));
|
|
72
|
+
for (const warning of result.warnings) {
|
|
73
|
+
console.log(chalk.yellow(` ! ${warning}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// conductor daemon
|
|
78
|
+
program
|
|
79
|
+
.command('daemon')
|
|
80
|
+
.description('Run file watcher daemon for auto-sync')
|
|
81
|
+
.option('-d, --debounce <ms>', 'Debounce delay in milliseconds', '500')
|
|
82
|
+
.option('--no-sync-on-start', 'Skip initial sync on start')
|
|
83
|
+
.action(daemonCommand);
|
|
84
|
+
// conductor amend
|
|
85
|
+
program
|
|
86
|
+
.command('amend')
|
|
87
|
+
.description('File an amendment proposal')
|
|
88
|
+
.argument('[file]', 'Amendment file path')
|
|
89
|
+
.option('-s, --section <section>', 'Section to amend')
|
|
90
|
+
.option('-t, --title <title>', 'Amendment title')
|
|
91
|
+
.action(amendCommand);
|
|
92
|
+
// conductor accept
|
|
93
|
+
program
|
|
94
|
+
.command('accept')
|
|
95
|
+
.description('Accept a pending amendment')
|
|
96
|
+
.argument('<id>', 'Amendment ID (e.g., AMEND-001)')
|
|
97
|
+
.action(async (id) => {
|
|
98
|
+
console.log(`accept command for ${id} not yet implemented`);
|
|
99
|
+
});
|
|
100
|
+
// conductor reject
|
|
101
|
+
program
|
|
102
|
+
.command('reject')
|
|
103
|
+
.description('Reject a pending amendment')
|
|
104
|
+
.argument('<id>', 'Amendment ID (e.g., AMEND-001)')
|
|
105
|
+
.argument('[reason]', 'Rejection reason')
|
|
106
|
+
.action(async (id, reason) => {
|
|
107
|
+
console.log(`reject command for ${id} not yet implemented`);
|
|
108
|
+
});
|
|
109
|
+
// conductor handoff (subcommands)
|
|
110
|
+
const handoff = program
|
|
111
|
+
.command('handoff')
|
|
112
|
+
.description('Cross-agent handoff commands');
|
|
113
|
+
// conductor handoff create
|
|
114
|
+
handoff
|
|
115
|
+
.command('create')
|
|
116
|
+
.description('Create a handoff package for transfer to another agent')
|
|
117
|
+
.option('-g, --goal <goal>', 'Current goal/task description')
|
|
118
|
+
.option('-s, --state <path>', 'Path to cognitive_state.json to use')
|
|
119
|
+
.option('-o, --output <path>', 'Output file path')
|
|
120
|
+
.option('--no-encrypt', 'Skip encryption (not recommended)')
|
|
121
|
+
.option('-m, --machine-bound', 'Bind handoff to this machine')
|
|
122
|
+
.option('-e, --expires <hours>', 'Expiry time in hours', '24')
|
|
123
|
+
.option('-p, --passphrase <passphrase>', 'Custom encryption passphrase')
|
|
124
|
+
.option('-t, --target <agent>', 'Target agent (claude-code, gemini-cli)')
|
|
125
|
+
.action(handoffCreateCommand);
|
|
126
|
+
// conductor handoff receive
|
|
127
|
+
handoff
|
|
128
|
+
.command('receive')
|
|
129
|
+
.description('Receive and unpack a handoff from another agent')
|
|
130
|
+
.argument('<file>', 'Handoff file path or ID')
|
|
131
|
+
.option('-p, --passphrase <passphrase>', 'Decryption passphrase')
|
|
132
|
+
.option('-a, --apply', 'Apply state to local cognitive_state.json')
|
|
133
|
+
.option('-o, --output <path>', 'Output path for applied state')
|
|
134
|
+
.action(handoffReceiveCommand);
|
|
135
|
+
// conductor handoff status
|
|
136
|
+
handoff
|
|
137
|
+
.command('status')
|
|
138
|
+
.description('Check status of a handoff file')
|
|
139
|
+
.argument('<file>', 'Handoff file path or ID')
|
|
140
|
+
.action(handoffStatusCommand);
|
|
141
|
+
// conductor handoff list
|
|
142
|
+
handoff
|
|
143
|
+
.command('list')
|
|
144
|
+
.alias('ls')
|
|
145
|
+
.description('List handoffs in the handoff directory')
|
|
146
|
+
.action(handoffListCommand);
|
|
147
|
+
program.parse();
|
|
148
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Encryption Module
|
|
3
|
+
*
|
|
4
|
+
* Provides encryption for cross-agent handoffs using:
|
|
5
|
+
* - AES-256-GCM for symmetric encryption
|
|
6
|
+
* - Machine-bound keys derived from hardware identifiers
|
|
7
|
+
*
|
|
8
|
+
* Security model:
|
|
9
|
+
* - Handoffs are encrypted at rest
|
|
10
|
+
* - Machine-bound option prevents transfer to other machines
|
|
11
|
+
* - Keys are derived, not stored (stateless)
|
|
12
|
+
*/
|
|
13
|
+
export type EncryptionAlgorithm = 'none' | 'aes-256-gcm';
|
|
14
|
+
export interface EncryptionConfig {
|
|
15
|
+
algorithm: EncryptionAlgorithm;
|
|
16
|
+
machineBound: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface EncryptedPayload {
|
|
19
|
+
algorithm: EncryptionAlgorithm;
|
|
20
|
+
machineBound: boolean;
|
|
21
|
+
machineId?: string;
|
|
22
|
+
iv: string;
|
|
23
|
+
authTag: string;
|
|
24
|
+
ciphertext: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
expiresAt: string;
|
|
27
|
+
}
|
|
28
|
+
export interface DecryptionResult {
|
|
29
|
+
success: boolean;
|
|
30
|
+
data?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
expired?: boolean;
|
|
33
|
+
machineMismatch?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate a machine-specific identifier.
|
|
37
|
+
*
|
|
38
|
+
* Combines:
|
|
39
|
+
* - Hostname
|
|
40
|
+
* - CPU model
|
|
41
|
+
* - Smallest valid MAC address (lexicographically)
|
|
42
|
+
*
|
|
43
|
+
* DETERMINISM GUARANTEES (ThinkingMachines [He2025] compliance):
|
|
44
|
+
* - MAC addresses are sorted lexicographically, smallest is selected
|
|
45
|
+
* - Adding new interfaces (Docker, VPN, etc.) won't change ID unless
|
|
46
|
+
* the new MAC is smaller than all existing MACs
|
|
47
|
+
* - This ensures batch-invariance: same hardware → same ID
|
|
48
|
+
*
|
|
49
|
+
* This is NOT cryptographically secure for authentication,
|
|
50
|
+
* but provides reasonable binding for local handoffs.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getMachineId(): string;
|
|
53
|
+
/**
|
|
54
|
+
* Verify machine ID matches current machine.
|
|
55
|
+
*/
|
|
56
|
+
export declare function verifyMachineId(expectedId: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Encrypt data using AES-256-GCM.
|
|
59
|
+
*/
|
|
60
|
+
export declare function encrypt(data: string, config: EncryptionConfig, expiresInHours?: number, customPassphrase?: string): EncryptedPayload;
|
|
61
|
+
/**
|
|
62
|
+
* Decrypt an encrypted payload.
|
|
63
|
+
*/
|
|
64
|
+
export declare function decrypt(payload: EncryptedPayload, customPassphrase?: string): DecryptionResult;
|
|
65
|
+
/**
|
|
66
|
+
* Check if a payload is expired.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isExpired(payload: EncryptedPayload): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Get time until expiry.
|
|
71
|
+
*/
|
|
72
|
+
export declare function getTimeUntilExpiry(payload: EncryptedPayload): {
|
|
73
|
+
expired: boolean;
|
|
74
|
+
hours: number;
|
|
75
|
+
minutes: number;
|
|
76
|
+
formatted: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Create encryption config from options.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createEncryptionConfig(options?: {
|
|
82
|
+
encrypt?: boolean;
|
|
83
|
+
machineBound?: boolean;
|
|
84
|
+
}): EncryptionConfig;
|
|
85
|
+
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/handoff/encryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,aAAa,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAyCrC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE3D;AA2FD;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,EACxB,cAAc,GAAE,MAAW,EAC3B,gBAAgB,CAAC,EAAE,MAAM,GACxB,gBAAgB,CAoDlB;AAMD;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,CAAC,EAAE,MAAM,GACxB,gBAAgB,CAqElB;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAoBA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,gBAAgB,CAKlB"}
|