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,328 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import type { WorkflowRow, WorkflowEventRow, WorkflowState, WorkflowTransport } from './types.js';
|
|
5
|
+
import type { DreamerOutput, PhilosopherOutput } from '../../core/nocturnal-trinity.js';
|
|
6
|
+
|
|
7
|
+
const SCHEMA_VERSION = 1;
|
|
8
|
+
|
|
9
|
+
const DEFAULT_BUSY_TIMEOUT_MS = 5000;
|
|
10
|
+
|
|
11
|
+
export interface WorkflowStoreOptions {
|
|
12
|
+
workspaceDir: string;
|
|
13
|
+
busyTimeoutMs?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class WorkflowStore {
|
|
17
|
+
private readonly workspaceDir: string;
|
|
18
|
+
private readonly dbPath: string;
|
|
19
|
+
private readonly db: Database.Database;
|
|
20
|
+
|
|
21
|
+
constructor(opts: WorkflowStoreOptions) {
|
|
22
|
+
this.workspaceDir = path.resolve(opts.workspaceDir);
|
|
23
|
+
const stateDir = path.join(this.workspaceDir, '.state');
|
|
24
|
+
this.dbPath = path.join(stateDir, 'subagent_workflows.db');
|
|
25
|
+
|
|
26
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
27
|
+
|
|
28
|
+
this.db = new Database(this.dbPath);
|
|
29
|
+
this.db.pragma('journal_mode = WAL');
|
|
30
|
+
this.db.pragma('foreign_keys = ON');
|
|
31
|
+
this.db.pragma('synchronous = NORMAL');
|
|
32
|
+
this.db.pragma(`busy_timeout = ${Math.max(0, opts.busyTimeoutMs ?? DEFAULT_BUSY_TIMEOUT_MS)}`);
|
|
33
|
+
this.initSchema();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
dispose(): void {
|
|
37
|
+
this.db.close();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private initSchema(): void {
|
|
41
|
+
this.db.exec(`
|
|
42
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
43
|
+
version INTEGER NOT NULL
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE TABLE IF NOT EXISTS subagent_workflows (
|
|
47
|
+
workflow_id TEXT PRIMARY KEY,
|
|
48
|
+
workflow_type TEXT NOT NULL,
|
|
49
|
+
transport TEXT NOT NULL,
|
|
50
|
+
parent_session_id TEXT NOT NULL,
|
|
51
|
+
child_session_key TEXT NOT NULL,
|
|
52
|
+
run_id TEXT,
|
|
53
|
+
state TEXT NOT NULL DEFAULT 'pending',
|
|
54
|
+
cleanup_state TEXT NOT NULL DEFAULT 'none',
|
|
55
|
+
created_at INTEGER NOT NULL,
|
|
56
|
+
updated_at INTEGER NOT NULL,
|
|
57
|
+
last_observed_at INTEGER,
|
|
58
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
CREATE TABLE IF NOT EXISTS subagent_workflow_events (
|
|
62
|
+
workflow_id TEXT NOT NULL,
|
|
63
|
+
event_type TEXT NOT NULL,
|
|
64
|
+
from_state TEXT,
|
|
65
|
+
to_state TEXT NOT NULL,
|
|
66
|
+
reason TEXT NOT NULL,
|
|
67
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
68
|
+
created_at INTEGER NOT NULL,
|
|
69
|
+
FOREIGN KEY (workflow_id) REFERENCES subagent_workflows(workflow_id) ON DELETE CASCADE
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_parent_session ON subagent_workflows(parent_session_id);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_child_session ON subagent_workflows(child_session_key);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_state ON subagent_workflows(state);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_type ON subagent_workflows(workflow_type);
|
|
76
|
+
CREATE TABLE IF NOT EXISTS subagent_workflow_stage_outputs (
|
|
77
|
+
workflow_id TEXT NOT NULL,
|
|
78
|
+
stage TEXT NOT NULL CHECK (stage IN ('dreamer', 'philosopher')),
|
|
79
|
+
output_json TEXT NOT NULL,
|
|
80
|
+
idempotency_key TEXT NOT NULL,
|
|
81
|
+
created_at INTEGER NOT NULL,
|
|
82
|
+
FOREIGN KEY (workflow_id) REFERENCES subagent_workflows(workflow_id) ON DELETE CASCADE
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_stage_outputs_workflow ON subagent_workflow_stage_outputs(workflow_id);
|
|
86
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_stage_outputs_idempotency ON subagent_workflow_stage_outputs(idempotency_key);
|
|
87
|
+
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_events_workflow ON subagent_workflow_events(workflow_id);
|
|
89
|
+
`);
|
|
90
|
+
|
|
91
|
+
const row = this.db.prepare('SELECT version FROM schema_version LIMIT 1').get() as { version?: number } | undefined;
|
|
92
|
+
if (!row) {
|
|
93
|
+
this.db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(SCHEMA_VERSION);
|
|
94
|
+
} else if (row.version !== SCHEMA_VERSION) {
|
|
95
|
+
this.db.prepare('UPDATE schema_version SET version = ?').run(SCHEMA_VERSION);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
createWorkflow(row: Omit<WorkflowRow, 'cleanup_state'>): void {
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
this.db.prepare(`
|
|
102
|
+
INSERT INTO subagent_workflows (
|
|
103
|
+
workflow_id, workflow_type, transport, parent_session_id, child_session_key,
|
|
104
|
+
run_id, state, cleanup_state, created_at, updated_at, last_observed_at, metadata_json
|
|
105
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 'none', ?, ?, NULL, ?)
|
|
106
|
+
`).run(
|
|
107
|
+
row.workflow_id,
|
|
108
|
+
row.workflow_type,
|
|
109
|
+
row.transport,
|
|
110
|
+
row.parent_session_id,
|
|
111
|
+
row.child_session_key,
|
|
112
|
+
row.run_id,
|
|
113
|
+
row.state,
|
|
114
|
+
row.created_at,
|
|
115
|
+
row.updated_at,
|
|
116
|
+
row.metadata_json
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
updateWorkflowState(workflowId: string, state: WorkflowState, reason?: string): void {
|
|
121
|
+
const now = Date.now();
|
|
122
|
+
const current = this.getWorkflow(workflowId);
|
|
123
|
+
if (!current) return;
|
|
124
|
+
|
|
125
|
+
this.db.prepare(`
|
|
126
|
+
UPDATE subagent_workflows SET state = ?, updated_at = ?, last_observed_at = ? WHERE workflow_id = ?
|
|
127
|
+
`).run(state, now, now, workflowId);
|
|
128
|
+
|
|
129
|
+
if (reason) {
|
|
130
|
+
this.recordEvent(workflowId, 'state_change', current.state, state, reason, {});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
updateWorkflowRunId(workflowId: string, runId: string): void {
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
this.db.prepare(`
|
|
137
|
+
UPDATE subagent_workflows SET run_id = ?, updated_at = ? WHERE workflow_id = ?
|
|
138
|
+
`).run(runId, now, workflowId);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
updateCleanupState(workflowId: string, cleanupState: 'none' | 'pending' | 'failed' | 'completed'): void {
|
|
142
|
+
const now = Date.now();
|
|
143
|
+
this.db.prepare(`
|
|
144
|
+
UPDATE subagent_workflows SET cleanup_state = ?, updated_at = ? WHERE workflow_id = ?
|
|
145
|
+
`).run(cleanupState, now, workflowId);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
touchWorkflow(workflowId: string): void {
|
|
149
|
+
const now = Date.now();
|
|
150
|
+
this.db.prepare(`
|
|
151
|
+
UPDATE subagent_workflows SET last_observed_at = ?, updated_at = ? WHERE workflow_id = ?
|
|
152
|
+
`).run(now, now, workflowId);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
getWorkflow(workflowId: string): WorkflowRow | null {
|
|
156
|
+
const row = this.db.prepare('SELECT * FROM subagent_workflows WHERE workflow_id = ?').get(workflowId) as WorkflowRow | undefined;
|
|
157
|
+
return row ?? null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
getWorkflowByChildSession(childSessionKey: string): WorkflowRow | null {
|
|
161
|
+
const row = this.db.prepare('SELECT * FROM subagent_workflows WHERE child_session_key = ?').get(childSessionKey) as WorkflowRow | undefined;
|
|
162
|
+
return row ?? null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
getWorkflowByParentSession(parentSessionId: string, workflowType?: string): WorkflowRow | null {
|
|
166
|
+
let sql = 'SELECT * FROM subagent_workflows WHERE parent_session_id = ?';
|
|
167
|
+
const params: unknown[] = [parentSessionId];
|
|
168
|
+
|
|
169
|
+
if (workflowType) {
|
|
170
|
+
sql += ' AND workflow_type = ?';
|
|
171
|
+
params.push(workflowType);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
sql += ' ORDER BY created_at DESC LIMIT 1';
|
|
175
|
+
|
|
176
|
+
const row = this.db.prepare(sql).get(...params) as WorkflowRow | undefined;
|
|
177
|
+
return row ?? null;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
getActiveWorkflows(workflowType?: string): WorkflowRow[] {
|
|
181
|
+
let sql = "SELECT * FROM subagent_workflows WHERE state NOT IN ('completed', 'terminal_error', 'expired')";
|
|
182
|
+
const params: unknown[] = [];
|
|
183
|
+
|
|
184
|
+
if (workflowType) {
|
|
185
|
+
sql += ' AND workflow_type = ?';
|
|
186
|
+
params.push(workflowType);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
sql += ' ORDER BY created_at ASC';
|
|
190
|
+
|
|
191
|
+
return this.db.prepare(sql).all(...params) as WorkflowRow[];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
getExpiredWorkflows(maxAgeMs: number): WorkflowRow[] {
|
|
195
|
+
const cutoff = Date.now() - maxAgeMs;
|
|
196
|
+
return this.db.prepare(`
|
|
197
|
+
SELECT * FROM subagent_workflows
|
|
198
|
+
WHERE last_observed_at IS NOT NULL
|
|
199
|
+
AND last_observed_at < ?
|
|
200
|
+
AND state NOT IN ('completed', 'terminal_error', 'expired')
|
|
201
|
+
ORDER BY last_observed_at ASC
|
|
202
|
+
`).all(cutoff) as WorkflowRow[];
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
recordEvent(
|
|
206
|
+
workflowId: string,
|
|
207
|
+
eventType: string,
|
|
208
|
+
fromState: WorkflowState | null,
|
|
209
|
+
toState: WorkflowState,
|
|
210
|
+
reason: string,
|
|
211
|
+
payload: Record<string, unknown>
|
|
212
|
+
): void {
|
|
213
|
+
const now = Date.now();
|
|
214
|
+
this.db.prepare(`
|
|
215
|
+
INSERT INTO subagent_workflow_events (
|
|
216
|
+
workflow_id, event_type, from_state, to_state, reason, payload_json, created_at
|
|
217
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
218
|
+
`).run(
|
|
219
|
+
workflowId,
|
|
220
|
+
eventType,
|
|
221
|
+
fromState,
|
|
222
|
+
toState,
|
|
223
|
+
reason,
|
|
224
|
+
JSON.stringify(payload),
|
|
225
|
+
now
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
getEvents(workflowId: string): WorkflowEventRow[] {
|
|
230
|
+
return this.db.prepare(`
|
|
231
|
+
SELECT * FROM subagent_workflow_events WHERE workflow_id = ? ORDER BY created_at ASC
|
|
232
|
+
`).all(workflowId) as WorkflowEventRow[];
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Record a Trinity stage output to the database (NOC-11).
|
|
237
|
+
* idempotencyKey must be unique per (workflow_id, stage). If a row with the
|
|
238
|
+
* same idempotency_key already exists, this is a no-op (idempotent).
|
|
239
|
+
*/
|
|
240
|
+
recordStageOutput(
|
|
241
|
+
workflowId: string,
|
|
242
|
+
stage: 'dreamer' | 'philosopher',
|
|
243
|
+
output: DreamerOutput | PhilosopherOutput,
|
|
244
|
+
idempotencyKey: string
|
|
245
|
+
): void {
|
|
246
|
+
const now = Date.now();
|
|
247
|
+
// Use INSERT OR IGNORE for idempotency — if idempotency_key already exists, silently skip
|
|
248
|
+
this.db.prepare(`
|
|
249
|
+
INSERT OR IGNORE INTO subagent_workflow_stage_outputs (
|
|
250
|
+
workflow_id, stage, output_json, idempotency_key, created_at
|
|
251
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
252
|
+
`).run(
|
|
253
|
+
workflowId,
|
|
254
|
+
stage,
|
|
255
|
+
JSON.stringify(output),
|
|
256
|
+
idempotencyKey,
|
|
257
|
+
now
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Get all stage outputs for a workflow (NOC-13 crash recovery).
|
|
263
|
+
* Returns outputs ordered by created_at ascending.
|
|
264
|
+
*/
|
|
265
|
+
getStageOutputs(workflowId: string): Array<{
|
|
266
|
+
stage: string;
|
|
267
|
+
output: DreamerOutput | PhilosopherOutput;
|
|
268
|
+
idempotencyKey: string;
|
|
269
|
+
createdAt: number;
|
|
270
|
+
}> {
|
|
271
|
+
const rows = this.db.prepare(`
|
|
272
|
+
SELECT workflow_id, stage, output_json, idempotency_key, created_at
|
|
273
|
+
FROM subagent_workflow_stage_outputs
|
|
274
|
+
WHERE workflow_id = ?
|
|
275
|
+
ORDER BY created_at ASC
|
|
276
|
+
`).all(workflowId) as Array<{
|
|
277
|
+
workflow_id: string;
|
|
278
|
+
stage: string;
|
|
279
|
+
output_json: string;
|
|
280
|
+
idempotency_key: string;
|
|
281
|
+
created_at: number;
|
|
282
|
+
}>;
|
|
283
|
+
|
|
284
|
+
return rows.map(row => ({
|
|
285
|
+
workflowId: row.workflow_id,
|
|
286
|
+
stage: row.stage,
|
|
287
|
+
output: JSON.parse(row.output_json) as DreamerOutput | PhilosopherOutput,
|
|
288
|
+
idempotencyKey: row.idempotency_key,
|
|
289
|
+
createdAt: row.created_at,
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Get a stage output by its idempotency key (NOC-12 idempotency check).
|
|
295
|
+
* Returns null if not found.
|
|
296
|
+
*/
|
|
297
|
+
getStageOutputByKey(idempotencyKey: string): {
|
|
298
|
+
stage: string;
|
|
299
|
+
output: DreamerOutput | PhilosopherOutput;
|
|
300
|
+
workflowId: string;
|
|
301
|
+
createdAt: number;
|
|
302
|
+
} | null {
|
|
303
|
+
const row = this.db.prepare(`
|
|
304
|
+
SELECT workflow_id, stage, output_json, idempotency_key, created_at
|
|
305
|
+
FROM subagent_workflow_stage_outputs
|
|
306
|
+
WHERE idempotency_key = ?
|
|
307
|
+
`).get(idempotencyKey) as {
|
|
308
|
+
workflow_id: string;
|
|
309
|
+
stage: string;
|
|
310
|
+
output_json: string;
|
|
311
|
+
idempotency_key: string;
|
|
312
|
+
created_at: number;
|
|
313
|
+
} | undefined;
|
|
314
|
+
|
|
315
|
+
if (!row) return null;
|
|
316
|
+
|
|
317
|
+
return {
|
|
318
|
+
workflowId: row.workflow_id,
|
|
319
|
+
stage: row.stage,
|
|
320
|
+
output: JSON.parse(row.output_json) as DreamerOutput | PhilosopherOutput,
|
|
321
|
+
createdAt: row.created_at,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
deleteWorkflow(workflowId: string): void {
|
|
326
|
+
this.db.prepare('DELETE FROM subagent_workflows WHERE workflow_id = ?').run(workflowId);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OpenClawPluginService, OpenClawPluginServiceContext } from '../openclaw-sdk.js';
|
|
2
|
+
import { TrajectoryRegistry } from '../core/trajectory.js';
|
|
3
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
4
|
+
|
|
5
|
+
export const TrajectoryService: OpenClawPluginService = {
|
|
6
|
+
id: 'principles-disciple-trajectory',
|
|
7
|
+
start(ctx: OpenClawPluginServiceContext): void {
|
|
8
|
+
if (!ctx.workspaceDir) return;
|
|
9
|
+
WorkspaceContext.fromHookContext(ctx).trajectory;
|
|
10
|
+
},
|
|
11
|
+
stop(ctx: OpenClawPluginServiceContext): void {
|
|
12
|
+
if (!ctx.workspaceDir) return;
|
|
13
|
+
TrajectoryRegistry.dispose(ctx.workspaceDir);
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from '../openclaw-sdk.js';
|
|
1
2
|
import { loadModelIndex } from './model-index.js';
|
|
3
|
+
import { resolveWorkspaceDirFromApi } from '../core/path-resolver.js';
|
|
4
|
+
|
|
2
5
|
/**
|
|
3
6
|
* 深度指令模板 (必须与测试用例中的 quick/balanced/thorough 关键字对齐)
|
|
4
7
|
*/
|
|
@@ -7,37 +10,51 @@ const DEPTH_INSTRUCTIONS = {
|
|
|
7
10
|
2: 'Provide a balanced analysis with moderate depth.',
|
|
8
11
|
3: 'Provide an extremely thorough and exhaustive analysis.',
|
|
9
12
|
};
|
|
13
|
+
|
|
10
14
|
/**
|
|
11
15
|
* 构建反思提示词 (Critique Prompt) V2
|
|
12
|
-
*
|
|
16
|
+
*
|
|
13
17
|
* 严格按照测试用例的调用习惯和断言要求进行重写。
|
|
14
18
|
* 增加 OpenClaw 兼容性路径解析。
|
|
15
19
|
*/
|
|
16
|
-
export function buildCritiquePromptV2(
|
|
20
|
+
export function buildCritiquePromptV2(
|
|
21
|
+
params: {
|
|
22
|
+
context: string;
|
|
23
|
+
depth?: number;
|
|
24
|
+
model_id?: string;
|
|
25
|
+
workspaceDir?: string;
|
|
26
|
+
api?: OpenClawPluginApi;
|
|
27
|
+
}
|
|
28
|
+
): string {
|
|
17
29
|
const { context, depth = 2, model_id, workspaceDir, api } = params;
|
|
18
|
-
|
|
30
|
+
|
|
31
|
+
// 1. 确定工作区目录 (优先级:显式传入 > api.config > official API > api.resolvePath)
|
|
19
32
|
const effectiveWorkspaceDir = workspaceDir
|
|
20
|
-
|| api?.config?.workspaceDir
|
|
21
|
-
|| api
|
|
33
|
+
|| (api?.config?.workspaceDir as string)
|
|
34
|
+
|| resolveWorkspaceDirFromApi(api)
|
|
22
35
|
|| api?.resolvePath?.('.');
|
|
36
|
+
|
|
23
37
|
if (!effectiveWorkspaceDir) {
|
|
24
38
|
throw new Error('Workspace directory is required for deep reflection.');
|
|
25
39
|
}
|
|
40
|
+
|
|
26
41
|
// 2. 深度校验与警告日志
|
|
27
42
|
let validatedDepth = 2;
|
|
28
43
|
if (typeof depth === 'number') {
|
|
29
44
|
if (depth >= 1 && depth <= 3) {
|
|
30
45
|
validatedDepth = depth;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
46
|
+
} else {
|
|
33
47
|
if (api?.logger) {
|
|
34
48
|
api.logger.warn(`[DeepReflect] Invalid depth value ${depth}. Falling back to 2.`);
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
51
|
}
|
|
38
|
-
|
|
52
|
+
|
|
53
|
+
const depthMsg = DEPTH_INSTRUCTIONS[validatedDepth as keyof typeof DEPTH_INSTRUCTIONS];
|
|
54
|
+
|
|
39
55
|
// 3. 加载模型索引
|
|
40
56
|
const modelIndexMessage = loadModelIndex(effectiveWorkspaceDir, api);
|
|
57
|
+
|
|
41
58
|
// 4. 构造最终提示词
|
|
42
59
|
return `
|
|
43
60
|
# Role: Principal Critical Thinker & Strategist
|