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
package/src/index.ts
ADDED
|
@@ -0,0 +1,694 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
OpenClawPluginApi,
|
|
3
|
+
PluginHookBeforePromptBuildEvent,
|
|
4
|
+
PluginHookAgentContext,
|
|
5
|
+
PluginHookBeforePromptBuildResult,
|
|
6
|
+
PluginHookBeforeToolCallEvent,
|
|
7
|
+
PluginHookToolContext,
|
|
8
|
+
PluginHookBeforeToolCallResult,
|
|
9
|
+
PluginHookAfterToolCallEvent,
|
|
10
|
+
PluginHookBeforeResetEvent,
|
|
11
|
+
PluginHookBeforeCompactionEvent,
|
|
12
|
+
PluginHookAfterCompactionEvent,
|
|
13
|
+
PluginHookSubagentEndedEvent,
|
|
14
|
+
PluginHookLlmOutputEvent,
|
|
15
|
+
PluginHookSubagentSpawningEvent,
|
|
16
|
+
PluginHookSubagentSpawningResult,
|
|
17
|
+
PluginHookSubagentContext,
|
|
18
|
+
PluginHookBeforeMessageWriteEvent,
|
|
19
|
+
PluginHookBeforeMessageWriteResult,
|
|
20
|
+
} from './openclaw-sdk.js';
|
|
21
|
+
import * as crypto from 'crypto';
|
|
22
|
+
import type { WorkerProfile } from './core/model-deployment-registry.js';
|
|
23
|
+
import { classifyTask } from './core/local-worker-routing.js';
|
|
24
|
+
import { completeShadowObservation, recordShadowRouting } from './core/shadow-observation-registry.js';
|
|
25
|
+
import { getCommandDescription } from './i18n/commands.js';
|
|
26
|
+
import { WorkspaceContext } from './core/workspace-context.js';
|
|
27
|
+
import { handleBeforePromptBuild } from './hooks/prompt.js';
|
|
28
|
+
import { handleBeforeToolCall } from './hooks/gate.js';
|
|
29
|
+
import { handleAfterToolCall } from './hooks/pain.js';
|
|
30
|
+
import { handleBeforeReset, handleBeforeCompaction, handleAfterCompaction } from './hooks/lifecycle.js';
|
|
31
|
+
import { handleLlmOutput } from './hooks/llm.js';
|
|
32
|
+
import { handleSubagentEnded } from './hooks/subagent.js';
|
|
33
|
+
import { handleBeforeMessageWrite } from './hooks/message-sanitize.js';
|
|
34
|
+
import * as TrajectoryCollector from './hooks/trajectory-collector.js';
|
|
35
|
+
import { handleInitStrategy, handleManageOkr } from './commands/strategy.js';
|
|
36
|
+
import { handleBootstrapTools, handleResearchTools } from './commands/capabilities.js';
|
|
37
|
+
import { handleThinkingOs } from './commands/thinking-os.js';
|
|
38
|
+
import { handlePainCommand } from './commands/pain.js';
|
|
39
|
+
import { handleContextCommand } from './commands/context.js';
|
|
40
|
+
import { handleFocusCommand } from './commands/focus.js';
|
|
41
|
+
import { handleRollbackCommand } from './commands/rollback.js';
|
|
42
|
+
import { handleEvolutionStatusCommand } from './commands/evolution-status.js';
|
|
43
|
+
import { handlePrincipleRollbackCommand } from './commands/principle-rollback.js';
|
|
44
|
+
import { handleExportCommand } from './commands/export.js';
|
|
45
|
+
import { handleSamplesCommand } from './commands/samples.js';
|
|
46
|
+
import { handleNocturnalReviewCommand } from './commands/nocturnal-review.js';
|
|
47
|
+
import { handleNocturnalTrainCommand } from './commands/nocturnal-train.js';
|
|
48
|
+
import { handleNocturnalRolloutCommand } from './commands/nocturnal-rollout.js';
|
|
49
|
+
import { handleWorkflowDebugCommand } from './commands/workflow-debug.js';
|
|
50
|
+
import { EvolutionWorkerService } from './service/evolution-worker.js';
|
|
51
|
+
import { TrajectoryService } from './service/trajectory-service.js';
|
|
52
|
+
import { ensureWorkspaceTemplates } from './core/init.js';
|
|
53
|
+
import { migrateDirectoryStructure } from './core/migration.js';
|
|
54
|
+
import { SystemLogger } from './core/system-logger.js';
|
|
55
|
+
import { createDeepReflectTool } from './tools/deep-reflect.js';
|
|
56
|
+
import { PathResolver, resolveWorkspaceDirFromApi } from './core/path-resolver.js';
|
|
57
|
+
import { createPrinciplesConsoleRoute } from './http/principles-console-route.js';
|
|
58
|
+
|
|
59
|
+
// Track initialization to avoid repeated calls
|
|
60
|
+
let workspaceInitialized = false;
|
|
61
|
+
|
|
62
|
+
// Map from childSessionKey → shadowObservationId
|
|
63
|
+
// Used to complete shadow observations when subagent ends
|
|
64
|
+
const pendingShadowObservations = new Map<string, string>();
|
|
65
|
+
|
|
66
|
+
// PD local worker profiles that are managed by the shadow routing policy
|
|
67
|
+
const PD_LOCAL_PROFILES = new Set<WorkerProfile>(['local-reader', 'local-editor']);
|
|
68
|
+
|
|
69
|
+
function computeRuntimeShadowTaskFingerprint(event: PluginHookSubagentSpawningEvent): string {
|
|
70
|
+
const payload = {
|
|
71
|
+
childSessionKey: event.childSessionKey,
|
|
72
|
+
agentId: event.agentId,
|
|
73
|
+
label: event.label ?? '',
|
|
74
|
+
mode: event.mode,
|
|
75
|
+
threadRequested: event.threadRequested,
|
|
76
|
+
requesterChannel: event.requester?.channel ?? '',
|
|
77
|
+
requesterThreadId: event.requester?.threadId ?? '',
|
|
78
|
+
};
|
|
79
|
+
return crypto.createHash('sha256').update(JSON.stringify(payload)).digest('hex').slice(0, 16);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const plugin = {
|
|
83
|
+
name: "Principles Disciple",
|
|
84
|
+
description: "Evolutionary programming agent framework with strategic guardrails and reflection loops.",
|
|
85
|
+
|
|
86
|
+
register(api: OpenClawPluginApi) {
|
|
87
|
+
api.logger.info(`Principles Disciple Plugin registered. (Path: ${api.rootDir ?? '(unknown)'})`);
|
|
88
|
+
PathResolver.setExtensionRoot(api.rootDir ?? '.');
|
|
89
|
+
api.registerHttpRoute(createPrinciplesConsoleRoute(api));
|
|
90
|
+
|
|
91
|
+
const language = (api.pluginConfig?.language as string) || 'en';
|
|
92
|
+
|
|
93
|
+
// ── Hook: Prompt Building ──
|
|
94
|
+
api.on(
|
|
95
|
+
'before_prompt_build',
|
|
96
|
+
async (event: PluginHookBeforePromptBuildEvent, ctx: PluginHookAgentContext): Promise<PluginHookBeforePromptBuildResult | void> => {
|
|
97
|
+
try {
|
|
98
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
99
|
+
if (!workspaceInitialized && workspaceDir) {
|
|
100
|
+
migrateDirectoryStructure(api, workspaceDir);
|
|
101
|
+
ensureWorkspaceTemplates(api, workspaceDir, language);
|
|
102
|
+
SystemLogger.log(workspaceDir, 'SYSTEM_BOOT', `Principles Disciple online. Language: ${language}`);
|
|
103
|
+
workspaceInitialized = true;
|
|
104
|
+
}
|
|
105
|
+
const result = await handleBeforePromptBuild(event, { ...ctx, api, workspaceDir });
|
|
106
|
+
|
|
107
|
+
// Record success
|
|
108
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
109
|
+
hook: 'before_prompt_build',
|
|
110
|
+
sessionId: ctx.sessionId
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
return result;
|
|
114
|
+
} catch (err) {
|
|
115
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
116
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
117
|
+
hook: 'before_prompt_build',
|
|
118
|
+
sessionId: ctx.sessionId,
|
|
119
|
+
error: String(err)
|
|
120
|
+
});
|
|
121
|
+
api.logger.error(`[PD] Error in before_prompt_build: ${String(err)}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// ── Hook: Security Gate ──
|
|
127
|
+
api.on(
|
|
128
|
+
'before_tool_call',
|
|
129
|
+
(event: PluginHookBeforeToolCallEvent, ctx: PluginHookToolContext): PluginHookBeforeToolCallResult | void => {
|
|
130
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
131
|
+
try {
|
|
132
|
+
const pluginConfig = api.pluginConfig ?? {};
|
|
133
|
+
const logger = api.logger;
|
|
134
|
+
const result = handleBeforeToolCall(event, { ...ctx, workspaceDir, pluginConfig, logger });
|
|
135
|
+
|
|
136
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
137
|
+
hook: 'before_tool_call'
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
return result;
|
|
141
|
+
} catch (err) {
|
|
142
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
143
|
+
hook: 'before_tool_call',
|
|
144
|
+
error: String(err)
|
|
145
|
+
});
|
|
146
|
+
api.logger.error(`[PD] Error in before_tool_call: ${String(err)}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// ── Hook: Pain & Trust ──
|
|
152
|
+
api.on(
|
|
153
|
+
'after_tool_call',
|
|
154
|
+
(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => {
|
|
155
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
156
|
+
try {
|
|
157
|
+
const pluginConfig = api.pluginConfig ?? {};
|
|
158
|
+
// Pass api separately to handleAfterToolCall to maintain type safety
|
|
159
|
+
handleAfterToolCall(event, { ...ctx, workspaceDir, pluginConfig }, api);
|
|
160
|
+
|
|
161
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
162
|
+
hook: 'after_tool_call'
|
|
163
|
+
});
|
|
164
|
+
} catch (err) {
|
|
165
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
166
|
+
hook: 'after_tool_call',
|
|
167
|
+
error: String(err)
|
|
168
|
+
});
|
|
169
|
+
api.logger.error(`[PD:EmpathyObserver] Error in after_tool_call: ${String(err)}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
// ── Hook: LLM Analysis ──
|
|
175
|
+
api.on(
|
|
176
|
+
'llm_output',
|
|
177
|
+
(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
|
|
178
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
179
|
+
try {
|
|
180
|
+
handleLlmOutput(event, { ...ctx, workspaceDir });
|
|
181
|
+
|
|
182
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
183
|
+
hook: 'llm_output',
|
|
184
|
+
sessionId: ctx.sessionId
|
|
185
|
+
});
|
|
186
|
+
} catch (err) {
|
|
187
|
+
WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
|
|
188
|
+
hook: 'llm_output',
|
|
189
|
+
sessionId: ctx.sessionId,
|
|
190
|
+
error: String(err)
|
|
191
|
+
});
|
|
192
|
+
api.logger.error(`[PD] Error in llm_output: ${String(err)}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
// ── Hook: Message Sanitization ──
|
|
198
|
+
api.on(
|
|
199
|
+
'before_message_write',
|
|
200
|
+
(event: PluginHookBeforeMessageWriteEvent): PluginHookBeforeMessageWriteResult | void => {
|
|
201
|
+
try {
|
|
202
|
+
return handleBeforeMessageWrite(event);
|
|
203
|
+
} catch (err) {
|
|
204
|
+
api.logger.error(`[PD] Error in before_message_write: ${String(err)}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
// ── Hook: Trajectory Collection (Behavior Evolution Phase 0) ──
|
|
210
|
+
// Note: after_tool_call and llm_output are safe to collect
|
|
211
|
+
// before_message_write conflicts with message-sanitize, skipping for now
|
|
212
|
+
api.on(
|
|
213
|
+
'after_tool_call',
|
|
214
|
+
(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => {
|
|
215
|
+
try {
|
|
216
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
217
|
+
TrajectoryCollector.handleAfterToolCall(event, { ...ctx, workspaceDir });
|
|
218
|
+
} catch (err) {
|
|
219
|
+
// Non-critical: don't log, just skip
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
api.on(
|
|
225
|
+
'llm_output',
|
|
226
|
+
(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
|
|
227
|
+
try {
|
|
228
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
229
|
+
TrajectoryCollector.handleLlmOutput(event, { ...ctx, workspaceDir });
|
|
230
|
+
} catch (err) {
|
|
231
|
+
// Non-critical: don't log, just skip
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
// ── Hook: Subagent Loop Closure ──
|
|
237
|
+
api.on(
|
|
238
|
+
'subagent_spawning',
|
|
239
|
+
(event: PluginHookSubagentSpawningEvent, ctx: PluginHookSubagentContext): void | PluginHookSubagentSpawningResult => {
|
|
240
|
+
try {
|
|
241
|
+
// Resolve workspace via official API, falling back to PathResolver
|
|
242
|
+
const workspaceDir = resolveWorkspaceDirFromApi(api, event.agentId) || '.';
|
|
243
|
+
api.logger?.debug?.(`[PD] workspaceDir resolved for subagent_spawning: ${workspaceDir}`);
|
|
244
|
+
const { agentId, childSessionKey } = event;
|
|
245
|
+
// Only handle PD local worker profiles
|
|
246
|
+
if (!PD_LOCAL_PROFILES.has(agentId as WorkerProfile)) {
|
|
247
|
+
return { status: 'ok' };
|
|
248
|
+
}
|
|
249
|
+
// Use the real runtime hook to record shadow evidence. We still consult the
|
|
250
|
+
// routing/deployment state here, but the observation itself must originate
|
|
251
|
+
// from actual subagent execution rather than an operator command path.
|
|
252
|
+
const routingInput = { targetProfile: agentId as WorkerProfile };
|
|
253
|
+
const decision = classifyTask(routingInput, workspaceDir);
|
|
254
|
+
const shouldRecordShadow =
|
|
255
|
+
decision.activeCheckpointState === 'shadow_ready' &&
|
|
256
|
+
!!decision.activeCheckpointId &&
|
|
257
|
+
decision.deploymentCheck.routingEnabled &&
|
|
258
|
+
decision.deploymentCheck.checkpointDeployable;
|
|
259
|
+
|
|
260
|
+
if (shouldRecordShadow) {
|
|
261
|
+
const observation = recordShadowRouting(workspaceDir, {
|
|
262
|
+
checkpointId: decision.activeCheckpointId!,
|
|
263
|
+
workerProfile: agentId as WorkerProfile,
|
|
264
|
+
taskFingerprint: computeRuntimeShadowTaskFingerprint(event),
|
|
265
|
+
});
|
|
266
|
+
pendingShadowObservations.set(childSessionKey, observation.observationId);
|
|
267
|
+
}
|
|
268
|
+
return { status: 'ok' };
|
|
269
|
+
} catch (err) {
|
|
270
|
+
api.logger.error(`[PD] Error in subagent_spawning shadow routing: ${String(err)}`);
|
|
271
|
+
return { status: 'ok' }; // Don't block spawn on shadow observation errors
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
api.on(
|
|
277
|
+
'subagent_ended',
|
|
278
|
+
(event: PluginHookSubagentEndedEvent, ctx: PluginHookSubagentContext): void => {
|
|
279
|
+
try {
|
|
280
|
+
// Resolve workspace via official API, falling back to PathResolver
|
|
281
|
+
const workspaceDir = resolveWorkspaceDirFromApi(api, undefined) || '.';
|
|
282
|
+
api.logger?.debug?.(`[PD] workspaceDir resolved for subagent_ended: ${workspaceDir}`);
|
|
283
|
+
// Complete any pending shadow observation for this subagent session
|
|
284
|
+
const shadowObsId = pendingShadowObservations.get(event.targetSessionKey);
|
|
285
|
+
if (shadowObsId && workspaceDir) {
|
|
286
|
+
try {
|
|
287
|
+
const outcome = event.outcome === 'ok'
|
|
288
|
+
? 'accepted'
|
|
289
|
+
: event.outcome === 'error'
|
|
290
|
+
? 'rejected'
|
|
291
|
+
: 'escalated';
|
|
292
|
+
completeShadowObservation(workspaceDir, {
|
|
293
|
+
observationId: shadowObsId,
|
|
294
|
+
outcome,
|
|
295
|
+
failureSignals: event.outcome === 'error' ? { threwException: true, timedOut: false, invalidOutput: false, profileRejected: false, extra: {} } : undefined,
|
|
296
|
+
});
|
|
297
|
+
pendingShadowObservations.delete(event.targetSessionKey);
|
|
298
|
+
} catch (err) {
|
|
299
|
+
api.logger.error(`[PD] Failed to complete shadow observation: ${String(err)}`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
handleSubagentEnded(event, { ...ctx, workspaceDir, api });
|
|
303
|
+
} catch (err) {
|
|
304
|
+
api.logger.error(`[PD] Error in subagent_ended: ${String(err)}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
// ── Hook: Lifecycle ──
|
|
310
|
+
api.on('before_reset', (event: PluginHookBeforeResetEvent, ctx: PluginHookAgentContext) => {
|
|
311
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
312
|
+
return handleBeforeReset(event, { ...ctx, workspaceDir });
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
api.on('before_compaction', (event: PluginHookBeforeCompactionEvent, ctx: PluginHookAgentContext) => {
|
|
316
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
317
|
+
return handleBeforeCompaction(event, { ...ctx, workspaceDir });
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
api.on('after_compaction', (event: PluginHookAfterCompactionEvent, ctx: PluginHookAgentContext) => {
|
|
321
|
+
const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
|
|
322
|
+
return handleAfterCompaction(event, { ...ctx, workspaceDir });
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
// ── Service: Background Evolution Worker ──
|
|
326
|
+
try {
|
|
327
|
+
EvolutionWorkerService.api = api;
|
|
328
|
+
api.registerService(EvolutionWorkerService);
|
|
329
|
+
api.registerService(TrajectoryService);
|
|
330
|
+
} catch (err) {
|
|
331
|
+
api.logger.error(`[PD] Failed to register EvolutionWorkerService: ${String(err)}`);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// ── Slash Commands ──
|
|
335
|
+
api.registerCommand({
|
|
336
|
+
name: "pd-init",
|
|
337
|
+
description: getCommandDescription('pd-init', language),
|
|
338
|
+
handler: (ctx) => handleInitStrategy(ctx)
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
api.registerCommand({
|
|
342
|
+
name: "pd-okr",
|
|
343
|
+
description: getCommandDescription('pd-okr', language),
|
|
344
|
+
handler: (ctx) => handleManageOkr(ctx)
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
api.registerCommand({
|
|
348
|
+
name: "pd-bootstrap",
|
|
349
|
+
description: getCommandDescription('pd-bootstrap', language),
|
|
350
|
+
handler: (ctx) => handleBootstrapTools(ctx)
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
api.registerCommand({
|
|
354
|
+
name: "pd-research",
|
|
355
|
+
description: getCommandDescription('pd-research', language),
|
|
356
|
+
handler: (ctx) => handleResearchTools(ctx)
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
api.registerCommand({
|
|
360
|
+
name: "pd-thinking",
|
|
361
|
+
description: getCommandDescription('pd-thinking', language),
|
|
362
|
+
acceptsArgs: true,
|
|
363
|
+
handler: (ctx) => handleThinkingOs(ctx)
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
api.registerCommand({
|
|
367
|
+
name: "pd-daily",
|
|
368
|
+
description: getCommandDescription('pd-daily', language),
|
|
369
|
+
handler: (_ctx) => {
|
|
370
|
+
return { text: language === 'zh'
|
|
371
|
+
? "请执行 pd-daily 技能来配置并发送进化日报。系统将引导你完成配置流程,包括发送时间、渠道和报告风格偏好。"
|
|
372
|
+
: "Please execute the pd-daily skill to configure and send your daily evolution report. The system will guide you through the configuration process." };
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
api.registerCommand({
|
|
377
|
+
name: "pd-grooming",
|
|
378
|
+
description: getCommandDescription('pd-grooming', language),
|
|
379
|
+
handler: (_ctx) => {
|
|
380
|
+
return { text: language === 'zh'
|
|
381
|
+
? "请执行 pd-grooming 技能来执行大扫除。例如输入: '执行 pd-grooming 技能'"
|
|
382
|
+
: "Please execute the pd-grooming skill to clean up. For example: 'Execute pd-grooming skill'" };
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
api.registerCommand({
|
|
387
|
+
name: "pd-help",
|
|
388
|
+
description: getCommandDescription('pd-help', language),
|
|
389
|
+
handler: (_ctx) => {
|
|
390
|
+
if (language === 'zh') {
|
|
391
|
+
return { text: `
|
|
392
|
+
📖 **Principles Disciple 命令大全**
|
|
393
|
+
|
|
394
|
+
## 🚀 快速开始
|
|
395
|
+
| 命令 | 用途 | 使用时机 |
|
|
396
|
+
|------|------|----------|
|
|
397
|
+
| \`/pd-init\` | 初始化工作区 | 新项目开始时 |
|
|
398
|
+
| \`/pd-bootstrap\` | 环境工具扫描 | 缺少开发工具时 |
|
|
399
|
+
|
|
400
|
+
## 📊 状态查询
|
|
401
|
+
| 命令 | 用途 | 使用时机 |
|
|
402
|
+
|------|------|----------|
|
|
403
|
+
| \`/pd-status\` | 查看进化状态 | 想了解当前 GFI 和 Pain 情况 |
|
|
404
|
+
| \`/pd-focus\` | 焦点文件管理 | 查看/压缩/回滚历史版本 |
|
|
405
|
+
| \`/pd-export\` | 导出数据 | 导出 analytics/corrections/orpo |
|
|
406
|
+
| \`/pd-samples\` | 审核纠错样本 | 查看待审核样本并批准/拒绝 |
|
|
407
|
+
| \`/pd-nocturnal-review\` | 审核 nocturnal 样本 | 审核 nocturnal 训练样本并导出 ORPO |
|
|
408
|
+
|
|
409
|
+
## ⚙️ 配置管理
|
|
410
|
+
| 命令 | 用途 | 使用时机 |
|
|
411
|
+
|------|------|----------|
|
|
412
|
+
| \`/pd-context\` | 控制上下文注入 | 想减少/增加注入内容 |
|
|
413
|
+
| \`/pd-okr\` | OKR 目标管理 | 设置战略目标 |
|
|
414
|
+
|
|
415
|
+
## 🧠 进化相关
|
|
416
|
+
| 命令 | 用途 | 使用时机 |
|
|
417
|
+
|------|------|----------|
|
|
418
|
+
| \`/pd-thinking\` | 思维模型管理 | 更新 Thinking OS |
|
|
419
|
+
| \`/pd-daily\` | 进化日报 | 每日回顾时 |
|
|
420
|
+
| \`/pd-grooming\` | 工作区大扫除 | 定期清理 |
|
|
421
|
+
|
|
422
|
+
## 💡 常用命令示例
|
|
423
|
+
|
|
424
|
+
**减少 token 消耗:**
|
|
425
|
+
\`\`\`
|
|
426
|
+
/pd-context minimal
|
|
427
|
+
\`\`\`
|
|
428
|
+
|
|
429
|
+
**恢复完整上下文:**
|
|
430
|
+
\`\`\`
|
|
431
|
+
/pd-context full
|
|
432
|
+
\`\`\`
|
|
433
|
+
|
|
434
|
+
**查看当前配置:**
|
|
435
|
+
\`\`\`
|
|
436
|
+
/pd-context status
|
|
437
|
+
\`\`\`
|
|
438
|
+
|
|
439
|
+
🔍 输入任意命令后加 \`help\` 可查看详细帮助,如 \`/pd-context help\`
|
|
440
|
+
`.trim() };
|
|
441
|
+
} else {
|
|
442
|
+
return { text: `
|
|
443
|
+
📖 **Principles Disciple Command Reference**
|
|
444
|
+
|
|
445
|
+
## 🚀 Quick Start
|
|
446
|
+
| Command | Purpose | When to Use |
|
|
447
|
+
|---------|---------|-------------|
|
|
448
|
+
| \`/pd-init\` | Initialize workspace | Starting a new project |
|
|
449
|
+
| \`/pd-bootstrap\` | Scan environment tools | Missing dev tools |
|
|
450
|
+
|
|
451
|
+
## 📊 Status Query
|
|
452
|
+
| Command | Purpose | When to Use |
|
|
453
|
+
|---------|---------|-------------|
|
|
454
|
+
| \`/pd-status\` | View evolution status | Check GFI and Pain status |
|
|
455
|
+
| \`/pd-focus\` | Focus file management | View/compress/rollback history |
|
|
456
|
+
| \`/pd-export\` | Export data | Export analytics/corrections/orpo |
|
|
457
|
+
| \`/pd-samples\` | Review correction samples | Review pending correction samples |
|
|
458
|
+
| \`/pd-nocturnal-review\` | Review nocturnal samples | Review nocturnal training samples and export ORPO |
|
|
459
|
+
|
|
460
|
+
## ⚙️ Configuration
|
|
461
|
+
| Command | Purpose | When to Use |
|
|
462
|
+
|---------|---------|-------------|
|
|
463
|
+
| \`/pd-context\` | Control context injection | Reduce/increase injected content |
|
|
464
|
+
| \`/pd-okr\` | OKR goal management | Set strategic goals |
|
|
465
|
+
|
|
466
|
+
## 🧠 Evolution
|
|
467
|
+
| Command | Purpose | When to Use |
|
|
468
|
+
|---------|---------|-------------|
|
|
469
|
+
| \`/pd-thinking\` | Mental model management | Update Thinking OS |
|
|
470
|
+
| \`/pd-daily\` | Evolution report | Daily review |
|
|
471
|
+
| \`/pd-grooming\` | Workspace cleanup | Periodic cleanup |
|
|
472
|
+
|
|
473
|
+
## 💡 Common Examples
|
|
474
|
+
|
|
475
|
+
**Reduce token usage:**
|
|
476
|
+
\`\`\`
|
|
477
|
+
/pd-context minimal
|
|
478
|
+
\`\`\`
|
|
479
|
+
|
|
480
|
+
**Restore full context:**
|
|
481
|
+
\`\`\`
|
|
482
|
+
/pd-context full
|
|
483
|
+
\`\`\`
|
|
484
|
+
|
|
485
|
+
**View current config:**
|
|
486
|
+
\`\`\`
|
|
487
|
+
/pd-context status
|
|
488
|
+
\`\`\`
|
|
489
|
+
|
|
490
|
+
🔍 Add \`help\` after any command for details, e.g., \`/pd-context help\`
|
|
491
|
+
`.trim() };
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
api.registerCommand({
|
|
497
|
+
name: "pd-status",
|
|
498
|
+
description: getCommandDescription('pd-status', language),
|
|
499
|
+
acceptsArgs: true,
|
|
500
|
+
handler: (ctx) => {
|
|
501
|
+
try {
|
|
502
|
+
const workspaceDir = api.resolvePath('.');
|
|
503
|
+
// Ensure workspaceDir is in config for handlePainCommand
|
|
504
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
505
|
+
return handlePainCommand(ctx);
|
|
506
|
+
} catch (err) {
|
|
507
|
+
api.logger.error(`[PD] Command /pd-status failed: ${String(err)}`);
|
|
508
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
api.registerCommand({
|
|
514
|
+
name: "pd-context",
|
|
515
|
+
description: getCommandDescription('pd-context', language),
|
|
516
|
+
acceptsArgs: true,
|
|
517
|
+
handler: (ctx) => {
|
|
518
|
+
try {
|
|
519
|
+
const workspaceDir = api.resolvePath('.');
|
|
520
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
521
|
+
return handleContextCommand(ctx);
|
|
522
|
+
} catch (err) {
|
|
523
|
+
api.logger.error(`[PD] Command /pd-context failed: ${String(err)}`);
|
|
524
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
api.registerCommand({
|
|
530
|
+
name: "pd-focus",
|
|
531
|
+
description: getCommandDescription('pd-focus', language),
|
|
532
|
+
acceptsArgs: true,
|
|
533
|
+
handler: (ctx) => {
|
|
534
|
+
try {
|
|
535
|
+
const workspaceDir = api.resolvePath('.');
|
|
536
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
537
|
+
return handleFocusCommand(ctx, api);
|
|
538
|
+
} catch (err) {
|
|
539
|
+
api.logger.error(`[PD] Command /pd-focus failed: ${String(err)}`);
|
|
540
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
api.registerCommand({
|
|
547
|
+
name: "pd-evolution-status",
|
|
548
|
+
description: getCommandDescription('pd-evolution-status', language),
|
|
549
|
+
handler: (ctx) => {
|
|
550
|
+
try {
|
|
551
|
+
const workspaceDir = api.resolvePath('.');
|
|
552
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
553
|
+
return handleEvolutionStatusCommand(ctx);
|
|
554
|
+
} catch (err) {
|
|
555
|
+
api.logger.error(`[PD] Command /pd-evolution-status failed: ${String(err)}`);
|
|
556
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
api.registerCommand({
|
|
562
|
+
name: "pd-principle-rollback",
|
|
563
|
+
description: getCommandDescription('pd-principle-rollback', language),
|
|
564
|
+
acceptsArgs: true,
|
|
565
|
+
handler: (ctx) => {
|
|
566
|
+
try {
|
|
567
|
+
const workspaceDir = api.resolvePath('.');
|
|
568
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
569
|
+
return handlePrincipleRollbackCommand(ctx);
|
|
570
|
+
} catch (err) {
|
|
571
|
+
api.logger.error(`[PD] Command /pd-principle-rollback failed: ${String(err)}`);
|
|
572
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
api.registerCommand({
|
|
578
|
+
name: "pd-rollback",
|
|
579
|
+
description: getCommandDescription('pd-rollback', language),
|
|
580
|
+
acceptsArgs: true,
|
|
581
|
+
handler: (ctx) => {
|
|
582
|
+
try {
|
|
583
|
+
const workspaceDir = api.resolvePath('.');
|
|
584
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
585
|
+
return handleRollbackCommand(ctx);
|
|
586
|
+
} catch (err) {
|
|
587
|
+
api.logger.error(`[PD] Command /pd-rollback failed: ${String(err)}`);
|
|
588
|
+
return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
// ── Tools ──
|
|
594
|
+
api.registerCommand({
|
|
595
|
+
name: "pd-export",
|
|
596
|
+
description: getCommandDescription('pd-export', language),
|
|
597
|
+
acceptsArgs: true,
|
|
598
|
+
handler: (ctx) => {
|
|
599
|
+
try {
|
|
600
|
+
const workspaceDir = api.resolvePath('.');
|
|
601
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
602
|
+
return handleExportCommand(ctx);
|
|
603
|
+
} catch (err) {
|
|
604
|
+
api.logger.error(`[PD] Command /pd-export failed: ${String(err)}`);
|
|
605
|
+
return { text: language === 'zh' ? "导出失败,请检查日志。" : "Export failed. Check logs." };
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
api.registerCommand({
|
|
611
|
+
name: "pd-samples",
|
|
612
|
+
description: getCommandDescription('pd-samples', language),
|
|
613
|
+
acceptsArgs: true,
|
|
614
|
+
handler: (ctx) => {
|
|
615
|
+
try {
|
|
616
|
+
const workspaceDir = api.resolvePath('.');
|
|
617
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
618
|
+
return handleSamplesCommand(ctx);
|
|
619
|
+
} catch (err) {
|
|
620
|
+
api.logger.error(`[PD] Command /pd-samples failed: ${String(err)}`);
|
|
621
|
+
return { text: language === 'zh' ? "样本命令执行失败,请检查日志。" : "Samples command failed. Check logs." };
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
api.registerCommand({
|
|
627
|
+
name: "pd-nocturnal-review",
|
|
628
|
+
description: 'Review nocturnal dataset samples [list|show|approve|reject|set-family|stats]',
|
|
629
|
+
acceptsArgs: true,
|
|
630
|
+
handler: (ctx) => {
|
|
631
|
+
try {
|
|
632
|
+
const workspaceDir = api.resolvePath('.');
|
|
633
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
634
|
+
return handleNocturnalReviewCommand(ctx);
|
|
635
|
+
} catch (err) {
|
|
636
|
+
api.logger.error(`[PD] Command /pd-nocturnal-review failed: ${String(err)}`);
|
|
637
|
+
return { text: language === 'zh' ? "Nocturnal review 命令执行失败,请检查日志。" : "Nocturnal review command failed. Check logs." };
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
});
|
|
641
|
+
|
|
642
|
+
api.registerCommand({
|
|
643
|
+
name: "nocturnal-train",
|
|
644
|
+
description: 'Nocturnal training operations [create-experiment|show-experiment|import-result|attach-eval|show-lineage|list-experiments|list-checkpoints|stats]',
|
|
645
|
+
acceptsArgs: true,
|
|
646
|
+
handler: (ctx) => {
|
|
647
|
+
try {
|
|
648
|
+
const workspaceDir = api.resolvePath('.');
|
|
649
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
650
|
+
return handleNocturnalTrainCommand(ctx);
|
|
651
|
+
} catch (err) {
|
|
652
|
+
api.logger.error(`[PD] Command /nocturnal-train failed: ${String(err)}`);
|
|
653
|
+
return { text: language === 'zh' ? "Nocturnal train 命令执行失败,请检查日志。" : "Nocturnal train command failed. Check logs." };
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
});
|
|
657
|
+
|
|
658
|
+
api.registerCommand({
|
|
659
|
+
name: "nocturnal-rollout",
|
|
660
|
+
description: 'Nocturnal rollout and promotion [evaluate-promotion|advance-promotion|bind|enable-routing|disable-routing|rollback|status|show-promotion]',
|
|
661
|
+
acceptsArgs: true,
|
|
662
|
+
handler: (ctx) => {
|
|
663
|
+
try {
|
|
664
|
+
const workspaceDir = api.resolvePath('.');
|
|
665
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
666
|
+
return handleNocturnalRolloutCommand(ctx);
|
|
667
|
+
} catch (err) {
|
|
668
|
+
api.logger.error(`[PD] Command /nocturnal-rollout failed: ${String(err)}`);
|
|
669
|
+
return { text: language === 'zh' ? "Nocturnal rollout 命令执行失败,请检查日志。" : "Nocturnal rollout command failed. Check logs." };
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
});
|
|
673
|
+
|
|
674
|
+
api.registerCommand({
|
|
675
|
+
name: "pd-workflow-debug",
|
|
676
|
+
description: 'Debug helper workflow state and events [workflowId]',
|
|
677
|
+
acceptsArgs: true,
|
|
678
|
+
handler: (ctx) => {
|
|
679
|
+
try {
|
|
680
|
+
const workspaceDir = api.resolvePath('.');
|
|
681
|
+
if (ctx.config) ctx.config.workspaceDir = workspaceDir;
|
|
682
|
+
return handleWorkflowDebugCommand(ctx);
|
|
683
|
+
} catch (err) {
|
|
684
|
+
api.logger.error(`[PD] Command /pd-workflow-debug failed: ${String(err)}`);
|
|
685
|
+
return { text: `Workflow debug command failed: ${String(err)}` };
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
});
|
|
689
|
+
|
|
690
|
+
api.registerTool(createDeepReflectTool(api));
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
|
|
694
|
+
export default plugin;
|