crewly 1.20.210 → 1.20.212

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 (246) hide show
  1. package/config/roles/orchestrator/prompt.md +1 -0
  2. package/config/skills/agent/core/app-data/SKILL.md +30 -1
  3. package/config/skills/agent/core/publish-app/SKILL.md +73 -6
  4. package/config/skills/agent/core/publish-app/execute.sh +125 -4
  5. package/config/skills/agent/core/publish-app/execute.test.sh +95 -4
  6. package/config/skills/agent/core/send-message/SKILL.md +9 -0
  7. package/config/skills/orchestrator/delegate-task/SKILL.md +9 -0
  8. package/config/skills/orchestrator/get-team-status/SKILL.md +9 -0
  9. package/config/skills/orchestrator/get-team-status/execute.sh +5 -1
  10. package/config/skills/orchestrator/send-message/SKILL.md +9 -0
  11. package/config/skills/orchestrator/start-agent/SKILL.md +9 -0
  12. package/config/skills/orchestrator/start-team/SKILL.md +9 -0
  13. package/config/skills/team-leader/assign-ticket/SKILL.md +9 -0
  14. package/config/skills/team-leader/delegate-task/SKILL.md +9 -0
  15. package/dist/backend/backend/src/constants.d.ts +78 -0
  16. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  17. package/dist/backend/backend/src/constants.js +78 -0
  18. package/dist/backend/backend/src/constants.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts +17 -1
  20. package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts.map +1 -1
  21. package/dist/backend/backend/src/controllers/apps/apps.controller.js +45 -8
  22. package/dist/backend/backend/src/controllers/apps/apps.controller.js.map +1 -1
  23. package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts +7 -0
  24. package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts.map +1 -1
  25. package/dist/backend/backend/src/controllers/apps/apps.routes.js +15 -1
  26. package/dist/backend/backend/src/controllers/apps/apps.routes.js.map +1 -1
  27. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +12 -0
  28. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  29. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +36 -1
  30. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  31. package/dist/backend/backend/src/controllers/request-types.d.ts +10 -1
  32. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +0 -36
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +41 -1
  36. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  37. package/dist/backend/backend/src/controllers/team/team-pause.controller.d.ts +59 -0
  38. package/dist/backend/backend/src/controllers/team/team-pause.controller.d.ts.map +1 -0
  39. package/dist/backend/backend/src/controllers/team/team-pause.controller.js +161 -0
  40. package/dist/backend/backend/src/controllers/team/team-pause.controller.js.map +1 -0
  41. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +14 -0
  42. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/team/team.controller.js +78 -5
  44. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
  46. package/dist/backend/backend/src/controllers/team/team.routes.js +7 -1
  47. package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
  48. package/dist/backend/backend/src/index.d.ts.map +1 -1
  49. package/dist/backend/backend/src/index.js +18 -1
  50. package/dist/backend/backend/src/index.js.map +1 -1
  51. package/dist/backend/backend/src/models/Team.d.ts +5 -1
  52. package/dist/backend/backend/src/models/Team.d.ts.map +1 -1
  53. package/dist/backend/backend/src/models/Team.js +8 -0
  54. package/dist/backend/backend/src/models/Team.js.map +1 -1
  55. package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts +7 -2
  56. package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/agent/owner-stopped.registry.js +9 -3
  58. package/dist/backend/backend/src/services/agent/owner-stopped.registry.js.map +1 -1
  59. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +3 -2
  61. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  62. package/dist/backend/backend/src/services/apps/app-open-link.d.ts +61 -0
  63. package/dist/backend/backend/src/services/apps/app-open-link.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/apps/app-open-link.js +112 -0
  65. package/dist/backend/backend/src/services/apps/app-open-link.js.map +1 -0
  66. package/dist/backend/backend/src/services/apps/app-wake-message.d.ts +44 -3
  67. package/dist/backend/backend/src/services/apps/app-wake-message.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/apps/app-wake-message.js +99 -7
  69. package/dist/backend/backend/src/services/apps/app-wake-message.js.map +1 -1
  70. package/dist/backend/backend/src/services/apps/app-wake.service.d.ts +29 -2
  71. package/dist/backend/backend/src/services/apps/app-wake.service.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/apps/app-wake.service.js +151 -21
  73. package/dist/backend/backend/src/services/apps/app-wake.service.js.map +1 -1
  74. package/dist/backend/backend/src/services/apps/apps-registry.service.d.ts +18 -0
  75. package/dist/backend/backend/src/services/apps/apps-registry.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/apps/apps-registry.service.js +14 -0
  77. package/dist/backend/backend/src/services/apps/apps-registry.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/apps/apps.service.d.ts +261 -12
  79. package/dist/backend/backend/src/services/apps/apps.service.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/apps/apps.service.js +387 -30
  81. package/dist/backend/backend/src/services/apps/apps.service.js.map +1 -1
  82. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts +15 -1
  83. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/apps/apps.wiring.js +27 -7
  85. package/dist/backend/backend/src/services/apps/apps.wiring.js.map +1 -1
  86. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +17 -5
  88. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/core/logger.service.d.ts +5 -0
  90. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/core/logger.service.js +8 -0
  92. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
  93. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/core/storage.service.js +6 -0
  95. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +6 -0
  98. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
  99. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +12 -0
  100. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +59 -0
  102. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
  103. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +12 -6
  105. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +5 -0
  108. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  109. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +4 -0
  111. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  112. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +22 -0
  114. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts +27 -0
  116. package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts.map +1 -0
  117. package/dist/backend/backend/src/services/slack/slack-channel-members.js +54 -0
  118. package/dist/backend/backend/src/services/slack/slack-channel-members.js.map +1 -0
  119. package/dist/backend/backend/src/services/slack/slack-directory.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/slack/slack-directory.service.js +7 -2
  121. package/dist/backend/backend/src/services/slack/slack-directory.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/slack/slack-initializer.js +3 -0
  124. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  125. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  126. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +19 -0
  127. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  128. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +48 -0
  129. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +155 -4
  131. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  133. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +3 -1
  134. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  135. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +11 -0
  136. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +36 -1
  138. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/task-pool/untargeted-router.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/task-pool/untargeted-router.js +14 -6
  141. package/dist/backend/backend/src/services/task-pool/untargeted-router.js.map +1 -1
  142. package/dist/backend/backend/src/services/team/team-pause-command.d.ts +97 -0
  143. package/dist/backend/backend/src/services/team/team-pause-command.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/team/team-pause-command.js +177 -0
  145. package/dist/backend/backend/src/services/team/team-pause-command.js.map +1 -0
  146. package/dist/backend/backend/src/services/team/team-pause-notice.d.ts +43 -0
  147. package/dist/backend/backend/src/services/team/team-pause-notice.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/team/team-pause-notice.js +61 -0
  149. package/dist/backend/backend/src/services/team/team-pause-notice.js.map +1 -0
  150. package/dist/backend/backend/src/services/team/team-pause.registry.d.ts +167 -0
  151. package/dist/backend/backend/src/services/team/team-pause.registry.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/team/team-pause.registry.js +263 -0
  153. package/dist/backend/backend/src/services/team/team-pause.registry.js.map +1 -0
  154. package/dist/backend/backend/src/services/team/team-pause.service.d.ts +172 -0
  155. package/dist/backend/backend/src/services/team/team-pause.service.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/team/team-pause.service.js +254 -0
  157. package/dist/backend/backend/src/services/team/team-pause.service.js.map +1 -0
  158. package/dist/backend/backend/src/services/team/team-pause.wiring.d.ts +30 -0
  159. package/dist/backend/backend/src/services/team/team-pause.wiring.d.ts.map +1 -0
  160. package/dist/backend/backend/src/services/team/team-pause.wiring.js +48 -0
  161. package/dist/backend/backend/src/services/team/team-pause.wiring.js.map +1 -0
  162. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  163. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +11 -0
  164. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  165. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +9 -0
  166. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +27 -2
  168. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  169. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  170. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +7 -0
  171. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  172. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  173. package/dist/backend/backend/src/services/workflow/cron-task.service.js +14 -0
  174. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  175. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  176. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +5 -0
  177. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  178. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  179. package/dist/backend/backend/src/services/workflow/scheduler.service.js +6 -0
  180. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  181. package/dist/backend/backend/src/types/index.d.ts +22 -0
  182. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  183. package/dist/backend/backend/src/types/index.js.map +1 -1
  184. package/dist/backend/build-info.json +2 -2
  185. package/dist/cli/backend/src/constants.d.ts +78 -0
  186. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  187. package/dist/cli/backend/src/constants.js +78 -0
  188. package/dist/cli/backend/src/constants.js.map +1 -1
  189. package/dist/cli/backend/src/models/Team.d.ts +5 -1
  190. package/dist/cli/backend/src/models/Team.d.ts.map +1 -1
  191. package/dist/cli/backend/src/models/Team.js +8 -0
  192. package/dist/cli/backend/src/models/Team.js.map +1 -1
  193. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  194. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +3 -2
  195. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  196. package/dist/cli/backend/src/services/apps/app-open-link.d.ts +61 -0
  197. package/dist/cli/backend/src/services/apps/app-open-link.d.ts.map +1 -0
  198. package/dist/cli/backend/src/services/apps/app-open-link.js +112 -0
  199. package/dist/cli/backend/src/services/apps/app-open-link.js.map +1 -0
  200. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  201. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +17 -5
  202. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  203. package/dist/cli/backend/src/services/core/logger.service.d.ts +5 -0
  204. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
  205. package/dist/cli/backend/src/services/core/logger.service.js +8 -0
  206. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
  207. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  208. package/dist/cli/backend/src/services/core/storage.service.js +6 -0
  209. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  210. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  211. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +22 -0
  212. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  213. package/dist/cli/backend/src/services/slack/slack-directory.service.d.ts.map +1 -1
  214. package/dist/cli/backend/src/services/slack/slack-directory.service.js +7 -2
  215. package/dist/cli/backend/src/services/slack/slack-directory.service.js.map +1 -1
  216. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  217. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +19 -0
  218. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  219. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +48 -0
  220. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  221. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +155 -4
  222. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  223. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  224. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +3 -1
  225. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  226. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +11 -0
  227. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  228. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +36 -1
  229. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  230. package/dist/cli/backend/src/services/team/team-pause-notice.d.ts +43 -0
  231. package/dist/cli/backend/src/services/team/team-pause-notice.d.ts.map +1 -0
  232. package/dist/cli/backend/src/services/team/team-pause-notice.js +61 -0
  233. package/dist/cli/backend/src/services/team/team-pause-notice.js.map +1 -0
  234. package/dist/cli/backend/src/services/team/team-pause.registry.d.ts +167 -0
  235. package/dist/cli/backend/src/services/team/team-pause.registry.d.ts.map +1 -0
  236. package/dist/cli/backend/src/services/team/team-pause.registry.js +263 -0
  237. package/dist/cli/backend/src/services/team/team-pause.registry.js.map +1 -0
  238. package/dist/cli/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  239. package/dist/cli/backend/src/services/workflow/cron-task.service.js +14 -0
  240. package/dist/cli/backend/src/services/workflow/cron-task.service.js.map +1 -1
  241. package/dist/cli/backend/src/types/index.d.ts +22 -0
  242. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  243. package/dist/cli/backend/src/types/index.js.map +1 -1
  244. package/frontend/dist/assets/{index-f64b333a.js → index-917db1b8.js} +279 -279
  245. package/frontend/dist/index.html +1 -1
  246. package/package.json +1 -1
@@ -10,6 +10,8 @@
10
10
  import path from 'path';
11
11
  import { CREWLY_APPS_CONSTANTS } from '../../constants.js';
12
12
  import { AppsCloudError } from './apps-cloud.client.js';
13
+ import { toOpenLinkInfos, usableMintedLink } from './app-open-link.js';
14
+ import { sanitizeAppData } from './app-wake-message.js';
13
15
  const C = CREWLY_APPS_CONSTANTS;
14
16
  const APP_ID_RE = /^[a-km-np-z2-9]{10}$/;
15
17
  const COLLECTION_RE = /^[A-Za-z0-9_-]{1,64}$/;
@@ -51,17 +53,155 @@ function requireData(data) {
51
53
  function optString(v) {
52
54
  return typeof v === 'string' && v.trim() ? v.trim() : undefined;
53
55
  }
56
+ const errorText = (err) => (err instanceof Error ? err.message : String(err));
57
+ /**
58
+ * The app's plain URL (what agents see; opens the sign-in page without a session).
59
+ *
60
+ * @param appId - App id
61
+ * @returns URL
62
+ */
63
+ export function plainAppUrl(appId) {
64
+ return `${C.APPS_ORIGIN}/${appId}`;
65
+ }
54
66
  /**
55
67
  * The "📱 <name> · Open app" card text. Markdown link: the reply path turns
56
- * it into a Slack link.
68
+ * it into a Slack link. A pending public request adds one line asking the
69
+ * owner to approve or decline it in the app.
57
70
  *
58
71
  * @param name - App name
59
- * @param appId - App id
72
+ * @param url - The link (signed or plain)
73
+ * @param pending - The app's pending public request, if any
60
74
  * @returns Card text
61
75
  */
62
- export function appCardText(name, appId) {
76
+ export function appCardText(name, url, pending) {
63
77
  const clean = name.replace(/[[\]()\r\n]/g, ' ').replace(/\s+/g, ' ').trim() || 'App';
64
- return `📱 ${clean} · [Open app](${C.APPS_ORIGIN}/${appId})`;
78
+ const card = `📱 ${clean} · [Open app](${url})`;
79
+ if (!pending)
80
+ return card;
81
+ // Names are validated collection names (P2 regex), safe to print.
82
+ const safe = (xs) => xs.filter((x) => COLLECTION_RE.test(x)).join(', ');
83
+ const parts = [
84
+ pending.publicRead.length ? `read ${safe(pending.publicRead)}` : '',
85
+ pending.publicSubmit.length ? `submit to ${safe(pending.publicSubmit)}` : '',
86
+ ].filter(Boolean);
87
+ return `${card}\n⚠️ Waiting for you: a request to make this app public (anyone with the link could ${parts.join('; ') || 'open it'}). Open the app to approve or decline it.`;
88
+ }
89
+ /**
90
+ * Check a list of collection names for a public request.
91
+ *
92
+ * @param v - Candidate (array of names, or a comma-separated string)
93
+ * @param what - Field name for the message
94
+ * @returns Unique names
95
+ * @throws AppsCloudError validation
96
+ */
97
+ export function requireCollectionList(v, what) {
98
+ if (v === undefined || v === null || v === '')
99
+ return [];
100
+ const raw = typeof v === 'string' ? v.split(',') : v;
101
+ if (!Array.isArray(raw))
102
+ throw validation(`${what} must be a list of collection names.`);
103
+ const names = [...new Set(raw.map((x) => (typeof x === 'string' ? x.trim() : x)).filter((x) => x !== ''))];
104
+ for (const n of names) {
105
+ if (typeof n !== 'string' || !COLLECTION_RE.test(n))
106
+ throw validation(`${what}: "${String(n).slice(0, 70)}" is not a collection name (1-64 of A-Z a-z 0-9 _ -).`);
107
+ }
108
+ if (names.length > C.PUBLIC_REQUEST.MAX_COLLECTIONS)
109
+ throw validation(`${what} can name at most ${C.PUBLIC_REQUEST.MAX_COLLECTIONS} collections.`);
110
+ return names;
111
+ }
112
+ /**
113
+ * Check a public request body.
114
+ *
115
+ * @param input - `{ publicRead?, publicSubmit?, note? }`
116
+ * @returns The body Cloud gets
117
+ * @throws AppsCloudError validation
118
+ */
119
+ export function validatePublicRequest(input) {
120
+ const o = input && typeof input === 'object' && !Array.isArray(input) ? input : null;
121
+ if (!o)
122
+ throw validation('publicRequest must be an object { publicRead?, publicSubmit?, note? }.');
123
+ const publicRead = requireCollectionList(o.publicRead, 'publicRead');
124
+ const publicSubmit = requireCollectionList(o.publicSubmit, 'publicSubmit');
125
+ if (publicRead.length === 0 && publicSubmit.length === 0) {
126
+ throw validation('A public request names at least one collection in publicRead or publicSubmit.');
127
+ }
128
+ if (o.note !== undefined && o.note !== null && typeof o.note !== 'string')
129
+ throw validation('note must be text.');
130
+ const note = optString(o.note);
131
+ if (note && note.length > C.PUBLIC_REQUEST.MAX_NOTE_CHARS)
132
+ throw validation(`note is at most ${C.PUBLIC_REQUEST.MAX_NOTE_CHARS} characters.`);
133
+ return { publicRead, publicSubmit, ...(note ? { note } : {}) };
134
+ }
135
+ /**
136
+ * Check a link lifetime.
137
+ *
138
+ * @param v - Days (number or numeric string), or empty for Cloud's default
139
+ * @returns Days, or undefined
140
+ * @throws AppsCloudError validation
141
+ */
142
+ export function requireTtlDays(v) {
143
+ if (v === undefined || v === null || v === '')
144
+ return undefined;
145
+ const n = typeof v === 'string' ? Number(v) : v;
146
+ if (typeof n !== 'number' || !Number.isInteger(n) || n < C.OPEN_LINK.MIN_TTL_DAYS || n > C.OPEN_LINK.MAX_TTL_DAYS) {
147
+ throw validation(`ttlDays is a whole number of days, ${C.OPEN_LINK.MIN_TTL_DAYS}-${C.OPEN_LINK.MAX_TTL_DAYS}.`);
148
+ }
149
+ return n;
150
+ }
151
+ /**
152
+ * Normalise Cloud's pending request (null when there is none).
153
+ *
154
+ * @param v - Cloud's `publicRequest`
155
+ * @returns The request or null
156
+ */
157
+ function pendingOf(v) {
158
+ if (!v || typeof v !== 'object')
159
+ return null;
160
+ const r = v;
161
+ const list = (x) => (Array.isArray(x) ? x.filter((n) => typeof n === 'string') : []);
162
+ const str = (x) => (typeof x === 'string' ? x : null);
163
+ return { publicRead: list(r.publicRead), publicSubmit: list(r.publicSubmit), note: str(r.note), requestedBy: str(r.requestedBy), requestedAt: str(r.requestedAt) };
164
+ }
165
+ /** The message every public request answers with: only the owner can approve it. */
166
+ export const PUBLIC_REQUEST_MESSAGE = 'Requested: the owner approves it by opening the app. Until then the app stays private; no agent can make it public.';
167
+ /**
168
+ * Said when publishing or rolling back a public app took it private again
169
+ * (crewly-services #33: every new current version of a public app needs the
170
+ * owner's re-approval).
171
+ */
172
+ export const PUBLIC_PAUSED_MESSAGE = 'This app was public. Publishing or rolling back a public app makes it private again until the owner re-approves it in the app (they sign in with Google there to approve). Tell the owner; do not say it is public.';
173
+ /** One blocked word: its display form and the pattern that finds it. */
174
+ const BLOCKED_NAME_PATTERNS = C.PUBLIC_REQUEST.BLOCKED_NAME_WORDS.map((word) => {
175
+ const parts = word.split(/[\s-]+/);
176
+ if (parts.length === 1)
177
+ return { word, re: new RegExp(word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i') };
178
+ // "sign in" / "sign-in" / "log in": whole words, any of space, hyphen, underscore or nothing between.
179
+ return { word, re: new RegExp(`\\b${parts.join('[\\s_-]*')}\\b`, 'i') };
180
+ });
181
+ /**
182
+ * The first word Cloud refuses in a public app's name, if any
183
+ * (crewly-services #33; {@link CREWLY_APPS_CONSTANTS.PUBLIC_REQUEST}.BLOCKED_NAME_WORDS).
184
+ *
185
+ * @param name - App name
186
+ * @returns The blocked word found, or null
187
+ */
188
+ export function blockedPublicNameWord(name) {
189
+ for (const { word, re } of BLOCKED_NAME_PATTERNS)
190
+ if (re.test(name))
191
+ return word;
192
+ return null;
193
+ }
194
+ /**
195
+ * Refuse a public request for an app whose name Cloud would refuse at approval.
196
+ *
197
+ * @param name - App name
198
+ * @throws AppsCloudError validation naming the word
199
+ */
200
+ export function assertPublicName(name) {
201
+ const word = blockedPublicNameWord(name);
202
+ if (word) {
203
+ throw validation(`A public app's name may not contain "${word}" (nor any of: ${C.PUBLIC_REQUEST.BLOCKED_NAME_WORDS.join(', ')}); the owner could not approve it. Rename the app (--name) and ask again.`);
204
+ }
65
205
  }
66
206
  /**
67
207
  * Publishing and data access for Crewly Apps.
@@ -88,6 +228,9 @@ export class AppsService {
88
228
  const agentSession = caller.agentSession ?? null;
89
229
  if (name && name.length > 80)
90
230
  throw validation('name is at most 80 characters.');
231
+ const publicBody = input.publicRequest === undefined || input.publicRequest === null ? null : validatePublicRequest(input.publicRequest);
232
+ if (publicBody && name)
233
+ assertPublicName(name);
91
234
  const { registry, client } = this.deps;
92
235
  let entry = await registry.find({ appId: explicitId, agentSession, source, name });
93
236
  // An agent publishes only to its own apps; adopting an app made elsewhere is the owner's call.
@@ -121,9 +264,15 @@ export class AppsService {
121
264
  }
122
265
  else {
123
266
  const newName = name ?? (source ? path.basename(source).replace(/\.[^.]+$/, '') : '');
267
+ // Checked before the app is created, so a refused name leaves nothing behind.
268
+ if (publicBody)
269
+ assertPublicName(newName.slice(0, 80) || 'App');
124
270
  app = await client.request('POST', '/apps', { body: { name: newName.slice(0, 80) || 'App' }, agent: caller.agentSession });
125
271
  created = true;
126
272
  }
273
+ if (publicBody)
274
+ assertPublicName(app.name);
275
+ const wasPublic = app.visibility === 'public';
127
276
  const entryFile = optString(input.entry);
128
277
  const note = optString(input.note);
129
278
  const version = await client.request('POST', `/apps/${app.appId}/versions`, {
@@ -146,35 +295,220 @@ export class AppsService {
146
295
  ...(created ? { cursor: 0 } : {}),
147
296
  deleted: false,
148
297
  });
149
- let notified = false;
150
- let notifyError;
151
- if (input.notify === true) {
152
- if (!caller.agentSession) {
153
- notifyError = 'Only an agent can post the app card (it goes out under the agent’s identity).';
298
+ // crewly-services #33: a new version of a public app takes it private
299
+ // with a pending re-approval. Re-read the app (one GET, only when it was public).
300
+ let publicPaused = false;
301
+ if (wasPublic) {
302
+ const after = await client.request('GET', `/apps/${app.appId}`, { agent: caller.agentSession }).catch(() => null);
303
+ if (after) {
304
+ publicPaused = after.visibility === 'private' && !!pendingOf(after.publicRequest);
305
+ app = { ...app, visibility: after.visibility, publicRequest: after.publicRequest };
154
306
  }
155
- else if (!this.deps.notifyCard) {
156
- notifyError = 'Posting the app card is not available on this instance.';
307
+ }
308
+ // P3: ask the owner to make it public. The version is already up, so a
309
+ // failure here is reported, not thrown.
310
+ let pending = pendingOf(app.publicRequest);
311
+ let publicRequested;
312
+ let publicError;
313
+ if (publicBody) {
314
+ try {
315
+ const v = await client.request('POST', `/apps/${app.appId}/visibility-request`, {
316
+ body: publicBody,
317
+ agent: caller.agentSession,
318
+ });
319
+ pending = pendingOf(v?.publicRequest) ?? { ...publicBody, note: publicBody.note ?? null, requestedBy: caller.agentSession ?? null, requestedAt: null };
320
+ publicRequested = true;
157
321
  }
158
- else {
159
- const r = await this.deps.notifyCard(caller.agentSession, appCardText(app.name, app.appId)).catch((err) => ({
160
- ok: false,
161
- error: err instanceof Error ? err.message : String(err),
162
- }));
163
- notified = r.ok;
164
- if (!r.ok)
165
- notifyError = r.error ?? 'The card could not be delivered.';
322
+ catch (err) {
323
+ publicRequested = false;
324
+ publicError = errorText(err);
166
325
  }
167
326
  }
327
+ // An agent's public request always tells the owner, so the card goes out with it.
328
+ const card = input.notify === true || (publicRequested === true && !!caller.agentSession)
329
+ ? await this.sendCard({ appId: app.appId, name: app.name, pending }, caller, entry.agentSession ?? null)
330
+ : { notified: false };
168
331
  return {
169
332
  appId: app.appId,
170
333
  name: app.name,
171
- url: `${C.APPS_ORIGIN}/${app.appId}`,
334
+ url: plainAppUrl(app.appId),
172
335
  version: version.version,
173
336
  created,
174
- notified,
175
- ...(notifyError ? { notifyError } : {}),
337
+ ...card,
338
+ ...(publicRequested !== undefined ? { publicRequested } : {}),
339
+ ...(publicError ? { publicError } : {}),
340
+ ...(publicPaused ? { publicPaused: true, publicPausedMessage: PUBLIC_PAUSED_MESSAGE } : {}),
341
+ };
342
+ }
343
+ /**
344
+ * Post the "Open app" card for the owner.
345
+ *
346
+ * Destination rule (P3 §1): when the agent has a DM with the owner, a
347
+ * fresh signed link is minted and the card goes to that DM only — never
348
+ * to a room, a team channel or a shared room, wherever the conversation
349
+ * happens to be. Without a DM, or when minting or the DM post fails, the
350
+ * card carries the plain URL and goes where the agent talks with the owner
351
+ * (P2). The signed URL is never returned.
352
+ *
353
+ * @param app - App id, name and its pending public request
354
+ * @param caller - Agent or owner
355
+ * @param publisher - The app's recorded agent (posts the card for an owner call)
356
+ * @param ttlDays - Link lifetime (Cloud's default when omitted)
357
+ * @returns What was posted, without the URL
358
+ */
359
+ async sendCard(app, caller, publisher, ttlDays) {
360
+ const poster = caller.agentSession ?? publisher;
361
+ if (!poster)
362
+ return { notified: false, notifyError: 'Only an agent can post the app card (it goes out under the agent’s identity), and this app has no recorded agent.' };
363
+ const cards = this.deps.cards;
364
+ if (!cards)
365
+ return { notified: false, notifyError: 'Posting the app card is not available on this instance.' };
366
+ let linkError;
367
+ const dm = await cards.ownerDm(poster).catch(() => null);
368
+ if (dm) {
369
+ let link = null;
370
+ try {
371
+ link = usableMintedLink(app.appId, await this.deps.client.request('POST', `/apps/${app.appId}/open-links`, { body: ttlDays ? { ttlDays } : {}, agent: caller.agentSession }));
372
+ if (!link)
373
+ linkError = 'Crewly Cloud did not return a usable open-link; the card has the plain URL (the owner may have to sign in).';
374
+ }
375
+ catch (err) {
376
+ linkError = `Could not mint a signed link (${errorText(err)}); the card has the plain URL (the owner may have to sign in).`;
377
+ }
378
+ if (link) {
379
+ const r = await cards.postToOwnerDm(poster, dm, appCardText(app.name, link.url, app.pending)).catch((err) => ({ ok: false, error: errorText(err) }));
380
+ if (r.ok) {
381
+ return { notified: true, card: 'signed', cardPlace: 'owner-dm', linkId: link.linkId, ...(link.expiresAt ? { linkExpiresAt: link.expiresAt } : {}) };
382
+ }
383
+ // Never leave a live link nobody received.
384
+ await this.deps.client.request('DELETE', `/apps/${app.appId}/open-links/${link.linkId}`, { agent: caller.agentSession }).catch(() => undefined);
385
+ linkError = `The signed card could not be posted to the DM with the owner (${r.error ?? 'not delivered'}); sent the plain URL instead.`;
386
+ }
387
+ }
388
+ else {
389
+ linkError = 'No DM with the owner to put a signed link in; the card has the plain URL (the owner may have to sign in).';
390
+ }
391
+ const r = await cards.postReply(poster, appCardText(app.name, plainAppUrl(app.appId), app.pending)).catch((err) => ({ ok: false, error: errorText(err) }));
392
+ return {
393
+ notified: r.ok,
394
+ ...(r.ok ? { card: 'plain', cardPlace: 'conversation' } : { notifyError: r.error ?? 'The card could not be delivered.' }),
395
+ ...(linkError ? { linkError } : {}),
176
396
  };
177
397
  }
398
+ /**
399
+ * Post the card again with a fresh signed link, without publishing (P3 §1, re-share).
400
+ *
401
+ * @param appId - App id
402
+ * @param opts - `ttlDays` (1-30, Cloud's default 7)
403
+ * @param caller - Agent (its own apps) or owner (any; posts as the recorded agent)
404
+ * @returns What was posted; never the signed URL
405
+ */
406
+ async share(appId, opts, caller) {
407
+ const id = requireAppId(appId);
408
+ const ttlDays = requireTtlDays(opts.ttlDays);
409
+ await this.assertPublisher(id, caller);
410
+ const app = await this.deps.client.request('GET', `/apps/${id}`, { agent: caller.agentSession });
411
+ const pending = pendingOf(app.publicRequest);
412
+ const entry = await this.deps.registry.get(id);
413
+ const card = await this.sendCard({ appId: id, name: app.name, pending }, caller, entry?.agentSession ?? null, ttlDays);
414
+ return { appId: id, name: app.name, url: plainAppUrl(id), visibility: app.visibility ?? 'private', publicRequestPending: !!pending, ...card };
415
+ }
416
+ /**
417
+ * The app's open-links (no tokens).
418
+ *
419
+ * @param appId - App id
420
+ * @param caller - Agent (its own apps) or owner
421
+ * @returns Links, newest as Cloud orders them
422
+ */
423
+ async links(appId, caller) {
424
+ const id = requireAppId(appId);
425
+ await this.assertPublisher(id, caller);
426
+ return toOpenLinkInfos(await this.deps.client.request('GET', `/apps/${id}/open-links`, { agent: caller.agentSession }));
427
+ }
428
+ /**
429
+ * Revoke one open-link.
430
+ *
431
+ * @param appId - App id
432
+ * @param linkId - Link id
433
+ * @param caller - Agent (its own apps) or owner
434
+ * @returns `{ revoked: true }`; 404 not_found for an unknown link
435
+ */
436
+ async revokeLink(appId, linkId, caller) {
437
+ const id = requireAppId(appId);
438
+ if (typeof linkId !== 'string' || !C.OPEN_LINK.LINK_ID_PATTERN.test(linkId))
439
+ throw validation('linkId must be 1-64 of A-Z a-z 0-9 _ -.');
440
+ await this.assertPublisher(id, caller);
441
+ const r = await this.deps.client.request('DELETE', `/apps/${id}/open-links/${linkId}`, { agent: caller.agentSession });
442
+ return { revoked: r?.revoked === true };
443
+ }
444
+ /**
445
+ * Revoke every open-link of an app.
446
+ *
447
+ * @param appId - App id
448
+ * @param caller - Agent (its own apps) or owner
449
+ * @returns `{ revoked: <count> }`
450
+ */
451
+ async revokeLinks(appId, caller) {
452
+ const id = requireAppId(appId);
453
+ await this.assertPublisher(id, caller);
454
+ const r = await this.deps.client.request('DELETE', `/apps/${id}/open-links`, { agent: caller.agentSession });
455
+ return { revoked: typeof r?.revoked === 'number' ? r.revoked : 0 };
456
+ }
457
+ /**
458
+ * Ask the owner to make an app public (P3 §2). Only records the request:
459
+ * Cloud flips visibility only from the owner's own session in the apps
460
+ * shell, so nothing here can make an app public. An agent's request also
461
+ * posts the card, which tells the owner to approve or decline it.
462
+ *
463
+ * @param appId - App id
464
+ * @param input - Collections to open for reading / anonymous submissions, and a note
465
+ * @param caller - Agent (its own apps) or owner
466
+ * @returns The recorded request and the card result
467
+ */
468
+ async requestPublic(appId, input, caller) {
469
+ const id = requireAppId(appId);
470
+ const body = validatePublicRequest(input);
471
+ await this.assertPublisher(id, caller);
472
+ const current = await this.deps.client.request('GET', `/apps/${id}`, { agent: caller.agentSession });
473
+ assertPublicName(current.name);
474
+ const v = await this.deps.client.request('POST', `/apps/${id}/visibility-request`, {
475
+ body,
476
+ agent: caller.agentSession,
477
+ });
478
+ const pending = pendingOf(v?.publicRequest);
479
+ let card = { notified: false };
480
+ if (caller.agentSession) {
481
+ const entry = await this.deps.registry.get(id);
482
+ card = await this.sendCard({ appId: id, name: current.name || entry?.name || 'App', pending: pending ?? { ...body, note: body.note ?? null, requestedBy: caller.agentSession, requestedAt: null } }, caller, entry?.agentSession ?? null);
483
+ }
484
+ return { appId: id, url: plainAppUrl(id), visibility: v?.visibility ?? 'private', publicRequest: pending, message: PUBLIC_REQUEST_MESSAGE, ...card };
485
+ }
486
+ /**
487
+ * Withdraw a pending public request.
488
+ *
489
+ * @param appId - App id
490
+ * @param caller - Agent (its own apps) or owner
491
+ * @returns Cloud's answer
492
+ */
493
+ async cancelPublicRequest(appId, caller) {
494
+ const id = requireAppId(appId);
495
+ await this.assertPublisher(id, caller);
496
+ const r = await this.deps.client.request('DELETE', `/apps/${id}/visibility-request`, { agent: caller.agentSession });
497
+ return { appId: id, cancelled: true, visibility: r?.visibility ?? 'private' };
498
+ }
499
+ /**
500
+ * Make an app private again (instant; always allowed).
501
+ *
502
+ * @param appId - App id
503
+ * @param caller - Agent (its own apps) or owner
504
+ * @returns `{ visibility: 'private' }`
505
+ */
506
+ async makePrivate(appId, caller) {
507
+ const id = requireAppId(appId);
508
+ await this.assertPublisher(id, caller);
509
+ const r = await this.deps.client.request('POST', `/apps/${id}/make-private`, { agent: caller.agentSession });
510
+ return { appId: id, visibility: r?.visibility ?? 'private' };
511
+ }
178
512
  /**
179
513
  * Make an earlier retained version current.
180
514
  *
@@ -189,10 +523,17 @@ export class AppsService {
189
523
  if (typeof v !== 'number' || !Number.isInteger(v) || v < 1)
190
524
  throw validation('version must be a positive integer.');
191
525
  await this.assertPublisher(id, caller);
526
+ // Was it public? A rollback of a public app takes it private (crewly-services #33).
527
+ const before = await this.deps.client.request('GET', `/apps/${id}`, { agent: caller.agentSession }).catch(() => null);
192
528
  const app = await this.deps.client.request('POST', `/apps/${id}/rollback`, { body: { version: v }, agent: caller.agentSession });
193
529
  if (await this.deps.registry.get(id))
194
530
  await this.deps.registry.upsert(id, { currentVersion: app.currentVersion });
195
- return app;
531
+ let after = app;
532
+ if (before?.visibility === 'public' && app.visibility === undefined) {
533
+ after = await this.deps.client.request('GET', `/apps/${id}`, { agent: caller.agentSession }).catch(() => null);
534
+ }
535
+ const paused = before?.visibility === 'public' && after?.visibility === 'private' && !!pendingOf(after.publicRequest);
536
+ return paused ? { ...app, publicPaused: true, publicPausedMessage: PUBLIC_PAUSED_MESSAGE } : app;
196
537
  }
197
538
  /**
198
539
  * Versions of an app, newest first.
@@ -251,7 +592,7 @@ export class AppsService {
251
592
  async list(caller = {}) {
252
593
  return (await this.deps.registry.list())
253
594
  .filter((e) => !caller.agentSession || e.agentSession === caller.agentSession)
254
- .map(({ cursor: _cursor, delivered: _delivered, wakes: _wakes, ...rest }) => rest);
595
+ .map(({ cursor: _cursor, delivered: _delivered, wakes: _wakes, visitorWakes: _visitorWakes, ...rest }) => rest);
255
596
  }
256
597
  /**
257
598
  * One page of a collection.
@@ -269,7 +610,7 @@ export class AppsService {
269
610
  const after = opts.after !== undefined && opts.after !== '' ? requireDocId(opts.after) : undefined;
270
611
  const path = `/apps/${requireAppId(appId)}/data/${requireCollection(collection)}`;
271
612
  await this.assertDataAccess(appId, caller);
272
- return this.deps.client.request('GET', path, {
613
+ return this.dataRequest('GET', path, {
273
614
  query: { limit, after },
274
615
  agent: caller.agentSession,
275
616
  });
@@ -286,7 +627,7 @@ export class AppsService {
286
627
  async getDoc(appId, collection, docId, caller) {
287
628
  const path = this.docPath(appId, collection, docId);
288
629
  await this.assertDataAccess(appId, caller);
289
- return this.deps.client.request('GET', path, { agent: caller.agentSession });
630
+ return this.dataRequest('GET', path, { agent: caller.agentSession });
290
631
  }
291
632
  /**
292
633
  * Replace (or create) a document.
@@ -302,7 +643,7 @@ export class AppsService {
302
643
  const path = this.docPath(appId, collection, docId);
303
644
  const body = { data: requireData(data) };
304
645
  await this.assertDataAccess(appId, caller);
305
- return this.deps.client.request('PUT', path, { body, agent: caller.agentSession });
646
+ return this.dataRequest('PUT', path, { body, agent: caller.agentSession });
306
647
  }
307
648
  /**
308
649
  * Shallow-merge into a document; `ifRev` makes it conditional (409 conflict).
@@ -322,7 +663,7 @@ export class AppsService {
322
663
  const path = this.docPath(appId, collection, docId);
323
664
  const body = { data: requireData(data), ...(rev !== undefined ? { ifRev: rev } : {}) };
324
665
  await this.assertDataAccess(appId, caller);
325
- return this.deps.client.request('PATCH', path, {
666
+ return this.dataRequest('PATCH', path, {
326
667
  body,
327
668
  agent: caller.agentSession,
328
669
  });
@@ -340,7 +681,7 @@ export class AppsService {
340
681
  const path = `/apps/${requireAppId(appId)}/data/${requireCollection(collection)}`;
341
682
  const body = { data: requireData(data) };
342
683
  await this.assertDataAccess(appId, caller);
343
- return this.deps.client.request('POST', path, {
684
+ return this.dataRequest('POST', path, {
344
685
  body,
345
686
  agent: caller.agentSession,
346
687
  });
@@ -357,7 +698,23 @@ export class AppsService {
357
698
  async deleteDoc(appId, collection, docId, caller) {
358
699
  const path = this.docPath(appId, collection, docId);
359
700
  await this.assertDataAccess(appId, caller);
360
- return this.deps.client.request('DELETE', path, { agent: caller.agentSession });
701
+ return this.dataRequest('DELETE', path, { agent: caller.agentSession });
702
+ }
703
+ /**
704
+ * A Cloud data call whose answer is sanitised before it leaves the backend
705
+ * (P3 §4): documents were written by the owner, other agents or anonymous
706
+ * visitors, and an agent prints them into its terminal, where harness
707
+ * markers (`[CHAT_RESPONSE]`, `[DONE]`, fenced blocks), ANSI escapes or
708
+ * bidi characters would act. Every string value and key is cleaned; the
709
+ * structure is kept. Done here, not in the skill, so no caller bypasses it.
710
+ *
711
+ * @param method - HTTP method
712
+ * @param path - Cloud path
713
+ * @param opts - Request options
714
+ * @returns The display-safe answer
715
+ */
716
+ async dataRequest(method, path, opts) {
717
+ return sanitizeAppData(await this.deps.client.request(method, path, opts));
361
718
  }
362
719
  docPath(appId, collection, docId) {
363
720
  return `/apps/${requireAppId(appId)}/data/${requireCollection(collection)}/${encodeURIComponent(requireDocId(docId))}`;
@@ -1 +1 @@
1
- {"version":3,"file":"apps.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apps.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.service.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { AppsCloudClient } from './apps-cloud.client.js';
9
9
  import { AppsRegistryService } from './apps-registry.service.js';
10
- import { AppsService } from './apps.service.js';
10
+ import { AppsService, type AppCardPoster } from './apps.service.js';
11
11
  import { AppWakeService } from './app-wake.service.js';
12
12
  /** The team shape the apps code reads. */
13
13
  export interface AppsTeam {
@@ -44,6 +44,20 @@ export declare function sameTeamFrom(teams: AppsTeamsSource): (a: string, b: str
44
44
  * @returns Resolver
45
45
  */
46
46
  export declare function teamAgentResolver(teams: AppsTeamsSource): (name: string, publisher: string) => Promise<string | null>;
47
+ /**
48
+ * The real card poster (specs/2026-10-04-crewly-apps-p3.md §1).
49
+ *
50
+ * - `ownerDm`: the agent's DM with the owner — the same lookup `reply` uses
51
+ * for its last step (Slack DM link, else the dashboard DM of a real team
52
+ * member). Cloud forwards only the owner's Slack DMs to an agent bot, so a
53
+ * linked Slack DM is one-to-one with the owner.
54
+ * - `postToOwnerDm`: straight into that conversation, with no resolver and
55
+ * no fallback, so a signed link can never be re-routed into a room. Not
56
+ * traced either: the run trace records reply text, and this text holds
57
+ * the token.
58
+ * - `postReply`: the P2 path (`deliverReply`), for the plain-URL card.
59
+ */
60
+ export declare const defaultCardPoster: AppCardPoster;
47
61
  /**
48
62
  * The shared Apps parts, built on first use.
49
63
  *