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
|
@@ -1,45 +1,37 @@
|
|
|
1
1
|
import { resetFriction, getSession } from '../core/session-tracker.js';
|
|
2
2
|
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
3
|
-
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
4
3
|
import { normalizeCommandArgs } from '../utils/io.js';
|
|
5
4
|
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
6
|
-
import type { EmpathyEventStats } from '../types/event-types.js';
|
|
7
|
-
import type { EvolutionLoopEvent } from '../core/evolution-types.js';
|
|
8
5
|
import { computeHash } from '../utils/hashing.js';
|
|
9
6
|
import { PainToPrincipleService, PrincipleTreeLedgerAdapter } from '@principles/core/runtime-v2';
|
|
10
7
|
import { loadPdConfigForPlugin } from '../core/pd-config-loader.js';
|
|
11
|
-
|
|
12
8
|
/**
|
|
13
9
|
* Creates a visual progress bar (e.g., [██████░░░░])
|
|
14
10
|
*/
|
|
15
|
-
function createProgressBar(value
|
|
11
|
+
function createProgressBar(value, max, length = 10) {
|
|
16
12
|
const filledLength = Math.round((value / max) * length);
|
|
17
13
|
const emptyLength = length - filledLength;
|
|
18
14
|
return `[${'█'.repeat(filledLength)}${'░'.repeat(emptyLength)}]`;
|
|
19
15
|
}
|
|
20
|
-
|
|
21
16
|
/**
|
|
22
17
|
* Creates a mini bar for daily trends
|
|
23
18
|
*/
|
|
24
|
-
function createMiniBar(count
|
|
19
|
+
function createMiniBar(count, max, length = 6) {
|
|
25
20
|
const filledLength = Math.round((count / max) * length);
|
|
26
21
|
return '█'.repeat(filledLength) + '░'.repeat(length - filledLength);
|
|
27
22
|
}
|
|
28
|
-
|
|
29
23
|
/**
|
|
30
24
|
* Format empathy stats for display
|
|
31
25
|
*/
|
|
32
|
-
function formatEmpathyCard(stats
|
|
26
|
+
function formatEmpathyCard(stats, range, isZh) {
|
|
33
27
|
if (stats.totalEvents === 0 && stats.dedupedCount === 0) {
|
|
34
28
|
return isZh
|
|
35
29
|
? `🫀 **情绪事件统计** (${range})\n 暂无数据`
|
|
36
30
|
: `🫀 **Empathy Events** (${range})\n No data available`;
|
|
37
31
|
}
|
|
38
|
-
|
|
39
|
-
const lines: string[] = [];
|
|
32
|
+
const lines = [];
|
|
40
33
|
lines.push(isZh ? `🫀 **情绪事件统计** (${range})` : `🫀 **Empathy Events** (${range})`);
|
|
41
34
|
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
42
|
-
|
|
43
35
|
// Total events
|
|
44
36
|
const totalLabel = isZh ? '📊 总事件' : '📊 Total Events';
|
|
45
37
|
lines.push(`${totalLabel}: ${stats.totalEvents} 次`);
|
|
@@ -47,7 +39,6 @@ function formatEmpathyCard(stats: EmpathyEventStats, range: string, isZh: boolea
|
|
|
47
39
|
lines.push(` ├─ 😠 moderate: ${stats.bySeverity.moderate} 次 (${stats.scoreBySeverity.moderate}分)`);
|
|
48
40
|
lines.push(` └─ 😡 severe: ${stats.bySeverity.severe} 次 (${stats.scoreBySeverity.severe}分)`);
|
|
49
41
|
lines.push('');
|
|
50
|
-
|
|
51
42
|
// Dedupe hit rate
|
|
52
43
|
const dedupeRate = (stats.dedupeHitRate * 100).toFixed(0);
|
|
53
44
|
const dedupeLabel = isZh ? '🔄 去重命中率' : '🔄 Dedupe Hit Rate';
|
|
@@ -56,14 +47,12 @@ function formatEmpathyCard(stats: EmpathyEventStats, range: string, isZh: boolea
|
|
|
56
47
|
lines.push(isZh ? ' ↳ 避免了重复惩罚' : ' ↳ Prevented duplicate penalties');
|
|
57
48
|
}
|
|
58
49
|
lines.push('');
|
|
59
|
-
|
|
60
50
|
// Rollback info
|
|
61
51
|
if (stats.rollbackCount > 0) {
|
|
62
52
|
const rollbackLabel = isZh ? '↩️ 已回滚' : '↩️ Rolled Back';
|
|
63
53
|
lines.push(`${rollbackLabel}: ${stats.rollbackCount} 次 (${stats.rolledBackScore}分)`);
|
|
64
54
|
lines.push('');
|
|
65
55
|
}
|
|
66
|
-
|
|
67
56
|
// Daily trend
|
|
68
57
|
if (stats.dailyTrend.length > 1) {
|
|
69
58
|
const trendLabel = isZh ? '📈 趋势 (按天)' : '📈 Trend (by day)';
|
|
@@ -75,45 +64,28 @@ function formatEmpathyCard(stats: EmpathyEventStats, range: string, isZh: boolea
|
|
|
75
64
|
lines.push(` ${dateStr}: ${bar} ${day.count}次`);
|
|
76
65
|
}
|
|
77
66
|
}
|
|
78
|
-
|
|
79
67
|
// Detection mode distribution
|
|
80
68
|
if (stats.byDetectionMode.structured > 0 || stats.byDetectionMode.legacy_tag > 0) {
|
|
81
69
|
lines.push('');
|
|
82
70
|
const modeLabel = isZh ? '🔍 检测模式' : '🔍 Detection Mode';
|
|
83
71
|
lines.push(`${modeLabel}: 结构化 ${stats.byDetectionMode.structured} | 标签 ${stats.byDetectionMode.legacy_tag}`);
|
|
84
72
|
}
|
|
85
|
-
|
|
86
73
|
return lines.join('\n');
|
|
87
74
|
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Extended context interface that includes sessionId injected by the plugin framework.
|
|
91
|
-
* PluginCommandContext does not include sessionId in its type definition.
|
|
92
|
-
*/
|
|
93
|
-
interface SessionAwareCommandContext extends PluginCommandContext {
|
|
94
|
-
sessionId: string;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
75
|
/**
|
|
98
76
|
* Handles the /pd-status command
|
|
99
77
|
*/
|
|
100
|
-
export function handlePainCommand(ctx
|
|
78
|
+
export function handlePainCommand(ctx) {
|
|
101
79
|
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'pain');
|
|
102
|
-
|
|
103
80
|
const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
|
|
104
|
-
const lang =
|
|
81
|
+
const lang = ctx.config?.language || 'en';
|
|
105
82
|
const isZh = lang === 'zh';
|
|
106
|
-
const { sessionId } = ctx
|
|
107
|
-
|
|
83
|
+
const { sessionId } = ctx;
|
|
108
84
|
const args = normalizeCommandArgs(ctx.args).trim();
|
|
109
|
-
|
|
110
85
|
// Handle empathy subcommand
|
|
111
86
|
if (args.startsWith('empathy')) {
|
|
112
|
-
|
|
113
|
-
|
|
114
87
|
return handleEmpathySubcommand(wctx, args, sessionId, isZh);
|
|
115
88
|
}
|
|
116
|
-
|
|
117
89
|
if (args === 'reset') {
|
|
118
90
|
if (sessionId) {
|
|
119
91
|
resetFriction(sessionId);
|
|
@@ -121,7 +93,6 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
121
93
|
}
|
|
122
94
|
return { text: isZh ? `❌ 无法识别当前会话。` : `❌ Session ID not found. Use /pd-status reset in a chat session.` };
|
|
123
95
|
}
|
|
124
|
-
|
|
125
96
|
if (args === 'data') {
|
|
126
97
|
const stats = wctx.trajectory.getDataStats();
|
|
127
98
|
return {
|
|
@@ -130,31 +101,23 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
130
101
|
: `Trajectory Data Status\n- DB: ${stats.dbPath}\n- assistant turns: ${stats.assistantTurns}\n- user turns: ${stats.userTurns}\n- tool calls: ${stats.toolCalls}\n- pain events: ${stats.painEvents}\n- pending samples: ${stats.pendingSamples}\n- approved samples: ${stats.approvedSamples}\n- blob bytes: ${stats.blobBytes}\n- last ingest: ${stats.lastIngestAt ?? 'none'}`
|
|
131
102
|
};
|
|
132
103
|
}
|
|
133
|
-
|
|
134
104
|
// Default: Show status
|
|
135
105
|
const session = sessionId ? getSession(sessionId) : undefined;
|
|
136
106
|
const gfi = session ? session.currentGfi : 0;
|
|
137
|
-
const {dictionary} = wctx;
|
|
107
|
+
const { dictionary } = wctx;
|
|
138
108
|
const stats = dictionary.getStats();
|
|
139
|
-
|
|
140
109
|
const gfiBar = createProgressBar(gfi, 100, 15);
|
|
141
|
-
|
|
142
110
|
// Determine Mental Mode (aligned with prompt.ts logic)
|
|
143
|
-
|
|
144
111
|
const mentalMode = isZh
|
|
145
112
|
? gfi >= 70 ? '🚑 救赎模式 (HUMBLE_RECOVERY)'
|
|
146
|
-
|
|
147
|
-
|
|
113
|
+
: gfi >= 40 ? '🤝 安抚模式 (CONCILIATORY)'
|
|
114
|
+
: '⚡ 高效模式 (EFFICIENT)'
|
|
148
115
|
: gfi >= 70 ? '🚑 HUMBLE_RECOVERY'
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
116
|
+
: gfi >= 40 ? '🤝 CONCILIATORY'
|
|
117
|
+
: '⚡ EFFICIENT';
|
|
152
118
|
// Determine health status based on GFI
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
let healthLabel: string;
|
|
119
|
+
let healthLabel;
|
|
156
120
|
let suggestionText = '';
|
|
157
|
-
|
|
158
121
|
if (isZh) {
|
|
159
122
|
if (gfi > 80) {
|
|
160
123
|
healthLabel = '极度疲劳 🔴';
|
|
@@ -163,10 +126,14 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
163
126
|
1. 执行 \`/pd-status reset\` 清零疲劳值。
|
|
164
127
|
2. 如果当前上下文太乱,考虑使用 \`/clear\` 开启新会话。`;
|
|
165
128
|
}
|
|
166
|
-
else if (gfi > 50)
|
|
167
|
-
|
|
168
|
-
else
|
|
169
|
-
|
|
129
|
+
else if (gfi > 50)
|
|
130
|
+
healthLabel = '遇到阻力 🟡';
|
|
131
|
+
else if (gfi > 20)
|
|
132
|
+
healthLabel = '轻微受挫 🟢';
|
|
133
|
+
else
|
|
134
|
+
healthLabel = '运转良好 🟢';
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
170
137
|
if (gfi > 80) {
|
|
171
138
|
healthLabel = 'Critical 🔴';
|
|
172
139
|
suggestionText = `
|
|
@@ -175,11 +142,13 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
175
142
|
2. Ask the AI to reflect deeply before continuing.
|
|
176
143
|
3. Consider starting a new session with \`/clear\`.`;
|
|
177
144
|
}
|
|
178
|
-
else if (gfi > 50)
|
|
179
|
-
|
|
180
|
-
else
|
|
145
|
+
else if (gfi > 50)
|
|
146
|
+
healthLabel = 'High Friction 🟡';
|
|
147
|
+
else if (gfi > 20)
|
|
148
|
+
healthLabel = 'Minor Issues 🟢';
|
|
149
|
+
else
|
|
150
|
+
healthLabel = 'Healthy 🟢';
|
|
181
151
|
}
|
|
182
|
-
|
|
183
152
|
// Get session empathy stats for inline display
|
|
184
153
|
const sessionEmpathy = sessionId ? wctx.eventLog.getEmpathyStats('session', sessionId) : null;
|
|
185
154
|
let empathyInline = '';
|
|
@@ -188,7 +157,6 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
188
157
|
? `\n🫀 **情绪事件 (当前会话)**: ${sessionEmpathy.totalEvents} 次 (${sessionEmpathy.totalPenaltyScore}分)`
|
|
189
158
|
: `\n🫀 **Empathy Events (Session)**: ${sessionEmpathy.totalEvents} (${sessionEmpathy.totalPenaltyScore}pts)`;
|
|
190
159
|
}
|
|
191
|
-
|
|
192
160
|
if (isZh) {
|
|
193
161
|
let text = `📊 **Principles Disciple - 系统健康度监控**\n`;
|
|
194
162
|
text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
|
|
@@ -199,14 +167,15 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
199
167
|
text += `\n\n🧠 **痛苦进化词典**: 已吸收 ${stats.totalRules} 条规则\n`;
|
|
200
168
|
text += ` ↳ 累计帮您拦截了 ${stats.totalHits} 次无效操作\n`;
|
|
201
169
|
text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
|
|
202
|
-
|
|
203
170
|
if (suggestionText) {
|
|
204
171
|
text += suggestionText;
|
|
205
|
-
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
206
174
|
text += `*💡 提示: 使用 \`/pd-status empathy\` 查看详细情绪事件统计。*`;
|
|
207
175
|
}
|
|
208
176
|
return { text };
|
|
209
|
-
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
210
179
|
let text = `📊 **Principles Disciple - System Health Monitor**\n`;
|
|
211
180
|
text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
|
|
212
181
|
text += `💊 **Current Friction (GFI)**: ${gfiBar} ${gfi}/100\n`;
|
|
@@ -216,37 +185,30 @@ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResul
|
|
|
216
185
|
text += `\n\n🧠 **Evolution Dictionary**: ${stats.totalRules} active rules\n`;
|
|
217
186
|
text += ` ↳ Successfully blocked ${stats.totalHits} invalid operations\n`;
|
|
218
187
|
text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
|
|
219
|
-
|
|
220
188
|
if (suggestionText) {
|
|
221
189
|
text += suggestionText;
|
|
222
|
-
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
223
192
|
text += `*💡 Hint: Use \`/pd-status empathy\` to view detailed empathy event statistics.*`;
|
|
224
193
|
}
|
|
225
194
|
return { text };
|
|
226
195
|
}
|
|
227
196
|
}
|
|
228
|
-
|
|
229
197
|
/**
|
|
230
198
|
* Handle /pd-status empathy subcommand
|
|
231
199
|
*/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
function handleEmpathySubcommand(
|
|
235
|
-
wctx: WorkspaceContext,
|
|
236
|
-
args: string,
|
|
237
|
-
sessionId: string | undefined,
|
|
238
|
-
isZh: boolean
|
|
239
|
-
): PluginCommandResult {
|
|
200
|
+
function handleEmpathySubcommand(wctx, args, sessionId, isZh) {
|
|
240
201
|
// Parse range argument
|
|
241
|
-
let range
|
|
202
|
+
let range = 'today';
|
|
242
203
|
if (args.includes('--week') || args.includes('-w')) {
|
|
243
204
|
range = 'week';
|
|
244
|
-
}
|
|
205
|
+
}
|
|
206
|
+
else if (args.includes('--session') || args.includes('-s')) {
|
|
245
207
|
range = 'session';
|
|
246
|
-
}
|
|
208
|
+
}
|
|
209
|
+
else if (args.includes('--today') || args.includes('-t')) {
|
|
247
210
|
range = 'today';
|
|
248
211
|
}
|
|
249
|
-
|
|
250
212
|
// Validate session range
|
|
251
213
|
if (range === 'session' && !sessionId) {
|
|
252
214
|
return {
|
|
@@ -255,131 +217,118 @@ function handleEmpathySubcommand(
|
|
|
255
217
|
: `❌ Session not found. Use this command in a chat session.`
|
|
256
218
|
};
|
|
257
219
|
}
|
|
258
|
-
|
|
259
220
|
const stats = wctx.eventLog.getEmpathyStats(range, sessionId);
|
|
260
221
|
const rangeLabel = isZh
|
|
261
222
|
? { today: '今天', week: '最近 7 天', session: '当前会话' }[range]
|
|
262
223
|
: { today: 'Today', week: 'Last 7 Days', session: 'Current Session' }[range];
|
|
263
|
-
|
|
264
224
|
let text = formatEmpathyCard(stats, rangeLabel, isZh);
|
|
265
|
-
|
|
266
225
|
// Add usage hint
|
|
267
226
|
if (range === 'today') {
|
|
268
227
|
text += isZh
|
|
269
228
|
? `\n\n*💡 使用 \`/pd-status empathy --week\` 查看周统计,\`--session\` 查看会话统计。*`
|
|
270
229
|
: `\n\n*💡 Use \`/pd-status empathy --week\` for weekly stats, \`--session\` for session stats.*`;
|
|
271
230
|
}
|
|
272
|
-
|
|
273
231
|
return { text };
|
|
274
232
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
: '❌ Please provide a pain reason. Usage: `/pd-pain <describe the issue you encountered>`',
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (!sessionId || sessionId === 'unknown') {
|
|
293
|
-
return {
|
|
294
|
-
text: isZh
|
|
295
|
-
? '❌ 无法获取当前会话 ID。请在 OpenClaw 对话会话中使用此命令。'
|
|
296
|
-
: '❌ Session ID not available. Please use this command in an OpenClaw chat session.',
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
const painId = `manual_${Date.now()}_${computeHash(sessionId).slice(0, 8)}`;
|
|
301
|
-
const painData = {
|
|
302
|
-
painId,
|
|
303
|
-
painType: 'user_frustration' as const,
|
|
304
|
-
source: 'manual',
|
|
305
|
-
reason: args,
|
|
306
|
-
score: 90,
|
|
307
|
-
sessionId,
|
|
308
|
-
agentId: 'openclaw-host',
|
|
309
|
-
provenance: 'openclaw_context_bound' as const,
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
try {
|
|
313
|
-
const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir: wctx.stateDir });
|
|
314
|
-
// PRI-306: Load .pd/config.yaml for config-driven runtime binding
|
|
315
|
-
const configResult = loadPdConfigForPlugin(wctx.workspaceDir);
|
|
316
|
-
const service = new PainToPrincipleService({
|
|
317
|
-
workspaceDir: wctx.workspaceDir,
|
|
318
|
-
stateDir: wctx.stateDir,
|
|
319
|
-
ledgerAdapter,
|
|
320
|
-
owner: 'openclaw-plugin',
|
|
321
|
-
autoIntakeEnabled: true,
|
|
322
|
-
effectiveConfig: configResult.effective,
|
|
323
|
-
getEnvVar: (name: string) => process.env[name],
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
const result = await service.recordPain({
|
|
327
|
-
painId: painData.painId,
|
|
328
|
-
painType: painData.painType,
|
|
329
|
-
source: painData.source,
|
|
330
|
-
reason: painData.reason,
|
|
331
|
-
score: painData.score,
|
|
332
|
-
sessionId: painData.sessionId,
|
|
333
|
-
agentId: painData.agentId,
|
|
334
|
-
provenance: painData.provenance,
|
|
335
|
-
recordObservability: true,
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
if (result.status === 'succeeded') {
|
|
339
|
-
wctx.evolutionReducer.emitSync({
|
|
340
|
-
ts: new Date().toISOString(),
|
|
341
|
-
type: 'pain_detected',
|
|
342
|
-
data: painData,
|
|
343
|
-
} as EvolutionLoopEvent);
|
|
344
|
-
|
|
345
|
-
return {
|
|
346
|
-
text: isZh
|
|
347
|
-
? `✅ Pain 已记录 (context-bound)\n\n📋 **Pain ID**: ${painId}\n📝 **Reason**: ${args}\n🔗 **Provenance**: openclaw_context_bound\n📌 **Session**: ${sessionId}\n\n系统将基于当前会话上下文进行诊断。`
|
|
348
|
-
: `✅ Pain recorded (context-bound)\n\n📋 **Pain ID**: ${painId}\n📝 **Reason**: ${args}\n🔗 **Provenance**: openclaw_context_bound\n📌 **Session**: ${sessionId}\n\nThe system will diagnose using current session context.`,
|
|
349
|
-
};
|
|
233
|
+
export async function handlePainReportCommand(ctx) {
|
|
234
|
+
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'pain-report');
|
|
235
|
+
const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
|
|
236
|
+
const lang = ctx.config?.language || 'en';
|
|
237
|
+
const isZh = lang === 'zh';
|
|
238
|
+
const { sessionId } = ctx;
|
|
239
|
+
const args = normalizeCommandArgs(ctx.args).trim();
|
|
240
|
+
if (!args) {
|
|
241
|
+
return {
|
|
242
|
+
text: isZh
|
|
243
|
+
? '❌ 请提供 pain reason。用法: `/pd-pain <描述你遇到的问题>`'
|
|
244
|
+
: '❌ Please provide a pain reason. Usage: `/pd-pain <describe the issue you encountered>`',
|
|
245
|
+
};
|
|
350
246
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
? (isZh ? `\n📝 **详情**: ${result.message}` : `\n📝 **Detail**: ${result.message}`)
|
|
358
|
-
: '';
|
|
359
|
-
return {
|
|
360
|
-
text: isZh
|
|
361
|
-
? `✅ Pain 已记录,诊断任务已进入重试\n\n📋 **Pain ID**: ${result.painId}\n🔧 **Task ID**: ${result.taskId}${errorInfo}${messageInfo}\n\n诊断任务将在后台自动重试。使用 \`/pd-status\` 查看任务状态。`
|
|
362
|
-
: `✅ Pain recorded, diagnosis task entered retry\n\n📋 **Pain ID**: ${result.painId}\n🔧 **Task ID**: ${result.taskId}${errorInfo}${messageInfo}\n\nThe diagnosis task will retry automatically in the background. Use \`/pd-status\` to check task status.`,
|
|
363
|
-
};
|
|
247
|
+
if (!sessionId || sessionId === 'unknown') {
|
|
248
|
+
return {
|
|
249
|
+
text: isZh
|
|
250
|
+
? '❌ 无法获取当前会话 ID。请在 OpenClaw 对话会话中使用此命令。'
|
|
251
|
+
: '❌ Session ID not available. Please use this command in an OpenClaw chat session.',
|
|
252
|
+
};
|
|
364
253
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
? `❌ Pain 记录未成功 (status: ${result.status})${reasonInfo}${messageInfo}\n\n请检查系统日志或使用 \`/pd-status\` 查看状态。`
|
|
376
|
-
: `❌ Pain recording not accepted (status: ${result.status})${reasonInfo}${messageInfo}\n\nCheck system logs or use \`/pd-status\` for status.`,
|
|
254
|
+
const painId = `manual_${Date.now()}_${computeHash(sessionId).slice(0, 8)}`;
|
|
255
|
+
const painData = {
|
|
256
|
+
painId,
|
|
257
|
+
painType: 'user_frustration',
|
|
258
|
+
source: 'manual',
|
|
259
|
+
reason: args,
|
|
260
|
+
score: 90,
|
|
261
|
+
sessionId,
|
|
262
|
+
agentId: 'openclaw-host',
|
|
263
|
+
provenance: 'openclaw_context_bound',
|
|
377
264
|
};
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
265
|
+
try {
|
|
266
|
+
const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir: wctx.stateDir });
|
|
267
|
+
// PRI-306: Load .pd/config.yaml for config-driven runtime binding
|
|
268
|
+
const configResult = loadPdConfigForPlugin(wctx.workspaceDir);
|
|
269
|
+
const service = new PainToPrincipleService({
|
|
270
|
+
workspaceDir: wctx.workspaceDir,
|
|
271
|
+
stateDir: wctx.stateDir,
|
|
272
|
+
ledgerAdapter,
|
|
273
|
+
owner: 'openclaw-plugin',
|
|
274
|
+
autoIntakeEnabled: true,
|
|
275
|
+
effectiveConfig: configResult.effective,
|
|
276
|
+
getEnvVar: (name) => process.env[name],
|
|
277
|
+
});
|
|
278
|
+
const result = await service.recordPain({
|
|
279
|
+
painId: painData.painId,
|
|
280
|
+
painType: painData.painType,
|
|
281
|
+
source: painData.source,
|
|
282
|
+
reason: painData.reason,
|
|
283
|
+
score: painData.score,
|
|
284
|
+
sessionId: painData.sessionId,
|
|
285
|
+
agentId: painData.agentId,
|
|
286
|
+
provenance: painData.provenance,
|
|
287
|
+
recordObservability: true,
|
|
288
|
+
});
|
|
289
|
+
if (result.status === 'succeeded') {
|
|
290
|
+
wctx.evolutionReducer.emitSync({
|
|
291
|
+
ts: new Date().toISOString(),
|
|
292
|
+
type: 'pain_detected',
|
|
293
|
+
data: painData,
|
|
294
|
+
});
|
|
295
|
+
return {
|
|
296
|
+
text: isZh
|
|
297
|
+
? `✅ Pain 已记录 (context-bound)\n\n📋 **Pain ID**: ${painId}\n📝 **Reason**: ${args}\n🔗 **Provenance**: openclaw_context_bound\n📌 **Session**: ${sessionId}\n\n系统将基于当前会话上下文进行诊断。`
|
|
298
|
+
: `✅ Pain recorded (context-bound)\n\n📋 **Pain ID**: ${painId}\n📝 **Reason**: ${args}\n🔗 **Provenance**: openclaw_context_bound\n📌 **Session**: ${sessionId}\n\nThe system will diagnose using current session context.`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
if (result.status === 'retried') {
|
|
302
|
+
const errorInfo = result.failureCategory
|
|
303
|
+
? (isZh ? `\n⚠️ **错误类别**: ${result.failureCategory}` : `\n⚠️ **Error category**: ${result.failureCategory}`)
|
|
304
|
+
: '';
|
|
305
|
+
const messageInfo = result.message
|
|
306
|
+
? (isZh ? `\n📝 **详情**: ${result.message}` : `\n📝 **Detail**: ${result.message}`)
|
|
307
|
+
: '';
|
|
308
|
+
return {
|
|
309
|
+
text: isZh
|
|
310
|
+
? `✅ Pain 已记录,诊断任务已进入重试\n\n📋 **Pain ID**: ${result.painId}\n🔧 **Task ID**: ${result.taskId}${errorInfo}${messageInfo}\n\n诊断任务将在后台自动重试。使用 \`/pd-status\` 查看任务状态。`
|
|
311
|
+
: `✅ Pain recorded, diagnosis task entered retry\n\n📋 **Pain ID**: ${result.painId}\n🔧 **Task ID**: ${result.taskId}${errorInfo}${messageInfo}\n\nThe diagnosis task will retry automatically in the background. Use \`/pd-status\` to check task status.`,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
// status === 'failed' | 'skipped' | 'degraded' — pain was NOT accepted
|
|
315
|
+
const reasonInfo = result.failureCategory
|
|
316
|
+
? (isZh ? `\n⚠️ **原因**: ${result.failureCategory}` : `\n⚠️ **Reason**: ${result.failureCategory}`)
|
|
317
|
+
: '';
|
|
318
|
+
const messageInfo = result.message
|
|
319
|
+
? (isZh ? `\n📝 **详情**: ${result.message}` : `\n📝 **Detail**: ${result.message}`)
|
|
320
|
+
: '';
|
|
321
|
+
return {
|
|
322
|
+
text: isZh
|
|
323
|
+
? `❌ Pain 记录未成功 (status: ${result.status})${reasonInfo}${messageInfo}\n\n请检查系统日志或使用 \`/pd-status\` 查看状态。`
|
|
324
|
+
: `❌ Pain recording not accepted (status: ${result.status})${reasonInfo}${messageInfo}\n\nCheck system logs or use \`/pd-status\` for status.`,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
return {
|
|
329
|
+
text: isZh
|
|
330
|
+
? `❌ Pain 记录失败: ${String(err)}。请检查系统日志或重试。`
|
|
331
|
+
: `❌ Failed to record pain: ${String(err)}. Check system logs or try again.`,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
385
334
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
2
|
+
import { normalizeCommandArgs } from '../utils/io.js';
|
|
3
|
+
import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
|
|
4
|
+
export function handlePrincipleRollbackCommand(ctx) {
|
|
5
|
+
const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'principle-rollback');
|
|
6
|
+
const argText = normalizeCommandArgs(ctx.args).trim();
|
|
7
|
+
const [principleId = '', ...reasonParts] = argText.split(/\s+/);
|
|
8
|
+
const reason = (reasonParts.join(' ') || 'manual rollback').trim();
|
|
9
|
+
const isZh = ctx.config?.language?.startsWith('zh');
|
|
10
|
+
if (!principleId) {
|
|
11
|
+
return { text: isZh ? '用法: /pd-principle-rollback <principleId> [reason]' : 'Usage: /pd-principle-rollback <principleId> [reason]' };
|
|
12
|
+
}
|
|
13
|
+
// #207/#210: Use WorkspaceContext to get evolutionReducer with stateDir
|
|
14
|
+
const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
|
|
15
|
+
const reducer = wctx.evolutionReducer;
|
|
16
|
+
const principle = reducer.getPrincipleById(principleId);
|
|
17
|
+
if (!principle) {
|
|
18
|
+
return { text: isZh ? `未找到原则: ${principleId}` : `Principle not found: ${principleId}` };
|
|
19
|
+
}
|
|
20
|
+
reducer.rollbackPrinciple(principleId, reason);
|
|
21
|
+
return {
|
|
22
|
+
text: isZh
|
|
23
|
+
? `✅ 已回滚原则 ${principleId}\n原因: ${reason}`
|
|
24
|
+
: `✅ Rolled back principle ${principleId}\nReason: ${reason}`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Promote Implementation Command — CLI `/pd-promote-impl`
|
|
3
|
+
* ========================================================
|
|
4
|
+
*
|
|
5
|
+
* PURPOSE: Manually promote a candidate implementation to active status
|
|
6
|
+
* after replay evaluation review.
|
|
7
|
+
*
|
|
8
|
+
* FLOW:
|
|
9
|
+
* 1. List candidates with replay reports
|
|
10
|
+
* 2. Show replay report summary for selected candidate
|
|
11
|
+
* 3. Ask for confirmation
|
|
12
|
+
* 4. On confirm: transition candidate->active, demote previous active->disabled
|
|
13
|
+
*
|
|
14
|
+
* VALIDATION:
|
|
15
|
+
* - Candidate must have at least one replay report with 'pass' decision
|
|
16
|
+
* - Only candidate -> active is valid for promotion
|
|
17
|
+
* - NOTE (PRI-230): The legacy replay generation path has been retired.
|
|
18
|
+
* This command is temporarily unavailable for implementations without
|
|
19
|
+
* pre-existing replay reports until a Runtime V2 replay entry is wired.
|
|
20
|
+
*/
|
|
21
|
+
import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
|
|
22
|
+
export declare function handlePromoteImplCommand(ctx: PluginCommandContext): PluginCommandResult;
|