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.
- package/openclaw.plugin.json +10 -5
- package/package.json +17 -19
- package/scripts/acceptance-test.mjs +16 -73
- package/scripts/sync-plugin.mjs +382 -77
- package/src/commands/archive-impl.ts +2 -1
- package/src/commands/capabilities.ts +2 -2
- package/src/commands/context.ts +2 -2
- package/src/commands/disable-impl.ts +2 -1
- package/src/commands/evolution-status.ts +16 -16
- package/src/commands/export.ts +12 -67
- package/src/commands/pain.ts +91 -1
- package/src/commands/principle-rollback.ts +2 -1
- package/src/commands/promote-impl.ts +7 -43
- package/src/commands/rollback-impl.ts +2 -1
- package/src/commands/rollback.ts +2 -1
- package/src/commands/samples.ts +2 -1
- package/src/commands/thinking-os.ts +2 -1
- package/src/config/errors.ts +18 -2
- package/src/constants/diagnostician.ts +2 -2
- package/src/constants/tools.ts +2 -1
- package/src/core/__tests__/focus-history.test.ts +210 -0
- package/src/core/config.ts +1 -1
- package/src/core/confirm-first-gate.ts +255 -0
- package/src/core/correction-cue-learner.ts +2 -136
- package/src/core/correction-types.ts +16 -88
- package/src/core/dictionary.ts +19 -20
- package/src/core/empathy-keyword-matcher.ts +17 -289
- package/src/core/empathy-types.ts +18 -229
- package/src/core/event-log.ts +38 -132
- package/src/core/evolution-reducer.ts +21 -2
- package/src/core/evolution-types.ts +76 -464
- package/src/core/file-store.ts +80 -0
- package/src/core/focus-history.ts +228 -955
- package/src/core/local-worker-routing.ts +34 -314
- package/src/core/merge-gate-audit.ts +0 -195
- package/src/core/pain-diagnostic-gate.ts +154 -0
- package/src/core/pain-signal.ts +21 -138
- package/src/core/pain.ts +15 -88
- package/src/core/pd-task-reconciler.ts +26 -115
- package/src/core/pd-task-service.ts +9 -9
- package/src/core/pd-task-types.ts +23 -127
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
- package/src/core/principle-compiler/code-validator.ts +15 -42
- package/src/core/principle-compiler/compiler.ts +100 -15
- package/src/core/principle-compiler/index.ts +5 -2
- package/src/core/principle-compiler/template-generator.ts +4 -104
- package/src/core/principle-injection.ts +10 -202
- package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
- package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
- package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
- package/src/core/principle-tree-ledger-adapter.ts +145 -0
- package/src/core/principle-tree-ledger.ts +8 -6
- package/src/core/reflection/reflection-context.ts +14 -109
- package/src/core/replay-engine.ts +8 -500
- package/src/core/rule-host-helpers.ts +5 -35
- package/src/core/rule-host-types.ts +10 -82
- package/src/core/rule-host.ts +6 -63
- package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
- package/src/core/session-tracker.ts +87 -101
- package/src/core/shadow-observation-registry.ts +19 -48
- package/src/core/trajectory.ts +3 -1
- package/src/core/workflow-funnel-loader.ts +62 -68
- package/src/core/workspace-context.ts +46 -0
- package/src/core/workspace-dir-service.ts +1 -1
- package/src/core/workspace-dir-validation.ts +18 -9
- package/src/hooks/AGENTS.md +1 -1
- package/src/hooks/gate-block-helper.ts +46 -44
- package/src/hooks/gate.ts +207 -7
- package/src/hooks/lifecycle.ts +30 -32
- package/src/hooks/llm.ts +60 -32
- package/src/hooks/pain.ts +297 -103
- package/src/hooks/prompt.ts +469 -339
- package/src/hooks/subagent.ts +2 -29
- package/src/i18n/commands.ts +2 -10
- package/src/index.ts +95 -85
- package/src/openclaw-sdk.ts +311 -0
- package/src/service/central-database.ts +8 -4
- package/src/service/evolution-queue-migration.ts +2 -1
- package/src/service/evolution-worker.ts +163 -1786
- package/src/service/internalization-trigger-adapter.ts +302 -0
- package/src/service/keyword-optimization-service.ts +4 -4
- package/src/service/monitoring-query-service.ts +1 -215
- package/src/service/queue-io.ts +60 -331
- package/src/service/runtime-summary-service.ts +115 -18
- package/src/service/subagent-workflow/index.ts +0 -41
- package/src/service/subagent-workflow/types.ts +9 -120
- package/src/service/subagent-workflow/workflow-store.ts +2 -119
- package/src/service/workflow-watchdog.ts +0 -43
- package/src/types/event-payload.ts +16 -74
- package/src/types/event-types.ts +39 -547
- package/src/types/hygiene-types.ts +7 -30
- package/src/types/principle-tree-schema.ts +20 -222
- package/src/types/queue.ts +15 -70
- package/src/types/runtime-summary.ts +5 -49
- package/src/utils/io.ts +10 -0
- package/src/utils/retry.ts +1 -1
- package/src/utils/shadow-fingerprint.ts +2 -2
- package/src/utils/workspace-resolver.ts +50 -0
- package/templates/langs/en/core/AGENTS.md +2 -2
- package/templates/langs/en/core/BOOT.md +1 -1
- package/templates/langs/en/core/HEARTBEAT.md +2 -2
- package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
- package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/en/skills/evolve-task/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
- package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
- package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
- package/templates/langs/zh/core/AGENTS.md +2 -2
- package/templates/langs/zh/core/BOOT.md +1 -1
- package/templates/langs/zh/core/HEARTBEAT.md +2 -2
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
- package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
- package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
- package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
- package/templates/langs/zh/skills/evolve-task/SKILL.md +2 -2
- package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
- package/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
- package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
- package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
- package/tests/build-artifacts.test.ts +1 -3
- package/tests/commands/evolution-status.test.ts +0 -118
- package/tests/core/bootstrap-rules.test.ts +1 -1
- package/tests/core/config.test.ts +1 -1
- package/tests/core/event-log.test.ts +35 -0
- package/tests/core/evolution-engine.test.ts +610 -0
- package/tests/core/file-store.test.ts +102 -0
- package/tests/core/focus-history.test.ts +203 -11
- package/tests/core/merge-gate-audit.test.ts +2 -169
- package/tests/core/model-deployment-registry.test.ts +7 -1
- package/tests/core/model-training-registry.test.ts +19 -0
- package/tests/core/observability.test.ts +0 -1
- package/tests/core/pain-diagnostic-gate.test.ts +498 -0
- package/tests/core/pain.test.ts +0 -1
- package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
- package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
- package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
- package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
- package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
- package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
- package/tests/core/reflection-context.test.ts +0 -14
- package/tests/core/replay-engine.test.ts +127 -215
- package/tests/core/rule-host-helpers.test.ts +2 -2
- package/tests/core/rule-implementation-runtime.test.ts +0 -27
- package/tests/core/workflow-funnel-loader.test.ts +162 -0
- package/tests/core/workspace-dir-validation.test.ts +8 -1
- package/tests/core-anti-growth.test.ts +192 -0
- package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
- package/tests/hooks/confirm-first-gate.test.ts +333 -0
- package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
- package/tests/hooks/gate-auto-correct.test.ts +665 -0
- package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
- package/tests/hooks/pain.test.ts +269 -12
- package/tests/hooks/prompt-characterization.test.ts +500 -0
- package/tests/hooks/prompt-size-guard.test.ts +329 -0
- package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
- package/tests/index.test.ts +94 -1
- package/tests/integration/auto-entry-gate.test.ts +248 -0
- package/tests/integration/internalization-trigger-guard.test.ts +69 -0
- package/tests/integration/m8-legacy-paths.test.ts +63 -0
- package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
- package/tests/plugin-config-resolution-cutover.test.ts +359 -0
- package/tests/runtime-v2-discovery-guard.test.ts +154 -0
- package/tests/service/central-database.test.ts +457 -0
- package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
- package/tests/service/evolution-worker.timeout.test.ts +11 -129
- package/tests/service/internalization-trigger-adapter.test.ts +251 -0
- package/tests/service/monitoring-query-service.test.ts +1 -47
- package/tests/service/queue-io.test.ts +1 -62
- package/tests/service/runtime-summary-service.test.ts +184 -3
- package/tests/service/workflow-watchdog.test.ts +0 -91
- package/tests/utils/file-lock.test.ts +5 -3
- package/tests/utils/session-key.test.ts +52 -0
- package/tests/utils/subagent-probe.test.ts +48 -1
- package/vitest.config.ts +4 -11
- package/.planning/codebase/ARCHITECTURE.md +0 -157
- package/.planning/codebase/CONCERNS.md +0 -145
- package/.planning/codebase/CONVENTIONS.md +0 -148
- package/.planning/codebase/INTEGRATIONS.md +0 -81
- package/.planning/codebase/STACK.md +0 -87
- package/.planning/codebase/STRUCTURE.md +0 -193
- package/.planning/codebase/TESTING.md +0 -243
- package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
- package/docs/COMMAND_REFERENCE.md +0 -76
- package/docs/COMMAND_REFERENCE_EN.md +0 -79
- package/scripts/build-web.mjs +0 -46
- package/scripts/diagnose-nocturnal.mjs +0 -537
- package/scripts/seed-nocturnal-scenarios.mjs +0 -384
- package/src/commands/nocturnal-review.ts +0 -322
- package/src/commands/nocturnal-rollout.ts +0 -790
- package/src/commands/nocturnal-train.ts +0 -986
- package/src/commands/pd-reflect.ts +0 -88
- package/src/core/adaptive-thresholds.ts +0 -478
- package/src/core/diagnostician-task-store.ts +0 -192
- package/src/core/nocturnal-arbiter.ts +0 -715
- package/src/core/nocturnal-artifact-lineage.ts +0 -116
- package/src/core/nocturnal-artificer.ts +0 -257
- package/src/core/nocturnal-candidate-scoring.ts +0 -530
- package/src/core/nocturnal-compliance.ts +0 -1146
- package/src/core/nocturnal-dataset.ts +0 -763
- package/src/core/nocturnal-executability.ts +0 -428
- package/src/core/nocturnal-export.ts +0 -499
- package/src/core/nocturnal-paths.ts +0 -240
- package/src/core/nocturnal-reasoning-deriver.ts +0 -343
- package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
- package/src/core/nocturnal-snapshot-contract.ts +0 -99
- package/src/core/nocturnal-trajectory-extractor.ts +0 -512
- package/src/core/nocturnal-trinity-types.ts +0 -218
- package/src/core/nocturnal-trinity.ts +0 -2680
- package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
- package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
- package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
- package/src/http/principles-console-route.ts +0 -709
- package/src/service/central-health-service.ts +0 -49
- package/src/service/central-overview-service.ts +0 -138
- package/src/service/control-ui-query-service.ts +0 -900
- package/src/service/cooldown-strategy.ts +0 -97
- package/src/service/evolution-pain-context.ts +0 -79
- package/src/service/evolution-query-service.ts +0 -407
- package/src/service/health-query-service.ts +0 -1038
- package/src/service/nocturnal-config.ts +0 -214
- package/src/service/nocturnal-runtime.ts +0 -734
- package/src/service/nocturnal-service.ts +0 -1605
- package/src/service/nocturnal-target-selector.ts +0 -545
- package/src/service/sleep-cycle.ts +0 -157
- package/src/service/startup-reconciler.ts +0 -112
- package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
- package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
- package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
- package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
- package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
- package/src/tools/write-pain-flag.ts +0 -215
- package/tests/commands/nocturnal-review.test.ts +0 -448
- package/tests/commands/nocturnal-train.test.ts +0 -97
- package/tests/commands/pd-reflect.test.ts +0 -49
- package/tests/core/adaptive-thresholds.test.ts +0 -261
- package/tests/core/nocturnal-arbiter.test.ts +0 -559
- package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
- package/tests/core/nocturnal-artificer.test.ts +0 -241
- package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
- package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
- package/tests/core/nocturnal-compliance.test.ts +0 -646
- package/tests/core/nocturnal-dataset.test.ts +0 -892
- package/tests/core/nocturnal-e2e.test.ts +0 -234
- package/tests/core/nocturnal-executability.test.ts +0 -357
- package/tests/core/nocturnal-export.test.ts +0 -517
- package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
- package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
- package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
- package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
- package/tests/core/nocturnal-trinity.test.ts +0 -2053
- package/tests/core/pain-auto-repair.test.ts +0 -96
- package/tests/core/pain-integration.test.ts +0 -510
- package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
- package/tests/http/principles-console-route.test.ts +0 -162
- package/tests/integration/chaos-resilience.test.ts +0 -348
- package/tests/integration/empathy-workflow-integration.test.ts +0 -626
- package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
- package/tests/service/control-ui-query-service.test.ts +0 -121
- package/tests/service/cooldown-strategy.test.ts +0 -164
- package/tests/service/data-endpoints-regression.test.ts +0 -834
- package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
- package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
- package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
- package/tests/service/nocturnal-runtime.test.ts +0 -473
- package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
- package/tests/service/nocturnal-target-selector.test.ts +0 -615
- package/tests/service/startup-reconciler.test.ts +0 -148
- package/tests/tools/write-pain-flag.test.ts +0 -358
- package/ui/src/App.tsx +0 -45
- package/ui/src/api.ts +0 -220
- package/ui/src/charts.tsx +0 -955
- package/ui/src/components/ErrorState.tsx +0 -6
- package/ui/src/components/Loading.tsx +0 -13
- package/ui/src/components/ProtectedRoute.tsx +0 -12
- package/ui/src/components/Shell.tsx +0 -91
- package/ui/src/components/WorkspaceConfig.tsx +0 -178
- package/ui/src/components/index.ts +0 -5
- package/ui/src/context/auth.tsx +0 -80
- package/ui/src/context/theme.tsx +0 -66
- package/ui/src/hooks/useAutoRefresh.ts +0 -39
- package/ui/src/i18n/ui.ts +0 -473
- package/ui/src/main.tsx +0 -16
- package/ui/src/pages/EvolutionPage.tsx +0 -333
- package/ui/src/pages/FeedbackPage.tsx +0 -138
- package/ui/src/pages/GateMonitorPage.tsx +0 -136
- package/ui/src/pages/LoginPage.tsx +0 -89
- package/ui/src/pages/OverviewPage.tsx +0 -599
- package/ui/src/pages/SamplesPage.tsx +0 -174
- package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
- package/ui/src/styles.css +0 -2020
- package/ui/src/types.ts +0 -384
- 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*
|