@cluesmith/codev 2.0.0-rc.57 → 2.0.0-rc.59

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 (104) hide show
  1. package/dashboard/dist/assets/index-CXloFYpB.css +32 -0
  2. package/dashboard/dist/assets/index-Ca2fjOJf.js +131 -0
  3. package/dashboard/dist/assets/index-Ca2fjOJf.js.map +1 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/agent-farm/commands/attach.d.ts.map +1 -1
  6. package/dist/agent-farm/commands/attach.js +31 -8
  7. package/dist/agent-farm/commands/attach.js.map +1 -1
  8. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/spawn.js +38 -28
  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 +3 -226
  13. package/dist/agent-farm/commands/start.js.map +1 -1
  14. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  15. package/dist/agent-farm/commands/status.js +5 -2
  16. package/dist/agent-farm/commands/status.js.map +1 -1
  17. package/dist/agent-farm/db/index.d.ts.map +1 -1
  18. package/dist/agent-farm/db/index.js +45 -0
  19. package/dist/agent-farm/db/index.js.map +1 -1
  20. package/dist/agent-farm/db/schema.d.ts +1 -1
  21. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  22. package/dist/agent-farm/db/schema.js +2 -2
  23. package/dist/agent-farm/hq-connector.d.ts +0 -4
  24. package/dist/agent-farm/hq-connector.d.ts.map +1 -1
  25. package/dist/agent-farm/hq-connector.js +0 -15
  26. package/dist/agent-farm/hq-connector.js.map +1 -1
  27. package/dist/agent-farm/servers/tower-server.js +82 -22
  28. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/cli.js +2 -0
  31. package/dist/cli.js.map +1 -1
  32. package/dist/commands/consult/index.d.ts +1 -0
  33. package/dist/commands/consult/index.d.ts.map +1 -1
  34. package/dist/commands/consult/index.js +23 -4
  35. package/dist/commands/consult/index.js.map +1 -1
  36. package/dist/commands/porch/checks.d.ts +3 -2
  37. package/dist/commands/porch/checks.d.ts.map +1 -1
  38. package/dist/commands/porch/checks.js +8 -2
  39. package/dist/commands/porch/checks.js.map +1 -1
  40. package/dist/commands/porch/index.d.ts.map +1 -1
  41. package/dist/commands/porch/index.js +21 -23
  42. package/dist/commands/porch/index.js.map +1 -1
  43. package/dist/commands/porch/next.d.ts +22 -0
  44. package/dist/commands/porch/next.d.ts.map +1 -0
  45. package/dist/commands/porch/next.js +475 -0
  46. package/dist/commands/porch/next.js.map +1 -0
  47. package/dist/commands/porch/protocol.d.ts +3 -3
  48. package/dist/commands/porch/protocol.d.ts.map +1 -1
  49. package/dist/commands/porch/protocol.js +40 -6
  50. package/dist/commands/porch/protocol.js.map +1 -1
  51. package/dist/commands/porch/types.d.ts +36 -1
  52. package/dist/commands/porch/types.d.ts.map +1 -1
  53. package/dist/commands/porch/verdict.d.ts +31 -0
  54. package/dist/commands/porch/verdict.d.ts.map +1 -0
  55. package/dist/commands/porch/verdict.js +59 -0
  56. package/dist/commands/porch/verdict.js.map +1 -0
  57. package/package.json +5 -7
  58. package/skeleton/porch/prompts/defend.md +1 -1
  59. package/skeleton/porch/prompts/evaluate.md +2 -2
  60. package/skeleton/porch/prompts/implement.md +1 -1
  61. package/skeleton/porch/prompts/plan.md +1 -1
  62. package/skeleton/porch/prompts/review.md +4 -4
  63. package/skeleton/porch/prompts/specify.md +1 -1
  64. package/skeleton/porch/prompts/understand.md +2 -2
  65. package/skeleton/protocol-schema.json +3 -3
  66. package/skeleton/protocols/bugfix/builder-prompt.md +1 -1
  67. package/skeleton/protocols/experiment/protocol.md +3 -3
  68. package/skeleton/protocols/experiment/templates/notes.md +1 -1
  69. package/skeleton/protocols/maintain/protocol.md +1 -1
  70. package/skeleton/protocols/protocol-schema.json +1 -1
  71. package/skeleton/protocols/{spider → spir}/builder-prompt.md +1 -1
  72. package/skeleton/protocols/{spider → spir}/prompts/implement.md +1 -1
  73. package/skeleton/protocols/{spider → spir}/prompts/plan.md +2 -2
  74. package/skeleton/protocols/{spider → spir}/prompts/review.md +2 -2
  75. package/skeleton/protocols/{spider → spir}/prompts/specify.md +1 -1
  76. package/skeleton/protocols/{spider → spir}/protocol.json +2 -2
  77. package/skeleton/protocols/{spider → spir}/protocol.md +6 -8
  78. package/skeleton/protocols/{spider → spir}/templates/review.md +1 -1
  79. package/skeleton/protocols/tick/builder-prompt.md +1 -1
  80. package/skeleton/protocols/tick/protocol.md +18 -18
  81. package/skeleton/protocols/tick/templates/review.md +1 -1
  82. package/skeleton/resources/commands/overview.md +1 -1
  83. package/skeleton/resources/workflow-reference.md +2 -2
  84. package/skeleton/roles/architect.md +2 -2
  85. package/skeleton/roles/builder.md +2 -2
  86. package/skeleton/templates/AGENTS.md +1 -1
  87. package/skeleton/templates/CLAUDE.md +1 -1
  88. package/skeleton/templates/cheatsheet.md +3 -3
  89. package/skeleton/templates/projectlist.md +1 -1
  90. package/templates/dashboard/js/main.js +1 -1
  91. package/templates/open.html +26 -0
  92. package/dashboard/dist/assets/index-BV7KQvFU.css +0 -32
  93. package/dashboard/dist/assets/index-bhDjF0Oa.js +0 -131
  94. package/dashboard/dist/assets/index-bhDjF0Oa.js.map +0 -1
  95. package/dist/commands/porch/claude.d.ts +0 -27
  96. package/dist/commands/porch/claude.d.ts.map +0 -1
  97. package/dist/commands/porch/claude.js +0 -107
  98. package/dist/commands/porch/claude.js.map +0 -1
  99. package/dist/commands/porch/run.d.ts +0 -40
  100. package/dist/commands/porch/run.d.ts.map +0 -1
  101. package/dist/commands/porch/run.js +0 -893
  102. package/dist/commands/porch/run.js.map +0 -1
  103. /package/skeleton/protocols/{spider → spir}/templates/plan.md +0 -0
  104. /package/skeleton/protocols/{spider → spir}/templates/spec.md +0 -0
@@ -41,6 +41,13 @@ export interface ProtocolPhase {
41
41
  checks?: string[];
42
42
  next?: string | null;
43
43
  }
44
+ /**
45
+ * Check definition with optional working directory
46
+ */
47
+ export interface CheckDef {
48
+ command: string;
49
+ cwd?: string;
50
+ }
44
51
  /**
45
52
  * Protocol definition (loaded from protocol.json)
46
53
  */
@@ -49,7 +56,7 @@ export interface Protocol {
49
56
  version?: string;
50
57
  description?: string;
51
58
  phases: ProtocolPhase[];
52
- checks?: Record<string, string>;
59
+ checks?: Record<string, CheckDef>;
53
60
  phase_completion?: Record<string, string>;
54
61
  }
55
62
  /**
@@ -117,6 +124,34 @@ export interface ProjectState {
117
124
  started_at: string;
118
125
  updated_at: string;
119
126
  }
127
+ /**
128
+ * Response from `porch next <id>`.
129
+ * Tells the builder what to do next.
130
+ */
131
+ export interface PorchNextResponse {
132
+ status: 'tasks' | 'gate_pending' | 'complete' | 'error';
133
+ phase: string;
134
+ iteration: number;
135
+ plan_phase?: string;
136
+ /** Present when status === 'tasks' or 'gate_pending' (gate tasks are actionable) */
137
+ tasks?: PorchTask[];
138
+ /** Present when status === 'gate_pending' */
139
+ gate?: string;
140
+ /** Present when status === 'error' */
141
+ error?: string;
142
+ /** Present when status === 'complete' */
143
+ summary?: string;
144
+ }
145
+ /**
146
+ * A task for the builder to execute.
147
+ * Claude Code creates these via TaskCreate.
148
+ */
149
+ export interface PorchTask {
150
+ subject: string;
151
+ activeForm: string;
152
+ description: string;
153
+ sequential?: boolean;
154
+ }
120
155
  /**
121
156
  * Result of running a check
122
157
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAClD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,eAAe,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAEpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Verdict parsing for porch consultation reviews.
3
+ *
4
+ * Extracted from run.ts so it can be shared by next.ts.
5
+ */
6
+ import type { Verdict, ReviewResult } from './types.js';
7
+ /**
8
+ * Parse verdict from consultation output.
9
+ *
10
+ * Looks for the verdict line in format:
11
+ * VERDICT: APPROVE
12
+ * VERDICT: REQUEST_CHANGES
13
+ * VERDICT: COMMENT
14
+ *
15
+ * Also handles markdown formatting like:
16
+ * **VERDICT: APPROVE**
17
+ * *VERDICT: APPROVE*
18
+ *
19
+ * Safety: If no explicit verdict found (empty output, crash, malformed),
20
+ * defaults to REQUEST_CHANGES to prevent proceeding with unverified code.
21
+ */
22
+ export declare function parseVerdict(output: string): Verdict;
23
+ /**
24
+ * Check if all reviewers approved (unanimity required).
25
+ *
26
+ * Returns true only if ALL reviewers explicitly APPROVE.
27
+ * COMMENT counts as approve (non-blocking feedback).
28
+ * CONSULT_ERROR and REQUEST_CHANGES block approval.
29
+ */
30
+ export declare function allApprove(reviews: ReviewResult[]): boolean;
31
+ //# sourceMappingURL=verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/verdict.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAwBpD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAG3D"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Verdict parsing for porch consultation reviews.
3
+ *
4
+ * Extracted from run.ts so it can be shared by next.ts.
5
+ */
6
+ /**
7
+ * Parse verdict from consultation output.
8
+ *
9
+ * Looks for the verdict line in format:
10
+ * VERDICT: APPROVE
11
+ * VERDICT: REQUEST_CHANGES
12
+ * VERDICT: COMMENT
13
+ *
14
+ * Also handles markdown formatting like:
15
+ * **VERDICT: APPROVE**
16
+ * *VERDICT: APPROVE*
17
+ *
18
+ * Safety: If no explicit verdict found (empty output, crash, malformed),
19
+ * defaults to REQUEST_CHANGES to prevent proceeding with unverified code.
20
+ */
21
+ export function parseVerdict(output) {
22
+ // Empty or very short output = something went wrong
23
+ if (!output || output.trim().length < 50) {
24
+ return 'REQUEST_CHANGES';
25
+ }
26
+ // Scan lines LAST→FIRST so the actual verdict (at the end) takes priority
27
+ // over template text echoed by codex CLI at the start of output.
28
+ // Skip template lines containing "[" (e.g., "VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]")
29
+ const lines = output.split('\n');
30
+ for (let i = lines.length - 1; i >= 0; i--) {
31
+ // Strip markdown formatting (**, *, __, _, `) and trim
32
+ const stripped = lines[i].trim().replace(/^[\*_`-]+|[\*_`-]+$/g, '').trim().toUpperCase();
33
+ // Match "VERDICT: <value>" but NOT template "VERDICT: [APPROVE | ...]"
34
+ if (stripped.startsWith('VERDICT:') && !stripped.includes('[')) {
35
+ const value = stripped.substring('VERDICT:'.length).trim();
36
+ if (value.startsWith('REQUEST_CHANGES'))
37
+ return 'REQUEST_CHANGES';
38
+ if (value.startsWith('APPROVE'))
39
+ return 'APPROVE';
40
+ if (value.startsWith('COMMENT'))
41
+ return 'COMMENT';
42
+ }
43
+ }
44
+ // No valid VERDICT: line found — default to REQUEST_CHANGES for safety
45
+ return 'REQUEST_CHANGES';
46
+ }
47
+ /**
48
+ * Check if all reviewers approved (unanimity required).
49
+ *
50
+ * Returns true only if ALL reviewers explicitly APPROVE.
51
+ * COMMENT counts as approve (non-blocking feedback).
52
+ * CONSULT_ERROR and REQUEST_CHANGES block approval.
53
+ */
54
+ export function allApprove(reviews) {
55
+ if (reviews.length === 0)
56
+ return true; // No verification = auto-approve
57
+ return reviews.every(r => r.verdict === 'APPROVE' || r.verdict === 'COMMENT');
58
+ }
59
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../../src/commands/porch/verdict.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,oDAAoD;IACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,8FAA8F;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,uDAAuD;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1F,uEAAuE;QACvE,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAAE,OAAO,iBAAiB,CAAC;YAClE,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACpD,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAuB;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IACxE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AAChF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cluesmith/codev",
3
- "version": "2.0.0-rc.57",
3
+ "version": "2.0.0-rc.59",
4
4
  "description": "Codev CLI - AI-assisted software development framework",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,34 +26,32 @@
26
26
  "dev": "tsx src/cli.ts",
27
27
  "start": "node dist/cli.js",
28
28
  "test": "vitest",
29
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
29
+ "test:e2e": "npm run build && vitest run --config vitest.e2e.config.ts",
30
30
  "test:e2e:watch": "vitest --config vitest.e2e.config.ts",
31
+ "test:e2e:playwright": "npx playwright test",
32
+ "test:e2e:cli": "npm run build && vitest run --config vitest.cli.config.ts",
31
33
  "postinstall": "node -e \"try{require('fs').chmodSync(require('path').join(require.resolve('node-pty'),'..','..','prebuilds',process.platform+'-'+process.arch,'spawn-helper'),0o755)}catch{}\"",
32
34
  "prepublishOnly": "npm run build"
33
35
  },
34
36
  "dependencies": {
35
- "@anthropic-ai/claude-agent-sdk": "^0.2.25",
36
37
  "@google/genai": "^1.0.0",
37
38
  "better-sqlite3": "^12.5.0",
38
39
  "chalk": "^5.3.0",
39
40
  "commander": "^12.1.0",
40
41
  "glob": "^11.0.0",
41
- "http-proxy": "^1.18.1",
42
42
  "js-yaml": "^4.1.0",
43
43
  "node-pty": "^1.1.0",
44
44
  "open": "^10.1.0",
45
- "qrcode-terminal": "^0.12.0",
46
45
  "tree-kill": "^1.2.2",
47
46
  "ws": "^8.18.0"
48
47
  },
49
48
  "devDependencies": {
50
49
  "@playwright/test": "^1.58.0",
51
50
  "@types/better-sqlite3": "^7.6.13",
52
- "@types/http-proxy": "^1.17.17",
53
51
  "@types/js-yaml": "^4.0.9",
54
52
  "@types/node": "^22.10.1",
55
- "@types/qrcode-terminal": "^0.12.2",
56
53
  "@types/ws": "^8.18.1",
54
+ "@vitest/coverage-v8": "^4.0.18",
57
55
  "playwright": "^1.58.0",
58
56
  "tsx": "^4.19.2",
59
57
  "typescript": "^5.7.2",
@@ -1,6 +1,6 @@
1
1
  # Defend Phase Prompt
2
2
 
3
- You are the **Tester** hat in a Ralph-SPIDER loop.
3
+ You are the **Tester** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Evaluate Phase Prompt
2
2
 
3
- You are the **Verifier** hat in a Ralph-SPIDER loop.
3
+ You are the **Verifier** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
@@ -66,7 +66,7 @@ Create or update evaluation notes in the status file:
66
66
  ```markdown
67
67
  ## Evaluation Report
68
68
 
69
- **Evaluator**: Ralph-SPIDER Verifier
69
+ **Evaluator**: Ralph-SPIR Verifier
70
70
  **Date**: {date}
71
71
  **Phase**: {phase-name}
72
72
 
@@ -1,6 +1,6 @@
1
1
  # Implement Phase Prompt
2
2
 
3
- You are the **Implementer** hat in a Ralph-SPIDER loop.
3
+ You are the **Implementer** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Plan Phase Prompt
2
2
 
3
- You are the **Planner** hat in a Ralph-SPIDER loop.
3
+ You are the **Planner** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
@@ -1,10 +1,10 @@
1
1
  # Review Phase Prompt
2
2
 
3
- You are the **Reviewer** hat in a Ralph-SPIDER loop.
3
+ You are the **Reviewer** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
7
- Create the final deliverables: PR and review document. This is the capstone of the SPIDER protocol.
7
+ Create the final deliverables: PR and review document. This is the capstone of the SPIR protocol.
8
8
 
9
9
  ## Input Context
10
10
 
@@ -27,7 +27,7 @@ Create `codev/reviews/{project-id}-{name}.md` with:
27
27
  - **ID**: {project-id}
28
28
  - **Spec**: `codev/specs/{project-id}-{name}.md`
29
29
  - **Plan**: `codev/plans/{project-id}-{name}.md`
30
- - **Protocol**: ralph-spider
30
+ - **Protocol**: ralph-spir
31
31
  - **Completed**: {date}
32
32
 
33
33
  ## Summary
@@ -78,7 +78,7 @@ One paragraph summarizing what was built and why.
78
78
  2. Pattern that worked well
79
79
 
80
80
  ### Process Insights
81
- 1. What worked well in the SPIDER process
81
+ 1. What worked well in the SPIR process
82
82
  2. What could be improved
83
83
 
84
84
  ## Recommendations
@@ -1,6 +1,6 @@
1
1
  # Specify Phase Prompt
2
2
 
3
- You are the **Spec Writer** hat in a Ralph-SPIDER loop.
3
+ You are the **Spec Writer** hat in a Ralph-SPIR loop.
4
4
 
5
5
  ## Your Mission
6
6
 
@@ -30,7 +30,7 @@ TICK is appropriate when:
30
30
  - [ ] Requirements are clear
31
31
  - [ ] No architectural changes needed
32
32
 
33
- If NOT appropriate, signal: `<signal>NEEDS_SPIDER</signal>`
33
+ If NOT appropriate, signal: `<signal>NEEDS_SPIR</signal>`
34
34
 
35
35
  ### 3. Document Understanding
36
36
 
@@ -58,4 +58,4 @@ When understanding is complete:
58
58
 
59
59
  - DO NOT start implementing
60
60
  - DO NOT create new spec files (amend existing)
61
- - Keep scope small - if > 300 LOC, recommend SPIDER instead
61
+ - Keep scope small - if > 300 LOC, recommend SPIR instead
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://codev.dev/protocol-schema.json",
4
4
  "title": "Codev Protocol Definition",
5
- "description": "Schema for porch protocol definitions (SPIDER, TICK, BUGFIX, etc.)",
5
+ "description": "Schema for porch protocol definitions (SPIR, TICK, BUGFIX, etc.)",
6
6
  "type": "object",
7
7
  "required": ["name", "phases"],
8
8
  "properties": {
@@ -12,12 +12,12 @@
12
12
  },
13
13
  "name": {
14
14
  "type": "string",
15
- "description": "Protocol name (e.g., 'spider', 'tick', 'bugfix')",
15
+ "description": "Protocol name (e.g., 'spir', 'tick', 'bugfix')",
16
16
  "pattern": "^[a-z][a-z0-9-]*$"
17
17
  },
18
18
  "alias": {
19
19
  "type": "string",
20
- "description": "Alternative name for the protocol (e.g., 'spir' for spider)"
20
+ "description": "Alternative name for the protocol (e.g., 'spider' for spir)"
21
21
  },
22
22
  "version": {
23
23
  "type": "string",
@@ -39,7 +39,7 @@ Follow the BUGFIX protocol: `codev/protocols/bugfix/protocol.md`
39
39
 
40
40
  If the fix is too complex (> 300 LOC or architectural changes), notify the Architect via:
41
41
  ```bash
42
- af send architect "Issue #{{issue.number}} is more complex than expected. [Reason]. Recommend escalating to SPIDER/TICK."
42
+ af send architect "Issue #{{issue.number}} is more complex than expected. [Reason]. Recommend escalating to SPIR/TICK."
43
43
  ```
44
44
  {{/if}}
45
45
 
@@ -10,7 +10,7 @@ Disciplined experimentation: Each experiment gets its own directory with `notes.
10
10
 
11
11
  **Use for**: Testing approaches, evaluating models, prototyping, proof-of-concept work, research spikes
12
12
 
13
- **Skip for**: Production code (use SPIDER), simple one-off scripts, well-understood implementations (use TICK)
13
+ **Skip for**: Production code (use SPIR), simple one-off scripts, well-understood implementations (use TICK)
14
14
 
15
15
  ## Structure
16
16
 
@@ -141,7 +141,7 @@ What should be done based on findings?
141
141
 
142
142
  ## Integration with Other Protocols
143
143
 
144
- ### Experiment → SPIDER
144
+ ### Experiment → SPIR
145
145
  When an experiment validates an approach for production use:
146
146
 
147
147
  1. Create a specification referencing the experiment
@@ -225,5 +225,5 @@ Determine if Redis caching improves API response times for repeated queries.
225
225
  - Memory usage: 50MB for 10k cached responses
226
226
 
227
227
  ## Next Steps
228
- Create SPIDER spec for production caching implementation.
228
+ Create SPIR spec for production caching implementation.
229
229
  ```
@@ -88,7 +88,7 @@ Based on these findings:
88
88
 
89
89
  1. **Immediate**: What should happen right after this experiment?
90
90
  2. **Follow-up experiments**: What new questions emerged?
91
- 3. **Production path**: If validated, what's needed for production? (SPIDER spec?)
91
+ 3. **Production path**: If validated, what's needed for production? (SPIR spec?)
92
92
 
93
93
  ## References
94
94
 
@@ -479,7 +479,7 @@ MAINTAIN is an **operational protocol**, not a feature development protocol:
479
479
  | Review | No |
480
480
  | 3-Way Consultation | **Yes** (before creating PR) |
481
481
 
482
- **Exception**: If MAINTAIN reveals need for architectural changes, those should follow SPIDER.
482
+ **Exception**: If MAINTAIN reveals need for architectural changes, those should follow SPIR.
483
483
 
484
484
  ---
485
485
 
@@ -8,7 +8,7 @@
8
8
  "properties": {
9
9
  "name": {
10
10
  "type": "string",
11
- "description": "Protocol identifier (e.g., 'spider', 'tick', 'bugfix')"
11
+ "description": "Protocol identifier (e.g., 'spir', 'tick', 'bugfix')"
12
12
  },
13
13
  "version": {
14
14
  "type": "string",
@@ -21,7 +21,7 @@ You are running in STRICT mode. This means:
21
21
  {{/if}}
22
22
 
23
23
  ## Protocol
24
- Follow the SPIDER protocol: `codev/protocols/spider/protocol.md`
24
+ Follow the SPIR protocol: `codev/protocols/spir/protocol.md`
25
25
  Read and internalize the protocol before starting any work.
26
26
 
27
27
  {{#if spec}}
@@ -1,6 +1,6 @@
1
1
  # IMPLEMENT Phase Prompt
2
2
 
3
- You are executing the **IMPLEMENT** phase of the SPIDER protocol.
3
+ You are executing the **IMPLEMENT** phase of the SPIR protocol.
4
4
 
5
5
  ## Your Goal
6
6
 
@@ -1,6 +1,6 @@
1
1
  # PLAN Phase Prompt
2
2
 
3
- You are executing the **PLAN** phase of the SPIDER protocol.
3
+ You are executing the **PLAN** phase of the SPIR protocol.
4
4
 
5
5
  ## Your Goal
6
6
 
@@ -76,7 +76,7 @@ After completing the plan draft, signal completion. Porch will run 3-way consult
76
76
 
77
77
  Create the plan file at `codev/plans/{{project_id}}-{{title}}.md`.
78
78
 
79
- Use the plan template from `codev/protocols/spider/templates/plan.md` if available.
79
+ Use the plan template from `codev/protocols/spir/templates/plan.md` if available.
80
80
 
81
81
  ### Plan Structure
82
82
 
@@ -1,6 +1,6 @@
1
1
  # REVIEW Phase Prompt
2
2
 
3
- You are executing the **REVIEW** phase of the SPIDER protocol.
3
+ You are executing the **REVIEW** phase of the SPIR protocol.
4
4
 
5
5
  ## Your Goal
6
6
 
@@ -88,7 +88,7 @@ Brief description of what was implemented.
88
88
  - [Insight 2]
89
89
 
90
90
  ### Methodology Improvements
91
- - [Suggested improvement to SPIDER protocol]
91
+ - [Suggested improvement to SPIR protocol]
92
92
  - [Suggested improvement to tooling]
93
93
 
94
94
  ## Technical Debt
@@ -1,6 +1,6 @@
1
1
  # SPECIFY Phase Prompt
2
2
 
3
- You are executing the **SPECIFY** phase of the SPIDER protocol.
3
+ You are executing the **SPECIFY** phase of the SPIR protocol.
4
4
 
5
5
  ## Your Goal
6
6
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "../../protocol-schema.json",
3
- "name": "spider",
4
- "alias": "spir",
3
+ "name": "spir",
4
+ "alias": "spider",
5
5
  "version": "2.2.0",
6
6
  "description": "SPIR: Specify → Plan → Implement → Review with build-verify cycles",
7
7
  "input": {
@@ -1,7 +1,5 @@
1
- # SPIR Protocol (formerly SPIDER)
1
+ # SPIR Protocol
2
2
 
3
- > **Also known as**: SPIDER (legacy name)
4
- >
5
3
  > **SPIR** = **S**pecify → **P**lan → **I**mplement → **R**eview
6
4
  >
7
5
  > Each phase has one build-verify cycle with 3-way consultation.
@@ -20,17 +18,17 @@
20
18
  ### Multi-Agent Consultation (ENABLED BY DEFAULT)
21
19
 
22
20
  **DEFAULT BEHAVIOR:**
23
- Multi-agent consultation is **ENABLED BY DEFAULT** when using SPIDER protocol.
21
+ Multi-agent consultation is **ENABLED BY DEFAULT** when using SPIR protocol.
24
22
 
25
23
  **DEFAULT AGENTS:**
26
24
  - **GPT-5 Codex**: Primary reviewer for architecture, feasibility, and code quality
27
25
  - **Gemini Pro**: Secondary reviewer for completeness, edge cases, and alternative approaches
28
26
 
29
27
  **DISABLING CONSULTATION:**
30
- To run SPIDER without consultation, say "without consultation" when starting work.
28
+ To run SPIR without consultation, say "without consultation" when starting work.
31
29
 
32
30
  **CUSTOM AGENTS:**
33
- The user can specify different agents by saying: "use SPIDER with consultation from [agent1] and [agent2]"
31
+ The user can specify different agents by saying: "use SPIR with consultation from [agent1] and [agent2]"
34
32
 
35
33
  **CONSULTATION BEHAVIOR:**
36
34
  - DEFAULT: MANDATORY consultation with GPT-5 and Gemini Pro at EVERY checkpoint
@@ -596,12 +594,12 @@ Implements bcrypt-based password hashing with configurable rounds
596
594
 
597
595
  ### Branch Naming
598
596
  ```
599
- spider/####-<spec-name>/<phase-name>
597
+ spir/####-<spec-name>/<phase-name>
600
598
  ```
601
599
 
602
600
  Example:
603
601
  ```
604
- spider/0001-user-authentication/database-schema
602
+ spir/0001-user-authentication/database-schema
605
603
  ```
606
604
 
607
605
 
@@ -106,7 +106,7 @@
106
106
 
107
107
  ## Methodology Feedback
108
108
 
109
- ### SP(IDE)R Protocol Effectiveness
109
+ ### SPIR Protocol Effectiveness
110
110
  - **Specification Phase**: [Was it thorough enough? Too detailed?]
111
111
  - **Planning Phase**: [Were estimates accurate? Phases well-sized?]
112
112
  - **Implementation Loop**: [Did IDE cycle work well?]
@@ -22,7 +22,7 @@ You are running in STRICT mode. This means:
22
22
  ## Protocol
23
23
  Follow the TICK protocol: `codev/protocols/tick/protocol.md`
24
24
 
25
- TICK is for amendments to existing SPIDER specifications. You will:
25
+ TICK is for amendments to existing SPIR specifications. You will:
26
26
  1. Identify the target spec to amend
27
27
  2. Update the spec with the amendment
28
28
  3. Update the plan
@@ -3,16 +3,16 @@
3
3
 
4
4
  ## Overview
5
5
 
6
- TICK is an **amendment workflow** for existing SPIDER specifications. Rather than creating new standalone specs, TICK modifies existing spec and plan documents in-place, tracking changes in an "Amendments" section.
6
+ TICK is an **amendment workflow** for existing SPIR specifications. Rather than creating new standalone specs, TICK modifies existing spec and plan documents in-place, tracking changes in an "Amendments" section.
7
7
 
8
- **Core Principle**: TICK is for *refining* existing specs. SPIDER is for *creating* new specs.
8
+ **Core Principle**: TICK is for *refining* existing specs. SPIR is for *creating* new specs.
9
9
 
10
- **Key Insight**: TICKs are not small SPIDERs - they're amendments to existing SPIDERs. This eliminates the "TICK vs SPIDER" decision problem and keeps related work together.
10
+ **Key Insight**: TICKs are not small SPIRs - they're amendments to existing SPIRs. This eliminates the "TICK vs SPIR" decision problem and keeps related work together.
11
11
 
12
12
  ## When to Use TICK
13
13
 
14
14
  ### Use TICK when:
15
- - Making **amendments to an existing SPIDER spec** that is already `integrated`
15
+ - Making **amendments to an existing SPIR spec** that is already `integrated`
16
16
  - Small scope (< 300 lines of new/changed code)
17
17
  - Requirements are clear and well-defined
18
18
  - No fundamental architecture changes
@@ -23,7 +23,7 @@ TICK is an **amendment workflow** for existing SPIDER specifications. Rather tha
23
23
  - Utility function additions to existing modules
24
24
  - Refactoring within an existing feature
25
25
 
26
- ### Use SPIDER instead when:
26
+ ### Use SPIR instead when:
27
27
  - Creating a **new feature from scratch** (no existing spec to amend)
28
28
  - Major architecture changes (scope too large for amendment)
29
29
  - Unclear requirements needing exploration
@@ -31,8 +31,8 @@ TICK is an **amendment workflow** for existing SPIDER specifications. Rather tha
31
31
  - Multiple stakeholders need alignment
32
32
 
33
33
  ### Cannot Use TICK when:
34
- - No relevant SPIDER spec exists (create a new SPIDER spec instead)
35
- - Target spec is not yet `integrated` (complete the SPIDER cycle first)
34
+ - No relevant SPIR spec exists (create a new SPIR spec instead)
35
+ - Target spec is not yet `integrated` (complete the SPIR cycle first)
36
36
 
37
37
  ## Amendment Workflow
38
38
 
@@ -162,9 +162,9 @@ The format `[TICK ####-NNN]` identifies:
162
162
  - `####`: Parent spec number (e.g., 0002)
163
163
  - `NNN`: TICK amendment number (e.g., 001, 002, 003)
164
164
 
165
- ## Key Differences from SPIDER
165
+ ## Key Differences from SPIR
166
166
 
167
- | Aspect | SPIDER | TICK |
167
+ | Aspect | SPIR | TICK |
168
168
  |--------|--------|------|
169
169
  | Purpose | Create new features | Amend existing features |
170
170
  | File creation | Creates new spec/plan/review | Modifies spec/plan, creates review |
@@ -178,16 +178,16 @@ The format `[TICK ####-NNN]` identifies:
178
178
 
179
179
  ```
180
180
  Is there an existing spec to amend?
181
- ├── NO → Use SPIDER (create new spec)
181
+ ├── NO → Use SPIR (create new spec)
182
182
  └── YES → Is it integrated?
183
- ├── NO → Complete SPIDER cycle first
183
+ ├── NO → Complete SPIR cycle first
184
184
  └── YES → Is the change small (<300 LOC)?
185
185
  ├── YES → Use TICK (amend existing spec)
186
- └── NO → Use SPIDER (scope too large)
186
+ └── NO → Use SPIR (scope too large)
187
187
  ```
188
188
 
189
189
  **Mental Model**:
190
- - SPIDER = Create new feature from scratch
190
+ - SPIR = Create new feature from scratch
191
191
  - TICK = Refine/extend existing feature
192
192
 
193
193
  ## Example TICK Workflow
@@ -251,7 +251,7 @@ Existing standalone TICK projects (created before this protocol change) are gran
251
251
  1. **Single source of truth**: Spec file shows complete feature evolution
252
252
  2. **Clear history**: Amendments section documents all changes chronologically
253
253
  3. **Reduced fragmentation**: Related work stays together
254
- 4. **Simpler mental model**: "New vs amendment" is clearer than "SPIDER vs TICK"
254
+ 4. **Simpler mental model**: "New vs amendment" is clearer than "SPIR vs TICK"
255
255
  5. **Preserved context**: Looking at a spec shows all refinements
256
256
 
257
257
  ## Limitations
@@ -264,14 +264,14 @@ Existing standalone TICK projects (created before this protocol change) are gran
264
264
  ## Best Practices
265
265
 
266
266
  1. **Verify spec is integrated**: Never TICK a spec that isn't complete
267
- 2. **Keep TICKs small**: If scope grows, consider new SPIDER spec
267
+ 2. **Keep TICKs small**: If scope grows, consider new SPIR spec
268
268
  3. **Clear summaries**: Amendment entries should be self-explanatory
269
269
  4. **Test before review**: Always test functionality before presenting
270
270
  5. **Honest documentation**: Document all deviations in review
271
271
 
272
272
  ## Templates
273
273
 
274
- TICK uses the standard SPIDER templates with amendments sections:
275
- - Spec template: `codev/protocols/spider/templates/spec.md` (includes Amendments section)
276
- - Plan template: `codev/protocols/spider/templates/plan.md` (includes Amendment History section)
274
+ TICK uses the standard SPIR templates with amendments sections:
275
+ - Spec template: `codev/protocols/spir/templates/spec.md` (includes Amendments section)
276
+ - Plan template: `codev/protocols/spir/templates/plan.md` (includes Amendment History section)
277
277
  - Review template: `codev/protocols/tick/templates/review.md` (TICK-specific)