@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
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# IMPLEMENT Phase Prompt
|
|
2
|
-
|
|
3
|
-
You are executing the **IMPLEMENT** phase of the SPIDER protocol.
|
|
4
|
-
|
|
5
|
-
## Your Goal
|
|
6
|
-
|
|
7
|
-
Write clean, well-structured code that implements the current plan phase.
|
|
8
|
-
|
|
9
|
-
## Context
|
|
10
|
-
|
|
11
|
-
- **Project ID**: {{project_id}}
|
|
12
|
-
- **Project Title**: {{title}}
|
|
13
|
-
- **Current State**: {{current_state}}
|
|
14
|
-
- **Plan Phase**: {{plan_phase}} (if applicable)
|
|
15
|
-
- **Spec File**: `codev/specs/{{project_id}}-{{title}}.md`
|
|
16
|
-
- **Plan File**: `codev/plans/{{project_id}}-{{title}}.md`
|
|
17
|
-
|
|
18
|
-
## Consultation Context
|
|
19
|
-
|
|
20
|
-
**Implementation does NOT require consultation checkpoints** - that happens after Defend.
|
|
21
|
-
|
|
22
|
-
However, you should be aware:
|
|
23
|
-
- Spec and Plan have already been reviewed by GPT-5 Codex and Gemini Pro
|
|
24
|
-
- After you complete Implement + Defend, your work will be reviewed
|
|
25
|
-
- Implementation must strictly follow the approved spec and plan
|
|
26
|
-
|
|
27
|
-
## Prerequisites
|
|
28
|
-
|
|
29
|
-
Before implementing, verify:
|
|
30
|
-
1. Previous phase (if any) is committed to git
|
|
31
|
-
2. You've read the plan phase you're implementing
|
|
32
|
-
3. You understand the success criteria for this phase
|
|
33
|
-
4. Dependencies from earlier phases are available
|
|
34
|
-
|
|
35
|
-
## Process
|
|
36
|
-
|
|
37
|
-
### 1. Review the Plan Phase
|
|
38
|
-
|
|
39
|
-
Read the current phase in the plan:
|
|
40
|
-
- What is the objective?
|
|
41
|
-
- What files need to be created/modified?
|
|
42
|
-
- What are the success criteria?
|
|
43
|
-
- What dependencies exist?
|
|
44
|
-
|
|
45
|
-
### 2. Set Up
|
|
46
|
-
|
|
47
|
-
- Verify you're on the correct branch
|
|
48
|
-
- Check that previous phase is committed: `git log --oneline -5`
|
|
49
|
-
- Ensure build passes before starting: `npm run build` (or equivalent)
|
|
50
|
-
|
|
51
|
-
### 3. Implement
|
|
52
|
-
|
|
53
|
-
Write the code following these principles:
|
|
54
|
-
|
|
55
|
-
**Code Quality Standards**:
|
|
56
|
-
- Self-documenting code (clear names, obvious structure)
|
|
57
|
-
- No commented-out code
|
|
58
|
-
- No debug prints in final code
|
|
59
|
-
- Explicit error handling
|
|
60
|
-
- Follow project style guide
|
|
61
|
-
|
|
62
|
-
**Implementation Approach**:
|
|
63
|
-
- Work on one file at a time
|
|
64
|
-
- Make small, incremental changes
|
|
65
|
-
- Test as you go (manual verification is fine here)
|
|
66
|
-
- Document complex logic with comments
|
|
67
|
-
|
|
68
|
-
### 4. Self-Review
|
|
69
|
-
|
|
70
|
-
Before signaling completion:
|
|
71
|
-
- Read through all changes
|
|
72
|
-
- Check for obvious bugs
|
|
73
|
-
- Verify code matches the spec requirements
|
|
74
|
-
- Ensure no accidental debug code
|
|
75
|
-
|
|
76
|
-
### 5. Build Verification
|
|
77
|
-
|
|
78
|
-
Run build checks using **project-specific commands**:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# Check package.json scripts or Makefile for actual commands
|
|
82
|
-
# Common patterns:
|
|
83
|
-
npm run build # Node.js/TypeScript projects
|
|
84
|
-
npm run typecheck # TypeScript type checking
|
|
85
|
-
npm run lint # Linting (ESLint, etc.)
|
|
86
|
-
cargo build # Rust projects
|
|
87
|
-
go build ./... # Go projects
|
|
88
|
-
make build # Projects using Makefiles
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Important**: Don't assume `npm run build` exists. Check `package.json` or equivalent first.
|
|
92
|
-
|
|
93
|
-
Fix any errors before proceeding.
|
|
94
|
-
|
|
95
|
-
## Output
|
|
96
|
-
|
|
97
|
-
- Modified/created source files as specified in the plan phase
|
|
98
|
-
- All build checks passing
|
|
99
|
-
- Code ready for the Defend (testing) phase
|
|
100
|
-
|
|
101
|
-
## Signals
|
|
102
|
-
|
|
103
|
-
Emit appropriate signals based on your progress:
|
|
104
|
-
|
|
105
|
-
- After implementation is complete and builds pass:
|
|
106
|
-
```
|
|
107
|
-
<signal>PHASE_IMPLEMENTED</signal>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
- If you encounter a blocker:
|
|
111
|
-
```
|
|
112
|
-
<signal>BLOCKED:reason goes here</signal>
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
- If you need spec/plan clarification:
|
|
116
|
-
```
|
|
117
|
-
<signal>NEEDS_CLARIFICATION:specific question</signal>
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Important Notes
|
|
121
|
-
|
|
122
|
-
1. **Follow the plan** - Implement what's specified, not more
|
|
123
|
-
2. **Don't over-engineer** - Simplest solution that works
|
|
124
|
-
3. **Don't skip error handling** - But don't go overboard either
|
|
125
|
-
4. **Keep changes focused** - Only touch files in this phase
|
|
126
|
-
5. **Build must pass** - Don't proceed if build fails
|
|
127
|
-
|
|
128
|
-
## What NOT to Do
|
|
129
|
-
|
|
130
|
-
- Don't write tests yet (that's Defend phase)
|
|
131
|
-
- Don't modify files outside this phase's scope
|
|
132
|
-
- Don't add features not in the spec
|
|
133
|
-
- Don't leave TODO comments for later (fix now or note as blocker)
|
|
134
|
-
- Don't commit yet (that happens after Defend + Evaluate)
|
|
135
|
-
- Don't use `git add .` or `git add -A` when you do commit (security risk)
|
|
136
|
-
|
|
137
|
-
## Handling Problems
|
|
138
|
-
|
|
139
|
-
**If the plan is unclear**:
|
|
140
|
-
Signal `NEEDS_CLARIFICATION` with your specific question.
|
|
141
|
-
|
|
142
|
-
**If you discover the spec is wrong**:
|
|
143
|
-
Signal `BLOCKED` and explain the issue. The Architect may need to update the spec.
|
|
144
|
-
|
|
145
|
-
**If a dependency is missing**:
|
|
146
|
-
Signal `BLOCKED` with details about what's missing.
|
|
147
|
-
|
|
148
|
-
**If build fails and you can't fix it**:
|
|
149
|
-
Signal `BLOCKED` with the error message.
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../../protocol-schema.json",
|
|
3
|
-
"name": "spider",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"description": "Specification-driven development with multi-agent consultation",
|
|
6
|
-
"phases": [
|
|
7
|
-
{
|
|
8
|
-
"id": "specify",
|
|
9
|
-
"name": "Specify",
|
|
10
|
-
"description": "Collaborative design exploration and specification",
|
|
11
|
-
"type": "once",
|
|
12
|
-
"prompt": "specify.md",
|
|
13
|
-
"steps": [
|
|
14
|
-
"clarifying_questions",
|
|
15
|
-
"problem_analysis",
|
|
16
|
-
"solution_exploration",
|
|
17
|
-
"open_questions",
|
|
18
|
-
"success_criteria",
|
|
19
|
-
"spec_draft",
|
|
20
|
-
"consultation_1",
|
|
21
|
-
"human_review",
|
|
22
|
-
"consultation_2",
|
|
23
|
-
"spec_final"
|
|
24
|
-
],
|
|
25
|
-
"consultation": {
|
|
26
|
-
"on": "review",
|
|
27
|
-
"models": ["gemini", "codex", "claude"],
|
|
28
|
-
"type": "spec-review",
|
|
29
|
-
"parallel": true,
|
|
30
|
-
"max_rounds": 3
|
|
31
|
-
},
|
|
32
|
-
"gate": {
|
|
33
|
-
"name": "spec-approval",
|
|
34
|
-
"description": "Human approves specification before planning",
|
|
35
|
-
"requires": ["spec_final", "consultation_2"],
|
|
36
|
-
"next": "plan"
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"id": "plan",
|
|
41
|
-
"name": "Plan",
|
|
42
|
-
"description": "Implementation planning with phased breakdown",
|
|
43
|
-
"type": "once",
|
|
44
|
-
"prompt": "plan.md",
|
|
45
|
-
"steps": [
|
|
46
|
-
"analyze_spec",
|
|
47
|
-
"identify_phases",
|
|
48
|
-
"define_steps",
|
|
49
|
-
"plan_draft",
|
|
50
|
-
"consultation",
|
|
51
|
-
"human_review",
|
|
52
|
-
"plan_final"
|
|
53
|
-
],
|
|
54
|
-
"consultation": {
|
|
55
|
-
"on": "review",
|
|
56
|
-
"models": ["gemini", "codex", "claude"],
|
|
57
|
-
"type": "plan-review",
|
|
58
|
-
"parallel": true,
|
|
59
|
-
"max_rounds": 2
|
|
60
|
-
},
|
|
61
|
-
"gate": {
|
|
62
|
-
"name": "plan-approval",
|
|
63
|
-
"description": "Human approves plan before implementation",
|
|
64
|
-
"requires": ["plan_final", "consultation"],
|
|
65
|
-
"next": "implement"
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"id": "implement",
|
|
70
|
-
"name": "Implement",
|
|
71
|
-
"description": "Code implementation following the plan",
|
|
72
|
-
"type": "per_plan_phase",
|
|
73
|
-
"prompt": "implement.md",
|
|
74
|
-
"steps": [
|
|
75
|
-
"read_phase",
|
|
76
|
-
"implement_code",
|
|
77
|
-
"self_review",
|
|
78
|
-
"commit"
|
|
79
|
-
],
|
|
80
|
-
"checks": {
|
|
81
|
-
"build": {
|
|
82
|
-
"command": "npm run build",
|
|
83
|
-
"on_fail": "retry",
|
|
84
|
-
"max_retries": 2
|
|
85
|
-
},
|
|
86
|
-
"typecheck": {
|
|
87
|
-
"command": "npm run typecheck",
|
|
88
|
-
"on_fail": "retry",
|
|
89
|
-
"max_retries": 2
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"transition": {
|
|
93
|
-
"on_complete": "defend",
|
|
94
|
-
"on_fail": "implement"
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"id": "defend",
|
|
99
|
-
"name": "Defend",
|
|
100
|
-
"description": "Testing and verification",
|
|
101
|
-
"type": "per_plan_phase",
|
|
102
|
-
"prompt": "defend.md",
|
|
103
|
-
"steps": [
|
|
104
|
-
"write_tests",
|
|
105
|
-
"run_tests",
|
|
106
|
-
"fix_failures",
|
|
107
|
-
"commit"
|
|
108
|
-
],
|
|
109
|
-
"checks": {
|
|
110
|
-
"tests": {
|
|
111
|
-
"command": "npm test",
|
|
112
|
-
"on_fail": "implement",
|
|
113
|
-
"max_retries": 1
|
|
114
|
-
},
|
|
115
|
-
"lint": {
|
|
116
|
-
"command": "npm run lint",
|
|
117
|
-
"on_fail": "retry",
|
|
118
|
-
"max_retries": 1
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
"consultation": {
|
|
122
|
-
"on": "complete",
|
|
123
|
-
"models": ["gemini", "codex", "claude"],
|
|
124
|
-
"type": "impl-review",
|
|
125
|
-
"parallel": true,
|
|
126
|
-
"max_rounds": 2
|
|
127
|
-
},
|
|
128
|
-
"transition": {
|
|
129
|
-
"on_complete": "evaluate",
|
|
130
|
-
"on_fail": "implement"
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"id": "evaluate",
|
|
135
|
-
"name": "Evaluate",
|
|
136
|
-
"description": "Verify implementation against spec",
|
|
137
|
-
"type": "per_plan_phase",
|
|
138
|
-
"prompt": "evaluate.md",
|
|
139
|
-
"steps": [
|
|
140
|
-
"check_spec_compliance",
|
|
141
|
-
"check_success_criteria",
|
|
142
|
-
"document_deviations"
|
|
143
|
-
],
|
|
144
|
-
"gate": {
|
|
145
|
-
"name": "phase-complete",
|
|
146
|
-
"description": "Plan phase implementation is verified",
|
|
147
|
-
"requires": ["all_checks_pass", "spec_compliance"],
|
|
148
|
-
"next": "implement"
|
|
149
|
-
},
|
|
150
|
-
"transition": {
|
|
151
|
-
"on_complete": "implement",
|
|
152
|
-
"on_all_phases_complete": "review"
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"id": "review",
|
|
157
|
-
"name": "Review",
|
|
158
|
-
"description": "Final review and lessons learned",
|
|
159
|
-
"type": "once",
|
|
160
|
-
"prompt": "review.md",
|
|
161
|
-
"steps": [
|
|
162
|
-
"create_review_document",
|
|
163
|
-
"document_lessons",
|
|
164
|
-
"final_consultation",
|
|
165
|
-
"create_pr"
|
|
166
|
-
],
|
|
167
|
-
"consultation": {
|
|
168
|
-
"on": "review",
|
|
169
|
-
"models": ["gemini", "codex", "claude"],
|
|
170
|
-
"type": "pr-ready",
|
|
171
|
-
"parallel": true,
|
|
172
|
-
"max_rounds": 1
|
|
173
|
-
},
|
|
174
|
-
"gate": {
|
|
175
|
-
"name": "pr-ready",
|
|
176
|
-
"description": "Implementation ready for PR",
|
|
177
|
-
"requires": ["review_complete", "all_tests_pass", "consultation"],
|
|
178
|
-
"next": null
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
],
|
|
182
|
-
"signals": {
|
|
183
|
-
"PHASE_COMPLETE": {
|
|
184
|
-
"description": "Signal current phase is complete",
|
|
185
|
-
"transitions_to": "next_phase"
|
|
186
|
-
},
|
|
187
|
-
"BLOCKED": {
|
|
188
|
-
"description": "Signal implementation is blocked",
|
|
189
|
-
"requires": "reason"
|
|
190
|
-
},
|
|
191
|
-
"REVISION_NEEDED": {
|
|
192
|
-
"description": "Signal changes requested",
|
|
193
|
-
"transitions_to": "current_phase"
|
|
194
|
-
},
|
|
195
|
-
"APPROVED": {
|
|
196
|
-
"description": "Signal gate approval received"
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
"defaults": {
|
|
200
|
-
"consultation": {
|
|
201
|
-
"enabled": true,
|
|
202
|
-
"models": ["gemini", "codex", "claude"],
|
|
203
|
-
"parallel": true
|
|
204
|
-
},
|
|
205
|
-
"checks": {
|
|
206
|
-
"build": "npm run build",
|
|
207
|
-
"test": "npm test"
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/* Activity Summary Modal and Tab (Spec 0059) */
|
|
2
|
-
|
|
3
|
-
/* Activity Summary Modal */
|
|
4
|
-
.activity-dialog {
|
|
5
|
-
width: 600px;
|
|
6
|
-
max-width: 90vw;
|
|
7
|
-
max-height: 80vh;
|
|
8
|
-
display: flex;
|
|
9
|
-
flex-direction: column;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.activity-dialog-header {
|
|
13
|
-
display: flex;
|
|
14
|
-
justify-content: space-between;
|
|
15
|
-
align-items: center;
|
|
16
|
-
margin-bottom: 16px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.activity-dialog-header h3 {
|
|
20
|
-
margin: 0;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.activity-close-btn {
|
|
24
|
-
background: none;
|
|
25
|
-
border: none;
|
|
26
|
-
font-size: 24px;
|
|
27
|
-
color: var(--text-muted);
|
|
28
|
-
cursor: pointer;
|
|
29
|
-
padding: 0 8px;
|
|
30
|
-
line-height: 1;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.activity-close-btn:hover {
|
|
34
|
-
color: var(--text-primary);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.activity-dialog-content {
|
|
38
|
-
flex: 1;
|
|
39
|
-
overflow-y: auto;
|
|
40
|
-
max-height: 50vh;
|
|
41
|
-
margin-bottom: 16px;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.activity-loading {
|
|
45
|
-
display: flex;
|
|
46
|
-
align-items: center;
|
|
47
|
-
justify-content: center;
|
|
48
|
-
gap: 12px;
|
|
49
|
-
padding: 40px 20px;
|
|
50
|
-
color: var(--text-muted);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.activity-spinner {
|
|
54
|
-
width: 20px;
|
|
55
|
-
height: 20px;
|
|
56
|
-
border: 2px solid var(--border);
|
|
57
|
-
border-top-color: var(--accent);
|
|
58
|
-
border-radius: 50%;
|
|
59
|
-
animation: spin 1s linear infinite;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@keyframes spin {
|
|
63
|
-
to { transform: rotate(360deg); }
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.activity-empty {
|
|
67
|
-
text-align: center;
|
|
68
|
-
padding: 40px 20px;
|
|
69
|
-
color: var(--text-muted);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.activity-error {
|
|
73
|
-
text-align: center;
|
|
74
|
-
padding: 40px 20px;
|
|
75
|
-
color: #ef4444;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.activity-summary {
|
|
79
|
-
line-height: 1.6;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.activity-ai-summary {
|
|
83
|
-
background: var(--bg-tertiary);
|
|
84
|
-
border-left: 3px solid var(--accent);
|
|
85
|
-
padding: 12px 16px;
|
|
86
|
-
margin-bottom: 20px;
|
|
87
|
-
font-style: italic;
|
|
88
|
-
color: var(--text-secondary);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.activity-section {
|
|
92
|
-
margin-bottom: 16px;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.activity-section h4 {
|
|
96
|
-
font-size: 13px;
|
|
97
|
-
text-transform: uppercase;
|
|
98
|
-
color: var(--text-muted);
|
|
99
|
-
margin: 0 0 8px 0;
|
|
100
|
-
letter-spacing: 0.5px;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.activity-section ul {
|
|
104
|
-
margin: 0;
|
|
105
|
-
padding-left: 20px;
|
|
106
|
-
color: var(--text-secondary);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.activity-section li {
|
|
110
|
-
margin-bottom: 4px;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.activity-section p {
|
|
114
|
-
margin: 4px 0;
|
|
115
|
-
color: var(--text-secondary);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.activity-time-value {
|
|
119
|
-
font-size: 18px;
|
|
120
|
-
font-weight: 500;
|
|
121
|
-
color: var(--text-primary);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.activity-dialog-footer {
|
|
125
|
-
display: flex;
|
|
126
|
-
justify-content: flex-end;
|
|
127
|
-
gap: 8px;
|
|
128
|
-
padding-top: 12px;
|
|
129
|
-
border-top: 1px solid var(--border);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/* Activity Tab Styles */
|
|
133
|
-
.activity-tab-container {
|
|
134
|
-
padding: 24px;
|
|
135
|
-
max-width: 700px;
|
|
136
|
-
margin: 0 auto;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.activity-tab-container .activity-summary {
|
|
140
|
-
background: var(--bg-secondary);
|
|
141
|
-
border-radius: 8px;
|
|
142
|
-
padding: 20px;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.activity-tab-container .activity-actions {
|
|
146
|
-
margin-top: 20px;
|
|
147
|
-
padding-top: 16px;
|
|
148
|
-
border-top: 1px solid var(--border);
|
|
149
|
-
display: flex;
|
|
150
|
-
justify-content: flex-end;
|
|
151
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
// Activity Summary Functions (Spec 0059)
|
|
2
|
-
|
|
3
|
-
// Show activity summary - creates tab if needed
|
|
4
|
-
async function showActivitySummary() {
|
|
5
|
-
let activityTab = tabs.find(t => t.type === 'activity');
|
|
6
|
-
|
|
7
|
-
if (!activityTab) {
|
|
8
|
-
activityTab = {
|
|
9
|
-
id: 'activity-today',
|
|
10
|
-
type: 'activity',
|
|
11
|
-
name: 'Today'
|
|
12
|
-
};
|
|
13
|
-
tabs.push(activityTab);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
activeTabId = activityTab.id;
|
|
17
|
-
currentTabType = null;
|
|
18
|
-
renderTabs();
|
|
19
|
-
renderTabContent();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Render the activity tab content
|
|
23
|
-
async function renderActivityTab() {
|
|
24
|
-
const content = document.getElementById('tab-content');
|
|
25
|
-
|
|
26
|
-
content.innerHTML = `
|
|
27
|
-
<div class="activity-tab-container">
|
|
28
|
-
<div class="activity-loading">
|
|
29
|
-
<span class="activity-spinner"></span>
|
|
30
|
-
Loading activity...
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
`;
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
const response = await fetch('/api/activity-summary');
|
|
37
|
-
if (!response.ok) {
|
|
38
|
-
throw new Error(await response.text());
|
|
39
|
-
}
|
|
40
|
-
activityData = await response.json();
|
|
41
|
-
renderActivityTabContent(activityData);
|
|
42
|
-
} catch (err) {
|
|
43
|
-
content.innerHTML = `
|
|
44
|
-
<div class="activity-tab-container">
|
|
45
|
-
<div class="activity-error">
|
|
46
|
-
Failed to load activity: ${escapeHtml(err.message)}
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
`;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Render activity tab content
|
|
54
|
-
// Uses shared renderActivityContentHtml from utils.js (Maintenance Run 0004)
|
|
55
|
-
function renderActivityTabContent(data) {
|
|
56
|
-
const content = document.getElementById('tab-content');
|
|
57
|
-
content.innerHTML = renderActivityContentHtml(data, { isTab: true });
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Render activity summary content (for modal)
|
|
61
|
-
// Uses shared renderActivityContentHtml from utils.js (Maintenance Run 0004)
|
|
62
|
-
function renderActivitySummary(data) {
|
|
63
|
-
const content = document.getElementById('activity-content');
|
|
64
|
-
content.innerHTML = renderActivityContentHtml(data, { isTab: false });
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Close activity modal
|
|
68
|
-
function closeActivityModal() {
|
|
69
|
-
document.getElementById('activity-modal').classList.add('hidden');
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Copy activity summary to clipboard (shared by tab and modal)
|
|
73
|
-
function copyActivityToClipboard() {
|
|
74
|
-
copyActivitySummary();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function copyActivitySummary() {
|
|
78
|
-
if (!activityData) return;
|
|
79
|
-
|
|
80
|
-
const hours = Math.floor(activityData.timeTracking.activeMinutes / 60);
|
|
81
|
-
const mins = activityData.timeTracking.activeMinutes % 60;
|
|
82
|
-
const uniqueBranches = new Set(activityData.commits.map(c => c.branch)).size;
|
|
83
|
-
const mergedPrs = activityData.prs.filter(p => p.state === 'MERGED').length;
|
|
84
|
-
|
|
85
|
-
let markdown = `## Today's Summary\n\n`;
|
|
86
|
-
|
|
87
|
-
if (activityData.aiSummary) {
|
|
88
|
-
markdown += `${activityData.aiSummary}\n\n`;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
markdown += `### Activity\n`;
|
|
92
|
-
markdown += `- ${activityData.commits.length} commits across ${uniqueBranches} branches\n`;
|
|
93
|
-
markdown += `- ${activityData.files.length} files modified\n`;
|
|
94
|
-
markdown += `- ${activityData.prs.length} PRs${mergedPrs > 0 ? ` (${mergedPrs} merged)` : ''}\n\n`;
|
|
95
|
-
|
|
96
|
-
if (activityData.projectChanges && activityData.projectChanges.length > 0) {
|
|
97
|
-
markdown += `### Projects Touched\n`;
|
|
98
|
-
activityData.projectChanges.forEach(p => {
|
|
99
|
-
markdown += `- ${p.id}: ${p.title} (${p.oldStatus} → ${p.newStatus})\n`;
|
|
100
|
-
});
|
|
101
|
-
markdown += '\n';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
markdown += `### Time\n`;
|
|
105
|
-
markdown += `Active time: ~${hours}h ${mins}m\n`;
|
|
106
|
-
|
|
107
|
-
navigator.clipboard.writeText(markdown).then(() => {
|
|
108
|
-
showToast('Copied to clipboard', 'success');
|
|
109
|
-
}).catch(() => {
|
|
110
|
-
showToast('Failed to copy', 'error');
|
|
111
|
-
});
|
|
112
|
-
}
|
|
File without changes
|