@cluesmith/codev 2.0.0-rc.6 → 2.0.0-rc.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/af.js +2 -2
- package/bin/consult.js +1 -1
- package/bin/porch.js +6 -35
- package/dashboard/dist/assets/index-CXloFYpB.css +32 -0
- package/dashboard/dist/assets/index-Ca2fjOJf.js +131 -0
- package/dashboard/dist/assets/index-Ca2fjOJf.js.map +1 -0
- package/dashboard/dist/index.html +14 -0
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +94 -65
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +13 -6
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.d.ts +13 -0
- package/dist/agent-farm/commands/attach.d.ts.map +1 -0
- package/dist/agent-farm/commands/attach.js +202 -0
- package/dist/agent-farm/commands/attach.js.map +1 -0
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +30 -3
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.js +1 -1
- package/dist/agent-farm/commands/consult.js.map +1 -1
- package/dist/agent-farm/commands/index.d.ts +2 -2
- package/dist/agent-farm/commands/index.d.ts.map +1 -1
- package/dist/agent-farm/commands/index.js +2 -2
- package/dist/agent-farm/commands/index.js.map +1 -1
- package/dist/agent-farm/commands/open.d.ts +4 -2
- package/dist/agent-farm/commands/open.d.ts.map +1 -1
- package/dist/agent-farm/commands/open.js +37 -70
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +55 -17
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/{util.d.ts → shell.d.ts} +5 -5
- package/dist/agent-farm/commands/shell.d.ts.map +1 -0
- package/dist/agent-farm/commands/{util.js → shell.js} +23 -36
- package/dist/agent-farm/commands/shell.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +503 -226
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts +3 -0
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +55 -265
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts +2 -0
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +61 -3
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/stop.d.ts +6 -0
- package/dist/agent-farm/commands/stop.d.ts.map +1 -1
- package/dist/agent-farm/commands/stop.js +116 -12
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/commands/tower.d.ts +9 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +59 -19
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +124 -0
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +2 -2
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +26 -5
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +3 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js +3 -0
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/hq-connector.d.ts +2 -6
- package/dist/agent-farm/hq-connector.d.ts.map +1 -1
- package/dist/agent-farm/hq-connector.js +2 -17
- package/dist/agent-farm/hq-connector.js.map +1 -1
- package/dist/agent-farm/lib/tower-client.d.ts +157 -0
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -0
- package/dist/agent-farm/lib/tower-client.js +223 -0
- package/dist/agent-farm/lib/tower-client.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +2137 -112
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +4 -10
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +30 -31
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +48 -1
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +13 -14
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/deps.d.ts.map +1 -1
- package/dist/agent-farm/utils/deps.js +0 -16
- package/dist/agent-farm/utils/deps.js.map +1 -1
- package/dist/agent-farm/utils/notifications.d.ts +30 -0
- package/dist/agent-farm/utils/notifications.d.ts.map +1 -0
- package/dist/agent-farm/utils/notifications.js +121 -0
- package/dist/agent-farm/utils/notifications.js.map +1 -0
- package/dist/agent-farm/utils/port-registry.d.ts +0 -1
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -1
- package/dist/agent-farm/utils/port-registry.js +1 -1
- package/dist/agent-farm/utils/port-registry.js.map +1 -1
- package/dist/agent-farm/utils/server-utils.d.ts +4 -4
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +4 -15
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/agent-farm/utils/shell.d.ts +9 -22
- package/dist/agent-farm/utils/shell.d.ts.map +1 -1
- package/dist/agent-farm/utils/shell.js +34 -34
- package/dist/agent-farm/utils/shell.js.map +1 -1
- package/dist/agent-farm/utils/terminal-ports.d.ts +1 -1
- package/dist/agent-farm/utils/terminal-ports.js +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -54
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +49 -4
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +1 -0
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +85 -6
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +0 -15
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +41 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/build-counter.d.ts +5 -0
- package/dist/commands/porch/build-counter.d.ts.map +1 -0
- package/dist/commands/porch/build-counter.js +5 -0
- package/dist/commands/porch/build-counter.js.map +1 -0
- package/dist/commands/porch/checks.d.ts +17 -29
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +96 -144
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/index.d.ts +21 -43
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +418 -1123
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts +22 -0
- package/dist/commands/porch/next.d.ts.map +1 -0
- package/dist/commands/porch/next.js +479 -0
- package/dist/commands/porch/next.js.map +1 -0
- package/dist/commands/porch/plan.d.ts +70 -0
- package/dist/commands/porch/plan.d.ts.map +1 -0
- package/dist/commands/porch/plan.js +190 -0
- package/dist/commands/porch/plan.js.map +1 -0
- package/dist/commands/porch/prompts.d.ts +19 -0
- package/dist/commands/porch/prompts.d.ts.map +1 -0
- package/dist/commands/porch/prompts.js +255 -0
- package/dist/commands/porch/prompts.js.map +1 -0
- package/dist/commands/porch/protocol.d.ts +59 -0
- package/dist/commands/porch/protocol.d.ts.map +1 -0
- package/dist/commands/porch/protocol.js +294 -0
- package/dist/commands/porch/protocol.js.map +1 -0
- package/dist/commands/porch/state.d.ts +23 -112
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +81 -699
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/porch/types.d.ts +99 -164
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/commands/porch/types.js +2 -1
- package/dist/commands/porch/types.js.map +1 -1
- package/dist/commands/porch/verdict.d.ts +31 -0
- package/dist/commands/porch/verdict.d.ts.map +1 -0
- package/dist/commands/porch/verdict.js +59 -0
- package/dist/commands/porch/verdict.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +31 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/scaffold.d.ts +37 -0
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +114 -0
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/terminal/index.d.ts +8 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +5 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +60 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -0
- package/dist/terminal/pty-manager.js +334 -0
- package/dist/terminal/pty-manager.js.map +1 -0
- package/dist/terminal/pty-session.d.ts +79 -0
- package/dist/terminal/pty-session.d.ts.map +1 -0
- package/dist/terminal/pty-session.js +215 -0
- package/dist/terminal/pty-session.js.map +1 -0
- package/dist/terminal/ring-buffer.d.ts +27 -0
- package/dist/terminal/ring-buffer.d.ts.map +1 -0
- package/dist/terminal/ring-buffer.js +74 -0
- package/dist/terminal/ring-buffer.js.map +1 -0
- package/dist/terminal/ws-protocol.d.ts +27 -0
- package/dist/terminal/ws-protocol.d.ts.map +1 -0
- package/dist/terminal/ws-protocol.js +44 -0
- package/dist/terminal/ws-protocol.js.map +1 -0
- package/package.json +18 -5
- package/skeleton/.claude/skills/af/SKILL.md +74 -0
- package/skeleton/.claude/skills/codev/SKILL.md +41 -0
- package/skeleton/.claude/skills/consult/SKILL.md +81 -0
- package/skeleton/.claude/skills/generate-image/SKILL.md +56 -0
- package/skeleton/DEPENDENCIES.md +3 -29
- package/skeleton/builders.md +1 -1
- package/skeleton/porch/prompts/defend.md +1 -1
- package/skeleton/porch/prompts/evaluate.md +2 -2
- package/skeleton/porch/prompts/implement.md +1 -1
- package/skeleton/porch/prompts/plan.md +1 -1
- package/skeleton/porch/prompts/review.md +4 -4
- package/skeleton/porch/prompts/specify.md +1 -1
- package/skeleton/porch/prompts/understand.md +2 -2
- package/skeleton/protocol-schema.json +282 -0
- package/skeleton/protocols/bugfix/builder-prompt.md +54 -0
- package/skeleton/protocols/bugfix/prompts/fix.md +77 -0
- package/skeleton/protocols/bugfix/prompts/investigate.md +77 -0
- package/skeleton/protocols/bugfix/prompts/pr.md +61 -0
- package/skeleton/protocols/bugfix/protocol.json +19 -2
- package/skeleton/protocols/experiment/builder-prompt.md +52 -0
- package/skeleton/protocols/experiment/protocol.json +101 -0
- package/skeleton/protocols/experiment/protocol.md +3 -3
- package/skeleton/protocols/experiment/templates/notes.md +1 -1
- package/skeleton/protocols/maintain/builder-prompt.md +46 -0
- package/skeleton/protocols/maintain/prompts/audit.md +111 -0
- package/skeleton/protocols/maintain/prompts/clean.md +91 -0
- package/skeleton/protocols/maintain/prompts/sync.md +113 -0
- package/skeleton/protocols/maintain/prompts/verify.md +110 -0
- package/skeleton/protocols/maintain/protocol.json +141 -0
- package/skeleton/protocols/maintain/protocol.md +14 -8
- package/skeleton/protocols/protocol-schema.json +54 -1
- package/skeleton/protocols/spir/builder-prompt.md +59 -0
- package/skeleton/protocols/spir/prompts/implement.md +208 -0
- package/skeleton/protocols/{spider → spir}/prompts/plan.md +6 -70
- package/skeleton/protocols/{spider → spir}/prompts/review.md +7 -25
- package/skeleton/protocols/{spider → spir}/prompts/specify.md +33 -61
- package/skeleton/protocols/spir/protocol.json +152 -0
- package/skeleton/protocols/{spider → spir}/protocol.md +35 -21
- package/skeleton/protocols/{spider → spir}/templates/plan.md +14 -0
- package/skeleton/protocols/{spider → spir}/templates/review.md +1 -1
- package/skeleton/protocols/tick/builder-prompt.md +56 -0
- package/skeleton/protocols/tick/protocol.json +7 -2
- package/skeleton/protocols/tick/protocol.md +18 -18
- package/skeleton/protocols/tick/templates/review.md +1 -1
- package/skeleton/resources/commands/agent-farm.md +25 -43
- package/skeleton/resources/commands/overview.md +7 -17
- package/skeleton/resources/workflow-reference.md +4 -4
- package/skeleton/roles/architect.md +152 -315
- package/skeleton/roles/builder.md +109 -218
- package/skeleton/templates/AGENTS.md +2 -2
- package/skeleton/templates/CLAUDE.md +2 -2
- package/skeleton/templates/cheatsheet.md +7 -5
- package/skeleton/templates/projectlist.md +1 -1
- package/templates/dashboard/index.html +17 -43
- package/templates/dashboard/js/dialogs.js +7 -7
- package/templates/dashboard/js/files.js +2 -2
- package/templates/dashboard/js/main.js +4 -4
- package/templates/dashboard/js/projects.js +3 -3
- package/templates/dashboard/js/tabs.js +1 -1
- package/templates/dashboard/js/utils.js +22 -87
- package/templates/open.html +26 -0
- package/templates/tower.html +542 -27
- package/dist/agent-farm/commands/kickoff.d.ts +0 -19
- package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
- package/dist/agent-farm/commands/kickoff.js +0 -331
- package/dist/agent-farm/commands/kickoff.js.map +0 -1
- package/dist/agent-farm/commands/rename.d.ts +0 -13
- package/dist/agent-farm/commands/rename.d.ts.map +0 -1
- package/dist/agent-farm/commands/rename.js +0 -33
- package/dist/agent-farm/commands/rename.js.map +0 -1
- package/dist/agent-farm/commands/tutorial.d.ts +0 -10
- package/dist/agent-farm/commands/tutorial.d.ts.map +0 -1
- package/dist/agent-farm/commands/tutorial.js +0 -49
- package/dist/agent-farm/commands/tutorial.js.map +0 -1
- package/dist/agent-farm/commands/util.d.ts.map +0 -1
- package/dist/agent-farm/commands/util.js.map +0 -1
- package/dist/agent-farm/servers/dashboard-server.d.ts +0 -7
- package/dist/agent-farm/servers/dashboard-server.d.ts.map +0 -1
- package/dist/agent-farm/servers/dashboard-server.js +0 -1872
- package/dist/agent-farm/servers/dashboard-server.js.map +0 -1
- package/dist/agent-farm/servers/open-server.d.ts +0 -7
- package/dist/agent-farm/servers/open-server.d.ts.map +0 -1
- package/dist/agent-farm/servers/open-server.js +0 -315
- package/dist/agent-farm/servers/open-server.js.map +0 -1
- package/dist/agent-farm/tutorial/index.d.ts +0 -8
- package/dist/agent-farm/tutorial/index.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/index.js +0 -8
- package/dist/agent-farm/tutorial/index.js.map +0 -1
- package/dist/agent-farm/tutorial/prompts.d.ts +0 -57
- package/dist/agent-farm/tutorial/prompts.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/prompts.js +0 -147
- package/dist/agent-farm/tutorial/prompts.js.map +0 -1
- package/dist/agent-farm/tutorial/runner.d.ts +0 -52
- package/dist/agent-farm/tutorial/runner.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/runner.js +0 -204
- package/dist/agent-farm/tutorial/runner.js.map +0 -1
- package/dist/agent-farm/tutorial/state.d.ts +0 -26
- package/dist/agent-farm/tutorial/state.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/state.js +0 -89
- package/dist/agent-farm/tutorial/state.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/first-spec.js +0 -136
- package/dist/agent-farm/tutorial/steps/first-spec.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/implementation.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/implementation.js +0 -76
- package/dist/agent-farm/tutorial/steps/implementation.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/index.d.ts +0 -10
- package/dist/agent-farm/tutorial/steps/index.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/index.js +0 -10
- package/dist/agent-farm/tutorial/steps/index.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/planning.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/planning.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/planning.js +0 -143
- package/dist/agent-farm/tutorial/steps/planning.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/review.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/review.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/review.js +0 -78
- package/dist/agent-farm/tutorial/steps/review.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/setup.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/setup.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/setup.js +0 -126
- package/dist/agent-farm/tutorial/steps/setup.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/welcome.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/welcome.js +0 -50
- package/dist/agent-farm/tutorial/steps/welcome.js.map +0 -1
- package/dist/commands/pcheck/cache.d.ts +0 -48
- package/dist/commands/pcheck/cache.d.ts.map +0 -1
- package/dist/commands/pcheck/cache.js +0 -170
- package/dist/commands/pcheck/cache.js.map +0 -1
- package/dist/commands/pcheck/evaluator.d.ts +0 -15
- package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
- package/dist/commands/pcheck/evaluator.js +0 -246
- package/dist/commands/pcheck/evaluator.js.map +0 -1
- package/dist/commands/pcheck/index.d.ts +0 -12
- package/dist/commands/pcheck/index.d.ts.map +0 -1
- package/dist/commands/pcheck/index.js +0 -249
- package/dist/commands/pcheck/index.js.map +0 -1
- package/dist/commands/pcheck/parser.d.ts +0 -39
- package/dist/commands/pcheck/parser.d.ts.map +0 -1
- package/dist/commands/pcheck/parser.js +0 -155
- package/dist/commands/pcheck/parser.js.map +0 -1
- package/dist/commands/pcheck/types.d.ts +0 -82
- package/dist/commands/pcheck/types.d.ts.map +0 -1
- package/dist/commands/pcheck/types.js +0 -5
- package/dist/commands/pcheck/types.js.map +0 -1
- package/dist/commands/porch/consultation.d.ts +0 -56
- package/dist/commands/porch/consultation.d.ts.map +0 -1
- package/dist/commands/porch/consultation.js +0 -330
- package/dist/commands/porch/consultation.js.map +0 -1
- package/dist/commands/porch/notifications.d.ts +0 -99
- package/dist/commands/porch/notifications.d.ts.map +0 -1
- package/dist/commands/porch/notifications.js +0 -223
- package/dist/commands/porch/notifications.js.map +0 -1
- package/dist/commands/porch/plan-parser.d.ts +0 -38
- package/dist/commands/porch/plan-parser.d.ts.map +0 -1
- package/dist/commands/porch/plan-parser.js +0 -166
- package/dist/commands/porch/plan-parser.js.map +0 -1
- package/dist/commands/porch/protocol-loader.d.ts +0 -46
- package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
- package/dist/commands/porch/protocol-loader.js +0 -253
- package/dist/commands/porch/protocol-loader.js.map +0 -1
- package/dist/commands/porch/signal-parser.d.ts +0 -88
- package/dist/commands/porch/signal-parser.d.ts.map +0 -1
- package/dist/commands/porch/signal-parser.js +0 -148
- package/dist/commands/porch/signal-parser.js.map +0 -1
- package/dist/commands/tower.d.ts +0 -16
- package/dist/commands/tower.d.ts.map +0 -1
- package/dist/commands/tower.js +0 -21
- package/dist/commands/tower.js.map +0 -1
- package/skeleton/config.json +0 -7
- package/skeleton/porch/protocols/bugfix.json +0 -85
- package/skeleton/porch/protocols/spider.json +0 -135
- package/skeleton/porch/protocols/tick.json +0 -76
- package/skeleton/protocols/spider/prompts/defend.md +0 -215
- package/skeleton/protocols/spider/prompts/evaluate.md +0 -241
- package/skeleton/protocols/spider/prompts/implement.md +0 -149
- package/skeleton/protocols/spider/protocol.json +0 -210
- package/templates/dashboard/css/activity.css +0 -151
- package/templates/dashboard/js/activity.js +0 -112
- /package/skeleton/protocols/{spider → spir}/templates/spec.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYjH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CAoBhF;AAuLD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAExF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAM7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAa5F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAG1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAGhG"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Porch Protocol Loading
|
|
3
|
+
*
|
|
4
|
+
* Loads protocol definitions from JSON files.
|
|
5
|
+
* Fails loudly if protocol not found or invalid.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
/** Known protocol locations (relative to project root) */
|
|
10
|
+
const PROTOCOL_PATHS = [
|
|
11
|
+
'codev/protocols',
|
|
12
|
+
'codev-skeleton/protocols',
|
|
13
|
+
];
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Protocol Loading
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Find and load a protocol by name
|
|
19
|
+
* Fails loudly if not found or invalid.
|
|
20
|
+
*/
|
|
21
|
+
export function loadProtocol(projectRoot, protocolName) {
|
|
22
|
+
const protocolFile = findProtocolFile(projectRoot, protocolName);
|
|
23
|
+
if (!protocolFile) {
|
|
24
|
+
throw new Error(`Protocol '${protocolName}' not found.\n` +
|
|
25
|
+
`Searched in: ${PROTOCOL_PATHS.map(p => path.join(projectRoot, p, protocolName)).join(', ')}`);
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const content = fs.readFileSync(protocolFile, 'utf-8');
|
|
29
|
+
const json = JSON.parse(content);
|
|
30
|
+
return normalizeProtocol(json);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (err instanceof SyntaxError) {
|
|
34
|
+
throw new Error(`Invalid protocol '${protocolName}': JSON parse error\n${err.message}`);
|
|
35
|
+
}
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Find protocol.json file in {name}/protocol.json format.
|
|
41
|
+
* Falls back to alias lookup: scans all protocol.json files for a matching "alias" field.
|
|
42
|
+
*/
|
|
43
|
+
function findProtocolFile(projectRoot, protocolName) {
|
|
44
|
+
// Direct lookup first
|
|
45
|
+
for (const basePath of PROTOCOL_PATHS) {
|
|
46
|
+
const fullPath = path.resolve(projectRoot, basePath, protocolName, 'protocol.json');
|
|
47
|
+
if (fs.existsSync(fullPath)) {
|
|
48
|
+
return fullPath;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Alias lookup: scan all protocol.json files for matching alias
|
|
52
|
+
for (const basePath of PROTOCOL_PATHS) {
|
|
53
|
+
const protocolsDir = path.resolve(projectRoot, basePath);
|
|
54
|
+
if (!fs.existsSync(protocolsDir))
|
|
55
|
+
continue;
|
|
56
|
+
try {
|
|
57
|
+
const dirs = fs.readdirSync(protocolsDir, { withFileTypes: true })
|
|
58
|
+
.filter(d => d.isDirectory());
|
|
59
|
+
for (const dir of dirs) {
|
|
60
|
+
const jsonPath = path.join(protocolsDir, dir.name, 'protocol.json');
|
|
61
|
+
if (!fs.existsSync(jsonPath))
|
|
62
|
+
continue;
|
|
63
|
+
try {
|
|
64
|
+
const content = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
|
|
65
|
+
if (content.alias === protocolName) {
|
|
66
|
+
return jsonPath;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch { /* skip invalid JSON */ }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch { /* skip unreadable dirs */ }
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Normalize protocol JSON to our simplified Protocol type
|
|
78
|
+
*/
|
|
79
|
+
function normalizeProtocol(json) {
|
|
80
|
+
const obj = json;
|
|
81
|
+
if (!obj.name || typeof obj.name !== 'string') {
|
|
82
|
+
throw new Error('Invalid protocol: missing "name" field');
|
|
83
|
+
}
|
|
84
|
+
if (!obj.phases || !Array.isArray(obj.phases)) {
|
|
85
|
+
throw new Error('Invalid protocol: missing "phases" array');
|
|
86
|
+
}
|
|
87
|
+
const phases = obj.phases.map((p) => normalizePhase(p));
|
|
88
|
+
// Set next phase based on array order (if not explicitly set)
|
|
89
|
+
for (let i = 0; i < phases.length; i++) {
|
|
90
|
+
if (!phases[i].next && i + 1 < phases.length) {
|
|
91
|
+
phases[i].next = phases[i + 1].id;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Extract default checks
|
|
95
|
+
const checks = {};
|
|
96
|
+
const defaults = obj.defaults;
|
|
97
|
+
if (defaults?.checks) {
|
|
98
|
+
for (const [name, val] of Object.entries(defaults.checks)) {
|
|
99
|
+
if (typeof val === 'string') {
|
|
100
|
+
checks[name] = { command: val };
|
|
101
|
+
}
|
|
102
|
+
else if (typeof val === 'object' && val !== null && 'command' in val) {
|
|
103
|
+
const checkObj = val;
|
|
104
|
+
checks[name] = { command: checkObj.command, cwd: checkObj.cwd };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Also collect per-phase checks (override defaults)
|
|
109
|
+
for (const phase of obj.phases) {
|
|
110
|
+
if (phase.checks && typeof phase.checks === 'object') {
|
|
111
|
+
for (const [name, check] of Object.entries(phase.checks)) {
|
|
112
|
+
if (typeof check === 'object' && check !== null && 'command' in check) {
|
|
113
|
+
const checkObj = check;
|
|
114
|
+
checks[name] = { command: checkObj.command, cwd: checkObj.cwd };
|
|
115
|
+
}
|
|
116
|
+
else if (typeof check === 'string') {
|
|
117
|
+
checks[name] = { command: check };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
name: obj.name,
|
|
124
|
+
version: obj.version,
|
|
125
|
+
description: obj.description,
|
|
126
|
+
phases,
|
|
127
|
+
checks,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Normalize a phase from JSON
|
|
132
|
+
*/
|
|
133
|
+
function normalizePhase(p) {
|
|
134
|
+
const phase = p;
|
|
135
|
+
if (!phase.id || typeof phase.id !== 'string') {
|
|
136
|
+
throw new Error('Invalid protocol phase: missing "id"');
|
|
137
|
+
}
|
|
138
|
+
// Determine next phase from transition or gate
|
|
139
|
+
let next;
|
|
140
|
+
const transition = phase.transition;
|
|
141
|
+
// Gate can be a string (gate name) or object { name, next }
|
|
142
|
+
let gateName;
|
|
143
|
+
if (typeof phase.gate === 'string') {
|
|
144
|
+
gateName = phase.gate;
|
|
145
|
+
}
|
|
146
|
+
else if (typeof phase.gate === 'object' && phase.gate !== null) {
|
|
147
|
+
const gateObj = phase.gate;
|
|
148
|
+
gateName = gateObj.name;
|
|
149
|
+
if (gateObj.next !== undefined) {
|
|
150
|
+
next = gateObj.next;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (transition?.on_complete) {
|
|
154
|
+
next = transition.on_complete;
|
|
155
|
+
}
|
|
156
|
+
// Collect check names
|
|
157
|
+
const checks = [];
|
|
158
|
+
if (phase.checks && typeof phase.checks === 'object') {
|
|
159
|
+
checks.push(...Object.keys(phase.checks));
|
|
160
|
+
}
|
|
161
|
+
// Parse build config (for build_verify phases)
|
|
162
|
+
let build;
|
|
163
|
+
const buildRaw = phase.build;
|
|
164
|
+
if (buildRaw) {
|
|
165
|
+
build = {
|
|
166
|
+
prompt: buildRaw.prompt,
|
|
167
|
+
artifact: buildRaw.artifact,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// Parse verify config (for build_verify phases)
|
|
171
|
+
let verify;
|
|
172
|
+
const verifyRaw = phase.verify;
|
|
173
|
+
if (verifyRaw) {
|
|
174
|
+
verify = {
|
|
175
|
+
type: verifyRaw.type,
|
|
176
|
+
models: verifyRaw.models,
|
|
177
|
+
parallel: verifyRaw.parallel ?? true,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Parse on_complete config
|
|
181
|
+
let on_complete;
|
|
182
|
+
const onCompleteRaw = phase.on_complete;
|
|
183
|
+
if (onCompleteRaw) {
|
|
184
|
+
on_complete = {
|
|
185
|
+
commit: onCompleteRaw.commit,
|
|
186
|
+
push: onCompleteRaw.push,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
id: phase.id,
|
|
191
|
+
name: phase.name || phase.id,
|
|
192
|
+
type: phase.type,
|
|
193
|
+
build,
|
|
194
|
+
verify,
|
|
195
|
+
max_iterations: phase.max_iterations ?? 7,
|
|
196
|
+
on_complete,
|
|
197
|
+
gate: gateName,
|
|
198
|
+
checks: checks.length > 0 ? checks : undefined,
|
|
199
|
+
next,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// ============================================================================
|
|
203
|
+
// Phase Queries
|
|
204
|
+
// ============================================================================
|
|
205
|
+
/**
|
|
206
|
+
* Get phase configuration by id
|
|
207
|
+
*/
|
|
208
|
+
export function getPhaseConfig(protocol, phaseId) {
|
|
209
|
+
return protocol.phases.find(p => p.id === phaseId) || null;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get the next phase after the given phase
|
|
213
|
+
*/
|
|
214
|
+
export function getNextPhase(protocol, currentPhaseId) {
|
|
215
|
+
const current = getPhaseConfig(protocol, currentPhaseId);
|
|
216
|
+
if (!current || !current.next) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
return getPhaseConfig(protocol, current.next);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get check definitions for a phase
|
|
223
|
+
*/
|
|
224
|
+
export function getPhaseChecks(protocol, phaseId) {
|
|
225
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
226
|
+
if (!phase || !phase.checks) {
|
|
227
|
+
return {};
|
|
228
|
+
}
|
|
229
|
+
const result = {};
|
|
230
|
+
for (const checkName of phase.checks) {
|
|
231
|
+
if (protocol.checks?.[checkName]) {
|
|
232
|
+
result[checkName] = protocol.checks[checkName];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get gate name for a phase (if any)
|
|
239
|
+
*/
|
|
240
|
+
export function getPhaseGate(protocol, phaseId) {
|
|
241
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
242
|
+
return phase?.gate || null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Check if a phase runs per plan phase
|
|
246
|
+
*/
|
|
247
|
+
export function isPhased(protocol, phaseId) {
|
|
248
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
249
|
+
return phase?.type === 'per_plan_phase';
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get checks to run when a plan phase completes (after evaluate stage)
|
|
253
|
+
*/
|
|
254
|
+
export function getPhaseCompletionChecks(protocol) {
|
|
255
|
+
return protocol.phase_completion ?? {};
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if a phase uses the build-verify cycle.
|
|
259
|
+
* A phase uses build-verify if it has both build and verify configs,
|
|
260
|
+
* regardless of whether type is 'build_verify' or 'per_plan_phase'.
|
|
261
|
+
*/
|
|
262
|
+
export function isBuildVerify(protocol, phaseId) {
|
|
263
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
264
|
+
return !!(phase?.build && phase?.verify);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get build config for a phase
|
|
268
|
+
*/
|
|
269
|
+
export function getBuildConfig(protocol, phaseId) {
|
|
270
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
271
|
+
return phase?.build || null;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get verify config for a phase
|
|
275
|
+
*/
|
|
276
|
+
export function getVerifyConfig(protocol, phaseId) {
|
|
277
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
278
|
+
return phase?.verify || null;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get max iterations for a build_verify phase
|
|
282
|
+
*/
|
|
283
|
+
export function getMaxIterations(protocol, phaseId) {
|
|
284
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
285
|
+
return phase?.max_iterations ?? 7;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Get on_complete config for a phase
|
|
289
|
+
*/
|
|
290
|
+
export function getOnCompleteConfig(protocol, phaseId) {
|
|
291
|
+
const phase = getPhaseConfig(protocol, phaseId);
|
|
292
|
+
return phase?.on_complete || null;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/commands/porch/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,133 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Porch State Management
|
|
3
3
|
*
|
|
4
|
-
* Handles project state persistence with
|
|
5
|
-
*
|
|
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
|
|
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
|
|
11
|
+
* Get the project directory path
|
|
17
12
|
*/
|
|
18
|
-
export declare function
|
|
13
|
+
export declare function getProjectDir(projectRoot: string, projectId: string, name: string): string;
|
|
19
14
|
/**
|
|
20
|
-
* Get the status
|
|
15
|
+
* Get the status.yaml path for a project
|
|
21
16
|
*/
|
|
22
|
-
export declare function
|
|
17
|
+
export declare function getStatusPath(projectRoot: string, projectId: string, name: string): string;
|
|
23
18
|
/**
|
|
24
|
-
*
|
|
19
|
+
* Read project state from status.yaml
|
|
20
|
+
* Fails loudly if file is missing or corrupted.
|
|
25
21
|
*/
|
|
26
|
-
export declare function
|
|
22
|
+
export declare function readState(statusPath: string): ProjectState;
|
|
27
23
|
/**
|
|
28
|
-
*
|
|
24
|
+
* Write project state atomically (tmp file + rename)
|
|
29
25
|
*/
|
|
30
|
-
export declare function
|
|
31
|
-
interface FileLock {
|
|
32
|
-
fd: number;
|
|
33
|
-
lockFile: string;
|
|
34
|
-
}
|
|
26
|
+
export declare function writeState(statusPath: string, state: ProjectState): void;
|
|
35
27
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* Release an advisory lock
|
|
42
|
-
*/
|
|
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
|
|
28
|
+
* Create initial state for a new project.
|
|
29
|
+
*
|
|
30
|
+
* Always starts at the first protocol phase. If artifacts (spec, plan)
|
|
31
|
+
* already exist with approval metadata (YAML frontmatter), the run loop
|
|
32
|
+
* will detect this and skip those phases automatically.
|
|
117
33
|
*/
|
|
118
|
-
export declare function
|
|
34
|
+
export declare function createInitialState(protocol: Protocol, projectId: string, title: string, _projectRoot?: string): ProjectState;
|
|
119
35
|
/**
|
|
120
|
-
*
|
|
36
|
+
* Find status.yaml by project ID (searches for NNNN-* directories)
|
|
121
37
|
*/
|
|
122
|
-
export declare function
|
|
38
|
+
export declare function findStatusPath(projectRoot: string, projectId: string): string | null;
|
|
123
39
|
/**
|
|
124
|
-
*
|
|
40
|
+
* Auto-detect project ID when only one project exists.
|
|
41
|
+
* Returns null if zero or multiple projects found.
|
|
125
42
|
*/
|
|
126
|
-
export declare function
|
|
127
|
-
projectId: string;
|
|
128
|
-
gateId: string;
|
|
129
|
-
requestedAt?: string;
|
|
130
|
-
statusPath: string;
|
|
131
|
-
}>;
|
|
132
|
-
export {};
|
|
43
|
+
export declare function detectProjectId(projectRoot: string): string | null;
|
|
133
44
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/state.ts"],"names":[],"mappings":"AAAA
|
|
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;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,YAAY,CA2Bd;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBpF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyBlE"}
|