principles-disciple 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ADVANCED_CONFIG_ZH.md +97 -0
- package/AGENT_INSTALL.md +173 -0
- package/AGENT_INSTALL_EN.md +173 -0
- package/INSTALL.md +256 -0
- package/SKILL.md +63 -0
- package/docs/COMMAND_REFERENCE.md +76 -0
- package/docs/COMMAND_REFERENCE_EN.md +79 -0
- package/esbuild.config.js +75 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +13 -15
- package/scripts/build-web.mjs +46 -0
- package/scripts/install-dependencies.cjs +47 -0
- package/scripts/sync-plugin.mjs +802 -0
- package/scripts/verify-build.mjs +109 -0
- package/src/agents/nocturnal-dreamer.md +152 -0
- package/src/agents/nocturnal-philosopher.md +138 -0
- package/src/agents/nocturnal-reflector.md +126 -0
- package/src/agents/nocturnal-scribe.md +164 -0
- package/src/commands/capabilities.ts +85 -0
- package/{dist/commands/context.js → src/commands/context.ts} +78 -38
- package/src/commands/evolution-status.ts +146 -0
- package/src/commands/export.ts +111 -0
- package/src/commands/focus.ts +533 -0
- package/src/commands/nocturnal-review.ts +311 -0
- package/src/commands/nocturnal-rollout.ts +763 -0
- package/src/commands/nocturnal-train.ts +1002 -0
- package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
- package/src/commands/principle-rollback.ts +27 -0
- package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
- package/src/commands/samples.ts +60 -0
- package/src/commands/strategy.ts +38 -0
- package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
- package/src/commands/workflow-debug.ts +128 -0
- package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
- package/src/config/errors.ts +163 -0
- package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
- package/src/constants/diagnostician.ts +66 -0
- package/src/constants/tools.ts +62 -0
- package/src/core/adaptive-thresholds.ts +476 -0
- package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
- package/{dist/core/config.js → src/core/config.ts} +158 -46
- package/src/core/control-ui-db.ts +435 -0
- package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
- package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
- package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
- package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
- package/src/core/empathy-keyword-matcher.ts +327 -0
- package/src/core/empathy-types.ts +218 -0
- package/src/core/event-log.ts +544 -0
- package/src/core/evolution-engine.ts +612 -0
- package/src/core/evolution-logger.ts +353 -0
- package/src/core/evolution-migration.ts +77 -0
- package/src/core/evolution-reducer.ts +731 -0
- package/src/core/evolution-types.ts +456 -0
- package/src/core/external-training-contract.ts +527 -0
- package/src/core/focus-history.ts +1458 -0
- package/src/core/hygiene/tracker.ts +117 -0
- package/{dist/core/init.js → src/core/init.ts} +39 -26
- package/src/core/local-worker-routing.ts +617 -0
- package/{dist/core/migration.js → src/core/migration.ts} +18 -11
- package/src/core/model-deployment-registry.ts +722 -0
- package/src/core/model-training-registry.ts +813 -0
- package/src/core/nocturnal-arbiter.ts +706 -0
- package/src/core/nocturnal-candidate-scoring.ts +392 -0
- package/src/core/nocturnal-compliance.ts +1075 -0
- package/src/core/nocturnal-dataset.ts +668 -0
- package/src/core/nocturnal-executability.ts +428 -0
- package/src/core/nocturnal-export.ts +390 -0
- package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
- package/src/core/nocturnal-trajectory-extractor.ts +484 -0
- package/src/core/nocturnal-trinity.ts +1384 -0
- package/src/core/pain.ts +122 -0
- package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
- package/{dist/core/paths.js → src/core/paths.ts} +13 -4
- package/src/core/principle-training-state.ts +450 -0
- package/src/core/profile.ts +226 -0
- package/src/core/promotion-gate.ts +822 -0
- package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
- package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +185 -63
- package/src/core/shadow-observation-registry.ts +534 -0
- package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
- package/src/core/thinking-models.ts +217 -0
- package/src/core/training-program.ts +630 -0
- package/src/core/trajectory-types.ts +243 -0
- package/src/core/trajectory.ts +1673 -0
- package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
- package/src/hooks/bash-risk.ts +171 -0
- package/src/hooks/edit-verification.ts +295 -0
- package/src/hooks/gate-block-helper.ts +160 -0
- package/src/hooks/gate.ts +210 -0
- package/src/hooks/gfi-gate.ts +177 -0
- package/src/hooks/lifecycle.ts +326 -0
- package/{dist/hooks/llm.js → src/hooks/llm.ts} +166 -139
- package/src/hooks/message-sanitize.ts +45 -0
- package/src/hooks/pain.ts +384 -0
- package/src/hooks/progressive-trust-gate.ts +174 -0
- package/src/hooks/prompt.ts +920 -0
- package/src/hooks/subagent.ts +207 -0
- package/src/hooks/thinking-checkpoint.ts +73 -0
- package/src/hooks/trajectory-collector.ts +290 -0
- package/src/http/principles-console-route.ts +716 -0
- package/src/i18n/commands.ts +117 -0
- package/src/index.ts +694 -0
- package/src/service/central-database.ts +831 -0
- package/src/service/control-ui-query-service.ts +888 -0
- package/src/service/evolution-query-service.ts +405 -0
- package/src/service/evolution-worker.ts +1646 -0
- package/src/service/health-query-service.ts +836 -0
- package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +263 -36
- package/src/service/nocturnal-service.ts +1015 -0
- package/src/service/nocturnal-target-selector.ts +532 -0
- package/src/service/phase3-input-filter.ts +237 -0
- package/src/service/runtime-summary-service.ts +757 -0
- package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
- package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
- package/src/service/subagent-workflow/index.ts +51 -0
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
- package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
- package/src/service/subagent-workflow/types.ts +378 -0
- package/src/service/subagent-workflow/workflow-store.ts +328 -0
- package/src/service/trajectory-service.ts +15 -0
- package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
- package/src/tools/deep-reflect.ts +349 -0
- package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
- package/src/types/event-types.ts +453 -0
- package/src/types/hygiene-types.ts +31 -0
- package/src/types/principle-tree-schema.ts +244 -0
- package/src/types/runtime-summary.ts +49 -0
- package/src/types.ts +74 -0
- package/src/utils/file-lock.ts +391 -0
- package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
- package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
- package/src/utils/io.ts +110 -0
- package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
- package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
- package/src/utils/subagent-probe.ts +94 -0
- package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
- package/templates/pain_settings.json +2 -1
- package/tests/README.md +120 -0
- package/tests/build-artifacts.test.ts +111 -0
- package/tests/commands/evolution-status.test.ts +222 -0
- package/tests/commands/evolver.test.ts +22 -0
- package/tests/commands/export.test.ts +78 -0
- package/tests/commands/nocturnal-review.test.ts +448 -0
- package/tests/commands/nocturnal-train.test.ts +97 -0
- package/tests/commands/pain.test.ts +108 -0
- package/tests/commands/samples.test.ts +65 -0
- package/tests/commands/strategy.test.ts +34 -0
- package/tests/commands/thinking-os.test.ts +88 -0
- package/tests/core/adaptive-thresholds.test.ts +261 -0
- package/tests/core/config-service.test.ts +89 -0
- package/tests/core/config.test.ts +90 -0
- package/tests/core/control-ui-db.test.ts +75 -0
- package/tests/core/core-template-guidance.test.ts +21 -0
- package/tests/core/detection-funnel.test.ts +63 -0
- package/tests/core/detection-service.test.ts +50 -0
- package/tests/core/dictionary-service.test.ts +116 -0
- package/tests/core/dictionary.test.ts +168 -0
- package/tests/core/empathy-keyword-matcher.test.ts +209 -0
- package/tests/core/event-log.test.ts +181 -0
- package/tests/core/evolution-e2e.test.ts +58 -0
- package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
- package/tests/core/evolution-engine.test.ts +562 -0
- package/tests/core/evolution-logger.test.ts +148 -0
- package/tests/core/evolution-migration.test.ts +50 -0
- package/tests/core/evolution-paths.test.ts +21 -0
- package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
- package/tests/core/evolution-reducer.test.ts +180 -0
- package/tests/core/evolution-types-loop.test.ts +48 -0
- package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
- package/tests/core/external-training-contract.test.ts +463 -0
- package/tests/core/focus-history.test.ts +682 -0
- package/tests/core/init-flatten.test.ts +69 -0
- package/tests/core/init-refactor.test.ts +87 -0
- package/tests/core/init-v1.3.test.ts +46 -0
- package/tests/core/init.test.ts +190 -0
- package/tests/core/local-worker-routing.test.ts +757 -0
- package/tests/core/migration.test.ts +84 -0
- package/tests/core/model-deployment-registry.test.ts +845 -0
- package/tests/core/model-training-registry.test.ts +889 -0
- package/tests/core/nocturnal-arbiter.test.ts +494 -0
- package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
- package/tests/core/nocturnal-compliance.test.ts +646 -0
- package/tests/core/nocturnal-dataset.test.ts +892 -0
- package/tests/core/nocturnal-executability.test.ts +357 -0
- package/tests/core/nocturnal-export.test.ts +462 -0
- package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
- package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
- package/tests/core/nocturnal-trinity.test.ts +953 -0
- package/tests/core/pain.test.ts +33 -0
- package/tests/core/path-resolver.test.ts +57 -0
- package/tests/core/paths-refactor.test.ts +42 -0
- package/tests/core/phase7-rollout-integration.test.ts +477 -0
- package/tests/core/principle-training-state.test.ts +712 -0
- package/tests/core/profile.test.ts +56 -0
- package/tests/core/promotion-gate.test.ts +556 -0
- package/tests/core/risk-calculator.test.ts +168 -0
- package/tests/core/session-tracker.test.ts +191 -0
- package/tests/core/training-program.test.ts +472 -0
- package/tests/core/trajectory.test.ts +265 -0
- package/tests/core/workspace-context-factory.test.ts +18 -0
- package/tests/core/workspace-context.test.ts +134 -0
- package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
- package/tests/fixtures/production-compatibility.test.ts +147 -0
- package/tests/fixtures/production-mock-generator.ts +282 -0
- package/tests/hooks/bash-risk-integration.test.ts +137 -0
- package/tests/hooks/bash-risk.test.ts +81 -0
- package/tests/hooks/edit-verification.test.ts +678 -0
- package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
- package/tests/hooks/gate-edit-verification.test.ts +435 -0
- package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
- package/tests/hooks/gate.test.ts +271 -0
- package/tests/hooks/gfi-gate-unit.test.ts +422 -0
- package/tests/hooks/gfi-gate.test.ts +669 -0
- package/tests/hooks/lifecycle.test.ts +248 -0
- package/tests/hooks/llm.test.ts +308 -0
- package/tests/hooks/message-sanitize.test.ts +36 -0
- package/tests/hooks/pain.test.ts +141 -0
- package/tests/hooks/progressive-trust-gate.test.ts +277 -0
- package/tests/hooks/prompt.test.ts +1411 -0
- package/tests/hooks/subagent.test.ts +467 -0
- package/tests/hooks/thinking-gate.test.ts +313 -0
- package/tests/http/principles-console-route.test.ts +140 -0
- package/tests/hygiene-tracker.test.ts +77 -0
- package/tests/index.integration.test.ts +179 -0
- package/tests/index.shadow-routing.integration.test.ts +140 -0
- package/tests/index.test.ts +9 -0
- package/tests/integration/empathy-workflow-integration.test.ts +627 -0
- package/tests/service/control-ui-query-service.test.ts +121 -0
- package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
- package/tests/service/evolution-worker.test.ts +585 -0
- package/tests/service/nocturnal-runtime.test.ts +470 -0
- package/tests/service/nocturnal-service.test.ts +577 -0
- package/tests/service/nocturnal-target-selector.test.ts +615 -0
- package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
- package/tests/service/phase3-input-filter.test.ts +289 -0
- package/tests/service/runtime-summary-service.test.ts +919 -0
- package/tests/task-compliance.test.ts +166 -0
- package/tests/test-utils.ts +48 -0
- package/tests/tools/critique-prompt.test.ts +260 -0
- package/tests/tools/deep-reflect.test.ts +232 -0
- package/tests/tools/model-index.test.ts +246 -0
- package/tests/ui/app.test.tsx +114 -0
- package/tests/utils/file-lock.test.ts +407 -0
- package/tests/utils/hashing.test.ts +32 -0
- package/tests/utils/io.test.ts +39 -0
- package/tests/utils/nlp.test.ts +53 -0
- package/tests/utils/plugin-logger.test.ts +156 -0
- package/tsconfig.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/ui/src/App.tsx +45 -0
- package/ui/src/api.ts +216 -0
- package/ui/src/charts.tsx +586 -0
- package/ui/src/components/ErrorState.tsx +6 -0
- package/ui/src/components/Loading.tsx +13 -0
- package/ui/src/components/ProtectedRoute.tsx +12 -0
- package/ui/src/components/Shell.tsx +91 -0
- package/ui/src/components/WorkspaceConfig.tsx +146 -0
- package/ui/src/components/index.ts +5 -0
- package/ui/src/context/auth.tsx +80 -0
- package/ui/src/context/theme.tsx +66 -0
- package/ui/src/hooks/useAutoRefresh.ts +39 -0
- package/ui/src/i18n/ui.ts +363 -0
- package/ui/src/main.tsx +16 -0
- package/ui/src/pages/EvolutionPage.tsx +352 -0
- package/ui/src/pages/FeedbackPage.tsx +140 -0
- package/ui/src/pages/GateMonitorPage.tsx +136 -0
- package/ui/src/pages/LoginPage.tsx +88 -0
- package/ui/src/pages/OverviewPage.tsx +238 -0
- package/ui/src/pages/SamplesPage.tsx +174 -0
- package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
- package/ui/src/styles.css +1661 -0
- package/ui/src/types.ts +368 -0
- package/ui/src/utils/format.ts +15 -0
- package/vitest.config.ts +23 -0
- package/dist/commands/capabilities.d.ts +0 -3
- package/dist/commands/capabilities.js +0 -73
- package/dist/commands/context.d.ts +0 -5
- package/dist/commands/evolution-status.d.ts +0 -4
- package/dist/commands/evolution-status.js +0 -117
- package/dist/commands/evolver.d.ts +0 -9
- package/dist/commands/evolver.js +0 -26
- package/dist/commands/export.d.ts +0 -2
- package/dist/commands/export.js +0 -98
- package/dist/commands/focus.d.ts +0 -14
- package/dist/commands/focus.js +0 -457
- package/dist/commands/nocturnal-review.d.ts +0 -24
- package/dist/commands/nocturnal-review.js +0 -265
- package/dist/commands/nocturnal-rollout.d.ts +0 -27
- package/dist/commands/nocturnal-rollout.js +0 -671
- package/dist/commands/nocturnal-train.d.ts +0 -25
- package/dist/commands/nocturnal-train.js +0 -919
- package/dist/commands/pain.d.ts +0 -5
- package/dist/commands/principle-rollback.d.ts +0 -4
- package/dist/commands/principle-rollback.js +0 -22
- package/dist/commands/rollback.d.ts +0 -19
- package/dist/commands/samples.d.ts +0 -2
- package/dist/commands/samples.js +0 -55
- package/dist/commands/strategy.d.ts +0 -3
- package/dist/commands/strategy.js +0 -29
- package/dist/commands/thinking-os.d.ts +0 -2
- package/dist/config/defaults/runtime.d.ts +0 -40
- package/dist/config/errors.d.ts +0 -84
- package/dist/config/errors.js +0 -94
- package/dist/config/index.js +0 -7
- package/dist/constants/diagnostician.d.ts +0 -12
- package/dist/constants/diagnostician.js +0 -56
- package/dist/constants/tools.d.ts +0 -17
- package/dist/constants/tools.js +0 -54
- package/dist/core/adaptive-thresholds.d.ts +0 -186
- package/dist/core/adaptive-thresholds.js +0 -300
- package/dist/core/config-service.d.ts +0 -15
- package/dist/core/config.d.ts +0 -127
- package/dist/core/control-ui-db.d.ts +0 -95
- package/dist/core/control-ui-db.js +0 -292
- package/dist/core/detection-funnel.d.ts +0 -33
- package/dist/core/detection-service.d.ts +0 -15
- package/dist/core/dictionary-service.d.ts +0 -15
- package/dist/core/dictionary.d.ts +0 -38
- package/dist/core/event-log.d.ts +0 -82
- package/dist/core/event-log.js +0 -463
- package/dist/core/evolution-engine.d.ts +0 -118
- package/dist/core/evolution-engine.js +0 -464
- package/dist/core/evolution-logger.d.ts +0 -137
- package/dist/core/evolution-logger.js +0 -256
- package/dist/core/evolution-migration.d.ts +0 -5
- package/dist/core/evolution-migration.js +0 -65
- package/dist/core/evolution-reducer.d.ts +0 -98
- package/dist/core/evolution-reducer.js +0 -465
- package/dist/core/evolution-types.d.ts +0 -287
- package/dist/core/evolution-types.js +0 -78
- package/dist/core/external-training-contract.d.ts +0 -276
- package/dist/core/external-training-contract.js +0 -269
- package/dist/core/focus-history.d.ts +0 -210
- package/dist/core/focus-history.js +0 -1185
- package/dist/core/hygiene/tracker.d.ts +0 -22
- package/dist/core/hygiene/tracker.js +0 -106
- package/dist/core/init.d.ts +0 -12
- package/dist/core/local-worker-routing.d.ts +0 -175
- package/dist/core/local-worker-routing.js +0 -525
- package/dist/core/migration.d.ts +0 -6
- package/dist/core/model-deployment-registry.d.ts +0 -218
- package/dist/core/model-deployment-registry.js +0 -503
- package/dist/core/model-training-registry.d.ts +0 -295
- package/dist/core/model-training-registry.js +0 -475
- package/dist/core/nocturnal-arbiter.d.ts +0 -159
- package/dist/core/nocturnal-arbiter.js +0 -534
- package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
- package/dist/core/nocturnal-candidate-scoring.js +0 -266
- package/dist/core/nocturnal-compliance.d.ts +0 -175
- package/dist/core/nocturnal-compliance.js +0 -824
- package/dist/core/nocturnal-dataset.d.ts +0 -224
- package/dist/core/nocturnal-dataset.js +0 -443
- package/dist/core/nocturnal-executability.d.ts +0 -85
- package/dist/core/nocturnal-executability.js +0 -331
- package/dist/core/nocturnal-export.d.ts +0 -124
- package/dist/core/nocturnal-export.js +0 -275
- package/dist/core/nocturnal-paths.d.ts +0 -124
- package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
- package/dist/core/nocturnal-trajectory-extractor.js +0 -307
- package/dist/core/nocturnal-trinity.d.ts +0 -311
- package/dist/core/nocturnal-trinity.js +0 -880
- package/dist/core/pain.d.ts +0 -4
- package/dist/core/pain.js +0 -70
- package/dist/core/path-resolver.d.ts +0 -46
- package/dist/core/paths.d.ts +0 -65
- package/dist/core/principle-training-state.d.ts +0 -121
- package/dist/core/principle-training-state.js +0 -321
- package/dist/core/profile.d.ts +0 -62
- package/dist/core/profile.js +0 -210
- package/dist/core/promotion-gate.d.ts +0 -238
- package/dist/core/promotion-gate.js +0 -529
- package/dist/core/risk-calculator.d.ts +0 -22
- package/dist/core/session-tracker.d.ts +0 -99
- package/dist/core/shadow-observation-registry.d.ts +0 -217
- package/dist/core/shadow-observation-registry.js +0 -308
- package/dist/core/system-logger.d.ts +0 -8
- package/dist/core/thinking-models.d.ts +0 -38
- package/dist/core/thinking-models.js +0 -170
- package/dist/core/training-program.d.ts +0 -233
- package/dist/core/training-program.js +0 -433
- package/dist/core/trajectory.d.ts +0 -411
- package/dist/core/trajectory.js +0 -1307
- package/dist/core/workspace-context.d.ts +0 -71
- package/dist/hooks/bash-risk.d.ts +0 -57
- package/dist/hooks/bash-risk.js +0 -137
- package/dist/hooks/edit-verification.d.ts +0 -62
- package/dist/hooks/edit-verification.js +0 -256
- package/dist/hooks/gate-block-helper.d.ts +0 -44
- package/dist/hooks/gate-block-helper.js +0 -119
- package/dist/hooks/gate.d.ts +0 -24
- package/dist/hooks/gate.js +0 -173
- package/dist/hooks/gfi-gate.d.ts +0 -40
- package/dist/hooks/gfi-gate.js +0 -113
- package/dist/hooks/lifecycle.d.ts +0 -5
- package/dist/hooks/lifecycle.js +0 -284
- package/dist/hooks/llm.d.ts +0 -12
- package/dist/hooks/message-sanitize.d.ts +0 -3
- package/dist/hooks/message-sanitize.js +0 -37
- package/dist/hooks/pain.d.ts +0 -5
- package/dist/hooks/pain.js +0 -301
- package/dist/hooks/progressive-trust-gate.d.ts +0 -51
- package/dist/hooks/progressive-trust-gate.js +0 -89
- package/dist/hooks/prompt.d.ts +0 -47
- package/dist/hooks/prompt.js +0 -884
- package/dist/hooks/subagent.d.ts +0 -10
- package/dist/hooks/subagent.js +0 -387
- package/dist/hooks/thinking-checkpoint.d.ts +0 -37
- package/dist/hooks/thinking-checkpoint.js +0 -51
- package/dist/hooks/trajectory-collector.d.ts +0 -32
- package/dist/hooks/trajectory-collector.js +0 -256
- package/dist/http/principles-console-route.d.ts +0 -9
- package/dist/http/principles-console-route.js +0 -567
- package/dist/i18n/commands.d.ts +0 -26
- package/dist/i18n/commands.js +0 -116
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -581
- package/dist/service/central-database.d.ts +0 -104
- package/dist/service/central-database.js +0 -649
- package/dist/service/control-ui-query-service.d.ts +0 -221
- package/dist/service/control-ui-query-service.js +0 -543
- package/dist/service/empathy-observer-manager.d.ts +0 -52
- package/dist/service/empathy-observer-manager.js +0 -229
- package/dist/service/evolution-query-service.d.ts +0 -155
- package/dist/service/evolution-query-service.js +0 -258
- package/dist/service/evolution-worker.d.ts +0 -101
- package/dist/service/evolution-worker.js +0 -974
- package/dist/service/nocturnal-runtime.d.ts +0 -183
- package/dist/service/nocturnal-service.d.ts +0 -163
- package/dist/service/nocturnal-service.js +0 -787
- package/dist/service/nocturnal-target-selector.d.ts +0 -145
- package/dist/service/nocturnal-target-selector.js +0 -315
- package/dist/service/phase3-input-filter.d.ts +0 -73
- package/dist/service/phase3-input-filter.js +0 -172
- package/dist/service/runtime-summary-service.d.ts +0 -122
- package/dist/service/runtime-summary-service.js +0 -485
- package/dist/service/trajectory-service.d.ts +0 -2
- package/dist/service/trajectory-service.js +0 -15
- package/dist/tools/critique-prompt.d.ts +0 -14
- package/dist/tools/deep-reflect.d.ts +0 -39
- package/dist/tools/deep-reflect.js +0 -350
- package/dist/tools/model-index.d.ts +0 -9
- package/dist/types/event-types.d.ts +0 -306
- package/dist/types/event-types.js +0 -106
- package/dist/types/hygiene-types.d.ts +0 -20
- package/dist/types/hygiene-types.js +0 -12
- package/dist/types/runtime-summary.d.ts +0 -47
- package/dist/types/runtime-summary.js +0 -1
- package/dist/types.d.ts +0 -50
- package/dist/types.js +0 -22
- package/dist/utils/file-lock.d.ts +0 -71
- package/dist/utils/file-lock.js +0 -309
- package/dist/utils/glob-match.d.ts +0 -28
- package/dist/utils/hashing.d.ts +0 -9
- package/dist/utils/io.d.ts +0 -6
- package/dist/utils/io.js +0 -106
- package/dist/utils/nlp.d.ts +0 -9
- package/dist/utils/plugin-logger.d.ts +0 -39
- package/dist/utils/subagent-probe.d.ts +0 -34
- package/dist/utils/subagent-probe.js +0 -81
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nocturnal ORPO Export — Approved Dataset to Decision-Point JSONL
|
|
3
|
-
* =================================================================
|
|
4
|
-
*
|
|
5
|
-
* PURPOSE: Export approved nocturnal samples as ORPO-formatted decision-point
|
|
6
|
-
* training JSONL, strictly separated from legacy correction export.
|
|
7
|
-
*
|
|
8
|
-
* ARCHITECTURE:
|
|
9
|
-
* - Export output: .state/exports/orpo/{exportId}.jsonl
|
|
10
|
-
* - Export manifest: .state/exports/orpo/{exportId}-manifest.json
|
|
11
|
-
* - Legacy corrections: untouched, separate path
|
|
12
|
-
*
|
|
13
|
-
* ORPO FORMAT (each line):
|
|
14
|
-
* {
|
|
15
|
-
* sampleFingerprint: string,
|
|
16
|
-
* artifactId: string,
|
|
17
|
-
* sessionId: string,
|
|
18
|
-
* principleId: string,
|
|
19
|
-
* targetModelFamily: string,
|
|
20
|
-
* prompt: string, // badDecision (the wrong choice)
|
|
21
|
-
* chosen: string, // betterDecision (the right choice)
|
|
22
|
-
* rejected: string, // badDecision (for ORPO)
|
|
23
|
-
* rationale: string,
|
|
24
|
-
* datasetMetadata: {
|
|
25
|
-
* sampleFingerprint: string,
|
|
26
|
-
* artifactPath: string,
|
|
27
|
-
* createdAt: string,
|
|
28
|
-
* exportedAt: string,
|
|
29
|
-
* exportId: string,
|
|
30
|
-
* datasetFingerprint: string
|
|
31
|
-
* }
|
|
32
|
-
* }
|
|
33
|
-
*
|
|
34
|
-
* EXPORT GATING (fail-closed):
|
|
35
|
-
* - reviewStatus === 'approved_for_training'
|
|
36
|
-
* - targetModelFamily matches requested target (or any if not specified)
|
|
37
|
-
* - Lineage fields complete (sampleFingerprint, artifactId, sessionId, principleId)
|
|
38
|
-
* - Source artifact file exists and is approved
|
|
39
|
-
*
|
|
40
|
-
* DESIGN CONSTRAINTS:
|
|
41
|
-
* - No trainer invocation
|
|
42
|
-
* - No automatic training
|
|
43
|
-
* - No checkpoint deploy
|
|
44
|
-
* - Export is read-only from dataset perspective
|
|
45
|
-
*/
|
|
46
|
-
import * as fs from 'fs';
|
|
47
|
-
import * as path from 'path';
|
|
48
|
-
import * as crypto from 'crypto';
|
|
49
|
-
import { listDatasetRecords, readDatasetArtifact, } from './nocturnal-dataset.js';
|
|
50
|
-
import { NocturnalPathResolver } from './nocturnal-paths.js';
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
// Dataset Fingerprint (for reproducibility)
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
/**
|
|
55
|
-
* Compute a deterministic dataset fingerprint from a sorted list of sample fingerprints.
|
|
56
|
-
* This allows reproducible exports — same dataset always produces same fingerprint.
|
|
57
|
-
*/
|
|
58
|
-
function computeDatasetFingerprint(sampleFingerprints) {
|
|
59
|
-
const sorted = [...sampleFingerprints].sort();
|
|
60
|
-
const combined = sorted.join('|');
|
|
61
|
-
return crypto.createHash('sha256').update(combined, 'utf8').digest('hex');
|
|
62
|
-
}
|
|
63
|
-
// ---------------------------------------------------------------------------
|
|
64
|
-
// Individual Sample Serialization
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
/**
|
|
67
|
-
* Serialize a single dataset record + artifact to ORPO JSONL line.
|
|
68
|
-
* Caller guarantees record.targetModelFamily is non-null.
|
|
69
|
-
*/
|
|
70
|
-
function serializeORPOSample(record, artifact, exportId, datasetFingerprint) {
|
|
71
|
-
const now = new Date().toISOString();
|
|
72
|
-
return {
|
|
73
|
-
sampleFingerprint: record.sampleFingerprint,
|
|
74
|
-
artifactId: record.artifactId,
|
|
75
|
-
sessionId: record.sessionId,
|
|
76
|
-
principleId: record.principleId,
|
|
77
|
-
targetModelFamily: record.targetModelFamily, // validated non-null by caller
|
|
78
|
-
// For ORPO: prompt = badDecision, chosen = betterDecision, rejected = badDecision
|
|
79
|
-
// This teaches the model to prefer betterDecision over badDecision
|
|
80
|
-
prompt: artifact.badDecision,
|
|
81
|
-
chosen: artifact.betterDecision,
|
|
82
|
-
rejected: artifact.badDecision,
|
|
83
|
-
rationale: artifact.rationale,
|
|
84
|
-
datasetMetadata: {
|
|
85
|
-
sampleFingerprint: record.sampleFingerprint,
|
|
86
|
-
artifactPath: record.artifactPath,
|
|
87
|
-
createdAt: record.createdAt,
|
|
88
|
-
exportedAt: now,
|
|
89
|
-
exportId,
|
|
90
|
-
datasetFingerprint,
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
// ---------------------------------------------------------------------------
|
|
95
|
-
// Core Export Function
|
|
96
|
-
// ---------------------------------------------------------------------------
|
|
97
|
-
/**
|
|
98
|
-
* Export approved nocturnal samples as ORPO decision-point JSONL.
|
|
99
|
-
*
|
|
100
|
-
* @param workspaceDir - Workspace directory
|
|
101
|
-
* @param targetModelFamily - Specific model family to export, or undefined for all
|
|
102
|
-
* @param options - Additional export options
|
|
103
|
-
* @returns ExportResult
|
|
104
|
-
*/
|
|
105
|
-
export function exportORPOSamples(workspaceDir, targetModelFamily, _options = {}) {
|
|
106
|
-
const exportId = crypto.randomUUID();
|
|
107
|
-
const now = new Date().toISOString();
|
|
108
|
-
// Step 1: Collect eligible records
|
|
109
|
-
// Use listDatasetRecords directly to have full control over the family filter
|
|
110
|
-
// (listExportReadyRecords uses ?? which maps null→undefined, losing the null distinction)
|
|
111
|
-
const allApprovedRecords = listDatasetRecords(workspaceDir, {
|
|
112
|
-
reviewStatus: 'approved_for_training',
|
|
113
|
-
});
|
|
114
|
-
let eligibleRecords;
|
|
115
|
-
if (targetModelFamily !== undefined && targetModelFamily !== null) {
|
|
116
|
-
// Specific family: check if ANY records (regardless of status) have this family
|
|
117
|
-
const allRecords = listDatasetRecords(workspaceDir);
|
|
118
|
-
const hasAnyWithFamily = allRecords.some((r) => r.targetModelFamily === targetModelFamily);
|
|
119
|
-
if (!hasAnyWithFamily) {
|
|
120
|
-
// Family doesn't exist in any record
|
|
121
|
-
return {
|
|
122
|
-
success: false,
|
|
123
|
-
error: 'No samples found for the requested target model family',
|
|
124
|
-
emptyReason: 'family_mismatch',
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
// Family exists but none are approved
|
|
128
|
-
eligibleRecords = allApprovedRecords.filter((r) => r.targetModelFamily === targetModelFamily);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// All families
|
|
132
|
-
eligibleRecords = allApprovedRecords;
|
|
133
|
-
}
|
|
134
|
-
// Step 2: Validate we have records
|
|
135
|
-
if (eligibleRecords.length === 0) {
|
|
136
|
-
return {
|
|
137
|
-
success: false,
|
|
138
|
-
error: 'No approved samples found for export',
|
|
139
|
-
emptyReason: 'no_approved_samples',
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
// Step 3: Verify lineage completeness and read artifacts
|
|
143
|
-
const orpoSamples = [];
|
|
144
|
-
const failedFingerprints = [];
|
|
145
|
-
for (const record of eligibleRecords) {
|
|
146
|
-
// Enforce targetModelFamily binding — samples without a family cannot enter training
|
|
147
|
-
if (record.targetModelFamily === null) {
|
|
148
|
-
failedFingerprints.push(record.sampleFingerprint);
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
// Verify lineage completeness
|
|
152
|
-
if (!record.sampleFingerprint || !record.artifactId || !record.sessionId || !record.principleId) {
|
|
153
|
-
failedFingerprints.push(record.sampleFingerprint);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
// Read artifact (throws on error — distinguishes read failure from missing artifact)
|
|
157
|
-
let artifact;
|
|
158
|
-
try {
|
|
159
|
-
artifact = readDatasetArtifact(workspaceDir, record.sampleFingerprint);
|
|
160
|
-
}
|
|
161
|
-
catch {
|
|
162
|
-
failedFingerprints.push(record.sampleFingerprint);
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
// Serialize
|
|
166
|
-
orpoSamples.push(serializeORPOSample(record, artifact, exportId, ''));
|
|
167
|
-
}
|
|
168
|
-
// Step 4: Fail if all samples failed validation
|
|
169
|
-
if (orpoSamples.length === 0) {
|
|
170
|
-
return {
|
|
171
|
-
success: false,
|
|
172
|
-
error: `All ${eligibleRecords.length} eligible samples failed validation (missing artifacts or lineage)`,
|
|
173
|
-
emptyReason: 'all_samples_missing_artifacts',
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
// Step 5: Compute dataset fingerprint for manifest
|
|
177
|
-
const datasetFingerprint = computeDatasetFingerprint(orpoSamples.map((s) => s.sampleFingerprint));
|
|
178
|
-
// Step 6: Fill in dataset fingerprint in all samples
|
|
179
|
-
for (const sample of orpoSamples) {
|
|
180
|
-
sample.datasetMetadata.datasetFingerprint = datasetFingerprint;
|
|
181
|
-
}
|
|
182
|
-
// Step 7: Write JSONL file
|
|
183
|
-
const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
|
|
184
|
-
const jsonlPath = path.join(exportsDir, `${exportId}.jsonl`);
|
|
185
|
-
const lines = orpoSamples.map((s) => JSON.stringify(s)).join('\n') + '\n';
|
|
186
|
-
fs.writeFileSync(jsonlPath, lines, 'utf-8');
|
|
187
|
-
// Step 8: Write manifest
|
|
188
|
-
const manifest = {
|
|
189
|
-
exportId,
|
|
190
|
-
createdAt: now,
|
|
191
|
-
sampleCount: orpoSamples.length,
|
|
192
|
-
targetModelFamily: targetModelFamily ?? 'all',
|
|
193
|
-
datasetFingerprint,
|
|
194
|
-
exportPath: jsonlPath,
|
|
195
|
-
manifestPath: path.join(exportsDir, `${exportId}-manifest.json`),
|
|
196
|
-
samples: orpoSamples.map((s) => ({
|
|
197
|
-
sampleFingerprint: s.sampleFingerprint,
|
|
198
|
-
artifactId: s.artifactId,
|
|
199
|
-
sessionId: s.sessionId,
|
|
200
|
-
principleId: s.principleId,
|
|
201
|
-
})),
|
|
202
|
-
};
|
|
203
|
-
fs.writeFileSync(manifest.manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
|
|
204
|
-
return {
|
|
205
|
-
success: true,
|
|
206
|
-
manifest,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Verify an existing export by re-computing its dataset fingerprint.
|
|
211
|
-
* Returns true if the export is intact and reproducible.
|
|
212
|
-
*/
|
|
213
|
-
export function verifyExportIntegrity(workspaceDir, exportId) {
|
|
214
|
-
const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
|
|
215
|
-
const manifestPath = path.join(exportsDir, `${exportId}-manifest.json`);
|
|
216
|
-
if (!fs.existsSync(manifestPath)) {
|
|
217
|
-
return null;
|
|
218
|
-
}
|
|
219
|
-
try {
|
|
220
|
-
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
|
|
221
|
-
const computedFingerprint = computeDatasetFingerprint(manifest.samples.map((s) => s.sampleFingerprint));
|
|
222
|
-
return {
|
|
223
|
-
valid: computedFingerprint === manifest.datasetFingerprint,
|
|
224
|
-
computedFingerprint,
|
|
225
|
-
manifestFingerprint: manifest.datasetFingerprint,
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* List all exports in the exports directory.
|
|
234
|
-
*/
|
|
235
|
-
export function listExports(workspaceDir) {
|
|
236
|
-
const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
|
|
237
|
-
if (!fs.existsSync(exportsDir)) {
|
|
238
|
-
return [];
|
|
239
|
-
}
|
|
240
|
-
try {
|
|
241
|
-
const files = fs.readdirSync(exportsDir);
|
|
242
|
-
const manifests = [];
|
|
243
|
-
for (const file of files) {
|
|
244
|
-
if (!file.endsWith('-manifest.json'))
|
|
245
|
-
continue;
|
|
246
|
-
try {
|
|
247
|
-
const manifest = JSON.parse(fs.readFileSync(path.join(exportsDir, file), 'utf-8'));
|
|
248
|
-
manifests.push(manifest);
|
|
249
|
-
}
|
|
250
|
-
catch {
|
|
251
|
-
// Skip malformed manifest
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return manifests.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
return [];
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Read an export manifest by ID.
|
|
262
|
-
*/
|
|
263
|
-
export function getExportManifest(workspaceDir, exportId) {
|
|
264
|
-
const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
|
|
265
|
-
const manifestPath = path.join(exportsDir, `${exportId}-manifest.json`);
|
|
266
|
-
if (!fs.existsSync(manifestPath)) {
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
try {
|
|
270
|
-
return JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
|
|
271
|
-
}
|
|
272
|
-
catch {
|
|
273
|
-
return null;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nocturnal Paths — Canonical Path Registry for Sleep-Mode Reflection Artifacts
|
|
3
|
-
* =============================================================================
|
|
4
|
-
*
|
|
5
|
-
* PURPOSE: Establishes a single source of truth for all nocturnal artifact paths.
|
|
6
|
-
* Prevents path fragmentation and ensures consistent resolution across modules.
|
|
7
|
-
*
|
|
8
|
-
* ARCHITECTURE:
|
|
9
|
-
* Operator-facing (read by agent, injected into prompts):
|
|
10
|
-
* memory/reflection-log.md ← human-readable lessons, NOT training data
|
|
11
|
-
*
|
|
12
|
-
* Nocturnal artifacts (structured, NOT injected into prompts):
|
|
13
|
-
* .state/nocturnal/samples/ ← decision-point JSON artifacts (Phase 2+)
|
|
14
|
-
* .state/nocturnal/memory/ ← short-term reflection memory (Phase 2+)
|
|
15
|
-
* .state/exports/orpo/ ← approved training pairs, immutable (Phase 3+)
|
|
16
|
-
*
|
|
17
|
-
* DESIGN CONSTRAINTS:
|
|
18
|
-
* - Nocturnal samples are NEVER written to memory/reflection-log.md
|
|
19
|
-
* - Prompt injection reads ONLY from memory/reflection-log.md
|
|
20
|
-
* - Each nocturnal artifact category has its own subdirectory
|
|
21
|
-
* - All paths go through this registry — no ad-hoc path construction
|
|
22
|
-
*
|
|
23
|
-
* USAGE:
|
|
24
|
-
* import { NocturnalPathResolver, NOCTURNAL_DIRS, NOCTURNAL_FILES } from './nocturnal-paths.js';
|
|
25
|
-
* const sampleDir = NocturnalPathResolver.samplesDir(workspaceDir);
|
|
26
|
-
*/
|
|
27
|
-
export declare const NOCTURNAL_DIRS: {
|
|
28
|
-
/** Root directory for all nocturnal reflection artifacts */
|
|
29
|
-
readonly ROOT: ".state/nocturnal";
|
|
30
|
-
/**
|
|
31
|
-
* Structured decision-point samples from nocturnal reflection.
|
|
32
|
-
* Each file is a JSON artifact containing:
|
|
33
|
-
* - session snapshot reference
|
|
34
|
-
* - target principle
|
|
35
|
-
* - decision-point contrastive pair
|
|
36
|
-
* - arbiter approval status
|
|
37
|
-
*/
|
|
38
|
-
readonly SAMPLES: ".state/nocturnal/samples";
|
|
39
|
-
/**
|
|
40
|
-
* Short-term operator-facing reflection memory.
|
|
41
|
-
* Written by nocturnal service, NOT injected into prompts directly.
|
|
42
|
-
* Consumed by operator on next session start.
|
|
43
|
-
*/
|
|
44
|
-
readonly MEMORY: ".state/nocturnal/memory";
|
|
45
|
-
/**
|
|
46
|
-
* Nocturnal runtime bookkeeping (cooldowns, quotas).
|
|
47
|
-
* NOTE: nocturnal-runtime.json is written to stateDir directly
|
|
48
|
-
* (not under NOCTURNAL_DIRS.ROOT) for simpler migration.
|
|
49
|
-
*/
|
|
50
|
-
/**
|
|
51
|
-
* Approved training pairs ready for export.
|
|
52
|
-
* Immutable once written — never modified in place.
|
|
53
|
-
* Consumed by external trainer (not the plugin).
|
|
54
|
-
*/
|
|
55
|
-
readonly EXPORTS: ".state/exports/orpo";
|
|
56
|
-
};
|
|
57
|
-
export declare const NOCTURNAL_FILES: {
|
|
58
|
-
/**
|
|
59
|
-
* Arbiter review queue for pending samples.
|
|
60
|
-
* Not written by nocturnal service directly — created during arbiter review.
|
|
61
|
-
* Format: JSON array of sample refs pending approval.
|
|
62
|
-
*/
|
|
63
|
-
readonly REVIEW_QUEUE: ".state/nocturnal/review-queue.json";
|
|
64
|
-
/**
|
|
65
|
-
* Lineage metadata for all samples.
|
|
66
|
-
* Written alongside each sample file for traceability.
|
|
67
|
-
*/
|
|
68
|
-
readonly LINEAGE_INDEX: ".state/nocturnal/samples/lineage-index.json";
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Resolves a nocturnal directory path within a workspace.
|
|
72
|
-
*/
|
|
73
|
-
export declare function resolveNocturnalDir(workspaceDir: string, dirKey: keyof typeof NOCTURNAL_DIRS): string;
|
|
74
|
-
/**
|
|
75
|
-
* Resolves a nocturnal file path within a workspace.
|
|
76
|
-
*/
|
|
77
|
-
export declare function resolveNocturnalFile(workspaceDir: string, fileKey: keyof typeof NOCTURNAL_FILES): string;
|
|
78
|
-
export declare const NocturnalPathResolver: {
|
|
79
|
-
/**
|
|
80
|
-
* Returns the samples directory path.
|
|
81
|
-
* Creates the directory if it does not exist.
|
|
82
|
-
*/
|
|
83
|
-
readonly samplesDir: (workspaceDir: string) => string;
|
|
84
|
-
/**
|
|
85
|
-
* Returns the memory directory path.
|
|
86
|
-
* Creates the directory if it does not exist.
|
|
87
|
-
*/
|
|
88
|
-
readonly memoryDir: (workspaceDir: string) => string;
|
|
89
|
-
/**
|
|
90
|
-
* Returns the exports directory path.
|
|
91
|
-
* Creates the directory if it does not exist.
|
|
92
|
-
*/
|
|
93
|
-
readonly exportsDir: (workspaceDir: string) => string;
|
|
94
|
-
/**
|
|
95
|
-
* Returns the path for a named sample file.
|
|
96
|
-
* File is NOT created — caller decides when to write.
|
|
97
|
-
*/
|
|
98
|
-
readonly samplePath: (workspaceDir: string, sampleId: string) => string;
|
|
99
|
-
/**
|
|
100
|
-
* Returns the path for nocturnal reflection memory.
|
|
101
|
-
* This is the operator-facing summary written after each nocturnal run.
|
|
102
|
-
*/
|
|
103
|
-
readonly reflectionMemoryPath: (workspaceDir: string) => string;
|
|
104
|
-
/**
|
|
105
|
-
* Lists all sample files in the samples directory.
|
|
106
|
-
* Returns absolute paths sorted by modification time (newest first).
|
|
107
|
-
*/
|
|
108
|
-
readonly listSamples: (workspaceDir: string) => string[];
|
|
109
|
-
/**
|
|
110
|
-
* Lists all approved sample files ready for export.
|
|
111
|
-
* Filters to samples with status === 'approved'.
|
|
112
|
-
*/
|
|
113
|
-
readonly listApprovedSamples: (workspaceDir: string) => string[];
|
|
114
|
-
};
|
|
115
|
-
/**
|
|
116
|
-
* Complete path map for reference.
|
|
117
|
-
* These mirror the keys in NOCTURNAL_DIRS and NOCTURNAL_FILES.
|
|
118
|
-
*/
|
|
119
|
-
export declare const NOCTURNAL_PATH_DESCRIPTIONS: Record<string, string>;
|
|
120
|
-
/**
|
|
121
|
-
* IMPORTANT: memory/reflection-log.md is NOT a nocturnal artifact.
|
|
122
|
-
* It is the pre-existing operator-facing reflection log, defined in paths.ts.
|
|
123
|
-
* It is kept separate from nocturnal outputs by design.
|
|
124
|
-
*/
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nocturnal Trajectory Extractor — Structured Session Snapshot API
|
|
3
|
-
* ==============================================================
|
|
4
|
-
*
|
|
5
|
-
* PURPOSE: Provide minimal necessary structured trajectory extraction
|
|
6
|
-
* for the nocturnal reflection pipeline. NOT a general-purpose data mirror.
|
|
7
|
-
*
|
|
8
|
-
* DESIGN PRINCIPLES:
|
|
9
|
-
* - Uses sanitized text ONLY — never raw_text or blob payloads
|
|
10
|
-
* - Two distinct query paths:
|
|
11
|
-
* 1. Analytics query (listRecentNocturnalCandidateSessions) — for target selection
|
|
12
|
-
* 2. Runtime query (getNocturnalSessionSnapshot) — for sample generation
|
|
13
|
-
* - All snapshots are self-contained and principle-relevant metadata-rich
|
|
14
|
-
*
|
|
15
|
-
* WHAT THIS MODULE DOES:
|
|
16
|
-
* - List recent sessions with metadata relevant to nocturnal target selection
|
|
17
|
-
* - Extract structured session snapshots for a selected violating session
|
|
18
|
-
*
|
|
19
|
-
* WHAT THIS MODULE DOES NOT DO:
|
|
20
|
-
* - NO snapshot database cloning
|
|
21
|
-
* - NO full trajectory export
|
|
22
|
-
* - NO raw text exposure
|
|
23
|
-
* - NO target selection logic
|
|
24
|
-
* - NO sample generation
|
|
25
|
-
*
|
|
26
|
-
* ARTIFACT OUTPUTS go to:
|
|
27
|
-
* .state/nocturnal/samples/ ← structured JSON artifacts
|
|
28
|
-
*
|
|
29
|
-
* FILE: {stateDir}/nocturnal/snapshots/ (cached snapshots if needed, optional)
|
|
30
|
-
*/
|
|
31
|
-
import { TrajectoryDatabase } from './trajectory.js';
|
|
32
|
-
/**
|
|
33
|
-
* Minimal sanitized assistant turn for nocturnal snapshot.
|
|
34
|
-
* Contains ONLY sanitizedText — raw_text is never exposed.
|
|
35
|
-
*/
|
|
36
|
-
export interface NocturnalAssistantTurn {
|
|
37
|
-
turnIndex: number;
|
|
38
|
-
sanitizedText: string;
|
|
39
|
-
model: string;
|
|
40
|
-
createdAt: string;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Minimal sanitized user turn for nocturnal snapshot.
|
|
44
|
-
* Contains only derived cues — NO raw user text.
|
|
45
|
-
*/
|
|
46
|
-
export interface NocturnalUserTurn {
|
|
47
|
-
turnIndex: number;
|
|
48
|
-
correctionDetected: boolean;
|
|
49
|
-
correctionCue: string | null;
|
|
50
|
-
createdAt: string;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Tool call event for nocturnal snapshot.
|
|
54
|
-
*/
|
|
55
|
-
export interface NocturnalToolCall {
|
|
56
|
-
toolName: string;
|
|
57
|
-
outcome: 'success' | 'failure' | 'blocked';
|
|
58
|
-
filePath: string | null;
|
|
59
|
-
durationMs: number | null;
|
|
60
|
-
exitCode: number | null;
|
|
61
|
-
errorType: string | null;
|
|
62
|
-
errorMessage: string | null;
|
|
63
|
-
createdAt: string;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Pain signal for nocturnal snapshot.
|
|
67
|
-
*/
|
|
68
|
-
export interface NocturnalPainEvent {
|
|
69
|
-
source: string;
|
|
70
|
-
score: number;
|
|
71
|
-
severity: string | null;
|
|
72
|
-
reason: string | null;
|
|
73
|
-
createdAt: string;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Gate block event for nocturnal snapshot.
|
|
77
|
-
*/
|
|
78
|
-
export interface NocturnalGateBlock {
|
|
79
|
-
toolName: string;
|
|
80
|
-
filePath: string | null;
|
|
81
|
-
reason: string;
|
|
82
|
-
planStatus: string | null;
|
|
83
|
-
createdAt: string;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* A structured nocturnal session snapshot.
|
|
87
|
-
* Contains all information needed for a reflector to generate decision-point samples.
|
|
88
|
-
*
|
|
89
|
-
* GUARANTEES:
|
|
90
|
-
* - NO raw_text exposed
|
|
91
|
-
* - NO blob references resolved
|
|
92
|
-
* - All text is sanitized or derived-cue only
|
|
93
|
-
* - Self-contained (principle-relevant metadata included)
|
|
94
|
-
*/
|
|
95
|
-
export interface NocturnalSessionSnapshot {
|
|
96
|
-
sessionId: string;
|
|
97
|
-
startedAt: string;
|
|
98
|
-
updatedAt: string;
|
|
99
|
-
assistantTurns: NocturnalAssistantTurn[];
|
|
100
|
-
userTurns: NocturnalUserTurn[];
|
|
101
|
-
toolCalls: NocturnalToolCall[];
|
|
102
|
-
painEvents: NocturnalPainEvent[];
|
|
103
|
-
gateBlocks: NocturnalGateBlock[];
|
|
104
|
-
/**
|
|
105
|
-
* Summary statistics for quick triage.
|
|
106
|
-
*/
|
|
107
|
-
stats: {
|
|
108
|
-
totalAssistantTurns: number;
|
|
109
|
-
totalToolCalls: number;
|
|
110
|
-
totalPainEvents: number;
|
|
111
|
-
totalGateBlocks: number;
|
|
112
|
-
failureCount: number;
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Summary entry for session listing (used by nocturnal target selector).
|
|
117
|
-
* Lightweight — only identification and basic metadata, no turns.
|
|
118
|
-
*/
|
|
119
|
-
export interface NocturnalSessionSummary {
|
|
120
|
-
sessionId: string;
|
|
121
|
-
startedAt: string;
|
|
122
|
-
updatedAt: string;
|
|
123
|
-
/** Number of assistant turns (for relevance scoring) */
|
|
124
|
-
assistantTurnCount: number;
|
|
125
|
-
/** Number of tool calls (for violation signal density) */
|
|
126
|
-
toolCallCount: number;
|
|
127
|
-
/** Number of pain events (for pain signal density) */
|
|
128
|
-
painEventCount: number;
|
|
129
|
-
/** Number of gate blocks (for constraint violation evidence) */
|
|
130
|
-
gateBlockCount: number;
|
|
131
|
-
/** Number of failed tool calls (for violation signal) */
|
|
132
|
-
failureCount: number;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Options for listing recent nocturnal candidate sessions.
|
|
136
|
-
*/
|
|
137
|
-
export interface ListNocturnalSessionsOptions {
|
|
138
|
-
/** Maximum number of sessions to return (default: 20) */
|
|
139
|
-
limit?: number;
|
|
140
|
-
/** Only return sessions updated after this date */
|
|
141
|
-
dateFrom?: string;
|
|
142
|
-
/** Only return sessions updated before this date */
|
|
143
|
-
dateTo?: string;
|
|
144
|
-
/** Minimum tool call count threshold (default: 1) */
|
|
145
|
-
minToolCalls?: number;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Nocturnal Trajectory Extractor.
|
|
149
|
-
*
|
|
150
|
-
* Provides sanitized, structured access to session data for the nocturnal
|
|
151
|
-
* reflection pipeline. All queries return sanitized text only.
|
|
152
|
-
*
|
|
153
|
-
* This class is a thin, focused wrapper around TrajectoryDatabase.
|
|
154
|
-
* It does NOT cache snapshots or maintain its own state.
|
|
155
|
-
*/
|
|
156
|
-
export declare class NocturnalTrajectoryExtractor {
|
|
157
|
-
private readonly trajectory;
|
|
158
|
-
constructor(trajectory: TrajectoryDatabase);
|
|
159
|
-
/**
|
|
160
|
-
* List recent sessions suitable for nocturnal target selection.
|
|
161
|
-
*
|
|
162
|
-
* ANALYTICS QUERY — used by nocturnal target selector to find candidate sessions.
|
|
163
|
-
*
|
|
164
|
-
* @param options - Query options
|
|
165
|
-
* @returns Lightweight session summaries ordered by most recently updated
|
|
166
|
-
*/
|
|
167
|
-
listRecentNocturnalCandidateSessions(options?: ListNocturnalSessionsOptions): NocturnalSessionSummary[];
|
|
168
|
-
/**
|
|
169
|
-
* Get a full structured snapshot for a specific session.
|
|
170
|
-
*
|
|
171
|
-
* RUNTIME QUERY — used by nocturnal service after target selection.
|
|
172
|
-
*
|
|
173
|
-
* SECURITY GUARANTEES:
|
|
174
|
-
* - Only sanitizedText from assistant turns (never raw_text)
|
|
175
|
-
* - Only correction cues from user turns (never raw user text)
|
|
176
|
-
* - Tool calls with outcome and error info (no raw parameters)
|
|
177
|
-
* - Pain events with score and reason (no raw event data)
|
|
178
|
-
* - Gate blocks with tool/reason info (no file content)
|
|
179
|
-
*
|
|
180
|
-
* @param sessionId - Session ID to snapshot
|
|
181
|
-
* @returns Full structured snapshot, or null if session not found
|
|
182
|
-
*/
|
|
183
|
-
getNocturnalSessionSnapshot(sessionId: string): NocturnalSessionSnapshot | null;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Creates a NocturnalTrajectoryExtractor from a workspace directory.
|
|
187
|
-
*
|
|
188
|
-
* USAGE:
|
|
189
|
-
* const extractor = createNocturnalTrajectoryExtractor(workspaceDir);
|
|
190
|
-
* const sessions = extractor.listRecentNocturnalCandidateSessions({ limit: 10 });
|
|
191
|
-
* const snapshot = extractor.getNocturnalSessionSnapshot(sessionId);
|
|
192
|
-
*/
|
|
193
|
-
export declare function createNocturnalTrajectoryExtractor(workspaceDir: string, _stateDir?: string): NocturnalTrajectoryExtractor;
|
|
194
|
-
/**
|
|
195
|
-
* List recent sessions for nocturnal target selection.
|
|
196
|
-
* Convenience wrapper around NocturnalTrajectoryExtractor.
|
|
197
|
-
*/
|
|
198
|
-
export declare function listNocturnalCandidateSessions(trajectory: TrajectoryDatabase, options?: ListNocturnalSessionsOptions): NocturnalSessionSummary[];
|
|
199
|
-
/**
|
|
200
|
-
* Get a session snapshot for nocturnal reflection.
|
|
201
|
-
* Convenience wrapper around NocturnalTrajectoryExtractor.
|
|
202
|
-
*/
|
|
203
|
-
export declare function getNocturnalSessionSnapshot(trajectory: TrajectoryDatabase, sessionId: string): NocturnalSessionSnapshot | null;
|
|
204
|
-
/**
|
|
205
|
-
* Compute thinking model activation for a text.
|
|
206
|
-
* Returns 0-1 ratio of matched thinking models to total available models.
|
|
207
|
-
*
|
|
208
|
-
* @param text - Text to analyze
|
|
209
|
-
* @returns Activation ratio (0-1)
|
|
210
|
-
*/
|
|
211
|
-
export declare function computeThinkingModelActivation(text: string): number;
|
|
212
|
-
/**
|
|
213
|
-
* Compute planning ratio from a session snapshot.
|
|
214
|
-
* Planning ratio = write operations preceded immediately by a read tool / total write operations.
|
|
215
|
-
* A higher ratio indicates more careful planning behavior (reading before writing).
|
|
216
|
-
*
|
|
217
|
-
* Only the immediately preceding tool is checked — each write needs its own
|
|
218
|
-
* preceding read to count as planned. This prevents a single read from satisfying
|
|
219
|
-
* multiple writes in sequence.
|
|
220
|
-
*
|
|
221
|
-
* @param snapshot - Session snapshot to analyze
|
|
222
|
-
* @returns Planning ratio (0-1), or 0 if no write operations
|
|
223
|
-
*/
|
|
224
|
-
export declare function computePlanningRatio(snapshot: NocturnalSessionSnapshot): number;
|
|
225
|
-
/**
|
|
226
|
-
* Compute thinking model delta between original and improved decisions.
|
|
227
|
-
* Positive delta means the improved decision uses more thinking models.
|
|
228
|
-
*
|
|
229
|
-
* @param originalText - Original (bad) decision text
|
|
230
|
-
* @param improvedText - Improved (better) decision text
|
|
231
|
-
* @returns Delta in thinking model activation (-1 to 1)
|
|
232
|
-
*/
|
|
233
|
-
export declare function computeThinkingModelDelta(originalText: string, improvedText: string): number;
|
|
234
|
-
/**
|
|
235
|
-
* Compute planning ratio gain between original and improved snapshots.
|
|
236
|
-
* Positive gain means the improved behavior has better planning (more reads before writes).
|
|
237
|
-
*
|
|
238
|
-
* @param originalSnapshot - Original session snapshot
|
|
239
|
-
* @param improvedSnapshot - Improved session snapshot
|
|
240
|
-
* @returns Planning ratio gain (-1 to 1)
|
|
241
|
-
*/
|
|
242
|
-
export declare function computePlanningRatioGain(originalSnapshot: NocturnalSessionSnapshot, improvedSnapshot: NocturnalSessionSnapshot): number;
|