crewly 1.20.192 → 1.20.194

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 (525) hide show
  1. package/config/constants.ts +11 -0
  2. package/config/hooks/subagent-guard/subagent.sh +113 -0
  3. package/config/roles/architect/prompt.md +1 -1
  4. package/config/roles/auditor/prompt.md +1 -1
  5. package/config/roles/backend-developer/prompt.md +1 -1
  6. package/config/roles/content-strategist/prompt.md +2 -2
  7. package/config/roles/designer/prompt.md +1 -1
  8. package/config/roles/developer/prompt.md +2 -2
  9. package/config/roles/frontend-developer/prompt.md +1 -1
  10. package/config/roles/fullstack-dev/prompt.md +1 -1
  11. package/config/roles/generalist/prompt.md +1 -1
  12. package/config/roles/ops/prompt.md +1 -1
  13. package/config/roles/orchestrator/prompt.md +2 -2
  14. package/config/roles/product-manager/prompt.md +1 -1
  15. package/config/roles/qa/prompt.md +1 -1
  16. package/config/roles/qa-engineer/prompt.md +1 -1
  17. package/config/roles/researcher/prompt.md +1 -1
  18. package/config/roles/sales/prompt.md +1 -1
  19. package/config/roles/support/prompt.md +1 -1
  20. package/config/roles/team-leader/prompt.md +1 -1
  21. package/config/roles/tpm/prompt.md +1 -1
  22. package/config/roles/ux-designer/prompt.md +1 -1
  23. package/config/skills/_common/complete-body-shape.test.sh +17 -0
  24. package/config/skills/agent/core/complete-task/SKILL.md +27 -4
  25. package/config/skills/agent/core/complete-task/execute.sh +23 -3
  26. package/config/skills/agent/core/complete-task/execute.test.sh +34 -0
  27. package/config/skills/agent/core/experiment-card/SKILL.md +96 -0
  28. package/config/skills/agent/core/experiment-card/execute.sh +147 -0
  29. package/config/skills/agent/core/experiment-card/execute.test.sh +91 -0
  30. package/config/skills/agent/core/handoff-task/execute.sh +1 -1
  31. package/config/skills/agent/core/report-status/SKILL.md +27 -4
  32. package/config/skills/agent/core/report-status/execute.sh +104 -4
  33. package/config/skills/agent/core/todo-add/SKILL.md +16 -2
  34. package/config/skills/agent/core/todo-add/execute.sh +21 -5
  35. package/config/skills/agent/core/todo-add/execute.test.sh +14 -0
  36. package/config/skills/agent/core/todo-tasks/SKILL.md +4 -3
  37. package/config/skills/agent/core/todo-update/SKILL.md +13 -2
  38. package/config/skills/agent/core/todo-update/execute.sh +41 -3
  39. package/config/skills/agent/core/todo-update/execute.test.sh +7 -0
  40. package/config/skills/marketplace-registry.ts +4 -4
  41. package/config/skills/orchestrator/complete-task/SKILL.md +13 -6
  42. package/config/skills/orchestrator/complete-task/execute.sh +22 -3
  43. package/config/skills/orchestrator/delegate-task/execute.sh +2 -2
  44. package/config/skills/orchestrator/harness-login/SKILL.md +9 -1
  45. package/config/skills/orchestrator/harness-login/execute.sh +12 -4
  46. package/config/skills/orchestrator/harness-login/execute.test.sh +7 -0
  47. package/config/skills/registry.json +6 -5
  48. package/config/skills/team-leader/delegate-task/execute.sh +1 -1
  49. package/config/skills/team-leader/verify-output/SKILL.md +18 -1
  50. package/config/skills/team-leader/verify-output/execute.sh +28 -0
  51. package/config/skills/team-leader/verify-output/execute.test.sh +27 -0
  52. package/dist/backend/backend/src/constants.d.ts +192 -2
  53. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  54. package/dist/backend/backend/src/constants.js +196 -1
  55. package/dist/backend/backend/src/constants.js.map +1 -1
  56. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts +6 -0
  57. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
  58. package/dist/backend/backend/src/controllers/canva/canva.controller.js +13 -2
  59. package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/canva/canva.routes.js +3 -1
  62. package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
  63. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +4 -1
  65. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -0
  67. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
  68. package/dist/backend/backend/src/controllers/connector/connector.controller.js +32 -3
  69. package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
  70. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts +41 -0
  71. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -0
  72. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +75 -0
  73. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -0
  74. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +27 -0
  75. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
  76. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
  77. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
  78. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +6 -0
  79. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  80. package/dist/backend/backend/src/controllers/google/google.controller.js +19 -0
  81. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  82. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/google/google.routes.js +3 -1
  84. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +22 -3
  87. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +19 -2
  89. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
  90. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +37 -4
  91. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
  92. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
  93. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +3 -1
  94. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
  95. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +9 -0
  96. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  97. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +26 -0
  98. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  99. package/dist/backend/backend/src/controllers/people/people.routes.d.ts +25 -0
  100. package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -0
  101. package/dist/backend/backend/src/controllers/people/people.routes.js +90 -0
  102. package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -0
  103. package/dist/backend/backend/src/controllers/request-types.d.ts +2 -0
  104. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  105. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +22 -1
  106. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  107. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +143 -3
  108. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  109. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +25 -3
  110. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +125 -19
  112. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  114. package/dist/backend/backend/src/controllers/team/team.controller.js +14 -0
  115. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  116. package/dist/backend/backend/src/index.d.ts.map +1 -1
  117. package/dist/backend/backend/src/index.js +82 -3
  118. package/dist/backend/backend/src/index.js.map +1 -1
  119. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  120. package/dist/backend/backend/src/routes/api.routes.js +6 -0
  121. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  123. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/agent-registration.service.js +28 -3
  125. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  128. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  130. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +14 -3
  132. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  133. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  134. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  136. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/agent/idle-detection.service.js +1 -1
  138. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  140. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  142. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  143. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  144. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  145. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  146. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  147. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  148. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  149. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +49 -5
  150. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  151. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  152. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  153. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  154. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  155. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  156. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  157. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  158. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  159. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts +17 -4
  160. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/canva/canva-token.service.js +54 -17
  162. package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
  163. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
  164. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  165. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
  166. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  167. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +17 -2
  168. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
  169. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +30 -6
  170. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
  171. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +38 -2
  172. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
  173. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +63 -1
  174. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
  175. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  176. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  177. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +204 -56
  178. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  179. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  180. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  182. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  183. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +3 -0
  184. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  185. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +88 -0
  186. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
  187. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
  188. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
  189. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +301 -0
  190. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
  191. package/dist/backend/backend/src/services/experiments/experiment.service.js +754 -0
  192. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
  193. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +73 -0
  194. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
  195. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +142 -0
  196. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
  197. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +60 -0
  198. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
  199. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +113 -0
  200. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
  201. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +25 -2
  202. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  203. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +53 -7
  204. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  205. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +207 -0
  206. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  207. package/dist/backend/backend/src/services/harness/claude-accounts.js +306 -0
  208. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -0
  209. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  210. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  211. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +48 -0
  212. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  213. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  214. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  215. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +156 -19
  216. package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  217. package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
  218. package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
  219. package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
  220. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +19 -4
  221. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/harness/login-broker.service.js +46 -7
  223. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  224. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +18 -2
  225. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/harness/owner-login-request.js +31 -7
  227. package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -1
  228. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  229. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  230. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  231. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  232. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
  233. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  234. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +46 -0
  235. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  236. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  237. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  238. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  239. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  240. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +87 -5
  241. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -1
  242. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +151 -12
  243. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -1
  244. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +17 -4
  245. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
  246. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +50 -17
  247. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
  248. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts +53 -7
  249. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -1
  250. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js +77 -14
  251. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -1
  252. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +53 -1
  253. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
  254. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +130 -29
  255. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
  256. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  257. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +3 -2
  258. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  259. package/dist/backend/backend/src/services/people/acting-for.service.d.ts +188 -0
  260. package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  261. package/dist/backend/backend/src/services/people/acting-for.service.js +299 -0
  262. package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -0
  263. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts +89 -0
  264. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  265. package/dist/backend/backend/src/services/people/dedicated-agent.js +113 -0
  266. package/dist/backend/backend/src/services/people/dedicated-agent.js.map +1 -0
  267. package/dist/backend/backend/src/services/people/grant-sharing.d.ts +80 -0
  268. package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -0
  269. package/dist/backend/backend/src/services/people/grant-sharing.js +143 -0
  270. package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -0
  271. package/dist/backend/backend/src/services/people/people-directory.service.d.ts +239 -0
  272. package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  273. package/dist/backend/backend/src/services/people/people-directory.service.js +454 -0
  274. package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -0
  275. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  276. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  277. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  278. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  279. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  280. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -1
  281. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
  282. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +16 -2
  283. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
  284. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +60 -1
  285. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  286. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +140 -8
  287. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  288. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +1 -1
  289. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
  290. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  291. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  293. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  294. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  295. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +12 -2
  296. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  297. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +7 -1
  298. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
  299. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +18 -3
  300. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
  301. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  302. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  303. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  304. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts +33 -0
  305. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
  306. package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
  307. package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
  308. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
  309. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  310. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
  311. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  312. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  313. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  314. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +46 -0
  315. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  316. package/dist/backend/backend/src/services/slack/slack.service.d.ts +6 -0
  317. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  318. package/dist/backend/backend/src/services/slack/slack.service.js +8 -0
  319. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  320. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +105 -0
  321. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -0
  322. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +238 -0
  323. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -0
  324. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  325. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +4 -0
  326. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  327. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +39 -12
  328. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -1
  329. package/dist/backend/backend/src/services/usage/usage-stats.service.js +61 -20
  330. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -1
  331. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -0
  332. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  333. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +9 -0
  334. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  335. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +10 -0
  336. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  337. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +45 -2
  338. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  339. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  340. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  341. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  342. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
  344. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  345. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  346. package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
  347. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  348. package/dist/backend/backend/src/types/experiment.types.d.ts +153 -0
  349. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
  350. package/dist/backend/backend/src/types/experiment.types.js +32 -0
  351. package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
  352. package/dist/backend/backend/src/types/index.d.ts +12 -1
  353. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  354. package/dist/backend/backend/src/types/index.js.map +1 -1
  355. package/dist/backend/backend/src/types/messaging.types.d.ts +11 -0
  356. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  357. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  358. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts +77 -0
  359. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts.map +1 -0
  360. package/dist/backend/backend/src/types/v2/completion-evidence.types.js +119 -0
  361. package/dist/backend/backend/src/types/v2/completion-evidence.types.js.map +1 -0
  362. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +13 -0
  363. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  364. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  365. package/dist/backend/build-info.json +2 -2
  366. package/dist/backend/config/constants.d.ts +11 -0
  367. package/dist/backend/config/constants.d.ts.map +1 -1
  368. package/dist/backend/config/constants.js +11 -0
  369. package/dist/backend/config/constants.js.map +1 -1
  370. package/dist/cli/backend/src/constants.d.ts +192 -2
  371. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  372. package/dist/cli/backend/src/constants.js +196 -1
  373. package/dist/cli/backend/src/constants.js.map +1 -1
  374. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  375. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  376. package/dist/cli/backend/src/services/agent/agent-registration.service.js +28 -3
  377. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  378. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  379. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  380. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  381. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  382. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  383. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +14 -3
  384. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  385. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  386. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  387. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  388. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  389. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  390. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  391. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  392. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  393. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  394. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  395. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  396. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  397. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  398. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  399. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +49 -5
  400. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  401. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  402. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  403. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  404. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  405. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  406. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  407. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  408. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  409. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
  410. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  411. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
  412. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  413. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  414. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +204 -56
  416. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  417. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  418. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  419. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  420. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +207 -0
  421. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  422. package/dist/cli/backend/src/services/harness/claude-accounts.js +306 -0
  423. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -0
  424. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  425. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  426. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +48 -0
  427. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  428. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  429. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  430. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +156 -19
  431. package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  432. package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
  433. package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
  434. package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
  435. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +19 -4
  436. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  437. package/dist/cli/backend/src/services/harness/login-broker.service.js +46 -7
  438. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  439. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +18 -2
  440. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  441. package/dist/cli/backend/src/services/harness/owner-login-request.js +31 -7
  442. package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -1
  443. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  444. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  445. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  446. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  447. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
  448. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  449. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +46 -0
  450. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  451. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  452. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  453. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  454. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  455. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts +197 -0
  456. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js +455 -0
  458. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -0
  459. package/dist/cli/backend/src/services/people/acting-for.service.d.ts +188 -0
  460. package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/people/acting-for.service.js +299 -0
  462. package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts +89 -0
  464. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/people/dedicated-agent.js +113 -0
  466. package/dist/cli/backend/src/services/people/dedicated-agent.js.map +1 -0
  467. package/dist/cli/backend/src/services/people/people-directory.service.d.ts +239 -0
  468. package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/people/people-directory.service.js +454 -0
  470. package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  472. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  473. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  474. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  475. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  476. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  477. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  478. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  479. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  480. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  481. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  482. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
  483. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  484. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
  485. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  486. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  487. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  488. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +46 -0
  489. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  490. package/dist/cli/backend/src/services/slack/slack.service.d.ts +6 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  492. package/dist/cli/backend/src/services/slack/slack.service.js +8 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  494. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  495. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +4 -0
  496. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  497. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  498. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  499. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  500. package/dist/cli/backend/src/types/index.d.ts +12 -1
  501. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  502. package/dist/cli/backend/src/types/index.js.map +1 -1
  503. package/dist/cli/backend/src/types/messaging.types.d.ts +11 -0
  504. package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
  505. package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
  506. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +13 -0
  507. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  508. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  509. package/dist/cli/cli/src/utils/marketplace.d.ts +21 -0
  510. package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
  511. package/dist/cli/cli/src/utils/marketplace.js +35 -1
  512. package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
  513. package/dist/cli/config/constants.d.ts +11 -0
  514. package/dist/cli/config/constants.d.ts.map +1 -1
  515. package/dist/cli/config/constants.js +11 -0
  516. package/dist/cli/config/constants.js.map +1 -1
  517. package/dist/cli/config/skills/marketplace-registry.d.ts +4 -4
  518. package/dist/cli/config/skills/marketplace-registry.js +4 -4
  519. package/frontend/dist/assets/{index-fc715ec3.css → index-5e967795.css} +1 -1
  520. package/frontend/dist/assets/{index-5b7af029.js → index-800118ca.js} +296 -296
  521. package/frontend/dist/index.html +2 -2
  522. package/package.json +1 -1
  523. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +45 -0
  524. package/packages/crewly-agent/src/runtime/tool-registry.ts +40 -5
  525. package/packages/crewly-agent/src/test/isolated-home.test.ts +24 -0
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Acting-for — the person each agent session is working for right now
3
+ * (issue #968).
4
+ *
5
+ * Every human message delivered to an agent records its sender as the person
6
+ * that agent acts for until the next human message: a Slack message records
7
+ * the sender's Slack user id (`owner` for any Slack id of the owner), a
8
+ * dashboard message records the owner. A message one agent sends another
9
+ * passes the sender's person on, so work delegated for Info stays Info's — and
10
+ * a message an agent wrote is never recorded as a person, even when it came
11
+ * through Slack under a bot's user id. Scheduled, autonomous and system turns
12
+ * act for the owner.
13
+ *
14
+ * The record is set only by the backend from what it delivered — never from
15
+ * anything an agent sends — and connector credential requests carry it to
16
+ * Cloud, which decides whether that person may use the grant.
17
+ *
18
+ * Kept in `<CREWLY_HOME>/acting-for.json` so a restart does not turn a
19
+ * member's in-flight turn into the owner's.
20
+ *
21
+ * specs/per-person-access.md
22
+ *
23
+ * @module services/people/acting-for.service
24
+ */
25
+ import * as fs from 'fs';
26
+ import * as path from 'path';
27
+ import { AsyncLocalStorage } from 'async_hooks';
28
+ import { PEOPLE_CONSTANTS } from '../../constants.js';
29
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
30
+ import { getPeopleDirectory } from './people-directory.service.js';
31
+ /** Valid sources (for reading the store). */
32
+ const SOURCES = ['slack', 'dashboard', 'agent', 'system'];
33
+ /** The acting-for record. */
34
+ export class ActingForService {
35
+ filePathOverride;
36
+ people;
37
+ now;
38
+ cache = null;
39
+ /**
40
+ * @param deps - Store path, people directory, clock
41
+ */
42
+ constructor(deps = {}) {
43
+ this.filePathOverride = deps.filePath;
44
+ this.people = deps.people ?? getPeopleDirectory;
45
+ this.now = deps.now ?? (() => Date.now());
46
+ }
47
+ /**
48
+ * Record that a session now acts for a person.
49
+ *
50
+ * @param session - Agent session name
51
+ * @param personId - Slack user id, or `owner`
52
+ * @param source - What delivered the message
53
+ */
54
+ record(session, personId, source) {
55
+ if (!session || !personId)
56
+ return;
57
+ personId = this.canonical(personId);
58
+ const all = this.load();
59
+ const current = all[session];
60
+ if (current && current.personId === personId && current.source === source)
61
+ return;
62
+ all[session] = { personId, source, at: new Date(this.now()).toISOString() };
63
+ this.save(all);
64
+ }
65
+ /**
66
+ * Record a human message delivered to a session: a Slack sender, or the
67
+ * owner when it carries no Slack sender (dashboard / terminal).
68
+ *
69
+ * @param session - Agent session name
70
+ * @param slackUserId - Sender's Slack user id, when the message came from Slack
71
+ */
72
+ recordHumanMessage(session, slackUserId) {
73
+ if (slackUserId && PEOPLE_CONSTANTS.SLACK_USER_ID_PATTERN.test(slackUserId)) {
74
+ // A bot's user id is never a person: a post an agent made through
75
+ // Slack that was not recognised as the agent's leaves the record as it was.
76
+ if (this.isBot(slackUserId))
77
+ return;
78
+ this.record(session, slackUserId, 'slack');
79
+ try {
80
+ this.people().noteSeen(slackUserId);
81
+ }
82
+ catch {
83
+ // the directory is best effort here
84
+ }
85
+ return;
86
+ }
87
+ this.record(session, PEOPLE_CONSTANTS.OWNER_ID, 'dashboard');
88
+ }
89
+ /**
90
+ * A turn nobody asked for just now — a scheduled check, a scheduled
91
+ * message, an autonomous run, a system event: it acts for the owner, not
92
+ * for whoever spoke last.
93
+ *
94
+ * @param session - Agent session
95
+ */
96
+ recordSystemTurn(session) {
97
+ this.record(session, PEOPLE_CONSTANTS.OWNER_ID, 'system');
98
+ }
99
+ /**
100
+ * A message an agent wrote (in Slack, or a chat row an agent authored):
101
+ * the target acts for whoever that agent acts for. When the author has no
102
+ * record here (an agent on another machine) the target is left as it was.
103
+ *
104
+ * @param target - Receiving session
105
+ * @param authorSession - The agent that wrote it
106
+ */
107
+ inheritFromAgent(target, authorSession) {
108
+ if (!target || !authorSession || target === authorSession)
109
+ return;
110
+ const from = this.load()[authorSession];
111
+ if (from)
112
+ this.record(target, from.personId, 'agent');
113
+ }
114
+ /**
115
+ * A message from one agent to another: the target acts for whoever the
116
+ * sender acts for (the owner when the sender has no record).
117
+ *
118
+ * @param target - Receiving session
119
+ * @param fromSession - Sending session
120
+ */
121
+ inherit(target, fromSession) {
122
+ if (!target || !fromSession || target === fromSession)
123
+ return;
124
+ const from = this.load()[fromSession];
125
+ this.record(target, from?.personId ?? PEOPLE_CONSTANTS.OWNER_ID, 'agent');
126
+ }
127
+ /**
128
+ * A session's record.
129
+ *
130
+ * @param session - Agent session name
131
+ * @returns Entry, or null when the session never got a human message
132
+ */
133
+ get(session) {
134
+ const entry = this.load()[session];
135
+ return entry ? { ...entry } : null;
136
+ }
137
+ /**
138
+ * The person a request acts for: the owner for a request with no agent
139
+ * session (the owner's dashboard), else the session's record (the owner
140
+ * when it has none).
141
+ *
142
+ * @param session - Calling agent session, if any
143
+ * @returns Actor
144
+ */
145
+ actorFor(session) {
146
+ const people = this.people();
147
+ const raw = session ? this.load()[session]?.personId : undefined;
148
+ // No record, the owner by any spelling, or a bot left by an earlier
149
+ // version: the owner.
150
+ const id = !raw || people.isOwner(raw) || this.isBot(raw) ? PEOPLE_CONSTANTS.OWNER_ID : raw;
151
+ return { id, role: people.roleOf(id), name: people.displayName(id) };
152
+ }
153
+ /**
154
+ * @param personId - Person id
155
+ * @returns `owner` for the owner by any spelling, else the id
156
+ */
157
+ canonical(personId) {
158
+ try {
159
+ return this.people().canonicalId(personId);
160
+ }
161
+ catch {
162
+ return personId;
163
+ }
164
+ }
165
+ /**
166
+ * @param id - Slack user id
167
+ * @returns True for a known bot (false when the directory cannot tell)
168
+ */
169
+ isBot(id) {
170
+ try {
171
+ return this.people().isBot(id);
172
+ }
173
+ catch {
174
+ return false;
175
+ }
176
+ }
177
+ /** Forget everything (tests). */
178
+ clear() {
179
+ this.save({});
180
+ }
181
+ /** @returns Store path */
182
+ filePath() {
183
+ return this.filePathOverride ?? path.join(getCrewlyHomePath(), PEOPLE_CONSTANTS.ACTING_FOR_FILE);
184
+ }
185
+ /** @returns All records (read once, then cached) */
186
+ load() {
187
+ if (this.cache)
188
+ return this.cache;
189
+ try {
190
+ const raw = JSON.parse(fs.readFileSync(this.filePath(), 'utf-8'));
191
+ const sessions = raw && typeof raw === 'object' ? raw.sessions : undefined;
192
+ const out = {};
193
+ if (sessions && typeof sessions === 'object') {
194
+ for (const [name, e] of Object.entries(sessions)) {
195
+ if (e && typeof e.personId === 'string' && typeof e.at === 'string') {
196
+ out[name] = { personId: e.personId, at: e.at, source: SOURCES.includes(e.source) ? e.source : 'dashboard' };
197
+ }
198
+ }
199
+ }
200
+ this.cache = out;
201
+ }
202
+ catch {
203
+ this.cache = {};
204
+ }
205
+ return this.cache;
206
+ }
207
+ /**
208
+ * Save atomically (best effort: the in-memory record still applies).
209
+ *
210
+ * @param all - Records
211
+ */
212
+ save(all) {
213
+ this.cache = all;
214
+ try {
215
+ const target = this.filePath();
216
+ fs.mkdirSync(path.dirname(target), { recursive: true });
217
+ const tmp = `${target}.${process.pid}.tmp`;
218
+ fs.writeFileSync(tmp, `${JSON.stringify({ version: 1, sessions: all }, null, 2)}\n`, 'utf-8');
219
+ fs.renameSync(tmp, target);
220
+ }
221
+ catch {
222
+ // kept in memory
223
+ }
224
+ }
225
+ }
226
+ let instance = null;
227
+ /**
228
+ * The backend's acting-for record.
229
+ *
230
+ * @returns Singleton
231
+ */
232
+ export function getActingFor() {
233
+ instance ??= new ActingForService();
234
+ return instance;
235
+ }
236
+ /**
237
+ * Replace the singleton (tests).
238
+ *
239
+ * @param service - Instance, or null to reset
240
+ */
241
+ export function setActingForForTesting(service) {
242
+ instance = service;
243
+ }
244
+ /**
245
+ * Before a scheduled, autonomous or system turn is delivered: the session
246
+ * acts for the owner (best effort, never throws).
247
+ *
248
+ * @param session - Agent session the turn goes to
249
+ */
250
+ export function noteSystemTurn(session) {
251
+ try {
252
+ getActingFor().recordSystemTurn(session);
253
+ }
254
+ catch {
255
+ // no record means the owner anyway
256
+ }
257
+ }
258
+ const actorStore = new AsyncLocalStorage();
259
+ /**
260
+ * Run work as a person: connector token requests made inside carry that
261
+ * person to Cloud.
262
+ *
263
+ * @param actor - Person
264
+ * @param fn - Work
265
+ * @returns What `fn` returns
266
+ */
267
+ export function runAsActor(actor, fn) {
268
+ return actorStore.run(actor, fn);
269
+ }
270
+ /**
271
+ * The person the current request acts for.
272
+ *
273
+ * @returns Actor, or null outside a connector request (backend-internal calls)
274
+ */
275
+ export function currentActor() {
276
+ return actorStore.getStore() ?? null;
277
+ }
278
+ /**
279
+ * Headers that tell Cloud who a credential request is for.
280
+ *
281
+ * @param actor - Person (default: the current request's)
282
+ * @returns Headers (empty outside a connector request)
283
+ */
284
+ export function actingForHeaders(actor = currentActor()) {
285
+ if (!actor)
286
+ return {};
287
+ return { [PEOPLE_CONSTANTS.ACTING_FOR_HEADER]: actor.id, [PEOPLE_CONSTANTS.ACTING_FOR_ROLE_HEADER]: actor.role };
288
+ }
289
+ /**
290
+ * Cache-key suffix for a token fetched for the current person, so one
291
+ * person's cached token is never handed to another.
292
+ *
293
+ * @param actor - Person (default: the current request's)
294
+ * @returns `''` outside a connector request, else `\0<person id>`
295
+ */
296
+ export function actorCacheSuffix(actor = currentActor()) {
297
+ return actor ? `\0${actor.id}` : '';
298
+ }
299
+ //# sourceMappingURL=acting-for.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acting-for.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/people/acting-for.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Dedicated agents (issue #968): an agent bound to one person works only for
3
+ * them. When anyone else DMs it or @'s it, it does no work and is not woken —
4
+ * it answers once with a polite decline that points to the team lead.
5
+ *
6
+ * The decision is made where a Slack message enters (the agent-DM and team
7
+ * channel routers), before anything is recorded, dispatched or woken.
8
+ * Messages from other agents are never declined: delegation still works.
9
+ *
10
+ * specs/per-person-access.md
11
+ *
12
+ * @module services/people/dedicated-agent
13
+ */
14
+ import type { Team, TeamMember } from '../../types/index.js';
15
+ import { type PeopleDirectoryService } from './people-directory.service.js';
16
+ /** A message's sender, as far as the decision needs it. */
17
+ export interface DedicatedSender {
18
+ /** Slack user id of the human who wrote it */
19
+ slackUserId?: string | null;
20
+ /** Set when another agent wrote it */
21
+ authorAgentSession?: string | null;
22
+ }
23
+ /** The decision for one message to one agent. */
24
+ export type DedicatedDecision = {
25
+ decline: false;
26
+ } | {
27
+ decline: true;
28
+ text: string;
29
+ };
30
+ /**
31
+ * Whether a person id is the one an agent is dedicated to.
32
+ *
33
+ * @param dedicatedTo - The member's `dedicatedTo`
34
+ * @param sender - Sender's Slack user id
35
+ * @param people - Directory (owner matching)
36
+ * @returns True when they are the same person
37
+ */
38
+ export declare function isDedicatedPerson(dedicatedTo: string, sender: string, people: Pick<PeopleDirectoryService, 'isOwner'>): boolean;
39
+ /**
40
+ * The polite decline: who the agent works for, and where to go instead.
41
+ *
42
+ * @param member - The dedicated agent
43
+ * @param team - Its team (for the lead), when known
44
+ * @param senderSlackUserId - The person to answer
45
+ * @param people - Directory (names)
46
+ * @returns Slack mrkdwn text
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * declineText(member, team, 'U0STEVE');
51
+ * // "Hi <@U0STEVE>, I'm Info's personal assistant, so I can't take this on. For this, please ask Ella (team lead)."
52
+ * ```
53
+ */
54
+ export declare function declineText(member: Pick<TeamMember, 'id' | 'name' | 'dedicatedTo'>, team: Pick<Team, 'members' | 'leaderId' | 'leaderIds'> | null, senderSlackUserId: string, people?: Pick<PeopleDirectoryService, 'displayName'>): string;
55
+ /**
56
+ * Decide whether an agent declines a message.
57
+ *
58
+ * @param member - The receiving agent (with its `dedicatedTo`)
59
+ * @param team - Its team, when known
60
+ * @param sender - Who wrote the message
61
+ * @param people - Directory (default: the backend's)
62
+ * @returns `{ decline: true, text }` for a human other than the agent's person
63
+ */
64
+ export declare function dedicatedDecision(member: Pick<TeamMember, 'id' | 'name' | 'dedicatedTo'> | null | undefined, team: Pick<Team, 'members' | 'leaderId' | 'leaderIds'> | null, sender: DedicatedSender, people?: Pick<PeopleDirectoryService, 'isOwner' | 'displayName'>): DedicatedDecision;
65
+ /** Where an agent's member record and team come from. */
66
+ export interface DedicatedLookup {
67
+ getTeams(): Promise<Team[]>;
68
+ }
69
+ /**
70
+ * The member record and team of an agent session.
71
+ *
72
+ * @param storage - Team storage
73
+ * @param sessionName - Agent session
74
+ * @returns Both, or null when the session is not a team member (the orchestrator, a smoke test)
75
+ */
76
+ export declare function findMemberWithTeam(storage: DedicatedLookup, sessionName: string): Promise<{
77
+ member: TeamMember;
78
+ team: Team;
79
+ } | null>;
80
+ /**
81
+ * Decide for an agent session (looks the member up).
82
+ *
83
+ * @param storage - Team storage
84
+ * @param sessionName - Receiving agent session
85
+ * @param sender - Who wrote the message
86
+ * @returns The decision (no decline when the agent is unknown or shared)
87
+ */
88
+ export declare function dedicatedDecisionFor(storage: DedicatedLookup, sessionName: string, sender: DedicatedSender): Promise<DedicatedDecision>;
89
+ //# sourceMappingURL=dedicated-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedicated-agent.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/people/dedicated-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAsB,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEhG,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC/B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,iDAAiD;AACjD,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAG,OAAO,CAG/H;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAC1B,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,EACvD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,MAAM,EACzB,MAAM,GAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAwB,GACxE,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,EAC1E,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,EAC7D,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,aAAa,CAAwB,GACpF,iBAAiB,CAOnB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC/B,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAU1I;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAS7I"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Dedicated agents (issue #968): an agent bound to one person works only for
3
+ * them. When anyone else DMs it or @'s it, it does no work and is not woken —
4
+ * it answers once with a polite decline that points to the team lead.
5
+ *
6
+ * The decision is made where a Slack message enters (the agent-DM and team
7
+ * channel routers), before anything is recorded, dispatched or woken.
8
+ * Messages from other agents are never declined: delegation still works.
9
+ *
10
+ * specs/per-person-access.md
11
+ *
12
+ * @module services/people/dedicated-agent
13
+ */
14
+ import { getTeamLeads } from '../../utils/team.utils.js';
15
+ import { getPeopleDirectory } from './people-directory.service.js';
16
+ /**
17
+ * Whether a person id is the one an agent is dedicated to.
18
+ *
19
+ * @param dedicatedTo - The member's `dedicatedTo`
20
+ * @param sender - Sender's Slack user id
21
+ * @param people - Directory (owner matching)
22
+ * @returns True when they are the same person
23
+ */
24
+ export function isDedicatedPerson(dedicatedTo, sender, people) {
25
+ if (dedicatedTo === sender)
26
+ return true;
27
+ return people.isOwner(dedicatedTo) && people.isOwner(sender);
28
+ }
29
+ /**
30
+ * The polite decline: who the agent works for, and where to go instead.
31
+ *
32
+ * @param member - The dedicated agent
33
+ * @param team - Its team (for the lead), when known
34
+ * @param senderSlackUserId - The person to answer
35
+ * @param people - Directory (names)
36
+ * @returns Slack mrkdwn text
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * declineText(member, team, 'U0STEVE');
41
+ * // "Hi <@U0STEVE>, I'm Info's personal assistant, so I can't take this on. For this, please ask Ella (team lead)."
42
+ * ```
43
+ */
44
+ export function declineText(member, team, senderSlackUserId, people = getPeopleDirectory()) {
45
+ const owner = member.dedicatedTo ? people.displayName(member.dedicatedTo) : 'someone else';
46
+ const whose = owner === 'the owner' ? "the owner's" : `${owner}'s`;
47
+ const lead = team ? getTeamLeads(team).find((m) => m.id !== member.id) : undefined;
48
+ const pointer = lead ? `${lead.name} (team lead)` : 'the Orc (the orchestrator)';
49
+ return `Hi <@${senderSlackUserId}>, I'm ${whose} personal assistant, so I can't take this on. For this, please ask ${pointer}.`;
50
+ }
51
+ /**
52
+ * Decide whether an agent declines a message.
53
+ *
54
+ * @param member - The receiving agent (with its `dedicatedTo`)
55
+ * @param team - Its team, when known
56
+ * @param sender - Who wrote the message
57
+ * @param people - Directory (default: the backend's)
58
+ * @returns `{ decline: true, text }` for a human other than the agent's person
59
+ */
60
+ export function dedicatedDecision(member, team, sender, people = getPeopleDirectory()) {
61
+ if (!member?.dedicatedTo)
62
+ return { decline: false };
63
+ if (sender.authorAgentSession)
64
+ return { decline: false };
65
+ const slackUserId = sender.slackUserId;
66
+ if (!slackUserId)
67
+ return { decline: false };
68
+ if (isDedicatedPerson(member.dedicatedTo, slackUserId, people))
69
+ return { decline: false };
70
+ return { decline: true, text: declineText(member, team, slackUserId, people) };
71
+ }
72
+ /**
73
+ * The member record and team of an agent session.
74
+ *
75
+ * @param storage - Team storage
76
+ * @param sessionName - Agent session
77
+ * @returns Both, or null when the session is not a team member (the orchestrator, a smoke test)
78
+ */
79
+ export async function findMemberWithTeam(storage, sessionName) {
80
+ try {
81
+ for (const team of await storage.getTeams()) {
82
+ const member = team.members?.find((m) => m.sessionName === sessionName);
83
+ if (member)
84
+ return { member, team };
85
+ }
86
+ }
87
+ catch {
88
+ // storage unavailable: no decision
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * Decide for an agent session (looks the member up).
94
+ *
95
+ * @param storage - Team storage
96
+ * @param sessionName - Receiving agent session
97
+ * @param sender - Who wrote the message
98
+ * @returns The decision (no decline when the agent is unknown or shared)
99
+ */
100
+ export async function dedicatedDecisionFor(storage, sessionName, sender) {
101
+ if (!sender.slackUserId || sender.authorAgentSession)
102
+ return { decline: false };
103
+ const found = await findMemberWithTeam(storage, sessionName);
104
+ if (!found?.member.dedicatedTo)
105
+ return { decline: false };
106
+ try {
107
+ return dedicatedDecision(found.member, found.team, sender);
108
+ }
109
+ catch {
110
+ return { decline: false };
111
+ }
112
+ }
113
+ //# sourceMappingURL=dedicated-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedicated-agent.js","sourceRoot":"","sources":["../../../../../../backend/src/services/people/dedicated-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Connector grant ownership and sharing (issue #968) — the shapes the
3
+ * backend exchanges with Cloud, their validation, and the message an agent
4
+ * gets when the person it acts for may not use a grant.
5
+ *
6
+ * Cloud holds each grant's `authorizedBy` (the person who connected it) and
7
+ * `sharing`, and decides on every credential request. A grant with neither
8
+ * was connected before per-person access: it is the owner's, shared with all
9
+ * members (what it was before). The owner is `owner` or any of their Slack ids.
10
+ *
11
+ * specs/per-person-access.md
12
+ *
13
+ * @module services/people/grant-sharing
14
+ */
15
+ import type { Actor } from './acting-for.service.js';
16
+ /** Who may use a grant besides the person who authorized it. */
17
+ export interface GrantSharing {
18
+ /** `owner`: only the person who authorized it; `people`: also the named people; `members`: every member (not guests) */
19
+ mode: 'owner' | 'people' | 'members';
20
+ /** For `people`: person ids (Slack user ids) */
21
+ people?: string[];
22
+ }
23
+ /** A grant's ownership, as Cloud reports it. */
24
+ export interface GrantOwnership {
25
+ /** Person who authorized it (a member's Slack user id, or `owner`); absent = the owner */
26
+ authorizedBy?: string;
27
+ /** Absent = owner only (both fields absent: a grant from before, shared with all members) */
28
+ sharing?: GrantSharing;
29
+ }
30
+ /** A sharing/ownership edit is invalid. */
31
+ export declare class GrantSharingError extends Error {
32
+ }
33
+ /**
34
+ * Validate a sharing setting from the dashboard.
35
+ *
36
+ * @param raw - Candidate (untrusted)
37
+ * @returns Clean sharing
38
+ * @throws GrantSharingError when invalid
39
+ */
40
+ export declare function validateSharing(raw: unknown): GrantSharing;
41
+ /**
42
+ * Validate an owner change (a person id).
43
+ *
44
+ * @param raw - Candidate
45
+ * @returns The person id
46
+ * @throws GrantSharingError when invalid
47
+ */
48
+ export declare function validateAuthorizedBy(raw: unknown): string;
49
+ /**
50
+ * Whether a person may use a grant — the same rule Cloud applies (used for
51
+ * the dashboard's preview and tests).
52
+ *
53
+ * @param grant - Ownership (missing fields = the owner's alone)
54
+ * @param actor - The person
55
+ * @param isOwner - Whether a person id is the instance owner
56
+ * @returns True when allowed
57
+ */
58
+ export declare function mayUseGrant(grant: GrantOwnership, actor: Pick<Actor, 'id' | 'role'>, isOwner: (id: string) => boolean): boolean;
59
+ /**
60
+ * The message an agent gets when the person it acts for may not use a grant,
61
+ * e.g. "Info's Google Calendar isn't shared with you. Ask Info for what you
62
+ * need, or ask the Crewly owner to share it in Connections."
63
+ *
64
+ * @param what - What was asked for ("Google Calendar", "Canva")
65
+ * @param authorizedBy - Person who owns the grant, when Cloud said
66
+ * @returns English message
67
+ */
68
+ export declare function notPermittedMessage(what: string, authorizedBy?: string | null): string;
69
+ /** Display names of Google products, for refusals. */
70
+ export declare const GOOGLE_PRODUCT_LABELS: Readonly<Record<string, string>>;
71
+ /**
72
+ * Read Cloud's refusal from a failed response body.
73
+ *
74
+ * @param body - Parsed body (untrusted)
75
+ * @returns `{ authorizedBy }` when it is a `not_permitted` refusal, else null
76
+ */
77
+ export declare function readNotPermitted(body: unknown): {
78
+ authorizedBy?: string;
79
+ } | null;
80
+ //# sourceMappingURL=grant-sharing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant-sharing.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/people/grant-sharing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,wHAAwH;IACxH,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC9B,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,2CAA2C;AAC3C,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAc1D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAS/H;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAmBtF;AAED,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMhF"}