crewly 1.13.1 → 1.14.0

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.
Files changed (424) hide show
  1. package/config/constants.ts +8 -0
  2. package/config/roles/orchestrator/prompt.md +23 -0
  3. package/config/skills/agent/core/reply-channel/SKILL.md +6 -0
  4. package/config/skills/agent/core/reply-channel/execute.sh +14 -2
  5. package/config/skills/agent/core/slack-post/SKILL.md +126 -0
  6. package/config/skills/agent/core/slack-post/execute.sh +127 -0
  7. package/config/skills/agent/remote-browser/SKILL.md +178 -0
  8. package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
  9. package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
  10. package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
  11. package/config/skills/orchestrator/get-team-status/SKILL.md +5 -1
  12. package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
  13. package/config/slack-app-manifest.json +7 -1
  14. package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
  15. package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
  16. package/dist/backend/backend/src/config/oauth.config.js +121 -19
  17. package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
  18. package/dist/backend/backend/src/constants.d.ts +60 -0
  19. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  20. package/dist/backend/backend/src/constants.js +74 -0
  21. package/dist/backend/backend/src/constants.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/chat/chat.controller.js +33 -4
  24. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
  27. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.js +342 -0
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  31. package/dist/backend/backend/src/index.d.ts.map +1 -1
  32. package/dist/backend/backend/src/index.js +23 -7
  33. package/dist/backend/backend/src/index.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
  35. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
  37. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +13 -11
  40. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +14 -0
  42. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +56 -0
  44. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
  46. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
  48. package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
  50. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -7
  52. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
  54. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +110 -1
  56. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  58. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
  60. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  61. package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -0
  62. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/core/storage.service.js +1 -1
  64. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  67. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  68. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
  70. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
  72. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
  74. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  75. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +34 -0
  76. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +99 -10
  78. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  79. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  80. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  81. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  82. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  83. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
  84. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
  85. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
  86. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
  87. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
  88. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
  90. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  91. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  92. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  93. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
  94. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  95. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
  97. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  98. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  99. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  100. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
  101. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  102. package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -1
  103. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/slack/slack.service.js +297 -3
  105. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +22 -0
  107. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +71 -0
  109. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  110. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
  111. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
  113. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
  114. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +15 -2
  115. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +33 -7
  117. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
  119. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
  121. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  122. package/dist/backend/backend/src/types/slack.types.d.ts +87 -0
  123. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  124. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  125. package/dist/backend/build-info.json +2 -2
  126. package/dist/backend/config/constants.d.ts +8 -0
  127. package/dist/backend/config/constants.d.ts.map +1 -1
  128. package/dist/backend/config/constants.js +8 -0
  129. package/dist/backend/config/constants.js.map +1 -1
  130. package/dist/cli/backend/src/config/oauth.config.d.ts +93 -19
  131. package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
  132. package/dist/cli/backend/src/config/oauth.config.js +121 -19
  133. package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
  134. package/dist/cli/backend/src/constants.d.ts +60 -0
  135. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  136. package/dist/cli/backend/src/constants.js +74 -0
  137. package/dist/cli/backend/src/constants.js.map +1 -1
  138. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +292 -0
  139. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
  140. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
  141. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
  142. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
  143. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
  144. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
  145. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
  146. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
  147. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  148. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +110 -1
  149. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  150. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  151. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  152. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
  153. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  154. package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -0
  155. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  156. package/dist/cli/backend/src/services/core/storage.service.js +1 -1
  157. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  158. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  159. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  160. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  161. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
  162. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
  164. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  165. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  166. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  167. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  168. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  169. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  170. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  171. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
  172. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  173. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  174. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
  175. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  176. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  177. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  178. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
  179. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  180. package/dist/cli/backend/src/services/slack/slack.service.d.ts +116 -1
  181. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  182. package/dist/cli/backend/src/services/slack/slack.service.js +297 -3
  183. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  184. package/dist/cli/backend/src/types/slack.types.d.ts +87 -0
  185. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  186. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  187. package/dist/cli/backend/src/utils/team.utils.d.ts +40 -0
  188. package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
  189. package/dist/cli/backend/src/utils/team.utils.js +66 -0
  190. package/dist/cli/backend/src/utils/team.utils.js.map +1 -0
  191. package/dist/cli/cli/src/index.js +0 -0
  192. package/dist/cli/config/constants.d.ts +8 -0
  193. package/dist/cli/config/constants.d.ts.map +1 -1
  194. package/dist/cli/config/constants.js +8 -0
  195. package/dist/cli/config/constants.js.map +1 -1
  196. package/frontend/dist/assets/{index-890d3f9d.js → index-190a957f.js} +294 -294
  197. package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
  198. package/frontend/dist/index.html +2 -2
  199. package/package.json +1 -1
  200. package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
  201. package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
  202. package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
  203. package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
  204. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
  205. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
  206. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
  207. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
  208. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
  209. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
  210. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
  211. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
  212. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
  213. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
  214. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
  215. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
  216. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
  217. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
  218. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
  219. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
  220. package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
  221. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
  222. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
  223. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
  224. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
  225. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
  226. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
  227. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
  228. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
  229. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
  230. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
  231. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
  232. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
  233. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
  234. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
  235. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
  236. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
  237. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
  238. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
  239. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
  240. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
  241. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
  242. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
  243. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
  244. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
  245. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
  246. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
  247. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
  248. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
  249. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
  250. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
  251. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
  252. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
  253. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
  254. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
  255. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
  256. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
  257. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
  258. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
  259. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
  260. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
  261. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
  262. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
  263. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
  264. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
  265. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
  266. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
  267. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
  268. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
  269. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
  270. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
  271. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
  272. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
  273. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
  274. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
  275. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
  276. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
  277. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
  278. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
  279. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
  280. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
  281. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
  282. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
  283. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
  284. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
  285. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
  286. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
  287. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
  288. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
  289. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
  290. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
  291. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
  292. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
  293. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
  294. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
  295. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
  296. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
  297. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  298. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  299. package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
  300. package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  301. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  302. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  303. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
  304. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  305. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  306. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  307. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  308. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  309. package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
  310. package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
  311. package/dist/backend/backend/src/services/knowledge/index.js +0 -8
  312. package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
  313. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  314. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  315. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  316. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  317. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  318. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  319. package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
  320. package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  321. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  322. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  323. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
  324. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  325. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  326. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  327. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  328. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  329. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
  330. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  331. package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
  332. package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
  333. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
  334. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  335. package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
  336. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
  337. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
  338. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  339. package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
  340. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
  341. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
  342. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
  343. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
  344. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
  345. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
  346. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
  347. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
  348. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
  349. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
  350. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
  351. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
  352. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
  353. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
  354. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
  355. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
  356. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
  357. package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
  358. package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
  359. package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
  360. package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
  361. package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
  362. package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
  363. package/dist/backend/backend/src/types/knowledge.types.js +0 -38
  364. package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
  365. package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
  366. package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
  367. package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
  368. package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
  369. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  370. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  371. package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
  372. package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  373. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  374. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  375. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
  376. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  377. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  378. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  379. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  380. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  381. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
  382. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
  383. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
  384. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
  385. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  386. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  387. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  388. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  389. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  390. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  391. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
  392. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  393. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
  394. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
  395. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
  396. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
  397. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  398. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  399. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
  400. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  401. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  402. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  403. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  404. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  405. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
  406. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  407. package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
  408. package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
  409. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
  410. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  411. package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
  412. package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
  413. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
  414. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  415. package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
  416. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
  417. package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
  418. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
  419. package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
  420. package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
  421. package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
  422. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
  423. package/dist/cli/backend/src/types/knowledge.types.js +0 -38
  424. package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
@@ -1,58 +1,49 @@
1
1
  #!/bin/bash
2
- # 小宇宙 Podcast Transcript — Extract and transcribe podcast episodes
2
+ # 小宇宙 Podcast Transcript — fetch an episode and transcribe it.
3
3
  #
4
- # Pipeline: URL → HTML → audio URL → download → ffmpeg split → Gemini per-chunk → merge
4
+ # Pipeline: URL → HTML → audio URL → download → transcribe-audio (Whisper)
5
5
  #
6
- # Long podcasts (>15min) are split into 10-minute chunks via ffmpeg,
7
- # each chunk is uploaded and transcribed separately, then merged.
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: GEMINI_API_KEY, ffmpeg, curl, jq
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
- # ── Configuration ──────────────────────────────────────────────────────────────
19
- MODEL="${GEMINI_MODEL:-gemini-2.0-flash}"
20
- GEMINI_API_BASE="https://generativelanguage.googleapis.com"
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 \u0027{\"url\":\"https://www.xiaoyuzhoufm.com/episode/...\"}\u0027"}'
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=$(echo "$INPUT" | jq -r '.url // empty')
34
- AUDIO_FILE=$(echo "$INPUT" | jq -r '.audioFile // empty')
35
- OUTPUT_FILE=$(echo "$INPUT" | jq -r '.outputFile // empty')
36
- LANGUAGE=$(echo "$INPUT" | jq -r '.language // "auto"')
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
- # ── Dependency check ───────────────────────────────────────────────────────────
44
- if ! command -v ffmpeg >/dev/null 2>&1; then
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: Extract audio URL from 小宇宙 page ────────────────────────────────
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\":$(echo "$TITLE" | jq -Rs .)}" >&2
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
- -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
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":"Failed to download audio file"}'
93
+ echo '{"success":false,"error":"Audio download produced an empty file"}'
106
94
  exit 1
107
95
  fi
108
- AUDIO_SIZE=$(wc -c < "$AUDIO_FILE" | tr -d ' ')
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
- # Short audio — single chunk
135
- cp "$AUDIO_FILE" "${CHUNKS_DIR}/chunk_000.m4a"
136
- CHUNK_FILES="${CHUNKS_DIR}/chunk_000.m4a"
137
- NUM_CHUNKS=1
138
- echo "{\"status\":\"splitting\",\"message\":\"Short audio (${DURATION_SECS}s), no splitting needed.\"}" >&2
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
- # ── Helpers: upload + transcribe a single chunk ────────────────────────────────
142
-
143
- # Determine MIME type from file extension
144
- get_mime() {
145
- case "${1##*.}" in
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
- local req_file="${TMPDIR_WORK}/req_${chunk_index}.json"
216
- cat > "$req_file" <<ENDJSON
217
- {
218
- "contents": [{"parts": [
219
- {"text": $(echo "$prompt" | jq -Rs .)},
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
- echo "$resp" | jq -r '.candidates[0].content.parts[0].text // "[No transcript for this chunk]"' 2>/dev/null
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
- # ── Step 3: Upload and transcribe each chunk ───────────────────────────────────
240
- FULL_TRANSCRIPT=""
241
- CHUNK_INDEX=0
242
- TOTAL_CHUNKS=$(echo "$CHUNK_FILES" | wc -w | tr -d ' ')
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
- CHUNK_INDEX=$((CHUNK_INDEX + 1))
279
- echo "{\"status\":\"transcribing\",\"message\":\"Chunk ${CHUNK_INDEX_DISPLAY}/${TOTAL_CHUNKS}: done.\"}" >&2
280
- done
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 "$FULL_TRANSCRIPT" ]; then
283
- echo '{"success":false,"error":"All chunks failed to transcribe"}'
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
- # ── Step 4: Output ─────────────────────────────────────────────────────────────
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
- > Model: ${MODEL}
296
- > Duration: ${DURATION_SECS}s (${TOTAL_CHUNKS} chunks)
157
+ > Engine: ${ENGINE_LABEL} (language: ${LANG_OUT})
158
+ > Duration: ${DURATION}s
297
159
 
298
160
  ---
299
161
 
300
- ${FULL_TRANSCRIPT}
162
+ ${TRANSCRIPT_BODY}
301
163
  ENDMD
302
- echo "{\"status\":\"saved\",\"message\":\"Transcript saved to ${OUTPUT_FILE}\"}" >&2
164
+ echo "{\"status\":\"saved\",\"message\":$(printf '%s' "Transcript saved to ${OUTPUT_FILE}" | jq -Rs .)}" >&2
303
165
  fi
304
166
 
305
- TRANSCRIPT_LENGTH=${#FULL_TRANSCRIPT}
306
- echo "{\"success\":true,\"title\":$(echo "$TITLE" | jq -Rs .),\"url\":$(echo "${URL:-}" | jq -Rs .),\"audioUrl\":$(echo "${AUDIO_URL:-}" | jq -Rs .),\"model\":\"${MODEL}\",\"duration\":${DURATION_SECS},\"chunks\":${TOTAL_CHUNKS},\"transcriptLength\":${TRANSCRIPT_LENGTH},\"transcript\":$(echo "$FULL_TRANSCRIPT" | jq -Rs .)}"
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": "Extract and transcribe 小宇宙 podcast episodes using Gemini Audio API. Supports speaker identification and timestamps.",
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": "1.0.0",
7
+ "version": "2.0.0",
8
8
  "author": "Crewly Team",
9
- "requires": ["GEMINI_API_KEY"]
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
- api_call GET "/teams"
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'
@@ -21,7 +21,13 @@
21
21
  "im:history",
22
22
  "mpim:history",
23
23
  "users:read",
24
- "reactions:write"
24
+ "reactions:write",
25
+ "channels:read",
26
+ "channels:manage",
27
+ "channels:join",
28
+ "chat:write.customize",
29
+ "chat:write.public",
30
+ "im:write"
25
31
  ]
26
32
  }
27
33
  },
@@ -1,33 +1,107 @@
1
1
  /**
2
2
  * Google OAuth Configuration
3
3
  *
4
- * Shared constants for the Google OAuth flows that piggyback on the Gemini
5
- * CLI Workspace extension's published OAuth app. Defining these here lets
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
- * These values come from the Gemini CLI Workspace extension's
10
- * `workspace-server/src/utils/config.ts` — using the same client_id
11
- * + redirect_uri lets us avoid the 7-day testing-mode grant expiry.
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
- /** OAuth client_id for the Gemini CLI Workspace extension's published app. */
16
- export declare const GOOGLE_OAUTH_CLIENT_ID = "338689075775-o75k922vn5fdl18qergr96rp8g63e4d7.apps.googleusercontent.com";
17
- /** Redirect URI the Gemini CLI Workspace cloud function is registered for. */
18
- export declare const GOOGLE_OAUTH_REDIRECT_URI = "https://google-workspace-extension.geminicli.com";
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
- * Default scope set for a broad Workspace grant — covers the common Gmail,
29
- * Drive, Docs, Calendar, and Photos read paths used by marketplace skills.
30
- * Callers of `/oauth/google/start` may override via the request body.
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 const DEFAULT_GOOGLE_SCOPES: readonly string[];
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;;;;;;;;;;;;;GAaG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,6EACyC,CAAC;AAE7E,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,qDACc,CAAC;AAErD,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,iDACa,CAAC;AAEjD,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,qDACU,CAAC;AAErD,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,kDACY,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAYlD,CAAC"}
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"}