@caupulican/pi-adaptative 0.94.0 → 0.95.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/CHANGELOG.md +55 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +32 -13
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +7 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +173 -293
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +247 -392
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts +52 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js +118 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js.map +1 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.ts +169 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +1 -1
- package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +13 -7
- package/dist/bundled-resources/skills/worker-profile-writer/SKILL.md +11 -11
- package/dist/core/agent-paths.d.ts +2 -0
- package/dist/core/agent-paths.d.ts.map +1 -1
- package/dist/core/agent-paths.js +7 -0
- package/dist/core/agent-paths.js.map +1 -1
- package/dist/core/agent-session.d.ts +11 -41
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +98 -161
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts +6 -1
- package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
- package/dist/core/autonomy/envelope-enforcement.js +26 -25
- package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
- package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
- package/dist/core/autonomy/lane-private-paths.js +2 -1
- package/dist/core/autonomy/lane-private-paths.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +8 -8
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +45 -30
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/autonomy/worker-session-private-scope.d.ts +12 -0
- package/dist/core/autonomy/worker-session-private-scope.d.ts.map +1 -0
- package/dist/core/autonomy/worker-session-private-scope.js +42 -0
- package/dist/core/autonomy/worker-session-private-scope.js.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts +65 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.d.ts.map +1 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js +145 -0
- package/dist/core/autonomy/worker-tool-adapter-registry.js.map +1 -0
- package/dist/core/background-lane-controller.d.ts +9 -1
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +76 -6
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +23 -2
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +132 -17
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts +3 -1
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js +1 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/context/okf-memory-provider.d.ts +3 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
- package/dist/core/context/okf-memory-provider.js +66 -31
- package/dist/core/context/okf-memory-provider.js.map +1 -1
- package/dist/core/context/okf-memory.d.ts +18 -1
- package/dist/core/context/okf-memory.d.ts.map +1 -1
- package/dist/core/context/okf-memory.js +48 -0
- package/dist/core/context/okf-memory.js.map +1 -1
- package/dist/core/cost-guard-controller.d.ts +37 -0
- package/dist/core/cost-guard-controller.d.ts.map +1 -0
- package/dist/core/cost-guard-controller.js +71 -0
- package/dist/core/cost-guard-controller.js.map +1 -0
- package/dist/core/cost-guard.d.ts +9 -4
- package/dist/core/cost-guard.d.ts.map +1 -1
- package/dist/core/cost-guard.js +7 -3
- package/dist/core/cost-guard.js.map +1 -1
- package/dist/core/delegation/worker-agent-control.d.ts +4 -0
- package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +0 -1
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.d.ts +16 -3
- package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
- package/dist/core/delegation/worker-authority-resolver.js +114 -55
- package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts +1 -2
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +19 -6
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +125 -40
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-request.d.ts +3 -3
- package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-request.js +13 -19
- package/dist/core/delegation/worker-delegation-request.js.map +1 -1
- package/dist/core/delegation/worker-execution-policy.d.ts +3 -2
- package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
- package/dist/core/delegation/worker-execution-policy.js +54 -39
- package/dist/core/delegation/worker-execution-policy.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts +3 -3
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +7 -7
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-machine-scope.d.ts +12 -0
- package/dist/core/delegation/worker-machine-scope.d.ts.map +1 -0
- package/dist/core/delegation/worker-machine-scope.js +38 -0
- package/dist/core/delegation/worker-machine-scope.js.map +1 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts +10 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +69 -3
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-recovery-coordinator.js +6 -1
- package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +5 -7
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +1 -4
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +3 -2
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +50 -25
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.d.ts +6 -0
- package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.js +38 -15
- package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
- package/dist/core/extension-binding-controller.d.ts +5 -1
- package/dist/core/extension-binding-controller.d.ts.map +1 -1
- package/dist/core/extension-binding-controller.js +15 -0
- package/dist/core/extension-binding-controller.js.map +1 -1
- package/dist/core/extensions/factory-runtime.d.ts.map +1 -1
- package/dist/core/extensions/factory-runtime.js +5 -0
- package/dist/core/extensions/factory-runtime.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +8 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +31 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +239 -55
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +2 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +8 -0
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts +5 -4
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +23 -19
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/learning/auto-learn-settings.d.ts +84 -0
- package/dist/core/learning/auto-learn-settings.d.ts.map +1 -0
- package/dist/core/learning/auto-learn-settings.js +66 -0
- package/dist/core/learning/auto-learn-settings.js.map +1 -0
- package/dist/core/learning/learning-audit.d.ts +5 -1
- package/dist/core/learning/learning-audit.d.ts.map +1 -1
- package/dist/core/learning/learning-audit.js +32 -1
- package/dist/core/learning/learning-audit.js.map +1 -1
- package/dist/core/learning/reflection-engine.d.ts +24 -0
- package/dist/core/learning/reflection-engine.d.ts.map +1 -1
- package/dist/core/learning/reflection-engine.js +104 -8
- package/dist/core/learning/reflection-engine.js.map +1 -1
- package/dist/core/local-prefix-warm-controller.d.ts +24 -0
- package/dist/core/local-prefix-warm-controller.d.ts.map +1 -0
- package/dist/core/local-prefix-warm-controller.js +79 -0
- package/dist/core/local-prefix-warm-controller.js.map +1 -0
- package/dist/core/memory/okf-project-memory-store.d.ts +28 -0
- package/dist/core/memory/okf-project-memory-store.d.ts.map +1 -0
- package/dist/core/memory/okf-project-memory-store.js +111 -0
- package/dist/core/memory/okf-project-memory-store.js.map +1 -0
- package/dist/core/memory/providers/file-store.d.ts +44 -1
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +341 -24
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/worker-memory-tools.d.ts +5 -0
- package/dist/core/memory/worker-memory-tools.d.ts.map +1 -0
- package/dist/core/memory/worker-memory-tools.js +5 -0
- package/dist/core/memory/worker-memory-tools.js.map +1 -0
- package/dist/core/memory-controller.d.ts +10 -1
- package/dist/core/memory-controller.d.ts.map +1 -1
- package/dist/core/memory-controller.js +72 -8
- package/dist/core/memory-controller.js.map +1 -1
- package/dist/core/model-capability.d.ts +7 -0
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +12 -0
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -10
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +3 -2
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +3 -2
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/orchestration/contracts.d.ts +16 -12
- package/dist/core/orchestration/contracts.d.ts.map +1 -1
- package/dist/core/orchestration/contracts.js +2 -2
- package/dist/core/orchestration/contracts.js.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
- package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
- package/dist/core/orchestration/lane-tool-manifests.js +6 -1
- package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
- package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
- package/dist/core/orchestration/profile-registry.js +14 -0
- package/dist/core/orchestration/profile-registry.js.map +1 -1
- package/dist/core/orchestration/task-profile-writer.d.ts +7 -4
- package/dist/core/orchestration/task-profile-writer.d.ts.map +1 -1
- package/dist/core/orchestration/task-profile-writer.js +71 -59
- package/dist/core/orchestration/task-profile-writer.js.map +1 -1
- package/dist/core/orchestration/thinking-level-schema.d.ts +7 -0
- package/dist/core/orchestration/thinking-level-schema.d.ts.map +1 -0
- package/dist/core/orchestration/thinking-level-schema.js +19 -0
- package/dist/core/orchestration/thinking-level-schema.js.map +1 -0
- package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
- package/dist/core/orchestration/worker-execution-contract.js +12 -5
- package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts +1 -4
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +13 -29
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/provider-request-context-controller.d.ts +2 -0
- package/dist/core/provider-request-context-controller.d.ts.map +1 -1
- package/dist/core/provider-request-context-controller.js +10 -3
- package/dist/core/provider-request-context-controller.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +63 -27
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +300 -132
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +1 -0
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +25 -14
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
- package/dist/core/secrets/credential-exposure-guard.js +55 -10
- package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
- package/dist/core/session-role.d.ts +6 -8
- package/dist/core/session-role.d.ts.map +1 -1
- package/dist/core/session-role.js +8 -18
- package/dist/core/session-role.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -16
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -50
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skill-vault.d.ts +15 -0
- package/dist/core/skill-vault.d.ts.map +1 -1
- package/dist/core/skill-vault.js +79 -45
- package/dist/core/skill-vault.js.map +1 -1
- package/dist/core/skills.d.ts +3 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +6 -6
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +2 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +52 -12
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-capability-policy.d.ts +3 -0
- package/dist/core/tool-capability-policy.d.ts.map +1 -1
- package/dist/core/tool-capability-policy.js +13 -2
- package/dist/core/tool-capability-policy.js.map +1 -1
- package/dist/core/toolkit/script-runner.d.ts +2 -1
- package/dist/core/toolkit/script-runner.d.ts.map +1 -1
- package/dist/core/toolkit/script-runner.js +10 -2
- package/dist/core/toolkit/script-runner.js.map +1 -1
- package/dist/core/tools/delegate-status.d.ts +3 -1
- package/dist/core/tools/delegate-status.d.ts.map +1 -1
- package/dist/core/tools/delegate-status.js +5 -1
- package/dist/core/tools/delegate-status.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +4 -13
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +173 -73
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/tools/goal.d.ts +3 -4
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +24 -7
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/profile-writer.d.ts +2 -8
- package/dist/core/tools/profile-writer.d.ts.map +1 -1
- package/dist/core/tools/profile-writer.js +6 -18
- package/dist/core/tools/profile-writer.js.map +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts +1 -1
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
- package/dist/core/tools/run-toolkit-script.js +2 -2
- package/dist/core/tools/run-toolkit-script.js.map +1 -1
- package/dist/core/tools/skill-audit.d.ts +28 -1
- package/dist/core/tools/skill-audit.d.ts.map +1 -1
- package/dist/core/tools/skill-audit.js +56 -12
- package/dist/core/tools/skill-audit.js.map +1 -1
- package/dist/core/tools/skill.d.ts +12 -1
- package/dist/core/tools/skill.d.ts.map +1 -1
- package/dist/core/tools/skill.js +52 -0
- package/dist/core/tools/skill.js.map +1 -1
- package/dist/core/tools/skillify.d.ts.map +1 -1
- package/dist/core/tools/skillify.js +16 -7
- package/dist/core/tools/skillify.js.map +1 -1
- package/dist/core/tools/task-steps.js +1 -1
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/core/tools/tmux-dispatch.d.ts +4 -16
- package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
- package/dist/core/tools/tmux-dispatch.js +5 -20
- package/dist/core/tools/tmux-dispatch.js.map +1 -1
- package/dist/core/tools/tool-task.d.ts +1 -0
- package/dist/core/tools/tool-task.d.ts.map +1 -1
- package/dist/core/tools/tool-task.js +13 -8
- package/dist/core/tools/tool-task.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +2 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +4 -0
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/worktree-sync/codes.d.ts +1 -2
- package/dist/core/worktree-sync/codes.d.ts.map +1 -1
- package/dist/core/worktree-sync/codes.js +1 -2
- package/dist/core/worktree-sync/codes.js.map +1 -1
- package/dist/core/worktree-sync/lane-gate.d.ts +4 -8
- package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
- package/dist/core/worktree-sync/lane-gate.js +5 -51
- package/dist/core/worktree-sync/lane-gate.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.d.ts +6 -7
- package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +32 -207
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/autonomy-commands.js +2 -2
- package/dist/modes/interactive/autonomy-commands.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +12 -23
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +142 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/fitness-role-selector.js +2 -2
- package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +150 -73
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/report-commands.d.ts.map +1 -1
- package/dist/modes/interactive/report-commands.js +8 -4
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
- package/dist/modes/interactive/settings-selector-flow.js +10 -0
- package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
- package/docs/extensions.md +8 -0
- package/docs/harness-architecture.md +28 -32
- package/docs/index.md +1 -1
- package/docs/process-matrix.md +8 -6
- package/docs/resources.md +1 -1
- package/docs/settings.md +61 -51
- package/docs/tmux-agent-manager.md +47 -40
- package/docs/usage.md +1 -1
- package/docs/worker-profiles.md +8 -6
- package/docs/worktree-sync.md +26 -20
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +0 -133
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +0 -199
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +0 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +0 -312
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-learn-controller.js","sourceRoot":"","sources":["../../../src/modes/interactive/auto-learn-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,MAAM,kCAAkC,CAAC;AACvH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EACN,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,sBAAsB,EACtB,4BAA4B,GAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,mBAAmB,GAAG;IAC3B,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,KAAK;IACpB,mBAAmB,EAAE,EAAE;IACvB,yBAAyB,EAAE,EAAE;IAC7B,eAAe,EAAE,EAAE,GAAG,EAAE;IACxB,YAAY,EAAE,EAAE;IAChB,qBAAqB,EAAE,CAAC;IACxB,mBAAmB,EAAE,KAAK;IAC1B,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,EAAE;IAC1B,yBAAyB,EAAE,EAAE,GAAG,EAAE;IAClC,oBAAoB,EAAE,EAAE;CACuB,CAAC;AAEjD,MAAM,2BAA2B,GAAG;IACnC,GAAG,EAAE,EAAE,GAAG,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACtE,IAAI,EAAE;QACL,GAAG,mBAAmB;QACtB,OAAO,EAAE,IAAI;QACb,mBAAmB,EAAE,EAAE;QACvB,yBAAyB,EAAE,EAAE;QAC7B,eAAe,EAAE,EAAE,GAAG,EAAE;QACxB,YAAY,EAAE,EAAE;QAChB,qBAAqB,EAAE,CAAC;QACxB,mBAAmB,EAAE,KAAK;QAC1B,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE,GAAG,EAAE;QAClC,oBAAoB,EAAE,EAAE;KACxB;IACD,QAAQ,EAAE;QACT,GAAG,mBAAmB;QACtB,OAAO,EAAE,IAAI;QACb,mBAAmB,EAAE,EAAE;QACvB,yBAAyB,EAAE,EAAE;QAC7B,eAAe,EAAE,EAAE,GAAG,EAAE;QACxB,YAAY,EAAE,EAAE;QAChB,qBAAqB,EAAE,CAAC;QACxB,mBAAmB,EAAE,KAAK;QAC1B,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE,GAAG,EAAE;QAClC,oBAAoB,EAAE,EAAE;KACxB;IACD,IAAI,EAAE;QACL,GAAG,mBAAmB;QACtB,OAAO,EAAE,IAAI;QACb,mBAAmB,EAAE,EAAE;QACvB,yBAAyB,EAAE,EAAE;QAC7B,eAAe,EAAE,EAAE,GAAG,EAAE;QACxB,YAAY,EAAE,EAAE;QAChB,qBAAqB,EAAE,CAAC;QACxB,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE,GAAG,EAAE;QAClC,oBAAoB,EAAE,EAAE;KACxB;CACoE,CAAC;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAClF,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAmBvE,SAAS,gBAAgB,CAAC,MAAgD;IACzE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAyB,EAAE,QAAgB;IAC7E,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;SACjC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC5B,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB,EAAE,GAAW,EAAE,WAAmB;IACjF,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;AAC5D,CAAC;AAED,SAAS,0BAA0B,CAClC,QAAgB,EAChB,MAAmC,EACnC,OAAqC;IAErC,IAAI,CAAC;QACJ,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,cAAc,KAAK,YAAY,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAgB,EAAE,IAAY;IAClE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACJ,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,iCAAiC,CAAC,QAAgB;IAC1D,OAAO,QAAQ,CAAC,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAW;IACjD,IAAI,CAAC;QACJ,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAmD;IAC7F,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAG,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B,CACpC,QAAgB,EAChB,GAAW,EACX,WAAmB,EACnB,MAAmC;IAEnC,IAAI,CAAC;QACJ,OAAO,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,0BAA0B,CAClC,GAAW,EACX,gBAAqC,EACrC,GAAW,EACX,WAAmB,EACnB,MAAmC;IAEnC,mBAAmB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC;YAAE,OAAO;QAC9G,MAAM,SAAS,GAAG,8BAA8B,CAAC,QAAQ,CAAC,IAAI,iCAAiC,CAAC,QAAQ,CAAC,CAAC;QAC1G,IAAI,CAAC,SAAS,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO;QAC9F,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAClC,GAAW,EACX,YAAiC,EACjC,GAAW,EACX,WAAmB,EACnB,MAAmC;IAEnC,mBAAmB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,KAAK,GAAG,WAAW,IAAI,QAAQ,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC;YACzG,OAAO;QACR,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,OAAqC;IACtF,MAAM,MAAM,GAAgC,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACxG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,+BAA+B,CAAC;IAC3E,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpE,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAE/D,0BAA0B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5E,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC;AACf,CAAC;AAmED,MAAM,UAAU,uBAAuB,CACtC,WAAiC,EACjC,OAAkC;IAElC,OAAO;QACN,GAAG,WAAW,CAAC,UAAU;QACzB,SAAS;QACT,QAAQ;QACR,OAAO,CAAC,IAAI;QACZ,SAAS;QACT,OAAO,CAAC,YAAY;QACpB,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,eAAe;QACf,OAAO,CAAC,UAAU;QAClB,cAAc;QACd,OAAO,CAAC,SAAS;QACjB,IAAI,OAAO,CAAC,UAAU,EAAE;KACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAAe,EAAE,IAAuB;IACvF,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAC1D,CAAC;AAeD,MAAM,OAAO,mBAAmB;IAU/B,YAAY,IAA6B;QATzC,yFAAyF;QACzF,gGAAgG;QAChG,kGAAkG;QAClG,0FAA0F;QAC1F,0FAA0F;QAClF,wBAAmB,GAAuB,4BAA4B,CAAC;QAK9E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAY,OAAO;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAEO,6BAA6B,CAAC,KAAiB;QACtD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YAChH,OAAO,CAAC,CAAC;QACV,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9E,IAAI,UAAU,EAAE,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpF,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,SAAS;gBACb,OAAO,CAAC,CAAC;YACV,KAAK,aAAa;gBACjB,OAAO,CAAC,CAAC;YACV,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,UAAU;gBACd,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;QACX,CAAC;IACF,CAAC;IAEO,0BAA0B,CAAC,KAAiB;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9E,IAAI,UAAU,EAAE,IAAI,KAAK,OAAO;YAAE,OAAO,cAAc,CAAC;QACxD,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAErD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpF,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,SAAS;gBACb,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC7E,KAAK,aAAa;gBACjB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;YAC7E,KAAK,iBAAiB;gBACrB,OAAO,qBAAqB,CAAC;YAC9B,KAAK,qBAAqB;gBACzB,OAAO,qBAAqB,CAAC;YAC9B,KAAK,UAAU;gBACd,OAAO,UAAU,CAAC,KAAK,IAAI,wBAAwB,CAAC;YACrD;gBACC,OAAO,YAAY,CAAC;QACtB,CAAC;IACF,CAAC;IAED,wBAAwB;QACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;YACpG,IAAI,aAAa,KAAK,CAAC;gBAAE,OAAO,aAAa,CAAC;YAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;iBAC9C,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC;iBAClC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/E,IAAI,aAAa,KAAK,CAAC;gBAAE,OAAO,aAAa,CAAC;YAC9C,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACrD,MAAM,YAAY,GACjB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzG,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,OAAO;gBACN,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,GAAG,YAAY,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,EAAE;aAC1E,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,mBAAmB;QAClB,OAAO,iBAAiB,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACjF,CAAC;IAEO,qBAAqB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5D,CAAC;IAEO,wBAAwB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;IAEO,kBAAkB;QACzB,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAmB,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,mBAAmB,CAAC,KAAqB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC;IAEO,yBAAyB;QAChC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,SAAkB,CAAC;QACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC;gBACJ,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACzB,MAAM,IAAI,GACT,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBACnD,MAAM,KAAK,CAAC;gBACb,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;oBACrC,0DAA0D;gBAC3D,CAAC;YACF,CAAC;QACF,CAAC;QACD,MAAM,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACrG,CAAC;IAEO,sBAAsB,CAAI,EAA0D;QAC3F,IAAI,OAAiC,CAAC;QACtC,IAAI,CAAC;YACJ,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC3C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACvD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,EAAE,CAAC;QACb,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,OAAe,EAAE,OAAe;QAC1D,IAAI,CAAC;YACJ,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACR,0FAA0F;QAC3F,CAAC;IACF,CAAC;IAEO,mBAAmB,CAAC,GAAuB;QAClD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,mBAAmB,CAAC,KAAqB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,SAAS;YACV,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACxD,SAAS;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,8BAA8B,CAAC,KAAqB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzD,iCAAiC,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACnC,GAAG;YACH,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;YACjD,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;SACnF,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,uBAAuB;QACtB,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,iCAAiC,CAAC,IAAkB,EAAE,OAAO,GAAsB,EAAE;QACpF,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC;QACpF,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IACpE,CAAC;IAED,6BAA6B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,iCAAiC,CACpD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,IAAI,EACvD,QAAQ,CACR,CAAC;QACF,OAAO;YACN,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;YAC3C,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK;YAC7C,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,IAAI,MAAM,CAAC,mBAAmB;YAC/E,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,MAAM,CAAC,yBAAyB;YACjG,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe;YACnE,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;YAC1D,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,IAAI,MAAM,CAAC,qBAAqB;YACrF,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,IAAI,MAAM,CAAC,mBAAmB;YAC/E,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB;YACtE,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB;YACxF,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,MAAM,CAAC,yBAAyB;YACjG,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB;YAClF,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa;SAC7D,CAAC;IACH,CAAC;IAED,2BAA2B;QAC1B,OAAO,IAAI,CAAC,6BAA6B,EAAE,CAAC;IAC7C,CAAC;IAED,qBAAqB;QACpB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAC7E,CAAC;IAEO,oBAAoB;QAC3B,MAAM,OAAO,GAAG,MAAM;aACpB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;aAC5C,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjF,OAAO,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,yBAAyB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACtF,CAAC;IAEO,wBAAwB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACnG,CAAC;IAEO,+BAA+B,CACtC,KAAqB,EACrB,QAAqC,EACrC,KAAK,GAAG,KAAK;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACnG,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;QACxD,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,IAAI,IAAI,CAAC;QAEvE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO;gBACN,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,UAAU;gBAClB,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,YAAY;aACZ,CAAC;QACH,CAAC;QACD,IAAI,YAAY,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACpD,OAAO;gBACN,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,gCAAgC,YAAY,IAAI,QAAQ,CAAC,qBAAqB,GAAG;gBACzF,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,YAAY;aACZ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO;gBACN,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,UAAU;gBAClB,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,YAAY;aACZ,CAAC;QACH,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC;QAC/G,CAAC;QACD,IAAI,YAAY,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAClD,OAAO;gBACN,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,oBAAoB,YAAY,IAAI,QAAQ,CAAC,mBAAmB,GAAG;gBAC3E,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,YAAY;aACZ,CAAC;QACH,CAAC;QACD,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,IAAI,QAAQ,CAAC,yBAAyB,EAAE,CAAC;YACrF,OAAO;gBACN,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,oBAAoB,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,yBAAyB,IAAI;gBAChG,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,YAAY;aACZ,CAAC;QACH,CAAC;QACD,OAAO;YACN,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,oBAAoB;YAC5B,YAAY;YACZ,cAAc;YACd,mBAAmB;YACnB,YAAY;SACZ,CAAC;IACH,CAAC;IAEO,4BAA4B,CAAC,QAAqC;QACzE,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvB,CAAC;IAEO,uBAAuB;QAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;QAChE,IAAI,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,eAAe,GACpB,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC;QAChG,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,2BAA2B,CAAC,KAAyB;QACpD,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAC5D,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;gBAAE,OAAO,SAAS,CAAC;YACrG,OAAO,qBAAqB,UAAU,6EAA6E,CAAC;QACrH,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC;YAAE,OAAO,SAAS,CAAC;QACzE,OAAO,qBAAqB,UAAU,6EAA6E,CAAC;IACrH,CAAC;IAEO,iBAAiB,CAAC,KAAK,GAAG,KAAK;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC9F,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,4BAA4B;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;QACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,2BAA2B,EAAE,CAAC;QACpF,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO;gBACN,iCAAiC;gBACjC,qEAAqE;gBACrE,6MAA6M;aAC7M,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO;YACtD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,eAAe,GACpB,gBAAgB,CAAC,OAAO,IAAI,sBAAsB;YACjD,CAAC,CAAC,mFAAmF,sBAAsB,gKAAgK;YAC3Q,CAAC,CAAC,yHAAyH,CAAC;QAC9H,OAAO;YACN,iDAAiD;YACjD,mHAAmH;YACnH,mMAAmM;YACnM,2MAA2M;YAC3M,wKAAwK;YACxK,eAAe;YACf,2NAA2N;YAC3N,wNAAwN;SACxN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEO,oBAAoB,CAC3B,MAAc,EACd,QAAqC,EACrC,OAAO,GAA0D,EAAE;QAEnE,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAC3D,MAAM,eAAe,GACpB,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU;YAClD,CAAC,CAAC,gIAAgI,OAAO,CAAC,UAAU,kBAAkB;YACtK,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GACd,OAAO,CAAC,IAAI,KAAK,YAAY;YAC5B,CAAC,CAAC,0MAA0M;YAC5M,CAAC,CAAC,6DAA6D,CAAC;QAClE,OAAO,wEAAwE,SAAS,eAAe,MAAM,QAAQ,cAAc,wSAAwS,QAAQ,CAAC,mBAAmB,+eAA+e,QAAQ,CAAC,oBAAoB,ypEAAypE,eAAe,EAAE,CAAC;IAC/nG,CAAC;IAEO,mBAAmB,CAAC,MAa3B;QACA,OAAO,IAAI,CAAC,sBAAsB,CAA6B,CAAC,OAAO,EAAE,EAAE;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAE5C,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;gBAC9E,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC;gBACzE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC9E,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5F,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxE,CAAC;YAED,MAAM,GAAG,GAAuB;gBAC/B,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,YAAY;gBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG,GAAG,yBAAyB;gBAC1C,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,IAAI;gBACrE,SAAS,EACR,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,IAAI,KAAK,MAAM;oBACjE,CAAC,CAAC,0BAA0B;oBAC5B,CAAC,CAAC,gBAAgB;gBACpB,MAAM,EAAE,UAAU;aAClB,CAAC;YACF,MAAM,IAAI,GAAmB;gBAC5B,GAAG,KAAK;gBACR,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;aACpD,CAAC;YACF,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAC1C,IAAI,CAAC,sBAAsB,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;YAC1F,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,kBAAkB,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;YAClF,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC7F,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,WAAiC,EAAE,YAAoC;QAC1G,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAmB,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;YAChD,IAAI,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBACtG,IAAI,CAAC,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBACzG,IAAI,CAAC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,6BAA6B,CAAC,KAAa,EAAE,UAAkB,EAAE,SAAiB,EAAE,OAAe;QAC1G,IAAI,CAAC;YACJ,mCAAmC,CAAC;gBACnC,KAAK;gBACL,UAAU;gBACV,SAAS;gBACT,OAAO;gBACP,aAAa,EAAE,IAAI,CAAC,OAAO;gBAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;aACtD,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACF,CAAC;IAEO,4BAA4B,CACnC,KAAa,EACb,OAKC;QAED,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAClG,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,aAAa;YAAE,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7F,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC;IAEO,+BAA+B,CACtC,WAAiC,EACjC,GAAW,EACX,QAAqC;QAErC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO;gBACN,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE;oBACL,GAAG,KAAK;oBACR,IAAI,EAAE;wBACL,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;wBACrB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;4BACpB,GAAG,GAAG;4BACN,GAAG;4BACH,SAAS,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI;4BAClD,MAAM,EAAE,SAAS;yBACjB;qBACD;iBACD;aACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,eAAe,CACd,MAAc,EACd,KAAK,GAAG,KAAK,EACb,OAAO,GAKH,EAAE;QAEN,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,wEAAwE,CAAC;QACjF,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,gEAAgE,CAAC;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC7C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,cAAc,IAAI,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,KAAK,EAAE,CAAC;QAC/E,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE;YAC1D,IAAI;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,uBAAuB,CAAC,WAAW,EAAE;YACjD,IAAI,EAAE,cAAc,KAAK,EAAE;YAC3B,YAAY;YACZ,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,KAAK;YAC9C,UAAU;YACV,SAAS;YACT,UAAU;SACV,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrF,IAAI,iBAAiB,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,2BAA2B,iBAAiB,wBAAwB,CAAC;YACrF,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,GAAG,OAAO,SAAS,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAClD,QAAQ;YACR,KAAK;YACL,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,KAAK;YACL,YAAY;YACZ,MAAM;YACN,OAAO;YACP,UAAU;YACV,SAAS;YACT,UAAU;YACV,IAAI;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;YAC3B,OAAO,2BAA2B,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9D,CAAC;QACD,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC;QAE1C,IAAI,CAAC;YACJ,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,wDAAwD,OAAO,WAAW,OAAO,EAAE,CAAC;QAC5F,CAAC;QAED,IAAI,KAA2C,CAAC;QAChD,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC;YACJ,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;YACvE,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;gBACxC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;gBACzC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;gBAC/B,GAAG,EAAE;oBACJ,GAAG,OAAO,CAAC,GAAG;oBACd,mBAAmB,EAAE,GAAG;oBACxB,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iCAAiC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtF;aACD,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,OAAO,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,+DAA+D,OAAO,WAAW,OAAO,EAAE,CAAC;QACnG,CAAC;gBAAS,CAAC;YACV,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACJ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACR,8FAA8F;gBAC/F,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,oEAAoE,OAAO,EAAE,CAAC;QACtF,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,KAAK,EAAE;oBACpD,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC;oBAChD,UAAU;oBACV,SAAS;oBACT,OAAO;iBACP,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEtE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,4BAA4B,OAAO,EAAE,CAAC;IAC9C,CAAC;IAEO,sBAAsB,CAAC,QAAwB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtD,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,qCAAqC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACnG,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,QAAQ,CAAC,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC;QAClE,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,IAAI,IAAI,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,MAAM,+BAA+B,GACpC,8MAA8M,CAAC,IAAI,CAClN,QAAQ,CACR;YACD,qJAAqJ,CAAC,IAAI,CACzJ,QAAQ,CACR,CAAC;QACH,MAAM,iBAAiB,GAAG,SAAS,IAAI,oBAAoB,CAAC;QAC5D,MAAM,cAAc,GAAG,gBAAgB,IAAI,+BAA+B,IAAI,iBAAiB,CAAC;QAChG,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAChF,IAAI,CAAC,QAAQ,CAAC,gBAAgB;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACpG,IAAI,YAAY,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACpD,OAAO;gBACN,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,gCAAgC,YAAY,IAAI,QAAQ,CAAC,qBAAqB,GAAG;aACzF,CAAC;QACH,CAAC;QACD,IAAI,mBAAmB,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACrE,CAAC;QACD,IAAI,+BAA+B,EAAE,CAAC;YACrC,OAAO;gBACN,GAAG,IAAI;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,+CAA+C;gBACvD,MAAM;gBACN,cAAc,EAAE,IAAI;aACpB,CAAC;QACH,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACtB,OAAO;gBACN,GAAG,IAAI;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,8BAA8B;gBACtC,MAAM;gBACN,cAAc,EAAE,IAAI;aACpB,CAAC;QACH,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACvB,OAAO;gBACN,GAAG,IAAI;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,4CAA4C,SAAS,IAAI,oBAAoB,cAAc;gBACnG,MAAM;gBACN,cAAc,EAAE,IAAI;aACpB,CAAC;QACH,CAAC;QACD,kHAAkH;QAClH,IAAI,SAAS,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAClD,OAAO;gBACN,GAAG,IAAI;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,4BAA4B,SAAS,IAAI,QAAQ,CAAC,sBAAsB,GAAG;gBACnF,MAAM;aACN,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,yBAAyB;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC1D,OAAO,IAAI,CAAC,6BAA6B,EAAE,CAAC,OAAO,CAAC;IACrD,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,2BAA2B;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxE,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO;QAC1B,KAAK,IAAI,CAAC,OAAO;aACf,iBAAiB,CACjB,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAC5E,EAAE,SAAS,EAAE,UAAU,EAAE,CACzB;aACA,KAAK,CAAC,GAAG,EAAE;YACX,+EAA+E;QAChF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB,CAAC,QAAwB;QAChD,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,6FAA6F;QAC7F,8FAA8F;QAC9F,kGAAkG;QAClG,KAAK,QAAQ,CAAC;IACf,CAAC;IAED,mBAAmB;QAClB,6FAA6F;QAC7F,iGAAiG;QACjG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChF,OAAO,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjD,CAAC;IAED,wBAAwB,CAAC,QAAwB;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;YAC3D,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,wBAAwB,EAAE,QAAQ,CAAC,cAAc;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChF,OAAO,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjD,CAAC;IAED,qBAAqB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC5E,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CACxD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CACnE,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,kBAAkB,CACjD,YAAY,EACZ,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,qBAAqB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACtG,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5G,MAAM,YAAY,GACjB,QAAQ,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;YAC3B,CAAC,CAAC,IAAI;iBACH,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG;oBACf,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC/C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;iBACpD;qBACC,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,OAAO,KAAK,EAAE,KAAK,GAAG,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,IAAI,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,SAAS,eAAe,GAAG,CAAC,SAAS,IAAI,SAAS,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,WAAW,SAAS,GAAG,CAAC,OAAO,EAAE,CAAC;YACjM,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,CAAC,QAAQ,CAAC;QACZ,MAAM,cAAc,GAAG,wBAAwB,CAAC;YAC/C,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;YACxD,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE;SAC5D,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO;YAChD,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjF,CAAC,CAAC,QAAQ,CAAC;QACZ,yFAAyF;QACzF,sFAAsF;QACtF,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM;YAC5C,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9E,CAAC,CAAC,QAAQ,CAAC;QACZ,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,6BAA6B,GAAG,IAAI,CAAC,GAAG,CAC7C,CAAC,EACD,cAAc,GAAG,QAAQ,CAAC,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAC5E,CAAC;QACF,MAAM,sBAAsB,GAC3B,6BAA6B,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;QAChH,OAAO,+BAA+B,QAAQ,CAAC,OAAO,YAAY,QAAQ,CAAC,KAAK,oBAAoB,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,eAAe,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,mBAAmB,cAAc,WAAW,IAAI,QAAQ,CAAC,yBAAyB,gBAAgB,YAAY,wBAAwB,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,kBAAkB,QAAQ,CAAC,sBAAsB,cAAc,sBAAsB,sGAAsG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,qBAAqB,0BAA0B,eAAe,0BAA0B,IAAI,CAAC,yBAAyB,EAAE,8BAA8B,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,kCAAkC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,YAAY,QAAQ,EAAE,CAAC;IACj8B,CAAC;CACD","sourcesContent":["/**\n * Auto-Learn / Native-Reflection controller.\n *\n * Extracted verbatim from interactive-mode.ts (god-file decomposition). Owns the disk-backed\n * Auto Learn run-state machine (state.json + lockfile), the background-learner spawn/prune\n * lifecycle, and the interactive task-contract nudge. It takes narrow deps (a live session\n * accessor, a self-modification-source resolver that stays in the host, and a small UI callback\n * surface) rather than the whole InteractiveMode instance.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@caupulican/pi-agent-core\";\nimport { isAutoLearnSessionId } from \"@caupulican/pi-agent-core/session\";\nimport type { Model } from \"@caupulican/pi-ai\";\nimport type { SelectItem } from \"@caupulican/pi-tui\";\nimport { spawn } from \"child_process\";\nimport lockfile from \"proper-lockfile\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { readAutoLearnSessionIdFromFile, reportCompletedAutoLearnUsageHelper } from \"../../core/cost/session-usage.ts\";\nimport { analyzeReflectionTurn } from \"../../core/learning/reflection-turn-analysis.ts\";\nimport { isProcessAlive } from \"../../core/process-liveness.ts\";\nimport {\n\tdescribeInFlightWorkUnit,\n\tgetInFlightWorkUnits,\n\tgetPendingReloadBlockers,\n} from \"../../core/reload-blockers.ts\";\nimport type { AutoLearnSettings, AutonomyMode } from \"../../core/settings-manager.ts\";\nimport {\n\tcheckTaskStepsContract,\n\tINITIAL_TASK_CONTRACT_STREAK,\n\ttype TaskContractStreak,\n} from \"../../core/tasks/task-contract-monitor.ts\";\nimport { getProcessWorkRun } from \"../../utils/work-directory.ts\";\nimport { theme } from \"./theme/theme.ts\";\n\nconst AUTO_LEARN_DEFAULTS = {\n\tenabled: false,\n\tmodel: \"active\",\n\tthinkingLevel: \"low\",\n\tlongSessionMessages: 32,\n\tlongSessionContextPercent: 70,\n\tcooldownMinutes: 24 * 60,\n\tleaseMinutes: 90,\n\tmaxConcurrentLearners: 1,\n\tapplyHighConfidence: false,\n\treflectionReview: true,\n\treflectionMinToolCalls: 12,\n\treflectionCooldownMinutes: 24 * 60,\n\tcomplexTaskToolCalls: 12,\n} as const satisfies Required<AutoLearnSettings>;\n\nconst AUTONOMY_AUTO_LEARN_PRESETS = {\n\toff: { ...AUTO_LEARN_DEFAULTS, enabled: true, reflectionReview: true },\n\tsafe: {\n\t\t...AUTO_LEARN_DEFAULTS,\n\t\tenabled: true,\n\t\tlongSessionMessages: 64,\n\t\tlongSessionContextPercent: 85,\n\t\tcooldownMinutes: 24 * 60,\n\t\tleaseMinutes: 60,\n\t\tmaxConcurrentLearners: 1,\n\t\tapplyHighConfidence: false,\n\t\treflectionReview: true,\n\t\treflectionMinToolCalls: 12,\n\t\treflectionCooldownMinutes: 24 * 60,\n\t\tcomplexTaskToolCalls: 12,\n\t},\n\tbalanced: {\n\t\t...AUTO_LEARN_DEFAULTS,\n\t\tenabled: true,\n\t\tlongSessionMessages: 64,\n\t\tlongSessionContextPercent: 85,\n\t\tcooldownMinutes: 24 * 60,\n\t\tleaseMinutes: 90,\n\t\tmaxConcurrentLearners: 1,\n\t\tapplyHighConfidence: false,\n\t\treflectionReview: true,\n\t\treflectionMinToolCalls: 12,\n\t\treflectionCooldownMinutes: 24 * 60,\n\t\tcomplexTaskToolCalls: 12,\n\t},\n\tfull: {\n\t\t...AUTO_LEARN_DEFAULTS,\n\t\tenabled: true,\n\t\tlongSessionMessages: 64,\n\t\tlongSessionContextPercent: 85,\n\t\tcooldownMinutes: 24 * 60,\n\t\tleaseMinutes: 90,\n\t\tmaxConcurrentLearners: 1,\n\t\tapplyHighConfidence: true,\n\t\treflectionReview: true,\n\t\treflectionMinToolCalls: 12,\n\t\treflectionCooldownMinutes: 24 * 60,\n\t\tcomplexTaskToolCalls: 12,\n\t},\n} as const satisfies Record<AutonomyMode, Required<AutoLearnSettings>>;\n\nexport const AUTONOMY_MODES: AutonomyMode[] = [\"off\", \"safe\", \"balanced\", \"full\"];\nconst AUTO_LEARN_RESERVATION_MS = 2 * 60 * 1000;\nexport const AUTO_LEARN_HISTORY_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport interface AutoLearnHistoryPruneResult {\n\tpromptFiles: number;\n\tlogFiles: number;\n\tsessionFiles: number;\n\terrors: number;\n}\n\nexport interface AutoLearnHistoryPruneOptions {\n\tdataDir: string;\n\tnow?: number;\n\tretentionMs?: number;\n\tactiveRunIds?: Iterable<string | undefined>;\n\tactiveSessionIds?: Iterable<string | undefined>;\n}\n\ntype AutoLearnHistoryPruneCounter = Exclude<keyof AutoLearnHistoryPruneResult, \"errors\">;\n\nfunction definedStringSet(values: Iterable<string | undefined> | undefined): Set<string> {\n\tconst set = new Set<string>();\n\tif (!values) return set;\n\tfor (const value of values) {\n\t\tif (typeof value === \"string\" && value.length > 0) set.add(value);\n\t}\n\treturn set;\n}\n\nfunction sanitizeAutoLearnPathPart(input: string | undefined, fallback: string): string {\n\tconst cleaned = (input || fallback)\n\t\t.replace(/[^a-zA-Z0-9._-]+/g, \"-\")\n\t\t.replace(/-+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 80);\n\treturn cleaned || fallback;\n}\n\nfunction isOldAutoLearnArtifact(filePath: string, now: number, retentionMs: number): boolean {\n\tconst stats = fs.lstatSync(filePath);\n\treturn stats.isFile() && now - stats.mtimeMs > retentionMs;\n}\n\nfunction removeOldAutoLearnArtifact(\n\tfilePath: string,\n\tresult: AutoLearnHistoryPruneResult,\n\tcounter: AutoLearnHistoryPruneCounter,\n): void {\n\ttry {\n\t\tfs.rmSync(filePath, { force: true });\n\t\tresult[counter]++;\n\t} catch {\n\t\tresult.errors++;\n\t}\n}\n\nfunction isPathInside(target: string, root: string): boolean {\n\tconst resolvedTarget = path.resolve(target);\n\tconst resolvedRoot = path.resolve(root);\n\treturn resolvedTarget === resolvedRoot || resolvedTarget.startsWith(`${resolvedRoot}${path.sep}`);\n}\n\nfunction removeAutoLearnArtifactPath(filePath: string, root: string): boolean {\n\tif (!isPathInside(filePath, root)) return false;\n\ttry {\n\t\tfs.rmSync(filePath, { recursive: true, force: true });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getAutoLearnSessionIdFromFileName(fileName: string): string | undefined {\n\treturn fileName.match(/_(auto-learn-[A-Za-z0-9._-]+)\\.jsonl$/)?.[1];\n}\n\nfunction readAutoLearnDirectoryEntries(dir: string): fs.Dirent[] {\n\ttry {\n\t\treturn fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction visitAutoLearnFiles(root: string, visit: (filePath: string, fileName: string) => void): void {\n\tconst pendingDirectories = [root];\n\twhile (pendingDirectories.length > 0) {\n\t\tconst dir = pendingDirectories.pop()!;\n\t\tfor (const entry of readAutoLearnDirectoryEntries(dir)) {\n\t\t\tconst filePath = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tpendingDirectories.push(filePath);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tvisit(filePath, entry.name);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction shouldPruneAutoLearnArtifact(\n\tfilePath: string,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): boolean {\n\ttry {\n\t\treturn isOldAutoLearnArtifact(filePath, now, retentionMs);\n\t} catch {\n\t\tresult.errors++;\n\t\treturn false;\n\t}\n}\n\nfunction pruneAutoLearnSessionFiles(\n\tdir: string,\n\tactiveSessionIds: ReadonlySet<string>,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): void {\n\tvisitAutoLearnFiles(dir, (filePath, fileName) => {\n\t\tif (!fileName.endsWith(\".jsonl\") || !shouldPruneAutoLearnArtifact(filePath, now, retentionMs, result)) return;\n\t\tconst sessionId = readAutoLearnSessionIdFromFile(filePath) ?? getAutoLearnSessionIdFromFileName(fileName);\n\t\tif (!sessionId || !isAutoLearnSessionId(sessionId) || activeSessionIds.has(sessionId)) return;\n\t\tremoveOldAutoLearnArtifact(filePath, result, \"sessionFiles\");\n\t});\n}\n\nfunction pruneAutoLearnRunArtifacts(\n\tdir: string,\n\tactiveRunIds: ReadonlySet<string>,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): void {\n\tvisitAutoLearnFiles(dir, (filePath, fileName) => {\n\t\tconst promptRunId = fileName.endsWith(\".prompt.md\") ? fileName.slice(0, -\".prompt.md\".length) : undefined;\n\t\tconst logRunId = fileName.endsWith(\".log\") ? fileName.slice(0, -\".log\".length) : undefined;\n\t\tconst runId = promptRunId ?? logRunId;\n\t\tif (!runId || activeRunIds.has(runId) || !shouldPruneAutoLearnArtifact(filePath, now, retentionMs, result))\n\t\t\treturn;\n\t\tremoveOldAutoLearnArtifact(filePath, result, promptRunId ? \"promptFiles\" : \"logFiles\");\n\t});\n}\n\nexport function pruneAutoLearnConversationHistory(options: AutoLearnHistoryPruneOptions): AutoLearnHistoryPruneResult {\n\tconst result: AutoLearnHistoryPruneResult = { promptFiles: 0, logFiles: 0, sessionFiles: 0, errors: 0 };\n\tconst dataDir = path.resolve(options.dataDir);\n\tconst now = options.now ?? Date.now();\n\tconst retentionMs = options.retentionMs ?? AUTO_LEARN_HISTORY_RETENTION_MS;\n\tconst activeRunIds = definedStringSet(options.activeRunIds);\n\tconst activeSessionIds = definedStringSet(options.activeSessionIds);\n\tif (retentionMs <= 0 || !fs.existsSync(dataDir)) return result;\n\n\tpruneAutoLearnRunArtifacts(dataDir, activeRunIds, now, retentionMs, result);\n\tpruneAutoLearnSessionFiles(dataDir, activeSessionIds, now, retentionMs, result);\n\treturn result;\n}\n\nexport interface AutoLearnRunRecord {\n\ttenant: string;\n\tpid?: number;\n\tmodel: string;\n\treason: string;\n\tstartedAt: number;\n\texpiresAt: number;\n\tcwd: string;\n\tlogPath: string;\n\tsessionDir?: string;\n\tsessionId?: string;\n\tpromptPath?: string;\n\tkind?: \"auto\" | \"reflection\";\n\tautonomyMode?: AutonomyMode;\n\tauthority?: string;\n\tstatus?: \"reserved\" | \"running\";\n}\n\nexport interface AutoLearnState {\n\tlastLaunchByTenant?: Record<string, number>;\n\tlastReflectionByTenant?: Record<string, number>;\n\truns?: Record<string, AutoLearnRunRecord>;\n}\n\ninterface AutoLearnStateLockResult<T> {\n\tresult: T;\n\tnext?: AutoLearnState;\n}\n\ninterface AutoLearnDecision {\n\tshouldRun: boolean;\n\treason: string;\n\tmessageCount: number;\n\tcontextPercent: number | null;\n\tcooldownRemainingMs: number;\n\trunningCount: number;\n\tbypassCooldown?: boolean;\n}\n\ninterface AutoLearnReservation {\n\trunId: string;\n\tstartedAt: number;\n}\n\ntype AutoLearnReservationResult = { ok: true; reservation: AutoLearnReservation } | { ok: false; reason: string };\n\ninterface AutonomyReviewDecision extends AutoLearnDecision {\n\ttoolCalls: number;\n\tdigest?: string;\n}\n\nexport interface AutoLearnSpawnTarget {\n\tcommand: string;\n\targsPrefix: string[];\n}\n\nexport interface AutoLearnSpawnArgsOptions {\n\tname: string;\n\tmodelPattern: string;\n\tthinkingLevel?: string;\n\tsessionDir: string;\n\tsessionId: string;\n\tpromptPath: string;\n}\n\nexport function buildAutoLearnSpawnArgs(\n\tspawnTarget: AutoLearnSpawnTarget,\n\toptions: AutoLearnSpawnArgsOptions,\n): string[] {\n\treturn [\n\t\t...spawnTarget.argsPrefix,\n\t\t\"--print\",\n\t\t\"--name\",\n\t\toptions.name,\n\t\t\"--model\",\n\t\toptions.modelPattern,\n\t\t...(options.thinkingLevel ? [\"--thinking\", options.thinkingLevel] : []),\n\t\t\"--session-dir\",\n\t\toptions.sessionDir,\n\t\t\"--session-id\",\n\t\toptions.sessionId,\n\t\t`@${options.promptPath}`,\n\t];\n}\n\nexport function findAutoLearnSpawnNullByteInput(command: string, args: readonly string[]): string | undefined {\n\tif (command.includes(\"\\0\")) return \"command\";\n\tconst argIndex = args.findIndex((arg) => arg.includes(\"\\0\"));\n\treturn argIndex === -1 ? undefined : `args[${argIndex}]`;\n}\n\nexport interface AutoLearnControllerUi {\n\tshowStatus(message: string): void;\n\treadonly footerDataProvider: { setExtensionStatus(key: string, text: string | undefined): void };\n\tinvalidateFooter(): void;\n\trequestRender(): void;\n}\n\nexport interface AutoLearnControllerDeps {\n\tgetSession(): AgentSession;\n\tresolveSelfModificationSource(settings: { sourcePath?: string; sourcePaths?: string[] }): string | undefined;\n\tui: AutoLearnControllerUi;\n}\n\nexport class AutoLearnController {\n\t// Cheap turn-boundary task_steps contract nudge. Tracks the consecutive-violation streak\n\t// across turns so `checkTaskStepsContractNudge` (invoked from the existing per-turn `agent_end`\n\t// pass below) can fire exactly one advisory harness note per sustained-violation streak. No model\n\t// calls; best-effort coupling to whichever per-turn branch runs (native reflection or the\n\t// auto-learn/autonomy-review pair) — see `checkTaskStepsContractNudge` for the rationale.\n\tprivate _taskContractStreak: TaskContractStreak = INITIAL_TASK_CONTRACT_STREAK;\n\n\tprivate readonly deps: AutoLearnControllerDeps;\n\n\tconstructor(deps: AutoLearnControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tprivate get session(): AgentSession {\n\t\treturn this.deps.getSession();\n\t}\n\n\tprivate getAutoLearnModelAuthPriority(model: Model<any>): number {\n\t\tif (this.session.model && model.provider === this.session.model.provider && model.id === this.session.model.id) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst credential = this.session.modelRegistry.authStorage.get(model.provider);\n\t\tif (credential?.type === \"oauth\") return 1;\n\t\tif (credential?.type === \"api_key\") return 2;\n\n\t\tconst authStatus = this.session.modelRegistry.getProviderAuthStatus(model.provider);\n\t\tswitch (authStatus.source) {\n\t\t\tcase \"runtime\":\n\t\t\t\treturn 3;\n\t\t\tcase \"environment\":\n\t\t\t\treturn 4;\n\t\t\tcase \"models_json_key\":\n\t\t\tcase \"models_json_command\":\n\t\t\tcase \"fallback\":\n\t\t\t\treturn 5;\n\t\t\tdefault:\n\t\t\t\treturn 6;\n\t\t}\n\t}\n\n\tprivate getAutoLearnModelAuthLabel(model: Model<any>): string {\n\t\tconst credential = this.session.modelRegistry.authStorage.get(model.provider);\n\t\tif (credential?.type === \"oauth\") return \"subscription\";\n\t\tif (credential?.type === \"api_key\") return \"API key\";\n\n\t\tconst authStatus = this.session.modelRegistry.getProviderAuthStatus(model.provider);\n\t\tswitch (authStatus.source) {\n\t\t\tcase \"runtime\":\n\t\t\t\treturn authStatus.label ? `runtime ${authStatus.label}` : \"runtime API key\";\n\t\t\tcase \"environment\":\n\t\t\t\treturn authStatus.label ? `env ${authStatus.label}` : \"environment API key\";\n\t\t\tcase \"models_json_key\":\n\t\t\t\treturn \"models.json API key\";\n\t\t\tcase \"models_json_command\":\n\t\t\t\treturn \"models.json command\";\n\t\t\tcase \"fallback\":\n\t\t\t\treturn authStatus.label ?? \"custom provider config\";\n\t\t\tdefault:\n\t\t\t\treturn \"configured\";\n\t\t}\n\t}\n\n\tgetAutoLearnModelOptions(): SelectItem[] {\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst availableModels = this.session.modelRegistry.getAvailable();\n\t\tconst sortedModels = [...availableModels].sort((a, b) => {\n\t\t\tconst priorityDelta = this.getAutoLearnModelAuthPriority(a) - this.getAutoLearnModelAuthPriority(b);\n\t\t\tif (priorityDelta !== 0) return priorityDelta;\n\t\t\tconst providerDelta = this.session.modelRegistry\n\t\t\t\t.getProviderDisplayName(a.provider)\n\t\t\t\t.localeCompare(this.session.modelRegistry.getProviderDisplayName(b.provider));\n\t\t\tif (providerDelta !== 0) return providerDelta;\n\t\t\treturn a.id.localeCompare(b.id);\n\t\t});\n\n\t\treturn sortedModels.map((model) => {\n\t\t\tconst providerName = this.session.modelRegistry.getProviderDisplayName(model.provider);\n\t\t\tconst authLabel = this.getAutoLearnModelAuthLabel(model);\n\t\t\tconst modelPattern = `${model.provider}/${model.id}`;\n\t\t\tconst currentLabel =\n\t\t\t\tthis.session.model && model.provider === this.session.model.provider && model.id === this.session.model.id\n\t\t\t\t\t? \" · current\"\n\t\t\t\t\t: \"\";\n\t\t\tconst displayName = model.name && model.name !== model.id ? ` · ${model.name}` : \"\";\n\t\t\treturn {\n\t\t\t\tvalue: modelPattern,\n\t\t\t\tlabel: modelPattern,\n\t\t\t\tdescription: `${providerName} · ${authLabel}${currentLabel}${displayName}`,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetAutoLearnDataDir(): string {\n\t\treturn getProcessWorkRun(getAgentDir(), \"learning\", \"auto-learn\", \"state\").path;\n\t}\n\n\tprivate getAutoLearnStatePath(): string {\n\t\treturn path.join(this.getAutoLearnDataDir(), \"state.json\");\n\t}\n\n\tprivate ensureAutoLearnStateFile(): void {\n\t\tconst dir = this.getAutoLearnDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tconst statePath = this.getAutoLearnStatePath();\n\t\tif (!fs.existsSync(statePath)) {\n\t\t\tfs.writeFileSync(statePath, \"{}\\n\", \"utf-8\");\n\t\t}\n\t}\n\n\tprivate readAutoLearnState(): AutoLearnState {\n\t\ttry {\n\t\t\tconst statePath = this.getAutoLearnStatePath();\n\t\t\tif (!fs.existsSync(statePath)) return {};\n\t\t\treturn JSON.parse(fs.readFileSync(statePath, \"utf-8\")) as AutoLearnState;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate writeAutoLearnState(state: AutoLearnState): void {\n\t\tconst dir = this.getAutoLearnDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tfs.writeFileSync(this.getAutoLearnStatePath(), `${JSON.stringify(state, null, 2)}\\n`, \"utf-8\");\n\t}\n\n\tprivate acquireAutoLearnStateLock(): () => void {\n\t\tthis.ensureAutoLearnStateFile();\n\t\tconst statePath = this.getAutoLearnStatePath();\n\t\tconst maxAttempts = 20;\n\t\tconst delayMs = 25;\n\t\tlet lastError: unknown;\n\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn lockfile.lockSync(statePath, { realpath: false, stale: 30000 });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst code =\n\t\t\t\t\terror && typeof error === \"object\" && \"code\" in error ? String((error as { code?: unknown }).code) : \"\";\n\t\t\t\tif (code !== \"ELOCKED\" || attempt === maxAttempts) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlastError = error;\n\t\t\t\tconst start = Date.now();\n\t\t\t\twhile (Date.now() - start < delayMs) {\n\t\t\t\t\t// Synchronous callers need a synchronous lock retry loop.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthrow lastError instanceof Error ? lastError : new Error(\"Failed to acquire Auto Learn state lock\");\n\t}\n\n\tprivate withAutoLearnStateLock<T>(fn: (state: AutoLearnState) => AutoLearnStateLockResult<T>): T {\n\t\tlet release: (() => void) | undefined;\n\t\ttry {\n\t\t\trelease = this.acquireAutoLearnStateLock();\n\t\t\tconst { result, next } = fn(this.readAutoLearnState());\n\t\t\tif (next !== undefined) {\n\t\t\t\tthis.writeAutoLearnState(next);\n\t\t\t}\n\t\t\treturn result;\n\t\t} finally {\n\t\t\trelease?.();\n\t\t}\n\t}\n\n\tprivate appendAutoLearnLog(logPath: string, message: string): void {\n\t\ttry {\n\t\t\tfs.appendFileSync(logPath, `${message}\\n`, \"utf-8\");\n\t\t} catch {\n\t\t\t// Logging must never turn a background learner startup failure into an interactive crash.\n\t\t}\n\t}\n\n\tprivate isAutoLearnPidAlive(pid: number | undefined): boolean {\n\t\treturn isProcessAlive(pid);\n\t}\n\n\tprivate pruneAutoLearnState(state: AutoLearnState, now = Date.now()): AutoLearnState {\n\t\tconst runs = { ...(state.runs ?? {}) };\n\t\tfor (const [id, run] of Object.entries(runs)) {\n\t\t\tif (run.expiresAt <= now) {\n\t\t\t\tdelete runs[id];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (run.status === \"reserved\" && run.pid === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!this.isAutoLearnPidAlive(run.pid)) {\n\t\t\t\tdelete runs[id];\n\t\t\t}\n\t\t}\n\t\treturn { ...state, runs };\n\t}\n\n\tprivate pruneAutoLearnHistoryFromState(state: AutoLearnState, now = Date.now()): AutoLearnState {\n\t\tconst prunedState = this.pruneAutoLearnState(state, now);\n\t\tpruneAutoLearnConversationHistory({\n\t\t\tdataDir: this.getAutoLearnDataDir(),\n\t\t\tnow,\n\t\t\tactiveRunIds: Object.keys(prunedState.runs ?? {}),\n\t\t\tactiveSessionIds: Object.values(prunedState.runs ?? {}).map((run) => run.sessionId),\n\t\t});\n\t\treturn prunedState;\n\t}\n\n\tgetPrunedAutoLearnState(): AutoLearnState {\n\t\treturn this.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\treturn { result: state, next: state };\n\t\t});\n\t}\n\n\tgetAutoLearnPresetForAutonomyMode(mode: AutonomyMode, current: AutoLearnSettings = {}): Required<AutoLearnSettings> {\n\t\tconst preset = AUTONOMY_AUTO_LEARN_PRESETS[mode] ?? AUTONOMY_AUTO_LEARN_PRESETS.off;\n\t\treturn { ...preset, model: current.model?.trim() || preset.model };\n\t}\n\n\tgetEffectiveAutoLearnSettings(): Required<AutoLearnSettings> {\n\t\tconst settings = this.session.settingsManager.getAutoLearnSettings();\n\t\tconst preset = this.getAutoLearnPresetForAutonomyMode(\n\t\t\tthis.session.settingsManager.getAutonomySettings().mode,\n\t\t\tsettings,\n\t\t);\n\t\treturn {\n\t\t\tenabled: settings.enabled ?? preset.enabled,\n\t\t\tmodel: settings.model?.trim() || preset.model,\n\t\t\tlongSessionMessages: settings.longSessionMessages ?? preset.longSessionMessages,\n\t\t\tlongSessionContextPercent: settings.longSessionContextPercent ?? preset.longSessionContextPercent,\n\t\t\tcooldownMinutes: settings.cooldownMinutes ?? preset.cooldownMinutes,\n\t\t\tleaseMinutes: settings.leaseMinutes ?? preset.leaseMinutes,\n\t\t\tmaxConcurrentLearners: settings.maxConcurrentLearners ?? preset.maxConcurrentLearners,\n\t\t\tapplyHighConfidence: settings.applyHighConfidence ?? preset.applyHighConfidence,\n\t\t\treflectionReview: settings.reflectionReview ?? preset.reflectionReview,\n\t\t\treflectionMinToolCalls: settings.reflectionMinToolCalls ?? preset.reflectionMinToolCalls,\n\t\t\treflectionCooldownMinutes: settings.reflectionCooldownMinutes ?? preset.reflectionCooldownMinutes,\n\t\t\tcomplexTaskToolCalls: settings.complexTaskToolCalls ?? preset.complexTaskToolCalls,\n\t\t\tthinkingLevel: settings.thinkingLevel ?? preset.thinkingLevel,\n\t\t};\n\t}\n\n\tgetCurrentAutoLearnSettings(): Required<AutoLearnSettings> {\n\t\treturn this.getEffectiveAutoLearnSettings();\n\t}\n\n\tgetAutoLearnTenantKey(): string {\n\t\treturn `${this.session.sessionManager.getCwd()}::${this.session.sessionId}`;\n\t}\n\n\tprivate getAutoLearnTenantId(): string {\n\t\tconst cwdHash = crypto\n\t\t\t.createHash(\"sha256\")\n\t\t\t.update(this.session.sessionManager.getCwd())\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 8);\n\t\tconst sessionPart = sanitizeAutoLearnPathPart(this.session.sessionId, \"session\");\n\t\treturn `${sessionPart}-${cwdHash}`;\n\t}\n\n\tgetAutoLearnTenantDataDir(): string {\n\t\treturn path.join(this.getAutoLearnDataDir(), \"tenants\", this.getAutoLearnTenantId());\n\t}\n\n\tprivate getAutoLearnMessageCount(): number {\n\t\treturn this.session.sessionManager.getBranch().filter((entry) => entry.type === \"message\").length;\n\t}\n\n\tprivate buildAutoLearnDecisionFromState(\n\t\tstate: AutoLearnState,\n\t\tsettings: Required<AutoLearnSettings>,\n\t\tforce = false,\n\t): AutoLearnDecision {\n\t\tconst now = Date.now();\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst runningCount = Object.values(state.runs ?? {}).filter((run) => run.tenant === tenant).length;\n\t\tconst lastLaunch = state.lastLaunchByTenant?.[tenant] ?? 0;\n\t\tconst cooldownMs = settings.cooldownMinutes * 60 * 1000;\n\t\tconst cooldownRemainingMs = Math.max(0, lastLaunch + cooldownMs - now);\n\t\tconst messageCount = this.getAutoLearnMessageCount();\n\t\tconst contextPercent = this.session.getContextUsage()?.percent ?? null;\n\n\t\tif (!settings.enabled && !force) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: \"disabled\",\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (runningCount >= settings.maxConcurrentLearners) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: `max tenant learners running (${runningCount}/${settings.maxConcurrentLearners})`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (!force && cooldownRemainingMs > 0) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: \"cooldown\",\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (force) {\n\t\t\treturn { shouldRun: true, reason: \"manual\", messageCount, contextPercent, cooldownRemainingMs, runningCount };\n\t\t}\n\t\tif (messageCount >= settings.longSessionMessages) {\n\t\t\treturn {\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `message trigger (${messageCount}/${settings.longSessionMessages})`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (contextPercent !== null && contextPercent >= settings.longSessionContextPercent) {\n\t\t\treturn {\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `context trigger (${contextPercent.toFixed(1)}%/${settings.longSessionContextPercent}%)`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tshouldRun: false,\n\t\t\treason: \"thresholds not met\",\n\t\t\tmessageCount,\n\t\t\tcontextPercent,\n\t\t\tcooldownRemainingMs,\n\t\t\trunningCount,\n\t\t};\n\t}\n\n\tprivate resolveAutoLearnModelPattern(settings: Required<AutoLearnSettings>): string | undefined {\n\t\tif (settings.model === \"active\") {\n\t\t\treturn this.session.model ? `${this.session.model.provider}/${this.session.model.id}` : undefined;\n\t\t}\n\t\treturn settings.model;\n\t}\n\n\tprivate getAutoLearnSpawnTarget(): AutoLearnSpawnTarget | undefined {\n\t\tconst overridePath = process.env.PI_AUTO_LEARN_CLI_PATH?.trim();\n\t\tif (overridePath) {\n\t\t\treturn { command: overridePath, argsPrefix: [] };\n\t\t}\n\n\t\tconst execBase = path.basename(process.execPath).toLowerCase();\n\t\tconst isScriptRuntime =\n\t\t\texecBase === \"node\" || execBase === \"node.exe\" || execBase === \"bun\" || execBase === \"bun.exe\";\n\t\tif (!isScriptRuntime) {\n\t\t\treturn { command: process.execPath, argsPrefix: [] };\n\t\t}\n\n\t\tconst cliPath = process.argv[1];\n\t\tif (!cliPath || cliPath.startsWith(\"-\")) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { command: process.execPath, argsPrefix: [cliPath] };\n\t}\n\n\tvalidateAutoLearnModelValue(value: string | undefined): string | undefined {\n\t\tconst modelValue = value?.trim();\n\t\tif (!modelValue || modelValue === \"active\") return undefined;\n\t\tconst available = this.session.modelRegistry.getAvailable();\n\t\tif (modelValue.includes(\"/\")) {\n\t\t\tconst [provider, modelId] = modelValue.split(\"/\", 2);\n\t\t\tif (available.some((model) => model.provider === provider && model.id === modelId)) return undefined;\n\t\t\treturn `Auto Learn model \"${modelValue}\" is not in configured subscription/API models; saved as manual/unverified.`;\n\t\t}\n\t\tif (available.some((model) => model.id === modelValue)) return undefined;\n\t\treturn `Auto Learn model \"${modelValue}\" is not in configured subscription/API models; saved as manual/unverified.`;\n\t}\n\n\tprivate evaluateAutoLearn(force = false): AutoLearnDecision {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\treturn this.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\treturn { result: this.buildAutoLearnDecisionFromState(state, settings, force), next: state };\n\t\t});\n\t}\n\n\tprivate buildAutonomyAuthorityPrompt(): string {\n\t\tconst autonomy = this.session.settingsManager.getAutonomySettings();\n\t\tconst selfModification = this.session.settingsManager.getSelfModificationSettings();\n\t\tif (autonomy.mode !== \"full\") {\n\t\t\treturn [\n\t\t\t\t\"Authority mode: proposal-gated.\",\n\t\t\t\t\"- You may autonomously query memory and run bounded learning tools.\",\n\t\t\t\t\"- Durable memory writes require the configured high-confidence policy; skills, extensions, source, settings, publishing, tagging, and releases remain proposals unless the foreground user explicitly asks.\",\n\t\t\t].join(\"\\n\");\n\t\t}\n\n\t\tconst selfModificationSource = selfModification.enabled\n\t\t\t? this.deps.resolveSelfModificationSource(selfModification)\n\t\t\t: undefined;\n\t\tconst sourceAuthority =\n\t\t\tselfModification.enabled && selfModificationSource\n\t\t\t\t? `- Pi source: standing authority to edit the authorized selfModification source (${selfModificationSource}) for self-evolution improvements; inspect git status first, preserve unrelated user changes, run focused validation, and leave a clear rollback/test summary.`\n\t\t\t\t: \"- Pi source: no standing source-edit authority until selfModification.enabled and selfModification.sourcePaths are set.\";\n\t\treturn [\n\t\t\t\"Authority mode: FULL AUTONOMOUS standing grant.\",\n\t\t\t\"- Memory: may apply high-confidence durable Automata memory/corrections after duplicate and corroboration checks.\",\n\t\t\t\"- Skills: may create or patch user/project-owned procedural skills and support files; prefer updating existing umbrella skills; do not delete skills without making a recoverable archive/backup.\",\n\t\t\t\"- User/project extensions and tools: may create or patch small scoped extensions/tools under Pi user/project roots when they address repeated workflow/tooling gaps; validate and keep changes auditable.\",\n\t\t\t\"- Settings: may auto-tune autonomy/autoLearn settings to reduce bottlenecks; do not modify credentials, provider auth, package sources, or unrelated user preferences.\",\n\t\t\tsourceAuthority,\n\t\t\t\"- Hard stops without explicit foreground approval: publish, npm release, git push, tag creation, credential changes, destructive user-data deletion, network-exposed services, or authority expansion beyond this policy.\",\n\t\t\t\"- Audit: final output must list changed paths/settings, commands/tests run, evidence, residual risks, and rollback guidance. If no safe validation is possible, leave the change as a proposal instead of applying it.\",\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate buildAutoLearnPrompt(\n\t\treason: string,\n\t\tsettings: Required<AutoLearnSettings>,\n\t\toptions: { kind?: \"auto\" | \"reflection\"; turnDigest?: string } = {},\n\t): string {\n\t\tconst authorityBlock = this.buildAutonomyAuthorityPrompt();\n\t\tconst reflectionBlock =\n\t\t\toptions.kind === \"reflection\" && options.turnDigest\n\t\t\t\t? `\\n\\nLatest completed turn digest (bounded; use only as current-session evidence, not as longitudinal proof):\\n<turn_digest>\\n${options.turnDigest}\\n</turn_digest>`\n\t\t\t\t: \"\";\n\t\tconst objective =\n\t\t\toptions.kind === \"reflection\"\n\t\t\t\t? \"review the latest completed turn for durable memory, skill, validation, tooling, and code-baked self-improvement cues, then run one bounded continuous-learning pass if the learning tools are available\"\n\t\t\t\t: \"run one bounded continuous-learning pass for this Pi tenant\";\n\t\treturn `You are Pi Auto Learn running as a background learner.\\n\\nObjective: ${objective}.\\nTrigger: ${reason}.\\n\\n${authorityBlock}\\n\\nRequired workflow:\\n1. Query existing durable memory/rules first when tools allow it. Memory confrontation is mandatory before accepting, merging, upgrading, or rejecting learning candidates.\\n2. Run the available Auto Learn tooling, preferably learning_run_auto, with applyHighConfidence=${settings.applyHighConfidence}. Process candidate validation in vectorized chunks/batches; avoid scalar per-candidate memory queries except for final selected writes.\\n3. Apply the learning validation tree to each candidate chunk: (a) Why is this good for the user? (b) Is it unique, or similar to existing memory/skills/agents so it should merge or upgrade existing knowledge? (c) Will this make Pi a better agent? Candidates that cannot answer all three are noise.\\n4. Hermes-style learning cycle: after a complex task (${settings.complexTaskToolCalls}+ tool calls), user correction, repeated steering pattern, non-trivial fix/workaround/debugging path, loaded-skill defect, trigger gap, tool gap, or harness workflow defect, actively create or update durable learning artifacts. Memory stores compact facts/preferences/state; skills/prompts/agents/extensions/source store procedural behavior. When a lesson changes how Pi should act on a future class of task, memory alone is not completion.\\n5. Skill update preference order: (1) patch the currently loaded or consulted skill that governed the task; (2) patch an existing class-level umbrella skill/agent/prompt; (3) add a support file under references/, templates/, or scripts/ and add a SKILL.md pointer; (4) create a new class-level umbrella skill only when no existing artifact fits. Never create one-off PR/error/codename/session skills.\\n6. Behavioral self-improvement is code-baked by default: prefer the lowest durable executable layer that fixes the behavior — patch an existing skill/prompt/agent/extension/tool, tune an approved setting, or edit the authorized Pi source when source authority is available. Use Automata only for concise facts/evidence pointers that support the baked change.\\n7. Do not harden transient or environment-dependent failures into durable behavior: missing binaries, fresh-install package gaps, credentials not configured, path mismatches, one-off task narratives, or negative tool-broken claims should become setup/troubleshooting fixes only when the fix itself is reusable.\\n8. Treat the latest-turn digest as current-session evidence only; do not auto-commit one-off cues unless deterministic tooling and memory confrontation corroborate them.\\n9. In mode=full, apply safe memory/skill/user-extension/authorized-source improvements under the standing grant above; otherwise keep them proposal-gated.\\n10. Never cross hard-stop boundaries from the authority policy.\\n11. If the learning tools are unavailable, report BLOCKED with the missing tool names and do not improvise.\\n12. Finish with PASS, BLOCKED, or FAIL and concise evidence, including chunk counts, merge/upgrade/code-bake decisions, changed paths/settings, validation, and cleanup/purge status.${reflectionBlock}`;\n\t}\n\n\tprivate reserveAutoLearnRun(params: {\n\t\tsettings: Required<AutoLearnSettings>;\n\t\tforce: boolean;\n\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\tbypassReflectionCooldown?: boolean;\n\t\trunId: string;\n\t\tmodelPattern: string;\n\t\treason: string;\n\t\tlogPath: string;\n\t\tsessionDir: string;\n\t\tsessionId: string;\n\t\tpromptPath: string;\n\t\tkind: \"auto\" | \"reflection\";\n\t}): AutoLearnReservationResult {\n\t\treturn this.withAutoLearnStateLock<AutoLearnReservationResult>((current) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current, now);\n\t\t\tconst tenant = this.getAutoLearnTenantKey();\n\n\t\t\tif (params.cooldownKind === \"reflection\" && !params.bypassReflectionCooldown) {\n\t\t\t\tconst lastReflection = state.lastReflectionByTenant?.[tenant] ?? 0;\n\t\t\t\tconst cooldownMs = params.settings.reflectionCooldownMinutes * 60 * 1000;\n\t\t\t\tif (Math.max(0, lastReflection + cooldownMs - now) > 0) {\n\t\t\t\t\treturn { result: { ok: false, reason: \"reflection cooldown\" }, next: state };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst decision = this.buildAutoLearnDecisionFromState(state, params.settings, params.force);\n\t\t\tif (!decision.shouldRun) {\n\t\t\t\treturn { result: { ok: false, reason: decision.reason }, next: state };\n\t\t\t}\n\n\t\t\tconst run: AutoLearnRunRecord = {\n\t\t\t\ttenant,\n\t\t\t\tmodel: params.modelPattern,\n\t\t\t\treason: params.reason,\n\t\t\t\tstartedAt: now,\n\t\t\t\texpiresAt: now + AUTO_LEARN_RESERVATION_MS,\n\t\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\t\tlogPath: params.logPath,\n\t\t\t\tsessionDir: params.sessionDir,\n\t\t\t\tsessionId: params.sessionId,\n\t\t\t\tpromptPath: params.promptPath,\n\t\t\t\tkind: params.kind,\n\t\t\t\tautonomyMode: this.session.settingsManager.getAutonomySettings().mode,\n\t\t\t\tauthority:\n\t\t\t\t\tthis.session.settingsManager.getAutonomySettings().mode === \"full\"\n\t\t\t\t\t\t? \"standing-full-autonomous\"\n\t\t\t\t\t\t: \"proposal-gated\",\n\t\t\t\tstatus: \"reserved\",\n\t\t\t};\n\t\t\tconst next: AutoLearnState = {\n\t\t\t\t...state,\n\t\t\t\truns: { ...(state.runs ?? {}), [params.runId]: run },\n\t\t\t};\n\t\t\tif (params.cooldownKind === \"reflection\") {\n\t\t\t\tnext.lastReflectionByTenant = { ...(state.lastReflectionByTenant ?? {}), [tenant]: now };\n\t\t\t} else {\n\t\t\t\tnext.lastLaunchByTenant = { ...(state.lastLaunchByTenant ?? {}), [tenant]: now };\n\t\t\t}\n\t\t\treturn { result: { ok: true, reservation: { runId: params.runId, startedAt: now } }, next };\n\t\t});\n\t}\n\n\tprivate releaseAutoLearnReservation(reservation: AutoLearnReservation, cooldownKind?: \"auto\" | \"reflection\"): void {\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\t\tconst runs = { ...(state.runs ?? {}) };\n\t\t\tdelete runs[reservation.runId];\n\t\t\tconst next: AutoLearnState = { ...state, runs };\n\t\t\tif (cooldownKind === \"reflection\" && next.lastReflectionByTenant?.[tenant] === reservation.startedAt) {\n\t\t\t\tnext.lastReflectionByTenant = { ...next.lastReflectionByTenant };\n\t\t\t\tdelete next.lastReflectionByTenant[tenant];\n\t\t\t} else if (cooldownKind !== \"reflection\" && next.lastLaunchByTenant?.[tenant] === reservation.startedAt) {\n\t\t\t\tnext.lastLaunchByTenant = { ...next.lastLaunchByTenant };\n\t\t\t\tdelete next.lastLaunchByTenant[tenant];\n\t\t\t}\n\t\t\treturn { result: undefined, next };\n\t\t});\n\t}\n\n\tprivate reportCompletedAutoLearnUsage(runId: string, sessionDir: string, sessionId: string, logPath: string): void {\n\t\ttry {\n\t\t\treportCompletedAutoLearnUsageHelper({\n\t\t\t\trunId,\n\t\t\t\tsessionDir,\n\t\t\t\tsessionId,\n\t\t\t\tlogPath,\n\t\t\t\tparentSession: this.session,\n\t\t\t\tappendLog: (p, msg) => this.appendAutoLearnLog(p, msg),\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn usage report failed: ${message}`);\n\t\t}\n\t}\n\n\tprivate cleanupCompletedAutoLearnRun(\n\t\trunId: string,\n\t\toptions: {\n\t\t\tartifactPaths: string[];\n\t\t\tsessionDir: string;\n\t\t\tsessionId: string;\n\t\t\tlogPath: string;\n\t\t},\n\t): void {\n\t\tthis.reportCompletedAutoLearnUsage(runId, options.sessionDir, options.sessionId, options.logPath);\n\t\tconst dataDir = this.getAutoLearnDataDir();\n\t\tfor (const filePath of options.artifactPaths) removeAutoLearnArtifactPath(filePath, dataDir);\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnState(current);\n\t\t\tconst runs = { ...(state.runs ?? {}) };\n\t\t\tdelete runs[runId];\n\t\t\treturn { result: undefined, next: { ...state, runs } };\n\t\t});\n\t\tthis.updateAutoLearnFooter();\n\t}\n\n\tprivate markAutoLearnReservationRunning(\n\t\treservation: AutoLearnReservation,\n\t\tpid: number,\n\t\tsettings: Required<AutoLearnSettings>,\n\t): void {\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current, now);\n\t\t\tconst run = state.runs?.[reservation.runId];\n\t\t\tif (!run) {\n\t\t\t\treturn { result: undefined, next: state };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tresult: undefined,\n\t\t\t\tnext: {\n\t\t\t\t\t...state,\n\t\t\t\t\truns: {\n\t\t\t\t\t\t...(state.runs ?? {}),\n\t\t\t\t\t\t[reservation.runId]: {\n\t\t\t\t\t\t\t...run,\n\t\t\t\t\t\t\tpid,\n\t\t\t\t\t\t\texpiresAt: now + settings.leaseMinutes * 60 * 1000,\n\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tlaunchAutoLearn(\n\t\treason: string,\n\t\tforce = false,\n\t\toptions: {\n\t\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\t\tpromptKind?: \"auto\" | \"reflection\";\n\t\t\tturnDigest?: string;\n\t\t\tbypassReflectionCooldown?: boolean;\n\t\t} = {},\n\t): string {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tconst modelPattern = this.resolveAutoLearnModelPattern(settings);\n\t\tif (!modelPattern) {\n\t\t\treturn \"Auto Learn not started: no active model is available for model=active.\";\n\t\t}\n\t\tconst spawnTarget = this.getAutoLearnSpawnTarget();\n\t\tif (!spawnTarget) {\n\t\t\treturn \"Auto Learn not started: could not resolve current pi CLI path.\";\n\t\t}\n\n\t\tconst dir = this.getAutoLearnTenantDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tconst runId = `${Date.now()}-${crypto.randomUUID().slice(0, 8)}`;\n\t\tconst logPath = path.join(dir, `${runId}.log`);\n\t\tconst promptPath = path.join(dir, `${runId}.prompt.md`);\n\t\tconst kind = options.promptKind ?? \"auto\";\n\t\tconst sessionDir = path.join(dir, \"sessions\", runId);\n\t\tconst sessionId = `auto-learn-${kind}-${this.getAutoLearnTenantId()}-${runId}`;\n\t\tfs.mkdirSync(sessionDir, { recursive: true });\n\t\tconst prompt = this.buildAutoLearnPrompt(reason, settings, {\n\t\t\tkind,\n\t\t\tturnDigest: options.turnDigest,\n\t\t});\n\t\tconst args = buildAutoLearnSpawnArgs(spawnTarget, {\n\t\t\tname: `Auto Learn ${runId}`,\n\t\t\tmodelPattern,\n\t\t\tthinkingLevel: settings.thinkingLevel ?? \"low\",\n\t\t\tsessionDir,\n\t\t\tsessionId,\n\t\t\tpromptPath,\n\t\t});\n\t\tconst invalidSpawnInput = findAutoLearnSpawnNullByteInput(spawnTarget.command, args);\n\t\tif (invalidSpawnInput) {\n\t\t\tconst message = `Auto Learn not started: ${invalidSpawnInput} contains a null byte.`;\n\t\t\tthis.appendAutoLearnLog(logPath, message);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `${message} Log: ${logPath}`;\n\t\t}\n\n\t\tconst reservationResult = this.reserveAutoLearnRun({\n\t\t\tsettings,\n\t\t\tforce,\n\t\t\tcooldownKind: options.cooldownKind,\n\t\t\tbypassReflectionCooldown: options.bypassReflectionCooldown,\n\t\t\trunId,\n\t\t\tmodelPattern,\n\t\t\treason,\n\t\t\tlogPath,\n\t\t\tsessionDir,\n\t\t\tsessionId,\n\t\t\tpromptPath,\n\t\t\tkind,\n\t\t});\n\t\tif (!reservationResult.ok) {\n\t\t\treturn `Auto Learn not started: ${reservationResult.reason}`;\n\t\t}\n\t\tconst { reservation } = reservationResult;\n\n\t\ttry {\n\t\t\tfs.writeFileSync(promptPath, prompt, \"utf-8\");\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to write prompt file: ${message}`);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to write prompt file (${message}). Log: ${logPath}`;\n\t\t}\n\n\t\tlet child: ReturnType<typeof spawn> | undefined;\n\t\tlet outFd: number | undefined;\n\t\ttry {\n\t\t\toutFd = fs.openSync(logPath, \"a\");\n\t\t\tconst sourceSessionFile = this.session.sessionManager.getSessionFile();\n\t\t\tchild = spawn(spawnTarget.command, args, {\n\t\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: [\"ignore\", outFd, outFd],\n\t\t\t\tenv: {\n\t\t\t\t\t...process.env,\n\t\t\t\t\tPI_AUTO_LEARN_CHILD: \"1\",\n\t\t\t\t\t...(sourceSessionFile ? { PI_AUTO_LEARN_SOURCE_SESSION_FILE: sourceSessionFile } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t\tchild.once(\"error\", (error) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to start: ${message}`);\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to start: ${message}`);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to spawn background learner (${message}). Log: ${logPath}`;\n\t\t} finally {\n\t\t\tif (outFd !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tfs.closeSync(outFd);\n\t\t\t\t} catch {\n\t\t\t\t\t// The child has already been spawned or startup has already failed; ignore close errors here.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!child || typeof child.pid !== \"number\" || child.pid <= 0) {\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to spawn background learner. Log: ${logPath}`;\n\t\t}\n\t\tconst childPid = child.pid;\n\t\tchild.once(\"exit\", (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tthis.cleanupCompletedAutoLearnRun(reservation.runId, {\n\t\t\t\t\tartifactPaths: [promptPath, logPath, sessionDir],\n\t\t\t\t\tsessionDir,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tlogPath,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tchild.unref();\n\t\tthis.markAutoLearnReservationRunning(reservation, childPid, settings);\n\n\t\tthis.updateAutoLearnFooter();\n\t\treturn `Auto Learn started. Log: ${logPath}`;\n\t}\n\n\tprivate evaluateAutonomyReview(messages: AgentMessage[]): AutonomyReviewDecision {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tconst complexTaskThreshold = Math.max(1, settings.complexTaskToolCalls ?? 12);\n\t\tconst turn = analyzeReflectionTurn(messages, complexTaskThreshold);\n\t\tconst digest = turn.recentTurnText || \"[No textual turn digest available.]\";\n\t\tconst state = this.withAutoLearnStateLock((current) => {\n\t\t\tconst pruned = this.pruneAutoLearnHistoryFromState(current);\n\t\t\treturn { result: pruned, next: pruned };\n\t\t});\n\t\tconst now = Date.now();\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst runningCount = Object.values(state.runs ?? {}).filter((run) => run.tenant === tenant).length;\n\t\tconst lastReflection = state.lastReflectionByTenant?.[tenant] ?? 0;\n\t\tconst cooldownMs = settings.reflectionCooldownMinutes * 60 * 1000;\n\t\tconst cooldownRemainingMs = Math.max(0, lastReflection + cooldownMs - now);\n\t\tconst messageCount = this.getAutoLearnMessageCount();\n\t\tconst contextPercent = this.session.getContextUsage()?.percent ?? null;\n\t\tconst toolCalls = turn.toolCallCount;\n\t\tconst userText = turn.userText;\n\t\tconst correctionSignal = turn.hadCorrection;\n\t\tconst behavioralSelfImprovementSignal =\n\t\t\t/\\b(harness|pi|agent|autonomy|autonomous|self[- ]?improv(?:e|ement|ing)?|steer(?:ing)?|trigger(?:s)?|skill(?:s)?|code[- ]?bak(?:e|ed)|bake(?:d)? into code|not (?:automata|memory)|reference agent|hermes)\\b/i.test(\n\t\t\t\tuserText,\n\t\t\t) &&\n\t\t\t/\\b(improve|automatic(?:ally)?|autonomous|trigger|fire|skill|steer|self[- ]?improv(?:e|ement|ing)?|code[- ]?bak(?:e|ed)|bake(?:d)?|too much|less)\\b/i.test(\n\t\t\t\tuserText,\n\t\t\t);\n\t\tconst complexTaskSignal = toolCalls >= complexTaskThreshold;\n\t\tconst bypassCooldown = correctionSignal || behavioralSelfImprovementSignal || complexTaskSignal;\n\t\tconst base = { messageCount, contextPercent, cooldownRemainingMs, runningCount, toolCalls };\n\t\tif (!settings.enabled) return { ...base, shouldRun: false, reason: \"disabled\" };\n\t\tif (!settings.reflectionReview) return { ...base, shouldRun: false, reason: \"reflection disabled\" };\n\t\tif (runningCount >= settings.maxConcurrentLearners) {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: `max tenant learners running (${runningCount}/${settings.maxConcurrentLearners})`,\n\t\t\t};\n\t\t}\n\t\tif (cooldownRemainingMs > 0 && !bypassCooldown) {\n\t\t\treturn { ...base, shouldRun: false, reason: \"reflection cooldown\" };\n\t\t}\n\t\tif (behavioralSelfImprovementSignal) {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: \"reflection behavioral self-improvement signal\",\n\t\t\t\tdigest,\n\t\t\t\tbypassCooldown: true,\n\t\t\t};\n\t\t}\n\t\tif (correctionSignal) {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: \"reflection correction signal\",\n\t\t\t\tdigest,\n\t\t\t\tbypassCooldown: true,\n\t\t\t};\n\t\t}\n\t\tif (complexTaskSignal) {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `reflection complex task learning signal (${toolCalls}/${complexTaskThreshold} tool calls)`,\n\t\t\t\tdigest,\n\t\t\t\tbypassCooldown: true,\n\t\t\t};\n\t\t}\n\t\t// Full autonomy expands allowed action scope for triggered reviews; it does not make every turn a review trigger.\n\t\tif (toolCalls >= settings.reflectionMinToolCalls) {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `reflection tool trigger (${toolCalls}/${settings.reflectionMinToolCalls})`,\n\t\t\t\tdigest,\n\t\t\t};\n\t\t}\n\t\treturn { ...base, shouldRun: false, reason: \"reflection thresholds not met\" };\n\t}\n\n\t/**\n\t * Native reflection is the in-process replacement for the buggy `continuous-learning`\n\t * subprocess. It runs when auto-learn is enabled and is not killed via `PI_NATIVE_REFLECTION=0`.\n\t */\n\tisNativeReflectionEnabled(): boolean {\n\t\tif (process.env.PI_NATIVE_REFLECTION === \"0\") return false;\n\t\tif (process.env.PI_AUTO_LEARN_CHILD === \"1\") return false;\n\t\treturn this.getEffectiveAutoLearnSettings().enabled;\n\t}\n\n\t/**\n\t * Cheap turn-boundary task_steps contract check. Reads the current task_steps snapshot,\n\t * advances the pure `checkTaskStepsContract` streak, and — on the exact turn a sustained\n\t * violation first reaches the threshold — delivers a ONE-LINE advisory harness note through the\n\t * session's existing next-turn message surface (`sendCustomMessage(..., {deliverAs:\"nextTurn\"})`,\n\t * the same mechanism `_pendingNextTurnMessages` already injects `memory_context`/\n\t * `task_steps_context` pages through). Zero model calls; a delivery failure is swallowed so this\n\t * best-effort nudge can never disrupt the turn.\n\t *\n\t * Called from both `maybeRunNativeReflection` and `maybeStartAutoLearn` — the mutually exclusive\n\t * `agent_end` branches in interactive-mode.ts — so it runs on every turn regardless of whether\n\t * native reflection or legacy auto-learn is enabled, without adding a new turn-boundary hook.\n\t */\n\tprivate checkTaskStepsContractNudge(): void {\n\t\tconst state = this.session.getTaskStepsStateSnapshot();\n\t\tconst outcome = checkTaskStepsContract(state, this._taskContractStreak);\n\t\tthis._taskContractStreak = outcome.streak;\n\t\tif (!outcome.note) return;\n\t\tvoid this.session\n\t\t\t.sendCustomMessage(\n\t\t\t\t{ customType: \"task_contract_nudge\", content: outcome.note, display: false },\n\t\t\t\t{ deliverAs: \"nextTurn\" },\n\t\t\t)\n\t\t\t.catch(() => {\n\t\t\t\t// Advisory-only harness note; delivery failure must never disrupt the session.\n\t\t\t});\n\t}\n\n\tmaybeRunNativeReflection(messages: AgentMessage[]): void {\n\t\tthis.checkTaskStepsContractNudge();\n\t\t// Reflection scheduling is session-owned in AgentSession/ReflectionController so print, RPC,\n\t\t// and interactive modes share one deduplicated lifecycle. This interactive hook only owns the\n\t\t// task-contract nudge; keeping the argument preserves the host interface without a parallel path.\n\t\tvoid messages;\n\t}\n\n\tmaybeStartAutoLearn(): boolean {\n\t\t// The other mutually exclusive `agent_end` branch (see `checkTaskStepsContractNudge`) — runs\n\t\t// unconditionally here so the contract nudge fires every turn regardless of auto-learn settings.\n\t\tthis.checkTaskStepsContractNudge();\n\t\tif (process.env.PI_AUTO_LEARN_CHILD === \"1\") return false;\n\t\tconst decision = this.evaluateAutoLearn(false);\n\t\tif (!decision.shouldRun) {\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn false;\n\t\t}\n\t\tconst message = this.launchAutoLearn(decision.reason, false);\n\t\tif (!message.startsWith(\"Auto Learn started\")) this.deps.ui.showStatus(message);\n\t\treturn message.startsWith(\"Auto Learn started\");\n\t}\n\n\tmaybeStartAutonomyReview(messages: AgentMessage[]): boolean {\n\t\tif (process.env.PI_AUTO_LEARN_CHILD === \"1\") return false;\n\t\tconst decision = this.evaluateAutonomyReview(messages);\n\t\tif (!decision.shouldRun) return false;\n\t\tconst message = this.launchAutoLearn(decision.reason, true, {\n\t\t\tcooldownKind: \"reflection\",\n\t\t\tpromptKind: \"reflection\",\n\t\t\tturnDigest: decision.digest,\n\t\t\tbypassReflectionCooldown: decision.bypassCooldown,\n\t\t});\n\t\tif (!message.startsWith(\"Auto Learn started\")) this.deps.ui.showStatus(message);\n\t\treturn message.startsWith(\"Auto Learn started\");\n\t}\n\n\tupdateAutoLearnFooter(): void {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tif (!settings.enabled) {\n\t\t\tthis.deps.ui.footerDataProvider.setExtensionStatus(\"auto-learn\", undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst state = this.getPrunedAutoLearnState();\n\t\tconst hasActiveRun = Object.values(state.runs ?? {}).some(\n\t\t\t(run) => run.tenant === tenant && this.isAutoLearnPidAlive(run.pid),\n\t\t);\n\t\tthis.deps.ui.footerDataProvider.setExtensionStatus(\n\t\t\t\"auto-learn\",\n\t\t\thasActiveRun ? theme.fg(\"warning\", \"(learning)\") : undefined,\n\t\t);\n\t\tthis.deps.ui.invalidateFooter();\n\t\tthis.deps.ui.requestRender();\n\t}\n\n\tformatAutoLearnStatus(): string {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tconst decision = this.evaluateAutoLearn(false);\n\t\tconst state = this.getPrunedAutoLearnState();\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst runs = Object.entries(state.runs ?? {}).filter(([, run]) => run.tenant === tenant);\n\t\tconst otherTenantRuns = Object.values(state.runs ?? {}).filter((run) => run.tenant !== tenant).length;\n\t\tconst contextText = decision.contextPercent === null ? \"unknown\" : `${decision.contextPercent.toFixed(1)}%`;\n\t\tconst cooldownText =\n\t\t\tdecision.cooldownRemainingMs > 0 ? `${Math.ceil(decision.cooldownRemainingMs / 60000)}m remaining` : \"ready\";\n\t\tconst runLines = runs.length\n\t\t\t? runs\n\t\t\t\t\t.map(([id, run]) => {\n\t\t\t\t\t\tconst session = [\n\t\t\t\t\t\t\trun.sessionId ? `session=${run.sessionId}` : \"\",\n\t\t\t\t\t\t\trun.sessionDir ? `sessionDir=${run.sessionDir}` : \"\",\n\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\t\tconst sessionText = session ? `, ${session}` : \"\";\n\t\t\t\t\t\treturn `- ${id}: ${run.model}, kind=${run.kind ?? \"auto\"}, status=${run.status ?? \"running\"}, authority=${run.authority ?? \"unknown\"}, pid=${run.pid ?? \"?\"}${sessionText}, log=${run.logPath}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t: \"- none\";\n\t\tconst reloadBlockers = getPendingReloadBlockers({\n\t\t\townPid: process.pid,\n\t\t\townSessionId: this.session.sessionManager.getSessionId(),\n\t\t\townSessionFile: this.session.sessionManager.getSessionFile(),\n\t\t});\n\t\tconst reloadBlockerLines = reloadBlockers.pending\n\t\t\t? reloadBlockers.descriptions.map((description) => `- ${description}`).join(\"\\n\")\n\t\t\t: \"- none\";\n\t\t// In-process quiesce registry (background lanes, scout runs, isolated completions) — the\n\t\t// reload gate's OTHER source of blockers, distinct from the cross-process ones above.\n\t\tconst inFlightWork = getInFlightWorkUnits(getAgentDir());\n\t\tconst inFlightWorkLines = inFlightWork.length\n\t\t\t? inFlightWork.map((unit) => `- ${describeInFlightWorkUnit(unit)}`).join(\"\\n\")\n\t\t\t: \"- none\";\n\t\tconst reflectionLast = state.lastReflectionByTenant?.[this.getAutoLearnTenantKey()] ?? 0;\n\t\tconst reflectionCooldownRemainingMs = Math.max(\n\t\t\t0,\n\t\t\treflectionLast + settings.reflectionCooldownMinutes * 60 * 1000 - Date.now(),\n\t\t);\n\t\tconst reflectionCooldownText =\n\t\t\treflectionCooldownRemainingMs > 0 ? `${Math.ceil(reflectionCooldownRemainingMs / 60000)}m remaining` : \"ready\";\n\t\treturn `Auto Learn status\\nEnabled: ${settings.enabled}\\nModel: ${settings.model}\\nNext decision: ${decision.shouldRun ? \"ready\" : decision.reason}\\nMessages: ${decision.messageCount}/${settings.longSessionMessages}\\nContext: ${contextText}/${settings.longSessionContextPercent}%\\nCooldown: ${cooldownText}\\nReflection review: ${settings.reflectionReview ? \"enabled\" : \"disabled\"} (tool trigger ${settings.reflectionMinToolCalls}, cooldown ${reflectionCooldownText})\\nHistory retention: 7 days for internal Auto Learn prompts/logs/sessions\\nRunning tenant leases: ${runs.length}/${settings.maxConcurrentLearners}\\nOther tenant leases: ${otherTenantRuns}\\nTenant artifact dir: ${this.getAutoLearnTenantDataDir()}\\nPi auto-reload blockers: ${reloadBlockers.pending ? reloadBlockers.reason : \"none\"}\\n${reloadBlockerLines}\\nIn-process reload-gate work: ${inFlightWork.length ? `${inFlightWork.length} unit(s)` : \"none\"}\\n${inFlightWorkLines}\\nRuns:\\n${runLines}`;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"auto-learn-controller.js","sourceRoot":"","sources":["../../../src/modes/interactive/auto-learn-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Auto-Learn / Native-Reflection controller.\n *\n * Extracted verbatim from interactive-mode.ts (god-file decomposition). Owns the disk-backed\n * Auto Learn run-state machine (state.json + lockfile), the background-learner spawn/prune\n * lifecycle, and the interactive task-contract nudge. It takes narrow deps (a live session\n * accessor, a self-modification-source resolver that stays in the host, and a small UI callback\n * surface) rather than the whole InteractiveMode instance.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@caupulican/pi-agent-core\";\nimport { isAutoLearnSessionId } from \"@caupulican/pi-agent-core/session\";\nimport type { Model } from \"@caupulican/pi-ai\";\nimport type { SelectItem } from \"@caupulican/pi-tui\";\nimport { spawn } from \"child_process\";\nimport lockfile from \"proper-lockfile\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { readAutoLearnSessionIdFromFile, reportCompletedAutoLearnUsageHelper } from \"../../core/cost/session-usage.ts\";\nimport {\n\tgetAutoLearnPreset,\n\tisCurrentSessionReflectionEnabled,\n\tresolveAutoLearnSettings,\n} from \"../../core/learning/auto-learn-settings.ts\";\nimport { isProcessAlive } from \"../../core/process-liveness.ts\";\nimport {\n\tdescribeInFlightWorkUnit,\n\tgetInFlightWorkUnits,\n\tgetPendingReloadBlockers,\n} from \"../../core/reload-blockers.ts\";\nimport { PI_SESSION_ROLE_ENV } from \"../../core/session-role.ts\";\nimport type { AutoLearnSettings, AutonomyMode } from \"../../core/settings-manager.ts\";\nimport {\n\tcheckTaskStepsContract,\n\tINITIAL_TASK_CONTRACT_STREAK,\n\ttype TaskContractStreak,\n} from \"../../core/tasks/task-contract-monitor.ts\";\nimport { getProcessWorkRun } from \"../../utils/work-directory.ts\";\nimport { theme } from \"./theme/theme.ts\";\n\nexport const AUTONOMY_MODES: AutonomyMode[] = [\"off\", \"safe\", \"balanced\", \"full\"];\nconst AUTO_LEARN_RESERVATION_MS = 2 * 60 * 1000;\nexport const AUTO_LEARN_HISTORY_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport interface AutoLearnHistoryPruneResult {\n\tpromptFiles: number;\n\tlogFiles: number;\n\tsessionFiles: number;\n\terrors: number;\n}\n\nexport interface AutoLearnHistoryPruneOptions {\n\tdataDir: string;\n\tnow?: number;\n\tretentionMs?: number;\n\tactiveRunIds?: Iterable<string | undefined>;\n\tactiveSessionIds?: Iterable<string | undefined>;\n}\n\ntype AutoLearnHistoryPruneCounter = Exclude<keyof AutoLearnHistoryPruneResult, \"errors\">;\n\nfunction definedStringSet(values: Iterable<string | undefined> | undefined): Set<string> {\n\tconst set = new Set<string>();\n\tif (!values) return set;\n\tfor (const value of values) {\n\t\tif (typeof value === \"string\" && value.length > 0) set.add(value);\n\t}\n\treturn set;\n}\n\nfunction sanitizeAutoLearnPathPart(input: string | undefined, fallback: string): string {\n\tconst cleaned = (input || fallback)\n\t\t.replace(/[^a-zA-Z0-9._-]+/g, \"-\")\n\t\t.replace(/-+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 80);\n\treturn cleaned || fallback;\n}\n\nfunction isOldAutoLearnArtifact(filePath: string, now: number, retentionMs: number): boolean {\n\tconst stats = fs.lstatSync(filePath);\n\treturn stats.isFile() && now - stats.mtimeMs > retentionMs;\n}\n\nfunction removeOldAutoLearnArtifact(\n\tfilePath: string,\n\tresult: AutoLearnHistoryPruneResult,\n\tcounter: AutoLearnHistoryPruneCounter,\n): void {\n\ttry {\n\t\tfs.rmSync(filePath, { force: true });\n\t\tresult[counter]++;\n\t} catch {\n\t\tresult.errors++;\n\t}\n}\n\nfunction isPathInside(target: string, root: string): boolean {\n\tconst resolvedTarget = path.resolve(target);\n\tconst resolvedRoot = path.resolve(root);\n\treturn resolvedTarget === resolvedRoot || resolvedTarget.startsWith(`${resolvedRoot}${path.sep}`);\n}\n\nfunction removeAutoLearnArtifactPath(filePath: string, root: string): boolean {\n\tif (!isPathInside(filePath, root)) return false;\n\ttry {\n\t\tfs.rmSync(filePath, { recursive: true, force: true });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getAutoLearnSessionIdFromFileName(fileName: string): string | undefined {\n\treturn fileName.match(/_(auto-learn-[A-Za-z0-9._-]+)\\.jsonl$/)?.[1];\n}\n\nfunction readAutoLearnDirectoryEntries(dir: string): fs.Dirent[] {\n\ttry {\n\t\treturn fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction visitAutoLearnFiles(root: string, visit: (filePath: string, fileName: string) => void): void {\n\tconst pendingDirectories = [root];\n\twhile (pendingDirectories.length > 0) {\n\t\tconst dir = pendingDirectories.pop()!;\n\t\tfor (const entry of readAutoLearnDirectoryEntries(dir)) {\n\t\t\tconst filePath = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tpendingDirectories.push(filePath);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tvisit(filePath, entry.name);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction shouldPruneAutoLearnArtifact(\n\tfilePath: string,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): boolean {\n\ttry {\n\t\treturn isOldAutoLearnArtifact(filePath, now, retentionMs);\n\t} catch {\n\t\tresult.errors++;\n\t\treturn false;\n\t}\n}\n\nfunction pruneAutoLearnSessionFiles(\n\tdir: string,\n\tactiveSessionIds: ReadonlySet<string>,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): void {\n\tvisitAutoLearnFiles(dir, (filePath, fileName) => {\n\t\tif (!fileName.endsWith(\".jsonl\") || !shouldPruneAutoLearnArtifact(filePath, now, retentionMs, result)) return;\n\t\tconst sessionId = readAutoLearnSessionIdFromFile(filePath) ?? getAutoLearnSessionIdFromFileName(fileName);\n\t\tif (!sessionId || !isAutoLearnSessionId(sessionId) || activeSessionIds.has(sessionId)) return;\n\t\tremoveOldAutoLearnArtifact(filePath, result, \"sessionFiles\");\n\t});\n}\n\nfunction pruneAutoLearnRunArtifacts(\n\tdir: string,\n\tactiveRunIds: ReadonlySet<string>,\n\tnow: number,\n\tretentionMs: number,\n\tresult: AutoLearnHistoryPruneResult,\n): void {\n\tvisitAutoLearnFiles(dir, (filePath, fileName) => {\n\t\tconst promptRunId = fileName.endsWith(\".prompt.md\") ? fileName.slice(0, -\".prompt.md\".length) : undefined;\n\t\tconst logRunId = fileName.endsWith(\".log\") ? fileName.slice(0, -\".log\".length) : undefined;\n\t\tconst runId = promptRunId ?? logRunId;\n\t\tif (!runId || activeRunIds.has(runId) || !shouldPruneAutoLearnArtifact(filePath, now, retentionMs, result))\n\t\t\treturn;\n\t\tremoveOldAutoLearnArtifact(filePath, result, promptRunId ? \"promptFiles\" : \"logFiles\");\n\t});\n}\n\nexport function pruneAutoLearnConversationHistory(options: AutoLearnHistoryPruneOptions): AutoLearnHistoryPruneResult {\n\tconst result: AutoLearnHistoryPruneResult = { promptFiles: 0, logFiles: 0, sessionFiles: 0, errors: 0 };\n\tconst dataDir = path.resolve(options.dataDir);\n\tconst now = options.now ?? Date.now();\n\tconst retentionMs = options.retentionMs ?? AUTO_LEARN_HISTORY_RETENTION_MS;\n\tconst activeRunIds = definedStringSet(options.activeRunIds);\n\tconst activeSessionIds = definedStringSet(options.activeSessionIds);\n\tif (retentionMs <= 0 || !fs.existsSync(dataDir)) return result;\n\n\tpruneAutoLearnRunArtifacts(dataDir, activeRunIds, now, retentionMs, result);\n\tpruneAutoLearnSessionFiles(dataDir, activeSessionIds, now, retentionMs, result);\n\treturn result;\n}\n\nexport interface AutoLearnRunRecord {\n\ttenant: string;\n\tpid?: number;\n\tmodel: string;\n\treason: string;\n\tstartedAt: number;\n\texpiresAt: number;\n\tcwd: string;\n\tlogPath: string;\n\tsessionDir?: string;\n\tsessionId?: string;\n\tpromptPath?: string;\n\tkind?: \"auto\" | \"reflection\";\n\tautonomyMode?: AutonomyMode;\n\tauthority?: string;\n\tstatus?: \"reserved\" | \"running\";\n}\n\nexport interface AutoLearnState {\n\tlastLaunchByTenant?: Record<string, number>;\n\tlastReflectionByTenant?: Record<string, number>;\n\truns?: Record<string, AutoLearnRunRecord>;\n}\n\ninterface AutoLearnStateLockResult<T> {\n\tresult: T;\n\tnext?: AutoLearnState;\n}\n\ninterface AutoLearnDecision {\n\tshouldRun: boolean;\n\treason: string;\n\tmessageCount: number;\n\tcontextPercent: number | null;\n\tcooldownRemainingMs: number;\n\trunningCount: number;\n\tbypassCooldown?: boolean;\n}\n\ninterface AutoLearnReservation {\n\trunId: string;\n\tstartedAt: number;\n}\n\ntype AutoLearnReservationResult = { ok: true; reservation: AutoLearnReservation } | { ok: false; reason: string };\n\nexport interface AutoLearnSpawnTarget {\n\tcommand: string;\n\targsPrefix: string[];\n}\n\nexport interface AutoLearnSpawnArgsOptions {\n\tname: string;\n\tmodelPattern: string;\n\tthinkingLevel?: string;\n\tsessionDir: string;\n\tsessionId: string;\n\tpromptPath: string;\n}\n\nexport function buildAutoLearnSpawnArgs(\n\tspawnTarget: AutoLearnSpawnTarget,\n\toptions: AutoLearnSpawnArgsOptions,\n): string[] {\n\treturn [\n\t\t...spawnTarget.argsPrefix,\n\t\t\"--print\",\n\t\t\"--name\",\n\t\toptions.name,\n\t\t\"--model\",\n\t\toptions.modelPattern,\n\t\t...(options.thinkingLevel ? [\"--thinking\", options.thinkingLevel] : []),\n\t\t\"--session-dir\",\n\t\toptions.sessionDir,\n\t\t\"--session-id\",\n\t\toptions.sessionId,\n\t\t`@${options.promptPath}`,\n\t];\n}\n\nexport function findAutoLearnSpawnNullByteInput(command: string, args: readonly string[]): string | undefined {\n\tif (command.includes(\"\\0\")) return \"command\";\n\tconst argIndex = args.findIndex((arg) => arg.includes(\"\\0\"));\n\treturn argIndex === -1 ? undefined : `args[${argIndex}]`;\n}\n\nexport interface AutoLearnControllerUi {\n\tshowStatus(message: string): void;\n\treadonly footerDataProvider: { setExtensionStatus(key: string, text: string | undefined): void };\n\tinvalidateFooter(): void;\n\trequestRender(): void;\n}\n\nexport interface AutoLearnControllerDeps {\n\tgetSession(): AgentSession;\n\tresolveSelfModificationSource(settings: { sourcePath?: string; sourcePaths?: string[] }): string | undefined;\n\tui: AutoLearnControllerUi;\n}\n\nexport class AutoLearnController {\n\t// Cheap turn-boundary task_steps contract nudge. Tracks the consecutive-violation streak\n\t// across turns so `checkTaskStepsContractNudge` (invoked from the existing per-turn `agent_end`\n\t// pass below) can fire exactly one advisory harness note per sustained-violation streak. It makes\n\t// no model call and remains independent of current-session reflection cue planning.\n\tprivate _taskContractStreak: TaskContractStreak = INITIAL_TASK_CONTRACT_STREAK;\n\n\tprivate readonly deps: AutoLearnControllerDeps;\n\n\tconstructor(deps: AutoLearnControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tprivate get session(): AgentSession {\n\t\treturn this.deps.getSession();\n\t}\n\n\tprivate getAutoLearnModelAuthPriority(model: Model<any>): number {\n\t\tif (this.session.model && model.provider === this.session.model.provider && model.id === this.session.model.id) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst credential = this.session.modelRegistry.authStorage.get(model.provider);\n\t\tif (credential?.type === \"oauth\") return 1;\n\t\tif (credential?.type === \"api_key\") return 2;\n\n\t\tconst authStatus = this.session.modelRegistry.getProviderAuthStatus(model.provider);\n\t\tswitch (authStatus.source) {\n\t\t\tcase \"runtime\":\n\t\t\t\treturn 3;\n\t\t\tcase \"environment\":\n\t\t\t\treturn 4;\n\t\t\tcase \"models_json_key\":\n\t\t\tcase \"models_json_command\":\n\t\t\tcase \"fallback\":\n\t\t\t\treturn 5;\n\t\t\tdefault:\n\t\t\t\treturn 6;\n\t\t}\n\t}\n\n\tprivate getAutoLearnModelAuthLabel(model: Model<any>): string {\n\t\tconst credential = this.session.modelRegistry.authStorage.get(model.provider);\n\t\tif (credential?.type === \"oauth\") return \"subscription\";\n\t\tif (credential?.type === \"api_key\") return \"API key\";\n\n\t\tconst authStatus = this.session.modelRegistry.getProviderAuthStatus(model.provider);\n\t\tswitch (authStatus.source) {\n\t\t\tcase \"runtime\":\n\t\t\t\treturn authStatus.label ? `runtime ${authStatus.label}` : \"runtime API key\";\n\t\t\tcase \"environment\":\n\t\t\t\treturn authStatus.label ? `env ${authStatus.label}` : \"environment API key\";\n\t\t\tcase \"models_json_key\":\n\t\t\t\treturn \"models.json API key\";\n\t\t\tcase \"models_json_command\":\n\t\t\t\treturn \"models.json command\";\n\t\t\tcase \"fallback\":\n\t\t\t\treturn authStatus.label ?? \"custom provider config\";\n\t\t\tdefault:\n\t\t\t\treturn \"configured\";\n\t\t}\n\t}\n\n\tgetAutoLearnModelOptions(): SelectItem[] {\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst availableModels = this.session.modelRegistry.getAvailable();\n\t\tconst sortedModels = [...availableModels].sort((a, b) => {\n\t\t\tconst priorityDelta = this.getAutoLearnModelAuthPriority(a) - this.getAutoLearnModelAuthPriority(b);\n\t\t\tif (priorityDelta !== 0) return priorityDelta;\n\t\t\tconst providerDelta = this.session.modelRegistry\n\t\t\t\t.getProviderDisplayName(a.provider)\n\t\t\t\t.localeCompare(this.session.modelRegistry.getProviderDisplayName(b.provider));\n\t\t\tif (providerDelta !== 0) return providerDelta;\n\t\t\treturn a.id.localeCompare(b.id);\n\t\t});\n\n\t\treturn sortedModels.map((model) => {\n\t\t\tconst providerName = this.session.modelRegistry.getProviderDisplayName(model.provider);\n\t\t\tconst authLabel = this.getAutoLearnModelAuthLabel(model);\n\t\t\tconst modelPattern = `${model.provider}/${model.id}`;\n\t\t\tconst currentLabel =\n\t\t\t\tthis.session.model && model.provider === this.session.model.provider && model.id === this.session.model.id\n\t\t\t\t\t? \" · current\"\n\t\t\t\t\t: \"\";\n\t\t\tconst displayName = model.name && model.name !== model.id ? ` · ${model.name}` : \"\";\n\t\t\treturn {\n\t\t\t\tvalue: modelPattern,\n\t\t\t\tlabel: modelPattern,\n\t\t\t\tdescription: `${providerName} · ${authLabel}${currentLabel}${displayName}`,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetAutoLearnDataDir(): string {\n\t\treturn getProcessWorkRun(getAgentDir(), \"learning\", \"auto-learn\", \"state\").path;\n\t}\n\n\tprivate getAutoLearnStatePath(): string {\n\t\treturn path.join(this.getAutoLearnDataDir(), \"state.json\");\n\t}\n\n\tprivate ensureAutoLearnStateFile(): void {\n\t\tconst dir = this.getAutoLearnDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tconst statePath = this.getAutoLearnStatePath();\n\t\tif (!fs.existsSync(statePath)) {\n\t\t\tfs.writeFileSync(statePath, \"{}\\n\", \"utf-8\");\n\t\t}\n\t}\n\n\tprivate readAutoLearnState(): AutoLearnState {\n\t\ttry {\n\t\t\tconst statePath = this.getAutoLearnStatePath();\n\t\t\tif (!fs.existsSync(statePath)) return {};\n\t\t\treturn JSON.parse(fs.readFileSync(statePath, \"utf-8\")) as AutoLearnState;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate writeAutoLearnState(state: AutoLearnState): void {\n\t\tconst dir = this.getAutoLearnDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tfs.writeFileSync(this.getAutoLearnStatePath(), `${JSON.stringify(state, null, 2)}\\n`, \"utf-8\");\n\t}\n\n\tprivate acquireAutoLearnStateLock(): () => void {\n\t\tthis.ensureAutoLearnStateFile();\n\t\tconst statePath = this.getAutoLearnStatePath();\n\t\tconst maxAttempts = 20;\n\t\tconst delayMs = 25;\n\t\tlet lastError: unknown;\n\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn lockfile.lockSync(statePath, { realpath: false, stale: 30000 });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst code =\n\t\t\t\t\terror && typeof error === \"object\" && \"code\" in error ? String((error as { code?: unknown }).code) : \"\";\n\t\t\t\tif (code !== \"ELOCKED\" || attempt === maxAttempts) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlastError = error;\n\t\t\t\tconst start = Date.now();\n\t\t\t\twhile (Date.now() - start < delayMs) {\n\t\t\t\t\t// Synchronous callers need a synchronous lock retry loop.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthrow lastError instanceof Error ? lastError : new Error(\"Failed to acquire Auto Learn state lock\");\n\t}\n\n\tprivate withAutoLearnStateLock<T>(fn: (state: AutoLearnState) => AutoLearnStateLockResult<T>): T {\n\t\tlet release: (() => void) | undefined;\n\t\ttry {\n\t\t\trelease = this.acquireAutoLearnStateLock();\n\t\t\tconst { result, next } = fn(this.readAutoLearnState());\n\t\t\tif (next !== undefined) {\n\t\t\t\tthis.writeAutoLearnState(next);\n\t\t\t}\n\t\t\treturn result;\n\t\t} finally {\n\t\t\trelease?.();\n\t\t}\n\t}\n\n\tprivate appendAutoLearnLog(logPath: string, message: string): void {\n\t\ttry {\n\t\t\tfs.appendFileSync(logPath, `${message}\\n`, \"utf-8\");\n\t\t} catch {\n\t\t\t// Logging must never turn a background learner startup failure into an interactive crash.\n\t\t}\n\t}\n\n\tprivate isAutoLearnPidAlive(pid: number | undefined): boolean {\n\t\treturn isProcessAlive(pid);\n\t}\n\n\tprivate pruneAutoLearnState(state: AutoLearnState, now = Date.now()): AutoLearnState {\n\t\tconst runs = { ...(state.runs ?? {}) };\n\t\tfor (const [id, run] of Object.entries(runs)) {\n\t\t\tif (run.expiresAt <= now) {\n\t\t\t\tdelete runs[id];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (run.status === \"reserved\" && run.pid === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!this.isAutoLearnPidAlive(run.pid)) {\n\t\t\t\tdelete runs[id];\n\t\t\t}\n\t\t}\n\t\treturn { ...state, runs };\n\t}\n\n\tprivate pruneAutoLearnHistoryFromState(state: AutoLearnState, now = Date.now()): AutoLearnState {\n\t\tconst prunedState = this.pruneAutoLearnState(state, now);\n\t\tpruneAutoLearnConversationHistory({\n\t\t\tdataDir: this.getAutoLearnDataDir(),\n\t\t\tnow,\n\t\t\tactiveRunIds: Object.keys(prunedState.runs ?? {}),\n\t\t\tactiveSessionIds: Object.values(prunedState.runs ?? {}).map((run) => run.sessionId),\n\t\t});\n\t\treturn prunedState;\n\t}\n\n\tgetPrunedAutoLearnState(): AutoLearnState {\n\t\treturn this.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\treturn { result: state, next: state };\n\t\t});\n\t}\n\n\tgetAutoLearnPresetForAutonomyMode(mode: AutonomyMode, current: AutoLearnSettings = {}): Required<AutoLearnSettings> {\n\t\treturn getAutoLearnPreset(mode, current);\n\t}\n\n\tgetEffectiveAutoLearnSettings(): Required<AutoLearnSettings> {\n\t\tconst settings = this.session.settingsManager.getAutoLearnSettings();\n\t\treturn resolveAutoLearnSettings(this.session.settingsManager.getAutonomySettings().mode, settings);\n\t}\n\n\tgetCurrentAutoLearnSettings(): Required<AutoLearnSettings> {\n\t\treturn this.getEffectiveAutoLearnSettings();\n\t}\n\n\tgetAutoLearnTenantKey(): string {\n\t\treturn `${this.session.sessionManager.getCwd()}::${this.session.sessionId}`;\n\t}\n\n\tprivate getAutoLearnTenantId(): string {\n\t\tconst cwdHash = crypto\n\t\t\t.createHash(\"sha256\")\n\t\t\t.update(this.session.sessionManager.getCwd())\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 8);\n\t\tconst sessionPart = sanitizeAutoLearnPathPart(this.session.sessionId, \"session\");\n\t\treturn `${sessionPart}-${cwdHash}`;\n\t}\n\n\tgetAutoLearnTenantDataDir(): string {\n\t\treturn path.join(this.getAutoLearnDataDir(), \"tenants\", this.getAutoLearnTenantId());\n\t}\n\n\tprivate getAutoLearnMessageCount(): number {\n\t\treturn this.session.sessionManager.getBranch().filter((entry) => entry.type === \"message\").length;\n\t}\n\n\tprivate buildAutoLearnDecisionFromState(\n\t\tstate: AutoLearnState,\n\t\tsettings: Required<AutoLearnSettings>,\n\t\tforce = false,\n\t): AutoLearnDecision {\n\t\tconst now = Date.now();\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst runningCount = Object.values(state.runs ?? {}).filter((run) => run.tenant === tenant).length;\n\t\tconst lastLaunch = state.lastLaunchByTenant?.[tenant] ?? 0;\n\t\tconst cooldownMs = settings.cooldownMinutes * 60 * 1000;\n\t\tconst cooldownRemainingMs = Math.max(0, lastLaunch + cooldownMs - now);\n\t\tconst messageCount = this.getAutoLearnMessageCount();\n\t\tconst contextPercent = this.session.getContextUsage()?.percent ?? null;\n\n\t\tif (!settings.enabled && !force) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: \"disabled\",\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (runningCount >= settings.maxConcurrentLearners) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: `max tenant learners running (${runningCount}/${settings.maxConcurrentLearners})`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (!force && cooldownRemainingMs > 0) {\n\t\t\treturn {\n\t\t\t\tshouldRun: false,\n\t\t\t\treason: \"cooldown\",\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (force) {\n\t\t\treturn { shouldRun: true, reason: \"manual\", messageCount, contextPercent, cooldownRemainingMs, runningCount };\n\t\t}\n\t\tif (messageCount >= settings.longSessionMessages) {\n\t\t\treturn {\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `message trigger (${messageCount}/${settings.longSessionMessages})`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\tif (contextPercent !== null && contextPercent >= settings.longSessionContextPercent) {\n\t\t\treturn {\n\t\t\t\tshouldRun: true,\n\t\t\t\treason: `context trigger (${contextPercent.toFixed(1)}%/${settings.longSessionContextPercent}%)`,\n\t\t\t\tmessageCount,\n\t\t\t\tcontextPercent,\n\t\t\t\tcooldownRemainingMs,\n\t\t\t\trunningCount,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tshouldRun: false,\n\t\t\treason: \"thresholds not met\",\n\t\t\tmessageCount,\n\t\t\tcontextPercent,\n\t\t\tcooldownRemainingMs,\n\t\t\trunningCount,\n\t\t};\n\t}\n\n\t/** Read-only readiness projection for the manual Auto Learn command and status report. */\n\tprivate evaluateAutoLearn(force = false): AutoLearnDecision {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\treturn this.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\treturn { result: this.buildAutoLearnDecisionFromState(state, settings, force), next: state };\n\t\t});\n\t}\n\n\tprivate resolveAutoLearnModelPattern(settings: Required<AutoLearnSettings>): string | undefined {\n\t\tif (settings.model === \"active\") {\n\t\t\treturn this.session.model ? `${this.session.model.provider}/${this.session.model.id}` : undefined;\n\t\t}\n\t\treturn settings.model;\n\t}\n\n\tprivate getAutoLearnSpawnTarget(): AutoLearnSpawnTarget | undefined {\n\t\tconst overridePath = process.env.PI_AUTO_LEARN_CLI_PATH?.trim();\n\t\tif (overridePath) {\n\t\t\treturn { command: overridePath, argsPrefix: [] };\n\t\t}\n\n\t\tconst execBase = path.basename(process.execPath).toLowerCase();\n\t\tconst isScriptRuntime =\n\t\t\texecBase === \"node\" || execBase === \"node.exe\" || execBase === \"bun\" || execBase === \"bun.exe\";\n\t\tif (!isScriptRuntime) {\n\t\t\treturn { command: process.execPath, argsPrefix: [] };\n\t\t}\n\n\t\tconst cliPath = process.argv[1];\n\t\tif (!cliPath || cliPath.startsWith(\"-\")) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { command: process.execPath, argsPrefix: [cliPath] };\n\t}\n\n\tvalidateAutoLearnModelValue(value: string | undefined): string | undefined {\n\t\tconst modelValue = value?.trim();\n\t\tif (!modelValue || modelValue === \"active\") return undefined;\n\t\tconst available = this.session.modelRegistry.getAvailable();\n\t\tif (modelValue.includes(\"/\")) {\n\t\t\tconst [provider, modelId] = modelValue.split(\"/\", 2);\n\t\t\tif (available.some((model) => model.provider === provider && model.id === modelId)) return undefined;\n\t\t\treturn `Auto Learn model \"${modelValue}\" is not in configured subscription/API models; saved as manual/unverified.`;\n\t\t}\n\t\tif (available.some((model) => model.id === modelValue)) return undefined;\n\t\treturn `Auto Learn model \"${modelValue}\" is not in configured subscription/API models; saved as manual/unverified.`;\n\t}\n\n\tprivate buildAutonomyAuthorityPrompt(): string {\n\t\tconst autonomy = this.session.settingsManager.getAutonomySettings();\n\t\tconst selfModification = this.session.settingsManager.getSelfModificationSettings();\n\t\tif (autonomy.mode !== \"full\") {\n\t\t\treturn [\n\t\t\t\t\"Authority mode: proposal-gated.\",\n\t\t\t\t\"- You may autonomously query memory and run bounded learning tools.\",\n\t\t\t\t\"- Durable memory writes require the configured high-confidence policy; skills, extensions, source, settings, publishing, tagging, and releases remain proposals unless the foreground user explicitly asks.\",\n\t\t\t].join(\"\\n\");\n\t\t}\n\n\t\tconst selfModificationSource = selfModification.enabled\n\t\t\t? this.deps.resolveSelfModificationSource(selfModification)\n\t\t\t: undefined;\n\t\tconst sourceAuthority =\n\t\t\tselfModification.enabled && selfModificationSource\n\t\t\t\t? `- Pi source: standing authority to edit the authorized selfModification source (${selfModificationSource}) for self-evolution improvements; inspect git status first, preserve unrelated user changes, run focused validation, and leave a clear rollback/test summary.`\n\t\t\t\t: \"- Pi source: no standing source-edit authority until selfModification.enabled and selfModification.sourcePaths are set.\";\n\t\treturn [\n\t\t\t\"Authority mode: FULL AUTONOMOUS standing grant.\",\n\t\t\t\"- Memory: may apply high-confidence durable Automata memory/corrections after duplicate and corroboration checks.\",\n\t\t\t\"- Skills: may create or patch user/project-owned procedural skills and support files; prefer updating existing umbrella skills; do not delete skills without making a recoverable archive/backup.\",\n\t\t\t\"- User/project extensions and tools: may create or patch small scoped extensions/tools under Pi user/project roots when they address repeated workflow/tooling gaps; validate and keep changes auditable.\",\n\t\t\t\"- Settings: may auto-tune autonomy/autoLearn settings to reduce bottlenecks; do not modify credentials, provider auth, package sources, or unrelated user preferences.\",\n\t\t\tsourceAuthority,\n\t\t\t\"- Hard stops without explicit foreground approval: publish, npm release, git push, tag creation, credential changes, destructive user-data deletion, network-exposed services, or authority expansion beyond this policy.\",\n\t\t\t\"- Audit: final output must list changed paths/settings, commands/tests run, evidence, residual risks, and rollback guidance. If no safe validation is possible, leave the change as a proposal instead of applying it.\",\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate buildAutoLearnPrompt(\n\t\treason: string,\n\t\tsettings: Required<AutoLearnSettings>,\n\t\toptions: { kind?: \"auto\" | \"reflection\"; turnDigest?: string } = {},\n\t): string {\n\t\tconst authorityBlock = this.buildAutonomyAuthorityPrompt();\n\t\tconst reflectionBlock =\n\t\t\toptions.kind === \"reflection\" && options.turnDigest\n\t\t\t\t? `\\n\\nLatest completed turn digest (bounded; use only as current-session evidence, not as longitudinal proof):\\n<turn_digest>\\n${options.turnDigest}\\n</turn_digest>`\n\t\t\t\t: \"\";\n\t\tconst objective =\n\t\t\toptions.kind === \"reflection\"\n\t\t\t\t? \"review the latest completed turn for durable memory, skill, validation, tooling, and code-baked self-improvement cues, then run one bounded continuous-learning pass if the learning tools are available\"\n\t\t\t\t: \"run one bounded continuous-learning pass for this Pi tenant\";\n\t\treturn `You are Pi Auto Learn running as a background learner.\\n\\nObjective: ${objective}.\\nTrigger: ${reason}.\\n\\n${authorityBlock}\\n\\nRequired workflow:\\n1. Query existing durable memory/rules first when tools allow it. Memory confrontation is mandatory before accepting, merging, upgrading, or rejecting learning candidates.\\n2. Run the available Auto Learn tooling, preferably learning_run_auto, with applyHighConfidence=${settings.applyHighConfidence}. Process candidate validation in vectorized chunks/batches; avoid scalar per-candidate memory queries except for final selected writes.\\n3. Apply the learning validation tree to each candidate chunk: (a) Why is this good for the user? (b) Is it unique, or similar to existing memory/skills/agents so it should merge or upgrade existing knowledge? (c) Will this make Pi a better agent? Candidates that cannot answer all three are noise.\\n4. Hermes-style learning cycle: after a complex task (${settings.complexTaskToolCalls}+ tool calls), user correction, repeated steering pattern, non-trivial fix/workaround/debugging path, loaded-skill defect, trigger gap, tool gap, or harness workflow defect, actively create or update durable learning artifacts. Memory stores compact facts/preferences/state; skills/prompts/agents/extensions/source store procedural behavior. When a lesson changes how Pi should act on a future class of task, memory alone is not completion.\\n5. Skill update preference order: (1) patch the currently loaded or consulted skill that governed the task; (2) patch an existing class-level umbrella skill/agent/prompt; (3) add a support file under references/, templates/, or scripts/ and add a SKILL.md pointer; (4) create a new class-level umbrella skill only when no existing artifact fits. Never create one-off PR/error/codename/session skills.\\n6. Behavioral self-improvement is code-baked by default: prefer the lowest durable executable layer that fixes the behavior — patch an existing skill/prompt/agent/extension/tool, tune an approved setting, or edit the authorized Pi source when source authority is available. Use Automata only for concise facts/evidence pointers that support the baked change.\\n7. Do not harden transient or environment-dependent failures into durable behavior: missing binaries, fresh-install package gaps, credentials not configured, path mismatches, one-off task narratives, or negative tool-broken claims should become setup/troubleshooting fixes only when the fix itself is reusable.\\n8. Treat the latest-turn digest as current-session evidence only; do not auto-commit one-off cues unless deterministic tooling and memory confrontation corroborate them.\\n9. In mode=full, apply safe memory/skill/user-extension/authorized-source improvements under the standing grant above; otherwise keep them proposal-gated.\\n10. Never cross hard-stop boundaries from the authority policy.\\n11. If the learning tools are unavailable, report BLOCKED with the missing tool names and do not improvise.\\n12. Finish with PASS, BLOCKED, or FAIL and concise evidence, including chunk counts, merge/upgrade/code-bake decisions, changed paths/settings, validation, and cleanup/purge status.${reflectionBlock}`;\n\t}\n\n\tprivate reserveAutoLearnRun(params: {\n\t\tsettings: Required<AutoLearnSettings>;\n\t\tforce: boolean;\n\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\tbypassReflectionCooldown?: boolean;\n\t\trunId: string;\n\t\tmodelPattern: string;\n\t\treason: string;\n\t\tlogPath: string;\n\t\tsessionDir: string;\n\t\tsessionId: string;\n\t\tpromptPath: string;\n\t\tkind: \"auto\" | \"reflection\";\n\t}): AutoLearnReservationResult {\n\t\treturn this.withAutoLearnStateLock<AutoLearnReservationResult>((current) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current, now);\n\t\t\tconst tenant = this.getAutoLearnTenantKey();\n\n\t\t\tif (params.cooldownKind === \"reflection\" && !params.bypassReflectionCooldown) {\n\t\t\t\tconst lastReflection = state.lastReflectionByTenant?.[tenant] ?? 0;\n\t\t\t\tconst cooldownMs = params.settings.reflectionCooldownMinutes * 60 * 1000;\n\t\t\t\tif (Math.max(0, lastReflection + cooldownMs - now) > 0) {\n\t\t\t\t\treturn { result: { ok: false, reason: \"reflection cooldown\" }, next: state };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst decision = this.buildAutoLearnDecisionFromState(state, params.settings, params.force);\n\t\t\tif (!decision.shouldRun) {\n\t\t\t\treturn { result: { ok: false, reason: decision.reason }, next: state };\n\t\t\t}\n\n\t\t\tconst run: AutoLearnRunRecord = {\n\t\t\t\ttenant,\n\t\t\t\tmodel: params.modelPattern,\n\t\t\t\treason: params.reason,\n\t\t\t\tstartedAt: now,\n\t\t\t\texpiresAt: now + AUTO_LEARN_RESERVATION_MS,\n\t\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\t\tlogPath: params.logPath,\n\t\t\t\tsessionDir: params.sessionDir,\n\t\t\t\tsessionId: params.sessionId,\n\t\t\t\tpromptPath: params.promptPath,\n\t\t\t\tkind: params.kind,\n\t\t\t\tautonomyMode: this.session.settingsManager.getAutonomySettings().mode,\n\t\t\t\tauthority:\n\t\t\t\t\tthis.session.settingsManager.getAutonomySettings().mode === \"full\"\n\t\t\t\t\t\t? \"standing-full-autonomous\"\n\t\t\t\t\t\t: \"proposal-gated\",\n\t\t\t\tstatus: \"reserved\",\n\t\t\t};\n\t\t\tconst next: AutoLearnState = {\n\t\t\t\t...state,\n\t\t\t\truns: { ...(state.runs ?? {}), [params.runId]: run },\n\t\t\t};\n\t\t\tif (params.cooldownKind === \"reflection\") {\n\t\t\t\tnext.lastReflectionByTenant = { ...(state.lastReflectionByTenant ?? {}), [tenant]: now };\n\t\t\t} else {\n\t\t\t\tnext.lastLaunchByTenant = { ...(state.lastLaunchByTenant ?? {}), [tenant]: now };\n\t\t\t}\n\t\t\treturn { result: { ok: true, reservation: { runId: params.runId, startedAt: now } }, next };\n\t\t});\n\t}\n\n\tprivate releaseAutoLearnReservation(reservation: AutoLearnReservation, cooldownKind?: \"auto\" | \"reflection\"): void {\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current);\n\t\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\t\tconst runs = { ...(state.runs ?? {}) };\n\t\t\tdelete runs[reservation.runId];\n\t\t\tconst next: AutoLearnState = { ...state, runs };\n\t\t\tif (cooldownKind === \"reflection\" && next.lastReflectionByTenant?.[tenant] === reservation.startedAt) {\n\t\t\t\tnext.lastReflectionByTenant = { ...next.lastReflectionByTenant };\n\t\t\t\tdelete next.lastReflectionByTenant[tenant];\n\t\t\t} else if (cooldownKind !== \"reflection\" && next.lastLaunchByTenant?.[tenant] === reservation.startedAt) {\n\t\t\t\tnext.lastLaunchByTenant = { ...next.lastLaunchByTenant };\n\t\t\t\tdelete next.lastLaunchByTenant[tenant];\n\t\t\t}\n\t\t\treturn { result: undefined, next };\n\t\t});\n\t}\n\n\tprivate reportCompletedAutoLearnUsage(runId: string, sessionDir: string, sessionId: string, logPath: string): void {\n\t\ttry {\n\t\t\treportCompletedAutoLearnUsageHelper({\n\t\t\t\trunId,\n\t\t\t\tsessionDir,\n\t\t\t\tsessionId,\n\t\t\t\tlogPath,\n\t\t\t\tparentSession: this.session,\n\t\t\t\tappendLog: (p, msg) => this.appendAutoLearnLog(p, msg),\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn usage report failed: ${message}`);\n\t\t}\n\t}\n\n\tprivate cleanupCompletedAutoLearnRun(\n\t\trunId: string,\n\t\toptions: {\n\t\t\tartifactPaths: string[];\n\t\t\tsessionDir: string;\n\t\t\tsessionId: string;\n\t\t\tlogPath: string;\n\t\t},\n\t): void {\n\t\tthis.reportCompletedAutoLearnUsage(runId, options.sessionDir, options.sessionId, options.logPath);\n\t\tconst dataDir = this.getAutoLearnDataDir();\n\t\tfor (const filePath of options.artifactPaths) removeAutoLearnArtifactPath(filePath, dataDir);\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst state = this.pruneAutoLearnState(current);\n\t\t\tconst runs = { ...(state.runs ?? {}) };\n\t\t\tdelete runs[runId];\n\t\t\treturn { result: undefined, next: { ...state, runs } };\n\t\t});\n\t\tthis.updateAutoLearnFooter();\n\t}\n\n\tprivate markAutoLearnReservationRunning(\n\t\treservation: AutoLearnReservation,\n\t\tpid: number,\n\t\tsettings: Required<AutoLearnSettings>,\n\t): void {\n\t\tthis.withAutoLearnStateLock((current) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst state = this.pruneAutoLearnHistoryFromState(current, now);\n\t\t\tconst run = state.runs?.[reservation.runId];\n\t\t\tif (!run) {\n\t\t\t\treturn { result: undefined, next: state };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tresult: undefined,\n\t\t\t\tnext: {\n\t\t\t\t\t...state,\n\t\t\t\t\truns: {\n\t\t\t\t\t\t...(state.runs ?? {}),\n\t\t\t\t\t\t[reservation.runId]: {\n\t\t\t\t\t\t\t...run,\n\t\t\t\t\t\t\tpid,\n\t\t\t\t\t\t\texpiresAt: now + settings.leaseMinutes * 60 * 1000,\n\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tlaunchAutoLearn(\n\t\treason: string,\n\t\tforce = false,\n\t\toptions: {\n\t\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\t\tpromptKind?: \"auto\" | \"reflection\";\n\t\t\tturnDigest?: string;\n\t\t\tbypassReflectionCooldown?: boolean;\n\t\t} = {},\n\t): string {\n\t\tif (options.promptKind === \"reflection\" || options.cooldownKind === \"reflection\") {\n\t\t\treturn \"Auto Learn not started: automatic reflection runs only in the current root session; background reflection learners are disabled.\";\n\t\t}\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tconst modelPattern = this.resolveAutoLearnModelPattern(settings);\n\t\tif (!modelPattern) {\n\t\t\treturn \"Auto Learn not started: no active model is available for model=active.\";\n\t\t}\n\t\tconst spawnTarget = this.getAutoLearnSpawnTarget();\n\t\tif (!spawnTarget) {\n\t\t\treturn \"Auto Learn not started: could not resolve current pi CLI path.\";\n\t\t}\n\n\t\tconst dir = this.getAutoLearnTenantDataDir();\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t\tconst runId = `${Date.now()}-${crypto.randomUUID().slice(0, 8)}`;\n\t\tconst logPath = path.join(dir, `${runId}.log`);\n\t\tconst promptPath = path.join(dir, `${runId}.prompt.md`);\n\t\tconst kind = options.promptKind ?? \"auto\";\n\t\tconst sessionDir = path.join(dir, \"sessions\", runId);\n\t\tconst sessionId = `auto-learn-${kind}-${this.getAutoLearnTenantId()}-${runId}`;\n\t\tfs.mkdirSync(sessionDir, { recursive: true });\n\t\tconst prompt = this.buildAutoLearnPrompt(reason, settings, {\n\t\t\tkind,\n\t\t\tturnDigest: options.turnDigest,\n\t\t});\n\t\tconst args = buildAutoLearnSpawnArgs(spawnTarget, {\n\t\t\tname: `Auto Learn ${runId}`,\n\t\t\tmodelPattern,\n\t\t\tthinkingLevel: settings.thinkingLevel ?? \"low\",\n\t\t\tsessionDir,\n\t\t\tsessionId,\n\t\t\tpromptPath,\n\t\t});\n\t\tconst invalidSpawnInput = findAutoLearnSpawnNullByteInput(spawnTarget.command, args);\n\t\tif (invalidSpawnInput) {\n\t\t\tconst message = `Auto Learn not started: ${invalidSpawnInput} contains a null byte.`;\n\t\t\tthis.appendAutoLearnLog(logPath, message);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `${message} Log: ${logPath}`;\n\t\t}\n\n\t\tconst reservationResult = this.reserveAutoLearnRun({\n\t\t\tsettings,\n\t\t\tforce,\n\t\t\tcooldownKind: options.cooldownKind,\n\t\t\tbypassReflectionCooldown: options.bypassReflectionCooldown,\n\t\t\trunId,\n\t\t\tmodelPattern,\n\t\t\treason,\n\t\t\tlogPath,\n\t\t\tsessionDir,\n\t\t\tsessionId,\n\t\t\tpromptPath,\n\t\t\tkind,\n\t\t});\n\t\tif (!reservationResult.ok) {\n\t\t\treturn `Auto Learn not started: ${reservationResult.reason}`;\n\t\t}\n\t\tconst { reservation } = reservationResult;\n\n\t\ttry {\n\t\t\tfs.writeFileSync(promptPath, prompt, \"utf-8\");\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to write prompt file: ${message}`);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to write prompt file (${message}). Log: ${logPath}`;\n\t\t}\n\n\t\tlet child: ReturnType<typeof spawn> | undefined;\n\t\tlet outFd: number | undefined;\n\t\ttry {\n\t\t\toutFd = fs.openSync(logPath, \"a\");\n\t\t\tconst sourceSessionFile = this.session.sessionManager.getSessionFile();\n\t\t\tchild = spawn(spawnTarget.command, args, {\n\t\t\t\tcwd: this.session.sessionManager.getCwd(),\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: [\"ignore\", outFd, outFd],\n\t\t\t\tenv: {\n\t\t\t\t\t...process.env,\n\t\t\t\t\tPI_AUTO_LEARN_CHILD: \"1\",\n\t\t\t\t\t[PI_SESSION_ROLE_ENV]: \"worker\",\n\t\t\t\t\t...(sourceSessionFile ? { PI_AUTO_LEARN_SOURCE_SESSION_FILE: sourceSessionFile } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t\tchild.once(\"error\", (error) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to start: ${message}`);\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.appendAutoLearnLog(logPath, `Auto Learn failed to start: ${message}`);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to spawn background learner (${message}). Log: ${logPath}`;\n\t\t} finally {\n\t\t\tif (outFd !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tfs.closeSync(outFd);\n\t\t\t\t} catch {\n\t\t\t\t\t// The child has already been spawned or startup has already failed; ignore close errors here.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!child || typeof child.pid !== \"number\" || child.pid <= 0) {\n\t\t\tthis.releaseAutoLearnReservation(reservation, options.cooldownKind);\n\t\t\tthis.updateAutoLearnFooter();\n\t\t\treturn `Auto Learn not started: failed to spawn background learner. Log: ${logPath}`;\n\t\t}\n\t\tconst childPid = child.pid;\n\t\tchild.once(\"exit\", (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tthis.cleanupCompletedAutoLearnRun(reservation.runId, {\n\t\t\t\t\tartifactPaths: [promptPath, logPath, sessionDir],\n\t\t\t\t\tsessionDir,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tlogPath,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tchild.unref();\n\t\tthis.markAutoLearnReservationRunning(reservation, childPid, settings);\n\n\t\tthis.updateAutoLearnFooter();\n\t\treturn `Auto Learn started. Log: ${logPath}`;\n\t}\n\n\t/**\n\t * Current-session reflection is available only to the root orchestrator. It never launches a\n\t * learner process; the session provider planner owns its single-request transient cue.\n\t */\n\tisNativeReflectionEnabled(): boolean {\n\t\treturn isCurrentSessionReflectionEnabled(this.getEffectiveAutoLearnSettings());\n\t}\n\n\t/**\n\t * Cheap turn-boundary task_steps contract check. Reads the current task_steps snapshot,\n\t * advances the pure `checkTaskStepsContract` streak, and — on the exact turn a sustained\n\t * violation first reaches the threshold — delivers a ONE-LINE advisory harness note through the\n\t * session's existing next-turn message surface (`sendCustomMessage(..., {deliverAs:\"nextTurn\"})`,\n\t * the same mechanism `_pendingNextTurnMessages` already injects `memory_context`/\n\t * `task_steps_context` pages through). Zero model calls; a delivery failure is swallowed so this\n\t * best-effort nudge can never disrupt the turn.\n\t *\n\t * Called from both interactive turn-boundary compatibility hooks so it runs regardless of the\n\t * current-session reflection setting without adding another provider turn.\n\t */\n\tprivate checkTaskStepsContractNudge(): void {\n\t\tconst state = this.session.getTaskStepsStateSnapshot();\n\t\tconst outcome = checkTaskStepsContract(state, this._taskContractStreak);\n\t\tthis._taskContractStreak = outcome.streak;\n\t\tif (!outcome.note) return;\n\t\tvoid this.session\n\t\t\t.sendCustomMessage(\n\t\t\t\t{ customType: \"task_contract_nudge\", content: outcome.note, display: false },\n\t\t\t\t{ deliverAs: \"nextTurn\" },\n\t\t\t)\n\t\t\t.catch(() => {\n\t\t\t\t// Advisory-only harness note; delivery failure must never disrupt the session.\n\t\t\t});\n\t}\n\n\tmaybeRunNativeReflection(messages: AgentMessage[]): void {\n\t\tthis.checkTaskStepsContractNudge();\n\t\t// Reflection scheduling is session-owned in AgentSession/ReflectionController so print, RPC,\n\t\t// and interactive modes share one deduplicated lifecycle. This interactive hook only owns the\n\t\t// task-contract nudge; keeping the argument preserves the host interface without a parallel path.\n\t\tvoid messages;\n\t}\n\n\tmaybeStartAutoLearn(): boolean {\n\t\t// Preserve the deterministic task-contract monitor, but never buy an automatic learner turn.\n\t\tthis.checkTaskStepsContractNudge();\n\t\tthis.updateAutoLearnFooter();\n\t\treturn false;\n\t}\n\n\tmaybeStartAutonomyReview(messages: AgentMessage[]): boolean {\n\t\t// Compatibility hook for InteractiveEventHost. Completed-turn reflection is deterministic and\n\t\t// session-owned; it never creates a background process or a second provider turn.\n\t\tvoid messages;\n\t\treturn false;\n\t}\n\n\tupdateAutoLearnFooter(): void {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tif (!settings.enabled) {\n\t\t\tthis.deps.ui.footerDataProvider.setExtensionStatus(\"auto-learn\", undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst state = this.getPrunedAutoLearnState();\n\t\tconst hasActiveRun = Object.values(state.runs ?? {}).some(\n\t\t\t(run) => run.tenant === tenant && this.isAutoLearnPidAlive(run.pid),\n\t\t);\n\t\tthis.deps.ui.footerDataProvider.setExtensionStatus(\n\t\t\t\"auto-learn\",\n\t\t\thasActiveRun ? theme.fg(\"warning\", \"(learning)\") : undefined,\n\t\t);\n\t\tthis.deps.ui.invalidateFooter();\n\t\tthis.deps.ui.requestRender();\n\t}\n\n\tformatAutoLearnStatus(): string {\n\t\tconst settings = this.getEffectiveAutoLearnSettings();\n\t\tconst decision = this.evaluateAutoLearn(false);\n\t\tconst state = this.getPrunedAutoLearnState();\n\t\tconst tenant = this.getAutoLearnTenantKey();\n\t\tconst runs = Object.entries(state.runs ?? {}).filter(([, run]) => run.tenant === tenant);\n\t\tconst otherTenantRuns = Object.values(state.runs ?? {}).filter((run) => run.tenant !== tenant).length;\n\t\tconst contextText = decision.contextPercent === null ? \"unknown\" : `${decision.contextPercent.toFixed(1)}%`;\n\t\tconst cooldownText =\n\t\t\tdecision.cooldownRemainingMs > 0 ? `${Math.ceil(decision.cooldownRemainingMs / 60000)}m remaining` : \"ready\";\n\t\tconst runLines = runs.length\n\t\t\t? runs\n\t\t\t\t\t.map(([id, run]) => {\n\t\t\t\t\t\tconst session = [\n\t\t\t\t\t\t\trun.sessionId ? `session=${run.sessionId}` : \"\",\n\t\t\t\t\t\t\trun.sessionDir ? `sessionDir=${run.sessionDir}` : \"\",\n\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\t\tconst sessionText = session ? `, ${session}` : \"\";\n\t\t\t\t\t\treturn `- ${id}: ${run.model}, kind=${run.kind ?? \"auto\"}, status=${run.status ?? \"running\"}, authority=${run.authority ?? \"unknown\"}, pid=${run.pid ?? \"?\"}${sessionText}, log=${run.logPath}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t: \"- none\";\n\t\tconst reloadBlockers = getPendingReloadBlockers({\n\t\t\townPid: process.pid,\n\t\t\townSessionId: this.session.sessionManager.getSessionId(),\n\t\t\townSessionFile: this.session.sessionManager.getSessionFile(),\n\t\t});\n\t\tconst reloadBlockerLines = reloadBlockers.pending\n\t\t\t? reloadBlockers.descriptions.map((description) => `- ${description}`).join(\"\\n\")\n\t\t\t: \"- none\";\n\t\t// In-process quiesce registry (background lanes, scout runs, isolated completions) — the\n\t\t// reload gate's OTHER source of blockers, distinct from the cross-process ones above.\n\t\tconst inFlightWork = getInFlightWorkUnits(getAgentDir());\n\t\tconst inFlightWorkLines = inFlightWork.length\n\t\t\t? inFlightWork.map((unit) => `- ${describeInFlightWorkUnit(unit)}`).join(\"\\n\")\n\t\t\t: \"- none\";\n\t\tconst reflectionStatus = this.isNativeReflectionEnabled() ? \"enabled\" : \"disabled\";\n\t\treturn `Auto Learn status\\nEnabled: ${settings.enabled}\\nModel: ${settings.model}\\nNext decision: ${decision.shouldRun ? \"ready\" : decision.reason}\\nMessages: ${decision.messageCount}/${settings.longSessionMessages}\\nContext: ${contextText}/${settings.longSessionContextPercent}%\\nCooldown: ${cooldownText}\\nCurrent-session reflection: ${reflectionStatus} (complex trigger ${settings.complexTaskToolCalls} tool calls; automatic provider requests 0)\\nHistory retention: 7 days for internal Auto Learn prompts/logs/sessions\\nRunning tenant leases: ${runs.length}/${settings.maxConcurrentLearners}\\nOther tenant leases: ${otherTenantRuns}\\nTenant artifact dir: ${this.getAutoLearnTenantDataDir()}\\nPi auto-reload blockers: ${reloadBlockers.pending ? reloadBlockers.reason : \"none\"}\\n${reloadBlockerLines}\\nIn-process reload-gate work: ${inFlightWork.length ? `${inFlightWork.length} unit(s)` : \"none\"}\\n${inFlightWorkLines}\\nRuns:\\n${runLines}`;\n\t}\n}\n"]}
|
|
@@ -23,8 +23,8 @@ export function formatAutonomyStatus(host) {
|
|
|
23
23
|
? "standing grant for memory, skills, user/project extensions, autonomy/autoLearn tuning, and authorized selfModification.sourcePath edits; hard stops still require explicit foreground approval"
|
|
24
24
|
: "proposal-gated outside configured high-confidence memory policy";
|
|
25
25
|
const reflectionLine = autonomy.mode === "full"
|
|
26
|
-
? `Reflection
|
|
27
|
-
: `Reflection
|
|
26
|
+
? `Reflection cue: ${settings.reflectionReview ? "enabled" : "disabled"}; root-only durable cue for the next ordinary turn; cooldown=${settings.reflectionCooldownMinutes}m`
|
|
27
|
+
: `Reflection cue: ${settings.reflectionReview ? "enabled" : "disabled"}; tool trigger=${settings.reflectionMinToolCalls}; next ordinary turn; cooldown=${settings.reflectionCooldownMinutes}m`;
|
|
28
28
|
return [
|
|
29
29
|
"Autonomy status",
|
|
30
30
|
`Mode: ${autonomy.mode}${autonomy.mode === "full" ? " (standing autonomy)" : ""}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autonomy-commands.js","sourceRoot":"","sources":["../../../src/modes/interactive/autonomy-commands.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `/autonomy` and `/auto-learn` command bodies extracted from interactive-mode.\n *\n * These render the autonomy/auto-learn status blocks and dispatch the autonomy\n * sub-actions (mode presets, diagnostics, rollback, one-off fitness/research\n * lanes) through a narrow `AutonomyHost` seam. `applyAutonomyMode`,\n * `launchAutoLearn`, and the auto-learn getters stay host-side (shared with the\n * settings selector and AutoLearnController); interactive-mode keeps thin\n * delegating wrappers.\n */\n\nimport type { Container, TUI } from \"@caupulican/pi-tui\";\nimport { Spacer, Text } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { formatAutonomyDiagnostics } from \"../../core/autonomy/status.ts\";\nimport type { AutoLearnSettings, AutonomyMode, SettingsManager, SettingsScope } from \"../../core/settings-manager.ts\";\nimport { AUTONOMY_MODES, type AutoLearnState } from \"./auto-learn-controller.ts\";\nimport { presentModelFitnessOutcome } from \"./model-fitness-presentation.ts\";\n\nexport interface AutonomyHost {\n\treadonly session: AgentSession;\n\treadonly settingsManager: SettingsManager;\n\treadonly chatContainer: Container;\n\treadonly ui: TUI;\n\tshowStatus(message: string): void;\n\tapplyAutonomyMode(mode: AutonomyMode, scope?: SettingsScope): void;\n\tlaunchAutoLearn(\n\t\treason: string,\n\t\tforce?: boolean,\n\t\toptions?: {\n\t\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\t\tpromptKind?: \"auto\" | \"reflection\";\n\t\t\tturnDigest?: string;\n\t\t\tbypassReflectionCooldown?: boolean;\n\t\t},\n\t): string;\n\tformatAutoLearnStatus(): string;\n\tgetEffectiveAutoLearnSettings(): Required<AutoLearnSettings>;\n\tgetPrunedAutoLearnState(): AutoLearnState;\n\tgetAutoLearnTenantKey(): string;\n\tgetAutoLearnDataDir(): string;\n\tgetAutoLearnTenantDataDir(): string;\n}\n\nexport function formatAutonomyStatus(host: AutonomyHost): string {\n\tconst autonomy = host.settingsManager.getAutonomySettings();\n\tconst settings = host.getEffectiveAutoLearnSettings();\n\tconst autoLearnState = host.getPrunedAutoLearnState();\n\tconst tenant = host.getAutoLearnTenantKey();\n\tconst running = Object.entries(autoLearnState.runs ?? {}).filter(([, run]) => run.tenant === tenant);\n\tconst otherTenantRunning = Object.values(autoLearnState.runs ?? {}).filter((run) => run.tenant !== tenant).length;\n\tconst safety =\n\t\tautonomy.mode === \"full\"\n\t\t\t? \"standing grant for memory, skills, user/project extensions, autonomy/autoLearn tuning, and authorized selfModification.sourcePath edits; hard stops still require explicit foreground approval\"\n\t\t\t: \"proposal-gated outside configured high-confidence memory policy\";\n\tconst reflectionLine =\n\t\tautonomy.mode === \"full\"\n\t\t\t? `Reflection review: ${settings.reflectionReview ? \"enabled\" : \"disabled\"}; post-turn when concurrency allows; cooldown=${settings.reflectionCooldownMinutes}m`\n\t\t\t: `Reflection review: ${settings.reflectionReview ? \"enabled\" : \"disabled\"}; tool trigger=${settings.reflectionMinToolCalls}; cooldown=${settings.reflectionCooldownMinutes}m`;\n\treturn [\n\t\t\"Autonomy status\",\n\t\t`Mode: ${autonomy.mode}${autonomy.mode === \"full\" ? \" (standing autonomy)\" : \"\"}`,\n\t\t`Goal loop rounds: ${autonomy.maxStallTurns}`,\n\t\t`Auto Learn: ${settings.enabled ? \"enabled\" : \"disabled\"}; model=${settings.model}; applyHighConfidence=${settings.applyHighConfidence}`,\n\t\t`Long-session trigger: ${settings.longSessionMessages} messages or ${settings.longSessionContextPercent}% context; cooldown=${settings.cooldownMinutes}m`,\n\t\treflectionLine,\n\t\t`Running tenant learners: ${running.length}/${settings.maxConcurrentLearners}`,\n\t\t`Other tenant learners: ${otherTenantRunning}`,\n\t\t\"History retention: 7 days for internal Auto Learn prompts/logs/sessions\",\n\t\t`Standing authority: ${safety}`,\n\t\t`Audit/log dir: ${host.getAutoLearnDataDir()}`,\n\t\t`Tenant artifact dir: ${host.getAutoLearnTenantDataDir()}`,\n\t\t\"Use /autonomy off|safe|balanced|full to switch presets. Advanced overrides remain in /settings → Auto Learn Advanced.\",\n\t].join(\"\\n\");\n}\n\nexport function handleAutonomyCommand(host: AutonomyHost, text: string): void {\n\tconst action = text.slice(\"/autonomy\".length).trim() || \"status\";\n\tif (AUTONOMY_MODES.includes(action as AutonomyMode)) {\n\t\tconst mode = action as AutonomyMode;\n\t\thost.applyAutonomyMode(mode);\n\t\thost.showStatus(`Autonomy mode set to ${mode}${mode === \"full\" ? \" (standing autonomy)\" : \"\"}.`);\n\t\treturn;\n\t}\n\tif (action === \"status\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(formatAutonomyStatus(host), 1, 0));\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\tif (action === \"diagnostics\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(\n\t\t\tnew Text(formatAutonomyDiagnostics(host.session.getAutonomyDiagnosticSnapshot()), 1, 0),\n\t\t);\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\tif (action.startsWith(\"rollback\")) {\n\t\tconst auditId = action.slice(\"rollback\".length).trim();\n\t\tif (!auditId) {\n\t\t\thost.showStatus(\"Usage: /autonomy rollback <auditId> (see /autonomy diagnostics for audit ids)\");\n\t\t\treturn;\n\t\t}\n\t\tvoid host.session\n\t\t\t.rollbackLearningWrite(auditId)\n\t\t\t.then((result) => {\n\t\t\t\thost.showStatus(\n\t\t\t\t\tresult.ok ? `Rolled back learning change ${auditId}.` : `Rollback skipped: ${result.reason}`,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Rollback failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\tif (action.startsWith(\"fitness\")) {\n\t\tconst rest = action.slice(\"fitness\".length).trim().split(/\\s+/).filter(Boolean);\n\t\tconst modelPattern = rest[0];\n\t\tif (!modelPattern) {\n\t\t\thost.showStatus(\"Usage: /autonomy fitness <model-pattern> [trials]\");\n\t\t\treturn;\n\t\t}\n\t\tconst trials = rest[1] ? Number(rest[1]) : undefined;\n\t\thost.showStatus(`Model fitness probe running on ${modelPattern}…`);\n\t\tvoid host.session\n\t\t\t.runModelFitness({ model: modelPattern, trials: Number.isFinite(trials) ? trials : undefined })\n\t\t\t.then((outcome) => {\n\t\t\t\tpresentModelFitnessOutcome(host, outcome);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Model fitness failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\tif (action === \"research\") {\n\t\thost.showStatus(\"Research lane: running…\");\n\t\tvoid host.session\n\t\t\t.runResearchLaneOnce()\n\t\t\t.then((outcome) => {\n\t\t\t\tif (!outcome.started) {\n\t\t\t\t\thost.showStatus(`Research lane skipped: ${outcome.skipReason ?? \"unknown\"}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst status = outcome.record?.status ?? \"unknown\";\n\t\t\t\tconst reason = outcome.record?.reasonCode ? ` (${outcome.record.reasonCode})` : \"\";\n\t\t\t\thost.showStatus(`Research lane ${status}${reason}`);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Research lane failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\thost.showStatus(\"Usage: /autonomy [status|diagnostics|research|rollback <auditId>|off|safe|balanced|full]\");\n}\n\nexport function handleAutoLearnCommand(host: AutonomyHost, text: string): void {\n\tconst action = text.slice(\"/auto-learn\".length).trim() || \"status\";\n\tif (action === \"run\" || action === \"now\" || action === \"run-now\") {\n\t\thost.showStatus(host.launchAutoLearn(\"manual\", true));\n\t\treturn;\n\t}\n\tif (action === \"status\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(host.formatAutoLearnStatus(), 1, 0));\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\thost.showStatus(\"Usage: /auto-learn [status|run]\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"autonomy-commands.js","sourceRoot":"","sources":["../../../src/modes/interactive/autonomy-commands.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `/autonomy` and `/auto-learn` command bodies extracted from interactive-mode.\n *\n * These render the autonomy/auto-learn status blocks and dispatch the autonomy\n * sub-actions (mode presets, diagnostics, rollback, one-off fitness/research\n * lanes) through a narrow `AutonomyHost` seam. `applyAutonomyMode`,\n * `launchAutoLearn`, and the auto-learn getters stay host-side (shared with the\n * settings selector and AutoLearnController); interactive-mode keeps thin\n * delegating wrappers.\n */\n\nimport type { Container, TUI } from \"@caupulican/pi-tui\";\nimport { Spacer, Text } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { formatAutonomyDiagnostics } from \"../../core/autonomy/status.ts\";\nimport type { AutoLearnSettings, AutonomyMode, SettingsManager, SettingsScope } from \"../../core/settings-manager.ts\";\nimport { AUTONOMY_MODES, type AutoLearnState } from \"./auto-learn-controller.ts\";\nimport { presentModelFitnessOutcome } from \"./model-fitness-presentation.ts\";\n\nexport interface AutonomyHost {\n\treadonly session: AgentSession;\n\treadonly settingsManager: SettingsManager;\n\treadonly chatContainer: Container;\n\treadonly ui: TUI;\n\tshowStatus(message: string): void;\n\tapplyAutonomyMode(mode: AutonomyMode, scope?: SettingsScope): void;\n\tlaunchAutoLearn(\n\t\treason: string,\n\t\tforce?: boolean,\n\t\toptions?: {\n\t\t\tcooldownKind?: \"auto\" | \"reflection\";\n\t\t\tpromptKind?: \"auto\" | \"reflection\";\n\t\t\tturnDigest?: string;\n\t\t\tbypassReflectionCooldown?: boolean;\n\t\t},\n\t): string;\n\tformatAutoLearnStatus(): string;\n\tgetEffectiveAutoLearnSettings(): Required<AutoLearnSettings>;\n\tgetPrunedAutoLearnState(): AutoLearnState;\n\tgetAutoLearnTenantKey(): string;\n\tgetAutoLearnDataDir(): string;\n\tgetAutoLearnTenantDataDir(): string;\n}\n\nexport function formatAutonomyStatus(host: AutonomyHost): string {\n\tconst autonomy = host.settingsManager.getAutonomySettings();\n\tconst settings = host.getEffectiveAutoLearnSettings();\n\tconst autoLearnState = host.getPrunedAutoLearnState();\n\tconst tenant = host.getAutoLearnTenantKey();\n\tconst running = Object.entries(autoLearnState.runs ?? {}).filter(([, run]) => run.tenant === tenant);\n\tconst otherTenantRunning = Object.values(autoLearnState.runs ?? {}).filter((run) => run.tenant !== tenant).length;\n\tconst safety =\n\t\tautonomy.mode === \"full\"\n\t\t\t? \"standing grant for memory, skills, user/project extensions, autonomy/autoLearn tuning, and authorized selfModification.sourcePath edits; hard stops still require explicit foreground approval\"\n\t\t\t: \"proposal-gated outside configured high-confidence memory policy\";\n\tconst reflectionLine =\n\t\tautonomy.mode === \"full\"\n\t\t\t? `Reflection cue: ${settings.reflectionReview ? \"enabled\" : \"disabled\"}; root-only durable cue for the next ordinary turn; cooldown=${settings.reflectionCooldownMinutes}m`\n\t\t\t: `Reflection cue: ${settings.reflectionReview ? \"enabled\" : \"disabled\"}; tool trigger=${settings.reflectionMinToolCalls}; next ordinary turn; cooldown=${settings.reflectionCooldownMinutes}m`;\n\treturn [\n\t\t\"Autonomy status\",\n\t\t`Mode: ${autonomy.mode}${autonomy.mode === \"full\" ? \" (standing autonomy)\" : \"\"}`,\n\t\t`Goal loop rounds: ${autonomy.maxStallTurns}`,\n\t\t`Auto Learn: ${settings.enabled ? \"enabled\" : \"disabled\"}; model=${settings.model}; applyHighConfidence=${settings.applyHighConfidence}`,\n\t\t`Long-session trigger: ${settings.longSessionMessages} messages or ${settings.longSessionContextPercent}% context; cooldown=${settings.cooldownMinutes}m`,\n\t\treflectionLine,\n\t\t`Running tenant learners: ${running.length}/${settings.maxConcurrentLearners}`,\n\t\t`Other tenant learners: ${otherTenantRunning}`,\n\t\t\"History retention: 7 days for internal Auto Learn prompts/logs/sessions\",\n\t\t`Standing authority: ${safety}`,\n\t\t`Audit/log dir: ${host.getAutoLearnDataDir()}`,\n\t\t`Tenant artifact dir: ${host.getAutoLearnTenantDataDir()}`,\n\t\t\"Use /autonomy off|safe|balanced|full to switch presets. Advanced overrides remain in /settings → Auto Learn Advanced.\",\n\t].join(\"\\n\");\n}\n\nexport function handleAutonomyCommand(host: AutonomyHost, text: string): void {\n\tconst action = text.slice(\"/autonomy\".length).trim() || \"status\";\n\tif (AUTONOMY_MODES.includes(action as AutonomyMode)) {\n\t\tconst mode = action as AutonomyMode;\n\t\thost.applyAutonomyMode(mode);\n\t\thost.showStatus(`Autonomy mode set to ${mode}${mode === \"full\" ? \" (standing autonomy)\" : \"\"}.`);\n\t\treturn;\n\t}\n\tif (action === \"status\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(formatAutonomyStatus(host), 1, 0));\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\tif (action === \"diagnostics\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(\n\t\t\tnew Text(formatAutonomyDiagnostics(host.session.getAutonomyDiagnosticSnapshot()), 1, 0),\n\t\t);\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\tif (action.startsWith(\"rollback\")) {\n\t\tconst auditId = action.slice(\"rollback\".length).trim();\n\t\tif (!auditId) {\n\t\t\thost.showStatus(\"Usage: /autonomy rollback <auditId> (see /autonomy diagnostics for audit ids)\");\n\t\t\treturn;\n\t\t}\n\t\tvoid host.session\n\t\t\t.rollbackLearningWrite(auditId)\n\t\t\t.then((result) => {\n\t\t\t\thost.showStatus(\n\t\t\t\t\tresult.ok ? `Rolled back learning change ${auditId}.` : `Rollback skipped: ${result.reason}`,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Rollback failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\tif (action.startsWith(\"fitness\")) {\n\t\tconst rest = action.slice(\"fitness\".length).trim().split(/\\s+/).filter(Boolean);\n\t\tconst modelPattern = rest[0];\n\t\tif (!modelPattern) {\n\t\t\thost.showStatus(\"Usage: /autonomy fitness <model-pattern> [trials]\");\n\t\t\treturn;\n\t\t}\n\t\tconst trials = rest[1] ? Number(rest[1]) : undefined;\n\t\thost.showStatus(`Model fitness probe running on ${modelPattern}…`);\n\t\tvoid host.session\n\t\t\t.runModelFitness({ model: modelPattern, trials: Number.isFinite(trials) ? trials : undefined })\n\t\t\t.then((outcome) => {\n\t\t\t\tpresentModelFitnessOutcome(host, outcome);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Model fitness failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\tif (action === \"research\") {\n\t\thost.showStatus(\"Research lane: running…\");\n\t\tvoid host.session\n\t\t\t.runResearchLaneOnce()\n\t\t\t.then((outcome) => {\n\t\t\t\tif (!outcome.started) {\n\t\t\t\t\thost.showStatus(`Research lane skipped: ${outcome.skipReason ?? \"unknown\"}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst status = outcome.record?.status ?? \"unknown\";\n\t\t\t\tconst reason = outcome.record?.reasonCode ? ` (${outcome.record.reasonCode})` : \"\";\n\t\t\t\thost.showStatus(`Research lane ${status}${reason}`);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\thost.showStatus(`Research lane failed: ${message}`);\n\t\t\t});\n\t\treturn;\n\t}\n\thost.showStatus(\"Usage: /autonomy [status|diagnostics|research|rollback <auditId>|off|safe|balanced|full]\");\n}\n\nexport function handleAutoLearnCommand(host: AutonomyHost, text: string): void {\n\tconst action = text.slice(\"/auto-learn\".length).trim() || \"status\";\n\tif (action === \"run\" || action === \"now\" || action === \"run-now\") {\n\t\thost.showStatus(host.launchAutoLearn(\"manual\", true));\n\t\treturn;\n\t}\n\tif (action === \"status\") {\n\t\thost.chatContainer.addChild(new Spacer(1));\n\t\thost.chatContainer.addChild(new Text(host.formatAutoLearnStatus(), 1, 0));\n\t\thost.ui.requestRender();\n\t\treturn;\n\t}\n\thost.showStatus(\"Usage: /auto-learn [status|run]\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-lane.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/activity-lane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,KAAK,SAAS,EAAiD,MAAM,mCAAmC,CAAC;AAClH,OAAO,KAAK,EAAY,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpG,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtG,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,6BAA6B;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAMD,eAAO,MAAM,kCAAkC,qBAAqB,CAAC;AAErE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,OAAO,CAEjG;
|
|
1
|
+
{"version":3,"file":"activity-lane.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/activity-lane.ts"],"names":[],"mappings":"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"}
|
|
@@ -106,29 +106,17 @@ function projectLaneRecords(records) {
|
|
|
106
106
|
kind: "worker",
|
|
107
107
|
label: laneLabel(record),
|
|
108
108
|
status: record.status === "queued" ? "waiting" : "active",
|
|
109
|
-
tag: record.type === "tmux-worker"
|
|
109
|
+
tag: record.type === "tmux-worker"
|
|
110
|
+
? record.status === "queued"
|
|
111
|
+
? "tmux agent queued"
|
|
112
|
+
: "tmux agent running"
|
|
113
|
+
: record.status === "queued"
|
|
114
|
+
? "agent queued"
|
|
115
|
+
: "agent running",
|
|
110
116
|
}));
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
record.status === "blocked" ||
|
|
115
|
-
record.status === "failed" ||
|
|
116
|
-
record.status === "timeout" ||
|
|
117
|
-
record.status === "budget_exhausted" ||
|
|
118
|
-
record.status === "canceled")
|
|
119
|
-
.map((record) => ({
|
|
120
|
-
id: `terminal:worker:${record.laneId}:${record.status}:${record.completedAt ?? "unknown"}`,
|
|
121
|
-
kind: "worker",
|
|
122
|
-
label: boundedLabel(`${record.status === "succeeded" ? "Finished" : record.status} · ${record.label ?? record.laneId}`),
|
|
123
|
-
status: record.status === "succeeded"
|
|
124
|
-
? "success"
|
|
125
|
-
: record.status === "partial" || record.status === "blocked"
|
|
126
|
-
? "warning"
|
|
127
|
-
: record.status === "canceled"
|
|
128
|
-
? "neutral"
|
|
129
|
-
: "failure",
|
|
130
|
-
}));
|
|
131
|
-
return { active, terminal };
|
|
117
|
+
// Terminal workers are projected only after the foreground delivery owner resolves the
|
|
118
|
+
// observation receipt. This prevents already-read events from flashing in the TUI.
|
|
119
|
+
return { active, terminal: [] };
|
|
132
120
|
}
|
|
133
121
|
export function projectActivityLane(snapshot) {
|
|
134
122
|
const task = projectTaskState(snapshot.taskState);
|
|
@@ -212,7 +200,8 @@ function renderConcurrency(theme, groups) {
|
|
|
212
200
|
const parts = [];
|
|
213
201
|
const shown = groups.slice(0, AGGREGATE_GROUP_MAX);
|
|
214
202
|
for (const group of shown) {
|
|
215
|
-
|
|
203
|
+
const tag = group.count === 1 ? group.tag : group.tag.replace(/\bagent\b/, "agents");
|
|
204
|
+
parts.push(theme.fg(group.waiting ? "warning" : "muted", `${group.count} ${tag}`));
|
|
216
205
|
}
|
|
217
206
|
const overflow = groups.length - shown.length;
|
|
218
207
|
if (overflow > 0)
|