crewly 1.12.1 → 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/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +29 -7
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +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 +33 -1
- 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 +78 -2
- 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 +248 -44
- 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 +51 -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 +31 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +7 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.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/commitment-approval-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +26 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +19 -3
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.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/services/wiki/wiki-migrate.service.d.ts +3 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +21 -10
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.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/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +7 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- 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/cloud/cloud-client.service.d.ts +5 -0
- package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js +7 -0
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- 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/package.json +2 -2
- package/packages/crewly-agent/src/cli.ts +16 -6
- package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +311 -33
- package/packages/crewly-agent/src/runtime/agent-runner.service.ts +221 -12
- package/packages/crewly-agent/src/runtime/tool-registry.test.ts +19 -0
- package/packages/crewly-agent/src/runtime/tool-registry.ts +4 -1
- package/packages/crewly-agent/src/runtime/types.ts +65 -5
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime PID Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks the OS process ids of spawned agent-runtime PTY sessions so orphaned
|
|
5
|
+
* runtime processes can be reaped after a NON-graceful backend death (crash,
|
|
6
|
+
* OOM-kill, external `kill -9`, or the shutdown force-exit `SIGKILL`-self firing
|
|
7
|
+
* mid-cleanup). Normal teardown (`killSession`/`forceDestroyAll`) already reaps
|
|
8
|
+
* children; the gap this closes is the cross-restart one — a fresh backend has
|
|
9
|
+
* no record of the previous run's children, so they live on indefinitely
|
|
10
|
+
* (issue #715: ~7 stray `gemini --yolo` on Irissair since Feb).
|
|
11
|
+
*
|
|
12
|
+
* Safety is the whole point. The startup reaper:
|
|
13
|
+
* 1. only ever touches PIDs THIS backend recorded (never a broad `pkill`),
|
|
14
|
+
* 2. re-reads each live PID's command line and kills it ONLY if it still
|
|
15
|
+
* matches the recorded spawn signature — so a PID reused by an unrelated
|
|
16
|
+
* process after a crash is left untouched.
|
|
17
|
+
*
|
|
18
|
+
* @module services/session/runtime-pid-registry.service
|
|
19
|
+
*/
|
|
20
|
+
/** Registry file name under the Crewly home. */
|
|
21
|
+
export declare const RUNTIME_PID_FILE = "runtime-pids.json";
|
|
22
|
+
/**
|
|
23
|
+
* Read the live command line for a pid, cross-platform, or null if the process
|
|
24
|
+
* does not exist / is unreadable.
|
|
25
|
+
*
|
|
26
|
+
* - Linux: `/proc/<pid>/cmdline` (NUL-separated argv).
|
|
27
|
+
* - Other (macOS/BSD): `ps -o command= -p <pid>`.
|
|
28
|
+
*
|
|
29
|
+
* @param pid - Process id to inspect.
|
|
30
|
+
* @returns The normalised command line, or null.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readProcessCmdline(pid: number): string | null;
|
|
33
|
+
/** Whether a pid is currently alive (signal 0 probe). */
|
|
34
|
+
export declare function isPidAlive(pid: number): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Persistent, identity-verified registry of spawned runtime PIDs.
|
|
37
|
+
*
|
|
38
|
+
* Records are written on session spawn and removed on clean teardown; whatever
|
|
39
|
+
* remains at the next boot is a candidate orphan from a non-graceful death.
|
|
40
|
+
*/
|
|
41
|
+
export interface RuntimePidRegistryOptions {
|
|
42
|
+
/** Override the registry file location (tests). */
|
|
43
|
+
filePath?: string;
|
|
44
|
+
/** Override how a pid's live command line is read (tests). */
|
|
45
|
+
cmdlineReader?: (pid: number) => string | null;
|
|
46
|
+
}
|
|
47
|
+
export declare class RuntimePidRegistry {
|
|
48
|
+
private static instance;
|
|
49
|
+
private readonly filePath;
|
|
50
|
+
private readonly cmdlineReader;
|
|
51
|
+
private readonly logger;
|
|
52
|
+
private constructor();
|
|
53
|
+
static getInstance(): RuntimePidRegistry;
|
|
54
|
+
/** Reset for tests (optionally pointing at a temp file + stub cmdline reader). */
|
|
55
|
+
static resetForTesting(options?: RuntimePidRegistryOptions): RuntimePidRegistry;
|
|
56
|
+
private read;
|
|
57
|
+
private write;
|
|
58
|
+
/**
|
|
59
|
+
* Record a freshly spawned runtime process.
|
|
60
|
+
*
|
|
61
|
+
* @param pid - PTY child pid.
|
|
62
|
+
* @param sessionName - Owning session.
|
|
63
|
+
* @param command - Spawn executable.
|
|
64
|
+
* @param args - Spawn args.
|
|
65
|
+
*/
|
|
66
|
+
record(pid: number, sessionName: string, command: string, args?: string[]): void;
|
|
67
|
+
/**
|
|
68
|
+
* Drop the record for a session we have torn down ourselves (so it is not a
|
|
69
|
+
* reap candidate next boot).
|
|
70
|
+
*
|
|
71
|
+
* @param sessionName - Session whose record to remove.
|
|
72
|
+
*/
|
|
73
|
+
remove(sessionName: string): void;
|
|
74
|
+
/** Clear all records (graceful shutdown reaped everything itself). */
|
|
75
|
+
clear(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Reap orphaned runtime processes left by a previous, non-graceful backend
|
|
78
|
+
* exit. Call ONCE at boot, before sessions are restored. Kills a recorded pid
|
|
79
|
+
* only if it is still alive AND its live command line still matches the
|
|
80
|
+
* recorded signature (guards against PID reuse). Clears the registry after.
|
|
81
|
+
*
|
|
82
|
+
* @returns The number of orphan processes reaped.
|
|
83
|
+
*/
|
|
84
|
+
reapOrphans(): number;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=runtime-pid-registry.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pid-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/runtime-pid-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAoBH,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAOpD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyB7D;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAMP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,kFAAkF;IAClF,MAAM,CAAC,eAAe,CAAC,OAAO,GAAE,yBAA8B,GAAG,kBAAkB;IAKnF,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,KAAK;IAWb;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI;IAQpF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMjC,sEAAsE;IACtE,KAAK,IAAI,IAAI;IAIb;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAgDtB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime PID Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks the OS process ids of spawned agent-runtime PTY sessions so orphaned
|
|
5
|
+
* runtime processes can be reaped after a NON-graceful backend death (crash,
|
|
6
|
+
* OOM-kill, external `kill -9`, or the shutdown force-exit `SIGKILL`-self firing
|
|
7
|
+
* mid-cleanup). Normal teardown (`killSession`/`forceDestroyAll`) already reaps
|
|
8
|
+
* children; the gap this closes is the cross-restart one — a fresh backend has
|
|
9
|
+
* no record of the previous run's children, so they live on indefinitely
|
|
10
|
+
* (issue #715: ~7 stray `gemini --yolo` on Irissair since Feb).
|
|
11
|
+
*
|
|
12
|
+
* Safety is the whole point. The startup reaper:
|
|
13
|
+
* 1. only ever touches PIDs THIS backend recorded (never a broad `pkill`),
|
|
14
|
+
* 2. re-reads each live PID's command line and kills it ONLY if it still
|
|
15
|
+
* matches the recorded spawn signature — so a PID reused by an unrelated
|
|
16
|
+
* process after a crash is left untouched.
|
|
17
|
+
*
|
|
18
|
+
* @module services/session/runtime-pid-registry.service
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
21
|
+
import { execFileSync } from 'child_process';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
24
|
+
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
25
|
+
/** Registry file name under the Crewly home. */
|
|
26
|
+
export const RUNTIME_PID_FILE = 'runtime-pids.json';
|
|
27
|
+
/** Collapse whitespace + trim so signatures compare stably across `/proc` and `ps`. */
|
|
28
|
+
function normalizeCmdline(s) {
|
|
29
|
+
return s.replace(/\s+/g, ' ').trim();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read the live command line for a pid, cross-platform, or null if the process
|
|
33
|
+
* does not exist / is unreadable.
|
|
34
|
+
*
|
|
35
|
+
* - Linux: `/proc/<pid>/cmdline` (NUL-separated argv).
|
|
36
|
+
* - Other (macOS/BSD): `ps -o command= -p <pid>`.
|
|
37
|
+
*
|
|
38
|
+
* @param pid - Process id to inspect.
|
|
39
|
+
* @returns The normalised command line, or null.
|
|
40
|
+
*/
|
|
41
|
+
export function readProcessCmdline(pid) {
|
|
42
|
+
// Linux fast path — read argv directly from /proc.
|
|
43
|
+
const procPath = `/proc/${pid}/cmdline`;
|
|
44
|
+
if (existsSync(procPath)) {
|
|
45
|
+
try {
|
|
46
|
+
const raw = readFileSync(procPath);
|
|
47
|
+
// argv is NUL-separated, trailing NUL.
|
|
48
|
+
const cmd = raw.toString('utf8').replace(/\0/g, ' ');
|
|
49
|
+
return normalizeCmdline(cmd) || null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Portable fallback (macOS): ask `ps`.
|
|
56
|
+
try {
|
|
57
|
+
const out = execFileSync('ps', ['-o', 'command=', '-p', String(pid)], {
|
|
58
|
+
encoding: 'utf8',
|
|
59
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
60
|
+
});
|
|
61
|
+
const cmd = normalizeCmdline(out);
|
|
62
|
+
return cmd || null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Non-zero exit = no such process.
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Whether a pid is currently alive (signal 0 probe). */
|
|
70
|
+
export function isPidAlive(pid) {
|
|
71
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
72
|
+
return false; // never touch pid 0/1
|
|
73
|
+
try {
|
|
74
|
+
process.kill(pid, 0);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// EPERM = exists but not ours to signal → treat as alive (don't reap).
|
|
79
|
+
return err.code === 'EPERM';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export class RuntimePidRegistry {
|
|
83
|
+
static instance = null;
|
|
84
|
+
filePath;
|
|
85
|
+
cmdlineReader;
|
|
86
|
+
logger;
|
|
87
|
+
constructor(options = {}) {
|
|
88
|
+
this.filePath = options.filePath ?? path.join(getCrewlyHomePath(), RUNTIME_PID_FILE);
|
|
89
|
+
this.cmdlineReader = options.cmdlineReader ?? readProcessCmdline;
|
|
90
|
+
this.logger = LoggerService.getInstance().createComponentLogger('RuntimePidRegistry');
|
|
91
|
+
}
|
|
92
|
+
static getInstance() {
|
|
93
|
+
if (!this.instance)
|
|
94
|
+
this.instance = new RuntimePidRegistry();
|
|
95
|
+
return this.instance;
|
|
96
|
+
}
|
|
97
|
+
/** Reset for tests (optionally pointing at a temp file + stub cmdline reader). */
|
|
98
|
+
static resetForTesting(options = {}) {
|
|
99
|
+
this.instance = new RuntimePidRegistry(options);
|
|
100
|
+
return this.instance;
|
|
101
|
+
}
|
|
102
|
+
read() {
|
|
103
|
+
if (!existsSync(this.filePath))
|
|
104
|
+
return [];
|
|
105
|
+
try {
|
|
106
|
+
const parsed = JSON.parse(readFileSync(this.filePath, 'utf8'));
|
|
107
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Corrupt file — treat as empty (and it gets rewritten on next mutation).
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
write(records) {
|
|
115
|
+
try {
|
|
116
|
+
mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
117
|
+
writeFileSync(this.filePath, JSON.stringify(records, null, 2), 'utf8');
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
this.logger.warn('Failed to persist runtime PID registry (non-fatal)', {
|
|
121
|
+
error: err instanceof Error ? err.message : String(err),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Record a freshly spawned runtime process.
|
|
127
|
+
*
|
|
128
|
+
* @param pid - PTY child pid.
|
|
129
|
+
* @param sessionName - Owning session.
|
|
130
|
+
* @param command - Spawn executable.
|
|
131
|
+
* @param args - Spawn args.
|
|
132
|
+
*/
|
|
133
|
+
record(pid, sessionName, command, args = []) {
|
|
134
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
135
|
+
return;
|
|
136
|
+
const signature = normalizeCmdline([command, ...args].join(' '));
|
|
137
|
+
const records = this.read().filter((r) => r.sessionName !== sessionName && r.pid !== pid);
|
|
138
|
+
records.push({ pid, sessionName, signature, spawnedAt: new Date().toISOString() });
|
|
139
|
+
this.write(records);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Drop the record for a session we have torn down ourselves (so it is not a
|
|
143
|
+
* reap candidate next boot).
|
|
144
|
+
*
|
|
145
|
+
* @param sessionName - Session whose record to remove.
|
|
146
|
+
*/
|
|
147
|
+
remove(sessionName) {
|
|
148
|
+
const records = this.read();
|
|
149
|
+
const next = records.filter((r) => r.sessionName !== sessionName);
|
|
150
|
+
if (next.length !== records.length)
|
|
151
|
+
this.write(next);
|
|
152
|
+
}
|
|
153
|
+
/** Clear all records (graceful shutdown reaped everything itself). */
|
|
154
|
+
clear() {
|
|
155
|
+
this.write([]);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Reap orphaned runtime processes left by a previous, non-graceful backend
|
|
159
|
+
* exit. Call ONCE at boot, before sessions are restored. Kills a recorded pid
|
|
160
|
+
* only if it is still alive AND its live command line still matches the
|
|
161
|
+
* recorded signature (guards against PID reuse). Clears the registry after.
|
|
162
|
+
*
|
|
163
|
+
* @returns The number of orphan processes reaped.
|
|
164
|
+
*/
|
|
165
|
+
reapOrphans() {
|
|
166
|
+
const records = this.read();
|
|
167
|
+
if (records.length === 0)
|
|
168
|
+
return 0;
|
|
169
|
+
let reaped = 0;
|
|
170
|
+
for (const rec of records) {
|
|
171
|
+
if (!isPidAlive(rec.pid))
|
|
172
|
+
continue;
|
|
173
|
+
const liveCmdline = this.cmdlineReader(rec.pid);
|
|
174
|
+
if (!liveCmdline || !liveCmdline.includes(rec.signature)) {
|
|
175
|
+
// Either unreadable, or the PID was reused by an unrelated process —
|
|
176
|
+
// do NOT kill. Log so a surprising mismatch is observable.
|
|
177
|
+
this.logger.warn('Skipping recorded PID — not a matching runtime (reused or changed)', {
|
|
178
|
+
pid: rec.pid,
|
|
179
|
+
sessionName: rec.sessionName,
|
|
180
|
+
expected: rec.signature,
|
|
181
|
+
live: liveCmdline ?? '(gone)',
|
|
182
|
+
});
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
// Verified orphan — SIGKILL the process and its group.
|
|
186
|
+
this.logger.error('Reaping orphaned runtime process from a previous backend run', {
|
|
187
|
+
pid: rec.pid,
|
|
188
|
+
sessionName: rec.sessionName,
|
|
189
|
+
signature: rec.signature,
|
|
190
|
+
spawnedAt: rec.spawnedAt,
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
process.kill(rec.pid, 'SIGKILL');
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
/* already gone between the probe and now */
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
process.kill(-rec.pid, 'SIGKILL'); // process group
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* no group / already gone */
|
|
203
|
+
}
|
|
204
|
+
reaped++;
|
|
205
|
+
}
|
|
206
|
+
// Whatever was recorded belongs to a prior run — this run records fresh.
|
|
207
|
+
this.clear();
|
|
208
|
+
if (reaped > 0) {
|
|
209
|
+
this.logger.warn('Orphan runtime reaper finished', { reaped, scanned: records.length });
|
|
210
|
+
}
|
|
211
|
+
return reaped;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=runtime-pid-registry.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pid-registry.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/runtime-pid-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Backend Factory Module
|
|
3
|
+
*
|
|
4
|
+
* Provides factory functions for creating and accessing session backend instances.
|
|
5
|
+
* Uses a singleton pattern to ensure only one backend instance is active at a time.
|
|
6
|
+
*
|
|
7
|
+
* @module session-backend.factory
|
|
8
|
+
*/
|
|
9
|
+
import { ISessionBackend, SessionBackendType } from './session-backend.interface.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a new session backend instance.
|
|
12
|
+
*
|
|
13
|
+
* This function creates a new backend instance based on the specified type.
|
|
14
|
+
* If a backend already exists and is of a different type, the existing
|
|
15
|
+
* backend will be destroyed before creating the new one.
|
|
16
|
+
*
|
|
17
|
+
* @param type - Type of backend to create. Defaults to 'pty'.
|
|
18
|
+
* @returns The created session backend instance
|
|
19
|
+
* @throws Error if the backend type is not supported or creation fails
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // Create a PTY backend (default)
|
|
24
|
+
* const backend = await createSessionBackend();
|
|
25
|
+
*
|
|
26
|
+
* // Create a specific backend type
|
|
27
|
+
* const ptyBackend = await createSessionBackend('pty');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function createSessionBackend(type?: SessionBackendType): Promise<ISessionBackend>;
|
|
31
|
+
/**
|
|
32
|
+
* Get the singleton session backend instance.
|
|
33
|
+
*
|
|
34
|
+
* Returns the currently active session backend instance, or creates a new
|
|
35
|
+
* PTY backend if none exists.
|
|
36
|
+
*
|
|
37
|
+
* @returns The session backend instance
|
|
38
|
+
* @throws Error if no backend exists and creation fails
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const backend = await getSessionBackend();
|
|
43
|
+
* const session = await backend.createSession('my-session', options);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSessionBackend(): Promise<ISessionBackend>;
|
|
47
|
+
/**
|
|
48
|
+
* Get the singleton session backend instance synchronously.
|
|
49
|
+
*
|
|
50
|
+
* Returns the currently active session backend instance, or null if none exists.
|
|
51
|
+
* This is useful for checking if a backend has been initialized without
|
|
52
|
+
* triggering creation.
|
|
53
|
+
*
|
|
54
|
+
* @returns The session backend instance if it exists, null otherwise
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const backend = getSessionBackendSync();
|
|
59
|
+
* if (backend) {
|
|
60
|
+
* console.log('Backend is initialized');
|
|
61
|
+
* } else {
|
|
62
|
+
* console.log('No backend initialized yet');
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function getSessionBackendSync(): ISessionBackend | null;
|
|
67
|
+
/**
|
|
68
|
+
* Get the type of the currently active backend.
|
|
69
|
+
*
|
|
70
|
+
* @returns The backend type if one is active, null otherwise
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const type = getSessionBackendType();
|
|
75
|
+
* console.log('Current backend type:', type ?? 'none');
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function getSessionBackendType(): SessionBackendType | null;
|
|
79
|
+
/**
|
|
80
|
+
* Destroy the current session backend and release resources.
|
|
81
|
+
*
|
|
82
|
+
* This function destroys the singleton backend instance, killing all
|
|
83
|
+
* active sessions and releasing any held resources.
|
|
84
|
+
*
|
|
85
|
+
* @returns Promise that resolves when destruction is complete
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* await destroySessionBackend();
|
|
90
|
+
* console.log('Backend destroyed');
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function destroySessionBackend(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Check if a session backend is currently initialized.
|
|
96
|
+
*
|
|
97
|
+
* @returns true if a backend exists, false otherwise
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* if (isSessionBackendInitialized()) {
|
|
102
|
+
* console.log('Backend is ready');
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function isSessionBackendInitialized(): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Reset the factory state (for testing purposes).
|
|
109
|
+
*
|
|
110
|
+
* This function resets the internal factory state without destroying
|
|
111
|
+
* the backend. Use with caution - this is primarily for testing.
|
|
112
|
+
*
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
115
|
+
export declare function resetSessionBackendFactory(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Set the session backend instance (for testing purposes).
|
|
118
|
+
*
|
|
119
|
+
* This function allows injecting a mock backend for testing.
|
|
120
|
+
* Use with caution - this is primarily for testing.
|
|
121
|
+
*
|
|
122
|
+
* @param backend - The backend instance to set
|
|
123
|
+
* @param type - The type of the backend
|
|
124
|
+
* @internal
|
|
125
|
+
*/
|
|
126
|
+
export declare function setSessionBackendForTesting(backend: ISessionBackend | null, type: SessionBackendType | null): void;
|
|
127
|
+
//# sourceMappingURL=session-backend.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-backend.factory.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-backend.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,MAAM,gCAAgC,CAAC;AA2BxC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,oBAAoB,CACzC,IAAI,GAAE,kBAA0B,GAC9B,OAAO,CAAC,eAAe,CAAC,CAwD1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC,CAKlE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,IAAI,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAY3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAIjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,eAAe,GAAG,IAAI,EAC/B,IAAI,EAAE,kBAAkB,GAAG,IAAI,GAC7B,IAAI,CAGN"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Backend Factory Module
|
|
3
|
+
*
|
|
4
|
+
* Provides factory functions for creating and accessing session backend instances.
|
|
5
|
+
* Uses a singleton pattern to ensure only one backend instance is active at a time.
|
|
6
|
+
*
|
|
7
|
+
* @module session-backend.factory
|
|
8
|
+
*/
|
|
9
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
10
|
+
import { PtySessionBackend } from './pty/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Singleton instance of the session backend
|
|
13
|
+
*/
|
|
14
|
+
let sessionBackendInstance = null;
|
|
15
|
+
/**
|
|
16
|
+
* Type of the currently active backend
|
|
17
|
+
*/
|
|
18
|
+
let currentBackendType = null;
|
|
19
|
+
/**
|
|
20
|
+
* Promise-based mutex to prevent race conditions during async initialization.
|
|
21
|
+
* If a creation is in progress, subsequent calls wait for it to complete.
|
|
22
|
+
*/
|
|
23
|
+
let creationPromise = null;
|
|
24
|
+
/**
|
|
25
|
+
* Logger for factory operations
|
|
26
|
+
*/
|
|
27
|
+
const getLogger = () => {
|
|
28
|
+
return LoggerService.getInstance().createComponentLogger('SessionBackendFactory');
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create a new session backend instance.
|
|
32
|
+
*
|
|
33
|
+
* This function creates a new backend instance based on the specified type.
|
|
34
|
+
* If a backend already exists and is of a different type, the existing
|
|
35
|
+
* backend will be destroyed before creating the new one.
|
|
36
|
+
*
|
|
37
|
+
* @param type - Type of backend to create. Defaults to 'pty'.
|
|
38
|
+
* @returns The created session backend instance
|
|
39
|
+
* @throws Error if the backend type is not supported or creation fails
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // Create a PTY backend (default)
|
|
44
|
+
* const backend = await createSessionBackend();
|
|
45
|
+
*
|
|
46
|
+
* // Create a specific backend type
|
|
47
|
+
* const ptyBackend = await createSessionBackend('pty');
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export async function createSessionBackend(type = 'pty') {
|
|
51
|
+
const logger = getLogger();
|
|
52
|
+
// Return existing instance if it matches the requested type
|
|
53
|
+
if (sessionBackendInstance && currentBackendType === type) {
|
|
54
|
+
logger.debug('Returning existing session backend instance', { type });
|
|
55
|
+
return sessionBackendInstance;
|
|
56
|
+
}
|
|
57
|
+
// If a creation is already in progress, wait for it
|
|
58
|
+
if (creationPromise) {
|
|
59
|
+
logger.debug('Waiting for in-progress backend creation', { type });
|
|
60
|
+
return creationPromise;
|
|
61
|
+
}
|
|
62
|
+
// Create the backend with mutex protection
|
|
63
|
+
creationPromise = (async () => {
|
|
64
|
+
try {
|
|
65
|
+
// Double-check after acquiring the "lock"
|
|
66
|
+
if (sessionBackendInstance && currentBackendType === type) {
|
|
67
|
+
return sessionBackendInstance;
|
|
68
|
+
}
|
|
69
|
+
// If we have an existing instance of a different type, destroy it first
|
|
70
|
+
if (sessionBackendInstance && currentBackendType !== type) {
|
|
71
|
+
logger.info('Destroying existing backend to switch types', {
|
|
72
|
+
oldType: currentBackendType,
|
|
73
|
+
newType: type,
|
|
74
|
+
});
|
|
75
|
+
await sessionBackendInstance.destroy();
|
|
76
|
+
sessionBackendInstance = null;
|
|
77
|
+
currentBackendType = null;
|
|
78
|
+
}
|
|
79
|
+
logger.info('Creating new session backend', { type });
|
|
80
|
+
switch (type) {
|
|
81
|
+
case 'pty': {
|
|
82
|
+
sessionBackendInstance = new PtySessionBackend();
|
|
83
|
+
currentBackendType = 'pty';
|
|
84
|
+
logger.info('PTY session backend created');
|
|
85
|
+
return sessionBackendInstance;
|
|
86
|
+
}
|
|
87
|
+
default: {
|
|
88
|
+
const exhaustiveCheck = type;
|
|
89
|
+
throw new Error(`Unsupported session backend type: ${exhaustiveCheck}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
// Clear the promise after completion (success or failure)
|
|
95
|
+
creationPromise = null;
|
|
96
|
+
}
|
|
97
|
+
})();
|
|
98
|
+
return creationPromise;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the singleton session backend instance.
|
|
102
|
+
*
|
|
103
|
+
* Returns the currently active session backend instance, or creates a new
|
|
104
|
+
* PTY backend if none exists.
|
|
105
|
+
*
|
|
106
|
+
* @returns The session backend instance
|
|
107
|
+
* @throws Error if no backend exists and creation fails
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const backend = await getSessionBackend();
|
|
112
|
+
* const session = await backend.createSession('my-session', options);
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export async function getSessionBackend() {
|
|
116
|
+
if (!sessionBackendInstance) {
|
|
117
|
+
return await createSessionBackend('pty');
|
|
118
|
+
}
|
|
119
|
+
return sessionBackendInstance;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the singleton session backend instance synchronously.
|
|
123
|
+
*
|
|
124
|
+
* Returns the currently active session backend instance, or null if none exists.
|
|
125
|
+
* This is useful for checking if a backend has been initialized without
|
|
126
|
+
* triggering creation.
|
|
127
|
+
*
|
|
128
|
+
* @returns The session backend instance if it exists, null otherwise
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* const backend = getSessionBackendSync();
|
|
133
|
+
* if (backend) {
|
|
134
|
+
* console.log('Backend is initialized');
|
|
135
|
+
* } else {
|
|
136
|
+
* console.log('No backend initialized yet');
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export function getSessionBackendSync() {
|
|
141
|
+
return sessionBackendInstance;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get the type of the currently active backend.
|
|
145
|
+
*
|
|
146
|
+
* @returns The backend type if one is active, null otherwise
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const type = getSessionBackendType();
|
|
151
|
+
* console.log('Current backend type:', type ?? 'none');
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export function getSessionBackendType() {
|
|
155
|
+
return currentBackendType;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Destroy the current session backend and release resources.
|
|
159
|
+
*
|
|
160
|
+
* This function destroys the singleton backend instance, killing all
|
|
161
|
+
* active sessions and releasing any held resources.
|
|
162
|
+
*
|
|
163
|
+
* @returns Promise that resolves when destruction is complete
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* await destroySessionBackend();
|
|
168
|
+
* console.log('Backend destroyed');
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export async function destroySessionBackend() {
|
|
172
|
+
const logger = getLogger();
|
|
173
|
+
if (sessionBackendInstance) {
|
|
174
|
+
logger.info('Destroying session backend', { type: currentBackendType });
|
|
175
|
+
await sessionBackendInstance.destroy();
|
|
176
|
+
sessionBackendInstance = null;
|
|
177
|
+
currentBackendType = null;
|
|
178
|
+
logger.info('Session backend destroyed');
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
logger.debug('No session backend to destroy');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check if a session backend is currently initialized.
|
|
186
|
+
*
|
|
187
|
+
* @returns true if a backend exists, false otherwise
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* if (isSessionBackendInitialized()) {
|
|
192
|
+
* console.log('Backend is ready');
|
|
193
|
+
* }
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
export function isSessionBackendInitialized() {
|
|
197
|
+
return sessionBackendInstance !== null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Reset the factory state (for testing purposes).
|
|
201
|
+
*
|
|
202
|
+
* This function resets the internal factory state without destroying
|
|
203
|
+
* the backend. Use with caution - this is primarily for testing.
|
|
204
|
+
*
|
|
205
|
+
* @internal
|
|
206
|
+
*/
|
|
207
|
+
export function resetSessionBackendFactory() {
|
|
208
|
+
sessionBackendInstance = null;
|
|
209
|
+
currentBackendType = null;
|
|
210
|
+
creationPromise = null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set the session backend instance (for testing purposes).
|
|
214
|
+
*
|
|
215
|
+
* This function allows injecting a mock backend for testing.
|
|
216
|
+
* Use with caution - this is primarily for testing.
|
|
217
|
+
*
|
|
218
|
+
* @param backend - The backend instance to set
|
|
219
|
+
* @param type - The type of the backend
|
|
220
|
+
* @internal
|
|
221
|
+
*/
|
|
222
|
+
export function setSessionBackendForTesting(backend, type) {
|
|
223
|
+
sessionBackendInstance = backend;
|
|
224
|
+
currentBackendType = type;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=session-backend.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-backend.factory.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-backend.factory.ts"],"names":[],"mappings":"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"}
|