@selesai/code 0.9.6 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cli/credential-print.js +4 -4
  3. package/dist/cli.js +0 -0
  4. package/dist/core/agent-session-runtime.js +1 -4
  5. package/dist/core/agent-session.d.ts +2 -0
  6. package/dist/core/agent-session.js +26 -0
  7. package/dist/core/compaction/branch-summarization.js +30 -30
  8. package/dist/core/compaction/compaction.js +81 -81
  9. package/dist/core/compaction/utils.js +2 -2
  10. package/dist/core/export-html/template.css +1066 -1066
  11. package/dist/core/export-html/template.html +55 -55
  12. package/dist/core/export-html/template.js +1864 -1864
  13. package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
  14. package/dist/core/export-html/vendor/marked.min.js +78 -78
  15. package/dist/core/handoff.d.ts +11 -0
  16. package/dist/core/handoff.js +49 -0
  17. package/dist/core/messages.js +7 -7
  18. package/dist/extensions/context-compaction-reminder.test.ts +82 -82
  19. package/dist/extensions/context-compaction-reminder.ts +28 -28
  20. package/dist/extensions/handoff-new.ts +14 -75
  21. package/dist/extensions/pi-intercom/LICENSE +21 -21
  22. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
  23. package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -387
  24. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
  25. package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -153
  26. package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
  27. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
  28. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
  29. package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
  30. package/dist/extensions/pi-intercom/cwd.ts +31 -31
  31. package/dist/extensions/pi-intercom/extension-api.ts +44 -44
  32. package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
  33. package/dist/extensions/pi-intercom/format-context.ts +32 -32
  34. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
  35. package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
  36. package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
  37. package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +286 -286
  38. package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +108 -108
  39. package/dist/extensions/pi-powerline-footer/separators.ts +57 -57
  40. package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -47
  41. package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +39 -39
  42. package/dist/extensions/pi-powerline-footer/theme.example.json +24 -24
  43. package/dist/extensions/pi-powerline-footer/theme.json +12 -12
  44. package/dist/extensions/pi-powerline-footer/tps.ts +345 -345
  45. package/dist/extensions/pi-rewind-hook/README.md +245 -245
  46. package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
  47. package/dist/extensions/pi-rewind-hook/package.json +29 -29
  48. package/dist/extensions/pi-subagents/install.mjs +0 -0
  49. package/dist/extensions/pi-web-agent/package.json +31 -31
  50. package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
  51. package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
  52. package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
  53. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
  54. package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
  55. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
  56. package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
  57. package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
  58. package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
  59. package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
  60. package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
  61. package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
  62. package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
  63. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
  64. package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
  65. package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
  66. package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
  67. package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
  68. package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
  69. package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
  70. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
  71. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
  72. package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
  73. package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
  74. package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
  75. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
  76. package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
  77. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
  78. package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
  79. package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
  80. package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
  81. package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
  82. package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
  83. package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
  84. package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
  85. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
  86. package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
  87. package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
  88. package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
  89. package/dist/extensions/pi-web-agent/src/types.ts +88 -88
  90. package/dist/extensions/ponytail/package.json +8 -8
  91. package/dist/extensions/question/batch.ts +103 -103
  92. package/dist/extensions/question/constants.ts +30 -30
  93. package/dist/extensions/question/helpers.ts +58 -58
  94. package/dist/extensions/question/navigation.ts +14 -14
  95. package/dist/extensions/question/package.json +19 -19
  96. package/dist/extensions/question/schemas.ts +43 -43
  97. package/dist/extensions/question/selection-mode.ts +46 -46
  98. package/dist/extensions/question/shortcuts.ts +44 -44
  99. package/dist/extensions/question/types.ts +132 -132
  100. package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
  101. package/dist/extensions/test-resolve-hook.mjs +6 -6
  102. package/dist/extensions/web-agent-onboarding.ts +222 -222
  103. package/dist/extensions/workflow/package.json +17 -17
  104. package/dist/modes/rpc/rpc-mode.js +24 -0
  105. package/dist/modes/rpc/rpc-types.d.ts +19 -0
  106. package/dist/package-manager-cli.js +71 -71
  107. package/dist/rpc-entry.js +0 -0
  108. package/dist/skills/agent-browser/SKILL.md +52 -52
  109. package/dist/skills/batch-grill-me/SKILL.md +19 -19
  110. package/dist/skills/grill-me/SKILL.md +10 -10
  111. package/dist/skills/handoff/SKILL.md +16 -16
  112. package/dist/skills/handoff-text/SKILL.md +14 -14
  113. package/dist/skills/implanger/SKILL.md +69 -69
  114. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  115. package/dist/skills/improve-codebase/SKILL.md +178 -178
  116. package/dist/skills/planger/SKILL.md +166 -166
  117. package/dist/skills/ponytail/SKILL.md +116 -116
  118. package/dist/skills/ponytail-audit/SKILL.md +42 -42
  119. package/dist/skills/ponytail-debt/SKILL.md +45 -45
  120. package/dist/skills/ponytail-gain/SKILL.md +51 -51
  121. package/dist/skills/ponytail-help/SKILL.md +70 -70
  122. package/dist/skills/ponytail-review/SKILL.md +58 -58
  123. package/dist/skills/selesai-handoff/SKILL.md +20 -20
  124. package/dist/skills/workflow-creation/SKILL.md +73 -73
  125. package/dist/themes/powerline-footer/theme.json +33 -33
  126. package/docs/compaction.md +396 -396
  127. package/docs/containerization.md +111 -111
  128. package/docs/development.md +71 -71
  129. package/docs/docs.json +164 -164
  130. package/docs/environment-variables.md +86 -86
  131. package/docs/index.md +83 -83
  132. package/docs/json.md +82 -82
  133. package/docs/models.md +502 -502
  134. package/docs/packages.md +227 -227
  135. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  136. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  137. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  138. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  139. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  140. package/docs/prompt-templates.md +95 -95
  141. package/docs/providers.md +293 -293
  142. package/docs/sdk.md +1143 -1143
  143. package/docs/security.md +59 -59
  144. package/docs/session-format.md +414 -414
  145. package/docs/sessions.md +145 -145
  146. package/docs/shared-host-extensions.md +109 -109
  147. package/docs/shell-aliases.md +13 -13
  148. package/docs/skills.md +231 -231
  149. package/docs/terminal-setup.md +142 -142
  150. package/docs/termux.md +127 -127
  151. package/docs/themes.md +295 -295
  152. package/docs/tmux.md +63 -63
  153. package/docs/tui.md +927 -927
  154. package/docs/windows.md +17 -17
  155. package/examples/README.md +25 -25
  156. package/examples/extensions/README.md +211 -211
  157. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  158. package/examples/extensions/bash-spawn-hook.ts +30 -30
  159. package/examples/extensions/bookmark.ts +50 -50
  160. package/examples/extensions/border-status-editor.ts +150 -150
  161. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  162. package/examples/extensions/claude-rules.ts +86 -86
  163. package/examples/extensions/commands.ts +72 -72
  164. package/examples/extensions/confirm-destructive.ts +59 -59
  165. package/examples/extensions/custom-compaction.ts +130 -130
  166. package/examples/extensions/custom-footer.ts +64 -64
  167. package/examples/extensions/custom-header.ts +73 -73
  168. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  169. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  170. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  171. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  172. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  173. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  174. package/examples/extensions/dirty-repo-guard.ts +56 -56
  175. package/examples/extensions/doom-overlay/README.md +46 -46
  176. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  177. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  178. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  179. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  180. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  181. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  182. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  183. package/examples/extensions/doom-overlay/index.ts +74 -74
  184. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  185. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  186. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  187. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  188. package/examples/extensions/dynamic-resources/index.ts +15 -15
  189. package/examples/extensions/dynamic-tools.ts +74 -74
  190. package/examples/extensions/event-bus.ts +43 -43
  191. package/examples/extensions/file-trigger.ts +41 -41
  192. package/examples/extensions/git-checkpoint.ts +53 -53
  193. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  194. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  195. package/examples/extensions/gondolin/index.ts +531 -531
  196. package/examples/extensions/gondolin/package-lock.json +185 -185
  197. package/examples/extensions/gondolin/package.json +19 -19
  198. package/examples/extensions/handoff.ts +199 -199
  199. package/examples/extensions/hello.ts +26 -26
  200. package/examples/extensions/hidden-thinking-label.ts +53 -53
  201. package/examples/extensions/inline-bash.ts +94 -94
  202. package/examples/extensions/input-transform-streaming.ts +39 -39
  203. package/examples/extensions/input-transform.ts +43 -43
  204. package/examples/extensions/interactive-shell.ts +196 -196
  205. package/examples/extensions/mac-system-theme.ts +47 -47
  206. package/examples/extensions/message-renderer.ts +59 -59
  207. package/examples/extensions/minimal-mode.ts +426 -426
  208. package/examples/extensions/modal-editor.ts +85 -85
  209. package/examples/extensions/model-status.ts +31 -31
  210. package/examples/extensions/notify.ts +55 -55
  211. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  212. package/examples/extensions/overlay-test.ts +153 -153
  213. package/examples/extensions/permission-gate.ts +34 -34
  214. package/examples/extensions/pirate.ts +47 -47
  215. package/examples/extensions/plan-mode/README.md +66 -66
  216. package/examples/extensions/plan-mode/index.ts +390 -390
  217. package/examples/extensions/plan-mode/utils.ts +168 -168
  218. package/examples/extensions/preset.ts +436 -436
  219. package/examples/extensions/project-trust.ts +64 -64
  220. package/examples/extensions/prompt-customizer.ts +97 -97
  221. package/examples/extensions/protected-paths.ts +30 -30
  222. package/examples/extensions/provider-payload.ts +18 -18
  223. package/examples/extensions/qna.ts +122 -122
  224. package/examples/extensions/question.ts +285 -285
  225. package/examples/extensions/questionnaire.ts +448 -448
  226. package/examples/extensions/rainbow-editor.ts +88 -88
  227. package/examples/extensions/reload-runtime.ts +37 -37
  228. package/examples/extensions/rpc-demo.ts +118 -118
  229. package/examples/extensions/sandbox/index.ts +321 -321
  230. package/examples/extensions/sandbox/package-lock.json +92 -92
  231. package/examples/extensions/sandbox/package.json +19 -19
  232. package/examples/extensions/send-user-message.ts +97 -97
  233. package/examples/extensions/session-name.ts +27 -27
  234. package/examples/extensions/shutdown-command.ts +63 -63
  235. package/examples/extensions/snake.ts +343 -343
  236. package/examples/extensions/space-invaders.ts +560 -560
  237. package/examples/extensions/ssh.ts +220 -220
  238. package/examples/extensions/status-line.ts +32 -32
  239. package/examples/extensions/structured-output.ts +65 -65
  240. package/examples/extensions/subagent/README.md +175 -175
  241. package/examples/extensions/subagent/agents/planner.md +37 -37
  242. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  243. package/examples/extensions/subagent/agents/scout.md +50 -50
  244. package/examples/extensions/subagent/agents/worker.md +24 -24
  245. package/examples/extensions/subagent/agents.ts +126 -126
  246. package/examples/extensions/subagent/index.ts +1015 -1015
  247. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  248. package/examples/extensions/subagent/prompts/implement.md +10 -10
  249. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  250. package/examples/extensions/summarize.ts +209 -209
  251. package/examples/extensions/system-prompt-header.ts +17 -17
  252. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  253. package/examples/extensions/timed-confirm.ts +70 -70
  254. package/examples/extensions/titlebar-spinner.ts +58 -58
  255. package/examples/extensions/todo.ts +297 -297
  256. package/examples/extensions/tool-override.ts +144 -144
  257. package/examples/extensions/tools.ts +146 -146
  258. package/examples/extensions/trigger-compact.ts +50 -50
  259. package/examples/extensions/truncated-tool.ts +195 -195
  260. package/examples/extensions/widget-placement.ts +9 -9
  261. package/examples/extensions/with-deps/index.ts +32 -32
  262. package/examples/extensions/with-deps/package-lock.json +31 -31
  263. package/examples/extensions/with-deps/package.json +22 -22
  264. package/examples/extensions/working-indicator.ts +123 -123
  265. package/examples/extensions/working-message-test.ts +25 -25
  266. package/examples/rpc-extension-ui.ts +632 -632
  267. package/examples/sdk/01-minimal.ts +26 -26
  268. package/examples/sdk/02-custom-model.ts +53 -53
  269. package/examples/sdk/03-custom-prompt.ts +75 -75
  270. package/examples/sdk/04-skills.ts +55 -55
  271. package/examples/sdk/05-tools.ts +48 -48
  272. package/examples/sdk/06-extensions.ts +99 -99
  273. package/examples/sdk/07-context-files.ts +47 -47
  274. package/examples/sdk/08-prompt-templates.ts +51 -51
  275. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  276. package/examples/sdk/10-settings.ts +53 -53
  277. package/examples/sdk/11-sessions.ts +52 -52
  278. package/examples/sdk/12-full-control.ts +79 -79
  279. package/examples/sdk/13-session-runtime.ts +67 -67
  280. package/examples/sdk/README.md +144 -144
  281. package/package.json +1 -1
@@ -1,78 +1,78 @@
1
- # Reference
2
-
3
- ## Dependency Categories
4
-
5
- When assessing a candidate for deepening, classify its dependencies:
6
-
7
- ### 1. In-process
8
-
9
- Pure computation, in-memory state, no I/O. Always deepenable — just merge the modules and test directly.
10
-
11
- ### 2. Local-substitutable
12
-
13
- Dependencies that have local test stand-ins (e.g., PGLite for Postgres, in-memory filesystem). Deepenable if the test substitute exists. The deepened module is tested with the local stand-in running in the test suite.
14
-
15
- ### 3. Remote but owned (Ports & Adapters)
16
-
17
- Your own services across a network boundary (microservices, internal APIs). Define a port (interface) at the module boundary. The deep module owns the logic; the transport is injected. Tests use an in-memory adapter. Production uses the real HTTP/gRPC/queue adapter.
18
-
19
- Recommendation shape: "Define a shared interface (port), implement an HTTP adapter for production and an in-memory adapter for testing, so the logic can be tested as one deep module even though it's deployed across a network boundary."
20
-
21
- ### 4. True external (Mock)
22
-
23
- Third-party services (Stripe, Twilio, etc.) you don't control. Mock at the boundary. The deepened module takes the external dependency as an injected port, and tests provide a mock implementation.
24
-
25
- ## Testing Strategy
26
-
27
- The core principle: **replace, don't layer.**
28
-
29
- - Old unit tests on shallow modules are waste once boundary tests exist — delete them
30
- - Write new tests at the deepened module's interface boundary
31
- - Tests assert on observable outcomes through the public interface, not internal state
32
- - Tests should survive internal refactors — they describe behavior, not implementation
33
-
34
- ## Issue Template
35
-
36
- <issue-template>
37
-
38
- ## Problem
39
-
40
- Describe the architectural friction:
41
-
42
- - Which modules are shallow and tightly coupled
43
- - What integration risk exists in the seams between them
44
- - Why this makes the codebase harder to navigate and maintain
45
-
46
- ## Proposed Interface
47
-
48
- The chosen interface design:
49
-
50
- - Interface signature (types, methods, params)
51
- - Usage example showing how callers use it
52
- - What complexity it hides internally
53
-
54
- ## Dependency Strategy
55
-
56
- Which category applies and how dependencies are handled:
57
-
58
- - **In-process**: merged directly
59
- - **Local-substitutable**: tested with [specific stand-in]
60
- - **Ports & adapters**: port definition, production adapter, test adapter
61
- - **Mock**: mock boundary for external services
62
-
63
- ## Testing Strategy
64
-
65
- - **New boundary tests to write**: describe the behaviors to verify at the interface
66
- - **Old tests to delete**: list the shallow module tests that become redundant
67
- - **Test environment needs**: any local stand-ins or adapters required
68
-
69
- ## Implementation Recommendations
70
-
71
- Durable architectural guidance that is NOT coupled to current file paths:
72
-
73
- - What the module should own (responsibilities)
74
- - What it should hide (implementation details)
75
- - What it should expose (the interface contract)
76
- - How callers should migrate to the new interface
77
-
78
- </issue-template>
1
+ # Reference
2
+
3
+ ## Dependency Categories
4
+
5
+ When assessing a candidate for deepening, classify its dependencies:
6
+
7
+ ### 1. In-process
8
+
9
+ Pure computation, in-memory state, no I/O. Always deepenable — just merge the modules and test directly.
10
+
11
+ ### 2. Local-substitutable
12
+
13
+ Dependencies that have local test stand-ins (e.g., PGLite for Postgres, in-memory filesystem). Deepenable if the test substitute exists. The deepened module is tested with the local stand-in running in the test suite.
14
+
15
+ ### 3. Remote but owned (Ports & Adapters)
16
+
17
+ Your own services across a network boundary (microservices, internal APIs). Define a port (interface) at the module boundary. The deep module owns the logic; the transport is injected. Tests use an in-memory adapter. Production uses the real HTTP/gRPC/queue adapter.
18
+
19
+ Recommendation shape: "Define a shared interface (port), implement an HTTP adapter for production and an in-memory adapter for testing, so the logic can be tested as one deep module even though it's deployed across a network boundary."
20
+
21
+ ### 4. True external (Mock)
22
+
23
+ Third-party services (Stripe, Twilio, etc.) you don't control. Mock at the boundary. The deepened module takes the external dependency as an injected port, and tests provide a mock implementation.
24
+
25
+ ## Testing Strategy
26
+
27
+ The core principle: **replace, don't layer.**
28
+
29
+ - Old unit tests on shallow modules are waste once boundary tests exist — delete them
30
+ - Write new tests at the deepened module's interface boundary
31
+ - Tests assert on observable outcomes through the public interface, not internal state
32
+ - Tests should survive internal refactors — they describe behavior, not implementation
33
+
34
+ ## Issue Template
35
+
36
+ <issue-template>
37
+
38
+ ## Problem
39
+
40
+ Describe the architectural friction:
41
+
42
+ - Which modules are shallow and tightly coupled
43
+ - What integration risk exists in the seams between them
44
+ - Why this makes the codebase harder to navigate and maintain
45
+
46
+ ## Proposed Interface
47
+
48
+ The chosen interface design:
49
+
50
+ - Interface signature (types, methods, params)
51
+ - Usage example showing how callers use it
52
+ - What complexity it hides internally
53
+
54
+ ## Dependency Strategy
55
+
56
+ Which category applies and how dependencies are handled:
57
+
58
+ - **In-process**: merged directly
59
+ - **Local-substitutable**: tested with [specific stand-in]
60
+ - **Ports & adapters**: port definition, production adapter, test adapter
61
+ - **Mock**: mock boundary for external services
62
+
63
+ ## Testing Strategy
64
+
65
+ - **New boundary tests to write**: describe the behaviors to verify at the interface
66
+ - **Old tests to delete**: list the shallow module tests that become redundant
67
+ - **Test environment needs**: any local stand-ins or adapters required
68
+
69
+ ## Implementation Recommendations
70
+
71
+ Durable architectural guidance that is NOT coupled to current file paths:
72
+
73
+ - What the module should own (responsibilities)
74
+ - What it should hide (implementation details)
75
+ - What it should expose (the interface contract)
76
+ - How callers should migrate to the new interface
77
+
78
+ </issue-template>
@@ -1,179 +1,179 @@
1
- ---
2
- name: improve-codebase
3
- description: improve codebase quality
4
- disable-model-invocation: true
5
- ---
6
-
7
- # Improve Codebase Architecture
8
-
9
- Explore a codebase (or provided context) like an AI would. Surface architectural friction, identify deepening opportunities, and propose refactors as GitHub issue RFCs.
10
-
11
- The input is already provided inline. Do NOT describe or restate it — use it directly.
12
-
13
- ---
14
-
15
- ## Core Principle
16
-
17
- A **deep module** (John Ousterhout, "A Philosophy of Software Design") has a small interface hiding a large implementation.
18
-
19
- Your goal:
20
- - Reduce cognitive load
21
- - Collapse shallow abstractions
22
- - Move complexity behind stable boundaries
23
- - Improve testability at module boundaries
24
-
25
- ---
26
-
27
- ## Process
28
-
29
- ### 1. Explore the context
30
-
31
- Call the subagent tool with `{ agent: "explorer", task: "..." }` (do not pass a model) when possible.
32
-
33
- If the context is partial:
34
- - Infer surrounding architecture cautiously
35
- - Focus on local friction signals
36
- - Avoid blocking on missing information
37
-
38
- Explore organically. Do NOT follow rigid heuristics.
39
-
40
- Look for friction:
41
-
42
- - Does understanding one concept require jumping across multiple files or layers?
43
- - Are modules shallow (interface ≈ implementation complexity)?
44
- - Are “pure functions” extracted for testability, but orchestration is fragile?
45
- - Are modules tightly coupled through shared types or call sequences?
46
- - Are there hidden integration risks between layers?
47
- - What is hard or impossible to test from the outside?
48
-
49
- The friction you encounter IS the signal.
50
-
51
- ### 2. Identify candidate(s) and frame the problem
52
-
53
- Analyze the context and identify deepening opportunities.
54
-
55
- If the input clearly implies a specific target (file, module, diff, or instruction):
56
- - Select the most relevant candidate automatically
57
- - Do NOT present multiple options
58
- - Proceed directly to framing the problem space below
59
-
60
- If the input is ambiguous or spans multiple concerns:
61
- - Present a numbered list of candidates
62
-
63
- Each candidate must include:
64
-
65
- - **Cluster**
66
- Modules / files / concepts involved
67
-
68
- - **Why they're coupled**
69
- Shared types, execution flow, ownership of a concept
70
-
71
- - **Dependency category**
72
- Classify using `REFERENCE.md`:
73
- - In-process
74
- - Local-substitutable
75
- - Ports & adapters
76
- - True external
77
-
78
- - **Test impact**
79
- - Which tests become obsolete
80
- - What boundary tests would replace them
81
-
82
- Then ask:
83
- "Which of these would you like to explore?"
84
- Wait for user input before continuing.
85
-
86
- ---
87
-
88
- ### Problem framing (execute immediately if a candidate is selected or inferred)
89
-
90
- Explain the selected candidate clearly:
91
-
92
- - Constraints a new interface must satisfy
93
- - Dependencies it must handle
94
- - What complexity needs to be hidden
95
-
96
- Include a small illustrative code sketch to make constraints concrete.
97
- This is NOT a proposal.
98
-
99
- After writing this, immediately proceed to Step 5: Design multiple interfaces.
100
-
101
- ### 5. Design multiple interfaces
102
-
103
- Spawn 3+ sub-agents in parallel using the subagent tool (`tasks: [...]`).
104
-
105
- Each sub-agent gets:
106
- - A focused technical brief derived from the provided context
107
- - Clear coupling + dependency context
108
- - A distinct design constraint
109
-
110
- Required variants:
111
-
112
- - Agent 1: Minimize interface (1–3 entry points max)
113
- - Agent 2: Maximize flexibility / extensibility
114
- - Agent 3: Optimize for the most common caller
115
- - Agent 4 (if relevant): Ports & adapters oriented design
116
- - ...
117
-
118
- ---
119
-
120
- ### Each sub-agent must output:
121
-
122
- 1. Interface signature (types, methods, params)
123
- 2. Usage example
124
- 3. Hidden complexity (what gets absorbed internally)
125
- 4. Dependency strategy (per `REFERENCE.md`)
126
- 5. Trade-offs
127
-
128
- ---
129
-
130
- ### Synthesis
131
-
132
- After all designs:
133
-
134
- - Compare approaches in prose
135
- - Highlight meaningful differences (not superficial ones)
136
- - Identify where each design wins/fails
137
-
138
- Then give a strong recommendation:
139
- - Pick the best design OR
140
- - Propose a hybrid
141
-
142
- Be opinionated.
143
-
144
- ---
145
-
146
- ### 6. User picks an interface (or accepts recommendation)
147
-
148
- ---
149
-
150
- ### 7. Create Branch
151
-
152
- Create a new branch for implementation.
153
-
154
- Branch name should reflect the domain concept being deepened.
155
-
156
- Examples:
157
- - deepen-payment-orchestration
158
- - deepen-map-rendering-pipeline
159
-
160
- ---
161
-
162
- ## Behavior Rules
163
-
164
- - Do NOT restate or summarize the provided input
165
- - Do NOT overfit to file structure — think in conceptual modules
166
- - Do NOT suggest incremental refactors — prefer boundary redefinition
167
- - Do NOT preserve bad abstractions — collapse aggressively
168
- - Prefer fewer, deeper modules over many shallow ones
169
- - Tests must move to the boundary, not remain internal
170
-
171
- ---
172
-
173
- ## Handling Incomplete Context
174
-
175
- - Make reasonable assumptions
176
- - State them explicitly
177
- - Continue without blocking
178
-
1
+ ---
2
+ name: improve-codebase
3
+ description: improve codebase quality
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Improve Codebase Architecture
8
+
9
+ Explore a codebase (or provided context) like an AI would. Surface architectural friction, identify deepening opportunities, and propose refactors as GitHub issue RFCs.
10
+
11
+ The input is already provided inline. Do NOT describe or restate it — use it directly.
12
+
13
+ ---
14
+
15
+ ## Core Principle
16
+
17
+ A **deep module** (John Ousterhout, "A Philosophy of Software Design") has a small interface hiding a large implementation.
18
+
19
+ Your goal:
20
+ - Reduce cognitive load
21
+ - Collapse shallow abstractions
22
+ - Move complexity behind stable boundaries
23
+ - Improve testability at module boundaries
24
+
25
+ ---
26
+
27
+ ## Process
28
+
29
+ ### 1. Explore the context
30
+
31
+ Call the subagent tool with `{ agent: "explorer", task: "..." }` (do not pass a model) when possible.
32
+
33
+ If the context is partial:
34
+ - Infer surrounding architecture cautiously
35
+ - Focus on local friction signals
36
+ - Avoid blocking on missing information
37
+
38
+ Explore organically. Do NOT follow rigid heuristics.
39
+
40
+ Look for friction:
41
+
42
+ - Does understanding one concept require jumping across multiple files or layers?
43
+ - Are modules shallow (interface ≈ implementation complexity)?
44
+ - Are “pure functions” extracted for testability, but orchestration is fragile?
45
+ - Are modules tightly coupled through shared types or call sequences?
46
+ - Are there hidden integration risks between layers?
47
+ - What is hard or impossible to test from the outside?
48
+
49
+ The friction you encounter IS the signal.
50
+
51
+ ### 2. Identify candidate(s) and frame the problem
52
+
53
+ Analyze the context and identify deepening opportunities.
54
+
55
+ If the input clearly implies a specific target (file, module, diff, or instruction):
56
+ - Select the most relevant candidate automatically
57
+ - Do NOT present multiple options
58
+ - Proceed directly to framing the problem space below
59
+
60
+ If the input is ambiguous or spans multiple concerns:
61
+ - Present a numbered list of candidates
62
+
63
+ Each candidate must include:
64
+
65
+ - **Cluster**
66
+ Modules / files / concepts involved
67
+
68
+ - **Why they're coupled**
69
+ Shared types, execution flow, ownership of a concept
70
+
71
+ - **Dependency category**
72
+ Classify using `REFERENCE.md`:
73
+ - In-process
74
+ - Local-substitutable
75
+ - Ports & adapters
76
+ - True external
77
+
78
+ - **Test impact**
79
+ - Which tests become obsolete
80
+ - What boundary tests would replace them
81
+
82
+ Then ask:
83
+ "Which of these would you like to explore?"
84
+ Wait for user input before continuing.
85
+
86
+ ---
87
+
88
+ ### Problem framing (execute immediately if a candidate is selected or inferred)
89
+
90
+ Explain the selected candidate clearly:
91
+
92
+ - Constraints a new interface must satisfy
93
+ - Dependencies it must handle
94
+ - What complexity needs to be hidden
95
+
96
+ Include a small illustrative code sketch to make constraints concrete.
97
+ This is NOT a proposal.
98
+
99
+ After writing this, immediately proceed to Step 5: Design multiple interfaces.
100
+
101
+ ### 5. Design multiple interfaces
102
+
103
+ Spawn 3+ sub-agents in parallel using the subagent tool (`tasks: [...]`).
104
+
105
+ Each sub-agent gets:
106
+ - A focused technical brief derived from the provided context
107
+ - Clear coupling + dependency context
108
+ - A distinct design constraint
109
+
110
+ Required variants:
111
+
112
+ - Agent 1: Minimize interface (1–3 entry points max)
113
+ - Agent 2: Maximize flexibility / extensibility
114
+ - Agent 3: Optimize for the most common caller
115
+ - Agent 4 (if relevant): Ports & adapters oriented design
116
+ - ...
117
+
118
+ ---
119
+
120
+ ### Each sub-agent must output:
121
+
122
+ 1. Interface signature (types, methods, params)
123
+ 2. Usage example
124
+ 3. Hidden complexity (what gets absorbed internally)
125
+ 4. Dependency strategy (per `REFERENCE.md`)
126
+ 5. Trade-offs
127
+
128
+ ---
129
+
130
+ ### Synthesis
131
+
132
+ After all designs:
133
+
134
+ - Compare approaches in prose
135
+ - Highlight meaningful differences (not superficial ones)
136
+ - Identify where each design wins/fails
137
+
138
+ Then give a strong recommendation:
139
+ - Pick the best design OR
140
+ - Propose a hybrid
141
+
142
+ Be opinionated.
143
+
144
+ ---
145
+
146
+ ### 6. User picks an interface (or accepts recommendation)
147
+
148
+ ---
149
+
150
+ ### 7. Create Branch
151
+
152
+ Create a new branch for implementation.
153
+
154
+ Branch name should reflect the domain concept being deepened.
155
+
156
+ Examples:
157
+ - deepen-payment-orchestration
158
+ - deepen-map-rendering-pipeline
159
+
160
+ ---
161
+
162
+ ## Behavior Rules
163
+
164
+ - Do NOT restate or summarize the provided input
165
+ - Do NOT overfit to file structure — think in conceptual modules
166
+ - Do NOT suggest incremental refactors — prefer boundary redefinition
167
+ - Do NOT preserve bad abstractions — collapse aggressively
168
+ - Prefer fewer, deeper modules over many shallow ones
169
+ - Tests must move to the boundary, not remain internal
170
+
171
+ ---
172
+
173
+ ## Handling Incomplete Context
174
+
175
+ - Make reasonable assumptions
176
+ - State them explicitly
177
+ - Continue without blocking
178
+
179
179
  Do NOT ask for more information unless absolutely necessary.