principles-disciple 1.127.0 → 1.128.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/archive-impl.d.ts +18 -0
- package/dist/commands/archive-impl.js +105 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.js +76 -0
- package/dist/commands/context.d.ts +5 -0
- package/{src/commands/context.ts → dist/commands/context.js} +34 -83
- package/dist/commands/disable-impl.d.ts +22 -0
- package/dist/commands/disable-impl.js +118 -0
- package/dist/commands/evolution-status.d.ts +4 -0
- package/dist/commands/evolution-status.js +187 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.js +53 -0
- package/dist/commands/focus.d.ts +14 -0
- package/dist/commands/focus.js +443 -0
- package/dist/commands/pain.d.ts +6 -0
- package/{src/commands/pain.ts → dist/commands/pain.js} +137 -188
- package/dist/commands/principle-rollback.d.ts +4 -0
- package/dist/commands/principle-rollback.js +26 -0
- package/dist/commands/promote-impl.d.ts +22 -0
- package/dist/commands/promote-impl.js +194 -0
- package/dist/commands/rollback-impl.d.ts +32 -0
- package/dist/commands/rollback-impl.js +180 -0
- package/dist/commands/rollback.d.ts +19 -0
- package/{src/commands/rollback.ts → dist/commands/rollback.js} +10 -53
- package/dist/commands/samples.d.ts +2 -0
- package/dist/commands/samples.js +58 -0
- package/dist/commands/strategy.d.ts +2 -0
- package/dist/commands/strategy.js +16 -0
- package/dist/commands/thinking-os.d.ts +2 -0
- package/{src/commands/thinking-os.ts → dist/commands/thinking-os.js} +35 -58
- package/dist/commands/workflow-debug.d.ts +6 -0
- package/{src/commands/workflow-debug.ts → dist/commands/workflow-debug.js} +13 -33
- package/dist/config/defaults/runtime.d.ts +58 -0
- package/{src/config/defaults/runtime.ts → dist/config/defaults/runtime.js} +4 -41
- package/dist/config/errors.d.ts +86 -0
- package/dist/config/errors.js +107 -0
- package/{src/config/index.ts → dist/config/index.d.ts} +1 -2
- package/dist/config/index.js +7 -0
- package/dist/constants/diagnostician.d.ts +12 -0
- package/{src/constants/diagnostician.ts → dist/constants/diagnostician.js} +0 -1
- package/dist/constants/tools.d.ts +17 -0
- package/dist/constants/tools.js +53 -0
- package/dist/core/__tests__/focus-history.test.d.ts +1 -0
- package/dist/core/__tests__/focus-history.test.js +160 -0
- package/dist/core/bootstrap-rules.d.ts +50 -0
- package/dist/core/bootstrap-rules.js +187 -0
- package/dist/core/code-implementation-storage.d.ts +71 -0
- package/dist/core/code-implementation-storage.js +139 -0
- package/dist/core/config-health.d.ts +27 -0
- package/dist/core/config-health.js +60 -0
- package/dist/core/config-service.d.ts +15 -0
- package/{src/core/config-service.ts → dist/core/config-service.js} +4 -7
- package/dist/core/config.d.ts +111 -0
- package/{src/core/config.ts → dist/core/config.js} +46 -146
- package/dist/core/control-ui-db.d.ts +106 -0
- package/dist/core/control-ui-db.js +309 -0
- package/dist/core/correction-cue-learner.d.ts +33 -0
- package/dist/core/correction-cue-learner.js +184 -0
- package/dist/core/correction-types.d.ts +3 -0
- package/dist/core/correction-types.js +1 -0
- package/dist/core/detection-funnel.d.ts +33 -0
- package/{src/core/detection-funnel.ts → dist/core/detection-funnel.js} +17 -37
- package/dist/core/detection-service.d.ts +15 -0
- package/{src/core/detection-service.ts → dist/core/detection-service.js} +4 -7
- package/dist/core/dictionary-service.d.ts +15 -0
- package/{src/core/dictionary-service.ts → dist/core/dictionary-service.js} +4 -7
- package/dist/core/dictionary.d.ts +38 -0
- package/{src/core/dictionary.ts → dist/core/dictionary.js} +33 -59
- package/dist/core/empathy-keyword-matcher.d.ts +5 -0
- package/dist/core/empathy-keyword-matcher.js +40 -0
- package/dist/core/empathy-types.d.ts +2 -0
- package/dist/core/empathy-types.js +1 -0
- package/dist/core/event-log.d.ts +90 -0
- package/dist/core/event-log.js +702 -0
- package/dist/core/evolution-engine.d.ts +119 -0
- package/dist/core/evolution-engine.js +460 -0
- package/dist/core/evolution-logger.d.ts +137 -0
- package/dist/core/evolution-logger.js +261 -0
- package/dist/core/evolution-migration.d.ts +5 -0
- package/dist/core/evolution-migration.js +65 -0
- package/dist/core/evolution-reducer.d.ts +124 -0
- package/dist/core/evolution-reducer.js +730 -0
- package/dist/core/evolution-types.d.ts +50 -0
- package/dist/core/evolution-types.js +11 -0
- package/dist/core/external-training-contract.d.ts +276 -0
- package/dist/core/external-training-contract.js +269 -0
- package/dist/core/file-store.d.ts +41 -0
- package/dist/core/file-store.js +46 -0
- package/dist/core/focus-history.d.ts +50 -0
- package/dist/core/focus-history.js +574 -0
- package/dist/core/hygiene/tracker.d.ts +22 -0
- package/dist/core/hygiene/tracker.js +110 -0
- package/dist/core/init.d.ts +30 -0
- package/{src/core/init.ts → dist/core/init.js} +87 -118
- package/dist/core/local-worker-routing.d.ts +124 -0
- package/dist/core/local-worker-routing.js +216 -0
- package/dist/core/migration.d.ts +6 -0
- package/{src/core/migration.ts → dist/core/migration.js} +10 -18
- package/dist/core/model-deployment-registry.d.ts +218 -0
- package/dist/core/model-deployment-registry.js +502 -0
- package/dist/core/model-training-registry.d.ts +295 -0
- package/dist/core/model-training-registry.js +474 -0
- package/dist/core/observability.d.ts +40 -0
- package/dist/core/observability.js +164 -0
- package/dist/core/pain-diagnostic-gate.d.ts +36 -0
- package/dist/core/pain-diagnostic-gate.js +105 -0
- package/dist/core/pain.d.ts +87 -0
- package/dist/core/pain.js +223 -0
- package/dist/core/path-resolver.d.ts +60 -0
- package/{src/core/path-resolver.ts → dist/core/path-resolver.js} +41 -131
- package/dist/core/paths.d.ts +60 -0
- package/{src/core/paths.ts → dist/core/paths.js} +4 -13
- package/dist/core/pd-config-loader.d.ts +96 -0
- package/dist/core/pd-config-loader.js +307 -0
- package/dist/core/pd-task-reconciler.d.ts +89 -0
- package/dist/core/pd-task-reconciler.js +262 -0
- package/dist/core/pd-task-service.d.ts +2 -0
- package/dist/core/pd-task-service.js +32 -0
- package/dist/core/pd-task-store.d.ts +5 -0
- package/dist/core/pd-task-store.js +62 -0
- package/dist/core/pd-task-types.d.ts +8 -0
- package/dist/core/pd-task-types.js +2 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.d.ts +1 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.js +132 -0
- package/dist/core/principle-compiler/code-validator.d.ts +14 -0
- package/dist/core/principle-compiler/code-validator.js +86 -0
- package/dist/core/principle-compiler/compiler.d.ts +45 -0
- package/dist/core/principle-compiler/compiler.js +287 -0
- package/{src/core/principle-compiler/index.ts → dist/core/principle-compiler/index.d.ts} +0 -1
- package/dist/core/principle-compiler/index.js +10 -0
- package/dist/core/principle-compiler/ledger-registrar.d.ts +28 -0
- package/dist/core/principle-compiler/ledger-registrar.js +95 -0
- package/{src/core/principle-compiler/template-generator.ts → dist/core/principle-compiler/template-generator.d.ts} +0 -1
- package/dist/core/principle-compiler/template-generator.js +7 -0
- package/{src/core/principle-injection.ts → dist/core/principle-injection.d.ts} +1 -7
- package/dist/core/principle-injection.js +10 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.d.ts +15 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.js +34 -0
- package/dist/core/principle-internalization/lifecycle-read-model.d.ts +17 -0
- package/{src/core/principle-internalization/lifecycle-read-model.ts → dist/core/principle-internalization/lifecycle-read-model.js} +2 -21
- package/dist/core/principle-internalization/lifecycle-refresh.d.ts +2 -0
- package/dist/core/principle-internalization/lifecycle-refresh.js +4 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.d.ts +28 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.js +89 -0
- package/dist/core/principle-training-state.d.ts +47 -0
- package/dist/core/principle-training-state.js +113 -0
- package/dist/core/principle-tree-ledger-adapter.d.ts +32 -0
- package/dist/core/principle-tree-ledger-adapter.js +125 -0
- package/dist/core/principle-tree-ledger.d.ts +82 -0
- package/dist/core/principle-tree-ledger.js +527 -0
- package/dist/core/profile.d.ts +62 -0
- package/dist/core/profile.js +211 -0
- package/dist/core/promotion-gate.d.ts +243 -0
- package/dist/core/promotion-gate.js +554 -0
- package/dist/core/reflection/reflection-context.d.ts +31 -0
- package/dist/core/reflection/reflection-context.js +91 -0
- package/dist/core/replay-engine.d.ts +12 -0
- package/dist/core/replay-engine.js +82 -0
- package/dist/core/risk-calculator.d.ts +22 -0
- package/{src/core/risk-calculator.ts → dist/core/risk-calculator.js} +19 -49
- package/{src/core/rule-host-helpers.ts → dist/core/rule-host-helpers.d.ts} +0 -1
- package/dist/core/rule-host-helpers.js +7 -0
- package/{src/core/rule-host-types.ts → dist/core/rule-host-types.d.ts} +1 -8
- package/dist/core/rule-host-types.js +7 -0
- package/dist/core/rule-host.d.ts +86 -0
- package/dist/core/rule-host.js +311 -0
- package/dist/core/rule-implementation-runtime.d.ts +18 -0
- package/dist/core/rule-implementation-runtime.js +112 -0
- package/dist/core/runtime-v2-prompt-activation-reader.d.ts +22 -0
- package/dist/core/runtime-v2-prompt-activation-reader.js +99 -0
- package/{src/core/schema/db-types.ts → dist/core/schema/db-types.d.ts} +4 -9
- package/dist/core/schema/db-types.js +5 -0
- package/{src/core/schema/index.ts → dist/core/schema/index.d.ts} +1 -10
- package/dist/core/schema/index.js +15 -0
- package/dist/core/schema/migration-runner.d.ts +53 -0
- package/dist/core/schema/migration-runner.js +170 -0
- package/dist/core/schema/migrations/001-init-trajectory.d.ts +6 -0
- package/{src/core/schema/migrations/001-init-trajectory.ts → dist/core/schema/migrations/001-init-trajectory.js} +38 -56
- package/dist/core/schema/migrations/002-init-central.d.ts +5 -0
- package/{src/core/schema/migrations/002-init-central.ts → dist/core/schema/migrations/002-init-central.js} +27 -41
- package/dist/core/schema/migrations/003-init-workflow.d.ts +5 -0
- package/{src/core/schema/migrations/003-init-workflow.ts → dist/core/schema/migrations/003-init-workflow.js} +16 -21
- package/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +8 -0
- package/{src/core/schema/migrations/004-add-thinking-and-gfi.ts → dist/core/schema/migrations/004-add-thinking-and-gfi.js} +19 -27
- package/{src/core/schema/migrations/index.ts → dist/core/schema/migrations/index.d.ts} +1 -16
- package/dist/core/schema/migrations/index.js +27 -0
- package/dist/core/schema/schema-definitions.d.ts +46 -0
- package/{src/core/schema/schema-definitions.ts → dist/core/schema/schema-definitions.js} +242 -291
- package/dist/core/session-tracker.d.ts +119 -0
- package/{src/core/session-tracker.ts → dist/core/session-tracker.js} +96 -239
- package/dist/core/shadow-observation-registry.d.ts +217 -0
- package/dist/core/shadow-observation-registry.js +280 -0
- package/dist/core/surface-guard.d.ts +31 -0
- package/dist/core/surface-guard.js +131 -0
- package/dist/core/system-logger.d.ts +8 -0
- package/{src/core/system-logger.ts → dist/core/system-logger.js} +20 -34
- package/dist/core/thinking-models.d.ts +70 -0
- package/dist/core/thinking-models.js +300 -0
- package/dist/core/thinking-os-parser.d.ts +35 -0
- package/dist/core/thinking-os-parser.js +123 -0
- package/dist/core/trajectory-types.d.ts +220 -0
- package/dist/core/trajectory-types.js +8 -0
- package/dist/core/trajectory.d.ts +242 -0
- package/dist/core/trajectory.js +1500 -0
- package/dist/core/workflow-funnel-loader.d.ts +72 -0
- package/dist/core/workflow-funnel-loader.js +135 -0
- package/dist/core/workspace-context.d.ts +111 -0
- package/{src/core/workspace-context.ts → dist/core/workspace-context.js} +50 -105
- package/dist/core/workspace-dir-validation.d.ts +11 -0
- package/dist/core/workspace-dir-validation.js +37 -0
- package/dist/core/workspace-guidance-migrator.d.ts +12 -0
- package/{src/core/workspace-guidance-migrator.ts → dist/core/workspace-guidance-migrator.js} +21 -59
- package/dist/hooks/after-tool-call-helpers.d.ts +89 -0
- package/dist/hooks/after-tool-call-helpers.js +475 -0
- package/dist/hooks/after-tool-call-types.d.ts +86 -0
- package/dist/hooks/after-tool-call-types.js +13 -0
- package/dist/hooks/gate-block-helper.d.ts +44 -0
- package/dist/hooks/gate-block-helper.js +209 -0
- package/dist/hooks/gate.d.ts +16 -0
- package/dist/hooks/gate.js +381 -0
- package/dist/hooks/lifecycle.d.ts +5 -0
- package/dist/hooks/lifecycle.js +287 -0
- package/dist/hooks/llm.d.ts +13 -0
- package/{src/hooks/llm.ts → dist/hooks/llm.js} +63 -117
- package/dist/hooks/message-sanitize.d.ts +24 -0
- package/dist/hooks/message-sanitize.js +77 -0
- package/dist/hooks/pain.d.ts +33 -0
- package/dist/hooks/pain.js +294 -0
- package/dist/hooks/prompt.d.ts +52 -0
- package/dist/hooks/prompt.js +930 -0
- package/dist/hooks/raw-observation-adapter.d.ts +57 -0
- package/dist/hooks/raw-observation-adapter.js +170 -0
- package/dist/hooks/raw-observation-types.d.ts +62 -0
- package/dist/hooks/raw-observation-types.js +15 -0
- package/dist/hooks/subagent.d.ts +9 -0
- package/{src/hooks/subagent.ts → dist/hooks/subagent.js} +20 -60
- package/dist/hooks/trajectory-collector.d.ts +25 -0
- package/dist/hooks/trajectory-collector.js +225 -0
- package/dist/hooks/trajectory-evidence.d.ts +11 -0
- package/dist/hooks/trajectory-evidence.js +88 -0
- package/dist/hooks/triage-adapter.d.ts +58 -0
- package/{src/hooks/triage-adapter.ts → dist/hooks/triage-adapter.js} +36 -68
- package/dist/hooks/trigger-cooldown-tracker.d.ts +30 -0
- package/dist/hooks/trigger-cooldown-tracker.js +55 -0
- package/dist/i18n/commands.d.ts +26 -0
- package/dist/i18n/commands.js +96 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +829 -0
- package/dist/openclaw-sdk.d.ts +293 -0
- package/dist/openclaw-sdk.js +4 -0
- package/dist/service/central-database.d.ts +138 -0
- package/dist/service/central-database.js +731 -0
- package/dist/service/central-sync-service.d.ts +8 -0
- package/dist/service/central-sync-service.js +71 -0
- package/dist/service/correction-observer-service.d.ts +19 -0
- package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js} +36 -76
- package/dist/service/evolution-dedup.d.ts +27 -0
- package/{src/service/evolution-dedup.ts → dist/service/evolution-dedup.js} +11 -31
- package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts} +15 -62
- package/dist/service/evolution-queue-migration.js +53 -0
- package/dist/service/evolution-worker.d.ts +103 -0
- package/{src/service/evolution-worker.ts → dist/service/evolution-worker.js} +169 -331
- package/dist/service/internalization-auto-consumer-service.d.ts +8 -0
- package/dist/service/internalization-auto-consumer-service.js +322 -0
- package/dist/service/keyword-optimization-service.d.ts +44 -0
- package/dist/service/keyword-optimization-service.js +137 -0
- package/dist/service/phase3-input-filter.d.ts +73 -0
- package/dist/service/phase3-input-filter.js +172 -0
- package/dist/service/queue-io.d.ts +30 -0
- package/dist/service/queue-io.js +79 -0
- package/{src/service/queue-migration.ts → dist/service/queue-migration.d.ts} +6 -45
- package/dist/service/queue-migration.js +56 -0
- package/dist/service/runtime-summary-service.d.ts +158 -0
- package/dist/service/runtime-summary-service.js +636 -0
- package/dist/service/subagent-workflow/subagent-error-utils.d.ts +8 -0
- package/{src/service/subagent-workflow/subagent-error-utils.ts → dist/service/subagent-workflow/subagent-error-utils.js} +3 -6
- package/{src/service/subagent-workflow/types.ts → dist/service/subagent-workflow/types.d.ts} +17 -80
- package/dist/service/subagent-workflow/types.js +11 -0
- package/dist/service/subagent-workflow/workflow-store.d.ts +30 -0
- package/{src/service/subagent-workflow/workflow-store.ts → dist/service/subagent-workflow/workflow-store.js} +43 -108
- package/dist/service/trajectory-service.d.ts +2 -0
- package/dist/service/trajectory-service.js +16 -0
- package/dist/service/workflow-watchdog.d.ts +23 -0
- package/dist/service/workflow-watchdog.js +103 -0
- package/dist/types/event-types.d.ts +2 -0
- package/dist/types/event-types.js +1 -0
- package/dist/types/hygiene-types.d.ts +2 -0
- package/dist/types/hygiene-types.js +1 -0
- package/{src/types/principle-tree-schema.ts → dist/types/principle-tree-schema.d.ts} +2 -25
- package/dist/types/principle-tree-schema.js +24 -0
- package/dist/types/queue.d.ts +2 -0
- package/dist/types/queue.js +1 -0
- package/dist/types/runtime-summary.d.ts +1 -0
- package/dist/types/runtime-summary.js +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.js +16 -0
- package/dist/utils/file-lock.d.ts +68 -0
- package/dist/utils/file-lock.js +310 -0
- package/dist/utils/hashing.d.ts +9 -0
- package/{src/utils/hashing.ts → dist/utils/hashing.js} +4 -6
- package/dist/utils/io.d.ts +11 -0
- package/dist/utils/io.js +174 -0
- package/dist/utils/node-vm-polyfill.d.ts +9 -0
- package/{src/utils/node-vm-polyfill.ts → dist/utils/node-vm-polyfill.js} +0 -2
- package/dist/utils/retry.d.ts +210 -0
- package/dist/utils/retry.js +375 -0
- package/dist/utils/session-key.d.ts +10 -0
- package/{src/utils/session-key.ts → dist/utils/session-key.js} +5 -4
- package/dist/utils/shadow-fingerprint.d.ts +16 -0
- package/dist/utils/shadow-fingerprint.js +34 -0
- package/dist/utils/workspace-resolver.d.ts +82 -0
- package/dist/utils/workspace-resolver.js +288 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -2
- package/templates/workspace/.principles/DECISION_POLICY.json +44 -0
- package/templates/workspace/.principles/PRINCIPLES.md +20 -0
- package/templates/workspace/.principles/PROFILE.json +54 -0
- package/templates/workspace/.principles/PROFILE.schema.json +56 -0
- package/templates/workspace/.principles/THINKING_OS.md +65 -0
- package/templates/workspace/.principles/THINKING_OS_ARCHIVE.md +7 -0
- package/templates/workspace/.principles/THINKING_OS_CANDIDATES.md +9 -0
- package/templates/workspace/.principles/models/_INDEX.md +27 -0
- package/templates/workspace/.principles/models/first_principles.md +62 -0
- package/templates/workspace/.principles/models/marketing_4p.md +52 -0
- package/templates/workspace/.principles/models/porter_five.md +63 -0
- package/templates/workspace/.principles/models/swot.md +60 -0
- package/templates/workspace/.principles/models/user_story_map.md +63 -0
- package/templates/workspace/.state/WORKBOARD.json +4 -0
- package/.dependency-cruiser.json +0 -19
- package/ADVANCED_CONFIG_ZH.md +0 -93
- package/AGENT_INSTALL.md +0 -173
- package/AGENT_INSTALL_EN.md +0 -173
- package/CHANGELOG.md +0 -26
- package/INSTALL.md +0 -254
- package/SKILL.md +0 -63
- package/esbuild.config.js +0 -104
- package/src/commands/archive-impl.ts +0 -147
- package/src/commands/capabilities.ts +0 -89
- package/src/commands/disable-impl.ts +0 -159
- package/src/commands/evolution-status.ts +0 -247
- package/src/commands/export.ts +0 -59
- package/src/commands/focus.ts +0 -523
- package/src/commands/principle-rollback.ts +0 -32
- package/src/commands/promote-impl.ts +0 -254
- package/src/commands/rollback-impl.ts +0 -246
- package/src/commands/samples.ts +0 -65
- package/src/commands/strategy.ts +0 -21
- package/src/config/errors.ts +0 -180
- package/src/constants/tools.ts +0 -62
- package/src/core/AGENTS.md +0 -34
- package/src/core/__tests__/focus-history.test.ts +0 -210
- package/src/core/bootstrap-rules.ts +0 -216
- package/src/core/code-implementation-storage.ts +0 -213
- package/src/core/config-health.ts +0 -72
- package/src/core/control-ui-db.ts +0 -454
- package/src/core/correction-cue-learner.ts +0 -239
- package/src/core/correction-types.ts +0 -16
- package/src/core/empathy-keyword-matcher.ts +0 -64
- package/src/core/empathy-types.ts +0 -18
- package/src/core/event-log.ts +0 -787
- package/src/core/evolution-engine.ts +0 -613
- package/src/core/evolution-logger.ts +0 -357
- package/src/core/evolution-migration.ts +0 -77
- package/src/core/evolution-reducer.ts +0 -891
- package/src/core/evolution-types.ts +0 -110
- package/src/core/external-training-contract.ts +0 -530
- package/src/core/file-store.ts +0 -80
- package/src/core/focus-history.ts +0 -763
- package/src/core/hygiene/tracker.ts +0 -122
- package/src/core/local-worker-routing.ts +0 -337
- package/src/core/model-deployment-registry.ts +0 -724
- package/src/core/model-training-registry.ts +0 -815
- package/src/core/observability.ts +0 -242
- package/src/core/pain-diagnostic-gate.ts +0 -169
- package/src/core/pain.ts +0 -309
- package/src/core/pd-config-loader.ts +0 -400
- package/src/core/pd-task-reconciler.ts +0 -380
- package/src/core/pd-task-service.ts +0 -43
- package/src/core/pd-task-store.ts +0 -78
- package/src/core/pd-task-types.ts +0 -24
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +0 -174
- package/src/core/principle-compiler/code-validator.ts +0 -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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archive Implementation Command — CLI `/pd-archive-impl`
|
|
3
|
+
* ========================================================
|
|
4
|
+
*
|
|
5
|
+
* PURPOSE: Permanently archive an implementation (disabled -> archived,
|
|
6
|
+
* active -> archived, or candidate -> archived).
|
|
7
|
+
*
|
|
8
|
+
* Used for permanent cleanup of implementations that are no longer relevant.
|
|
9
|
+
*/
|
|
10
|
+
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
11
|
+
/**
|
|
12
|
+
* Handle the /pd-archive-impl command.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* /pd-archive-impl <implId> - Archive an implementation
|
|
16
|
+
* /pd-archive-impl list - List archivable implementations
|
|
17
|
+
*/
|
|
18
|
+
export declare function handleArchiveImplCommand(ctx: PluginCommandContext): PluginCommandResult;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archive Implementation Command — CLI `/pd-archive-impl`
|
|
3
|
+
* ========================================================
|
|
4
|
+
*
|
|
5
|
+
* PURPOSE: Permanently archive an implementation (disabled -> archived,
|
|
6
|
+
* active -> archived, or candidate -> archived).
|
|
7
|
+
*
|
|
8
|
+
* Used for permanent cleanup of implementations that are no longer relevant.
|
|
9
|
+
*/
|
|
10
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
11
|
+
import { refreshPrincipleLifecycle } from '../core/principle-internalization/lifecycle-refresh.js';
|
|
12
|
+
import { loadLedger, transitionImplementationState, updateImplementation, } from '../core/principle-tree-ledger.js';
|
|
13
|
+
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
14
|
+
import { normalizeCommandArgs } from '../utils/io.js';
|
|
15
|
+
/**
|
|
16
|
+
* Get all implementations from the ledger.
|
|
17
|
+
*/
|
|
18
|
+
function getAllImplementations(stateDir) {
|
|
19
|
+
const ledger = loadLedger(stateDir);
|
|
20
|
+
return Object.values(ledger.tree.implementations);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Valid archive transitions: disabled -> archived, active -> archived, candidate -> archived
|
|
24
|
+
*/
|
|
25
|
+
function canArchive(state) {
|
|
26
|
+
return ['disabled', 'active', 'candidate'].includes(state);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Handle the /pd-archive-impl command.
|
|
30
|
+
*
|
|
31
|
+
* Usage:
|
|
32
|
+
* /pd-archive-impl <implId> - Archive an implementation
|
|
33
|
+
* /pd-archive-impl list - List archivable implementations
|
|
34
|
+
*/
|
|
35
|
+
export function handleArchiveImplCommand(ctx) {
|
|
36
|
+
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'archive-impl');
|
|
37
|
+
const { stateDir } = WorkspaceContext.fromHookContext({ ...ctx, workspaceDir });
|
|
38
|
+
const lang = ctx.config?.language || 'en';
|
|
39
|
+
const isZh = lang === 'zh';
|
|
40
|
+
const args = normalizeCommandArgs(ctx.args).trim().split(/\s+/);
|
|
41
|
+
const subcommand = args[0] || '';
|
|
42
|
+
// Subcommand: list
|
|
43
|
+
if (subcommand === 'list') {
|
|
44
|
+
return _handleListArchivable(stateDir, isZh);
|
|
45
|
+
}
|
|
46
|
+
// Archive by ID
|
|
47
|
+
const targetId = subcommand;
|
|
48
|
+
return _handleArchiveImpl(workspaceDir, stateDir, targetId, isZh);
|
|
49
|
+
}
|
|
50
|
+
function _handleListArchivable(stateDir, isZh) {
|
|
51
|
+
const allImpls = getAllImplementations(stateDir);
|
|
52
|
+
const archivable = allImpls.filter((impl) => canArchive(impl.lifecycleState || 'candidate'));
|
|
53
|
+
if (archivable.length === 0) {
|
|
54
|
+
return {
|
|
55
|
+
text: isZh
|
|
56
|
+
? '\n\u2139\ufe0f \u6ca1\u6709\u53ef\u5f52\u6863\u7684\u5b9e\u73b0\u3002'
|
|
57
|
+
: '\n\u2139\ufe0f No implementations available to archive.',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
let output = isZh ? '\n\ud83d\udccb \u53ef\u5f52\u6863\u5b9e\u73b0\n' : '\n\ud83d\udccb Available Implementations to Archive\n';
|
|
61
|
+
output += `${'='.repeat(50)}\n`;
|
|
62
|
+
for (const impl of archivable) {
|
|
63
|
+
const stateLabel = impl.lifecycleState || 'candidate';
|
|
64
|
+
output += ` ${impl.id}\n`;
|
|
65
|
+
output += ` Rule: ${impl.ruleId} | State: ${stateLabel}\n\n`;
|
|
66
|
+
}
|
|
67
|
+
output += isZh
|
|
68
|
+
? '\u7528\u6cd5: /pd-archive-impl <implId>'
|
|
69
|
+
: 'Usage: /pd-archive-impl <implId>';
|
|
70
|
+
return { text: output };
|
|
71
|
+
}
|
|
72
|
+
function _handleArchiveImpl(workspaceDir, stateDir, implId, isZh) {
|
|
73
|
+
const allImpls = getAllImplementations(stateDir);
|
|
74
|
+
const target = allImpls.find((i) => i.id === implId);
|
|
75
|
+
if (!target) {
|
|
76
|
+
return {
|
|
77
|
+
text: isZh
|
|
78
|
+
? `\u274c \u672a\u627e\u5230\u5b9e\u73b0: ${implId}`
|
|
79
|
+
: `\u274c Implementation not found: ${implId}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const currentState = target.lifecycleState || 'candidate';
|
|
83
|
+
if (!canArchive(currentState)) {
|
|
84
|
+
return {
|
|
85
|
+
text: isZh
|
|
86
|
+
? `\u274c \u5b9e\u73b0 ${implId} \u4e0d\u80fd\u4ece ${currentState} \u5f52\u6863\u3002\u5df2\u5f52\u6863\u7684\u5b9e\u73b0\u4e0d\u80fd\u518d\u6b21\u5f52\u6863\u3002`
|
|
87
|
+
: `\u274c Implementation ${implId} cannot be archived from state: ${currentState}. Archived implementations cannot be archived again.`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
transitionImplementationState(stateDir, implId, 'archived');
|
|
91
|
+
updateImplementation(stateDir, implId, {
|
|
92
|
+
archivedAt: new Date().toISOString(),
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
refreshPrincipleLifecycle(workspaceDir, stateDir);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.warn('[archive-impl] Lifecycle refresh failed:', err instanceof Error ? err.stack : err);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
text: isZh
|
|
102
|
+
? `\n\u2705 \u5b9e\u73b0\u5df2\u5f52\u6863: ${implId}\n \u72b6\u6001: ${currentState} -> archived`
|
|
103
|
+
: `\n\u2705 Implementation archived: ${implId}\n State: ${currentState} -> archived`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
5
|
+
import { atomicWriteFileSync, normalizeCommandArgs } from '../utils/io.js';
|
|
6
|
+
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
7
|
+
const TOOLS_TO_SCAN = [
|
|
8
|
+
{ name: 'rg', cmd: ['rg', '--version'] },
|
|
9
|
+
{ name: 'sg', cmd: ['sg', '--version'] },
|
|
10
|
+
{ name: 'fd', cmd: ['fd', '--version'] },
|
|
11
|
+
{ name: 'qmd', cmd: ['qmd', '--version'] },
|
|
12
|
+
{ name: 'ast-grep', cmd: ['ast-grep', '--version'] },
|
|
13
|
+
{ name: 'shellcheck', cmd: ['shellcheck', '--version'] },
|
|
14
|
+
];
|
|
15
|
+
function scanEnvironment(wctx) {
|
|
16
|
+
const tools = {};
|
|
17
|
+
for (const tool of TOOLS_TO_SCAN) {
|
|
18
|
+
try {
|
|
19
|
+
const [versionLine] = execSync(tool.cmd.join(' '), { stdio: ['ignore', 'pipe', 'ignore'] }).toString().split('\n');
|
|
20
|
+
tools[tool.name] = {
|
|
21
|
+
available: true,
|
|
22
|
+
version: versionLine.trim(),
|
|
23
|
+
};
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- Reason: catch parameter intentionally unused - we only care that the command failed
|
|
25
|
+
}
|
|
26
|
+
catch (_e) {
|
|
27
|
+
tools[tool.name] = { available: false };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const capabilities = {
|
|
31
|
+
platform: process.platform,
|
|
32
|
+
arch: process.arch,
|
|
33
|
+
node: process.version,
|
|
34
|
+
tools,
|
|
35
|
+
timestamp: new Date().toISOString(),
|
|
36
|
+
};
|
|
37
|
+
const capsPath = wctx.resolve('SYSTEM_CAPABILITIES');
|
|
38
|
+
const capsDir = path.dirname(capsPath);
|
|
39
|
+
if (!fs.existsSync(capsDir)) {
|
|
40
|
+
fs.mkdirSync(capsDir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
atomicWriteFileSync(capsPath, JSON.stringify(capabilities, null, 2));
|
|
43
|
+
return capabilities;
|
|
44
|
+
}
|
|
45
|
+
export function handleBootstrapTools(ctx) {
|
|
46
|
+
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'capabilities');
|
|
47
|
+
const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
|
|
48
|
+
try {
|
|
49
|
+
const caps = scanEnvironment(wctx);
|
|
50
|
+
const toolsMap = caps.tools;
|
|
51
|
+
const available = Object.entries(toolsMap)
|
|
52
|
+
.filter(([, data]) => data.available)
|
|
53
|
+
.map(([name]) => `\`${name}\``)
|
|
54
|
+
.join(', ');
|
|
55
|
+
return {
|
|
56
|
+
text: `🔍 Environment perception complete.\n` +
|
|
57
|
+
`**Detected tools:** ${available || '(none)'}\n` +
|
|
58
|
+
`**Platform:** ${process.platform}\n` +
|
|
59
|
+
`Capabilities saved to \`.state/SYSTEM_CAPABILITIES.json\`.`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
return { text: `❌ bootstrap-tools failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function handleResearchTools(ctx) {
|
|
67
|
+
const category = normalizeCommandArgs(ctx.args).trim() || "modern high-performance CLI tools for coding and architecture";
|
|
68
|
+
return {
|
|
69
|
+
text: `🚀 **Tool Evolution Research Initiated**\n\n` +
|
|
70
|
+
`**Instructions for Agent:**\n` +
|
|
71
|
+
`1. Use \`google_web_search\` or \`web_search_exa\` to find the latest tools in the category: "${category}".\n` +
|
|
72
|
+
`2. Compare findings with current capabilities in \`.state/SYSTEM_CAPABILITIES.json\`.\n` +
|
|
73
|
+
`3. Focus on tools that improve speed (like \`rg\`, \`sg\`), documentation (like \`qmd\`), or automation.\n` +
|
|
74
|
+
`4. Output a "Tool Upgrade Proposal" with installation commands and justification.`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -1,57 +1,48 @@
|
|
|
1
|
-
|
|
2
1
|
import * as fs from 'fs';
|
|
3
2
|
import * as path from 'path';
|
|
4
|
-
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
5
3
|
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
6
4
|
import { atomicWriteFileSync, normalizeCommandArgs } from '../utils/io.js';
|
|
7
|
-
import type { ContextInjectionConfig} from '../types.js';
|
|
8
5
|
import { defaultContextConfig } from '../types.js';
|
|
9
6
|
import { loadContextInjectionConfig } from '../hooks/prompt.js';
|
|
10
|
-
|
|
11
7
|
/**
|
|
12
8
|
* Get workspace directory from context
|
|
13
9
|
*/
|
|
14
|
-
function getWorkspaceDir(ctx
|
|
10
|
+
function getWorkspaceDir(ctx) {
|
|
15
11
|
// resolvePluginCommandWorkspaceDir throws on failure — never returns falsy
|
|
16
12
|
return resolvePluginCommandWorkspaceDir(ctx, 'context');
|
|
17
13
|
}
|
|
18
|
-
|
|
19
14
|
/**
|
|
20
15
|
* Save context injection config to PROFILE.json
|
|
21
16
|
*/
|
|
22
|
-
function saveConfig(workspaceDir
|
|
17
|
+
function saveConfig(workspaceDir, config) {
|
|
23
18
|
const profilePath = path.join(workspaceDir, '.principles', 'PROFILE.json');
|
|
24
|
-
|
|
25
19
|
try {
|
|
26
20
|
// Ensure directory exists
|
|
27
21
|
const dir = path.dirname(profilePath);
|
|
28
22
|
if (!fs.existsSync(dir)) {
|
|
29
23
|
fs.mkdirSync(dir, { recursive: true });
|
|
30
24
|
}
|
|
31
|
-
|
|
32
25
|
// Load existing profile or create new one
|
|
33
|
-
let profile
|
|
26
|
+
let profile = {};
|
|
34
27
|
if (fs.existsSync(profilePath)) {
|
|
35
28
|
const raw = fs.readFileSync(profilePath, 'utf-8');
|
|
36
29
|
profile = JSON.parse(raw);
|
|
37
30
|
}
|
|
38
|
-
|
|
39
31
|
// Update contextInjection
|
|
40
32
|
profile.contextInjection = config;
|
|
41
|
-
|
|
42
33
|
// Write back
|
|
43
34
|
atomicWriteFileSync(profilePath, JSON.stringify(profile, null, 2));
|
|
44
35
|
return true;
|
|
45
|
-
}
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
46
38
|
console.error(`[PD:Context] Failed to save config: ${String(e)}`);
|
|
47
39
|
return false;
|
|
48
40
|
}
|
|
49
41
|
}
|
|
50
|
-
|
|
51
42
|
/**
|
|
52
43
|
* Format project focus value for display
|
|
53
44
|
*/
|
|
54
|
-
function formatProjectFocus(value
|
|
45
|
+
function formatProjectFocus(value, isZh) {
|
|
55
46
|
const labels = {
|
|
56
47
|
full: { zh: '📦 完整', en: '📦 Full' },
|
|
57
48
|
summary: { zh: '📝 摘要', en: '📝 Summary' },
|
|
@@ -59,13 +50,11 @@ function formatProjectFocus(value: 'full' | 'summary' | 'off', isZh: boolean): s
|
|
|
59
50
|
};
|
|
60
51
|
return labels[value][isZh ? 'zh' : 'en'];
|
|
61
52
|
}
|
|
62
|
-
|
|
63
53
|
/**
|
|
64
54
|
* Show current context injection status
|
|
65
55
|
*/
|
|
66
|
-
function showStatus(workspaceDir
|
|
56
|
+
function showStatus(workspaceDir, isZh) {
|
|
67
57
|
const config = loadContextInjectionConfig(workspaceDir);
|
|
68
|
-
|
|
69
58
|
if (isZh) {
|
|
70
59
|
return `
|
|
71
60
|
📊 **上下文注入状态**
|
|
@@ -78,7 +67,8 @@ function showStatus(workspaceDir: string, isZh: boolean): string {
|
|
|
78
67
|
|
|
79
68
|
💡 输入 \`/pd-context help\` 查看更多选项
|
|
80
69
|
`.trim();
|
|
81
|
-
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
82
72
|
return `
|
|
83
73
|
📊 **Context Injection Status**
|
|
84
74
|
|
|
@@ -92,97 +82,75 @@ function showStatus(workspaceDir: string, isZh: boolean): string {
|
|
|
92
82
|
`.trim();
|
|
93
83
|
}
|
|
94
84
|
}
|
|
95
|
-
|
|
96
85
|
/**
|
|
97
86
|
* Toggle a boolean setting
|
|
98
87
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
function toggleSetting(
|
|
102
|
-
workspaceDir: string,
|
|
103
|
-
key: 'thinkingOs',
|
|
104
|
-
value: string,
|
|
105
|
-
isZh: boolean
|
|
106
|
-
): string {
|
|
88
|
+
function toggleSetting(workspaceDir, key, value, isZh) {
|
|
107
89
|
const config = loadContextInjectionConfig(workspaceDir);
|
|
108
90
|
const oldValue = config[key];
|
|
109
|
-
|
|
110
91
|
if (value === 'on') {
|
|
111
92
|
config[key] = true;
|
|
112
|
-
}
|
|
93
|
+
}
|
|
94
|
+
else if (value === 'off') {
|
|
113
95
|
config[key] = false;
|
|
114
|
-
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
115
98
|
return isZh
|
|
116
99
|
? `❌ 无效值: "${value}"。使用 "on" 或 "off"。`
|
|
117
100
|
: `❌ Invalid value: "${value}". Use "on" or "off".`;
|
|
118
101
|
}
|
|
119
|
-
|
|
120
102
|
const newValue = config[key];
|
|
121
103
|
const keyName = isZh
|
|
122
104
|
? { thinkingOs: '思维模型' }[key]
|
|
123
105
|
: key;
|
|
124
|
-
|
|
125
106
|
// No change needed
|
|
126
107
|
if (oldValue === newValue) {
|
|
127
108
|
return isZh
|
|
128
109
|
? `ℹ️ ${keyName} 已经是 ${newValue ? '开启' : '关闭'} 状态`
|
|
129
110
|
: `ℹ️ ${keyName} is already ${newValue ? 'ON' : 'OFF'}`;
|
|
130
111
|
}
|
|
131
|
-
|
|
132
112
|
if (saveConfig(workspaceDir, config)) {
|
|
133
113
|
// Verify the save by re-reading
|
|
134
114
|
const verifyConfig = loadContextInjectionConfig(workspaceDir);
|
|
135
115
|
const verifyValue = verifyConfig[key];
|
|
136
|
-
|
|
137
116
|
if (verifyValue !== newValue) {
|
|
138
117
|
return isZh
|
|
139
118
|
? `⚠️ ${keyName} 保存后验证失败,请重试`
|
|
140
119
|
: `⚠️ ${keyName} verification failed after save, please retry`;
|
|
141
120
|
}
|
|
142
|
-
|
|
143
121
|
const arrow = isZh ? '→' : '→';
|
|
144
122
|
const oldLabel = oldValue ? (isZh ? '开启' : 'ON') : (isZh ? '关闭' : 'OFF');
|
|
145
123
|
const newLabel = newValue ? (isZh ? '开启' : 'ON') : (isZh ? '关闭' : 'OFF');
|
|
146
|
-
|
|
147
124
|
return isZh
|
|
148
125
|
? `✅ ${keyName} 已更新: ${oldLabel} ${arrow} ${newLabel}\n\n💡 下次对话时生效`
|
|
149
126
|
: `✅ ${keyName} updated: ${oldLabel} ${arrow} ${newLabel}\n\n💡 Takes effect on next turn`;
|
|
150
|
-
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
151
129
|
return isZh
|
|
152
130
|
? `❌ 保存配置失败`
|
|
153
131
|
: `❌ Failed to save configuration`;
|
|
154
132
|
}
|
|
155
133
|
}
|
|
156
|
-
|
|
157
134
|
/**
|
|
158
135
|
* Set project focus mode
|
|
159
136
|
*/
|
|
160
|
-
function setProjectFocus(
|
|
161
|
-
workspaceDir: string,
|
|
162
|
-
value: string,
|
|
163
|
-
isZh: boolean
|
|
164
|
-
): string {
|
|
137
|
+
function setProjectFocus(workspaceDir, value, isZh) {
|
|
165
138
|
const config = loadContextInjectionConfig(workspaceDir);
|
|
166
139
|
const oldValue = config.projectFocus;
|
|
167
|
-
const validModes = ['full', 'summary', 'off']
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (!validModes.includes(value as FocusMode)) {
|
|
140
|
+
const validModes = ['full', 'summary', 'off'];
|
|
141
|
+
if (!validModes.includes(value)) {
|
|
171
142
|
return isZh
|
|
172
143
|
? `❌ 无效值: "${value}"。使用 "full"、"summary" 或 "off"。`
|
|
173
144
|
: `❌ Invalid value: "${value}". Use "full", "summary", or "off".`;
|
|
174
145
|
}
|
|
175
|
-
|
|
176
|
-
const newValue = value as FocusMode;
|
|
146
|
+
const newValue = value;
|
|
177
147
|
config.projectFocus = newValue;
|
|
178
|
-
|
|
179
148
|
// No change needed
|
|
180
149
|
if (oldValue === newValue) {
|
|
181
150
|
return isZh
|
|
182
151
|
? `ℹ️ 项目上下文已经是 ${formatProjectFocus(newValue, isZh)} 状态`
|
|
183
152
|
: `ℹ️ Project context is already ${formatProjectFocus(newValue, isZh)}`;
|
|
184
153
|
}
|
|
185
|
-
|
|
186
154
|
if (saveConfig(workspaceDir, config)) {
|
|
187
155
|
// Verify the save by re-reading
|
|
188
156
|
const verifyConfig = loadContextInjectionConfig(workspaceDir);
|
|
@@ -191,31 +159,22 @@ function setProjectFocus(
|
|
|
191
159
|
? `⚠️ 项目上下文保存后验证失败,请重试`
|
|
192
160
|
: `⚠️ Project context verification failed after save, please retry`;
|
|
193
161
|
}
|
|
194
|
-
|
|
195
162
|
const arrow = '→';
|
|
196
|
-
|
|
197
163
|
return isZh
|
|
198
|
-
? `✅ 项目上下文已更新: ${formatProjectFocus(oldValue
|
|
199
|
-
: `✅ Project context updated: ${formatProjectFocus(oldValue
|
|
200
|
-
}
|
|
164
|
+
? `✅ 项目上下文已更新: ${formatProjectFocus(oldValue, isZh)} ${arrow} ${formatProjectFocus(newValue, isZh)}\n\n💡 下次对话时生效`
|
|
165
|
+
: `✅ Project context updated: ${formatProjectFocus(oldValue, isZh)} ${arrow} ${formatProjectFocus(newValue, isZh)}\n\n💡 Takes effect on next turn`;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
201
168
|
return isZh
|
|
202
169
|
? `❌ 保存配置失败`
|
|
203
170
|
: `❌ Failed to save configuration`;
|
|
204
171
|
}
|
|
205
172
|
}
|
|
206
|
-
|
|
207
173
|
/**
|
|
208
174
|
* Apply a preset configuration
|
|
209
175
|
*/
|
|
210
|
-
function applyPreset(
|
|
211
|
-
|
|
212
|
-
preset: 'minimal' | 'standard' | 'full',
|
|
213
|
-
isZh: boolean
|
|
214
|
-
): string {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
let config: ContextInjectionConfig;
|
|
218
|
-
|
|
176
|
+
function applyPreset(workspaceDir, preset, isZh) {
|
|
177
|
+
let config;
|
|
219
178
|
switch (preset) {
|
|
220
179
|
case 'minimal':
|
|
221
180
|
config = {
|
|
@@ -239,7 +198,6 @@ function applyPreset(
|
|
|
239
198
|
};
|
|
240
199
|
break;
|
|
241
200
|
}
|
|
242
|
-
|
|
243
201
|
if (saveConfig(workspaceDir, config)) {
|
|
244
202
|
const presetName = isZh
|
|
245
203
|
? { minimal: '最小模式', standard: '标准模式', full: '完整模式' }[preset]
|
|
@@ -247,17 +205,17 @@ function applyPreset(
|
|
|
247
205
|
return isZh
|
|
248
206
|
? `✅ 已应用预设: ${presetName}\n\n${showStatus(workspaceDir, isZh)}`
|
|
249
207
|
: `✅ Applied preset: ${presetName}\n\n${showStatus(workspaceDir, isZh)}`;
|
|
250
|
-
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
251
210
|
return isZh
|
|
252
211
|
? `❌ 保存配置失败`
|
|
253
212
|
: `❌ Failed to save configuration`;
|
|
254
213
|
}
|
|
255
214
|
}
|
|
256
|
-
|
|
257
215
|
/**
|
|
258
216
|
* Show help message
|
|
259
217
|
*/
|
|
260
|
-
function showHelp(isZh
|
|
218
|
+
function showHelp(isZh) {
|
|
261
219
|
if (isZh) {
|
|
262
220
|
return `
|
|
263
221
|
📖 **/pd-context 命令帮助**
|
|
@@ -277,7 +235,8 @@ function showHelp(isZh: boolean): string {
|
|
|
277
235
|
|
|
278
236
|
**注意**: 核心原则始终注入,不可关闭。
|
|
279
237
|
`.trim();
|
|
280
|
-
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
281
240
|
return `
|
|
282
241
|
📖 **/pd-context Command Help**
|
|
283
242
|
|
|
@@ -298,24 +257,17 @@ function showHelp(isZh: boolean): string {
|
|
|
298
257
|
`.trim();
|
|
299
258
|
}
|
|
300
259
|
}
|
|
301
|
-
|
|
302
260
|
/**
|
|
303
261
|
* Main command handler
|
|
304
262
|
*/
|
|
305
|
-
|
|
306
|
-
export function handleContextCommand(ctx: PluginCommandContext): PluginCommandResult {
|
|
263
|
+
export function handleContextCommand(ctx) {
|
|
307
264
|
const workspaceDir = getWorkspaceDir(ctx);
|
|
308
265
|
const args = normalizeCommandArgs(ctx.args).trim().split(/\s+/);
|
|
309
266
|
const subCommand = args[0]?.toLowerCase() || 'status';
|
|
310
267
|
const value = args[1]?.toLowerCase() || '';
|
|
311
|
-
|
|
312
268
|
// Detect language from context
|
|
313
|
-
const isZh =
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
let result: string;
|
|
318
|
-
|
|
269
|
+
const isZh = ctx.config?.language === 'zh';
|
|
270
|
+
let result;
|
|
319
271
|
switch (subCommand) {
|
|
320
272
|
case 'status':
|
|
321
273
|
result = showStatus(workspaceDir, isZh);
|
|
@@ -337,6 +289,5 @@ export function handleContextCommand(ctx: PluginCommandContext): PluginCommandRe
|
|
|
337
289
|
default:
|
|
338
290
|
result = showHelp(isZh);
|
|
339
291
|
}
|
|
340
|
-
|
|
341
292
|
return { text: result };
|
|
342
293
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disable Implementation Command — CLI `/pd-disable-impl`
|
|
3
|
+
* ========================================================
|
|
4
|
+
*
|
|
5
|
+
* PURPOSE: Manually disable an active implementation (e.g., regression in production).
|
|
6
|
+
*
|
|
7
|
+
* FLOW:
|
|
8
|
+
* 1. List active implementations
|
|
9
|
+
* 2. Select target, ask for reason
|
|
10
|
+
* 3. Transition active -> disabled (or candidate -> disabled)
|
|
11
|
+
* 4. Record disabledAt, disabledBy, disabledReason
|
|
12
|
+
*/
|
|
13
|
+
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
14
|
+
/**
|
|
15
|
+
* Handle the /pd-disable-impl command.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* /pd-disable-impl list - List active implementations
|
|
19
|
+
* /pd-disable-impl <implId> - Disable an implementation
|
|
20
|
+
* /pd-disable-impl <implId> --reason "<reason>" - Disable with reason
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleDisableImplCommand(ctx: PluginCommandContext): PluginCommandResult;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disable Implementation Command — CLI `/pd-disable-impl`
|
|
3
|
+
* ========================================================
|
|
4
|
+
*
|
|
5
|
+
* PURPOSE: Manually disable an active implementation (e.g., regression in production).
|
|
6
|
+
*
|
|
7
|
+
* FLOW:
|
|
8
|
+
* 1. List active implementations
|
|
9
|
+
* 2. Select target, ask for reason
|
|
10
|
+
* 3. Transition active -> disabled (or candidate -> disabled)
|
|
11
|
+
* 4. Record disabledAt, disabledBy, disabledReason
|
|
12
|
+
*/
|
|
13
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
14
|
+
import { refreshPrincipleLifecycle } from '../core/principle-internalization/lifecycle-refresh.js';
|
|
15
|
+
import { loadLedger, transitionImplementationState, updateImplementation, getAllowedTransitions, } from '../core/principle-tree-ledger.js';
|
|
16
|
+
import { normalizeCommandArgs } from '../utils/io.js';
|
|
17
|
+
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
18
|
+
/**
|
|
19
|
+
* Get all implementations from the ledger.
|
|
20
|
+
*/
|
|
21
|
+
function getAllImplementations(stateDir) {
|
|
22
|
+
const ledger = loadLedger(stateDir);
|
|
23
|
+
return Object.values(ledger.tree.implementations);
|
|
24
|
+
}
|
|
25
|
+
function _handleListActive(stateDir, isZh) {
|
|
26
|
+
const allImpls = getAllImplementations(stateDir);
|
|
27
|
+
const activeImpls = allImpls.filter((impl) => impl.lifecycleState === 'active' || impl.lifecycleState === 'candidate');
|
|
28
|
+
if (activeImpls.length === 0) {
|
|
29
|
+
return {
|
|
30
|
+
text: isZh
|
|
31
|
+
? '\n\u2139\ufe0f \u6ca1\u6709\u53ef\u7981\u7528\u7684\u5b9e\u73b0\u3002'
|
|
32
|
+
: '\n\u2139\ufe0f No implementations available to disable.',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
let output = isZh
|
|
36
|
+
? '\n\ud83d\udccb \u53ef\u7981\u7528\u5b9e\u73b0\n'
|
|
37
|
+
: '\n\ud83d\udccb Available Implementations to Disable\n';
|
|
38
|
+
output += `${'='.repeat(50)}\n`;
|
|
39
|
+
for (const impl of activeImpls) {
|
|
40
|
+
const stateLabel = impl.lifecycleState || 'candidate';
|
|
41
|
+
output += ` ${impl.id}\n`;
|
|
42
|
+
output += ` Rule: ${impl.ruleId} | State: ${stateLabel} | Version: ${impl.version}\n`;
|
|
43
|
+
if (impl.disabledReason) {
|
|
44
|
+
output += ` Previous reason: ${impl.disabledReason}\n`;
|
|
45
|
+
}
|
|
46
|
+
output += '\n';
|
|
47
|
+
}
|
|
48
|
+
output += isZh
|
|
49
|
+
? `\u7528\u6cd5: /pd-disable-impl <implId> --reason "\u539f\u56e0"`
|
|
50
|
+
: `Usage: /pd-disable-impl <implId> --reason "reason"`;
|
|
51
|
+
return { text: output };
|
|
52
|
+
}
|
|
53
|
+
function _handleDisableImpl(workspaceDir, stateDir, implId, reason, isZh, sessionId) {
|
|
54
|
+
const allImpls = getAllImplementations(stateDir);
|
|
55
|
+
const target = allImpls.find((i) => i.id === implId);
|
|
56
|
+
if (!target) {
|
|
57
|
+
return {
|
|
58
|
+
text: isZh
|
|
59
|
+
? `\u274c \u672a\u627e\u5230\u5b9e\u73b0: ${implId}`
|
|
60
|
+
: `\u274c Implementation not found: ${implId}`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const currentState = target.lifecycleState || 'candidate';
|
|
64
|
+
// Validate: active -> disabled or candidate -> disabled
|
|
65
|
+
if (currentState !== 'active' && currentState !== 'candidate') {
|
|
66
|
+
const allowed = getAllowedTransitions(currentState);
|
|
67
|
+
return {
|
|
68
|
+
text: isZh
|
|
69
|
+
? `\u274c \u5b9e\u73b0 ${implId} \u5f53\u524d\u72b6\u6001: ${currentState}\n\u5141\u8bb8\u8fc7\u6e21: ${allowed.join(', ') || '\u65e0\u8fc7\u6e21'}`
|
|
70
|
+
: `\u274c Implementation ${implId} is in state: ${currentState}\nAllowed transitions: ${allowed.join(', ') || 'none'}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const reasonText = reason || (isZh ? '\u7528\u6237\u624b\u52a8\u7981\u7528' : 'User manual disable');
|
|
74
|
+
transitionImplementationState(stateDir, implId, 'disabled');
|
|
75
|
+
updateImplementation(stateDir, implId, {
|
|
76
|
+
disabledAt: new Date().toISOString(),
|
|
77
|
+
disabledBy: sessionId || 'manual',
|
|
78
|
+
disabledReason: reasonText,
|
|
79
|
+
});
|
|
80
|
+
try {
|
|
81
|
+
refreshPrincipleLifecycle(workspaceDir, stateDir);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.warn('[disable-impl] Lifecycle refresh failed:', err instanceof Error ? err.stack : err);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
text: isZh
|
|
88
|
+
? `\n\u2705 \u5b9e\u73b0\u5df2\u7981\u7528: ${implId}\n \u72b6\u6001: ${currentState} -> disabled\n \u539f\u56e0: ${reasonText}`
|
|
89
|
+
: `\n\u2705 Implementation disabled: ${implId}\n State: ${currentState} -> disabled\n Reason: ${reasonText}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Handle the /pd-disable-impl command.
|
|
94
|
+
*
|
|
95
|
+
* Usage:
|
|
96
|
+
* /pd-disable-impl list - List active implementations
|
|
97
|
+
* /pd-disable-impl <implId> - Disable an implementation
|
|
98
|
+
* /pd-disable-impl <implId> --reason "<reason>" - Disable with reason
|
|
99
|
+
*/
|
|
100
|
+
export function handleDisableImplCommand(ctx) {
|
|
101
|
+
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'disable-impl');
|
|
102
|
+
const { stateDir } = WorkspaceContext.fromHookContext({ ...ctx, workspaceDir });
|
|
103
|
+
const lang = ctx.config?.language || 'en';
|
|
104
|
+
const isZh = lang === 'zh';
|
|
105
|
+
const args = normalizeCommandArgs(ctx.args).trim();
|
|
106
|
+
// Parse args: [implId] [--reason "..."]
|
|
107
|
+
const parts = args.split(/\s+/);
|
|
108
|
+
const subcommand = parts[0] || '';
|
|
109
|
+
const implId = subcommand === 'list' ? '' : subcommand;
|
|
110
|
+
const reasonMatch = (/--reason\s+"([^"]+)"/.exec(args)) || (/--reason\s+(\S+)/.exec(args));
|
|
111
|
+
const reason = reasonMatch ? reasonMatch[1] : null;
|
|
112
|
+
// Subcommand: list
|
|
113
|
+
if (subcommand === 'list' || subcommand === '') {
|
|
114
|
+
return _handleListActive(stateDir, isZh);
|
|
115
|
+
}
|
|
116
|
+
// Disable
|
|
117
|
+
return _handleDisableImpl(workspaceDir, stateDir, implId, reason, isZh, ctx.sessionId);
|
|
118
|
+
}
|