principles-disciple 1.71.0 → 1.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/openclaw.plugin.json +10 -5
  2. package/package.json +17 -19
  3. package/scripts/acceptance-test.mjs +16 -73
  4. package/scripts/sync-plugin.mjs +382 -77
  5. package/src/commands/archive-impl.ts +2 -1
  6. package/src/commands/capabilities.ts +2 -2
  7. package/src/commands/context.ts +2 -2
  8. package/src/commands/disable-impl.ts +2 -1
  9. package/src/commands/evolution-status.ts +16 -16
  10. package/src/commands/export.ts +12 -67
  11. package/src/commands/pain.ts +91 -1
  12. package/src/commands/principle-rollback.ts +2 -1
  13. package/src/commands/promote-impl.ts +7 -43
  14. package/src/commands/rollback-impl.ts +2 -1
  15. package/src/commands/rollback.ts +2 -1
  16. package/src/commands/samples.ts +2 -1
  17. package/src/commands/thinking-os.ts +2 -1
  18. package/src/config/errors.ts +18 -2
  19. package/src/constants/diagnostician.ts +2 -2
  20. package/src/constants/tools.ts +2 -1
  21. package/src/core/__tests__/focus-history.test.ts +210 -0
  22. package/src/core/config.ts +1 -1
  23. package/src/core/confirm-first-gate.ts +255 -0
  24. package/src/core/correction-cue-learner.ts +2 -136
  25. package/src/core/correction-types.ts +16 -88
  26. package/src/core/dictionary.ts +19 -20
  27. package/src/core/empathy-keyword-matcher.ts +17 -289
  28. package/src/core/empathy-types.ts +18 -229
  29. package/src/core/event-log.ts +38 -132
  30. package/src/core/evolution-reducer.ts +21 -2
  31. package/src/core/evolution-types.ts +76 -464
  32. package/src/core/file-store.ts +80 -0
  33. package/src/core/focus-history.ts +228 -955
  34. package/src/core/local-worker-routing.ts +34 -314
  35. package/src/core/merge-gate-audit.ts +0 -195
  36. package/src/core/pain-diagnostic-gate.ts +154 -0
  37. package/src/core/pain-signal.ts +21 -138
  38. package/src/core/pain.ts +15 -88
  39. package/src/core/pd-task-reconciler.ts +26 -115
  40. package/src/core/pd-task-service.ts +9 -9
  41. package/src/core/pd-task-types.ts +23 -127
  42. package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
  43. package/src/core/principle-compiler/code-validator.ts +15 -42
  44. package/src/core/principle-compiler/compiler.ts +100 -15
  45. package/src/core/principle-compiler/index.ts +5 -2
  46. package/src/core/principle-compiler/template-generator.ts +4 -104
  47. package/src/core/principle-injection.ts +10 -202
  48. package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
  49. package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
  50. package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
  51. package/src/core/principle-tree-ledger-adapter.ts +145 -0
  52. package/src/core/principle-tree-ledger.ts +8 -6
  53. package/src/core/reflection/reflection-context.ts +14 -109
  54. package/src/core/replay-engine.ts +8 -500
  55. package/src/core/rule-host-helpers.ts +5 -35
  56. package/src/core/rule-host-types.ts +10 -82
  57. package/src/core/rule-host.ts +6 -63
  58. package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
  59. package/src/core/session-tracker.ts +87 -101
  60. package/src/core/shadow-observation-registry.ts +19 -48
  61. package/src/core/trajectory.ts +3 -1
  62. package/src/core/workflow-funnel-loader.ts +62 -68
  63. package/src/core/workspace-context.ts +46 -0
  64. package/src/core/workspace-dir-service.ts +1 -1
  65. package/src/core/workspace-dir-validation.ts +18 -9
  66. package/src/hooks/AGENTS.md +1 -1
  67. package/src/hooks/gate-block-helper.ts +46 -44
  68. package/src/hooks/gate.ts +207 -7
  69. package/src/hooks/lifecycle.ts +30 -32
  70. package/src/hooks/llm.ts +60 -32
  71. package/src/hooks/pain.ts +297 -103
  72. package/src/hooks/prompt.ts +469 -339
  73. package/src/hooks/subagent.ts +2 -29
  74. package/src/i18n/commands.ts +2 -10
  75. package/src/index.ts +95 -85
  76. package/src/openclaw-sdk.ts +311 -0
  77. package/src/service/central-database.ts +8 -4
  78. package/src/service/evolution-queue-migration.ts +2 -1
  79. package/src/service/evolution-worker.ts +163 -1786
  80. package/src/service/internalization-trigger-adapter.ts +302 -0
  81. package/src/service/keyword-optimization-service.ts +4 -4
  82. package/src/service/monitoring-query-service.ts +1 -215
  83. package/src/service/queue-io.ts +60 -331
  84. package/src/service/runtime-summary-service.ts +115 -18
  85. package/src/service/subagent-workflow/index.ts +0 -41
  86. package/src/service/subagent-workflow/types.ts +9 -120
  87. package/src/service/subagent-workflow/workflow-store.ts +2 -119
  88. package/src/service/workflow-watchdog.ts +0 -43
  89. package/src/types/event-payload.ts +16 -74
  90. package/src/types/event-types.ts +39 -547
  91. package/src/types/hygiene-types.ts +7 -30
  92. package/src/types/principle-tree-schema.ts +20 -222
  93. package/src/types/queue.ts +15 -70
  94. package/src/types/runtime-summary.ts +5 -49
  95. package/src/utils/io.ts +10 -0
  96. package/src/utils/retry.ts +1 -1
  97. package/src/utils/shadow-fingerprint.ts +2 -2
  98. package/src/utils/workspace-resolver.ts +50 -0
  99. package/templates/langs/en/core/AGENTS.md +2 -2
  100. package/templates/langs/en/core/BOOT.md +1 -1
  101. package/templates/langs/en/core/HEARTBEAT.md +2 -2
  102. package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  103. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  104. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  105. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  106. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  107. package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
  108. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  109. package/templates/langs/en/skills/evolve-task/SKILL.md +1 -1
  110. package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
  111. package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
  112. package/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
  113. package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
  114. package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
  115. package/templates/langs/zh/core/AGENTS.md +2 -2
  116. package/templates/langs/zh/core/BOOT.md +1 -1
  117. package/templates/langs/zh/core/HEARTBEAT.md +2 -2
  118. package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  119. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  120. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  121. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
  122. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  123. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  124. package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
  125. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  126. package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
  127. package/templates/langs/zh/skills/evolve-task/SKILL.md +2 -2
  128. package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
  129. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
  130. package/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
  131. package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
  132. package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
  133. package/tests/build-artifacts.test.ts +1 -3
  134. package/tests/commands/evolution-status.test.ts +0 -118
  135. package/tests/core/bootstrap-rules.test.ts +1 -1
  136. package/tests/core/config.test.ts +1 -1
  137. package/tests/core/event-log.test.ts +35 -0
  138. package/tests/core/evolution-engine.test.ts +610 -0
  139. package/tests/core/file-store.test.ts +102 -0
  140. package/tests/core/focus-history.test.ts +203 -11
  141. package/tests/core/merge-gate-audit.test.ts +2 -169
  142. package/tests/core/model-deployment-registry.test.ts +7 -1
  143. package/tests/core/model-training-registry.test.ts +19 -0
  144. package/tests/core/observability.test.ts +0 -1
  145. package/tests/core/pain-diagnostic-gate.test.ts +498 -0
  146. package/tests/core/pain.test.ts +0 -1
  147. package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
  148. package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
  149. package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
  150. package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
  151. package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
  152. package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
  153. package/tests/core/reflection-context.test.ts +0 -14
  154. package/tests/core/replay-engine.test.ts +127 -215
  155. package/tests/core/rule-host-helpers.test.ts +2 -2
  156. package/tests/core/rule-implementation-runtime.test.ts +0 -27
  157. package/tests/core/workflow-funnel-loader.test.ts +162 -0
  158. package/tests/core/workspace-dir-validation.test.ts +8 -1
  159. package/tests/core-anti-growth.test.ts +192 -0
  160. package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
  161. package/tests/hooks/confirm-first-gate.test.ts +333 -0
  162. package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
  163. package/tests/hooks/gate-auto-correct.test.ts +665 -0
  164. package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
  165. package/tests/hooks/pain.test.ts +269 -12
  166. package/tests/hooks/prompt-characterization.test.ts +500 -0
  167. package/tests/hooks/prompt-size-guard.test.ts +329 -0
  168. package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
  169. package/tests/index.test.ts +94 -1
  170. package/tests/integration/auto-entry-gate.test.ts +248 -0
  171. package/tests/integration/internalization-trigger-guard.test.ts +69 -0
  172. package/tests/integration/m8-legacy-paths.test.ts +63 -0
  173. package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
  174. package/tests/plugin-config-resolution-cutover.test.ts +359 -0
  175. package/tests/runtime-v2-discovery-guard.test.ts +154 -0
  176. package/tests/service/central-database.test.ts +457 -0
  177. package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
  178. package/tests/service/evolution-worker.timeout.test.ts +11 -129
  179. package/tests/service/internalization-trigger-adapter.test.ts +251 -0
  180. package/tests/service/monitoring-query-service.test.ts +1 -47
  181. package/tests/service/queue-io.test.ts +1 -62
  182. package/tests/service/runtime-summary-service.test.ts +184 -3
  183. package/tests/service/workflow-watchdog.test.ts +0 -91
  184. package/tests/utils/file-lock.test.ts +5 -3
  185. package/tests/utils/session-key.test.ts +52 -0
  186. package/tests/utils/subagent-probe.test.ts +48 -1
  187. package/vitest.config.ts +4 -11
  188. package/.planning/codebase/ARCHITECTURE.md +0 -157
  189. package/.planning/codebase/CONCERNS.md +0 -145
  190. package/.planning/codebase/CONVENTIONS.md +0 -148
  191. package/.planning/codebase/INTEGRATIONS.md +0 -81
  192. package/.planning/codebase/STACK.md +0 -87
  193. package/.planning/codebase/STRUCTURE.md +0 -193
  194. package/.planning/codebase/TESTING.md +0 -243
  195. package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
  196. package/docs/COMMAND_REFERENCE.md +0 -76
  197. package/docs/COMMAND_REFERENCE_EN.md +0 -79
  198. package/scripts/build-web.mjs +0 -46
  199. package/scripts/diagnose-nocturnal.mjs +0 -537
  200. package/scripts/seed-nocturnal-scenarios.mjs +0 -384
  201. package/src/commands/nocturnal-review.ts +0 -322
  202. package/src/commands/nocturnal-rollout.ts +0 -790
  203. package/src/commands/nocturnal-train.ts +0 -986
  204. package/src/commands/pd-reflect.ts +0 -88
  205. package/src/core/adaptive-thresholds.ts +0 -478
  206. package/src/core/diagnostician-task-store.ts +0 -192
  207. package/src/core/nocturnal-arbiter.ts +0 -715
  208. package/src/core/nocturnal-artifact-lineage.ts +0 -116
  209. package/src/core/nocturnal-artificer.ts +0 -257
  210. package/src/core/nocturnal-candidate-scoring.ts +0 -530
  211. package/src/core/nocturnal-compliance.ts +0 -1146
  212. package/src/core/nocturnal-dataset.ts +0 -763
  213. package/src/core/nocturnal-executability.ts +0 -428
  214. package/src/core/nocturnal-export.ts +0 -499
  215. package/src/core/nocturnal-paths.ts +0 -240
  216. package/src/core/nocturnal-reasoning-deriver.ts +0 -343
  217. package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
  218. package/src/core/nocturnal-snapshot-contract.ts +0 -99
  219. package/src/core/nocturnal-trajectory-extractor.ts +0 -512
  220. package/src/core/nocturnal-trinity-types.ts +0 -218
  221. package/src/core/nocturnal-trinity.ts +0 -2680
  222. package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
  223. package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
  224. package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
  225. package/src/http/principles-console-route.ts +0 -709
  226. package/src/service/central-health-service.ts +0 -49
  227. package/src/service/central-overview-service.ts +0 -138
  228. package/src/service/control-ui-query-service.ts +0 -900
  229. package/src/service/cooldown-strategy.ts +0 -97
  230. package/src/service/evolution-pain-context.ts +0 -79
  231. package/src/service/evolution-query-service.ts +0 -407
  232. package/src/service/health-query-service.ts +0 -1038
  233. package/src/service/nocturnal-config.ts +0 -214
  234. package/src/service/nocturnal-runtime.ts +0 -734
  235. package/src/service/nocturnal-service.ts +0 -1605
  236. package/src/service/nocturnal-target-selector.ts +0 -545
  237. package/src/service/sleep-cycle.ts +0 -157
  238. package/src/service/startup-reconciler.ts +0 -112
  239. package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
  240. package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
  241. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
  242. package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
  243. package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
  244. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
  245. package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
  246. package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
  247. package/src/tools/write-pain-flag.ts +0 -215
  248. package/tests/commands/nocturnal-review.test.ts +0 -448
  249. package/tests/commands/nocturnal-train.test.ts +0 -97
  250. package/tests/commands/pd-reflect.test.ts +0 -49
  251. package/tests/core/adaptive-thresholds.test.ts +0 -261
  252. package/tests/core/nocturnal-arbiter.test.ts +0 -559
  253. package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
  254. package/tests/core/nocturnal-artificer.test.ts +0 -241
  255. package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
  256. package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
  257. package/tests/core/nocturnal-compliance.test.ts +0 -646
  258. package/tests/core/nocturnal-dataset.test.ts +0 -892
  259. package/tests/core/nocturnal-e2e.test.ts +0 -234
  260. package/tests/core/nocturnal-executability.test.ts +0 -357
  261. package/tests/core/nocturnal-export.test.ts +0 -517
  262. package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
  263. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
  264. package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
  265. package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
  266. package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
  267. package/tests/core/nocturnal-trinity.test.ts +0 -2053
  268. package/tests/core/pain-auto-repair.test.ts +0 -96
  269. package/tests/core/pain-integration.test.ts +0 -510
  270. package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
  271. package/tests/http/principles-console-route.test.ts +0 -162
  272. package/tests/integration/chaos-resilience.test.ts +0 -348
  273. package/tests/integration/empathy-workflow-integration.test.ts +0 -626
  274. package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
  275. package/tests/service/control-ui-query-service.test.ts +0 -121
  276. package/tests/service/cooldown-strategy.test.ts +0 -164
  277. package/tests/service/data-endpoints-regression.test.ts +0 -834
  278. package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
  279. package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
  280. package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
  281. package/tests/service/nocturnal-runtime.test.ts +0 -473
  282. package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
  283. package/tests/service/nocturnal-target-selector.test.ts +0 -615
  284. package/tests/service/startup-reconciler.test.ts +0 -148
  285. package/tests/tools/write-pain-flag.test.ts +0 -358
  286. package/ui/src/App.tsx +0 -45
  287. package/ui/src/api.ts +0 -220
  288. package/ui/src/charts.tsx +0 -955
  289. package/ui/src/components/ErrorState.tsx +0 -6
  290. package/ui/src/components/Loading.tsx +0 -13
  291. package/ui/src/components/ProtectedRoute.tsx +0 -12
  292. package/ui/src/components/Shell.tsx +0 -91
  293. package/ui/src/components/WorkspaceConfig.tsx +0 -178
  294. package/ui/src/components/index.ts +0 -5
  295. package/ui/src/context/auth.tsx +0 -80
  296. package/ui/src/context/theme.tsx +0 -66
  297. package/ui/src/hooks/useAutoRefresh.ts +0 -39
  298. package/ui/src/i18n/ui.ts +0 -473
  299. package/ui/src/main.tsx +0 -16
  300. package/ui/src/pages/EvolutionPage.tsx +0 -333
  301. package/ui/src/pages/FeedbackPage.tsx +0 -138
  302. package/ui/src/pages/GateMonitorPage.tsx +0 -136
  303. package/ui/src/pages/LoginPage.tsx +0 -89
  304. package/ui/src/pages/OverviewPage.tsx +0 -599
  305. package/ui/src/pages/SamplesPage.tsx +0 -174
  306. package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
  307. package/ui/src/styles.css +0 -2020
  308. package/ui/src/types.ts +0 -384
  309. package/ui/src/utils/format.ts +0 -15
@@ -1,145 +0,0 @@
1
- # Codebase Concerns
2
-
3
- **Analysis Date:** 2026-04-15
4
-
5
- ## Tech Debt
6
-
7
- **Large Monolithic Files:**
8
- - Issue: `evolution-worker.ts` is 2689 lines, `nocturnal-trinity.ts` is 2429 lines. These exceed reasonable single-file thresholds and make debugging/profiling difficult.
9
- - Files: `src/service/evolution-worker.ts`, `src/core/nocturnal-trinity.ts`
10
- - Impact: Hard to trace bugs, no granular profiling, high risk of regression on modification
11
- - Fix approach: Break into smaller focused modules (e.g., queue-processor.ts, workflow-watchdog.ts, sleep-cycle.ts)
12
-
13
- **Type Safety Workarounds:**
14
- - Issue: Extensive use of `as any`, `as unknown`, and double casts (`as unknown as`) throughout the codebase
15
- - Files: `src/hooks/prompt.ts`, `src/hooks/subagent.ts`, `src/service/evolution-worker.ts`, `src/commands/promote-impl.ts`, `src/commands/rollback.ts`, `src/commands/pain.ts`
16
- - Impact: Type errors are silenced rather than fixed, runtime type mismatches can go undetected
17
- - Fix approach: Define proper shared type interfaces, use discriminated unions
18
-
19
- **Busy-Wait Retry Loops:**
20
- - Issue: `src/utils/io.ts` uses busy-wait spin loops (`while (Date.now() < end)`) for Windows file lock retries
21
- - Files: `src/utils/io.ts` (lines 32-33)
22
- - Impact: Consumes CPU while waiting; fails to yield to event loop
23
- - Fix approach: Use `setTimeout` delay or `fs.promises` with proper async retry
24
-
25
- **Unhandled Promise Rejections:**
26
- - Issue: Comments in `evolution-worker.ts` (line 182) reference unhandled rejections leaving workflows in limbo. Pattern of catch blocks that re-throw or log but don't always propagate.
27
- - Files: `src/service/evolution-worker.ts`
28
- - Impact: Workflows stuck in inconsistent state, silent failures
29
- - Fix approach: Ensure all async operations have proper error handlers; use `process.on('unhandledRejection')` logging
30
-
31
- **TODO Comments Not Addressed:**
32
- - Issue: One active TODO in `src/hooks/bash-risk.ts:18` — "Extract types from gate.ts related to bash risk analysis"
33
- - Files: `src/hooks/bash-risk.ts`
34
-
35
- ## Known Bugs
36
-
37
- **Stale Active Workflows (#185):**
38
- - Symptoms: Workflows marked 'active' but subagent never responds, blocking queue processing
39
- - Files: `src/service/evolution-worker.ts` (runWorkflowWatchdog)
40
- - Trigger: Subagent crash or network failure during workflow execution
41
- - Workaround: Watchdog marks them as 'terminal_error' after 2x TTL
42
-
43
- **Orphaned Sessions (#188):**
44
- - Symptoms: Child session cleanup fails when subagent runtime unavailable
45
- - Files: `src/service/evolution-worker.ts` (cleanup path)
46
- - Trigger: Gateway-safe fallback fails
47
- - Workaround: Manual cleanup required
48
-
49
- **Sleep Reflection Timeout Recovery (#214, #219):**
50
- - Symptoms: `sleep_reflection` tasks stuck in 'in_progress' after worker crash
51
- - Files: `src/service/evolution-worker.ts` (lines 1122-1198)
52
- - Trigger: Worker crashes after claiming task but before writing result
53
- - Fix: Timeout recovery logic reclaims stuck tasks after `task_timeout_ms`
54
-
55
- ## Security Considerations
56
-
57
- **Credential Detection in Logs:**
58
- - Risk: Sensitive data (passwords, tokens, api_keys) may leak into event logs or trajectory data
59
- - Files: `src/hooks/trajectory-collector.ts`, `src/core/nocturnal-arbiter.ts`, `src/core/nocturnal-compliance.ts`
60
- - Current mitigation: `SENSITIVE_KEY_PATTERN` regex filters known patterns
61
- - Recommendations: Extend pattern to cover more formats; add redaction before any async write
62
-
63
- **Gateway Token Auth:**
64
- - Risk: HTTP route in `principles-console-route.ts` uses Bearer token auth
65
- - Files: `src/http/principles-console-route.ts`
66
- - Current mitigation: Token comparison with configured value
67
- - Recommendations: Use constant-time comparison to prevent timing attacks
68
-
69
- **No eval() or Dynamic Code Execution:**
70
- - Status: Clean — no `eval()`, `new Function()`, or `dangerouslySetInnerHTML` found in codebase
71
-
72
- ## Performance Bottlenecks
73
-
74
- **Session Persistence Timer Per Session:**
75
- - Problem: `session-tracker.ts` creates a `setTimeout` per session for delayed persistence writes
76
- - Files: `src/core/session-tracker.ts`
77
- - Cause: Timer per workspace/session scales poorly with many concurrent sessions
78
- - Improvement path: Use a single periodic sweep for all dirty sessions
79
-
80
- **Event Log Buffer Flush:**
81
- - Problem: 20-event buffer or 30-second flush interval — events can be lost on crash
82
- - Files: `src/core/event-log.ts`
83
- - Cause: Trade-off between I/O frequency and durability
84
- - Improvement path: Flush immediately on critical events (hook failures, errors)
85
-
86
- **Evolution Queue File Read on Every Cycle:**
87
- - Problem: `evolution-worker.ts` reads and parses the entire queue JSON file on each heartbeat
88
- - Files: `src/service/evolution-worker.ts` (queue loading at lines 1085-1110)
89
- - Cause: Full file read/parse despite incremental changes
90
- - Improvement path: Use SQLite or incremental updates
91
-
92
- **Focus History Compression Timestamp:**
93
- - Problem: `focus-history.ts` writes `Date.now().toString()` on every compression
94
- - Files: `src/core/focus-history.ts` (line 962)
95
- - Impact: File modified on every compress even if content unchanged
96
-
97
- ## Fragile Areas
98
-
99
- **Workflow Store Queue Migration:**
100
- - Files: `src/service/evolution-worker.ts` (migrateQueueToV2), `src/service/subagent-workflow/workflow-store.ts`
101
- - Why fragile: Legacy queue format detection via type guards, migration happens on every cycle
102
- - Safe modification: Add version field, run migrations once at startup not per cycle
103
-
104
- **JSON.parse Without Try-Catch on Queue Items:**
105
- - Files: `src/service/evolution-worker.ts` (line 1148: `JSON.parse(failureEvent.payload_json)`)
106
- - Why fragile: Payload may be malformed, parse throws and is caught broadly
107
- - Safe modification: Validate JSON structure before parse
108
-
109
- **Nocturnal Trinity Runtime Adapter:**
110
- - Files: `src/core/nocturnal-trinity.ts` (TrinityRuntimeAdapter)
111
- - Why fragile: Uses `api.runtime.agent.runEmbeddedPiAgent()` which has specific requirements (provider/model must be explicit)
112
- - Safe modification: Ensure all trinity calls pass explicit provider/model
113
-
114
- ## Dependencies at Risk
115
-
116
- **better-sqlite3 (^12.9.0):**
117
- - Risk: Native module requiring platform-specific rebuilds; may break on Node.js major version upgrades
118
- - Impact: Database operations fail, session/trajectory storage breaks
119
- - Migration plan: Consider `sql.js` (pure JS) or `node:sqlite` (built-in) for portability
120
-
121
- **@sinclair/typebox (^0.34.48):**
122
- - Risk: Used for runtime schema validation; newer versions may change behavior
123
- - Impact: Validation mismatches could allow invalid data through
124
-
125
- ## Test Coverage Gaps
126
-
127
- **Untested Service Layer:**
128
- - What's not tested: `evolution-worker.ts` (2689 lines), `nocturnal-service.ts` (1584 lines)
129
- - Files: `src/service/evolution-worker.ts`, `src/service/nocturnal-service.ts`
130
- - Risk: High — service layer contains critical business logic
131
- - Priority: High
132
-
133
- **Untested Workflow Managers:**
134
- - What's not tested: `empathy-observer-workflow-manager.ts`, `deep-reflect-workflow-manager.ts`, `correction-observer-workflow-manager.ts`
135
- - Files: `src/service/subagent-workflow/`
136
- - Risk: Workflow spawning and result handling is untested
137
-
138
- **No Integration Tests for Queue Processing:**
139
- - What's not tested: Queue enqueue/dequeue cycle, migration path, error recovery
140
- - Files: `src/service/evolution-worker.ts` (queue operations)
141
- - Risk: Queue corruption or migration bugs go undetected
142
-
143
- ---
144
-
145
- *Concerns audit: 2026-04-15*
@@ -1,148 +0,0 @@
1
- # Coding Conventions
2
-
3
- **Analysis Date:** 2026-04-15
4
-
5
- ## Naming Patterns
6
-
7
- **Files:**
8
- - PascalCase for modules: `detection-service.ts`, `risk-calculator.ts`
9
- - kebab-case for utilities with multiple exports: `retry.ts`, `hashing.ts`
10
- - `.test.ts` suffix for test files co-located in `tests/` directory
11
-
12
- **Directories:**
13
- - Flat structure under `src/`: `commands/`, `core/`, `hooks/`, `service/`, `utils/`
14
- - Tests mirror source structure in `tests/` parallel directory
15
-
16
- **Functions:**
17
- - camelCase: `normalizePath`, `handleBeforeToolCall`, `computeDynamicTimeout`
18
- - Verb prefixes for actions: `handle*`, `compute*`, `extract*`, `serialize*`
19
- - Getter-style for services: `DetectionService.get()`, `WorkspaceContext.fromHookContext()`
20
-
21
- **Types & Interfaces:**
22
- - PascalCase: `DeepReflectionSettings`, `PainSettings`, `GfiGateSettings`
23
- - Suffix for type variants: `*Types`, `*Contract`, `*Schema`
24
- - Barrel exports via `index.ts` in each directory
25
-
26
- ## Code Style
27
-
28
- **Formatting:**
29
- - ESLint with `@typescript-eslint` plugin
30
- - No Prettier config detected (not enforced)
31
- - 2-space indentation
32
- - No trailing semicolons in ESLint config (but not explicitly disabled)
33
-
34
- **Key ESLint Rules:**
35
- ```javascript
36
- 'no-empty': 'error',
37
- 'no-console': 'warn',
38
- '@typescript-eslint/no-explicit-any': 'warn',
39
- '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
40
- '@typescript-eslint/no-non-null-assertion': 'warn',
41
- ```
42
-
43
- **Linting (test files relaxed):**
44
- ```javascript
45
- '@typescript-eslint/no-explicit-any': 'off',
46
- 'no-empty': 'warn',
47
- 'no-console': 'off',
48
- ```
49
-
50
- **Import Organization:**
51
- 1. Node.js built-ins (`path`, `fs`, `os`)
52
- 2. External packages (`vitest`, `better-sqlite3`)
53
- 3. Internal modules (`../../src/core/...`, `./hooks/...`)
54
- 4. Type-only imports use `import type` syntax
55
-
56
- **Path Aliases:**
57
- - No `paths` aliasing in `tsconfig.json`
58
- - Relative imports with `.js` extension for ESM compatibility: `from '../../src/utils/io.js'`
59
-
60
- ## Error Handling
61
-
62
- **Patterns:**
63
- - Return `undefined` for "not found" / "allowed" cases (not exceptions)
64
- - Throw typed errors from `src/config/errors.ts`
65
- - Result objects with `allowed: boolean` for gate checks
66
- - Log warnings via `plugin-logger.ts` for non-critical failures
67
-
68
- **Example - Gate pattern:**
69
- ```typescript
70
- // Return block result, not exceptions
71
- export function handleBeforeToolCall(event, ctx): BlockResult | undefined {
72
- if (someCondition) {
73
- return { block: true, blockReason: '...' };
74
- }
75
- return undefined; // Allowed
76
- }
77
- ```
78
-
79
- **SQLite errors:**
80
- - Use `better-sqlite3` with synchronous API
81
- - Wrap in try/catch for migration failures
82
-
83
- ## Logging
84
-
85
- **Framework:** `src/utils/plugin-logger.ts`
86
-
87
- **Patterns:**
88
- - Structured logging with levels: `warn`, `error`, `info`, `debug`
89
- - Context passed as object: `logger.warn({ context: 'Gate' }, 'message')`
90
- - No `console.log` in production paths (warn-only via ESLint)
91
-
92
- ## Comments
93
-
94
- **When to Comment:**
95
- - Complex cross-platform logic (Windows EPERM handling in `atomicWriteFileSync`)
96
- - Magic numbers explained: `const RENAME_MAX_RETRIES = 3`
97
- - Task markers in tests: `// Task 4: Default Values Consistency Tests`
98
-
99
- **JSDoc:**
100
- - Used in config files and public APIs
101
- - Not enforced on internal functions
102
-
103
- ## Function Design
104
-
105
- **Size:**
106
- - Prefer small, focused functions
107
- - Complex modules split into helpers (e.g., `rule-host-helpers.ts`)
108
-
109
- **Parameters:**
110
- - Max 3-4 parameters before grouping into options object
111
- - Destructure for clarity: `function ({ workspaceDir, stateDir })`
112
-
113
- **Return Values:**
114
- - Explicit return types in public APIs
115
- - `undefined` for "not applicable" vs `null` for "intentionally empty"
116
-
117
- ## Module Design
118
-
119
- **Exports:**
120
- - Named exports preferred over default exports
121
- - Barrel `index.ts` files aggregate directory exports
122
- - Factory functions for singleton services: `DetectionService.get(dir)`
123
-
124
- **Service Pattern:**
125
- ```typescript
126
- // Singleton pattern for stateful services
127
- class DetectionService {
128
- private static instances = new Map<string, DetectionFunnel>();
129
-
130
- static get(stateDir: string): DetectionFunnel {
131
- if (!instances.has(stateDir)) {
132
- instances.set(stateDir, new DetectionFunnel(...));
133
- }
134
- return instances.get(stateDir);
135
- }
136
-
137
- static reset(): void { instances.clear(); }
138
- }
139
- ```
140
-
141
- **Static Analysis:**
142
- - Vitest used for unit tests
143
- - ESM modules with `.js` extension in imports
144
- - `"type": "module"` in `package.json`
145
-
146
- ---
147
-
148
- *Convention analysis: 2026-04-15*
@@ -1,81 +0,0 @@
1
- # External Integrations
2
-
3
- **Analysis Date:** 2026-04-15
4
-
5
- ## APIs & External Services
6
-
7
- **Plugin Framework:**
8
- - OpenClaw - Host application
9
- - SDK/Client: `@openclaw/plugin-kit` (peer dependency, bundled as external)
10
- - Communication: Plugin hook events (`before_prompt_build`, `before_tool_call`, `after_tool_call`, `llm_output`, `subagent_spawning`, `subagent_ended`, `before_reset`, `before_compaction`, `after_compaction`)
11
- - Registration: Commands, tools, HTTP routes, background services
12
-
13
- ## Data Storage
14
-
15
- **Databases:**
16
- - SQLite (better-sqlite3 12.9.0)
17
- - Connection: File-based at `.state/trajectory.db`
18
- - Schema managed via migration runner in `src/core/schema/migrations/`
19
- - Migrations: 4 migrations (001-init-trajectory, 002-init-central, 003-init-workflow, 004-add-thinking-and-gfi)
20
-
21
- **File Storage:**
22
- - Local filesystem (workspace-relative paths)
23
- - Templates copied to workspace on init (`templates/` directory)
24
- - State persisted to `.state/` directory
25
- - Pain samples stored in `memory/pain/`
26
-
27
- **Caching:**
28
- - None detected (in-memory caching only)
29
-
30
- ## Authentication & Identity
31
-
32
- **Auth Provider:**
33
- - OpenClaw native (session-based)
34
- - Implementation: Session key extraction via `extractAgentIdFromSessionKey()` in `src/utils/session-key.ts`
35
- - Agent identification via `agentId` from OpenClaw context
36
-
37
- ## Monitoring & Observability
38
-
39
- **Error Tracking:**
40
- - Plugin logger (`src/utils/plugin-logger.ts`)
41
- - System logger (`src/core/system-logger.ts`)
42
- - Hook execution recording via `WorkspaceContext.eventLog.recordHookExecution()`
43
-
44
- **Logs:**
45
- - File-based logs: `.state/memory/logs/SYSTEM.log`
46
- - Console output for errors during build/dev
47
-
48
- ## CI/CD & Deployment
49
-
50
- **Hosting:**
51
- - OpenClaw plugin ecosystem
52
- - Published as npm package `principles-disciple`
53
-
54
- **CI Pipeline:**
55
- - Not detected (no GitHub Actions or similar)
56
-
57
- ## Environment Configuration
58
-
59
- **Required env vars:**
60
- - None required (configuration via OpenClaw plugin config API)
61
-
62
- **Secrets location:**
63
- - OpenClaw plugin configuration (not file-based)
64
-
65
- ## Webhooks & Callbacks
66
-
67
- **Incoming (via OpenClaw hooks):**
68
- - `before_prompt_build` - Prompt building stage
69
- - `before_tool_call` - Security gate before tool execution
70
- - `after_tool_call` - Pain/trust tracking after tool execution
71
- - `llm_output` - LLM response analysis
72
- - `subagent_spawning` - Subagent lifecycle
73
- - `subagent_ended` - Subagent completion
74
- - `before_reset` / `before_compaction` / `after_compaction` - Workspace lifecycle
75
-
76
- **Outgoing:**
77
- - HTTP routes registered via `api.registerHttpRoute()` in `src/http/principles-console-route.ts`
78
-
79
- ---
80
-
81
- *Integration audit: 2026-04-15*
@@ -1,87 +0,0 @@
1
- # Technology Stack
2
-
3
- **Analysis Date:** 2026-04-15
4
-
5
- ## Languages
6
-
7
- **Primary:**
8
- - TypeScript 6.0.2 - Core plugin development
9
- - JSX/TSX - UI components
10
-
11
- **Secondary:**
12
- - JavaScript (ES2022) - Build scripts and configuration
13
-
14
- ## Runtime
15
-
16
- **Environment:**
17
- - Node.js 20 (build target via esbuild)
18
-
19
- **Package Manager:**
20
- - pnpm 9.x
21
- - Lockfile: `pnpm-lock.yaml` (present)
22
-
23
- ## Frameworks
24
-
25
- **Core:**
26
- - OpenClaw Plugin SDK (peer dependency) - Plugin architecture framework
27
- - React 19.2.0 - UI layer
28
- - React Router 7.9.4 - UI routing
29
-
30
- **Database:**
31
- - better-sqlite3 12.9.0 - Local SQLite database for trajectory and state persistence
32
-
33
- **UI Components:**
34
- - lucide-react 1.7.0 - Icon library
35
-
36
- **Build:**
37
- - esbuild 0.28.0 - Bundling plugin code
38
- - TypeScript 6.0.2 - Type checking and compilation
39
-
40
- **Testing:**
41
- - Vitest 4.1.0 - Test runner
42
- - @vitest/coverage-v8 4.1.0 - Coverage reporting
43
- - jsdom 29.0.1 - DOM environment for React testing
44
- - @testing-library/react 16.3.0 - React component testing
45
-
46
- **Linting:**
47
- - ESLint 10.1.0 - Code linting
48
- - @typescript-eslint packages 8.58.0 - TypeScript ESLint support
49
-
50
- ## Key Dependencies
51
-
52
- **Critical:**
53
- - `@sinclair/typebox` 0.34.48 - JSON schema type generation
54
- - `micromatch` 4.0.8 - Glob pattern matching for file paths
55
-
56
- **Database:**
57
- - `@types/better-sqlite3` 7.6.13 - TypeScript types for SQLite
58
-
59
- **HTTP/WebSocket:**
60
- - `ws` 8.18.0 - WebSocket support
61
- - `@types/ws` 8.5.13 - TypeScript types for WebSocket
62
-
63
- ## Configuration
64
-
65
- **Environment:**
66
- - Plugin configuration via `openclaw.plugin.json`
67
- - Workspace-level settings in `.state/pain_settings.json`
68
- - No `.env` files (configuration is code-driven)
69
-
70
- **Build:**
71
- - `tsconfig.json` - TypeScript configuration (target: ES2022, module: ESNext)
72
- - `esbuild.config.js` - Bundle configuration
73
- - `vitest.config.ts` - Test configuration with layered projects (unit/integration)
74
-
75
- ## Platform Requirements
76
-
77
- **Development:**
78
- - Node.js 20+
79
- - pnpm 9+
80
-
81
- **Production:**
82
- - OpenClaw >=2026.4.4 (peer dependency)
83
- - Node.js 20 runtime
84
-
85
- ---
86
-
87
- *Stack analysis: 2026-04-15*
@@ -1,193 +0,0 @@
1
- # Codebase Structure
2
-
3
- **Analysis Date:** 2026-04-15
4
-
5
- ## Directory Layout
6
-
7
- ```
8
- openclaw-plugin/
9
- ├── src/ # Main source code
10
- │ ├── commands/ # Slash command implementations
11
- │ ├── config/ # Configuration defaults and errors
12
- │ ├── constants/ # Shared constants
13
- │ ├── core/ # Core business logic
14
- │ │ ├── hygiene/ # Hygiene tracking
15
- │ │ ├── principle-internalization/ # Principle lifecycle
16
- │ │ └── schema/ # Database schema and migrations
17
- │ ├── hooks/ # OpenClaw hook handlers
18
- │ ├── http/ # HTTP route handlers
19
- │ ├── i18n/ # Internationalization
20
- │ ├── service/ # Background services
21
- │ │ └── subagent-workflow/ # Workflow managers
22
- │ ├── tools/ # Plugin tools
23
- │ ├── types/ # TypeScript type definitions
24
- │ └── utils/ # Utility functions
25
- ├── ui/ # React UI
26
- │ └── src/
27
- │ ├── components/ # React components
28
- │ ├── context/ # React contexts
29
- │ ├── hooks/ # React hooks
30
- │ └── pages/ # Page components
31
- ├── tests/ # Test suite
32
- │ ├── commands/ # Command tests
33
- │ ├── core/ # Core module tests
34
- │ ├── fixtures/ # Test fixtures
35
- │ ├── hooks/ # Hook tests
36
- │ ├── integration/ # Integration tests
37
- │ ├── service/ # Service tests
38
- │ └── utils/ # Utility tests
39
- ├── templates/ # Workspace templates
40
- │ ├── langs/ # Language-specific templates
41
- │ └── workspace/ # Workspace structure templates
42
- ├── dist/ # Build output
43
- ├── scripts/ # Build scripts
44
- ├── .state/ # Runtime state (gitignored)
45
- └── .tmp/ # Temporary files (gitignored)
46
- ```
47
-
48
- ## Directory Purposes
49
-
50
- **src/commands/:**
51
- - Purpose: Slash command implementations
52
- - Contains: 20+ command handlers (strategy, focus, pain, rollback, nocturnal-review, nocturnal-train, etc.)
53
- - Key files: `strategy.ts`, `focus.ts`, `nocturnal-train.ts`, `nocturnal-rollout.ts`
54
-
55
- **src/core/:**
56
- - Purpose: Core business logic (evolution, trajectory, pain, training, rules)
57
- - Contains: 70+ core modules including `evolution-engine.ts`, `trajectory.ts`, `nocturnal-trinity.ts`, `pain.ts`, `principle-tree-ledger.ts`
58
- - Key files: `evolution-engine.ts`, `nocturnal-trinity.ts`, `rule-host.ts`
59
-
60
- **src/hooks/:**
61
- - Purpose: OpenClaw hook handlers for intercepting agent behavior
62
- - Contains: `prompt.ts`, `gate.ts`, `pain.ts`, `llm.ts`, `lifecycle.ts`, `subagent.ts`, `trajectory-collector.ts`
63
- - Key files: `gate.ts` (security), `prompt.ts` (context injection)
64
-
65
- **src/service/:**
66
- - Purpose: Background worker services
67
- - Contains: `evolution-worker.ts` (main worker), `nocturnal-service.ts`, `trajectory-service.ts`, `central-database.ts`
68
- - Key files: `evolution-worker.ts` (144KB, main async processor)
69
-
70
- **src/service/subagent-workflow/:**
71
- - Purpose: Workflow orchestration for complex subagent operations
72
- - Contains: `nocturnal-workflow-manager.ts`, `deep-reflect-workflow-manager.ts`, `empathy-observer-workflow-manager.ts`
73
- - Key files: `workflow-manager-base.ts`, `dynamic-timeout.ts`
74
-
75
- **src/utils/:**
76
- - Purpose: Shared utility functions
77
- - Contains: `io.ts` (atomic writes), `plugin-logger.ts`, `retry.ts`, `hashing.ts`, `file-lock.ts`
78
- - Key files: `io.ts` (critical for safe file operations)
79
-
80
- **src/schema/:**
81
- - Purpose: SQLite database schema and migrations
82
- - Contains: `schema-definitions.ts`, `migration-runner.ts`, `migrations/*.ts`
83
- - Migrations: 4 migrations (001-004)
84
-
85
- **ui/src/:**
86
- - Purpose: React-based plugin UI
87
- - Contains: Pages (Overview, Evolution, Feedback, GateMonitor), components (Shell, ProtectedRoute)
88
- - Key files: `App.tsx`, `pages/EvolutionPage.tsx`, `pages/FeedbackPage.tsx`
89
-
90
- ## Key File Locations
91
-
92
- **Entry Points:**
93
- - `src/index.ts`: Plugin entry point, registers all hooks/commands/tools
94
-
95
- **Configuration:**
96
- - `src/core/config.ts`: PainSettings defaults
97
- - `src/core/paths.ts`: Directory and file path constants (PD_DIRS, PD_FILES)
98
- - `openclaw.plugin.json`: Plugin manifest
99
-
100
- **Core Logic:**
101
- - `src/core/evolution-engine.ts`: Evolution processing (18KB)
102
- - `src/core/nocturnal-trinity.ts`: Nocturnal training orchestration (87KB - largest file)
103
- - `src/core/trajectory.ts`: Trajectory tracking (64KB)
104
- - `src/core/principle-tree-ledger.ts`: Principle lifecycle management (22KB)
105
- - `src/core/rule-host.ts`: Sandboxed rule execution (7KB)
106
-
107
- **Service Layer:**
108
- - `src/service/evolution-worker.ts`: Background evolution worker (144KB - largest file)
109
- - `src/service/nocturnal-service.ts`: Nocturnal training service (59KB)
110
- - `src/service/nocturnal-runtime.ts`: Runtime for nocturnal operations (24KB)
111
-
112
- **Testing:**
113
- - `tests/`: Test suite with unit and integration layers
114
- - `vitest.config.ts`: Test configuration with unit/integration project separation
115
-
116
- ## Naming Conventions
117
-
118
- **Files:**
119
- - TypeScript: `kebab-case.ts` or `camelCase.ts` depending on module type
120
- - Commands: `kebab-case.ts` (e.g., `nocturnal-review.ts`)
121
- - Core modules: `camelCase.ts` (e.g., `evolutionEngine.ts`)
122
- - React components: `PascalCase.tsx`
123
-
124
- **Directories:**
125
- - kebab-case: `subagent-workflow`, `principle-internalization`
126
-
127
- **Types:**
128
- - Interfaces: `PascalCase` (e.g., `PainSettings`, `EvolutionContext`)
129
- - Type aliases: `PascalCase`
130
- - Enums: `PascalCase`
131
-
132
- ## Where to Add New Code
133
-
134
- **New Command:**
135
- - Primary code: `src/commands/<name>.ts`
136
- - Handler registration: `src/index.ts` in `registerCommandWithAlias()` or `api.registerCommand()`
137
- - Tests: `tests/commands/<name>.test.ts`
138
-
139
- **New Hook Handler:**
140
- - Implementation: `src/hooks/<name>.ts`
141
- - Registration: `src/index.ts` in `api.on('<hook_name>', ...)` call
142
- - Tests: `tests/hooks/<name>.test.ts`
143
-
144
- **New Core Service:**
145
- - Implementation: `src/core/<name>.ts` or `src/service/<name>.ts`
146
- - Registration: `src/index.ts` in `api.registerService()`
147
- - Tests: `tests/core/<name>.test.ts` or `tests/service/<name>.test.ts`
148
-
149
- **New Workflow Manager:**
150
- - Implementation: `src/service/subagent-workflow/<name>-workflow-manager.ts`
151
- - Base class: `src/service/subagent-workflow/workflow-manager-base.ts`
152
- - Tests: `tests/service/subagent-workflow/<name>.test.ts`
153
-
154
- **New Database Migration:**
155
- - Implementation: `src/core/schema/migrations/<number>-<description>.ts`
156
- - Registration: `src/core/schema/migrations/index.ts`
157
- - Tests: Integration test in `tests/core/control-ui-db.test.ts`
158
-
159
- **New Utility:**
160
- - Shared: `src/utils/<name>.ts`
161
- - Tests: `tests/utils/<name>.test.ts`
162
-
163
- ## Special Directories
164
-
165
- **.state/:**
166
- - Purpose: Runtime state (per workspace)
167
- - Generated: Yes (created at runtime)
168
- - Committed: No (gitignored)
169
-
170
- **.tmp/:**
171
- - Purpose: Temporary files during build/dev
172
- - Generated: Yes
173
- - Committed: No (gitignored)
174
-
175
- **dist/:**
176
- - Purpose: Build output
177
- - Generated: Yes (by `npm run build`)
178
- - Committed: Yes (in some branches)
179
-
180
- **templates/:**
181
- - Purpose: Workspace template files copied on init
182
- - Generated: No
183
- - Committed: Yes
184
- - Contains: Language-specific templates (en, zh), workspace structure
185
-
186
- **node_modules/:**
187
- - Purpose: Dependencies
188
- - Generated: Yes (by pnpm install)
189
- - Committed: No
190
-
191
- ---
192
-
193
- *Structure analysis: 2026-04-15*