crewly 1.20.267 → 1.20.269

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/find-app-template/SKILL.md +63 -0
  2. package/config/skills/agent/core/find-app-template/execute.sh +71 -0
  3. package/config/skills/agent/core/find-app-template/execute.test.sh +66 -0
  4. package/config/skills/agent/core/publish-app/SKILL.md +39 -2
  5. package/config/skills/agent/core/publish-app/execute.sh +68 -0
  6. package/config/skills/agent/core/publish-app/execute.test.sh +29 -0
  7. package/config/skills/agent/core/use-app-template/SKILL.md +60 -0
  8. package/config/skills/agent/core/use-app-template/execute.sh +123 -0
  9. package/config/skills/agent/core/use-app-template/execute.test.sh +79 -0
  10. package/dist/backend/backend/src/constants.d.ts +43 -1
  11. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  12. package/dist/backend/backend/src/constants.js +43 -1
  13. package/dist/backend/backend/src/constants.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts +12 -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 +42 -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 +6 -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 +14 -1
  21. package/dist/backend/backend/src/controllers/apps/apps.routes.js.map +1 -1
  22. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  23. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +5 -0
  24. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  25. package/dist/backend/backend/src/services/apps/app-templates.service.d.ts +198 -0
  26. package/dist/backend/backend/src/services/apps/app-templates.service.d.ts.map +1 -0
  27. package/dist/backend/backend/src/services/apps/app-templates.service.js +327 -0
  28. package/dist/backend/backend/src/services/apps/app-templates.service.js.map +1 -0
  29. package/dist/backend/backend/src/services/apps/apps-cloud.client.d.ts +5 -1
  30. package/dist/backend/backend/src/services/apps/apps-cloud.client.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/apps/apps-cloud.client.js +7 -2
  32. package/dist/backend/backend/src/services/apps/apps-cloud.client.js.map +1 -1
  33. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts +7 -4
  34. package/dist/backend/backend/src/services/apps/apps.wiring.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/apps/apps.wiring.js +16 -4
  36. package/dist/backend/backend/src/services/apps/apps.wiring.js.map +1 -1
  37. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +8 -0
  38. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +2 -0
  40. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +4 -0
  43. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +2 -0
  45. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  46. package/dist/backend/backend/src/services/decisions/decision.service.js +1 -0
  47. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  48. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts +15 -0
  49. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/messaging/owner-hook-message.js +31 -3
  51. package/dist/backend/backend/src/services/messaging/owner-hook-message.js.map +1 -1
  52. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +50 -2
  53. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +150 -1
  55. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +29 -13
  57. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +62 -18
  59. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  60. package/dist/backend/backend/src/types/decision.types.d.ts +21 -1
  61. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  62. package/dist/backend/backend/src/types/slack.types.d.ts +2 -0
  63. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  64. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  65. package/dist/backend/build-info.json +2 -2
  66. package/dist/cli/backend/src/constants.d.ts +43 -1
  67. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  68. package/dist/cli/backend/src/constants.js +43 -1
  69. package/dist/cli/backend/src/constants.js.map +1 -1
  70. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  71. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +5 -0
  72. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  73. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +8 -0
  74. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  75. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +2 -0
  76. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  77. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +2 -0
  78. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  79. package/dist/cli/backend/src/services/decisions/decision.service.js +1 -0
  80. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  81. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +50 -2
  82. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  83. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +150 -1
  84. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  85. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +29 -13
  86. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  87. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +62 -18
  88. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  89. package/dist/cli/backend/src/types/decision.types.d.ts +21 -1
  90. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  91. package/dist/cli/backend/src/types/slack.types.d.ts +2 -0
  92. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  93. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  94. package/package.json +1 -1
@@ -0,0 +1,327 @@
1
+ /**
2
+ * AppTemplatesService — Crewly Apps templates on the Crewly Marketplace
3
+ * (specs/2026-10-08-app-templates.md; Cloud: crewly-services apps/SPEC.md §17).
4
+ *
5
+ * - **Publish as a template** ({@link AppTemplatesService.requestPublish}): an
6
+ * agent asks Cloud to make a draft from its app (Cloud scans it for secrets
7
+ * and personal data and refuses with what it found), then the owner gets a
8
+ * decision card "Publish … as a public template on the Crewly Marketplace?"
9
+ * with a preview link. Only the owner's tap lists it
10
+ * ({@link AppTemplatesService.onSettled}): the listing call is made as the
11
+ * owner (no instance, no agent header), which Cloud refuses for any agent.
12
+ * - **Find / use** ({@link AppTemplatesService.find}, {@link AppTemplatesService.use}):
13
+ * before building a new app an agent searches the Marketplace; using one
14
+ * makes a new app in this account (fresh data, the agent as its publisher)
15
+ * and hands back the template's files so the agent writes them into its
16
+ * project, adapts them and republishes with publish-app.
17
+ *
18
+ * @module services/apps/app-templates.service
19
+ */
20
+ import path from 'path';
21
+ import { AppsCloudError } from './apps-cloud.client.js';
22
+ import { requireAppId } from './apps.service.js';
23
+ import { CREWLY_APPS_CONSTANTS, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
24
+ const C = CREWLY_APPS_CONSTANTS;
25
+ const T = C.TEMPLATES;
26
+ const AS_AUTHOR_KEY = 'a';
27
+ const ANONYMOUS_KEY = 'b';
28
+ const DECLINE_KEY = 'c';
29
+ function validation(message) {
30
+ return new AppsCloudError(400, C.ERROR_CODES.VALIDATION, message);
31
+ }
32
+ /**
33
+ * @param v - Candidate template id
34
+ * @returns The id
35
+ * @throws AppsCloudError validation
36
+ */
37
+ export function requireTemplateId(v) {
38
+ if (typeof v !== 'string' || !T.ID_PATTERN.test(v))
39
+ throw validation('templateId looks like tpl-xxxxxxxxxx (from find-app-template).');
40
+ return v;
41
+ }
42
+ /**
43
+ * The project directory the skill will write a template's files into (absolute).
44
+ *
45
+ * @param v - From the skill (already resolved and checked to be inside the project)
46
+ * @returns The path, or null when not given
47
+ */
48
+ function optSource(v) {
49
+ if (v === undefined || v === null || v === '')
50
+ return null;
51
+ if (typeof v !== 'string' || !path.isAbsolute(v) || v.length > 1024)
52
+ throw validation('source must be an absolute directory path.');
53
+ return v;
54
+ }
55
+ /** A Marketplace link for a template. */
56
+ export function marketplaceUrl(templateId) {
57
+ return `${T.MARKETPLACE_URL}${T.MARKETPLACE_URL.includes('?') ? '&' : '?'}template=${encodeURIComponent(templateId)}`;
58
+ }
59
+ /** Text shown on a card: one line, no markup that could pose as Slack formatting. */
60
+ function cardText(s, max) {
61
+ return s.replace(/[\r\n\t]+/g, ' ').replace(/[<>|*_`~]/g, '').trim().slice(0, max);
62
+ }
63
+ /** The owner's card for a template request, and the listing behind the yes. */
64
+ export class AppTemplatesService {
65
+ deps;
66
+ constructor(deps) {
67
+ this.deps = deps;
68
+ }
69
+ /**
70
+ * An agent asks to publish one of its apps as a public Marketplace template.
71
+ * Cloud makes a draft (refusing anything that looks like a secret or
72
+ * personal data, with what it found); the owner gets a card. Nothing is
73
+ * listed here.
74
+ *
75
+ * @param appIdIn - The app (published by the caller or its team)
76
+ * @param caller - The calling agent (the owner lists from the portal instead)
77
+ * @param input - `{ description, name?, category?, tags?, author?, sampleData? }`
78
+ * @returns The card's decision id, the draft and its preview link
79
+ * @throws AppsCloudError unsafe_content (with Cloud's findings) / validation / not_your_app / unavailable
80
+ */
81
+ async requestPublish(appIdIn, caller, input) {
82
+ const appId = requireAppId(appIdIn);
83
+ const agent = caller.agentSession;
84
+ if (!agent)
85
+ throw validation('Only an agent asks; the owner publishes a template from the Crewly portal (Apps → the app).');
86
+ await this.deps.apps.assertPublisher(appId, caller);
87
+ if (typeof input.description !== 'string' || !input.description.trim())
88
+ throw validation('--description is required: one or two sentences on what the app does, for people browsing the Marketplace.');
89
+ if (input.description.length > T.MAX_DESCRIPTION_CHARS)
90
+ throw validation(`--description is at most ${T.MAX_DESCRIPTION_CHARS} characters.`);
91
+ let author;
92
+ if (input.author !== undefined && input.author !== null && input.author !== '') {
93
+ if (typeof input.author !== 'string' || input.author.trim().length > T.MAX_AUTHOR_CHARS || /[@<>]/.test(input.author)) {
94
+ throw validation(`--author is the owner's display name (at most ${T.MAX_AUTHOR_CHARS} characters, no email address).`);
95
+ }
96
+ author = input.author.trim();
97
+ }
98
+ const decisions = this.deps.decisions();
99
+ if (!decisions)
100
+ throw new AppsCloudError(503, 'unavailable', 'Owner approval cards are not running on this machine, so the template cannot be asked for. Try again after a restart.');
101
+ const draft = await this.deps.client.request('POST', `/apps/${appId}/template-drafts`, {
102
+ body: {
103
+ description: input.description.trim(),
104
+ ...(input.name !== undefined && input.name !== '' ? { name: input.name } : {}),
105
+ ...(input.category !== undefined && input.category !== '' ? { category: input.category } : {}),
106
+ ...(input.tags !== undefined && input.tags !== '' ? { tags: input.tags } : {}),
107
+ ...(input.sampleData !== undefined && input.sampleData !== null ? { sampleData: input.sampleData } : {}),
108
+ },
109
+ agent,
110
+ });
111
+ const me = await this.deps.directory?.member(agent).catch(() => null);
112
+ const askerName = me?.name ?? agent;
113
+ const subject = {
114
+ appId,
115
+ appName: draft.name,
116
+ templateId: draft.templateId,
117
+ version: draft.version,
118
+ ...(author ? { authorName: author } : {}),
119
+ askerSession: agent,
120
+ askerName,
121
+ };
122
+ const options = [
123
+ ...(author ? [{ key: AS_AUTHOR_KEY, label: `Publish as ${cardText(author, T.MAX_AUTHOR_CHARS)}`, detail: `the card says "by ${cardText(author, T.MAX_AUTHOR_CHARS)}"` }] : []),
124
+ { key: ANONYMOUS_KEY, label: 'Publish anonymously', detail: 'the card says "by a Crewly user"' },
125
+ { key: DECLINE_KEY, label: "Don't publish", detail: 'the draft is deleted; nothing is listed' },
126
+ ];
127
+ const update = draft.listedVersion !== null ? ` (an update of the one already listed)` : '';
128
+ const schema = draft.dataSchema.map((c) => c.collection).slice(0, 8).join(', ');
129
+ const decision = await decisions.askPrebuilt({
130
+ kind: 'app_template',
131
+ asker: agent,
132
+ question: `Publish “${cardText(draft.name, 80)}” as a public template on the Crewly Marketplace${update}? ${cardText(askerName, 60)} asked.`,
133
+ title: 'Publish an app template',
134
+ body: [
135
+ `<${draft.previewUrl}|Open the preview> — the app with sample data only.`,
136
+ `*Included:* the app's code (${draft.files} files)${schema ? ` and the names of its data collections (${cardText(schema, 200)})` : ''}. *Not included:* ${draft.excluded.join(', ')}.`,
137
+ `*Description (written by ${cardText(askerName, 60)}):* ${cardText(draft.description, 300)}`,
138
+ ...(draft.tags.length ? [`*Tags:* ${draft.tags.join(', ')} · *Category:* ${draft.category}`] : [`*Category:* ${draft.category}`]),
139
+ 'Anyone can then copy it into their own account. You can unlist it any time in the Crewly portal (Marketplace → Apps → My templates).',
140
+ ],
141
+ options,
142
+ defaultKey: DECLINE_KEY,
143
+ yesKey: author ? AS_AUTHOR_KEY : ANONYMOUS_KEY,
144
+ deadline: new Date(Date.now() + T.DECISION_DEADLINE_MS),
145
+ sensitive: 'publish',
146
+ appTemplate: subject,
147
+ });
148
+ return {
149
+ requested: true,
150
+ decisionId: decision.id,
151
+ templateId: draft.templateId,
152
+ version: draft.version,
153
+ previewUrl: draft.previewUrl,
154
+ listedVersion: draft.listedVersion,
155
+ files: draft.files,
156
+ excluded: draft.excluded,
157
+ message: 'Asked the owner (a decision card with a preview link). Nothing is on the Marketplace until they say yes; you will get a [APP TEMPLATE] note either way.',
158
+ };
159
+ }
160
+ /**
161
+ * The owner answered a template card. A publish option → list it in Cloud as
162
+ * the owner; anything else → delete the draft. Tells the asking agent.
163
+ *
164
+ * @param decision - The settled decision
165
+ * @returns Note for the asking agent, or null
166
+ */
167
+ async onSettled(decision) {
168
+ const s = decision.appTemplate;
169
+ if (!s)
170
+ return null;
171
+ const yes = decision.status === 'resolved' && (decision.chosenKey === AS_AUTHOR_KEY || decision.chosenKey === ANONYMOUS_KEY);
172
+ if (!yes) {
173
+ await this.deps.client.request('POST', `/templates/${s.templateId}/discard`, { body: { version: s.version }, asOwner: true }).catch(() => undefined);
174
+ return `[APP TEMPLATE] The owner did not publish “${s.appName}” as a template. The draft was deleted; nothing is on the Marketplace. Do not ask again unless the owner brings it up.`;
175
+ }
176
+ const authorName = decision.chosenKey === AS_AUTHOR_KEY ? (s.authorName ?? null) : null;
177
+ try {
178
+ await this.deps.client.request('POST', `/templates/${s.templateId}/approve`, { body: { version: s.version, authorName }, asOwner: true });
179
+ const by = authorName ? `by ${authorName}` : 'anonymously';
180
+ return `[APP TEMPLATE] The owner published “${s.appName}” on the Crewly Marketplace (${by}): ${marketplaceUrl(s.templateId)} (template id ${s.templateId}). Tell them in one line. Republishing the app does not change the template; ask again with publish-app --as-template to update it.`;
181
+ }
182
+ catch (err) {
183
+ const why = err instanceof AppsCloudError ? `${err.code}: ${err.message}` : String(err);
184
+ return `[APP TEMPLATE] The owner said yes, but listing “${s.appName}” failed (${why}). Tell the owner; they can list it from the Crewly portal (Marketplace → Apps → My templates).`;
185
+ }
186
+ }
187
+ /**
188
+ * Search the Marketplace (public templates of everyone).
189
+ *
190
+ * @param input - `{ q, tag?, category?, limit? }`
191
+ * @param caller - Agent (attribution) or owner
192
+ * @returns Listings, best match first
193
+ */
194
+ async find(input, caller) {
195
+ const q = typeof input.q === 'string' ? input.q.trim().slice(0, 100) : '';
196
+ const limitN = Number(input.limit ?? T.FIND_DEFAULT_LIMIT);
197
+ const limit = Number.isFinite(limitN) ? Math.min(Math.max(Math.floor(limitN), 1), T.FIND_MAX_LIMIT) : T.FIND_DEFAULT_LIMIT;
198
+ const data = await this.deps.client.request('GET', '/templates', {
199
+ query: {
200
+ q,
201
+ limit,
202
+ ...(typeof input.tag === 'string' && input.tag ? { tag: input.tag } : {}),
203
+ ...(typeof input.category === 'string' && input.category ? { category: input.category } : {}),
204
+ },
205
+ ...(caller.agentSession ? { agent: caller.agentSession } : {}),
206
+ });
207
+ return { templates: data?.templates ?? [], total: data?.total ?? 0 };
208
+ }
209
+ /**
210
+ * Make a new app in this account from a listed template and return its
211
+ * files. The calling agent becomes the app's publisher here (the owner's
212
+ * call from the portal makes the orchestrator the publisher and tells it).
213
+ *
214
+ * @param templateIdIn - Template
215
+ * @param caller - Agent or owner
216
+ * @param input - `{ name?, source? }`: `source` = the absolute directory the skill writes the files into
217
+ * @returns The new app, provenance and the files
218
+ */
219
+ async use(templateIdIn, caller, input) {
220
+ const templateId = requireTemplateId(templateIdIn);
221
+ const source = optSource(input.source);
222
+ if (input.name !== undefined && input.name !== null && input.name !== '' && (typeof input.name !== 'string' || input.name.trim().length > 80)) {
223
+ throw validation('--name is at most 80 characters.');
224
+ }
225
+ const agent = caller.agentSession ?? ORCHESTRATOR_SESSION_NAME;
226
+ const used = await this.deps.client.request('POST', `/templates/${templateId}/use`, { body: typeof input.name === 'string' && input.name.trim() ? { name: input.name.trim() } : {}, agent });
227
+ await this.deps.registry.upsert(used.app.appId, {
228
+ name: used.app.name,
229
+ url: used.app.url,
230
+ agentSession: agent,
231
+ ...(source ? { source } : {}),
232
+ currentVersion: used.app.currentVersion ?? 1,
233
+ // A brand-new app: start right before its first change.
234
+ cursor: 0,
235
+ deleted: false,
236
+ });
237
+ // The owner's call (portal → relay) gets no files: the orchestrator fetches them
238
+ // itself with use-app-template --app (a relay answer is no place for a whole bundle).
239
+ const bundle = caller.agentSession
240
+ ? await this.deps.client.request('GET', `/templates/${templateId}/bundle`, {
241
+ query: { version: used.fromTemplate.version },
242
+ agent,
243
+ })
244
+ : { entry: 'index.html', files: [] };
245
+ if (!caller.agentSession) {
246
+ const dir = `./${used.app.name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'app'}`;
247
+ await this.deps
248
+ .notifyAgent(ORCHESTRATOR_SESSION_NAME, `[APP TEMPLATE] The owner started a new app “${used.app.name}” (app id ${used.app.appId}) from the Marketplace template “${used.fromTemplate.name}”. ` +
249
+ `It is yours to look after. Get its files with \`use-app-template --app ${used.app.appId} --dir ${dir}\`, ask the owner in one line what to change for them, ` +
250
+ `then edit and republish with \`publish-app --app ${used.app.appId} --dir ${dir} --notify\` (or hand it to a team with publish-app --transfer-to).`, true)
251
+ .catch(() => false);
252
+ }
253
+ return {
254
+ appId: used.app.appId,
255
+ name: used.app.name,
256
+ url: `${C.APPS_ORIGIN}/${used.app.appId}`,
257
+ version: used.app.currentVersion ?? 1,
258
+ fromTemplate: used.fromTemplate,
259
+ capabilitiesNeeded: used.capabilitiesNeeded ?? [],
260
+ dataSchema: used.dataSchema ?? [],
261
+ entry: bundle.entry,
262
+ files: bundle.files,
263
+ };
264
+ }
265
+ /**
266
+ * The template files of an app that was made from a template (e.g. by the
267
+ * owner from the portal), so its publisher can adapt them. Records the
268
+ * directory as the app's source, so the next `publish-app --dir` lands on it.
269
+ *
270
+ * @param appIdIn - App
271
+ * @param caller - Its publisher (or a teammate), or the owner
272
+ * @param input - `{ source? }`
273
+ * @returns The files and provenance
274
+ */
275
+ async checkout(appIdIn, caller, input) {
276
+ const appId = requireAppId(appIdIn);
277
+ const source = optSource(input.source);
278
+ await this.deps.apps.assertPublisher(appId, caller);
279
+ const app = await this.deps.client.request('GET', `/apps/${appId}`, caller.agentSession ? { agent: caller.agentSession } : {});
280
+ if (!app.fromTemplate)
281
+ throw validation('This app was not made from a template. Edit its own files and publish with publish-app.');
282
+ const bundle = await this.deps.client
283
+ .request('GET', `/templates/${app.fromTemplate.templateId}/bundle`, {
284
+ query: { version: app.fromTemplate.version },
285
+ ...(caller.agentSession ? { agent: caller.agentSession } : {}),
286
+ })
287
+ .catch((err) => {
288
+ if (err instanceof AppsCloudError && err.status === 404) {
289
+ throw new AppsCloudError(404, 'not_found', 'The template this app came from is no longer on the Marketplace (or was updated). Build on the app as it is.');
290
+ }
291
+ throw err;
292
+ });
293
+ if (source)
294
+ await this.deps.registry.upsert(appId, { source });
295
+ return {
296
+ appId,
297
+ name: app.name,
298
+ url: `${C.APPS_ORIGIN}/${appId}`,
299
+ version: app.currentVersion ?? 1,
300
+ fromTemplate: app.fromTemplate,
301
+ entry: bundle.entry,
302
+ files: bundle.files,
303
+ };
304
+ }
305
+ /**
306
+ * Take one of this account's templates off the Marketplace (reducing
307
+ * exposure needs no approval). Apps made from it are not affected.
308
+ *
309
+ * @param templateIdIn - Template
310
+ * @param caller - Agent or owner
311
+ * @returns Cloud's owner view
312
+ */
313
+ async unlist(templateIdIn, caller) {
314
+ const templateId = requireTemplateId(templateIdIn);
315
+ return this.deps.client.request('POST', `/templates/${templateId}/unlist`, caller.agentSession ? { agent: caller.agentSession } : {});
316
+ }
317
+ /**
318
+ * This account's own templates (any status).
319
+ *
320
+ * @param caller - Agent or owner
321
+ * @returns Cloud's owner views
322
+ */
323
+ async mine(caller) {
324
+ return this.deps.client.request('GET', '/my/templates', caller.agentSession ? { agent: caller.agentSession } : {});
325
+ }
326
+ }
327
+ //# sourceMappingURL=app-templates.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-templates.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/app-templates.service.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,11 @@ export interface AppsCloudClientDeps {
27
27
  export declare class AppsCloudError extends Error {
28
28
  readonly status: number;
29
29
  readonly code: string;
30
- constructor(status: number, code: string, message: string);
30
+ /** Cloud's machine-readable `details` (e.g. a template scan's findings), when it sent any */
31
+ readonly details?: Record<string, unknown> | undefined;
32
+ constructor(status: number, code: string, message: string,
33
+ /** Cloud's machine-readable `details` (e.g. a template scan's findings), when it sent any */
34
+ details?: Record<string, unknown> | undefined);
31
35
  }
32
36
  /** Options of one request. */
33
37
  export interface AppsRequestOptions {
@@ -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,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,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;CA0BnB"}
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;IAE5B,6FAA6F;aAC7E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAJjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;IACf,6FAA6F;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;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,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,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;IAyBzF;;;;;;;;;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;CA0BnB"}
@@ -16,10 +16,14 @@ const C = CREWLY_APPS_CONSTANTS;
16
16
  export class AppsCloudError extends Error {
17
17
  status;
18
18
  code;
19
- constructor(status, code, message) {
19
+ details;
20
+ constructor(status, code, message,
21
+ /** Cloud's machine-readable `details` (e.g. a template scan's findings), when it sent any */
22
+ details) {
20
23
  super(message);
21
24
  this.status = status;
22
25
  this.code = code;
26
+ this.details = details;
23
27
  this.name = 'AppsCloudError';
24
28
  }
25
29
  }
@@ -77,7 +81,8 @@ export class AppsCloudClient {
77
81
  : res.status === 401
78
82
  ? 'Crewly Cloud rejected the session. Run `crewly cloud login` again.'
79
83
  : `Crewly Apps request failed (${res.status}).`;
80
- throw new AppsCloudError(res.status === 401 ? 409 : res.status, code, message);
84
+ const details = json?.details && typeof json.details === 'object' && !Array.isArray(json.details) ? json.details : undefined;
85
+ throw new AppsCloudError(res.status === 401 ? 409 : res.status, code, message, details);
81
86
  }
82
87
  /**
83
88
  * GET binary content from the Apps API (a voice comment's recording).
@@ -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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"}
@@ -16,6 +16,7 @@ import { AppCommentRoomService, type ResolvedRoom } from './app-comment-room.ser
16
16
  import { AppCommentAudioService, type SlackAudioUpload } from './app-comment-audio.service.js';
17
17
  import type { OwnerTargets } from './apps.service.js';
18
18
  import { AppCollaboratorsService } from './app-collaborators.service.js';
19
+ import { AppTemplatesService } from './app-templates.service.js';
19
20
  import type { AppChange } from './app-wake-message.js';
20
21
  /** The team shape the apps code reads. */
21
22
  export interface AppsTeam {
@@ -44,6 +45,8 @@ interface AppsParts {
44
45
  roster?: AppRosterService;
45
46
  /** Owner-approved collaborators (absent in tests that replace the parts) */
46
47
  collaborators?: AppCollaboratorsService;
48
+ /** Marketplace templates: publish (owner card), find, use (absent in tests that replace the parts) */
49
+ templates?: AppTemplatesService;
47
50
  }
48
51
  /**
49
52
  * Voice comment downloads (crewly-services apps/SPEC.md §16), built on first use.
@@ -170,13 +173,13 @@ export declare function teamAgentResolver(teams: AppsTeamsSource): (name: string
170
173
  */
171
174
  export declare const defaultCardPoster: AppCardPoster;
172
175
  /**
173
- * Let collaborator requests ask the owner, and act on the owner's tap. Called
174
- * once decision cards run.
176
+ * Let collaborator and template requests ask the owner, and act on the
177
+ * owner's tap. Called once decision cards run.
175
178
  *
176
179
  * @param decisions - The running decision service
177
- * @param register - Registers the `app_collaborator` kind handler (`DecisionService.registerKindHandler`)
180
+ * @param register - Registers the `app_collaborator` / `app_template` kind handlers (`DecisionService.registerKindHandler`)
178
181
  */
179
- export declare function attachAppCollaboratorDecisions(decisions: import('./app-collaborators.service.js').CollaboratorDecisions, register: (kind: 'app_collaborator', handler: AppCollaboratorsService | null) => void): void;
182
+ export declare function attachAppCollaboratorDecisions(decisions: import('./app-collaborators.service.js').CollaboratorDecisions, register: (kind: 'app_collaborator' | 'app_template', handler: import('../decisions/decision.service.js').DecisionKindHandler | null) => void): void;
180
183
  /**
181
184
  * The shared Apps parts, built on first use.
182
185
  *
@@ -1 +1 @@
1
- {"version":3,"file":"apps.wiring.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.wiring.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIxF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAiB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAoB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxG;AAED,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAExD,UAAU,SAAS;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,6FAA6F;IAC7F,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAaD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,sBAAsB,CAO3D;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAgBhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,uBAAuB,CAsC7D;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAE9E;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA+B/G;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAyBrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,eAA8B,GAAG,qBAAqB,CA+B9F;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAE1E;AAMD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAchE;AAED;;;;;GAKG;AACH,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAW7E;AASD;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIhE;AAaD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAK/F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,aAAa,CAkBnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAIzG;AAKD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWrH;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAe/B,CAAC;AAKF;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,OAAO,gCAAgC,EAAE,qBAAqB,EACzE,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,KAAK,IAAI,GACpF,IAAI,CAIN;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,eAA8B,GAAG,SAAS,CA+C7E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAEzD;AAED,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,4CAA4C;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,6BAA6B;IAC7B,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAmCrE;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
1
+ {"version":3,"file":"apps.wiring.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/apps/apps.wiring.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ import { AppCommentsSlackService, commentsSlackOff } from './app-comments-slack.
20
20
  import { AppCommentRoomService } from './app-comment-room.service.js';
21
21
  import { AppCommentAudioService } from './app-comment-audio.service.js';
22
22
  import { AppCollaboratorsService } from './app-collaborators.service.js';
23
+ import { AppTemplatesService } from './app-templates.service.js';
23
24
  import { getOwnerRequestContext } from '../orc/owner-request-context.js';
24
25
  import { getOwnerCompletionReport } from '../orc/owner-completion-report.service.js';
25
26
  let parts = null;
@@ -456,17 +457,19 @@ export const defaultCardPoster = {
456
457
  /** The running decision service (set once decision cards start), for collaborator requests. */
457
458
  let decisionsOf = () => null;
458
459
  /**
459
- * Let collaborator requests ask the owner, and act on the owner's tap. Called
460
- * once decision cards run.
460
+ * Let collaborator and template requests ask the owner, and act on the
461
+ * owner's tap. Called once decision cards run.
461
462
  *
462
463
  * @param decisions - The running decision service
463
- * @param register - Registers the `app_collaborator` kind handler (`DecisionService.registerKindHandler`)
464
+ * @param register - Registers the `app_collaborator` / `app_template` kind handlers (`DecisionService.registerKindHandler`)
464
465
  */
465
466
  export function attachAppCollaboratorDecisions(decisions, register) {
466
467
  decisionsOf = () => decisions;
467
- const collaborators = getAppsParts().collaborators;
468
+ const { collaborators, templates } = getAppsParts();
468
469
  if (collaborators)
469
470
  register('app_collaborator', collaborators);
471
+ if (templates)
472
+ register('app_template', templates);
470
473
  }
471
474
  /**
472
475
  * The shared Apps parts, built on first use.
@@ -481,6 +484,7 @@ export function getAppsParts(teams = defaultTeams) {
481
484
  const thumbnails = new AppThumbnailService({ client, registry });
482
485
  const roster = new AppRosterService({ client, getTeams: teams, getChannels: rosterChannels });
483
486
  const directory = directoryFrom(teams);
487
+ const notify = async (session, text, activate) => (agentNotifier ? agentNotifier(session, text, activate) : false);
484
488
  parts = {
485
489
  client,
486
490
  registry,
@@ -521,6 +525,14 @@ export function getAppsParts(teams = defaultTeams) {
521
525
  ...(process.env.NODE_ENV === 'test' ? {} : { thumbnails }),
522
526
  }),
523
527
  };
528
+ parts.templates = new AppTemplatesService({
529
+ client,
530
+ registry,
531
+ apps: parts.service,
532
+ directory,
533
+ decisions: () => decisionsOf(),
534
+ notifyAgent: notify,
535
+ });
524
536
  }
525
537
  return parts;
526
538
  }