crewly 1.20.251 → 1.20.253

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 (94) hide show
  1. package/config/skills/agent/core/app-comments/SKILL.md +25 -1
  2. package/config/skills/agent/core/app-comments/execute.sh +12 -3
  3. package/config/skills/agent/core/app-comments/execute.test.sh +17 -0
  4. package/config/skills/agent/core/app-data/SKILL.md +65 -3
  5. package/config/skills/agent/core/app-data/execute.sh +51 -3
  6. package/config/skills/agent/core/app-data/execute.test.sh +42 -0
  7. package/config/skills/agent/core/publish-app/SKILL.md +5 -1
  8. package/config/skills/agent/core/publish-app/execute.sh +26 -3
  9. package/config/skills/agent/core/publish-app/execute.test.sh +18 -0
  10. package/dist/backend/backend/src/constants.d.ts +36 -0
  11. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  12. package/dist/backend/backend/src/constants.js +44 -0
  13. package/dist/backend/backend/src/constants.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts +24 -0
  15. package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/apps/apps.controller.js +47 -1
  17. package/dist/backend/backend/src/controllers/apps/apps.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts +8 -0
  19. package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/apps/apps.routes.js +31 -2
  21. package/dist/backend/backend/src/controllers/apps/apps.routes.js.map +1 -1
  22. package/dist/backend/backend/src/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/index.js +9 -0
  24. package/dist/backend/backend/src/index.js.map +1 -1
  25. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
  26. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  27. package/dist/backend/backend/src/services/apps/app-collaborators.service.d.ts +103 -0
  28. package/dist/backend/backend/src/services/apps/app-collaborators.service.d.ts.map +1 -0
  29. package/dist/backend/backend/src/services/apps/app-collaborators.service.js +161 -0
  30. package/dist/backend/backend/src/services/apps/app-collaborators.service.js.map +1 -0
  31. package/dist/backend/backend/src/services/apps/app-comment-audio.service.d.ts +164 -0
  32. package/dist/backend/backend/src/services/apps/app-comment-audio.service.d.ts.map +1 -0
  33. package/dist/backend/backend/src/services/apps/app-comment-audio.service.js +217 -0
  34. package/dist/backend/backend/src/services/apps/app-comment-audio.service.js.map +1 -0
  35. package/dist/backend/backend/src/services/apps/app-comment-room.service.d.ts +156 -0
  36. package/dist/backend/backend/src/services/apps/app-comment-room.service.d.ts.map +1 -0
  37. package/dist/backend/backend/src/services/apps/app-comment-room.service.js +344 -0
  38. package/dist/backend/backend/src/services/apps/app-comment-room.service.js.map +1 -0
  39. package/dist/backend/backend/src/services/apps/app-comments-slack.service.d.ts +44 -2
  40. package/dist/backend/backend/src/services/apps/app-comments-slack.service.d.ts.map +1 -1
  41. package/dist/backend/backend/src/services/apps/app-comments-slack.service.js +90 -10
  42. package/dist/backend/backend/src/services/apps/app-comments-slack.service.js.map +1 -1
  43. package/dist/backend/backend/src/services/apps/app-roster.service.d.ts +37 -1
  44. package/dist/backend/backend/src/services/apps/app-roster.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/apps/app-roster.service.js +62 -7
  46. package/dist/backend/backend/src/services/apps/app-roster.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/apps/app-wake-message.d.ts +25 -1
  48. package/dist/backend/backend/src/services/apps/app-wake-message.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/apps/app-wake-message.js +25 -13
  50. package/dist/backend/backend/src/services/apps/app-wake-message.js.map +1 -1
  51. package/dist/backend/backend/src/services/apps/app-wake.service.d.ts +34 -0
  52. package/dist/backend/backend/src/services/apps/app-wake.service.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/apps/app-wake.service.js +97 -17
  54. package/dist/backend/backend/src/services/apps/app-wake.service.js.map +1 -1
  55. package/dist/backend/backend/src/services/apps/apps-cloud.client.d.ts +25 -0
  56. package/dist/backend/backend/src/services/apps/apps-cloud.client.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/apps/apps-cloud.client.js +41 -4
  58. package/dist/backend/backend/src/services/apps/apps-cloud.client.js.map +1 -1
  59. package/dist/backend/backend/src/services/apps/apps.service.d.ts +115 -2
  60. package/dist/backend/backend/src/services/apps/apps.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/apps/apps.service.js +181 -9
  62. package/dist/backend/backend/src/services/apps/apps.service.js.map +1 -1
  63. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts +70 -1
  64. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/apps/apps.wiring.js +274 -5
  66. package/dist/backend/backend/src/services/apps/apps.wiring.js.map +1 -1
  67. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +1 -1
  68. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +3 -0
  70. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +2 -0
  72. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/decisions/decision.service.js +1 -0
  74. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  75. package/dist/backend/backend/src/types/decision.types.d.ts +27 -2
  76. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  77. package/dist/backend/build-info.json +2 -2
  78. package/dist/cli/backend/src/constants.d.ts +36 -0
  79. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  80. package/dist/cli/backend/src/constants.js +44 -0
  81. package/dist/cli/backend/src/constants.js.map +1 -1
  82. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
  83. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  84. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +1 -1
  85. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  86. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +3 -0
  87. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  88. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +2 -0
  89. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  90. package/dist/cli/backend/src/services/decisions/decision.service.js +1 -0
  91. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  92. package/dist/cli/backend/src/types/decision.types.d.ts +27 -2
  93. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  94. package/package.json +1 -1
@@ -44,6 +44,12 @@ export interface AppsRequestOptions {
44
44
  agent?: string;
45
45
  /** Request timeout (default REQUEST_TIMEOUT_MS) */
46
46
  timeoutMs?: number;
47
+ /**
48
+ * Call as the account owner: no `X-Crewly-Instance`, no `X-Crewly-Agent`
49
+ * (Cloud's owner actor). Only for work the owner approved, never for an
50
+ * agent's own call (the collaborator grant after an owner tap).
51
+ */
52
+ asOwner?: boolean;
47
53
  }
48
54
  /**
49
55
  * Typed wrapper over the Apps agent API.
@@ -73,6 +79,25 @@ export declare class AppsCloudClient {
73
79
  * @throws AppsCloudError not_logged_in / instance_unknown / network / Cloud's code
74
80
  */
75
81
  request<T>(method: string, path: string, opts?: AppsRequestOptions): Promise<T>;
82
+ /**
83
+ * GET binary content from the Apps API (a voice comment's recording).
84
+ * Same auth, refresh and error mapping as {@link request}; a body larger
85
+ * than `maxBytes` is refused.
86
+ *
87
+ * @param path - Path under `/api/apps/v1`
88
+ * @param opts - `maxBytes` cap, timeout
89
+ * @returns Bytes, Content-Type and the response headers
90
+ * @throws AppsCloudError as {@link request}, or `too_large`
91
+ */
92
+ download(path: string, opts: {
93
+ maxBytes: number;
94
+ timeoutMs?: number;
95
+ agent?: string;
96
+ }): Promise<{
97
+ data: Buffer;
98
+ contentType: string;
99
+ headers: Headers;
100
+ }>;
76
101
  private static readJson;
77
102
  private send;
78
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"apps-cloud.client.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps-cloud.client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,IAAI,OAAO,CAAC;IACvB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,yEAAyE;IACzE,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,uFAAuF;AACvF,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,8BAA8B;AAC9B,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAEZ,IAAI,EAAE,mBAAmB;IAKtD;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;mBAwBpE,QAAQ;YASf,IAAI;CAyBnB"}
1
+ {"version":3,"file":"apps-cloud.client.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps-cloud.client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,IAAI,OAAO,CAAC;IACvB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,yEAAyE;IACzE,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,uFAAuF;AACvF,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,8BAA8B;AAC9B,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IACpD,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAEZ,IAAI,EAAE,mBAAmB;IAKtD;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBzF;;;;;;;;;OASG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;mBAyBzI,QAAQ;YASf,IAAI;CAyBnB"}
@@ -60,8 +60,8 @@ export class AppsCloudClient {
60
60
  if (!this.isAvailable()) {
61
61
  throw new AppsCloudError(409, C.ERROR_CODES.NOT_LOGGED_IN, 'This machine is not signed in to Crewly Cloud. Run `crewly cloud login`.');
62
62
  }
63
- const instanceId = await this.deps.instanceId();
64
- if (!instanceId) {
63
+ const instanceId = opts.asOwner ? '' : ((await this.deps.instanceId()) ?? '');
64
+ if (!opts.asOwner && !instanceId) {
65
65
  throw new AppsCloudError(409, C.ERROR_CODES.NO_INSTANCE, 'This machine has no Crewly Cloud instance id yet. Sign in to Crewly Cloud and try again in a minute.');
66
66
  }
67
67
  let res = await this.send(method, path, opts, instanceId);
@@ -79,6 +79,42 @@ export class AppsCloudClient {
79
79
  : `Crewly Apps request failed (${res.status}).`;
80
80
  throw new AppsCloudError(res.status === 401 ? 409 : res.status, code, message);
81
81
  }
82
+ /**
83
+ * GET binary content from the Apps API (a voice comment's recording).
84
+ * Same auth, refresh and error mapping as {@link request}; a body larger
85
+ * than `maxBytes` is refused.
86
+ *
87
+ * @param path - Path under `/api/apps/v1`
88
+ * @param opts - `maxBytes` cap, timeout
89
+ * @returns Bytes, Content-Type and the response headers
90
+ * @throws AppsCloudError as {@link request}, or `too_large`
91
+ */
92
+ async download(path, opts) {
93
+ if (!this.isAvailable()) {
94
+ throw new AppsCloudError(409, C.ERROR_CODES.NOT_LOGGED_IN, 'This machine is not signed in to Crewly Cloud. Run `crewly cloud login`.');
95
+ }
96
+ const instanceId = await this.deps.instanceId();
97
+ if (!instanceId) {
98
+ throw new AppsCloudError(409, C.ERROR_CODES.NO_INSTANCE, 'This machine has no Crewly Cloud instance id yet. Sign in to Crewly Cloud and try again in a minute.');
99
+ }
100
+ const reqOpts = { ...(opts.agent ? { agent: opts.agent } : {}), ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}) };
101
+ let res = await this.send('GET', path, reqOpts, instanceId);
102
+ if (res.status === 401 && (await this.cloud.tryRefreshToken().catch(() => false))) {
103
+ res = await this.send('GET', path, reqOpts, instanceId);
104
+ }
105
+ if (!res.ok) {
106
+ const json = await AppsCloudClient.readJson(res);
107
+ const code = typeof json?.code === 'string' ? json.code : `http_${res.status}`;
108
+ throw new AppsCloudError(res.status === 401 ? 409 : res.status, code, typeof json?.error === 'string' ? json.error : `Crewly Apps download failed (${res.status}).`);
109
+ }
110
+ const declared = Number(res.headers.get('content-length') ?? '0');
111
+ if (declared > opts.maxBytes)
112
+ throw new AppsCloudError(413, 'too_large', 'The file is larger than this machine accepts.');
113
+ const data = Buffer.from(await res.arrayBuffer());
114
+ if (data.length > opts.maxBytes)
115
+ throw new AppsCloudError(413, 'too_large', 'The file is larger than this machine accepts.');
116
+ return { data, contentType: (res.headers.get('content-type') ?? 'application/octet-stream').split(';')[0].trim().toLowerCase(), headers: res.headers };
117
+ }
82
118
  static async readJson(res) {
83
119
  try {
84
120
  const parsed = await res.json();
@@ -97,9 +133,10 @@ export class AppsCloudClient {
97
133
  }
98
134
  const headers = {
99
135
  Authorization: `Bearer ${this.cloud.getToken() ?? ''}`,
100
- 'X-Crewly-Instance': instanceId,
101
136
  };
102
- if (opts.agent)
137
+ if (!opts.asOwner)
138
+ headers['X-Crewly-Instance'] = instanceId;
139
+ if (opts.agent && !opts.asOwner)
103
140
  headers['X-Crewly-Agent'] = opts.agent;
104
141
  if (opts.raw)
105
142
  headers['Content-Type'] = opts.raw.contentType;
@@ -1 +1 @@
1
- {"version":3,"file":"apps-cloud.client.js","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps-cloud.client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apps-cloud.client.js","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps-cloud.client.ts"],"names":[],"mappings":"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"}
@@ -194,7 +194,64 @@ export interface AppsServiceDeps {
194
194
  };
195
195
  /** This instance's Cloud id (a mention names the instance its agent runs on) */
196
196
  instanceId?: () => Promise<string | null>;
197
+ /** Look up what can own an app on this machine (app owners, SPEC §15) */
198
+ ownerTargets?: OwnerTargets;
197
199
  }
200
+ /** An app's owner as Cloud reports it (crewly-services apps/SPEC.md §15). */
201
+ export interface CloudOwnerView {
202
+ kind: 'agent' | 'team' | 'channel';
203
+ explicit: boolean;
204
+ session?: string;
205
+ teamId?: string;
206
+ channelId?: string;
207
+ name: string;
208
+ instanceId: string | null;
209
+ members?: string[];
210
+ }
211
+ /** What can own an app on this machine. */
212
+ export interface OwnerTargets {
213
+ /** An agent by session or member name */
214
+ agent(ref: string): Promise<{
215
+ session: string;
216
+ name: string;
217
+ } | null>;
218
+ /** A team by id or name */
219
+ team(ref: string): Promise<{
220
+ id: string;
221
+ name: string;
222
+ } | null>;
223
+ /** A Crewly channel by id, `#name` or name */
224
+ channel(ref: string): Promise<{
225
+ id: string;
226
+ name: string;
227
+ } | null>;
228
+ }
229
+ /** A parsed owner spec. */
230
+ export type OwnerSpec = {
231
+ kind: 'agent' | 'team' | 'channel';
232
+ ref: string;
233
+ } | {
234
+ kind: 'default';
235
+ };
236
+ /**
237
+ * Parse an owner spec: `agent:<ref>`, `team:<ref>`, `channel:<ref>` (a bare
238
+ * `#name` is a channel), or `default`. Also accepts `{ owner: '<spec>' }`.
239
+ *
240
+ * @param raw - Spec
241
+ * @returns Parsed spec
242
+ * @throws AppsCloudError validation
243
+ */
244
+ export declare function parseOwnerSpec(raw: unknown): OwnerSpec;
245
+ /**
246
+ * Whether a session is the owning agent, or a member of the owning team /
247
+ * channel, on this instance.
248
+ *
249
+ * @param owner - Cloud's owner view
250
+ * @param session - Agent session
251
+ * @param instanceId - This instance
252
+ * @returns True for an owner member
253
+ */
254
+ export declare function isOwnerMember(owner: CloudOwnerView | null, session: string, instanceId: string): boolean;
198
255
  /**
199
256
  * Check an app id's shape.
200
257
  *
@@ -443,7 +500,8 @@ export declare class AppsService {
443
500
  * Agents may manage (publish, roll back, list versions of) apps they or a
444
501
  * teammate published — so a lead can hand app work to a member (owner
445
502
  * 2026-10-05: Kai could not update Atlas's app and published a duplicate).
446
- * The owner may manage any.
503
+ * The owner may manage any. Collaborators do NOT pass here: they get data
504
+ * and comments only, never the bundle (specs/2026-10-06-app-collaborators.md).
447
505
  *
448
506
  * @param appId - App id
449
507
  * @param caller - Agent or owner
@@ -452,13 +510,68 @@ export declare class AppsService {
452
510
  assertPublisher(appId: string, caller: AppsCaller): Promise<void>;
453
511
  /**
454
512
  * Agents may read and write the data of apps they published, or that a
455
- * teammate published. The owner may use any.
513
+ * teammate published, or that the owner added them (or their team) to as
514
+ * a collaborator. The owner may use any.
456
515
  *
457
516
  * @param appId - App id
458
517
  * @param caller - Agent or owner
459
518
  * @throws AppsCloudError 403 not_your_app
460
519
  */
461
520
  assertDataAccess(appId: string, caller: AppsCaller): Promise<void>;
521
+ /** The owner, the publisher, or a teammate of the publisher (local registry). */
522
+ private isPublisherSide;
523
+ /**
524
+ * Whether the owner added this agent, or its team, to the app. Asks Cloud on
525
+ * every call (no cache) so a removal applies at once; any failure, a 404 (the
526
+ * app is not this account's) or an unreachable Cloud counts as no.
527
+ *
528
+ * @param appId - App id
529
+ * @param session - The agent
530
+ * @returns True when listed for this instance
531
+ */
532
+ isCollaborator(appId: string, session: string): Promise<boolean>;
533
+ /**
534
+ * The app's owner.
535
+ *
536
+ * @param appId - App id
537
+ * @param caller - Agent or owner
538
+ * @returns `{ appId, owner }` from Cloud
539
+ */
540
+ getOwner(appId: unknown, caller: AppsCaller): Promise<{
541
+ appId: string;
542
+ owner: CloudOwnerView | null;
543
+ }>;
544
+ /**
545
+ * Set who owns the app's comments, from a spec: `agent:<session or name>`,
546
+ * `team:<name or id>`, `channel:#<name>` (or its id), or `default` (back to
547
+ * the publishing agent). The team / channel / agent is looked up on this
548
+ * machine and bound to this instance. The roster is pushed first so Cloud
549
+ * knows a channel made a moment ago. An agent caller must be one of the
550
+ * app's owner agents (Cloud refuses others with 403 `forbidden`).
551
+ *
552
+ * @param appId - App id
553
+ * @param spec - Owner spec (string) or `{ owner: string }`
554
+ * @param caller - Agent or owner
555
+ * @returns `{ appId, owner, previous }` from Cloud
556
+ * @throws AppsCloudError validation (unknown team / channel / agent, bad spec)
557
+ */
558
+ setOwner(appId: unknown, spec: unknown, caller: AppsCaller): Promise<{
559
+ appId: string;
560
+ owner: CloudOwnerView | null;
561
+ previous: CloudOwnerView | null;
562
+ }>;
563
+ /**
564
+ * An owner agent adds another agent of this machine as a collaborator (it
565
+ * may then read and write the app's data). Cloud refuses an agent that is
566
+ * not one of the app's owner agents; that agent can ask the owner with
567
+ * `request-access` instead. The owner may add anyone.
568
+ *
569
+ * @param appId - App id
570
+ * @param who - Agent session or member name
571
+ * @param caller - Agent or owner
572
+ * @returns Cloud's collaborator list
573
+ */
574
+ addAgentCollaborator(appId: unknown, who: unknown, caller: AppsCaller): Promise<unknown>;
462
575
  /**
463
576
  * Apps this instance published (local registry, not Cloud).
464
577
  *
@@ -1 +1 @@
1
- {"version":3,"file":"apps.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apps.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.service.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,44 @@ import { AppsCloudError } from './apps-cloud.client.js';
13
13
  import { toOpenLinkInfos, usableMintedLink } from './app-open-link.js';
14
14
  import { sanitizeAppData } from './app-wake-message.js';
15
15
  const C = CREWLY_APPS_CONSTANTS;
16
+ /**
17
+ * Parse an owner spec: `agent:<ref>`, `team:<ref>`, `channel:<ref>` (a bare
18
+ * `#name` is a channel), or `default`. Also accepts `{ owner: '<spec>' }`.
19
+ *
20
+ * @param raw - Spec
21
+ * @returns Parsed spec
22
+ * @throws AppsCloudError validation
23
+ */
24
+ export function parseOwnerSpec(raw) {
25
+ const value = raw && typeof raw === 'object' ? raw.owner : raw;
26
+ if (typeof value !== 'string' || !value.trim())
27
+ throw validation("owner is 'agent:<name>', 'team:<name>', 'channel:#<name>' or 'default'.");
28
+ const s = value.trim();
29
+ if (s.toLowerCase() === 'default')
30
+ return { kind: 'default' };
31
+ if (s.startsWith('#'))
32
+ return { kind: 'channel', ref: s };
33
+ const m = /^(agent|team|channel):(.+)$/i.exec(s);
34
+ if (!m || !m[2].trim() || m[2].length > 128)
35
+ throw validation("owner is 'agent:<name>', 'team:<name>', 'channel:#<name>' or 'default'.");
36
+ return { kind: m[1].toLowerCase(), ref: m[2].trim() };
37
+ }
38
+ /**
39
+ * Whether a session is the owning agent, or a member of the owning team /
40
+ * channel, on this instance.
41
+ *
42
+ * @param owner - Cloud's owner view
43
+ * @param session - Agent session
44
+ * @param instanceId - This instance
45
+ * @returns True for an owner member
46
+ */
47
+ export function isOwnerMember(owner, session, instanceId) {
48
+ if (!owner || (owner.instanceId && owner.instanceId !== instanceId))
49
+ return false;
50
+ if (owner.kind === 'agent')
51
+ return owner.session === session;
52
+ return (owner.members ?? []).includes(session);
53
+ }
16
54
  const APP_ID_RE = /^[a-km-np-z2-9]{10}$/;
17
55
  const COLLECTION_RE = /^[A-Za-z0-9_-]{1,64}$/;
18
56
  const DOC_ID_RE = /^[A-Za-z0-9_.:-]{1,128}$/;
@@ -636,36 +674,170 @@ export class AppsService {
636
674
  * Agents may manage (publish, roll back, list versions of) apps they or a
637
675
  * teammate published — so a lead can hand app work to a member (owner
638
676
  * 2026-10-05: Kai could not update Atlas's app and published a duplicate).
639
- * The owner may manage any.
677
+ * The owner may manage any. Collaborators do NOT pass here: they get data
678
+ * and comments only, never the bundle (specs/2026-10-06-app-collaborators.md).
640
679
  *
641
680
  * @param appId - App id
642
681
  * @param caller - Agent or owner
643
682
  * @throws AppsCloudError 403 not_your_app
644
683
  */
645
684
  async assertPublisher(appId, caller) {
646
- return this.assertDataAccess(appId, caller);
685
+ if (!(await this.isPublisherSide(appId, caller)))
686
+ throw notYourApp();
647
687
  }
648
688
  /**
649
689
  * Agents may read and write the data of apps they published, or that a
650
- * teammate published. The owner may use any.
690
+ * teammate published, or that the owner added them (or their team) to as
691
+ * a collaborator. The owner may use any.
651
692
  *
652
693
  * @param appId - App id
653
694
  * @param caller - Agent or owner
654
695
  * @throws AppsCloudError 403 not_your_app
655
696
  */
656
697
  async assertDataAccess(appId, caller) {
698
+ if (await this.isPublisherSide(appId, caller))
699
+ return;
700
+ if (caller.agentSession && (await this.isCollaborator(appId, caller.agentSession)))
701
+ return;
702
+ throw notYourApp();
703
+ }
704
+ /** The owner, the publisher, or a teammate of the publisher (local registry). */
705
+ async isPublisherSide(appId, caller) {
657
706
  const me = caller.agentSession;
658
707
  if (!me)
659
- return;
708
+ return true;
660
709
  const entry = await this.deps.registry.get(appId);
661
710
  const publisher = entry?.agentSession;
662
711
  if (!publisher)
663
- throw notYourApp();
712
+ return false;
664
713
  if (publisher === me)
665
- return;
666
- if (this.deps.sameTeam && (await this.deps.sameTeam(me, publisher).catch(() => false)))
667
- return;
668
- throw notYourApp();
714
+ return true;
715
+ return !!this.deps.sameTeam && (await this.deps.sameTeam(me, publisher).catch(() => false));
716
+ }
717
+ /**
718
+ * Whether the owner added this agent, or its team, to the app. Asks Cloud on
719
+ * every call (no cache) so a removal applies at once; any failure, a 404 (the
720
+ * app is not this account's) or an unreachable Cloud counts as no.
721
+ *
722
+ * @param appId - App id
723
+ * @param session - The agent
724
+ * @returns True when listed for this instance
725
+ */
726
+ async isCollaborator(appId, session) {
727
+ if (!this.deps.instanceId)
728
+ return false;
729
+ try {
730
+ const [instanceId, list] = await Promise.all([
731
+ this.deps.instanceId(),
732
+ this.deps.client.request('GET', `/apps/${appId}/collaborators`, { agent: session }),
733
+ ]);
734
+ // Members of the owning team / channel (and the owning agent) are collaborators without an entry.
735
+ if (instanceId && isOwnerMember(list.owner ?? null, session, instanceId))
736
+ return true;
737
+ const mine = (list.collaborators ?? []).filter((c) => !!instanceId && c.instanceId === instanceId);
738
+ if (mine.some((c) => c.kind === 'agent' && c.who === session))
739
+ return true;
740
+ const teams = mine.filter((c) => c.kind === 'team').map((c) => c.who);
741
+ if (teams.length === 0 || !this.deps.directory)
742
+ return false;
743
+ const team = (await this.deps.directory.member(session))?.team;
744
+ return !!team && teams.includes(team);
745
+ }
746
+ catch {
747
+ return false;
748
+ }
749
+ }
750
+ // -------------------------------------------------------------------------
751
+ // Owner (crewly-services apps/SPEC.md §15): who the app's comments go to —
752
+ // one agent, a team or a Crewly channel of this machine. Cloud decides who
753
+ // may change it (the owner, or the app's current owner agents).
754
+ // -------------------------------------------------------------------------
755
+ /**
756
+ * The app's owner.
757
+ *
758
+ * @param appId - App id
759
+ * @param caller - Agent or owner
760
+ * @returns `{ appId, owner }` from Cloud
761
+ */
762
+ async getOwner(appId, caller) {
763
+ const id = requireAppId(appId);
764
+ return this.deps.client.request('GET', `/apps/${id}/owner`, caller.agentSession ? { agent: caller.agentSession } : { asOwner: true });
765
+ }
766
+ /**
767
+ * Set who owns the app's comments, from a spec: `agent:<session or name>`,
768
+ * `team:<name or id>`, `channel:#<name>` (or its id), or `default` (back to
769
+ * the publishing agent). The team / channel / agent is looked up on this
770
+ * machine and bound to this instance. The roster is pushed first so Cloud
771
+ * knows a channel made a moment ago. An agent caller must be one of the
772
+ * app's owner agents (Cloud refuses others with 403 `forbidden`).
773
+ *
774
+ * @param appId - App id
775
+ * @param spec - Owner spec (string) or `{ owner: string }`
776
+ * @param caller - Agent or owner
777
+ * @returns `{ appId, owner, previous }` from Cloud
778
+ * @throws AppsCloudError validation (unknown team / channel / agent, bad spec)
779
+ */
780
+ async setOwner(appId, spec, caller) {
781
+ const id = requireAppId(appId);
782
+ const parsed = parseOwnerSpec(spec);
783
+ let body = { kind: 'default' };
784
+ if (parsed.kind !== 'default') {
785
+ const targets = this.deps.ownerTargets;
786
+ if (!targets)
787
+ throw new AppsCloudError(503, 'unavailable', 'App owners are not available on this machine.');
788
+ if (parsed.kind === 'agent') {
789
+ const a = await targets.agent(parsed.ref);
790
+ if (!a)
791
+ throw validation(`No agent "${parsed.ref}" on this machine.`);
792
+ body = { kind: 'agent', session: a.session };
793
+ }
794
+ else if (parsed.kind === 'team') {
795
+ const t = await targets.team(parsed.ref);
796
+ if (!t)
797
+ throw validation(`No team "${parsed.ref}" on this machine.`);
798
+ body = { kind: 'team', teamId: t.id };
799
+ }
800
+ else {
801
+ const c = await targets.channel(parsed.ref);
802
+ if (!c)
803
+ throw validation(`No channel "${parsed.ref}" on this machine. List them with list-channels.`);
804
+ body = { kind: 'channel', channelId: c.id };
805
+ }
806
+ const instanceId = this.deps.instanceId ? await this.deps.instanceId() : null;
807
+ if (!instanceId)
808
+ throw new AppsCloudError(409, C.ERROR_CODES.NO_INSTANCE, 'This machine has no Crewly Cloud instance id yet. Try again in a minute.');
809
+ body['instanceId'] = instanceId;
810
+ // Cloud checks the owner against this machine's roster: make sure it is current.
811
+ await this.deps.roster?.pushIfChanged().catch(() => false);
812
+ }
813
+ return this.deps.client.request('PUT', `/apps/${id}/owner`, { body, ...(caller.agentSession ? { agent: caller.agentSession } : { asOwner: true }) });
814
+ }
815
+ /**
816
+ * An owner agent adds another agent of this machine as a collaborator (it
817
+ * may then read and write the app's data). Cloud refuses an agent that is
818
+ * not one of the app's owner agents; that agent can ask the owner with
819
+ * `request-access` instead. The owner may add anyone.
820
+ *
821
+ * @param appId - App id
822
+ * @param who - Agent session or member name
823
+ * @param caller - Agent or owner
824
+ * @returns Cloud's collaborator list
825
+ */
826
+ async addAgentCollaborator(appId, who, caller) {
827
+ const id = requireAppId(appId);
828
+ if (typeof who !== 'string' || !who.trim())
829
+ throw validation('agent is the session or name of the agent to add.');
830
+ const a = this.deps.ownerTargets ? await this.deps.ownerTargets.agent(who.trim()) : null;
831
+ if (!a)
832
+ throw validation(`No agent "${who}" on this machine.`);
833
+ const instanceId = this.deps.instanceId ? await this.deps.instanceId() : null;
834
+ if (!instanceId)
835
+ throw new AppsCloudError(409, C.ERROR_CODES.NO_INSTANCE, 'This machine has no Crewly Cloud instance id yet. Try again in a minute.');
836
+ await this.deps.roster?.pushIfChanged().catch(() => false);
837
+ return this.deps.client.request('PUT', `/apps/${id}/collaborators`, {
838
+ body: { kind: 'agent', session: a.session, instanceId },
839
+ ...(caller.agentSession ? { agent: caller.agentSession } : { asOwner: true }),
840
+ });
669
841
  }
670
842
  /**
671
843
  * Apps this instance published (local registry, not Cloud).