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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowFunnelLoader — Loads and watches workflows.yaml as the SSOT
|
|
3
|
+
* for WORKFLOW_FUNNELS definition table.
|
|
4
|
+
*
|
|
5
|
+
* D-01: workflows.yaml is the single source of truth (SSOT).
|
|
6
|
+
* D-02: workflows.yaml lives in .state/ directory per workspace.
|
|
7
|
+
* D-03: Developers manually maintain workflows.yaml (no auto-registration).
|
|
8
|
+
* D-04: Code only reads YAML, never writes it.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* A single stage in a workflow funnel.
|
|
12
|
+
* Policy fields are optional — existing stages without policy fields remain valid.
|
|
13
|
+
*/
|
|
14
|
+
export interface WorkflowStage {
|
|
15
|
+
name: string;
|
|
16
|
+
eventType: string;
|
|
17
|
+
eventCategory: string;
|
|
18
|
+
statsField: string;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
successCriteria?: string;
|
|
21
|
+
legacyDisabled?: boolean;
|
|
22
|
+
observability?: {
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
emitEvents?: string[];
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Funnel-level policy that applies to all stages unless overridden per-stage.
|
|
29
|
+
*/
|
|
30
|
+
export interface FunnelPolicy {
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
stageOrder?: 'strict' | 'relaxed';
|
|
33
|
+
legacyDisabled?: boolean;
|
|
34
|
+
observability?: {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
emitEvents?: string[];
|
|
37
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A workflow funnel definition.
|
|
42
|
+
*/
|
|
43
|
+
export interface WorkflowFunnel {
|
|
44
|
+
workflowId: string;
|
|
45
|
+
stages: WorkflowStage[];
|
|
46
|
+
policy?: FunnelPolicy;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Root of workflows.yaml schema.
|
|
50
|
+
*/
|
|
51
|
+
export interface WorkflowFunnelConfig {
|
|
52
|
+
version: string;
|
|
53
|
+
funnels: WorkflowFunnel[];
|
|
54
|
+
}
|
|
55
|
+
export declare class WorkflowFunnelLoader {
|
|
56
|
+
private readonly funnels;
|
|
57
|
+
private readonly fullFunnels;
|
|
58
|
+
private readonly configPath;
|
|
59
|
+
private watchHandle?;
|
|
60
|
+
private readonly warnings;
|
|
61
|
+
constructor(stateDir: string);
|
|
62
|
+
load(): void;
|
|
63
|
+
watch(): void;
|
|
64
|
+
dispose(): void;
|
|
65
|
+
getStages(workflowId: string): WorkflowStage[];
|
|
66
|
+
getFunnel(workflowId: string): WorkflowFunnel | undefined;
|
|
67
|
+
getAllFunnels(): Map<string, WorkflowStage[]>;
|
|
68
|
+
getAllFunnelsWithPolicy(): Map<string, WorkflowFunnel>;
|
|
69
|
+
getWarnings(): string[];
|
|
70
|
+
getConfigPath(): string;
|
|
71
|
+
private cloneFunnel;
|
|
72
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowFunnelLoader — Loads and watches workflows.yaml as the SSOT
|
|
3
|
+
* for WORKFLOW_FUNNELS definition table.
|
|
4
|
+
*
|
|
5
|
+
* D-01: workflows.yaml is the single source of truth (SSOT).
|
|
6
|
+
* D-02: workflows.yaml lives in .state/ directory per workspace.
|
|
7
|
+
* D-03: Developers manually maintain workflows.yaml (no auto-registration).
|
|
8
|
+
* D-04: Code only reads YAML, never writes it.
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import yaml from 'js-yaml';
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
// WorkflowFunnelLoader
|
|
15
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
export class WorkflowFunnelLoader {
|
|
17
|
+
funnels = new Map();
|
|
18
|
+
fullFunnels = new Map();
|
|
19
|
+
configPath;
|
|
20
|
+
watchHandle;
|
|
21
|
+
warnings = [];
|
|
22
|
+
constructor(stateDir) {
|
|
23
|
+
this.configPath = path.join(stateDir, 'workflows.yaml');
|
|
24
|
+
this.load();
|
|
25
|
+
}
|
|
26
|
+
load() {
|
|
27
|
+
this.warnings.length = 0;
|
|
28
|
+
if (!fs.existsSync(this.configPath)) {
|
|
29
|
+
this.warnings.push('workflows.yaml file not found.');
|
|
30
|
+
this.funnels.clear();
|
|
31
|
+
this.fullFunnels.clear();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const content = fs.readFileSync(this.configPath, 'utf-8');
|
|
36
|
+
const config = yaml.load(content, { schema: yaml.DEFAULT_SCHEMA });
|
|
37
|
+
if (!config || typeof config.version !== 'string' || !Array.isArray(config.funnels)) {
|
|
38
|
+
const msg = 'workflows.yaml validation failed: missing version or funnels array. Preserving last valid config.';
|
|
39
|
+
console.warn(`[WorkflowFunnelLoader] ${msg}`);
|
|
40
|
+
this.warnings.push(msg);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const newFunnels = new Map();
|
|
44
|
+
const newFullFunnels = new Map();
|
|
45
|
+
for (const funnel of config.funnels) {
|
|
46
|
+
if (funnel?.workflowId && typeof funnel.workflowId === 'string' && Array.isArray(funnel.stages)) {
|
|
47
|
+
newFunnels.set(funnel.workflowId, funnel.stages);
|
|
48
|
+
newFullFunnels.set(funnel.workflowId, funnel);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const msg = 'Skipping invalid funnel entry: missing workflowId or stages.';
|
|
52
|
+
console.warn(`[WorkflowFunnelLoader] ${msg}`);
|
|
53
|
+
this.warnings.push(msg);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.funnels.clear();
|
|
57
|
+
this.fullFunnels.clear();
|
|
58
|
+
for (const [k, v] of newFunnels) {
|
|
59
|
+
this.funnels.set(k, v);
|
|
60
|
+
}
|
|
61
|
+
for (const [k, v] of newFullFunnels) {
|
|
62
|
+
this.fullFunnels.set(k, v);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = `Failed to parse workflows.yaml: ${String(err)}. Preserving last valid config.`;
|
|
67
|
+
console.warn(`[WorkflowFunnelLoader] ${msg}`);
|
|
68
|
+
this.warnings.push(msg);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
watch() {
|
|
72
|
+
if (this.watchHandle)
|
|
73
|
+
return;
|
|
74
|
+
if (!fs.existsSync(this.configPath))
|
|
75
|
+
return;
|
|
76
|
+
let debounceTimer;
|
|
77
|
+
this.watchHandle = fs.watch(this.configPath, (eventType) => {
|
|
78
|
+
if (eventType !== 'change' && eventType !== 'rename')
|
|
79
|
+
return;
|
|
80
|
+
if (debounceTimer)
|
|
81
|
+
clearTimeout(debounceTimer);
|
|
82
|
+
debounceTimer = setTimeout(() => this.load(), 100);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
dispose() {
|
|
86
|
+
if (this.watchHandle) {
|
|
87
|
+
this.watchHandle.close();
|
|
88
|
+
this.watchHandle = undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getStages(workflowId) {
|
|
92
|
+
return this.funnels.get(workflowId) ?? [];
|
|
93
|
+
}
|
|
94
|
+
getFunnel(workflowId) {
|
|
95
|
+
const funnel = this.fullFunnels.get(workflowId);
|
|
96
|
+
if (!funnel)
|
|
97
|
+
return undefined;
|
|
98
|
+
return this.cloneFunnel(funnel);
|
|
99
|
+
}
|
|
100
|
+
getAllFunnels() {
|
|
101
|
+
const result = new Map();
|
|
102
|
+
for (const [k, v] of this.funnels) {
|
|
103
|
+
result.set(k, v.map(stage => ({ ...stage })));
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
getAllFunnelsWithPolicy() {
|
|
108
|
+
const result = new Map();
|
|
109
|
+
for (const [k, v] of this.fullFunnels) {
|
|
110
|
+
result.set(k, this.cloneFunnel(v));
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
getWarnings() {
|
|
115
|
+
return [...this.warnings];
|
|
116
|
+
}
|
|
117
|
+
getConfigPath() {
|
|
118
|
+
return this.configPath;
|
|
119
|
+
}
|
|
120
|
+
cloneFunnel(funnel) {
|
|
121
|
+
return {
|
|
122
|
+
...funnel,
|
|
123
|
+
stages: funnel.stages.map(stage => ({ ...stage })),
|
|
124
|
+
policy: funnel.policy ? {
|
|
125
|
+
...funnel.policy,
|
|
126
|
+
observability: funnel.policy.observability ? {
|
|
127
|
+
...funnel.policy.observability,
|
|
128
|
+
emitEvents: funnel.policy.observability.emitEvents
|
|
129
|
+
? [...funnel.policy.observability.emitEvents]
|
|
130
|
+
: undefined,
|
|
131
|
+
} : undefined,
|
|
132
|
+
} : undefined,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { PD_FILES } from './paths.js';
|
|
2
|
+
import type { PainConfig } from './config.js';
|
|
3
|
+
import type { EventLog } from './event-log.js';
|
|
4
|
+
import type { PainDictionary } from './dictionary.js';
|
|
5
|
+
import { HygieneTracker } from './hygiene/tracker.js';
|
|
6
|
+
import { EvolutionReducerImpl } from './evolution-reducer.js';
|
|
7
|
+
import type { TrajectoryDatabase } from './trajectory.js';
|
|
8
|
+
import { PrincipleLifecycleService } from './principle-internalization/principle-lifecycle-service.js';
|
|
9
|
+
import { type PrincipleSubtree } from './principle-tree-ledger.js';
|
|
10
|
+
import type { Principle, PrincipleValueMetrics } from '../types/principle-tree-schema.js';
|
|
11
|
+
import type { Principle as ActivePrinciple } from './evolution-types.js';
|
|
12
|
+
interface PrincipleTreeLedgerAccessor {
|
|
13
|
+
getPrincipleSubtree(_principleId: string): PrincipleSubtree | undefined;
|
|
14
|
+
updatePrinciple(_principleId: string, updates: Partial<Principle>): Principle;
|
|
15
|
+
updatePrincipleValueMetrics(principleId: string, _metrics: PrincipleValueMetrics): PrincipleValueMetrics;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* WorkspaceContext - Centralized management of workspace-specific paths and services.
|
|
19
|
+
* Implements a cached singleton pattern per workspace directory.
|
|
20
|
+
*/
|
|
21
|
+
export declare class WorkspaceContext {
|
|
22
|
+
private static readonly instances;
|
|
23
|
+
private static readonly pathResolver;
|
|
24
|
+
readonly workspaceDir: string;
|
|
25
|
+
readonly stateDir: string;
|
|
26
|
+
private _config?;
|
|
27
|
+
private _eventLog?;
|
|
28
|
+
private _dictionary?;
|
|
29
|
+
private _hygiene?;
|
|
30
|
+
private _evolutionReducer?;
|
|
31
|
+
private _trajectory?;
|
|
32
|
+
private _principleTreeLedger?;
|
|
33
|
+
private _principleLifecycle?;
|
|
34
|
+
private constructor();
|
|
35
|
+
/**
|
|
36
|
+
* Governance configuration for this workspace.
|
|
37
|
+
*/
|
|
38
|
+
get config(): PainConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Event logging service for this workspace.
|
|
41
|
+
*/
|
|
42
|
+
get eventLog(): EventLog;
|
|
43
|
+
/**
|
|
44
|
+
* Pain dictionary service for this workspace.
|
|
45
|
+
*/
|
|
46
|
+
get dictionary(): PainDictionary;
|
|
47
|
+
/**
|
|
48
|
+
* Hygiene tracking service for this workspace.
|
|
49
|
+
*/
|
|
50
|
+
get hygiene(): HygieneTracker;
|
|
51
|
+
/**
|
|
52
|
+
* Evolution reducer singleton for this workspace.
|
|
53
|
+
*/
|
|
54
|
+
get evolutionReducer(): EvolutionReducerImpl;
|
|
55
|
+
/**
|
|
56
|
+
* Trajectory database for analytics and sample curation.
|
|
57
|
+
*/
|
|
58
|
+
get trajectory(): TrajectoryDatabase;
|
|
59
|
+
/**
|
|
60
|
+
* Locked ledger access for principle tree reads and metric writes in this workspace.
|
|
61
|
+
*/
|
|
62
|
+
get principleTreeLedger(): PrincipleTreeLedgerAccessor;
|
|
63
|
+
/**
|
|
64
|
+
* Phase 15 lifecycle/read-model surface for metrics, assessments, and route recommendations.
|
|
65
|
+
*/
|
|
66
|
+
get principleLifecycle(): PrincipleLifecycleService;
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve active Principle -> Rule -> Implementation subtrees without bypassing reducer authority.
|
|
69
|
+
*/
|
|
70
|
+
getActivePrincipleSubtrees(): {
|
|
71
|
+
principle: ActivePrinciple;
|
|
72
|
+
subtree: PrincipleSubtree;
|
|
73
|
+
}[];
|
|
74
|
+
private getTrajectoryOptions;
|
|
75
|
+
/**
|
|
76
|
+
* Creates or retrieves a WorkspaceContext instance from an OpenClaw hook context.
|
|
77
|
+
* Uses PathResolver to handle path normalization and fallback logic.
|
|
78
|
+
* @throws Error if workspaceDir is missing and no fallback available.
|
|
79
|
+
*/
|
|
80
|
+
static fromHookContext(ctx: any): WorkspaceContext;
|
|
81
|
+
/**
|
|
82
|
+
* Creates a WorkspaceContext requiring explicit workspaceDir.
|
|
83
|
+
* For Runtime V2 entrypoints where implicit PathResolver fallback is unacceptable.
|
|
84
|
+
* @throws Error if workspaceDir is not provided in the context.
|
|
85
|
+
*/
|
|
86
|
+
static fromHookContextExplicit(ctx: {
|
|
87
|
+
workspaceDir?: string;
|
|
88
|
+
logger?: {
|
|
89
|
+
error?: (...args: unknown[]) => void;
|
|
90
|
+
warn?: (...args: unknown[]) => void;
|
|
91
|
+
info?: (...args: unknown[]) => void;
|
|
92
|
+
};
|
|
93
|
+
}): WorkspaceContext;
|
|
94
|
+
/**
|
|
95
|
+
* Resolves a PD file path within the workspace.
|
|
96
|
+
*/
|
|
97
|
+
resolve(fileKey: keyof typeof PD_FILES): string;
|
|
98
|
+
/**
|
|
99
|
+
* Resets internal caches for services and paths.
|
|
100
|
+
*/
|
|
101
|
+
invalidate(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Removes a workspace from the cache.
|
|
104
|
+
*/
|
|
105
|
+
static dispose(workspaceDir: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* Clears the instance cache (primarily for testing).
|
|
108
|
+
*/
|
|
109
|
+
static clearCache(): void;
|
|
110
|
+
}
|
|
111
|
+
export {};
|
|
@@ -1,235 +1,184 @@
|
|
|
1
|
-
import type { PD_FILES } from './paths.js';
|
|
2
1
|
import { resolvePdPath } from './paths.js';
|
|
3
2
|
import { PathResolver } from './path-resolver.js';
|
|
4
3
|
import { validateWorkspaceDir } from './workspace-dir-validation.js';
|
|
5
4
|
import { ConfigService } from './config-service.js';
|
|
6
|
-
import type { PainConfig } from './config.js';
|
|
7
|
-
import type { EventLog } from './event-log.js';
|
|
8
5
|
import { EventLogService } from './event-log.js';
|
|
9
6
|
import { DictionaryService } from './dictionary-service.js';
|
|
10
|
-
import type { PainDictionary } from './dictionary.js';
|
|
11
7
|
import { HygieneTracker } from './hygiene/tracker.js';
|
|
12
8
|
import { EvolutionReducerImpl } from './evolution-reducer.js';
|
|
13
|
-
import type { TrajectoryDatabase, TrajectoryDatabaseOptions } from './trajectory.js';
|
|
14
9
|
import { TrajectoryRegistry } from './trajectory.js';
|
|
15
10
|
import { PrincipleLifecycleService } from './principle-internalization/principle-lifecycle-service.js';
|
|
16
|
-
import {
|
|
17
|
-
getPrincipleSubtree,
|
|
18
|
-
updatePrinciple,
|
|
19
|
-
updatePrincipleValueMetrics,
|
|
20
|
-
type PrincipleSubtree,
|
|
21
|
-
} from './principle-tree-ledger.js';
|
|
22
|
-
import type { Principle, PrincipleValueMetrics } from '../types/principle-tree-schema.js';
|
|
23
|
-
import type { Principle as ActivePrinciple } from './evolution-types.js';
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
interface PrincipleTreeLedgerAccessor {
|
|
27
|
-
getPrincipleSubtree(_principleId: string): PrincipleSubtree | undefined;
|
|
28
|
-
updatePrinciple(_principleId: string, updates: Partial<Principle>): Principle;
|
|
29
|
-
updatePrincipleValueMetrics(principleId: string, _metrics: PrincipleValueMetrics): PrincipleValueMetrics;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
11
|
+
import { getPrincipleSubtree, updatePrinciple, updatePrincipleValueMetrics, } from './principle-tree-ledger.js';
|
|
33
12
|
/**
|
|
34
13
|
* WorkspaceContext - Centralized management of workspace-specific paths and services.
|
|
35
14
|
* Implements a cached singleton pattern per workspace directory.
|
|
36
15
|
*/
|
|
37
16
|
export class WorkspaceContext {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
private _principleLifecycle?: PrincipleLifecycleService;
|
|
52
|
-
|
|
53
|
-
private constructor(workspaceDir: string, stateDir: string) {
|
|
17
|
+
static instances = new Map();
|
|
18
|
+
static pathResolver = new PathResolver();
|
|
19
|
+
workspaceDir;
|
|
20
|
+
stateDir;
|
|
21
|
+
_config;
|
|
22
|
+
_eventLog;
|
|
23
|
+
_dictionary;
|
|
24
|
+
_hygiene;
|
|
25
|
+
_evolutionReducer;
|
|
26
|
+
_trajectory;
|
|
27
|
+
_principleTreeLedger;
|
|
28
|
+
_principleLifecycle;
|
|
29
|
+
constructor(workspaceDir, stateDir) {
|
|
54
30
|
this.workspaceDir = workspaceDir;
|
|
55
31
|
this.stateDir = stateDir;
|
|
56
32
|
}
|
|
57
|
-
|
|
58
33
|
/**
|
|
59
34
|
* Governance configuration for this workspace.
|
|
60
35
|
*/
|
|
61
|
-
get config()
|
|
36
|
+
get config() {
|
|
62
37
|
if (!this._config) {
|
|
63
38
|
this._config = ConfigService.get(this.stateDir);
|
|
64
39
|
}
|
|
65
40
|
return this._config;
|
|
66
41
|
}
|
|
67
|
-
|
|
68
42
|
/**
|
|
69
43
|
* Event logging service for this workspace.
|
|
70
44
|
*/
|
|
71
|
-
get eventLog()
|
|
45
|
+
get eventLog() {
|
|
72
46
|
if (!this._eventLog) {
|
|
73
47
|
this._eventLog = EventLogService.get(this.stateDir);
|
|
74
48
|
}
|
|
75
49
|
return this._eventLog;
|
|
76
50
|
}
|
|
77
|
-
|
|
78
51
|
/**
|
|
79
52
|
* Pain dictionary service for this workspace.
|
|
80
53
|
*/
|
|
81
|
-
get dictionary()
|
|
54
|
+
get dictionary() {
|
|
82
55
|
if (!this._dictionary) {
|
|
83
56
|
this._dictionary = DictionaryService.get(this.stateDir);
|
|
84
57
|
}
|
|
85
58
|
return this._dictionary;
|
|
86
59
|
}
|
|
87
|
-
|
|
88
60
|
/**
|
|
89
61
|
* Hygiene tracking service for this workspace.
|
|
90
62
|
*/
|
|
91
|
-
get hygiene()
|
|
63
|
+
get hygiene() {
|
|
92
64
|
if (!this._hygiene) {
|
|
93
65
|
this._hygiene = new HygieneTracker(this.stateDir);
|
|
94
66
|
}
|
|
95
67
|
return this._hygiene;
|
|
96
68
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
69
|
/**
|
|
100
70
|
* Evolution reducer singleton for this workspace.
|
|
101
71
|
*/
|
|
102
|
-
get evolutionReducer()
|
|
72
|
+
get evolutionReducer() {
|
|
103
73
|
if (!this._evolutionReducer) {
|
|
104
74
|
this._evolutionReducer = new EvolutionReducerImpl({ workspaceDir: this.workspaceDir, stateDir: this.stateDir });
|
|
105
75
|
}
|
|
106
76
|
return this._evolutionReducer;
|
|
107
77
|
}
|
|
108
|
-
|
|
109
78
|
/**
|
|
110
79
|
* Trajectory database for analytics and sample curation.
|
|
111
80
|
*/
|
|
112
|
-
get trajectory()
|
|
81
|
+
get trajectory() {
|
|
113
82
|
if (!this._trajectory) {
|
|
114
83
|
this._trajectory = TrajectoryRegistry.get(this.workspaceDir, this.getTrajectoryOptions());
|
|
115
84
|
}
|
|
116
85
|
return this._trajectory;
|
|
117
86
|
}
|
|
118
|
-
|
|
119
87
|
/**
|
|
120
88
|
* Locked ledger access for principle tree reads and metric writes in this workspace.
|
|
121
89
|
*/
|
|
122
|
-
get principleTreeLedger()
|
|
90
|
+
get principleTreeLedger() {
|
|
123
91
|
if (!this._principleTreeLedger) {
|
|
124
92
|
this._principleTreeLedger = {
|
|
125
|
-
getPrincipleSubtree: (principleId
|
|
126
|
-
updatePrinciple: (principleId
|
|
127
|
-
|
|
128
|
-
updatePrincipleValueMetrics: (principleId: string, metrics: PrincipleValueMetrics) =>
|
|
129
|
-
updatePrincipleValueMetrics(this.stateDir, principleId, metrics),
|
|
93
|
+
getPrincipleSubtree: (principleId) => getPrincipleSubtree(this.stateDir, principleId),
|
|
94
|
+
updatePrinciple: (principleId, updates) => updatePrinciple(this.stateDir, principleId, updates),
|
|
95
|
+
updatePrincipleValueMetrics: (principleId, metrics) => updatePrincipleValueMetrics(this.stateDir, principleId, metrics),
|
|
130
96
|
};
|
|
131
97
|
}
|
|
132
98
|
return this._principleTreeLedger;
|
|
133
99
|
}
|
|
134
|
-
|
|
135
100
|
/**
|
|
136
101
|
* Phase 15 lifecycle/read-model surface for metrics, assessments, and route recommendations.
|
|
137
102
|
*/
|
|
138
|
-
get principleLifecycle()
|
|
103
|
+
get principleLifecycle() {
|
|
139
104
|
if (!this._principleLifecycle) {
|
|
140
105
|
this._principleLifecycle = new PrincipleLifecycleService(this.workspaceDir, this.stateDir);
|
|
141
106
|
}
|
|
142
107
|
return this._principleLifecycle;
|
|
143
108
|
}
|
|
144
|
-
|
|
145
109
|
/**
|
|
146
110
|
* Retrieve active Principle -> Rule -> Implementation subtrees without bypassing reducer authority.
|
|
147
111
|
*/
|
|
148
|
-
getActivePrincipleSubtrees()
|
|
112
|
+
getActivePrincipleSubtrees() {
|
|
149
113
|
return this.evolutionReducer
|
|
150
114
|
.getActivePrinciples()
|
|
151
115
|
.map((principle) => {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
.filter(
|
|
156
|
-
(entry): entry is { principle: ActivePrinciple; subtree: PrincipleSubtree } => entry !== null,
|
|
157
|
-
);
|
|
116
|
+
const subtree = this.principleTreeLedger.getPrincipleSubtree(principle.id);
|
|
117
|
+
return subtree ? { principle, subtree } : null;
|
|
118
|
+
})
|
|
119
|
+
.filter((entry) => entry !== null);
|
|
158
120
|
}
|
|
159
|
-
|
|
160
|
-
private getTrajectoryOptions(): Omit<TrajectoryDatabaseOptions, 'workspaceDir'> {
|
|
121
|
+
getTrajectoryOptions() {
|
|
161
122
|
const inlineThreshold = Number(this.config.get('trajectory.blob_inline_threshold_bytes'));
|
|
162
123
|
const busyTimeoutMs = Number(this.config.get('trajectory.busy_timeout_ms'));
|
|
163
124
|
const orphanBlobGraceDays = Number(this.config.get('trajectory.orphan_blob_grace_days'));
|
|
164
|
-
|
|
165
125
|
return {
|
|
166
126
|
blobInlineThresholdBytes: Number.isFinite(inlineThreshold) && inlineThreshold > 0 ? inlineThreshold : undefined,
|
|
167
127
|
busyTimeoutMs: Number.isFinite(busyTimeoutMs) && busyTimeoutMs >= 0 ? busyTimeoutMs : undefined,
|
|
168
128
|
orphanBlobGraceDays: Number.isFinite(orphanBlobGraceDays) && orphanBlobGraceDays >= 0 ? orphanBlobGraceDays : undefined,
|
|
169
129
|
};
|
|
170
130
|
}
|
|
171
|
-
|
|
172
131
|
/**
|
|
173
132
|
* Creates or retrieves a WorkspaceContext instance from an OpenClaw hook context.
|
|
174
133
|
* Uses PathResolver to handle path normalization and fallback logic.
|
|
175
134
|
* @throws Error if workspaceDir is missing and no fallback available.
|
|
176
135
|
*/
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
let {workspaceDir} = ctx;
|
|
184
|
-
|
|
136
|
+
static fromHookContext(ctx) {
|
|
137
|
+
const { logger } = ctx;
|
|
138
|
+
const log = (msg) => logger?.info?.(msg);
|
|
139
|
+
const logWarn = (msg) => logger?.warn?.(msg);
|
|
140
|
+
let { workspaceDir } = ctx;
|
|
185
141
|
if (!workspaceDir) {
|
|
186
142
|
logWarn('[PD:WorkspaceContext] workspaceDir not provided in context, using PathResolver fallback');
|
|
187
143
|
workspaceDir = this.pathResolver.getWorkspaceDir();
|
|
188
144
|
log(`[PD:WorkspaceContext] Resolved workspaceDir to: ${workspaceDir}`);
|
|
189
|
-
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
190
147
|
const normalized = this.pathResolver.normalizeWorkspacePath(workspaceDir);
|
|
191
148
|
if (normalized !== workspaceDir) {
|
|
192
149
|
log(`[PD:WorkspaceContext] Normalized workspaceDir: ${workspaceDir} -> ${normalized}`);
|
|
193
150
|
workspaceDir = normalized;
|
|
194
151
|
}
|
|
195
152
|
}
|
|
196
|
-
|
|
197
153
|
const validationIssue = validateWorkspaceDir(workspaceDir);
|
|
198
154
|
if (validationIssue !== null) {
|
|
199
|
-
logWarn(
|
|
200
|
-
|
|
201
|
-
'This is a legacy discovery path; explicit workspaceDir should be provided in the hook context.',
|
|
202
|
-
);
|
|
155
|
+
logWarn(`[PD:WorkspaceContext] LEGACY_PATH_RESOLVER_FALLBACK: ${validationIssue}. ` +
|
|
156
|
+
'This is a legacy discovery path; explicit workspaceDir should be provided in the hook context.');
|
|
203
157
|
}
|
|
204
|
-
|
|
205
158
|
const existing = this.instances.get(workspaceDir);
|
|
206
|
-
if (existing)
|
|
207
|
-
|
|
208
|
-
let {stateDir} = ctx;
|
|
159
|
+
if (existing)
|
|
160
|
+
return existing;
|
|
161
|
+
let { stateDir } = ctx;
|
|
209
162
|
if (!stateDir) {
|
|
210
163
|
stateDir = resolvePdPath(workspaceDir, 'STATE_DIR');
|
|
211
164
|
log(`[PD:WorkspaceContext] Computed stateDir: ${stateDir}`);
|
|
212
165
|
}
|
|
213
|
-
|
|
214
166
|
const instance = new WorkspaceContext(workspaceDir, stateDir);
|
|
215
167
|
this.instances.set(workspaceDir, instance);
|
|
216
|
-
|
|
217
168
|
log(`[PD:WorkspaceContext] Created new context for workspace: ${workspaceDir}`);
|
|
218
|
-
|
|
219
169
|
return instance;
|
|
220
170
|
}
|
|
221
|
-
|
|
222
171
|
/**
|
|
223
172
|
* Creates a WorkspaceContext requiring explicit workspaceDir.
|
|
224
173
|
* For Runtime V2 entrypoints where implicit PathResolver fallback is unacceptable.
|
|
225
174
|
* @throws Error if workspaceDir is not provided in the context.
|
|
226
175
|
*/
|
|
227
|
-
static fromHookContextExplicit(ctx
|
|
176
|
+
static fromHookContextExplicit(ctx) {
|
|
228
177
|
const { logger } = ctx;
|
|
229
178
|
let { workspaceDir } = ctx;
|
|
230
179
|
if (!workspaceDir || !workspaceDir.trim()) {
|
|
231
180
|
const error = {
|
|
232
|
-
ok: false
|
|
181
|
+
ok: false,
|
|
233
182
|
reason: 'workspace_dir_missing',
|
|
234
183
|
message: 'workspaceDir is required for Runtime V2 entrypoints. Provide it explicitly in the hook context.',
|
|
235
184
|
nextAction: 'Ensure the OpenClaw hook context includes workspaceDir, or use PD_WORKSPACE_DIR env var.',
|
|
@@ -245,7 +194,7 @@ export class WorkspaceContext {
|
|
|
245
194
|
const validationIssue = validateWorkspaceDir(workspaceDir);
|
|
246
195
|
if (validationIssue !== null) {
|
|
247
196
|
const error = {
|
|
248
|
-
ok: false
|
|
197
|
+
ok: false,
|
|
249
198
|
reason: 'workspace_dir_invalid',
|
|
250
199
|
message: `workspaceDir validation failed for Runtime V2 entrypoint: ${validationIssue}`,
|
|
251
200
|
nextAction: 'Provide a valid workspaceDir that is not the home directory, root, or empty.',
|
|
@@ -255,18 +204,16 @@ export class WorkspaceContext {
|
|
|
255
204
|
}
|
|
256
205
|
return this.fromHookContext({ ...ctx, workspaceDir });
|
|
257
206
|
}
|
|
258
|
-
|
|
259
207
|
/**
|
|
260
208
|
* Resolves a PD file path within the workspace.
|
|
261
209
|
*/
|
|
262
|
-
resolve(fileKey
|
|
210
|
+
resolve(fileKey) {
|
|
263
211
|
return resolvePdPath(this.workspaceDir, fileKey);
|
|
264
212
|
}
|
|
265
|
-
|
|
266
213
|
/**
|
|
267
214
|
* Resets internal caches for services and paths.
|
|
268
215
|
*/
|
|
269
|
-
invalidate()
|
|
216
|
+
invalidate() {
|
|
270
217
|
this._config = undefined;
|
|
271
218
|
this._eventLog = undefined;
|
|
272
219
|
this._dictionary = undefined;
|
|
@@ -275,11 +222,10 @@ export class WorkspaceContext {
|
|
|
275
222
|
this._principleTreeLedger = undefined;
|
|
276
223
|
this._principleLifecycle = undefined;
|
|
277
224
|
}
|
|
278
|
-
|
|
279
225
|
/**
|
|
280
226
|
* Removes a workspace from the cache.
|
|
281
227
|
*/
|
|
282
|
-
static dispose(workspaceDir
|
|
228
|
+
static dispose(workspaceDir) {
|
|
283
229
|
const normalized = this.pathResolver.normalizeWorkspacePath(workspaceDir);
|
|
284
230
|
const instance = this.instances.get(normalized);
|
|
285
231
|
if (instance) {
|
|
@@ -288,11 +234,10 @@ export class WorkspaceContext {
|
|
|
288
234
|
}
|
|
289
235
|
TrajectoryRegistry.dispose(normalized);
|
|
290
236
|
}
|
|
291
|
-
|
|
292
237
|
/**
|
|
293
238
|
* Clears the instance cache (primarily for testing).
|
|
294
239
|
*/
|
|
295
|
-
static clearCache()
|
|
240
|
+
static clearCache() {
|
|
296
241
|
for (const instance of this.instances.values()) {
|
|
297
242
|
instance.invalidate();
|
|
298
243
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceDir Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* This module only validates candidate workspace directories. Runtime hook
|
|
5
|
+
* resolution policy lives at the I/O boundary in utils/workspace-resolver.ts.
|
|
6
|
+
*/
|
|
7
|
+
export interface WorkspaceResolutionContext {
|
|
8
|
+
workspaceDir?: string;
|
|
9
|
+
agentId?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function validateWorkspaceDir(dir: string | undefined): string | null;
|