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
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Code Validator — Validates LLM-generated rule implementation code
|
|
3
|
-
*
|
|
4
|
-
* CHECKS:
|
|
5
|
-
* 1. Syntax: code parses without errors (VM)
|
|
6
|
-
* 2. Forbidden patterns: delegates to core checkForbiddenPatterns (PRI-44)
|
|
7
|
-
* 3. Export check: sandbox loads and exports evaluate + meta (VM)
|
|
8
|
-
* 4. Return shape: evaluate(mockInput) returns { matched: boolean } (VM)
|
|
9
|
-
*
|
|
10
|
-
* PRI-44: Forbidden pattern detection extracted to @principles/core.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { nodeVm } from '../../utils/node-vm-polyfill.js';
|
|
14
|
-
import { loadRuleImplementationModule } from '../rule-implementation-runtime.js';
|
|
15
|
-
import { checkForbiddenPatterns, type ValidationResult } from '@principles/core/runtime-v2';
|
|
16
|
-
|
|
17
|
-
const MOCK_INPUT = {
|
|
18
|
-
action: {
|
|
19
|
-
toolName: 'bash',
|
|
20
|
-
normalizedPath: '/tmp/test.ts',
|
|
21
|
-
paramsSummary: { command: 'echo test' },
|
|
22
|
-
},
|
|
23
|
-
workspace: { isRiskPath: false, planStatus: 'NONE', hasPlanFile: false },
|
|
24
|
-
session: { sessionId: 'test', currentGfi: 0, recentThinking: false },
|
|
25
|
-
evolution: { epTier: 0 },
|
|
26
|
-
derived: { estimatedLineChanges: 0, bashRisk: 'safe' },
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export type { ValidationResult } from '@principles/core/runtime-v2';
|
|
30
|
-
|
|
31
|
-
export function validateGeneratedCode(code: string): ValidationResult {
|
|
32
|
-
const errors: string[] = [];
|
|
33
|
-
const warnings: string[] = [];
|
|
34
|
-
|
|
35
|
-
// --- Check 1: Syntax ---
|
|
36
|
-
const normalized = code
|
|
37
|
-
.replace(/export\s+const\s+/g, 'const ')
|
|
38
|
-
.replace(/export\s+function\s+/g, 'function ');
|
|
39
|
-
try {
|
|
40
|
-
new nodeVm.Script(normalized, { filename: 'code-validator-syntax.js' });
|
|
41
|
-
} catch (err) {
|
|
42
|
-
errors.push(`Syntax error: ${(err as Error).message}`);
|
|
43
|
-
return { valid: false, errors, warnings };
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// --- Check 2: Forbidden patterns (delegated to core) ---
|
|
47
|
-
const forbiddenLabels = checkForbiddenPatterns(code);
|
|
48
|
-
for (const label of forbiddenLabels) {
|
|
49
|
-
errors.push(`Forbidden pattern: ${label}`);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (errors.length > 0) {
|
|
53
|
-
return { valid: false, errors, warnings };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// --- Check 3: Sandbox load + export check ---
|
|
57
|
-
let moduleExports: { meta?: unknown; evaluate?: unknown };
|
|
58
|
-
try {
|
|
59
|
-
moduleExports = loadRuleImplementationModule(code, 'code-validator-candidate.js');
|
|
60
|
-
} catch (err) {
|
|
61
|
-
errors.push(`Sandbox compilation error: ${(err as Error).message}`);
|
|
62
|
-
return { valid: false, errors, warnings };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!moduleExports.meta || typeof moduleExports.meta !== 'object') {
|
|
66
|
-
errors.push('Missing export: meta');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (typeof moduleExports.evaluate !== 'function') {
|
|
70
|
-
errors.push('Missing export: evaluate');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (errors.length > 0) {
|
|
74
|
-
return { valid: false, errors, warnings };
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// --- Check 4: Return shape ---
|
|
78
|
-
// evaluate() throwing on mock input is acceptable — the function exists and has the
|
|
79
|
-
// right signature, it just can't handle our generic mock data.
|
|
80
|
-
// Track as a non-blocking warning so operators know the rule may be fragile.
|
|
81
|
-
try {
|
|
82
|
-
const result = (moduleExports.evaluate as (input: unknown) => unknown)(MOCK_INPUT);
|
|
83
|
-
if (!result || typeof result !== 'object') {
|
|
84
|
-
errors.push('evaluate must return an object');
|
|
85
|
-
} else if (typeof (result as Record<string, unknown>).matched !== 'boolean') {
|
|
86
|
-
errors.push('evaluate must return { matched: boolean }');
|
|
87
|
-
}
|
|
88
|
-
} catch (evalWarning) {
|
|
89
|
-
warnings.push(`evaluate() threw on mock input: ${(evalWarning as Error).message}`);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return { valid: errors.length === 0, errors, warnings };
|
|
93
|
-
}
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PrincipleCompiler — Orchestrator (Task 5)
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the full compilation flow:
|
|
5
|
-
* ReflectionContextCollector.collect() → extract patterns → generateFromTemplate()
|
|
6
|
-
* → validateGeneratedCode() → [replay validation] → registerCompiledRule()
|
|
7
|
-
*
|
|
8
|
-
* DESIGN DECISIONS:
|
|
9
|
-
* - extractPatterns infers toolName from pain event reasons and session tool calls
|
|
10
|
-
* - Groups by toolName into PainPattern objects
|
|
11
|
-
* - If no patterns can be extracted, returns a 'no patterns' failure
|
|
12
|
-
* - PRI-115: Replay validation gate runs after code validation, before registration
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { ReflectionContextCollector } from '../reflection/reflection-context.js';
|
|
16
|
-
import { validateGeneratedCode } from './code-validator.js';
|
|
17
|
-
import { generateFromTemplate, type PainPattern } from './template-generator.js';
|
|
18
|
-
import { registerCompiledRule } from './ledger-registrar.js';
|
|
19
|
-
import { createImplementationAssetDir } from '../code-implementation-storage.js';
|
|
20
|
-
import type { TrajectoryDatabase } from '../trajectory.js';
|
|
21
|
-
import type { CompileResult } from '@principles/core/runtime-v2';
|
|
22
|
-
import { loadRuleImplementationModule } from '../rule-implementation-runtime.js';
|
|
23
|
-
import { createGoldenTraceFixture, type GoldenTraceCase } from '@principles/core/runtime-v2';
|
|
24
|
-
import { replayGoldenTrace, type ReplayEvaluateFn } from '@principles/core/runtime-v2';
|
|
25
|
-
|
|
26
|
-
// Re-export CompileResult from core
|
|
27
|
-
export type { CompileResult } from '@principles/core/runtime-v2';
|
|
28
|
-
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
// Constants
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
|
|
33
|
-
/** Tool names to look for when scanning text for tool references */
|
|
34
|
-
const KNOWN_TOOLS = ['bash', 'write', 'edit', 'read', 'grep', 'glob', 'mcp'] as const;
|
|
35
|
-
|
|
36
|
-
/** Regex to extract file paths from reason text */
|
|
37
|
-
const PATH_REGEX = /(?:\/[\w.-]+){2,}/;
|
|
38
|
-
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// Pattern Extraction
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Extract PainPatterns from a ReflectionContext.
|
|
45
|
-
*
|
|
46
|
-
* Strategy:
|
|
47
|
-
* 1. Scan pain event reasons for known tool names
|
|
48
|
-
* 2. Extract file paths from reason text as pathRegex candidates
|
|
49
|
-
* 3. Cross-reference with sessionSnapshot toolCalls for failed tool calls
|
|
50
|
-
* 4. Group by toolName into PainPattern objects
|
|
51
|
-
*/
|
|
52
|
-
function extractPatterns(context: {
|
|
53
|
-
painEvents: Array<{ reason: string | null; source: string }>;
|
|
54
|
-
sessionSnapshot: {
|
|
55
|
-
toolCalls: Array<{
|
|
56
|
-
toolName: string;
|
|
57
|
-
outcome: string;
|
|
58
|
-
filePath: string | null;
|
|
59
|
-
errorType: string | null;
|
|
60
|
-
}>;
|
|
61
|
-
} | null;
|
|
62
|
-
}): PainPattern[] {
|
|
63
|
-
const toolNameMap = new Map<string, PainPattern>();
|
|
64
|
-
|
|
65
|
-
// 1. Extract from pain event reasons
|
|
66
|
-
for (const pe of context.painEvents) {
|
|
67
|
-
const text = pe.reason ?? pe.source ?? '';
|
|
68
|
-
const toolName = inferToolName(text);
|
|
69
|
-
if (!toolName) continue;
|
|
70
|
-
|
|
71
|
-
const pathRegex = extractPathRegex(text);
|
|
72
|
-
|
|
73
|
-
if (!toolNameMap.has(toolName)) {
|
|
74
|
-
toolNameMap.set(toolName, { toolName });
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const pattern = toolNameMap.get(toolName)!;
|
|
78
|
-
if (pathRegex && !pattern.pathRegex) {
|
|
79
|
-
pattern.pathRegex = pathRegex;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// 2. Extract from session snapshot tool calls (failed ones)
|
|
84
|
-
if (context.sessionSnapshot?.toolCalls) {
|
|
85
|
-
for (const tc of context.sessionSnapshot.toolCalls) {
|
|
86
|
-
// Focus on failed/blocked tool calls as they indicate pain
|
|
87
|
-
if (tc.outcome !== 'failure' && tc.outcome !== 'blocked') continue;
|
|
88
|
-
|
|
89
|
-
const toolName = tc.toolName;
|
|
90
|
-
if (!toolNameMap.has(toolName)) {
|
|
91
|
-
const pattern: PainPattern = { toolName };
|
|
92
|
-
if (tc.errorType) {
|
|
93
|
-
pattern.errorType = tc.errorType;
|
|
94
|
-
}
|
|
95
|
-
if (tc.filePath) {
|
|
96
|
-
pattern.pathRegex = escapeRegex(tc.filePath);
|
|
97
|
-
}
|
|
98
|
-
toolNameMap.set(toolName, pattern);
|
|
99
|
-
} else {
|
|
100
|
-
const existing = toolNameMap.get(toolName)!;
|
|
101
|
-
if (tc.errorType && !existing.errorType) {
|
|
102
|
-
existing.errorType = tc.errorType;
|
|
103
|
-
}
|
|
104
|
-
if (tc.filePath && !existing.pathRegex) {
|
|
105
|
-
existing.pathRegex = escapeRegex(tc.filePath);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return Array.from(toolNameMap.values());
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Infer tool name from text by checking for known tool names.
|
|
116
|
-
* Returns the first matching known tool name, or null if none found.
|
|
117
|
-
*
|
|
118
|
-
* Uses negative lookbehind to avoid matching natural-language uses:
|
|
119
|
-
* - "please read the error" → read is a verb, not a tool reference
|
|
120
|
-
* - "could write to file" → write is a verb, not a tool reference
|
|
121
|
-
* Tool references in pain events typically appear near words like
|
|
122
|
-
* "tool", "call", "command", "failed", "via", "using", etc.
|
|
123
|
-
*/
|
|
124
|
-
function inferToolName(text: string): string | null {
|
|
125
|
-
const lower = text.toLowerCase();
|
|
126
|
-
for (const tool of KNOWN_TOOLS) {
|
|
127
|
-
// Match as a standalone word but exclude common natural-language patterns
|
|
128
|
-
// e.g., "bash" in "bash" or "bash command" but not in "ambush"
|
|
129
|
-
// and not in "please read" or "could write" where it's a verb
|
|
130
|
-
const regex = new RegExp(`(?<!please |could |should |would )\\b${tool}\\b`);
|
|
131
|
-
if (regex.test(lower)) {
|
|
132
|
-
return tool;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Extract a file path from text and return it as an escaped regex pattern.
|
|
140
|
-
* Returns the first path found, or null.
|
|
141
|
-
*/
|
|
142
|
-
function extractPathRegex(text: string): string | null {
|
|
143
|
-
const match = PATH_REGEX.exec(text);
|
|
144
|
-
if (match) {
|
|
145
|
-
return escapeRegex(match[0]);
|
|
146
|
-
}
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Escape special regex characters in a string.
|
|
152
|
-
*/
|
|
153
|
-
function escapeRegex(str: string): string {
|
|
154
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// ---------------------------------------------------------------------------
|
|
158
|
-
// PrincipleCompiler
|
|
159
|
-
// ---------------------------------------------------------------------------
|
|
160
|
-
|
|
161
|
-
export class PrincipleCompiler {
|
|
162
|
-
private readonly stateDir: string;
|
|
163
|
-
private readonly collector: ReflectionContextCollector;
|
|
164
|
-
|
|
165
|
-
constructor(stateDir: string, trajectory: TrajectoryDatabase) {
|
|
166
|
-
this.stateDir = stateDir;
|
|
167
|
-
this.collector = new ReflectionContextCollector(stateDir, trajectory);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Compile a single principle into an auto-generated rule.
|
|
172
|
-
*
|
|
173
|
-
* Flow:
|
|
174
|
-
* 1. Collect reflection context
|
|
175
|
-
* 2. Extract pain patterns
|
|
176
|
-
* 3. Generate code from template
|
|
177
|
-
* 4. Validate generated code
|
|
178
|
-
* 4.5. Replay validation against GoldenTrace (PRI-115)
|
|
179
|
-
* 5. Register in ledger
|
|
180
|
-
*/
|
|
181
|
-
compileOne(principleId: string): CompileResult {
|
|
182
|
-
// Step 1: Collect context
|
|
183
|
-
const context = this.collector.collect(principleId);
|
|
184
|
-
if (!context) {
|
|
185
|
-
return { success: false, principleId, reason: 'no context' };
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Step 2: Extract patterns
|
|
189
|
-
const patterns = extractPatterns({
|
|
190
|
-
painEvents: context.painEvents,
|
|
191
|
-
sessionSnapshot: context.sessionSnapshot,
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Step 3: Generate code
|
|
195
|
-
const coversCondition = context.principle.triggerPattern || context.principle.text;
|
|
196
|
-
const code = generateFromTemplate(principleId, coversCondition, patterns);
|
|
197
|
-
if (!code) {
|
|
198
|
-
return { success: false, principleId, reason: 'no patterns' };
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Step 4: Validate
|
|
202
|
-
const validation = validateGeneratedCode(code);
|
|
203
|
-
if (!validation.valid) {
|
|
204
|
-
return {
|
|
205
|
-
success: false,
|
|
206
|
-
principleId,
|
|
207
|
-
reason: `validation failed: ${validation.errors.join('; ')}`,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Step 4.5: Replay validation against GoldenTrace (PRI-115)
|
|
212
|
-
const replayCases = this.buildGoldenTraceCases(patterns, context);
|
|
213
|
-
if (replayCases.length > 0) {
|
|
214
|
-
let moduleExports: { evaluate?: unknown };
|
|
215
|
-
try {
|
|
216
|
-
moduleExports = loadRuleImplementationModule(code, `replay-${principleId}.js`);
|
|
217
|
-
} catch (err) {
|
|
218
|
-
return {
|
|
219
|
-
success: false,
|
|
220
|
-
principleId,
|
|
221
|
-
reason: `module_load_error: ${(err as Error).message}`,
|
|
222
|
-
code,
|
|
223
|
-
degraded: true,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
if (typeof moduleExports.evaluate !== 'function') {
|
|
228
|
-
return { success: false, principleId, reason: 'replay: no evaluate export', degraded: true };
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
try {
|
|
232
|
-
const evaluateFn = moduleExports.evaluate as ReplayEvaluateFn;
|
|
233
|
-
const replayResult = replayGoldenTrace(evaluateFn, replayCases);
|
|
234
|
-
if (!replayResult.passed) {
|
|
235
|
-
return {
|
|
236
|
-
success: false,
|
|
237
|
-
principleId,
|
|
238
|
-
reason: 'replay_validation_failed',
|
|
239
|
-
code,
|
|
240
|
-
replayResult,
|
|
241
|
-
degraded: true,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
} catch (err) {
|
|
245
|
-
return {
|
|
246
|
-
success: false,
|
|
247
|
-
principleId,
|
|
248
|
-
reason: `replay_error: ${(err as Error).message}`,
|
|
249
|
-
code,
|
|
250
|
-
degraded: true,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
// Step 5: Register
|
|
255
|
-
const registration = registerCompiledRule(this.stateDir, {
|
|
256
|
-
principleId,
|
|
257
|
-
codeContent: code,
|
|
258
|
-
coversCondition,
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
// Step 6: Persist code to disk so RuleHost can load it
|
|
262
|
-
createImplementationAssetDir(this.stateDir, registration.implementationId, '1', {
|
|
263
|
-
entrySource: code,
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
return {
|
|
267
|
-
success: true,
|
|
268
|
-
principleId,
|
|
269
|
-
ruleId: registration.ruleId,
|
|
270
|
-
implementationId: registration.implementationId,
|
|
271
|
-
code,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Build GoldenTrace test cases from extracted pain patterns.
|
|
277
|
-
*
|
|
278
|
-
* Generates synthetic negative/positive parameter pairs based on whether
|
|
279
|
-
* the pattern targets commands (commandRegex) or paths (pathRegex).
|
|
280
|
-
* Returns an empty array when no patterns are available.
|
|
281
|
-
*/
|
|
282
|
-
private buildGoldenTraceCases(
|
|
283
|
-
patterns: PainPattern[],
|
|
284
|
-
_context: { painEvents: Array<{ reason: string | null; source: string }> },
|
|
285
|
-
): GoldenTraceCase[] {
|
|
286
|
-
if (patterns.length === 0) return [];
|
|
287
|
-
|
|
288
|
-
const pattern = patterns[0];
|
|
289
|
-
// Skip replay when the pattern has no regex qualifier -- the generated template
|
|
290
|
-
// blocks ALL calls to the tool, making it impossible to construct a passing
|
|
291
|
-
// positive case. Replay is only meaningful when the template is selective.
|
|
292
|
-
// Also skip contentRegex-only patterns: synthetic content params are not meaningful.
|
|
293
|
-
if (!pattern.commandRegex && !pattern.pathRegex) return [];
|
|
294
|
-
const negativeParams: Record<string, unknown> = {};
|
|
295
|
-
if (pattern.commandRegex) negativeParams.command = 'rm -rf /';
|
|
296
|
-
else negativeParams.path = '/etc/passwd';
|
|
297
|
-
|
|
298
|
-
const positiveParams: Record<string, unknown> = {};
|
|
299
|
-
if (pattern.commandRegex) positiveParams.command = 'echo hello';
|
|
300
|
-
else positiveParams.path = '/tmp/safe.txt';
|
|
301
|
-
|
|
302
|
-
const fixture = createGoldenTraceFixture({
|
|
303
|
-
toolName: pattern.toolName,
|
|
304
|
-
negativeParams,
|
|
305
|
-
positiveParams,
|
|
306
|
-
expectedDecision: 'block',
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
return fixture.cases;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Compile all eligible principles (those with derivedFromPainIds).
|
|
314
|
-
*/
|
|
315
|
-
compileAll(): CompileResult[] {
|
|
316
|
-
const contexts = this.collector.collectBatch();
|
|
317
|
-
return contexts.map((ctx) => {
|
|
318
|
-
try {
|
|
319
|
-
return this.compileOne(ctx.principle.id);
|
|
320
|
-
} catch (e) {
|
|
321
|
-
// Log for operator visibility — catch-return is intentional for batch容错
|
|
322
|
-
console.warn(`[PrincipleCompiler] compileAll failed for ${ctx.principle.id}: ${(e as Error).message}`);
|
|
323
|
-
return { success: false, principleId: ctx.principle.id, reason: `unhandled: ${(e as Error).message}` };
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ledger Registrar (Task 4)
|
|
3
|
-
*
|
|
4
|
-
* Registers a compiled rule into the principle tree ledger:
|
|
5
|
-
* 1. Creates a LedgerRule with type 'gate', enforcement 'block', status 'proposed'
|
|
6
|
-
* 2. Creates an Implementation with type 'code', lifecycleState 'active'
|
|
7
|
-
*
|
|
8
|
-
* IDEMPOTENCY: If the rule already exists, returns existing registration.
|
|
9
|
-
* ROLLBACK: If implementation creation fails after rule creation, attempts cleanup.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { createRule, createImplementation, loadLedger, deleteRule, type LedgerRule } from '../principle-tree-ledger.js';
|
|
13
|
-
|
|
14
|
-
export interface RegisterInput {
|
|
15
|
-
principleId: string;
|
|
16
|
-
codeContent: string;
|
|
17
|
-
coversCondition: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface RegisterResult {
|
|
21
|
-
success: boolean;
|
|
22
|
-
ruleId: string;
|
|
23
|
-
implementationId: string;
|
|
24
|
-
codePath: string;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Register a compiled rule for a principle in the ledger.
|
|
29
|
-
*
|
|
30
|
-
* Idempotent: if rule already exists, returns existing registration.
|
|
31
|
-
* Atomic: if implementation creation fails, rolls back the rule.
|
|
32
|
-
*/
|
|
33
|
-
export function registerCompiledRule(stateDir: string, input: RegisterInput): RegisterResult {
|
|
34
|
-
const { principleId, codeContent, coversCondition } = input;
|
|
35
|
-
|
|
36
|
-
const ruleId = `R_${principleId}_auto`;
|
|
37
|
-
const implementationId = `IMPL_${principleId}_auto`;
|
|
38
|
-
const codePath = `compiled-rules/${principleId}/rule.ts`;
|
|
39
|
-
|
|
40
|
-
// Idempotency: skip if rule already exists
|
|
41
|
-
const existingLedger = loadLedger(stateDir);
|
|
42
|
-
if (existingLedger.tree.rules[ruleId]) {
|
|
43
|
-
const existingRule = existingLedger.tree.rules[ruleId];
|
|
44
|
-
return {
|
|
45
|
-
success: true,
|
|
46
|
-
ruleId,
|
|
47
|
-
implementationId: existingRule.implementationIds[0] ?? implementationId,
|
|
48
|
-
codePath,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const now = new Date().toISOString();
|
|
53
|
-
|
|
54
|
-
// Step 1: Create the rule
|
|
55
|
-
// FIX: Auto-generated rules default to 'warn' enforcement (not 'block') until:
|
|
56
|
-
// - replay evaluation passes
|
|
57
|
-
// - coverage confirmation
|
|
58
|
-
// - human approval
|
|
59
|
-
// This prevents P_001-style false positives from blocking normal edits.
|
|
60
|
-
const rule: LedgerRule = {
|
|
61
|
-
id: ruleId,
|
|
62
|
-
version: 1,
|
|
63
|
-
name: `Auto-compiled rule for ${principleId}`,
|
|
64
|
-
description: `Automatically compiled gate rule generated from principle ${principleId}`,
|
|
65
|
-
type: 'gate',
|
|
66
|
-
triggerCondition: coversCondition,
|
|
67
|
-
enforcement: 'warn',
|
|
68
|
-
action: codeContent,
|
|
69
|
-
principleId,
|
|
70
|
-
status: 'proposed',
|
|
71
|
-
coverageRate: 0,
|
|
72
|
-
falsePositiveRate: 0,
|
|
73
|
-
implementationIds: [],
|
|
74
|
-
createdAt: now,
|
|
75
|
-
updatedAt: now,
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
createRule(stateDir, rule);
|
|
79
|
-
|
|
80
|
-
// Step 2: Create the implementation (with rollback on failure)
|
|
81
|
-
try {
|
|
82
|
-
const implementation = {
|
|
83
|
-
id: implementationId,
|
|
84
|
-
ruleId,
|
|
85
|
-
type: 'code' as const,
|
|
86
|
-
path: codePath,
|
|
87
|
-
version: '1',
|
|
88
|
-
coversCondition,
|
|
89
|
-
coveragePercentage: 100,
|
|
90
|
-
// FIX: Start as 'candidate' instead of 'active'.
|
|
91
|
-
// RuleHost only loads lifecycleState='active' implementations.
|
|
92
|
-
// This means auto-generated rules will NOT block until explicitly
|
|
93
|
-
// promoted to 'active' after replay evaluation + human approval.
|
|
94
|
-
lifecycleState: 'candidate' as const,
|
|
95
|
-
createdAt: now,
|
|
96
|
-
updatedAt: now,
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
createImplementation(stateDir, implementation);
|
|
100
|
-
} catch (implError) {
|
|
101
|
-
// Rollback: remove the orphaned rule
|
|
102
|
-
try {
|
|
103
|
-
deleteRule(stateDir, ruleId);
|
|
104
|
-
} catch {
|
|
105
|
-
// Best-effort rollback — log but don't mask the original error
|
|
106
|
-
}
|
|
107
|
-
throw implError;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
success: true,
|
|
112
|
-
ruleId,
|
|
113
|
-
implementationId,
|
|
114
|
-
codePath,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { LifecycleDatasource } from '@principles/core/runtime-v2';
|
|
2
|
-
import type { LedgerTreeStore, ReplayReport, ArtifactLineageRecord } from '@principles/core/runtime-v2';
|
|
3
|
-
import { loadLedger } from '../principle-tree-ledger.js';
|
|
4
|
-
import { ReplayEngine } from '../replay-engine.js';
|
|
5
|
-
|
|
6
|
-
export class LineageSourceRetiredError extends Error {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(
|
|
9
|
-
'Artifact lineage source retired in PRI-230. ' +
|
|
10
|
-
'The nocturnal-artifact-lineage module has been deleted; ' +
|
|
11
|
-
'this datasource cannot provide lineage records. ' +
|
|
12
|
-
'Callers must handle this error explicitly rather than interpreting an empty result as "no lineage".'
|
|
13
|
-
);
|
|
14
|
-
this.name = 'LineageSourceRetiredError';
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class FilesystemLifecycleDatasource implements LifecycleDatasource {
|
|
19
|
-
private _engine?: ReplayEngine;
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
private readonly workspaceDir: string,
|
|
23
|
-
private readonly stateDir: string,
|
|
24
|
-
) {}
|
|
25
|
-
|
|
26
|
-
private get engine(): ReplayEngine {
|
|
27
|
-
if (!this._engine) this._engine = new ReplayEngine(this.workspaceDir, this.stateDir);
|
|
28
|
-
return this._engine;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
loadLedger(): LedgerTreeStore {
|
|
32
|
-
return loadLedger(this.stateDir).tree as unknown as LedgerTreeStore;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
listReplayReports(implementationId: string): ReplayReport[] {
|
|
36
|
-
return this.engine.listReports(implementationId);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
listLineageRecords(_kind: 'behavioral-sample' | 'rule-implementation-candidate'): ArtifactLineageRecord[] {
|
|
40
|
-
throw new LineageSourceRetiredError();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PrincipleLifecycleService,
|
|
3
|
-
type RecomputedPrincipleLifecycle,
|
|
4
|
-
} from './principle-lifecycle-service.js';
|
|
5
|
-
|
|
6
|
-
export function refreshPrincipleLifecycle(
|
|
7
|
-
workspaceDir: string,
|
|
8
|
-
stateDir: string,
|
|
9
|
-
): RecomputedPrincipleLifecycle[] {
|
|
10
|
-
return new PrincipleLifecycleService(workspaceDir, stateDir).recomputeAll();
|
|
11
|
-
}
|