crewly 1.6.0 → 1.6.2
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/roles/orchestrator/fragments/role-boundary.md +4 -1
- package/config/roles/orchestrator/prompt.md +53 -0
- package/config/roles/orchestrator/soul.md +47 -10
- package/config/skills/_common/lib.sh +28 -0
- package/config/skills/agent/core/cancel-followup/execute.sh +0 -19
- package/config/skills/agent/core/get-my-active-work/SKILL.md +101 -0
- package/config/skills/agent/core/get-my-active-work/execute.sh +122 -0
- package/config/skills/agent/core/list-my-followups/execute.sh +0 -19
- package/config/skills/agent/core/record-learning/SKILL.md +29 -0
- package/config/skills/agent/core/reply-channel/SKILL.md +41 -0
- package/config/skills/agent/core/reply-channel/execute.sh +165 -0
- package/config/skills/agent/core/reply-channel/execute.test.sh +148 -0
- package/config/skills/agent/core/schedule-followup/execute.sh +0 -19
- package/config/skills/agent/core/watch-for-event/execute.sh +0 -19
- package/config/skills/agent/remote-browser/execute.sh +296 -14
- package/config/skills/agent/remote-browser/execute.test.sh +482 -0
- package/config/skills/orchestrator/credential-manager/execute.test.sh +88 -0
- package/config/skills/orchestrator/send-message/SKILL.md +30 -7
- package/config/skills/orchestrator/team-health-scan/SKILL.md +98 -0
- package/config/skills/orchestrator/team-health-scan/execute.sh +44 -0
- package/config/skills/registry.json +62 -1
- package/config/sops/developer/git-workflow.md +38 -3
- package/dist/backend/backend/src/config/oauth.config.d.ts +33 -0
- package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -0
- package/dist/backend/backend/src/config/oauth.config.js +45 -0
- package/dist/backend/backend/src/config/oauth.config.js.map +1 -0
- package/dist/backend/backend/src/constants.d.ts +69 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +69 -2
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts +53 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +92 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +18 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +68 -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 +233 -5
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +10 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.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 +8 -3
- 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 +132 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +401 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +29 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +39 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.d.ts +8 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.js +8 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts +0 -26
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.js +47 -184
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.js +2 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts +40 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +162 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +13 -13
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +74 -234
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js +4 -6
- package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/skill/skill.controller.js +1 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +43 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +200 -72
- package/dist/backend/backend/src/controllers/task-management/tasks.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 +46 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts +59 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.js +127 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts +13 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.js +20 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +9 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +256 -4
- 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 +43 -6
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +498 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +759 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +25 -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 +193 -57
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +9 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +35 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +8 -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 +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js +2 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js +2 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +148 -3
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +241 -2
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +30 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +17 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +161 -0
- 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 +382 -2
- 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 +105 -0
- 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 +232 -13
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +178 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +254 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts +25 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js +23 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +254 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +467 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts +43 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js +54 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/config.d.ts +100 -0
- package/dist/backend/backend/src/services/chat-v2/config.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/config.js +174 -0
- package/dist/backend/backend/src/services/chat-v2/config.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/index.d.ts +11 -0
- package/dist/backend/backend/src/services/chat-v2/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/index.js +12 -0
- package/dist/backend/backend/src/services/chat-v2/index.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +114 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +194 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +100 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +351 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +132 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +281 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +295 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/types.js +61 -0
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +113 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +179 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +131 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +227 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/config.service.js +3 -3
- package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +15 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +69 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +118 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +275 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +736 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -2
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +123 -29
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.js +304 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +24 -4
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.d.ts +46 -2
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +216 -211
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +254 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +285 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +174 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +375 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +19 -4
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts +16 -5
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js +32 -5
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +157 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js +229 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +141 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.js +18 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.js.map +1 -0
- package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js +1 -1
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/task.service.js +5 -0
- package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +41 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.js +136 -7
- package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +17 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +39 -1
- 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 +158 -26
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +248 -6
- 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 +531 -51
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/team-health/index.d.ts +16 -0
- package/dist/backend/backend/src/services/team-health/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/index.js +16 -0
- package/dist/backend/backend/src/services/team-health/index.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts +52 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js +161 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts +53 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js +88 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts +44 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js +83 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts +92 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.js +328 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.d.ts +41 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.js +213 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts +46 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.js +347 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.d.ts +154 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.js +94 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts +111 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js +226 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +148 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +545 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +499 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +1105 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts +22 -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 +71 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +1 -0
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.js +22 -6
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +19 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +43 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +22 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/review-reason.types.d.ts +63 -0
- package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/review-reason.types.js +50 -0
- package/dist/backend/backend/src/types/review-reason.types.js.map +1 -0
- package/dist/backend/backend/src/types/skill.types.d.ts +9 -0
- package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/skill.types.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +4 -1
- 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/v2/mission.types.d.ts +18 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +1 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -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 +25 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts +41 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.js +44 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/team.utils.d.ts +38 -0
- package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/team.utils.js +45 -0
- package/dist/backend/backend/src/utils/team.utils.js.map +1 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +195 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js +401 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +37 -2
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +106 -5
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.d.ts +33 -0
- package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -0
- package/dist/cli/backend/src/config/oauth.config.js +45 -0
- package/dist/cli/backend/src/config/oauth.config.js.map +1 -0
- package/dist/cli/backend/src/constants.d.ts +69 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +69 -2
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/core/config.service.js +3 -3
- package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +15 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -2
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +123 -29
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +24 -4
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.d.ts +46 -2
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +216 -211
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +254 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +285 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -0
- package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts +18 -0
- package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/skill/skill-executor.service.js +7 -9
- package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +22 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/skill.types.d.ts +9 -0
- package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/skill.types.js.map +1 -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 +25 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts +41 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.js +44 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.js.map +1 -0
- package/frontend/dist/assets/{index-9e6d97d1.js → index-7a4e7df5.js} +328 -326
- package/frontend/dist/assets/index-b7e59b2b.css +33 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -1
- package/config/skills/orchestrator/recall/SKILL.md +0 -47
- package/config/skills/orchestrator/recall/execute.sh +0 -13
- package/config/skills/orchestrator/record-learning/SKILL.md +0 -47
- package/config/skills/orchestrator/record-learning/execute.sh +0 -13
- package/config/skills/orchestrator/remember/SKILL.md +0 -55
- package/config/skills/orchestrator/remember/execute.sh +0 -15
- package/frontend/dist/assets/index-6aaa0630.css +0 -33
|
@@ -5,6 +5,22 @@
|
|
|
5
5
|
# Sends commands to the backend /api/browser/* HTTP endpoints, which
|
|
6
6
|
# forward them to the Chrome Extension over WebSocket.
|
|
7
7
|
#
|
|
8
|
+
# Per-tab dispatch (§3.2 of the per-tab-fix spec):
|
|
9
|
+
# When `CREWLY_SESSION_NAME` is set in the agent's environment,
|
|
10
|
+
# `_common/lib.sh::api_call` automatically forwards it as the
|
|
11
|
+
# `X-Agent-Session` header. Backend uses this to dispatch each
|
|
12
|
+
# command to the agent's bound Chrome tab instead of the user's
|
|
13
|
+
# currently-active tab.
|
|
14
|
+
#
|
|
15
|
+
# The first command from a fresh agent triggers backend auto-bind
|
|
16
|
+
# (creates a new background tab). The skill caches the resulting
|
|
17
|
+
# tabId in `~/.crewly/runtime/<agentSession>/browser-tab-id` so
|
|
18
|
+
# subsequent calls skip the auto-bind round-trip.
|
|
19
|
+
#
|
|
20
|
+
# Backward compat: when `CREWLY_SESSION_NAME` is unset OR the
|
|
21
|
+
# `--no-bind` flag is given, behavior reverts to the legacy
|
|
22
|
+
# active-tab path (existing scripts work unchanged).
|
|
23
|
+
#
|
|
8
24
|
# Usage:
|
|
9
25
|
# bash execute.sh '{"action":"navigate","url":"https://example.com"}'
|
|
10
26
|
# bash execute.sh '{"action":"screenshot"}'
|
|
@@ -12,6 +28,21 @@
|
|
|
12
28
|
# bash execute.sh '{"action":"status"}'
|
|
13
29
|
# bash execute.sh --action navigate --url https://example.com
|
|
14
30
|
#
|
|
31
|
+
# Per-tab actions:
|
|
32
|
+
# bind-tab — Explicitly bind a tab for this agent.
|
|
33
|
+
# Returns { tabId }. Caches tabId locally.
|
|
34
|
+
# Optional flag: --active (foreground new tab; default off)
|
|
35
|
+
# unbind-tab — Release this agent's bound tab and (by
|
|
36
|
+
# default) close it.
|
|
37
|
+
#
|
|
38
|
+
# Per-tab flags (apply to any action):
|
|
39
|
+
# --tab-id <number> Pin the call to a specific tabId. Skips
|
|
40
|
+
# binding lookup. Used for tests + debugging.
|
|
41
|
+
# --no-bind Force the legacy active-tab path for this
|
|
42
|
+
# call (drops the X-Agent-Session header).
|
|
43
|
+
# --active Only meaningful with `bind-tab`: foreground
|
|
44
|
+
# the new tab on creation.
|
|
45
|
+
#
|
|
15
46
|
# Supported actions and their parameters:
|
|
16
47
|
# status — connection status (no params)
|
|
17
48
|
# navigate — { url: string }
|
|
@@ -34,7 +65,11 @@
|
|
|
34
65
|
# get-interactive-elements — { textContains?: string }
|
|
35
66
|
# search-text — { text: string, exact?: boolean }
|
|
36
67
|
# list-options — { selector: string }
|
|
68
|
+
# select-option — { selector: string, value?: string, label?: string,
|
|
69
|
+
# index?: number, strategy?: "native" | "aria" }
|
|
37
70
|
# set-file-input — { selector: string, filePaths: string[] }
|
|
71
|
+
# bind-tab — bind a fresh tab for this agent
|
|
72
|
+
# unbind-tab — release this agent's bound tab
|
|
38
73
|
|
|
39
74
|
set -euo pipefail
|
|
40
75
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
@@ -48,6 +83,9 @@ VALUE=""
|
|
|
48
83
|
TEXT=""
|
|
49
84
|
CODE=""
|
|
50
85
|
EXTRA_PARAMS=""
|
|
86
|
+
TAB_ID="" # --tab-id <N>: explicit override
|
|
87
|
+
NO_BIND="false" # --no-bind: drop X-Agent-Session for this call
|
|
88
|
+
FOREGROUND="false" # --active: only meaningful with bind-tab
|
|
51
89
|
|
|
52
90
|
# Detect legacy JSON argument
|
|
53
91
|
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
@@ -89,6 +127,18 @@ while [[ $# -gt 0 ]]; do
|
|
|
89
127
|
INPUT_JSON="$2"
|
|
90
128
|
shift 2
|
|
91
129
|
;;
|
|
130
|
+
--tab-id)
|
|
131
|
+
TAB_ID="$2"
|
|
132
|
+
shift 2
|
|
133
|
+
;;
|
|
134
|
+
--no-bind)
|
|
135
|
+
NO_BIND="true"
|
|
136
|
+
shift
|
|
137
|
+
;;
|
|
138
|
+
--active)
|
|
139
|
+
FOREGROUND="true"
|
|
140
|
+
shift
|
|
141
|
+
;;
|
|
92
142
|
--help|-h)
|
|
93
143
|
echo "Usage: execute.sh --action navigate --url https://example.com"
|
|
94
144
|
echo " execute.sh '{\"action\":\"screenshot\"}'"
|
|
@@ -97,7 +147,7 @@ while [[ $# -gt 0 ]]; do
|
|
|
97
147
|
echo " scroll, hover, press-key, get-element, wait-for-selector,"
|
|
98
148
|
echo " execute-js, tabs, cookies, console, local-storage,"
|
|
99
149
|
echo " get-interactive-elements, search-text, full-page-screenshot,"
|
|
100
|
-
echo " list-options, set-file-input"
|
|
150
|
+
echo " list-options, select-option, set-file-input"
|
|
101
151
|
exit 0
|
|
102
152
|
;;
|
|
103
153
|
--)
|
|
@@ -134,14 +184,124 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
134
184
|
[ -z "$VALUE" ] && VALUE=$(printf '%s' "$INPUT" | jq -r '.value // empty')
|
|
135
185
|
[ -z "$TEXT" ] && TEXT=$(printf '%s' "$INPUT" | jq -r '.text // empty')
|
|
136
186
|
[ -z "$CODE" ] && CODE=$(printf '%s' "$INPUT" | jq -r '.code // empty')
|
|
137
|
-
#
|
|
187
|
+
# Per-tab dispatch fields surfaced in JSON input. CLI flags win over JSON
|
|
188
|
+
# (CLI is more explicit). Empty string = "not provided".
|
|
189
|
+
if [ -z "$TAB_ID" ]; then
|
|
190
|
+
TAB_ID=$(printf '%s' "$INPUT" | jq -r '.tabId // empty')
|
|
191
|
+
fi
|
|
192
|
+
if [ "$NO_BIND" = "false" ]; then
|
|
193
|
+
json_no_bind=$(printf '%s' "$INPUT" | jq -r '.noBind // empty')
|
|
194
|
+
[ "$json_no_bind" = "true" ] && NO_BIND="true"
|
|
195
|
+
fi
|
|
196
|
+
if [ "$FOREGROUND" = "false" ]; then
|
|
197
|
+
json_active=$(printf '%s' "$INPUT" | jq -r '.active // empty')
|
|
198
|
+
[ "$json_active" = "true" ] && FOREGROUND="true"
|
|
199
|
+
fi
|
|
200
|
+
# Capture all extra fields from JSON input as pass-through params (strip
|
|
201
|
+
# per-tab fields too — they're handled by the dedicated branches below).
|
|
138
202
|
if [ -z "$EXTRA_PARAMS" ]; then
|
|
139
|
-
EXTRA_PARAMS=$(printf '%s' "$INPUT" | jq -c 'del(.action, .url, .selector, .value, .text, .code) | if length == 0 then empty else . end' 2>/dev/null || true)
|
|
203
|
+
EXTRA_PARAMS=$(printf '%s' "$INPUT" | jq -c 'del(.action, .url, .selector, .value, .text, .code, .tabId, .noBind, .active) | if length == 0 then empty else . end' 2>/dev/null || true)
|
|
140
204
|
fi
|
|
141
205
|
fi
|
|
142
206
|
|
|
143
207
|
require_param "action (--action)" "$ACTION"
|
|
144
208
|
|
|
209
|
+
# ---- Per-tab dispatch helpers (§3.2) ----
|
|
210
|
+
#
|
|
211
|
+
# Cache file lives under each agent's runtime dir so concurrent agents on
|
|
212
|
+
# the same machine don't stomp each other:
|
|
213
|
+
# ~/.crewly/runtime/<agentSession>/browser-tab-id
|
|
214
|
+
#
|
|
215
|
+
# Override-able via $CREWLY_RUNTIME_DIR for test harnesses.
|
|
216
|
+
_tab_cache_path() {
|
|
217
|
+
local agent_session="${1:-}"
|
|
218
|
+
[ -z "$agent_session" ] && return 1
|
|
219
|
+
local runtime_dir="${CREWLY_RUNTIME_DIR:-${HOME}/.crewly/runtime}"
|
|
220
|
+
printf '%s/%s/browser-tab-id' "$runtime_dir" "$agent_session"
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
_load_cached_tab() {
|
|
224
|
+
local cache_path
|
|
225
|
+
cache_path=$(_tab_cache_path "${CREWLY_SESSION_NAME:-}") || return 1
|
|
226
|
+
[ -f "$cache_path" ] || return 1
|
|
227
|
+
local cached
|
|
228
|
+
cached=$(cat "$cache_path" 2>/dev/null | tr -d '[:space:]')
|
|
229
|
+
# Reject non-numeric / empty caches as a defensive measure.
|
|
230
|
+
if [[ "$cached" =~ ^[0-9]+$ ]]; then
|
|
231
|
+
printf '%s' "$cached"
|
|
232
|
+
return 0
|
|
233
|
+
fi
|
|
234
|
+
return 1
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
_store_cached_tab() {
|
|
238
|
+
local tab_id="$1"
|
|
239
|
+
local cache_path
|
|
240
|
+
cache_path=$(_tab_cache_path "${CREWLY_SESSION_NAME:-}") || return 1
|
|
241
|
+
mkdir -p "$(dirname "$cache_path")" 2>/dev/null || true
|
|
242
|
+
printf '%s' "$tab_id" > "$cache_path"
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
_purge_cached_tab() {
|
|
246
|
+
local cache_path
|
|
247
|
+
cache_path=$(_tab_cache_path "${CREWLY_SESSION_NAME:-}") || return 0
|
|
248
|
+
rm -f "$cache_path" 2>/dev/null || true
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
# Returns the JSON body to send: $1 if non-empty, otherwise the canonical
|
|
252
|
+
# empty-object literal `{}`. This replaces the `${EXTRA_PARAMS:-{}}` pattern,
|
|
253
|
+
# which is mis-parsed by bash: the closing `}` of the parameter expansion is
|
|
254
|
+
# the FIRST `}` it sees, so `${EXTRA_PARAMS:-{}}` becomes `${EXTRA_PARAMS:-{}`
|
|
255
|
+
# (default = the literal `{`) followed by a stray literal `}`. The bug only
|
|
256
|
+
# surfaces when EXTRA_PARAMS is set — then the body is `<value>}` with a
|
|
257
|
+
# trailing extra `}` that fails JSON parse server-side, triggering 400 errors
|
|
258
|
+
# on scroll / press-key / local-storage / get-interactive-elements / set-file-input
|
|
259
|
+
# / scroll-in-element / execute-js fallback. When EXTRA_PARAMS is empty, the
|
|
260
|
+
# bug masks itself by accident (the `{` default + stray `}` happen to spell
|
|
261
|
+
# `{}`).
|
|
262
|
+
#
|
|
263
|
+
# @stdout the JSON body string (no trailing newline)
|
|
264
|
+
# @example BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
265
|
+
_body_or_empty() {
|
|
266
|
+
local v="${1:-}"
|
|
267
|
+
if [ -n "$v" ]; then
|
|
268
|
+
printf '%s' "$v"
|
|
269
|
+
else
|
|
270
|
+
printf '%s' '{}'
|
|
271
|
+
fi
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
# Inject `tabId` into a JSON body if we have one, leaving an explicit override
|
|
275
|
+
# alone. Reads BODY as input, sets BODY to the augmented version. Always emits
|
|
276
|
+
# compact (single-line) JSON via `jq -c` so downstream consumers and test
|
|
277
|
+
# assertions see a stable wire shape.
|
|
278
|
+
_augment_body_with_tab_id() {
|
|
279
|
+
local tab_id="$1"
|
|
280
|
+
if [ -z "$tab_id" ]; then return 0; fi
|
|
281
|
+
if [ -z "$BODY" ] || [ "$BODY" = "{}" ]; then
|
|
282
|
+
BODY=$(jq -n -c --argjson t "$tab_id" '{tabId: $t}')
|
|
283
|
+
else
|
|
284
|
+
BODY=$(printf '%s' "$BODY" | jq -c --argjson t "$tab_id" '. + {tabId: $t}')
|
|
285
|
+
fi
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
# Effective tabId for this call: explicit --tab-id wins; otherwise look up
|
|
289
|
+
# the local cache when CREWLY_SESSION_NAME is set and --no-bind is NOT in
|
|
290
|
+
# effect. Empty string when nothing is determined.
|
|
291
|
+
_effective_tab_id() {
|
|
292
|
+
if [ -n "$TAB_ID" ]; then
|
|
293
|
+
printf '%s' "$TAB_ID"
|
|
294
|
+
return 0
|
|
295
|
+
fi
|
|
296
|
+
if [ "$NO_BIND" = "true" ]; then
|
|
297
|
+
return 0
|
|
298
|
+
fi
|
|
299
|
+
if [ -z "${CREWLY_SESSION_NAME:-}" ]; then
|
|
300
|
+
return 0
|
|
301
|
+
fi
|
|
302
|
+
_load_cached_tab || true
|
|
303
|
+
}
|
|
304
|
+
|
|
145
305
|
# ---- Map action to HTTP method + endpoint + body ----
|
|
146
306
|
|
|
147
307
|
METHOD="POST"
|
|
@@ -198,11 +358,11 @@ case "$ACTION" in
|
|
|
198
358
|
;;
|
|
199
359
|
scroll)
|
|
200
360
|
ENDPOINT="/browser/scroll"
|
|
201
|
-
BODY
|
|
361
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
202
362
|
;;
|
|
203
363
|
scroll-in-element)
|
|
204
364
|
ENDPOINT="/browser/scroll-in-element"
|
|
205
|
-
BODY
|
|
365
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
206
366
|
;;
|
|
207
367
|
hover)
|
|
208
368
|
require_param "selector (--selector)" "$SELECTOR"
|
|
@@ -211,7 +371,7 @@ case "$ACTION" in
|
|
|
211
371
|
;;
|
|
212
372
|
press-key)
|
|
213
373
|
ENDPOINT="/browser/press-key"
|
|
214
|
-
BODY
|
|
374
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
215
375
|
;;
|
|
216
376
|
get-element)
|
|
217
377
|
require_param "selector (--selector)" "$SELECTOR"
|
|
@@ -228,7 +388,7 @@ case "$ACTION" in
|
|
|
228
388
|
if [ -n "$CODE" ]; then
|
|
229
389
|
BODY=$(jq -n --arg c "$CODE" '{code: $c}')
|
|
230
390
|
else
|
|
231
|
-
BODY
|
|
391
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
232
392
|
fi
|
|
233
393
|
;;
|
|
234
394
|
tabs)
|
|
@@ -245,11 +405,11 @@ case "$ACTION" in
|
|
|
245
405
|
;;
|
|
246
406
|
local-storage)
|
|
247
407
|
ENDPOINT="/browser/local-storage"
|
|
248
|
-
BODY
|
|
408
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
249
409
|
;;
|
|
250
410
|
get-interactive-elements)
|
|
251
411
|
ENDPOINT="/browser/get-interactive-elements"
|
|
252
|
-
BODY
|
|
412
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
253
413
|
;;
|
|
254
414
|
search-text)
|
|
255
415
|
require_param "text (--text)" "$TEXT"
|
|
@@ -261,9 +421,28 @@ case "$ACTION" in
|
|
|
261
421
|
ENDPOINT="/browser/list-options"
|
|
262
422
|
BODY=$(jq -n --arg s "$SELECTOR" '{selector: $s}')
|
|
263
423
|
;;
|
|
424
|
+
select-option)
|
|
425
|
+
# Select an option in a native <select> by value / label / index.
|
|
426
|
+
# Resolution priority: value > label > index. The selector itself is
|
|
427
|
+
# always required. When --params is supplied we accept it as the
|
|
428
|
+
# canonical body source (lets agents pass {label,...} or {index,...}
|
|
429
|
+
# without dedicated CLI flags); otherwise we project --selector +
|
|
430
|
+
# --value into the body.
|
|
431
|
+
require_param "selector (--selector)" "$SELECTOR"
|
|
432
|
+
ENDPOINT="/browser/select-option"
|
|
433
|
+
if [ -n "$EXTRA_PARAMS" ]; then
|
|
434
|
+
# Merge --selector into the supplied params so callers don't have
|
|
435
|
+
# to duplicate it. `jq` overwrites EXTRA_PARAMS.selector if absent.
|
|
436
|
+
BODY=$(printf '%s' "$EXTRA_PARAMS" | jq -c --arg s "$SELECTOR" '. + {selector: ($s)}')
|
|
437
|
+
elif [ -n "$VALUE" ]; then
|
|
438
|
+
BODY=$(jq -n -c --arg s "$SELECTOR" --arg v "$VALUE" '{selector: $s, value: $v}')
|
|
439
|
+
else
|
|
440
|
+
error_exit "select-option requires --value (or --params with value/label/index)"
|
|
441
|
+
fi
|
|
442
|
+
;;
|
|
264
443
|
set-file-input)
|
|
265
444
|
ENDPOINT="/browser/set-file-input"
|
|
266
|
-
BODY
|
|
445
|
+
BODY=$(_body_or_empty "$EXTRA_PARAMS")
|
|
267
446
|
;;
|
|
268
447
|
proxy-connect)
|
|
269
448
|
ENDPOINT="/browser/proxy/connect"
|
|
@@ -273,15 +452,118 @@ case "$ACTION" in
|
|
|
273
452
|
METHOD="GET"
|
|
274
453
|
ENDPOINT="/browser/instances"
|
|
275
454
|
;;
|
|
455
|
+
bind-tab)
|
|
456
|
+
ENDPOINT="/browser/bind"
|
|
457
|
+
if [ "$FOREGROUND" = "true" ]; then
|
|
458
|
+
BODY=$(jq -n -c '{active: true}')
|
|
459
|
+
else
|
|
460
|
+
BODY="{}"
|
|
461
|
+
fi
|
|
462
|
+
;;
|
|
463
|
+
unbind-tab)
|
|
464
|
+
ENDPOINT="/browser/unbind"
|
|
465
|
+
BODY="{}"
|
|
466
|
+
;;
|
|
276
467
|
*)
|
|
277
468
|
error_exit "Unknown action: $ACTION. Run with --help for supported actions."
|
|
278
469
|
;;
|
|
279
470
|
esac
|
|
280
471
|
|
|
281
|
-
# ----
|
|
472
|
+
# ---- Per-tab dispatch: tabId injection + cache handling -----------------
|
|
473
|
+
#
|
|
474
|
+
# For data-plane actions (everything other than bind/unbind/status/instances),
|
|
475
|
+
# fold a tabId into the request body when we know one. The backend treats
|
|
476
|
+
# `tabId` in the body as an explicit override and skips its own binding
|
|
477
|
+
# lookup, so this also covers the cached-tabId fast path.
|
|
478
|
+
case "$ACTION" in
|
|
479
|
+
status|instances|tabs|bind-tab|unbind-tab)
|
|
480
|
+
: # control-plane / read-only — leave BODY alone
|
|
481
|
+
;;
|
|
482
|
+
*)
|
|
483
|
+
EFFECTIVE_TAB_ID=$(_effective_tab_id || true)
|
|
484
|
+
if [ -n "$EFFECTIVE_TAB_ID" ]; then
|
|
485
|
+
_augment_body_with_tab_id "$EFFECTIVE_TAB_ID"
|
|
486
|
+
fi
|
|
487
|
+
;;
|
|
488
|
+
esac
|
|
489
|
+
|
|
490
|
+
# ---- Execute the API call ------------------------------------------------
|
|
491
|
+
#
|
|
492
|
+
# `--no-bind` short-circuits backend per-tab routing by stripping the
|
|
493
|
+
# X-Agent-Session header for this single call (api_call reads it from the
|
|
494
|
+
# env). Using a subshell to scope the unset.
|
|
495
|
+
|
|
496
|
+
run_api_call() {
|
|
497
|
+
if [ "$METHOD" = "GET" ]; then
|
|
498
|
+
api_call GET "$ENDPOINT"
|
|
499
|
+
else
|
|
500
|
+
api_call POST "$ENDPOINT" "$BODY"
|
|
501
|
+
fi
|
|
502
|
+
}
|
|
282
503
|
|
|
283
|
-
if [ "$
|
|
284
|
-
|
|
504
|
+
if [ "$NO_BIND" = "true" ]; then
|
|
505
|
+
( unset CREWLY_SESSION_NAME; run_api_call )
|
|
506
|
+
RESPONSE_EXIT=$?
|
|
285
507
|
else
|
|
286
|
-
|
|
508
|
+
set +e
|
|
509
|
+
RESPONSE=$(run_api_call 2>/tmp/remote-browser-stderr-$$)
|
|
510
|
+
RESPONSE_EXIT=$?
|
|
511
|
+
set -e
|
|
512
|
+
STDERR_CAPTURE=""
|
|
513
|
+
[ -f /tmp/remote-browser-stderr-$$ ] && STDERR_CAPTURE=$(cat /tmp/remote-browser-stderr-$$)
|
|
514
|
+
rm -f /tmp/remote-browser-stderr-$$ 2>/dev/null || true
|
|
515
|
+
fi
|
|
516
|
+
|
|
517
|
+
# When NO_BIND was true, the call already streamed to stdout/stderr — exit
|
|
518
|
+
# carrying its status. Otherwise, post-process: cache management on
|
|
519
|
+
# bind/unbind, plus a single 404 retry for stale cached tabIds.
|
|
520
|
+
if [ "$NO_BIND" = "true" ]; then
|
|
521
|
+
exit "$RESPONSE_EXIT"
|
|
522
|
+
fi
|
|
523
|
+
|
|
524
|
+
# 404 with `tab_not_found` indicates our cached tabId is stale (Extension
|
|
525
|
+
# closed the tab while we weren't looking). Purge cache and retry the call
|
|
526
|
+
# WITHOUT a cached tabId so the backend auto-binds a fresh one.
|
|
527
|
+
if [ "$RESPONSE_EXIT" -ne 0 ] \
|
|
528
|
+
&& [ -n "$STDERR_CAPTURE" ] \
|
|
529
|
+
&& printf '%s' "$STDERR_CAPTURE" | grep -q '"status":404' \
|
|
530
|
+
&& printf '%s' "$STDERR_CAPTURE" | grep -q 'tab_not_found' \
|
|
531
|
+
&& [ -n "${CREWLY_SESSION_NAME:-}" ]; then
|
|
532
|
+
_purge_cached_tab
|
|
533
|
+
# Drop tabId from BODY for the retry — fall through to backend auto-bind.
|
|
534
|
+
if [ -n "$BODY" ] && [ "$BODY" != "{}" ]; then
|
|
535
|
+
BODY=$(printf '%s' "$BODY" | jq -c 'del(.tabId)' 2>/dev/null || printf '%s' "$BODY")
|
|
536
|
+
fi
|
|
537
|
+
set +e
|
|
538
|
+
RESPONSE=$(run_api_call 2>/tmp/remote-browser-stderr-$$)
|
|
539
|
+
RESPONSE_EXIT=$?
|
|
540
|
+
set -e
|
|
541
|
+
STDERR_CAPTURE=""
|
|
542
|
+
[ -f /tmp/remote-browser-stderr-$$ ] && STDERR_CAPTURE=$(cat /tmp/remote-browser-stderr-$$)
|
|
543
|
+
rm -f /tmp/remote-browser-stderr-$$ 2>/dev/null || true
|
|
544
|
+
fi
|
|
545
|
+
|
|
546
|
+
# On a successful bind-tab, persist the new tabId. On unbind-tab, purge.
|
|
547
|
+
if [ "$RESPONSE_EXIT" -eq 0 ] && [ -n "${CREWLY_SESSION_NAME:-}" ]; then
|
|
548
|
+
case "$ACTION" in
|
|
549
|
+
bind-tab)
|
|
550
|
+
new_tab=$(printf '%s' "$RESPONSE" | jq -r '.data.tabId // empty' 2>/dev/null || true)
|
|
551
|
+
if [[ "$new_tab" =~ ^[0-9]+$ ]]; then
|
|
552
|
+
_store_cached_tab "$new_tab"
|
|
553
|
+
fi
|
|
554
|
+
;;
|
|
555
|
+
unbind-tab)
|
|
556
|
+
_purge_cached_tab
|
|
557
|
+
;;
|
|
558
|
+
esac
|
|
559
|
+
fi
|
|
560
|
+
|
|
561
|
+
# Re-emit captured streams so the caller sees the same shape api_call
|
|
562
|
+
# would have produced. stdout always goes through; stderr only on failure.
|
|
563
|
+
if [ -n "$RESPONSE" ]; then
|
|
564
|
+
printf '%s\n' "$RESPONSE"
|
|
565
|
+
fi
|
|
566
|
+
if [ "$RESPONSE_EXIT" -ne 0 ] && [ -n "$STDERR_CAPTURE" ]; then
|
|
567
|
+
printf '%s\n' "$STDERR_CAPTURE" >&2
|
|
287
568
|
fi
|
|
569
|
+
exit "$RESPONSE_EXIT"
|