@cluesmith/codev 2.0.0-rc.8 → 2.0.0-rc.9

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 (126) hide show
  1. package/bin/porch.js +6 -35
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +0 -14
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -1
  6. package/dist/agent-farm/commands/kickoff.js +22 -86
  7. package/dist/agent-farm/commands/kickoff.js.map +1 -1
  8. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/spawn.js +30 -54
  10. package/dist/agent-farm/commands/spawn.js.map +1 -1
  11. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  12. package/dist/agent-farm/commands/start.js +8 -50
  13. package/dist/agent-farm/commands/start.js.map +1 -1
  14. package/dist/agent-farm/servers/dashboard-server.js +0 -14
  15. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  16. package/dist/agent-farm/state.d.ts +0 -10
  17. package/dist/agent-farm/state.d.ts.map +1 -1
  18. package/dist/agent-farm/state.js +0 -24
  19. package/dist/agent-farm/state.js.map +1 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +5 -17
  22. package/dist/cli.js.map +1 -1
  23. package/dist/commands/adopt.d.ts.map +1 -1
  24. package/dist/commands/adopt.js +17 -1
  25. package/dist/commands/adopt.js.map +1 -1
  26. package/dist/commands/consult/index.d.ts.map +1 -1
  27. package/dist/commands/consult/index.js +2 -1
  28. package/dist/commands/consult/index.js.map +1 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +17 -1
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/porch/checks.d.ts +16 -29
  33. package/dist/commands/porch/checks.d.ts.map +1 -1
  34. package/dist/commands/porch/checks.js +90 -144
  35. package/dist/commands/porch/checks.js.map +1 -1
  36. package/dist/commands/porch/claude.d.ts +29 -0
  37. package/dist/commands/porch/claude.d.ts.map +1 -0
  38. package/dist/commands/porch/claude.js +79 -0
  39. package/dist/commands/porch/claude.js.map +1 -0
  40. package/dist/commands/porch/index.d.ts +21 -43
  41. package/dist/commands/porch/index.d.ts.map +1 -1
  42. package/dist/commands/porch/index.js +430 -1241
  43. package/dist/commands/porch/index.js.map +1 -1
  44. package/dist/commands/porch/plan.d.ts +60 -0
  45. package/dist/commands/porch/plan.d.ts.map +1 -0
  46. package/dist/commands/porch/plan.js +162 -0
  47. package/dist/commands/porch/plan.js.map +1 -0
  48. package/dist/commands/porch/prompts.d.ts +19 -0
  49. package/dist/commands/porch/prompts.d.ts.map +1 -0
  50. package/dist/commands/porch/prompts.js +259 -0
  51. package/dist/commands/porch/prompts.js.map +1 -0
  52. package/dist/commands/porch/protocol-loader.d.ts.map +1 -1
  53. package/dist/commands/porch/protocol-loader.js +9 -0
  54. package/dist/commands/porch/protocol-loader.js.map +1 -1
  55. package/dist/commands/porch/protocol.d.ts +57 -0
  56. package/dist/commands/porch/protocol.d.ts.map +1 -0
  57. package/dist/commands/porch/protocol.js +250 -0
  58. package/dist/commands/porch/protocol.js.map +1 -0
  59. package/dist/commands/porch/repl.d.ts +33 -0
  60. package/dist/commands/porch/repl.d.ts.map +1 -0
  61. package/dist/commands/porch/repl.js +206 -0
  62. package/dist/commands/porch/repl.js.map +1 -0
  63. package/dist/commands/porch/run.d.ts +15 -0
  64. package/dist/commands/porch/run.d.ts.map +1 -0
  65. package/dist/commands/porch/run.js +551 -0
  66. package/dist/commands/porch/run.js.map +1 -0
  67. package/dist/commands/porch/signal-parser.d.ts +17 -3
  68. package/dist/commands/porch/signal-parser.d.ts.map +1 -1
  69. package/dist/commands/porch/signal-parser.js +71 -20
  70. package/dist/commands/porch/signal-parser.js.map +1 -1
  71. package/dist/commands/porch/signals.d.ts +35 -0
  72. package/dist/commands/porch/signals.d.ts.map +1 -0
  73. package/dist/commands/porch/signals.js +76 -0
  74. package/dist/commands/porch/signals.js.map +1 -0
  75. package/dist/commands/porch/state.d.ts +16 -114
  76. package/dist/commands/porch/state.d.ts.map +1 -1
  77. package/dist/commands/porch/state.js +62 -709
  78. package/dist/commands/porch/state.js.map +1 -1
  79. package/dist/commands/porch/types.d.ts +65 -173
  80. package/dist/commands/porch/types.d.ts.map +1 -1
  81. package/dist/commands/porch/types.js +2 -1
  82. package/dist/commands/porch/types.js.map +1 -1
  83. package/dist/commands/porch2/checks.d.ts +29 -0
  84. package/dist/commands/porch2/checks.d.ts.map +1 -0
  85. package/dist/commands/porch2/checks.js +141 -0
  86. package/dist/commands/porch2/checks.js.map +1 -0
  87. package/dist/commands/porch2/index.d.ts +38 -0
  88. package/dist/commands/porch2/index.d.ts.map +1 -0
  89. package/dist/commands/porch2/index.js +483 -0
  90. package/dist/commands/porch2/index.js.map +1 -0
  91. package/dist/commands/porch2/plan.d.ts +70 -0
  92. package/dist/commands/porch2/plan.d.ts.map +1 -0
  93. package/dist/commands/porch2/plan.js +227 -0
  94. package/dist/commands/porch2/plan.js.map +1 -0
  95. package/dist/commands/porch2/protocol.d.ts +37 -0
  96. package/dist/commands/porch2/protocol.d.ts.map +1 -0
  97. package/dist/commands/porch2/protocol.js +183 -0
  98. package/dist/commands/porch2/protocol.js.map +1 -0
  99. package/dist/commands/porch2/state.d.ts +35 -0
  100. package/dist/commands/porch2/state.d.ts.map +1 -0
  101. package/dist/commands/porch2/state.js +124 -0
  102. package/dist/commands/porch2/state.js.map +1 -0
  103. package/dist/commands/porch2/types.d.ts +79 -0
  104. package/dist/commands/porch2/types.d.ts.map +1 -0
  105. package/dist/commands/porch2/types.js +8 -0
  106. package/dist/commands/porch2/types.js.map +1 -0
  107. package/dist/commands/update.d.ts.map +1 -1
  108. package/dist/commands/update.js +19 -0
  109. package/dist/commands/update.js.map +1 -1
  110. package/dist/lib/scaffold.d.ts +24 -0
  111. package/dist/lib/scaffold.d.ts.map +1 -1
  112. package/dist/lib/scaffold.js +78 -0
  113. package/dist/lib/scaffold.js.map +1 -1
  114. package/package.json +3 -1
  115. package/skeleton/protocols/spider/prompts/specify.md +9 -2
  116. package/skeleton/protocols/spider/protocol.json +79 -153
  117. package/skeleton/protocols/spider/templates/plan.md +14 -0
  118. package/skeleton/roles/architect.md +40 -48
  119. package/skeleton/roles/builder.md +152 -29
  120. package/templates/dashboard/index.html +0 -27
  121. package/templates/dashboard/js/utils.js +0 -86
  122. package/skeleton/porch/protocols/bugfix.json +0 -85
  123. package/skeleton/porch/protocols/spider.json +0 -135
  124. package/skeleton/porch/protocols/tick.json +0 -76
  125. package/templates/dashboard/css/activity.css +0 -151
  126. package/templates/dashboard/js/activity.js +0 -112
@@ -7,31 +7,79 @@
7
7
  /**
8
8
  * Extract signal from Claude output
9
9
  *
10
+ * Supports two formats:
11
+ * - Simple: <signal>SIGNAL_NAME</signal>
12
+ * - With content: <signal type=SIGNAL_NAME>content here</signal>
13
+ *
10
14
  * Rules:
11
- * - Scan for <signal>...</signal> patterns
15
+ * - Scan for both patterns
12
16
  * - Return the LAST signal found (multiple signals → last wins)
13
17
  * - Return null if no signal found
14
18
  */
15
19
  export function extractSignal(output) {
16
- const matches = output.match(/<signal>([^<]+)<\/signal>/gi);
17
- if (!matches || matches.length === 0)
20
+ // Try new format first: <signal type=NAME>content</signal>
21
+ const typedMatches = output.match(/<signal\s+type=([A-Z_]+)>([\s\S]*?)<\/signal>/gi);
22
+ // Also try simple format: <signal>NAME</signal>
23
+ const simpleMatches = output.match(/<signal>([^<]+)<\/signal>/gi);
24
+ // Collect all matches with their positions
25
+ const allMatches = [];
26
+ if (typedMatches) {
27
+ for (const match of typedMatches) {
28
+ const parsed = match.match(/<signal\s+type=([A-Z_]+)>([\s\S]*?)<\/signal>/i);
29
+ if (parsed) {
30
+ const index = output.indexOf(match);
31
+ allMatches.push({
32
+ index,
33
+ type: parsed[1].trim(),
34
+ content: parsed[2].trim() || null
35
+ });
36
+ }
37
+ }
38
+ }
39
+ if (simpleMatches) {
40
+ for (const match of simpleMatches) {
41
+ const parsed = match.match(/<signal>([^<]+)<\/signal>/i);
42
+ if (parsed) {
43
+ const index = output.indexOf(match);
44
+ allMatches.push({
45
+ index,
46
+ type: parsed[1].trim(),
47
+ content: null
48
+ });
49
+ }
50
+ }
51
+ }
52
+ if (allMatches.length === 0)
18
53
  return null;
19
- // Get the last match
20
- const lastMatch = matches[matches.length - 1];
21
- const signalMatch = lastMatch.match(/<signal>([^<]+)<\/signal>/i);
22
- return signalMatch ? signalMatch[1].trim() : null;
54
+ // Sort by position and return the last one
55
+ allMatches.sort((a, b) => a.index - b.index);
56
+ const last = allMatches[allMatches.length - 1];
57
+ return { type: last.type, content: last.content };
23
58
  }
24
59
  /**
25
- * Extract all signals from output
60
+ * Extract all signals from output (returns just the type names)
26
61
  */
27
62
  export function extractAllSignals(output) {
28
- const matches = output.match(/<signal>([^<]+)<\/signal>/gi);
29
- if (!matches)
30
- return [];
31
- return matches.map(match => {
32
- const signalMatch = match.match(/<signal>([^<]+)<\/signal>/i);
33
- return signalMatch ? signalMatch[1].trim() : '';
34
- }).filter(Boolean);
63
+ const results = [];
64
+ // Match typed format: <signal type=NAME>...</signal>
65
+ const typedMatches = output.match(/<signal\s+type=([A-Z_]+)>[\s\S]*?<\/signal>/gi);
66
+ if (typedMatches) {
67
+ for (const match of typedMatches) {
68
+ const parsed = match.match(/<signal\s+type=([A-Z_]+)>/i);
69
+ if (parsed)
70
+ results.push(parsed[1].trim());
71
+ }
72
+ }
73
+ // Match simple format: <signal>NAME</signal>
74
+ const simpleMatches = output.match(/<signal>([^<]+)<\/signal>/gi);
75
+ if (simpleMatches) {
76
+ for (const match of simpleMatches) {
77
+ const parsed = match.match(/<signal>([^<]+)<\/signal>/i);
78
+ if (parsed)
79
+ results.push(parsed[1].trim());
80
+ }
81
+ }
82
+ return results;
35
83
  }
36
84
  /**
37
85
  * Validate a signal against the protocol definition
@@ -65,18 +113,20 @@ export function validateSignal(signal, protocol, currentState) {
65
113
  * Extract and validate signal from output
66
114
  */
67
115
  export function parseSignal(output, protocol, currentState) {
68
- const signal = extractSignal(output);
116
+ const extracted = extractSignal(output);
69
117
  const allSignals = extractAllSignals(output);
70
- if (!signal) {
118
+ if (!extracted) {
71
119
  return {
72
120
  signal: null,
121
+ content: null,
73
122
  allSignals: [],
74
123
  isValid: true, // No signal is valid (use default transition)
75
124
  };
76
125
  }
77
- const validation = validateSignal(signal, protocol, currentState);
126
+ const validation = validateSignal(extracted.type, protocol, currentState);
78
127
  return {
79
- signal,
128
+ signal: extracted.type,
129
+ content: extracted.content,
80
130
  allSignals,
81
131
  isValid: validation.valid,
82
132
  error: validation.warning,
@@ -124,8 +174,9 @@ export const CommonSignals = {
124
174
  PR_CREATED: 'PR_CREATED',
125
175
  // General
126
176
  COMPLETE: 'COMPLETE',
127
- BLOCKED: 'BLOCKED',
177
+ BLOCKED: 'BLOCKED', // Can include reason: BLOCKED:reason text
128
178
  NEEDS_CLARIFICATION: 'NEEDS_CLARIFICATION',
179
+ AWAITING_INPUT: 'AWAITING_INPUT', // Claude needs user input. Can include question: AWAITING_INPUT:Your question here?
129
180
  };
130
181
  /**
131
182
  * Format a signal for output
@@ -1 +1 @@
1
- {"version":3,"file":"signal-parser.js","sourceRoot":"","sources":["../../../src/commands/porch/signal-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-parser.js","sourceRoot":"","sources":["../../../src/commands/porch/signal-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Signal detection for Porch
3
+ *
4
+ * Watches Claude's output file for signal markers:
5
+ * PHASE_COMPLETE - Phase work is done
6
+ * GATE_NEEDED - Human approval required
7
+ * BLOCKED: <reason> - Claude is stuck
8
+ */
9
+ export type Signal = {
10
+ type: 'PHASE_COMPLETE';
11
+ } | {
12
+ type: 'GATE_NEEDED';
13
+ } | {
14
+ type: 'BLOCKED';
15
+ reason: string;
16
+ };
17
+ export interface SignalWatcher {
18
+ /**
19
+ * Check for new signals since last check.
20
+ */
21
+ check(): Promise<Signal | null>;
22
+ /**
23
+ * Stop watching.
24
+ */
25
+ stop(): void;
26
+ }
27
+ /**
28
+ * Create a signal watcher for the given output file.
29
+ */
30
+ export declare function watchForSignal(outputPath: string): SignalWatcher;
31
+ /**
32
+ * Parse a signal from text content (one-shot check).
33
+ */
34
+ export declare function parseSignal(content: string): Signal | null;
35
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAmDhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB1D"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Signal detection for Porch
3
+ *
4
+ * Watches Claude's output file for signal markers:
5
+ * PHASE_COMPLETE - Phase work is done
6
+ * GATE_NEEDED - Human approval required
7
+ * BLOCKED: <reason> - Claude is stuck
8
+ */
9
+ import * as fs from 'node:fs';
10
+ /**
11
+ * Create a signal watcher for the given output file.
12
+ */
13
+ export function watchForSignal(outputPath) {
14
+ let lastPosition = 0;
15
+ let stopped = false;
16
+ return {
17
+ async check() {
18
+ if (stopped)
19
+ return null;
20
+ try {
21
+ if (!fs.existsSync(outputPath)) {
22
+ return null;
23
+ }
24
+ const content = fs.readFileSync(outputPath, 'utf-8');
25
+ // Only check new content since last position
26
+ const newContent = content.slice(lastPosition);
27
+ lastPosition = content.length;
28
+ // Look for signal markers
29
+ // These should be on their own line, possibly in output blocks
30
+ const lines = newContent.split('\n');
31
+ for (const line of lines) {
32
+ const trimmed = line.trim();
33
+ if (trimmed === 'PHASE_COMPLETE' || trimmed.includes('PHASE_COMPLETE')) {
34
+ return { type: 'PHASE_COMPLETE' };
35
+ }
36
+ if (trimmed === 'GATE_NEEDED' || trimmed.includes('GATE_NEEDED')) {
37
+ return { type: 'GATE_NEEDED' };
38
+ }
39
+ const blockedMatch = trimmed.match(/BLOCKED:\s*(.+)/);
40
+ if (blockedMatch) {
41
+ return { type: 'BLOCKED', reason: blockedMatch[1] };
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ catch (err) {
47
+ // File might not exist yet or be locked
48
+ return null;
49
+ }
50
+ },
51
+ stop() {
52
+ stopped = true;
53
+ },
54
+ };
55
+ }
56
+ /**
57
+ * Parse a signal from text content (one-shot check).
58
+ */
59
+ export function parseSignal(content) {
60
+ const lines = content.split('\n');
61
+ for (const line of lines) {
62
+ const trimmed = line.trim();
63
+ if (trimmed === 'PHASE_COMPLETE') {
64
+ return { type: 'PHASE_COMPLETE' };
65
+ }
66
+ if (trimmed === 'GATE_NEEDED') {
67
+ return { type: 'GATE_NEEDED' };
68
+ }
69
+ const blockedMatch = trimmed.match(/BLOCKED:\s*(.+)/);
70
+ if (blockedMatch) {
71
+ return { type: 'BLOCKED', reason: blockedMatch[1] };
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ //# sourceMappingURL=signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/commands/porch/signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAmB9B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,KAAK,CAAC,KAAK;YACT,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC;YAEzB,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAErD,6CAA6C;gBAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC/C,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;gBAE9B,0BAA0B;gBAC1B,+DAA+D;gBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAE5B,IAAI,OAAO,KAAK,gBAAgB,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBACvE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;oBACpC,CAAC;oBAED,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;wBACjE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;oBACjC,CAAC;oBAED,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACtD,IAAI,YAAY,EAAE,CAAC;wBACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtD,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wCAAwC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI;YACF,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,133 +1,35 @@
1
1
  /**
2
2
  * Porch State Management
3
3
  *
4
- * Handles project state persistence with:
5
- * - Pure YAML format (no markdown frontmatter)
6
- * - Atomic writes (tmp file + fsync + rename)
7
- * - File locking (flock advisory locking)
8
- * - Crash recovery
4
+ * Handles project state persistence with atomic writes.
5
+ * Fails loudly on any error - no guessing.
9
6
  */
10
7
  import type { ProjectState, Protocol } from './types.js';
11
- /** Directory for SPIDER project state (relative to project root) */
8
+ /** Directory for project state (relative to project root) */
12
9
  export declare const PROJECTS_DIR = "codev/projects";
13
- /** Directory for TICK/BUGFIX execution state (relative to project root) */
14
- export declare const EXECUTIONS_DIR = "codev/executions";
15
10
  /**
16
- * Get the status file path for a SPIDER project
11
+ * Get the project directory path
17
12
  */
18
- export declare function getProjectStatusPath(projectRoot: string, projectId: string, name?: string): string;
13
+ export declare function getProjectDir(projectRoot: string, projectId: string, name: string): string;
19
14
  /**
20
- * Get the status file path for a TICK/BUGFIX execution
15
+ * Get the status.yaml path for a project
21
16
  */
22
- export declare function getExecutionStatusPath(projectRoot: string, protocol: string, id: string, name?: string): string;
17
+ export declare function getStatusPath(projectRoot: string, projectId: string, name: string): string;
23
18
  /**
24
- * Get the project directory for a SPIDER project
19
+ * Read project state from status.yaml
20
+ * Fails loudly if file is missing or corrupted.
25
21
  */
26
- export declare function getProjectDir(projectRoot: string, projectId: string, name?: string): string;
22
+ export declare function readState(statusPath: string): ProjectState;
27
23
  /**
28
- * Get the worktree path for a protocol execution
24
+ * Write project state atomically (tmp file + rename)
29
25
  */
30
- export declare function getWorktreePath(projectRoot: string, protocol: string, id: string, name?: string): string;
31
- interface FileLock {
32
- fd: number;
33
- lockFile: string;
34
- }
26
+ export declare function writeState(statusPath: string, state: ProjectState): void;
35
27
  /**
36
- * Acquire an advisory lock on a file
37
- * Creates a .lock file to indicate lock ownership
28
+ * Create initial state for a new project
38
29
  */
39
- export declare function acquireLock(filePath: string): Promise<FileLock>;
30
+ export declare function createInitialState(protocol: Protocol, projectId: string, title: string): ProjectState;
40
31
  /**
41
- * Release an advisory lock
32
+ * Find status.yaml by project ID (searches for NNNN-* directories)
42
33
  */
43
- export declare function releaseLock(lock: FileLock): void;
44
- /**
45
- * Simple YAML serializer for project state
46
- * Handles our specific data structures without external dependencies
47
- */
48
- export declare function serializeState(state: ProjectState): string;
49
- /**
50
- * Parse YAML status file into ProjectState
51
- */
52
- export declare function parseState(content: string): ProjectState;
53
- /**
54
- * Read project state from status file
55
- */
56
- export declare function readState(statusFilePath: string): ProjectState | null;
57
- /**
58
- * Write project state atomically
59
- * Uses tmp file + fsync + rename for crash safety
60
- */
61
- export declare function writeState(statusFilePath: string, state: ProjectState): Promise<void>;
62
- /**
63
- * Create initial project state
64
- */
65
- export declare function createInitialState(protocol: Protocol, projectId: string, title: string, worktreePath?: string): ProjectState;
66
- /**
67
- * Update state with a new current state
68
- */
69
- export declare function updateState(state: ProjectState, newState: string, options?: {
70
- signal?: string;
71
- }): ProjectState;
72
- /**
73
- * Approve a gate in state
74
- */
75
- export declare function approveGate(state: ProjectState, gateId: string): ProjectState;
76
- /**
77
- * Request a gate approval (mark as pending with timestamp)
78
- */
79
- export declare function requestGateApproval(state: ProjectState, gateId: string): ProjectState;
80
- /**
81
- * Update phase status
82
- */
83
- export declare function updatePhaseStatus(state: ProjectState, phaseId: string, status: 'pending' | 'in_progress' | 'complete'): ProjectState;
84
- /**
85
- * Set plan phases extracted from plan.md
86
- */
87
- export declare function setPlanPhases(state: ProjectState, phases: Array<{
88
- id: string;
89
- title: string;
90
- description?: string;
91
- }>): ProjectState;
92
- /**
93
- * Find all SPIDER projects
94
- */
95
- export declare function findProjects(projectRoot: string): Array<{
96
- id: string;
97
- path: string;
98
- }>;
99
- /**
100
- * Find all executions (TICK, BUGFIX, etc.)
101
- */
102
- export declare function findExecutions(projectRoot: string): Array<{
103
- protocol: string;
104
- id: string;
105
- path: string;
106
- }>;
107
- /**
108
- * Find status file for a project by ID
109
- */
110
- export declare function findStatusFile(projectRoot: string, projectId: string): string | null;
111
- /**
112
- * Get the number of consultation attempts for a given state
113
- */
114
- export declare function getConsultationAttempts(state: ProjectState, stateKey: string): number;
115
- /**
116
- * Increment consultation attempts for a given state
117
- */
118
- export declare function incrementConsultationAttempts(state: ProjectState, stateKey: string): ProjectState;
119
- /**
120
- * Reset consultation attempts for a given state (e.g., after gate approval)
121
- */
122
- export declare function resetConsultationAttempts(state: ProjectState, stateKey: string): ProjectState;
123
- /**
124
- * Find all status files with pending gates
125
- */
126
- export declare function findPendingGates(projectRoot: string): Array<{
127
- projectId: string;
128
- gateId: string;
129
- requestedAt?: string;
130
- statusPath: string;
131
- }>;
132
- export {};
34
+ export declare function findStatusPath(projectRoot: string, projectId: string): string | null;
133
35
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAEpE,6DAA6D;AAC7D,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAM7C;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1F;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAwB1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAmBxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,YAAY,CA4Bd;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBpF"}