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,508 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Relogin Monitor Service
|
|
3
|
+
*
|
|
4
|
+
* Monitors PTY session output for OAuth token expiry errors and orchestrates
|
|
5
|
+
* the full human-in-the-loop OAuth re-authentication flow:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Detect**: Watch PTY output for authentication_error + expired token
|
|
8
|
+
* 2. **Login**: Auto-send `/login` command to trigger OAuth flow
|
|
9
|
+
* 3. **Capture**: Extract the OAuth URL from PTY output after /login
|
|
10
|
+
* 4. **Notify**: Emit `agent:oauth_url` event so orchestrator/Slack can forward to user
|
|
11
|
+
* 5. **Callback**: Accept auth code via API and write it to PTY to complete login
|
|
12
|
+
*
|
|
13
|
+
* Follows the PTY subscription pattern from ContextWindowMonitorService and
|
|
14
|
+
* RuntimeExitMonitorService.
|
|
15
|
+
*
|
|
16
|
+
* @module services/agent/oauth-relogin-monitor
|
|
17
|
+
*/
|
|
18
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
19
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
20
|
+
import { getSessionBackendSync, } from '../session/index.js';
|
|
21
|
+
import { stripAnsiCodes } from '../../utils/terminal-output.utils.js';
|
|
22
|
+
import { OAUTH_RELOGIN_CONSTANTS, OAUTH_ERROR_PATTERN_SETS, RUNTIME_TYPES, } from '../../constants.js';
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Service
|
|
25
|
+
// =============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Monitors PTY sessions for OAuth token expiry errors and orchestrates the
|
|
28
|
+
* full OAuth re-authentication flow including URL capture and event notification.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const monitor = OAuthReloginMonitorService.getInstance();
|
|
33
|
+
* monitor.setEventBusService(eventBus);
|
|
34
|
+
* monitor.startMonitoring('agent-dev-001', 'claude-code');
|
|
35
|
+
*
|
|
36
|
+
* // User sends back auth code via API:
|
|
37
|
+
* OAuthReloginMonitorService.submitOAuthCode('agent-dev-001', 'auth-code-123');
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class OAuthReloginMonitorService {
|
|
41
|
+
static instance = null;
|
|
42
|
+
logger;
|
|
43
|
+
/** Per-session monitoring state */
|
|
44
|
+
sessions = new Map();
|
|
45
|
+
/** EventBus for publishing oauth_url events */
|
|
46
|
+
eventBusService = null;
|
|
47
|
+
/** Callback invoked when an OAuth URL is captured (for orchestrator/Slack integration) */
|
|
48
|
+
onOAuthUrlCallback = null;
|
|
49
|
+
constructor() {
|
|
50
|
+
this.logger = LoggerService.getInstance().createComponentLogger('OAuthReloginMonitor');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the singleton instance.
|
|
54
|
+
*
|
|
55
|
+
* @returns The OAuthReloginMonitorService singleton
|
|
56
|
+
*/
|
|
57
|
+
static getInstance() {
|
|
58
|
+
if (!OAuthReloginMonitorService.instance) {
|
|
59
|
+
OAuthReloginMonitorService.instance = new OAuthReloginMonitorService();
|
|
60
|
+
}
|
|
61
|
+
return OAuthReloginMonitorService.instance;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Reset the singleton (for testing).
|
|
65
|
+
*/
|
|
66
|
+
static resetInstance() {
|
|
67
|
+
if (OAuthReloginMonitorService.instance) {
|
|
68
|
+
OAuthReloginMonitorService.instance.destroy();
|
|
69
|
+
}
|
|
70
|
+
OAuthReloginMonitorService.instance = null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Set the EventBus dependency for publishing OAuth URL events.
|
|
74
|
+
*
|
|
75
|
+
* @param eventBus - The EventBusService instance
|
|
76
|
+
*/
|
|
77
|
+
setEventBusService(eventBus) {
|
|
78
|
+
this.eventBusService = eventBus;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register a callback invoked when an OAuth URL is captured.
|
|
82
|
+
* Used for direct notification (e.g., Slack) without going through EventBus subscriptions.
|
|
83
|
+
*
|
|
84
|
+
* @param callback - Called with (sessionName, oauthUrl)
|
|
85
|
+
*/
|
|
86
|
+
setOnOAuthUrlCallback(callback) {
|
|
87
|
+
this.onOAuthUrlCallback = callback;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Submit an OAuth authorization code to a session's PTY.
|
|
91
|
+
*
|
|
92
|
+
* After the user visits the OAuth URL and gets an auth code, this method
|
|
93
|
+
* writes the code into the agent's PTY session to complete authentication.
|
|
94
|
+
*
|
|
95
|
+
* @param sessionName - PTY session name
|
|
96
|
+
* @param code - OAuth authorization code from the user
|
|
97
|
+
* @returns True if the code was written successfully
|
|
98
|
+
*/
|
|
99
|
+
static submitOAuthCode(sessionName, code) {
|
|
100
|
+
const backend = getSessionBackendSync();
|
|
101
|
+
if (!backend) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
const session = backend.getSession(sessionName);
|
|
105
|
+
if (!session) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Write the code followed by Enter
|
|
109
|
+
session.write(code + '\r');
|
|
110
|
+
const instance = OAuthReloginMonitorService.instance;
|
|
111
|
+
if (instance) {
|
|
112
|
+
instance.logger.info('OAuth code submitted to session', { sessionName });
|
|
113
|
+
// Reset capture mode
|
|
114
|
+
const state = instance.sessions.get(sessionName);
|
|
115
|
+
if (state) {
|
|
116
|
+
state.captureMode = 'idle';
|
|
117
|
+
state.captureBuffer = '';
|
|
118
|
+
if (state.captureTimeoutTimer) {
|
|
119
|
+
clearTimeout(state.captureTimeoutTimer);
|
|
120
|
+
state.captureTimeoutTimer = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Start monitoring a PTY session for OAuth token expiry errors.
|
|
128
|
+
*
|
|
129
|
+
* Subscribes to the session's PTY onData events and watches for
|
|
130
|
+
* authentication error patterns in the output.
|
|
131
|
+
*
|
|
132
|
+
* @param sessionName - PTY session name
|
|
133
|
+
* @param runtimeType - Agent runtime type (claude-code, gemini-cli, codex-cli)
|
|
134
|
+
*/
|
|
135
|
+
startMonitoring(sessionName, runtimeType) {
|
|
136
|
+
// Stop any existing monitoring for this session
|
|
137
|
+
if (this.sessions.has(sessionName)) {
|
|
138
|
+
this.stopMonitoring(sessionName);
|
|
139
|
+
}
|
|
140
|
+
const backend = getSessionBackendSync();
|
|
141
|
+
if (!backend) {
|
|
142
|
+
this.logger.warn('Cannot start OAuth monitoring: session backend not initialized', { sessionName });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const session = backend.getSession(sessionName);
|
|
146
|
+
if (!session) {
|
|
147
|
+
this.logger.warn('Cannot start OAuth monitoring: session not found', { sessionName });
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Subscribe to PTY data
|
|
151
|
+
const unsubscribe = session.onData((data) => {
|
|
152
|
+
this.handleData(sessionName, data);
|
|
153
|
+
});
|
|
154
|
+
const state = {
|
|
155
|
+
sessionName,
|
|
156
|
+
runtimeType,
|
|
157
|
+
unsubscribe,
|
|
158
|
+
buffer: '',
|
|
159
|
+
startedAt: Date.now(),
|
|
160
|
+
lastReloginAt: 0,
|
|
161
|
+
reloginInProgress: false,
|
|
162
|
+
attemptTimestamps: [],
|
|
163
|
+
debounceTimer: null,
|
|
164
|
+
captureMode: 'idle',
|
|
165
|
+
captureBuffer: '',
|
|
166
|
+
captureTimeoutTimer: null,
|
|
167
|
+
lastCapturedUrl: null,
|
|
168
|
+
};
|
|
169
|
+
this.sessions.set(sessionName, state);
|
|
170
|
+
this.logger.info('Started OAuth relogin monitoring', {
|
|
171
|
+
sessionName,
|
|
172
|
+
runtimeType,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Stop monitoring a PTY session.
|
|
177
|
+
*
|
|
178
|
+
* @param sessionName - PTY session name
|
|
179
|
+
*/
|
|
180
|
+
stopMonitoring(sessionName) {
|
|
181
|
+
const state = this.sessions.get(sessionName);
|
|
182
|
+
if (!state) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (state.debounceTimer) {
|
|
186
|
+
clearTimeout(state.debounceTimer);
|
|
187
|
+
}
|
|
188
|
+
if (state.captureTimeoutTimer) {
|
|
189
|
+
clearTimeout(state.captureTimeoutTimer);
|
|
190
|
+
}
|
|
191
|
+
state.unsubscribe();
|
|
192
|
+
this.sessions.delete(sessionName);
|
|
193
|
+
this.logger.debug('Stopped OAuth relogin monitoring', { sessionName });
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if a session is being monitored.
|
|
197
|
+
*
|
|
198
|
+
* @param sessionName - PTY session name
|
|
199
|
+
* @returns True if the session is being monitored
|
|
200
|
+
*/
|
|
201
|
+
isMonitoring(sessionName) {
|
|
202
|
+
return this.sessions.has(sessionName);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get the monitoring state for a session (for testing/debugging).
|
|
206
|
+
*
|
|
207
|
+
* @param sessionName - PTY session name
|
|
208
|
+
* @returns The monitoring state or undefined
|
|
209
|
+
*/
|
|
210
|
+
getState(sessionName) {
|
|
211
|
+
return this.sessions.get(sessionName);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Destroy all monitoring subscriptions.
|
|
215
|
+
*/
|
|
216
|
+
destroy() {
|
|
217
|
+
const sessionNames = [...this.sessions.keys()];
|
|
218
|
+
for (const sessionName of sessionNames) {
|
|
219
|
+
this.stopMonitoring(sessionName);
|
|
220
|
+
}
|
|
221
|
+
this.logger.debug('All OAuth relogin monitors destroyed');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Handle incoming PTY data for a monitored session.
|
|
225
|
+
*
|
|
226
|
+
* In normal mode: checks for OAuth error patterns.
|
|
227
|
+
* In capture mode: looks for OAuth URL after /login was sent.
|
|
228
|
+
*
|
|
229
|
+
* @param sessionName - PTY session name
|
|
230
|
+
* @param data - Raw PTY output data
|
|
231
|
+
*/
|
|
232
|
+
handleData(sessionName, data) {
|
|
233
|
+
const state = this.sessions.get(sessionName);
|
|
234
|
+
if (!state) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Strip ANSI codes
|
|
238
|
+
const clean = stripAnsiCodes(data);
|
|
239
|
+
// If in capture mode, look for OAuth URL
|
|
240
|
+
if (state.captureMode === 'capturing') {
|
|
241
|
+
this.handleCaptureData(state, clean);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Skip if relogin is in progress
|
|
245
|
+
if (state.reloginInProgress) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Append to rolling buffer (kept for URL capture and diagnostics)
|
|
249
|
+
state.buffer += clean;
|
|
250
|
+
// Cap buffer size
|
|
251
|
+
if (state.buffer.length > OAUTH_RELOGIN_CONSTANTS.MAX_BUFFER_SIZE) {
|
|
252
|
+
state.buffer = state.buffer.slice(-OAUTH_RELOGIN_CONSTANTS.MAX_BUFFER_SIZE);
|
|
253
|
+
}
|
|
254
|
+
// Skip during startup grace period
|
|
255
|
+
if (Date.now() - state.startedAt < OAUTH_RELOGIN_CONSTANTS.STARTUP_GRACE_PERIOD_MS) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Check ONLY the incoming data chunk for OAuth error patterns.
|
|
259
|
+
// The real Claude Code auth error contains all pattern strings in a single
|
|
260
|
+
// output message (e.g. 'API Error: 401 {"type":"error","error":{"type":"authentication_error",...}}').
|
|
261
|
+
// Checking the entire rolling buffer caused false positives when unrelated text
|
|
262
|
+
// from different output events (e.g. get-agent-logs, skill output) combined
|
|
263
|
+
// to match patterns across the buffer.
|
|
264
|
+
if (!this.detectOAuthError(clean)) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// Pattern matched — debounce before sending /login
|
|
268
|
+
if (state.debounceTimer) {
|
|
269
|
+
clearTimeout(state.debounceTimer);
|
|
270
|
+
}
|
|
271
|
+
state.debounceTimer = setTimeout(() => {
|
|
272
|
+
this.triggerRelogin(sessionName).catch((err) => {
|
|
273
|
+
this.logger.error('Failed to trigger OAuth relogin', {
|
|
274
|
+
sessionName,
|
|
275
|
+
error: err instanceof Error ? err.message : String(err),
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
}, OAUTH_RELOGIN_CONSTANTS.DETECTION_DEBOUNCE_MS);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Handle PTY data while in URL capture mode.
|
|
282
|
+
*
|
|
283
|
+
* Accumulates output and scans for an HTTPS URL that looks like an OAuth
|
|
284
|
+
* authorization endpoint.
|
|
285
|
+
*
|
|
286
|
+
* @param state - Session monitoring state
|
|
287
|
+
* @param data - Cleaned PTY output data
|
|
288
|
+
*/
|
|
289
|
+
handleCaptureData(state, data) {
|
|
290
|
+
state.captureBuffer += data;
|
|
291
|
+
// Cap capture buffer
|
|
292
|
+
if (state.captureBuffer.length > OAUTH_RELOGIN_CONSTANTS.URL_CAPTURE_BUFFER_SIZE) {
|
|
293
|
+
state.captureBuffer = state.captureBuffer.slice(-OAUTH_RELOGIN_CONSTANTS.URL_CAPTURE_BUFFER_SIZE);
|
|
294
|
+
}
|
|
295
|
+
// Try to extract an OAuth URL from the capture buffer.
|
|
296
|
+
// OAuth URLs typically contain oauth, authorize, login, or auth in the path.
|
|
297
|
+
// We use a simple approach: find any https:// URL and check for auth-related paths.
|
|
298
|
+
const url = this.extractOAuthUrl(state.captureBuffer);
|
|
299
|
+
if (!url) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
// URL found — stop capturing
|
|
303
|
+
state.captureMode = 'idle';
|
|
304
|
+
state.captureBuffer = '';
|
|
305
|
+
state.lastCapturedUrl = url;
|
|
306
|
+
if (state.captureTimeoutTimer) {
|
|
307
|
+
clearTimeout(state.captureTimeoutTimer);
|
|
308
|
+
state.captureTimeoutTimer = null;
|
|
309
|
+
}
|
|
310
|
+
this.logger.info('Captured OAuth URL from PTY output', {
|
|
311
|
+
sessionName: state.sessionName,
|
|
312
|
+
url,
|
|
313
|
+
});
|
|
314
|
+
// Emit event and invoke callback
|
|
315
|
+
this.emitOAuthUrlEvent(state.sessionName, url);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Extract an OAuth URL from terminal output.
|
|
319
|
+
*
|
|
320
|
+
* Looks for HTTPS URLs that appear to be OAuth authorization endpoints.
|
|
321
|
+
* Matches URLs containing common OAuth path segments: /oauth, /authorize,
|
|
322
|
+
* /login, /auth, /consent.
|
|
323
|
+
*
|
|
324
|
+
* @param buffer - Terminal output buffer
|
|
325
|
+
* @returns The OAuth URL or null if not found
|
|
326
|
+
*/
|
|
327
|
+
extractOAuthUrl(buffer) {
|
|
328
|
+
// Match https:// URLs — extract until whitespace or end of string.
|
|
329
|
+
// Using a simple, non-backtracking pattern to avoid ReDoS.
|
|
330
|
+
const urlStart = buffer.indexOf('https://');
|
|
331
|
+
if (urlStart === -1) {
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
// Extract URL: scan forward from https:// until whitespace or control char
|
|
335
|
+
let urlEnd = urlStart + 8; // past "https://"
|
|
336
|
+
while (urlEnd < buffer.length) {
|
|
337
|
+
const ch = buffer.charCodeAt(urlEnd);
|
|
338
|
+
// Stop at whitespace, control chars, or common terminal artifacts
|
|
339
|
+
if (ch <= 32 || ch === 62 /* > */ || ch === 60 /* < */) {
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
urlEnd++;
|
|
343
|
+
}
|
|
344
|
+
const url = buffer.slice(urlStart, urlEnd);
|
|
345
|
+
// Validate: must have a host and look like an OAuth URL
|
|
346
|
+
if (url.length < 20) {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
// Check for common OAuth path segments (case-insensitive)
|
|
350
|
+
const lowerUrl = url.toLowerCase();
|
|
351
|
+
const oauthIndicators = ['/oauth', '/authorize', '/login', '/auth', '/consent'];
|
|
352
|
+
const isOAuthUrl = oauthIndicators.some((indicator) => lowerUrl.includes(indicator));
|
|
353
|
+
if (!isOAuthUrl) {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
return url;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Emit an `agent:oauth_url` event via the EventBus and invoke the callback.
|
|
360
|
+
*
|
|
361
|
+
* @param sessionName - PTY session name
|
|
362
|
+
* @param url - OAuth URL captured from PTY output
|
|
363
|
+
*/
|
|
364
|
+
emitOAuthUrlEvent(sessionName, url) {
|
|
365
|
+
// Publish via EventBus (for subscription-based notification)
|
|
366
|
+
if (this.eventBusService) {
|
|
367
|
+
const event = {
|
|
368
|
+
id: uuidv4(),
|
|
369
|
+
type: 'agent:oauth_url',
|
|
370
|
+
timestamp: new Date().toISOString(),
|
|
371
|
+
teamId: '',
|
|
372
|
+
teamName: '',
|
|
373
|
+
memberId: '',
|
|
374
|
+
memberName: '',
|
|
375
|
+
sessionName,
|
|
376
|
+
previousValue: '',
|
|
377
|
+
newValue: url,
|
|
378
|
+
changedField: 'oauthUrl',
|
|
379
|
+
};
|
|
380
|
+
this.eventBusService.publish(event);
|
|
381
|
+
this.logger.info('Published agent:oauth_url event', {
|
|
382
|
+
sessionName,
|
|
383
|
+
url,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
// Invoke direct callback (for Slack/orchestrator integration)
|
|
387
|
+
if (this.onOAuthUrlCallback) {
|
|
388
|
+
try {
|
|
389
|
+
this.onOAuthUrlCallback(sessionName, url);
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
this.logger.warn('onOAuthUrl callback error', {
|
|
393
|
+
sessionName,
|
|
394
|
+
error: error instanceof Error ? error.message : String(error),
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Detect OAuth error patterns in the buffer using string matching.
|
|
401
|
+
*
|
|
402
|
+
* Uses plain string indexOf (case-insensitive via lowercasing) instead of
|
|
403
|
+
* regex to prevent ReDoS vulnerabilities. Each pattern set requires ALL
|
|
404
|
+
* strings in the set to be present (AND logic).
|
|
405
|
+
*
|
|
406
|
+
* @param buffer - Terminal output buffer to check
|
|
407
|
+
* @returns True if an OAuth error pattern is detected
|
|
408
|
+
*/
|
|
409
|
+
detectOAuthError(buffer) {
|
|
410
|
+
const lowerBuffer = buffer.toLowerCase();
|
|
411
|
+
const matchedSet = OAUTH_ERROR_PATTERN_SETS.find((patternSet) => patternSet.every((pattern) => lowerBuffer.includes(pattern.toLowerCase())));
|
|
412
|
+
if (matchedSet) {
|
|
413
|
+
this.logger.info('OAuth error pattern detected', {
|
|
414
|
+
matchedPatterns: matchedSet,
|
|
415
|
+
bufferTail: buffer.slice(-500),
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
return !!matchedSet;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Send the /login command to a PTY session to re-authenticate.
|
|
422
|
+
*
|
|
423
|
+
* After sending /login, enters URL capture mode to extract the OAuth URL
|
|
424
|
+
* from the subsequent PTY output.
|
|
425
|
+
*
|
|
426
|
+
* @param sessionName - PTY session name
|
|
427
|
+
*/
|
|
428
|
+
async triggerRelogin(sessionName) {
|
|
429
|
+
const state = this.sessions.get(sessionName);
|
|
430
|
+
if (!state || state.reloginInProgress) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
// Check cooldown
|
|
434
|
+
const now = Date.now();
|
|
435
|
+
if (now - state.lastReloginAt < OAUTH_RELOGIN_CONSTANTS.RELOGIN_COOLDOWN_MS) {
|
|
436
|
+
this.logger.debug('OAuth relogin skipped: cooldown active', {
|
|
437
|
+
sessionName,
|
|
438
|
+
cooldownRemainingMs: OAUTH_RELOGIN_CONSTANTS.RELOGIN_COOLDOWN_MS - (now - state.lastReloginAt),
|
|
439
|
+
});
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
// Clean up old attempt timestamps outside the window
|
|
443
|
+
state.attemptTimestamps = state.attemptTimestamps.filter((ts) => now - ts < OAUTH_RELOGIN_CONSTANTS.ATTEMPT_WINDOW_MS);
|
|
444
|
+
// Check attempt limit
|
|
445
|
+
if (state.attemptTimestamps.length >= OAUTH_RELOGIN_CONSTANTS.MAX_ATTEMPTS_PER_WINDOW) {
|
|
446
|
+
this.logger.warn('OAuth relogin skipped: max attempts reached in window', {
|
|
447
|
+
sessionName,
|
|
448
|
+
attempts: state.attemptTimestamps.length,
|
|
449
|
+
maxAttempts: OAUTH_RELOGIN_CONSTANTS.MAX_ATTEMPTS_PER_WINDOW,
|
|
450
|
+
});
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
// Get the session to write to
|
|
454
|
+
const backend = getSessionBackendSync();
|
|
455
|
+
if (!backend) {
|
|
456
|
+
this.logger.warn('Cannot send /login: session backend not available', { sessionName });
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
const session = backend.getSession(sessionName);
|
|
460
|
+
if (!session) {
|
|
461
|
+
this.logger.warn('Cannot send /login: session not found', { sessionName });
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
state.reloginInProgress = true;
|
|
465
|
+
try {
|
|
466
|
+
this.logger.info('Sending /login command for OAuth re-authentication', {
|
|
467
|
+
sessionName,
|
|
468
|
+
runtimeType: state.runtimeType,
|
|
469
|
+
attemptNumber: state.attemptTimestamps.length + 1,
|
|
470
|
+
});
|
|
471
|
+
// Send Escape to clear any in-progress input (skip for Gemini — Escape cancels request)
|
|
472
|
+
if (state.runtimeType !== RUNTIME_TYPES.GEMINI_CLI) {
|
|
473
|
+
session.write('\x1b');
|
|
474
|
+
await new Promise(resolve => setTimeout(resolve, OAUTH_RELOGIN_CONSTANTS.PRE_COMMAND_DELAY_MS));
|
|
475
|
+
}
|
|
476
|
+
// Write the /login command
|
|
477
|
+
session.write('/login\r');
|
|
478
|
+
// Update tracking
|
|
479
|
+
state.lastReloginAt = now;
|
|
480
|
+
state.attemptTimestamps.push(now);
|
|
481
|
+
// Clear error detection buffer
|
|
482
|
+
state.buffer = '';
|
|
483
|
+
// Enter URL capture mode to extract the OAuth URL from subsequent output
|
|
484
|
+
state.captureMode = 'capturing';
|
|
485
|
+
state.captureBuffer = '';
|
|
486
|
+
// Set a timeout for URL capture — give up after URL_CAPTURE_TIMEOUT_MS
|
|
487
|
+
if (state.captureTimeoutTimer) {
|
|
488
|
+
clearTimeout(state.captureTimeoutTimer);
|
|
489
|
+
}
|
|
490
|
+
state.captureTimeoutTimer = setTimeout(() => {
|
|
491
|
+
if (state.captureMode === 'capturing') {
|
|
492
|
+
this.logger.warn('OAuth URL capture timed out', { sessionName });
|
|
493
|
+
state.captureMode = 'idle';
|
|
494
|
+
state.captureBuffer = '';
|
|
495
|
+
state.captureTimeoutTimer = null;
|
|
496
|
+
}
|
|
497
|
+
}, OAUTH_RELOGIN_CONSTANTS.URL_CAPTURE_TIMEOUT_MS);
|
|
498
|
+
this.logger.info('OAuth /login command sent, entering URL capture mode', {
|
|
499
|
+
sessionName,
|
|
500
|
+
totalAttempts: state.attemptTimestamps.length,
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
finally {
|
|
504
|
+
state.reloginInProgress = false;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=oauth-relogin-monitor.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-relogin-monitor.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/oauth-relogin-monitor.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY Activity Tracker Service
|
|
3
|
+
*
|
|
4
|
+
* Lightweight singleton that tracks the last PTY output timestamp per session.
|
|
5
|
+
* Used by IdleDetectionService to determine when agents have been idle
|
|
6
|
+
* long enough to be suspended.
|
|
7
|
+
*
|
|
8
|
+
* @module pty-activity-tracker-service
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Tracks last PTY output timestamp per session for idle detection.
|
|
12
|
+
*
|
|
13
|
+
* This service is intentionally kept simple — it only records timestamps
|
|
14
|
+
* and answers idle-time queries. It does NOT subscribe to PTY events
|
|
15
|
+
* itself; the terminal gateway hooks into it via `recordActivity()`.
|
|
16
|
+
*/
|
|
17
|
+
export declare class PtyActivityTrackerService {
|
|
18
|
+
private static instance;
|
|
19
|
+
private logger;
|
|
20
|
+
/** Map of session name to last activity timestamp (epoch ms) — includes both PTY and API */
|
|
21
|
+
private lastActivityMap;
|
|
22
|
+
/** Map of session name to last API-only activity timestamp (epoch ms) */
|
|
23
|
+
private lastApiActivityMap;
|
|
24
|
+
private constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Get the singleton instance.
|
|
27
|
+
*
|
|
28
|
+
* @returns The PtyActivityTrackerService singleton
|
|
29
|
+
*/
|
|
30
|
+
static getInstance(): PtyActivityTrackerService;
|
|
31
|
+
/**
|
|
32
|
+
* Reset the singleton (for testing).
|
|
33
|
+
*/
|
|
34
|
+
static resetInstance(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Record PTY activity for a session.
|
|
37
|
+
* Called by the terminal gateway whenever PTY data is received.
|
|
38
|
+
*
|
|
39
|
+
* @param sessionName - The session that produced output
|
|
40
|
+
*/
|
|
41
|
+
recordActivity(sessionName: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Record API-specific activity for a session.
|
|
44
|
+
* Called by the agent heartbeat middleware when an actual API call is made.
|
|
45
|
+
* Also records general activity.
|
|
46
|
+
*
|
|
47
|
+
* @param sessionName - The session that made an API call
|
|
48
|
+
*/
|
|
49
|
+
recordApiActivity(sessionName: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the API-only idle time in milliseconds for a session.
|
|
52
|
+
* Unlike getIdleTimeMs(), this only considers API calls — not PTY output.
|
|
53
|
+
* Used by the heartbeat monitor to distinguish real orchestrator responses
|
|
54
|
+
* from PTY echo noise (e.g., heartbeat messages echoing back).
|
|
55
|
+
*
|
|
56
|
+
* @param sessionName - The session to check
|
|
57
|
+
* @returns Milliseconds since last API call, or 0 if never recorded
|
|
58
|
+
*/
|
|
59
|
+
getApiIdleTimeMs(sessionName: string): number;
|
|
60
|
+
/**
|
|
61
|
+
* Get the idle time in milliseconds for a session.
|
|
62
|
+
* Returns 0 if no activity has ever been recorded, treating unknown
|
|
63
|
+
* sessions as "just started" to prevent premature heartbeat/suspend
|
|
64
|
+
* actions against agents that haven't produced PTY output yet.
|
|
65
|
+
*
|
|
66
|
+
* @param sessionName - The session to check
|
|
67
|
+
* @returns Milliseconds since last PTY output, or 0 if never recorded
|
|
68
|
+
*/
|
|
69
|
+
getIdleTimeMs(sessionName: string): number;
|
|
70
|
+
/**
|
|
71
|
+
* Check whether a session has been idle for at least the given duration.
|
|
72
|
+
* Returns false if no activity has ever been recorded for the session,
|
|
73
|
+
* since "never seen" should not be treated as "idle" — this prevents
|
|
74
|
+
* newly started agents from being immediately suspended.
|
|
75
|
+
*
|
|
76
|
+
* @param sessionName - The session to check
|
|
77
|
+
* @param durationMs - Required idle duration in milliseconds
|
|
78
|
+
* @returns True if the session has been idle for at least durationMs
|
|
79
|
+
*/
|
|
80
|
+
isIdleFor(sessionName: string, durationMs: number): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if activity has ever been recorded for a session.
|
|
83
|
+
*
|
|
84
|
+
* @param sessionName - The session to check
|
|
85
|
+
* @returns True if activity has been recorded
|
|
86
|
+
*/
|
|
87
|
+
hasActivity(sessionName: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Record PTY activity only if the output contains meaningful content.
|
|
90
|
+
* Strips ANSI escape codes (cursor movements, color codes, spinner characters)
|
|
91
|
+
* and only records activity if the remaining text has sufficient non-whitespace
|
|
92
|
+
* characters. This prevents TUI noise (spinners, cursor repositioning) from
|
|
93
|
+
* resetting the idle timer.
|
|
94
|
+
*
|
|
95
|
+
* @param sessionName - The session that produced output
|
|
96
|
+
* @param rawData - Raw PTY output data to evaluate
|
|
97
|
+
*/
|
|
98
|
+
recordFilteredActivity(sessionName: string, rawData: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Remove tracking data for a session.
|
|
101
|
+
* Called when a session is terminated or suspended.
|
|
102
|
+
*
|
|
103
|
+
* @param sessionName - The session to clear
|
|
104
|
+
*/
|
|
105
|
+
clearSession(sessionName: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* Get the number of tracked sessions.
|
|
108
|
+
*
|
|
109
|
+
* @returns Number of sessions with recorded activity
|
|
110
|
+
*/
|
|
111
|
+
getTrackedSessionCount(): number;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=pty-activity-tracker.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty-activity-tracker.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/pty-activity-tracker.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IACjE,OAAO,CAAC,MAAM,CAAkB;IAEhC,4FAA4F;IAC5F,OAAO,CAAC,eAAe,CAAkC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO;IAIP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;OAMG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;OAQG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ7C;;;;;;;;OAQG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ1C;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIzC;;;;;;;;;OASG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlE;;;;;OAKG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMvC;;;;OAIG;IACH,sBAAsB,IAAI,MAAM;CAGhC"}
|