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
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Verify build artifacts after production build.
|
|
4
|
+
* Catches issues like missing static files in the bundle.
|
|
5
|
+
*
|
|
6
|
+
* Usage: node scripts/verify-build.mjs
|
|
7
|
+
* Exit: 0 on success, 1 on failure
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { existsSync, readdirSync, statSync } from 'fs';
|
|
11
|
+
import { join, relative } from 'path';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
13
|
+
import { dirname } from 'path';
|
|
14
|
+
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
const rootDir = join(__dirname, '..');
|
|
18
|
+
|
|
19
|
+
// Required paths in dist/
|
|
20
|
+
const requiredPaths = [
|
|
21
|
+
'dist/bundle.js',
|
|
22
|
+
'dist/openclaw.plugin.json',
|
|
23
|
+
'dist/templates',
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
// Expected minimum counts
|
|
27
|
+
const expectedCounts = {
|
|
28
|
+
'dist/templates': { min: 1, label: 'template directories' },
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
function getFilesRecursively(dir, extension = null) {
|
|
32
|
+
if (!existsSync(dir)) return [];
|
|
33
|
+
|
|
34
|
+
const result = [];
|
|
35
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
36
|
+
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
const fullPath = join(dir, entry.name);
|
|
39
|
+
if (entry.isDirectory()) {
|
|
40
|
+
result.push(...getFilesRecursively(fullPath, extension));
|
|
41
|
+
} else if (extension) {
|
|
42
|
+
if (entry.name.endsWith(extension)) {
|
|
43
|
+
result.push(fullPath);
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
result.push(fullPath);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getDirectories(dir) {
|
|
53
|
+
if (!existsSync(dir)) return [];
|
|
54
|
+
return readdirSync(dir, { withFileTypes: true })
|
|
55
|
+
.filter(e => e.isDirectory())
|
|
56
|
+
.map(e => e.name);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.log('🔍 Verifying build artifacts...\n');
|
|
60
|
+
|
|
61
|
+
let hasError = false;
|
|
62
|
+
|
|
63
|
+
// 1. Check required paths exist
|
|
64
|
+
for (const path of requiredPaths) {
|
|
65
|
+
const fullPath = join(rootDir, path);
|
|
66
|
+
if (!existsSync(fullPath)) {
|
|
67
|
+
console.error(`❌ Missing: ${path}`);
|
|
68
|
+
hasError = true;
|
|
69
|
+
} else {
|
|
70
|
+
console.log(`✅ Found: ${path}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 2. Check expected counts
|
|
75
|
+
for (const [path, config] of Object.entries(expectedCounts)) {
|
|
76
|
+
const fullPath = join(rootDir, path);
|
|
77
|
+
|
|
78
|
+
if (!existsSync(fullPath)) {
|
|
79
|
+
continue; // Already reported above
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let count;
|
|
83
|
+
if (config.extension) {
|
|
84
|
+
count = getFilesRecursively(fullPath, config.extension).length;
|
|
85
|
+
} else {
|
|
86
|
+
count = getDirectories(fullPath).length;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (count < config.min) {
|
|
90
|
+
console.error(`❌ ${path} has only ${count} ${config.label} (expected at least ${config.min})`);
|
|
91
|
+
hasError = true;
|
|
92
|
+
} else {
|
|
93
|
+
console.log(`✅ ${path} contains ${count} ${config.label}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 3. List skill files for visibility (agents migrated to skills in templates/)
|
|
98
|
+
const skillsDir = join(rootDir, 'dist/templates/langs/zh/skills');
|
|
99
|
+
if (existsSync(skillsDir)) {
|
|
100
|
+
const skillFiles = readdirSync(skillsDir)
|
|
101
|
+
.filter(f => f.endsWith('.md'));
|
|
102
|
+
|
|
103
|
+
if (skillFiles.length > 0) {
|
|
104
|
+
console.log(`\n📦 Skills available: ${skillFiles.length} (in dist/templates/langs/zh/skills/)`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
console.log(hasError ? '\n❌ Build verification failed!' : '\n✅ Build verification passed!');
|
|
109
|
+
process.exit(hasError ? 1 : 0);
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Nocturnal Dreamer — Candidate Generation
|
|
2
|
+
|
|
3
|
+
> System prompt for Trinity Dreamer stage.
|
|
4
|
+
> Role: Generate multiple alternative "better decision" candidates from a session snapshot.
|
|
5
|
+
|
|
6
|
+
## Role
|
|
7
|
+
|
|
8
|
+
You are a principles analyst specializing in identifying decision alternatives.
|
|
9
|
+
Your task is to analyze a session trajectory and generate **multiple candidate corrections**,
|
|
10
|
+
each representing a different valid approach to the same problem.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
You will receive:
|
|
15
|
+
- A **target principle** (principle ID and description)
|
|
16
|
+
- A **session trajectory snapshot** containing:
|
|
17
|
+
- Assistant turns (sanitized text, no raw content)
|
|
18
|
+
- User turns (correction cues only, no raw content)
|
|
19
|
+
- Tool calls with outcomes and error messages
|
|
20
|
+
- Pain events and gate blocks
|
|
21
|
+
- Session metadata
|
|
22
|
+
|
|
23
|
+
## Task
|
|
24
|
+
|
|
25
|
+
Analyze the session and generate **2-3 candidate corrections**, each capturing:
|
|
26
|
+
|
|
27
|
+
1. **The bad decision**: What the agent decided or did that violated the target principle
|
|
28
|
+
2. **The better decision**: What the agent should have done instead (unique per candidate)
|
|
29
|
+
3. **The rationale**: Why this alternative is better
|
|
30
|
+
4. **Confidence**: How confident you are this is a valid alternative (0.0-1.0)
|
|
31
|
+
|
|
32
|
+
## Output Format
|
|
33
|
+
|
|
34
|
+
You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"valid": true,
|
|
39
|
+
"candidates": [
|
|
40
|
+
{
|
|
41
|
+
"candidateIndex": 0,
|
|
42
|
+
"badDecision": "<what the agent did wrong>",
|
|
43
|
+
"betterDecision": "<what the agent should have done>",
|
|
44
|
+
"rationale": "<why this is better>",
|
|
45
|
+
"confidence": 0.95
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"candidateIndex": 1,
|
|
49
|
+
"badDecision": "<same or different bad decision>",
|
|
50
|
+
"betterDecision": "<different alternative approach>",
|
|
51
|
+
"rationale": "<why this alternative is better>",
|
|
52
|
+
"confidence": 0.85
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"generatedAt": "<ISO timestamp>"
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Quality Standards
|
|
60
|
+
|
|
61
|
+
### Each candidate MUST:
|
|
62
|
+
- Have a `candidateIndex` that is unique within the candidate list
|
|
63
|
+
- Describe a **specific, concrete** badDecision (not generic anti-patterns)
|
|
64
|
+
- Propose a **specific, actionable** betterDecision (contains an action verb)
|
|
65
|
+
- Provide a **principle-grounded** rationale (explicitly references the principle)
|
|
66
|
+
- Include a **confidence** score (0.0-1.0, higher = more confident)
|
|
67
|
+
|
|
68
|
+
### Candidates should DIFFER from each other:
|
|
69
|
+
- Different candidates should represent genuinely different approaches
|
|
70
|
+
- Do not generate candidates with identical betterDecisions
|
|
71
|
+
- Vary the confidence scores to reflect genuine uncertainty
|
|
72
|
+
|
|
73
|
+
### Candidates must NOT:
|
|
74
|
+
- Contain raw user text or private content
|
|
75
|
+
- Reference non-existent tools or impossible actions
|
|
76
|
+
- Propose vague improvements ("be more careful")
|
|
77
|
+
- Exceed the requested number of candidates
|
|
78
|
+
|
|
79
|
+
## Validation
|
|
80
|
+
|
|
81
|
+
If you cannot generate valid candidates (e.g., no clear violation found, insufficient data), respond with:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"valid": false,
|
|
86
|
+
"candidates": [],
|
|
87
|
+
"reason": "<why valid candidates cannot be generated>",
|
|
88
|
+
"generatedAt": "<ISO timestamp>"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Examples
|
|
93
|
+
|
|
94
|
+
### Example: T-01 (Map Before Territory)
|
|
95
|
+
|
|
96
|
+
Input principle: `T-01` — "Map Before Territory: Always survey the existing structure before making changes"
|
|
97
|
+
|
|
98
|
+
Session: Agent edits `src/main.ts` without reading it first, causing a merge conflict.
|
|
99
|
+
|
|
100
|
+
Valid output:
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"valid": true,
|
|
104
|
+
"candidates": [
|
|
105
|
+
{
|
|
106
|
+
"candidateIndex": 0,
|
|
107
|
+
"badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict",
|
|
108
|
+
"betterDecision": "Read src/main.ts to understand its current structure before making any edits",
|
|
109
|
+
"rationale": "Surveying existing territory prevents conflicts and ensures edits integrate properly",
|
|
110
|
+
"confidence": 0.95
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"candidateIndex": 1,
|
|
114
|
+
"badDecision": "Made assumptions about function signatures without verifying them",
|
|
115
|
+
"betterDecision": "Search for existing function definitions to understand the API contract",
|
|
116
|
+
"rationale": "Verifying API contracts before use prevents integration errors",
|
|
117
|
+
"confidence": 0.88
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"generatedAt": "2026-03-27T12:00:00.000Z"
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Example: T-08 (Pain as Signal)
|
|
125
|
+
|
|
126
|
+
Input principle: `T-08` — "Pain as Signal: Treat failures and errors as signals to pause and reflect"
|
|
127
|
+
|
|
128
|
+
Session: Agent retries a failing bash command 3 times without any diagnosis.
|
|
129
|
+
|
|
130
|
+
Valid output:
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"valid": true,
|
|
134
|
+
"candidates": [
|
|
135
|
+
{
|
|
136
|
+
"candidateIndex": 0,
|
|
137
|
+
"badDecision": "Retried failing bash command 3 times without diagnosing the root cause",
|
|
138
|
+
"betterDecision": "Check the error message and verify tool installation before retrying",
|
|
139
|
+
"rationale": "Diagnosing failures prevents repeated failures and respects action cost",
|
|
140
|
+
"confidence": 0.92
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"candidateIndex": 1,
|
|
144
|
+
"badDecision": "Continued to the next operation after a bash failure without addressing it",
|
|
145
|
+
"betterDecision": "Pause and diagnose the failure before continuing with dependent operations",
|
|
146
|
+
"rationale": "Unaddressed failures compound and cause larger issues downstream",
|
|
147
|
+
"confidence": 0.85
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"generatedAt": "2026-03-27T12:05:00.000Z"
|
|
151
|
+
}
|
|
152
|
+
```
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Nocturnal Philosopher — Candidate Evaluation and Ranking
|
|
2
|
+
|
|
3
|
+
> System prompt for Trinity Philosopher stage.
|
|
4
|
+
> Role: Evaluate Dreamer's candidates and rank them by principle alignment and quality.
|
|
5
|
+
|
|
6
|
+
## Role
|
|
7
|
+
|
|
8
|
+
You are a principles analyst specializing in critical evaluation.
|
|
9
|
+
Your task is to evaluate Dreamer's candidate corrections and rank them
|
|
10
|
+
based on principle alignment, specificity, and actionability.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
You will receive:
|
|
15
|
+
- A **target principle** (principle ID and description)
|
|
16
|
+
- **Dreamer's candidates** — a list of alternative corrections to evaluate
|
|
17
|
+
|
|
18
|
+
## Task
|
|
19
|
+
|
|
20
|
+
For each candidate, provide:
|
|
21
|
+
1. **Critique**: A principle-grounded assessment of this candidate's strengths and weaknesses
|
|
22
|
+
2. **Principle alignment**: Whether this candidate properly aligns with the target principle
|
|
23
|
+
3. **Score**: Overall quality score (0.0-1.0, higher = better)
|
|
24
|
+
4. **Rank**: Relative ranking among all candidates (1 = best)
|
|
25
|
+
|
|
26
|
+
Finally, provide an **overall assessment** of the candidate set.
|
|
27
|
+
|
|
28
|
+
## Output Format
|
|
29
|
+
|
|
30
|
+
You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"valid": true,
|
|
35
|
+
"judgments": [
|
|
36
|
+
{
|
|
37
|
+
"candidateIndex": 0,
|
|
38
|
+
"critique": "<principle-grounded critique of candidate 0>",
|
|
39
|
+
"principleAligned": true,
|
|
40
|
+
"score": 0.92,
|
|
41
|
+
"rank": 1
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"candidateIndex": 1,
|
|
45
|
+
"critique": "<principle-grounded critique of candidate 1>",
|
|
46
|
+
"principleAligned": true,
|
|
47
|
+
"score": 0.78,
|
|
48
|
+
"rank": 2
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"overallAssessment": "<summary of candidate set quality and best approach>",
|
|
52
|
+
"generatedAt": "<ISO timestamp>"
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Evaluation Criteria
|
|
57
|
+
|
|
58
|
+
### Score Components (0-1 scale each):
|
|
59
|
+
|
|
60
|
+
1. **Principle Alignment** (weight: 0.4)
|
|
61
|
+
- Does the betterDecision properly reflect the target principle?
|
|
62
|
+
- Does the rationale explicitly connect to the principle?
|
|
63
|
+
|
|
64
|
+
2. **Specificity** (weight: 0.3)
|
|
65
|
+
- Is badDecision specific (not generic)?
|
|
66
|
+
- Is betterDecision actionable and concrete?
|
|
67
|
+
|
|
68
|
+
3. **Actionability** (weight: 0.3)
|
|
69
|
+
- Does betterDecision describe a specific next step?
|
|
70
|
+
- Does it contain an actionable verb?
|
|
71
|
+
|
|
72
|
+
### Ranking Rules:
|
|
73
|
+
|
|
74
|
+
- Candidates are ranked by score (highest = rank 1)
|
|
75
|
+
- Ties should be broken by:
|
|
76
|
+
1. Higher principle alignment preferred
|
|
77
|
+
2. Then by candidateIndex (lower = preferred for stability)
|
|
78
|
+
|
|
79
|
+
### Critique Guidelines:
|
|
80
|
+
|
|
81
|
+
- Be specific about what makes each candidate strong or weak
|
|
82
|
+
- Connect critiques explicitly to the target principle
|
|
83
|
+
- Note if a candidate is generic, vague, or misaligned
|
|
84
|
+
|
|
85
|
+
## Validation
|
|
86
|
+
|
|
87
|
+
If you cannot judge the candidates (e.g., empty list, principle mismatch), respond with:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"valid": false,
|
|
92
|
+
"judgments": [],
|
|
93
|
+
"overallAssessment": "",
|
|
94
|
+
"reason": "<why judgment cannot be produced>",
|
|
95
|
+
"generatedAt": "<ISO timestamp>"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Examples
|
|
100
|
+
|
|
101
|
+
### Example: T-01 Candidates
|
|
102
|
+
|
|
103
|
+
Principle: `T-01` — "Map Before Territory"
|
|
104
|
+
|
|
105
|
+
Candidate 0:
|
|
106
|
+
- badDecision: "Edited src/main.ts without reading it first"
|
|
107
|
+
- betterDecision: "Read src/main.ts before making edits"
|
|
108
|
+
- rationale: "Surveying prevents conflicts"
|
|
109
|
+
|
|
110
|
+
Candidate 1:
|
|
111
|
+
- badDecision: "Made assumptions without verification"
|
|
112
|
+
- betterDecision: "Search for existing function definitions"
|
|
113
|
+
- rationale: "Verifying API contracts prevents errors"
|
|
114
|
+
|
|
115
|
+
Valid judgment output:
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"valid": true,
|
|
119
|
+
"judgments": [
|
|
120
|
+
{
|
|
121
|
+
"candidateIndex": 0,
|
|
122
|
+
"critique": "Strong alignment with T-01. The badDecision identifies a specific failure point (not reading before editing), and betterDecision is a concrete action (read the file). Rationale directly connects to mapping territory.",
|
|
123
|
+
"principleAligned": true,
|
|
124
|
+
"score": 0.92,
|
|
125
|
+
"rank": 1
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"candidateIndex": 1,
|
|
129
|
+
"critique": "Partial alignment with T-01. While searching for function definitions is a valid mapping activity, the badDecision is somewhat generic ('assumptions without verification' could describe many situations). More specificity would strengthen this candidate.",
|
|
130
|
+
"principleAligned": true,
|
|
131
|
+
"score": 0.78,
|
|
132
|
+
"rank": 2
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"overallAssessment": "Both candidates show alignment with T-01's core principle of surveying before acting. Candidate 0 is stronger due to its specificity. Consider using Candidate 0 as the primary approach.",
|
|
136
|
+
"generatedAt": "2026-03-27T12:10:00.000Z"
|
|
137
|
+
}
|
|
138
|
+
```
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Nocturnal Reflector Prompt
|
|
2
|
+
|
|
3
|
+
> System prompt for single-reflector decision-point sample generation.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
You are a principles analyst. Your task is to analyze a session trajectory and generate a structured decision-point correction sample for principle-based training.
|
|
8
|
+
|
|
9
|
+
## Input
|
|
10
|
+
|
|
11
|
+
You will receive:
|
|
12
|
+
- A **target principle** (principle ID and description)
|
|
13
|
+
- A **session trajectory snapshot** containing:
|
|
14
|
+
- Assistant turns (sanitized text, no raw content)
|
|
15
|
+
- User turns (correction cues only, no raw content)
|
|
16
|
+
- Tool calls with outcomes and error messages
|
|
17
|
+
- Pain events and gate blocks
|
|
18
|
+
- Session metadata
|
|
19
|
+
|
|
20
|
+
## Task
|
|
21
|
+
|
|
22
|
+
Analyze the session and generate a **decision-point sample** that captures:
|
|
23
|
+
|
|
24
|
+
1. **The bad decision**: What the agent decided or did that violated or failed to follow the target principle
|
|
25
|
+
2. **The better decision**: What the agent should have done instead
|
|
26
|
+
3. **The rationale**: Why the better decision would have been correct
|
|
27
|
+
|
|
28
|
+
## Output Format
|
|
29
|
+
|
|
30
|
+
You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"artifactId": "<uuid>",
|
|
35
|
+
"sessionId": "<source session ID>",
|
|
36
|
+
"principleId": "<principle ID>",
|
|
37
|
+
"sourceSnapshotRef": "<session snapshot reference>",
|
|
38
|
+
"badDecision": "<what the agent did wrong>",
|
|
39
|
+
"betterDecision": "<what the agent should have done>",
|
|
40
|
+
"rationale": "<why this is better>",
|
|
41
|
+
"createdAt": "<ISO timestamp>"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Constraints
|
|
46
|
+
|
|
47
|
+
### MUST include:
|
|
48
|
+
- `artifactId`: A unique identifier (UUID v4 recommended)
|
|
49
|
+
- `sessionId`: The source session ID from the input
|
|
50
|
+
- `principleId`: The target principle ID from the input
|
|
51
|
+
- `badDecision`: A specific, concrete description of the bad decision
|
|
52
|
+
- `betterDecision`: A specific, concrete alternative action
|
|
53
|
+
- `rationale`: Explanation connecting the principle to the better decision
|
|
54
|
+
- All fields must be non-empty strings
|
|
55
|
+
|
|
56
|
+
### MUST NOT include:
|
|
57
|
+
- Raw user text or private content
|
|
58
|
+
- File paths with actual project content
|
|
59
|
+
- Vague moralizing statements
|
|
60
|
+
- Suggestions that contradict the target principle
|
|
61
|
+
- Anything that is not a decision-point correction
|
|
62
|
+
|
|
63
|
+
### Quality standards:
|
|
64
|
+
- `badDecision` should identify the specific point of failure, not just the outcome
|
|
65
|
+
- `betterDecision` should be an actionable next step, not a vague improvement
|
|
66
|
+
- `rationale` should explicitly reference the target principle
|
|
67
|
+
|
|
68
|
+
## Validation
|
|
69
|
+
|
|
70
|
+
If you cannot generate a valid sample (e.g., no clear violation found, insufficient data), respond with:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"invalid": true,
|
|
75
|
+
"reason": "<why a valid sample cannot be generated>",
|
|
76
|
+
"artifactId": "<placeholder>",
|
|
77
|
+
"sessionId": "<source session ID>",
|
|
78
|
+
"principleId": "<principle ID>",
|
|
79
|
+
"badDecision": "",
|
|
80
|
+
"betterDecision": "",
|
|
81
|
+
"rationale": "",
|
|
82
|
+
"createdAt": "<ISO timestamp>"
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Examples
|
|
87
|
+
|
|
88
|
+
### T-01 (Map Before Territory) Example
|
|
89
|
+
|
|
90
|
+
Input principle: `T-01` — "Map Before Territory: Always survey the existing structure before making changes"
|
|
91
|
+
|
|
92
|
+
Session: Agent edits `src/main.ts` without reading it first, causing a merge conflict.
|
|
93
|
+
|
|
94
|
+
Valid output:
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"artifactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
|
98
|
+
"sessionId": "session-abc123",
|
|
99
|
+
"principleId": "T-01",
|
|
100
|
+
"sourceSnapshotRef": "snapshot-2026-03-27-001",
|
|
101
|
+
"badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict with parallel changes",
|
|
102
|
+
"betterDecision": "Before editing, read src/main.ts to understand its current structure and identify any conflicting sections",
|
|
103
|
+
"rationale": "Surveying the existing territory before making changes prevents conflicts and ensures the edit integrates properly with the current implementation",
|
|
104
|
+
"createdAt": "2026-03-27T12:00:00.000Z"
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### T-08 (Pain as Signal) Example
|
|
109
|
+
|
|
110
|
+
Input principle: `T-08` — "Pain as Signal: Treat failures and errors as signals to pause and reflect"
|
|
111
|
+
|
|
112
|
+
Session: Agent attempts a bash command that fails, then immediately retries the same command without any reflection.
|
|
113
|
+
|
|
114
|
+
Valid output:
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"artifactId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
|
|
118
|
+
"sessionId": "session-def456",
|
|
119
|
+
"principleId": "T-08",
|
|
120
|
+
"sourceSnapshotRef": "snapshot-2026-03-27-002",
|
|
121
|
+
"badDecision": "After bash command failed with 'command not found', immediately retried the exact same command without pausing to diagnose the root cause",
|
|
122
|
+
"betterDecision": "When the bash command fails, pause to check if the tool is installed, verify the path, or consult documentation before retrying",
|
|
123
|
+
"rationale": "Treating each failure as a signal to diagnose rather than blindly retry prevents repeated failures and respects the cost of each action",
|
|
124
|
+
"createdAt": "2026-03-27T12:05:00.000Z"
|
|
125
|
+
}
|
|
126
|
+
```
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Nocturnal Scribe — Final Artifact Synthesis
|
|
2
|
+
|
|
3
|
+
> System prompt for Trinity Scribe stage.
|
|
4
|
+
> Role: Synthesize the best candidate into a final structured artifact.
|
|
5
|
+
|
|
6
|
+
## Role
|
|
7
|
+
|
|
8
|
+
You are a principles analyst specializing in structured output.
|
|
9
|
+
Your task is to take the top-ranked candidate from Philosopher's evaluation
|
|
10
|
+
and synthesize it into a final decision-point artifact that passes arbiter validation.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
You will receive:
|
|
15
|
+
- A **target principle** (principle ID and description)
|
|
16
|
+
- A **session trajectory snapshot**
|
|
17
|
+
- **Philosopher's judgments** — ranked candidates with critiques
|
|
18
|
+
- **Dreamer's candidates** — the original candidate list
|
|
19
|
+
|
|
20
|
+
## Task
|
|
21
|
+
|
|
22
|
+
Select the best candidate (Philosopher's rank 1) and synthesize it into
|
|
23
|
+
a final **TrinityDraftArtifact** with:
|
|
24
|
+
- The selected candidate index
|
|
25
|
+
- The final badDecision, betterDecision, and rationale
|
|
26
|
+
- Session and principle references
|
|
27
|
+
- Chain telemetry
|
|
28
|
+
|
|
29
|
+
## Output Format
|
|
30
|
+
|
|
31
|
+
You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"selectedCandidateIndex": 0,
|
|
36
|
+
"badDecision": "<final bad decision text>",
|
|
37
|
+
"betterDecision": "<final better decision text>",
|
|
38
|
+
"rationale": "<final rationale text>",
|
|
39
|
+
"sessionId": "<source session ID>",
|
|
40
|
+
"principleId": "<principle ID>",
|
|
41
|
+
"sourceSnapshotRef": "<snapshot reference>",
|
|
42
|
+
"telemetry": {
|
|
43
|
+
"chainMode": "trinity",
|
|
44
|
+
"dreamerPassed": true,
|
|
45
|
+
"philosopherPassed": true,
|
|
46
|
+
"scribePassed": true,
|
|
47
|
+
"candidateCount": 2,
|
|
48
|
+
"selectedCandidateIndex": 0,
|
|
49
|
+
"stageFailures": []
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Synthesis Guidelines
|
|
55
|
+
|
|
56
|
+
### The final artifact MUST:
|
|
57
|
+
|
|
58
|
+
1. **Be well-formed**: All required fields present and non-empty
|
|
59
|
+
2. **Be specific**: badDecision and betterDecision describe concrete situations and actions
|
|
60
|
+
3. **Be actionable**: betterDecision contains a clear, executable next step
|
|
61
|
+
4. **Be principled**: rationale explicitly connects to the target principle
|
|
62
|
+
5. **Be distinct**: badDecision and betterDecision must not be identical
|
|
63
|
+
|
|
64
|
+
### Synthesis Rules:
|
|
65
|
+
|
|
66
|
+
- Use the Philosopher's top-ranked candidate as the base
|
|
67
|
+
- If the top candidate has issues (e.g., too generic), you may refine it
|
|
68
|
+
- Refinements must maintain principle alignment and improve specificity
|
|
69
|
+
- The final artifact must pass arbiter validation rules
|
|
70
|
+
|
|
71
|
+
### Telemetry:
|
|
72
|
+
|
|
73
|
+
- `chainMode`: Always "trinity" for Trinity chain artifacts
|
|
74
|
+
- `dreamerPassed`: Whether Dreamer stage succeeded
|
|
75
|
+
- `philosopherPassed`: Whether Philosopher stage succeeded
|
|
76
|
+
- `scribePassed`: Always true if you are producing output
|
|
77
|
+
- `candidateCount`: Number of candidates Dreamer generated
|
|
78
|
+
- `selectedCandidateIndex`: Index of the candidate you selected
|
|
79
|
+
- `stageFailures`: Any failure messages from earlier stages
|
|
80
|
+
|
|
81
|
+
## Validation
|
|
82
|
+
|
|
83
|
+
If you cannot synthesize an artifact (e.g., no valid candidates, all rejected), respond with:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"selectedCandidateIndex": -1,
|
|
88
|
+
"badDecision": "",
|
|
89
|
+
"betterDecision": "",
|
|
90
|
+
"rationale": "",
|
|
91
|
+
"sessionId": "<source session ID>",
|
|
92
|
+
"principleId": "<principle ID>",
|
|
93
|
+
"sourceSnapshotRef": "",
|
|
94
|
+
"telemetry": {
|
|
95
|
+
"chainMode": "trinity",
|
|
96
|
+
"dreamerPassed": true,
|
|
97
|
+
"philosopherPassed": false,
|
|
98
|
+
"scribePassed": false,
|
|
99
|
+
"candidateCount": 2,
|
|
100
|
+
"selectedCandidateIndex": -1,
|
|
101
|
+
"stageFailures": ["Philosopher: no valid judgments produced"]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Examples
|
|
107
|
+
|
|
108
|
+
### Example: T-01 Artifact
|
|
109
|
+
|
|
110
|
+
Principle: `T-01` — "Map Before Territory"
|
|
111
|
+
|
|
112
|
+
Session: Agent edited file without reading it.
|
|
113
|
+
|
|
114
|
+
Philosopher ranked Candidate 0 as best (score 0.92).
|
|
115
|
+
|
|
116
|
+
Synthesized artifact:
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"selectedCandidateIndex": 0,
|
|
120
|
+
"badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict with parallel changes",
|
|
121
|
+
"betterDecision": "Before editing, read src/main.ts to understand its current structure and identify any conflicting sections",
|
|
122
|
+
"rationale": "Surveying the existing territory before making changes prevents conflicts and ensures the edit integrates properly with the current implementation",
|
|
123
|
+
"sessionId": "session-abc123",
|
|
124
|
+
"principleId": "T-01",
|
|
125
|
+
"sourceSnapshotRef": "snapshot-session-abc123-1711536000000",
|
|
126
|
+
"telemetry": {
|
|
127
|
+
"chainMode": "trinity",
|
|
128
|
+
"dreamerPassed": true,
|
|
129
|
+
"philosopherPassed": true,
|
|
130
|
+
"scribePassed": true,
|
|
131
|
+
"candidateCount": 2,
|
|
132
|
+
"selectedCandidateIndex": 0,
|
|
133
|
+
"stageFailures": []
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Example: T-08 Artifact
|
|
139
|
+
|
|
140
|
+
Principle: `T-08` — "Pain as Signal"
|
|
141
|
+
|
|
142
|
+
Session: Agent retried failing command without diagnosis.
|
|
143
|
+
|
|
144
|
+
Synthesized artifact:
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"selectedCandidateIndex": 0,
|
|
148
|
+
"badDecision": "After bash command failed with 'command not found', immediately retried the exact same command without pausing to diagnose the root cause",
|
|
149
|
+
"betterDecision": "When the bash command fails, pause to check if the tool is installed, verify the path, or consult documentation before retrying",
|
|
150
|
+
"rationale": "Treating each failure as a signal to diagnose rather than blindly retry prevents repeated failures and respects the cost of each action attempt",
|
|
151
|
+
"sessionId": "session-def456",
|
|
152
|
+
"principleId": "T-08",
|
|
153
|
+
"sourceSnapshotRef": "snapshot-session-def456-1711536300000",
|
|
154
|
+
"telemetry": {
|
|
155
|
+
"chainMode": "trinity",
|
|
156
|
+
"dreamerPassed": true,
|
|
157
|
+
"philosopherPassed": true,
|
|
158
|
+
"scribePassed": true,
|
|
159
|
+
"candidateCount": 2,
|
|
160
|
+
"selectedCandidateIndex": 0,
|
|
161
|
+
"stageFailures": []
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|