@cluesmith/codev 2.0.0-rc.9 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/af.js +2 -2
- package/bin/consult.js +1 -1
- package/dashboard/dist/assets/index-4n9zpWLY.css +32 -0
- package/dashboard/dist/assets/index-b38SaXk5.js +136 -0
- package/dashboard/dist/assets/index-b38SaXk5.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 +179 -104
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts +3 -3
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +20 -147
- 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 +144 -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 +35 -19
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.d.ts +3 -4
- package/dist/agent-farm/commands/consult.d.ts.map +1 -1
- package/dist/agent-farm/commands/consult.js +27 -37
- 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 +33 -83
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/send.d.ts +1 -1
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +70 -79
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/shell.d.ts +15 -0
- package/dist/agent-farm/commands/shell.d.ts.map +1 -0
- package/dist/agent-farm/commands/shell.js +50 -0
- package/dist/agent-farm/commands/shell.js.map +1 -0
- package/dist/agent-farm/commands/spawn-roles.d.ts +80 -0
- package/dist/agent-farm/commands/spawn-roles.d.ts.map +1 -0
- package/dist/agent-farm/commands/spawn-roles.js +278 -0
- package/dist/agent-farm/commands/spawn-roles.js.map +1 -0
- package/dist/agent-farm/commands/spawn-worktree.d.ts +96 -0
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -0
- package/dist/agent-farm/commands/spawn-worktree.js +305 -0
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts +5 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +241 -561
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts +10 -20
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +45 -449
- 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 +75 -24
- 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 +49 -109
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/commands/tower-cloud.d.ts +48 -0
- package/dist/agent-farm/commands/tower-cloud.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower-cloud.js +293 -0
- package/dist/agent-farm/commands/tower-cloud.js.map +1 -0
- 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 +6 -2
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +301 -19
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/migrate.d.ts +0 -4
- package/dist/agent-farm/db/migrate.d.ts.map +1 -1
- package/dist/agent-farm/db/migrate.js +6 -55
- package/dist/agent-farm/db/migrate.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +3 -3
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +25 -19
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +3 -13
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js +3 -11
- 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/cloud-config.d.ts +59 -0
- package/dist/agent-farm/lib/cloud-config.d.ts.map +1 -0
- package/dist/agent-farm/lib/cloud-config.js +143 -0
- package/dist/agent-farm/lib/cloud-config.js.map +1 -0
- package/dist/agent-farm/lib/device-name.d.ts +25 -0
- package/dist/agent-farm/lib/device-name.d.ts.map +1 -0
- package/dist/agent-farm/lib/device-name.js +46 -0
- package/dist/agent-farm/lib/device-name.js.map +1 -0
- package/dist/agent-farm/lib/nonce-store.d.ts +28 -0
- package/dist/agent-farm/lib/nonce-store.d.ts.map +1 -0
- package/dist/agent-farm/lib/nonce-store.js +60 -0
- package/dist/agent-farm/lib/nonce-store.js.map +1 -0
- package/dist/agent-farm/lib/token-exchange.d.ts +18 -0
- package/dist/agent-farm/lib/token-exchange.d.ts.map +1 -0
- package/dist/agent-farm/lib/token-exchange.js +48 -0
- package/dist/agent-farm/lib/token-exchange.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +163 -0
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -0
- package/dist/agent-farm/lib/tower-client.js +233 -0
- package/dist/agent-farm/lib/tower-client.js.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts +117 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.js +504 -0
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -0
- package/dist/agent-farm/servers/tower-instances.d.ts +82 -0
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-instances.js +454 -0
- package/dist/agent-farm/servers/tower-instances.js.map +1 -0
- package/dist/agent-farm/servers/tower-routes.d.ts +34 -0
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-routes.js +1445 -0
- package/dist/agent-farm/servers/tower-routes.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.d.ts +5 -2
- package/dist/agent-farm/servers/tower-server.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +157 -475
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +119 -0
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-terminals.js +629 -0
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -0
- package/dist/agent-farm/servers/tower-tunnel.d.ts +34 -0
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-tunnel.js +473 -0
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -0
- package/dist/agent-farm/servers/tower-types.d.ts +86 -0
- package/dist/agent-farm/servers/tower-types.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-types.js +6 -0
- package/dist/agent-farm/servers/tower-types.js.map +1 -0
- package/dist/agent-farm/servers/tower-utils.d.ts +58 -0
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-utils.js +182 -0
- package/dist/agent-farm/servers/tower-utils.js.map +1 -0
- package/dist/agent-farm/servers/tower-websocket.d.ts +25 -0
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-websocket.js +171 -0
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -0
- package/dist/agent-farm/state.d.ts +6 -2
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +34 -25
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +49 -26
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +0 -5
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +12 -44
- 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 -32
- package/dist/agent-farm/utils/deps.js.map +1 -1
- package/dist/agent-farm/utils/file-tabs.d.ts +27 -0
- package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -0
- package/dist/agent-farm/utils/file-tabs.js +46 -0
- package/dist/agent-farm/utils/file-tabs.js.map +1 -0
- package/dist/agent-farm/utils/gate-status.d.ts +16 -0
- package/dist/agent-farm/utils/gate-status.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-status.js +79 -0
- package/dist/agent-farm/utils/gate-status.js.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts +38 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.js +122 -0
- package/dist/agent-farm/utils/gate-watcher.js.map +1 -0
- package/dist/agent-farm/utils/index.d.ts +0 -1
- package/dist/agent-farm/utils/index.d.ts.map +1 -1
- package/dist/agent-farm/utils/index.js +0 -1
- package/dist/agent-farm/utils/index.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/server-utils.d.ts +5 -5
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +5 -16
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/agent-farm/utils/session.d.ts +32 -0
- package/dist/agent-farm/utils/session.d.ts.map +1 -0
- package/dist/agent-farm/utils/session.js +57 -0
- package/dist/agent-farm/utils/session.js.map +1 -0
- 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/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -37
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +33 -4
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +13 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +244 -29
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +96 -79
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +36 -3
- 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 +3 -2
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +8 -2
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/index.d.ts +4 -0
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +109 -70
- 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 +571 -0
- package/dist/commands/porch/next.js.map +1 -0
- package/dist/commands/porch/plan.d.ts +11 -1
- package/dist/commands/porch/plan.d.ts.map +1 -1
- package/dist/commands/porch/plan.js +33 -5
- package/dist/commands/porch/plan.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +44 -26
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/commands/porch/protocol.d.ts +6 -4
- package/dist/commands/porch/protocol.d.ts.map +1 -1
- package/dist/commands/porch/protocol.js +59 -15
- package/dist/commands/porch/protocol.js.map +1 -1
- package/dist/commands/porch/state.d.ts +29 -2
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +71 -3
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/porch/types.d.ts +45 -2
- package/dist/commands/porch/types.d.ts.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 +18 -6
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/scaffold.d.ts +13 -0
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +36 -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 +69 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -0
- package/dist/terminal/pty-manager.js +377 -0
- package/dist/terminal/pty-manager.js.map +1 -0
- package/dist/terminal/pty-session.d.ts +104 -0
- package/dist/terminal/pty-session.d.ts.map +1 -0
- package/dist/terminal/pty-session.js +327 -0
- package/dist/terminal/pty-session.js.map +1 -0
- package/dist/terminal/ring-buffer.d.ts +34 -0
- package/dist/terminal/ring-buffer.d.ts.map +1 -0
- package/dist/terminal/ring-buffer.js +94 -0
- package/dist/terminal/ring-buffer.js.map +1 -0
- package/dist/terminal/session-manager.d.ts +115 -0
- package/dist/terminal/session-manager.d.ts.map +1 -0
- package/dist/terminal/session-manager.js +582 -0
- package/dist/terminal/session-manager.js.map +1 -0
- package/dist/terminal/shellper-client.d.ts +66 -0
- package/dist/terminal/shellper-client.d.ts.map +1 -0
- package/dist/terminal/shellper-client.js +234 -0
- package/dist/terminal/shellper-client.js.map +1 -0
- package/dist/terminal/shellper-main.d.ts +19 -0
- package/dist/terminal/shellper-main.d.ts.map +1 -0
- package/dist/terminal/shellper-main.js +153 -0
- package/dist/terminal/shellper-main.js.map +1 -0
- package/dist/terminal/shellper-process.d.ts +75 -0
- package/dist/terminal/shellper-process.d.ts.map +1 -0
- package/dist/terminal/shellper-process.js +279 -0
- package/dist/terminal/shellper-process.js.map +1 -0
- package/dist/terminal/shellper-protocol.d.ts +115 -0
- package/dist/terminal/shellper-protocol.d.ts.map +1 -0
- package/dist/terminal/shellper-protocol.js +214 -0
- package/dist/terminal/shellper-protocol.js.map +1 -0
- package/dist/terminal/shellper-replay-buffer.d.ts +38 -0
- package/dist/terminal/shellper-replay-buffer.d.ts.map +1 -0
- package/dist/terminal/shellper-replay-buffer.js +94 -0
- package/dist/terminal/shellper-replay-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 +17 -5
- package/skeleton/.claude/skills/af/SKILL.md +89 -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 +4 -62
- package/skeleton/builders.md +1 -1
- package/skeleton/consult-types/impl-review.md +18 -9
- package/skeleton/consult-types/integration-review.md +1 -1
- package/skeleton/consult-types/plan-review.md +1 -1
- package/skeleton/consult-types/pr-ready.md +1 -1
- package/skeleton/consult-types/spec-review.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 +60 -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 +84 -0
- package/skeleton/protocols/bugfix/protocol.json +20 -33
- 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 +17 -11
- package/skeleton/protocols/protocol-schema.json +54 -1
- package/skeleton/protocols/spir/builder-prompt.md +66 -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 +20 -39
- package/skeleton/protocols/{spider → spir}/prompts/specify.md +24 -59
- package/skeleton/protocols/{spider → spir}/protocol.json +30 -10
- package/skeleton/protocols/{spider → spir}/protocol.md +35 -21
- package/skeleton/protocols/spir/templates/review.md +89 -0
- 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 +63 -46
- package/skeleton/resources/commands/codev.md +0 -2
- package/skeleton/resources/commands/overview.md +7 -17
- package/skeleton/resources/workflow-reference.md +4 -4
- package/skeleton/roles/architect.md +151 -306
- package/skeleton/roles/builder.md +115 -332
- package/skeleton/roles/consultant.md +6 -6
- 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 -16
- 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 -1
- package/templates/open.html +26 -0
- package/templates/tower.html +731 -91
- package/dist/agent-farm/commands/kickoff.d.ts +0 -20
- package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
- package/dist/agent-farm/commands/kickoff.js +0 -273
- 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 +0 -15
- package/dist/agent-farm/commands/util.d.ts.map +0 -1
- package/dist/agent-farm/commands/util.js +0 -108
- 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 -1858
- 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/agent-farm/utils/orphan-handler.d.ts +0 -27
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +0 -1
- package/dist/agent-farm/utils/orphan-handler.js +0 -149
- package/dist/agent-farm/utils/orphan-handler.js.map +0 -1
- package/dist/agent-farm/utils/port-registry.d.ts +0 -58
- package/dist/agent-farm/utils/port-registry.d.ts.map +0 -1
- package/dist/agent-farm/utils/port-registry.js +0 -166
- package/dist/agent-farm/utils/port-registry.js.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.d.ts +0 -18
- package/dist/agent-farm/utils/terminal-ports.d.ts.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.js +0 -35
- package/dist/agent-farm/utils/terminal-ports.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/claude.d.ts +0 -29
- package/dist/commands/porch/claude.d.ts.map +0 -1
- package/dist/commands/porch/claude.js +0 -79
- package/dist/commands/porch/claude.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 -262
- package/dist/commands/porch/protocol-loader.js.map +0 -1
- package/dist/commands/porch/repl.d.ts +0 -33
- package/dist/commands/porch/repl.d.ts.map +0 -1
- package/dist/commands/porch/repl.js +0 -206
- package/dist/commands/porch/repl.js.map +0 -1
- package/dist/commands/porch/run.d.ts +0 -15
- package/dist/commands/porch/run.d.ts.map +0 -1
- package/dist/commands/porch/run.js +0 -551
- package/dist/commands/porch/run.js.map +0 -1
- package/dist/commands/porch/signal-parser.d.ts +0 -102
- package/dist/commands/porch/signal-parser.d.ts.map +0 -1
- package/dist/commands/porch/signal-parser.js +0 -199
- package/dist/commands/porch/signal-parser.js.map +0 -1
- package/dist/commands/porch/signals.d.ts +0 -35
- package/dist/commands/porch/signals.d.ts.map +0 -1
- package/dist/commands/porch/signals.js +0 -76
- package/dist/commands/porch/signals.js.map +0 -1
- package/dist/commands/porch2/checks.d.ts +0 -29
- package/dist/commands/porch2/checks.d.ts.map +0 -1
- package/dist/commands/porch2/checks.js +0 -141
- package/dist/commands/porch2/checks.js.map +0 -1
- package/dist/commands/porch2/index.d.ts +0 -38
- package/dist/commands/porch2/index.d.ts.map +0 -1
- package/dist/commands/porch2/index.js +0 -483
- package/dist/commands/porch2/index.js.map +0 -1
- package/dist/commands/porch2/plan.d.ts +0 -70
- package/dist/commands/porch2/plan.d.ts.map +0 -1
- package/dist/commands/porch2/plan.js +0 -227
- package/dist/commands/porch2/plan.js.map +0 -1
- package/dist/commands/porch2/protocol.d.ts +0 -37
- package/dist/commands/porch2/protocol.d.ts.map +0 -1
- package/dist/commands/porch2/protocol.js +0 -183
- package/dist/commands/porch2/protocol.js.map +0 -1
- package/dist/commands/porch2/state.d.ts +0 -35
- package/dist/commands/porch2/state.d.ts.map +0 -1
- package/dist/commands/porch2/state.js +0 -124
- package/dist/commands/porch2/state.js.map +0 -1
- package/dist/commands/porch2/types.d.ts +0 -79
- package/dist/commands/porch2/types.d.ts.map +0 -1
- package/dist/commands/porch2/types.js +0 -8
- package/dist/commands/porch2/types.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/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/templates/review.md +0 -207
- /package/skeleton/protocols/{spider → spir}/templates/plan.md +0 -0
- /package/skeleton/protocols/{spider → spir}/templates/spec.md +0 -0
|
@@ -1,551 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* porch run - Main run loop (Build-Verify design)
|
|
3
|
-
*
|
|
4
|
-
* Porch orchestrates build-verify cycles:
|
|
5
|
-
* 1. BUILD: Spawn Claude to create artifact
|
|
6
|
-
* 2. VERIFY: Run 3-way consultation (Gemini, Codex, Claude)
|
|
7
|
-
* 3. ITERATE: If any REQUEST_CHANGES, feed back to Claude
|
|
8
|
-
* 4. COMPLETE: When all APPROVE (or max iterations), commit + push + gate
|
|
9
|
-
*/
|
|
10
|
-
import * as fs from 'node:fs';
|
|
11
|
-
import * as path from 'node:path';
|
|
12
|
-
import chalk from 'chalk';
|
|
13
|
-
import { readState, writeState, findStatusPath } from './state.js';
|
|
14
|
-
import { loadProtocol, getPhaseConfig, isPhased, getPhaseGate, isBuildVerify, getVerifyConfig, getMaxIterations, getOnCompleteConfig, getBuildConfig } from './protocol.js';
|
|
15
|
-
import { getCurrentPlanPhase } from './plan.js';
|
|
16
|
-
import { spawnClaude } from './claude.js';
|
|
17
|
-
import { runRepl } from './repl.js';
|
|
18
|
-
import { buildPhasePrompt } from './prompts.js';
|
|
19
|
-
// Runtime artifacts go in project directory, not a hidden folder
|
|
20
|
-
function getPorchDir(projectRoot, state) {
|
|
21
|
-
return path.join(projectRoot, 'codev', 'projects', `${state.id}-${state.title}`);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Generate output file name with phase and iteration info.
|
|
25
|
-
* e.g., "0074-specify-iter-1.txt" or "0074-phase_1-iter-2.txt"
|
|
26
|
-
*
|
|
27
|
-
* Uses state.iteration which is persisted and survives porch restarts.
|
|
28
|
-
*/
|
|
29
|
-
function getOutputFileName(state) {
|
|
30
|
-
const planPhase = getCurrentPlanPhase(state.plan_phases);
|
|
31
|
-
// Build filename using persisted iteration from state
|
|
32
|
-
const parts = [state.id];
|
|
33
|
-
if (planPhase) {
|
|
34
|
-
parts.push(planPhase.id);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
parts.push(state.phase);
|
|
38
|
-
}
|
|
39
|
-
parts.push(`iter-${state.iteration}`);
|
|
40
|
-
return `${parts.join('-')}.txt`;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Main run loop for porch.
|
|
44
|
-
* Spawns Claude for each phase and monitors until protocol complete.
|
|
45
|
-
*/
|
|
46
|
-
export async function run(projectRoot, projectId) {
|
|
47
|
-
const statusPath = findStatusPath(projectRoot, projectId);
|
|
48
|
-
if (!statusPath) {
|
|
49
|
-
throw new Error(`Project ${projectId} not found.\nRun 'porch init' to create a new project.`);
|
|
50
|
-
}
|
|
51
|
-
// Read initial state to get project directory
|
|
52
|
-
let state = readState(statusPath);
|
|
53
|
-
// Ensure project artifacts directory exists
|
|
54
|
-
const porchDir = getPorchDir(projectRoot, state);
|
|
55
|
-
if (!fs.existsSync(porchDir)) {
|
|
56
|
-
fs.mkdirSync(porchDir, { recursive: true });
|
|
57
|
-
}
|
|
58
|
-
console.log('');
|
|
59
|
-
console.log(chalk.bold('PORCH - Protocol Orchestrator'));
|
|
60
|
-
console.log(chalk.dim('Porch is the outer loop. Claude runs under porch control.'));
|
|
61
|
-
console.log('');
|
|
62
|
-
while (true) {
|
|
63
|
-
state = readState(statusPath);
|
|
64
|
-
const protocol = loadProtocol(projectRoot, state.protocol);
|
|
65
|
-
const phaseConfig = getPhaseConfig(protocol, state.phase);
|
|
66
|
-
if (!phaseConfig) {
|
|
67
|
-
console.log(chalk.green.bold('🎉 PROTOCOL COMPLETE'));
|
|
68
|
-
console.log(`\n Project ${state.id} has completed the ${state.protocol} protocol.`);
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
// Check for pending gate
|
|
72
|
-
const gateName = getPhaseGate(protocol, state.phase);
|
|
73
|
-
if (gateName && state.gates[gateName]?.status === 'pending' && state.gates[gateName]?.requested_at) {
|
|
74
|
-
const outputPath = path.join(porchDir, `${state.id}-gate.txt`);
|
|
75
|
-
await handleGate(state, gateName, statusPath, projectRoot, outputPath, protocol);
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
// Handle build_verify phases
|
|
79
|
-
if (isBuildVerify(protocol, state.phase)) {
|
|
80
|
-
const maxIterations = getMaxIterations(protocol, state.phase);
|
|
81
|
-
// Check if we need to run VERIFY (build just completed)
|
|
82
|
-
if (state.build_complete) {
|
|
83
|
-
console.log('');
|
|
84
|
-
console.log(chalk.cyan(`[${state.id}] VERIFY - Iteration ${state.iteration}/${maxIterations}`));
|
|
85
|
-
const reviews = await runVerification(projectRoot, state, protocol);
|
|
86
|
-
// Get the build output file from current iteration (stored when we track it)
|
|
87
|
-
const currentBuildOutput = state.history.find(h => h.iteration === state.iteration)?.build_output || '';
|
|
88
|
-
// Update history with reviews
|
|
89
|
-
const existingRecord = state.history.find(h => h.iteration === state.iteration);
|
|
90
|
-
if (existingRecord) {
|
|
91
|
-
existingRecord.reviews = reviews;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
state.history.push({
|
|
95
|
-
iteration: state.iteration,
|
|
96
|
-
build_output: currentBuildOutput,
|
|
97
|
-
reviews,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
if (allApprove(reviews)) {
|
|
101
|
-
console.log(chalk.green('\nAll reviewers APPROVE!'));
|
|
102
|
-
// Run on_complete actions (commit + push)
|
|
103
|
-
await runOnComplete(projectRoot, state, protocol, reviews);
|
|
104
|
-
// Request gate
|
|
105
|
-
if (gateName) {
|
|
106
|
-
state.gates[gateName] = { status: 'pending', requested_at: new Date().toISOString() };
|
|
107
|
-
}
|
|
108
|
-
// Reset for next phase
|
|
109
|
-
state.build_complete = false;
|
|
110
|
-
state.iteration = 1;
|
|
111
|
-
state.history = [];
|
|
112
|
-
writeState(statusPath, state);
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
// Some reviewers requested changes
|
|
116
|
-
console.log(chalk.yellow('\nChanges requested. Feeding back to Claude...'));
|
|
117
|
-
if (state.iteration >= maxIterations) {
|
|
118
|
-
console.log(chalk.yellow(`\nMax iterations (${maxIterations}) reached. Proceeding to gate.`));
|
|
119
|
-
// Run on_complete actions anyway
|
|
120
|
-
await runOnComplete(projectRoot, state, protocol, reviews);
|
|
121
|
-
// Request gate
|
|
122
|
-
if (gateName) {
|
|
123
|
-
state.gates[gateName] = { status: 'pending', requested_at: new Date().toISOString() };
|
|
124
|
-
}
|
|
125
|
-
state.build_complete = false;
|
|
126
|
-
state.iteration = 1;
|
|
127
|
-
state.history = [];
|
|
128
|
-
writeState(statusPath, state);
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
// Increment iteration and continue to BUILD
|
|
132
|
-
state.iteration++;
|
|
133
|
-
state.build_complete = false;
|
|
134
|
-
writeState(statusPath, state);
|
|
135
|
-
// Fall through to BUILD phase
|
|
136
|
-
}
|
|
137
|
-
// BUILD phase
|
|
138
|
-
console.log('');
|
|
139
|
-
console.log(chalk.cyan(`[${state.id}] BUILD - ${phaseConfig.name} - Iteration ${state.iteration}/${maxIterations}`));
|
|
140
|
-
}
|
|
141
|
-
// Generate output file for this iteration
|
|
142
|
-
const outputFileName = getOutputFileName(state);
|
|
143
|
-
const outputPath = path.join(porchDir, outputFileName);
|
|
144
|
-
// Track this build output in history (for feedback to next iteration)
|
|
145
|
-
if (isBuildVerify(protocol, state.phase)) {
|
|
146
|
-
const existingRecord = state.history.find(h => h.iteration === state.iteration);
|
|
147
|
-
if (existingRecord) {
|
|
148
|
-
existingRecord.build_output = outputPath;
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
state.history.push({
|
|
152
|
-
iteration: state.iteration,
|
|
153
|
-
build_output: outputPath,
|
|
154
|
-
reviews: [],
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
writeState(statusPath, state);
|
|
158
|
-
}
|
|
159
|
-
// Build prompt for current phase (includes history file paths if iteration > 1)
|
|
160
|
-
const prompt = buildPhasePrompt(projectRoot, state, protocol);
|
|
161
|
-
// Create output file
|
|
162
|
-
fs.writeFileSync(outputPath, '');
|
|
163
|
-
console.log(chalk.dim(`Output: ${outputFileName}`));
|
|
164
|
-
// Show status
|
|
165
|
-
showStatus(state, protocol);
|
|
166
|
-
// Print the prompt being sent to Claude
|
|
167
|
-
console.log('');
|
|
168
|
-
console.log(chalk.cyan('═'.repeat(60)));
|
|
169
|
-
console.log(chalk.cyan.bold(' PROMPT TO CLAUDE'));
|
|
170
|
-
console.log(chalk.cyan('═'.repeat(60)));
|
|
171
|
-
console.log(chalk.dim(prompt.substring(0, 2000)));
|
|
172
|
-
if (prompt.length > 2000) {
|
|
173
|
-
console.log(chalk.dim(`... (${prompt.length - 2000} more chars)`));
|
|
174
|
-
}
|
|
175
|
-
console.log(chalk.cyan('═'.repeat(60)));
|
|
176
|
-
console.log('');
|
|
177
|
-
// Spawn Claude
|
|
178
|
-
console.log(chalk.dim('Starting Claude...'));
|
|
179
|
-
const claude = spawnClaude(prompt, outputPath, projectRoot);
|
|
180
|
-
// Run REPL while Claude works
|
|
181
|
-
const action = await runRepl(state, claude, outputPath, statusPath, projectRoot, protocol);
|
|
182
|
-
// Handle REPL result
|
|
183
|
-
switch (action.type) {
|
|
184
|
-
case 'quit':
|
|
185
|
-
claude.kill();
|
|
186
|
-
console.log(chalk.yellow('\nPorch terminated by user.'));
|
|
187
|
-
return;
|
|
188
|
-
case 'signal':
|
|
189
|
-
const shouldRespawn = await handleSignal(action.signal, state, statusPath, projectRoot, protocol);
|
|
190
|
-
if (shouldRespawn) {
|
|
191
|
-
console.log(chalk.dim('\nRespawning Claude for retry...'));
|
|
192
|
-
await sleep(1000);
|
|
193
|
-
}
|
|
194
|
-
break;
|
|
195
|
-
case 'claude_exit':
|
|
196
|
-
// For build_verify phases, ANY Claude exit = build complete
|
|
197
|
-
// Don't respawn - go straight to verification
|
|
198
|
-
if (isBuildVerify(protocol, state.phase)) {
|
|
199
|
-
console.log(chalk.dim('\nClaude finished. Moving to verification...'));
|
|
200
|
-
state.build_complete = true;
|
|
201
|
-
writeState(statusPath, state);
|
|
202
|
-
// Continue loop - will hit build_complete check and run verify
|
|
203
|
-
}
|
|
204
|
-
else if (action.exitCode !== 0) {
|
|
205
|
-
console.log(chalk.red(`\nClaude exited with code ${action.exitCode}`));
|
|
206
|
-
console.log(chalk.dim('Restarting in 3 seconds...'));
|
|
207
|
-
await sleep(3000);
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
case 'approved':
|
|
211
|
-
// Gate was approved, continue to next phase
|
|
212
|
-
break;
|
|
213
|
-
case 'manual_claude':
|
|
214
|
-
// User wants to intervene - just continue loop to respawn
|
|
215
|
-
console.log(chalk.dim('\nRespawning Claude...'));
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
// ============================================================================
|
|
221
|
-
// Verification (3-way consultation)
|
|
222
|
-
// ============================================================================
|
|
223
|
-
/**
|
|
224
|
-
* Run 3-way verification on the current phase artifact.
|
|
225
|
-
* Writes each consultation output to a file.
|
|
226
|
-
* Returns array of review results with file paths.
|
|
227
|
-
*/
|
|
228
|
-
async function runVerification(projectRoot, state, protocol) {
|
|
229
|
-
const verifyConfig = getVerifyConfig(protocol, state.phase);
|
|
230
|
-
if (!verifyConfig) {
|
|
231
|
-
return []; // No verification configured
|
|
232
|
-
}
|
|
233
|
-
console.log(chalk.dim(`Running ${verifyConfig.models.length}-way consultation...`));
|
|
234
|
-
const porchDir = getPorchDir(projectRoot, state);
|
|
235
|
-
const reviews = [];
|
|
236
|
-
// Run consultations in parallel
|
|
237
|
-
const promises = verifyConfig.models.map(async (model) => {
|
|
238
|
-
console.log(chalk.dim(` ${model}: starting...`));
|
|
239
|
-
// Output file for this review
|
|
240
|
-
const reviewFile = path.join(porchDir, `${state.id}-${state.phase}-iter${state.iteration}-${model}.txt`);
|
|
241
|
-
const result = await runConsult(projectRoot, model, verifyConfig.type, state, reviewFile);
|
|
242
|
-
reviews.push(result);
|
|
243
|
-
const verdictColor = result.verdict === 'APPROVE' ? chalk.green :
|
|
244
|
-
result.verdict === 'COMMENT' ? chalk.blue : chalk.yellow;
|
|
245
|
-
console.log(` ${model}: ${verdictColor(result.verdict)}`);
|
|
246
|
-
});
|
|
247
|
-
await Promise.all(promises);
|
|
248
|
-
return reviews;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Get the consult artifact type for a phase.
|
|
252
|
-
*/
|
|
253
|
-
function getConsultArtifactType(phaseId) {
|
|
254
|
-
switch (phaseId) {
|
|
255
|
-
case 'specify':
|
|
256
|
-
return 'spec';
|
|
257
|
-
case 'plan':
|
|
258
|
-
return 'plan';
|
|
259
|
-
case 'implement':
|
|
260
|
-
return 'plan'; // Implementation reviews the plan phase
|
|
261
|
-
case 'review':
|
|
262
|
-
return 'spec'; // Review phase reviews overall work
|
|
263
|
-
default:
|
|
264
|
-
return 'spec';
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Run a single consultation.
|
|
269
|
-
* Writes output to file and returns result with file path.
|
|
270
|
-
*/
|
|
271
|
-
const CONSULT_TIMEOUT_MS = 60 * 60 * 1000; // 1 hour
|
|
272
|
-
async function runConsult(projectRoot, model, reviewType, state, outputFile) {
|
|
273
|
-
const { spawn } = await import('node:child_process');
|
|
274
|
-
const artifactType = getConsultArtifactType(state.phase);
|
|
275
|
-
return new Promise((resolve) => {
|
|
276
|
-
const args = ['--model', model, '--type', reviewType, artifactType, state.id];
|
|
277
|
-
const proc = spawn('consult', args, {
|
|
278
|
-
cwd: projectRoot,
|
|
279
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
280
|
-
});
|
|
281
|
-
let output = '';
|
|
282
|
-
let resolved = false;
|
|
283
|
-
// Timeout after 1 hour
|
|
284
|
-
const timeout = setTimeout(() => {
|
|
285
|
-
if (!resolved) {
|
|
286
|
-
resolved = true;
|
|
287
|
-
proc.kill('SIGTERM');
|
|
288
|
-
const timeoutOutput = output + '\n\n[TIMEOUT: Consultation exceeded 1 hour limit]';
|
|
289
|
-
fs.writeFileSync(outputFile, timeoutOutput);
|
|
290
|
-
console.log(chalk.yellow(` ${model}: timeout (1 hour limit)`));
|
|
291
|
-
resolve({ model, verdict: 'REQUEST_CHANGES', file: outputFile });
|
|
292
|
-
}
|
|
293
|
-
}, CONSULT_TIMEOUT_MS);
|
|
294
|
-
proc.stdout.on('data', (data) => { output += data.toString(); });
|
|
295
|
-
proc.stderr.on('data', (data) => { output += data.toString(); });
|
|
296
|
-
proc.on('close', () => {
|
|
297
|
-
if (!resolved) {
|
|
298
|
-
resolved = true;
|
|
299
|
-
clearTimeout(timeout);
|
|
300
|
-
// Write output to file
|
|
301
|
-
fs.writeFileSync(outputFile, output);
|
|
302
|
-
// Parse verdict from output
|
|
303
|
-
const verdict = parseVerdict(output);
|
|
304
|
-
resolve({ model, verdict, file: outputFile });
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
proc.on('error', (err) => {
|
|
308
|
-
if (!resolved) {
|
|
309
|
-
resolved = true;
|
|
310
|
-
clearTimeout(timeout);
|
|
311
|
-
const errorOutput = `Error: ${err.message}`;
|
|
312
|
-
fs.writeFileSync(outputFile, errorOutput);
|
|
313
|
-
console.log(chalk.red(` ${model}: error - ${err.message}`));
|
|
314
|
-
resolve({ model, verdict: 'REQUEST_CHANGES', file: outputFile });
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Parse verdict from consultation output.
|
|
321
|
-
*
|
|
322
|
-
* Looks for the verdict line in format:
|
|
323
|
-
* VERDICT: APPROVE
|
|
324
|
-
* VERDICT: REQUEST_CHANGES
|
|
325
|
-
* VERDICT: COMMENT
|
|
326
|
-
*
|
|
327
|
-
* Safety: If no explicit verdict found (empty output, crash, malformed),
|
|
328
|
-
* defaults to REQUEST_CHANGES to prevent proceeding with unverified code.
|
|
329
|
-
*/
|
|
330
|
-
function parseVerdict(output) {
|
|
331
|
-
// Empty or very short output = something went wrong
|
|
332
|
-
if (!output || output.trim().length < 50) {
|
|
333
|
-
return 'REQUEST_CHANGES';
|
|
334
|
-
}
|
|
335
|
-
// Look for actual verdict line (not template text like "[APPROVE | REQUEST_CHANGES | COMMENT]")
|
|
336
|
-
// Match lines like "VERDICT: APPROVE" or "VERDICT: REQUEST_CHANGES"
|
|
337
|
-
const lines = output.split('\n');
|
|
338
|
-
for (const line of lines) {
|
|
339
|
-
const trimmed = line.trim().toUpperCase();
|
|
340
|
-
// Match "VERDICT: <value>" but NOT "VERDICT: [APPROVE | ...]"
|
|
341
|
-
if (trimmed.startsWith('VERDICT:') && !trimmed.includes('[')) {
|
|
342
|
-
if (trimmed.includes('REQUEST_CHANGES')) {
|
|
343
|
-
return 'REQUEST_CHANGES';
|
|
344
|
-
}
|
|
345
|
-
if (trimmed.includes('APPROVE')) {
|
|
346
|
-
return 'APPROVE';
|
|
347
|
-
}
|
|
348
|
-
if (trimmed.includes('COMMENT')) {
|
|
349
|
-
return 'COMMENT';
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
// Fallback: look anywhere in output (legacy behavior)
|
|
354
|
-
const upperOutput = output.toUpperCase();
|
|
355
|
-
if (upperOutput.includes('REQUEST_CHANGES')) {
|
|
356
|
-
return 'REQUEST_CHANGES';
|
|
357
|
-
}
|
|
358
|
-
if (upperOutput.includes('APPROVE')) {
|
|
359
|
-
return 'APPROVE';
|
|
360
|
-
}
|
|
361
|
-
// No explicit verdict = default to REQUEST_CHANGES for safety
|
|
362
|
-
return 'REQUEST_CHANGES';
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Check if all reviewers approved (no REQUEST_CHANGES).
|
|
366
|
-
*/
|
|
367
|
-
function allApprove(reviews) {
|
|
368
|
-
if (reviews.length === 0)
|
|
369
|
-
return true; // No verification = auto-approve
|
|
370
|
-
return reviews.every(r => r.verdict !== 'REQUEST_CHANGES');
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Run on_complete actions (commit + push).
|
|
374
|
-
*/
|
|
375
|
-
async function runOnComplete(projectRoot, state, protocol, reviews) {
|
|
376
|
-
const onComplete = getOnCompleteConfig(protocol, state.phase);
|
|
377
|
-
if (!onComplete)
|
|
378
|
-
return;
|
|
379
|
-
const buildConfig = getBuildConfig(protocol, state.phase);
|
|
380
|
-
if (!buildConfig)
|
|
381
|
-
return;
|
|
382
|
-
// Resolve artifact path
|
|
383
|
-
const artifact = buildConfig.artifact
|
|
384
|
-
.replace('${PROJECT_ID}', state.id)
|
|
385
|
-
.replace('${PROJECT_TITLE}', state.title);
|
|
386
|
-
const { exec } = await import('node:child_process');
|
|
387
|
-
const { promisify } = await import('node:util');
|
|
388
|
-
const execAsync = promisify(exec);
|
|
389
|
-
if (onComplete.commit) {
|
|
390
|
-
console.log(chalk.dim('Committing...'));
|
|
391
|
-
try {
|
|
392
|
-
// Stage artifact
|
|
393
|
-
await execAsync(`git add ${artifact}`, { cwd: projectRoot });
|
|
394
|
-
// Commit
|
|
395
|
-
const message = `[Spec ${state.id}] ${state.phase}: ${state.title}
|
|
396
|
-
|
|
397
|
-
Iteration ${state.iteration}
|
|
398
|
-
3-way review: ${formatVerdicts(reviews)}`;
|
|
399
|
-
await execAsync(`git commit -m "${message}"`, { cwd: projectRoot });
|
|
400
|
-
console.log(chalk.green('Committed.'));
|
|
401
|
-
}
|
|
402
|
-
catch (err) {
|
|
403
|
-
console.log(chalk.yellow('Commit failed (may be nothing to commit).'));
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (onComplete.push) {
|
|
407
|
-
console.log(chalk.dim('Pushing...'));
|
|
408
|
-
try {
|
|
409
|
-
await execAsync('git push', { cwd: projectRoot });
|
|
410
|
-
console.log(chalk.green('Pushed.'));
|
|
411
|
-
}
|
|
412
|
-
catch (err) {
|
|
413
|
-
console.log(chalk.yellow('Push failed.'));
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
/**
|
|
418
|
-
* Format verdicts for commit message.
|
|
419
|
-
*/
|
|
420
|
-
function formatVerdicts(reviews) {
|
|
421
|
-
return reviews
|
|
422
|
-
.map(r => `${r.model}=${r.verdict}`)
|
|
423
|
-
.join(', ') || 'N/A';
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Display current status.
|
|
427
|
-
*/
|
|
428
|
-
function showStatus(state, protocol) {
|
|
429
|
-
const phaseConfig = getPhaseConfig(protocol, state.phase);
|
|
430
|
-
console.log('');
|
|
431
|
-
console.log(chalk.bold(`[${state.id}] ${state.title}`));
|
|
432
|
-
console.log(` Phase: ${state.phase} (${phaseConfig?.name || 'unknown'})`);
|
|
433
|
-
if (isBuildVerify(protocol, state.phase)) {
|
|
434
|
-
const maxIterations = getMaxIterations(protocol, state.phase);
|
|
435
|
-
console.log(` Iteration: ${state.iteration}/${maxIterations}`);
|
|
436
|
-
}
|
|
437
|
-
if (isPhased(protocol, state.phase) && state.plan_phases.length > 0) {
|
|
438
|
-
const currentPlanPhase = getCurrentPlanPhase(state.plan_phases);
|
|
439
|
-
if (currentPlanPhase) {
|
|
440
|
-
console.log(` Plan Phase: ${currentPlanPhase.id} - ${currentPlanPhase.title}`);
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
console.log('');
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Handle gate approval flow.
|
|
447
|
-
*/
|
|
448
|
-
async function handleGate(state, gateName, statusPath, projectRoot, outputPath, protocol) {
|
|
449
|
-
console.log('');
|
|
450
|
-
console.log(chalk.yellow('═'.repeat(60)));
|
|
451
|
-
console.log(chalk.yellow.bold(` GATE: ${gateName}`));
|
|
452
|
-
console.log(chalk.yellow('═'.repeat(60)));
|
|
453
|
-
console.log('');
|
|
454
|
-
// Show artifact path
|
|
455
|
-
const artifact = getArtifactForPhase(state);
|
|
456
|
-
if (artifact) {
|
|
457
|
-
console.log(` Review: ${artifact}`);
|
|
458
|
-
}
|
|
459
|
-
console.log('');
|
|
460
|
-
console.log(" Type 'a' or 'approve' to approve and continue.");
|
|
461
|
-
console.log(" Type 'q' or 'quit' to exit.");
|
|
462
|
-
console.log('');
|
|
463
|
-
// Wait for user input
|
|
464
|
-
const readline = await import('node:readline');
|
|
465
|
-
const rl = readline.createInterface({
|
|
466
|
-
input: process.stdin,
|
|
467
|
-
output: process.stdout,
|
|
468
|
-
});
|
|
469
|
-
return new Promise((resolve) => {
|
|
470
|
-
const prompt = () => {
|
|
471
|
-
rl.question(chalk.cyan(`[${state.id}] WAITING FOR APPROVAL > `), (input) => {
|
|
472
|
-
const cmd = input.trim().toLowerCase();
|
|
473
|
-
switch (cmd) {
|
|
474
|
-
case 'a':
|
|
475
|
-
case 'approve':
|
|
476
|
-
state.gates[gateName].status = 'approved';
|
|
477
|
-
state.gates[gateName].approved_at = new Date().toISOString();
|
|
478
|
-
writeState(statusPath, state);
|
|
479
|
-
console.log(chalk.green(`\nGate ${gateName} approved.`));
|
|
480
|
-
rl.close();
|
|
481
|
-
resolve();
|
|
482
|
-
break;
|
|
483
|
-
case 'q':
|
|
484
|
-
case 'quit':
|
|
485
|
-
console.log(chalk.yellow('\nExiting without approval.'));
|
|
486
|
-
rl.close();
|
|
487
|
-
process.exit(0);
|
|
488
|
-
break;
|
|
489
|
-
default:
|
|
490
|
-
console.log(chalk.dim("Unknown command. Type 'a' to approve or 'q' to quit."));
|
|
491
|
-
prompt();
|
|
492
|
-
}
|
|
493
|
-
});
|
|
494
|
-
};
|
|
495
|
-
prompt();
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Handle signal from Claude output.
|
|
500
|
-
* Returns true if should respawn Claude (for build-verify iteration), false otherwise.
|
|
501
|
-
*/
|
|
502
|
-
async function handleSignal(signal, state, statusPath, projectRoot, protocol) {
|
|
503
|
-
console.log('');
|
|
504
|
-
switch (signal.type) {
|
|
505
|
-
case 'PHASE_COMPLETE':
|
|
506
|
-
console.log(chalk.green('Signal: PHASE_COMPLETE'));
|
|
507
|
-
// For build_verify phases, we'll run verification in the main loop
|
|
508
|
-
// Mark build as complete so main loop knows to run verify
|
|
509
|
-
if (isBuildVerify(protocol, state.phase)) {
|
|
510
|
-
state.build_complete = true;
|
|
511
|
-
writeState(statusPath, state);
|
|
512
|
-
return false; // Main loop will handle verify
|
|
513
|
-
}
|
|
514
|
-
// For non-build_verify phases, advance state directly
|
|
515
|
-
const { done } = await import('./index.js');
|
|
516
|
-
await done(projectRoot, state.id);
|
|
517
|
-
return false;
|
|
518
|
-
case 'GATE_NEEDED':
|
|
519
|
-
console.log(chalk.yellow('Signal: GATE_NEEDED'));
|
|
520
|
-
const gateName = getPhaseGate(protocol, state.phase);
|
|
521
|
-
if (gateName && !state.gates[gateName]) {
|
|
522
|
-
state.gates[gateName] = { status: 'pending', requested_at: new Date().toISOString() };
|
|
523
|
-
writeState(statusPath, state);
|
|
524
|
-
}
|
|
525
|
-
return false;
|
|
526
|
-
case 'BLOCKED':
|
|
527
|
-
console.log(chalk.red(`Signal: BLOCKED - ${signal.reason}`));
|
|
528
|
-
console.log(chalk.dim('Human intervention required.'));
|
|
529
|
-
return false;
|
|
530
|
-
}
|
|
531
|
-
return false;
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Get artifact path for current phase.
|
|
535
|
-
*/
|
|
536
|
-
function getArtifactForPhase(state) {
|
|
537
|
-
switch (state.phase) {
|
|
538
|
-
case 'specify':
|
|
539
|
-
return `codev/specs/${state.id}-${state.title}.md`;
|
|
540
|
-
case 'plan':
|
|
541
|
-
return `codev/plans/${state.id}-${state.title}.md`;
|
|
542
|
-
case 'review':
|
|
543
|
-
return `codev/reviews/${state.id}-${state.title}.md`;
|
|
544
|
-
default:
|
|
545
|
-
return null;
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
function sleep(ms) {
|
|
549
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
550
|
-
}
|
|
551
|
-
//# sourceMappingURL=run.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/porch/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5K,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,iEAAiE;AACjE,SAAS,WAAW,CAAC,WAAmB,EAAE,KAAmB;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEzD,sDAAsD;IACtD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAEtC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,WAAmB,EAAE,SAAiB;IAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,wDAAwD,CAAC,CAAC;IAChG,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAElC,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,EAAE,sBAAsB,KAAK,CAAC,QAAQ,YAAY,CAAC,CAAC;YACrF,MAAM;QACR,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;YACnG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACjF,SAAS;QACX,CAAC;QAED,6BAA6B;QAC7B,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAE9D,wDAAwD;YACxD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,wBAAwB,KAAK,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;gBAEhG,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAEpE,6EAA6E;gBAC7E,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC;gBAExG,8BAA8B;gBAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChF,IAAI,cAAc,EAAE,CAAC;oBACnB,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;wBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,YAAY,EAAE,kBAAkB;wBAChC,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBAErD,0CAA0C;oBAC1C,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAE3D,eAAe;oBACf,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxF,CAAC;oBAED,uBAAuB;oBACvB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC7B,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;oBACpB,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;oBACnB,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC9B,SAAS;gBACX,CAAC;gBAED,mCAAmC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBAE5E,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,aAAa,gCAAgC,CAAC,CAAC,CAAC;oBAE9F,iCAAiC;oBACjC,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAE3D,eAAe;oBACf,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxF,CAAC;oBAED,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC7B,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;oBACpB,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;oBACnB,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC9B,SAAS;gBACX,CAAC;gBAED,4CAA4C;gBAC5C,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC7B,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC9B,8BAA8B;YAChC,CAAC;YAED,cAAc;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,aAAa,WAAW,CAAC,IAAI,gBAAgB,KAAK,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QACvH,CAAC;QAED,0CAA0C;QAC1C,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAEvD,sEAAsE;QACtE,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;YAChF,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,YAAY,GAAG,UAAU,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,YAAY,EAAE,UAAU;oBACxB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,gFAAgF;QAChF,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE9D,qBAAqB;QACrB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC,CAAC;QAEpD,cAAc;QACd,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE5B,wCAAwC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE5D,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE3F,qBAAqB;QACrB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACzD,OAAO;YAET,KAAK,QAAQ;gBACX,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAClG,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM;YAER,KAAK,aAAa;gBAChB,4DAA4D;gBAC5D,8CAA8C;gBAC9C,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBACvE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC5B,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBAC9B,+DAA+D;gBACjE,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;oBACrD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM;YAER,KAAK,UAAU;gBACb,4CAA4C;gBAC5C,MAAM;YAER,KAAK,eAAe;gBAClB,0DAA0D;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBACjD,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,KAAmB,EACnB,QAAkB;IAElB,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,6BAA6B;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC,CAAC;IAEpF,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,gCAAgC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC;QAElD,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,SAAS,IAAI,KAAK,MAAM,CAAC,CAAC;QAEzG,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,CAAC,wCAAwC;QACzD,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,CAAC,oCAAoC;QACrD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAEpD,KAAK,UAAU,UAAU,CACvB,WAAmB,EACnB,KAAa,EACb,UAAkB,EAClB,KAAmB,EACnB,UAAkB;IAElB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE;YAClC,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,uBAAuB;QACvB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,MAAM,aAAa,GAAG,MAAM,GAAG,mDAAmD,CAAC;gBACnF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAEvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,uBAAuB;gBACvB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAErC,4BAA4B;gBAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACrC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,oDAAoD;IACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,gGAAgG;IAChG,oEAAoE;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,8DAA8D;QAC9D,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxC,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8DAA8D;IAC9D,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,OAAuB;IACzC,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,iBAAiB,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,KAAmB,EACnB,QAAkB,EAClB,OAAuB;IAEvB,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,wBAAwB;IACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ;SAClC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;SAClC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,iBAAiB;YACjB,MAAM,SAAS,CAAC,WAAW,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YAE7D,SAAS;YACT,MAAM,OAAO,GAAG,SAAS,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;;YAE3D,KAAK,CAAC,SAAS;gBACX,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAEpC,MAAM,SAAS,CAAC,kBAAkB,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAuB;IAC7C,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;SACnC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAmB,EAAE,QAAkB;IACzD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;IAE3E,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,gBAAgB,CAAC,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CACvB,KAAmB,EACnB,QAAgB,EAChB,UAAkB,EAClB,WAAmB,EACnB,UAAkB,EAClB,QAAkB;IAElB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,qBAAqB;IACrB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAEvC,QAAQ,GAAG,EAAE,CAAC;oBACZ,KAAK,GAAG,CAAC;oBACT,KAAK,SAAS;wBACZ,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;wBAC1C,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBAC7D,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;wBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,QAAQ,YAAY,CAAC,CAAC,CAAC;wBACzD,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,EAAE,CAAC;wBACV,MAAM;oBAER,KAAK,GAAG,CAAC;oBACT,KAAK,MAAM;wBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;wBACzD,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAChB,MAAM;oBAER;wBACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;wBAC/E,MAAM,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,MAAc,EACd,KAAmB,EACnB,UAAkB,EAClB,WAAmB,EACnB,QAAkB;IAElB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAEnD,mEAAmE;YACnE,0DAA0D;YAC1D,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC,CAAC,+BAA+B;YAC/C,CAAC;YAED,sDAAsD;YACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QAEf,KAAK,aAAa;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtF,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,CAAC;QAEf,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAmB;IAC9C,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,eAAe,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QACrD,KAAK,MAAM;YACT,OAAO,eAAe,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QACrD,KAAK,QAAQ;YACX,OAAO,iBAAiB,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QACvD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|