principles-disciple 1.126.0 → 1.128.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 -93
- 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,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CentralSyncService - Periodically sync workspace data to central database.
|
|
3
|
+
*
|
|
4
|
+
* Ensures thinking_model_events and other workspace data are aggregated
|
|
5
|
+
* into the central database for cross-workspace queries and WebUI display.
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenClawPluginService } from '../openclaw-sdk.js';
|
|
8
|
+
export declare const CentralSyncService: OpenClawPluginService;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CentralSyncService - Periodically sync workspace data to central database.
|
|
3
|
+
*
|
|
4
|
+
* Ensures thinking_model_events and other workspace data are aggregated
|
|
5
|
+
* into the central database for cross-workspace queries and WebUI display.
|
|
6
|
+
*/
|
|
7
|
+
import { CentralDatabase } from './central-database.js';
|
|
8
|
+
import { WORKFLOW_TTL_MS } from '../config/defaults/runtime.js';
|
|
9
|
+
let syncInterval = null;
|
|
10
|
+
let logger = undefined;
|
|
11
|
+
let centralDb = null;
|
|
12
|
+
async function runSyncCycle() {
|
|
13
|
+
if (!centralDb) {
|
|
14
|
+
logger?.warn?.('[PD:CentralSync] CentralDatabase not initialized, skipping sync');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const results = centralDb.syncAll();
|
|
19
|
+
const totalSynced = Array.from(results.values()).reduce((sum, count) => sum + count, 0);
|
|
20
|
+
const workspacesSynced = Array.from(results.entries())
|
|
21
|
+
.filter(([, count]) => count > 0)
|
|
22
|
+
.map(([name, count]) => `${name}:${count}`)
|
|
23
|
+
.join(', ');
|
|
24
|
+
if (totalSynced > 0) {
|
|
25
|
+
logger?.info?.(`[PD:CentralSync] Synced ${totalSynced} records from workspaces: ${workspacesSynced}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
logger?.debug?.(`[PD:CentralSync] No new records to sync`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
logger?.error?.(`[PD:CentralSync] Sync failed: ${String(err)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export const CentralSyncService = {
|
|
36
|
+
id: 'principles-central-sync',
|
|
37
|
+
async start(ctx) {
|
|
38
|
+
const { logger: ctxLogger, config } = ctx;
|
|
39
|
+
logger = ctxLogger;
|
|
40
|
+
const { intervals } = config;
|
|
41
|
+
const intervalMs = intervals?.central_sync_ms ?? WORKFLOW_TTL_MS;
|
|
42
|
+
// Initialize CentralDatabase
|
|
43
|
+
centralDb = new CentralDatabase();
|
|
44
|
+
// Initial sync on start
|
|
45
|
+
logger?.info?.(`[PD:CentralSync] Starting with interval ${intervalMs}ms`);
|
|
46
|
+
await runSyncCycle();
|
|
47
|
+
// Schedule periodic sync
|
|
48
|
+
syncInterval = setInterval(runSyncCycle, intervalMs);
|
|
49
|
+
// Don't keep the process alive just for this timer
|
|
50
|
+
syncInterval.unref();
|
|
51
|
+
logger?.info?.(`[PD:CentralSync] Service started, syncing every ${intervalMs / 1000}s`);
|
|
52
|
+
},
|
|
53
|
+
async stop(ctx) {
|
|
54
|
+
if (syncInterval) {
|
|
55
|
+
clearInterval(syncInterval);
|
|
56
|
+
syncInterval = null;
|
|
57
|
+
}
|
|
58
|
+
// Final sync on stop
|
|
59
|
+
if (centralDb) {
|
|
60
|
+
try {
|
|
61
|
+
centralDb.syncAll();
|
|
62
|
+
ctx.logger?.info?.(`[PD:CentralSync] Final sync completed`);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
ctx.logger?.error?.(`[PD:CentralSync] Final sync failed: ${String(err)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
centralDb = null;
|
|
69
|
+
ctx.logger?.info?.(`[PD:CentralSync] Service stopped`);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OpenClawPluginServiceContext, PluginLogger } from '../openclaw-sdk.js';
|
|
2
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
3
|
+
import { CorrectionObserver } from '@principles/core/runtime-v2';
|
|
4
|
+
export interface CorrectionObserverServiceShape {
|
|
5
|
+
id: string;
|
|
6
|
+
start: (ctx: OpenClawPluginServiceContext) => void;
|
|
7
|
+
stop?: (ctx: OpenClawPluginServiceContext) => void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* PRI-307: Resolve CorrectionObserver from .pd/config.yaml.
|
|
11
|
+
*
|
|
12
|
+
* States:
|
|
13
|
+
* - disabled: feature flag off → return null, no noisy logs
|
|
14
|
+
* - needs_setup: enabled but missing API key or profile → return null with structured reason
|
|
15
|
+
* - ready/not_ready: enabled and configured → return observer instance
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveCorrectionObserver(wctx: WorkspaceContext, logger?: Pick<PluginLogger, 'info' | 'warn' | 'error' | 'debug'>): CorrectionObserver | null;
|
|
18
|
+
export declare function runCorrectionObserverCycle(wctx: WorkspaceContext, logger: PluginLogger): Promise<void>;
|
|
19
|
+
export declare const CorrectionObserverService: CorrectionObserverServiceShape;
|
package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js}
RENAMED
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
import type { OpenClawPluginServiceContext, PluginLogger } from '../openclaw-sdk.js';
|
|
2
1
|
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
3
2
|
import { TrajectoryRegistry } from '../core/trajectory.js';
|
|
4
3
|
import { CorrectionCueLearner } from '../core/correction-cue-learner.js';
|
|
5
|
-
import {
|
|
6
|
-
PiAiRuntimeAdapter,
|
|
7
|
-
CorrectionObserver,
|
|
8
|
-
AgentScheduler,
|
|
9
|
-
} from '@principles/core/runtime-v2';
|
|
4
|
+
import { PiAiRuntimeAdapter, CorrectionObserver, AgentScheduler, } from '@principles/core/runtime-v2';
|
|
10
5
|
import { KeywordOptimizationService } from './keyword-optimization-service.js';
|
|
11
6
|
import { SystemLogger } from '../core/system-logger.js';
|
|
12
7
|
import { resolveObserverConfig } from '../core/pd-config-loader.js';
|
|
13
|
-
|
|
14
|
-
export interface CorrectionObserverServiceShape {
|
|
15
|
-
id: string;
|
|
16
|
-
start: (ctx: OpenClawPluginServiceContext) => void;
|
|
17
|
-
stop?: (ctx: OpenClawPluginServiceContext) => void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
let correctionObserverTimeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
8
|
+
let correctionObserverTimeoutId = null;
|
|
21
9
|
let correctionObserverStopped = false;
|
|
22
|
-
const startedWorkspaces = new Set
|
|
23
|
-
|
|
10
|
+
const startedWorkspaces = new Set();
|
|
24
11
|
const CORRECTION_OBSERVER_INTERVAL_MS = 15 * 60 * 1000;
|
|
25
12
|
const CORRECTION_OBSERVER_INITIAL_DELAY_MS = 10_000;
|
|
26
13
|
const CORRECTION_OBSERVER_MAX_RECENT_SESSIONS = 20;
|
|
27
14
|
const CORRECTION_OBSERVER_MAX_PAYLOAD_SESSIONS = 5;
|
|
28
|
-
|
|
29
15
|
/**
|
|
30
16
|
* PRI-307: Resolve CorrectionObserver from .pd/config.yaml.
|
|
31
17
|
*
|
|
@@ -34,29 +20,22 @@ const CORRECTION_OBSERVER_MAX_PAYLOAD_SESSIONS = 5;
|
|
|
34
20
|
* - needs_setup: enabled but missing API key or profile → return null with structured reason
|
|
35
21
|
* - ready/not_ready: enabled and configured → return observer instance
|
|
36
22
|
*/
|
|
37
|
-
export function resolveCorrectionObserver(wctx
|
|
23
|
+
export function resolveCorrectionObserver(wctx, logger) {
|
|
38
24
|
try {
|
|
39
|
-
const observerConfig = resolveObserverConfig(
|
|
40
|
-
wctx.workspaceDir,
|
|
41
|
-
'correction_observer',
|
|
42
|
-
'correctionObserver',
|
|
43
|
-
logger,
|
|
44
|
-
);
|
|
45
|
-
|
|
25
|
+
const observerConfig = resolveObserverConfig(wctx.workspaceDir, 'correction_observer', 'correctionObserver', logger);
|
|
46
26
|
if (!observerConfig.enabled) {
|
|
47
27
|
if (observerConfig.readiness === 'config_malformed') {
|
|
48
28
|
logger?.warn?.(`[PD:CorrectionObserver] Config malformed: ${observerConfig.reason}. ${observerConfig.nextAction}`);
|
|
49
|
-
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
50
31
|
logger?.debug?.(`[PD:CorrectionObserver] ${observerConfig.reason}`);
|
|
51
32
|
}
|
|
52
33
|
return null;
|
|
53
34
|
}
|
|
54
|
-
|
|
55
35
|
if (observerConfig.readiness === 'needs_setup') {
|
|
56
36
|
logger?.info?.(`[PD:CorrectionObserver] ${observerConfig.reason}. ${observerConfig.nextAction}`);
|
|
57
37
|
return null;
|
|
58
38
|
}
|
|
59
|
-
|
|
60
39
|
// ready or not_ready — create the observer
|
|
61
40
|
if (observerConfig.runtimeProfileType === 'pi-ai') {
|
|
62
41
|
const adapter = new PiAiRuntimeAdapter({
|
|
@@ -69,17 +48,16 @@ export function resolveCorrectionObserver(wctx: WorkspaceContext, logger?: Pick<
|
|
|
69
48
|
});
|
|
70
49
|
return new CorrectionObserver({ runtimeAdapter: adapter }, { timeoutMs: observerConfig.timeoutMs ?? undefined });
|
|
71
50
|
}
|
|
72
|
-
|
|
73
51
|
// OpenClaw profile — not yet supported for observer runtime
|
|
74
52
|
logger?.info?.(`[PD:CorrectionObserver] OpenClaw runtime profile not yet supported for correction observer. Skipping.`);
|
|
75
53
|
return null;
|
|
76
|
-
}
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
77
56
|
logger?.warn?.(`[PD:CorrectionObserver] Failed to resolve CorrectionObserver: ${String(err)}`);
|
|
78
57
|
return null;
|
|
79
58
|
}
|
|
80
59
|
}
|
|
81
|
-
|
|
82
|
-
export async function runCorrectionObserverCycle(wctx: WorkspaceContext, logger: PluginLogger): Promise<void> {
|
|
60
|
+
export async function runCorrectionObserverCycle(wctx, logger) {
|
|
83
61
|
try {
|
|
84
62
|
const observer = resolveCorrectionObserver(wctx, logger);
|
|
85
63
|
if (!observer) {
|
|
@@ -87,19 +65,15 @@ export async function runCorrectionObserverCycle(wctx: WorkspaceContext, logger:
|
|
|
87
65
|
logger?.debug?.(`[PD:CorrectionObserver] Observer not resolved. Skipping cycle.`);
|
|
88
66
|
return;
|
|
89
67
|
}
|
|
90
|
-
|
|
91
68
|
logger?.info?.('[PD:CorrectionObserver] Observer resolved. Initiating periodic optimization...');
|
|
92
|
-
|
|
93
69
|
const db = TrajectoryRegistry.get(wctx.workspaceDir);
|
|
94
70
|
const recentSessions = db.listRecentSessions({ limit: CORRECTION_OBSERVER_MAX_RECENT_SESSIONS });
|
|
95
71
|
const recentSessionIds = recentSessions.map(s => s.sessionId);
|
|
96
|
-
|
|
97
72
|
if (recentSessionIds.length === 0) {
|
|
98
73
|
logger?.info?.('[PD:CorrectionObserver] No recent sessions found. Skipping correction optimization.');
|
|
99
74
|
return;
|
|
100
75
|
}
|
|
101
|
-
|
|
102
|
-
const recentMessages: string[] = [];
|
|
76
|
+
const recentMessages = [];
|
|
103
77
|
for (const sId of recentSessionIds.slice(0, CORRECTION_OBSERVER_MAX_PAYLOAD_SESSIONS)) {
|
|
104
78
|
try {
|
|
105
79
|
const turns = db.listUserTurnsForSession(sId);
|
|
@@ -108,11 +82,11 @@ export async function runCorrectionObserverCycle(wctx: WorkspaceContext, logger:
|
|
|
108
82
|
recentMessages.push(t.rawExcerpt);
|
|
109
83
|
}
|
|
110
84
|
}
|
|
111
|
-
}
|
|
85
|
+
}
|
|
86
|
+
catch (turnErr) {
|
|
112
87
|
logger?.warn?.(`[PD:CorrectionObserver] Failed to load user turns for session ${sId}: ${String(turnErr)}`);
|
|
113
88
|
}
|
|
114
89
|
}
|
|
115
|
-
|
|
116
90
|
const learner = CorrectionCueLearner.get(wctx.stateDir);
|
|
117
91
|
const keywords = learner.getStore().keywords;
|
|
118
92
|
const keywordStoreSummary = {
|
|
@@ -125,10 +99,8 @@ export async function runCorrectionObserverCycle(wctx: WorkspaceContext, logger:
|
|
|
125
99
|
falsePositiveCount: k.falsePositiveCount ?? 0,
|
|
126
100
|
})),
|
|
127
101
|
};
|
|
128
|
-
|
|
129
102
|
const optimizationService = KeywordOptimizationService.get(wctx.stateDir, wctx.workspaceDir, logger);
|
|
130
103
|
const trajectoryHistory = await optimizationService.buildTrajectoryHistory(recentSessionIds);
|
|
131
|
-
|
|
132
104
|
const payload = {
|
|
133
105
|
parentSessionId: 'correction-observer-service',
|
|
134
106
|
workspaceDir: wctx.workspaceDir,
|
|
@@ -136,96 +108,84 @@ export async function runCorrectionObserverCycle(wctx: WorkspaceContext, logger:
|
|
|
136
108
|
recentMessages,
|
|
137
109
|
trajectoryHistory,
|
|
138
110
|
};
|
|
139
|
-
|
|
140
111
|
const scheduler = new AgentScheduler();
|
|
141
112
|
scheduler.register({
|
|
142
113
|
agentId: 'correction-observer',
|
|
143
114
|
mode: 'realtime',
|
|
144
115
|
runner: observer,
|
|
145
116
|
});
|
|
146
|
-
|
|
147
117
|
logger?.info?.(`[PD:CorrectionObserver] Dispatching with ${trajectoryHistory.length} trajectory events, ${recentMessages.length} recent messages.`);
|
|
148
118
|
const result = await scheduler.dispatch('correction-observer', payload);
|
|
149
119
|
logger?.info?.(`[PD:CorrectionObserver] Completed: updated=${result.updated}, summary="${result.summary}"`);
|
|
150
|
-
|
|
151
120
|
if (result.updated) {
|
|
152
121
|
optimizationService.applyResult(result);
|
|
153
122
|
}
|
|
154
|
-
}
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
155
125
|
const errMsg = `Correction observer cycle failed: ${String(err)}`;
|
|
156
126
|
logger?.warn?.(`[PD:CorrectionObserver] ${errMsg}`);
|
|
157
127
|
SystemLogger.log(wctx.workspaceDir, 'CORRECTION_OBSERVER_CYCLE_FAILED', errMsg);
|
|
158
128
|
}
|
|
159
129
|
}
|
|
160
|
-
|
|
161
|
-
export const CorrectionObserverService: CorrectionObserverServiceShape = {
|
|
130
|
+
export const CorrectionObserverService = {
|
|
162
131
|
id: 'principles-correction-observer',
|
|
163
|
-
|
|
164
|
-
start(ctx: OpenClawPluginServiceContext): void {
|
|
132
|
+
start(ctx) {
|
|
165
133
|
const workspaceDir = ctx?.workspaceDir;
|
|
166
134
|
const logger = ctx?.logger || console;
|
|
167
|
-
|
|
168
135
|
if (!workspaceDir) {
|
|
169
|
-
if (logger)
|
|
136
|
+
if (logger)
|
|
137
|
+
logger.warn('[PD:CorrectionObserver] workspaceDir not found in service config. Correction observer disabled.');
|
|
170
138
|
return;
|
|
171
139
|
}
|
|
172
|
-
|
|
173
140
|
if (startedWorkspaces.has(workspaceDir)) {
|
|
174
|
-
if (logger)
|
|
141
|
+
if (logger)
|
|
142
|
+
logger.info(`[PD:CorrectionObserver] Already started for workspace: ${workspaceDir}. Skipping duplicate start.`);
|
|
175
143
|
return;
|
|
176
144
|
}
|
|
177
|
-
|
|
178
145
|
// PRI-307: Check observer config before starting
|
|
179
|
-
const observerConfig = resolveObserverConfig(
|
|
180
|
-
workspaceDir,
|
|
181
|
-
'correction_observer',
|
|
182
|
-
'correctionObserver',
|
|
183
|
-
logger,
|
|
184
|
-
);
|
|
185
|
-
|
|
146
|
+
const observerConfig = resolveObserverConfig(workspaceDir, 'correction_observer', 'correctionObserver', logger);
|
|
186
147
|
if (!observerConfig.enabled) {
|
|
187
148
|
// Disabled → no start, no noisy cycling. Single structured log.
|
|
188
149
|
logger?.info?.(`[PD:CorrectionObserver] ${observerConfig.reason}. ${observerConfig.nextAction}`);
|
|
189
150
|
return;
|
|
190
151
|
}
|
|
191
|
-
|
|
192
152
|
if (observerConfig.readiness === 'needs_setup') {
|
|
193
153
|
// Enabled but missing setup → structured needs_setup, no noisy cycling
|
|
194
154
|
logger?.info?.(`[PD:CorrectionObserver] ${observerConfig.reason}. ${observerConfig.nextAction}`);
|
|
195
155
|
return;
|
|
196
156
|
}
|
|
197
|
-
|
|
198
157
|
startedWorkspaces.add(workspaceDir);
|
|
199
158
|
correctionObserverStopped = false;
|
|
200
|
-
|
|
201
159
|
const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
|
|
202
|
-
if (logger)
|
|
203
|
-
|
|
160
|
+
if (logger)
|
|
161
|
+
logger.info(`[PD:CorrectionObserver] Starting with workspaceDir=${wctx.workspaceDir}, stateDir=${wctx.stateDir}`);
|
|
204
162
|
const interval = CORRECTION_OBSERVER_INTERVAL_MS;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
163
|
+
async function runCycle() {
|
|
164
|
+
if (correctionObserverStopped)
|
|
165
|
+
return;
|
|
208
166
|
await runCorrectionObserverCycle(wctx, logger);
|
|
209
|
-
if (correctionObserverStopped)
|
|
167
|
+
if (correctionObserverStopped)
|
|
168
|
+
return;
|
|
210
169
|
correctionObserverTimeoutId = setTimeout(runCycle, interval);
|
|
211
170
|
correctionObserverTimeoutId.unref();
|
|
212
171
|
}
|
|
213
|
-
|
|
214
172
|
correctionObserverTimeoutId = setTimeout(() => {
|
|
215
173
|
void runCycle().catch((err) => {
|
|
216
|
-
if (logger)
|
|
217
|
-
|
|
174
|
+
if (logger)
|
|
175
|
+
logger.error(`[PD:CorrectionObserver] Startup cycle failed: ${String(err)}`);
|
|
176
|
+
if (correctionObserverStopped)
|
|
177
|
+
return;
|
|
218
178
|
correctionObserverTimeoutId = setTimeout(runCycle, interval);
|
|
219
179
|
correctionObserverTimeoutId.unref();
|
|
220
180
|
});
|
|
221
181
|
}, CORRECTION_OBSERVER_INITIAL_DELAY_MS);
|
|
222
182
|
correctionObserverTimeoutId.unref();
|
|
223
183
|
},
|
|
224
|
-
|
|
225
|
-
stop(_ctx: OpenClawPluginServiceContext): void {
|
|
184
|
+
stop(_ctx) {
|
|
226
185
|
correctionObserverStopped = true;
|
|
227
186
|
startedWorkspaces.clear();
|
|
228
|
-
if (correctionObserverTimeoutId)
|
|
187
|
+
if (correctionObserverTimeoutId)
|
|
188
|
+
clearTimeout(correctionObserverTimeoutId);
|
|
229
189
|
correctionObserverTimeoutId = null;
|
|
230
190
|
},
|
|
231
191
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evolution Queue Deduplication Utilities
|
|
3
|
+
*
|
|
4
|
+
* Dedup logic for preventing duplicate pain tasks and redundant reflections.
|
|
5
|
+
* Extracted from evolution-worker.ts.
|
|
6
|
+
*/
|
|
7
|
+
import type { EvolutionQueueItem } from './evolution-queue-migration.js';
|
|
8
|
+
/**
|
|
9
|
+
* Dedup window for pain queue tasks (30 minutes).
|
|
10
|
+
*/
|
|
11
|
+
export declare const PAIN_QUEUE_DEDUP_WINDOW_MS: number;
|
|
12
|
+
export declare function findRecentDuplicateTask(queue: EvolutionQueueItem[], source: string, preview: string, now: number, reason?: string): EvolutionQueueItem | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a similar pain task was enqueued recently.
|
|
15
|
+
*/
|
|
16
|
+
export declare function hasRecentDuplicateTask(queue: EvolutionQueueItem[], source: string, preview: string, now: number, reason?: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a phrase matches an active promoted rule.
|
|
19
|
+
*/
|
|
20
|
+
export declare function hasEquivalentPromotedRule(dictionary: {
|
|
21
|
+
getAllRules(): Record<string, {
|
|
22
|
+
type: string;
|
|
23
|
+
phrases?: string[];
|
|
24
|
+
pattern?: string;
|
|
25
|
+
status: string;
|
|
26
|
+
}>;
|
|
27
|
+
}, phrase: string): boolean;
|
|
@@ -4,65 +4,45 @@
|
|
|
4
4
|
* Dedup logic for preventing duplicate pain tasks and redundant reflections.
|
|
5
5
|
* Extracted from evolution-worker.ts.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
import type { EvolutionQueueItem } from './evolution-queue-migration.js';
|
|
9
|
-
|
|
10
7
|
/**
|
|
11
8
|
* Dedup window for pain queue tasks (30 minutes).
|
|
12
9
|
*/
|
|
13
10
|
export const PAIN_QUEUE_DEDUP_WINDOW_MS = 30 * 60 * 1000;
|
|
14
|
-
|
|
15
11
|
/**
|
|
16
12
|
* Maximum length for dedup key components to prevent memory/performance issues
|
|
17
13
|
* from extremely long source or preview strings during queue scanning.
|
|
18
14
|
*/
|
|
19
15
|
const MAX_DEDUP_KEY_COMPONENT_LENGTH = 200;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const truncate = (s: string) => s.slice(0, MAX_DEDUP_KEY_COMPONENT_LENGTH);
|
|
16
|
+
function normalizePainDedupKey(source, preview, reason) {
|
|
17
|
+
const truncate = (s) => s.slice(0, MAX_DEDUP_KEY_COMPONENT_LENGTH);
|
|
23
18
|
const normalizedReason = (reason || '').trim().toLowerCase().slice(0, 50);
|
|
24
19
|
return `${truncate(source.trim().toLowerCase())}::${truncate(preview.trim().toLowerCase())}::${normalizedReason}`;
|
|
25
20
|
}
|
|
26
|
-
|
|
27
|
-
export function findRecentDuplicateTask(
|
|
28
|
-
queue: EvolutionQueueItem[],
|
|
29
|
-
source: string,
|
|
30
|
-
preview: string,
|
|
31
|
-
now: number,
|
|
32
|
-
reason?: string
|
|
33
|
-
): EvolutionQueueItem | undefined {
|
|
21
|
+
export function findRecentDuplicateTask(queue, source, preview, now, reason) {
|
|
34
22
|
const key = normalizePainDedupKey(source, preview, reason);
|
|
35
23
|
return queue.find((task) => {
|
|
36
|
-
if (task.status === 'completed')
|
|
24
|
+
if (task.status === 'completed')
|
|
25
|
+
return false;
|
|
37
26
|
const taskTime = new Date(task.enqueued_at || task.timestamp).getTime();
|
|
38
|
-
if (!Number.isFinite(taskTime) || (now - taskTime) > PAIN_QUEUE_DEDUP_WINDOW_MS)
|
|
27
|
+
if (!Number.isFinite(taskTime) || (now - taskTime) > PAIN_QUEUE_DEDUP_WINDOW_MS)
|
|
28
|
+
return false;
|
|
39
29
|
return normalizePainDedupKey(task.source, task.trigger_text_preview || '', task.reason) === key;
|
|
40
30
|
});
|
|
41
31
|
}
|
|
42
|
-
|
|
43
32
|
/**
|
|
44
33
|
* Check if a similar pain task was enqueued recently.
|
|
45
34
|
*/
|
|
46
|
-
export function hasRecentDuplicateTask(
|
|
47
|
-
queue: EvolutionQueueItem[],
|
|
48
|
-
source: string,
|
|
49
|
-
preview: string,
|
|
50
|
-
now: number,
|
|
51
|
-
reason?: string
|
|
52
|
-
): boolean {
|
|
35
|
+
export function hasRecentDuplicateTask(queue, source, preview, now, reason) {
|
|
53
36
|
return !!findRecentDuplicateTask(queue, source, preview, now, reason);
|
|
54
37
|
}
|
|
55
|
-
|
|
56
38
|
/**
|
|
57
39
|
* Check if a phrase matches an active promoted rule.
|
|
58
40
|
*/
|
|
59
|
-
export function hasEquivalentPromotedRule(
|
|
60
|
-
dictionary: { getAllRules(): Record<string, { type: string; phrases?: string[]; pattern?: string; status: string; }> },
|
|
61
|
-
phrase: string
|
|
62
|
-
): boolean {
|
|
41
|
+
export function hasEquivalentPromotedRule(dictionary, phrase) {
|
|
63
42
|
const normalizedPhrase = phrase.trim().toLowerCase();
|
|
64
43
|
return Object.values(dictionary.getAllRules()).some((rule) => {
|
|
65
|
-
if (rule.status !== 'active')
|
|
44
|
+
if (rule.status !== 'active')
|
|
45
|
+
return false;
|
|
66
46
|
if (rule.type === 'exact_match' && Array.isArray(rule.phrases)) {
|
|
67
47
|
return rule.phrases.some((candidate) => candidate.trim().toLowerCase() === normalizedPhrase);
|
|
68
48
|
}
|
package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts}
RENAMED
|
@@ -3,50 +3,37 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pure transformation functions and shared queue types.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import type { TaskKind, TaskPriority } from '../core/trajectory-types.js';
|
|
8
|
-
|
|
9
|
-
// Re-export TaskKind and TaskPriority for convenience
|
|
10
7
|
export type { TaskKind, TaskPriority } from '../core/trajectory-types.js';
|
|
11
|
-
|
|
12
8
|
/**
|
|
13
9
|
* Queue item status values.
|
|
14
10
|
*/
|
|
15
11
|
export type QueueStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'canceled';
|
|
16
|
-
|
|
17
12
|
/**
|
|
18
13
|
* Task resolution strings.
|
|
19
14
|
*/
|
|
20
|
-
export type TaskResolution =
|
|
21
|
-
| 'marker_detected'
|
|
22
|
-
| 'auto_completed_timeout'
|
|
23
|
-
| 'failed_max_retries'
|
|
24
|
-
| 'runtime_unavailable'
|
|
25
|
-
| 'canceled'
|
|
26
|
-
| 'late_marker_principle_created'
|
|
27
|
-
| 'late_marker_no_principle'
|
|
28
|
-
| 'stub_fallback'
|
|
29
|
-
| 'skipped_thin_violation'
|
|
30
|
-
| 'noise_classified'
|
|
31
|
-
| 'retired';
|
|
32
|
-
|
|
15
|
+
export type TaskResolution = 'marker_detected' | 'auto_completed_timeout' | 'failed_max_retries' | 'runtime_unavailable' | 'canceled' | 'late_marker_principle_created' | 'late_marker_no_principle' | 'stub_fallback' | 'skipped_thin_violation' | 'noise_classified' | 'retired';
|
|
33
16
|
/**
|
|
34
17
|
* Recent pain context for sleep_reflection tasks.
|
|
35
18
|
* Attached to queue items to provide pain signal context.
|
|
36
19
|
*/
|
|
37
20
|
export interface RecentPainContext {
|
|
38
|
-
mostRecent: {
|
|
21
|
+
mostRecent: {
|
|
22
|
+
score: number;
|
|
23
|
+
source: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
timestamp: string;
|
|
26
|
+
sessionId: string;
|
|
27
|
+
} | null;
|
|
39
28
|
recentPainCount: number;
|
|
40
29
|
recentMaxPainScore: number;
|
|
41
30
|
}
|
|
42
|
-
|
|
43
31
|
/**
|
|
44
32
|
* Default values for new V2 fields when migrating legacy items.
|
|
45
33
|
*/
|
|
46
|
-
export const DEFAULT_TASK_KIND: TaskKind
|
|
47
|
-
export const DEFAULT_PRIORITY: TaskPriority
|
|
48
|
-
export const DEFAULT_MAX_RETRIES = 3;
|
|
49
|
-
|
|
34
|
+
export declare const DEFAULT_TASK_KIND: TaskKind;
|
|
35
|
+
export declare const DEFAULT_PRIORITY: TaskPriority;
|
|
36
|
+
export declare const DEFAULT_MAX_RETRIES = 3;
|
|
50
37
|
/**
|
|
51
38
|
* Legacy (pre-V2) queue item schema.
|
|
52
39
|
*/
|
|
@@ -74,7 +61,6 @@ export interface LegacyEvolutionQueueItem {
|
|
|
74
61
|
lastError?: string;
|
|
75
62
|
resultRef?: string;
|
|
76
63
|
}
|
|
77
|
-
|
|
78
64
|
/**
|
|
79
65
|
* V2 queue item schema.
|
|
80
66
|
*/
|
|
@@ -103,14 +89,12 @@ export interface EvolutionQueueItem {
|
|
|
103
89
|
resultRef?: string;
|
|
104
90
|
recentPainContext?: RecentPainContext;
|
|
105
91
|
}
|
|
106
|
-
|
|
107
92
|
export type RawQueueItem = Record<string, unknown>;
|
|
108
|
-
|
|
109
93
|
/**
|
|
110
94
|
* Migrate a legacy queue item to V2 schema.
|
|
111
95
|
* Old items without taskKind are assumed to be pain_diagnosis for backward compatibility.
|
|
112
96
|
*/
|
|
113
|
-
export function migrateToV2(item: LegacyEvolutionQueueItem): {
|
|
97
|
+
export declare function migrateToV2(item: LegacyEvolutionQueueItem): {
|
|
114
98
|
id: string;
|
|
115
99
|
taskKind: TaskKind;
|
|
116
100
|
priority: TaskPriority;
|
|
@@ -133,43 +117,12 @@ export function migrateToV2(item: LegacyEvolutionQueueItem): {
|
|
|
133
117
|
maxRetries: number;
|
|
134
118
|
lastError?: string;
|
|
135
119
|
resultRef?: string;
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
id: item.id,
|
|
139
|
-
taskKind: (item.taskKind as TaskKind) || DEFAULT_TASK_KIND,
|
|
140
|
-
priority: (item.priority as TaskPriority) || DEFAULT_PRIORITY,
|
|
141
|
-
source: item.source,
|
|
142
|
-
traceId: item.traceId,
|
|
143
|
-
task: item.task,
|
|
144
|
-
score: item.score,
|
|
145
|
-
reason: item.reason,
|
|
146
|
-
timestamp: item.timestamp,
|
|
147
|
-
enqueued_at: item.enqueued_at,
|
|
148
|
-
started_at: item.started_at,
|
|
149
|
-
completed_at: item.completed_at,
|
|
150
|
-
assigned_session_key: item.assigned_session_key,
|
|
151
|
-
trigger_text_preview: item.trigger_text_preview,
|
|
152
|
-
status: (item.status as QueueStatus) || 'pending',
|
|
153
|
-
resolution: item.resolution as TaskResolution | undefined,
|
|
154
|
-
session_id: item.session_id,
|
|
155
|
-
agent_id: item.agent_id,
|
|
156
|
-
retryCount: item.retryCount || 0,
|
|
157
|
-
maxRetries: item.maxRetries || DEFAULT_MAX_RETRIES,
|
|
158
|
-
lastError: item.lastError,
|
|
159
|
-
resultRef: item.resultRef,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
|
|
120
|
+
};
|
|
163
121
|
/**
|
|
164
122
|
* Check if an item is a legacy (pre-V2) queue item.
|
|
165
123
|
*/
|
|
166
|
-
export function isLegacyQueueItem(item: RawQueueItem): boolean
|
|
167
|
-
return item && typeof item === 'object' && !('taskKind' in item);
|
|
168
|
-
}
|
|
169
|
-
|
|
124
|
+
export declare function isLegacyQueueItem(item: RawQueueItem): boolean;
|
|
170
125
|
/**
|
|
171
126
|
* Migrate entire queue to V2 schema if needed.
|
|
172
127
|
*/
|
|
173
|
-
export function migrateQueueToV2(queue: RawQueueItem[]): ReturnType<typeof migrateToV2>[]
|
|
174
|
-
return queue.map(item => isLegacyQueueItem(item) ? migrateToV2(item as unknown as LegacyEvolutionQueueItem) : item as unknown as ReturnType<typeof migrateToV2>);
|
|
175
|
-
}
|
|
128
|
+
export declare function migrateQueueToV2(queue: RawQueueItem[]): ReturnType<typeof migrateToV2>[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evolution Queue Migration — V1 to V2 Schema
|
|
3
|
+
*
|
|
4
|
+
* Pure transformation functions and shared queue types.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Default values for new V2 fields when migrating legacy items.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_TASK_KIND = 'pain_diagnosis';
|
|
10
|
+
export const DEFAULT_PRIORITY = 'medium';
|
|
11
|
+
export const DEFAULT_MAX_RETRIES = 3;
|
|
12
|
+
/**
|
|
13
|
+
* Migrate a legacy queue item to V2 schema.
|
|
14
|
+
* Old items without taskKind are assumed to be pain_diagnosis for backward compatibility.
|
|
15
|
+
*/
|
|
16
|
+
export function migrateToV2(item) {
|
|
17
|
+
return {
|
|
18
|
+
id: item.id,
|
|
19
|
+
taskKind: item.taskKind || DEFAULT_TASK_KIND,
|
|
20
|
+
priority: item.priority || DEFAULT_PRIORITY,
|
|
21
|
+
source: item.source,
|
|
22
|
+
traceId: item.traceId,
|
|
23
|
+
task: item.task,
|
|
24
|
+
score: item.score,
|
|
25
|
+
reason: item.reason,
|
|
26
|
+
timestamp: item.timestamp,
|
|
27
|
+
enqueued_at: item.enqueued_at,
|
|
28
|
+
started_at: item.started_at,
|
|
29
|
+
completed_at: item.completed_at,
|
|
30
|
+
assigned_session_key: item.assigned_session_key,
|
|
31
|
+
trigger_text_preview: item.trigger_text_preview,
|
|
32
|
+
status: item.status || 'pending',
|
|
33
|
+
resolution: item.resolution,
|
|
34
|
+
session_id: item.session_id,
|
|
35
|
+
agent_id: item.agent_id,
|
|
36
|
+
retryCount: item.retryCount || 0,
|
|
37
|
+
maxRetries: item.maxRetries || DEFAULT_MAX_RETRIES,
|
|
38
|
+
lastError: item.lastError,
|
|
39
|
+
resultRef: item.resultRef,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if an item is a legacy (pre-V2) queue item.
|
|
44
|
+
*/
|
|
45
|
+
export function isLegacyQueueItem(item) {
|
|
46
|
+
return item && typeof item === 'object' && !('taskKind' in item);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Migrate entire queue to V2 schema if needed.
|
|
50
|
+
*/
|
|
51
|
+
export function migrateQueueToV2(queue) {
|
|
52
|
+
return queue.map(item => isLegacyQueueItem(item) ? migrateToV2(item) : item);
|
|
53
|
+
}
|