principles-disciple 1.127.0 → 1.129.0
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/dist/commands/archive-impl.d.ts +18 -0
- package/dist/commands/archive-impl.js +105 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.js +76 -0
- package/dist/commands/context.d.ts +5 -0
- package/{src/commands/context.ts → dist/commands/context.js} +34 -83
- package/dist/commands/disable-impl.d.ts +22 -0
- package/dist/commands/disable-impl.js +118 -0
- package/dist/commands/evolution-status.d.ts +4 -0
- package/dist/commands/evolution-status.js +187 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.js +53 -0
- package/dist/commands/focus.d.ts +14 -0
- package/dist/commands/focus.js +443 -0
- package/dist/commands/pain.d.ts +6 -0
- package/{src/commands/pain.ts → dist/commands/pain.js} +137 -188
- package/dist/commands/principle-rollback.d.ts +4 -0
- package/dist/commands/principle-rollback.js +26 -0
- package/dist/commands/promote-impl.d.ts +22 -0
- package/dist/commands/promote-impl.js +194 -0
- package/dist/commands/rollback-impl.d.ts +32 -0
- package/dist/commands/rollback-impl.js +180 -0
- package/dist/commands/rollback.d.ts +19 -0
- package/{src/commands/rollback.ts → dist/commands/rollback.js} +10 -53
- package/dist/commands/samples.d.ts +2 -0
- package/dist/commands/samples.js +58 -0
- package/dist/commands/strategy.d.ts +2 -0
- package/dist/commands/strategy.js +16 -0
- package/dist/commands/thinking-os.d.ts +2 -0
- package/{src/commands/thinking-os.ts → dist/commands/thinking-os.js} +35 -58
- package/dist/commands/workflow-debug.d.ts +6 -0
- package/{src/commands/workflow-debug.ts → dist/commands/workflow-debug.js} +13 -33
- package/dist/config/defaults/runtime.d.ts +58 -0
- package/{src/config/defaults/runtime.ts → dist/config/defaults/runtime.js} +4 -41
- package/dist/config/errors.d.ts +86 -0
- package/dist/config/errors.js +107 -0
- package/{src/config/index.ts → dist/config/index.d.ts} +1 -2
- package/dist/config/index.js +7 -0
- package/dist/constants/diagnostician.d.ts +12 -0
- package/{src/constants/diagnostician.ts → dist/constants/diagnostician.js} +0 -1
- package/dist/constants/tools.d.ts +17 -0
- package/dist/constants/tools.js +53 -0
- package/dist/core/__tests__/focus-history.test.d.ts +1 -0
- package/dist/core/__tests__/focus-history.test.js +160 -0
- package/dist/core/bootstrap-rules.d.ts +50 -0
- package/dist/core/bootstrap-rules.js +187 -0
- package/dist/core/code-implementation-storage.d.ts +71 -0
- package/dist/core/code-implementation-storage.js +139 -0
- package/dist/core/config-health.d.ts +27 -0
- package/dist/core/config-health.js +60 -0
- package/dist/core/config-service.d.ts +15 -0
- package/{src/core/config-service.ts → dist/core/config-service.js} +4 -7
- package/dist/core/config.d.ts +111 -0
- package/{src/core/config.ts → dist/core/config.js} +46 -146
- package/dist/core/control-ui-db.d.ts +106 -0
- package/dist/core/control-ui-db.js +309 -0
- package/dist/core/correction-cue-learner.d.ts +33 -0
- package/dist/core/correction-cue-learner.js +184 -0
- package/dist/core/correction-types.d.ts +3 -0
- package/dist/core/correction-types.js +1 -0
- package/dist/core/detection-funnel.d.ts +33 -0
- package/{src/core/detection-funnel.ts → dist/core/detection-funnel.js} +17 -37
- package/dist/core/detection-service.d.ts +15 -0
- package/{src/core/detection-service.ts → dist/core/detection-service.js} +4 -7
- package/dist/core/dictionary-service.d.ts +15 -0
- package/{src/core/dictionary-service.ts → dist/core/dictionary-service.js} +4 -7
- package/dist/core/dictionary.d.ts +38 -0
- package/{src/core/dictionary.ts → dist/core/dictionary.js} +33 -59
- package/dist/core/empathy-keyword-matcher.d.ts +5 -0
- package/dist/core/empathy-keyword-matcher.js +40 -0
- package/dist/core/empathy-types.d.ts +2 -0
- package/dist/core/empathy-types.js +1 -0
- package/dist/core/event-log.d.ts +90 -0
- package/dist/core/event-log.js +702 -0
- package/dist/core/evolution-engine.d.ts +119 -0
- package/dist/core/evolution-engine.js +460 -0
- package/dist/core/evolution-logger.d.ts +137 -0
- package/dist/core/evolution-logger.js +261 -0
- package/dist/core/evolution-migration.d.ts +5 -0
- package/dist/core/evolution-migration.js +65 -0
- package/dist/core/evolution-reducer.d.ts +124 -0
- package/dist/core/evolution-reducer.js +730 -0
- package/dist/core/evolution-types.d.ts +50 -0
- package/dist/core/evolution-types.js +11 -0
- package/dist/core/external-training-contract.d.ts +276 -0
- package/dist/core/external-training-contract.js +269 -0
- package/dist/core/file-store.d.ts +41 -0
- package/dist/core/file-store.js +46 -0
- package/dist/core/focus-history.d.ts +50 -0
- package/dist/core/focus-history.js +574 -0
- package/dist/core/hygiene/tracker.d.ts +22 -0
- package/dist/core/hygiene/tracker.js +110 -0
- package/dist/core/init.d.ts +30 -0
- package/{src/core/init.ts → dist/core/init.js} +87 -118
- package/dist/core/local-worker-routing.d.ts +124 -0
- package/dist/core/local-worker-routing.js +216 -0
- package/dist/core/migration.d.ts +6 -0
- package/{src/core/migration.ts → dist/core/migration.js} +10 -18
- package/dist/core/model-deployment-registry.d.ts +218 -0
- package/dist/core/model-deployment-registry.js +502 -0
- package/dist/core/model-training-registry.d.ts +295 -0
- package/dist/core/model-training-registry.js +474 -0
- package/dist/core/observability.d.ts +40 -0
- package/dist/core/observability.js +164 -0
- package/dist/core/pain-diagnostic-gate.d.ts +36 -0
- package/dist/core/pain-diagnostic-gate.js +105 -0
- package/dist/core/pain.d.ts +87 -0
- package/dist/core/pain.js +223 -0
- package/dist/core/path-resolver.d.ts +60 -0
- package/{src/core/path-resolver.ts → dist/core/path-resolver.js} +41 -131
- package/dist/core/paths.d.ts +60 -0
- package/{src/core/paths.ts → dist/core/paths.js} +4 -13
- package/dist/core/pd-config-loader.d.ts +96 -0
- package/dist/core/pd-config-loader.js +307 -0
- package/dist/core/pd-task-reconciler.d.ts +89 -0
- package/dist/core/pd-task-reconciler.js +262 -0
- package/dist/core/pd-task-service.d.ts +2 -0
- package/dist/core/pd-task-service.js +32 -0
- package/dist/core/pd-task-store.d.ts +5 -0
- package/dist/core/pd-task-store.js +62 -0
- package/dist/core/pd-task-types.d.ts +8 -0
- package/dist/core/pd-task-types.js +2 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.d.ts +1 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.js +132 -0
- package/dist/core/principle-compiler/code-validator.d.ts +14 -0
- package/dist/core/principle-compiler/code-validator.js +86 -0
- package/dist/core/principle-compiler/compiler.d.ts +45 -0
- package/dist/core/principle-compiler/compiler.js +287 -0
- package/{src/core/principle-compiler/index.ts → dist/core/principle-compiler/index.d.ts} +0 -1
- package/dist/core/principle-compiler/index.js +10 -0
- package/dist/core/principle-compiler/ledger-registrar.d.ts +28 -0
- package/dist/core/principle-compiler/ledger-registrar.js +95 -0
- package/{src/core/principle-compiler/template-generator.ts → dist/core/principle-compiler/template-generator.d.ts} +0 -1
- package/dist/core/principle-compiler/template-generator.js +7 -0
- package/{src/core/principle-injection.ts → dist/core/principle-injection.d.ts} +1 -7
- package/dist/core/principle-injection.js +10 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.d.ts +15 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.js +34 -0
- package/dist/core/principle-internalization/lifecycle-read-model.d.ts +17 -0
- package/{src/core/principle-internalization/lifecycle-read-model.ts → dist/core/principle-internalization/lifecycle-read-model.js} +2 -21
- package/dist/core/principle-internalization/lifecycle-refresh.d.ts +2 -0
- package/dist/core/principle-internalization/lifecycle-refresh.js +4 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.d.ts +28 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.js +89 -0
- package/dist/core/principle-training-state.d.ts +47 -0
- package/dist/core/principle-training-state.js +113 -0
- package/dist/core/principle-tree-ledger-adapter.d.ts +32 -0
- package/dist/core/principle-tree-ledger-adapter.js +125 -0
- package/dist/core/principle-tree-ledger.d.ts +82 -0
- package/dist/core/principle-tree-ledger.js +527 -0
- package/dist/core/profile.d.ts +62 -0
- package/dist/core/profile.js +211 -0
- package/dist/core/promotion-gate.d.ts +243 -0
- package/dist/core/promotion-gate.js +554 -0
- package/dist/core/reflection/reflection-context.d.ts +31 -0
- package/dist/core/reflection/reflection-context.js +91 -0
- package/dist/core/replay-engine.d.ts +12 -0
- package/dist/core/replay-engine.js +82 -0
- package/dist/core/risk-calculator.d.ts +22 -0
- package/{src/core/risk-calculator.ts → dist/core/risk-calculator.js} +19 -49
- package/{src/core/rule-host-helpers.ts → dist/core/rule-host-helpers.d.ts} +0 -1
- package/dist/core/rule-host-helpers.js +7 -0
- package/{src/core/rule-host-types.ts → dist/core/rule-host-types.d.ts} +1 -8
- package/dist/core/rule-host-types.js +7 -0
- package/dist/core/rule-host.d.ts +86 -0
- package/dist/core/rule-host.js +311 -0
- package/dist/core/rule-implementation-runtime.d.ts +18 -0
- package/dist/core/rule-implementation-runtime.js +112 -0
- package/dist/core/runtime-v2-prompt-activation-reader.d.ts +22 -0
- package/dist/core/runtime-v2-prompt-activation-reader.js +99 -0
- package/{src/core/schema/db-types.ts → dist/core/schema/db-types.d.ts} +4 -9
- package/dist/core/schema/db-types.js +5 -0
- package/{src/core/schema/index.ts → dist/core/schema/index.d.ts} +1 -10
- package/dist/core/schema/index.js +15 -0
- package/dist/core/schema/migration-runner.d.ts +53 -0
- package/dist/core/schema/migration-runner.js +170 -0
- package/dist/core/schema/migrations/001-init-trajectory.d.ts +6 -0
- package/{src/core/schema/migrations/001-init-trajectory.ts → dist/core/schema/migrations/001-init-trajectory.js} +38 -56
- package/dist/core/schema/migrations/002-init-central.d.ts +5 -0
- package/{src/core/schema/migrations/002-init-central.ts → dist/core/schema/migrations/002-init-central.js} +27 -41
- package/dist/core/schema/migrations/003-init-workflow.d.ts +5 -0
- package/{src/core/schema/migrations/003-init-workflow.ts → dist/core/schema/migrations/003-init-workflow.js} +16 -21
- package/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +8 -0
- package/{src/core/schema/migrations/004-add-thinking-and-gfi.ts → dist/core/schema/migrations/004-add-thinking-and-gfi.js} +19 -27
- package/{src/core/schema/migrations/index.ts → dist/core/schema/migrations/index.d.ts} +1 -16
- package/dist/core/schema/migrations/index.js +27 -0
- package/dist/core/schema/schema-definitions.d.ts +46 -0
- package/{src/core/schema/schema-definitions.ts → dist/core/schema/schema-definitions.js} +242 -291
- package/dist/core/session-tracker.d.ts +119 -0
- package/{src/core/session-tracker.ts → dist/core/session-tracker.js} +96 -239
- package/dist/core/shadow-observation-registry.d.ts +217 -0
- package/dist/core/shadow-observation-registry.js +280 -0
- package/dist/core/surface-guard.d.ts +31 -0
- package/dist/core/surface-guard.js +131 -0
- package/dist/core/system-logger.d.ts +8 -0
- package/{src/core/system-logger.ts → dist/core/system-logger.js} +20 -34
- package/dist/core/thinking-models.d.ts +70 -0
- package/dist/core/thinking-models.js +300 -0
- package/dist/core/thinking-os-parser.d.ts +35 -0
- package/dist/core/thinking-os-parser.js +123 -0
- package/dist/core/trajectory-types.d.ts +220 -0
- package/dist/core/trajectory-types.js +8 -0
- package/dist/core/trajectory.d.ts +242 -0
- package/dist/core/trajectory.js +1500 -0
- package/dist/core/workflow-funnel-loader.d.ts +72 -0
- package/dist/core/workflow-funnel-loader.js +135 -0
- package/dist/core/workspace-context.d.ts +111 -0
- package/{src/core/workspace-context.ts → dist/core/workspace-context.js} +50 -105
- package/dist/core/workspace-dir-validation.d.ts +11 -0
- package/dist/core/workspace-dir-validation.js +37 -0
- package/dist/core/workspace-guidance-migrator.d.ts +12 -0
- package/{src/core/workspace-guidance-migrator.ts → dist/core/workspace-guidance-migrator.js} +21 -59
- package/dist/hooks/after-tool-call-helpers.d.ts +89 -0
- package/dist/hooks/after-tool-call-helpers.js +475 -0
- package/dist/hooks/after-tool-call-types.d.ts +86 -0
- package/dist/hooks/after-tool-call-types.js +13 -0
- package/dist/hooks/gate-block-helper.d.ts +44 -0
- package/dist/hooks/gate-block-helper.js +209 -0
- package/dist/hooks/gate.d.ts +16 -0
- package/dist/hooks/gate.js +381 -0
- package/dist/hooks/lifecycle.d.ts +5 -0
- package/dist/hooks/lifecycle.js +287 -0
- package/dist/hooks/llm.d.ts +13 -0
- package/{src/hooks/llm.ts → dist/hooks/llm.js} +63 -117
- package/dist/hooks/message-sanitize.d.ts +24 -0
- package/dist/hooks/message-sanitize.js +77 -0
- package/dist/hooks/pain.d.ts +33 -0
- package/dist/hooks/pain.js +294 -0
- package/dist/hooks/prompt.d.ts +52 -0
- package/dist/hooks/prompt.js +930 -0
- package/dist/hooks/raw-observation-adapter.d.ts +57 -0
- package/dist/hooks/raw-observation-adapter.js +170 -0
- package/dist/hooks/raw-observation-types.d.ts +62 -0
- package/dist/hooks/raw-observation-types.js +15 -0
- package/dist/hooks/subagent.d.ts +9 -0
- package/{src/hooks/subagent.ts → dist/hooks/subagent.js} +20 -60
- package/dist/hooks/trajectory-collector.d.ts +25 -0
- package/dist/hooks/trajectory-collector.js +225 -0
- package/dist/hooks/trajectory-evidence.d.ts +11 -0
- package/dist/hooks/trajectory-evidence.js +88 -0
- package/dist/hooks/triage-adapter.d.ts +58 -0
- package/{src/hooks/triage-adapter.ts → dist/hooks/triage-adapter.js} +36 -68
- package/dist/hooks/trigger-cooldown-tracker.d.ts +30 -0
- package/dist/hooks/trigger-cooldown-tracker.js +55 -0
- package/dist/i18n/commands.d.ts +26 -0
- package/dist/i18n/commands.js +96 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +829 -0
- package/dist/openclaw-sdk.d.ts +293 -0
- package/dist/openclaw-sdk.js +4 -0
- package/dist/service/central-database.d.ts +138 -0
- package/dist/service/central-database.js +731 -0
- package/dist/service/central-sync-service.d.ts +8 -0
- package/dist/service/central-sync-service.js +71 -0
- package/dist/service/correction-observer-service.d.ts +19 -0
- package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js} +36 -76
- package/dist/service/evolution-dedup.d.ts +27 -0
- package/{src/service/evolution-dedup.ts → dist/service/evolution-dedup.js} +11 -31
- package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts} +15 -62
- package/dist/service/evolution-queue-migration.js +53 -0
- package/dist/service/evolution-worker.d.ts +103 -0
- package/{src/service/evolution-worker.ts → dist/service/evolution-worker.js} +169 -331
- package/dist/service/internalization-auto-consumer-service.d.ts +8 -0
- package/dist/service/internalization-auto-consumer-service.js +322 -0
- package/dist/service/keyword-optimization-service.d.ts +44 -0
- package/dist/service/keyword-optimization-service.js +137 -0
- package/dist/service/phase3-input-filter.d.ts +73 -0
- package/dist/service/phase3-input-filter.js +172 -0
- package/dist/service/queue-io.d.ts +30 -0
- package/dist/service/queue-io.js +79 -0
- package/{src/service/queue-migration.ts → dist/service/queue-migration.d.ts} +6 -45
- package/dist/service/queue-migration.js +56 -0
- package/dist/service/runtime-summary-service.d.ts +158 -0
- package/dist/service/runtime-summary-service.js +636 -0
- package/dist/service/subagent-workflow/subagent-error-utils.d.ts +8 -0
- package/{src/service/subagent-workflow/subagent-error-utils.ts → dist/service/subagent-workflow/subagent-error-utils.js} +3 -6
- package/{src/service/subagent-workflow/types.ts → dist/service/subagent-workflow/types.d.ts} +17 -80
- package/dist/service/subagent-workflow/types.js +11 -0
- package/dist/service/subagent-workflow/workflow-store.d.ts +30 -0
- package/{src/service/subagent-workflow/workflow-store.ts → dist/service/subagent-workflow/workflow-store.js} +43 -108
- package/dist/service/trajectory-service.d.ts +2 -0
- package/dist/service/trajectory-service.js +16 -0
- package/dist/service/workflow-watchdog.d.ts +23 -0
- package/dist/service/workflow-watchdog.js +103 -0
- package/dist/types/event-types.d.ts +2 -0
- package/dist/types/event-types.js +1 -0
- package/dist/types/hygiene-types.d.ts +2 -0
- package/dist/types/hygiene-types.js +1 -0
- package/{src/types/principle-tree-schema.ts → dist/types/principle-tree-schema.d.ts} +2 -25
- package/dist/types/principle-tree-schema.js +24 -0
- package/dist/types/queue.d.ts +2 -0
- package/dist/types/queue.js +1 -0
- package/dist/types/runtime-summary.d.ts +1 -0
- package/dist/types/runtime-summary.js +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.js +16 -0
- package/dist/utils/file-lock.d.ts +68 -0
- package/dist/utils/file-lock.js +310 -0
- package/dist/utils/hashing.d.ts +9 -0
- package/{src/utils/hashing.ts → dist/utils/hashing.js} +4 -6
- package/dist/utils/io.d.ts +11 -0
- package/dist/utils/io.js +174 -0
- package/dist/utils/node-vm-polyfill.d.ts +9 -0
- package/{src/utils/node-vm-polyfill.ts → dist/utils/node-vm-polyfill.js} +0 -2
- package/dist/utils/retry.d.ts +210 -0
- package/dist/utils/retry.js +375 -0
- package/dist/utils/session-key.d.ts +10 -0
- package/{src/utils/session-key.ts → dist/utils/session-key.js} +5 -4
- package/dist/utils/shadow-fingerprint.d.ts +16 -0
- package/dist/utils/shadow-fingerprint.js +34 -0
- package/dist/utils/workspace-resolver.d.ts +82 -0
- package/dist/utils/workspace-resolver.js +288 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -2
- package/templates/workspace/.principles/DECISION_POLICY.json +44 -0
- package/templates/workspace/.principles/PRINCIPLES.md +20 -0
- package/templates/workspace/.principles/PROFILE.json +54 -0
- package/templates/workspace/.principles/PROFILE.schema.json +56 -0
- package/templates/workspace/.principles/THINKING_OS.md +65 -0
- package/templates/workspace/.principles/THINKING_OS_ARCHIVE.md +7 -0
- package/templates/workspace/.principles/THINKING_OS_CANDIDATES.md +9 -0
- package/templates/workspace/.principles/models/_INDEX.md +27 -0
- package/templates/workspace/.principles/models/first_principles.md +62 -0
- package/templates/workspace/.principles/models/marketing_4p.md +52 -0
- package/templates/workspace/.principles/models/porter_five.md +63 -0
- package/templates/workspace/.principles/models/swot.md +60 -0
- package/templates/workspace/.principles/models/user_story_map.md +63 -0
- package/templates/workspace/.state/WORKBOARD.json +4 -0
- package/.dependency-cruiser.json +0 -19
- package/ADVANCED_CONFIG_ZH.md +0 -93
- package/AGENT_INSTALL.md +0 -173
- package/AGENT_INSTALL_EN.md +0 -173
- package/CHANGELOG.md +0 -26
- package/INSTALL.md +0 -254
- package/SKILL.md +0 -63
- package/esbuild.config.js +0 -104
- package/src/commands/archive-impl.ts +0 -147
- package/src/commands/capabilities.ts +0 -89
- package/src/commands/disable-impl.ts +0 -159
- package/src/commands/evolution-status.ts +0 -247
- package/src/commands/export.ts +0 -59
- package/src/commands/focus.ts +0 -523
- package/src/commands/principle-rollback.ts +0 -32
- package/src/commands/promote-impl.ts +0 -254
- package/src/commands/rollback-impl.ts +0 -246
- package/src/commands/samples.ts +0 -65
- package/src/commands/strategy.ts +0 -21
- package/src/config/errors.ts +0 -180
- package/src/constants/tools.ts +0 -62
- package/src/core/AGENTS.md +0 -34
- package/src/core/__tests__/focus-history.test.ts +0 -210
- package/src/core/bootstrap-rules.ts +0 -216
- package/src/core/code-implementation-storage.ts +0 -213
- package/src/core/config-health.ts +0 -72
- package/src/core/control-ui-db.ts +0 -454
- package/src/core/correction-cue-learner.ts +0 -239
- package/src/core/correction-types.ts +0 -16
- package/src/core/empathy-keyword-matcher.ts +0 -64
- package/src/core/empathy-types.ts +0 -18
- package/src/core/event-log.ts +0 -787
- package/src/core/evolution-engine.ts +0 -613
- package/src/core/evolution-logger.ts +0 -357
- package/src/core/evolution-migration.ts +0 -77
- package/src/core/evolution-reducer.ts +0 -891
- package/src/core/evolution-types.ts +0 -110
- package/src/core/external-training-contract.ts +0 -530
- package/src/core/file-store.ts +0 -80
- package/src/core/focus-history.ts +0 -763
- package/src/core/hygiene/tracker.ts +0 -122
- package/src/core/local-worker-routing.ts +0 -337
- package/src/core/model-deployment-registry.ts +0 -724
- package/src/core/model-training-registry.ts +0 -815
- package/src/core/observability.ts +0 -242
- package/src/core/pain-diagnostic-gate.ts +0 -169
- package/src/core/pain.ts +0 -309
- package/src/core/pd-config-loader.ts +0 -400
- package/src/core/pd-task-reconciler.ts +0 -380
- package/src/core/pd-task-service.ts +0 -43
- package/src/core/pd-task-store.ts +0 -78
- package/src/core/pd-task-types.ts +0 -24
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +0 -174
- package/src/core/principle-compiler/code-validator.ts +0 -96
- package/src/core/principle-compiler/compiler.ts +0 -327
- package/src/core/principle-compiler/ledger-registrar.ts +0 -116
- package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +0 -42
- package/src/core/principle-internalization/lifecycle-refresh.ts +0 -11
- package/src/core/principle-internalization/principle-lifecycle-service.ts +0 -170
- package/src/core/principle-training-state.ts +0 -177
- package/src/core/principle-tree-ledger-adapter.ts +0 -145
- package/src/core/principle-tree-ledger.ts +0 -725
- package/src/core/profile.ts +0 -228
- package/src/core/promotion-gate.ts +0 -854
- package/src/core/reflection/reflection-context.ts +0 -133
- package/src/core/replay-engine.ts +0 -106
- package/src/core/rule-host.ts +0 -386
- package/src/core/rule-implementation-runtime.ts +0 -145
- package/src/core/runtime-v2-prompt-activation-reader.ts +0 -114
- package/src/core/schema/migration-runner.ts +0 -207
- package/src/core/shadow-observation-registry.ts +0 -508
- package/src/core/surface-guard.ts +0 -188
- package/src/core/thinking-models.ts +0 -377
- package/src/core/thinking-os-parser.ts +0 -165
- package/src/core/trajectory-types.ts +0 -247
- package/src/core/trajectory.ts +0 -1831
- package/src/core/workflow-funnel-loader.ts +0 -195
- package/src/core/workspace-dir-validation.ts +0 -52
- package/src/hooks/AGENTS.md +0 -31
- package/src/hooks/after-tool-call-helpers.ts +0 -601
- package/src/hooks/after-tool-call-types.ts +0 -99
- package/src/hooks/gate-block-helper.ts +0 -265
- package/src/hooks/gate.ts +0 -394
- package/src/hooks/lifecycle.ts +0 -334
- package/src/hooks/message-sanitize.ts +0 -102
- package/src/hooks/pain.ts +0 -358
- package/src/hooks/prompt.ts +0 -1102
- package/src/hooks/raw-observation-adapter.ts +0 -215
- package/src/hooks/raw-observation-types.ts +0 -77
- package/src/hooks/trajectory-collector.ts +0 -253
- package/src/hooks/trajectory-evidence.ts +0 -97
- package/src/hooks/trigger-cooldown-tracker.ts +0 -82
- package/src/i18n/commands.ts +0 -101
- package/src/index.ts +0 -939
- package/src/openclaw-sdk.ts +0 -312
- package/src/service/central-database.ts +0 -936
- package/src/service/central-sync-service.ts +0 -85
- package/src/service/internalization-auto-consumer-service.ts +0 -397
- package/src/service/keyword-optimization-service.ts +0 -169
- package/src/service/phase3-input-filter.ts +0 -237
- package/src/service/queue-io.ts +0 -108
- package/src/service/runtime-summary-service.ts +0 -990
- package/src/service/trajectory-service.ts +0 -16
- package/src/service/workflow-watchdog.ts +0 -125
- package/src/types/event-types.ts +0 -39
- package/src/types/hygiene-types.ts +0 -8
- package/src/types/queue.ts +0 -15
- package/src/types/runtime-summary.ts +0 -5
- package/src/types.ts +0 -53
- package/src/utils/file-lock.ts +0 -394
- package/src/utils/io.ts +0 -176
- package/src/utils/retry.ts +0 -573
- package/src/utils/shadow-fingerprint.ts +0 -42
- package/src/utils/workspace-resolver.ts +0 -393
- package/tests/README.md +0 -120
- package/tests/build-artifacts.test.ts +0 -55
- package/tests/commands/evolution-status.test.ts +0 -511
- package/tests/commands/export.test.ts +0 -78
- package/tests/commands/pain.test.ts +0 -287
- package/tests/commands/samples.test.ts +0 -65
- package/tests/commands/strategy.test.ts +0 -19
- package/tests/commands/thinking-os.test.ts +0 -88
- package/tests/core/bootstrap-rules.test.ts +0 -596
- package/tests/core/code-implementation-storage.test.ts +0 -300
- package/tests/core/code-validator.test.ts +0 -197
- package/tests/core/config-service.test.ts +0 -89
- package/tests/core/config.test.ts +0 -90
- package/tests/core/control-ui-db.test.ts +0 -75
- package/tests/core/core-principle-registry-drift.test.ts +0 -39
- package/tests/core/core-template-guidance.test.ts +0 -21
- package/tests/core/correction-cue-learner.test.ts +0 -345
- package/tests/core/detection-service.test.ts +0 -50
- package/tests/core/dictionary-service.test.ts +0 -116
- package/tests/core/dictionary.test.ts +0 -171
- package/tests/core/empathy-keyword-matcher.test.ts +0 -209
- package/tests/core/event-log.test.ts +0 -484
- package/tests/core/evolution-engine.test.ts +0 -610
- package/tests/core/evolution-logger.test.ts +0 -148
- package/tests/core/evolution-migration.test.ts +0 -374
- package/tests/core/evolution-paths.test.ts +0 -21
- package/tests/core/evolution-reducer.compilation-retry.test.ts +0 -189
- package/tests/core/evolution-reducer.detector-metadata.test.ts +0 -602
- package/tests/core/evolution-types-loop.test.ts +0 -48
- package/tests/core/external-training-contract.test.ts +0 -463
- package/tests/core/file-store.test.ts +0 -102
- package/tests/core/focus-history.test.ts +0 -874
- package/tests/core/init-flatten.test.ts +0 -69
- package/tests/core/init-refactor.test.ts +0 -87
- package/tests/core/init-v1.3.test.ts +0 -46
- package/tests/core/init.test.ts +0 -190
- package/tests/core/ledger-registrar.test.ts +0 -235
- package/tests/core/migration.test.ts +0 -84
- package/tests/core/model-deployment-registry.test.ts +0 -858
- package/tests/core/model-training-registry.test.ts +0 -908
- package/tests/core/observability.test.ts +0 -382
- package/tests/core/pain-diagnostic-gate.test.ts +0 -614
- package/tests/core/pain-score.property.test.ts +0 -19
- package/tests/core/pain.test.ts +0 -132
- package/tests/core/path-resolver.test.ts +0 -57
- package/tests/core/paths-refactor.test.ts +0 -20
- package/tests/core/pd-config-loader.test.ts +0 -407
- package/tests/core/pd-task-store.test.ts +0 -126
- package/tests/core/phase7-rollout-integration.test.ts +0 -477
- package/tests/core/principle-compiler.test.ts +0 -350
- package/tests/core/principle-injection.test.ts +0 -223
- package/tests/core/principle-internalization/deprecated-readiness.test.ts +0 -193
- package/tests/core/principle-internalization/lifecycle-metrics.test.ts +0 -350
- package/tests/core/principle-internalization/lifecycle-routing-policy.test.ts +0 -212
- package/tests/core/principle-internalization/lineage-source-retired.test.ts +0 -56
- package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +0 -189
- package/tests/core/principle-training-state.test.ts +0 -939
- package/tests/core/principle-tree-ledger-adapter.test.ts +0 -253
- package/tests/core/principle-tree-ledger.test.ts +0 -423
- package/tests/core/profile.test.ts +0 -56
- package/tests/core/promotion-gate.test.ts +0 -561
- package/tests/core/queue-purge.test.ts +0 -337
- package/tests/core/reflection-context.test.ts +0 -342
- package/tests/core/regression-v1-9-1.test.ts +0 -266
- package/tests/core/replay-engine.test.ts +0 -165
- package/tests/core/risk-calculator.test.ts +0 -168
- package/tests/core/rule-host-adversarial-output.test.ts +0 -242
- package/tests/core/rule-host-autocorrect-vm.test.ts +0 -163
- package/tests/core/rule-host-helpers.test.ts +0 -120
- package/tests/core/rule-host-resource-bounds.test.ts +0 -231
- package/tests/core/rule-host-sqlite-source.test.ts +0 -720
- package/tests/core/rule-host-unhealthy-visibility.test.ts +0 -261
- package/tests/core/rule-host-validation.test.ts +0 -315
- package/tests/core/rule-implementation-runtime.test.ts +0 -49
- package/tests/core/session-tracker.test.ts +0 -191
- package/tests/core/surface-guard.test.ts +0 -338
- package/tests/core/template-generator.test.ts +0 -101
- package/tests/core/trajectory.test.ts +0 -427
- package/tests/core/workflow-funnel-loader.test.ts +0 -1028
- package/tests/core/workspace-context-factory.test.ts +0 -18
- package/tests/core/workspace-context.test.ts +0 -187
- package/tests/core/workspace-guidance-migrator.test.ts +0 -248
- package/tests/core-anti-growth.test.ts +0 -182
- package/tests/evolution-worker-quarantine.test.ts +0 -400
- package/tests/evolution-worker-slimming.test.ts +0 -380
- package/tests/fixtures/legacy-queue-v1.json +0 -74
- package/tests/fixtures/production-compatibility.test.ts +0 -147
- package/tests/fixtures/production-mock-generator.ts +0 -282
- package/tests/globalSetup.ts +0 -38
- package/tests/hook-workspace-nextaction-contract.test.ts +0 -50
- package/tests/hooks/confirm-first-removal.test.ts +0 -188
- package/tests/hooks/gate-auto-correct-shadow.test.ts +0 -309
- package/tests/hooks/gate-auto-correct.test.ts +0 -664
- package/tests/hooks/gate-block-helper-profile.test.ts +0 -186
- package/tests/hooks/gate-no-path-write-tool.test.ts +0 -171
- package/tests/hooks/gate-rule-host-pipeline.test.ts +0 -230
- package/tests/hooks/gate-rule-host-real-pipeline.test.ts +0 -190
- package/tests/hooks/lifecycle.test.ts +0 -248
- package/tests/hooks/message-sanitize.test.ts +0 -244
- package/tests/hooks/pain-emission-characterization.test.ts +0 -420
- package/tests/hooks/pain.test.ts +0 -795
- package/tests/hooks/prompt-characterization.test.ts +0 -476
- package/tests/hooks/prompt-diet.test.ts +0 -335
- package/tests/hooks/prompt-size-guard.test.ts +0 -319
- package/tests/hooks/raw-observation-adapter.test.ts +0 -312
- package/tests/hooks/runtime-v2-prompt-activation.test.ts +0 -895
- package/tests/hooks/single-gate-pain-admission.test.ts +0 -258
- package/tests/hooks/subagent.test.ts +0 -469
- package/tests/hooks/trajectory-collector.test.ts +0 -269
- package/tests/hooks/trajectory-evidence.test.ts +0 -280
- package/tests/hooks/triage-adapter.test.ts +0 -331
- package/tests/hygiene-tracker.test.ts +0 -77
- package/tests/index.test.ts +0 -142
- package/tests/integration/auto-entry-gate.test.ts +0 -256
- package/tests/integration/gate-real-io.e2e.test.ts +0 -248
- package/tests/integration/m8-legacy-paths.test.ts +0 -63
- package/tests/integration/mvp-surface-registry-guard.test.ts +0 -536
- package/tests/integration/pain-id-chain-e2e.test.ts +0 -313
- package/tests/integration/principle-compiler-e2e.test.ts +0 -403
- package/tests/integration/principle-lifecycle.e2e.test.ts +0 -198
- package/tests/integration/runtime-v2-pain-guard.test.ts +0 -125
- package/tests/integration/trajectory-lifecycle.e2e.test.ts +0 -523
- package/tests/internalization-auto-consumer-gate.test.ts +0 -158
- package/tests/internalization-auto-consumer-service.test.ts +0 -219
- package/tests/plugin-config-resolution-cutover.test.ts +0 -359
- package/tests/queue/async-lock.test.ts +0 -200
- package/tests/runtime-v2-discovery-guard.test.ts +0 -153
- package/tests/scripts/validate-live-path.test.ts +0 -286
- package/tests/service/central-database.test.ts +0 -457
- package/tests/service/correction-observer-service.test.ts +0 -505
- package/tests/service/evolution-worker.compilation-backfill.test.ts +0 -203
- package/tests/service/evolution-worker.correction-observer.test.ts +0 -50
- package/tests/service/evolution-worker.queue.test.ts +0 -296
- package/tests/service/evolution-worker.timeout.test.ts +0 -233
- package/tests/service/keyword-optimization-service.test.ts +0 -121
- package/tests/service/phase3-input-filter.test.ts +0 -289
- package/tests/service/queue-io.test.ts +0 -168
- package/tests/service/queue-migration.test.ts +0 -147
- package/tests/service/runtime-summary-service.test.ts +0 -1100
- package/tests/service/workflow-watchdog.test.ts +0 -281
- package/tests/task-compliance.test.ts +0 -166
- package/tests/test-utils.ts +0 -48
- package/tests/utils/file-lock.test.ts +0 -409
- package/tests/utils/hashing.test.ts +0 -32
- package/tests/utils/hook-workspace-resolver.test.ts +0 -524
- package/tests/utils/io.test.ts +0 -39
- package/tests/utils/retry.test.ts +0 -327
- package/tests/utils/session-key.test.ts +0 -52
- package/tsconfig.json +0 -16
- package/vitest.config.ts +0 -61
- package/vitest.unit.config.ts +0 -12
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3 Input Filter
|
|
3
|
+
*
|
|
4
|
+
* CRITICAL: evaluatePhase3Inputs() does NOT read or use evolution_directive.json
|
|
5
|
+
* Directive is a compatibility-only display artifact, not a truth source.
|
|
6
|
+
*
|
|
7
|
+
* Phase 3 eligibility depends ONLY on:
|
|
8
|
+
* - Queue truth (valid evolution samples from queue)
|
|
9
|
+
*
|
|
10
|
+
* Any directive file is ignored for eligibility decisions.
|
|
11
|
+
*
|
|
12
|
+
* THREE-LANE CLASSIFICATION:
|
|
13
|
+
* - authoritative: Valid inputs that can be used for Phase 3 eligibility decisions
|
|
14
|
+
* - reference_only: Valid evidence that must NOT be used as positive eligibility input
|
|
15
|
+
* (e.g., timeout-only outcomes - they indicate completion but not success)
|
|
16
|
+
* - rejected: Invalid, corrupt, or policy-prohibited input
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Legacy queue statuses that are rejected for Phase 3
|
|
20
|
+
*/
|
|
21
|
+
const LEGACY_QUEUE_STATUSES = ['resolved', 'blocked', 'failed', 'cancelled', 'paused'];
|
|
22
|
+
function normalizeTaskId(value) {
|
|
23
|
+
if (typeof value !== 'string')
|
|
24
|
+
return null;
|
|
25
|
+
const normalized = value.trim();
|
|
26
|
+
return normalized ? normalized : null;
|
|
27
|
+
}
|
|
28
|
+
function normalizeStatus(value) {
|
|
29
|
+
const normalized = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
30
|
+
if (normalized === 'in_progress' || normalized === 'completed')
|
|
31
|
+
return normalized;
|
|
32
|
+
if (normalized === 'pending')
|
|
33
|
+
return 'pending';
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a status is a legacy value that should be rejected
|
|
38
|
+
*/
|
|
39
|
+
function isLegacyStatus(value) {
|
|
40
|
+
const normalized = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
41
|
+
return LEGACY_QUEUE_STATUSES.includes(normalized);
|
|
42
|
+
}
|
|
43
|
+
function normalizeTimestamp(value) {
|
|
44
|
+
if (typeof value !== 'string')
|
|
45
|
+
return null;
|
|
46
|
+
const normalized = value.trim();
|
|
47
|
+
if (!normalized)
|
|
48
|
+
return null;
|
|
49
|
+
const timestamp = Date.parse(normalized);
|
|
50
|
+
return Number.isNaN(timestamp) ? null : normalized;
|
|
51
|
+
}
|
|
52
|
+
function dedupe(values) {
|
|
53
|
+
return [...new Set(values)];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Checks if a task has a timeout-only outcome (resolution indicates only timeout)
|
|
57
|
+
*/
|
|
58
|
+
function isTimeoutOnlyOutcome(item) {
|
|
59
|
+
const resolution = typeof item?.resolution === 'string' ? item.resolution.trim().toLowerCase() : '';
|
|
60
|
+
return resolution === 'auto_completed_timeout';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Evaluates Phase 3 readiness based on queue inputs.
|
|
64
|
+
*
|
|
65
|
+
* IMPORTANT: Does NOT use evolution_directive.json.
|
|
66
|
+
* Directive is compatibility-only display artifact, not a truth source.
|
|
67
|
+
* Queue is the only authoritative execution truth source for Phase 3.
|
|
68
|
+
*
|
|
69
|
+
* THREE-LANE CLASSIFICATION:
|
|
70
|
+
* - authoritative: Valid inputs for Phase 3 eligibility
|
|
71
|
+
* - reference_only: Valid evidence but not for eligibility (e.g., timeout outcomes)
|
|
72
|
+
* - rejected: Invalid, corrupt, or policy-prohibited input
|
|
73
|
+
*
|
|
74
|
+
* @param queue - Evolution queue items to validate
|
|
75
|
+
* @returns Phase 3 eligibility results
|
|
76
|
+
*/
|
|
77
|
+
export function evaluatePhase3Inputs(queue) {
|
|
78
|
+
const eligible = [];
|
|
79
|
+
const referenceOnly = [];
|
|
80
|
+
const rejected = [];
|
|
81
|
+
const taskIdCounts = new Map();
|
|
82
|
+
for (const item of queue) {
|
|
83
|
+
const taskId = normalizeTaskId(item?.id);
|
|
84
|
+
if (!taskId)
|
|
85
|
+
continue;
|
|
86
|
+
taskIdCounts.set(taskId, (taskIdCounts.get(taskId) ?? 0) + 1);
|
|
87
|
+
}
|
|
88
|
+
for (const item of queue) {
|
|
89
|
+
const taskId = normalizeTaskId(item?.id);
|
|
90
|
+
const status = normalizeStatus(item?.status);
|
|
91
|
+
const reasons = [];
|
|
92
|
+
const startedAt = normalizeTimestamp(item?.started_at);
|
|
93
|
+
const completedAt = normalizeTimestamp(item?.completed_at);
|
|
94
|
+
// Check for legacy statuses first (before other status validation)
|
|
95
|
+
if (isLegacyStatus(item?.status)) {
|
|
96
|
+
reasons.push('legacy_queue_status');
|
|
97
|
+
}
|
|
98
|
+
// Check for null status separately
|
|
99
|
+
if (item?.status === null) {
|
|
100
|
+
reasons.push('missing_status');
|
|
101
|
+
}
|
|
102
|
+
if (!taskId) {
|
|
103
|
+
reasons.push('missing_task_id');
|
|
104
|
+
}
|
|
105
|
+
else if ((taskIdCounts.get(taskId) ?? 0) > 1) {
|
|
106
|
+
reasons.push('reused_task_id');
|
|
107
|
+
}
|
|
108
|
+
// Only add invalid_status if it's not a legacy status and not null
|
|
109
|
+
if (!status && !isLegacyStatus(item?.status) && item?.status !== null) {
|
|
110
|
+
reasons.push('invalid_status');
|
|
111
|
+
}
|
|
112
|
+
if (typeof item?.started_at === 'string' && item.started_at.trim() && !startedAt) {
|
|
113
|
+
reasons.push('invalid_started_at');
|
|
114
|
+
}
|
|
115
|
+
if (typeof item?.completed_at === 'string' && item.completed_at.trim() && !completedAt) {
|
|
116
|
+
reasons.push('invalid_completed_at');
|
|
117
|
+
}
|
|
118
|
+
if (status === 'in_progress' && !startedAt) {
|
|
119
|
+
reasons.push('missing_started_at');
|
|
120
|
+
}
|
|
121
|
+
if (status === 'completed' && !completedAt) {
|
|
122
|
+
reasons.push('missing_completed_at');
|
|
123
|
+
}
|
|
124
|
+
// Handle rejected items first
|
|
125
|
+
if (reasons.length > 0) {
|
|
126
|
+
rejected.push({
|
|
127
|
+
taskId,
|
|
128
|
+
status: typeof item?.status === 'string' ? item.status : null,
|
|
129
|
+
reasons: dedupe(reasons),
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (!taskId || !status) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Check for timeout-only outcomes (REFERENCE_ONLY, not rejected)
|
|
137
|
+
// These are valid completions but shouldn't count as positive evidence
|
|
138
|
+
if (status === 'completed' && isTimeoutOnlyOutcome(item)) {
|
|
139
|
+
referenceOnly.push({
|
|
140
|
+
taskId,
|
|
141
|
+
status: 'completed',
|
|
142
|
+
classification: 'timeout_only',
|
|
143
|
+
reason: 'Task completed via timeout - valid execution but not positive capability evidence',
|
|
144
|
+
});
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// Valid eligible sample
|
|
148
|
+
eligible.push({
|
|
149
|
+
taskId,
|
|
150
|
+
status,
|
|
151
|
+
startedAt,
|
|
152
|
+
completedAt,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Queue is ready when:
|
|
156
|
+
// 1. Queue has items
|
|
157
|
+
// 2. No invalid/corrupt items (rejected is empty)
|
|
158
|
+
// 3. Either eligible OR referenceOnly has items (valid data exists)
|
|
159
|
+
// Note: referenceOnly (timeout outcomes) is valid data, just not positive evidence
|
|
160
|
+
const hasValidData = eligible.length > 0 || referenceOnly.length > 0;
|
|
161
|
+
const queueTruthReady = queue.length > 0 && rejected.length === 0 && hasValidData;
|
|
162
|
+
const phase3ShadowEligible = queueTruthReady && eligible.length > 0;
|
|
163
|
+
return {
|
|
164
|
+
queueTruthReady,
|
|
165
|
+
phase3ShadowEligible,
|
|
166
|
+
evolution: {
|
|
167
|
+
eligible,
|
|
168
|
+
referenceOnly,
|
|
169
|
+
rejected,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue I/O + Enqueue — extracted from evolution-worker.ts
|
|
3
|
+
*
|
|
4
|
+
* Full persistence layer encapsulating queue file locking, atomic writes,
|
|
5
|
+
* queue format, and enqueue orchestration. Depends on file-lock.ts, io.ts,
|
|
6
|
+
* queue-migration.ts, and pain.ts.
|
|
7
|
+
* Zero imports from evolution-worker.ts.
|
|
8
|
+
*/
|
|
9
|
+
import type { EvolutionQueueItem } from '../core/evolution-types.js';
|
|
10
|
+
import type { PluginLogger } from '../openclaw-sdk.js';
|
|
11
|
+
export declare const EVOLUTION_QUEUE_LOCK_SUFFIX = ".lock";
|
|
12
|
+
export declare const LOCK_MAX_RETRIES = 50;
|
|
13
|
+
export declare const LOCK_RETRY_DELAY_MS = 50;
|
|
14
|
+
export declare const LOCK_STALE_MS = 30000;
|
|
15
|
+
export declare function requireQueueLock(resourcePath: string, logger: PluginLogger | {
|
|
16
|
+
warn?: (message: string) => void;
|
|
17
|
+
info?: (message: string) => void;
|
|
18
|
+
} | undefined, scope: string, lockSuffix?: string): Promise<() => void>;
|
|
19
|
+
export declare function createEvolutionTaskId(source: string, score: number, preview: string, reason: string, now: number): string;
|
|
20
|
+
export declare function hasPendingTask(queue: EvolutionQueueItem[], taskKind: string): boolean;
|
|
21
|
+
export declare function acquireQueueLock(resourcePath: string, logger: PluginLogger | {
|
|
22
|
+
warn?: (message: string) => void;
|
|
23
|
+
info?: (message: string) => void;
|
|
24
|
+
} | undefined, lockSuffix?: string): Promise<() => void>;
|
|
25
|
+
export declare function withQueueLock<T>(resourcePath: string, logger: PluginLogger | {
|
|
26
|
+
warn?: (message: string) => void;
|
|
27
|
+
info?: (message: string) => void;
|
|
28
|
+
} | undefined, scope: string, fn: () => Promise<T>): Promise<T>;
|
|
29
|
+
export declare function loadEvolutionQueue(queuePath: string): EvolutionQueueItem[];
|
|
30
|
+
export declare function saveEvolutionQueue(queuePath: string, queue: EvolutionQueueItem[]): void;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue I/O + Enqueue — extracted from evolution-worker.ts
|
|
3
|
+
*
|
|
4
|
+
* Full persistence layer encapsulating queue file locking, atomic writes,
|
|
5
|
+
* queue format, and enqueue orchestration. Depends on file-lock.ts, io.ts,
|
|
6
|
+
* queue-migration.ts, and pain.ts.
|
|
7
|
+
* Zero imports from evolution-worker.ts.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import { createHash } from 'crypto';
|
|
11
|
+
import { acquireLockAsync, releaseLock as releaseImportedLock } from '../utils/file-lock.js';
|
|
12
|
+
import { atomicWriteFileSync } from '../utils/io.js';
|
|
13
|
+
import { LockUnavailableError } from '../config/errors.js';
|
|
14
|
+
import { migrateQueueToV2 } from './queue-migration.js';
|
|
15
|
+
export const EVOLUTION_QUEUE_LOCK_SUFFIX = '.lock';
|
|
16
|
+
export const LOCK_MAX_RETRIES = 50;
|
|
17
|
+
export const LOCK_RETRY_DELAY_MS = 50;
|
|
18
|
+
export const LOCK_STALE_MS = 30_000;
|
|
19
|
+
export async function requireQueueLock(resourcePath, logger, scope, lockSuffix = EVOLUTION_QUEUE_LOCK_SUFFIX) {
|
|
20
|
+
try {
|
|
21
|
+
return await acquireQueueLock(resourcePath, logger, lockSuffix);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
throw new LockUnavailableError(resourcePath, scope, { cause: err });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function createEvolutionTaskId(source, score, preview, reason, now) {
|
|
28
|
+
return createHash('md5')
|
|
29
|
+
.update(`${source}:${score}:${preview}:${reason}:${now}`)
|
|
30
|
+
.digest('hex')
|
|
31
|
+
.substring(0, 8);
|
|
32
|
+
}
|
|
33
|
+
export function hasPendingTask(queue, taskKind) {
|
|
34
|
+
return queue.some((t) => t.taskKind === taskKind && (t.status === 'pending' || t.status === 'in_progress'));
|
|
35
|
+
}
|
|
36
|
+
export async function acquireQueueLock(resourcePath, logger, lockSuffix = EVOLUTION_QUEUE_LOCK_SUFFIX) {
|
|
37
|
+
try {
|
|
38
|
+
const ctx = await acquireLockAsync(resourcePath, {
|
|
39
|
+
lockSuffix,
|
|
40
|
+
maxRetries: LOCK_MAX_RETRIES,
|
|
41
|
+
baseRetryDelayMs: LOCK_RETRY_DELAY_MS,
|
|
42
|
+
lockStaleMs: LOCK_STALE_MS,
|
|
43
|
+
});
|
|
44
|
+
return () => releaseImportedLock(ctx);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const warn = logger?.warn;
|
|
48
|
+
warn?.(`[PD:EvolutionWorker] Failed to acquire lock for ${resourcePath}: ${String(error)}`);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function withQueueLock(resourcePath, logger, scope, fn) {
|
|
53
|
+
const releaseLock = await acquireQueueLock(resourcePath, logger, EVOLUTION_QUEUE_LOCK_SUFFIX);
|
|
54
|
+
try {
|
|
55
|
+
return await fn();
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
releaseLock();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function loadEvolutionQueue(queuePath) {
|
|
62
|
+
let rawQueue = [];
|
|
63
|
+
try {
|
|
64
|
+
rawQueue = JSON.parse(fs.readFileSync(queuePath, 'utf8'));
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err.code === 'ENOENT') {
|
|
68
|
+
rawQueue = [];
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.warn(`[queue-io] Failed to load evolution queue (recovering with empty): ${String(err)}`);
|
|
72
|
+
rawQueue = [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return migrateQueueToV2(rawQueue);
|
|
76
|
+
}
|
|
77
|
+
export function saveEvolutionQueue(queuePath, queue) {
|
|
78
|
+
atomicWriteFileSync(queuePath, JSON.stringify(queue, null, 2));
|
|
79
|
+
}
|
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
* Pure data transformation functions for migrating legacy queue items
|
|
5
5
|
* to the V2 schema. Zero I/O, zero imports from evolution-worker.ts.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
7
|
import type { TaskKind, TaskPriority } from '../core/trajectory-types.js';
|
|
9
|
-
|
|
10
|
-
// V2 types (not exported from evolution-types.ts — defined here for self-containment)
|
|
11
8
|
export type QueueStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
12
9
|
export type TaskResolution = 'success' | 'failure' | 'skipped';
|
|
13
10
|
export interface EvolutionQueueItem {
|
|
@@ -34,7 +31,6 @@ export interface EvolutionQueueItem {
|
|
|
34
31
|
lastError?: string;
|
|
35
32
|
resultRef?: string;
|
|
36
33
|
}
|
|
37
|
-
|
|
38
34
|
/**
|
|
39
35
|
* Legacy queue item shape (pre-V2) for migration compatibility.
|
|
40
36
|
* These items lack taskKind, priority, retryCount, maxRetries, lastError fields.
|
|
@@ -63,60 +59,25 @@ export interface LegacyEvolutionQueueItem {
|
|
|
63
59
|
lastError?: string;
|
|
64
60
|
resultRef?: string;
|
|
65
61
|
}
|
|
66
|
-
|
|
67
62
|
/**
|
|
68
63
|
* Default values for new V2 fields when migrating legacy items.
|
|
69
64
|
*/
|
|
70
|
-
const DEFAULT_TASK_KIND: TaskKind
|
|
71
|
-
const DEFAULT_PRIORITY: TaskPriority
|
|
72
|
-
const DEFAULT_MAX_RETRIES = 3;
|
|
73
|
-
|
|
65
|
+
declare const DEFAULT_TASK_KIND: TaskKind;
|
|
66
|
+
declare const DEFAULT_PRIORITY: TaskPriority;
|
|
67
|
+
declare const DEFAULT_MAX_RETRIES = 3;
|
|
74
68
|
export { DEFAULT_TASK_KIND, DEFAULT_PRIORITY, DEFAULT_MAX_RETRIES };
|
|
75
|
-
|
|
76
69
|
export type RawQueueItem = Record<string, unknown>;
|
|
77
|
-
|
|
78
70
|
/**
|
|
79
71
|
* Migrate a legacy queue item to V2 schema.
|
|
80
72
|
* Old items without taskKind are assumed to be pain_diagnosis for backward compatibility.
|
|
81
73
|
*/
|
|
82
|
-
export function migrateToV2(item: LegacyEvolutionQueueItem): EvolutionQueueItem
|
|
83
|
-
return {
|
|
84
|
-
id: item.id,
|
|
85
|
-
taskKind: (item.taskKind as TaskKind) || DEFAULT_TASK_KIND,
|
|
86
|
-
priority: (item.priority as TaskPriority) || DEFAULT_PRIORITY,
|
|
87
|
-
source: item.source,
|
|
88
|
-
traceId: item.traceId,
|
|
89
|
-
task: item.task,
|
|
90
|
-
score: item.score,
|
|
91
|
-
reason: item.reason,
|
|
92
|
-
timestamp: item.timestamp,
|
|
93
|
-
enqueued_at: item.enqueued_at,
|
|
94
|
-
started_at: item.started_at,
|
|
95
|
-
completed_at: item.completed_at,
|
|
96
|
-
assigned_session_key: item.assigned_session_key,
|
|
97
|
-
trigger_text_preview: item.trigger_text_preview,
|
|
98
|
-
status: (item.status as QueueStatus) || 'pending',
|
|
99
|
-
resolution: item.resolution as TaskResolution | undefined,
|
|
100
|
-
session_id: item.session_id,
|
|
101
|
-
agent_id: item.agent_id,
|
|
102
|
-
retryCount: item.retryCount || 0,
|
|
103
|
-
maxRetries: item.maxRetries || DEFAULT_MAX_RETRIES,
|
|
104
|
-
lastError: item.lastError,
|
|
105
|
-
resultRef: item.resultRef,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
74
|
+
export declare function migrateToV2(item: LegacyEvolutionQueueItem): EvolutionQueueItem;
|
|
109
75
|
/**
|
|
110
76
|
* Check if an item is a legacy (pre-V2) queue item.
|
|
111
77
|
*/
|
|
112
|
-
export function isLegacyQueueItem(item: RawQueueItem): boolean
|
|
113
|
-
return item && typeof item === 'object' && !('taskKind' in item);
|
|
114
|
-
}
|
|
115
|
-
|
|
78
|
+
export declare function isLegacyQueueItem(item: RawQueueItem): boolean;
|
|
116
79
|
/**
|
|
117
80
|
* Migrate entire queue to V2 schema if needed.
|
|
118
81
|
* Returns a new array with all items migrated to V2 format.
|
|
119
82
|
*/
|
|
120
|
-
export function migrateQueueToV2(queue: RawQueueItem[]): EvolutionQueueItem[]
|
|
121
|
-
return queue.map(item => isLegacyQueueItem(item) ? migrateToV2(item as unknown as LegacyEvolutionQueueItem) : item as unknown as EvolutionQueueItem);
|
|
122
|
-
}
|
|
83
|
+
export declare function migrateQueueToV2(queue: RawQueueItem[]): EvolutionQueueItem[];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue Migration — extracted from evolution-worker.ts (lines 297-379)
|
|
3
|
+
*
|
|
4
|
+
* Pure data transformation functions for migrating legacy queue items
|
|
5
|
+
* to the V2 schema. Zero I/O, zero imports from evolution-worker.ts.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default values for new V2 fields when migrating legacy items.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_TASK_KIND = 'pain_diagnosis';
|
|
11
|
+
const DEFAULT_PRIORITY = 'medium';
|
|
12
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
13
|
+
export { DEFAULT_TASK_KIND, DEFAULT_PRIORITY, DEFAULT_MAX_RETRIES };
|
|
14
|
+
/**
|
|
15
|
+
* Migrate a legacy queue item to V2 schema.
|
|
16
|
+
* Old items without taskKind are assumed to be pain_diagnosis for backward compatibility.
|
|
17
|
+
*/
|
|
18
|
+
export function migrateToV2(item) {
|
|
19
|
+
return {
|
|
20
|
+
id: item.id,
|
|
21
|
+
taskKind: item.taskKind || DEFAULT_TASK_KIND,
|
|
22
|
+
priority: item.priority || DEFAULT_PRIORITY,
|
|
23
|
+
source: item.source,
|
|
24
|
+
traceId: item.traceId,
|
|
25
|
+
task: item.task,
|
|
26
|
+
score: item.score,
|
|
27
|
+
reason: item.reason,
|
|
28
|
+
timestamp: item.timestamp,
|
|
29
|
+
enqueued_at: item.enqueued_at,
|
|
30
|
+
started_at: item.started_at,
|
|
31
|
+
completed_at: item.completed_at,
|
|
32
|
+
assigned_session_key: item.assigned_session_key,
|
|
33
|
+
trigger_text_preview: item.trigger_text_preview,
|
|
34
|
+
status: item.status || 'pending',
|
|
35
|
+
resolution: item.resolution,
|
|
36
|
+
session_id: item.session_id,
|
|
37
|
+
agent_id: item.agent_id,
|
|
38
|
+
retryCount: item.retryCount || 0,
|
|
39
|
+
maxRetries: item.maxRetries || DEFAULT_MAX_RETRIES,
|
|
40
|
+
lastError: item.lastError,
|
|
41
|
+
resultRef: item.resultRef,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if an item is a legacy (pre-V2) queue item.
|
|
46
|
+
*/
|
|
47
|
+
export function isLegacyQueueItem(item) {
|
|
48
|
+
return item && typeof item === 'object' && !('taskKind' in item);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Migrate entire queue to V2 schema if needed.
|
|
52
|
+
* Returns a new array with all items migrated to V2 format.
|
|
53
|
+
*/
|
|
54
|
+
export function migrateQueueToV2(queue) {
|
|
55
|
+
return queue.map(item => isLegacyQueueItem(item) ? migrateToV2(item) : item);
|
|
56
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { WorkflowStage } from '../core/workflow-funnel-loader.js';
|
|
2
|
+
import type { RuntimeTruth, AnalyticsTruth } from '../types/runtime-summary.js';
|
|
3
|
+
import type { GfiWorkspaceSnapshot } from '@principles/core/runtime-v2';
|
|
4
|
+
export type RuntimeDataQuality = 'authoritative' | 'partial';
|
|
5
|
+
export type RuntimeRewardPolicy = 'frozen_all_positive' | 'frozen_atomic_positive_keep_plan_ready';
|
|
6
|
+
interface RuntimeSummarySource {
|
|
7
|
+
source: string;
|
|
8
|
+
score?: number;
|
|
9
|
+
ts?: string;
|
|
10
|
+
confidence?: number;
|
|
11
|
+
origin?: string;
|
|
12
|
+
}
|
|
13
|
+
interface RuntimePainSignal {
|
|
14
|
+
source: string;
|
|
15
|
+
ts: string | null;
|
|
16
|
+
reason: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface RuntimeSummary {
|
|
19
|
+
/**
|
|
20
|
+
* Runtime truth represents the current state of the system.
|
|
21
|
+
* Used for control decisions, Phase 3 eligibility, and real-time operations.
|
|
22
|
+
*/
|
|
23
|
+
runtime: RuntimeTruth;
|
|
24
|
+
/**
|
|
25
|
+
* Analytics truth represents historical data and aggregated metrics.
|
|
26
|
+
* Used for insights, trends, and supporting evidence (where explicitly allowed).
|
|
27
|
+
* NOT used for control decisions or Phase 3 eligibility.
|
|
28
|
+
*/
|
|
29
|
+
analytics: AnalyticsTruth;
|
|
30
|
+
gfi: {
|
|
31
|
+
current: number | null;
|
|
32
|
+
peak: number | null;
|
|
33
|
+
sources: RuntimeSummarySource[];
|
|
34
|
+
dataQuality: RuntimeDataQuality;
|
|
35
|
+
workspaceSnapshot?: GfiWorkspaceSnapshot;
|
|
36
|
+
};
|
|
37
|
+
evolution: {
|
|
38
|
+
queue: {
|
|
39
|
+
pending: number;
|
|
40
|
+
inProgress: number;
|
|
41
|
+
completed: number;
|
|
42
|
+
};
|
|
43
|
+
directive: {
|
|
44
|
+
exists: boolean;
|
|
45
|
+
active: boolean | null;
|
|
46
|
+
ageSeconds: number | null;
|
|
47
|
+
taskPreview: string | null;
|
|
48
|
+
};
|
|
49
|
+
dataQuality: RuntimeDataQuality;
|
|
50
|
+
};
|
|
51
|
+
runtimeDiagnosis: {
|
|
52
|
+
/** Tasks pending in diagnostician_tasks.json (not yet processed by heartbeat) */
|
|
53
|
+
pendingTasks: number;
|
|
54
|
+
/** Total diagnosis tasks written by evolution worker (today from event log) */
|
|
55
|
+
tasksWrittenToday: number;
|
|
56
|
+
/** Total diagnostician reports written (today from event log) */
|
|
57
|
+
reportsWrittenToday: number;
|
|
58
|
+
/** Total diagnostician reports that were missing JSON (category=missing_json) */
|
|
59
|
+
reportsMissingJsonToday: number;
|
|
60
|
+
/** Total diagnostician reports with incomplete fields (category=incomplete_fields) */
|
|
61
|
+
reportsIncompleteFieldsToday: number;
|
|
62
|
+
/** Total principle candidates created from heartbeat chain (today from event log) */
|
|
63
|
+
candidatesCreatedToday: number;
|
|
64
|
+
/** Heartbeats that injected diagnostician tasks (today from event log) */
|
|
65
|
+
heartbeatsInjectedToday: number;
|
|
66
|
+
};
|
|
67
|
+
phase3: {
|
|
68
|
+
queueTruthReady: boolean;
|
|
69
|
+
phase3ShadowEligible: boolean;
|
|
70
|
+
evolutionEligible: number;
|
|
71
|
+
evolutionReferenceOnly: number;
|
|
72
|
+
evolutionReferenceOnlyReasons: string[];
|
|
73
|
+
evolutionRejected: number;
|
|
74
|
+
evolutionRejectedReasons: string[];
|
|
75
|
+
legacyDirectiveFilePresent: boolean;
|
|
76
|
+
directiveStatus: 'compatibility-only' | 'missing' | 'present';
|
|
77
|
+
directiveIgnoredReason: string;
|
|
78
|
+
/**
|
|
79
|
+
* Source of Phase 3 eligibility calculation.
|
|
80
|
+
* Should always be 'runtime_truth' - analytics not used for control decisions.
|
|
81
|
+
*/
|
|
82
|
+
eligibilitySource: 'runtime_truth';
|
|
83
|
+
};
|
|
84
|
+
pain: {
|
|
85
|
+
activeFlag: boolean;
|
|
86
|
+
activeFlagSource: string | null;
|
|
87
|
+
candidates: number | null;
|
|
88
|
+
lastSignal: RuntimePainSignal | null;
|
|
89
|
+
};
|
|
90
|
+
gate: {
|
|
91
|
+
recentBlocks: number | null;
|
|
92
|
+
recentBypasses: number | null;
|
|
93
|
+
dataQuality: RuntimeDataQuality;
|
|
94
|
+
};
|
|
95
|
+
/** YAML-driven funnel counts — only present when funnels param is provided (YAML-SSOT-01) */
|
|
96
|
+
workflowFunnels?: WorkflowFunnelOutput[];
|
|
97
|
+
metadata: {
|
|
98
|
+
generatedAt: string;
|
|
99
|
+
workspaceDir: string;
|
|
100
|
+
sessionId: string | null;
|
|
101
|
+
selectedSessionReason: 'explicit' | 'latest_active' | 'none';
|
|
102
|
+
/** 'degraded' when YAML load errors or unresolved statsField paths exist; 'ok' otherwise */
|
|
103
|
+
status: 'ok' | 'degraded';
|
|
104
|
+
warnings: string[];
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export interface WorkflowFunnelStageOutput {
|
|
108
|
+
key: string;
|
|
109
|
+
label: string;
|
|
110
|
+
statsField: string;
|
|
111
|
+
count: number;
|
|
112
|
+
}
|
|
113
|
+
export interface WorkflowFunnelOutput {
|
|
114
|
+
funnelKey: string;
|
|
115
|
+
funnelLabel: string;
|
|
116
|
+
stages: WorkflowFunnelStageOutput[];
|
|
117
|
+
}
|
|
118
|
+
export declare class RuntimeSummaryService {
|
|
119
|
+
static getSummary(workspaceDir: string, options?: {
|
|
120
|
+
sessionId?: string | null;
|
|
121
|
+
loaderWarnings?: string[];
|
|
122
|
+
funnels?: Map<string, WorkflowStage[]>;
|
|
123
|
+
}): RuntimeSummary;
|
|
124
|
+
private static readSessions;
|
|
125
|
+
private static selectSession;
|
|
126
|
+
private static mergeSessionSnapshots;
|
|
127
|
+
private static buildQueueStats;
|
|
128
|
+
/**
|
|
129
|
+
* Builds directive summary for compatibility display only.
|
|
130
|
+
* NOT a truth source for Phase 3 eligibility or decisions.
|
|
131
|
+
* Queue is the only authoritative execution truth source.
|
|
132
|
+
*/
|
|
133
|
+
private static buildDirectiveSummary;
|
|
134
|
+
private static readEvents;
|
|
135
|
+
private static buildGfiSources;
|
|
136
|
+
private static findLastPainSignal;
|
|
137
|
+
private static buildGateStats;
|
|
138
|
+
private static resolveSessionSortTime;
|
|
139
|
+
private static mergeEvents;
|
|
140
|
+
private static getEventDedupKey;
|
|
141
|
+
private static resolveEvolutionDataQuality;
|
|
142
|
+
private static selectInProgressTask;
|
|
143
|
+
private static getQueuePriority;
|
|
144
|
+
private static isResolvableEvolutionTask;
|
|
145
|
+
private static resolveDirectiveTimestamp;
|
|
146
|
+
private static buildDirectiveTaskPreview;
|
|
147
|
+
private static warnOnLegacyDirectiveMismatch;
|
|
148
|
+
private static readJsonFile;
|
|
149
|
+
private static asFiniteNumber;
|
|
150
|
+
/**
|
|
151
|
+
* Read trajectory analytics data from trajectory database.
|
|
152
|
+
*
|
|
153
|
+
* Returns: Analytics data (historical metrics) aggregated from trajectory database.
|
|
154
|
+
* Not: Runtime truth or real-time queue state.
|
|
155
|
+
*/
|
|
156
|
+
private static readTrajectoryStats;
|
|
157
|
+
}
|
|
158
|
+
export {};
|