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
package/dist/utils/io.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
/**
|
|
4
|
+
* Atomic file write — write to temp then rename to prevent partial writes on crash.
|
|
5
|
+
*
|
|
6
|
+
* On Windows, renameSync can fail with EPERM/EBUSY if the file is temporarily
|
|
7
|
+
* locked by antivirus software or another process. Retries with exponential
|
|
8
|
+
* backoff to handle transient locks.
|
|
9
|
+
*/
|
|
10
|
+
const RENAME_MAX_RETRIES = 3;
|
|
11
|
+
const RENAME_BASE_DELAY_MS = 50;
|
|
12
|
+
export function atomicWriteFileSync(filePath, data) {
|
|
13
|
+
const tmpPath = filePath + '.tmp';
|
|
14
|
+
fs.writeFileSync(tmpPath, data, 'utf8');
|
|
15
|
+
let lastError;
|
|
16
|
+
for (let attempt = 0; attempt < RENAME_MAX_RETRIES; attempt++) {
|
|
17
|
+
try {
|
|
18
|
+
fs.renameSync(tmpPath, filePath);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
lastError = err;
|
|
23
|
+
const code = err.code;
|
|
24
|
+
// Only retry on Windows transient lock errors
|
|
25
|
+
if (code === 'EPERM' || code === 'EBUSY' || code === 'EACCES') {
|
|
26
|
+
if (attempt < RENAME_MAX_RETRIES - 1) {
|
|
27
|
+
const delay = RENAME_BASE_DELAY_MS * Math.pow(2, attempt);
|
|
28
|
+
// Bounded spin-wait with CPU yield — materially different from
|
|
29
|
+
// tight infinite spin; only 50-200ms total across retries.
|
|
30
|
+
const waitUntil = Date.now() + delay;
|
|
31
|
+
let yielded = false;
|
|
32
|
+
while (Date.now() < waitUntil) {
|
|
33
|
+
if (!yielded && Date.now() >= waitUntil - 10) {
|
|
34
|
+
// Last few ms: yield to give other sync code a chance to run
|
|
35
|
+
try {
|
|
36
|
+
require('fs').accessSync?.(tmpPath);
|
|
37
|
+
}
|
|
38
|
+
catch { /* ignore */ }
|
|
39
|
+
yielded = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Non-retryable error — throw immediately
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Clean up temp file on failure
|
|
50
|
+
try {
|
|
51
|
+
fs.unlinkSync(tmpPath);
|
|
52
|
+
}
|
|
53
|
+
catch { /* best effort */ }
|
|
54
|
+
throw lastError;
|
|
55
|
+
}
|
|
56
|
+
export function normalizePath(filePath, projectDir) {
|
|
57
|
+
if (!filePath)
|
|
58
|
+
return '';
|
|
59
|
+
const projectIsWin = projectDir.includes('\\') || (projectDir.length >= 2 && projectDir[1] === ':');
|
|
60
|
+
const fileIsWin = filePath.includes('\\') || (filePath.length >= 2 && filePath[1] === ':');
|
|
61
|
+
let normalizedFilePath = filePath;
|
|
62
|
+
if (projectIsWin !== fileIsWin) {
|
|
63
|
+
if (fileIsWin) {
|
|
64
|
+
// Basic WSL conversion D:\path -> /mnt/d/path
|
|
65
|
+
normalizedFilePath = `/mnt/${filePath.charAt(0).toLowerCase()}${filePath.slice(2).replace(/\\/g, '/')}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// POSIX absolute paths (e.g., /etc/passwd) are NOT recognized as absolute
|
|
69
|
+
// by path.isAbsolute() on Windows. When both the project dir and the file
|
|
70
|
+
// path are POSIX paths, use path.posix for relative computation.
|
|
71
|
+
const isPosixAbsolute = normalizedFilePath.startsWith('/') && !fileIsWin;
|
|
72
|
+
const projectIsPosix = !projectIsWin;
|
|
73
|
+
let rel;
|
|
74
|
+
if (projectIsWin) {
|
|
75
|
+
const projectAbs = path.resolve(projectDir);
|
|
76
|
+
if (isPosixAbsolute) {
|
|
77
|
+
// POSIX absolute path on Windows project: cannot resolve relative to project,
|
|
78
|
+
// return as-is (path is outside the project directory).
|
|
79
|
+
rel = normalizedFilePath;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const fileAbs = path.isAbsolute(normalizedFilePath)
|
|
83
|
+
? normalizedFilePath
|
|
84
|
+
: path.join(projectAbs, normalizedFilePath);
|
|
85
|
+
rel = path.relative(projectAbs, fileAbs);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (projectIsPosix && isPosixAbsolute) {
|
|
89
|
+
// Both project and file are POSIX → use path.posix
|
|
90
|
+
const projectPosix = projectDir.replace(/\\/g, '/');
|
|
91
|
+
rel = path.posix.relative(projectPosix, normalizedFilePath);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const projectPosix = projectDir.replace(/\\/g, '/');
|
|
95
|
+
const filePosix = path.isAbsolute(normalizedFilePath)
|
|
96
|
+
? normalizedFilePath
|
|
97
|
+
: path.posix.join(projectPosix, normalizedFilePath.replace(/\\/g, '/'));
|
|
98
|
+
rel = path.posix.relative(projectPosix, filePosix);
|
|
99
|
+
}
|
|
100
|
+
rel = rel.replace(/\\/g, '/');
|
|
101
|
+
if (rel.startsWith('../')) {
|
|
102
|
+
return normalizedFilePath;
|
|
103
|
+
}
|
|
104
|
+
return rel;
|
|
105
|
+
}
|
|
106
|
+
export function normalizeRiskPath(p) {
|
|
107
|
+
let normalized = p.replace(/\\/g, '/');
|
|
108
|
+
if (normalized.endsWith('/')) {
|
|
109
|
+
normalized = normalized.slice(0, -1);
|
|
110
|
+
}
|
|
111
|
+
return normalized;
|
|
112
|
+
}
|
|
113
|
+
export function isRisky(relPath, riskPaths) {
|
|
114
|
+
if (!relPath || !riskPaths || riskPaths.length === 0)
|
|
115
|
+
return false;
|
|
116
|
+
const normalizedRel = normalizeRiskPath(relPath);
|
|
117
|
+
for (const pattern of riskPaths) {
|
|
118
|
+
const normalizedPattern = normalizeRiskPath(pattern);
|
|
119
|
+
if (normalizedRel.startsWith(normalizedPattern)) {
|
|
120
|
+
// If it starts with the pattern, and either they are exactly equal OR the next char is a slash
|
|
121
|
+
// (prevents "src/db_backup" matching "src/db")
|
|
122
|
+
if (normalizedRel === normalizedPattern || normalizedRel.charAt(normalizedPattern.length) === '/') {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
export function parseKvLines(text) {
|
|
130
|
+
const result = {};
|
|
131
|
+
const lines = text.split('\n');
|
|
132
|
+
for (const line of lines) {
|
|
133
|
+
const idx = line.indexOf(':');
|
|
134
|
+
if (idx !== -1) {
|
|
135
|
+
const key = line.slice(0, idx).trim();
|
|
136
|
+
const value = line.slice(idx + 1).trim();
|
|
137
|
+
result[key] = value;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
export function serializeKvLines(data) {
|
|
143
|
+
const lines = [];
|
|
144
|
+
const keys = Object.keys(data).sort();
|
|
145
|
+
for (const k of keys) {
|
|
146
|
+
const v = data[k];
|
|
147
|
+
// Skip empty/undefined values — prevents writing blank lines that cause
|
|
148
|
+
// agent confusion (SKILL.md lists fields that aren't actually present on disk)
|
|
149
|
+
if (v === '' || v === undefined || v === null) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (Array.isArray(v)) {
|
|
153
|
+
lines.push(`${k}: ${v.join(',')}`);
|
|
154
|
+
}
|
|
155
|
+
else if (typeof v === 'object' && v !== null) {
|
|
156
|
+
lines.push(`${k}: ${JSON.stringify(v)}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
lines.push(`${k}: ${v}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return lines.join('\n');
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Normalize command arguments from PluginCommandContext.args.
|
|
166
|
+
* Handles string | string[] | undefined union by joining arrays with spaces.
|
|
167
|
+
*/
|
|
168
|
+
export function normalizeCommandArgs(args) {
|
|
169
|
+
if (args === undefined || args === null)
|
|
170
|
+
return '';
|
|
171
|
+
if (Array.isArray(args))
|
|
172
|
+
return args.join(' ');
|
|
173
|
+
return args;
|
|
174
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node VM Polyfill — Thin wrapper around node:vm module
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Provide a single import point for vm compilation functionality
|
|
5
|
+
* used by the Rule Host. Isolates the node:vm dependency so it can be
|
|
6
|
+
* easily mocked in tests.
|
|
7
|
+
*/
|
|
8
|
+
import * as vm from 'node:vm';
|
|
9
|
+
export declare const nodeVm: typeof vm;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Retry Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides a centralized retry mechanism for all async operations that may fail
|
|
5
|
+
* due to transient errors (network timeouts, resource locks, rate limits, etc).
|
|
6
|
+
*
|
|
7
|
+
* @module utils/retry
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { retryAsync, isRetryableError } from '../utils/retry.js';
|
|
12
|
+
*
|
|
13
|
+
* const result = await retryAsync(
|
|
14
|
+
* () => llmClient.generate(prompt),
|
|
15
|
+
* { maxRetries: 3, operation: 'llm-generate' }
|
|
16
|
+
* );
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export interface RetryOptions {
|
|
20
|
+
/** Maximum number of retry attempts (default: 3) */
|
|
21
|
+
maxRetries?: number;
|
|
22
|
+
/** Initial delay in ms before first retry (default: 1000) */
|
|
23
|
+
initialDelayMs?: number;
|
|
24
|
+
/** Maximum delay in ms between retries (default: 30000) */
|
|
25
|
+
maxDelayMs?: number;
|
|
26
|
+
/** Backoff multiplier (default: 2 for exponential) */
|
|
27
|
+
backoffMultiplier?: number;
|
|
28
|
+
/** Operation name for logging */
|
|
29
|
+
operation?: string;
|
|
30
|
+
/** Logger instance (optional, defaults to console) */
|
|
31
|
+
logger?: RetryLogger;
|
|
32
|
+
isRetryable?: (_error: unknown) => boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface RetryLogger {
|
|
35
|
+
warn?: (_message: string) => void;
|
|
36
|
+
info?: (_message: string) => void;
|
|
37
|
+
debug?: (_message: string) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface RetryResult<T> {
|
|
40
|
+
/** The result value if successful */
|
|
41
|
+
value: T;
|
|
42
|
+
/** Number of attempts made (including successful one) */
|
|
43
|
+
attempts: number;
|
|
44
|
+
/** Total time spent in ms */
|
|
45
|
+
totalTimeMs: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Determines if an error is retryable based on common patterns.
|
|
49
|
+
*
|
|
50
|
+
* @param error - The error to check
|
|
51
|
+
* @returns true if the error is likely transient and worth retrying
|
|
52
|
+
*/
|
|
53
|
+
export declare function isRetryableError(error: unknown): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Execute an async function with automatic retry on failure.
|
|
56
|
+
*
|
|
57
|
+
* Uses exponential backoff with configurable parameters.
|
|
58
|
+
* Automatically detects retryable errors (timeouts, rate limits, etc).
|
|
59
|
+
*
|
|
60
|
+
* @param fn - The async function to execute
|
|
61
|
+
* @param options - Retry configuration
|
|
62
|
+
* @returns The result of the function
|
|
63
|
+
* @throws The last error if all retries fail
|
|
64
|
+
*/
|
|
65
|
+
export declare function retryAsync<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
66
|
+
/**
|
|
67
|
+
* Execute an async function with retry, returning detailed result info.
|
|
68
|
+
*
|
|
69
|
+
* @param fn - The async function to execute
|
|
70
|
+
* @param options - Retry configuration
|
|
71
|
+
* @returns Detailed result including attempts and timing
|
|
72
|
+
*/
|
|
73
|
+
export declare function retryAsyncWithInfo<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<RetryResult<T>>;
|
|
74
|
+
/**
|
|
75
|
+
* Create a retry wrapper for a function.
|
|
76
|
+
* Useful for wrapping LLM calls or API clients.
|
|
77
|
+
*
|
|
78
|
+
* @param fn - The async function to wrap
|
|
79
|
+
* @param options - Default retry configuration
|
|
80
|
+
* @returns A wrapped function with retry built-in
|
|
81
|
+
*/
|
|
82
|
+
export declare function withRetry<T, Args extends unknown[]>(fn: (...args: Args) => Promise<T>, options?: RetryOptions): (...args: Args) => Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Retry an LLM API call with appropriate defaults.
|
|
85
|
+
* LLM calls often timeout or hit rate limits.
|
|
86
|
+
*/
|
|
87
|
+
export declare function retryLLMCall<T>(fn: () => Promise<T>, operation?: string): Promise<T>;
|
|
88
|
+
/**
|
|
89
|
+
* Retry a file operation with appropriate defaults.
|
|
90
|
+
* File operations may fail due to locks or concurrent access.
|
|
91
|
+
*/
|
|
92
|
+
export declare function retryFileOperation<T>(fn: () => Promise<T>, operation?: string): Promise<T>;
|
|
93
|
+
/**
|
|
94
|
+
* Retry a network request with appropriate defaults.
|
|
95
|
+
* Network requests may fail due to transient connectivity issues.
|
|
96
|
+
*/
|
|
97
|
+
export declare function retryNetworkRequest<T>(fn: () => Promise<T>, operation?: string): Promise<T>;
|
|
98
|
+
/** Minimum samples needed before trusting learned timeout values */
|
|
99
|
+
export declare const MIN_SAMPLES = 3;
|
|
100
|
+
/** Number of recent completion durations to consider */
|
|
101
|
+
export declare const LOOKBACK_WINDOW = 50;
|
|
102
|
+
/** Safety multiplier applied to P95 */
|
|
103
|
+
export declare const SAFETY_MULTIPLIER = 1.5;
|
|
104
|
+
/** Absolute minimum timeout — never go below this (10s) */
|
|
105
|
+
export declare const MIN_TIMEOUT_MS = 10000;
|
|
106
|
+
/** Absolute maximum timeout cap — never exceed this (5min) */
|
|
107
|
+
export declare const MAX_TIMEOUT_MS = 300000;
|
|
108
|
+
/** Maximum retry attempts for workflow timeout */
|
|
109
|
+
export declare const MAX_TIMEOUT_RETRIES = 2;
|
|
110
|
+
/** Backoff multiplier for retry schedule */
|
|
111
|
+
export declare const RETRY_BACKOFF_MULTIPLIER = 2;
|
|
112
|
+
/**
|
|
113
|
+
* Interface for a data source that provides historical workflow durations.
|
|
114
|
+
* Compatible with WorkflowStore's getCompletionDurations API.
|
|
115
|
+
* This is the primary interface used by WorkflowManager.
|
|
116
|
+
*/
|
|
117
|
+
export interface DurationDataSource {
|
|
118
|
+
getCompletionDurations(workflowType: string, limit: number): number[];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Interface for duration history storage (simpler alternative).
|
|
122
|
+
*/
|
|
123
|
+
export interface DurationHistorySource {
|
|
124
|
+
/** Get recent completion durations in ms */
|
|
125
|
+
getDurations(limit: number): number[];
|
|
126
|
+
/** Record a new completion duration */
|
|
127
|
+
recordDuration(durationMs: number): void;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Options for adaptive retry with dynamic timeout.
|
|
131
|
+
*/
|
|
132
|
+
export interface AdaptiveRetryOptions extends RetryOptions {
|
|
133
|
+
/** Source for historical duration data */
|
|
134
|
+
durationHistory?: DurationHistorySource;
|
|
135
|
+
/** Minimum samples before using adaptive timeout */
|
|
136
|
+
minSamples?: number;
|
|
137
|
+
/** Percentile to use (default: 95) */
|
|
138
|
+
percentile?: number;
|
|
139
|
+
/** Safety multiplier for computed timeout (default: 1.5) */
|
|
140
|
+
safetyMultiplier?: number;
|
|
141
|
+
/** Minimum allowed timeout in ms (default: 10000) */
|
|
142
|
+
minTimeoutMs?: number;
|
|
143
|
+
/** Maximum allowed timeout in ms (default: 300000) */
|
|
144
|
+
maxTimeoutMs?: number;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Calculates P95 (or any percentile) from an array of numbers.
|
|
148
|
+
* Falls back to median for small samples (< 10).
|
|
149
|
+
*
|
|
150
|
+
* @param values - Array of duration values
|
|
151
|
+
* @param p - Percentile to compute (0-100)
|
|
152
|
+
* @returns The computed percentile value
|
|
153
|
+
*/
|
|
154
|
+
export declare function percentile(values: number[], p: number): number;
|
|
155
|
+
/**
|
|
156
|
+
* Clamp timeout to safe bounds.
|
|
157
|
+
*/
|
|
158
|
+
export declare function clampTimeout(ms: number): number;
|
|
159
|
+
/**
|
|
160
|
+
* Computes an adaptive timeout for a workflow type based on historical data.
|
|
161
|
+
*
|
|
162
|
+
* Algorithm:
|
|
163
|
+
* 1. Fetch last LOOKBACK_WINDOW completion durations
|
|
164
|
+
* 2. If < MIN_SAMPLES: fall back to the provided defaultTimeout
|
|
165
|
+
* 3. Otherwise: P95(durations) × SAFETY_MULTIPLIER
|
|
166
|
+
* 4. Clamp to [MIN_TIMEOUT_MS, MAX_TIMEOUT_MS]
|
|
167
|
+
*
|
|
168
|
+
* This is the primary function used by WorkflowManager.
|
|
169
|
+
*
|
|
170
|
+
* @param dataSource - Source for historical duration data
|
|
171
|
+
* @param workflowType - e.g. 'empathy-observer', 'deep-reflect'
|
|
172
|
+
* @param defaultTimeout - Fallback when insufficient data (from spec)
|
|
173
|
+
* @returns Computed timeout in milliseconds
|
|
174
|
+
*/
|
|
175
|
+
export declare function computeDynamicTimeout(dataSource: DurationDataSource, workflowType: string, defaultTimeout: number): number;
|
|
176
|
+
/**
|
|
177
|
+
* Computes retry timeout schedule for a workflow.
|
|
178
|
+
* Returns an array of timeout values for each attempt (including initial).
|
|
179
|
+
*
|
|
180
|
+
* Example output: [30000, 60000, 120000] for 3 attempts with base 30s
|
|
181
|
+
*
|
|
182
|
+
* @param baseTimeoutMs - Base timeout in milliseconds
|
|
183
|
+
* @param maxRetries - Maximum retry attempts (default: MAX_TIMEOUT_RETRIES)
|
|
184
|
+
* @returns Array of timeout values for each attempt
|
|
185
|
+
*/
|
|
186
|
+
export declare function computeRetrySchedule(baseTimeoutMs: number, maxRetries?: number): number[];
|
|
187
|
+
/**
|
|
188
|
+
* Compute adaptive timeout from historical data (simplified API).
|
|
189
|
+
* Alternative to computeDynamicTimeout for simpler use cases.
|
|
190
|
+
*/
|
|
191
|
+
export declare function computeAdaptiveTimeout(history: number[], fallbackMs: number, options?: {
|
|
192
|
+
minSamples?: number;
|
|
193
|
+
percentile?: number;
|
|
194
|
+
safetyMultiplier?: number;
|
|
195
|
+
minTimeoutMs?: number;
|
|
196
|
+
maxTimeoutMs?: number;
|
|
197
|
+
}): number;
|
|
198
|
+
/**
|
|
199
|
+
* Execute an async function with adaptive timeout and retry.
|
|
200
|
+
*
|
|
201
|
+
* Combines:
|
|
202
|
+
* 1. Dynamic timeout based on P95 of historical completions
|
|
203
|
+
* 2. Exponential backoff on retry
|
|
204
|
+
* 3. Automatic duration recording after success
|
|
205
|
+
*
|
|
206
|
+
* @param fn - The async function to execute
|
|
207
|
+
* @param options - Configuration including history source
|
|
208
|
+
* @returns The result of the function
|
|
209
|
+
*/
|
|
210
|
+
export declare function retryWithAdaptiveTimeout<T>(fn: () => Promise<T>, options?: AdaptiveRetryOptions): Promise<T>;
|