@selesai/code 0.9.5 → 0.9.8
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/CHANGELOG.md +18 -0
- package/dist/cli/credential-print.js +4 -4
- package/dist/cli.js +0 -0
- package/dist/core/agent-session-runtime.js +1 -4
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.js +26 -0
- package/dist/core/compaction/branch-summarization.js +30 -30
- package/dist/core/compaction/compaction.js +81 -81
- package/dist/core/compaction/utils.js +2 -2
- package/dist/core/export-html/template.css +1066 -1066
- package/dist/core/export-html/template.html +55 -55
- package/dist/core/export-html/template.js +1864 -1864
- package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
- package/dist/core/export-html/vendor/marked.min.js +78 -78
- package/dist/core/handoff.d.ts +11 -0
- package/dist/core/handoff.js +49 -0
- package/dist/core/messages.js +7 -7
- package/dist/extensions/context-compaction-reminder.test.ts +82 -82
- package/dist/extensions/context-compaction-reminder.ts +28 -28
- package/dist/extensions/handoff-new.ts +14 -75
- package/dist/extensions/pi-intercom/LICENSE +21 -21
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
- package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -387
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
- package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -153
- package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
- package/dist/extensions/pi-intercom/cwd.ts +31 -31
- package/dist/extensions/pi-intercom/extension-api.ts +44 -44
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.ts +32 -32
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
- package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
- package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
- package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +286 -286
- package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +108 -108
- package/dist/extensions/pi-powerline-footer/separators.ts +57 -57
- package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -47
- package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +39 -39
- package/dist/extensions/pi-powerline-footer/theme.example.json +24 -24
- package/dist/extensions/pi-powerline-footer/theme.json +12 -12
- package/dist/extensions/pi-powerline-footer/tps.ts +345 -345
- package/dist/extensions/pi-rewind-hook/README.md +245 -245
- package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
- package/dist/extensions/pi-rewind-hook/package.json +29 -29
- package/dist/extensions/pi-subagents/install.mjs +0 -0
- package/dist/extensions/pi-web-agent/package.json +31 -31
- package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
- package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
- package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
- package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
- package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
- package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
- package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
- package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
- package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
- package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
- package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
- package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
- package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
- package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
- package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
- package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
- package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
- package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
- package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
- package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
- package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
- package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
- package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
- package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
- package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
- package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
- package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
- package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
- package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
- package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
- package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
- package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
- package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
- package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
- package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
- package/dist/extensions/pi-web-agent/src/types.ts +88 -88
- package/dist/extensions/ponytail/package.json +8 -8
- package/dist/extensions/question/batch.ts +103 -103
- package/dist/extensions/question/constants.ts +30 -30
- package/dist/extensions/question/helpers.ts +58 -58
- package/dist/extensions/question/navigation.ts +14 -14
- package/dist/extensions/question/package.json +19 -19
- package/dist/extensions/question/schemas.ts +43 -43
- package/dist/extensions/question/selection-mode.ts +46 -46
- package/dist/extensions/question/shortcuts.ts +44 -44
- package/dist/extensions/question/types.ts +132 -132
- package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
- package/dist/extensions/test-resolve-hook.mjs +6 -6
- package/dist/extensions/web-agent-onboarding.ts +222 -222
- package/dist/extensions/workflow/package.json +17 -17
- package/dist/modes/interactive/components/model-selector.d.ts +1 -0
- package/dist/modes/interactive/components/model-selector.js +8 -4
- package/dist/modes/interactive/interactive-mode.js +9 -5
- package/dist/modes/rpc/rpc-mode.js +24 -0
- package/dist/modes/rpc/rpc-types.d.ts +19 -0
- package/dist/package-manager-cli.js +71 -71
- package/dist/rpc-entry.js +0 -0
- package/dist/skills/agent-browser/SKILL.md +52 -52
- package/dist/skills/batch-grill-me/SKILL.md +19 -19
- package/dist/skills/grill-me/SKILL.md +10 -10
- package/dist/skills/handoff/SKILL.md +16 -16
- package/dist/skills/handoff-text/SKILL.md +14 -14
- package/dist/skills/implanger/SKILL.md +69 -69
- package/dist/skills/improve-codebase/REFERENCE.md +78 -78
- package/dist/skills/improve-codebase/SKILL.md +178 -178
- package/dist/skills/planger/SKILL.md +166 -166
- package/dist/skills/ponytail/SKILL.md +116 -116
- package/dist/skills/ponytail-audit/SKILL.md +42 -42
- package/dist/skills/ponytail-debt/SKILL.md +45 -45
- package/dist/skills/ponytail-gain/SKILL.md +51 -51
- package/dist/skills/ponytail-help/SKILL.md +70 -70
- package/dist/skills/ponytail-review/SKILL.md +58 -58
- package/dist/skills/selesai-handoff/SKILL.md +20 -20
- package/dist/skills/workflow-creation/SKILL.md +73 -73
- package/dist/themes/powerline-footer/theme.json +33 -33
- package/docs/compaction.md +396 -396
- package/docs/containerization.md +111 -111
- package/docs/development.md +71 -71
- package/docs/docs.json +164 -164
- package/docs/environment-variables.md +86 -86
- package/docs/index.md +83 -83
- package/docs/json.md +82 -82
- package/docs/models.md +502 -502
- package/docs/packages.md +227 -227
- package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
- package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
- package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
- package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
- package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
- package/docs/prompt-templates.md +95 -95
- package/docs/providers.md +293 -293
- package/docs/sdk.md +1143 -1143
- package/docs/security.md +59 -59
- package/docs/session-format.md +414 -414
- package/docs/sessions.md +145 -145
- package/docs/shared-host-extensions.md +109 -109
- package/docs/shell-aliases.md +13 -13
- package/docs/skills.md +231 -231
- package/docs/terminal-setup.md +142 -142
- package/docs/termux.md +127 -127
- package/docs/themes.md +295 -295
- package/docs/tmux.md +63 -63
- package/docs/tui.md +927 -927
- package/docs/windows.md +17 -17
- package/examples/README.md +25 -25
- package/examples/extensions/README.md +211 -211
- package/examples/extensions/auto-commit-on-exit.ts +49 -49
- package/examples/extensions/bash-spawn-hook.ts +30 -30
- package/examples/extensions/bookmark.ts +50 -50
- package/examples/extensions/border-status-editor.ts +150 -150
- package/examples/extensions/built-in-tool-renderer.ts +249 -249
- package/examples/extensions/claude-rules.ts +86 -86
- package/examples/extensions/commands.ts +72 -72
- package/examples/extensions/confirm-destructive.ts +59 -59
- package/examples/extensions/custom-compaction.ts +130 -130
- package/examples/extensions/custom-footer.ts +64 -64
- package/examples/extensions/custom-header.ts +73 -73
- package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
- package/examples/extensions/custom-provider-anthropic/package.json +19 -19
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
- package/examples/extensions/dirty-repo-guard.ts +56 -56
- package/examples/extensions/doom-overlay/README.md +46 -46
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -152
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
- package/examples/extensions/doom-overlay/doom-component.ts +132 -132
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
- package/examples/extensions/doom-overlay/index.ts +74 -74
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
- package/examples/extensions/dynamic-resources/SKILL.md +8 -8
- package/examples/extensions/dynamic-resources/dynamic.json +79 -79
- package/examples/extensions/dynamic-resources/dynamic.md +5 -5
- package/examples/extensions/dynamic-resources/index.ts +15 -15
- package/examples/extensions/dynamic-tools.ts +74 -74
- package/examples/extensions/event-bus.ts +43 -43
- package/examples/extensions/file-trigger.ts +41 -41
- package/examples/extensions/git-checkpoint.ts +53 -53
- package/examples/extensions/git-merge-and-resolve.ts +115 -115
- package/examples/extensions/github-issue-autocomplete.ts +185 -185
- package/examples/extensions/gondolin/index.ts +531 -531
- package/examples/extensions/gondolin/package-lock.json +185 -185
- package/examples/extensions/gondolin/package.json +19 -19
- package/examples/extensions/handoff.ts +199 -199
- package/examples/extensions/hello.ts +26 -26
- package/examples/extensions/hidden-thinking-label.ts +53 -53
- package/examples/extensions/inline-bash.ts +94 -94
- package/examples/extensions/input-transform-streaming.ts +39 -39
- package/examples/extensions/input-transform.ts +43 -43
- package/examples/extensions/interactive-shell.ts +196 -196
- package/examples/extensions/mac-system-theme.ts +47 -47
- package/examples/extensions/message-renderer.ts +59 -59
- package/examples/extensions/minimal-mode.ts +426 -426
- package/examples/extensions/modal-editor.ts +85 -85
- package/examples/extensions/model-status.ts +31 -31
- package/examples/extensions/notify.ts +55 -55
- package/examples/extensions/overlay-qa-tests.ts +1450 -1450
- package/examples/extensions/overlay-test.ts +153 -153
- package/examples/extensions/permission-gate.ts +34 -34
- package/examples/extensions/pirate.ts +47 -47
- package/examples/extensions/plan-mode/README.md +66 -66
- package/examples/extensions/plan-mode/index.ts +390 -390
- package/examples/extensions/plan-mode/utils.ts +168 -168
- package/examples/extensions/preset.ts +436 -436
- package/examples/extensions/project-trust.ts +64 -64
- package/examples/extensions/prompt-customizer.ts +97 -97
- package/examples/extensions/protected-paths.ts +30 -30
- package/examples/extensions/provider-payload.ts +18 -18
- package/examples/extensions/qna.ts +122 -122
- package/examples/extensions/question.ts +285 -285
- package/examples/extensions/questionnaire.ts +448 -448
- package/examples/extensions/rainbow-editor.ts +88 -88
- package/examples/extensions/reload-runtime.ts +37 -37
- package/examples/extensions/rpc-demo.ts +118 -118
- package/examples/extensions/sandbox/index.ts +321 -321
- package/examples/extensions/sandbox/package-lock.json +92 -92
- package/examples/extensions/sandbox/package.json +19 -19
- package/examples/extensions/send-user-message.ts +97 -97
- package/examples/extensions/session-name.ts +27 -27
- package/examples/extensions/shutdown-command.ts +63 -63
- package/examples/extensions/snake.ts +343 -343
- package/examples/extensions/space-invaders.ts +560 -560
- package/examples/extensions/ssh.ts +220 -220
- package/examples/extensions/status-line.ts +32 -32
- package/examples/extensions/structured-output.ts +65 -65
- package/examples/extensions/subagent/README.md +175 -175
- package/examples/extensions/subagent/agents/planner.md +37 -37
- package/examples/extensions/subagent/agents/reviewer.md +35 -35
- package/examples/extensions/subagent/agents/scout.md +50 -50
- package/examples/extensions/subagent/agents/worker.md +24 -24
- package/examples/extensions/subagent/agents.ts +126 -126
- package/examples/extensions/subagent/index.ts +1015 -1015
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
- package/examples/extensions/subagent/prompts/implement.md +10 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
- package/examples/extensions/summarize.ts +209 -209
- package/examples/extensions/system-prompt-header.ts +17 -17
- package/examples/extensions/tic-tac-toe.ts +1008 -1008
- package/examples/extensions/timed-confirm.ts +70 -70
- package/examples/extensions/titlebar-spinner.ts +58 -58
- package/examples/extensions/todo.ts +297 -297
- package/examples/extensions/tool-override.ts +144 -144
- package/examples/extensions/tools.ts +146 -146
- package/examples/extensions/trigger-compact.ts +50 -50
- package/examples/extensions/truncated-tool.ts +195 -195
- package/examples/extensions/widget-placement.ts +9 -9
- package/examples/extensions/with-deps/index.ts +32 -32
- package/examples/extensions/with-deps/package-lock.json +31 -31
- package/examples/extensions/with-deps/package.json +22 -22
- package/examples/extensions/working-indicator.ts +123 -123
- package/examples/extensions/working-message-test.ts +25 -25
- package/examples/rpc-extension-ui.ts +632 -632
- package/examples/sdk/01-minimal.ts +26 -26
- package/examples/sdk/02-custom-model.ts +53 -53
- package/examples/sdk/03-custom-prompt.ts +75 -75
- package/examples/sdk/04-skills.ts +55 -55
- package/examples/sdk/05-tools.ts +48 -48
- package/examples/sdk/06-extensions.ts +99 -99
- package/examples/sdk/07-context-files.ts +47 -47
- package/examples/sdk/08-prompt-templates.ts +51 -51
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
- package/examples/sdk/10-settings.ts +53 -53
- package/examples/sdk/11-sessions.ts +52 -52
- package/examples/sdk/12-full-control.ts +79 -79
- package/examples/sdk/13-session-runtime.ts +67 -67
- package/examples/sdk/README.md +144 -144
- 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.
|