crewly 1.13.1 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/constants.ts +8 -0
- package/config/roles/orchestrator/prompt.md +23 -0
- package/config/skills/agent/core/reply-channel/SKILL.md +6 -0
- package/config/skills/agent/core/reply-channel/execute.sh +14 -2
- package/config/skills/agent/core/slack-post/SKILL.md +126 -0
- package/config/skills/agent/core/slack-post/execute.sh +127 -0
- package/config/skills/agent/remote-browser/SKILL.md +178 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
- package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
- package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
- package/config/skills/orchestrator/get-team-status/SKILL.md +5 -1
- package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
- package/config/slack-app-manifest.json +7 -1
- package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
- package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/backend/backend/src/config/oauth.config.js +121 -19
- package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
- package/dist/backend/backend/src/constants.d.ts +60 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +74 -0
- package/dist/backend/backend/src/constants.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 +33 -4
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
- package/dist/backend/backend/src/controllers/credentials/google-oauth.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 +342 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +31 -7
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- 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 +13 -11
- 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 +14 -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 +56 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
- 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 +19 -7
- 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.service.d.ts +66 -0
- 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 +121 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +35 -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 +63 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -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 +1 -1
- 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.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- 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-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +34 -0
- 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 +99 -10
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
- 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 +18 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -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 +297 -3
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +22 -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 +71 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +36 -2
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +86 -10
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +87 -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/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +8 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +8 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.d.ts +93 -19
- package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.js +121 -19
- package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +60 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +74 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +292 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +66 -0
- 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 +121 -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 +35 -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 +63 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -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 +1 -1
- 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.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
- 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 +18 -0
- 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 +329 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +116 -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 +297 -3
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +87 -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/utils/team.utils.d.ts +40 -0
- package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/team.utils.js +66 -0
- package/dist/cli/backend/src/utils/team.utils.js.map +1 -0
- package/dist/cli/cli/src/index.js +0 -0
- package/dist/cli/config/constants.d.ts +8 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +8 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/{index-890d3f9d.js → index-190a957f.js} +294 -294
- package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/config/constants.d.ts.map +0 -1
- package/config/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
- package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
- package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.js +0 -8
- package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
- package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
- package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.js +0 -38
- package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
- package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.js +0 -38
- package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
|
@@ -1,58 +1,49 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# 小宇宙 Podcast Transcript —
|
|
2
|
+
# 小宇宙 Podcast Transcript — fetch an episode and transcribe it.
|
|
3
3
|
#
|
|
4
|
-
# Pipeline: URL → HTML → audio URL → download →
|
|
4
|
+
# Pipeline: URL → HTML → audio URL → download → transcribe-audio (Whisper)
|
|
5
5
|
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
6
|
+
# This skill owns the 小宇宙 part: resolving an episode URL to its audio and
|
|
7
|
+
# labelling the result. Transcription itself is delegated to the
|
|
8
|
+
# `transcribe-audio` skill, so there is exactly one Whisper integration in the
|
|
9
|
+
# repo to maintain and this skill inherits its engine selection (local
|
|
10
|
+
# whisper.cpp by default, OpenAI Whisper API as fallback).
|
|
8
11
|
#
|
|
9
12
|
# Usage:
|
|
10
13
|
# bash execute.sh '{"url":"https://www.xiaoyuzhoufm.com/episode/69bbc8ea3c625cc5ae21b461"}'
|
|
11
14
|
# bash execute.sh '{"url":"...","outputFile":"/path/to/transcript.md"}'
|
|
12
15
|
# bash execute.sh '{"audioFile":"/path/to/local.m4a"}'
|
|
16
|
+
# bash execute.sh '{"url":"...","engine":"openai"}'
|
|
13
17
|
#
|
|
14
|
-
# Requires:
|
|
18
|
+
# Requires: curl, jq, and whatever `transcribe-audio` needs (ffmpeg + a Whisper
|
|
19
|
+
# engine). No API key is needed on the default local path.
|
|
15
20
|
|
|
16
21
|
set -euo pipefail
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
GEMINI_UPLOAD_URL="${GEMINI_API_BASE}/upload/v1beta/files"
|
|
22
|
-
GEMINI_CONTENT_URL="${GEMINI_API_BASE}/v1beta/models/${MODEL}:generateContent"
|
|
23
|
-
MAX_WAIT_SECONDS=300
|
|
24
|
-
CHUNK_DURATION_SECONDS=600 # 10 minutes per chunk
|
|
23
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
TRANSCRIBE_SKILL="${SCRIPT_DIR}/../transcribe-audio/execute.sh"
|
|
25
|
+
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
|
|
25
26
|
|
|
26
27
|
# ── Input parsing ──────────────────────────────────────────────────────────────
|
|
27
28
|
INPUT="${1:-}"
|
|
28
29
|
if [ -z "$INPUT" ]; then
|
|
29
|
-
echo '{"success":false,"error":"Usage: execute.sh
|
|
30
|
+
echo '{"success":false,"error":"Usage: execute.sh '{\"url\":\"https://www.xiaoyuzhoufm.com/episode/...\"}'"}'
|
|
30
31
|
exit 1
|
|
31
32
|
fi
|
|
32
33
|
|
|
33
|
-
URL=$(
|
|
34
|
-
AUDIO_FILE=$(
|
|
35
|
-
OUTPUT_FILE=$(
|
|
36
|
-
LANGUAGE=$(
|
|
34
|
+
URL=$(printf '%s' "$INPUT" | jq -r '.url // empty')
|
|
35
|
+
AUDIO_FILE=$(printf '%s' "$INPUT" | jq -r '.audioFile // empty')
|
|
36
|
+
OUTPUT_FILE=$(printf '%s' "$INPUT" | jq -r '.outputFile // empty')
|
|
37
|
+
LANGUAGE=$(printf '%s' "$INPUT" | jq -r '.language // "auto"')
|
|
38
|
+
ENGINE=$(printf '%s' "$INPUT" | jq -r '.engine // "auto"')
|
|
37
39
|
|
|
38
40
|
if [ -z "$URL" ] && [ -z "$AUDIO_FILE" ]; then
|
|
39
41
|
echo '{"success":false,"error":"Either url or audioFile is required"}'
|
|
40
42
|
exit 1
|
|
41
43
|
fi
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
echo '{"success":false,"error":"ffmpeg is required but not installed. Install via: brew install ffmpeg"}'
|
|
46
|
-
exit 1
|
|
47
|
-
fi
|
|
48
|
-
|
|
49
|
-
# ── API key resolution ─────────────────────────────────────────────────────────
|
|
50
|
-
if [ -z "${GEMINI_API_KEY:-}" ]; then
|
|
51
|
-
GEMINI_API_KEY=$(curl -sf "http://localhost:8787/api/settings" 2>/dev/null \
|
|
52
|
-
| jq -r '.data.apiKeys.global.gemini // empty' 2>/dev/null || true)
|
|
53
|
-
fi
|
|
54
|
-
if [ -z "${GEMINI_API_KEY:-}" ]; then
|
|
55
|
-
echo '{"success":false,"error":"GEMINI_API_KEY not set. Set via environment or Settings > API Keys."}'
|
|
45
|
+
if [ ! -f "$TRANSCRIBE_SKILL" ]; then
|
|
46
|
+
echo "{\"success\":false,\"error\":$(printf '%s' "transcribe-audio skill not found at ${TRANSCRIBE_SKILL}" | jq -Rs .)}"
|
|
56
47
|
exit 1
|
|
57
48
|
fi
|
|
58
49
|
|
|
@@ -61,17 +52,16 @@ TMPDIR_WORK=$(mktemp -d /tmp/xiaoyuzhoufm-XXXXXX)
|
|
|
61
52
|
cleanup() { rm -rf "$TMPDIR_WORK"; }
|
|
62
53
|
trap cleanup EXIT
|
|
63
54
|
|
|
64
|
-
# ── Step 1:
|
|
55
|
+
# ── Step 1: Resolve the episode URL to a downloadable audio file ───────────────
|
|
65
56
|
TITLE="Unknown Episode"
|
|
66
57
|
AUDIO_URL=""
|
|
58
|
+
DOWNLOADED=0
|
|
67
59
|
|
|
68
60
|
if [ -n "$URL" ] && [ -z "$AUDIO_FILE" ]; then
|
|
69
61
|
echo '{"status":"fetching","message":"Fetching episode page..."}' >&2
|
|
70
62
|
|
|
71
63
|
HTML_FILE="${TMPDIR_WORK}/page.html"
|
|
72
|
-
curl -sL -o "$HTML_FILE"
|
|
73
|
-
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
|
|
74
|
-
"$URL" 2>/dev/null
|
|
64
|
+
curl -sL -o "$HTML_FILE" -H "$UA" "$URL" 2>/dev/null || true
|
|
75
65
|
|
|
76
66
|
if [ ! -s "$HTML_FILE" ]; then
|
|
77
67
|
echo '{"success":false,"error":"Failed to fetch episode page"}'
|
|
@@ -93,198 +83,70 @@ if [ -n "$URL" ] && [ -z "$AUDIO_FILE" ]; then
|
|
|
93
83
|
exit 1
|
|
94
84
|
fi
|
|
95
85
|
|
|
96
|
-
echo "{\"status\":\"downloading\",\"message\":\"Downloading audio...\",\"title\":$(
|
|
86
|
+
echo "{\"status\":\"downloading\",\"message\":\"Downloading audio...\",\"title\":$(printf '%s' "$TITLE" | jq -Rs .)}" >&2
|
|
97
87
|
|
|
98
88
|
AUDIO_FILE="${TMPDIR_WORK}/audio.m4a"
|
|
99
|
-
curl -sL -o "$AUDIO_FILE"
|
|
100
|
-
|
|
101
|
-
-H "Referer: https://www.xiaoyuzhoufm.com/" \
|
|
102
|
-
"$AUDIO_URL" 2>/dev/null
|
|
89
|
+
curl -sL -o "$AUDIO_FILE" -H "$UA" "$AUDIO_URL"
|
|
90
|
+
DOWNLOADED=1
|
|
103
91
|
|
|
104
92
|
if [ ! -s "$AUDIO_FILE" ]; then
|
|
105
|
-
echo '{"success":false,"error":"
|
|
93
|
+
echo '{"success":false,"error":"Audio download produced an empty file"}'
|
|
106
94
|
exit 1
|
|
107
95
|
fi
|
|
108
|
-
|
|
109
|
-
echo "{\"status\":\"downloaded\",\"message\":\"Audio downloaded (${AUDIO_SIZE} bytes)\"}" >&2
|
|
110
|
-
fi
|
|
111
|
-
|
|
112
|
-
if [ ! -f "$AUDIO_FILE" ]; then
|
|
113
|
-
echo "{\"success\":false,\"error\":\"Audio file not found: ${AUDIO_FILE}\"}"
|
|
114
|
-
exit 1
|
|
115
|
-
fi
|
|
116
|
-
|
|
117
|
-
# ── Step 2: Get duration and split into chunks ─────────────────────────────────
|
|
118
|
-
DURATION_SECS=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$AUDIO_FILE" 2>/dev/null | cut -d. -f1)
|
|
119
|
-
DURATION_SECS=${DURATION_SECS:-0}
|
|
120
|
-
|
|
121
|
-
CHUNKS_DIR="${TMPDIR_WORK}/chunks"
|
|
122
|
-
mkdir -p "$CHUNKS_DIR"
|
|
123
|
-
|
|
124
|
-
if [ "$DURATION_SECS" -gt "$CHUNK_DURATION_SECONDS" ]; then
|
|
125
|
-
NUM_CHUNKS=$(( (DURATION_SECS + CHUNK_DURATION_SECONDS - 1) / CHUNK_DURATION_SECONDS ))
|
|
126
|
-
echo "{\"status\":\"splitting\",\"message\":\"Splitting ${DURATION_SECS}s audio into ${NUM_CHUNKS} chunks of ${CHUNK_DURATION_SECONDS}s...\"}" >&2
|
|
127
|
-
|
|
128
|
-
ffmpeg -i "$AUDIO_FILE" -f segment -segment_time "$CHUNK_DURATION_SECONDS" \
|
|
129
|
-
-c copy -reset_timestamps 1 \
|
|
130
|
-
"${CHUNKS_DIR}/chunk_%03d.m4a" 2>/dev/null
|
|
131
|
-
|
|
132
|
-
CHUNK_FILES=$(ls "${CHUNKS_DIR}"/chunk_*.m4a 2>/dev/null | sort)
|
|
96
|
+
echo "{\"status\":\"downloaded\",\"message\":\"Audio downloaded ($(wc -c < "$AUDIO_FILE" | tr -d ' ') bytes)\"}" >&2
|
|
133
97
|
else
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
98
|
+
if [ ! -f "$AUDIO_FILE" ]; then
|
|
99
|
+
echo "{\"success\":false,\"error\":$(printf '%s' "Audio file not found: ${AUDIO_FILE}" | jq -Rs .)}"
|
|
100
|
+
exit 1
|
|
101
|
+
fi
|
|
102
|
+
TITLE=$(basename "$AUDIO_FILE")
|
|
139
103
|
fi
|
|
140
104
|
|
|
141
|
-
# ──
|
|
142
|
-
|
|
143
|
-
#
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
mp3) echo "audio/mpeg" ;; m4a) echo "audio/mp4" ;; aac) echo "audio/aac" ;;
|
|
147
|
-
ogg) echo "audio/ogg" ;; wav) echo "audio/wav" ;; *) echo "audio/mp4" ;;
|
|
148
|
-
esac
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
upload_and_wait() {
|
|
152
|
-
local filepath="$1"
|
|
153
|
-
local mime_type="$2"
|
|
154
|
-
local file_size
|
|
155
|
-
file_size=$(wc -c < "$filepath" | tr -d ' ')
|
|
156
|
-
local display_name
|
|
157
|
-
display_name=$(basename "$filepath")
|
|
158
|
-
|
|
159
|
-
# Resumable upload: init
|
|
160
|
-
local init_resp
|
|
161
|
-
init_resp=$(curl -s -D- -X POST \
|
|
162
|
-
"${GEMINI_UPLOAD_URL}?key=${GEMINI_API_KEY}" \
|
|
163
|
-
-H "X-Goog-Upload-Protocol: resumable" \
|
|
164
|
-
-H "X-Goog-Upload-Command: start" \
|
|
165
|
-
-H "X-Goog-Upload-Header-Content-Length: ${file_size}" \
|
|
166
|
-
-H "X-Goog-Upload-Header-Content-Type: ${mime_type}" \
|
|
167
|
-
-H "Content-Type: application/json" \
|
|
168
|
-
-d "{\"file\":{\"display_name\":\"${display_name}\"}}" 2>&1)
|
|
169
|
-
|
|
170
|
-
local upload_url
|
|
171
|
-
upload_url=$(echo "$init_resp" | grep -i 'x-goog-upload-url:' | sed 's/.*: //' | tr -d '\r')
|
|
172
|
-
[ -z "$upload_url" ] && { echo ""; return 1; }
|
|
173
|
-
|
|
174
|
-
# Resumable upload: send bytes
|
|
175
|
-
local upload_resp
|
|
176
|
-
upload_resp=$(curl -s -X POST "$upload_url" \
|
|
177
|
-
-H "X-Goog-Upload-Offset: 0" \
|
|
178
|
-
-H "X-Goog-Upload-Command: upload, finalize" \
|
|
179
|
-
-H "Content-Type: ${mime_type}" \
|
|
180
|
-
--data-binary "@${filepath}" 2>&1)
|
|
181
|
-
|
|
182
|
-
local file_uri file_name
|
|
183
|
-
file_uri=$(echo "$upload_resp" | jq -r '.file.uri // empty' 2>/dev/null)
|
|
184
|
-
file_name=$(echo "$upload_resp" | jq -r '.file.name // empty' 2>/dev/null)
|
|
185
|
-
[ -z "$file_uri" ] && { echo ""; return 1; }
|
|
186
|
-
|
|
187
|
-
# Poll until ACTIVE
|
|
188
|
-
local state="PROCESSING" waited=0
|
|
189
|
-
while [ "$state" = "PROCESSING" ] && [ "$waited" -lt "$MAX_WAIT_SECONDS" ]; do
|
|
190
|
-
sleep 3
|
|
191
|
-
waited=$((waited + 3))
|
|
192
|
-
state=$(curl -s "${GEMINI_API_BASE}/v1beta/${file_name}?key=${GEMINI_API_KEY}" \
|
|
193
|
-
| jq -r '.state // "PROCESSING"' 2>/dev/null)
|
|
194
|
-
done
|
|
195
|
-
|
|
196
|
-
[ "$state" != "ACTIVE" ] && { echo ""; return 1; }
|
|
197
|
-
echo "$file_uri"
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
transcribe_chunk() {
|
|
201
|
-
local file_uri="$1"
|
|
202
|
-
local mime_type="$2"
|
|
203
|
-
local chunk_index="$3"
|
|
204
|
-
local total_chunks="$4"
|
|
205
|
-
|
|
206
|
-
local lang_hint=""
|
|
207
|
-
[ "$LANGUAGE" != "auto" ] && lang_hint="The audio is in ${LANGUAGE}. "
|
|
208
|
-
|
|
209
|
-
local prompt="${lang_hint}Transcribe this audio segment (chunk $((chunk_index+1)) of ${total_chunks}). Output the full transcript preserving speaker turns. Format:
|
|
210
|
-
|
|
211
|
-
**Speaker Name/Label:** text spoken...
|
|
212
|
-
|
|
213
|
-
Use Speaker 1, Speaker 2 etc if names unknown. Maintain original language. Add [MM:SS] timestamps at topic changes (relative to this chunk start)."
|
|
105
|
+
# ── Step 2: Transcribe via the shared Whisper skill ────────────────────────────
|
|
106
|
+
# The inner skill emits progress on stderr (passed through) and its result JSON
|
|
107
|
+
# on stdout. It handles normalization, engine selection and long-file chunking,
|
|
108
|
+
# so none of that is duplicated here.
|
|
109
|
+
echo '{"status":"transcribing","message":"Handing off to transcribe-audio (Whisper)..."}' >&2
|
|
214
110
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
{"file_data": {"mime_type": "${mime_type}", "file_uri": "${file_uri}"}}
|
|
221
|
-
]}],
|
|
222
|
-
"generationConfig": {"temperature": 0.1, "maxOutputTokens": 32768}
|
|
223
|
-
}
|
|
224
|
-
ENDJSON
|
|
225
|
-
|
|
226
|
-
local resp
|
|
227
|
-
resp=$(curl -s --max-time 300 -X POST \
|
|
228
|
-
"${GEMINI_CONTENT_URL}?key=${GEMINI_API_KEY}" \
|
|
229
|
-
-H "Content-Type: application/json" \
|
|
230
|
-
-d "@${req_file}" 2>&1)
|
|
231
|
-
|
|
232
|
-
local err_msg
|
|
233
|
-
err_msg=$(echo "$resp" | jq -r '.error.message // empty' 2>/dev/null)
|
|
234
|
-
[ -n "$err_msg" ] && { echo "[Transcription error: ${err_msg}]"; return 0; }
|
|
111
|
+
TRANSCRIBE_IN=$(jq -nc \
|
|
112
|
+
--arg audioFile "$AUDIO_FILE" \
|
|
113
|
+
--arg language "$LANGUAGE" \
|
|
114
|
+
--arg engine "$ENGINE" \
|
|
115
|
+
'{audioFile:$audioFile, language:$language, engine:$engine}')
|
|
235
116
|
|
|
236
|
-
|
|
117
|
+
RESULT_JSON=$(bash "$TRANSCRIBE_SKILL" "$TRANSCRIBE_IN") || {
|
|
118
|
+
echo '{"success":false,"error":"transcribe-audio failed — see stderr for the engine error"}'
|
|
119
|
+
exit 1
|
|
237
120
|
}
|
|
238
121
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
for chunk_file in $CHUNK_FILES; do
|
|
245
|
-
CHUNK_INDEX_DISPLAY=$((CHUNK_INDEX + 1))
|
|
246
|
-
echo "{\"status\":\"transcribing\",\"message\":\"Chunk ${CHUNK_INDEX_DISPLAY}/${TOTAL_CHUNKS}: uploading...\"}" >&2
|
|
247
|
-
|
|
248
|
-
MIME=$(get_mime "$chunk_file")
|
|
249
|
-
FILE_URI=$(upload_and_wait "$chunk_file" "$MIME")
|
|
250
|
-
|
|
251
|
-
if [ -z "$FILE_URI" ]; then
|
|
252
|
-
echo "{\"status\":\"error\",\"message\":\"Chunk ${CHUNK_INDEX_DISPLAY} upload/processing failed, skipping\"}" >&2
|
|
253
|
-
FULL_TRANSCRIPT="${FULL_TRANSCRIPT}
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
[Chunk ${CHUNK_INDEX_DISPLAY} failed to process]
|
|
257
|
-
---
|
|
258
|
-
"
|
|
259
|
-
CHUNK_INDEX=$((CHUNK_INDEX + 1))
|
|
260
|
-
continue
|
|
261
|
-
fi
|
|
262
|
-
|
|
263
|
-
echo "{\"status\":\"transcribing\",\"message\":\"Chunk ${CHUNK_INDEX_DISPLAY}/${TOTAL_CHUNKS}: transcribing...\"}" >&2
|
|
264
|
-
CHUNK_TEXT=$(transcribe_chunk "$FILE_URI" "$MIME" "$CHUNK_INDEX" "$TOTAL_CHUNKS")
|
|
265
|
-
|
|
266
|
-
# Add time offset header for multi-chunk
|
|
267
|
-
if [ "$TOTAL_CHUNKS" -gt 1 ]; then
|
|
268
|
-
OFFSET_MINS=$(( CHUNK_INDEX * CHUNK_DURATION_SECONDS / 60 ))
|
|
269
|
-
FULL_TRANSCRIPT="${FULL_TRANSCRIPT}
|
|
270
|
-
|
|
271
|
-
--- Segment ${CHUNK_INDEX_DISPLAY} (from ${OFFSET_MINS}:00) ---
|
|
272
|
-
|
|
273
|
-
${CHUNK_TEXT}"
|
|
274
|
-
else
|
|
275
|
-
FULL_TRANSCRIPT="$CHUNK_TEXT"
|
|
276
|
-
fi
|
|
122
|
+
if [ "$(printf '%s' "$RESULT_JSON" | jq -r '.success // false')" != "true" ]; then
|
|
123
|
+
ERR=$(printf '%s' "$RESULT_JSON" | jq -r '.error // "transcribe-audio reported failure"')
|
|
124
|
+
echo "{\"success\":false,\"error\":$(printf '%s' "$ERR" | jq -Rs .)}"
|
|
125
|
+
exit 1
|
|
126
|
+
fi
|
|
277
127
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
128
|
+
ENGINE_LABEL=$(printf '%s' "$RESULT_JSON" | jq -r '.engine // "whisper"')
|
|
129
|
+
LANG_OUT=$(printf '%s' "$RESULT_JSON" | jq -r '.language // "unknown"')
|
|
130
|
+
DURATION=$(printf '%s' "$RESULT_JSON" | jq -r '.durationSec // 0')
|
|
131
|
+
FULL_TEXT=$(printf '%s' "$RESULT_JSON" | jq -r '.text // ""')
|
|
281
132
|
|
|
282
|
-
if [ -z "$
|
|
283
|
-
echo '{"success":false,"error":"
|
|
133
|
+
if [ -z "$FULL_TEXT" ]; then
|
|
134
|
+
echo '{"success":false,"error":"Transcription returned no text"}'
|
|
284
135
|
exit 1
|
|
285
136
|
fi
|
|
286
137
|
|
|
287
|
-
#
|
|
138
|
+
# Segment lines with HH:MM:SS stamps — easier to scan in a 90-minute episode
|
|
139
|
+
# than the raw seconds the inner skill emits.
|
|
140
|
+
TRANSCRIPT_BODY=$(printf '%s' "$RESULT_JSON" | jq -r '
|
|
141
|
+
(.segments // [])[]
|
|
142
|
+
| (.start | floor) as $s
|
|
143
|
+
| "[\($s / 3600 | floor | tostring | if length < 2 then "0" + . else . end):" +
|
|
144
|
+
"\(($s % 3600) / 60 | floor | tostring | if length < 2 then "0" + . else . end):" +
|
|
145
|
+
"\($s % 60 | tostring | if length < 2 then "0" + . else . end)] \(.text)"
|
|
146
|
+
')
|
|
147
|
+
[ -z "$TRANSCRIPT_BODY" ] && TRANSCRIPT_BODY="$FULL_TEXT"
|
|
148
|
+
|
|
149
|
+
# ── Step 3: Output ─────────────────────────────────────────────────────────────
|
|
288
150
|
if [ -n "$OUTPUT_FILE" ]; then
|
|
289
151
|
mkdir -p "$(dirname "$OUTPUT_FILE")"
|
|
290
152
|
cat > "$OUTPUT_FILE" <<ENDMD
|
|
@@ -292,15 +154,21 @@ if [ -n "$OUTPUT_FILE" ]; then
|
|
|
292
154
|
|
|
293
155
|
> Source: ${URL:-local file}
|
|
294
156
|
> Transcribed: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
295
|
-
>
|
|
296
|
-
> Duration: ${
|
|
157
|
+
> Engine: ${ENGINE_LABEL} (language: ${LANG_OUT})
|
|
158
|
+
> Duration: ${DURATION}s
|
|
297
159
|
|
|
298
160
|
---
|
|
299
161
|
|
|
300
|
-
${
|
|
162
|
+
${TRANSCRIPT_BODY}
|
|
301
163
|
ENDMD
|
|
302
|
-
echo "{\"status\":\"saved\",\"message\"
|
|
164
|
+
echo "{\"status\":\"saved\",\"message\":$(printf '%s' "Transcript saved to ${OUTPUT_FILE}" | jq -Rs .)}" >&2
|
|
303
165
|
fi
|
|
304
166
|
|
|
305
|
-
|
|
306
|
-
|
|
167
|
+
printf '%s' "$RESULT_JSON" | jq -c \
|
|
168
|
+
--arg title "$TITLE" \
|
|
169
|
+
--arg url "${URL:-}" \
|
|
170
|
+
--arg audioUrl "${AUDIO_URL:-}" \
|
|
171
|
+
--arg transcript "$TRANSCRIPT_BODY" \
|
|
172
|
+
'{success:true, title:$title, url:$url, audioUrl:$audioUrl,
|
|
173
|
+
engine:.engine, language:.language, duration:.durationSec,
|
|
174
|
+
transcriptLength:($transcript | length), transcript:$transcript}'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xiaoyuzhoufm-transcript",
|
|
3
3
|
"displayName": "小宇宙 Podcast Transcript",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Resolve a 小宇宙 episode URL to its audio and transcribe it with Whisper (local whisper.cpp by default, OpenAI Whisper API as fallback). Segment-level timestamps.",
|
|
5
5
|
"category": "content",
|
|
6
6
|
"assignableRoles": ["*"],
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "2.0.0",
|
|
8
8
|
"author": "Crewly Team",
|
|
9
|
-
"requires": [
|
|
9
|
+
"requires": []
|
|
10
10
|
}
|
|
@@ -34,7 +34,11 @@ bash config/skills/orchestrator/get-team-status/execute.sh
|
|
|
34
34
|
|
|
35
35
|
## Parameters
|
|
36
36
|
|
|
37
|
-
None required.
|
|
37
|
+
None required. Output is **compact by default** (team id/name/projectIds and
|
|
38
|
+
each member's name, sessionName, role, runtimeType, agentStatus,
|
|
39
|
+
workingStatus, readyAt). Pass `--full` (or `'{"full":true}'`) for the raw
|
|
40
|
+
`/teams` payload including system prompts — it is large, so only ask for it
|
|
41
|
+
when you need a specific field.
|
|
38
42
|
|
|
39
43
|
## Output
|
|
40
44
|
|
|
@@ -1,7 +1,33 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Get status of all teams and their agents
|
|
2
|
+
# Get status of all teams and their agents.
|
|
3
|
+
#
|
|
4
|
+
# Compact by default (2026-09-16): the raw /teams payload carries every
|
|
5
|
+
# member's system prompt, and on a workspace with a few teams that is ~50 KB
|
|
6
|
+
# per call — all of which stays in the orchestrator's context for the rest of
|
|
7
|
+
# the session. Pass --full (or {"full":true}) when a specific field is needed.
|
|
3
8
|
set -euo pipefail
|
|
4
9
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
10
|
source "${SCRIPT_DIR}/../_common/lib.sh"
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
FULL="false"
|
|
13
|
+
for arg in "$@"; do
|
|
14
|
+
case "$arg" in
|
|
15
|
+
--full) FULL="true" ;;
|
|
16
|
+
\{*) printf '%s' "$arg" | jq -e '.full == true' >/dev/null 2>&1 && FULL="true" ;;
|
|
17
|
+
esac
|
|
18
|
+
done
|
|
19
|
+
|
|
20
|
+
RAW=$(api_call GET "/teams")
|
|
21
|
+
|
|
22
|
+
if [ "$FULL" = "true" ]; then
|
|
23
|
+
printf '%s\n' "$RAW"
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
printf '%s' "$RAW" | jq '
|
|
28
|
+
def compact_member: {name, sessionName, role, runtimeType, agentStatus, workingStatus, readyAt};
|
|
29
|
+
def compact_team: {id, name, projectIds, memberCount: ((.members // []) | length), members: [(.members // [])[] | compact_member]};
|
|
30
|
+
if type == "array" then map(compact_team)
|
|
31
|
+
elif (.data | type) == "array" then .data |= map(compact_team)
|
|
32
|
+
elif .members then compact_team
|
|
33
|
+
else . end'
|
|
@@ -1,33 +1,107 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Google OAuth Configuration
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* the REST controller (URL-builder) and the helper (refresh client) stay in
|
|
7
|
-
* sync on client_id / redirect_uri / endpoints.
|
|
4
|
+
* Crewly can acquire Google Workspace credentials through either of two OAuth
|
|
5
|
+
* applications, and this module is the single place that decides which:
|
|
8
6
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* - **crewly** — Crewly's own published OAuth app, brokered by Crewly Cloud.
|
|
8
|
+
* The authorization code lands on a Crewly-owned HTTPS redirect and Cloud
|
|
9
|
+
* exchanges it, so the client_secret lives only on the server and never
|
|
10
|
+
* ships with OSS. Selected by setting {@link CREWLY_GOOGLE_CLIENT_ID_ENV}.
|
|
11
|
+
*
|
|
12
|
+
* - **gemini-cli** — the fallback, and what every install used before Crewly
|
|
13
|
+
* had its own app: piggybacking on the Google Workspace extension for Gemini
|
|
14
|
+
* CLI (https://github.com/gemini-cli-extensions/workspace). Borrowing a
|
|
15
|
+
* published app avoided both the 7-day testing-mode grant expiry and the
|
|
16
|
+
* need to hold a client_secret, at the cost of depending on someone else's
|
|
17
|
+
* OAuth app and refresh function.
|
|
18
|
+
*
|
|
19
|
+
* The fallback is deliberate, not vestigial: an install that has not been
|
|
20
|
+
* pointed at Crewly's app keeps working exactly as before, and a self-hoster
|
|
21
|
+
* who wants to depend on neither can point these variables at a GCP project
|
|
22
|
+
* of their own.
|
|
12
23
|
*
|
|
13
24
|
* @module config/oauth.config
|
|
14
25
|
*/
|
|
15
|
-
/**
|
|
16
|
-
export declare const
|
|
17
|
-
/**
|
|
18
|
-
export declare const
|
|
26
|
+
/** Env var that, when set, switches the Workspace flow to Crewly's own app. */
|
|
27
|
+
export declare const CREWLY_GOOGLE_CLIENT_ID_ENV = "CREWLY_GOOGLE_CLIENT_ID";
|
|
28
|
+
/** Env var overriding where Google sends the authorization code. */
|
|
29
|
+
export declare const CREWLY_GOOGLE_REDIRECT_URI_ENV = "CREWLY_GOOGLE_REDIRECT_URI";
|
|
30
|
+
/** Env var overriding the endpoint that exchanges a refresh token. */
|
|
31
|
+
export declare const CREWLY_GOOGLE_REFRESH_URL_ENV = "CREWLY_GOOGLE_REFRESH_URL";
|
|
19
32
|
/** Base URL of Google's OAuth 2.0 authorization endpoint. */
|
|
20
33
|
export declare const GOOGLE_OAUTH_AUTH_BASE = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
21
|
-
/** Cloud Function base URL where the extension's `/refreshToken` lives. */
|
|
22
|
-
export declare const GEMINI_CLI_CLOUD_FUNCTION_URL = "https://google-workspace-extension.geminicli.com";
|
|
23
|
-
/** Path on the cloud function used for token refresh calls. */
|
|
24
|
-
export declare const GEMINI_CLI_REFRESH_PATH = "/refreshToken";
|
|
25
34
|
/** Google's userinfo endpoint — used to resolve an OAuth token's account email. */
|
|
26
35
|
export declare const GOOGLE_USERINFO_ENDPOINT = "https://www.googleapis.com/oauth2/v3/userinfo";
|
|
36
|
+
/** Path on the Gemini CLI cloud function used for token refresh calls. */
|
|
37
|
+
export declare const GEMINI_CLI_REFRESH_PATH = "/refreshToken";
|
|
38
|
+
/** Cloud Function base URL where the Gemini CLI extension's `/refreshToken` lives. */
|
|
39
|
+
export declare const GEMINI_CLI_CLOUD_FUNCTION_URL = "https://google-workspace-extension.geminicli.com";
|
|
40
|
+
/** Which OAuth application a Workspace credential was (or will be) issued by. */
|
|
41
|
+
export type GoogleOAuthProvider = 'crewly' | 'gemini-cli';
|
|
42
|
+
/** Everything the authorize/refresh paths need to talk to one OAuth app. */
|
|
43
|
+
export interface GoogleOAuthApp {
|
|
44
|
+
/** Which application this is. */
|
|
45
|
+
provider: GoogleOAuthProvider;
|
|
46
|
+
/** OAuth client_id presented on the consent URL. */
|
|
47
|
+
clientId: string;
|
|
48
|
+
/** Where Google sends the authorization code. */
|
|
49
|
+
redirectUri: string;
|
|
50
|
+
/**
|
|
51
|
+
* Endpoint that trades a refresh_token for a fresh access_token.
|
|
52
|
+
*
|
|
53
|
+
* Neither provider needs a client_secret on this side: 'crewly' posts to
|
|
54
|
+
* Crewly Cloud, which holds the secret; 'gemini-cli' posts to the
|
|
55
|
+
* extension's cloud function, which holds theirs.
|
|
56
|
+
*/
|
|
57
|
+
refreshUrl: string;
|
|
58
|
+
/** Scopes requested when the caller does not specify their own. */
|
|
59
|
+
defaultScopes: readonly string[];
|
|
60
|
+
}
|
|
27
61
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
62
|
+
* Scopes registered on Crewly's own OAuth consent screen (GCP project
|
|
63
|
+
* `crewlyai`, registered 2026-09-07).
|
|
64
|
+
*
|
|
65
|
+
* Requesting a scope the consent screen does not declare fails, so this list
|
|
66
|
+
* and the console must move together. `photoslibrary.readonly` is absent on
|
|
67
|
+
* purpose — the Photos Library API is not enabled on the project, and it is a
|
|
68
|
+
* restricted scope that would widen the eventual CASA assessment for a feature
|
|
69
|
+
* nothing asks for yet.
|
|
70
|
+
*/
|
|
71
|
+
export declare const CREWLY_GOOGLE_SCOPES: readonly string[];
|
|
72
|
+
/**
|
|
73
|
+
* Scopes the Gemini CLI Workspace extension's consent screen declares.
|
|
74
|
+
*
|
|
75
|
+
* Kept as-is, including `photoslibrary.readonly`, because these grants were
|
|
76
|
+
* issued against their app: narrowing the list would silently drop an
|
|
77
|
+
* already-working capability for installs still on the fallback.
|
|
78
|
+
*/
|
|
79
|
+
export declare const GEMINI_CLI_GOOGLE_SCOPES: readonly string[];
|
|
80
|
+
/** The borrowed Gemini CLI Workspace extension app. */
|
|
81
|
+
export declare const GEMINI_CLI_OAUTH_APP: GoogleOAuthApp;
|
|
82
|
+
/**
|
|
83
|
+
* Resolve the OAuth app this install should use.
|
|
84
|
+
*
|
|
85
|
+
* Reads the environment on every call rather than at import time so that a
|
|
86
|
+
* process which loads its `.env` after module resolution — and a test that
|
|
87
|
+
* sets a variable per case — both see the value they set.
|
|
88
|
+
*
|
|
89
|
+
* @returns The active app; {@link GEMINI_CLI_OAUTH_APP} when Crewly's own
|
|
90
|
+
* client_id is not configured.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* const app = resolveGoogleOAuthApp();
|
|
95
|
+
* if (app.provider === 'crewly') { ... }
|
|
96
|
+
* ```
|
|
31
97
|
*/
|
|
32
|
-
export declare
|
|
98
|
+
export declare function resolveGoogleOAuthApp(): GoogleOAuthApp;
|
|
99
|
+
/** client_id of the active OAuth app. */
|
|
100
|
+
export declare function googleOAuthClientId(): string;
|
|
101
|
+
/** Redirect URI of the active OAuth app. */
|
|
102
|
+
export declare function googleOAuthRedirectUri(): string;
|
|
103
|
+
/** Refresh endpoint of the active OAuth app. */
|
|
104
|
+
export declare function googleOAuthRefreshUrl(): string;
|
|
105
|
+
/** Default scopes of the active OAuth app. */
|
|
106
|
+
export declare function defaultGoogleScopes(): readonly string[];
|
|
33
107
|
//# sourceMappingURL=oauth.config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.config.d.ts","sourceRoot":"","sources":["../../../../../backend/src/config/oauth.config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oauth.config.d.ts","sourceRoot":"","sources":["../../../../../backend/src/config/oauth.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE,oEAAoE;AACpE,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAE3E,sEAAsE;AACtE,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAMzE,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,iDACa,CAAC;AAEjD,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,kDACY,CAAC;AAElD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,qDACU,CAAC;AASrD,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE1D,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAWjD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAGrD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,oBAAoB,EAAE,cAOlC,CAAC;AAaF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,CAetD;AAMD,yCAAyC;AACzC,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,8CAA8C;AAC9C,wBAAgB,mBAAmB,IAAI,SAAS,MAAM,EAAE,CAEvD"}
|