crewly 1.13.0 → 1.14.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/config/constants.ts +8 -0
- package/config/roles/orchestrator/prompt.md +23 -0
- package/config/skills/_common/complete-body-shape.test.sh +113 -0
- package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
- package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
- package/config/skills/agent/core/accept-task/execute.sh +30 -5
- package/config/skills/agent/core/block-task/execute.sh +59 -6
- package/config/skills/agent/core/complete-task/SKILL.md +37 -5
- package/config/skills/agent/core/complete-task/execute.sh +40 -9
- package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
- package/config/skills/agent/core/create-task/SKILL.md +33 -0
- package/config/skills/agent/core/create-task/execute.sh +82 -23
- package/config/skills/agent/core/delegate-task/execute.sh +46 -0
- package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
- package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
- package/config/skills/agent/core/handoff-task/execute.sh +8 -1
- package/config/skills/agent/core/reply-channel/SKILL.md +6 -0
- package/config/skills/agent/core/reply-channel/execute.sh +14 -2
- package/config/skills/agent/core/report-status/SKILL.md +26 -0
- package/config/skills/agent/core/report-status/execute.sh +40 -5
- package/config/skills/agent/core/slack-post/SKILL.md +126 -0
- package/config/skills/agent/core/slack-post/execute.sh +127 -0
- package/config/skills/agent/remote-browser/SKILL.md +178 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
- package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
- package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
- package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
- package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
- package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
- package/config/skills/orchestrator/get-team-status/SKILL.md +5 -1
- package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
- package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
- package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
- package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
- package/config/skills/team-leader/delegate-task/execute.sh +132 -43
- package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
- package/config/slack-app-manifest.json +7 -1
- package/config/vitest-exclude.constants.ts +56 -0
- package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
- package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/backend/backend/src/config/oauth.config.js +121 -19
- package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
- package/dist/backend/backend/src/constants.d.ts +60 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +74 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +33 -4
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +360 -15
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +43 -7
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
- package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
- package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +13 -11
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +14 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +56 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -7
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +110 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +54 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +47 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +183 -15
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +297 -3
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
- package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +22 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +71 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +15 -2
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +33 -7
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +87 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
- package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/build-provenance.js +211 -0
- package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
- package/dist/backend/build-info.json +4 -0
- package/dist/backend/config/constants.d.ts +8 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +8 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
- package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
- package/dist/backend/config/vitest-exclude.constants.js +55 -0
- package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
- package/dist/cli/backend/src/config/oauth.config.d.ts +93 -19
- package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.js +121 -19
- package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +60 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +74 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +292 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +794 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1322 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
- package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
- package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +229 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +448 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
- package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
- package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
- package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-client.js +302 -0
- package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
- package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
- package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
- package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +150 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +293 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
- package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
- package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/index.d.ts +47 -0
- package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/index.js +50 -0
- package/dist/cli/backend/src/services/session/index.js.map +1 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
- package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/index.js +11 -0
- package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
- package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
- package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/settings/role.service.js +728 -0
- package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1946 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +430 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.js +1388 -0
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
- package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
- package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
- package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.js +534 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
- package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
- package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
- package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
- package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
- package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/intent-task.types.js +403 -0
- package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
- package/dist/cli/backend/src/types/slack.types.d.ts +87 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/index.js +22 -0
- package/dist/cli/backend/src/types/v2/index.js.map +1 -0
- package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
- package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
- package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
- package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/request.types.js +179 -0
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
- package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
- package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
- package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
- package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/async.utils.js +80 -0
- package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
- package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
- package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/team.utils.d.ts +40 -0
- package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/team.utils.js +66 -0
- package/dist/cli/backend/src/utils/team.utils.js.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
- package/dist/cli/cli/src/index.js +0 -0
- package/dist/cli/config/constants.d.ts +8 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +8 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
- package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
- package/dist/cli/config/vitest-exclude.constants.js +55 -0
- package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
- package/frontend/dist/assets/index-190a957f.js +4961 -0
- package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -2
- package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
- package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
- package/packages/crewly-agent/src/runtime/types.ts +56 -5
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
- package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
- package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.js +0 -8
- package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
- package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
- package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.js +0 -38
- package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
- package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.js +0 -38
- package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
- package/frontend/dist/assets/index-aa737fd3.js +0 -5254
|
@@ -0,0 +1,1056 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Window Monitor Service
|
|
3
|
+
*
|
|
4
|
+
* Monitors PTY session output for context window usage percentages and triggers
|
|
5
|
+
* proactive warnings and runtime-native compaction when thresholds are exceeded.
|
|
6
|
+
*
|
|
7
|
+
* When an agent's session reports context usage (e.g., "85% context"),
|
|
8
|
+
* this service detects the percentage, evaluates it against configured thresholds,
|
|
9
|
+
* and takes action:
|
|
10
|
+
* - Yellow (70%): Publishes a warning event
|
|
11
|
+
* - Red (85%): Publishes a warning + triggers runtime compact (/compact or /compress)
|
|
12
|
+
* - Critical (95%): Retries compact with cooldown; auto-recovery disabled by default
|
|
13
|
+
*
|
|
14
|
+
* Strategy: prefer runtime-native compact/compress commands which preserve session
|
|
15
|
+
* state over session kill + restart which loses all context. Auto-recovery is
|
|
16
|
+
* available as a last resort via AUTO_RECOVERY_ENABLED constant.
|
|
17
|
+
*
|
|
18
|
+
* Follows the PTY subscription pattern from RuntimeExitMonitorService and the
|
|
19
|
+
* lifecycle/restart pattern from AgentHeartbeatMonitorService.
|
|
20
|
+
*
|
|
21
|
+
* @module services/agent/context-window-monitor
|
|
22
|
+
*/
|
|
23
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
24
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
25
|
+
import { getSessionBackendSync, } from '../session/index.js';
|
|
26
|
+
import { getSessionStatePersistence } from '../session/session-state-persistence.js';
|
|
27
|
+
import { getTerminalGateway } from '../../websocket/terminal.gateway.js';
|
|
28
|
+
import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
|
|
29
|
+
import { RuntimeExitMonitorService } from './runtime-exit-monitor.service.js';
|
|
30
|
+
import { stripAnsiCodes } from '../../utils/terminal-output.utils.js';
|
|
31
|
+
import { getSettingsService } from '../settings/settings.service.js';
|
|
32
|
+
import { CONTEXT_WINDOW_MONITOR_CONSTANTS, RUNTIME_COMPACT_COMMANDS, RUNTIME_TYPES, ORCHESTRATOR_SESSION_NAME, CREWLY_CONSTANTS, AGENT_SUSPEND_CONSTANTS, SESSION_COMMAND_DELAYS, } from '../../constants.js';
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Regex patterns for detecting context usage percentages in PTY output
|
|
35
|
+
// =============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Patterns to match context window usage percentages from PTY output.
|
|
38
|
+
* Each pattern captures the percentage as group 1.
|
|
39
|
+
*
|
|
40
|
+
* Covers:
|
|
41
|
+
* - Claude Code: "85% context", "context: 85%", "85% ctx"
|
|
42
|
+
* - Gemini CLI: "85% context used", "context 85%"
|
|
43
|
+
* - Generic: "XX% of context"
|
|
44
|
+
*/
|
|
45
|
+
const CONTEXT_PERCENT_PATTERNS = [
|
|
46
|
+
/(\d{1,3})%\s*(?:of\s+)?context/i,
|
|
47
|
+
/context[:\s]+(\d{1,3})%/i,
|
|
48
|
+
/(\d{1,3})%\s*ctx/i,
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Patterns to detect Gemini CLI token-count context display.
|
|
52
|
+
* Gemini CLI shows remaining context as token counts (e.g., "1M context left)",
|
|
53
|
+
* "500K context left)") rather than percentages.
|
|
54
|
+
*
|
|
55
|
+
* These patterns extract the numeric token count and unit suffix.
|
|
56
|
+
* Group 1: numeric value, Group 2: unit (K, M, or empty = raw number).
|
|
57
|
+
*/
|
|
58
|
+
const GEMINI_CONTEXT_TOKEN_PATTERNS = [
|
|
59
|
+
/(\d+(?:\.\d+)?)\s*(K|M|k|m)?\s*(?:tokens?\s+)?context\s+left/i,
|
|
60
|
+
/(\d+(?:\.\d+)?)\s*(K|M|k|m)?\s*context\s+(?:tokens?\s+)?(?:left|remaining)/i,
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Known max context sizes for Gemini models (in tokens).
|
|
64
|
+
* Used to estimate context usage percentage from token counts.
|
|
65
|
+
* Conservative estimate: assume 1M tokens max (Gemini 2.0 Flash/Pro).
|
|
66
|
+
*/
|
|
67
|
+
const GEMINI_DEFAULT_MAX_CONTEXT_TOKENS = 1_000_000;
|
|
68
|
+
// =============================================================================
|
|
69
|
+
// Service
|
|
70
|
+
// =============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* Monitors agent PTY sessions for context window usage and triggers
|
|
73
|
+
* threshold-based warnings and auto-recovery.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const monitor = ContextWindowMonitorService.getInstance();
|
|
78
|
+
* monitor.setDependencies(backend, regService, storageService, taskService, eventBus);
|
|
79
|
+
* monitor.start();
|
|
80
|
+
* monitor.startSessionMonitoring('agent-dev', 'member-1', 'team-1', 'developer');
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export class ContextWindowMonitorService {
|
|
84
|
+
static instance = null;
|
|
85
|
+
logger;
|
|
86
|
+
/** Per-session context window state */
|
|
87
|
+
contextStates = new Map();
|
|
88
|
+
/** Per-session PTY data subscriptions + rolling buffers */
|
|
89
|
+
sessionSubscriptions = new Map();
|
|
90
|
+
/** Periodic check interval timer */
|
|
91
|
+
checkTimer = null;
|
|
92
|
+
/** Dependencies (injected via setDependencies) */
|
|
93
|
+
sessionBackend = null;
|
|
94
|
+
agentRegistrationService = null;
|
|
95
|
+
storageService = null;
|
|
96
|
+
eventBusService = null;
|
|
97
|
+
constructor() {
|
|
98
|
+
this.logger = LoggerService.getInstance().createComponentLogger('ContextWindowMonitor');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the singleton instance.
|
|
102
|
+
*
|
|
103
|
+
* @returns The ContextWindowMonitorService singleton
|
|
104
|
+
*/
|
|
105
|
+
static getInstance() {
|
|
106
|
+
if (!ContextWindowMonitorService.instance) {
|
|
107
|
+
ContextWindowMonitorService.instance = new ContextWindowMonitorService();
|
|
108
|
+
}
|
|
109
|
+
return ContextWindowMonitorService.instance;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Reset the singleton (for testing).
|
|
113
|
+
*/
|
|
114
|
+
static resetInstance() {
|
|
115
|
+
if (ContextWindowMonitorService.instance) {
|
|
116
|
+
ContextWindowMonitorService.instance.stop();
|
|
117
|
+
ContextWindowMonitorService.instance.destroyAllSubscriptions();
|
|
118
|
+
}
|
|
119
|
+
ContextWindowMonitorService.instance = null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Inject required dependencies.
|
|
123
|
+
*
|
|
124
|
+
* V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
|
|
125
|
+
* The legacy `taskTrackingService` parameter has been removed; task
|
|
126
|
+
* re-delivery now reads directly from TaskPoolService.
|
|
127
|
+
*
|
|
128
|
+
* @param sessionBackend - Session backend for PTY access
|
|
129
|
+
* @param agentRegistrationService - For recreating agent sessions on recovery
|
|
130
|
+
* @param storageService - For querying agent status
|
|
131
|
+
* @param eventBusService - For publishing context warning/critical events
|
|
132
|
+
*/
|
|
133
|
+
setDependencies(sessionBackend, agentRegistrationService, storageService, eventBusService) {
|
|
134
|
+
this.sessionBackend = sessionBackend;
|
|
135
|
+
this.agentRegistrationService = agentRegistrationService;
|
|
136
|
+
this.storageService = storageService;
|
|
137
|
+
this.eventBusService = eventBusService;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Start the periodic check loop for stale detection and cleanup.
|
|
141
|
+
*/
|
|
142
|
+
start() {
|
|
143
|
+
if (this.checkTimer) {
|
|
144
|
+
this.logger.warn('Context window monitor already running');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
this.logger.info('Starting context window monitor', {
|
|
148
|
+
checkIntervalMs: CONTEXT_WINDOW_MONITOR_CONSTANTS.CHECK_INTERVAL_MS,
|
|
149
|
+
yellowThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.YELLOW_THRESHOLD_PERCENT,
|
|
150
|
+
redThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.RED_THRESHOLD_PERCENT,
|
|
151
|
+
criticalThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.CRITICAL_THRESHOLD_PERCENT,
|
|
152
|
+
});
|
|
153
|
+
void this.refreshProactiveCompactSetting();
|
|
154
|
+
void this.refreshThresholdCompactSetting();
|
|
155
|
+
this.checkTimer = setInterval(() => {
|
|
156
|
+
this.performCheck();
|
|
157
|
+
}, CONTEXT_WINDOW_MONITOR_CONSTANTS.CHECK_INTERVAL_MS);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Stop the periodic check loop.
|
|
161
|
+
*/
|
|
162
|
+
stop() {
|
|
163
|
+
if (this.checkTimer) {
|
|
164
|
+
clearInterval(this.checkTimer);
|
|
165
|
+
this.checkTimer = null;
|
|
166
|
+
this.logger.info('Context window monitor stopped');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if the monitor is currently running.
|
|
171
|
+
*
|
|
172
|
+
* @returns True if the periodic check loop is active
|
|
173
|
+
*/
|
|
174
|
+
isRunning() {
|
|
175
|
+
return this.checkTimer !== null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Start monitoring a specific session for context window usage.
|
|
179
|
+
*
|
|
180
|
+
* Subscribes to the session's PTY onData events and parses output
|
|
181
|
+
* for context usage percentages.
|
|
182
|
+
*
|
|
183
|
+
* @param sessionName - PTY session name
|
|
184
|
+
* @param memberId - Team member ID
|
|
185
|
+
* @param teamId - Team ID
|
|
186
|
+
* @param role - Agent role
|
|
187
|
+
* @param runtimeType - Runtime type (defaults to 'claude-code')
|
|
188
|
+
*/
|
|
189
|
+
startSessionMonitoring(sessionName, memberId, teamId, role, runtimeType = RUNTIME_TYPES.CLAUDE_CODE) {
|
|
190
|
+
// Stop any existing monitoring for this session
|
|
191
|
+
if (this.sessionSubscriptions.has(sessionName)) {
|
|
192
|
+
this.stopSessionMonitoring(sessionName);
|
|
193
|
+
}
|
|
194
|
+
const backend = this.sessionBackend || getSessionBackendSync();
|
|
195
|
+
if (!backend) {
|
|
196
|
+
this.logger.warn('Cannot start context monitoring: session backend not available', { sessionName });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const session = backend.getSession(sessionName);
|
|
200
|
+
if (!session) {
|
|
201
|
+
this.logger.warn('Cannot start context monitoring: session not found', { sessionName });
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Initialize state
|
|
205
|
+
const state = {
|
|
206
|
+
sessionName,
|
|
207
|
+
memberId,
|
|
208
|
+
teamId,
|
|
209
|
+
role,
|
|
210
|
+
runtimeType,
|
|
211
|
+
contextPercent: 0,
|
|
212
|
+
level: 'normal',
|
|
213
|
+
lastDetectedAt: Date.now(),
|
|
214
|
+
recoveryTriggered: false,
|
|
215
|
+
recoveryCount: 0,
|
|
216
|
+
recoveryTimestamps: [],
|
|
217
|
+
compactAttempts: 0,
|
|
218
|
+
compactInProgress: false,
|
|
219
|
+
lastCompactAt: 0,
|
|
220
|
+
preCompactPercent: 0,
|
|
221
|
+
compactWaitTimer: null,
|
|
222
|
+
};
|
|
223
|
+
this.contextStates.set(sessionName, state);
|
|
224
|
+
// Subscribe to PTY data
|
|
225
|
+
const unsubscribe = session.onData((data) => {
|
|
226
|
+
this.handleData(sessionName, data);
|
|
227
|
+
});
|
|
228
|
+
this.sessionSubscriptions.set(sessionName, {
|
|
229
|
+
unsubscribe,
|
|
230
|
+
buffer: '',
|
|
231
|
+
});
|
|
232
|
+
this.logger.info('Started context window monitoring', {
|
|
233
|
+
sessionName,
|
|
234
|
+
memberId,
|
|
235
|
+
teamId,
|
|
236
|
+
role,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Stop monitoring a specific session.
|
|
241
|
+
*
|
|
242
|
+
* @param sessionName - PTY session name
|
|
243
|
+
*/
|
|
244
|
+
stopSessionMonitoring(sessionName) {
|
|
245
|
+
const sub = this.sessionSubscriptions.get(sessionName);
|
|
246
|
+
if (sub) {
|
|
247
|
+
sub.unsubscribe();
|
|
248
|
+
this.sessionSubscriptions.delete(sessionName);
|
|
249
|
+
}
|
|
250
|
+
// Clear any dangling compact wait timer to prevent stale callbacks
|
|
251
|
+
const state = this.contextStates.get(sessionName);
|
|
252
|
+
if (state?.compactWaitTimer) {
|
|
253
|
+
clearTimeout(state.compactWaitTimer);
|
|
254
|
+
state.compactWaitTimer = null;
|
|
255
|
+
}
|
|
256
|
+
this.contextStates.delete(sessionName);
|
|
257
|
+
this.proactiveCompactLastTriggered.delete(sessionName);
|
|
258
|
+
this.logger.debug('Stopped context window monitoring', { sessionName });
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get the context window state for a specific session.
|
|
262
|
+
*
|
|
263
|
+
* @param sessionName - PTY session name
|
|
264
|
+
* @returns The context window state or undefined if not monitored
|
|
265
|
+
*/
|
|
266
|
+
getContextState(sessionName) {
|
|
267
|
+
return this.contextStates.get(sessionName);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get all monitored context window states.
|
|
271
|
+
*
|
|
272
|
+
* @returns Map of session name to context window state
|
|
273
|
+
*/
|
|
274
|
+
getAllContextStates() {
|
|
275
|
+
return new Map(this.contextStates);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Handle incoming PTY data for a monitored session.
|
|
279
|
+
* Strips ANSI codes, appends to rolling buffer, and checks for context % patterns.
|
|
280
|
+
*
|
|
281
|
+
* @param sessionName - PTY session name
|
|
282
|
+
* @param data - Raw PTY output data
|
|
283
|
+
*/
|
|
284
|
+
handleData(sessionName, data) {
|
|
285
|
+
const sub = this.sessionSubscriptions.get(sessionName);
|
|
286
|
+
const state = this.contextStates.get(sessionName);
|
|
287
|
+
if (!sub || !state) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
// Strip ANSI and append to rolling buffer
|
|
291
|
+
const clean = stripAnsiCodes(data);
|
|
292
|
+
sub.buffer += clean;
|
|
293
|
+
// Cap buffer size
|
|
294
|
+
if (sub.buffer.length > CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_BUFFER_SIZE) {
|
|
295
|
+
sub.buffer = sub.buffer.slice(-CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_BUFFER_SIZE);
|
|
296
|
+
}
|
|
297
|
+
// Try to extract context percentage from buffer
|
|
298
|
+
const percent = this.extractContextPercent(sub.buffer, state.runtimeType);
|
|
299
|
+
if (percent !== null) {
|
|
300
|
+
this.updateContextUsage(sessionName, percent);
|
|
301
|
+
// Clear buffer after successful extraction to avoid re-matching
|
|
302
|
+
sub.buffer = '';
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Extract context usage percentage from terminal output.
|
|
307
|
+
*
|
|
308
|
+
* Tries percentage-based patterns first (Claude Code, generic), then
|
|
309
|
+
* Gemini CLI token-count patterns. Token counts are converted to an
|
|
310
|
+
* estimated usage percentage using GEMINI_DEFAULT_MAX_CONTEXT_TOKENS.
|
|
311
|
+
*
|
|
312
|
+
* @param text - Cleaned terminal output text
|
|
313
|
+
* @param runtimeType - Optional runtime type for runtime-specific parsing
|
|
314
|
+
* @returns The extracted percentage (0-100) or null if not found
|
|
315
|
+
*/
|
|
316
|
+
extractContextPercent(text, runtimeType) {
|
|
317
|
+
// Try standard percentage patterns first (works for all runtimes)
|
|
318
|
+
for (const pattern of CONTEXT_PERCENT_PATTERNS) {
|
|
319
|
+
const match = pattern.exec(text);
|
|
320
|
+
if (match) {
|
|
321
|
+
const percent = parseInt(match[1], 10);
|
|
322
|
+
if (percent >= 0 && percent <= 100) {
|
|
323
|
+
return percent;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Try Gemini token-count patterns ("500K context left", "1M context left")
|
|
328
|
+
for (const pattern of GEMINI_CONTEXT_TOKEN_PATTERNS) {
|
|
329
|
+
const match = pattern.exec(text);
|
|
330
|
+
if (match) {
|
|
331
|
+
const value = parseFloat(match[1]);
|
|
332
|
+
const unit = (match[2] || '').toUpperCase();
|
|
333
|
+
let tokensRemaining = value;
|
|
334
|
+
if (unit === 'K')
|
|
335
|
+
tokensRemaining = value * 1_000;
|
|
336
|
+
else if (unit === 'M')
|
|
337
|
+
tokensRemaining = value * 1_000_000;
|
|
338
|
+
if (tokensRemaining >= 0 && tokensRemaining <= GEMINI_DEFAULT_MAX_CONTEXT_TOKENS * 2) {
|
|
339
|
+
const usedPercent = Math.round(((GEMINI_DEFAULT_MAX_CONTEXT_TOKENS - tokensRemaining) / GEMINI_DEFAULT_MAX_CONTEXT_TOKENS) * 100);
|
|
340
|
+
return Math.max(0, Math.min(100, usedPercent));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Update context usage for a session and evaluate thresholds.
|
|
348
|
+
*
|
|
349
|
+
* @param sessionName - PTY session name
|
|
350
|
+
* @param percent - New context usage percentage
|
|
351
|
+
*/
|
|
352
|
+
updateContextUsage(sessionName, percent) {
|
|
353
|
+
const state = this.contextStates.get(sessionName);
|
|
354
|
+
if (!state) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const previousLevel = state.level;
|
|
358
|
+
state.contextPercent = percent;
|
|
359
|
+
state.lastDetectedAt = Date.now();
|
|
360
|
+
// Determine new level
|
|
361
|
+
if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.CRITICAL_THRESHOLD_PERCENT) {
|
|
362
|
+
state.level = 'critical';
|
|
363
|
+
}
|
|
364
|
+
else if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.RED_THRESHOLD_PERCENT) {
|
|
365
|
+
state.level = 'red';
|
|
366
|
+
}
|
|
367
|
+
else if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.YELLOW_THRESHOLD_PERCENT) {
|
|
368
|
+
state.level = 'yellow';
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
state.level = 'normal';
|
|
372
|
+
// Reset compact tracking when context drops back to normal
|
|
373
|
+
if (previousLevel !== 'normal') {
|
|
374
|
+
state.compactAttempts = 0;
|
|
375
|
+
state.compactInProgress = false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Only fire events on level transitions (not repeated at same level)
|
|
379
|
+
if (state.level !== previousLevel && state.level !== 'normal') {
|
|
380
|
+
this.evaluateThresholds(state, previousLevel);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Evaluate threshold transitions and take appropriate actions.
|
|
385
|
+
*
|
|
386
|
+
* Strategy (compact-first):
|
|
387
|
+
* 1. Yellow (70%): Publish warning event only
|
|
388
|
+
* 2. Red (85%): Publish warning + trigger runtime-native compact/compress
|
|
389
|
+
* 3. Critical (95%): Retry compact; periodic checks will continue retrying
|
|
390
|
+
* with cooldown. Auto-recovery (kill + restart) only if enabled.
|
|
391
|
+
*
|
|
392
|
+
* @param state - Current context window state
|
|
393
|
+
* @param previousLevel - The level before this update
|
|
394
|
+
*/
|
|
395
|
+
evaluateThresholds(state, previousLevel) {
|
|
396
|
+
this.logger.warn('Context window threshold crossed', {
|
|
397
|
+
sessionName: state.sessionName,
|
|
398
|
+
previousLevel,
|
|
399
|
+
newLevel: state.level,
|
|
400
|
+
contextPercent: state.contextPercent,
|
|
401
|
+
});
|
|
402
|
+
// Publish event for warning levels
|
|
403
|
+
if (state.level === 'yellow' || state.level === 'red') {
|
|
404
|
+
this.publishContextEvent(state, 'agent:context_warning');
|
|
405
|
+
}
|
|
406
|
+
// At red level: flush memory before compacting (#166)
|
|
407
|
+
// Gated by enableThresholdCompact (default false per spec
|
|
408
|
+
// 2026-05-05-compact-fix-AB-followup §B). When disabled, the wrapper
|
|
409
|
+
// does NOT trigger /compact at the red threshold; the runtime handles
|
|
410
|
+
// its own compaction internally.
|
|
411
|
+
if (this.thresholdCompactEnabled && state.level === 'red' && !state.compactInProgress) {
|
|
412
|
+
if (state.compactAttempts < CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_COMPACT_ATTEMPTS) {
|
|
413
|
+
// #166: Pre-compaction memory flush — send a silent message asking the agent
|
|
414
|
+
// to save critical context before compaction clears conversation history.
|
|
415
|
+
// Only on the first compact attempt to avoid spam.
|
|
416
|
+
if (state.compactAttempts === 0) {
|
|
417
|
+
this.triggerPreCompactionFlush(state).catch((err) => {
|
|
418
|
+
this.logger.warn('Pre-compaction memory flush failed (non-blocking)', {
|
|
419
|
+
sessionName: state.sessionName,
|
|
420
|
+
error: err instanceof Error ? err.message : String(err),
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
this.triggerCompact(state).catch((err) => {
|
|
425
|
+
this.logger.error('Compact failed', {
|
|
426
|
+
sessionName: state.sessionName,
|
|
427
|
+
error: err instanceof Error ? err.message : String(err),
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// Critical level: try compact, or fall back to recovery if enabled
|
|
433
|
+
if (state.level === 'critical') {
|
|
434
|
+
this.publishContextEvent(state, 'agent:context_critical');
|
|
435
|
+
// Try compact if we haven't hit the limit yet — gated by
|
|
436
|
+
// enableThresholdCompact (default false per spec
|
|
437
|
+
// 2026-05-05-compact-fix-AB-followup §B). When the gate is closed,
|
|
438
|
+
// auto-recovery still runs as the safety net for runaway sessions.
|
|
439
|
+
if (this.thresholdCompactEnabled &&
|
|
440
|
+
!state.compactInProgress &&
|
|
441
|
+
state.compactAttempts < CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_COMPACT_ATTEMPTS) {
|
|
442
|
+
this.triggerCompact(state).catch((err) => {
|
|
443
|
+
this.logger.error('Compact at critical failed', {
|
|
444
|
+
sessionName: state.sessionName,
|
|
445
|
+
error: err instanceof Error ? err.message : String(err),
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
else if (CONTEXT_WINDOW_MONITOR_CONSTANTS.AUTO_RECOVERY_ENABLED &&
|
|
450
|
+
!state.recoveryTriggered) {
|
|
451
|
+
// Auto-recovery enabled and compact exhausted — kill + restart
|
|
452
|
+
state.recoveryTriggered = true;
|
|
453
|
+
this.triggerAutoRecovery(state).catch((err) => {
|
|
454
|
+
this.logger.error('Auto-recovery failed', {
|
|
455
|
+
sessionName: state.sessionName,
|
|
456
|
+
error: err instanceof Error ? err.message : String(err),
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
else if (!CONTEXT_WINDOW_MONITOR_CONSTANTS.AUTO_RECOVERY_ENABLED) {
|
|
461
|
+
// Auto-recovery disabled — periodic checks will retry compact
|
|
462
|
+
// after COMPACT_RETRY_COOLDOWN_MS via performCheck()
|
|
463
|
+
this.logger.warn('Context critical, compact exhausted, auto-recovery disabled. Periodic retry will continue.', {
|
|
464
|
+
sessionName: state.sessionName,
|
|
465
|
+
contextPercent: state.contextPercent,
|
|
466
|
+
compactAttempts: state.compactAttempts,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// Broadcast to frontend
|
|
471
|
+
this.broadcastContextWarning(state);
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Publish a context event via the event bus.
|
|
475
|
+
*
|
|
476
|
+
* @param state - Context window state
|
|
477
|
+
* @param eventType - Event type to publish
|
|
478
|
+
*/
|
|
479
|
+
publishContextEvent(state, eventType) {
|
|
480
|
+
if (!this.eventBusService) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const event = {
|
|
484
|
+
id: uuidv4(),
|
|
485
|
+
type: eventType,
|
|
486
|
+
timestamp: new Date().toISOString(),
|
|
487
|
+
teamId: state.teamId,
|
|
488
|
+
teamName: '',
|
|
489
|
+
memberId: state.memberId,
|
|
490
|
+
memberName: '',
|
|
491
|
+
sessionName: state.sessionName,
|
|
492
|
+
previousValue: String(state.contextPercent),
|
|
493
|
+
newValue: state.level,
|
|
494
|
+
changedField: 'contextUsage',
|
|
495
|
+
};
|
|
496
|
+
this.eventBusService.publish(event);
|
|
497
|
+
this.logger.info('Published context event', {
|
|
498
|
+
eventType,
|
|
499
|
+
sessionName: state.sessionName,
|
|
500
|
+
contextPercent: state.contextPercent,
|
|
501
|
+
level: state.level,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Broadcast context window status to frontend via WebSocket.
|
|
506
|
+
*
|
|
507
|
+
* @param state - Context window state to broadcast
|
|
508
|
+
*/
|
|
509
|
+
broadcastContextWarning(state) {
|
|
510
|
+
const terminalGateway = getTerminalGateway();
|
|
511
|
+
if (!terminalGateway) {
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
terminalGateway.broadcastContextWindowStatus({
|
|
515
|
+
sessionName: state.sessionName,
|
|
516
|
+
memberId: state.memberId,
|
|
517
|
+
teamId: state.teamId,
|
|
518
|
+
contextPercent: state.contextPercent,
|
|
519
|
+
level: state.level,
|
|
520
|
+
timestamp: new Date().toISOString(),
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* #166: Pre-compaction memory flush — send a message to the agent asking it to
|
|
525
|
+
* save critical context (current task, progress, findings) before compaction
|
|
526
|
+
* clears conversation history. The agent responds with record-learning or
|
|
527
|
+
* remember calls, then replies NO_REPLY to avoid generating visible output.
|
|
528
|
+
*
|
|
529
|
+
* This is fire-and-forget: if delivery fails, compaction still proceeds.
|
|
530
|
+
*
|
|
531
|
+
* @param state - Context window state for the session
|
|
532
|
+
*/
|
|
533
|
+
async triggerPreCompactionFlush(state) {
|
|
534
|
+
if (!this.agentRegistrationService) {
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
const flushMessage = `[SYSTEM — PRE-COMPACTION MEMORY FLUSH]
|
|
538
|
+
Your context window is at ${state.contextPercent}% and will be compacted shortly. Before compaction, save your critical working state NOW:
|
|
539
|
+
|
|
540
|
+
1. Call record-learning with: current task progress, key findings, any blockers, and what remains to be done
|
|
541
|
+
2. If you have important patterns or decisions discovered, call remember with scope: project
|
|
542
|
+
|
|
543
|
+
After saving, respond with exactly: NO_REPLY
|
|
544
|
+
|
|
545
|
+
This is automated — do not ask questions, just save and respond NO_REPLY.`;
|
|
546
|
+
try {
|
|
547
|
+
await this.agentRegistrationService.sendMessageToAgent(state.sessionName, flushMessage, state.runtimeType);
|
|
548
|
+
this.logger.info('Pre-compaction memory flush sent', {
|
|
549
|
+
sessionName: state.sessionName,
|
|
550
|
+
contextPercent: state.contextPercent,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
catch (err) {
|
|
554
|
+
this.logger.warn('Pre-compaction memory flush delivery failed', {
|
|
555
|
+
sessionName: state.sessionName,
|
|
556
|
+
error: err instanceof Error ? err.message : String(err),
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Trigger context compaction by sending the runtime's native compact command.
|
|
562
|
+
*
|
|
563
|
+
* Writes the appropriate slash command (e.g., `/compact` for Claude Code,
|
|
564
|
+
* `/compress` for Gemini CLI) to the PTY session stdin. The runtime handles
|
|
565
|
+
* the actual compression — typically via LLM-based summarization.
|
|
566
|
+
*
|
|
567
|
+
* @param state - Context window state for the session to compact
|
|
568
|
+
*/
|
|
569
|
+
async triggerCompact(state) {
|
|
570
|
+
// Do not compact while an agent is actively working. Runtime compact
|
|
571
|
+
// commands can interrupt generation and cause task loss.
|
|
572
|
+
// Keep this check fast-path synchronous when storage helpers are not
|
|
573
|
+
// available (common in tests/mocks) to preserve existing behavior.
|
|
574
|
+
let isBusy = false;
|
|
575
|
+
const canCheckMemberBusy = this.storageService
|
|
576
|
+
&& typeof this.storageService.findMemberBySessionName === 'function';
|
|
577
|
+
const canCheckOrchestratorBusy = this.storageService
|
|
578
|
+
&& typeof this.storageService.getOrchestratorStatus === 'function';
|
|
579
|
+
if (canCheckMemberBusy || canCheckOrchestratorBusy) {
|
|
580
|
+
isBusy = await this.isSessionBusyForCompact(state.sessionName);
|
|
581
|
+
}
|
|
582
|
+
if (isBusy) {
|
|
583
|
+
state.compactAttempts++;
|
|
584
|
+
this.logger.info('Skipping compact: session is actively working', {
|
|
585
|
+
sessionName: state.sessionName,
|
|
586
|
+
runtimeType: state.runtimeType,
|
|
587
|
+
contextPercent: state.contextPercent,
|
|
588
|
+
compactAttempts: state.compactAttempts,
|
|
589
|
+
maxAttempts: CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_COMPACT_ATTEMPTS,
|
|
590
|
+
});
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
const backend = this.sessionBackend || getSessionBackendSync();
|
|
594
|
+
if (!backend) {
|
|
595
|
+
this.logger.warn('Cannot trigger compact: session backend not available', {
|
|
596
|
+
sessionName: state.sessionName,
|
|
597
|
+
});
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
const session = backend.getSession(state.sessionName);
|
|
601
|
+
if (!session) {
|
|
602
|
+
this.logger.warn('Cannot trigger compact: session not found', {
|
|
603
|
+
sessionName: state.sessionName,
|
|
604
|
+
});
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
const command = RUNTIME_COMPACT_COMMANDS[state.runtimeType];
|
|
608
|
+
if (!command) {
|
|
609
|
+
this.logger.warn('No compact command for runtime type', {
|
|
610
|
+
sessionName: state.sessionName,
|
|
611
|
+
runtimeType: state.runtimeType,
|
|
612
|
+
});
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
state.compactInProgress = true;
|
|
616
|
+
state.compactAttempts++;
|
|
617
|
+
state.lastCompactAt = Date.now();
|
|
618
|
+
state.preCompactPercent = state.contextPercent;
|
|
619
|
+
this.logger.info('Triggering context compaction', {
|
|
620
|
+
sessionName: state.sessionName,
|
|
621
|
+
runtimeType: state.runtimeType,
|
|
622
|
+
command,
|
|
623
|
+
attempt: state.compactAttempts,
|
|
624
|
+
contextPercent: state.contextPercent,
|
|
625
|
+
});
|
|
626
|
+
// Claude/Codex: Escape can safely clear in-progress input.
|
|
627
|
+
// Gemini: Escape cancels the current request ("Request cancelled"), so skip it.
|
|
628
|
+
if (state.runtimeType !== RUNTIME_TYPES.GEMINI_CLI) {
|
|
629
|
+
session.write('\x1b');
|
|
630
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
631
|
+
}
|
|
632
|
+
session.write(command + '\r');
|
|
633
|
+
// Clear any previous compact wait timer to avoid stale callbacks
|
|
634
|
+
if (state.compactWaitTimer) {
|
|
635
|
+
clearTimeout(state.compactWaitTimer);
|
|
636
|
+
}
|
|
637
|
+
// After COMPACT_WAIT_MS, mark compact as no longer in progress
|
|
638
|
+
// and verify that context usage actually decreased (post-compact verification).
|
|
639
|
+
state.compactWaitTimer = setTimeout(() => {
|
|
640
|
+
state.compactInProgress = false;
|
|
641
|
+
state.compactWaitTimer = null;
|
|
642
|
+
// Post-compact verification: if context % did not decrease,
|
|
643
|
+
// reset compact tracking so the next threshold evaluation retries.
|
|
644
|
+
if (state.contextPercent >= state.preCompactPercent && state.level !== 'normal') {
|
|
645
|
+
this.logger.warn('Post-compact verification: context did not decrease', {
|
|
646
|
+
sessionName: state.sessionName,
|
|
647
|
+
preCompactPercent: state.preCompactPercent,
|
|
648
|
+
currentPercent: state.contextPercent,
|
|
649
|
+
level: state.level,
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
else if (state.contextPercent < state.preCompactPercent) {
|
|
653
|
+
this.logger.info('Post-compact verification: context decreased', {
|
|
654
|
+
sessionName: state.sessionName,
|
|
655
|
+
preCompactPercent: state.preCompactPercent,
|
|
656
|
+
currentPercent: state.contextPercent,
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
}, CONTEXT_WINDOW_MONITOR_CONSTANTS.COMPACT_WAIT_MS);
|
|
660
|
+
// Broadcast compact status to frontend
|
|
661
|
+
const terminalGateway = getTerminalGateway();
|
|
662
|
+
if (terminalGateway) {
|
|
663
|
+
terminalGateway.broadcastContextWindowStatus({
|
|
664
|
+
sessionName: state.sessionName,
|
|
665
|
+
memberId: state.memberId,
|
|
666
|
+
teamId: state.teamId,
|
|
667
|
+
contextPercent: state.contextPercent,
|
|
668
|
+
level: state.level,
|
|
669
|
+
timestamp: new Date().toISOString(),
|
|
670
|
+
});
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Returns true when a session is currently marked as in-progress.
|
|
675
|
+
* Falls back to false on lookup errors so monitoring can continue.
|
|
676
|
+
*/
|
|
677
|
+
async isSessionBusyForCompact(sessionName) {
|
|
678
|
+
if (!this.storageService) {
|
|
679
|
+
return false;
|
|
680
|
+
}
|
|
681
|
+
try {
|
|
682
|
+
if (sessionName === ORCHESTRATOR_SESSION_NAME) {
|
|
683
|
+
const orchestrator = await this.storageService.getOrchestratorStatus();
|
|
684
|
+
return orchestrator?.workingStatus === CREWLY_CONSTANTS.WORKING_STATUSES.IN_PROGRESS;
|
|
685
|
+
}
|
|
686
|
+
const memberInfo = await this.storageService.findMemberBySessionName(sessionName);
|
|
687
|
+
const workingStatus = memberInfo?.member?.workingStatus;
|
|
688
|
+
return workingStatus === CREWLY_CONSTANTS.WORKING_STATUSES.IN_PROGRESS;
|
|
689
|
+
}
|
|
690
|
+
catch (error) {
|
|
691
|
+
this.logger.debug('Failed to read working status before compact (non-fatal)', {
|
|
692
|
+
sessionName,
|
|
693
|
+
error: error instanceof Error ? error.message : String(error),
|
|
694
|
+
});
|
|
695
|
+
return false;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* Trigger auto-recovery for a session at critical context usage.
|
|
700
|
+
*
|
|
701
|
+
* Mirrors the restart pattern from AgentHeartbeatMonitorService:
|
|
702
|
+
* 1. Check cooldown
|
|
703
|
+
* 2. Save Claude session ID
|
|
704
|
+
* 3. Stop exit monitoring
|
|
705
|
+
* 4. Kill PTY session
|
|
706
|
+
* 5. Clear activity tracker
|
|
707
|
+
* 6. Pre-set session ID for resume
|
|
708
|
+
* 7. Recreate agent session
|
|
709
|
+
* 8. Broadcast status
|
|
710
|
+
* 9. Re-deliver tasks
|
|
711
|
+
*
|
|
712
|
+
* @param state - Context window state for the session to recover
|
|
713
|
+
*/
|
|
714
|
+
async triggerAutoRecovery(state) {
|
|
715
|
+
const backend = this.sessionBackend || getSessionBackendSync();
|
|
716
|
+
if (!backend || !this.agentRegistrationService) {
|
|
717
|
+
this.logger.warn('Cannot trigger auto-recovery: missing dependencies', {
|
|
718
|
+
sessionName: state.sessionName,
|
|
719
|
+
});
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
// Check cooldown
|
|
723
|
+
const now = Date.now();
|
|
724
|
+
const windowStart = now - CONTEXT_WINDOW_MONITOR_CONSTANTS.COOLDOWN_WINDOW_MS;
|
|
725
|
+
state.recoveryTimestamps = state.recoveryTimestamps.filter(ts => ts > windowStart);
|
|
726
|
+
if (state.recoveryTimestamps.length >= CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_RECOVERIES_PER_WINDOW) {
|
|
727
|
+
this.logger.warn('Context recovery cooldown active, skipping', {
|
|
728
|
+
sessionName: state.sessionName,
|
|
729
|
+
recoveriesInWindow: state.recoveryTimestamps.length,
|
|
730
|
+
maxPerWindow: CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_RECOVERIES_PER_WINDOW,
|
|
731
|
+
});
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
this.logger.info('Triggering context window auto-recovery', {
|
|
735
|
+
sessionName: state.sessionName,
|
|
736
|
+
contextPercent: state.contextPercent,
|
|
737
|
+
recoveryCount: state.recoveryCount,
|
|
738
|
+
});
|
|
739
|
+
try {
|
|
740
|
+
// Save Claude session ID before killing
|
|
741
|
+
let claudeSessionId;
|
|
742
|
+
try {
|
|
743
|
+
const persistence = getSessionStatePersistence();
|
|
744
|
+
claudeSessionId = persistence.getSessionId(state.sessionName);
|
|
745
|
+
}
|
|
746
|
+
catch {
|
|
747
|
+
this.logger.warn('Could not retrieve Claude session ID for recovery', {
|
|
748
|
+
sessionName: state.sessionName,
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
// Stop exit monitoring to avoid triggering exit callbacks
|
|
752
|
+
RuntimeExitMonitorService.getInstance().stopMonitoring(state.sessionName);
|
|
753
|
+
// Stop our own monitoring (will be re-started after session creation)
|
|
754
|
+
this.stopSessionMonitoring(state.sessionName);
|
|
755
|
+
// Kill old PTY session
|
|
756
|
+
if (backend.sessionExists(state.sessionName)) {
|
|
757
|
+
await backend.killSession(state.sessionName);
|
|
758
|
+
}
|
|
759
|
+
// Clear PTY activity tracker
|
|
760
|
+
PtyActivityTrackerService.getInstance().clearSession(state.sessionName);
|
|
761
|
+
// Pre-set session ID for resume
|
|
762
|
+
if (claudeSessionId) {
|
|
763
|
+
try {
|
|
764
|
+
const persistence = getSessionStatePersistence();
|
|
765
|
+
const metadata = persistence.getSessionMetadata(state.sessionName);
|
|
766
|
+
if (metadata) {
|
|
767
|
+
persistence.updateSessionId(state.sessionName, claudeSessionId);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
catch {
|
|
771
|
+
this.logger.warn('Could not pre-set session ID for resume', {
|
|
772
|
+
sessionName: state.sessionName,
|
|
773
|
+
});
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
// Recreate agent session
|
|
777
|
+
const result = await this.agentRegistrationService.createAgentSession({
|
|
778
|
+
sessionName: state.sessionName,
|
|
779
|
+
role: state.role,
|
|
780
|
+
teamId: state.teamId,
|
|
781
|
+
memberId: state.memberId,
|
|
782
|
+
});
|
|
783
|
+
if (!result.success) {
|
|
784
|
+
this.logger.error('Context recovery createAgentSession failed', {
|
|
785
|
+
sessionName: state.sessionName,
|
|
786
|
+
error: result.error,
|
|
787
|
+
});
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
// Track recovery
|
|
791
|
+
state.recoveryTimestamps.push(now);
|
|
792
|
+
state.recoveryCount++;
|
|
793
|
+
// Broadcast agent recovered status
|
|
794
|
+
const terminalGateway = getTerminalGateway();
|
|
795
|
+
if (terminalGateway) {
|
|
796
|
+
terminalGateway.broadcastTeamMemberStatus({
|
|
797
|
+
teamId: state.teamId,
|
|
798
|
+
memberId: state.memberId,
|
|
799
|
+
sessionName: state.sessionName,
|
|
800
|
+
agentStatus: 'active',
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
this.logger.info('Context window auto-recovery successful', {
|
|
804
|
+
sessionName: state.sessionName,
|
|
805
|
+
recoveryCount: state.recoveryCount,
|
|
806
|
+
claudeSessionId: claudeSessionId ? '(resumed)' : '(fresh)',
|
|
807
|
+
});
|
|
808
|
+
// Re-deliver in-progress tasks (async, non-blocking)
|
|
809
|
+
this.redeliverTasks(state).catch((err) => {
|
|
810
|
+
this.logger.error('Task re-delivery failed after context recovery', {
|
|
811
|
+
sessionName: state.sessionName,
|
|
812
|
+
error: err instanceof Error ? err.message : String(err),
|
|
813
|
+
});
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
catch (err) {
|
|
817
|
+
this.logger.error('Failed to perform context window auto-recovery', {
|
|
818
|
+
sessionName: state.sessionName,
|
|
819
|
+
error: err instanceof Error ? err.message : String(err),
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
/**
|
|
824
|
+
* Re-deliver in-progress tasks to a recovered agent.
|
|
825
|
+
*
|
|
826
|
+
* @param state - Context window state for the recovered session
|
|
827
|
+
*/
|
|
828
|
+
async redeliverTasks(state) {
|
|
829
|
+
const backend = this.sessionBackend || getSessionBackendSync();
|
|
830
|
+
if (!backend) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
// Wait for agent initialization
|
|
834
|
+
await new Promise(resolve => setTimeout(resolve, AGENT_SUSPEND_CONSTANTS.REHYDRATION_TIMEOUT_MS));
|
|
835
|
+
if (!backend.sessionExists(state.sessionName)) {
|
|
836
|
+
this.logger.warn('Agent session not found after recovery, skipping task re-delivery', {
|
|
837
|
+
sessionName: state.sessionName,
|
|
838
|
+
});
|
|
839
|
+
return;
|
|
840
|
+
}
|
|
841
|
+
const session = backend.getSession(state.sessionName);
|
|
842
|
+
if (!session) {
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
// V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
|
|
846
|
+
// Replaces TaskTrackingService.getTasksForTeamMember with a direct V3
|
|
847
|
+
// pool read filtered by `target` (session name). Includes the brief
|
|
848
|
+
// markdown stored on the WI itself, removing the prior
|
|
849
|
+
// `fs.readFile(task.taskFilePath)` step.
|
|
850
|
+
const { TaskPoolService } = await import('../task-pool/task-pool.service.js');
|
|
851
|
+
const items = await TaskPoolService.getInstance().getAllItems();
|
|
852
|
+
const activeTasks = items.filter((wi) => wi.target === state.sessionName && (wi.status === 'queued' || wi.status === 'accepted' || wi.status === 'running'));
|
|
853
|
+
if (activeTasks.length === 0) {
|
|
854
|
+
this.logger.debug('No active tasks to re-deliver after context recovery', {
|
|
855
|
+
sessionName: state.sessionName,
|
|
856
|
+
});
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
this.logger.info('Re-delivering tasks after context recovery', {
|
|
860
|
+
sessionName: state.sessionName,
|
|
861
|
+
taskCount: activeTasks.length,
|
|
862
|
+
});
|
|
863
|
+
for (const wi of activeTasks) {
|
|
864
|
+
let taskContent = wi.briefMarkdown ?? '(no brief recorded)';
|
|
865
|
+
if (taskContent.length > 2000) {
|
|
866
|
+
taskContent = taskContent.slice(0, 2000) + '\n... (truncated)';
|
|
867
|
+
}
|
|
868
|
+
const message = [
|
|
869
|
+
'[TASK RE-DELIVERY] Your previous session ran out of context window.',
|
|
870
|
+
'You were working on this task before your session was recovered:',
|
|
871
|
+
`Task: ${wi.title}`,
|
|
872
|
+
`WorkItem: ${wi.id}`,
|
|
873
|
+
'---',
|
|
874
|
+
taskContent,
|
|
875
|
+
'---',
|
|
876
|
+
'Please continue working on this task.',
|
|
877
|
+
].join('\n');
|
|
878
|
+
session.write(message);
|
|
879
|
+
const pasteDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
|
|
880
|
+
await new Promise(resolve => setTimeout(resolve, pasteDelay));
|
|
881
|
+
session.write('\r');
|
|
882
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
883
|
+
}
|
|
884
|
+
this.logger.info('Task re-delivery after context recovery complete', {
|
|
885
|
+
sessionName: state.sessionName,
|
|
886
|
+
tasksDelivered: activeTasks.length,
|
|
887
|
+
});
|
|
888
|
+
}
|
|
889
|
+
/**
|
|
890
|
+
* Periodic check for stale states, cleanup, compact retries, and proactive compaction.
|
|
891
|
+
*
|
|
892
|
+
* For stale sessions (no context % detected recently), resets to normal.
|
|
893
|
+
* For critical sessions with exhausted compacts, retries compact after
|
|
894
|
+
* COMPACT_RETRY_COOLDOWN_MS has elapsed since the last attempt.
|
|
895
|
+
* For all monitored sessions, checks cumulative output bytes and triggers
|
|
896
|
+
* proactive compact when threshold is exceeded.
|
|
897
|
+
*/
|
|
898
|
+
performCheck() {
|
|
899
|
+
const now = Date.now();
|
|
900
|
+
const staleThreshold = CONTEXT_WINDOW_MONITOR_CONSTANTS.STALE_DETECTION_THRESHOLD_MS;
|
|
901
|
+
// Proactive compact based on cumulative output volume (configurable)
|
|
902
|
+
if (this.proactiveCompactEnabled) {
|
|
903
|
+
this.checkProactiveCompact(now);
|
|
904
|
+
}
|
|
905
|
+
// Refresh cached settings in background so runtime config changes are picked up.
|
|
906
|
+
void this.refreshProactiveCompactSetting();
|
|
907
|
+
void this.refreshThresholdCompactSetting();
|
|
908
|
+
for (const [sessionName, state] of this.contextStates) {
|
|
909
|
+
const timeSinceLastDetection = now - state.lastDetectedAt;
|
|
910
|
+
// Clean up stale states (no context % detected for a while)
|
|
911
|
+
if (timeSinceLastDetection > staleThreshold && state.level !== 'normal') {
|
|
912
|
+
// If we're critical and compact never succeeded, keep state to allow retry
|
|
913
|
+
if (state.level === 'critical' && state.compactAttempts > 0) {
|
|
914
|
+
this.logger.debug('Keeping critical state despite staleness (compact attempts pending)', {
|
|
915
|
+
sessionName,
|
|
916
|
+
compactAttempts: state.compactAttempts,
|
|
917
|
+
});
|
|
918
|
+
continue;
|
|
919
|
+
}
|
|
920
|
+
this.logger.debug('Context state stale, resetting to normal', {
|
|
921
|
+
sessionName,
|
|
922
|
+
timeSinceLastDetectionMs: timeSinceLastDetection,
|
|
923
|
+
});
|
|
924
|
+
state.level = 'normal';
|
|
925
|
+
state.recoveryTriggered = false;
|
|
926
|
+
state.compactAttempts = 0;
|
|
927
|
+
state.compactInProgress = false;
|
|
928
|
+
continue;
|
|
929
|
+
}
|
|
930
|
+
// Retry compact for critical sessions after cooldown
|
|
931
|
+
if (state.level === 'critical' &&
|
|
932
|
+
!state.compactInProgress &&
|
|
933
|
+
!state.recoveryTriggered &&
|
|
934
|
+
state.compactAttempts >= CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_COMPACT_ATTEMPTS) {
|
|
935
|
+
const timeSinceLastCompact = now - state.lastCompactAt;
|
|
936
|
+
if (timeSinceLastCompact >= CONTEXT_WINDOW_MONITOR_CONSTANTS.COMPACT_RETRY_COOLDOWN_MS) {
|
|
937
|
+
this.logger.info('Retrying compact after cooldown for critical session', {
|
|
938
|
+
sessionName,
|
|
939
|
+
contextPercent: state.contextPercent,
|
|
940
|
+
compactAttempts: state.compactAttempts,
|
|
941
|
+
timeSinceLastCompactMs: timeSinceLastCompact,
|
|
942
|
+
});
|
|
943
|
+
// Reset attempts to allow one more try
|
|
944
|
+
state.compactAttempts = CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_COMPACT_ATTEMPTS - 1;
|
|
945
|
+
this.triggerCompact(state).catch((err) => {
|
|
946
|
+
this.logger.error('Compact retry failed', {
|
|
947
|
+
sessionName: state.sessionName,
|
|
948
|
+
error: err instanceof Error ? err.message : String(err),
|
|
949
|
+
});
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
/** Timestamp of last proactive compact per session for cooldown tracking */
|
|
956
|
+
proactiveCompactLastTriggered = new Map();
|
|
957
|
+
/**
|
|
958
|
+
* Cached toggle for proactive compact behavior (loaded from settings).
|
|
959
|
+
*
|
|
960
|
+
* Default: `false` (fail-safe CLOSED). Per spec 2026-05-05-compact-fix-AB-followup §A.2 —
|
|
961
|
+
* before the first refresh from settings, the wrapper does NOT proactively compact.
|
|
962
|
+
* The runtime (Claude Code) handles its own compaction internally.
|
|
963
|
+
*/
|
|
964
|
+
proactiveCompactEnabled = false;
|
|
965
|
+
/**
|
|
966
|
+
* Cached toggle for threshold-driven compact at RED (85%) / CRITICAL (95%).
|
|
967
|
+
*
|
|
968
|
+
* Default: `false` (fail-safe CLOSED). Per spec 2026-05-05-compact-fix-AB-followup §B —
|
|
969
|
+
* threshold-driven external compaction is opt-in. Auto-recovery (kill+restart) still
|
|
970
|
+
* runs at CRITICAL when AUTO_RECOVERY_ENABLED, regardless of this flag.
|
|
971
|
+
*/
|
|
972
|
+
thresholdCompactEnabled = false;
|
|
973
|
+
/**
|
|
974
|
+
* Refresh the cached proactive compact toggle from persisted settings.
|
|
975
|
+
* Non-fatal: any read failure keeps the previous cached value.
|
|
976
|
+
*
|
|
977
|
+
* Fail-safe semantics: when the persisted setting is undefined, default to
|
|
978
|
+
* `false` so an absent configuration cannot enable external compaction.
|
|
979
|
+
*/
|
|
980
|
+
async refreshProactiveCompactSetting() {
|
|
981
|
+
try {
|
|
982
|
+
const settings = await getSettingsService().getSettings();
|
|
983
|
+
this.proactiveCompactEnabled = settings?.general?.enableProactiveCompact ?? false;
|
|
984
|
+
}
|
|
985
|
+
catch {
|
|
986
|
+
// Keep last known value on read failures.
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
/**
|
|
990
|
+
* Refresh the cached threshold compact toggle from persisted settings.
|
|
991
|
+
* Non-fatal: any read failure keeps the previous cached value.
|
|
992
|
+
*
|
|
993
|
+
* Fail-safe semantics: when the persisted setting is undefined, default to
|
|
994
|
+
* `false` so an absent configuration cannot enable threshold-driven compaction.
|
|
995
|
+
*/
|
|
996
|
+
async refreshThresholdCompactSetting() {
|
|
997
|
+
try {
|
|
998
|
+
const settings = await getSettingsService().getSettings();
|
|
999
|
+
this.thresholdCompactEnabled = settings?.general?.enableThresholdCompact ?? false;
|
|
1000
|
+
}
|
|
1001
|
+
catch {
|
|
1002
|
+
// Keep last known value on read failures.
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
/**
|
|
1006
|
+
* Check all monitored sessions for cumulative output volume and trigger
|
|
1007
|
+
* proactive compact when the threshold is exceeded.
|
|
1008
|
+
*
|
|
1009
|
+
* @param now - Current timestamp in epoch ms
|
|
1010
|
+
*/
|
|
1011
|
+
checkProactiveCompact(now) {
|
|
1012
|
+
const backend = this.sessionBackend || getSessionBackendSync();
|
|
1013
|
+
if (!backend || !backend.getCumulativeOutputBytes || !backend.resetCumulativeOutput) {
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
for (const [sessionName, state] of this.contextStates) {
|
|
1017
|
+
if (state.compactInProgress) {
|
|
1018
|
+
continue;
|
|
1019
|
+
}
|
|
1020
|
+
const cumulativeBytes = backend.getCumulativeOutputBytes(sessionName);
|
|
1021
|
+
if (cumulativeBytes < CONTEXT_WINDOW_MONITOR_CONSTANTS.PROACTIVE_COMPACT_THRESHOLD_BYTES) {
|
|
1022
|
+
continue;
|
|
1023
|
+
}
|
|
1024
|
+
// Check cooldown
|
|
1025
|
+
const lastTriggered = this.proactiveCompactLastTriggered.get(sessionName) ?? 0;
|
|
1026
|
+
if (now - lastTriggered < CONTEXT_WINDOW_MONITOR_CONSTANTS.PROACTIVE_COMPACT_COOLDOWN_MS) {
|
|
1027
|
+
continue;
|
|
1028
|
+
}
|
|
1029
|
+
this.logger.info('Proactive compact triggered by cumulative output volume', {
|
|
1030
|
+
sessionName,
|
|
1031
|
+
cumulativeBytes,
|
|
1032
|
+
thresholdBytes: CONTEXT_WINDOW_MONITOR_CONSTANTS.PROACTIVE_COMPACT_THRESHOLD_BYTES,
|
|
1033
|
+
});
|
|
1034
|
+
this.proactiveCompactLastTriggered.set(sessionName, now);
|
|
1035
|
+
backend.resetCumulativeOutput(sessionName);
|
|
1036
|
+
this.triggerCompact(state).catch((err) => {
|
|
1037
|
+
this.logger.error('Proactive compact failed', {
|
|
1038
|
+
sessionName,
|
|
1039
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1040
|
+
});
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
/**
|
|
1045
|
+
* Destroy all PTY subscriptions. Used during resetInstance.
|
|
1046
|
+
*/
|
|
1047
|
+
destroyAllSubscriptions() {
|
|
1048
|
+
for (const [sessionName, sub] of this.sessionSubscriptions) {
|
|
1049
|
+
sub.unsubscribe();
|
|
1050
|
+
}
|
|
1051
|
+
this.sessionSubscriptions.clear();
|
|
1052
|
+
this.contextStates.clear();
|
|
1053
|
+
this.proactiveCompactLastTriggered.clear();
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
//# sourceMappingURL=context-window-monitor.service.js.map
|