crewly 1.13.0 → 1.13.1
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/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/report-status/SKILL.md +26 -0
- package/config/skills/agent/core/report-status/execute.sh +40 -5
- 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/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/vitest-exclude.constants.ts +56 -0
- 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 +18 -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 +20 -0
- 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/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 +40 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.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 +13 -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 +84 -5
- 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/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/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/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/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.service.d.ts +737 -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 +1213 -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 +208 -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 +405 -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/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 +142 -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 +265 -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-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-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 +1928 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -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 +1094 -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/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/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/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-890d3f9d.js +4961 -0
- package/frontend/dist/index.html +1 -1
- 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/frontend/dist/assets/index-aa737fd3.js +0 -5254
|
@@ -0,0 +1,810 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Helper
|
|
3
|
+
*
|
|
4
|
+
* Provides high-level terminal command operations using the ISessionBackend abstraction.
|
|
5
|
+
* This helper bridges the gap between low-level PTY operations and the higher-level
|
|
6
|
+
* commands that services like AgentRegistrationService need.
|
|
7
|
+
*
|
|
8
|
+
* Key mappings from TmuxCommandService:
|
|
9
|
+
* - sendMessage → write(message + '\r')
|
|
10
|
+
* - sendKey → write(keyCode)
|
|
11
|
+
* - sendCtrlC → write('\x03')
|
|
12
|
+
* - sendEnter → write('\r')
|
|
13
|
+
* - clearCurrentCommandLine → write('\x03\x15') (Ctrl+C then Ctrl+U)
|
|
14
|
+
* - capturePane → captureOutput()
|
|
15
|
+
*
|
|
16
|
+
* @module session-command-helper
|
|
17
|
+
*/
|
|
18
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
19
|
+
import { SESSION_COMMAND_DELAYS, EVENT_DELIVERY_CONSTANTS, TERMINAL_PATTERNS, PLAN_MODE_DISMISS_PATTERNS } from '../../constants.js';
|
|
20
|
+
import { delay } from '../../utils/async.utils.js';
|
|
21
|
+
import { PtyActivityTrackerService } from '../agent/pty-activity-tracker.service.js';
|
|
22
|
+
/**
|
|
23
|
+
* Key code mappings for special keys
|
|
24
|
+
*/
|
|
25
|
+
export const KEY_CODES = {
|
|
26
|
+
Enter: '\r',
|
|
27
|
+
'C-c': '\x03', // Ctrl+C
|
|
28
|
+
'C-u': '\x15', // Ctrl+U (clear line)
|
|
29
|
+
'C-l': '\x0c', // Ctrl+L (clear screen)
|
|
30
|
+
'C-d': '\x04', // Ctrl+D (EOF)
|
|
31
|
+
Escape: '\x1b',
|
|
32
|
+
Tab: '\t',
|
|
33
|
+
'S-Tab': '\x1b[Z', // Shift+Tab (reverse tab / focus previous in TUI)
|
|
34
|
+
Backspace: '\x7f',
|
|
35
|
+
Delete: '\x1b[3~',
|
|
36
|
+
Up: '\x1b[A',
|
|
37
|
+
Down: '\x1b[B',
|
|
38
|
+
Right: '\x1b[C',
|
|
39
|
+
Left: '\x1b[D',
|
|
40
|
+
Home: '\x1b[H',
|
|
41
|
+
End: '\x1b[F',
|
|
42
|
+
PageUp: '\x1b[5~',
|
|
43
|
+
PageDown: '\x1b[6~',
|
|
44
|
+
// Function keys — F12 is used to toggle Gemini CLI's error details panel (#130)
|
|
45
|
+
F1: '\x1bOP',
|
|
46
|
+
F2: '\x1bOQ',
|
|
47
|
+
F3: '\x1bOR',
|
|
48
|
+
F4: '\x1bOS',
|
|
49
|
+
F5: '\x1b[15~',
|
|
50
|
+
F6: '\x1b[17~',
|
|
51
|
+
F7: '\x1b[18~',
|
|
52
|
+
F8: '\x1b[19~',
|
|
53
|
+
F9: '\x1b[20~',
|
|
54
|
+
F10: '\x1b[21~',
|
|
55
|
+
F11: '\x1b[23~',
|
|
56
|
+
F12: '\x1b[24~',
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Session Command Helper class
|
|
60
|
+
*
|
|
61
|
+
* Provides a unified interface for terminal commands that works with both
|
|
62
|
+
* PTY and tmux backends through the ISessionBackend abstraction.
|
|
63
|
+
*/
|
|
64
|
+
export class SessionCommandHelper {
|
|
65
|
+
logger;
|
|
66
|
+
backend;
|
|
67
|
+
constructor(backend) {
|
|
68
|
+
this.logger = LoggerService.getInstance().createComponentLogger('SessionCommandHelper');
|
|
69
|
+
this.backend = backend;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get a session by name, throwing an error if it doesn't exist.
|
|
73
|
+
*
|
|
74
|
+
* @param sessionName - The name of the session to retrieve
|
|
75
|
+
* @returns The session instance
|
|
76
|
+
* @throws Error if the session does not exist
|
|
77
|
+
*/
|
|
78
|
+
getSessionOrThrow(sessionName) {
|
|
79
|
+
const session = this.backend.getSession(sessionName);
|
|
80
|
+
if (!session) {
|
|
81
|
+
throw new Error(`Session '${sessionName}' does not exist`);
|
|
82
|
+
}
|
|
83
|
+
return session;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a session exists
|
|
87
|
+
*/
|
|
88
|
+
sessionExists(sessionName) {
|
|
89
|
+
return this.backend.sessionExists(sessionName);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get a session by name
|
|
93
|
+
*/
|
|
94
|
+
getSession(sessionName) {
|
|
95
|
+
return this.backend.getSession(sessionName);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Send a message to a session with Enter key.
|
|
99
|
+
* For multi-line messages, sends the text first then Enter separately
|
|
100
|
+
* to avoid bracketed paste mode issues where Enter is treated as part of the paste.
|
|
101
|
+
*
|
|
102
|
+
* @param sessionName - The session to send to
|
|
103
|
+
* @param message - The message to send
|
|
104
|
+
* @throws Error if session does not exist
|
|
105
|
+
*/
|
|
106
|
+
async sendMessage(sessionName, message) {
|
|
107
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
108
|
+
this.logger.debug('Sending message to session', {
|
|
109
|
+
sessionName,
|
|
110
|
+
messageLength: message.length,
|
|
111
|
+
isMultiLine: message.includes('\n'),
|
|
112
|
+
});
|
|
113
|
+
// Wrap message in bracketed paste mode markers (\x1b[200~ ... \x1b[201~).
|
|
114
|
+
// This tells TUI applications (Gemini CLI, Codex CLI, Claude Code) to treat
|
|
115
|
+
// the input as pasted text rather than typed keystrokes. Without this, special
|
|
116
|
+
// characters like (), $, `, and " can trigger shell mode or be interpreted as
|
|
117
|
+
// key sequences in Gemini CLI (#292, #293).
|
|
118
|
+
const bracketedMessage = `\x1b[200~${message}\x1b[201~`;
|
|
119
|
+
// Send text first (in bracketed paste), then Enter separately to ensure submission
|
|
120
|
+
session.write(bracketedMessage);
|
|
121
|
+
// Scale delay based on message size: large prompts (e.g. 409-line registration
|
|
122
|
+
// prompts) need more time for Claude Code to process the bracketed paste.
|
|
123
|
+
// Base delay + 1ms per 10 characters, capped at 5 seconds.
|
|
124
|
+
const scaledDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
|
|
125
|
+
await delay(scaledDelay);
|
|
126
|
+
// Send Enter explicitly as a separate keystroke
|
|
127
|
+
// Use \r (carriage return) which is the standard Enter key in terminals
|
|
128
|
+
session.write('\r');
|
|
129
|
+
// Additional delay for Enter to be processed
|
|
130
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
131
|
+
// Log that we finished sending
|
|
132
|
+
this.logger.debug('Message sent with Enter key', {
|
|
133
|
+
sessionName,
|
|
134
|
+
messageLength: message.length,
|
|
135
|
+
pasteDelay: scaledDelay,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Send a key to a session
|
|
140
|
+
*
|
|
141
|
+
* @param sessionName - The session to send to
|
|
142
|
+
* @param key - The key name (e.g., 'Enter', 'C-c', 'Escape')
|
|
143
|
+
* @throws Error if session does not exist or key is unknown
|
|
144
|
+
*/
|
|
145
|
+
async sendKey(sessionName, key) {
|
|
146
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
147
|
+
const keyCode = KEY_CODES[key];
|
|
148
|
+
if (!keyCode) {
|
|
149
|
+
// If not a special key, send as literal
|
|
150
|
+
session.write(key);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
session.write(keyCode);
|
|
154
|
+
}
|
|
155
|
+
this.logger.debug('Sent key to session', {
|
|
156
|
+
sessionName,
|
|
157
|
+
key,
|
|
158
|
+
isSpecialKey: !!keyCode,
|
|
159
|
+
});
|
|
160
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Send Ctrl+C to a session
|
|
164
|
+
*/
|
|
165
|
+
async sendCtrlC(sessionName) {
|
|
166
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
167
|
+
session.write('\x03');
|
|
168
|
+
this.logger.debug('Sent Ctrl+C to session', { sessionName });
|
|
169
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Send Enter key to a session
|
|
173
|
+
*/
|
|
174
|
+
async sendEnter(sessionName) {
|
|
175
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
176
|
+
session.write('\r');
|
|
177
|
+
this.logger.debug('Sent Enter to session', { sessionName });
|
|
178
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Send Escape key to a session
|
|
182
|
+
*/
|
|
183
|
+
async sendEscape(sessionName) {
|
|
184
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
185
|
+
session.write('\x1b');
|
|
186
|
+
this.logger.debug('Sent Escape to session', { sessionName });
|
|
187
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Gemini-specific message delivery (#130).
|
|
191
|
+
*
|
|
192
|
+
* Handles Ink TUI quirks:
|
|
193
|
+
* 1. Sends Escape to exit sub-modes (shell mode, error overlay)
|
|
194
|
+
* 2. Writes the message text
|
|
195
|
+
* 3. Uses a longer delay before Enter (Ink TUI needs processing time)
|
|
196
|
+
* 4. Verifies the message text left the input area (accepted)
|
|
197
|
+
*
|
|
198
|
+
* @param sessionName - The session to send to
|
|
199
|
+
* @param message - The message to send
|
|
200
|
+
* @returns true if post-write verification shows message was accepted
|
|
201
|
+
*/
|
|
202
|
+
async sendMessageGemini(sessionName, message) {
|
|
203
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
204
|
+
this.logger.debug('Gemini-specific message delivery', {
|
|
205
|
+
sessionName,
|
|
206
|
+
messageLength: message.length,
|
|
207
|
+
});
|
|
208
|
+
// Step 1: Escape to ensure we're not in a sub-mode
|
|
209
|
+
session.write('\x1b');
|
|
210
|
+
await delay(200);
|
|
211
|
+
// Step 2: Write the message text wrapped in bracketed paste markers.
|
|
212
|
+
// This prevents special characters from triggering shell mode (#292, #293).
|
|
213
|
+
session.write(`\x1b[200~${message}\x1b[201~`);
|
|
214
|
+
// Step 3: Longer delay for Ink TUI to process the paste
|
|
215
|
+
const scaledDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
|
|
216
|
+
await delay(scaledDelay);
|
|
217
|
+
// Step 4: Send Enter with extra delay for Ink TUI
|
|
218
|
+
session.write('\r');
|
|
219
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY * 2);
|
|
220
|
+
// Step 5: Verify — check if message text disappeared from input area
|
|
221
|
+
try {
|
|
222
|
+
const postOutput = this.capturePane(sessionName, 10);
|
|
223
|
+
const msgSnippet = (message.length > 30
|
|
224
|
+
? message.substring(0, 60)
|
|
225
|
+
: message).replace(/\s+/g, ' ').trim();
|
|
226
|
+
const bottomLines = postOutput.split('\n').slice(-5).join(' ').replace(/\s+/g, ' ');
|
|
227
|
+
const textStillPresent = bottomLines.includes(msgSnippet);
|
|
228
|
+
if (textStillPresent) {
|
|
229
|
+
this.logger.warn('Gemini message text still in input after send — Enter may have been dropped', {
|
|
230
|
+
sessionName,
|
|
231
|
+
});
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
this.logger.debug('Gemini message delivery verified — text accepted', {
|
|
235
|
+
sessionName,
|
|
236
|
+
});
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Verification failed, but message may have been delivered
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Detect and dismiss interactive prompts (e.g., plan mode) before message delivery.
|
|
246
|
+
* Checks the last terminal output for plan mode patterns and sends Escape to exit
|
|
247
|
+
* if detected. This prevents agents from getting permanently stuck in plan mode.
|
|
248
|
+
*
|
|
249
|
+
* @param sessionName - The session to check
|
|
250
|
+
* @returns True if an interactive prompt was detected and dismissed
|
|
251
|
+
*/
|
|
252
|
+
async dismissInteractivePromptIfNeeded(sessionName) {
|
|
253
|
+
const output = this.capturePane(sessionName);
|
|
254
|
+
// Guard: do NOT send ESC if the agent is actively processing.
|
|
255
|
+
// ESC during processing triggers Claude Code's Rewind mode, which
|
|
256
|
+
// permanently blocks input. Two ESCs = unrecoverable Rewind UI takeover.
|
|
257
|
+
// Use PTY idle time for robust cross-runtime detection instead of regex.
|
|
258
|
+
const idleMs = PtyActivityTrackerService.getInstance().getIdleTimeMs(sessionName);
|
|
259
|
+
const isBusy = idleMs < SESSION_COMMAND_DELAYS.AGENT_BUSY_IDLE_THRESHOLD_MS;
|
|
260
|
+
if (isBusy) {
|
|
261
|
+
this.logger.debug('Skipping plan mode dismissal — agent is busy', {
|
|
262
|
+
sessionName,
|
|
263
|
+
});
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
// Restrict plan mode detection to the last 500 chars to avoid
|
|
267
|
+
// false-positives from historical output further up the buffer.
|
|
268
|
+
const recentOutput = output.slice(-500);
|
|
269
|
+
const isPlanMode = PLAN_MODE_DISMISS_PATTERNS.some(pattern => pattern.test(recentOutput));
|
|
270
|
+
if (isPlanMode) {
|
|
271
|
+
this.logger.warn('Plan mode detected in session, sending Escape to dismiss', {
|
|
272
|
+
sessionName,
|
|
273
|
+
});
|
|
274
|
+
await this.sendEscape(sessionName);
|
|
275
|
+
await delay(SESSION_COMMAND_DELAYS.CLAUDE_RECOVERY_DELAY);
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Clear the current command line in a session
|
|
282
|
+
* Sends Ctrl+C followed by Ctrl+U to cancel any input and clear the line
|
|
283
|
+
*/
|
|
284
|
+
async clearCurrentCommandLine(sessionName) {
|
|
285
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
286
|
+
// Ctrl+C to cancel any running command
|
|
287
|
+
session.write('\x03');
|
|
288
|
+
await delay(SESSION_COMMAND_DELAYS.CLEAR_COMMAND_DELAY);
|
|
289
|
+
// Ctrl+U to clear the current line
|
|
290
|
+
session.write('\x15');
|
|
291
|
+
this.logger.debug('Cleared command line', { sessionName });
|
|
292
|
+
await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Capture terminal output from a session.
|
|
296
|
+
*
|
|
297
|
+
* Strips trailing empty lines that result from empty terminal rows below
|
|
298
|
+
* the actual content. Large terminals (e.g., maximized browser windows)
|
|
299
|
+
* can have 50+ empty rows below the prompt, which would cause prompt
|
|
300
|
+
* detection to fail if the capture window is too small.
|
|
301
|
+
*
|
|
302
|
+
* @param sessionName - The session to capture from
|
|
303
|
+
* @param lines - Number of lines to capture (default: 200)
|
|
304
|
+
* @returns The captured terminal content with trailing empty lines removed
|
|
305
|
+
*/
|
|
306
|
+
capturePane(sessionName, lines = 200) {
|
|
307
|
+
const output = this.backend.captureOutput(sessionName, lines);
|
|
308
|
+
// Strip trailing empty/whitespace-only lines from terminal buffer.
|
|
309
|
+
// xterm.js returns empty rows for unused terminal space below content.
|
|
310
|
+
// NOTE: The previous regex /(\n\s*)+$/ caused catastrophic backtracking
|
|
311
|
+
// (ReDoS) because \s* includes \n, creating exponential backtracking on
|
|
312
|
+
// long terminal output with many trailing blank lines. This iterative
|
|
313
|
+
// approach is O(n) and immune to ReDoS.
|
|
314
|
+
const outputLines = output.split('\n');
|
|
315
|
+
let lastContentLine = outputLines.length - 1;
|
|
316
|
+
while (lastContentLine >= 0 && outputLines[lastContentLine].trim() === '') {
|
|
317
|
+
lastContentLine--;
|
|
318
|
+
}
|
|
319
|
+
if (lastContentLine < 0)
|
|
320
|
+
return '\n';
|
|
321
|
+
return outputLines.slice(0, lastContentLine + 1).join('\n') + '\n';
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Get raw output history with ANSI escape codes preserved.
|
|
325
|
+
*
|
|
326
|
+
* @param sessionName - The session to get history from
|
|
327
|
+
* @returns Raw output history with ANSI codes
|
|
328
|
+
*/
|
|
329
|
+
getRawHistory(sessionName) {
|
|
330
|
+
return this.backend.getRawHistory(sessionName);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* List all active sessions
|
|
334
|
+
*/
|
|
335
|
+
listSessions() {
|
|
336
|
+
return this.backend.listSessions();
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Kill a session
|
|
340
|
+
*/
|
|
341
|
+
async killSession(sessionName) {
|
|
342
|
+
await this.backend.killSession(sessionName);
|
|
343
|
+
this.logger.info('Session killed', { sessionName });
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Create a new session
|
|
347
|
+
*
|
|
348
|
+
* @param sessionName - Unique name for the session
|
|
349
|
+
* @param cwd - Working directory for the session
|
|
350
|
+
* @param options - Additional session options
|
|
351
|
+
* @returns The created session
|
|
352
|
+
*/
|
|
353
|
+
async createSession(sessionName, cwd, options) {
|
|
354
|
+
this.logger.info('Creating session', { sessionName, cwd });
|
|
355
|
+
// Default to shell if no command specified
|
|
356
|
+
const command = options?.command || process.env.SHELL || '/bin/bash';
|
|
357
|
+
const session = await this.backend.createSession(sessionName, {
|
|
358
|
+
cwd,
|
|
359
|
+
command,
|
|
360
|
+
args: options?.args,
|
|
361
|
+
env: options?.env,
|
|
362
|
+
cols: options?.cols,
|
|
363
|
+
rows: options?.rows,
|
|
364
|
+
});
|
|
365
|
+
this.logger.info('Session created', { sessionName, pid: session.pid });
|
|
366
|
+
return session;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Set an environment variable in a session by executing export command
|
|
370
|
+
* Note: This only affects new commands run in the session
|
|
371
|
+
*/
|
|
372
|
+
async setEnvironmentVariable(sessionName, key, value) {
|
|
373
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
374
|
+
// Export the variable
|
|
375
|
+
session.write(`export ${key}="${value}"\r`);
|
|
376
|
+
this.logger.debug('Set environment variable', { sessionName, key });
|
|
377
|
+
await delay(SESSION_COMMAND_DELAYS.ENV_VAR_DELAY);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Resize a session's terminal
|
|
381
|
+
*/
|
|
382
|
+
resizeSession(sessionName, cols, rows) {
|
|
383
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
384
|
+
session.resize(cols, rows);
|
|
385
|
+
this.logger.debug('Session resized', { sessionName, cols, rows });
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get the underlying backend
|
|
389
|
+
*/
|
|
390
|
+
getBackend() {
|
|
391
|
+
return this.backend;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Subscribe to session output events.
|
|
395
|
+
*
|
|
396
|
+
* This method provides direct access to the terminal output stream,
|
|
397
|
+
* enabling event-driven processing instead of polling.
|
|
398
|
+
*
|
|
399
|
+
* @param sessionName - The session to subscribe to
|
|
400
|
+
* @param callback - Function called on each data event
|
|
401
|
+
* @returns Unsubscribe function to stop receiving events
|
|
402
|
+
* @throws Error if session does not exist
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* ```typescript
|
|
406
|
+
* const unsubscribe = helper.subscribeToOutput('my-session', (data) => {
|
|
407
|
+
* console.log('Received:', data);
|
|
408
|
+
* });
|
|
409
|
+
* // Later: unsubscribe();
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
subscribeToOutput(sessionName, callback) {
|
|
413
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
414
|
+
this.logger.debug('Subscribing to session output', { sessionName });
|
|
415
|
+
return session.onData(callback);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Subscribe to session exit events.
|
|
419
|
+
*
|
|
420
|
+
* @param sessionName - The session to subscribe to
|
|
421
|
+
* @param callback - Function called when session exits with exit code
|
|
422
|
+
* @returns Unsubscribe function to stop receiving events
|
|
423
|
+
* @throws Error if session does not exist
|
|
424
|
+
*
|
|
425
|
+
* @example
|
|
426
|
+
* ```typescript
|
|
427
|
+
* const unsubscribe = helper.subscribeToExit('my-session', (code) => {
|
|
428
|
+
* console.log('Session exited with code:', code);
|
|
429
|
+
* });
|
|
430
|
+
* ```
|
|
431
|
+
*/
|
|
432
|
+
subscribeToExit(sessionName, callback) {
|
|
433
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
434
|
+
this.logger.debug('Subscribing to session exit', { sessionName });
|
|
435
|
+
return session.onExit(callback);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Wait for a pattern to appear in session output.
|
|
439
|
+
*
|
|
440
|
+
* Subscribes to the output stream and resolves when the pattern is found.
|
|
441
|
+
* Useful for waiting for specific prompts or indicators.
|
|
442
|
+
*
|
|
443
|
+
* @param sessionName - The session to monitor
|
|
444
|
+
* @param pattern - RegExp or string to match against output
|
|
445
|
+
* @param timeoutMs - Maximum time to wait (default: 30 seconds)
|
|
446
|
+
* @returns Promise resolving to the accumulated buffer when pattern matches
|
|
447
|
+
* @throws Error if timeout or session does not exist
|
|
448
|
+
*
|
|
449
|
+
* @example
|
|
450
|
+
* ```typescript
|
|
451
|
+
* // Wait for Claude prompt
|
|
452
|
+
* const output = await helper.waitForPattern('agent-1', />\s*$/, 10000);
|
|
453
|
+
* console.log('Claude is ready:', output);
|
|
454
|
+
* ```
|
|
455
|
+
*/
|
|
456
|
+
async waitForPattern(sessionName, pattern, timeoutMs = EVENT_DELIVERY_CONSTANTS.DEFAULT_PATTERN_TIMEOUT) {
|
|
457
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
458
|
+
return new Promise((resolve, reject) => {
|
|
459
|
+
let buffer = '';
|
|
460
|
+
let resolved = false;
|
|
461
|
+
const cleanup = () => {
|
|
462
|
+
if (!resolved) {
|
|
463
|
+
resolved = true;
|
|
464
|
+
clearTimeout(timeoutId);
|
|
465
|
+
unsubscribe();
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
const timeoutId = setTimeout(() => {
|
|
469
|
+
cleanup();
|
|
470
|
+
this.logger.debug('waitForPattern timed out', {
|
|
471
|
+
sessionName,
|
|
472
|
+
pattern: pattern.toString(),
|
|
473
|
+
bufferLength: buffer.length,
|
|
474
|
+
});
|
|
475
|
+
reject(new Error(`Timeout waiting for pattern: ${pattern}`));
|
|
476
|
+
}, timeoutMs);
|
|
477
|
+
const unsubscribe = session.onData((data) => {
|
|
478
|
+
if (resolved)
|
|
479
|
+
return;
|
|
480
|
+
buffer += data;
|
|
481
|
+
const match = typeof pattern === 'string' ? buffer.includes(pattern) : pattern.test(buffer);
|
|
482
|
+
if (match) {
|
|
483
|
+
this.logger.debug('Pattern matched in output', {
|
|
484
|
+
sessionName,
|
|
485
|
+
pattern: pattern.toString(),
|
|
486
|
+
bufferLength: buffer.length,
|
|
487
|
+
});
|
|
488
|
+
cleanup();
|
|
489
|
+
resolve(buffer);
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Wait for any of multiple patterns to appear in session output.
|
|
496
|
+
*
|
|
497
|
+
* Useful when multiple outcomes are possible (e.g., success or error).
|
|
498
|
+
*
|
|
499
|
+
* @param sessionName - The session to monitor
|
|
500
|
+
* @param patterns - Array of patterns with identifiers
|
|
501
|
+
* @param timeoutMs - Maximum time to wait
|
|
502
|
+
* @returns Promise resolving to which pattern matched and the buffer
|
|
503
|
+
*
|
|
504
|
+
* @example
|
|
505
|
+
* ```typescript
|
|
506
|
+
* const result = await helper.waitForAnyPattern('agent-1', [
|
|
507
|
+
* { id: 'prompt', pattern: />\s*$/ },
|
|
508
|
+
* { id: 'error', pattern: /error:/i },
|
|
509
|
+
* ], 10000);
|
|
510
|
+
*
|
|
511
|
+
* if (result.matchedId === 'error') {
|
|
512
|
+
* console.log('Error occurred:', result.buffer);
|
|
513
|
+
* }
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
516
|
+
async waitForAnyPattern(sessionName, patterns, timeoutMs = EVENT_DELIVERY_CONSTANTS.DEFAULT_PATTERN_TIMEOUT) {
|
|
517
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
518
|
+
return new Promise((resolve, reject) => {
|
|
519
|
+
let buffer = '';
|
|
520
|
+
let resolved = false;
|
|
521
|
+
const cleanup = () => {
|
|
522
|
+
if (!resolved) {
|
|
523
|
+
resolved = true;
|
|
524
|
+
clearTimeout(timeoutId);
|
|
525
|
+
unsubscribe();
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
const timeoutId = setTimeout(() => {
|
|
529
|
+
cleanup();
|
|
530
|
+
this.logger.debug('waitForAnyPattern timed out', {
|
|
531
|
+
sessionName,
|
|
532
|
+
patternCount: patterns.length,
|
|
533
|
+
bufferLength: buffer.length,
|
|
534
|
+
});
|
|
535
|
+
reject(new Error(`Timeout waiting for any pattern`));
|
|
536
|
+
}, timeoutMs);
|
|
537
|
+
const unsubscribe = session.onData((data) => {
|
|
538
|
+
if (resolved)
|
|
539
|
+
return;
|
|
540
|
+
buffer += data;
|
|
541
|
+
for (const { id, pattern } of patterns) {
|
|
542
|
+
const match = typeof pattern === 'string' ? buffer.includes(pattern) : pattern.test(buffer);
|
|
543
|
+
if (match) {
|
|
544
|
+
this.logger.debug('Pattern matched in waitForAnyPattern', {
|
|
545
|
+
sessionName,
|
|
546
|
+
matchedId: id,
|
|
547
|
+
pattern: pattern.toString(),
|
|
548
|
+
});
|
|
549
|
+
cleanup();
|
|
550
|
+
resolve({ matchedId: id, buffer });
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
});
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Send message and wait for delivery confirmation via events.
|
|
559
|
+
*
|
|
560
|
+
* This is the core event-driven message delivery method. It:
|
|
561
|
+
* 1. Sends the message to the terminal
|
|
562
|
+
* 2. Subscribes to output to detect confirmation patterns
|
|
563
|
+
* 3. Resolves when confirmation is detected or timeout occurs
|
|
564
|
+
*
|
|
565
|
+
* @param sessionName - The session to send to
|
|
566
|
+
* @param message - The message to send
|
|
567
|
+
* @param confirmationPattern - Pattern indicating successful delivery
|
|
568
|
+
* @param timeoutMs - Maximum time to wait for confirmation
|
|
569
|
+
* @returns Promise resolving to true if confirmed, false if timeout
|
|
570
|
+
*
|
|
571
|
+
* @example
|
|
572
|
+
* ```typescript
|
|
573
|
+
* // Send message and wait for processing indicator
|
|
574
|
+
* const confirmed = await helper.sendMessageWithConfirmation(
|
|
575
|
+
* 'agent-1',
|
|
576
|
+
* 'Hello Claude',
|
|
577
|
+
* /⠋|⠙|⠹|Thinking/,
|
|
578
|
+
* 5000
|
|
579
|
+
* );
|
|
580
|
+
* ```
|
|
581
|
+
*/
|
|
582
|
+
async sendMessageWithConfirmation(sessionName, message, confirmationPattern, timeoutMs = EVENT_DELIVERY_CONSTANTS.DELIVERY_CONFIRMATION_TIMEOUT) {
|
|
583
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
584
|
+
return new Promise((resolve) => {
|
|
585
|
+
let confirmed = false;
|
|
586
|
+
let resolved = false;
|
|
587
|
+
const cleanup = () => {
|
|
588
|
+
if (!resolved) {
|
|
589
|
+
resolved = true;
|
|
590
|
+
clearTimeout(timeoutId);
|
|
591
|
+
unsubscribe();
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
const timeoutId = setTimeout(() => {
|
|
595
|
+
this.logger.debug('sendMessageWithConfirmation timed out', {
|
|
596
|
+
sessionName,
|
|
597
|
+
messageLength: message.length,
|
|
598
|
+
confirmed,
|
|
599
|
+
});
|
|
600
|
+
cleanup();
|
|
601
|
+
resolve(confirmed);
|
|
602
|
+
}, timeoutMs);
|
|
603
|
+
const unsubscribe = session.onData((data) => {
|
|
604
|
+
if (resolved)
|
|
605
|
+
return;
|
|
606
|
+
const match = typeof confirmationPattern === 'string'
|
|
607
|
+
? data.includes(confirmationPattern)
|
|
608
|
+
: confirmationPattern.test(data);
|
|
609
|
+
if (match) {
|
|
610
|
+
this.logger.debug('Message delivery confirmed', {
|
|
611
|
+
sessionName,
|
|
612
|
+
pattern: confirmationPattern.toString(),
|
|
613
|
+
});
|
|
614
|
+
confirmed = true;
|
|
615
|
+
cleanup();
|
|
616
|
+
resolve(true);
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
// Send the message
|
|
620
|
+
this.logger.debug('Sending message with confirmation tracking', {
|
|
621
|
+
sessionName,
|
|
622
|
+
messageLength: message.length,
|
|
623
|
+
});
|
|
624
|
+
session.write(message);
|
|
625
|
+
// Send Enter after a brief delay (for bracketed paste mode)
|
|
626
|
+
setTimeout(() => {
|
|
627
|
+
if (!resolved) {
|
|
628
|
+
session.write('\r');
|
|
629
|
+
}
|
|
630
|
+
}, SESSION_COMMAND_DELAYS.MESSAGE_DELAY);
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* Smart message sending with event-driven paste detection.
|
|
635
|
+
*
|
|
636
|
+
* This method intelligently handles bracketed paste mode by:
|
|
637
|
+
* 1. Sending the message text
|
|
638
|
+
* 2. Waiting for "[Pasted text" indicator (paste received)
|
|
639
|
+
* 3. Sending Enter key only after paste is confirmed
|
|
640
|
+
* 4. Optionally waiting for processing indicators
|
|
641
|
+
*
|
|
642
|
+
* This is much more reliable than fixed delays because it detects
|
|
643
|
+
* the actual terminal state rather than guessing timing.
|
|
644
|
+
*
|
|
645
|
+
* @param sessionName - The session to send to
|
|
646
|
+
* @param message - The message to send
|
|
647
|
+
* @param options - Configuration options
|
|
648
|
+
* @returns Promise with delivery result
|
|
649
|
+
*
|
|
650
|
+
* @example
|
|
651
|
+
* ```typescript
|
|
652
|
+
* const result = await helper.sendMessageSmart('agent-1', 'Hello', {
|
|
653
|
+
* waitForProcessing: true,
|
|
654
|
+
* pasteTimeout: 3000,
|
|
655
|
+
* });
|
|
656
|
+
* if (result.pasteDetected && result.processingStarted) {
|
|
657
|
+
* console.log('Message delivered and being processed');
|
|
658
|
+
* }
|
|
659
|
+
* ```
|
|
660
|
+
*/
|
|
661
|
+
async sendMessageSmart(sessionName, message, options = {}) {
|
|
662
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
663
|
+
const { pasteTimeout = 3000, processingTimeout = 5000, waitForProcessing = false, pastePattern = TERMINAL_PATTERNS.PASTE_INDICATOR, processingPattern = TERMINAL_PATTERNS.PROCESSING, fallbackDelay = 1500, } = options;
|
|
664
|
+
const result = {
|
|
665
|
+
pasteDetected: false,
|
|
666
|
+
enterSent: false,
|
|
667
|
+
processingStarted: false,
|
|
668
|
+
usedFallback: false,
|
|
669
|
+
};
|
|
670
|
+
this.logger.debug('Smart message send starting', {
|
|
671
|
+
sessionName,
|
|
672
|
+
messageLength: message.length,
|
|
673
|
+
isMultiLine: message.includes('\n'),
|
|
674
|
+
});
|
|
675
|
+
// Step 1: Send the message text (without Enter)
|
|
676
|
+
session.write(message);
|
|
677
|
+
// Step 2: Wait for paste detection or fallback
|
|
678
|
+
try {
|
|
679
|
+
await this.waitForPattern(sessionName, pastePattern, pasteTimeout);
|
|
680
|
+
result.pasteDetected = true;
|
|
681
|
+
this.logger.debug('Paste detected via pattern', { sessionName });
|
|
682
|
+
}
|
|
683
|
+
catch {
|
|
684
|
+
// Paste pattern not detected within timeout - use fallback delay
|
|
685
|
+
this.logger.debug('Paste pattern not detected, using fallback delay', {
|
|
686
|
+
sessionName,
|
|
687
|
+
fallbackDelay,
|
|
688
|
+
});
|
|
689
|
+
await delay(fallbackDelay);
|
|
690
|
+
result.usedFallback = true;
|
|
691
|
+
}
|
|
692
|
+
// Step 3: Send Enter key
|
|
693
|
+
session.write('\r');
|
|
694
|
+
result.enterSent = true;
|
|
695
|
+
this.logger.debug('Enter key sent', { sessionName });
|
|
696
|
+
// Step 4: Optionally wait for processing indicators
|
|
697
|
+
if (waitForProcessing) {
|
|
698
|
+
try {
|
|
699
|
+
await this.waitForPattern(sessionName, processingPattern, processingTimeout);
|
|
700
|
+
result.processingStarted = true;
|
|
701
|
+
this.logger.debug('Processing started', { sessionName });
|
|
702
|
+
}
|
|
703
|
+
catch {
|
|
704
|
+
this.logger.debug('Processing pattern not detected within timeout', {
|
|
705
|
+
sessionName,
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
this.logger.debug('Smart message send complete', {
|
|
710
|
+
sessionName,
|
|
711
|
+
result,
|
|
712
|
+
});
|
|
713
|
+
return result;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Send message with retry logic using smart detection.
|
|
717
|
+
*
|
|
718
|
+
* Attempts to deliver a message with intelligent retry behavior:
|
|
719
|
+
* - Uses event-driven paste detection
|
|
720
|
+
* - Retries with Enter key if message appears stuck
|
|
721
|
+
* - Detects common failure modes (prompt still visible, no response)
|
|
722
|
+
*
|
|
723
|
+
* @param sessionName - The session to send to
|
|
724
|
+
* @param message - The message to send
|
|
725
|
+
* @param maxRetries - Maximum number of retry attempts
|
|
726
|
+
* @returns Promise resolving to true if message was successfully processed
|
|
727
|
+
*/
|
|
728
|
+
async sendMessageWithSmartRetry(sessionName, message, maxRetries = 3) {
|
|
729
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
730
|
+
// Dismiss plan mode if detected before attempting message delivery
|
|
731
|
+
await this.dismissInteractivePromptIfNeeded(sessionName);
|
|
732
|
+
// Use centralized patterns for consistency
|
|
733
|
+
const stuckPattern = TERMINAL_PATTERNS.PASTE_STUCK;
|
|
734
|
+
const processingPattern = TERMINAL_PATTERNS.PROCESSING;
|
|
735
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
736
|
+
this.logger.debug('Smart retry attempt', { sessionName, attempt, maxRetries });
|
|
737
|
+
if (attempt === 1) {
|
|
738
|
+
// First attempt: use smart send
|
|
739
|
+
const result = await this.sendMessageSmart(sessionName, message, {
|
|
740
|
+
waitForProcessing: true,
|
|
741
|
+
pasteTimeout: 3000,
|
|
742
|
+
processingTimeout: 5000,
|
|
743
|
+
});
|
|
744
|
+
if (result.processingStarted) {
|
|
745
|
+
this.logger.debug('Message delivered on first attempt', { sessionName });
|
|
746
|
+
return true;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
else {
|
|
750
|
+
// Retry attempts: just send Enter and check
|
|
751
|
+
this.logger.debug('Sending retry Enter', { sessionName, attempt });
|
|
752
|
+
session.write('\r');
|
|
753
|
+
}
|
|
754
|
+
// Wait a moment and check terminal state
|
|
755
|
+
await delay(1000);
|
|
756
|
+
// Capture current output to check state
|
|
757
|
+
const output = this.backend.captureOutput(sessionName, 10);
|
|
758
|
+
// Check if stuck (paste indicator still visible)
|
|
759
|
+
if (stuckPattern.test(output)) {
|
|
760
|
+
this.logger.debug('Message appears stuck, will retry with Enter', {
|
|
761
|
+
sessionName,
|
|
762
|
+
attempt,
|
|
763
|
+
});
|
|
764
|
+
continue;
|
|
765
|
+
}
|
|
766
|
+
// Check if processing started
|
|
767
|
+
if (processingPattern.test(output)) {
|
|
768
|
+
this.logger.debug('Processing detected after retry', { sessionName, attempt });
|
|
769
|
+
return true;
|
|
770
|
+
}
|
|
771
|
+
// Check if prompt appeared (message may have been processed already)
|
|
772
|
+
if (output.includes('❯') && !output.includes('[Pasted text')) {
|
|
773
|
+
this.logger.debug('Prompt visible without paste indicator - likely processed', {
|
|
774
|
+
sessionName,
|
|
775
|
+
attempt,
|
|
776
|
+
});
|
|
777
|
+
return true;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
this.logger.warn('Message delivery failed after all retries', {
|
|
781
|
+
sessionName,
|
|
782
|
+
maxRetries,
|
|
783
|
+
});
|
|
784
|
+
return false;
|
|
785
|
+
}
|
|
786
|
+
/**
|
|
787
|
+
* Write raw data to session without Enter key.
|
|
788
|
+
*
|
|
789
|
+
* Useful for sending partial input or special key sequences.
|
|
790
|
+
*
|
|
791
|
+
* @param sessionName - The session to write to
|
|
792
|
+
* @param data - Data to write
|
|
793
|
+
* @throws Error if session does not exist
|
|
794
|
+
*/
|
|
795
|
+
writeRaw(sessionName, data) {
|
|
796
|
+
const session = this.getSessionOrThrow(sessionName);
|
|
797
|
+
session.write(data);
|
|
798
|
+
this.logger.debug('Wrote raw data to session', {
|
|
799
|
+
sessionName,
|
|
800
|
+
dataLength: data.length,
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* Create a SessionCommandHelper instance
|
|
806
|
+
*/
|
|
807
|
+
export function createSessionCommandHelper(backend) {
|
|
808
|
+
return new SessionCommandHelper(backend);
|
|
809
|
+
}
|
|
810
|
+
//# sourceMappingURL=session-command-helper.js.map
|