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,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor amend command
|
|
3
|
+
*
|
|
4
|
+
* Files an amendment proposal.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, writeFile, readdir, access, mkdir } from 'fs/promises';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { validatePath } from '../../utils/safe-path.js';
|
|
10
|
+
async function fileExists(path) {
|
|
11
|
+
try {
|
|
12
|
+
await access(path);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function getNextAmendmentId(amendmentsDir) {
|
|
20
|
+
try {
|
|
21
|
+
const files = await readdir(amendmentsDir);
|
|
22
|
+
const ids = files
|
|
23
|
+
.filter((f) => f.match(/^\d{3}-/))
|
|
24
|
+
.map((f) => parseInt(f.slice(0, 3), 10))
|
|
25
|
+
.filter((n) => !isNaN(n));
|
|
26
|
+
const maxId = ids.length > 0 ? Math.max(...ids) : 0;
|
|
27
|
+
return (maxId + 1).toString().padStart(3, '0');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return '001';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function generateAmendmentTemplate(id, title, section, agent) {
|
|
34
|
+
const now = new Date().toISOString();
|
|
35
|
+
return `---
|
|
36
|
+
conductor: "1.0"
|
|
37
|
+
id: AMEND-${id}
|
|
38
|
+
status: proposed
|
|
39
|
+
proposed_by: ${agent}
|
|
40
|
+
proposed_at: ${now}
|
|
41
|
+
reviewed_by: null
|
|
42
|
+
reviewed_at: null
|
|
43
|
+
affects:
|
|
44
|
+
file: spec.md
|
|
45
|
+
section: ${section}
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# Amendment: ${title}
|
|
49
|
+
|
|
50
|
+
## Summary
|
|
51
|
+
|
|
52
|
+
[1-2 sentences: What change is being proposed?]
|
|
53
|
+
|
|
54
|
+
## Rationale
|
|
55
|
+
|
|
56
|
+
[Why is this change necessary? What problem does it solve?]
|
|
57
|
+
|
|
58
|
+
**Evidence from implementation:**
|
|
59
|
+
|
|
60
|
+
\`\`\`
|
|
61
|
+
[Code, logs, or other evidence supporting the need for this change]
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
**Options considered:**
|
|
65
|
+
|
|
66
|
+
1. [Option 1] - [tradeoffs]
|
|
67
|
+
2. [Option 2] - [tradeoffs]
|
|
68
|
+
3. [Option 3] - [tradeoffs]
|
|
69
|
+
|
|
70
|
+
Recommending Option X because [reason].
|
|
71
|
+
|
|
72
|
+
## Current Text
|
|
73
|
+
|
|
74
|
+
\`\`\`markdown
|
|
75
|
+
[Copy the current text from the spec that will be changed]
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
## Proposed Text
|
|
79
|
+
|
|
80
|
+
\`\`\`markdown
|
|
81
|
+
[The new text that should replace the current text]
|
|
82
|
+
\`\`\`
|
|
83
|
+
|
|
84
|
+
## Impact Assessment
|
|
85
|
+
|
|
86
|
+
| Dimension | Assessment |
|
|
87
|
+
|-----------|------------|
|
|
88
|
+
| Tracks affected | [list tracks] |
|
|
89
|
+
| Re-planning required | Yes/No |
|
|
90
|
+
| Effort change | +/- X hours |
|
|
91
|
+
| Risk | Low/Medium/High |
|
|
92
|
+
|
|
93
|
+
## Discussion
|
|
94
|
+
|
|
95
|
+
Space for dialogue between proposer and reviewer.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
**${now} ${agent}**:
|
|
100
|
+
|
|
101
|
+
Initial proposal. [Add any context for the reviewer]
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
`;
|
|
105
|
+
}
|
|
106
|
+
export async function amendCommand(file, options) {
|
|
107
|
+
const cwd = process.cwd();
|
|
108
|
+
const conductorDir = join(cwd, '.conductor');
|
|
109
|
+
const amendmentsDir = join(conductorDir, 'amendments');
|
|
110
|
+
if (!(await fileExists(conductorDir))) {
|
|
111
|
+
console.log(chalk.yellow('No .conductor/ directory found.'));
|
|
112
|
+
console.log('Run `conductor init` to initialize.');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
// Ensure amendments directory exists
|
|
117
|
+
await mkdir(amendmentsDir, { recursive: true });
|
|
118
|
+
// If file is provided, it's an existing amendment to view/edit
|
|
119
|
+
if (file) {
|
|
120
|
+
// Validate path to prevent traversal attacks
|
|
121
|
+
const validation = validatePath(file, amendmentsDir);
|
|
122
|
+
if (!validation.valid) {
|
|
123
|
+
console.log(chalk.red(`Invalid path: ${validation.error}`));
|
|
124
|
+
console.log(chalk.gray('Amendment files must be within the amendments directory.'));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const amendPath = validation.resolvedPath;
|
|
128
|
+
if (await fileExists(amendPath)) {
|
|
129
|
+
const content = await readFile(amendPath, 'utf-8');
|
|
130
|
+
console.log(content);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(chalk.red(`Amendment file not found: ${amendPath}`));
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Create new amendment
|
|
138
|
+
if (!options.title) {
|
|
139
|
+
console.log(chalk.yellow('Please provide a title with --title'));
|
|
140
|
+
console.log(chalk.gray('Example: conductor amend --title "Simplify ADR format" --section "Architecture Decisions"'));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Get agent from state.md
|
|
144
|
+
const statePath = join(conductorDir, 'state.md');
|
|
145
|
+
let agent = 'unknown';
|
|
146
|
+
if (await fileExists(statePath)) {
|
|
147
|
+
const stateContent = await readFile(statePath, 'utf-8');
|
|
148
|
+
const agentMatch = stateContent.match(/^agent:\s*(.+)$/m);
|
|
149
|
+
if (agentMatch?.[1]) {
|
|
150
|
+
agent = agentMatch[1].trim();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const id = await getNextAmendmentId(amendmentsDir);
|
|
154
|
+
const section = options.section || 'Unspecified';
|
|
155
|
+
const title = options.title;
|
|
156
|
+
// Generate filename (slug from title)
|
|
157
|
+
const slug = title
|
|
158
|
+
.toLowerCase()
|
|
159
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
160
|
+
.replace(/^-|-$/g, '')
|
|
161
|
+
.slice(0, 40);
|
|
162
|
+
const filename = `${id}-${slug}.md`;
|
|
163
|
+
const amendPath = join(amendmentsDir, filename);
|
|
164
|
+
// Generate template
|
|
165
|
+
const template = generateAmendmentTemplate(id, title, section, agent);
|
|
166
|
+
await writeFile(amendPath, template);
|
|
167
|
+
console.log(chalk.green(`Amendment created: AMEND-${id}`));
|
|
168
|
+
console.log(chalk.gray(`File: ${amendPath}`));
|
|
169
|
+
console.log('');
|
|
170
|
+
console.log(chalk.blue('Next steps:'));
|
|
171
|
+
console.log(` 1. Edit ${filename} to fill in the details`);
|
|
172
|
+
console.log(' 2. Request review from spec author');
|
|
173
|
+
console.log(` 3. Run \`conductor accept AMEND-${id}\` or \`conductor reject AMEND-${id}\``);
|
|
174
|
+
// Update state.md to add pending amendment
|
|
175
|
+
if (await fileExists(statePath)) {
|
|
176
|
+
const stateContent = await readFile(statePath, 'utf-8');
|
|
177
|
+
// Find the Pending Amendments section and add the new one
|
|
178
|
+
const amendmentLine = `| [AMEND-${id}](./amendments/${filename}) | ${title} | proposed | ${new Date().toISOString()} | - |`;
|
|
179
|
+
// Check if there's a "(none)" placeholder
|
|
180
|
+
if (stateContent.includes('(none)')) {
|
|
181
|
+
const updated = stateContent.replace(/## Pending Amendments\n+\(none\)/, `## Pending Amendments\n\n| ID | Title | Status | Proposed | Reviewer |\n|----|-------|--------|----------|----------|\n${amendmentLine}`);
|
|
182
|
+
await writeFile(statePath, updated);
|
|
183
|
+
}
|
|
184
|
+
else if (stateContent.includes('## Pending Amendments')) {
|
|
185
|
+
// Add to existing table
|
|
186
|
+
const lines = stateContent.split('\n');
|
|
187
|
+
const amendIdx = lines.findIndex((l) => l.includes('## Pending Amendments'));
|
|
188
|
+
if (amendIdx >= 0) {
|
|
189
|
+
// Find the end of the table
|
|
190
|
+
let insertIdx = amendIdx + 1;
|
|
191
|
+
while (insertIdx < lines.length && (lines[insertIdx]?.startsWith('|') || lines[insertIdx]?.trim() === '')) {
|
|
192
|
+
insertIdx++;
|
|
193
|
+
}
|
|
194
|
+
lines.splice(insertIdx, 0, amendmentLine);
|
|
195
|
+
await writeFile(statePath, lines.join('\n'));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
console.error(chalk.red(`Failed to create amendment: ${error instanceof Error ? error.message : String(error)}`));
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=amend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amend.js","sourceRoot":"","sources":["../../../src/cli/commands/amend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor daemon command
|
|
3
|
+
*
|
|
4
|
+
* Runs the file watcher daemon for auto-sync.
|
|
5
|
+
*/
|
|
6
|
+
interface DaemonOptions {
|
|
7
|
+
debounce?: number;
|
|
8
|
+
noSyncOnStart?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function daemonCommand(options: DaemonOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DzE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor daemon command
|
|
3
|
+
*
|
|
4
|
+
* Runs the file watcher daemon for auto-sync.
|
|
5
|
+
*/
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { createWatcher } from '../../sync/watcher.js';
|
|
9
|
+
export async function daemonCommand(options) {
|
|
10
|
+
const cwd = process.cwd();
|
|
11
|
+
const conductorDir = join(cwd, '.conductor');
|
|
12
|
+
console.log(chalk.blue('\n=== Conductor Daemon ===\n'));
|
|
13
|
+
console.log(chalk.gray(`Watching: ${conductorDir}`));
|
|
14
|
+
console.log(chalk.gray(`Debounce: ${options.debounce ?? 500}ms`));
|
|
15
|
+
console.log(chalk.gray(`Sync on start: ${!options.noSyncOnStart}`));
|
|
16
|
+
console.log('');
|
|
17
|
+
console.log(chalk.yellow('Press Ctrl+C to stop\n'));
|
|
18
|
+
try {
|
|
19
|
+
const watcher = await createWatcher(conductorDir, {
|
|
20
|
+
debounceMs: options.debounce ?? 500,
|
|
21
|
+
syncOnStart: !options.noSyncOnStart,
|
|
22
|
+
});
|
|
23
|
+
// Event handlers
|
|
24
|
+
watcher.on('sync', (result) => {
|
|
25
|
+
const icon = result.success ? chalk.green('✓') : chalk.red('✗');
|
|
26
|
+
console.log(`${icon} Sync: ${result.changes.join(', ')}`);
|
|
27
|
+
if (result.warnings.length > 0) {
|
|
28
|
+
for (const warning of result.warnings) {
|
|
29
|
+
console.log(chalk.yellow(` ! ${warning}`));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
watcher.on('change', ({ path }) => {
|
|
34
|
+
console.log(chalk.gray(` Changed: ${path}`));
|
|
35
|
+
});
|
|
36
|
+
watcher.on('convergence', (data) => {
|
|
37
|
+
console.log(chalk.cyan(` ${data.glyph} | xi=${data.xi_n.toFixed(3)} | ${data.attractor}`));
|
|
38
|
+
});
|
|
39
|
+
watcher.on('error', ({ message }) => {
|
|
40
|
+
console.log(chalk.red(` Error: ${message}`));
|
|
41
|
+
});
|
|
42
|
+
// Handle shutdown
|
|
43
|
+
process.on('SIGINT', async () => {
|
|
44
|
+
console.log(chalk.yellow('\n\nShutting down...'));
|
|
45
|
+
await watcher.stop();
|
|
46
|
+
const stats = watcher.getStats();
|
|
47
|
+
console.log(chalk.gray(`Syncs: ${stats.syncCount}`));
|
|
48
|
+
console.log(chalk.gray(`Exchanges: ${stats.exchangeCount}`));
|
|
49
|
+
console.log(chalk.gray(`Errors: ${stats.errors.length}`));
|
|
50
|
+
process.exit(0);
|
|
51
|
+
});
|
|
52
|
+
// Keep process running
|
|
53
|
+
await new Promise(() => { });
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error(chalk.red(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor dispatch command
|
|
3
|
+
*
|
|
4
|
+
* Dispatches a track to its assigned agent.
|
|
5
|
+
*/
|
|
6
|
+
interface DispatchOptions {
|
|
7
|
+
track?: string;
|
|
8
|
+
dryRun: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function dispatchCommand(options: DispatchOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dispatch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AA6DD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkL7E"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor dispatch command
|
|
3
|
+
*
|
|
4
|
+
* Dispatches a track to its assigned agent.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, writeFile, access } from 'fs/promises';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { parsePlan, getNextPendingTask } from '../../parsers/plan-parser.js';
|
|
10
|
+
import { parseState } from '../../parsers/state-parser.js';
|
|
11
|
+
async function fileExists(path) {
|
|
12
|
+
try {
|
|
13
|
+
await access(path);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function generateDispatchPrompt(context) {
|
|
21
|
+
return `# Conductor Dispatch
|
|
22
|
+
|
|
23
|
+
You have been assigned a task by the Conductor orchestration system.
|
|
24
|
+
|
|
25
|
+
## Track: ${context.track.name}
|
|
26
|
+
|
|
27
|
+
${context.track.description}
|
|
28
|
+
|
|
29
|
+
## Current Task
|
|
30
|
+
|
|
31
|
+
**${context.task.content}**
|
|
32
|
+
|
|
33
|
+
## Context
|
|
34
|
+
|
|
35
|
+
This task is part of track "${context.track.name}" which has the following dependencies:
|
|
36
|
+
${context.track.dependencies.length > 0 ? context.track.dependencies.map((d) => `- ${d}`).join('\n') : '- (no dependencies)'}
|
|
37
|
+
|
|
38
|
+
## Instructions
|
|
39
|
+
|
|
40
|
+
1. Review the spec and plan files for full context
|
|
41
|
+
2. Complete the assigned task
|
|
42
|
+
3. Update the plan.md checkbox when done: \`- [ ]\` → \`- [x]\`
|
|
43
|
+
4. Add any created/modified files to the Artifacts section
|
|
44
|
+
5. Update the Notes section with relevant context for future work
|
|
45
|
+
|
|
46
|
+
## Files to Review
|
|
47
|
+
|
|
48
|
+
${context.contextFiles.map((f) => `- ${f}`).join('\n')}
|
|
49
|
+
|
|
50
|
+
## Constraints
|
|
51
|
+
|
|
52
|
+
- Follow the spec constraints exactly
|
|
53
|
+
- Do not deviate from the plan without filing an amendment
|
|
54
|
+
- Mark task as blocked \`[!]\` if you cannot proceed
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
*This prompt was generated by Conductor Bridge v1.0.0*
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
export async function dispatchCommand(options) {
|
|
62
|
+
const cwd = process.cwd();
|
|
63
|
+
const conductorDir = join(cwd, '.conductor');
|
|
64
|
+
if (!(await fileExists(conductorDir))) {
|
|
65
|
+
console.log(chalk.yellow('No .conductor/ directory found.'));
|
|
66
|
+
console.log('Run `conductor init` to initialize.');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
// Load state.md
|
|
71
|
+
const statePath = join(conductorDir, 'state.md');
|
|
72
|
+
if (!(await fileExists(statePath))) {
|
|
73
|
+
console.log(chalk.red('No state.md found'));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const stateContent = await readFile(statePath, 'utf-8');
|
|
77
|
+
const stateResult = parseState(stateContent);
|
|
78
|
+
if (!stateResult.success || !stateResult.data) {
|
|
79
|
+
console.log(chalk.red('Failed to parse state.md'));
|
|
80
|
+
for (const err of stateResult.errors) {
|
|
81
|
+
console.log(chalk.red(` - ${err.message}`));
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const state = stateResult.data;
|
|
86
|
+
// Load plan.md
|
|
87
|
+
const planPath = join(conductorDir, state.frontmatter.plan || 'plan.md');
|
|
88
|
+
if (!(await fileExists(planPath))) {
|
|
89
|
+
console.log(chalk.red(`Plan file not found: ${planPath}`));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const planContent = await readFile(planPath, 'utf-8');
|
|
93
|
+
const planResult = parsePlan(planContent);
|
|
94
|
+
if (!planResult.success || !planResult.data) {
|
|
95
|
+
console.log(chalk.red('Failed to parse plan.md'));
|
|
96
|
+
for (const err of planResult.errors) {
|
|
97
|
+
console.log(chalk.red(` - ${err.message}`));
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const plan = planResult.data;
|
|
102
|
+
// Find track to dispatch
|
|
103
|
+
let targetTrack;
|
|
104
|
+
if (options.track) {
|
|
105
|
+
// Specific track requested
|
|
106
|
+
targetTrack = plan.tracks.find((t) => t.name.toLowerCase() === options.track?.toLowerCase());
|
|
107
|
+
if (!targetTrack) {
|
|
108
|
+
console.log(chalk.red(`Track not found: ${options.track}`));
|
|
109
|
+
console.log(chalk.gray('Available tracks:'));
|
|
110
|
+
for (const t of plan.tracks) {
|
|
111
|
+
console.log(chalk.gray(` - ${t.name}`));
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Find next available track
|
|
118
|
+
for (const track of plan.tracks) {
|
|
119
|
+
if (track.status === 'complete' || track.status === 'blocked') {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Check dependencies
|
|
123
|
+
const depsComplete = track.dependencies.every((depName) => {
|
|
124
|
+
const depTrack = plan.tracks.find((t) => t.name === depName);
|
|
125
|
+
return depTrack?.status === 'complete';
|
|
126
|
+
});
|
|
127
|
+
if (depsComplete) {
|
|
128
|
+
targetTrack = track;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (!targetTrack) {
|
|
134
|
+
console.log(chalk.yellow('No tracks available for dispatch.'));
|
|
135
|
+
console.log(chalk.gray('All tracks are either complete, blocked, or have unmet dependencies.'));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Find next pending task in track
|
|
139
|
+
const nextTask = getNextPendingTask(plan);
|
|
140
|
+
if (!nextTask) {
|
|
141
|
+
console.log(chalk.yellow(`No pending tasks in track: ${targetTrack.name}`));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Check agent assignment
|
|
145
|
+
if (targetTrack.agent === 'unassigned') {
|
|
146
|
+
console.log(chalk.yellow(`Track "${targetTrack.name}" has no agent assigned.`));
|
|
147
|
+
console.log(chalk.gray('Edit plan.md to assign an agent before dispatching.'));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Load spec for context
|
|
151
|
+
const specPath = join(conductorDir, state.frontmatter.spec || 'spec.md');
|
|
152
|
+
let specContent = '';
|
|
153
|
+
if (await fileExists(specPath)) {
|
|
154
|
+
specContent = await readFile(specPath, 'utf-8');
|
|
155
|
+
}
|
|
156
|
+
// Build context
|
|
157
|
+
const context = {
|
|
158
|
+
track: targetTrack,
|
|
159
|
+
task: nextTask,
|
|
160
|
+
spec: specContent,
|
|
161
|
+
plan: planContent,
|
|
162
|
+
contextFiles: [
|
|
163
|
+
state.frontmatter.spec || 'spec.md',
|
|
164
|
+
state.frontmatter.plan || 'plan.md',
|
|
165
|
+
...targetTrack.artifacts,
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
// Generate dispatch prompt
|
|
169
|
+
const prompt = generateDispatchPrompt(context);
|
|
170
|
+
console.log(chalk.blue('\n=== Dispatch Summary ===\n'));
|
|
171
|
+
console.log(chalk.gray('Track:'), targetTrack.name);
|
|
172
|
+
console.log(chalk.gray('Agent:'), targetTrack.agent);
|
|
173
|
+
console.log(chalk.gray('Task:'), nextTask.content);
|
|
174
|
+
console.log(chalk.gray('Dependencies:'), targetTrack.dependencies.length > 0 ? targetTrack.dependencies.join(', ') : '(none)');
|
|
175
|
+
if (options.dryRun) {
|
|
176
|
+
console.log(chalk.yellow('\n[DRY RUN] Would dispatch the following prompt:\n'));
|
|
177
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
178
|
+
console.log(prompt);
|
|
179
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// Update state.md with current assignment
|
|
183
|
+
const now = new Date().toISOString();
|
|
184
|
+
const updatedState = stateContent
|
|
185
|
+
.replace(/\| Track \| [^|]+ \|/, `| Track | ${targetTrack.name} |`)
|
|
186
|
+
.replace(/\| Task \| [^|]+ \|/, `| Task | ${nextTask.content} |`)
|
|
187
|
+
.replace(/\| Iteration \| [^|]+ \|/, `| Iteration | 1 |`)
|
|
188
|
+
.replace(/\| Started \| [^|]+ \|/, `| Started | ${now} |`)
|
|
189
|
+
.replace(/^updated: .+$/m, `updated: ${now}`);
|
|
190
|
+
await writeFile(statePath, updatedState);
|
|
191
|
+
// Write dispatch prompt to file
|
|
192
|
+
const dispatchPath = join(conductorDir, 'dispatch.md');
|
|
193
|
+
await writeFile(dispatchPath, prompt);
|
|
194
|
+
console.log(chalk.green('\nDispatch created!'));
|
|
195
|
+
console.log(chalk.gray(`Prompt written to: ${dispatchPath}`));
|
|
196
|
+
console.log('');
|
|
197
|
+
console.log(chalk.blue('Next steps:'));
|
|
198
|
+
console.log(` 1. Review ${dispatchPath}`);
|
|
199
|
+
console.log(` 2. Send to ${targetTrack.agent} for execution`);
|
|
200
|
+
console.log(' 3. Run `conductor sync` after completion');
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.error(chalk.red(`Failed to dispatch: ${error instanceof Error ? error.message : String(error)}`));
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/cli/commands/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conductor handoff command
|
|
3
|
+
*
|
|
4
|
+
* Create and receive cross-agent handoffs.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* conductor handoff create [options] # Package cognitive state for transfer
|
|
8
|
+
* conductor handoff receive <file> # Unpack and apply a handoff
|
|
9
|
+
* conductor handoff status <file> # Check handoff status without applying
|
|
10
|
+
*/
|
|
11
|
+
interface CreateOptions {
|
|
12
|
+
goal?: string;
|
|
13
|
+
output?: string;
|
|
14
|
+
encrypt?: boolean;
|
|
15
|
+
machineBound?: boolean;
|
|
16
|
+
expires?: string;
|
|
17
|
+
passphrase?: string;
|
|
18
|
+
target?: string;
|
|
19
|
+
state?: string;
|
|
20
|
+
}
|
|
21
|
+
interface ReceiveOptions {
|
|
22
|
+
passphrase?: string;
|
|
23
|
+
apply?: boolean;
|
|
24
|
+
output?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createCommand(options: CreateOptions): Promise<void>;
|
|
27
|
+
export declare function receiveCommand(file: string, options: ReceiveOptions): Promise<void>;
|
|
28
|
+
export declare function statusCommand(file: string): Promise<void>;
|
|
29
|
+
export declare function listCommand(): Promise<void>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGzE;AAMD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFzF;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/D;AAMD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD"}
|