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.
Files changed (134) hide show
  1. package/README.md +69 -0
  2. package/dist/bridge/index.d.ts +8 -0
  3. package/dist/bridge/index.d.ts.map +1 -0
  4. package/dist/bridge/index.js +8 -0
  5. package/dist/bridge/index.js.map +1 -0
  6. package/dist/bridge/json-interchange.d.ts +94 -0
  7. package/dist/bridge/json-interchange.d.ts.map +1 -0
  8. package/dist/bridge/json-interchange.js +301 -0
  9. package/dist/bridge/json-interchange.js.map +1 -0
  10. package/dist/cli/commands/amend.d.ts +12 -0
  11. package/dist/cli/commands/amend.d.ts.map +1 -0
  12. package/dist/cli/commands/amend.js +205 -0
  13. package/dist/cli/commands/amend.js.map +1 -0
  14. package/dist/cli/commands/daemon.d.ts +12 -0
  15. package/dist/cli/commands/daemon.d.ts.map +1 -0
  16. package/dist/cli/commands/daemon.js +60 -0
  17. package/dist/cli/commands/daemon.js.map +1 -0
  18. package/dist/cli/commands/dispatch.d.ts +12 -0
  19. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  20. package/dist/cli/commands/dispatch.js +207 -0
  21. package/dist/cli/commands/dispatch.js.map +1 -0
  22. package/dist/cli/commands/handoff.d.ts +31 -0
  23. package/dist/cli/commands/handoff.d.ts.map +1 -0
  24. package/dist/cli/commands/handoff.js +273 -0
  25. package/dist/cli/commands/handoff.js.map +1 -0
  26. package/dist/cli/commands/init.d.ts +12 -0
  27. package/dist/cli/commands/init.d.ts.map +1 -0
  28. package/dist/cli/commands/init.js +301 -0
  29. package/dist/cli/commands/init.js.map +1 -0
  30. package/dist/cli/commands/status.d.ts +12 -0
  31. package/dist/cli/commands/status.d.ts.map +1 -0
  32. package/dist/cli/commands/status.js +206 -0
  33. package/dist/cli/commands/status.js.map +1 -0
  34. package/dist/cli/index.d.ts +17 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +148 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/handoff/encryption.d.ts +85 -0
  39. package/dist/handoff/encryption.d.ts.map +1 -0
  40. package/dist/handoff/encryption.js +308 -0
  41. package/dist/handoff/encryption.js.map +1 -0
  42. package/dist/handoff/index.d.ts +8 -0
  43. package/dist/handoff/index.d.ts.map +1 -0
  44. package/dist/handoff/index.js +10 -0
  45. package/dist/handoff/index.js.map +1 -0
  46. package/dist/handoff/mycelium-arc.d.ts +116 -0
  47. package/dist/handoff/mycelium-arc.d.ts.map +1 -0
  48. package/dist/handoff/mycelium-arc.js +410 -0
  49. package/dist/handoff/mycelium-arc.js.map +1 -0
  50. package/dist/index.d.ts +38 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +71 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/parsers/index.d.ts +10 -0
  55. package/dist/parsers/index.d.ts.map +1 -0
  56. package/dist/parsers/index.js +12 -0
  57. package/dist/parsers/index.js.map +1 -0
  58. package/dist/parsers/plan-parser.d.ts +29 -0
  59. package/dist/parsers/plan-parser.d.ts.map +1 -0
  60. package/dist/parsers/plan-parser.js +503 -0
  61. package/dist/parsers/plan-parser.js.map +1 -0
  62. package/dist/parsers/spec-parser.d.ts +10 -0
  63. package/dist/parsers/spec-parser.d.ts.map +1 -0
  64. package/dist/parsers/spec-parser.js +382 -0
  65. package/dist/parsers/spec-parser.js.map +1 -0
  66. package/dist/parsers/state-parser.d.ts +21 -0
  67. package/dist/parsers/state-parser.d.ts.map +1 -0
  68. package/dist/parsers/state-parser.js +378 -0
  69. package/dist/parsers/state-parser.js.map +1 -0
  70. package/dist/parsers/types.d.ts +190 -0
  71. package/dist/parsers/types.d.ts.map +1 -0
  72. package/dist/parsers/types.js +7 -0
  73. package/dist/parsers/types.js.map +1 -0
  74. package/dist/schemas/cognitive-state.d.ts +1523 -0
  75. package/dist/schemas/cognitive-state.d.ts.map +1 -0
  76. package/dist/schemas/cognitive-state.js +328 -0
  77. package/dist/schemas/cognitive-state.js.map +1 -0
  78. package/dist/schemas/enums.d.ts +124 -0
  79. package/dist/schemas/enums.d.ts.map +1 -0
  80. package/dist/schemas/enums.js +108 -0
  81. package/dist/schemas/enums.js.map +1 -0
  82. package/dist/schemas/index.d.ts +9 -0
  83. package/dist/schemas/index.d.ts.map +1 -0
  84. package/dist/schemas/index.js +9 -0
  85. package/dist/schemas/index.js.map +1 -0
  86. package/dist/sync/adhd-continuity.d.ts +91 -0
  87. package/dist/sync/adhd-continuity.d.ts.map +1 -0
  88. package/dist/sync/adhd-continuity.js +302 -0
  89. package/dist/sync/adhd-continuity.js.map +1 -0
  90. package/dist/sync/convergence-tracker.d.ts +111 -0
  91. package/dist/sync/convergence-tracker.d.ts.map +1 -0
  92. package/dist/sync/convergence-tracker.js +299 -0
  93. package/dist/sync/convergence-tracker.js.map +1 -0
  94. package/dist/sync/index.d.ts +11 -0
  95. package/dist/sync/index.d.ts.map +1 -0
  96. package/dist/sync/index.js +15 -0
  97. package/dist/sync/index.js.map +1 -0
  98. package/dist/sync/state-sync.d.ts +105 -0
  99. package/dist/sync/state-sync.d.ts.map +1 -0
  100. package/dist/sync/state-sync.js +403 -0
  101. package/dist/sync/state-sync.js.map +1 -0
  102. package/dist/sync/watcher.d.ts +90 -0
  103. package/dist/sync/watcher.d.ts.map +1 -0
  104. package/dist/sync/watcher.js +281 -0
  105. package/dist/sync/watcher.js.map +1 -0
  106. package/dist/utils/atomic-write.d.ts +31 -0
  107. package/dist/utils/atomic-write.d.ts.map +1 -0
  108. package/dist/utils/atomic-write.js +69 -0
  109. package/dist/utils/atomic-write.js.map +1 -0
  110. package/dist/utils/error-handling.d.ts +70 -0
  111. package/dist/utils/error-handling.d.ts.map +1 -0
  112. package/dist/utils/error-handling.js +109 -0
  113. package/dist/utils/error-handling.js.map +1 -0
  114. package/dist/utils/file-lock.d.ts +46 -0
  115. package/dist/utils/file-lock.d.ts.map +1 -0
  116. package/dist/utils/file-lock.js +117 -0
  117. package/dist/utils/file-lock.js.map +1 -0
  118. package/dist/utils/index.d.ts +10 -0
  119. package/dist/utils/index.d.ts.map +1 -0
  120. package/dist/utils/index.js +12 -0
  121. package/dist/utils/index.js.map +1 -0
  122. package/dist/utils/rlm-navigator.d.ts +160 -0
  123. package/dist/utils/rlm-navigator.d.ts.map +1 -0
  124. package/dist/utils/rlm-navigator.js +368 -0
  125. package/dist/utils/rlm-navigator.js.map +1 -0
  126. package/dist/utils/safe-path.d.ts +44 -0
  127. package/dist/utils/safe-path.d.ts.map +1 -0
  128. package/dist/utils/safe-path.js +96 -0
  129. package/dist/utils/safe-path.js.map +1 -0
  130. package/dist/utils/timed-io.d.ts +51 -0
  131. package/dist/utils/timed-io.d.ts.map +1 -0
  132. package/dist/utils/timed-io.js +128 -0
  133. package/dist/utils/timed-io.js.map +1 -0
  134. 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"}