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,110 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { createEmptyHygieneStats } from '../../types/hygiene-types.js';
|
|
4
|
+
import { atomicWriteFileSync } from '../../utils/io.js';
|
|
5
|
+
/**
|
|
6
|
+
* HygieneTracker - Tracks agent behavior regarding workspace organization and persistence.
|
|
7
|
+
*/
|
|
8
|
+
export class HygieneTracker {
|
|
9
|
+
statsFile;
|
|
10
|
+
currentStats;
|
|
11
|
+
logger;
|
|
12
|
+
constructor(stateDir, logger) {
|
|
13
|
+
this.statsFile = path.join(stateDir, 'hygiene-stats.json');
|
|
14
|
+
this.logger = logger;
|
|
15
|
+
// Ensure state directory exists
|
|
16
|
+
if (!fs.existsSync(stateDir)) {
|
|
17
|
+
try {
|
|
18
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
this.logger?.error(`[PD] Failed to create state directory ${stateDir}: ${String(e)}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
this.currentStats = this.loadStats();
|
|
25
|
+
}
|
|
26
|
+
loadStats() {
|
|
27
|
+
const [today] = new Date().toISOString().split('T');
|
|
28
|
+
if (fs.existsSync(this.statsFile)) {
|
|
29
|
+
try {
|
|
30
|
+
const content = fs.readFileSync(this.statsFile, 'utf-8');
|
|
31
|
+
if (content.trim()) {
|
|
32
|
+
const allStats = JSON.parse(content);
|
|
33
|
+
if (allStats[today]) {
|
|
34
|
+
return allStats[today];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
this.logger?.error(`[PD] Failed to load/parse hygiene-stats.json: ${String(e)}`);
|
|
40
|
+
// If file is corrupted, we might want to back it up and start fresh
|
|
41
|
+
try {
|
|
42
|
+
const backupPath = `${this.statsFile}.bak`;
|
|
43
|
+
fs.renameSync(this.statsFile, backupPath);
|
|
44
|
+
this.logger?.warn(`[PD] Corrupted hygiene stats backed up to ${backupPath}`);
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- Reason: catch parameter intentionally unused - error handling only
|
|
46
|
+
}
|
|
47
|
+
catch (_renameErr) {
|
|
48
|
+
// Empty - corrupted stats backup is non-fatal
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return createEmptyHygieneStats(today);
|
|
53
|
+
}
|
|
54
|
+
saveStats() {
|
|
55
|
+
let allStats = {};
|
|
56
|
+
// Check if we need to rotate date (reset currentStats if date changed)
|
|
57
|
+
const [today] = new Date().toISOString().split('T');
|
|
58
|
+
if (this.currentStats.date !== today) {
|
|
59
|
+
this.currentStats = createEmptyHygieneStats(today);
|
|
60
|
+
}
|
|
61
|
+
if (fs.existsSync(this.statsFile)) {
|
|
62
|
+
try {
|
|
63
|
+
const content = fs.readFileSync(this.statsFile, 'utf-8');
|
|
64
|
+
if (content.trim()) {
|
|
65
|
+
allStats = JSON.parse(content);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
this.logger?.error(`[PD] Failed to parse hygiene-stats.json for saving: ${String(e)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
allStats[this.currentStats.date] = this.currentStats;
|
|
73
|
+
try {
|
|
74
|
+
// Use a temporary file for atomic write if possible, or simple write
|
|
75
|
+
atomicWriteFileSync(this.statsFile, JSON.stringify(allStats, null, 2));
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
this.logger?.error(`[PD] Failed to write hygiene-stats.json: ${String(e)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Records a persistence action (writing to memory or plan).
|
|
83
|
+
*/
|
|
84
|
+
recordPersistence(action) {
|
|
85
|
+
this.currentStats.persistenceCount++;
|
|
86
|
+
this.currentStats.lastPersistenceTime = action.ts;
|
|
87
|
+
this.currentStats.totalCharsPersisted += action.contentLength;
|
|
88
|
+
const fileName = path.basename(action.path);
|
|
89
|
+
this.currentStats.persistenceByFile[fileName] = (this.currentStats.persistenceByFile[fileName] || 0) + 1;
|
|
90
|
+
this.saveStats();
|
|
91
|
+
this.logger?.info(`[PD] Hygiene: Persisted state to ${fileName} (${action.contentLength} chars)`);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Records a grooming action (cleaning up the workspace).
|
|
95
|
+
*/
|
|
96
|
+
recordGrooming() {
|
|
97
|
+
this.currentStats.groomingExecutedCount++;
|
|
98
|
+
this.currentStats.lastGroomingTime = new Date().toISOString();
|
|
99
|
+
this.saveStats();
|
|
100
|
+
this.logger?.info(`[PD] Hygiene: Workspace grooming executed.`);
|
|
101
|
+
}
|
|
102
|
+
getStats() {
|
|
103
|
+
// Check for date change on every get
|
|
104
|
+
const [today] = new Date().toISOString().split('T');
|
|
105
|
+
if (this.currentStats.date !== today) {
|
|
106
|
+
this.currentStats = createEmptyHygieneStats(today);
|
|
107
|
+
}
|
|
108
|
+
return this.currentStats;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { OpenClawPluginApi, PluginLogger } from '../openclaw-sdk.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ensures that the workspace has the necessary template files for Principles Disciple.
|
|
4
|
+
* This function flattens 'core' templates to the root so OpenClaw can find them.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: string, language?: string): void;
|
|
7
|
+
/**
|
|
8
|
+
* Core thinking model definitions (T-01 through T-10).
|
|
9
|
+
* Derived from the Core Principle Registry — the single source of truth.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CORE_THINKING_MODELS: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize core thinking models into the training store if it's empty.
|
|
18
|
+
* This ensures every workspace has evaluable principles for nocturnal reflection.
|
|
19
|
+
*
|
|
20
|
+
* @param stateDir - State directory path
|
|
21
|
+
* @param logger - Plugin logger
|
|
22
|
+
* @returns true if initialization was performed, false if already had principles
|
|
23
|
+
*/
|
|
24
|
+
export declare function ensureCorePrinciples(stateDir: string, logger: PluginLogger): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Ensures that the state directory has the necessary files (like pain_dictionary.json).
|
|
27
|
+
*/
|
|
28
|
+
export declare function ensureStateTemplates(ctx: {
|
|
29
|
+
logger: PluginLogger;
|
|
30
|
+
}, stateDir: string, language?: string): void;
|
|
@@ -1,67 +1,59 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
|
-
import type { OpenClawPluginApi, PluginLogger } from '../openclaw-sdk.js';
|
|
5
4
|
import { PD_DIRS } from './paths.js';
|
|
6
5
|
import { defaultContextConfig } from '../types.js';
|
|
7
|
-
import { loadStore, setPrincipleState
|
|
6
|
+
import { loadStore, setPrincipleState } from './principle-training-state.js';
|
|
8
7
|
import { addPrincipleToLedger } from './principle-tree-ledger.js';
|
|
9
|
-
import type { LedgerPrinciple } from './principle-tree-ledger.js';
|
|
10
8
|
import { atomicWriteFileSync } from '../utils/io.js';
|
|
11
9
|
import { createDefaultKeywordStore, saveKeywordStore } from './empathy-keyword-matcher.js';
|
|
12
10
|
import { CORE_PRINCIPLES } from '@principles/core/runtime-v2';
|
|
13
|
-
|
|
14
11
|
/**
|
|
15
12
|
* Default PROFILE.json content
|
|
16
13
|
*/
|
|
17
14
|
const DEFAULT_PROFILE = {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
name: "Principles Disciple Agent",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
contextInjection: defaultContextConfig
|
|
21
18
|
};
|
|
22
|
-
|
|
23
19
|
const CORE_GUIDANCE_VERSION = 'pd-core-guidance-v2';
|
|
24
20
|
const CORE_GUIDANCE_FILES = new Set(['AGENTS.md', 'TOOLS.md']);
|
|
25
|
-
|
|
26
|
-
function getCoreGuidanceVersionMarker(): string {
|
|
21
|
+
function getCoreGuidanceVersionMarker() {
|
|
27
22
|
return `pd-core-guidance-version: ${CORE_GUIDANCE_VERSION}`;
|
|
28
23
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (content.includes(getCoreGuidanceVersionMarker()))
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
24
|
+
function hasOutdatedCoreGuidance(file, content) {
|
|
25
|
+
if (!CORE_GUIDANCE_FILES.has(file))
|
|
26
|
+
return false;
|
|
27
|
+
if (content.includes(getCoreGuidanceVersionMarker()))
|
|
28
|
+
return false;
|
|
29
|
+
if (content.includes('pd_spawn_agent'))
|
|
30
|
+
return true;
|
|
31
|
+
if (!content.includes('subagents'))
|
|
32
|
+
return true;
|
|
33
|
+
if (!content.includes('sessions_spawn'))
|
|
34
|
+
return true;
|
|
36
35
|
return false;
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
/**
|
|
40
38
|
* Ensures that the workspace has the necessary template files for Principles Disciple.
|
|
41
39
|
* This function flattens 'core' templates to the root so OpenClaw can find them.
|
|
42
40
|
*/
|
|
43
|
-
|
|
44
|
-
export function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: string, language = 'en') {
|
|
41
|
+
export function ensureWorkspaceTemplates(api, workspaceDir, language = 'en') {
|
|
45
42
|
try {
|
|
46
43
|
const __filename = fileURLToPath(import.meta.url);
|
|
47
44
|
const __dirname = path.dirname(__filename);
|
|
48
|
-
|
|
49
45
|
// 1. Copy common workspace templates (e.g., docs/*)
|
|
50
46
|
const commonTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'workspace');
|
|
51
47
|
if (fs.existsSync(commonTemplatesDir)) {
|
|
52
48
|
api.logger.info(`[PD] Syncing workspace templates: ${workspaceDir}...`);
|
|
53
|
-
|
|
54
|
-
|
|
55
49
|
copyRecursiveSync(commonTemplatesDir, workspaceDir, api);
|
|
56
50
|
}
|
|
57
|
-
|
|
58
51
|
// 2. Copy language-specific core templates (AGENTS.md, SOUL.md, etc.)
|
|
59
52
|
// CRITICAL: These MUST be at the root of the workspace for OpenClaw to recognize them.
|
|
60
53
|
let coreTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'core');
|
|
61
54
|
if (!fs.existsSync(coreTemplatesDir)) {
|
|
62
55
|
coreTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', 'zh', 'core');
|
|
63
56
|
}
|
|
64
|
-
|
|
65
57
|
if (fs.existsSync(coreTemplatesDir)) {
|
|
66
58
|
api.logger.info(`[PD] Flattening ${language} core templates to workspace root...`);
|
|
67
59
|
// We copy contents of 'core' directory directly to workspaceDir root
|
|
@@ -69,14 +61,14 @@ export function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: s
|
|
|
69
61
|
for (const file of coreFiles) {
|
|
70
62
|
const srcPath = path.join(coreTemplatesDir, file);
|
|
71
63
|
const destPath = path.join(workspaceDir, file);
|
|
72
|
-
|
|
73
64
|
// If it's a core file and we want to ensure latest templates are used
|
|
74
65
|
// but don't want to destroy user custom data, we check if we should overwrite.
|
|
75
66
|
// For now, we only copy if missing to be safe, but log it.
|
|
76
67
|
if (!fs.existsSync(destPath)) {
|
|
77
68
|
fs.copyFileSync(srcPath, destPath);
|
|
78
69
|
api.logger.info(`[PD] Initialized core file: ${file}`);
|
|
79
|
-
}
|
|
70
|
+
}
|
|
71
|
+
else if (CORE_GUIDANCE_FILES.has(file)) {
|
|
80
72
|
const existingContent = fs.readFileSync(destPath, 'utf8');
|
|
81
73
|
if (hasOutdatedCoreGuidance(file, existingContent)) {
|
|
82
74
|
api.logger.warn(`[PD] Outdated core guidance detected in ${file}. Review the latest template guidance for peer sessions, subagents, and sessions_spawn routing.`);
|
|
@@ -84,24 +76,18 @@ export function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: s
|
|
|
84
76
|
}
|
|
85
77
|
}
|
|
86
78
|
}
|
|
87
|
-
|
|
88
79
|
// 3. Copy pain memory seed files
|
|
89
80
|
const painTemplatesDir = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'pain');
|
|
90
81
|
const painDestDir = path.join(workspaceDir, PD_DIRS.PAIN_SAMPLES);
|
|
91
|
-
|
|
92
82
|
if (fs.existsSync(painTemplatesDir)) {
|
|
93
83
|
if (!fs.existsSync(painDestDir)) {
|
|
94
84
|
fs.mkdirSync(painDestDir, { recursive: true });
|
|
95
85
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
86
|
copyRecursiveSync(painTemplatesDir, painDestDir, api);
|
|
99
87
|
}
|
|
100
|
-
|
|
101
88
|
// 4. Initialize PROFILE.json with default contextInjection config
|
|
102
89
|
const principlesDir = path.join(workspaceDir, PD_DIRS.IDENTITY);
|
|
103
90
|
const profilePath = path.join(principlesDir, 'PROFILE.json');
|
|
104
|
-
|
|
105
91
|
if (!fs.existsSync(profilePath)) {
|
|
106
92
|
// Ensure .principles directory exists
|
|
107
93
|
if (!fs.existsSync(principlesDir)) {
|
|
@@ -110,32 +96,30 @@ export function ensureWorkspaceTemplates(api: OpenClawPluginApi, workspaceDir: s
|
|
|
110
96
|
atomicWriteFileSync(profilePath, JSON.stringify(DEFAULT_PROFILE, null, 2));
|
|
111
97
|
api.logger.info(`[PD] Initialized PROFILE.json with default contextInjection config`);
|
|
112
98
|
}
|
|
113
|
-
}
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
114
101
|
api.logger.error(`[PD] Failed to initialize workspace templates: ${String(err)}`);
|
|
115
102
|
}
|
|
116
103
|
}
|
|
117
|
-
|
|
118
104
|
/**
|
|
119
105
|
* Standard recursive copy that preserves directory structure.
|
|
120
106
|
* Special handling: maps 'okr' directory to 'memory/okr' for runtime compatibility.
|
|
121
107
|
*/
|
|
122
|
-
|
|
123
|
-
function copyRecursiveSync(srcDir: string, destDir: string, api: OpenClawPluginApi | { logger: PluginLogger }) {
|
|
108
|
+
function copyRecursiveSync(srcDir, destDir, api) {
|
|
124
109
|
const items = fs.readdirSync(srcDir);
|
|
125
|
-
|
|
126
110
|
for (const item of items) {
|
|
127
111
|
const srcPath = path.join(srcDir, item);
|
|
128
112
|
// Special mapping: okr -> memory/okr (runtime path expects memory/okr/)
|
|
129
113
|
const destItemName = item === 'okr' ? path.join('memory', 'okr') : item;
|
|
130
114
|
const destPath = path.join(destDir, destItemName);
|
|
131
115
|
const stat = fs.statSync(srcPath);
|
|
132
|
-
|
|
133
116
|
if (stat.isDirectory()) {
|
|
134
117
|
if (!fs.existsSync(destPath)) {
|
|
135
118
|
fs.mkdirSync(destPath, { recursive: true });
|
|
136
119
|
}
|
|
137
120
|
copyRecursiveSync(srcPath, destPath, api);
|
|
138
|
-
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
139
123
|
if (!fs.existsSync(destPath)) {
|
|
140
124
|
// Ensure parent directory exists
|
|
141
125
|
const destParent = path.dirname(destPath);
|
|
@@ -148,21 +132,15 @@ function copyRecursiveSync(srcDir: string, destDir: string, api: OpenClawPluginA
|
|
|
148
132
|
}
|
|
149
133
|
}
|
|
150
134
|
}
|
|
151
|
-
|
|
152
135
|
/**
|
|
153
136
|
* Core thinking model definitions (T-01 through T-10).
|
|
154
137
|
* Derived from the Core Principle Registry — the single source of truth.
|
|
155
138
|
*/
|
|
156
|
-
export const CORE_THINKING_MODELS
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}> = CORE_PRINCIPLES.map(p => ({
|
|
161
|
-
id: p.id,
|
|
162
|
-
name: p.name,
|
|
163
|
-
description: p.statement,
|
|
139
|
+
export const CORE_THINKING_MODELS = CORE_PRINCIPLES.map(p => ({
|
|
140
|
+
id: p.id,
|
|
141
|
+
name: p.name,
|
|
142
|
+
description: p.statement,
|
|
164
143
|
}));
|
|
165
|
-
|
|
166
144
|
/**
|
|
167
145
|
* Initialize core thinking models into the training store if it's empty.
|
|
168
146
|
* This ensures every workspace has evaluable principles for nocturnal reflection.
|
|
@@ -171,82 +149,75 @@ export const CORE_THINKING_MODELS: Array<{
|
|
|
171
149
|
* @param logger - Plugin logger
|
|
172
150
|
* @returns true if initialization was performed, false if already had principles
|
|
173
151
|
*/
|
|
174
|
-
export function ensureCorePrinciples(stateDir
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
152
|
+
export function ensureCorePrinciples(stateDir, logger) {
|
|
153
|
+
try {
|
|
154
|
+
const store = loadStore(stateDir);
|
|
155
|
+
const existingIds = Object.keys(store).filter(k => k !== '_tree');
|
|
156
|
+
// If already has principles, skip initialization
|
|
157
|
+
if (existingIds.length > 0) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
logger.info(`[PD] Initializing core thinking models (${CORE_THINKING_MODELS.length} principles) into training store`);
|
|
161
|
+
for (const model of CORE_THINKING_MODELS) {
|
|
162
|
+
const state = {
|
|
163
|
+
principleId: model.id,
|
|
164
|
+
evaluability: 'deterministic',
|
|
165
|
+
applicableOpportunityCount: 0,
|
|
166
|
+
observedViolationCount: 0,
|
|
167
|
+
complianceRate: 0,
|
|
168
|
+
violationTrend: 0,
|
|
169
|
+
generatedSampleCount: 0,
|
|
170
|
+
approvedSampleCount: 0,
|
|
171
|
+
includedTrainRunIds: [],
|
|
172
|
+
deployedCheckpointIds: [],
|
|
173
|
+
internalizationStatus: 'needs_training',
|
|
174
|
+
};
|
|
175
|
+
setPrincipleState(stateDir, state);
|
|
176
|
+
// Also write to Ledger Tree so bootstrapRules() can find them
|
|
177
|
+
const now = new Date().toISOString();
|
|
178
|
+
const ledgerPrinciple = {
|
|
179
|
+
id: model.id,
|
|
180
|
+
version: 1,
|
|
181
|
+
text: model.description,
|
|
182
|
+
coreAxiomId: model.id,
|
|
183
|
+
triggerPattern: '',
|
|
184
|
+
action: '',
|
|
185
|
+
status: 'active',
|
|
186
|
+
priority: 'P1',
|
|
187
|
+
scope: 'general',
|
|
188
|
+
evaluability: 'deterministic',
|
|
189
|
+
valueScore: 0,
|
|
190
|
+
adherenceRate: 0,
|
|
191
|
+
painPreventedCount: 0,
|
|
192
|
+
derivedFromPainIds: [],
|
|
193
|
+
ruleIds: [],
|
|
194
|
+
conflictsWithPrincipleIds: [],
|
|
195
|
+
createdAt: now,
|
|
196
|
+
updatedAt: now,
|
|
197
|
+
suggestedRules: [],
|
|
198
|
+
};
|
|
199
|
+
addPrincipleToLedger(stateDir, ledgerPrinciple);
|
|
200
|
+
}
|
|
201
|
+
const firstId = CORE_THINKING_MODELS[0]?.id ?? 'T-01';
|
|
202
|
+
const lastId = CORE_THINKING_MODELS[CORE_THINKING_MODELS.length - 1]?.id ?? 'T-10';
|
|
203
|
+
logger.info(`[PD] Initialized ${CORE_THINKING_MODELS.length} core thinking models: ${firstId} through ${lastId}`);
|
|
204
|
+
return true;
|
|
182
205
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
for (const model of CORE_THINKING_MODELS) {
|
|
187
|
-
const state: PrincipleTrainingState = {
|
|
188
|
-
principleId: model.id,
|
|
189
|
-
evaluability: 'deterministic',
|
|
190
|
-
applicableOpportunityCount: 0,
|
|
191
|
-
observedViolationCount: 0,
|
|
192
|
-
complianceRate: 0,
|
|
193
|
-
violationTrend: 0,
|
|
194
|
-
generatedSampleCount: 0,
|
|
195
|
-
approvedSampleCount: 0,
|
|
196
|
-
includedTrainRunIds: [],
|
|
197
|
-
deployedCheckpointIds: [],
|
|
198
|
-
internalizationStatus: 'needs_training',
|
|
199
|
-
};
|
|
200
|
-
setPrincipleState(stateDir, state);
|
|
201
|
-
|
|
202
|
-
// Also write to Ledger Tree so bootstrapRules() can find them
|
|
203
|
-
const now = new Date().toISOString();
|
|
204
|
-
const ledgerPrinciple: LedgerPrinciple = {
|
|
205
|
-
id: model.id,
|
|
206
|
-
version: 1,
|
|
207
|
-
text: model.description,
|
|
208
|
-
coreAxiomId: model.id,
|
|
209
|
-
triggerPattern: '',
|
|
210
|
-
action: '',
|
|
211
|
-
status: 'active',
|
|
212
|
-
priority: 'P1',
|
|
213
|
-
scope: 'general',
|
|
214
|
-
evaluability: 'deterministic',
|
|
215
|
-
valueScore: 0,
|
|
216
|
-
adherenceRate: 0,
|
|
217
|
-
painPreventedCount: 0,
|
|
218
|
-
derivedFromPainIds: [],
|
|
219
|
-
ruleIds: [],
|
|
220
|
-
conflictsWithPrincipleIds: [],
|
|
221
|
-
createdAt: now,
|
|
222
|
-
updatedAt: now,
|
|
223
|
-
suggestedRules: [],
|
|
224
|
-
};
|
|
225
|
-
addPrincipleToLedger(stateDir, ledgerPrinciple);
|
|
206
|
+
catch (err) {
|
|
207
|
+
logger.error(`[PD] Failed to initialize core principles: ${String(err)}`);
|
|
208
|
+
return false;
|
|
226
209
|
}
|
|
227
|
-
|
|
228
|
-
const firstId = CORE_THINKING_MODELS[0]?.id ?? 'T-01';
|
|
229
|
-
const lastId = CORE_THINKING_MODELS[CORE_THINKING_MODELS.length - 1]?.id ?? 'T-10';
|
|
230
|
-
logger.info(`[PD] Initialized ${CORE_THINKING_MODELS.length} core thinking models: ${firstId} through ${lastId}`);
|
|
231
|
-
return true;
|
|
232
|
-
} catch (err) {
|
|
233
|
-
logger.error(`[PD] Failed to initialize core principles: ${String(err)}`);
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
210
|
}
|
|
237
|
-
|
|
238
211
|
/**
|
|
239
212
|
* Ensures that the state directory has the necessary files (like pain_dictionary.json).
|
|
240
213
|
*/
|
|
241
|
-
export function ensureStateTemplates(ctx
|
|
214
|
+
export function ensureStateTemplates(ctx, stateDir, language = 'en') {
|
|
242
215
|
try {
|
|
243
216
|
const __filename = fileURLToPath(import.meta.url);
|
|
244
217
|
const __dirname = path.dirname(__filename);
|
|
245
|
-
|
|
246
218
|
if (!fs.existsSync(stateDir)) {
|
|
247
219
|
fs.mkdirSync(stateDir, { recursive: true });
|
|
248
220
|
}
|
|
249
|
-
|
|
250
221
|
// 1. Copy common state files
|
|
251
222
|
const commonFiles = ['pain_settings.json'];
|
|
252
223
|
for (const filename of commonFiles) {
|
|
@@ -257,19 +228,16 @@ export function ensureStateTemplates(ctx: { logger: PluginLogger }, stateDir: st
|
|
|
257
228
|
ctx.logger.info(`[PD] Initialized ${filename} in stateDir: ${destPath}`);
|
|
258
229
|
}
|
|
259
230
|
}
|
|
260
|
-
|
|
261
231
|
// 2. Copy language-specific dictionary
|
|
262
232
|
let dictTemplate = path.resolve(__dirname, '..', '..', 'templates', 'langs', language, 'pain_dictionary.json');
|
|
263
233
|
if (!fs.existsSync(dictTemplate)) {
|
|
264
234
|
dictTemplate = path.resolve(__dirname, '..', '..', 'templates', 'langs', 'en', 'pain_dictionary.json');
|
|
265
235
|
}
|
|
266
|
-
|
|
267
236
|
const dictDest = path.join(stateDir, 'pain_dictionary.json');
|
|
268
237
|
if (!fs.existsSync(dictDest) && fs.existsSync(dictTemplate)) {
|
|
269
238
|
fs.copyFileSync(dictTemplate, dictDest);
|
|
270
239
|
ctx.logger.info(`[PD] Initialized pain dictionary in stateDir: ${dictDest} (Lang: ${language})`);
|
|
271
240
|
}
|
|
272
|
-
|
|
273
241
|
// 3. Initialize empathy keyword store for new users
|
|
274
242
|
// loadKeywordStore() creates the file if missing, but we call it explicitly
|
|
275
243
|
// here so the file exists before any agent/workflow tries to read it
|
|
@@ -280,7 +248,8 @@ export function ensureStateTemplates(ctx: { logger: PluginLogger }, stateDir: st
|
|
|
280
248
|
saveKeywordStore(stateDir, store);
|
|
281
249
|
ctx.logger.info(`[PD] Initialized empathy keyword store in stateDir: ${empathyFile}`);
|
|
282
250
|
}
|
|
283
|
-
}
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
284
253
|
ctx.logger.error(`[PD] Failed to initialize state templates: ${String(err)}`);
|
|
285
254
|
}
|
|
286
255
|
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Worker Routing Policy — Task Classification and Routing Decisions
|
|
3
|
+
* ======================================================================
|
|
4
|
+
*
|
|
5
|
+
* Phase: PRI-74 Routing Guidance Migration (follow-up to PRI-75 Prompt Injection SDK Migration)
|
|
6
|
+
*
|
|
7
|
+
* This file is a THIN ADAPTER.
|
|
8
|
+
* Pure classification logic lives in @principles/core/prompt-builder/routing-guidance.ts.
|
|
9
|
+
* This file handles I/O (deployment registry, promotion state) and combines
|
|
10
|
+
* pure classification with deployment checks.
|
|
11
|
+
*
|
|
12
|
+
* ARCHITECTURE:
|
|
13
|
+
* - Pure: classifyTaskKind, buildReason, buildBlockers, keyword constants → core
|
|
14
|
+
* - I/O: getDeployment, isRoutingEnabledForProfile, isCheckpointDeployable, getPromotionState → plugin
|
|
15
|
+
*
|
|
16
|
+
* TASK CLASSIFICATION TAXONOMY:
|
|
17
|
+
* Pure-classification output from classifyTaskKind() in @principles/core/prompt-builder/routing-guidance.ts:
|
|
18
|
+
* reader_eligible — clearly suitable for local-reader
|
|
19
|
+
* editor_eligible — clearly suitable for local-editor
|
|
20
|
+
* high_entropy_disallowed — high-complexity tasks that must stay on main agent
|
|
21
|
+
* ambiguous_scope — tasks that are unclear and need main-agent judgment
|
|
22
|
+
* Plugin layer adds I/O-bound categories via deployment checks in classifyTask():
|
|
23
|
+
* profile_mismatch — target profile incompatible with task classification
|
|
24
|
+
* deployment_unavailable — no enabled deployment exists for the target profile
|
|
25
|
+
*
|
|
26
|
+
* FAIL-CLOSED PRINCIPLE:
|
|
27
|
+
* - When in doubt → stay_main
|
|
28
|
+
* - Unclear intent → stay_main
|
|
29
|
+
* - High complexity → stay_main
|
|
30
|
+
* - No enabled deployment → stay_main
|
|
31
|
+
*/
|
|
32
|
+
import type { WorkerProfile } from './model-deployment-registry.js';
|
|
33
|
+
import { type RoutingInput as CoreRoutingInput } from '@principles/core/prompt-builder';
|
|
34
|
+
export type { RoutingInput } from '@principles/core/prompt-builder';
|
|
35
|
+
/**
|
|
36
|
+
* The result of a routing classification decision.
|
|
37
|
+
* Always includes a `reason` and a `blockers` list for full explainability.
|
|
38
|
+
*/
|
|
39
|
+
export interface RoutingDecision {
|
|
40
|
+
/**
|
|
41
|
+
* The routing verdict.
|
|
42
|
+
* - `route_local` — the task may be delegated to `targetProfile`
|
|
43
|
+
* - `stay_main` — the task must remain on the main agent
|
|
44
|
+
*/
|
|
45
|
+
decision: 'route_local' | 'stay_main';
|
|
46
|
+
/**
|
|
47
|
+
* Which profile the task should be routed to (if decision === 'route_local').
|
|
48
|
+
* Null if decision === 'stay_main'.
|
|
49
|
+
*/
|
|
50
|
+
targetProfile: WorkerProfile | null;
|
|
51
|
+
/**
|
|
52
|
+
* The task classification category that led to this decision.
|
|
53
|
+
*/
|
|
54
|
+
classification: 'reader_eligible' | 'editor_eligible' | 'high_entropy_disallowed' | 'ambiguous_scope' | 'profile_mismatch' | 'deployment_unavailable';
|
|
55
|
+
/**
|
|
56
|
+
* Human-readable explanation of the routing decision.
|
|
57
|
+
* Must be specific enough that a developer can understand why a task was accepted/rejected.
|
|
58
|
+
*/
|
|
59
|
+
reason: string;
|
|
60
|
+
/**
|
|
61
|
+
* List of specific reasons that blocked routing (if decision === 'stay_main').
|
|
62
|
+
* Empty if decision === 'route_local'.
|
|
63
|
+
*/
|
|
64
|
+
blockers: string[];
|
|
65
|
+
/**
|
|
66
|
+
* Whether a deployment check was performed and whether it passed.
|
|
67
|
+
* Useful for diagnostics when deployment_unavailable is the classification.
|
|
68
|
+
*/
|
|
69
|
+
deploymentCheck: {
|
|
70
|
+
performed: boolean;
|
|
71
|
+
profileAvailable: boolean;
|
|
72
|
+
routingEnabled: boolean;
|
|
73
|
+
/** Whether the active checkpoint is currently marked as deployable in the training registry. */
|
|
74
|
+
checkpointDeployable: boolean;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* The active checkpoint ID that would be used for routing (if decision === 'route_local').
|
|
78
|
+
* This is the checkpoint from the deployment registry.
|
|
79
|
+
* Null if decision === 'stay_main' or if no checkpoint is active.
|
|
80
|
+
*
|
|
81
|
+
* USE FOR SHADOW OBSERVATIONS:
|
|
82
|
+
* When routing in shadow mode (checkpoint is in shadow_ready state),
|
|
83
|
+
* the caller should record a shadow observation using this checkpoint ID.
|
|
84
|
+
*/
|
|
85
|
+
activeCheckpointId: string | null;
|
|
86
|
+
/**
|
|
87
|
+
* The promotion state of the active checkpoint.
|
|
88
|
+
* Indicates whether this is a regular deployment or a shadow rollout.
|
|
89
|
+
* Useful for determining whether to record shadow observations.
|
|
90
|
+
*/
|
|
91
|
+
activeCheckpointState?: 'promotable' | 'shadow_ready' | 'candidate_only';
|
|
92
|
+
/**
|
|
93
|
+
* Deprecated: runtime shadow observations are now recorded from real
|
|
94
|
+
* subagent lifecycle hooks instead of from classifyTask().
|
|
95
|
+
*/
|
|
96
|
+
shadowObservationId?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Classify a task and produce a routing decision.
|
|
100
|
+
*
|
|
101
|
+
* This is the main entry point for routing policy evaluation.
|
|
102
|
+
* It:
|
|
103
|
+
* 1. Classifies the task kind based on keywords and heuristics (core pure function)
|
|
104
|
+
* 2. Checks deployment availability for the target profile (plugin I/O)
|
|
105
|
+
* 3. Returns a fully explainable RoutingDecision
|
|
106
|
+
*
|
|
107
|
+
* @param input - The routing input describing the task
|
|
108
|
+
* @param stateDir - Workspace state directory (for deployment registry lookup)
|
|
109
|
+
* @returns RoutingDecision with classification, reason, blockers, and routing verdict
|
|
110
|
+
*/
|
|
111
|
+
export declare function classifyTask(input: CoreRoutingInput, stateDir: string): RoutingDecision;
|
|
112
|
+
/**
|
|
113
|
+
* Convenience: check if a specific profile can handle a task.
|
|
114
|
+
* Equivalent to calling classifyTask with targetProfile set.
|
|
115
|
+
*/
|
|
116
|
+
export declare function canRouteToProfile(input: CoreRoutingInput, stateDir: string, profile: WorkerProfile): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Check if any local worker routing is currently enabled for any profile.
|
|
119
|
+
*/
|
|
120
|
+
export declare function isAnyLocalRoutingEnabled(stateDir: string): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* List all profiles that currently have routing enabled.
|
|
123
|
+
*/
|
|
124
|
+
export declare function listEnabledProfiles(stateDir: string): WorkerProfile[];
|