principles-disciple 1.8.1 → 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 +4 -4
- package/package.json +11 -13
- 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} +175 -62
- 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} +160 -80
- 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} +235 -79
- 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/{dist/service/subagent-workflow/empathy-observer-workflow-manager.js → src/service/subagent-workflow/empathy-observer-workflow-manager.ts} +240 -117
- 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/{dist/service/subagent-workflow/types.d.ts → src/service/subagent-workflow/types.ts} +137 -18
- 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 -129
- 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 -101
- 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 -13
- 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 -52
- package/dist/hooks/progressive-trust-gate.js +0 -134
- package/dist/hooks/prompt.d.ts +0 -49
- package/dist/hooks/prompt.js +0 -905
- 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 -681
- 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 -88
- package/dist/service/empathy-observer-manager.js +0 -414
- 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 -975
- package/dist/service/health-query-service.d.ts +0 -170
- package/dist/service/health-query-service.js +0 -662
- 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/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
- package/dist/service/subagent-workflow/index.d.ts +0 -4
- package/dist/service/subagent-workflow/index.js +0 -3
- package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
- package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
- package/dist/service/subagent-workflow/types.js +0 -11
- package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
- package/dist/service/subagent-workflow/workflow-store.js +0 -165
- 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
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { HygieneStats, createEmptyHygieneStats, PersistenceAction } from '../../types/hygiene-types.js';
|
|
4
|
+
import { PluginLogger } from '../../openclaw-sdk.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* HygieneTracker - Tracks agent behavior regarding workspace organization and persistence.
|
|
8
|
+
*/
|
|
9
|
+
export class HygieneTracker {
|
|
10
|
+
private readonly statsFile: string;
|
|
11
|
+
private currentStats: HygieneStats;
|
|
12
|
+
private readonly logger?: PluginLogger;
|
|
13
|
+
|
|
14
|
+
constructor(stateDir: string, logger?: PluginLogger) {
|
|
15
|
+
this.statsFile = path.join(stateDir, 'hygiene-stats.json');
|
|
16
|
+
this.logger = logger;
|
|
17
|
+
|
|
18
|
+
// Ensure state directory exists
|
|
19
|
+
if (!fs.existsSync(stateDir)) {
|
|
20
|
+
try {
|
|
21
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
22
|
+
} catch (e) {
|
|
23
|
+
this.logger?.error(`[PD] Failed to create state directory ${stateDir}: ${String(e)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.currentStats = this.loadStats();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private loadStats(): HygieneStats {
|
|
31
|
+
const today = new Date().toISOString().split('T')[0];
|
|
32
|
+
if (fs.existsSync(this.statsFile)) {
|
|
33
|
+
try {
|
|
34
|
+
const content = fs.readFileSync(this.statsFile, 'utf-8');
|
|
35
|
+
if (content.trim()) {
|
|
36
|
+
const allStats = JSON.parse(content);
|
|
37
|
+
if (allStats[today]) {
|
|
38
|
+
return allStats[today];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
} catch (e) {
|
|
42
|
+
this.logger?.error(`[PD] Failed to load/parse hygiene-stats.json: ${String(e)}`);
|
|
43
|
+
// If file is corrupted, we might want to back it up and start fresh
|
|
44
|
+
try {
|
|
45
|
+
const backupPath = `${this.statsFile}.bak`;
|
|
46
|
+
fs.renameSync(this.statsFile, backupPath);
|
|
47
|
+
this.logger?.warn(`[PD] Corrupted hygiene stats backed up to ${backupPath}`);
|
|
48
|
+
} catch (_renameErr) {}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return createEmptyHygieneStats(today);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private saveStats(): void {
|
|
55
|
+
let allStats: Record<string, HygieneStats> = {};
|
|
56
|
+
|
|
57
|
+
// Check if we need to rotate date (reset currentStats if date changed)
|
|
58
|
+
const today = new Date().toISOString().split('T')[0];
|
|
59
|
+
if (this.currentStats.date !== today) {
|
|
60
|
+
this.currentStats = createEmptyHygieneStats(today);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (fs.existsSync(this.statsFile)) {
|
|
64
|
+
try {
|
|
65
|
+
const content = fs.readFileSync(this.statsFile, 'utf-8');
|
|
66
|
+
if (content.trim()) {
|
|
67
|
+
allStats = JSON.parse(content);
|
|
68
|
+
}
|
|
69
|
+
} catch (e) {
|
|
70
|
+
this.logger?.error(`[PD] Failed to parse hygiene-stats.json for saving: ${String(e)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
allStats[this.currentStats.date] = this.currentStats;
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
// Use a temporary file for atomic write if possible, or simple write
|
|
78
|
+
fs.writeFileSync(this.statsFile, JSON.stringify(allStats, null, 2), 'utf-8');
|
|
79
|
+
} catch (e) {
|
|
80
|
+
this.logger?.error(`[PD] Failed to write hygiene-stats.json: ${String(e)}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Records a persistence action (writing to memory or plan).
|
|
86
|
+
*/
|
|
87
|
+
recordPersistence(action: PersistenceAction): void {
|
|
88
|
+
this.currentStats.persistenceCount++;
|
|
89
|
+
this.currentStats.lastPersistenceTime = action.ts;
|
|
90
|
+
this.currentStats.totalCharsPersisted += action.contentLength;
|
|
91
|
+
|
|
92
|
+
const fileName = path.basename(action.path);
|
|
93
|
+
this.currentStats.persistenceByFile[fileName] = (this.currentStats.persistenceByFile[fileName] || 0) + 1;
|
|
94
|
+
|
|
95
|
+
this.saveStats();
|
|
96
|
+
this.logger?.info(`[PD] Hygiene: Persisted state to ${fileName} (${action.contentLength} chars)`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Records a grooming action (cleaning up the workspace).
|
|
101
|
+
*/
|
|
102
|
+
recordGrooming(): void {
|
|
103
|
+
this.currentStats.groomingExecutedCount++;
|
|
104
|
+
this.currentStats.lastGroomingTime = new Date().toISOString();
|
|
105
|
+
this.saveStats();
|
|
106
|
+
this.logger?.info(`[PD] Hygiene: Workspace grooming executed.`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
getStats(): HygieneStats {
|
|
110
|
+
// Check for date change on every get
|
|
111
|
+
const today = new Date().toISOString().split('T')[0];
|
|
112
|
+
if (this.currentStats.date !== today) {
|
|
113
|
+
this.currentStats = createEmptyHygieneStats(today);
|
|
114
|
+
}
|
|
115
|
+
return this.currentStats;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -1,54 +1,58 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
|
+
import type { OpenClawPluginApi, PluginLogger } from '../openclaw-sdk.js';
|
|
4
5
|
import { PD_DIRS } from './paths.js';
|
|
5
6
|
import { defaultContextConfig } from '../types.js';
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* Default PROFILE.json content
|
|
8
10
|
*/
|
|
9
11
|
const DEFAULT_PROFILE = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
name: "Principles Disciple Agent",
|
|
13
|
+
version: "1.0.0",
|
|
14
|
+
contextInjection: defaultContextConfig
|
|
13
15
|
};
|
|
16
|
+
|
|
14
17
|
const CORE_GUIDANCE_VERSION = 'pd-core-guidance-v2';
|
|
15
18
|
const CORE_GUIDANCE_FILES = new Set(['AGENTS.md', 'TOOLS.md']);
|
|
16
|
-
|
|
19
|
+
|
|
20
|
+
function getCoreGuidanceVersionMarker(): string {
|
|
17
21
|
return `pd-core-guidance-version: ${CORE_GUIDANCE_VERSION}`;
|
|
18
22
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (content.includes(getCoreGuidanceVersionMarker()))
|
|
23
|
-
|
|
24
|
-
if (content.includes('
|
|
25
|
-
|
|
26
|
-
if (!content.includes('subagents'))
|
|
27
|
-
return true;
|
|
28
|
-
if (!content.includes('sessions_spawn'))
|
|
29
|
-
return true;
|
|
23
|
+
|
|
24
|
+
function hasOutdatedCoreGuidance(file: string, content: string): boolean {
|
|
25
|
+
if (!CORE_GUIDANCE_FILES.has(file)) return false;
|
|
26
|
+
if (content.includes(getCoreGuidanceVersionMarker())) return false;
|
|
27
|
+
if (content.includes('pd_spawn_agent')) return true;
|
|
28
|
+
if (!content.includes('subagents')) return true;
|
|
29
|
+
if (!content.includes('sessions_spawn')) return true;
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
|
+
|
|
32
33
|
/**
|
|
33
34
|
* Ensures that the workspace has the necessary template files for Principles Disciple.
|
|
34
35
|
* This function flattens 'core' templates to the root so OpenClaw can find them.
|
|
35
36
|
*/
|
|
36
|
-
export function ensureWorkspaceTemplates(api, workspaceDir, language = 'en') {
|
|
37
|
+
export function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: string, language: string = 'en') {
|
|
37
38
|
try {
|
|
38
39
|
const __filename = fileURLToPath(import.meta.url);
|
|
39
40
|
const __dirname = path.dirname(__filename);
|
|
41
|
+
|
|
40
42
|
// 1. Copy common workspace templates (e.g., docs/*)
|
|
41
43
|
const commonTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'workspace');
|
|
42
44
|
if (fs.existsSync(commonTemplatesDir)) {
|
|
43
45
|
api.logger.info(`[PD] Syncing workspace templates: ${workspaceDir}...`);
|
|
44
46
|
copyRecursiveSync(commonTemplatesDir, workspaceDir, api);
|
|
45
47
|
}
|
|
48
|
+
|
|
46
49
|
// 2. Copy language-specific core templates (AGENTS.md, SOUL.md, etc.)
|
|
47
50
|
// CRITICAL: These MUST be at the root of the workspace for OpenClaw to recognize them.
|
|
48
51
|
let coreTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'core');
|
|
49
52
|
if (!fs.existsSync(coreTemplatesDir)) {
|
|
50
53
|
coreTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', 'zh', 'core');
|
|
51
54
|
}
|
|
55
|
+
|
|
52
56
|
if (fs.existsSync(coreTemplatesDir)) {
|
|
53
57
|
api.logger.info(`[PD] Flattening ${language} core templates to workspace root...`);
|
|
54
58
|
// We copy contents of 'core' directory directly to workspaceDir root
|
|
@@ -56,14 +60,14 @@ export function ensureWorkspaceTemplates(api, workspaceDir, language = 'en') {
|
|
|
56
60
|
for (const file of coreFiles) {
|
|
57
61
|
const srcPath = path.join(coreTemplatesDir, file);
|
|
58
62
|
const destPath = path.join(workspaceDir, file);
|
|
63
|
+
|
|
59
64
|
// If it's a core file and we want to ensure latest templates are used
|
|
60
65
|
// but don't want to destroy user custom data, we check if we should overwrite.
|
|
61
66
|
// For now, we only copy if missing to be safe, but log it.
|
|
62
67
|
if (!fs.existsSync(destPath)) {
|
|
63
68
|
fs.copyFileSync(srcPath, destPath);
|
|
64
69
|
api.logger.info(`[PD] Initialized core file: ${file}`);
|
|
65
|
-
}
|
|
66
|
-
else if (CORE_GUIDANCE_FILES.has(file)) {
|
|
70
|
+
} else if (CORE_GUIDANCE_FILES.has(file)) {
|
|
67
71
|
const existingContent = fs.readFileSync(destPath, 'utf8');
|
|
68
72
|
if (hasOutdatedCoreGuidance(file, existingContent)) {
|
|
69
73
|
api.logger.warn(`[PD] Outdated core guidance detected in ${file}. Review the latest template guidance for peer sessions, subagents, and sessions_spawn routing.`);
|
|
@@ -71,18 +75,22 @@ export function ensureWorkspaceTemplates(api, workspaceDir, language = 'en') {
|
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
}
|
|
78
|
+
|
|
74
79
|
// 3. Copy pain memory seed files
|
|
75
80
|
const painTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'pain');
|
|
76
81
|
const painDestDir = path.join(workspaceDir, PD_DIRS.PAIN_SAMPLES);
|
|
82
|
+
|
|
77
83
|
if (fs.existsSync(painTemplatesDir)) {
|
|
78
84
|
if (!fs.existsSync(painDestDir)) {
|
|
79
85
|
fs.mkdirSync(painDestDir, { recursive: true });
|
|
80
86
|
}
|
|
81
87
|
copyRecursiveSync(painTemplatesDir, painDestDir, api);
|
|
82
88
|
}
|
|
89
|
+
|
|
83
90
|
// 4. Initialize PROFILE.json with default contextInjection config
|
|
84
91
|
const principlesDir = path.join(workspaceDir, PD_DIRS.IDENTITY);
|
|
85
92
|
const profilePath = path.join(principlesDir, 'PROFILE.json');
|
|
93
|
+
|
|
86
94
|
if (!fs.existsSync(profilePath)) {
|
|
87
95
|
// Ensure .principles directory exists
|
|
88
96
|
if (!fs.existsSync(principlesDir)) {
|
|
@@ -91,30 +99,31 @@ export function ensureWorkspaceTemplates(api, workspaceDir, language = 'en') {
|
|
|
91
99
|
fs.writeFileSync(profilePath, JSON.stringify(DEFAULT_PROFILE, null, 2), 'utf-8');
|
|
92
100
|
api.logger.info(`[PD] Initialized PROFILE.json with default contextInjection config`);
|
|
93
101
|
}
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
102
|
+
} catch (err) {
|
|
96
103
|
api.logger.error(`[PD] Failed to initialize workspace templates: ${String(err)}`);
|
|
97
104
|
}
|
|
98
105
|
}
|
|
106
|
+
|
|
99
107
|
/**
|
|
100
108
|
* Standard recursive copy that preserves directory structure.
|
|
101
109
|
* Special handling: maps 'okr' directory to 'memory/okr' for runtime compatibility.
|
|
102
110
|
*/
|
|
103
|
-
function copyRecursiveSync(srcDir, destDir, api) {
|
|
111
|
+
function copyRecursiveSync(srcDir: string, destDir: string, api: OpenClawPluginApi | { logger: PluginLogger }) {
|
|
104
112
|
const items = fs.readdirSync(srcDir);
|
|
113
|
+
|
|
105
114
|
for (const item of items) {
|
|
106
115
|
const srcPath = path.join(srcDir, item);
|
|
107
116
|
// Special mapping: okr -> memory/okr (runtime path expects memory/okr/)
|
|
108
117
|
const destItemName = item === 'okr' ? path.join('memory', 'okr') : item;
|
|
109
118
|
const destPath = path.join(destDir, destItemName);
|
|
110
119
|
const stat = fs.statSync(srcPath);
|
|
120
|
+
|
|
111
121
|
if (stat.isDirectory()) {
|
|
112
122
|
if (!fs.existsSync(destPath)) {
|
|
113
123
|
fs.mkdirSync(destPath, { recursive: true });
|
|
114
124
|
}
|
|
115
125
|
copyRecursiveSync(srcPath, destPath, api);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
126
|
+
} else {
|
|
118
127
|
if (!fs.existsSync(destPath)) {
|
|
119
128
|
// Ensure parent directory exists
|
|
120
129
|
const destParent = path.dirname(destPath);
|
|
@@ -127,16 +136,19 @@ function copyRecursiveSync(srcDir, destDir, api) {
|
|
|
127
136
|
}
|
|
128
137
|
}
|
|
129
138
|
}
|
|
139
|
+
|
|
130
140
|
/**
|
|
131
141
|
* Ensures that the state directory has the necessary files (like pain_dictionary.json).
|
|
132
142
|
*/
|
|
133
|
-
export function ensureStateTemplates(ctx, stateDir, language = 'en') {
|
|
143
|
+
export function ensureStateTemplates(ctx: { logger: PluginLogger }, stateDir: string, language: string = 'en') {
|
|
134
144
|
try {
|
|
135
145
|
const __filename = fileURLToPath(import.meta.url);
|
|
136
146
|
const __dirname = path.dirname(__filename);
|
|
147
|
+
|
|
137
148
|
if (!fs.existsSync(stateDir)) {
|
|
138
149
|
fs.mkdirSync(stateDir, { recursive: true });
|
|
139
150
|
}
|
|
151
|
+
|
|
140
152
|
// 1. Copy common state files
|
|
141
153
|
const commonFiles = ['pain_settings.json'];
|
|
142
154
|
for (const filename of commonFiles) {
|
|
@@ -147,18 +159,19 @@ export function ensureStateTemplates(ctx, stateDir, language = 'en') {
|
|
|
147
159
|
ctx.logger.info(`[PD] Initialized ${filename} in stateDir: ${destPath}`);
|
|
148
160
|
}
|
|
149
161
|
}
|
|
162
|
+
|
|
150
163
|
// 2. Copy language-specific dictionary
|
|
151
164
|
let dictTemplate = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'pain_dictionary.json');
|
|
152
165
|
if (!fs.existsSync(dictTemplate)) {
|
|
153
166
|
dictTemplate = path.resolve(__dirname, '..', '..', 'templates', 'langs', 'en', 'pain_dictionary.json');
|
|
154
167
|
}
|
|
168
|
+
|
|
155
169
|
const dictDest = path.join(stateDir, 'pain_dictionary.json');
|
|
156
170
|
if (!fs.existsSync(dictDest) && fs.existsSync(dictTemplate)) {
|
|
157
171
|
fs.copyFileSync(dictTemplate, dictDest);
|
|
158
172
|
ctx.logger.info(`[PD] Initialized pain dictionary in stateDir: ${dictDest} (Lang: ${language})`);
|
|
159
173
|
}
|
|
160
|
-
}
|
|
161
|
-
catch (err) {
|
|
174
|
+
} catch (err) {
|
|
162
175
|
ctx.logger.error(`[PD] Failed to initialize state templates: ${String(err)}`);
|
|
163
176
|
}
|
|
164
177
|
}
|