principles-disciple 1.8.0 → 1.8.2
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/ADVANCED_CONFIG_ZH.md +97 -0
- package/AGENT_INSTALL.md +173 -0
- package/AGENT_INSTALL_EN.md +173 -0
- package/INSTALL.md +256 -0
- package/SKILL.md +63 -0
- package/docs/COMMAND_REFERENCE.md +76 -0
- package/docs/COMMAND_REFERENCE_EN.md +79 -0
- package/esbuild.config.js +75 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +13 -15
- package/scripts/build-web.mjs +46 -0
- package/scripts/install-dependencies.cjs +47 -0
- package/scripts/sync-plugin.mjs +802 -0
- package/scripts/verify-build.mjs +109 -0
- package/src/agents/nocturnal-dreamer.md +152 -0
- package/src/agents/nocturnal-philosopher.md +138 -0
- package/src/agents/nocturnal-reflector.md +126 -0
- package/src/agents/nocturnal-scribe.md +164 -0
- package/src/commands/capabilities.ts +85 -0
- package/{dist/commands/context.js → src/commands/context.ts} +78 -38
- package/src/commands/evolution-status.ts +146 -0
- package/src/commands/export.ts +111 -0
- package/src/commands/focus.ts +533 -0
- package/src/commands/nocturnal-review.ts +311 -0
- package/src/commands/nocturnal-rollout.ts +763 -0
- package/src/commands/nocturnal-train.ts +1002 -0
- package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
- package/src/commands/principle-rollback.ts +27 -0
- package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
- package/src/commands/samples.ts +60 -0
- package/src/commands/strategy.ts +38 -0
- package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
- package/src/commands/workflow-debug.ts +128 -0
- package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
- package/src/config/errors.ts +163 -0
- package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
- package/src/constants/diagnostician.ts +66 -0
- package/src/constants/tools.ts +62 -0
- package/src/core/adaptive-thresholds.ts +476 -0
- package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
- package/{dist/core/config.js → src/core/config.ts} +158 -46
- package/src/core/control-ui-db.ts +435 -0
- package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
- package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
- package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
- package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
- package/src/core/empathy-keyword-matcher.ts +327 -0
- package/src/core/empathy-types.ts +218 -0
- package/src/core/event-log.ts +544 -0
- package/src/core/evolution-engine.ts +612 -0
- package/src/core/evolution-logger.ts +353 -0
- package/src/core/evolution-migration.ts +77 -0
- package/src/core/evolution-reducer.ts +731 -0
- package/src/core/evolution-types.ts +456 -0
- package/src/core/external-training-contract.ts +527 -0
- package/src/core/focus-history.ts +1458 -0
- package/src/core/hygiene/tracker.ts +117 -0
- package/{dist/core/init.js → src/core/init.ts} +39 -26
- package/src/core/local-worker-routing.ts +617 -0
- package/{dist/core/migration.js → src/core/migration.ts} +18 -11
- package/src/core/model-deployment-registry.ts +722 -0
- package/src/core/model-training-registry.ts +813 -0
- package/src/core/nocturnal-arbiter.ts +706 -0
- package/src/core/nocturnal-candidate-scoring.ts +392 -0
- package/src/core/nocturnal-compliance.ts +1075 -0
- package/src/core/nocturnal-dataset.ts +668 -0
- package/src/core/nocturnal-executability.ts +428 -0
- package/src/core/nocturnal-export.ts +390 -0
- package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
- package/src/core/nocturnal-trajectory-extractor.ts +484 -0
- package/src/core/nocturnal-trinity.ts +1384 -0
- package/src/core/pain.ts +122 -0
- package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
- package/{dist/core/paths.js → src/core/paths.ts} +13 -4
- package/src/core/principle-training-state.ts +450 -0
- package/src/core/profile.ts +226 -0
- package/src/core/promotion-gate.ts +822 -0
- package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
- package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +185 -63
- package/src/core/shadow-observation-registry.ts +534 -0
- package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
- package/src/core/thinking-models.ts +217 -0
- package/src/core/training-program.ts +630 -0
- package/src/core/trajectory-types.ts +243 -0
- package/src/core/trajectory.ts +1673 -0
- package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
- package/src/hooks/bash-risk.ts +171 -0
- package/src/hooks/edit-verification.ts +295 -0
- package/src/hooks/gate-block-helper.ts +160 -0
- package/src/hooks/gate.ts +210 -0
- package/src/hooks/gfi-gate.ts +177 -0
- package/src/hooks/lifecycle.ts +326 -0
- package/{dist/hooks/llm.js → src/hooks/llm.ts} +166 -139
- package/src/hooks/message-sanitize.ts +45 -0
- package/src/hooks/pain.ts +384 -0
- package/src/hooks/progressive-trust-gate.ts +174 -0
- package/src/hooks/prompt.ts +920 -0
- package/src/hooks/subagent.ts +207 -0
- package/src/hooks/thinking-checkpoint.ts +73 -0
- package/src/hooks/trajectory-collector.ts +290 -0
- package/src/http/principles-console-route.ts +716 -0
- package/src/i18n/commands.ts +117 -0
- package/src/index.ts +694 -0
- package/src/service/central-database.ts +831 -0
- package/src/service/control-ui-query-service.ts +888 -0
- package/src/service/evolution-query-service.ts +405 -0
- package/src/service/evolution-worker.ts +1646 -0
- package/src/service/health-query-service.ts +836 -0
- package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +263 -36
- package/src/service/nocturnal-service.ts +1015 -0
- package/src/service/nocturnal-target-selector.ts +532 -0
- package/src/service/phase3-input-filter.ts +237 -0
- package/src/service/runtime-summary-service.ts +757 -0
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
- package/src/service/subagent-workflow/index.ts +51 -0
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
- package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
- package/src/service/subagent-workflow/types.ts +378 -0
- package/src/service/subagent-workflow/workflow-store.ts +328 -0
- package/src/service/trajectory-service.ts +15 -0
- package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
- package/src/tools/deep-reflect.ts +349 -0
- package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
- package/src/types/event-types.ts +453 -0
- package/src/types/hygiene-types.ts +31 -0
- package/src/types/principle-tree-schema.ts +244 -0
- package/src/types/runtime-summary.ts +49 -0
- package/src/types.ts +74 -0
- package/src/utils/file-lock.ts +391 -0
- package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
- package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
- package/src/utils/io.ts +110 -0
- package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
- package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
- package/src/utils/subagent-probe.ts +94 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
- package/templates/pain_settings.json +2 -1
- package/tests/README.md +120 -0
- package/tests/build-artifacts.test.ts +111 -0
- package/tests/commands/evolution-status.test.ts +222 -0
- package/tests/commands/evolver.test.ts +22 -0
- package/tests/commands/export.test.ts +78 -0
- package/tests/commands/nocturnal-review.test.ts +448 -0
- package/tests/commands/nocturnal-train.test.ts +97 -0
- package/tests/commands/pain.test.ts +108 -0
- package/tests/commands/samples.test.ts +65 -0
- package/tests/commands/strategy.test.ts +34 -0
- package/tests/commands/thinking-os.test.ts +88 -0
- package/tests/core/adaptive-thresholds.test.ts +261 -0
- package/tests/core/config-service.test.ts +89 -0
- package/tests/core/config.test.ts +90 -0
- package/tests/core/control-ui-db.test.ts +75 -0
- package/tests/core/core-template-guidance.test.ts +21 -0
- package/tests/core/detection-funnel.test.ts +63 -0
- package/tests/core/detection-service.test.ts +50 -0
- package/tests/core/dictionary-service.test.ts +116 -0
- package/tests/core/dictionary.test.ts +168 -0
- package/tests/core/empathy-keyword-matcher.test.ts +209 -0
- package/tests/core/event-log.test.ts +181 -0
- package/tests/core/evolution-e2e.test.ts +58 -0
- package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
- package/tests/core/evolution-engine.test.ts +562 -0
- package/tests/core/evolution-logger.test.ts +148 -0
- package/tests/core/evolution-migration.test.ts +50 -0
- package/tests/core/evolution-paths.test.ts +21 -0
- package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
- package/tests/core/evolution-reducer.test.ts +180 -0
- package/tests/core/evolution-types-loop.test.ts +48 -0
- package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
- package/tests/core/external-training-contract.test.ts +463 -0
- package/tests/core/focus-history.test.ts +682 -0
- package/tests/core/init-flatten.test.ts +69 -0
- package/tests/core/init-refactor.test.ts +87 -0
- package/tests/core/init-v1.3.test.ts +46 -0
- package/tests/core/init.test.ts +190 -0
- package/tests/core/local-worker-routing.test.ts +757 -0
- package/tests/core/migration.test.ts +84 -0
- package/tests/core/model-deployment-registry.test.ts +845 -0
- package/tests/core/model-training-registry.test.ts +889 -0
- package/tests/core/nocturnal-arbiter.test.ts +494 -0
- package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
- package/tests/core/nocturnal-compliance.test.ts +646 -0
- package/tests/core/nocturnal-dataset.test.ts +892 -0
- package/tests/core/nocturnal-executability.test.ts +357 -0
- package/tests/core/nocturnal-export.test.ts +462 -0
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
- package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
- package/tests/core/nocturnal-trinity.test.ts +953 -0
- package/tests/core/pain.test.ts +33 -0
- package/tests/core/path-resolver.test.ts +57 -0
- package/tests/core/paths-refactor.test.ts +42 -0
- package/tests/core/phase7-rollout-integration.test.ts +477 -0
- package/tests/core/principle-training-state.test.ts +712 -0
- package/tests/core/profile.test.ts +56 -0
- package/tests/core/promotion-gate.test.ts +556 -0
- package/tests/core/risk-calculator.test.ts +168 -0
- package/tests/core/session-tracker.test.ts +191 -0
- package/tests/core/training-program.test.ts +472 -0
- package/tests/core/trajectory.test.ts +265 -0
- package/tests/core/workspace-context-factory.test.ts +18 -0
- package/tests/core/workspace-context.test.ts +134 -0
- package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
- package/tests/fixtures/production-compatibility.test.ts +147 -0
- package/tests/fixtures/production-mock-generator.ts +282 -0
- package/tests/hooks/bash-risk-integration.test.ts +137 -0
- package/tests/hooks/bash-risk.test.ts +81 -0
- package/tests/hooks/edit-verification.test.ts +678 -0
- package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
- package/tests/hooks/gate-edit-verification.test.ts +435 -0
- package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
- package/tests/hooks/gate.test.ts +271 -0
- package/tests/hooks/gfi-gate-unit.test.ts +422 -0
- package/tests/hooks/gfi-gate.test.ts +669 -0
- package/tests/hooks/lifecycle.test.ts +248 -0
- package/tests/hooks/llm.test.ts +308 -0
- package/tests/hooks/message-sanitize.test.ts +36 -0
- package/tests/hooks/pain.test.ts +141 -0
- package/tests/hooks/progressive-trust-gate.test.ts +277 -0
- package/tests/hooks/prompt.test.ts +1411 -0
- package/tests/hooks/subagent.test.ts +467 -0
- package/tests/hooks/thinking-gate.test.ts +313 -0
- package/tests/http/principles-console-route.test.ts +140 -0
- package/tests/hygiene-tracker.test.ts +77 -0
- package/tests/index.integration.test.ts +179 -0
- package/tests/index.shadow-routing.integration.test.ts +140 -0
- package/tests/index.test.ts +9 -0
- package/tests/integration/empathy-workflow-integration.test.ts +627 -0
- package/tests/service/control-ui-query-service.test.ts +121 -0
- package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
- package/tests/service/evolution-worker.test.ts +585 -0
- package/tests/service/nocturnal-runtime.test.ts +470 -0
- package/tests/service/nocturnal-service.test.ts +577 -0
- package/tests/service/nocturnal-target-selector.test.ts +615 -0
- package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
- package/tests/service/phase3-input-filter.test.ts +289 -0
- package/tests/service/runtime-summary-service.test.ts +919 -0
- package/tests/task-compliance.test.ts +166 -0
- package/tests/test-utils.ts +48 -0
- package/tests/tools/critique-prompt.test.ts +260 -0
- package/tests/tools/deep-reflect.test.ts +232 -0
- package/tests/tools/model-index.test.ts +246 -0
- package/tests/ui/app.test.tsx +114 -0
- package/tests/utils/file-lock.test.ts +407 -0
- package/tests/utils/hashing.test.ts +32 -0
- package/tests/utils/io.test.ts +39 -0
- package/tests/utils/nlp.test.ts +53 -0
- package/tests/utils/plugin-logger.test.ts +156 -0
- package/tsconfig.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/ui/src/App.tsx +45 -0
- package/ui/src/api.ts +216 -0
- package/ui/src/charts.tsx +586 -0
- package/ui/src/components/ErrorState.tsx +6 -0
- package/ui/src/components/Loading.tsx +13 -0
- package/ui/src/components/ProtectedRoute.tsx +12 -0
- package/ui/src/components/Shell.tsx +91 -0
- package/ui/src/components/WorkspaceConfig.tsx +146 -0
- package/ui/src/components/index.ts +5 -0
- package/ui/src/context/auth.tsx +80 -0
- package/ui/src/context/theme.tsx +66 -0
- package/ui/src/hooks/useAutoRefresh.ts +39 -0
- package/ui/src/i18n/ui.ts +363 -0
- package/ui/src/main.tsx +16 -0
- package/ui/src/pages/EvolutionPage.tsx +352 -0
- package/ui/src/pages/FeedbackPage.tsx +140 -0
- package/ui/src/pages/GateMonitorPage.tsx +136 -0
- package/ui/src/pages/LoginPage.tsx +88 -0
- package/ui/src/pages/OverviewPage.tsx +238 -0
- package/ui/src/pages/SamplesPage.tsx +174 -0
- package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
- package/ui/src/styles.css +1661 -0
- package/ui/src/types.ts +368 -0
- package/ui/src/utils/format.ts +15 -0
- package/vitest.config.ts +23 -0
- package/dist/commands/capabilities.d.ts +0 -3
- package/dist/commands/capabilities.js +0 -73
- package/dist/commands/context.d.ts +0 -5
- package/dist/commands/evolution-status.d.ts +0 -4
- package/dist/commands/evolution-status.js +0 -117
- package/dist/commands/evolver.d.ts +0 -9
- package/dist/commands/evolver.js +0 -26
- package/dist/commands/export.d.ts +0 -2
- package/dist/commands/export.js +0 -98
- package/dist/commands/focus.d.ts +0 -14
- package/dist/commands/focus.js +0 -457
- package/dist/commands/nocturnal-review.d.ts +0 -24
- package/dist/commands/nocturnal-review.js +0 -265
- package/dist/commands/nocturnal-rollout.d.ts +0 -27
- package/dist/commands/nocturnal-rollout.js +0 -671
- package/dist/commands/nocturnal-train.d.ts +0 -25
- package/dist/commands/nocturnal-train.js +0 -919
- package/dist/commands/pain.d.ts +0 -5
- package/dist/commands/principle-rollback.d.ts +0 -4
- package/dist/commands/principle-rollback.js +0 -22
- package/dist/commands/rollback.d.ts +0 -19
- package/dist/commands/samples.d.ts +0 -2
- package/dist/commands/samples.js +0 -55
- package/dist/commands/strategy.d.ts +0 -3
- package/dist/commands/strategy.js +0 -29
- package/dist/commands/thinking-os.d.ts +0 -2
- package/dist/config/defaults/runtime.d.ts +0 -40
- package/dist/config/errors.d.ts +0 -84
- package/dist/config/errors.js +0 -94
- package/dist/config/index.js +0 -7
- package/dist/constants/diagnostician.d.ts +0 -12
- package/dist/constants/diagnostician.js +0 -56
- package/dist/constants/tools.d.ts +0 -17
- package/dist/constants/tools.js +0 -54
- package/dist/core/adaptive-thresholds.d.ts +0 -186
- package/dist/core/adaptive-thresholds.js +0 -300
- package/dist/core/config-service.d.ts +0 -15
- package/dist/core/config.d.ts +0 -127
- package/dist/core/control-ui-db.d.ts +0 -95
- package/dist/core/control-ui-db.js +0 -292
- package/dist/core/detection-funnel.d.ts +0 -33
- package/dist/core/detection-service.d.ts +0 -15
- package/dist/core/dictionary-service.d.ts +0 -15
- package/dist/core/dictionary.d.ts +0 -38
- package/dist/core/event-log.d.ts +0 -82
- package/dist/core/event-log.js +0 -463
- package/dist/core/evolution-engine.d.ts +0 -118
- package/dist/core/evolution-engine.js +0 -464
- package/dist/core/evolution-logger.d.ts +0 -137
- package/dist/core/evolution-logger.js +0 -256
- package/dist/core/evolution-migration.d.ts +0 -5
- package/dist/core/evolution-migration.js +0 -65
- package/dist/core/evolution-reducer.d.ts +0 -98
- package/dist/core/evolution-reducer.js +0 -465
- package/dist/core/evolution-types.d.ts +0 -287
- package/dist/core/evolution-types.js +0 -78
- package/dist/core/external-training-contract.d.ts +0 -276
- package/dist/core/external-training-contract.js +0 -269
- package/dist/core/focus-history.d.ts +0 -210
- package/dist/core/focus-history.js +0 -1185
- package/dist/core/hygiene/tracker.d.ts +0 -22
- package/dist/core/hygiene/tracker.js +0 -106
- package/dist/core/init.d.ts +0 -12
- package/dist/core/local-worker-routing.d.ts +0 -175
- package/dist/core/local-worker-routing.js +0 -525
- package/dist/core/migration.d.ts +0 -6
- package/dist/core/model-deployment-registry.d.ts +0 -218
- package/dist/core/model-deployment-registry.js +0 -503
- package/dist/core/model-training-registry.d.ts +0 -295
- package/dist/core/model-training-registry.js +0 -475
- package/dist/core/nocturnal-arbiter.d.ts +0 -159
- package/dist/core/nocturnal-arbiter.js +0 -534
- package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
- package/dist/core/nocturnal-candidate-scoring.js +0 -266
- package/dist/core/nocturnal-compliance.d.ts +0 -175
- package/dist/core/nocturnal-compliance.js +0 -824
- package/dist/core/nocturnal-dataset.d.ts +0 -224
- package/dist/core/nocturnal-dataset.js +0 -443
- package/dist/core/nocturnal-executability.d.ts +0 -85
- package/dist/core/nocturnal-executability.js +0 -331
- package/dist/core/nocturnal-export.d.ts +0 -124
- package/dist/core/nocturnal-export.js +0 -275
- package/dist/core/nocturnal-paths.d.ts +0 -124
- package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
- package/dist/core/nocturnal-trajectory-extractor.js +0 -307
- package/dist/core/nocturnal-trinity.d.ts +0 -311
- package/dist/core/nocturnal-trinity.js +0 -880
- package/dist/core/pain.d.ts +0 -4
- package/dist/core/pain.js +0 -70
- package/dist/core/path-resolver.d.ts +0 -46
- package/dist/core/paths.d.ts +0 -65
- package/dist/core/principle-training-state.d.ts +0 -121
- package/dist/core/principle-training-state.js +0 -321
- package/dist/core/profile.d.ts +0 -62
- package/dist/core/profile.js +0 -210
- package/dist/core/promotion-gate.d.ts +0 -238
- package/dist/core/promotion-gate.js +0 -529
- package/dist/core/risk-calculator.d.ts +0 -22
- package/dist/core/session-tracker.d.ts +0 -99
- package/dist/core/shadow-observation-registry.d.ts +0 -217
- package/dist/core/shadow-observation-registry.js +0 -308
- package/dist/core/system-logger.d.ts +0 -8
- package/dist/core/thinking-models.d.ts +0 -38
- package/dist/core/thinking-models.js +0 -170
- package/dist/core/training-program.d.ts +0 -233
- package/dist/core/training-program.js +0 -433
- package/dist/core/trajectory.d.ts +0 -411
- package/dist/core/trajectory.js +0 -1307
- package/dist/core/workspace-context.d.ts +0 -71
- package/dist/hooks/bash-risk.d.ts +0 -57
- package/dist/hooks/bash-risk.js +0 -137
- package/dist/hooks/edit-verification.d.ts +0 -62
- package/dist/hooks/edit-verification.js +0 -256
- package/dist/hooks/gate-block-helper.d.ts +0 -44
- package/dist/hooks/gate-block-helper.js +0 -119
- package/dist/hooks/gate.d.ts +0 -24
- package/dist/hooks/gate.js +0 -173
- package/dist/hooks/gfi-gate.d.ts +0 -40
- package/dist/hooks/gfi-gate.js +0 -113
- package/dist/hooks/lifecycle.d.ts +0 -5
- package/dist/hooks/lifecycle.js +0 -284
- package/dist/hooks/llm.d.ts +0 -12
- package/dist/hooks/message-sanitize.d.ts +0 -3
- package/dist/hooks/message-sanitize.js +0 -37
- package/dist/hooks/pain.d.ts +0 -5
- package/dist/hooks/pain.js +0 -301
- package/dist/hooks/progressive-trust-gate.d.ts +0 -51
- package/dist/hooks/progressive-trust-gate.js +0 -89
- package/dist/hooks/prompt.d.ts +0 -47
- package/dist/hooks/prompt.js +0 -884
- package/dist/hooks/subagent.d.ts +0 -10
- package/dist/hooks/subagent.js +0 -387
- package/dist/hooks/thinking-checkpoint.d.ts +0 -37
- package/dist/hooks/thinking-checkpoint.js +0 -51
- package/dist/hooks/trajectory-collector.d.ts +0 -32
- package/dist/hooks/trajectory-collector.js +0 -256
- package/dist/http/principles-console-route.d.ts +0 -9
- package/dist/http/principles-console-route.js +0 -567
- package/dist/i18n/commands.d.ts +0 -26
- package/dist/i18n/commands.js +0 -116
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -581
- package/dist/service/central-database.d.ts +0 -104
- package/dist/service/central-database.js +0 -649
- package/dist/service/control-ui-query-service.d.ts +0 -221
- package/dist/service/control-ui-query-service.js +0 -543
- package/dist/service/empathy-observer-manager.d.ts +0 -52
- package/dist/service/empathy-observer-manager.js +0 -229
- package/dist/service/evolution-query-service.d.ts +0 -155
- package/dist/service/evolution-query-service.js +0 -258
- package/dist/service/evolution-worker.d.ts +0 -101
- package/dist/service/evolution-worker.js +0 -974
- package/dist/service/nocturnal-runtime.d.ts +0 -183
- package/dist/service/nocturnal-service.d.ts +0 -163
- package/dist/service/nocturnal-service.js +0 -787
- package/dist/service/nocturnal-target-selector.d.ts +0 -145
- package/dist/service/nocturnal-target-selector.js +0 -315
- package/dist/service/phase3-input-filter.d.ts +0 -73
- package/dist/service/phase3-input-filter.js +0 -172
- package/dist/service/runtime-summary-service.d.ts +0 -122
- package/dist/service/runtime-summary-service.js +0 -485
- package/dist/service/trajectory-service.d.ts +0 -2
- package/dist/service/trajectory-service.js +0 -15
- package/dist/tools/critique-prompt.d.ts +0 -14
- package/dist/tools/deep-reflect.d.ts +0 -39
- package/dist/tools/deep-reflect.js +0 -350
- package/dist/tools/model-index.d.ts +0 -9
- package/dist/types/event-types.d.ts +0 -306
- package/dist/types/event-types.js +0 -106
- package/dist/types/hygiene-types.d.ts +0 -20
- package/dist/types/hygiene-types.js +0 -12
- package/dist/types/runtime-summary.d.ts +0 -47
- package/dist/types/runtime-summary.js +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.js +0 -22
- package/dist/utils/file-lock.d.ts +0 -71
- package/dist/utils/file-lock.js +0 -309
- package/dist/utils/glob-match.d.ts +0 -28
- package/dist/utils/hashing.d.ts +0 -9
- package/dist/utils/io.d.ts +0 -6
- package/dist/utils/io.js +0 -106
- package/dist/utils/nlp.d.ts +0 -9
- package/dist/utils/plugin-logger.d.ts +0 -39
- package/dist/utils/subagent-probe.d.ts +0 -34
- package/dist/utils/subagent-probe.js +0 -81
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
2
4
|
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
function getWorkspaceDir(ctx: PluginCommandContext): string {
|
|
7
|
+
return (ctx.config?.workspaceDir as string) || process.cwd();
|
|
5
8
|
}
|
|
6
|
-
|
|
9
|
+
|
|
10
|
+
function getModels(wctx: WorkspaceContext): Record<string, string> {
|
|
7
11
|
const modelsPath = wctx.resolve('THINKING_OS');
|
|
8
|
-
const models = {};
|
|
9
|
-
if (!fs.existsSync(modelsPath))
|
|
10
|
-
|
|
12
|
+
const models: Record<string, string> = {};
|
|
13
|
+
if (!fs.existsSync(modelsPath)) return models;
|
|
14
|
+
|
|
11
15
|
try {
|
|
12
16
|
const content = fs.readFileSync(modelsPath, 'utf8');
|
|
13
17
|
const lines = content.split('\n');
|
|
@@ -17,51 +21,61 @@ function getModels(wctx) {
|
|
|
17
21
|
models[match[1]] = match[2].trim();
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
24
|
+
} catch (e) {
|
|
22
25
|
console.debug('[PD] Failed to read THINKING_OS.md:', e);
|
|
23
26
|
}
|
|
24
27
|
return models;
|
|
25
28
|
}
|
|
26
|
-
|
|
29
|
+
|
|
30
|
+
function formatUsageReport(wctx: WorkspaceContext): string {
|
|
27
31
|
const logPath = wctx.resolve('THINKING_OS_USAGE');
|
|
32
|
+
|
|
28
33
|
if (!fs.existsSync(logPath)) {
|
|
29
34
|
return '📊 No usage data yet. The Thinking OS has not been active long enough to collect statistics.';
|
|
30
35
|
}
|
|
36
|
+
|
|
31
37
|
try {
|
|
32
|
-
const usage = JSON.parse(fs.readFileSync(logPath, 'utf8'));
|
|
38
|
+
const usage: Record<string, number> = JSON.parse(fs.readFileSync(logPath, 'utf8'));
|
|
33
39
|
const totalTurns = usage['_total_turns'] || 1;
|
|
34
40
|
const models = getModels(wctx);
|
|
41
|
+
|
|
35
42
|
let report = `# 🧠 Thinking OS — Usage Report\n\n`;
|
|
36
43
|
report += `Total turns tracked: **${totalTurns}**\n\n`;
|
|
37
44
|
report += `| Model | Name | Hits | Rate |\n|---|---|---|---|\n`;
|
|
45
|
+
|
|
38
46
|
for (const [id, name] of Object.entries(models)) {
|
|
39
47
|
const hits = usage[id] || 0;
|
|
40
48
|
const rate = totalTurns > 0 ? ((hits / totalTurns) * 100).toFixed(1) : '0.0';
|
|
41
49
|
const status = hits === 0 ? '⚠️' : (parseFloat(rate) < 5 ? '🔸' : '✅');
|
|
42
50
|
report += `| ${id} | ${name} | ${hits} | ${status} ${rate}% |\n`;
|
|
43
51
|
}
|
|
52
|
+
|
|
44
53
|
const dormant = Object.entries(models)
|
|
45
54
|
.filter(([id]) => (usage[id] || 0) === 0)
|
|
46
55
|
.map(([id, name]) => `- ${id}: ${name}`);
|
|
56
|
+
|
|
47
57
|
if (dormant.length > 0) {
|
|
48
58
|
report += `\n### ⚠️ Dormant Models (0 hits)\n${dormant.join('\n')}\n`;
|
|
49
59
|
report += `\nConsider: Are these models not applicable to current tasks, or is the agent ignoring them?\n`;
|
|
50
60
|
}
|
|
61
|
+
|
|
51
62
|
return report;
|
|
52
|
-
}
|
|
53
|
-
catch (e) {
|
|
63
|
+
} catch (e) {
|
|
54
64
|
return `❌ Failed to read usage data: ${String(e)}`;
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
|
-
|
|
67
|
+
|
|
68
|
+
function handlePropose(wctx: WorkspaceContext, proposal: string): string {
|
|
58
69
|
if (!proposal.trim()) {
|
|
59
70
|
return '❌ Usage: `/thinking-os propose <description of your proposed mental model>`';
|
|
60
71
|
}
|
|
72
|
+
|
|
61
73
|
if (!proposal.toLowerCase().includes('signal') && !proposal.includes('信号')) {
|
|
62
74
|
return '❌ Invalid proposal: A mental model must include a "Signal detection / 信号检测" section explaining how to detect its usage via regex.';
|
|
63
75
|
}
|
|
76
|
+
|
|
64
77
|
const candidatesPath = wctx.resolve('THINKING_OS_CANDIDATES');
|
|
78
|
+
|
|
65
79
|
if (fs.existsSync(candidatesPath)) {
|
|
66
80
|
try {
|
|
67
81
|
const content = fs.readFileSync(candidatesPath, 'utf8');
|
|
@@ -69,60 +83,66 @@ function handlePropose(wctx, proposal) {
|
|
|
69
83
|
if (content.includes(snippet)) {
|
|
70
84
|
return '❌ Duplicate proposal detected. A similar candidate already exists.';
|
|
71
85
|
}
|
|
72
|
-
}
|
|
73
|
-
catch (e) {
|
|
86
|
+
} catch (e) {
|
|
74
87
|
console.debug('[PD] Error reading candidates file:', e);
|
|
75
88
|
}
|
|
76
89
|
}
|
|
90
|
+
|
|
77
91
|
const timestamp = new Date().toISOString();
|
|
78
92
|
const entry = `\n### Candidate (${timestamp})\n${proposal.trim()}\n- Status: PENDING\n- Validated in tasks: 0/3\n---\n`;
|
|
93
|
+
|
|
79
94
|
try {
|
|
80
95
|
fs.appendFileSync(candidatesPath, entry, 'utf8');
|
|
81
96
|
return `✅ Mental model proposal recorded in \`${candidatesPath.replace(wctx.workspaceDir, '')}\`.\nIt needs validation in ≥3 different task types and human approval before promotion.`;
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
97
|
+
} catch (e) {
|
|
84
98
|
return `❌ Failed to write proposal: ${String(e)}`;
|
|
85
99
|
}
|
|
86
100
|
}
|
|
87
|
-
|
|
101
|
+
|
|
102
|
+
function formatAuditReport(wctx: WorkspaceContext): string {
|
|
88
103
|
const logPath = wctx.resolve('THINKING_OS_USAGE');
|
|
89
104
|
const thinkingOsPath = wctx.resolve('THINKING_OS');
|
|
105
|
+
|
|
90
106
|
let report = `# 🔍 Thinking OS — Audit Report\n\n`;
|
|
107
|
+
|
|
91
108
|
if (!fs.existsSync(thinkingOsPath)) {
|
|
92
109
|
report += `⚠️ **THINKING_OS.md not found.** The cognitive layer is not active.\n`;
|
|
93
110
|
return report;
|
|
94
111
|
}
|
|
112
|
+
|
|
95
113
|
const models = getModels(wctx);
|
|
96
114
|
const modelCount = Object.keys(models).length;
|
|
97
115
|
report += `**Active models**: ${modelCount}\n\n`;
|
|
116
|
+
|
|
98
117
|
if (!fs.existsSync(logPath)) {
|
|
99
118
|
report += `📊 No usage data collected yet. Run some tasks first.\n`;
|
|
100
119
|
return report;
|
|
101
120
|
}
|
|
121
|
+
|
|
102
122
|
try {
|
|
103
|
-
const usage = JSON.parse(fs.readFileSync(logPath, 'utf8'));
|
|
123
|
+
const usage: Record<string, number> = JSON.parse(fs.readFileSync(logPath, 'utf8'));
|
|
104
124
|
const totalTurns = usage['_total_turns'] || 1;
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
const
|
|
125
|
+
|
|
126
|
+
const overused: string[] = [];
|
|
127
|
+
const underused: string[] = [];
|
|
128
|
+
const healthy: string[] = [];
|
|
129
|
+
|
|
108
130
|
for (const [id, name] of Object.entries(models)) {
|
|
109
131
|
const hits = usage[id] || 0;
|
|
110
132
|
const rate = (hits / totalTurns) * 100;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
else if (hits === 0 && totalTurns > 10)
|
|
114
|
-
|
|
115
|
-
else
|
|
116
|
-
healthy.push(`- ${id} (${name}): ${rate.toFixed(1)}%`);
|
|
133
|
+
|
|
134
|
+
if (rate > 50) overused.push(`- ${id} (${name}): ${rate.toFixed(1)}% — possibly too broad a pattern?`);
|
|
135
|
+
else if (hits === 0 && totalTurns > 10) underused.push(`- ${id} (${name}): 0 hits in ${totalTurns} turns — candidate for archival?`);
|
|
136
|
+
else healthy.push(`- ${id} (${name}): ${rate.toFixed(1)}%`);
|
|
117
137
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (overused.length > 0)
|
|
121
|
-
report += `### 🔸 Possibly Over-triggered\n${overused.join('\n')}\n\n`;
|
|
138
|
+
|
|
139
|
+
if (healthy.length > 0) report += `### ✅ Healthy\n${healthy.join('\n')}\n\n`;
|
|
140
|
+
if (overused.length > 0) report += `### 🔸 Possibly Over-triggered\n${overused.join('\n')}\n\n`;
|
|
122
141
|
if (underused.length > 0) {
|
|
123
142
|
report += `### ⚠️ Candidate for Archival\n${underused.join('\n')}\n`;
|
|
124
143
|
report += `> 💡 Suggestion: Review these models. If they are obsolete, move them to the archive.\n\n`;
|
|
125
144
|
}
|
|
145
|
+
|
|
126
146
|
const candidatesPath = wctx.resolve('THINKING_OS_CANDIDATES');
|
|
127
147
|
if (fs.existsSync(candidatesPath)) {
|
|
128
148
|
const candidates = fs.readFileSync(candidatesPath, 'utf8');
|
|
@@ -131,18 +151,20 @@ function formatAuditReport(wctx) {
|
|
|
131
151
|
report += `### 📝 Pending Candidates: ${pendingCount}\nReview candidates to fill gaps.\n`;
|
|
132
152
|
}
|
|
133
153
|
}
|
|
154
|
+
|
|
134
155
|
return report;
|
|
135
|
-
}
|
|
136
|
-
catch (e) {
|
|
156
|
+
} catch (e) {
|
|
137
157
|
return `❌ Failed to generate audit report: ${String(e)}`;
|
|
138
158
|
}
|
|
139
159
|
}
|
|
140
|
-
|
|
160
|
+
|
|
161
|
+
export function handleThinkingOs(ctx: PluginCommandContext): PluginCommandResult {
|
|
141
162
|
const workspaceDir = getWorkspaceDir(ctx);
|
|
142
163
|
const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
|
|
143
164
|
const args = (ctx.args || '').trim();
|
|
144
165
|
const subCommand = args.split(/\s+/)[0]?.toLowerCase();
|
|
145
166
|
const rest = args.slice(subCommand?.length || 0).trim();
|
|
167
|
+
|
|
146
168
|
switch (subCommand) {
|
|
147
169
|
case 'status':
|
|
148
170
|
return { text: formatUsageReport(wctx) };
|
|
@@ -152,7 +174,8 @@ export function handleThinkingOs(ctx) {
|
|
|
152
174
|
return { text: formatAuditReport(wctx) };
|
|
153
175
|
default:
|
|
154
176
|
return {
|
|
155
|
-
text:
|
|
177
|
+
text:
|
|
178
|
+
`🧠 **Thinking OS — Governance Console**\n\n` +
|
|
156
179
|
`Usage:\n` +
|
|
157
180
|
`- \`/thinking-os status\` — View mental model usage statistics\n` +
|
|
158
181
|
`- \`/thinking-os propose <model description>\` — Propose a new mental model\n` +
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { WorkflowStore } from '../service/subagent-workflow/workflow-store.js';
|
|
2
|
+
import type { PluginCommandContext } from '../openclaw-sdk.js';
|
|
3
|
+
|
|
4
|
+
function formatTimestamp(ts: number | null | undefined): string {
|
|
5
|
+
if (!ts) return '--';
|
|
6
|
+
return new Date(ts).toISOString();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function formatState(state: string): string {
|
|
10
|
+
const stateColors: Record<string, string> = {
|
|
11
|
+
'active': '●',
|
|
12
|
+
'wait_result': '◐',
|
|
13
|
+
'finalizing': '◑',
|
|
14
|
+
'completed': '✓',
|
|
15
|
+
'terminal_error': '✗',
|
|
16
|
+
'cleanup_pending': '⚠',
|
|
17
|
+
'expired': '⊘',
|
|
18
|
+
};
|
|
19
|
+
const icon = stateColors[state] || '?';
|
|
20
|
+
return `${icon} ${state}`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function buildOutput(
|
|
24
|
+
workflowId: string,
|
|
25
|
+
summary: ReturnType<InstanceType<typeof WorkflowStore>['getWorkflow']>,
|
|
26
|
+
events: ReturnType<InstanceType<typeof WorkflowStore>['getEvents']>,
|
|
27
|
+
workspaceDir: string
|
|
28
|
+
): string {
|
|
29
|
+
if (!summary) {
|
|
30
|
+
return [
|
|
31
|
+
`Workflow Debug: ${workflowId}`,
|
|
32
|
+
'============================',
|
|
33
|
+
'',
|
|
34
|
+
'❌ Workflow not found',
|
|
35
|
+
'',
|
|
36
|
+
`Workspace: ${workspaceDir}`,
|
|
37
|
+
].join('\n');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const metadata = JSON.parse(summary.metadata_json || '{}');
|
|
41
|
+
const recentEvents = events.slice(-10);
|
|
42
|
+
|
|
43
|
+
const lines: string[] = [
|
|
44
|
+
`Workflow Debug: ${workflowId}`,
|
|
45
|
+
'============================',
|
|
46
|
+
'',
|
|
47
|
+
'Overview',
|
|
48
|
+
`- Type: ${summary.workflow_type}`,
|
|
49
|
+
`- Transport: ${summary.transport}`,
|
|
50
|
+
`- State: ${formatState(summary.state)}`,
|
|
51
|
+
`- Cleanup: ${summary.cleanup_state}`,
|
|
52
|
+
`- Created: ${formatTimestamp(summary.created_at)}`,
|
|
53
|
+
`- Last Observed: ${formatTimestamp(summary.last_observed_at)}`,
|
|
54
|
+
'',
|
|
55
|
+
'Sessions',
|
|
56
|
+
`- Parent: ${summary.parent_session_id}`,
|
|
57
|
+
`- Child: ${summary.child_session_key}`,
|
|
58
|
+
`- Run ID: ${summary.run_id ?? '--'}`,
|
|
59
|
+
'',
|
|
60
|
+
'Metadata',
|
|
61
|
+
`- Workspace: ${metadata.workspaceDir ?? '--'}`,
|
|
62
|
+
`- Task Input: ${typeof metadata.taskInput === 'string' ? metadata.taskInput.substring(0, 100) + (metadata.taskInput.length > 100 ? '...' : '') : '--'}`,
|
|
63
|
+
'',
|
|
64
|
+
`Recent Events (${recentEvents.length})`,
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
if (recentEvents.length === 0) {
|
|
68
|
+
lines.push('- (no events)');
|
|
69
|
+
} else {
|
|
70
|
+
for (const event of recentEvents) {
|
|
71
|
+
const time = formatTimestamp(event.created_at);
|
|
72
|
+
const transition = event.from_state ? `${event.from_state} → ${event.to_state}` : `→ ${event.to_state}`;
|
|
73
|
+
lines.push(`- [${time}] ${event.event_type}: ${transition} (${event.reason})`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
lines.push('');
|
|
78
|
+
lines.push(`Workspace: ${workspaceDir}`);
|
|
79
|
+
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function handleWorkflowDebugCommand(
|
|
84
|
+
ctx: PluginCommandContext & { args?: string }
|
|
85
|
+
): { text: string } {
|
|
86
|
+
const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
|
|
87
|
+
|
|
88
|
+
// Parse workflow ID from args
|
|
89
|
+
const args = (ctx as { args?: string }).args?.trim() || '';
|
|
90
|
+
const workflowId = args.split(/\s+/)[0];
|
|
91
|
+
|
|
92
|
+
if (!workflowId) {
|
|
93
|
+
return {
|
|
94
|
+
text: [
|
|
95
|
+
'Workflow Debug',
|
|
96
|
+
'============================',
|
|
97
|
+
'',
|
|
98
|
+
'Usage: /pd-workflow-debug <workflowId>',
|
|
99
|
+
'',
|
|
100
|
+
'Description:',
|
|
101
|
+
'- Display debug summary for a helper workflow',
|
|
102
|
+
'- Shows state, cleanup status, and recent events',
|
|
103
|
+
'',
|
|
104
|
+
'To find workflow IDs, check .state/subagent_workflows.db',
|
|
105
|
+
].join('\n'),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
const store = new WorkflowStore({ workspaceDir });
|
|
111
|
+
const workflow = store.getWorkflow(workflowId);
|
|
112
|
+
const events = store.getEvents(workflowId);
|
|
113
|
+
store.dispose();
|
|
114
|
+
|
|
115
|
+
return { text: buildOutput(workflowId, workflow, events, workspaceDir) };
|
|
116
|
+
} catch (error) {
|
|
117
|
+
return {
|
|
118
|
+
text: [
|
|
119
|
+
`Workflow Debug: ${workflowId}`,
|
|
120
|
+
'============================',
|
|
121
|
+
'',
|
|
122
|
+
`❌ Error: ${String(error)}`,
|
|
123
|
+
'',
|
|
124
|
+
`Workspace: ${workspaceDir}`,
|
|
125
|
+
].join('\n'),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -1,42 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Centralized Runtime Defaults
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* All runtime-related constants that were previously scattered across modules.
|
|
5
5
|
* Centralizing these makes it easier to tune behavior and understand limits.
|
|
6
6
|
*/
|
|
7
|
+
|
|
7
8
|
/**
|
|
8
9
|
* Trajectory gate block retry settings
|
|
9
10
|
* Used when trajectory recording fails and needs to retry
|
|
10
11
|
*/
|
|
11
12
|
export const TRAJECTORY_GATE_BLOCK_RETRY_DELAY_MS = 250;
|
|
12
13
|
export const TRAJECTORY_GATE_BLOCK_MAX_RETRIES = 3;
|
|
14
|
+
|
|
13
15
|
/**
|
|
14
16
|
* Thinking checkpoint defaults (P-10)
|
|
15
17
|
*/
|
|
16
18
|
export const THINKING_CHECKPOINT_WINDOW_MS = 5 * 60 * 1000; // 5 minutes
|
|
17
19
|
export const THINKING_CHECKPOINT_DEFAULT_HIGH_RISK_TOOLS = [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
];
|
|
20
|
+
'run_shell_command',
|
|
21
|
+
'delete_file',
|
|
22
|
+
'move_file',
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
22
25
|
/**
|
|
23
26
|
* Large change threshold for GFI gate adjustments
|
|
24
27
|
*/
|
|
25
28
|
export const GFI_LARGE_CHANGE_LINES = 50;
|
|
29
|
+
|
|
26
30
|
/**
|
|
27
31
|
* Agent spawn GFI threshold (critically high = no spawn)
|
|
28
32
|
*/
|
|
29
33
|
export const AGENT_SPAWN_GFI_THRESHOLD = 90;
|
|
34
|
+
|
|
30
35
|
/**
|
|
31
36
|
* Evolution worker polling intervals
|
|
32
37
|
*/
|
|
33
38
|
export const EVOLUTION_WORKER_POLL_INTERVAL_MS = 15 * 60 * 1000; // 15 minutes
|
|
34
39
|
export const EVOLUTION_QUEUE_BATCH_SIZE = 10;
|
|
40
|
+
|
|
35
41
|
/**
|
|
36
42
|
* Session tracker settings
|
|
37
43
|
*/
|
|
38
44
|
export const SESSION_TOKEN_WARNING_THRESHOLD = 8000;
|
|
39
45
|
export const SESSION_MAX_IDLE_MS = 30 * 60 * 1000; // 30 minutes
|
|
46
|
+
|
|
40
47
|
/**
|
|
41
48
|
* Event log buffer settings
|
|
42
49
|
*/
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain-Specific Errors for Principles Disciple
|
|
3
|
+
*
|
|
4
|
+
* These errors provide semantic meaning to failure modes,
|
|
5
|
+
* making it easier to distinguish between:
|
|
6
|
+
* - Lock contention (resource busy)
|
|
7
|
+
* - Parse/validation failures
|
|
8
|
+
* - Derived state mismatches
|
|
9
|
+
* - Configuration issues
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Base class for all Principles Disciple errors
|
|
14
|
+
*/
|
|
15
|
+
export class PdError extends Error {
|
|
16
|
+
constructor(
|
|
17
|
+
message: string,
|
|
18
|
+
public readonly code: string,
|
|
19
|
+
options?: { cause?: unknown }
|
|
20
|
+
) {
|
|
21
|
+
super(message, options);
|
|
22
|
+
this.name = 'PdError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when a resource lock cannot be acquired
|
|
28
|
+
* (e.g., queue, trajectory, evolution file)
|
|
29
|
+
*/
|
|
30
|
+
export class LockUnavailableError extends PdError {
|
|
31
|
+
constructor(
|
|
32
|
+
resource: string,
|
|
33
|
+
scope: string,
|
|
34
|
+
options?: { cause?: unknown }
|
|
35
|
+
) {
|
|
36
|
+
super(
|
|
37
|
+
`[PD:Lock] ${scope}: queue lock unavailable for ${resource}`,
|
|
38
|
+
'LOCK_UNAVAILABLE',
|
|
39
|
+
options
|
|
40
|
+
);
|
|
41
|
+
this.name = 'LockUnavailableError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Thrown when a path key cannot be resolved
|
|
47
|
+
*/
|
|
48
|
+
export class PathResolutionError extends PdError {
|
|
49
|
+
constructor(
|
|
50
|
+
key: string,
|
|
51
|
+
options?: { cause?: unknown }
|
|
52
|
+
) {
|
|
53
|
+
super(
|
|
54
|
+
`[PD:Path] Unknown path key: ${key}`,
|
|
55
|
+
'PATH_RESOLUTION_ERROR',
|
|
56
|
+
options
|
|
57
|
+
);
|
|
58
|
+
this.name = 'PathResolutionError';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Thrown when a workspace cannot be found
|
|
64
|
+
*/
|
|
65
|
+
export class WorkspaceNotFoundError extends PdError {
|
|
66
|
+
constructor(
|
|
67
|
+
workspace: string,
|
|
68
|
+
options?: { cause?: unknown }
|
|
69
|
+
) {
|
|
70
|
+
super(
|
|
71
|
+
`[PD:Workspace] Workspace not found: ${workspace}`,
|
|
72
|
+
'WORKSPACE_NOT_FOUND',
|
|
73
|
+
options
|
|
74
|
+
);
|
|
75
|
+
this.name = 'WorkspaceNotFoundError';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Thrown when a required sample cannot be found
|
|
81
|
+
*/
|
|
82
|
+
export class SampleNotFoundError extends PdError {
|
|
83
|
+
constructor(
|
|
84
|
+
sampleId: string,
|
|
85
|
+
options?: { cause?: unknown }
|
|
86
|
+
) {
|
|
87
|
+
super(
|
|
88
|
+
`[PD:Sample] Correction sample not found: ${sampleId}`,
|
|
89
|
+
'SAMPLE_NOT_FOUND',
|
|
90
|
+
options
|
|
91
|
+
);
|
|
92
|
+
this.name = 'SampleNotFoundError';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Thrown when configuration is invalid or missing required fields
|
|
98
|
+
*/
|
|
99
|
+
export class ConfigurationError extends PdError {
|
|
100
|
+
constructor(
|
|
101
|
+
message: string,
|
|
102
|
+
options?: { cause?: unknown }
|
|
103
|
+
) {
|
|
104
|
+
super(
|
|
105
|
+
`[PD:Config] ${message}`,
|
|
106
|
+
'CONFIGURATION_ERROR',
|
|
107
|
+
options
|
|
108
|
+
);
|
|
109
|
+
this.name = 'ConfigurationError';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Thrown when prompt/logger dependencies are unavailable
|
|
115
|
+
*/
|
|
116
|
+
export class DependencyError extends PdError {
|
|
117
|
+
constructor(
|
|
118
|
+
component: string,
|
|
119
|
+
message: string,
|
|
120
|
+
options?: { cause?: unknown }
|
|
121
|
+
) {
|
|
122
|
+
super(
|
|
123
|
+
`[PD:${component}] ${message}`,
|
|
124
|
+
'DEPENDENCY_ERROR',
|
|
125
|
+
options
|
|
126
|
+
);
|
|
127
|
+
this.name = 'DependencyError';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Thrown when evolution worker encounters a processing error
|
|
133
|
+
*/
|
|
134
|
+
export class EvolutionProcessingError extends PdError {
|
|
135
|
+
constructor(
|
|
136
|
+
message: string,
|
|
137
|
+
options?: { cause?: unknown }
|
|
138
|
+
) {
|
|
139
|
+
super(
|
|
140
|
+
`[PD:Evolution] ${message}`,
|
|
141
|
+
'EVOLUTION_PROCESSING_ERROR',
|
|
142
|
+
options
|
|
143
|
+
);
|
|
144
|
+
this.name = 'EvolutionProcessingError';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Thrown when trajectory operations fail
|
|
150
|
+
*/
|
|
151
|
+
export class TrajectoryError extends PdError {
|
|
152
|
+
constructor(
|
|
153
|
+
message: string,
|
|
154
|
+
options?: { cause?: unknown }
|
|
155
|
+
) {
|
|
156
|
+
super(
|
|
157
|
+
`[PD:Trajectory] ${message}`,
|
|
158
|
+
'TRAJECTORY_ERROR',
|
|
159
|
+
options
|
|
160
|
+
);
|
|
161
|
+
this.name = 'TrajectoryError';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostician 协议常量
|
|
3
|
+
*
|
|
4
|
+
* 用于 evolution-worker.ts(后台心跳)和 prompt.ts(实时路径)
|
|
5
|
+
* 与 templates/langs/zh/skills/pd-diagnostician/SKILL.md 保持一致
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 诊断协议摘要(用于 HEARTBEAT.md 注入)
|
|
10
|
+
*
|
|
11
|
+
* 完整版见: templates/langs/zh/skills/pd-diagnostician/SKILL.md
|
|
12
|
+
*/
|
|
13
|
+
export const DIAGNOSTICIAN_PROTOCOL_SUMMARY = `## Diagnostic Protocol (5 Whys)
|
|
14
|
+
|
|
15
|
+
**Phase 1 - Evidence Gathering**:
|
|
16
|
+
- Read .state/.pain_flag for full pain context
|
|
17
|
+
- Read .state/logs/events.jsonl recent entries
|
|
18
|
+
- Search codebase for error patterns from Reason field
|
|
19
|
+
- Record all evidence sources (file:line)
|
|
20
|
+
|
|
21
|
+
**Phase 2 - Causal Chain (5 Whys)**:
|
|
22
|
+
- Why 1: Surface symptom (what you can see)
|
|
23
|
+
- Why 2: Direct cause (what triggered it)
|
|
24
|
+
- Why 3: Process gap (what should have caught it)
|
|
25
|
+
- Why 4: Design flaw (why the gap exists)
|
|
26
|
+
- Why 5: Root cause (systemic issue to fix)
|
|
27
|
+
- Each Why MUST have evidence. Stop at actionable root cause.
|
|
28
|
+
|
|
29
|
+
**Phase 3 - Root Cause Classification**:
|
|
30
|
+
Classify into one of:
|
|
31
|
+
- **People**: Human error, missing knowledge, communication gap
|
|
32
|
+
- **Design**: Architecture flaw, missing validation, poor abstraction
|
|
33
|
+
- **Assumption**: Invalid assumption, outdated context, edge case
|
|
34
|
+
- **Tooling**: Tool limitation, environment issue, dependency problem
|
|
35
|
+
- For Design: analyze why existing hooks/rules didn't catch this
|
|
36
|
+
|
|
37
|
+
**Phase 4 - Principle Extraction**:
|
|
38
|
+
Extract a HIGHLY ABSTRACTED principle (not an operational rule):
|
|
39
|
+
- **trigger_pattern**: regex/keywords for when this occurs
|
|
40
|
+
- **action**: what to do differently
|
|
41
|
+
- **abstracted_principle**: ONE sentence, max 40 chars, cross-scenario applicable
|
|
42
|
+
- ❌ Bad: "写入前检查目录是否存在" (too specific)
|
|
43
|
+
- ✅ Good: "任何写入操作必须确保目标环境的完整性" (abstract, reusable)
|
|
44
|
+
|
|
45
|
+
**Output Format** (single JSON object):
|
|
46
|
+
\`\`\`json
|
|
47
|
+
{
|
|
48
|
+
"diagnosis_report": {
|
|
49
|
+
"task_id": "pain-xxx",
|
|
50
|
+
"summary": "One-line root cause",
|
|
51
|
+
"causal_chain": [
|
|
52
|
+
{ "why": 1, "answer": "...", "evidence": "file:line" }
|
|
53
|
+
],
|
|
54
|
+
"root_cause": {
|
|
55
|
+
"category": "Design|People|Assumption|Tooling",
|
|
56
|
+
"description": "..."
|
|
57
|
+
},
|
|
58
|
+
"principle": {
|
|
59
|
+
"trigger_pattern": "...",
|
|
60
|
+
"action": "...",
|
|
61
|
+
"abstracted_principle": "高度抽象的一句话原则"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
\`\`\`
|
|
66
|
+
`;
|