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,728 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role Management Service
|
|
3
|
+
*
|
|
4
|
+
* Handles CRUD operations for AI agent roles, loading from configuration
|
|
5
|
+
* directories, and managing role-to-skill assignments.
|
|
6
|
+
*
|
|
7
|
+
* @module services/settings/role.service
|
|
8
|
+
*/
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { randomUUID } from 'crypto';
|
|
12
|
+
import { roleToSummary, validateCreateRoleInput, validateUpdateRoleInput, matchesRoleFilter, roleToStorageFormat, storageFormatToRole, } from '../../types/role.types.js';
|
|
13
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Custom Error Classes
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Error thrown when a role is not found
|
|
19
|
+
*/
|
|
20
|
+
export class RoleNotFoundError extends Error {
|
|
21
|
+
constructor(id) {
|
|
22
|
+
super(`Role not found: ${id}`);
|
|
23
|
+
this.name = 'RoleNotFoundError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Error thrown when role validation fails
|
|
28
|
+
*/
|
|
29
|
+
export class RoleValidationError extends Error {
|
|
30
|
+
errors;
|
|
31
|
+
constructor(errors) {
|
|
32
|
+
super(`Role validation failed: ${errors.join(', ')}`);
|
|
33
|
+
this.name = 'RoleValidationError';
|
|
34
|
+
this.errors = errors;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Error thrown when attempting to modify a built-in role
|
|
39
|
+
*/
|
|
40
|
+
export class BuiltinRoleModificationError extends Error {
|
|
41
|
+
constructor(action) {
|
|
42
|
+
super(`Cannot ${action} a built-in role`);
|
|
43
|
+
this.name = 'BuiltinRoleModificationError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Error thrown when a role with the same name already exists
|
|
48
|
+
*/
|
|
49
|
+
export class DuplicateRoleNameError extends Error {
|
|
50
|
+
constructor(name) {
|
|
51
|
+
super(`A role with name "${name}" already exists`);
|
|
52
|
+
this.name = 'DuplicateRoleNameError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// RoleService Class
|
|
57
|
+
// ============================================================================
|
|
58
|
+
/**
|
|
59
|
+
* Service for managing AI agent roles
|
|
60
|
+
*
|
|
61
|
+
* Handles:
|
|
62
|
+
* - Loading built-in roles from config/roles/
|
|
63
|
+
* - Managing user-created roles in ~/.crewly/roles/
|
|
64
|
+
* - CRUD operations for roles
|
|
65
|
+
* - Role-to-skill assignment management
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const service = getRoleService();
|
|
70
|
+
* await service.initialize();
|
|
71
|
+
*
|
|
72
|
+
* // List all roles
|
|
73
|
+
* const roles = await service.listRoles();
|
|
74
|
+
*
|
|
75
|
+
* // Create a new role
|
|
76
|
+
* const newRole = await service.createRole({
|
|
77
|
+
* name: 'my-role',
|
|
78
|
+
* displayName: 'My Role',
|
|
79
|
+
* description: 'A custom role',
|
|
80
|
+
* category: 'development',
|
|
81
|
+
* systemPromptContent: 'You are a helpful assistant.',
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export class RoleService {
|
|
86
|
+
builtinRolesDir;
|
|
87
|
+
userRolesDir;
|
|
88
|
+
rolesCache = new Map();
|
|
89
|
+
promptCache = new Map();
|
|
90
|
+
initialized = false;
|
|
91
|
+
logger = LoggerService.getInstance().createComponentLogger('RoleService');
|
|
92
|
+
/**
|
|
93
|
+
* Create a new RoleService instance
|
|
94
|
+
*
|
|
95
|
+
* @param options - Configuration options
|
|
96
|
+
* @param options.builtinRolesDir - Directory for built-in roles
|
|
97
|
+
* @param options.userRolesDir - Directory for user-created roles
|
|
98
|
+
*/
|
|
99
|
+
constructor(options) {
|
|
100
|
+
this.builtinRolesDir = options?.builtinRolesDir ??
|
|
101
|
+
path.join(process.cwd(), 'config', 'roles');
|
|
102
|
+
this.userRolesDir = options?.userRolesDir ??
|
|
103
|
+
path.join(process.env.HOME || '~', '.crewly', 'roles');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Initialize the service by loading all roles
|
|
107
|
+
* Must be called before using other methods
|
|
108
|
+
*/
|
|
109
|
+
async initialize() {
|
|
110
|
+
if (this.initialized) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.rolesCache.clear();
|
|
114
|
+
this.promptCache.clear();
|
|
115
|
+
// Load built-in roles
|
|
116
|
+
const builtinRoles = await this.loadBuiltinRoles();
|
|
117
|
+
for (const role of builtinRoles) {
|
|
118
|
+
this.rolesCache.set(role.id, role);
|
|
119
|
+
}
|
|
120
|
+
// Load user roles
|
|
121
|
+
const userRoles = await this.loadUserRoles();
|
|
122
|
+
for (const role of userRoles) {
|
|
123
|
+
this.rolesCache.set(role.id, role);
|
|
124
|
+
}
|
|
125
|
+
this.initialized = true;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get all roles, optionally filtered
|
|
129
|
+
*
|
|
130
|
+
* @param filter - Optional filter criteria
|
|
131
|
+
* @param includeHidden - Whether to include hidden roles (default: false for UI)
|
|
132
|
+
* @returns Array of role summaries
|
|
133
|
+
*/
|
|
134
|
+
async listRoles(filter, includeHidden = false) {
|
|
135
|
+
await this.ensureInitialized();
|
|
136
|
+
let roles = Array.from(this.rolesCache.values());
|
|
137
|
+
// Filter out hidden roles unless explicitly requested
|
|
138
|
+
if (!includeHidden) {
|
|
139
|
+
roles = roles.filter(role => !role.isHidden);
|
|
140
|
+
}
|
|
141
|
+
const filteredRoles = filter
|
|
142
|
+
? roles.filter(role => matchesRoleFilter(role, filter))
|
|
143
|
+
: roles;
|
|
144
|
+
return filteredRoles.map(roleToSummary);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a role by ID with full prompt content
|
|
148
|
+
*
|
|
149
|
+
* @param id - The role ID
|
|
150
|
+
* @returns The role with prompt content, or null if not found
|
|
151
|
+
*/
|
|
152
|
+
async getRole(id) {
|
|
153
|
+
await this.ensureInitialized();
|
|
154
|
+
const role = this.rolesCache.get(id);
|
|
155
|
+
if (!role) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const promptContent = await this.loadPromptContent(role.systemPromptFile, role.isBuiltin, role.name);
|
|
159
|
+
return {
|
|
160
|
+
...role,
|
|
161
|
+
systemPromptContent: promptContent,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get a role by name (includes hidden roles)
|
|
166
|
+
*
|
|
167
|
+
* @param name - The role name
|
|
168
|
+
* @returns The role with prompt content, or null if not found
|
|
169
|
+
*/
|
|
170
|
+
async getRoleByName(name) {
|
|
171
|
+
await this.ensureInitialized();
|
|
172
|
+
const role = Array.from(this.rolesCache.values()).find(r => r.name === name);
|
|
173
|
+
if (!role) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
return this.getRole(role.id);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get the prompt file path for a role
|
|
180
|
+
* Used by PromptBuilderService and AgentRegistrationService
|
|
181
|
+
*
|
|
182
|
+
* @param roleName - The role name (e.g., 'orchestrator', 'tpm', 'developer')
|
|
183
|
+
* @returns The full path to the prompt file, or null if role not found
|
|
184
|
+
*/
|
|
185
|
+
async getPromptFilePath(roleName) {
|
|
186
|
+
await this.ensureInitialized();
|
|
187
|
+
const role = Array.from(this.rolesCache.values()).find(r => r.name === roleName);
|
|
188
|
+
if (!role) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
// Built-in roles use subdirectory structure: config/roles/{role}/prompt.md
|
|
192
|
+
// User roles use flat structure: ~/.crewly/roles/{promptFile}
|
|
193
|
+
if (role.isBuiltin) {
|
|
194
|
+
return path.join(this.builtinRolesDir, role.name, role.systemPromptFile);
|
|
195
|
+
}
|
|
196
|
+
return path.join(this.userRolesDir, role.systemPromptFile);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get the built-in roles directory path
|
|
200
|
+
*
|
|
201
|
+
* @returns The path to built-in roles directory
|
|
202
|
+
*/
|
|
203
|
+
getBuiltinRolesDir() {
|
|
204
|
+
return this.builtinRolesDir;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create a new user-defined role
|
|
208
|
+
*
|
|
209
|
+
* @param input - The role creation input
|
|
210
|
+
* @returns The created role
|
|
211
|
+
* @throws {RoleValidationError} If input validation fails
|
|
212
|
+
* @throws {DuplicateRoleNameError} If a role with the same name exists
|
|
213
|
+
*/
|
|
214
|
+
async createRole(input) {
|
|
215
|
+
await this.ensureInitialized();
|
|
216
|
+
// Validate input
|
|
217
|
+
const errors = validateCreateRoleInput(input);
|
|
218
|
+
if (errors.length > 0) {
|
|
219
|
+
throw new RoleValidationError(errors);
|
|
220
|
+
}
|
|
221
|
+
// Check for duplicate name
|
|
222
|
+
const existingRole = await this.getRoleByName(input.name);
|
|
223
|
+
if (existingRole) {
|
|
224
|
+
throw new DuplicateRoleNameError(input.name);
|
|
225
|
+
}
|
|
226
|
+
// Ensure user roles directory exists
|
|
227
|
+
await this.ensureUserRolesDir();
|
|
228
|
+
// Generate ID and create role
|
|
229
|
+
const id = this.generateRoleId(input.name);
|
|
230
|
+
const now = new Date().toISOString();
|
|
231
|
+
const promptFileName = `${input.name}-prompt.md`;
|
|
232
|
+
const role = {
|
|
233
|
+
id,
|
|
234
|
+
name: input.name,
|
|
235
|
+
displayName: input.displayName,
|
|
236
|
+
description: input.description,
|
|
237
|
+
category: input.category,
|
|
238
|
+
systemPromptFile: promptFileName,
|
|
239
|
+
assignedSkills: input.assignedSkills ?? [],
|
|
240
|
+
isDefault: input.isDefault ?? false,
|
|
241
|
+
isHidden: false,
|
|
242
|
+
isBuiltin: false,
|
|
243
|
+
createdAt: now,
|
|
244
|
+
updatedAt: now,
|
|
245
|
+
};
|
|
246
|
+
// If this role is set as default, unset other defaults
|
|
247
|
+
if (role.isDefault) {
|
|
248
|
+
await this.unsetAllDefaults();
|
|
249
|
+
}
|
|
250
|
+
// Save role and prompt
|
|
251
|
+
await this.saveRole(role, input.systemPromptContent);
|
|
252
|
+
// Update cache
|
|
253
|
+
this.rolesCache.set(role.id, role);
|
|
254
|
+
this.promptCache.set(role.systemPromptFile, input.systemPromptContent);
|
|
255
|
+
return role;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Update an existing role
|
|
259
|
+
*
|
|
260
|
+
* For builtin roles: Creates an override in ~/.crewly/roles/ (original stays intact)
|
|
261
|
+
* For user roles: Updates the role directly
|
|
262
|
+
*
|
|
263
|
+
* @param id - The role ID
|
|
264
|
+
* @param input - The update input
|
|
265
|
+
* @returns The updated role
|
|
266
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
267
|
+
* @throws {RoleValidationError} If input validation fails
|
|
268
|
+
*/
|
|
269
|
+
async updateRole(id, input) {
|
|
270
|
+
await this.ensureInitialized();
|
|
271
|
+
const role = this.rolesCache.get(id);
|
|
272
|
+
if (!role) {
|
|
273
|
+
throw new RoleNotFoundError(id);
|
|
274
|
+
}
|
|
275
|
+
// Validate input
|
|
276
|
+
const errors = validateUpdateRoleInput(input);
|
|
277
|
+
if (errors.length > 0) {
|
|
278
|
+
throw new RoleValidationError(errors);
|
|
279
|
+
}
|
|
280
|
+
// Build updated role
|
|
281
|
+
const now = new Date().toISOString();
|
|
282
|
+
const updatedRole = {
|
|
283
|
+
...role,
|
|
284
|
+
displayName: input.displayName ?? role.displayName,
|
|
285
|
+
description: input.description ?? role.description,
|
|
286
|
+
category: input.category ?? role.category,
|
|
287
|
+
assignedSkills: input.assignedSkills ?? role.assignedSkills,
|
|
288
|
+
isDefault: input.isDefault ?? role.isDefault,
|
|
289
|
+
updatedAt: now,
|
|
290
|
+
};
|
|
291
|
+
// If this role is being set as default, unset other defaults
|
|
292
|
+
if (input.isDefault === true && !role.isDefault) {
|
|
293
|
+
await this.unsetAllDefaults();
|
|
294
|
+
}
|
|
295
|
+
// Get prompt content (use new or existing)
|
|
296
|
+
const existingPromptContent = role.isBuiltin
|
|
297
|
+
? await this.loadPromptContent(role.systemPromptFile, true, role.name)
|
|
298
|
+
: await this.loadPromptContent(role.systemPromptFile, false);
|
|
299
|
+
const promptContent = input.systemPromptContent ?? existingPromptContent;
|
|
300
|
+
// Save to user directory (creates override for builtin roles)
|
|
301
|
+
await this.saveRoleOverride(updatedRole, promptContent);
|
|
302
|
+
// Update cache
|
|
303
|
+
this.rolesCache.set(id, updatedRole);
|
|
304
|
+
if (input.systemPromptContent) {
|
|
305
|
+
const cacheKey = role.isBuiltin ? `override:${role.name}` : role.systemPromptFile;
|
|
306
|
+
this.promptCache.set(cacheKey, input.systemPromptContent);
|
|
307
|
+
}
|
|
308
|
+
return updatedRole;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Check if a builtin role has a user override
|
|
312
|
+
*
|
|
313
|
+
* @param id - The role ID
|
|
314
|
+
* @returns True if the role has a user override
|
|
315
|
+
*/
|
|
316
|
+
async hasOverride(id) {
|
|
317
|
+
await this.ensureInitialized();
|
|
318
|
+
const role = this.rolesCache.get(id);
|
|
319
|
+
if (!role || !role.isBuiltin) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
const overridePath = path.join(this.userRolesDir, role.name, 'role.json');
|
|
323
|
+
try {
|
|
324
|
+
await fs.access(overridePath);
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Reset a builtin role to its default (removes user override)
|
|
333
|
+
*
|
|
334
|
+
* @param id - The role ID
|
|
335
|
+
* @returns The reset role (original builtin values)
|
|
336
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
337
|
+
*/
|
|
338
|
+
async resetToDefault(id) {
|
|
339
|
+
await this.ensureInitialized();
|
|
340
|
+
const role = this.rolesCache.get(id);
|
|
341
|
+
if (!role) {
|
|
342
|
+
throw new RoleNotFoundError(id);
|
|
343
|
+
}
|
|
344
|
+
if (!role.isBuiltin) {
|
|
345
|
+
// Non-builtin roles can't be "reset" - they have no default
|
|
346
|
+
return role;
|
|
347
|
+
}
|
|
348
|
+
// Delete the override directory
|
|
349
|
+
const overrideDir = path.join(this.userRolesDir, role.name);
|
|
350
|
+
try {
|
|
351
|
+
await fs.rm(overrideDir, { recursive: true, force: true });
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// Override doesn't exist, that's fine
|
|
355
|
+
}
|
|
356
|
+
// Clear override from cache
|
|
357
|
+
const cacheKey = `override:${role.name}`;
|
|
358
|
+
this.promptCache.delete(cacheKey);
|
|
359
|
+
// Reload the original builtin role
|
|
360
|
+
const roleJsonPath = path.join(this.builtinRolesDir, role.name, 'role.json');
|
|
361
|
+
const content = await fs.readFile(roleJsonPath, 'utf-8');
|
|
362
|
+
const stored = JSON.parse(content);
|
|
363
|
+
const originalRole = storageFormatToRole(stored, true);
|
|
364
|
+
// Update cache with original
|
|
365
|
+
this.rolesCache.set(id, originalRole);
|
|
366
|
+
return originalRole;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Delete a user-created role (built-in roles cannot be deleted)
|
|
370
|
+
*
|
|
371
|
+
* @param id - The role ID
|
|
372
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
373
|
+
* @throws {BuiltinRoleModificationError} If attempting to delete a built-in role
|
|
374
|
+
*/
|
|
375
|
+
async deleteRole(id) {
|
|
376
|
+
await this.ensureInitialized();
|
|
377
|
+
const role = this.rolesCache.get(id);
|
|
378
|
+
if (!role) {
|
|
379
|
+
throw new RoleNotFoundError(id);
|
|
380
|
+
}
|
|
381
|
+
if (role.isBuiltin) {
|
|
382
|
+
throw new BuiltinRoleModificationError('delete');
|
|
383
|
+
}
|
|
384
|
+
// Delete files
|
|
385
|
+
const jsonPath = path.join(this.userRolesDir, `${role.name}.json`);
|
|
386
|
+
const promptPath = path.join(this.userRolesDir, role.systemPromptFile);
|
|
387
|
+
try {
|
|
388
|
+
await fs.unlink(jsonPath);
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// Ignore if file doesn't exist
|
|
392
|
+
}
|
|
393
|
+
try {
|
|
394
|
+
await fs.unlink(promptPath);
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// Ignore if file doesn't exist
|
|
398
|
+
}
|
|
399
|
+
// Update cache
|
|
400
|
+
this.rolesCache.delete(id);
|
|
401
|
+
this.promptCache.delete(role.systemPromptFile);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Assign skills to a role
|
|
405
|
+
*
|
|
406
|
+
* @param roleId - The role ID
|
|
407
|
+
* @param skillIds - Array of skill IDs to assign
|
|
408
|
+
* @returns The updated role
|
|
409
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
410
|
+
* @throws {BuiltinRoleModificationError} If attempting to modify a built-in role
|
|
411
|
+
*/
|
|
412
|
+
async assignSkills(roleId, skillIds) {
|
|
413
|
+
await this.ensureInitialized();
|
|
414
|
+
const role = this.rolesCache.get(roleId);
|
|
415
|
+
if (!role) {
|
|
416
|
+
throw new RoleNotFoundError(roleId);
|
|
417
|
+
}
|
|
418
|
+
if (role.isBuiltin) {
|
|
419
|
+
throw new BuiltinRoleModificationError('modify skills for');
|
|
420
|
+
}
|
|
421
|
+
// Merge skills without duplicates
|
|
422
|
+
const newSkills = [...new Set([...role.assignedSkills, ...skillIds])];
|
|
423
|
+
return this.updateRole(roleId, { assignedSkills: newSkills });
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Remove skills from a role
|
|
427
|
+
*
|
|
428
|
+
* @param roleId - The role ID
|
|
429
|
+
* @param skillIds - Array of skill IDs to remove
|
|
430
|
+
* @returns The updated role
|
|
431
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
432
|
+
* @throws {BuiltinRoleModificationError} If attempting to modify a built-in role
|
|
433
|
+
*/
|
|
434
|
+
async removeSkills(roleId, skillIds) {
|
|
435
|
+
await this.ensureInitialized();
|
|
436
|
+
const role = this.rolesCache.get(roleId);
|
|
437
|
+
if (!role) {
|
|
438
|
+
throw new RoleNotFoundError(roleId);
|
|
439
|
+
}
|
|
440
|
+
if (role.isBuiltin) {
|
|
441
|
+
throw new BuiltinRoleModificationError('modify skills for');
|
|
442
|
+
}
|
|
443
|
+
// Filter out removed skills
|
|
444
|
+
const newSkills = role.assignedSkills.filter(s => !skillIds.includes(s));
|
|
445
|
+
return this.updateRole(roleId, { assignedSkills: newSkills });
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Set the default role
|
|
449
|
+
*
|
|
450
|
+
* @param roleId - The role ID to set as default
|
|
451
|
+
* @returns The updated role
|
|
452
|
+
* @throws {RoleNotFoundError} If the role is not found
|
|
453
|
+
*/
|
|
454
|
+
async setDefaultRole(roleId) {
|
|
455
|
+
await this.ensureInitialized();
|
|
456
|
+
const role = this.rolesCache.get(roleId);
|
|
457
|
+
if (!role) {
|
|
458
|
+
throw new RoleNotFoundError(roleId);
|
|
459
|
+
}
|
|
460
|
+
// Unset all existing defaults
|
|
461
|
+
await this.unsetAllDefaults();
|
|
462
|
+
// Set the new default
|
|
463
|
+
const now = new Date().toISOString();
|
|
464
|
+
const updatedRole = {
|
|
465
|
+
...role,
|
|
466
|
+
isDefault: true,
|
|
467
|
+
updatedAt: now,
|
|
468
|
+
};
|
|
469
|
+
// Save if user role
|
|
470
|
+
if (!role.isBuiltin) {
|
|
471
|
+
const promptContent = await this.loadPromptContent(role.systemPromptFile, false);
|
|
472
|
+
await this.saveRole(updatedRole, promptContent);
|
|
473
|
+
}
|
|
474
|
+
// Update cache
|
|
475
|
+
this.rolesCache.set(roleId, updatedRole);
|
|
476
|
+
return updatedRole;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Get the current default role
|
|
480
|
+
*
|
|
481
|
+
* @returns The default role, or null if none is set
|
|
482
|
+
*/
|
|
483
|
+
async getDefaultRole() {
|
|
484
|
+
await this.ensureInitialized();
|
|
485
|
+
const roles = Array.from(this.rolesCache.values());
|
|
486
|
+
return roles.find(role => role.isDefault) ?? null;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Refresh the roles cache by reloading from disk
|
|
490
|
+
*/
|
|
491
|
+
async refresh() {
|
|
492
|
+
this.initialized = false;
|
|
493
|
+
await this.initialize();
|
|
494
|
+
}
|
|
495
|
+
// ============================================================================
|
|
496
|
+
// Private Methods
|
|
497
|
+
// ============================================================================
|
|
498
|
+
/**
|
|
499
|
+
* Ensure the service is initialized.
|
|
500
|
+
* Auto-initializes if not already done.
|
|
501
|
+
*/
|
|
502
|
+
async ensureInitialized() {
|
|
503
|
+
if (!this.initialized) {
|
|
504
|
+
await this.initialize();
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Load built-in roles from the config directory
|
|
509
|
+
* Loads from subdirectories (config/roles/{role}/role.json)
|
|
510
|
+
*/
|
|
511
|
+
async loadBuiltinRoles() {
|
|
512
|
+
const roles = [];
|
|
513
|
+
try {
|
|
514
|
+
const entries = await fs.readdir(this.builtinRolesDir, { withFileTypes: true });
|
|
515
|
+
for (const entry of entries) {
|
|
516
|
+
// Load from subdirectories containing role.json
|
|
517
|
+
if (entry.isDirectory()) {
|
|
518
|
+
try {
|
|
519
|
+
// Check for user override first
|
|
520
|
+
const overridePath = path.join(this.userRolesDir, entry.name, 'role.json');
|
|
521
|
+
let roleJsonPath;
|
|
522
|
+
let hasOverride = false;
|
|
523
|
+
try {
|
|
524
|
+
await fs.access(overridePath);
|
|
525
|
+
roleJsonPath = overridePath;
|
|
526
|
+
hasOverride = true;
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
// No override, use builtin
|
|
530
|
+
roleJsonPath = path.join(this.builtinRolesDir, entry.name, 'role.json');
|
|
531
|
+
}
|
|
532
|
+
const content = await fs.readFile(roleJsonPath, 'utf-8');
|
|
533
|
+
const stored = JSON.parse(content);
|
|
534
|
+
const role = storageFormatToRole(stored, true);
|
|
535
|
+
// Mark if this role has a user override
|
|
536
|
+
if (hasOverride) {
|
|
537
|
+
role.hasOverride = true;
|
|
538
|
+
}
|
|
539
|
+
roles.push(role);
|
|
540
|
+
}
|
|
541
|
+
catch {
|
|
542
|
+
// Skip directories without role.json
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
catch {
|
|
548
|
+
// Directory doesn't exist - no builtin roles
|
|
549
|
+
}
|
|
550
|
+
return roles;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Load user-created roles from the user directory
|
|
554
|
+
*/
|
|
555
|
+
async loadUserRoles() {
|
|
556
|
+
const roles = [];
|
|
557
|
+
try {
|
|
558
|
+
const files = await fs.readdir(this.userRolesDir);
|
|
559
|
+
const jsonFiles = files.filter(f => f.endsWith('.json'));
|
|
560
|
+
for (const file of jsonFiles) {
|
|
561
|
+
try {
|
|
562
|
+
const filePath = path.join(this.userRolesDir, file);
|
|
563
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
564
|
+
const stored = JSON.parse(content);
|
|
565
|
+
const role = storageFormatToRole(stored, false);
|
|
566
|
+
roles.push(role);
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
this.logger.warn('Failed to load user role', { file, error: err instanceof Error ? err.message : String(err) });
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
catch {
|
|
574
|
+
// Directory doesn't exist - no user roles
|
|
575
|
+
}
|
|
576
|
+
return roles;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Save a role and its prompt content to disk
|
|
580
|
+
*
|
|
581
|
+
* @param role - The role to save
|
|
582
|
+
* @param promptContent - The prompt content to save
|
|
583
|
+
*/
|
|
584
|
+
async saveRole(role, promptContent) {
|
|
585
|
+
await this.ensureUserRolesDir();
|
|
586
|
+
// Save JSON file
|
|
587
|
+
const jsonPath = path.join(this.userRolesDir, `${role.name}.json`);
|
|
588
|
+
const storageFormat = roleToStorageFormat(role);
|
|
589
|
+
await fs.writeFile(jsonPath, JSON.stringify(storageFormat, null, 2), 'utf-8');
|
|
590
|
+
// Save prompt file
|
|
591
|
+
const promptPath = path.join(this.userRolesDir, role.systemPromptFile);
|
|
592
|
+
await fs.writeFile(promptPath, promptContent, 'utf-8');
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* Save a role override to user directory
|
|
596
|
+
* Uses subdirectory structure: ~/.crewly/roles/{role-name}/role.json + prompt.md
|
|
597
|
+
*
|
|
598
|
+
* @param role - The role to save
|
|
599
|
+
* @param promptContent - The prompt content
|
|
600
|
+
*/
|
|
601
|
+
async saveRoleOverride(role, promptContent) {
|
|
602
|
+
await this.ensureUserRolesDir();
|
|
603
|
+
// Create role subdirectory
|
|
604
|
+
const roleDir = path.join(this.userRolesDir, role.name);
|
|
605
|
+
await fs.mkdir(roleDir, { recursive: true });
|
|
606
|
+
// Save role.json
|
|
607
|
+
const jsonPath = path.join(roleDir, 'role.json');
|
|
608
|
+
const storageFormat = roleToStorageFormat(role);
|
|
609
|
+
// Override uses prompt.md in same directory
|
|
610
|
+
storageFormat.systemPromptFile = 'prompt.md';
|
|
611
|
+
await fs.writeFile(jsonPath, JSON.stringify(storageFormat, null, 2), 'utf-8');
|
|
612
|
+
// Save prompt.md
|
|
613
|
+
const promptPath = path.join(roleDir, 'prompt.md');
|
|
614
|
+
await fs.writeFile(promptPath, promptContent, 'utf-8');
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Load prompt content from a file
|
|
618
|
+
* For built-in roles, checks for user override first, then falls back to builtin
|
|
619
|
+
* For user roles, loads from ~/.crewly/roles/
|
|
620
|
+
*
|
|
621
|
+
* @param promptFile - The prompt file name (e.g., "prompt.md")
|
|
622
|
+
* @param isBuiltin - Whether this is a built-in role
|
|
623
|
+
* @param roleName - The role name (directory name)
|
|
624
|
+
* @returns The prompt content
|
|
625
|
+
*/
|
|
626
|
+
async loadPromptContent(promptFile, isBuiltin, roleName) {
|
|
627
|
+
// Check cache first
|
|
628
|
+
const cacheKey = `${isBuiltin ? 'builtin' : 'user'}:${roleName || 'unknown'}:${promptFile}`;
|
|
629
|
+
if (this.promptCache.has(cacheKey)) {
|
|
630
|
+
return this.promptCache.get(cacheKey);
|
|
631
|
+
}
|
|
632
|
+
// For builtin roles, check for user override first
|
|
633
|
+
if (isBuiltin && roleName) {
|
|
634
|
+
const overridePath = path.join(this.userRolesDir, roleName, 'prompt.md');
|
|
635
|
+
try {
|
|
636
|
+
const content = await fs.readFile(overridePath, 'utf-8');
|
|
637
|
+
this.promptCache.set(cacheKey, content);
|
|
638
|
+
return content;
|
|
639
|
+
}
|
|
640
|
+
catch {
|
|
641
|
+
// No override, continue to load builtin
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
const dir = isBuiltin ? this.builtinRolesDir : this.userRolesDir;
|
|
645
|
+
// For built-in roles, load from subdirectory; for user roles, use subdirectory too
|
|
646
|
+
const promptPath = roleName
|
|
647
|
+
? path.join(dir, roleName, promptFile)
|
|
648
|
+
: path.join(dir, promptFile);
|
|
649
|
+
try {
|
|
650
|
+
const content = await fs.readFile(promptPath, 'utf-8');
|
|
651
|
+
this.promptCache.set(cacheKey, content);
|
|
652
|
+
return content;
|
|
653
|
+
}
|
|
654
|
+
catch {
|
|
655
|
+
return '';
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Ensure the user roles directory exists
|
|
660
|
+
*/
|
|
661
|
+
async ensureUserRolesDir() {
|
|
662
|
+
try {
|
|
663
|
+
await fs.mkdir(this.userRolesDir, { recursive: true });
|
|
664
|
+
}
|
|
665
|
+
catch {
|
|
666
|
+
// Ignore if already exists
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Generate a unique role ID
|
|
671
|
+
*
|
|
672
|
+
* @param name - The role name
|
|
673
|
+
* @returns A unique ID
|
|
674
|
+
*/
|
|
675
|
+
generateRoleId(name) {
|
|
676
|
+
return `${this.sanitizeRoleName(name)}-${randomUUID().slice(0, 8)}`;
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Sanitize a role name for use in file names
|
|
680
|
+
*
|
|
681
|
+
* @param name - The role name
|
|
682
|
+
* @returns The sanitized name
|
|
683
|
+
*/
|
|
684
|
+
sanitizeRoleName(name) {
|
|
685
|
+
return name
|
|
686
|
+
.toLowerCase()
|
|
687
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
688
|
+
.replace(/-+/g, '-')
|
|
689
|
+
.replace(/^-|-$/g, '');
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Unset isDefault on all roles
|
|
693
|
+
*/
|
|
694
|
+
async unsetAllDefaults() {
|
|
695
|
+
for (const [id, role] of this.rolesCache.entries()) {
|
|
696
|
+
if (role.isDefault) {
|
|
697
|
+
const updatedRole = { ...role, isDefault: false, updatedAt: new Date().toISOString() };
|
|
698
|
+
this.rolesCache.set(id, updatedRole);
|
|
699
|
+
if (!role.isBuiltin) {
|
|
700
|
+
const promptContent = await this.loadPromptContent(role.systemPromptFile, false);
|
|
701
|
+
await this.saveRole(updatedRole, promptContent);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
// ============================================================================
|
|
708
|
+
// Singleton Instance
|
|
709
|
+
// ============================================================================
|
|
710
|
+
let roleServiceInstance = null;
|
|
711
|
+
/**
|
|
712
|
+
* Get the singleton RoleService instance
|
|
713
|
+
*
|
|
714
|
+
* @returns The RoleService instance
|
|
715
|
+
*/
|
|
716
|
+
export function getRoleService() {
|
|
717
|
+
if (!roleServiceInstance) {
|
|
718
|
+
roleServiceInstance = new RoleService();
|
|
719
|
+
}
|
|
720
|
+
return roleServiceInstance;
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* Reset the singleton instance (for testing)
|
|
724
|
+
*/
|
|
725
|
+
export function resetRoleService() {
|
|
726
|
+
roleServiceInstance = null;
|
|
727
|
+
}
|
|
728
|
+
//# sourceMappingURL=role.service.js.map
|