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,273 @@
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
+ import { join } from 'path';
12
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
13
+ import chalk from 'chalk';
14
+ import { createHandoff, receiveHandoff, getHandoffStatus, createMinimalSnapshot, } from '../../handoff/mycelium-arc.js';
15
+ import { readFromFile, extractSessionState } from '../../bridge/json-interchange.js';
16
+ // ============================================================================
17
+ // Handoff Directory
18
+ // ============================================================================
19
+ function getHandoffDir() {
20
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
21
+ const handoffDir = join(homeDir, '.claude', 'handoffs');
22
+ if (!existsSync(handoffDir)) {
23
+ mkdirSync(handoffDir, { recursive: true });
24
+ }
25
+ return handoffDir;
26
+ }
27
+ // ============================================================================
28
+ // Create Command
29
+ // ============================================================================
30
+ export async function createCommand(options) {
31
+ console.log(chalk.blue('\n=== Create Handoff ===\n'));
32
+ // Build cognitive snapshot
33
+ let cognitive;
34
+ if (options.state) {
35
+ // Load from cognitive_state.json
36
+ console.log(chalk.gray(`Loading state from: ${options.state}`));
37
+ try {
38
+ const doc = await readFromFile(options.state);
39
+ const sessionState = extractSessionState(doc);
40
+ if (!sessionState) {
41
+ console.error(chalk.red('No session state found in file'));
42
+ process.exit(1);
43
+ }
44
+ cognitive = {
45
+ sessionId: sessionState.session_id,
46
+ timestamp: sessionState.timestamp,
47
+ activeMode: sessionState.active_mode,
48
+ activeParadigm: sessionState.active_paradigm,
49
+ energyLevel: sessionState.energy_level,
50
+ burnoutLevel: sessionState.burnout_level,
51
+ momentumPhase: sessionState.momentum_phase,
52
+ currentGoal: options.goal,
53
+ activeTasks: [],
54
+ completedTasks: [],
55
+ convergenceAttractor: sessionState.convergence_attractor,
56
+ epistemicTension: sessionState.last_xi_value,
57
+ };
58
+ }
59
+ catch (error) {
60
+ console.error(chalk.red(`Failed to load state: ${error instanceof Error ? error.message : String(error)}`));
61
+ process.exit(1);
62
+ }
63
+ }
64
+ else if (options.goal) {
65
+ // Create minimal snapshot with goal
66
+ console.log(chalk.gray('Creating minimal snapshot from goal'));
67
+ cognitive = createMinimalSnapshot(options.goal);
68
+ }
69
+ else {
70
+ console.error(chalk.red('Either --goal or --state is required'));
71
+ console.log(chalk.gray('\nUsage:'));
72
+ console.log(chalk.gray(' conductor handoff create --goal "My current goal"'));
73
+ console.log(chalk.gray(' conductor handoff create --state ./cognitive_state.json'));
74
+ process.exit(1);
75
+ }
76
+ // Parse options
77
+ const handoffOptions = {
78
+ targetAgent: options.target,
79
+ encrypt: options.encrypt !== false,
80
+ machineBound: options.machineBound ?? false,
81
+ expiresInHours: options.expires ? parseFloat(options.expires) : 24,
82
+ customPassphrase: options.passphrase,
83
+ };
84
+ // Create handoff
85
+ const result = createHandoff(cognitive, 'claude-code', handoffOptions);
86
+ if (!result.success) {
87
+ console.error(chalk.red(`Failed to create handoff: ${result.error}`));
88
+ process.exit(1);
89
+ }
90
+ // Determine output path
91
+ const outputPath = options.output ||
92
+ join(getHandoffDir(), `${result.handoffId}.json`);
93
+ // Write to file
94
+ writeFileSync(outputPath, result.payload);
95
+ // Display result
96
+ console.log(chalk.green('Handoff created successfully'));
97
+ console.log('');
98
+ console.log(chalk.white('Details:'));
99
+ console.log(chalk.gray(` ID: ${result.handoffId}`));
100
+ console.log(chalk.gray(` Encrypted: ${result.encrypted ? 'Yes' : 'No'}`));
101
+ console.log(chalk.gray(` Expires: ${new Date(result.expiresAt).toLocaleString()}`));
102
+ console.log(chalk.gray(` File: ${outputPath}`));
103
+ console.log('');
104
+ if (handoffOptions.machineBound) {
105
+ console.log(chalk.yellow('Note: This handoff is machine-bound and can only be received on this machine.'));
106
+ }
107
+ if (options.passphrase) {
108
+ console.log(chalk.yellow('Note: Custom passphrase required to receive this handoff.'));
109
+ }
110
+ // Show resume summary preview
111
+ if (!handoffOptions.encrypt) {
112
+ try {
113
+ const arc = JSON.parse(result.payload);
114
+ console.log(chalk.blue('\n--- Resume Summary Preview ---'));
115
+ console.log(chalk.gray(arc.resumeSummary));
116
+ }
117
+ catch {
118
+ // Ignore if can't parse
119
+ }
120
+ }
121
+ }
122
+ // ============================================================================
123
+ // Receive Command
124
+ // ============================================================================
125
+ export async function receiveCommand(file, options) {
126
+ console.log(chalk.blue('\n=== Receive Handoff ===\n'));
127
+ // Check file exists
128
+ if (!existsSync(file)) {
129
+ // Try handoff directory
130
+ const altPath = join(getHandoffDir(), file);
131
+ if (existsSync(altPath)) {
132
+ file = altPath;
133
+ }
134
+ else if (existsSync(join(getHandoffDir(), `${file}.json`))) {
135
+ file = join(getHandoffDir(), `${file}.json`);
136
+ }
137
+ else {
138
+ console.error(chalk.red(`File not found: ${file}`));
139
+ process.exit(1);
140
+ }
141
+ }
142
+ console.log(chalk.gray(`Reading: ${file}`));
143
+ // Read payload
144
+ const payload = readFileSync(file, 'utf-8');
145
+ // Receive handoff
146
+ const result = receiveHandoff(payload, options.passphrase);
147
+ if (!result.success) {
148
+ if (result.expired) {
149
+ console.error(chalk.red('Handoff has expired'));
150
+ console.log(chalk.gray('Handoffs expire after 24 hours for safety.'));
151
+ }
152
+ else if (result.machineMismatch) {
153
+ console.error(chalk.red('Machine mismatch'));
154
+ console.log(chalk.gray('This handoff is bound to a different machine.'));
155
+ }
156
+ else {
157
+ console.error(chalk.red(`Failed to receive: ${result.error}`));
158
+ }
159
+ process.exit(1);
160
+ }
161
+ const arc = result.arc;
162
+ // Display resume summary
163
+ console.log(chalk.green('Handoff received successfully'));
164
+ console.log('');
165
+ console.log(chalk.white('From:'));
166
+ console.log(chalk.gray(` Agent: ${arc.metadata.sourceAgent}`));
167
+ console.log(chalk.gray(` Created: ${new Date(arc.metadata.createdAt).toLocaleString()}`));
168
+ console.log('');
169
+ // Momentum status
170
+ if (arc.momentumPenalty > 0) {
171
+ const penaltyPercent = Math.round(arc.momentumPenalty * 100);
172
+ console.log(chalk.yellow(`Momentum penalty applied: ${penaltyPercent}%`));
173
+ console.log(chalk.gray(` Original: ${arc.cognitive.momentumPhase} → Adjusted: ${arc.adjustedMomentum}`));
174
+ console.log('');
175
+ }
176
+ // Show resume summary
177
+ console.log(chalk.blue('--- Resume Summary ---'));
178
+ console.log(arc.resumeSummary);
179
+ console.log(chalk.blue('--- End Summary ---'));
180
+ console.log('');
181
+ // Apply to local state if requested
182
+ if (options.apply) {
183
+ const outputPath = options.output ||
184
+ join(process.cwd(), '.conductor', 'cognitive_state.json');
185
+ console.log(chalk.gray(`Applying to: ${outputPath}`));
186
+ // This would integrate with the bridge writer
187
+ console.log(chalk.yellow('Note: State application not yet implemented.'));
188
+ console.log(chalk.gray('Use the cognitive state values above to resume manually.'));
189
+ }
190
+ // Show cognitive state summary
191
+ console.log(chalk.white('Cognitive State:'));
192
+ console.log(chalk.gray(` Goal: ${arc.cognitive.currentGoal || '(none)'}`));
193
+ console.log(chalk.gray(` Mode: ${arc.cognitive.activeMode}`));
194
+ console.log(chalk.gray(` Energy: ${arc.cognitive.energyLevel}`));
195
+ console.log(chalk.gray(` Burnout: ${arc.cognitive.burnoutLevel}`));
196
+ console.log(chalk.gray(` Momentum: ${arc.adjustedMomentum}`));
197
+ }
198
+ // ============================================================================
199
+ // Status Command
200
+ // ============================================================================
201
+ export async function statusCommand(file) {
202
+ console.log(chalk.blue('\n=== Handoff Status ===\n'));
203
+ // Check file exists
204
+ if (!existsSync(file)) {
205
+ const altPath = join(getHandoffDir(), file);
206
+ if (existsSync(altPath)) {
207
+ file = altPath;
208
+ }
209
+ else if (existsSync(join(getHandoffDir(), `${file}.json`))) {
210
+ file = join(getHandoffDir(), `${file}.json`);
211
+ }
212
+ else {
213
+ console.error(chalk.red(`File not found: ${file}`));
214
+ process.exit(1);
215
+ }
216
+ }
217
+ // Read and check status
218
+ const payload = readFileSync(file, 'utf-8');
219
+ const status = getHandoffStatus(payload);
220
+ if (!status.valid) {
221
+ console.error(chalk.red(`Invalid handoff: ${status.error}`));
222
+ process.exit(1);
223
+ }
224
+ console.log(chalk.gray(`File: ${file}`));
225
+ console.log('');
226
+ console.log(chalk.white('Status:'));
227
+ console.log(chalk.gray(` Valid: Yes`));
228
+ console.log(chalk.gray(` Encrypted: ${status.encrypted ? 'Yes' : 'No'}`));
229
+ if (status.expired) {
230
+ console.log(chalk.red(` Expired: Yes`));
231
+ }
232
+ else {
233
+ console.log(chalk.green(` Expires in: ${status.timeRemaining}`));
234
+ }
235
+ if (status.handoffId) {
236
+ console.log(chalk.gray(` Handoff ID: ${status.handoffId}`));
237
+ }
238
+ if (status.sourceAgent) {
239
+ console.log(chalk.gray(` Source: ${status.sourceAgent}`));
240
+ }
241
+ }
242
+ // ============================================================================
243
+ // List Command
244
+ // ============================================================================
245
+ export async function listCommand() {
246
+ console.log(chalk.blue('\n=== Handoff Directory ===\n'));
247
+ const handoffDir = getHandoffDir();
248
+ console.log(chalk.gray(`Directory: ${handoffDir}`));
249
+ console.log('');
250
+ // List files
251
+ const { readdirSync } = await import('fs');
252
+ const files = readdirSync(handoffDir).filter((f) => f.endsWith('.json'));
253
+ if (files.length === 0) {
254
+ console.log(chalk.gray('No handoffs found.'));
255
+ return;
256
+ }
257
+ console.log(chalk.white('Handoffs:'));
258
+ for (const file of files) {
259
+ const filePath = join(handoffDir, file);
260
+ try {
261
+ const payload = readFileSync(filePath, 'utf-8');
262
+ const status = getHandoffStatus(payload);
263
+ const icon = status.expired ? chalk.red('✗') : chalk.green('✓');
264
+ const expiry = status.expired ? chalk.red('Expired') : chalk.gray(status.timeRemaining);
265
+ const encrypted = status.encrypted ? chalk.yellow('[E]') : '';
266
+ console.log(` ${icon} ${file} ${encrypted} - ${expiry}`);
267
+ }
268
+ catch {
269
+ console.log(` ${chalk.gray('?')} ${file} - ${chalk.red('Invalid')}`);
270
+ }
271
+ }
272
+ }
273
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * conductor init command
3
+ *
4
+ * Initializes .conductor/ directory with template files.
5
+ */
6
+ interface InitOptions {
7
+ pattern: 'single-track' | 'multi-track';
8
+ force: boolean;
9
+ }
10
+ export declare function initCommand(options: InitOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,UAAU,WAAW;IACnB,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;IACxC,KAAK,EAAE,OAAO,CAAC;CAChB;AAmPD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwErE"}
@@ -0,0 +1,301 @@
1
+ /**
2
+ * conductor init command
3
+ *
4
+ * Initializes .conductor/ directory with template files.
5
+ */
6
+ import { mkdir, writeFile, access } from 'fs/promises';
7
+ import { join } from 'path';
8
+ import chalk from 'chalk';
9
+ const SPEC_TEMPLATE = `---
10
+ conductor: "1.0"
11
+ id: project-spec
12
+ version: 1.0.0
13
+ status: draft
14
+ author: your-name
15
+ created: ${new Date().toISOString()}
16
+ updated: ${new Date().toISOString()}
17
+ tags: []
18
+ ---
19
+
20
+ # [Project Name]
21
+
22
+ ## Problem Statement
23
+
24
+ [1-3 paragraphs: What problem are we solving? Why does it matter?]
25
+
26
+ ## Success Criteria
27
+
28
+ Ordered by priority. Each must be verifiable.
29
+
30
+ - [ ] Criterion 1: Specific, measurable outcome
31
+ - [ ] Criterion 2: Another verifiable outcome
32
+ - [ ] Criterion 3: Third outcome
33
+
34
+ ## Constraints
35
+
36
+ Non-negotiable boundaries. Violations require an amendment proposal.
37
+
38
+ - Must use [language/framework]
39
+ - Must not break existing API contracts
40
+ - Must maintain test coverage
41
+
42
+ ## Non-Goals
43
+
44
+ Explicit scope boundaries. Prevents scope creep.
45
+
46
+ - NOT implementing feature X (out of scope)
47
+ - NOT optimizing for Y (premature)
48
+
49
+ ## Architecture Decisions
50
+
51
+ ### ADR-001: [Decision Title]
52
+
53
+ - **Status**: proposed
54
+ - **Context**: [Why this decision point arose]
55
+ - **Decision**: [What was decided]
56
+ - **Consequences**:
57
+ - Consequence 1
58
+ - Consequence 2
59
+
60
+ ## Interfaces
61
+
62
+ ### Primary Interface
63
+
64
+ \`\`\`typescript
65
+ // Define the shape implementers must honor
66
+ interface Example {
67
+ id: string;
68
+ // ...
69
+ }
70
+ \`\`\`
71
+
72
+ ## Dependencies
73
+
74
+ - Depends on: [external dependency]
75
+
76
+ ## References
77
+
78
+ - [Link to relevant documentation]
79
+ `;
80
+ const PLAN_TEMPLATE = `---
81
+ conductor: "1.0"
82
+ spec: ./spec.md
83
+ spec_version: 1.0.0
84
+ plan_version: 1
85
+ status: pending
86
+ created: ${new Date().toISOString()}
87
+ updated: ${new Date().toISOString()}
88
+ ---
89
+
90
+ # Execution Plan: [Project Name]
91
+
92
+ ## Summary
93
+
94
+ [2-3 sentences: Implementation approach, key technical choices]
95
+
96
+ | Metric | Value |
97
+ |--------|-------|
98
+ | Total Tracks | 1 |
99
+ | Completed | 0 |
100
+ | Progress | 0% |
101
+
102
+ ---
103
+
104
+ ## Track: setup
105
+
106
+ > Initial setup and configuration
107
+
108
+ - **Agent**: claude-code
109
+ - **Status**: pending
110
+ - **Dependencies**: none
111
+
112
+ ### Tasks
113
+
114
+ - [ ] Initialize project structure
115
+ - [ ] Configure development environment
116
+ - [ ] Set up testing framework
117
+
118
+ ### Artifacts
119
+
120
+ (none yet)
121
+
122
+ ### Notes
123
+
124
+ \`\`\`
125
+ Working notes will go here as the track progresses.
126
+ \`\`\`
127
+
128
+ ---
129
+
130
+ ## Pending Amendments
131
+
132
+ (none)
133
+
134
+ ## Change Log
135
+
136
+ | Version | Date | Agent | Summary |
137
+ |---------|------|-------|---------|
138
+ | 1 | ${new Date().toISOString().split('T')[0]} | human | Initial plan |
139
+ `;
140
+ const STATE_TEMPLATE = `---
141
+ conductor: "1.0"
142
+ spec: ./spec.md
143
+ plan: ./plan.md
144
+ session_id: session-${Date.now().toString(36)}
145
+ agent: claude-code
146
+ created: ${new Date().toISOString()}
147
+ updated: ${new Date().toISOString()}
148
+ ---
149
+
150
+ # Conductor Session State
151
+
152
+ ## Current Assignment
153
+
154
+ | Field | Value |
155
+ |-------|-------|
156
+ | Track | setup |
157
+ | Task | (not started) |
158
+ | Iteration | 0 |
159
+ | Started | - |
160
+
161
+ ## Context Files
162
+
163
+ Files the agent should load for context:
164
+
165
+ - \`.conductor/spec.md\` (requirements)
166
+ - \`.conductor/plan.md\` (current progress)
167
+
168
+ ## Recent Activity
169
+
170
+ | Time | Agent | Action |
171
+ |------|-------|--------|
172
+ | ${new Date().toISOString()} | bridge | Session initialized |
173
+
174
+ ## Agent Scratchpad
175
+
176
+ \`\`\`
177
+ (Agent working notes will appear here)
178
+ \`\`\`
179
+
180
+ ## Pending Amendments
181
+
182
+ (none)
183
+
184
+ ## Warnings
185
+
186
+ - (none currently)
187
+ `;
188
+ const MULTI_TRACK_STATE_TEMPLATE = `---
189
+ conductor: "1.0"
190
+ spec: ./tracks/initial/spec.md
191
+ plan: ./tracks/initial/plan.md
192
+ track_id: initial
193
+ session_id: session-${Date.now().toString(36)}
194
+ agent: claude-code
195
+ created: ${new Date().toISOString()}
196
+ updated: ${new Date().toISOString()}
197
+ ---
198
+
199
+ # Conductor Session State
200
+
201
+ ## Current Assignment
202
+
203
+ | Field | Value |
204
+ |-------|-------|
205
+ | Track | setup |
206
+ | Task | (not started) |
207
+ | Iteration | 0 |
208
+ | Started | - |
209
+
210
+ ## Context Files
211
+
212
+ Files the agent should load for context:
213
+
214
+ - \`.conductor/tracks/initial/spec.md\` (requirements)
215
+ - \`.conductor/tracks/initial/plan.md\` (current progress)
216
+
217
+ ## Recent Activity
218
+
219
+ | Time | Agent | Action |
220
+ |------|-------|--------|
221
+ | ${new Date().toISOString()} | bridge | Session initialized |
222
+
223
+ ## Agent Scratchpad
224
+
225
+ \`\`\`
226
+ (Agent working notes will appear here)
227
+ \`\`\`
228
+
229
+ ## Pending Amendments
230
+
231
+ (none)
232
+
233
+ ## Warnings
234
+
235
+ - (none currently)
236
+ `;
237
+ async function fileExists(path) {
238
+ try {
239
+ await access(path);
240
+ return true;
241
+ }
242
+ catch {
243
+ return false;
244
+ }
245
+ }
246
+ export async function initCommand(options) {
247
+ const cwd = process.cwd();
248
+ const conductorDir = join(cwd, '.conductor');
249
+ console.log(chalk.blue('Initializing Conductor...'));
250
+ console.log(chalk.gray(`Pattern: ${options.pattern}`));
251
+ // Check if .conductor already exists
252
+ if (await fileExists(conductorDir)) {
253
+ if (!options.force) {
254
+ console.log(chalk.yellow('Warning: .conductor/ already exists. Use --force to overwrite.'));
255
+ return;
256
+ }
257
+ console.log(chalk.yellow('Overwriting existing .conductor/ directory...'));
258
+ }
259
+ try {
260
+ if (options.pattern === 'single-track') {
261
+ // Single-track pattern
262
+ await mkdir(conductorDir, { recursive: true });
263
+ await mkdir(join(conductorDir, 'amendments'), { recursive: true });
264
+ await writeFile(join(conductorDir, 'spec.md'), SPEC_TEMPLATE);
265
+ await writeFile(join(conductorDir, 'plan.md'), PLAN_TEMPLATE);
266
+ await writeFile(join(conductorDir, 'state.md'), STATE_TEMPLATE);
267
+ console.log(chalk.green('Created .conductor/'));
268
+ console.log(chalk.gray(' - spec.md'));
269
+ console.log(chalk.gray(' - plan.md'));
270
+ console.log(chalk.gray(' - state.md'));
271
+ console.log(chalk.gray(' - amendments/'));
272
+ }
273
+ else {
274
+ // Multi-track pattern (default)
275
+ await mkdir(conductorDir, { recursive: true });
276
+ await mkdir(join(conductorDir, 'tracks', 'initial'), { recursive: true });
277
+ await mkdir(join(conductorDir, 'amendments'), { recursive: true });
278
+ await writeFile(join(conductorDir, 'tracks', 'initial', 'spec.md'), SPEC_TEMPLATE);
279
+ await writeFile(join(conductorDir, 'tracks', 'initial', 'plan.md'), PLAN_TEMPLATE);
280
+ await writeFile(join(conductorDir, 'state.md'), MULTI_TRACK_STATE_TEMPLATE);
281
+ console.log(chalk.green('Created .conductor/'));
282
+ console.log(chalk.gray(' - state.md'));
283
+ console.log(chalk.gray(' - tracks/'));
284
+ console.log(chalk.gray(' - initial/'));
285
+ console.log(chalk.gray(' - spec.md'));
286
+ console.log(chalk.gray(' - plan.md'));
287
+ console.log(chalk.gray(' - amendments/'));
288
+ }
289
+ console.log('');
290
+ console.log(chalk.blue('Next steps:'));
291
+ console.log(' 1. Edit spec.md to define your requirements');
292
+ console.log(' 2. Edit plan.md to define your execution tracks');
293
+ console.log(' 3. Run `conductor status` to see current state');
294
+ console.log(' 4. Run `conductor dispatch` to start execution');
295
+ }
296
+ catch (error) {
297
+ console.error(chalk.red(`Failed to initialize: ${error instanceof Error ? error.message : String(error)}`));
298
+ process.exit(1);
299
+ }
300
+ }
301
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * conductor status command
3
+ *
4
+ * Shows current orchestration status.
5
+ */
6
+ interface StatusOptions {
7
+ verbose: boolean;
8
+ json: boolean;
9
+ }
10
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAwED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsMzE"}