crewly 1.20.105 → 1.20.107
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/README.md +22 -12
- package/config/constants.ts +43 -0
- package/config/index.ts +2 -0
- package/config/skills/_common/lib.sh +55 -2
- package/config/skills/_common/lib.test.sh +58 -1
- package/config/skills/_common/task-pool-body-shape.test.sh +60 -0
- package/config/skills/agent/core/cancel-followup/execute.sh +18 -3
- package/config/skills/agent/core/cancel-followup/execute.test.sh +73 -0
- package/config/skills/agent/core/complete-task/execute.sh +1 -1
- package/config/skills/agent/core/create-intent-tasks/execute.sh +1 -1
- package/config/skills/agent/core/create-task/SKILL.md +1 -0
- package/config/skills/agent/core/create-task/execute.sh +10 -0
- package/config/skills/agent/core/decompose-intent/execute.sh +1 -1
- package/config/skills/agent/core/handoff-task/execute.sh +1 -1
- package/config/skills/agent/core/list-my-followups/SKILL.md +1 -1
- package/config/skills/agent/core/list-my-followups/execute.sh +25 -3
- package/config/skills/agent/core/list-my-followups/execute.test.sh +72 -0
- package/config/skills/agent/core/poll-tasks/execute.sh +3 -3
- package/config/skills/agent/core/reply-channel/SKILL.md +1 -1
- package/config/skills/agent/core/report-progress/execute.sh +1 -1
- package/config/skills/agent/core/report-status/execute.sh +1 -1
- package/config/skills/agent/core/slack-post/SKILL.md +1 -1
- package/config/skills/agent/core/todo-add/SKILL.md +64 -0
- package/config/skills/agent/core/todo-add/execute.sh +84 -0
- package/config/skills/agent/core/todo-add/execute.test.sh +76 -0
- package/config/skills/agent/core/todo-lists/SKILL.md +58 -0
- package/config/skills/agent/core/todo-lists/execute.sh +70 -0
- package/config/skills/agent/core/todo-lists/execute.test.sh +77 -0
- package/config/skills/agent/core/todo-tasks/SKILL.md +59 -0
- package/config/skills/agent/core/todo-tasks/execute.sh +78 -0
- package/config/skills/agent/core/todo-tasks/execute.test.sh +74 -0
- package/config/skills/agent/core/todo-update/SKILL.md +63 -0
- package/config/skills/agent/core/todo-update/execute.sh +115 -0
- package/config/skills/agent/core/todo-update/execute.test.sh +82 -0
- package/config/skills/agent/core/update-intent-task/execute.sh +1 -1
- package/config/skills/agent/marketing/brand-onboarding/execute.sh +1 -1
- package/config/skills/agent/marketing/submit-for-approval/execute.sh +1 -1
- package/config/skills/agent/remote-browser/SOP-google-flow-video.md +1 -1
- package/config/skills/agent/remote-browser/execute.sh +33 -1
- package/config/skills/agent/remote-browser/execute.test.sh +62 -0
- package/config/skills/agent/screenshot-compare/execute.sh +1 -1
- package/config/skills/agent/transcribe-audio/SKILL.md +1 -1
- package/config/skills/agent/transcribe-audio/execute.sh +1 -1
- package/config/skills/agent/transcribe-audio/instructions.md +1 -1
- package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
- package/config/skills/orchestrator/get-tasks/SKILL.md +7 -1
- package/config/skills/orchestrator/get-tasks/execute.sh +51 -28
- package/config/skills/orchestrator/get-tasks/execute.test.sh +67 -0
- package/config/skills/orchestrator/heartbeat/execute.sh +2 -2
- package/config/skills/orchestrator/list-missions/execute.sh +1 -1
- package/config/skills/orchestrator/list-missions/execute.test.sh +38 -11
- package/config/skills/team-leader/decompose-goal/SKILL.md +1 -0
- package/config/skills/team-leader/decompose-goal/execute.sh +17 -2
- package/config/skills/team-leader/delegate-task/SKILL.md +1 -0
- package/config/skills/team-leader/delegate-task/execute.sh +6 -2
- package/dist/backend/backend/src/constants.d.ts +264 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +255 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +33 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +176 -9
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +38 -35
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +10 -45
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +40 -89
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +51 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +223 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +42 -0
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts +2 -1
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +21 -0
- package/dist/backend/backend/src/controllers/session/session.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 +51 -3
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts +23 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js +35 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts +5 -3
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +27 -6
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.routes.js +3 -0
- package/dist/backend/backend/src/controllers/system/system.routes.js.map +1 -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 +29 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +86 -6
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +41 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +135 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +18 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +25 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +70 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +352 -71
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +6 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts +128 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +200 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +3 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +4 -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 +61 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js +62 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
- 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 +0 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +113 -10
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts +12 -0
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.js +19 -0
- package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +3 -2
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +57 -5
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +98 -18
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +12 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +25 -4
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts +2 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js +5 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +38 -0
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-session.service.js +34 -0
- package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +5 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +7 -2
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +58 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts +63 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js +72 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +6 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/connector/connector-access.service.d.ts +2 -2
- package/dist/backend/backend/src/services/connector/connector-access.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/connector/connector-access.service.js +2 -2
- package/dist/backend/backend/src/services/connector/connector-access.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/retry.util.d.ts +5 -0
- package/dist/backend/backend/src/services/core/retry.util.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/retry.util.js +2 -2
- package/dist/backend/backend/src/services/core/retry.util.js.map +1 -1
- package/dist/backend/backend/src/services/factory.service.js +3 -3
- package/dist/backend/backend/src/services/factory.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +24 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +9 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +55 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +7 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +12 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +90 -2
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +250 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +367 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +116 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +220 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -0
- 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 +22 -16
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +11 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -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 +9 -9
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +153 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.js +279 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +176 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.js +298 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts +52 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.js +61 -0
- package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +2 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +53 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-binding.d.ts +125 -0
- package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-binding.js +183 -0
- package/dist/backend/backend/src/services/session/session-binding.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +19 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +37 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts +4 -3
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js +4 -3
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +72 -7
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +185 -23
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +4 -45
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +57 -190
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts +59 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.js +69 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +18 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +64 -3
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +33 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +129 -4
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts +108 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js +193 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +15 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +30 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +41 -1
- 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 +55 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts +7 -0
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +32 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +4 -3
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +12 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts +7 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +17 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +458 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js +566 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +3 -3
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +28 -4
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js +40 -10
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +1 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +3 -3
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +29 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/thread-status.types.d.ts +26 -0
- package/dist/backend/backend/src/types/thread-status.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/thread-status.types.js +17 -0
- package/dist/backend/backend/src/types/thread-status.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +3 -2
- 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/request.types.d.ts +39 -3
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js +11 -2
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts +173 -0
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/v2/ticket.types.js +203 -0
- package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +26 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.js +40 -3
- package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts +62 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.js +104 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.js.map +1 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.d.ts +56 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.js +80 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +40 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +41 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +4 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +264 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +255 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +3 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +4 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +61 -4
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +62 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js +0 -2
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +113 -10
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +3 -2
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +5 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +58 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +7 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +12 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +90 -2
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +176 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.js +298 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +2 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +53 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +19 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +37 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +4 -45
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +57 -190
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +18 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +64 -3
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +33 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +129 -4
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +15 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +30 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +41 -1
- 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 +55 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.d.ts +7 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +17 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +458 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js +566 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -0
- package/dist/cli/backend/src/types/slack.types.d.ts +29 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/thread-status.types.d.ts +26 -0
- package/dist/cli/backend/src/types/thread-status.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/thread-status.types.js +17 -0
- package/dist/cli/backend/src/types/thread-status.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +3 -2
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +39 -3
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js +11 -2
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts +173 -0
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/ticket.types.js +203 -0
- package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts +62 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.js +104 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.js.map +1 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.d.ts +56 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.js +80 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.js.map +1 -0
- package/dist/cli/cli/src/commands/doctor.d.ts +73 -2
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/doctor.js +250 -8
- package/dist/cli/cli/src/commands/doctor.js.map +1 -1
- package/dist/cli/cli/src/commands/install.js +2 -0
- package/dist/cli/cli/src/commands/install.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +68 -0
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +149 -18
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/service.d.ts +6 -0
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +152 -50
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/start.js +25 -80
- package/dist/cli/cli/src/commands/start.js.map +1 -1
- package/dist/cli/cli/src/commands/status.d.ts +17 -1
- package/dist/cli/cli/src/commands/status.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/status.js +133 -68
- package/dist/cli/cli/src/commands/status.js.map +1 -1
- package/dist/cli/cli/src/commands/stop.d.ts +28 -1
- package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/stop.js +260 -100
- package/dist/cli/cli/src/commands/stop.js.map +1 -1
- package/dist/cli/cli/src/index.js +3 -2
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts +68 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts.map +1 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.js +167 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.js.map +1 -0
- package/dist/cli/cli/src/utils/backend-status.d.ts +175 -0
- package/dist/cli/cli/src/utils/backend-status.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/backend-status.js +322 -0
- package/dist/cli/cli/src/utils/backend-status.js.map +1 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts +31 -2
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +78 -20
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/cli/src/utils/native-toolchain.d.ts +53 -8
- package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/native-toolchain.js +107 -15
- package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.d.ts +38 -6
- package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.js +83 -53
- package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.d.ts +130 -0
- package/dist/cli/cli/src/utils/runtime-auth.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/runtime-auth.js +248 -0
- package/dist/cli/cli/src/utils/runtime-auth.js.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts +137 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.js +236 -0
- package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -0
- package/dist/cli/config/constants.d.ts +40 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +41 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +4 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-1fd45a2a.js → index-f7b99e81.js} +262 -262
- package/frontend/dist/index.html +1 -1
- package/package.json +4 -4
|
@@ -318,6 +318,26 @@ assert_contains "first request had stale tabId:100" "$first_body" '"tabId":100'
|
|
|
318
318
|
|| pass "cache purged on 404"
|
|
319
319
|
scenario_teardown
|
|
320
320
|
|
|
321
|
+
# Scenario 6b: an explicit --tab-id that 404s is NOT retried on another tab
|
|
322
|
+
scenario_init "scenario 6b: explicit --tab-id 404 fails without retry"
|
|
323
|
+
mkdir -p "${RUNTIME_DIR}/agent-6b"
|
|
324
|
+
echo "55" > "${RUNTIME_DIR}/agent-6b/browser-tab-id"
|
|
325
|
+
queue_response '404|{"id":"x","success":false,"error":"Tab 100 no longer exists. Bind a new tab instead of reusing this tabId.","code":"tab_not_found"}'
|
|
326
|
+
queue_response '{"success":true,"data":{"text":"some other tab"}}'
|
|
327
|
+
start_stub
|
|
328
|
+
export CREWLY_SESSION_NAME="agent-6b"
|
|
329
|
+
set +e
|
|
330
|
+
"$SKILL" --action read-text --tab-id 100 > /dev/null 2>&1
|
|
331
|
+
rc=$?
|
|
332
|
+
set -e
|
|
333
|
+
total_reqs=$(wc -l < "$LOG_FILE")
|
|
334
|
+
assert_eq "stub received exactly 1 request" "1" "$(printf '%s' "$total_reqs" | tr -d ' ')"
|
|
335
|
+
[ "$rc" -ne 0 ] && pass "explicit --tab-id 404 exits non-zero" || fail "explicit --tab-id 404 exits non-zero" "rc=$rc"
|
|
336
|
+
[ -f "${RUNTIME_DIR}/agent-6b/browser-tab-id" ] \
|
|
337
|
+
&& pass "cached tab left alone for an explicit --tab-id failure" \
|
|
338
|
+
|| fail "cached tab left alone" "cache was purged"
|
|
339
|
+
scenario_teardown
|
|
340
|
+
|
|
321
341
|
# Scenario 7: bind-tab with --active sends active:true
|
|
322
342
|
scenario_init "scenario 7: bind-tab --active forwards foreground flag"
|
|
323
343
|
queue_response '{"success":true,"data":{"tabId":7}}'
|
|
@@ -468,6 +488,48 @@ total_reqs=$(wc -l < "$LOG_FILE" | tr -d ' ')
|
|
|
468
488
|
assert_eq "stub received 0 requests" "0" "$total_reqs"
|
|
469
489
|
scenario_teardown
|
|
470
490
|
|
|
491
|
+
# The goal header is sent as b64:<base64 of UTF-8>; decode it for comparison.
|
|
492
|
+
decode_goal() {
|
|
493
|
+
case "$1" in
|
|
494
|
+
b64:*) printf '%s' "${1#b64:}" | base64 --decode 2>/dev/null || printf '%s' "${1#b64:}" | base64 -D ;;
|
|
495
|
+
*) printf 'NOT-B64:%s' "$1" ;;
|
|
496
|
+
esac
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
# Scenario 20: --goal forwards the X-Agent-Goal header (takeover banner)
|
|
500
|
+
scenario_init "scenario 20: --goal forwards X-Agent-Goal"
|
|
501
|
+
queue_response '{"success":true,"data":{}}'
|
|
502
|
+
start_stub
|
|
503
|
+
unset CREWLY_SESSION_NAME
|
|
504
|
+
unset CREWLY_AGENT_GOAL 2>/dev/null || true
|
|
505
|
+
"$SKILL" --action navigate --url https://x.com --goal "Verify DMARC setup" > /dev/null 2>&1 || true
|
|
506
|
+
assert_eq "X-Agent-Goal from --goal" "Verify DMARC setup" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
|
|
507
|
+
scenario_teardown
|
|
508
|
+
|
|
509
|
+
# Scenario 21: CREWLY_AGENT_GOAL env auto-forwards; --goal overrides it
|
|
510
|
+
scenario_init "scenario 21: CREWLY_AGENT_GOAL auto-forwards + --goal override"
|
|
511
|
+
queue_response '{"success":true,"data":{}}'
|
|
512
|
+
queue_response '{"success":true,"data":{}}'
|
|
513
|
+
start_stub
|
|
514
|
+
unset CREWLY_SESSION_NAME
|
|
515
|
+
export CREWLY_AGENT_GOAL="Goal from env"
|
|
516
|
+
"$SKILL" --action navigate --url https://x.com > /dev/null 2>&1 || true
|
|
517
|
+
assert_eq "auto X-Agent-Goal from env" "Goal from env" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
|
|
518
|
+
"$SKILL" --action navigate --url https://y.com --goal "Override goal" > /dev/null 2>&1 || true
|
|
519
|
+
assert_eq "--goal overrides env" "Override goal" "$(decode_goal "$(request_field 1 headers.X-Agent-Goal)")"
|
|
520
|
+
unset CREWLY_AGENT_GOAL
|
|
521
|
+
scenario_teardown
|
|
522
|
+
|
|
523
|
+
# Scenario 22: a non-ASCII goal survives the header (base64-encoded)
|
|
524
|
+
scenario_init "scenario 22: non-ASCII --goal round-trips"
|
|
525
|
+
queue_response '{"success":true,"data":{}}'
|
|
526
|
+
start_stub
|
|
527
|
+
unset CREWLY_SESSION_NAME
|
|
528
|
+
unset CREWLY_AGENT_GOAL 2>/dev/null || true
|
|
529
|
+
"$SKILL" --action navigate --url https://x.com --goal "核对 DMARC 设置" > /dev/null 2>&1 || true
|
|
530
|
+
assert_eq "non-ASCII goal decoded" "核对 DMARC 设置" "$(decode_goal "$(request_field 0 headers.X-Agent-Goal)")"
|
|
531
|
+
scenario_teardown
|
|
532
|
+
|
|
471
533
|
# ---------------------------------------------------------------------------
|
|
472
534
|
# Summary
|
|
473
535
|
# ---------------------------------------------------------------------------
|
|
@@ -50,7 +50,7 @@ fi
|
|
|
50
50
|
# ── API key resolution ─────────────────────────────────────────────────────────
|
|
51
51
|
if [ -z "${GEMINI_API_KEY:-}" ]; then
|
|
52
52
|
# Try loading from settings via Crewly API
|
|
53
|
-
GEMINI_API_KEY=$(curl -sf "http://localhost
|
|
53
|
+
GEMINI_API_KEY=$(curl -sf "${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}/api/settings" 2>/dev/null | jq -r '.data.apiKeys.global.gemini // empty' 2>/dev/null || true)
|
|
54
54
|
fi
|
|
55
55
|
|
|
56
56
|
if [ -z "${GEMINI_API_KEY:-}" ]; then
|
|
@@ -99,7 +99,7 @@ downstream consumers have a stable shape).
|
|
|
99
99
|
- If the binary or model is missing, the skill falls back to OpenAI (or reports a clear hint when `engine:"local"` is forced).
|
|
100
100
|
- **OpenAI engine** — needs an OpenAI API key. Resolution order:
|
|
101
101
|
1. `OPENAI_API_KEY` environment variable (injected by Crewly secrets).
|
|
102
|
-
2. Crewly Settings → API Keys (`GET
|
|
102
|
+
2. Crewly Settings → API Keys (`GET $CREWLY_API_URL/api/settings` → `data.apiKeys.global.openai`).
|
|
103
103
|
No key is ever hard-coded.
|
|
104
104
|
|
|
105
105
|
## Notes
|
|
@@ -24,7 +24,7 @@ FLOPOST_WHISPER_DIR="${HOME}/.flopost/whisper"
|
|
|
24
24
|
WHISPER_CACHE_DIR="${HOME}/.cache/whisper-models"
|
|
25
25
|
OPENAI_TRANSCRIBE_URL="https://api.openai.com/v1/audio/transcriptions"
|
|
26
26
|
OPENAI_MODEL="whisper-1"
|
|
27
|
-
SETTINGS_URL="http://localhost
|
|
27
|
+
SETTINGS_URL="${CREWLY_API_URL:-http://localhost:${WEB_PORT:-8787}}/api/settings"
|
|
28
28
|
|
|
29
29
|
err_json() { printf '{"success":false,"error":%s}\n' "$(printf '%s' "$1" | jq -Rsa .)"; exit 1; }
|
|
30
30
|
|
|
@@ -81,7 +81,7 @@ downstream consumers have a stable shape).
|
|
|
81
81
|
- If the binary or model is missing, the skill falls back to OpenAI (or reports a clear hint when `engine:"local"` is forced).
|
|
82
82
|
- **OpenAI engine** — needs an OpenAI API key. Resolution order:
|
|
83
83
|
1. `OPENAI_API_KEY` environment variable (injected by Crewly secrets).
|
|
84
|
-
2. Crewly Settings → API Keys (`GET
|
|
84
|
+
2. Crewly Settings → API Keys (`GET $CREWLY_API_URL/api/settings` → `data.apiKeys.global.openai`).
|
|
85
85
|
No key is ever hard-coded.
|
|
86
86
|
|
|
87
87
|
## Notes
|
|
@@ -46,7 +46,7 @@ The script auto-resolves `config/skills/...` references to absolute paths so del
|
|
|
46
46
|
| `--team` / `-g` | `teamId` | No | Team ID for cross-team validation |
|
|
47
47
|
| `--task-type` | `taskType` | No | Task type: `general`, `technical` (default: `general`) |
|
|
48
48
|
| `--force-cross-team` | `forceCrossTeam` | No | Allow cross-team delegation |
|
|
49
|
-
| `--request-id` / `-R` | `requestId` | No |
|
|
49
|
+
| `--request-id` / `-R` | `requestId` | No | Ticket (Request) this work is for — the id or `TKT-123` from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Links the WorkItem into `Request.workItemIds[]`. Omit it and the WorkItem is still linked when your current turn has exactly one ticket |
|
|
50
50
|
| `--fallback-minutes` | — | No | Minutes until the ONE §3.0 fallback check fires for this delegation (default `120` ≈ 2× a TL milestone ETA). `0` disables it. Not cancelled on completion — keep it at 2× ETA, never a poll interval |
|
|
51
51
|
|
|
52
52
|
## Usage — CLI Flags (preferred)
|
|
@@ -50,4 +50,10 @@ The whole pool can be several MB.
|
|
|
50
50
|
|
|
51
51
|
## Output
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
`{ success, stats, examined, matched, shown, workItems, hint }`.
|
|
54
|
+
|
|
55
|
+
- `stats` — the pool's `/task-pool/stats` aggregate (totals by type/status).
|
|
56
|
+
- `examined` — number of pool rows fetched before filtering (the whole pool).
|
|
57
|
+
- `matched` / `shown` — rows that passed the filters, and how many of them are listed (`limit`).
|
|
58
|
+
- `workItems` — the compact items described above.
|
|
59
|
+
- If the item list could not be fetched or was not a list, the skill prints `success:false` with an `error` and exits 1 — an unknown list is never reported as an empty one.
|
|
@@ -23,19 +23,28 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
23
23
|
source "${SCRIPT_DIR}/../_common/lib.sh"
|
|
24
24
|
|
|
25
25
|
INPUT=$(read_json_input "${1:-}" 2>/dev/null || echo '{}')
|
|
26
|
+
# No argument and no stdin gives an empty string, not '{}'. Without this
|
|
27
|
+
# default LIMIT came out empty, `--argjson limit ""` failed, and a bare
|
|
28
|
+
# `get-tasks` reported "could not read the task pool".
|
|
29
|
+
[ -n "${INPUT//[[:space:]]/}" ] || INPUT='{}'
|
|
26
30
|
|
|
27
31
|
PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
|
|
28
32
|
STATUS=$(printf '%s' "$INPUT" | jq -r '.status // empty')
|
|
29
33
|
ALL=$(printf '%s' "$INPUT" | jq -r '.all // false')
|
|
30
|
-
LIMIT=$(printf '%s' "$INPUT" | jq -r '.limit // 50')
|
|
34
|
+
LIMIT=$(printf '%s' "$INPUT" | jq -r '(.limit // 50) | tonumber? // 50')
|
|
31
35
|
TARGET=$(printf '%s' "$INPUT" | jq -r '.target // empty')
|
|
32
36
|
|
|
33
37
|
STATS=$(api_call GET "/task-pool/stats" 2>/dev/null || echo '{"data":{}}')
|
|
34
38
|
|
|
35
|
-
# The item list goes through a pipe, never argv, however large the pool is
|
|
36
|
-
#
|
|
37
|
-
# truncation envelope
|
|
38
|
-
|
|
39
|
+
# The item list goes through a pipe, never argv, however large the pool is.
|
|
40
|
+
# api_call_full bypasses the skill output cap (or reads the parked body); it
|
|
41
|
+
# fails rather than hand back a truncation envelope that would read as "no
|
|
42
|
+
# work items". An unknown list is reported as success:false and exit 1.
|
|
43
|
+
if ! ITEMS=$(api_call_full GET "/task-pool/items" 2>/dev/null); then
|
|
44
|
+
ITEMS='{"data":null}'
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
OUT=$(printf '%s' "$ITEMS" \
|
|
39
48
|
| jq -c \
|
|
40
49
|
--argjson stats "$STATS" \
|
|
41
50
|
--arg projectPath "$PROJECT_PATH" \
|
|
@@ -45,26 +54,40 @@ CREWLY_SKILL_MAX_OUTPUT_BYTES=0 api_call GET "/task-pool/items" 2>/dev/null \
|
|
|
45
54
|
--argjson limit "$LIMIT" \
|
|
46
55
|
'
|
|
47
56
|
def finished: ["done","verified","cancelled","failed","rejected"];
|
|
48
|
-
(.data // .workItems
|
|
49
|
-
| ($
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
57
|
+
(.data // .workItems) as $raw
|
|
58
|
+
| if ($raw | type) != "array" then
|
|
59
|
+
{
|
|
60
|
+
success: false,
|
|
61
|
+
projectPath: (if $projectPath == "" then null else $projectPath end),
|
|
62
|
+
stats: ($stats.data // $stats),
|
|
63
|
+
examined: 0,
|
|
64
|
+
error: "GET /task-pool/items failed or did not return a list; workItems is UNKNOWN, not empty"
|
|
65
|
+
}
|
|
66
|
+
else
|
|
67
|
+
$raw as $items
|
|
68
|
+
| ($items
|
|
69
|
+
| map(select(
|
|
70
|
+
($status == "" or (.status as $s | ($status | split(",") | index($s)) != null))
|
|
71
|
+
and ($all == "true" or $status != "" or ((.status as $s | finished | index($s)) == null))
|
|
72
|
+
and ($target == "" or .target == $target)
|
|
73
|
+
))
|
|
74
|
+
| sort_by(.createdAt) | reverse) as $matched
|
|
75
|
+
| {
|
|
76
|
+
success: true,
|
|
77
|
+
projectPath: (if $projectPath == "" then null else $projectPath end),
|
|
78
|
+
stats: ($stats.data // $stats),
|
|
79
|
+
examined: ($items | length),
|
|
80
|
+
matched: ($matched | length),
|
|
81
|
+
shown: ([$matched | length, $limit] | min),
|
|
82
|
+
workItems: ($matched[:$limit] | map({
|
|
83
|
+
id, title, status, target,
|
|
84
|
+
createdAt,
|
|
85
|
+
blockedReason: (.blockedReason // null)
|
|
86
|
+
})),
|
|
87
|
+
hint: "Compact view: open items only, newest first. Finished ones: {\"all\":true}. One agent: {\"target\":\"<session>\"}."
|
|
88
|
+
}
|
|
89
|
+
end
|
|
90
|
+
') || OUT='{"success":false,"examined":0,"error":"could not read the task pool"}'
|
|
91
|
+
printf '%s\n' "$OUT"
|
|
92
|
+
# Exit non-zero when the item list is unknown, so callers cannot mistake it for empty.
|
|
93
|
+
printf '%s' "$OUT" | jq -e '.success' >/dev/null
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Tests for get-tasks — run with: bash execute.test.sh
|
|
3
|
+
#
|
|
4
|
+
# The pool is fetched whole (3.5 MB / 760 rows on a busy install) and reduced
|
|
5
|
+
# here, so the skill must (a) report how many rows it examined, (b) print only
|
|
6
|
+
# non-terminal items in compact form, and (c) fail loudly — never print
|
|
7
|
+
# workItems: [] — when the list is unknown.
|
|
8
|
+
set -u
|
|
9
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
PASS=0; FAIL=0
|
|
11
|
+
check() { local name="$1"; local got="$2"; local want="$3"; if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi; }
|
|
12
|
+
|
|
13
|
+
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
|
|
14
|
+
mkdir -p "$TMP/skills/orchestrator/get-tasks" "$TMP/skills/orchestrator/_common"
|
|
15
|
+
cp "$HERE/execute.sh" "$TMP/skills/orchestrator/get-tasks/execute.sh"
|
|
16
|
+
# Real lib.sh plus an api_call double, so the real api_call_full is exercised.
|
|
17
|
+
REAL_LIB="$(cd "$HERE/../../_common" && pwd)/lib.sh"
|
|
18
|
+
cat > "$TMP/skills/orchestrator/_common/lib.sh" <<'STUB'
|
|
19
|
+
source "$REAL_LIB"
|
|
20
|
+
api_call() {
|
|
21
|
+
case "$2" in
|
|
22
|
+
/task-pool/stats) printf '{"success":true,"data":{"total":4,"byStatus":{"verified":2,"running":1,"queued":1}}}' ;;
|
|
23
|
+
/task-pool/items) printf '%s' "$MOCK_ITEMS" ;;
|
|
24
|
+
esac
|
|
25
|
+
}
|
|
26
|
+
STUB
|
|
27
|
+
|
|
28
|
+
run() {
|
|
29
|
+
CODE=0
|
|
30
|
+
OUT=$(env -u CREWLY_SESSION_NAME REAL_LIB="$REAL_LIB" MOCK_ITEMS="$1" bash "$TMP/skills/orchestrator/get-tasks/execute.sh" 2>/dev/null) || CODE=$?
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
ITEMS='{"success":true,"data":[
|
|
34
|
+
{"id":"w-1","type":"delegate","status":"verified","owner":"team_lead","target":"a","title":"old","briefMarkdown":"huge","createdAt":"t1"},
|
|
35
|
+
{"id":"w-2","type":"delegate","status":"running","owner":"team_lead","target":"b","title":"'"$(printf 'x%.0s' $(seq 1 200))"'","briefMarkdown":"huge","createdAt":"t2","startedAt":"t3"},
|
|
36
|
+
{"id":"w-3","type":"review","status":"queued","owner":"orchestrator","target":"c","title":"pending review","createdAt":"t4"},
|
|
37
|
+
{"id":"w-4","type":"delegate","status":"cancelled","owner":"team_lead","target":"d","title":"gone","createdAt":"t5"}]}'
|
|
38
|
+
|
|
39
|
+
run "$ITEMS"
|
|
40
|
+
check "exit 0" "$CODE" "0"
|
|
41
|
+
check "success" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
|
|
42
|
+
check "examined = every row before filtering" "$(printf '%s' "$OUT" | jq -r '.examined')" "4"
|
|
43
|
+
check "only open items are listed, newest first" "$(printf '%s' "$OUT" | jq -r '.workItems | map(.id) | join(",")')" "w-3,w-2"
|
|
44
|
+
check "matched counts the open items" "$(printf '%s' "$OUT" | jq -r '.matched')" "2"
|
|
45
|
+
check "items are compacted (no briefMarkdown)" "$(printf '%s' "$OUT" | jq -r '.workItems[0] | has("briefMarkdown")')" "false"
|
|
46
|
+
check "stats passed through" "$(printf '%s' "$OUT" | jq -r '.stats.byStatus.running')" "1"
|
|
47
|
+
check "no error field on success" "$(printf '%s' "$OUT" | jq -r 'has("error")')" "false"
|
|
48
|
+
|
|
49
|
+
# A truncated envelope (parked file missing) must be an error, not an empty pool.
|
|
50
|
+
run '{"truncated":true,"bytes":3487577,"file":"'"$TMP"'/nope.json","head":"","hint":"x"}'
|
|
51
|
+
check "envelope -> exit 1" "$CODE" "1"
|
|
52
|
+
check "envelope -> success:false" "$(printf '%s' "$OUT" | jq -r '.success')" "false"
|
|
53
|
+
check "envelope -> examined 0, not a fake count" "$(printf '%s' "$OUT" | jq -r '.examined')" "0"
|
|
54
|
+
check "envelope -> error says UNKNOWN" "$(printf '%s' "$OUT" | jq -r '.error' | grep -c UNKNOWN)" "1"
|
|
55
|
+
|
|
56
|
+
# A body whose .data is not an array is likewise unknown.
|
|
57
|
+
run '{"success":true,"data":{"oops":1}}'
|
|
58
|
+
check "non-array -> exit 1" "$CODE" "1"
|
|
59
|
+
check "non-array -> success:false with error" "$(printf '%s' "$OUT" | jq -r '.success, (.error|type)' | paste -sd, -)" "false,string"
|
|
60
|
+
|
|
61
|
+
# An empty pool is a legitimate zero: success, examined 0, exit 0.
|
|
62
|
+
run '{"success":true,"data":[]}'
|
|
63
|
+
check "empty pool -> exit 0" "$CODE" "0"
|
|
64
|
+
check "empty pool -> success with examined 0" "$(printf '%s' "$OUT" | jq -r '"\(.success)/\(.examined)/\(.workItems|length)"')" "true/0/0"
|
|
65
|
+
|
|
66
|
+
echo "=== Results: $PASS passed, $FAIL failed ==="
|
|
67
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -11,8 +11,8 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
11
11
|
source "$SCRIPT_DIR/../../_common/lib.sh"
|
|
12
12
|
|
|
13
13
|
# Collect status from multiple endpoints (each call updates heartbeat via middleware)
|
|
14
|
-
teams_response=$(
|
|
15
|
-
projects_response=$(
|
|
14
|
+
teams_response=$(api_call_full GET "/teams" 2>/dev/null) || teams_response='{"error":"unavailable"}'
|
|
15
|
+
projects_response=$(api_call_full GET "/projects" 2>/dev/null) || projects_response='{"error":"unavailable"}'
|
|
16
16
|
queue_response=$(api_call GET "/messaging/queue/status" 2>/dev/null) || queue_response='{"error":"unavailable"}'
|
|
17
17
|
|
|
18
18
|
# Parse helpers:
|
|
@@ -6,28 +6,55 @@ PASS=0; FAIL=0
|
|
|
6
6
|
check() { local name="$1"; local got="$2"; local want="$3"; if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi; }
|
|
7
7
|
|
|
8
8
|
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
|
|
9
|
-
# Stand-in for api_call: a shell function defined in a wrapper lib.
|
|
10
9
|
mkdir -p "$TMP/skills/orchestrator/list-missions" "$TMP/skills/orchestrator/_common"
|
|
11
10
|
cp "$HERE/execute.sh" "$TMP/skills/orchestrator/list-missions/execute.sh"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
# The wrapper lib is the REAL lib.sh plus an api_call double, so the real
|
|
12
|
+
# api_call_full is what the skill exercises (a passthrough stub would let an
|
|
13
|
+
# envelope crash jq on both the fixed and the unfixed skill, guarding nothing).
|
|
14
|
+
# The double returns $MOCK_RESPONSE when set, else the canned missions.
|
|
15
|
+
REAL_LIB="$(cd "$HERE/../../_common" && pwd)/lib.sh"
|
|
16
|
+
MISSIONS='{"success":true,"data":[
|
|
16
17
|
{"id":"m-company","level":"company","objective":"Q4 stable delivery","status":"active","approval":{"state":"approved"},"keyResults":[]},
|
|
17
18
|
{"id":"m-team","level":"team","objective":"Portal team flow","status":"active","approval":{"state":"pending_approval"},"parentMissionId":"m-company",
|
|
18
19
|
"keyResults":[{"id":"k1","title":"KR1 review backlog","current":3,"target":2,"unit":"tickets","status":"on_track","measurementSource":"skill_output","measurements":[]}]}
|
|
19
|
-
]}
|
|
20
|
-
|
|
20
|
+
]}'
|
|
21
|
+
cat > "$TMP/skills/orchestrator/_common/lib.sh" <<'STUB'
|
|
22
|
+
source "$REAL_LIB"
|
|
23
|
+
api_call() { printf '%s' "${MOCK_RESPONSE:-$MISSIONS}"; }
|
|
24
|
+
STUB
|
|
25
|
+
export REAL_LIB MISSIONS
|
|
26
|
+
|
|
27
|
+
run() { # run [skill args...] -> CODE, OUT (stdout), ERR (stderr)
|
|
28
|
+
CODE=0
|
|
29
|
+
OUT=$(env -u CREWLY_SESSION_NAME bash "$TMP/skills/orchestrator/list-missions/execute.sh" "$@" 2>"$TMP/err") || CODE=$?
|
|
30
|
+
ERR=$(cat "$TMP/err")
|
|
21
31
|
}
|
|
22
|
-
|
|
23
|
-
|
|
32
|
+
|
|
33
|
+
run
|
|
24
34
|
check "count" "$(printf '%s' "$OUT" | jq '.count')" "2"
|
|
25
35
|
check "pending count" "$(printf '%s' "$OUT" | jq '.pendingApproval')" "1"
|
|
26
36
|
check "approval defaulted for legacy" "$(printf '%s' "$OUT" | jq -r '.missions[0].approval')" "approved"
|
|
27
37
|
check "KR compacted" "$(printf '%s' "$OUT" | jq -c '.missions[1].keyResults[0]')" '{"title":"KR1 review backlog","current":3,"target":2,"unit":"tickets","status":"on_track","measurementSource":"skill_output"}'
|
|
28
|
-
|
|
38
|
+
run --pending
|
|
29
39
|
check "--pending filters" "$(printf '%s' "$OUT" | jq -r '.missions | map(.id) | join(",")')" "m-team"
|
|
30
|
-
|
|
40
|
+
run --full
|
|
31
41
|
check "--full is raw" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
|
|
42
|
+
|
|
43
|
+
# --- Truncated envelope: the skill must not turn it into "no missions" -------
|
|
44
|
+
# What api_call hands back when GET /missions is over the output cap. With the
|
|
45
|
+
# parked file unreadable there is no way to get the rows: exit 1, print
|
|
46
|
+
# nothing a caller could mistake for a list, and say why (explicit error field).
|
|
47
|
+
ENVELOPE='{"truncated":true,"bytes":70000,"file":"'"$TMP"'/nonexistent.json","head":"{\"success\":true,\"data\":[{","hint":"pass --full or read the file"}'
|
|
48
|
+
MOCK_RESPONSE="$ENVELOPE" run
|
|
49
|
+
check "envelope, unreadable file -> exit 1 (not a jq crash, not 0)" "$CODE" "1"
|
|
50
|
+
check "envelope, unreadable file -> no rows on stdout" "$OUT" ""
|
|
51
|
+
check "envelope, unreadable file -> explicit truncated error on stderr" "$(printf '%s' "$ERR" | grep -c '"truncated":true')" "1"
|
|
52
|
+
|
|
53
|
+
# With the parked file readable, the real rows are recovered from it.
|
|
54
|
+
printf '%s' "$MISSIONS" > "$TMP/parked.json"
|
|
55
|
+
MOCK_RESPONSE='{"truncated":true,"bytes":70000,"file":"'"$TMP"'/parked.json","head":"","hint":"x"}' run
|
|
56
|
+
check "envelope, readable file -> exit 0" "$CODE" "0"
|
|
57
|
+
check "envelope, readable file -> rows recovered from the parked file" "$(printf '%s' "$OUT" | jq -r '.count')" "2"
|
|
58
|
+
|
|
32
59
|
echo "=== Results: $PASS passed, $FAIL failed ==="
|
|
33
60
|
[ "$FAIL" -eq 0 ]
|
|
@@ -73,6 +73,7 @@ Where `/tmp/decompose.json` contains:
|
|
|
73
73
|
| `objective` | Yes | The high-level objective being decomposed |
|
|
74
74
|
| `projectPath` | No | Project path for task file creation |
|
|
75
75
|
| `milestone` | No | Milestone folder name (default: `delegated`) |
|
|
76
|
+
| `requestId` (or `--request-id <id>` after the JSON) | No | Ticket this work is for: the id (or `TKT-123`) from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Omit it and the task is still linked when your current turn has exactly one ticket; applied to every sub-task |
|
|
76
77
|
| `tasks` | Yes | Array of sub-task objects |
|
|
77
78
|
| `tasks[].title` | Yes | Sub-task title |
|
|
78
79
|
| `tasks[].description` | Yes | Detailed task description |
|
|
@@ -9,13 +9,27 @@ set -euo pipefail
|
|
|
9
9
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
10
|
source "${SCRIPT_DIR}/../_common/lib.sh"
|
|
11
11
|
|
|
12
|
+
# `--request-id <id|TKT-123>` links every sub-task to the ticket they are for
|
|
13
|
+
# (the [TICKET:TKT-123 <id>] line of the message being worked on). Also
|
|
14
|
+
# accepted as `"requestId"` in the JSON.
|
|
15
|
+
REQUEST_ID=""
|
|
16
|
+
POSITIONAL=()
|
|
17
|
+
while [[ $# -gt 0 ]]; do
|
|
18
|
+
case "$1" in
|
|
19
|
+
--request-id|-R) REQUEST_ID="${2:-}"; shift 2 ;;
|
|
20
|
+
*) POSITIONAL+=("$1"); shift ;;
|
|
21
|
+
esac
|
|
22
|
+
done
|
|
23
|
+
set -- "${POSITIONAL[@]+"${POSITIONAL[@]}"}"
|
|
24
|
+
|
|
12
25
|
INPUT=$(read_json_input "${1:-}")
|
|
13
|
-
[ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"objective\":\"Build auth module\",\"projectPath\":\"/path/to/project\",\"tasks\":[{\"title\":\"...\",\"description\":\"...\",\"requiredRole\":\"developer\",\"acceptanceCriteria\":\"...\",\"priority\":\"high\"}]}'"
|
|
26
|
+
[ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"objective\":\"Build auth module\",\"projectPath\":\"/path/to/project\",\"requestId\":\"<ticket id, optional>\",\"tasks\":[{\"title\":\"...\",\"description\":\"...\",\"requiredRole\":\"developer\",\"acceptanceCriteria\":\"...\",\"priority\":\"high\"}]}' [--request-id <id>]"
|
|
14
27
|
|
|
15
28
|
OBJECTIVE=$(printf '%s' "$INPUT" | jq -r '.objective // empty')
|
|
16
29
|
PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
|
|
17
30
|
TASKS=$(printf '%s' "$INPUT" | jq -c '.tasks // empty')
|
|
18
31
|
MILESTONE=$(printf '%s' "$INPUT" | jq -r '.milestone // "delegated"')
|
|
32
|
+
[ -z "$REQUEST_ID" ] && REQUEST_ID=$(printf '%s' "$INPUT" | jq -r '.requestId // empty')
|
|
19
33
|
require_param "objective" "$OBJECTIVE"
|
|
20
34
|
require_param "tasks" "$TASKS"
|
|
21
35
|
|
|
@@ -68,13 +82,14 @@ Required role: ${TASK_ROLE}"
|
|
|
68
82
|
--arg milestone "$MILESTONE" \
|
|
69
83
|
--arg role "$TASK_ROLE" \
|
|
70
84
|
--arg priority "$TASK_PRIORITY" \
|
|
85
|
+
--arg requestId "$REQUEST_ID" \
|
|
71
86
|
'{
|
|
72
87
|
title: $title,
|
|
73
88
|
type: "delegate",
|
|
74
89
|
owner: "system",
|
|
75
90
|
briefMarkdown: $brief,
|
|
76
91
|
metadata: { projectPath: $projectPath, milestone: $milestone, requiredRole: $role, priority: $priority }
|
|
77
|
-
}')
|
|
92
|
+
} + (if $requestId != "" then {requestId: $requestId} else {} end)')
|
|
78
93
|
|
|
79
94
|
# No envelope: addItem reads req.body directly as the CreateWorkItemInput.
|
|
80
95
|
CREATE_BODY="$WORK_ITEM"
|
|
@@ -47,6 +47,7 @@ Assigns a task to a worker within the Team Leader's subordinate scope. Validates
|
|
|
47
47
|
| `--team` / `-g` | `teamId` | No | Team ID for hierarchy validation |
|
|
48
48
|
| `--tl-member` | `tlMemberId` | No | TL's member ID for hierarchy validation |
|
|
49
49
|
| `--from` | `fromSession` | No | Delegating TL's session name (for monitoring) |
|
|
50
|
+
| `--request-id` / `-R` | `requestId` | No | Ticket this work is for: the id (or `TKT-123`) from the `[TICKET:TKT-123 <id>]` line of the message you are acting on. Omit it and the task is still linked when your current turn has exactly one ticket |
|
|
50
51
|
|
|
51
52
|
## Request Contract check
|
|
52
53
|
|
|
@@ -16,6 +16,7 @@ PROJECT_PATH=""
|
|
|
16
16
|
TEAM_ID=""
|
|
17
17
|
TL_MEMBER_ID=""
|
|
18
18
|
FROM_SESSION=""
|
|
19
|
+
REQUEST_ID=""
|
|
19
20
|
|
|
20
21
|
# Detect legacy JSON argument
|
|
21
22
|
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
@@ -34,9 +35,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
34
35
|
--team|-g) TEAM_ID="$2"; shift 2 ;;
|
|
35
36
|
--tl-member) TL_MEMBER_ID="$2"; shift 2 ;;
|
|
36
37
|
--from) FROM_SESSION="$2"; shift 2 ;;
|
|
38
|
+
--request-id|-R) REQUEST_ID="$2"; shift 2 ;;
|
|
37
39
|
--json|-j) INPUT_JSON="$2"; shift 2 ;;
|
|
38
40
|
--help|-h)
|
|
39
|
-
echo "Usage: execute.sh --to worker-session --task 'implement feature' --priority high --project /path [--team teamId] [--tl-member memberId]"
|
|
41
|
+
echo "Usage: execute.sh --to worker-session --task 'implement feature' --priority high --project /path [--team teamId] [--tl-member memberId] [--request-id <ticket id from the [TICKET:TKT-123 <id>] line>]"
|
|
40
42
|
exit 0
|
|
41
43
|
;;
|
|
42
44
|
--) shift; break ;;
|
|
@@ -72,6 +74,7 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
72
74
|
[ -z "$TEAM_ID" ] && TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
|
|
73
75
|
[ -z "$TL_MEMBER_ID" ] && TL_MEMBER_ID=$(printf '%s' "$INPUT" | jq -r '.tlMemberId // empty')
|
|
74
76
|
[ -z "$FROM_SESSION" ] && FROM_SESSION=$(printf '%s' "$INPUT" | jq -r '.fromSession // empty')
|
|
77
|
+
[ -z "$REQUEST_ID" ] && REQUEST_ID=$(printf '%s' "$INPUT" | jq -r '.requestId // empty')
|
|
75
78
|
fi
|
|
76
79
|
|
|
77
80
|
require_param "to (--to)" "$TO"
|
|
@@ -208,7 +211,8 @@ POOL_BODY=$(jq -n \
|
|
|
208
211
|
--arg briefMarkdown "$TASK" \
|
|
209
212
|
--arg priority "$WI_PRIORITY" \
|
|
210
213
|
--arg projectPath "${PROJECT_PATH:-}" \
|
|
211
|
-
|
|
214
|
+
--arg requestId "${REQUEST_ID:-}" \
|
|
215
|
+
'{type: $type, owner: $owner, target: $target, title: $title, description: $description, briefMarkdown: $briefMarkdown, metadata: ({priority: $priority} + (if $projectPath != "" then {projectPath: $projectPath} else {} end))} + (if $requestId != "" then {requestId: $requestId} else {} end)')
|
|
212
216
|
|
|
213
217
|
POOL_RESULT=$(api_call POST "/task-pool/add" "$POOL_BODY" 2>/dev/null || echo '{"success":false}')
|
|
214
218
|
POOL_OK=$(echo "$POOL_RESULT" | jq -r '.success // "false"' 2>/dev/null)
|