principles-disciple 1.126.0 → 1.128.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/archive-impl.d.ts +18 -0
- package/dist/commands/archive-impl.js +105 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.js +76 -0
- package/dist/commands/context.d.ts +5 -0
- package/{src/commands/context.ts → dist/commands/context.js} +34 -83
- package/dist/commands/disable-impl.d.ts +22 -0
- package/dist/commands/disable-impl.js +118 -0
- package/dist/commands/evolution-status.d.ts +4 -0
- package/dist/commands/evolution-status.js +187 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.js +53 -0
- package/dist/commands/focus.d.ts +14 -0
- package/dist/commands/focus.js +443 -0
- package/dist/commands/pain.d.ts +6 -0
- package/{src/commands/pain.ts → dist/commands/pain.js} +137 -188
- package/dist/commands/principle-rollback.d.ts +4 -0
- package/dist/commands/principle-rollback.js +26 -0
- package/dist/commands/promote-impl.d.ts +22 -0
- package/dist/commands/promote-impl.js +194 -0
- package/dist/commands/rollback-impl.d.ts +32 -0
- package/dist/commands/rollback-impl.js +180 -0
- package/dist/commands/rollback.d.ts +19 -0
- package/{src/commands/rollback.ts → dist/commands/rollback.js} +10 -53
- package/dist/commands/samples.d.ts +2 -0
- package/dist/commands/samples.js +58 -0
- package/dist/commands/strategy.d.ts +2 -0
- package/dist/commands/strategy.js +16 -0
- package/dist/commands/thinking-os.d.ts +2 -0
- package/{src/commands/thinking-os.ts → dist/commands/thinking-os.js} +35 -58
- package/dist/commands/workflow-debug.d.ts +6 -0
- package/{src/commands/workflow-debug.ts → dist/commands/workflow-debug.js} +13 -33
- package/dist/config/defaults/runtime.d.ts +58 -0
- package/{src/config/defaults/runtime.ts → dist/config/defaults/runtime.js} +4 -41
- package/dist/config/errors.d.ts +86 -0
- package/dist/config/errors.js +107 -0
- package/{src/config/index.ts → dist/config/index.d.ts} +1 -2
- package/dist/config/index.js +7 -0
- package/dist/constants/diagnostician.d.ts +12 -0
- package/{src/constants/diagnostician.ts → dist/constants/diagnostician.js} +0 -1
- package/dist/constants/tools.d.ts +17 -0
- package/dist/constants/tools.js +53 -0
- package/dist/core/__tests__/focus-history.test.d.ts +1 -0
- package/dist/core/__tests__/focus-history.test.js +160 -0
- package/dist/core/bootstrap-rules.d.ts +50 -0
- package/dist/core/bootstrap-rules.js +187 -0
- package/dist/core/code-implementation-storage.d.ts +71 -0
- package/dist/core/code-implementation-storage.js +139 -0
- package/dist/core/config-health.d.ts +27 -0
- package/dist/core/config-health.js +60 -0
- package/dist/core/config-service.d.ts +15 -0
- package/{src/core/config-service.ts → dist/core/config-service.js} +4 -7
- package/dist/core/config.d.ts +111 -0
- package/{src/core/config.ts → dist/core/config.js} +46 -146
- package/dist/core/control-ui-db.d.ts +106 -0
- package/dist/core/control-ui-db.js +309 -0
- package/dist/core/correction-cue-learner.d.ts +33 -0
- package/dist/core/correction-cue-learner.js +184 -0
- package/dist/core/correction-types.d.ts +3 -0
- package/dist/core/correction-types.js +1 -0
- package/dist/core/detection-funnel.d.ts +33 -0
- package/{src/core/detection-funnel.ts → dist/core/detection-funnel.js} +17 -37
- package/dist/core/detection-service.d.ts +15 -0
- package/{src/core/detection-service.ts → dist/core/detection-service.js} +4 -7
- package/dist/core/dictionary-service.d.ts +15 -0
- package/{src/core/dictionary-service.ts → dist/core/dictionary-service.js} +4 -7
- package/dist/core/dictionary.d.ts +38 -0
- package/{src/core/dictionary.ts → dist/core/dictionary.js} +33 -59
- package/dist/core/empathy-keyword-matcher.d.ts +5 -0
- package/dist/core/empathy-keyword-matcher.js +40 -0
- package/dist/core/empathy-types.d.ts +2 -0
- package/dist/core/empathy-types.js +1 -0
- package/dist/core/event-log.d.ts +90 -0
- package/dist/core/event-log.js +702 -0
- package/dist/core/evolution-engine.d.ts +119 -0
- package/dist/core/evolution-engine.js +460 -0
- package/dist/core/evolution-logger.d.ts +137 -0
- package/dist/core/evolution-logger.js +261 -0
- package/dist/core/evolution-migration.d.ts +5 -0
- package/dist/core/evolution-migration.js +65 -0
- package/dist/core/evolution-reducer.d.ts +124 -0
- package/dist/core/evolution-reducer.js +730 -0
- package/dist/core/evolution-types.d.ts +50 -0
- package/dist/core/evolution-types.js +11 -0
- package/dist/core/external-training-contract.d.ts +276 -0
- package/dist/core/external-training-contract.js +269 -0
- package/dist/core/file-store.d.ts +41 -0
- package/dist/core/file-store.js +46 -0
- package/dist/core/focus-history.d.ts +50 -0
- package/dist/core/focus-history.js +574 -0
- package/dist/core/hygiene/tracker.d.ts +22 -0
- package/dist/core/hygiene/tracker.js +110 -0
- package/dist/core/init.d.ts +30 -0
- package/{src/core/init.ts → dist/core/init.js} +87 -118
- package/dist/core/local-worker-routing.d.ts +124 -0
- package/dist/core/local-worker-routing.js +216 -0
- package/dist/core/migration.d.ts +6 -0
- package/{src/core/migration.ts → dist/core/migration.js} +10 -18
- package/dist/core/model-deployment-registry.d.ts +218 -0
- package/dist/core/model-deployment-registry.js +502 -0
- package/dist/core/model-training-registry.d.ts +295 -0
- package/dist/core/model-training-registry.js +474 -0
- package/dist/core/observability.d.ts +40 -0
- package/dist/core/observability.js +164 -0
- package/dist/core/pain-diagnostic-gate.d.ts +36 -0
- package/dist/core/pain-diagnostic-gate.js +105 -0
- package/dist/core/pain.d.ts +87 -0
- package/dist/core/pain.js +223 -0
- package/dist/core/path-resolver.d.ts +60 -0
- package/{src/core/path-resolver.ts → dist/core/path-resolver.js} +41 -131
- package/dist/core/paths.d.ts +60 -0
- package/{src/core/paths.ts → dist/core/paths.js} +4 -13
- package/dist/core/pd-config-loader.d.ts +96 -0
- package/dist/core/pd-config-loader.js +307 -0
- package/dist/core/pd-task-reconciler.d.ts +89 -0
- package/dist/core/pd-task-reconciler.js +262 -0
- package/dist/core/pd-task-service.d.ts +2 -0
- package/dist/core/pd-task-service.js +32 -0
- package/dist/core/pd-task-store.d.ts +5 -0
- package/dist/core/pd-task-store.js +62 -0
- package/dist/core/pd-task-types.d.ts +8 -0
- package/dist/core/pd-task-types.js +2 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.d.ts +1 -0
- package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.js +132 -0
- package/dist/core/principle-compiler/code-validator.d.ts +14 -0
- package/dist/core/principle-compiler/code-validator.js +86 -0
- package/dist/core/principle-compiler/compiler.d.ts +45 -0
- package/dist/core/principle-compiler/compiler.js +287 -0
- package/{src/core/principle-compiler/index.ts → dist/core/principle-compiler/index.d.ts} +0 -1
- package/dist/core/principle-compiler/index.js +10 -0
- package/dist/core/principle-compiler/ledger-registrar.d.ts +28 -0
- package/dist/core/principle-compiler/ledger-registrar.js +95 -0
- package/{src/core/principle-compiler/template-generator.ts → dist/core/principle-compiler/template-generator.d.ts} +0 -1
- package/dist/core/principle-compiler/template-generator.js +7 -0
- package/{src/core/principle-injection.ts → dist/core/principle-injection.d.ts} +1 -7
- package/dist/core/principle-injection.js +10 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.d.ts +15 -0
- package/dist/core/principle-internalization/filesystem-lifecycle-datasource.js +34 -0
- package/dist/core/principle-internalization/lifecycle-read-model.d.ts +17 -0
- package/{src/core/principle-internalization/lifecycle-read-model.ts → dist/core/principle-internalization/lifecycle-read-model.js} +2 -21
- package/dist/core/principle-internalization/lifecycle-refresh.d.ts +2 -0
- package/dist/core/principle-internalization/lifecycle-refresh.js +4 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.d.ts +28 -0
- package/dist/core/principle-internalization/principle-lifecycle-service.js +89 -0
- package/dist/core/principle-training-state.d.ts +47 -0
- package/dist/core/principle-training-state.js +113 -0
- package/dist/core/principle-tree-ledger-adapter.d.ts +32 -0
- package/dist/core/principle-tree-ledger-adapter.js +125 -0
- package/dist/core/principle-tree-ledger.d.ts +82 -0
- package/dist/core/principle-tree-ledger.js +527 -0
- package/dist/core/profile.d.ts +62 -0
- package/dist/core/profile.js +211 -0
- package/dist/core/promotion-gate.d.ts +243 -0
- package/dist/core/promotion-gate.js +554 -0
- package/dist/core/reflection/reflection-context.d.ts +31 -0
- package/dist/core/reflection/reflection-context.js +91 -0
- package/dist/core/replay-engine.d.ts +12 -0
- package/dist/core/replay-engine.js +82 -0
- package/dist/core/risk-calculator.d.ts +22 -0
- package/{src/core/risk-calculator.ts → dist/core/risk-calculator.js} +19 -49
- package/{src/core/rule-host-helpers.ts → dist/core/rule-host-helpers.d.ts} +0 -1
- package/dist/core/rule-host-helpers.js +7 -0
- package/{src/core/rule-host-types.ts → dist/core/rule-host-types.d.ts} +1 -8
- package/dist/core/rule-host-types.js +7 -0
- package/dist/core/rule-host.d.ts +86 -0
- package/dist/core/rule-host.js +311 -0
- package/dist/core/rule-implementation-runtime.d.ts +18 -0
- package/dist/core/rule-implementation-runtime.js +112 -0
- package/dist/core/runtime-v2-prompt-activation-reader.d.ts +22 -0
- package/dist/core/runtime-v2-prompt-activation-reader.js +99 -0
- package/{src/core/schema/db-types.ts → dist/core/schema/db-types.d.ts} +4 -9
- package/dist/core/schema/db-types.js +5 -0
- package/{src/core/schema/index.ts → dist/core/schema/index.d.ts} +1 -10
- package/dist/core/schema/index.js +15 -0
- package/dist/core/schema/migration-runner.d.ts +53 -0
- package/dist/core/schema/migration-runner.js +170 -0
- package/dist/core/schema/migrations/001-init-trajectory.d.ts +6 -0
- package/{src/core/schema/migrations/001-init-trajectory.ts → dist/core/schema/migrations/001-init-trajectory.js} +38 -56
- package/dist/core/schema/migrations/002-init-central.d.ts +5 -0
- package/{src/core/schema/migrations/002-init-central.ts → dist/core/schema/migrations/002-init-central.js} +27 -41
- package/dist/core/schema/migrations/003-init-workflow.d.ts +5 -0
- package/{src/core/schema/migrations/003-init-workflow.ts → dist/core/schema/migrations/003-init-workflow.js} +16 -21
- package/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +8 -0
- package/{src/core/schema/migrations/004-add-thinking-and-gfi.ts → dist/core/schema/migrations/004-add-thinking-and-gfi.js} +19 -27
- package/{src/core/schema/migrations/index.ts → dist/core/schema/migrations/index.d.ts} +1 -16
- package/dist/core/schema/migrations/index.js +27 -0
- package/dist/core/schema/schema-definitions.d.ts +46 -0
- package/{src/core/schema/schema-definitions.ts → dist/core/schema/schema-definitions.js} +242 -291
- package/dist/core/session-tracker.d.ts +119 -0
- package/{src/core/session-tracker.ts → dist/core/session-tracker.js} +96 -239
- package/dist/core/shadow-observation-registry.d.ts +217 -0
- package/dist/core/shadow-observation-registry.js +280 -0
- package/dist/core/surface-guard.d.ts +31 -0
- package/dist/core/surface-guard.js +131 -0
- package/dist/core/system-logger.d.ts +8 -0
- package/{src/core/system-logger.ts → dist/core/system-logger.js} +20 -34
- package/dist/core/thinking-models.d.ts +70 -0
- package/dist/core/thinking-models.js +300 -0
- package/dist/core/thinking-os-parser.d.ts +35 -0
- package/dist/core/thinking-os-parser.js +123 -0
- package/dist/core/trajectory-types.d.ts +220 -0
- package/dist/core/trajectory-types.js +8 -0
- package/dist/core/trajectory.d.ts +242 -0
- package/dist/core/trajectory.js +1500 -0
- package/dist/core/workflow-funnel-loader.d.ts +72 -0
- package/dist/core/workflow-funnel-loader.js +135 -0
- package/dist/core/workspace-context.d.ts +111 -0
- package/{src/core/workspace-context.ts → dist/core/workspace-context.js} +50 -105
- package/dist/core/workspace-dir-validation.d.ts +11 -0
- package/dist/core/workspace-dir-validation.js +37 -0
- package/dist/core/workspace-guidance-migrator.d.ts +12 -0
- package/{src/core/workspace-guidance-migrator.ts → dist/core/workspace-guidance-migrator.js} +21 -59
- package/dist/hooks/after-tool-call-helpers.d.ts +89 -0
- package/dist/hooks/after-tool-call-helpers.js +475 -0
- package/dist/hooks/after-tool-call-types.d.ts +86 -0
- package/dist/hooks/after-tool-call-types.js +13 -0
- package/dist/hooks/gate-block-helper.d.ts +44 -0
- package/dist/hooks/gate-block-helper.js +209 -0
- package/dist/hooks/gate.d.ts +16 -0
- package/dist/hooks/gate.js +381 -0
- package/dist/hooks/lifecycle.d.ts +5 -0
- package/dist/hooks/lifecycle.js +287 -0
- package/dist/hooks/llm.d.ts +13 -0
- package/{src/hooks/llm.ts → dist/hooks/llm.js} +63 -117
- package/dist/hooks/message-sanitize.d.ts +24 -0
- package/dist/hooks/message-sanitize.js +77 -0
- package/dist/hooks/pain.d.ts +33 -0
- package/dist/hooks/pain.js +294 -0
- package/dist/hooks/prompt.d.ts +52 -0
- package/dist/hooks/prompt.js +930 -0
- package/dist/hooks/raw-observation-adapter.d.ts +57 -0
- package/dist/hooks/raw-observation-adapter.js +170 -0
- package/dist/hooks/raw-observation-types.d.ts +62 -0
- package/dist/hooks/raw-observation-types.js +15 -0
- package/dist/hooks/subagent.d.ts +9 -0
- package/{src/hooks/subagent.ts → dist/hooks/subagent.js} +20 -60
- package/dist/hooks/trajectory-collector.d.ts +25 -0
- package/dist/hooks/trajectory-collector.js +225 -0
- package/dist/hooks/trajectory-evidence.d.ts +11 -0
- package/dist/hooks/trajectory-evidence.js +88 -0
- package/dist/hooks/triage-adapter.d.ts +58 -0
- package/{src/hooks/triage-adapter.ts → dist/hooks/triage-adapter.js} +36 -68
- package/dist/hooks/trigger-cooldown-tracker.d.ts +30 -0
- package/dist/hooks/trigger-cooldown-tracker.js +55 -0
- package/dist/i18n/commands.d.ts +26 -0
- package/dist/i18n/commands.js +96 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +829 -0
- package/dist/openclaw-sdk.d.ts +293 -0
- package/dist/openclaw-sdk.js +4 -0
- package/dist/service/central-database.d.ts +138 -0
- package/dist/service/central-database.js +731 -0
- package/dist/service/central-sync-service.d.ts +8 -0
- package/dist/service/central-sync-service.js +71 -0
- package/dist/service/correction-observer-service.d.ts +19 -0
- package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js} +36 -76
- package/dist/service/evolution-dedup.d.ts +27 -0
- package/{src/service/evolution-dedup.ts → dist/service/evolution-dedup.js} +11 -31
- package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts} +15 -62
- package/dist/service/evolution-queue-migration.js +53 -0
- package/dist/service/evolution-worker.d.ts +103 -0
- package/{src/service/evolution-worker.ts → dist/service/evolution-worker.js} +169 -331
- package/dist/service/internalization-auto-consumer-service.d.ts +8 -0
- package/dist/service/internalization-auto-consumer-service.js +322 -0
- package/dist/service/keyword-optimization-service.d.ts +44 -0
- package/dist/service/keyword-optimization-service.js +137 -0
- package/dist/service/phase3-input-filter.d.ts +73 -0
- package/dist/service/phase3-input-filter.js +172 -0
- package/dist/service/queue-io.d.ts +30 -0
- package/dist/service/queue-io.js +79 -0
- package/{src/service/queue-migration.ts → dist/service/queue-migration.d.ts} +6 -45
- package/dist/service/queue-migration.js +56 -0
- package/dist/service/runtime-summary-service.d.ts +158 -0
- package/dist/service/runtime-summary-service.js +636 -0
- package/dist/service/subagent-workflow/subagent-error-utils.d.ts +8 -0
- package/{src/service/subagent-workflow/subagent-error-utils.ts → dist/service/subagent-workflow/subagent-error-utils.js} +3 -6
- package/{src/service/subagent-workflow/types.ts → dist/service/subagent-workflow/types.d.ts} +17 -80
- package/dist/service/subagent-workflow/types.js +11 -0
- package/dist/service/subagent-workflow/workflow-store.d.ts +30 -0
- package/{src/service/subagent-workflow/workflow-store.ts → dist/service/subagent-workflow/workflow-store.js} +43 -108
- package/dist/service/trajectory-service.d.ts +2 -0
- package/dist/service/trajectory-service.js +16 -0
- package/dist/service/workflow-watchdog.d.ts +23 -0
- package/dist/service/workflow-watchdog.js +103 -0
- package/dist/types/event-types.d.ts +2 -0
- package/dist/types/event-types.js +1 -0
- package/dist/types/hygiene-types.d.ts +2 -0
- package/dist/types/hygiene-types.js +1 -0
- package/{src/types/principle-tree-schema.ts → dist/types/principle-tree-schema.d.ts} +2 -25
- package/dist/types/principle-tree-schema.js +24 -0
- package/dist/types/queue.d.ts +2 -0
- package/dist/types/queue.js +1 -0
- package/dist/types/runtime-summary.d.ts +1 -0
- package/dist/types/runtime-summary.js +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.js +16 -0
- package/dist/utils/file-lock.d.ts +68 -0
- package/dist/utils/file-lock.js +310 -0
- package/dist/utils/hashing.d.ts +9 -0
- package/{src/utils/hashing.ts → dist/utils/hashing.js} +4 -6
- package/dist/utils/io.d.ts +11 -0
- package/dist/utils/io.js +174 -0
- package/dist/utils/node-vm-polyfill.d.ts +9 -0
- package/{src/utils/node-vm-polyfill.ts → dist/utils/node-vm-polyfill.js} +0 -2
- package/dist/utils/retry.d.ts +210 -0
- package/dist/utils/retry.js +375 -0
- package/dist/utils/session-key.d.ts +10 -0
- package/{src/utils/session-key.ts → dist/utils/session-key.js} +5 -4
- package/dist/utils/shadow-fingerprint.d.ts +16 -0
- package/dist/utils/shadow-fingerprint.js +34 -0
- package/dist/utils/workspace-resolver.d.ts +82 -0
- package/dist/utils/workspace-resolver.js +288 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -2
- package/templates/workspace/.principles/DECISION_POLICY.json +44 -0
- package/templates/workspace/.principles/PRINCIPLES.md +20 -0
- package/templates/workspace/.principles/PROFILE.json +54 -0
- package/templates/workspace/.principles/PROFILE.schema.json +56 -0
- package/templates/workspace/.principles/THINKING_OS.md +65 -0
- package/templates/workspace/.principles/THINKING_OS_ARCHIVE.md +7 -0
- package/templates/workspace/.principles/THINKING_OS_CANDIDATES.md +9 -0
- package/templates/workspace/.principles/models/_INDEX.md +27 -0
- package/templates/workspace/.principles/models/first_principles.md +62 -0
- package/templates/workspace/.principles/models/marketing_4p.md +52 -0
- package/templates/workspace/.principles/models/porter_five.md +63 -0
- package/templates/workspace/.principles/models/swot.md +60 -0
- package/templates/workspace/.principles/models/user_story_map.md +63 -0
- package/templates/workspace/.state/WORKBOARD.json +4 -0
- package/.dependency-cruiser.json +0 -19
- package/ADVANCED_CONFIG_ZH.md +0 -93
- package/AGENT_INSTALL.md +0 -173
- package/AGENT_INSTALL_EN.md +0 -173
- package/CHANGELOG.md +0 -26
- package/INSTALL.md +0 -254
- package/SKILL.md +0 -63
- package/esbuild.config.js +0 -104
- package/src/commands/archive-impl.ts +0 -147
- package/src/commands/capabilities.ts +0 -89
- package/src/commands/disable-impl.ts +0 -159
- package/src/commands/evolution-status.ts +0 -247
- package/src/commands/export.ts +0 -59
- package/src/commands/focus.ts +0 -523
- package/src/commands/principle-rollback.ts +0 -32
- package/src/commands/promote-impl.ts +0 -254
- package/src/commands/rollback-impl.ts +0 -246
- package/src/commands/samples.ts +0 -65
- package/src/commands/strategy.ts +0 -21
- package/src/config/errors.ts +0 -180
- package/src/constants/tools.ts +0 -62
- package/src/core/AGENTS.md +0 -34
- package/src/core/__tests__/focus-history.test.ts +0 -210
- package/src/core/bootstrap-rules.ts +0 -216
- package/src/core/code-implementation-storage.ts +0 -213
- package/src/core/config-health.ts +0 -72
- package/src/core/control-ui-db.ts +0 -454
- package/src/core/correction-cue-learner.ts +0 -239
- package/src/core/correction-types.ts +0 -16
- package/src/core/empathy-keyword-matcher.ts +0 -64
- package/src/core/empathy-types.ts +0 -18
- package/src/core/event-log.ts +0 -787
- package/src/core/evolution-engine.ts +0 -613
- package/src/core/evolution-logger.ts +0 -357
- package/src/core/evolution-migration.ts +0 -77
- package/src/core/evolution-reducer.ts +0 -891
- package/src/core/evolution-types.ts +0 -110
- package/src/core/external-training-contract.ts +0 -530
- package/src/core/file-store.ts +0 -80
- package/src/core/focus-history.ts +0 -763
- package/src/core/hygiene/tracker.ts +0 -122
- package/src/core/local-worker-routing.ts +0 -337
- package/src/core/model-deployment-registry.ts +0 -724
- package/src/core/model-training-registry.ts +0 -815
- package/src/core/observability.ts +0 -242
- package/src/core/pain-diagnostic-gate.ts +0 -169
- package/src/core/pain.ts +0 -309
- package/src/core/pd-config-loader.ts +0 -400
- package/src/core/pd-task-reconciler.ts +0 -380
- package/src/core/pd-task-service.ts +0 -43
- package/src/core/pd-task-store.ts +0 -78
- package/src/core/pd-task-types.ts +0 -24
- package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +0 -174
- package/src/core/principle-compiler/code-validator.ts +0 -93
- package/src/core/principle-compiler/compiler.ts +0 -327
- package/src/core/principle-compiler/ledger-registrar.ts +0 -116
- package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +0 -42
- package/src/core/principle-internalization/lifecycle-refresh.ts +0 -11
- package/src/core/principle-internalization/principle-lifecycle-service.ts +0 -170
- package/src/core/principle-training-state.ts +0 -177
- package/src/core/principle-tree-ledger-adapter.ts +0 -145
- package/src/core/principle-tree-ledger.ts +0 -725
- package/src/core/profile.ts +0 -228
- package/src/core/promotion-gate.ts +0 -854
- package/src/core/reflection/reflection-context.ts +0 -133
- package/src/core/replay-engine.ts +0 -106
- package/src/core/rule-host.ts +0 -386
- package/src/core/rule-implementation-runtime.ts +0 -145
- package/src/core/runtime-v2-prompt-activation-reader.ts +0 -114
- package/src/core/schema/migration-runner.ts +0 -207
- package/src/core/shadow-observation-registry.ts +0 -508
- package/src/core/surface-guard.ts +0 -188
- package/src/core/thinking-models.ts +0 -377
- package/src/core/thinking-os-parser.ts +0 -165
- package/src/core/trajectory-types.ts +0 -247
- package/src/core/trajectory.ts +0 -1831
- package/src/core/workflow-funnel-loader.ts +0 -195
- package/src/core/workspace-dir-validation.ts +0 -52
- package/src/hooks/AGENTS.md +0 -31
- package/src/hooks/after-tool-call-helpers.ts +0 -601
- package/src/hooks/after-tool-call-types.ts +0 -99
- package/src/hooks/gate-block-helper.ts +0 -265
- package/src/hooks/gate.ts +0 -394
- package/src/hooks/lifecycle.ts +0 -334
- package/src/hooks/message-sanitize.ts +0 -102
- package/src/hooks/pain.ts +0 -358
- package/src/hooks/prompt.ts +0 -1102
- package/src/hooks/raw-observation-adapter.ts +0 -215
- package/src/hooks/raw-observation-types.ts +0 -77
- package/src/hooks/trajectory-collector.ts +0 -253
- package/src/hooks/trajectory-evidence.ts +0 -97
- package/src/hooks/trigger-cooldown-tracker.ts +0 -82
- package/src/i18n/commands.ts +0 -101
- package/src/index.ts +0 -939
- package/src/openclaw-sdk.ts +0 -312
- package/src/service/central-database.ts +0 -936
- package/src/service/central-sync-service.ts +0 -85
- package/src/service/internalization-auto-consumer-service.ts +0 -397
- package/src/service/keyword-optimization-service.ts +0 -169
- package/src/service/phase3-input-filter.ts +0 -237
- package/src/service/queue-io.ts +0 -108
- package/src/service/runtime-summary-service.ts +0 -990
- package/src/service/trajectory-service.ts +0 -16
- package/src/service/workflow-watchdog.ts +0 -125
- package/src/types/event-types.ts +0 -39
- package/src/types/hygiene-types.ts +0 -8
- package/src/types/queue.ts +0 -15
- package/src/types/runtime-summary.ts +0 -5
- package/src/types.ts +0 -53
- package/src/utils/file-lock.ts +0 -394
- package/src/utils/io.ts +0 -176
- package/src/utils/retry.ts +0 -573
- package/src/utils/shadow-fingerprint.ts +0 -42
- package/src/utils/workspace-resolver.ts +0 -393
- package/tests/README.md +0 -120
- package/tests/build-artifacts.test.ts +0 -55
- package/tests/commands/evolution-status.test.ts +0 -511
- package/tests/commands/export.test.ts +0 -78
- package/tests/commands/pain.test.ts +0 -287
- package/tests/commands/samples.test.ts +0 -65
- package/tests/commands/strategy.test.ts +0 -19
- package/tests/commands/thinking-os.test.ts +0 -88
- package/tests/core/bootstrap-rules.test.ts +0 -596
- package/tests/core/code-implementation-storage.test.ts +0 -300
- package/tests/core/code-validator.test.ts +0 -197
- package/tests/core/config-service.test.ts +0 -89
- package/tests/core/config.test.ts +0 -90
- package/tests/core/control-ui-db.test.ts +0 -75
- package/tests/core/core-principle-registry-drift.test.ts +0 -39
- package/tests/core/core-template-guidance.test.ts +0 -21
- package/tests/core/correction-cue-learner.test.ts +0 -345
- package/tests/core/detection-service.test.ts +0 -50
- package/tests/core/dictionary-service.test.ts +0 -116
- package/tests/core/dictionary.test.ts +0 -171
- package/tests/core/empathy-keyword-matcher.test.ts +0 -209
- package/tests/core/event-log.test.ts +0 -484
- package/tests/core/evolution-engine.test.ts +0 -610
- package/tests/core/evolution-logger.test.ts +0 -148
- package/tests/core/evolution-migration.test.ts +0 -374
- package/tests/core/evolution-paths.test.ts +0 -21
- package/tests/core/evolution-reducer.compilation-retry.test.ts +0 -189
- package/tests/core/evolution-reducer.detector-metadata.test.ts +0 -602
- package/tests/core/evolution-types-loop.test.ts +0 -48
- package/tests/core/external-training-contract.test.ts +0 -463
- package/tests/core/file-store.test.ts +0 -102
- package/tests/core/focus-history.test.ts +0 -874
- package/tests/core/init-flatten.test.ts +0 -69
- package/tests/core/init-refactor.test.ts +0 -87
- package/tests/core/init-v1.3.test.ts +0 -46
- package/tests/core/init.test.ts +0 -190
- package/tests/core/ledger-registrar.test.ts +0 -235
- package/tests/core/migration.test.ts +0 -84
- package/tests/core/model-deployment-registry.test.ts +0 -858
- package/tests/core/model-training-registry.test.ts +0 -908
- package/tests/core/observability.test.ts +0 -382
- package/tests/core/pain-diagnostic-gate.test.ts +0 -614
- package/tests/core/pain-score.property.test.ts +0 -19
- package/tests/core/pain.test.ts +0 -132
- package/tests/core/path-resolver.test.ts +0 -57
- package/tests/core/paths-refactor.test.ts +0 -20
- package/tests/core/pd-config-loader.test.ts +0 -407
- package/tests/core/pd-task-store.test.ts +0 -126
- package/tests/core/phase7-rollout-integration.test.ts +0 -477
- package/tests/core/principle-compiler.test.ts +0 -350
- package/tests/core/principle-injection.test.ts +0 -223
- package/tests/core/principle-internalization/deprecated-readiness.test.ts +0 -193
- package/tests/core/principle-internalization/lifecycle-metrics.test.ts +0 -350
- package/tests/core/principle-internalization/lifecycle-routing-policy.test.ts +0 -212
- package/tests/core/principle-internalization/lineage-source-retired.test.ts +0 -56
- package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +0 -189
- package/tests/core/principle-training-state.test.ts +0 -939
- package/tests/core/principle-tree-ledger-adapter.test.ts +0 -253
- package/tests/core/principle-tree-ledger.test.ts +0 -423
- package/tests/core/profile.test.ts +0 -56
- package/tests/core/promotion-gate.test.ts +0 -561
- package/tests/core/queue-purge.test.ts +0 -337
- package/tests/core/reflection-context.test.ts +0 -342
- package/tests/core/regression-v1-9-1.test.ts +0 -266
- package/tests/core/replay-engine.test.ts +0 -165
- package/tests/core/risk-calculator.test.ts +0 -168
- package/tests/core/rule-host-adversarial-output.test.ts +0 -242
- package/tests/core/rule-host-autocorrect-vm.test.ts +0 -163
- package/tests/core/rule-host-helpers.test.ts +0 -120
- package/tests/core/rule-host-resource-bounds.test.ts +0 -231
- package/tests/core/rule-host-sqlite-source.test.ts +0 -720
- package/tests/core/rule-host-unhealthy-visibility.test.ts +0 -261
- package/tests/core/rule-host-validation.test.ts +0 -315
- package/tests/core/rule-implementation-runtime.test.ts +0 -49
- package/tests/core/session-tracker.test.ts +0 -191
- package/tests/core/surface-guard.test.ts +0 -338
- package/tests/core/template-generator.test.ts +0 -101
- package/tests/core/trajectory.test.ts +0 -427
- package/tests/core/workflow-funnel-loader.test.ts +0 -1028
- package/tests/core/workspace-context-factory.test.ts +0 -18
- package/tests/core/workspace-context.test.ts +0 -187
- package/tests/core/workspace-guidance-migrator.test.ts +0 -248
- package/tests/core-anti-growth.test.ts +0 -182
- package/tests/evolution-worker-quarantine.test.ts +0 -400
- package/tests/evolution-worker-slimming.test.ts +0 -380
- package/tests/fixtures/legacy-queue-v1.json +0 -74
- package/tests/fixtures/production-compatibility.test.ts +0 -147
- package/tests/fixtures/production-mock-generator.ts +0 -282
- package/tests/globalSetup.ts +0 -38
- package/tests/hook-workspace-nextaction-contract.test.ts +0 -50
- package/tests/hooks/confirm-first-removal.test.ts +0 -188
- package/tests/hooks/gate-auto-correct-shadow.test.ts +0 -309
- package/tests/hooks/gate-auto-correct.test.ts +0 -664
- package/tests/hooks/gate-block-helper-profile.test.ts +0 -186
- package/tests/hooks/gate-no-path-write-tool.test.ts +0 -171
- package/tests/hooks/gate-rule-host-pipeline.test.ts +0 -230
- package/tests/hooks/gate-rule-host-real-pipeline.test.ts +0 -190
- package/tests/hooks/lifecycle.test.ts +0 -248
- package/tests/hooks/message-sanitize.test.ts +0 -244
- package/tests/hooks/pain-emission-characterization.test.ts +0 -420
- package/tests/hooks/pain.test.ts +0 -795
- package/tests/hooks/prompt-characterization.test.ts +0 -476
- package/tests/hooks/prompt-diet.test.ts +0 -335
- package/tests/hooks/prompt-size-guard.test.ts +0 -319
- package/tests/hooks/raw-observation-adapter.test.ts +0 -312
- package/tests/hooks/runtime-v2-prompt-activation.test.ts +0 -895
- package/tests/hooks/single-gate-pain-admission.test.ts +0 -258
- package/tests/hooks/subagent.test.ts +0 -469
- package/tests/hooks/trajectory-collector.test.ts +0 -269
- package/tests/hooks/trajectory-evidence.test.ts +0 -280
- package/tests/hooks/triage-adapter.test.ts +0 -331
- package/tests/hygiene-tracker.test.ts +0 -77
- package/tests/index.test.ts +0 -142
- package/tests/integration/auto-entry-gate.test.ts +0 -256
- package/tests/integration/gate-real-io.e2e.test.ts +0 -248
- package/tests/integration/m8-legacy-paths.test.ts +0 -63
- package/tests/integration/mvp-surface-registry-guard.test.ts +0 -536
- package/tests/integration/pain-id-chain-e2e.test.ts +0 -313
- package/tests/integration/principle-compiler-e2e.test.ts +0 -403
- package/tests/integration/principle-lifecycle.e2e.test.ts +0 -198
- package/tests/integration/runtime-v2-pain-guard.test.ts +0 -125
- package/tests/integration/trajectory-lifecycle.e2e.test.ts +0 -523
- package/tests/internalization-auto-consumer-gate.test.ts +0 -158
- package/tests/internalization-auto-consumer-service.test.ts +0 -219
- package/tests/plugin-config-resolution-cutover.test.ts +0 -359
- package/tests/queue/async-lock.test.ts +0 -200
- package/tests/runtime-v2-discovery-guard.test.ts +0 -153
- package/tests/scripts/validate-live-path.test.ts +0 -286
- package/tests/service/central-database.test.ts +0 -457
- package/tests/service/correction-observer-service.test.ts +0 -505
- package/tests/service/evolution-worker.compilation-backfill.test.ts +0 -203
- package/tests/service/evolution-worker.correction-observer.test.ts +0 -50
- package/tests/service/evolution-worker.queue.test.ts +0 -296
- package/tests/service/evolution-worker.timeout.test.ts +0 -233
- package/tests/service/keyword-optimization-service.test.ts +0 -121
- package/tests/service/phase3-input-filter.test.ts +0 -289
- package/tests/service/queue-io.test.ts +0 -168
- package/tests/service/queue-migration.test.ts +0 -147
- package/tests/service/runtime-summary-service.test.ts +0 -1100
- package/tests/service/workflow-watchdog.test.ts +0 -281
- package/tests/task-compliance.test.ts +0 -166
- package/tests/test-utils.ts +0 -48
- package/tests/utils/file-lock.test.ts +0 -409
- package/tests/utils/hashing.test.ts +0 -32
- package/tests/utils/hook-workspace-resolver.test.ts +0 -524
- package/tests/utils/io.test.ts +0 -39
- package/tests/utils/retry.test.ts +0 -327
- package/tests/utils/session-key.test.ts +0 -52
- package/tsconfig.json +0 -16
- package/vitest.config.ts +0 -61
- package/vitest.unit.config.ts +0 -12
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Directory Resolution Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for resolving workspace directories across commands and hooks.
|
|
5
|
+
*
|
|
6
|
+
* Hook resolution priority (PRI-259): PD canonical config → OpenClaw fallback.
|
|
7
|
+
* PD canonical sources: PD_WORKSPACE_DIR env → OPENCLAW_WORKSPACE env →
|
|
8
|
+
* principles-disciple.json → ~/.openclaw/workspace default.
|
|
9
|
+
* OpenClaw fallback: ctx.workspaceDir → api.runtime.agent.resolveAgentWorkspaceDir().
|
|
10
|
+
*/
|
|
11
|
+
import { validateWorkspaceDir } from '../core/workspace-dir-validation.js';
|
|
12
|
+
import { resolveWorkspaceDirFromApi } from '../core/path-resolver.js';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import * as os from 'os';
|
|
15
|
+
import * as fs from 'fs';
|
|
16
|
+
/**
|
|
17
|
+
* Resolve workspace directory for command execution.
|
|
18
|
+
*
|
|
19
|
+
* Chain: ctx.workspaceDir → resolveWorkspaceDirFromApi (official OpenClaw API + env vars)
|
|
20
|
+
*
|
|
21
|
+
* CRITICAL: Throws if workspaceDir cannot be resolved. Silent failures are dangerous
|
|
22
|
+
* because commands might operate on the wrong directory.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveCommandWorkspaceDir(api, ctx) {
|
|
25
|
+
// 1. Direct from command context (most reliable — set by OpenClaw for current session)
|
|
26
|
+
if (ctx.workspaceDir) {
|
|
27
|
+
const issue = validateWorkspaceDir(ctx.workspaceDir);
|
|
28
|
+
if (!issue)
|
|
29
|
+
return ctx.workspaceDir;
|
|
30
|
+
// Validation failed — fail immediately, do not silently fall back
|
|
31
|
+
const errorMsg = `[PD:Command] ctx.workspaceDir="${ctx.workspaceDir}" is invalid: ${issue}`;
|
|
32
|
+
api.logger.error(errorMsg);
|
|
33
|
+
throw new Error(errorMsg);
|
|
34
|
+
}
|
|
35
|
+
// 2. Official OpenClaw API → env vars → config file
|
|
36
|
+
const resolved = resolveWorkspaceDirFromApi(api);
|
|
37
|
+
if (resolved)
|
|
38
|
+
return resolved;
|
|
39
|
+
// CRITICAL FAILURE: Cannot determine workspace directory
|
|
40
|
+
const errorMsg = `[PD:Command] CRITICAL: Cannot resolve workspace directory. ` +
|
|
41
|
+
`ctx.workspaceDir="${ctx.workspaceDir ?? ''}" is invalid, and all fallbacks failed. ` +
|
|
42
|
+
`Commands will NOT execute to prevent data corruption.`;
|
|
43
|
+
api.logger.error(errorMsg);
|
|
44
|
+
throw new Error(errorMsg);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve workspace directory for plugin command execution.
|
|
48
|
+
*
|
|
49
|
+
* Chain: ctx.workspaceDir (canonical) → ctx.config.workspaceDir (dispatcher fallback)
|
|
50
|
+
*
|
|
51
|
+
* CRITICAL: Throws if workspaceDir cannot be resolved. Commands must NEVER silently
|
|
52
|
+
* fall back to process.cwd() as this masks configuration errors and can corrupt
|
|
53
|
+
* the wrong workspace.
|
|
54
|
+
*
|
|
55
|
+
* @param ctx - Plugin command context (has workspaceDir + config properties)
|
|
56
|
+
* @param source - Source label for error messages (e.g. 'evolution-status', 'pain')
|
|
57
|
+
*/
|
|
58
|
+
export function resolvePluginCommandWorkspaceDir(ctx, source) {
|
|
59
|
+
// 1. Canonical workspaceDir field (set by OpenClaw command dispatcher)
|
|
60
|
+
if (ctx.workspaceDir) {
|
|
61
|
+
const issue = validateWorkspaceDir(ctx.workspaceDir);
|
|
62
|
+
if (!issue)
|
|
63
|
+
return ctx.workspaceDir;
|
|
64
|
+
throw new Error(`[PD:Command:${source}] ctx.workspaceDir="${ctx.workspaceDir}" is invalid: ${issue}`);
|
|
65
|
+
}
|
|
66
|
+
// 2. Dispatcher may also put workspaceDir in config (legacy/alternative path)
|
|
67
|
+
const configWorkspaceDir = ctx.config?.workspaceDir;
|
|
68
|
+
if (configWorkspaceDir) {
|
|
69
|
+
const issue = validateWorkspaceDir(configWorkspaceDir);
|
|
70
|
+
if (!issue)
|
|
71
|
+
return configWorkspaceDir;
|
|
72
|
+
throw new Error(`[PD:Command:${source}] ctx.config.workspaceDir="${configWorkspaceDir}" is invalid: ${issue}`);
|
|
73
|
+
}
|
|
74
|
+
// CRITICAL FAILURE: No workspace directory available
|
|
75
|
+
throw new Error(`[PD:Command:${source}] CRITICAL: workspaceDir is not set in ctx.workspaceDir or ctx.config.workspaceDir. ` +
|
|
76
|
+
`Commands cannot execute without a valid workspace. Set OPENCLAW_WORKSPACE_DIR env var or ensure the workspace is properly initialized.`);
|
|
77
|
+
}
|
|
78
|
+
const PD_CONFIG_FILENAME = 'principles-disciple.json';
|
|
79
|
+
function loadWorkspaceFromPdConfigFile() {
|
|
80
|
+
const candidates = [
|
|
81
|
+
path.join(os.homedir(), '.openclaw', PD_CONFIG_FILENAME),
|
|
82
|
+
path.join(os.homedir(), '.principles', PD_CONFIG_FILENAME),
|
|
83
|
+
path.join(process.cwd(), PD_CONFIG_FILENAME),
|
|
84
|
+
];
|
|
85
|
+
for (const configPath of candidates) {
|
|
86
|
+
if (!fs.existsSync(configPath))
|
|
87
|
+
continue;
|
|
88
|
+
try {
|
|
89
|
+
const raw = fs.readFileSync(configPath, 'utf8');
|
|
90
|
+
const parsed = JSON.parse(raw);
|
|
91
|
+
if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
92
|
+
if (Object.hasOwn(parsed, 'workspace')) {
|
|
93
|
+
const workspaceValue = parsed['workspace'];
|
|
94
|
+
if (typeof workspaceValue === 'string' && workspaceValue.trim()) {
|
|
95
|
+
return workspaceValue.trim();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
export function resolveCanonicalWorkspaceDir() {
|
|
107
|
+
const pdEnv = process.env.PD_WORKSPACE_DIR;
|
|
108
|
+
if (pdEnv && pdEnv.trim()) {
|
|
109
|
+
const dir = path.resolve(pdEnv.trim());
|
|
110
|
+
if (!validateWorkspaceDir(dir)) {
|
|
111
|
+
return { workspaceDir: dir, source: 'pd_env' };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const ocEnv = process.env.OPENCLAW_WORKSPACE;
|
|
115
|
+
if (ocEnv && ocEnv.trim()) {
|
|
116
|
+
const dir = path.resolve(ocEnv.trim());
|
|
117
|
+
if (!validateWorkspaceDir(dir)) {
|
|
118
|
+
return { workspaceDir: dir, source: 'openclaw_env' };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const configWorkspace = loadWorkspaceFromPdConfigFile();
|
|
122
|
+
if (configWorkspace) {
|
|
123
|
+
const dir = path.resolve(configWorkspace);
|
|
124
|
+
if (!validateWorkspaceDir(dir)) {
|
|
125
|
+
return { workspaceDir: dir, source: 'pd_config' };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const defaultDir = path.join(os.homedir(), '.openclaw', 'workspace');
|
|
129
|
+
if (!validateWorkspaceDir(defaultDir)) {
|
|
130
|
+
return { workspaceDir: defaultDir, source: 'pd_default' };
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Resolve only PD explicit sources (env vars + config file), excluding pd_default.
|
|
136
|
+
* Used by hook resolution to ensure ctx.workspaceDir takes priority over the
|
|
137
|
+
* hardcoded default fallback.
|
|
138
|
+
*/
|
|
139
|
+
function resolveExplicitPdSources() {
|
|
140
|
+
const pdEnv = process.env.PD_WORKSPACE_DIR;
|
|
141
|
+
if (pdEnv && pdEnv.trim()) {
|
|
142
|
+
const dir = path.resolve(pdEnv.trim());
|
|
143
|
+
if (!validateWorkspaceDir(dir)) {
|
|
144
|
+
return { workspaceDir: dir, source: 'pd_env' };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const ocEnv = process.env.OPENCLAW_WORKSPACE;
|
|
148
|
+
if (ocEnv && ocEnv.trim()) {
|
|
149
|
+
const dir = path.resolve(ocEnv.trim());
|
|
150
|
+
if (!validateWorkspaceDir(dir)) {
|
|
151
|
+
return { workspaceDir: dir, source: 'openclaw_env' };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const configWorkspace = loadWorkspaceFromPdConfigFile();
|
|
155
|
+
if (configWorkspace) {
|
|
156
|
+
const dir = path.resolve(configWorkspace);
|
|
157
|
+
if (!validateWorkspaceDir(dir)) {
|
|
158
|
+
return { workspaceDir: dir, source: 'pd_config' };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
function tryResolveFromOpenClawApi(api, agentId) {
|
|
164
|
+
try {
|
|
165
|
+
const resolved = api.runtime?.agent?.resolveAgentWorkspaceDir?.(api.config, agentId ?? 'main');
|
|
166
|
+
if (resolved && !validateWorkspaceDir(resolved)) {
|
|
167
|
+
return resolved;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Fall through
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
export function resolveHookWorkspaceDir(ctx, api, source, options) {
|
|
176
|
+
// Priority 1: PD explicit sources (env vars + config file) — these are
|
|
177
|
+
// owner-declared and intentionally override the live session context.
|
|
178
|
+
const resolveExplicit = options?.explicitPdResolver ?? resolveExplicitPdSources;
|
|
179
|
+
const explicit = resolveExplicit();
|
|
180
|
+
if (explicit) {
|
|
181
|
+
let consistencyWarning;
|
|
182
|
+
if (ctx.workspaceDir) {
|
|
183
|
+
const normalizedCtx = path.resolve(ctx.workspaceDir);
|
|
184
|
+
const normalizedExplicit = path.resolve(explicit.workspaceDir);
|
|
185
|
+
if (normalizedCtx !== normalizedExplicit) {
|
|
186
|
+
consistencyWarning =
|
|
187
|
+
`PD explicit workspace (${explicit.source}: ${explicit.workspaceDir}) ` +
|
|
188
|
+
`differs from OpenClaw context (${ctx.workspaceDir}). Using PD explicit.`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
ok: true,
|
|
193
|
+
workspaceDir: explicit.workspaceDir,
|
|
194
|
+
source: explicit.source,
|
|
195
|
+
consistencyWarning,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Priority 2: OpenClaw live context — the real session workspace.
|
|
199
|
+
// This MUST take priority over pd_default (the hardcoded fallback).
|
|
200
|
+
if (ctx.workspaceDir) {
|
|
201
|
+
const issue = validateWorkspaceDir(ctx.workspaceDir);
|
|
202
|
+
if (!issue) {
|
|
203
|
+
return {
|
|
204
|
+
ok: true,
|
|
205
|
+
workspaceDir: ctx.workspaceDir,
|
|
206
|
+
source: 'openclaw_context',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Priority 3: OpenClaw API resolution
|
|
211
|
+
const apiResolved = tryResolveFromOpenClawApi(api, ctx.agentId);
|
|
212
|
+
if (apiResolved) {
|
|
213
|
+
return {
|
|
214
|
+
ok: true,
|
|
215
|
+
workspaceDir: apiResolved,
|
|
216
|
+
source: 'openclaw_api',
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Priority 4: pd_default (hardcoded fallback) — only when nothing else works
|
|
220
|
+
const resolveCanonical = options?.canonicalResolver ?? resolveCanonicalWorkspaceDir;
|
|
221
|
+
const canonical = resolveCanonical();
|
|
222
|
+
if (canonical && canonical.source === 'pd_default') {
|
|
223
|
+
return {
|
|
224
|
+
ok: true,
|
|
225
|
+
workspaceDir: canonical.workspaceDir,
|
|
226
|
+
source: 'pd_default',
|
|
227
|
+
consistencyWarning: 'Using hardcoded default workspace (~/.openclaw/workspace). ' +
|
|
228
|
+
'Set PD_WORKSPACE_DIR or create ~/.openclaw/principles-disciple.json for stable resolution.',
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
ok: false,
|
|
233
|
+
reason: 'workspace_dir_unresolvable',
|
|
234
|
+
nextAction: 'Set PD_WORKSPACE_DIR environment variable, create ~/.openclaw/principles-disciple.json ' +
|
|
235
|
+
'with a "workspace" field, or ensure OpenClaw provides workspaceDir in hook context.',
|
|
236
|
+
message: `[PD:${source}] Cannot resolve workspace directory from any source. ` +
|
|
237
|
+
`PD explicit config (PD_WORKSPACE_DIR, principles-disciple.json) ` +
|
|
238
|
+
`and OpenClaw fallback (ctx.workspaceDir, api.resolveAgentWorkspaceDir, ~/.openclaw/workspace) all failed.`,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Resolve workspace directory for tool hook execution (safe version).
|
|
243
|
+
* Returns undefined instead of throwing if resolution fails.
|
|
244
|
+
*
|
|
245
|
+
* PRI-259: Uses PD canonical config as primary source, OpenClaw as fallback.
|
|
246
|
+
*/
|
|
247
|
+
export function resolveToolHookWorkspaceDirSafe(ctx, api, source, options) {
|
|
248
|
+
const result = resolveHookWorkspaceDir(ctx, api, source, options);
|
|
249
|
+
if (!result.ok) {
|
|
250
|
+
api.logger.warn(result.message);
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
if (result.consistencyWarning) {
|
|
254
|
+
api.logger.warn(`[PD:${source}] ${result.consistencyWarning}`);
|
|
255
|
+
}
|
|
256
|
+
return result.workspaceDir;
|
|
257
|
+
}
|
|
258
|
+
export class WorkspaceResolutionError extends Error {
|
|
259
|
+
reason;
|
|
260
|
+
nextAction;
|
|
261
|
+
constructor(message, reason, nextAction) {
|
|
262
|
+
super(message);
|
|
263
|
+
this.name = 'WorkspaceResolutionError';
|
|
264
|
+
this.reason = reason;
|
|
265
|
+
this.nextAction = nextAction;
|
|
266
|
+
}
|
|
267
|
+
toJSON() {
|
|
268
|
+
return {
|
|
269
|
+
ok: false,
|
|
270
|
+
reason: this.reason,
|
|
271
|
+
message: this.message,
|
|
272
|
+
nextAction: this.nextAction,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export function resolveWorkspaceDirForRuntimeV2(ctx, api, source) {
|
|
277
|
+
const explicit = ctx.workspaceDir;
|
|
278
|
+
if (!explicit || !explicit.trim()) {
|
|
279
|
+
throw new WorkspaceResolutionError(`No explicit workspace directory for Runtime V2 entrypoint (${source}). ` +
|
|
280
|
+
'Provide workspaceDir in context. Runtime V2 does not use legacy discovery fallback.', 'workspace_dir_missing', 'Ensure the OpenClaw hook context includes workspaceDir, or set PD_WORKSPACE_DIR environment variable.');
|
|
281
|
+
}
|
|
282
|
+
const normalized = path.resolve(explicit.trim());
|
|
283
|
+
const validation = validateWorkspaceDir(normalized);
|
|
284
|
+
if (validation) {
|
|
285
|
+
throw new WorkspaceResolutionError(`workspaceDir validation failed for ${source}: ${validation}`, 'workspace_dir_invalid', 'Provide a valid workspaceDir that is not the home directory, root, or empty.');
|
|
286
|
+
}
|
|
287
|
+
return normalized;
|
|
288
|
+
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "principles-disciple",
|
|
3
3
|
"name": "Principles Disciple",
|
|
4
4
|
"description": "Evolutionary programming agent framework with strategic guardrails and reflection loops.",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.128.0",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onCapabilities": [
|
|
8
8
|
"hook"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "principles-disciple",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.128.0",
|
|
4
4
|
"description": "Native OpenClaw plugin for Principles Disciple",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/bundle.js",
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
},
|
|
15
15
|
"author": "csuzngjh",
|
|
16
16
|
"license": "MIT",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"scripts",
|
|
20
|
+
"templates",
|
|
21
|
+
"openclaw.plugin.json"
|
|
22
|
+
],
|
|
17
23
|
"publishConfig": {
|
|
18
24
|
"access": "public"
|
|
19
25
|
},
|
|
@@ -70,7 +76,7 @@
|
|
|
70
76
|
}
|
|
71
77
|
},
|
|
72
78
|
"dependencies": {
|
|
73
|
-
"@principles/core": "^1.
|
|
79
|
+
"@principles/core": "^1.74.1",
|
|
74
80
|
"@sinclair/typebox": "^0.34.48",
|
|
75
81
|
"better-sqlite3": "^12.9.0",
|
|
76
82
|
"commander": "^12.0.0",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"autonomy": {
|
|
4
|
+
"block_micro_ask_user_question": true,
|
|
5
|
+
"high_impact_score_threshold": 70,
|
|
6
|
+
"medium_impact_score_threshold": 40,
|
|
7
|
+
"allow_force_ask_override": true,
|
|
8
|
+
"high_impact_keywords": [
|
|
9
|
+
"production",
|
|
10
|
+
"database migration",
|
|
11
|
+
"schema",
|
|
12
|
+
"security",
|
|
13
|
+
"compliance",
|
|
14
|
+
"breaking change",
|
|
15
|
+
"cost",
|
|
16
|
+
"budget",
|
|
17
|
+
"architecture",
|
|
18
|
+
"data loss",
|
|
19
|
+
"permission",
|
|
20
|
+
"privacy",
|
|
21
|
+
"delete",
|
|
22
|
+
"irreversible",
|
|
23
|
+
"rollout",
|
|
24
|
+
"rollback"
|
|
25
|
+
],
|
|
26
|
+
"micro_keywords": [
|
|
27
|
+
"rename",
|
|
28
|
+
"variable",
|
|
29
|
+
"format",
|
|
30
|
+
"style",
|
|
31
|
+
"spacing",
|
|
32
|
+
"comment",
|
|
33
|
+
"minor",
|
|
34
|
+
"typo",
|
|
35
|
+
"wording",
|
|
36
|
+
"small refactor",
|
|
37
|
+
"which name"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"user_profile": {
|
|
41
|
+
"domain_low_threshold": 0,
|
|
42
|
+
"ask_on_medium_for_low_expertise": true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Principles
|
|
2
|
+
|
|
3
|
+
可进化编程智能体的原则库(Principle Repository)。
|
|
4
|
+
|
|
5
|
+
## 格式说明
|
|
6
|
+
|
|
7
|
+
每条原则使用以下格式:
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
### P-XX: <One-line principle>
|
|
11
|
+
- Trigger: <什么情况下触发>
|
|
12
|
+
- Constraint (Must/Forbidden): <必须/禁止做什么>
|
|
13
|
+
- Verification: <如何验证>
|
|
14
|
+
- Exceptions: <什么情况下例外>
|
|
15
|
+
- Source: <来源:Issue Log #XX / Date / External Reference>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
<!-- 原则从这里开始记录 -->
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"audit_level": "high",
|
|
3
|
+
"risk_paths": [
|
|
4
|
+
"AGENTS.md",
|
|
5
|
+
"SOUL.md",
|
|
6
|
+
"IDENTITY.md",
|
|
7
|
+
"USER.md",
|
|
8
|
+
"docs/PRINCIPLES.md",
|
|
9
|
+
".principles/PROFILE.json",
|
|
10
|
+
"docs/PROFILE.json"
|
|
11
|
+
],
|
|
12
|
+
"gate": {
|
|
13
|
+
"require_plan_for_risk_paths": true,
|
|
14
|
+
"require_audit_before_write": true
|
|
15
|
+
},
|
|
16
|
+
"progressive_gate": {
|
|
17
|
+
"enabled": true,
|
|
18
|
+
"plan_approvals": {
|
|
19
|
+
"enabled": true,
|
|
20
|
+
"allowed_patterns": [
|
|
21
|
+
"AGENTS.md",
|
|
22
|
+
"SOUL.md",
|
|
23
|
+
"IDENTITY.md",
|
|
24
|
+
"USER.md",
|
|
25
|
+
"docs/PRINCIPLES.md",
|
|
26
|
+
".principles/PROFILE.json",
|
|
27
|
+
"docs/PROFILE.json",
|
|
28
|
+
"docs/okr/**"
|
|
29
|
+
],
|
|
30
|
+
"allowed_operations": [
|
|
31
|
+
"write",
|
|
32
|
+
"edit",
|
|
33
|
+
"replace"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"tests": {
|
|
38
|
+
"on_change": "smoke",
|
|
39
|
+
"commands": {
|
|
40
|
+
"smoke": "",
|
|
41
|
+
"unit": ""
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"permissions": {
|
|
45
|
+
"deny_skip_tests": true,
|
|
46
|
+
"deny_unsafe_db_ops": true
|
|
47
|
+
},
|
|
48
|
+
"custom_guards": [
|
|
49
|
+
{
|
|
50
|
+
"pattern": "Edit.*SYSTEM_CAPABILITIES",
|
|
51
|
+
"message": "⚠️ 确认:所有工具都已实际验证安装了吗?请在标记为 'installed: true' 之前运行验证命令。"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "System Profile Schema",
|
|
4
|
+
"description": "Schema for the evolutionary agent framework configuration (The Interception Database)",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"audit_level": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"enum": ["low", "medium", "high"],
|
|
10
|
+
"default": "medium"
|
|
11
|
+
},
|
|
12
|
+
"risk_paths": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Project-relative directory or file paths that require mandatory gating."
|
|
17
|
+
},
|
|
18
|
+
"default": []
|
|
19
|
+
},
|
|
20
|
+
"gate": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"require_plan_for_risk_paths": { "type": "boolean", "default": true },
|
|
24
|
+
"require_audit_before_write": { "type": "boolean", "default": true },
|
|
25
|
+
"require_reviewer_after_write": { "type": "boolean", "default": true }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"tests": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"on_change": { "type": "string", "enum": ["smoke", "unit", "full"], "default": "smoke" },
|
|
32
|
+
"on_risk_change": { "type": "string", "enum": ["smoke", "unit", "full"], "default": "unit" },
|
|
33
|
+
"commands": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": { "type": "string" },
|
|
36
|
+
"description": "Key-value pairs mapping test levels to shell commands."
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"permissions": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"properties": {
|
|
43
|
+
"deny_skip_tests": { "type": "boolean", "default": true },
|
|
44
|
+
"deny_unsafe_db_ops": { "type": "boolean", "default": true }
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"output": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"properties": {
|
|
50
|
+
"verbosity": { "type": "string", "enum": ["concise", "balanced", "detailed"], "default": "balanced" },
|
|
51
|
+
"show_evidence": { "type": "boolean", "default": true }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": ["risk_paths", "gate", "tests"]
|
|
56
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
# Thinking OS — 智能体思维操作系统
|
|
3
|
+
此文件通过 XML 结构化注入给大语言模型,定义其元认知框架。
|
|
4
|
+
大模型对 XML 标签极其敏感,此结构旨在提升指令遵循度。
|
|
5
|
+
-->
|
|
6
|
+
<thinking_os_core_directives>
|
|
7
|
+
<system_role>
|
|
8
|
+
你是由 Principles Disciple 框架驱动的演化型编程智能体。你的核心使命是将“痛苦”(失败、报错、挫折)转化为系统的演化。
|
|
9
|
+
以下指令是绝对的元认知框架。它们决定了你如何思考和行动。
|
|
10
|
+
违反这些指令将被视为严重的系统故障。
|
|
11
|
+
</system_role>
|
|
12
|
+
|
|
13
|
+
<!-- 认知与记忆防线 (Cognition & Memory Defense) -->
|
|
14
|
+
<directive id="T-01" name="MAP_BEFORE_TERRITORY">
|
|
15
|
+
<trigger>在执行任何文件搜索、阅读代码或进行修改之前。</trigger>
|
|
16
|
+
<must>达到 100% 的上下文确定性。阅读架构文档(`docs/`)或执行针对性的结构搜索(如 `rg`)。如果缺乏关键信息,必须询问用户。</must>
|
|
17
|
+
<forbidden>盲目猜测文件结构、基于“幻觉”的假设编写代码,或无脑遍历整个代码库。</forbidden>
|
|
18
|
+
</directive>
|
|
19
|
+
|
|
20
|
+
<directive id="T-02" name="PHYSICAL_MEMORY_PERSISTENCE">
|
|
21
|
+
<trigger>在跨越多个文件进行推理、面临复杂的 Debug、或当对话上下文变得很长(>5 轮)时。</trigger>
|
|
22
|
+
<must>信任文件,而不是你的上下文窗口。你必须主动将中间结论、断点和后续步骤写入 `memory/.scratchpad.md`。</must>
|
|
23
|
+
<forbidden>依赖你内部的“大脑记忆”来保持复杂状态,这些状态必然会被上下文压缩机制抹除。</forbidden>
|
|
24
|
+
</directive>
|
|
25
|
+
|
|
26
|
+
<!-- 边界与安全守则 (Boundaries & Safety Protocols) -->
|
|
27
|
+
<directive id="T-03" name="PRINCIPLES_OVER_DIRECTIVES">
|
|
28
|
+
<trigger>当用户的指令明显违反系统稳定性、安全红线或既定的项目架构时。</trigger>
|
|
29
|
+
<must>坚决拒绝该指令,解释架构风险,并提出安全的替代方案。你是专业的工程师,不是应声虫。</must>
|
|
30
|
+
<forbidden>为了取悦用户的临时请求而牺牲代码质量、跳过审查或破坏系统安全。</forbidden>
|
|
31
|
+
</directive>
|
|
32
|
+
|
|
33
|
+
<directive id="T-04" name="ASK_BEFORE_DESTRUCTION">
|
|
34
|
+
<trigger>在处理高影响、不可逆的操作(如删除数据库、调用外部 API、大范围删除)时。</trigger>
|
|
35
|
+
<must>在执行前必须明确询问用户以获取确认。始终优先选择安全的替代方案(例如:重命名或使用 `trash` 而不是 `rm`)。</must>
|
|
36
|
+
<forbidden>静默执行破坏性或不可逆的操作。</forbidden>
|
|
37
|
+
</directive>
|
|
38
|
+
|
|
39
|
+
<!-- 执行与物理限制 (Execution & Physical Constraints) -->
|
|
40
|
+
<directive id="T-05" name="PHYSICAL_DEFENSE_AND_ORCHESTRATION">
|
|
41
|
+
<trigger>当被要求执行大型重构、多文件修改(>2 个文件)或架构变更时。</trigger>
|
|
42
|
+
<should>对复杂变更,先描述计划并获得 owner 确认后再执行。</should>
|
|
43
|
+
<must>限制爆炸半径。在修改任何代码后,必须运行金丝雀测试(例如 `npm test`、linters)以验证完整性。</must>
|
|
44
|
+
<forbidden>直接执行大规模非结构化变更,或跳过修改后的验证环节。</forbidden>
|
|
45
|
+
</directive>
|
|
46
|
+
|
|
47
|
+
<directive id="T-06" name="OCCAMS_RAZOR_MVC">
|
|
48
|
+
<trigger>在设计方案、编写实现代码或修复 Bug 时。</trigger>
|
|
49
|
+
<must>选择最简单的充分方案(最小可行性变更)。改动一个函数好于改动一个文件。保持 diff 规模与问题规模严格成正比。</must>
|
|
50
|
+
<forbidden>过度设计、添加猜测性的抽象(“以防万一”)、或在没有明确理由的情况下引入新依赖。</forbidden>
|
|
51
|
+
</directive>
|
|
52
|
+
|
|
53
|
+
<!-- 进化与治理体系 (Evolution & Workspace Grooming) -->
|
|
54
|
+
<directive id="T-07" name="PAIN_DRIVEN_EVOLUTION">
|
|
55
|
+
<trigger>当工具失败、出现编译错误或系统 Hook 拦截了你的操作时。</trigger>
|
|
56
|
+
<must>立即暂停。将 Hook 拦截视为不可逾越的物理法则,而不是 Bug。使用“5-Whys”方法分析根本原因。根据错误信息调整你的策略。</must>
|
|
57
|
+
<forbidden>连续重复尝试相同的失败命令,或使用敷衍的套话(如“我为我的疏忽道歉”)来掩盖系统性缺陷。</forbidden>
|
|
58
|
+
</directive>
|
|
59
|
+
|
|
60
|
+
<directive id="T-08" name="ZERO_ENTROPY_GROOMING">
|
|
61
|
+
<trigger>在创建文件、编写日志或完成一个任务会话时。</trigger>
|
|
62
|
+
<must>保持极致的数字洁癖。项目根目录是神圣的。所有命名必须严格使用 `kebab-case`。任务结束后清理所有的测试脚本和 Debug 遗留物。</must>
|
|
63
|
+
<forbidden>在项目根目录下随意创建临时文件(如 `test.txt`、`temp.md`、`debug.log`)。</forbidden>
|
|
64
|
+
</directive>
|
|
65
|
+
</thinking_os_core_directives>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 扩展思维模型索引
|
|
2
|
+
|
|
3
|
+
> 根据任务需要,使用 `read` 工具加载一个或多个模型进行组合分析。
|
|
4
|
+
|
|
5
|
+
## 可用模型
|
|
6
|
+
|
|
7
|
+
| ID | 名称 | 适用场景 | 文件路径 |
|
|
8
|
+
|----|------|----------|----------|
|
|
9
|
+
| MARKETING_4P | 营销4P模型 | 营销策略、市场规划、产品推广 | docs/models/marketing_4p.md |
|
|
10
|
+
| SWOT | SWOT分析 | 战略分析、竞争评估、决策支持 | docs/models/swot.md |
|
|
11
|
+
| PORTER_FIVE | 波特五力模型 | 行业分析、竞争格局、市场进入 | docs/models/porter_five.md |
|
|
12
|
+
| FIRST_PRINCIPLES | 第一性原理 | 复杂问题拆解、创新思考 | docs/models/first_principles.md |
|
|
13
|
+
| USER_STORY_MAP | 用户故事地图 | 产品规划、需求分析、用户体验 | docs/models/user_story_map.md |
|
|
14
|
+
|
|
15
|
+
## 使用方式
|
|
16
|
+
|
|
17
|
+
1. 分析任务上下文,判断需要哪些思维模型
|
|
18
|
+
2. 使用 `read` 工具加载选中的模型文件
|
|
19
|
+
3. 可以加载多个模型进行组合分析
|
|
20
|
+
4. 如果没有匹配的模型,直接使用元认知模型(T-01 到 T-09)
|
|
21
|
+
|
|
22
|
+
## 模型组合建议
|
|
23
|
+
|
|
24
|
+
- **营销策略分析**:MARKETING_4P + SWOT
|
|
25
|
+
- **市场进入决策**:PORTER_FIVE + SWOT
|
|
26
|
+
- **产品创新**:FIRST_PRINCIPLES + USER_STORY_MAP
|
|
27
|
+
- **竞争分析**:SWOT + PORTER_FIVE
|