@agent-native/core 0.202.0 → 0.202.1-nightly-20261007011022
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.
- package/dist/agent/actions/list-model-providers.d.ts +2 -0
- package/dist/agent/actions/list-model-providers.js +32 -5
- package/dist/agent/actions/manage-provider-models.d.ts +1 -0
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/registry.d.ts +2 -0
- package/dist/agent/engine/registry.js +63 -47
- package/dist/agent/model-config.d.ts +6 -6
- package/dist/agent/model-config.js +7 -11
- package/dist/agent/model-version.d.ts +3 -0
- package/dist/agent/model-version.js +67 -0
- package/dist/agent/provider-model-selection.d.ts +6 -1
- package/dist/agent/provider-model-selection.js +131 -13
- package/dist/automation/index.d.ts +1 -1
- package/dist/cli/create.d.ts +2 -1
- package/dist/cli/create.js +17 -4
- package/dist/cli/template-sync.js +2 -1
- package/dist/cli/workspacify.d.ts +1 -0
- package/dist/cli/workspacify.js +4 -0
- package/dist/client/app-config.d.ts +1 -0
- package/dist/client/app-config.js +19 -0
- package/dist/client/chat/agentkit-protocol.js +122 -16
- package/dist/client/chat/runtime.js +943 -50
- package/dist/client/chat-model-groups.d.ts +1 -0
- package/dist/client/chat-model-groups.js +1 -0
- package/dist/client/use-chat-models.js +47 -6
- package/dist/deploy/build.js +23 -9
- package/dist/email-catalog/redact-body.js +1 -1
- package/dist/jobs/actions/manage-recurring-job.d.ts +1 -1
- package/dist/jobs/background-automation-runner.d.ts +3 -1
- package/dist/jobs/background-automation-runner.js +15 -8
- package/dist/jobs/scheduler.js +1 -1
- package/dist/mcp/build-server.d.ts +0 -1
- package/dist/mcp/build-server.js +10 -59
- package/dist/observability/routes.d.ts +6 -6
- package/dist/onboarding/app-profile-data.d.ts +10 -0
- package/dist/onboarding/app-profile-data.js +423 -0
- package/dist/onboarding/app-profile.d.ts +1 -7
- package/dist/onboarding/app-profile.js +5 -422
- package/dist/onboarding/index.d.ts +1 -0
- package/dist/onboarding/index.js +1 -0
- package/dist/org/handlers.d.ts +1 -1
- package/dist/org/index.d.ts +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +2 -2
- package/dist/provider-api/actions/provider-api.d.ts +10 -10
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
- package/dist/secrets/routes.d.ts +11 -11
- package/dist/server/action-routes.js +1 -0
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/app-origin-config.d.ts +2 -0
- package/dist/server/app-origin-config.js +4 -0
- package/dist/server/auth.js +43 -1
- package/dist/server/better-auth-instance.js +7 -12
- package/dist/server/email-auth-links.d.ts +11 -0
- package/dist/server/email-auth-links.js +126 -0
- package/dist/server/fusion-app.js +11 -1
- package/dist/shared/agent-chat-context.d.ts +3 -3
- package/dist/shared/agent-chat-context.js +2 -2
- package/dist/shared/auth-copy.d.ts +3 -0
- package/dist/shared/auth-copy.js +33 -0
- package/dist/shared/design-system-agent-context.d.ts +5 -0
- package/dist/shared/design-system-agent-context.js +37 -8
- package/dist/shared/index.d.ts +1 -1
- package/dist/triggers/actions/manage-automation.d.ts +7 -7
- package/dist/triggers/condition-evaluator.d.ts +21 -5
- package/dist/triggers/condition-evaluator.js +113 -59
- package/dist/triggers/dispatcher.js +39 -21
- package/dist/vite/client.js +10 -0
- package/docs/content/durable-resume.mdx +9 -3
- package/package.json +5 -3
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { DESIGN_SYSTEM_INTELLIGENCE_CAPABILITY, EMBEDDINGS_CAPABILITY, LLM_CAPABILITY, WORKSPACE_SERVICES, workspaceServiceForCapability, } from "./workspace-services.js";
|
|
2
|
+
const SYSTEM_ONE_CAPABILITY = {
|
|
3
|
+
id: "system-one",
|
|
4
|
+
label: "Decision model (Jev)",
|
|
5
|
+
required: false,
|
|
6
|
+
suggested: true,
|
|
7
|
+
builderIncluded: true,
|
|
8
|
+
keySummary: "Jev decision model key",
|
|
9
|
+
whyKey: "agentChat.onboarding.capability.systemOne.why",
|
|
10
|
+
why: "Jev is an optional decision model that helps choose relevant tools and skills before the agent's first model request.",
|
|
11
|
+
};
|
|
12
|
+
const PROFILES = {
|
|
13
|
+
analytics: {
|
|
14
|
+
appId: "analytics",
|
|
15
|
+
appName: "Analytics",
|
|
16
|
+
capabilities: [
|
|
17
|
+
LLM_CAPABILITY,
|
|
18
|
+
{
|
|
19
|
+
id: "data-sources",
|
|
20
|
+
label: "Data sources",
|
|
21
|
+
required: false,
|
|
22
|
+
builderIncluded: false,
|
|
23
|
+
keySummary: "Connectors are added individually in Settings",
|
|
24
|
+
why: "Only needed for the services you want to query, such as GA4, Stripe, or HubSpot.",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "replay-storage",
|
|
28
|
+
label: "Replay storage",
|
|
29
|
+
required: false,
|
|
30
|
+
builderIncluded: true,
|
|
31
|
+
keySummary: "S3-compatible bucket, access key, and secret",
|
|
32
|
+
why: "Only needed when session replay is enabled so recordings can be stored.",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
assets: {
|
|
37
|
+
appId: "assets",
|
|
38
|
+
appName: "Assets",
|
|
39
|
+
capabilities: [
|
|
40
|
+
{
|
|
41
|
+
id: "media-generation",
|
|
42
|
+
label: "Image generation",
|
|
43
|
+
required: true,
|
|
44
|
+
builderIncluded: true,
|
|
45
|
+
keySummary: "Image generation",
|
|
46
|
+
labelKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
47
|
+
keySummaryKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
48
|
+
whyKey: "agentChat.onboarding.capability.assetsImageGeneration.why",
|
|
49
|
+
why: "Image generation is the core workflow for creating on-brand assets.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "video-generation",
|
|
53
|
+
label: "Video generation",
|
|
54
|
+
required: false,
|
|
55
|
+
suggested: true,
|
|
56
|
+
builderIncluded: true,
|
|
57
|
+
keySummary: "Gemini API key",
|
|
58
|
+
labelKey: "agentChat.onboarding.capability.assetsVideoGeneration.label",
|
|
59
|
+
keySummaryKey: "agentChat.onboarding.capability.assetsVideoGeneration.keySummary",
|
|
60
|
+
whyKey: "agentChat.onboarding.capability.assetsVideoGeneration.why",
|
|
61
|
+
why: "Video generation is optional; the core Assets workflow is image generation.",
|
|
62
|
+
},
|
|
63
|
+
DESIGN_SYSTEM_INTELLIGENCE_CAPABILITY,
|
|
64
|
+
{
|
|
65
|
+
id: "file-storage",
|
|
66
|
+
label: "Media storage",
|
|
67
|
+
required: false,
|
|
68
|
+
suggested: true,
|
|
69
|
+
builderIncluded: true,
|
|
70
|
+
keySummary: "Media storage",
|
|
71
|
+
why: "Generated files need a durable place to live before they can be shared.",
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
brain: {
|
|
76
|
+
appId: "brain",
|
|
77
|
+
appName: "Brain",
|
|
78
|
+
capabilities: [
|
|
79
|
+
LLM_CAPABILITY,
|
|
80
|
+
EMBEDDINGS_CAPABILITY,
|
|
81
|
+
{
|
|
82
|
+
id: "source-connections",
|
|
83
|
+
label: "Source connections",
|
|
84
|
+
required: false,
|
|
85
|
+
builderIncluded: false,
|
|
86
|
+
keySummary: "Slack, Granola, or GitHub connection",
|
|
87
|
+
why: "Only needed for the sources you want to ingest into your knowledge base.",
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
calendar: {
|
|
92
|
+
appId: "calendar",
|
|
93
|
+
appName: "Calendar",
|
|
94
|
+
capabilities: [
|
|
95
|
+
LLM_CAPABILITY,
|
|
96
|
+
{
|
|
97
|
+
id: "google-calendar",
|
|
98
|
+
label: "Google Calendar",
|
|
99
|
+
required: false,
|
|
100
|
+
builderIncluded: false,
|
|
101
|
+
keySummary: "Connect Google Calendar with OAuth",
|
|
102
|
+
why: "Calendar access is an OAuth connection, not an API key to paste.",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "calendar-connectors",
|
|
106
|
+
label: "Other calendar connections",
|
|
107
|
+
required: false,
|
|
108
|
+
builderIncluded: false,
|
|
109
|
+
keySummary: "Zoom, CRM, or enrichment connection",
|
|
110
|
+
why: "Only needed for the provider features you turn on.",
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
chat: {
|
|
115
|
+
appId: "chat",
|
|
116
|
+
appName: "Chat",
|
|
117
|
+
capabilities: [LLM_CAPABILITY],
|
|
118
|
+
},
|
|
119
|
+
clips: {
|
|
120
|
+
appId: "clips",
|
|
121
|
+
appName: "Clips",
|
|
122
|
+
capabilities: [
|
|
123
|
+
LLM_CAPABILITY,
|
|
124
|
+
{
|
|
125
|
+
id: "video-storage",
|
|
126
|
+
label: "Object storage",
|
|
127
|
+
required: true,
|
|
128
|
+
builderIncluded: true,
|
|
129
|
+
keySummary: "Object storage",
|
|
130
|
+
labelKey: "agentChat.onboarding.capability.clipsObjectStorage.label",
|
|
131
|
+
keySummaryKey: "agentChat.onboarding.capability.clipsObjectStorage.label",
|
|
132
|
+
whyKey: "agentChat.onboarding.capability.clipsObjectStorage.why",
|
|
133
|
+
why: "Recorded videos need durable object storage before they can be played back or shared.",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "transcription",
|
|
137
|
+
label: "Transcription",
|
|
138
|
+
required: false,
|
|
139
|
+
builderIncluded: true,
|
|
140
|
+
keySummary: "Speech-to-text provider key",
|
|
141
|
+
keySummaryKey: "agentChat.onboarding.capability.clipsTranscription.keySummary",
|
|
142
|
+
why: "Transcription powers captions, titles, summaries, and searchable chapters. Native capture still works without it.",
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
content: {
|
|
147
|
+
appId: "content",
|
|
148
|
+
appName: "Content",
|
|
149
|
+
capabilities: [
|
|
150
|
+
LLM_CAPABILITY,
|
|
151
|
+
{
|
|
152
|
+
id: "media-storage",
|
|
153
|
+
label: "Media storage",
|
|
154
|
+
required: false,
|
|
155
|
+
builderIncluded: true,
|
|
156
|
+
keySummary: "Builder file storage or S3-compatible storage",
|
|
157
|
+
why: "Only needed for documents that contain uploaded images, video, or audio.",
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
id: "notion",
|
|
161
|
+
label: "Notion",
|
|
162
|
+
required: false,
|
|
163
|
+
builderIncluded: false,
|
|
164
|
+
keySummary: "Connect Notion with OAuth",
|
|
165
|
+
why: "Only needed if you want to import or sync workspace content from Notion.",
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
crm: {
|
|
170
|
+
appId: "crm",
|
|
171
|
+
appName: "CRM",
|
|
172
|
+
capabilities: [
|
|
173
|
+
LLM_CAPABILITY,
|
|
174
|
+
{
|
|
175
|
+
id: "crm-connection",
|
|
176
|
+
label: "CRM connection",
|
|
177
|
+
required: false,
|
|
178
|
+
builderIncluded: false,
|
|
179
|
+
keySummary: "Connect HubSpot or Salesforce",
|
|
180
|
+
why: "Connections are shared securely with CRM; no provider token needs to be pasted here.",
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
design: {
|
|
185
|
+
appId: "design",
|
|
186
|
+
appName: "Design",
|
|
187
|
+
capabilities: [
|
|
188
|
+
LLM_CAPABILITY,
|
|
189
|
+
DESIGN_SYSTEM_INTELLIGENCE_CAPABILITY,
|
|
190
|
+
{
|
|
191
|
+
id: "image-generation",
|
|
192
|
+
label: "Image generation",
|
|
193
|
+
required: false,
|
|
194
|
+
suggested: true,
|
|
195
|
+
builderIncluded: true,
|
|
196
|
+
keySummary: "Image generation",
|
|
197
|
+
labelKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
198
|
+
keySummaryKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
199
|
+
whyKey: "agentChat.onboarding.capability.assetsImageGeneration.why",
|
|
200
|
+
why: "Image generation is the core workflow for creating on-brand assets.",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
id: "assets-library",
|
|
204
|
+
label: "Assets library",
|
|
205
|
+
required: false,
|
|
206
|
+
builderIncluded: true,
|
|
207
|
+
keySummary: "Connect the Assets app",
|
|
208
|
+
why: "Only needed when designs use managed images or other media assets.",
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
id: "figma",
|
|
212
|
+
label: "Figma",
|
|
213
|
+
required: false,
|
|
214
|
+
builderIncluded: false,
|
|
215
|
+
keySummary: "Figma personal access token",
|
|
216
|
+
why: "Only needed to read or update files in Figma.",
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: "github",
|
|
220
|
+
label: "GitHub",
|
|
221
|
+
required: false,
|
|
222
|
+
builderIncluded: false,
|
|
223
|
+
keySummary: "GitHub token",
|
|
224
|
+
why: "Only needed when designs are connected to a repository.",
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
dispatch: {
|
|
229
|
+
appId: "dispatch",
|
|
230
|
+
appName: "Dispatch",
|
|
231
|
+
capabilities: [
|
|
232
|
+
LLM_CAPABILITY,
|
|
233
|
+
{
|
|
234
|
+
id: "workspace-connections",
|
|
235
|
+
label: "Workspace connections",
|
|
236
|
+
required: false,
|
|
237
|
+
builderIncluded: false,
|
|
238
|
+
keySummary: "Connect providers from the workspace registry",
|
|
239
|
+
why: "Dispatch uses shared connections so provider tokens never need to be pasted into this app.",
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
factory: {
|
|
244
|
+
appId: "factory",
|
|
245
|
+
appName: "Factory",
|
|
246
|
+
capabilities: [
|
|
247
|
+
LLM_CAPABILITY,
|
|
248
|
+
{
|
|
249
|
+
id: "builder-executor",
|
|
250
|
+
label: "Builder executor",
|
|
251
|
+
required: true,
|
|
252
|
+
builderIncluded: true,
|
|
253
|
+
keySummary: "Use Builder.io for managed agent runs",
|
|
254
|
+
why: "The executor runs approved code and review workflows for Factory items.",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: "triage-connections",
|
|
258
|
+
label: "Triage connections",
|
|
259
|
+
required: false,
|
|
260
|
+
builderIncluded: false,
|
|
261
|
+
keySummary: "GitHub, Slack, or Sentry connection",
|
|
262
|
+
why: "Only needed for the feedback source you want Factory to monitor.",
|
|
263
|
+
},
|
|
264
|
+
],
|
|
265
|
+
},
|
|
266
|
+
forms: {
|
|
267
|
+
appId: "forms",
|
|
268
|
+
appName: "Forms",
|
|
269
|
+
capabilities: [
|
|
270
|
+
LLM_CAPABILITY,
|
|
271
|
+
{
|
|
272
|
+
id: "file-storage",
|
|
273
|
+
label: "File storage",
|
|
274
|
+
required: false,
|
|
275
|
+
builderIncluded: true,
|
|
276
|
+
keySummary: "Builder file storage or S3-compatible storage",
|
|
277
|
+
why: "Text-only forms work without storage. Add it when a form accepts file uploads.",
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
mail: {
|
|
282
|
+
appId: "mail",
|
|
283
|
+
appName: "Mail",
|
|
284
|
+
capabilities: [
|
|
285
|
+
LLM_CAPABILITY,
|
|
286
|
+
{
|
|
287
|
+
id: "gmail",
|
|
288
|
+
label: "Gmail",
|
|
289
|
+
required: true,
|
|
290
|
+
builderIncluded: false,
|
|
291
|
+
satisfiedBySignIn: true,
|
|
292
|
+
keySummary: "Connect Gmail with OAuth",
|
|
293
|
+
why: "Mail uses the workspace's managed Google connection; no key is pasted here.",
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
id: "attachment-storage",
|
|
297
|
+
label: "Attachment storage",
|
|
298
|
+
required: false,
|
|
299
|
+
builderIncluded: true,
|
|
300
|
+
keySummary: "Builder file storage or S3-compatible storage",
|
|
301
|
+
why: "Only needed when attachments need to be retained outside Gmail.",
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
plan: {
|
|
306
|
+
appId: "plan",
|
|
307
|
+
appName: "Plan",
|
|
308
|
+
capabilities: [
|
|
309
|
+
LLM_CAPABILITY,
|
|
310
|
+
{
|
|
311
|
+
id: "plan-assets",
|
|
312
|
+
label: "Plan asset storage",
|
|
313
|
+
required: false,
|
|
314
|
+
builderIncluded: true,
|
|
315
|
+
keySummary: "Builder file storage or S3-compatible storage",
|
|
316
|
+
why: "Only needed for screenshots and other visual plan assets.",
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
id: "google-sign-in",
|
|
320
|
+
label: "Google sign-in",
|
|
321
|
+
required: false,
|
|
322
|
+
builderIncluded: false,
|
|
323
|
+
keySummary: "Google OAuth client ID and secret",
|
|
324
|
+
why: "Only needed when Google sign-in is enabled for the deployment.",
|
|
325
|
+
},
|
|
326
|
+
],
|
|
327
|
+
},
|
|
328
|
+
slides: {
|
|
329
|
+
appId: "slides",
|
|
330
|
+
appName: "Slides",
|
|
331
|
+
capabilities: [
|
|
332
|
+
LLM_CAPABILITY,
|
|
333
|
+
DESIGN_SYSTEM_INTELLIGENCE_CAPABILITY,
|
|
334
|
+
{
|
|
335
|
+
id: "image-generation",
|
|
336
|
+
label: "Image generation",
|
|
337
|
+
required: false,
|
|
338
|
+
suggested: true,
|
|
339
|
+
builderIncluded: true,
|
|
340
|
+
keySummary: "Image generation",
|
|
341
|
+
labelKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
342
|
+
keySummaryKey: "agentChat.onboarding.capability.assetsImageGeneration.label",
|
|
343
|
+
why: "Only needed when slides generate images instead of using uploaded assets.",
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
id: "reference-storage",
|
|
347
|
+
label: "Reference file storage",
|
|
348
|
+
required: false,
|
|
349
|
+
builderIncluded: true,
|
|
350
|
+
keySummary: "Builder file storage or S3-compatible storage",
|
|
351
|
+
why: "Only needed for uploaded reference files and presentation assets.",
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
id: "google-docs",
|
|
355
|
+
label: "Google Docs",
|
|
356
|
+
required: false,
|
|
357
|
+
builderIncluded: false,
|
|
358
|
+
keySummary: "Connect Google Docs with OAuth",
|
|
359
|
+
why: "Only needed to import source material from Google Drive or Docs.",
|
|
360
|
+
},
|
|
361
|
+
],
|
|
362
|
+
},
|
|
363
|
+
tasks: {
|
|
364
|
+
appId: "tasks",
|
|
365
|
+
appName: "Tasks",
|
|
366
|
+
capabilities: [LLM_CAPABILITY],
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
const FALLBACK_PROFILE = {
|
|
370
|
+
appId: "app",
|
|
371
|
+
appName: "Your app",
|
|
372
|
+
capabilities: [LLM_CAPABILITY],
|
|
373
|
+
};
|
|
374
|
+
export function normalizeOnboardingAppId(value) {
|
|
375
|
+
const normalized = value?.trim().toLowerCase() ?? "";
|
|
376
|
+
if (!normalized)
|
|
377
|
+
return "app";
|
|
378
|
+
return (normalized
|
|
379
|
+
.replace(/^@[^/]+\//, "")
|
|
380
|
+
.replace(/^agent-native-/, "")
|
|
381
|
+
.replace(/[^a-z0-9-]/g, "-")
|
|
382
|
+
.replace(/-+/g, "-")
|
|
383
|
+
.replace(/^-|-$/g, "") || "app");
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* The app's setup profile: the shared workspace services first (see
|
|
387
|
+
* `WORKSPACE_SERVICES`), each tagged with its `service` id, then the app's
|
|
388
|
+
* own capabilities. A profile that declares a
|
|
389
|
+
* service's capability tailors its copy and can raise it to required or
|
|
390
|
+
* recommended, never lower it.
|
|
391
|
+
*/
|
|
392
|
+
export function getOnboardingAppProfileForId(appId) {
|
|
393
|
+
const resolvedId = normalizeOnboardingAppId(appId);
|
|
394
|
+
const profile = PROFILES[resolvedId] ?? FALLBACK_PROFILE;
|
|
395
|
+
const services = WORKSPACE_SERVICES.flatMap((service) => {
|
|
396
|
+
const declared = profile.capabilities.find((capability) => service.capabilityIds.includes(capability.id));
|
|
397
|
+
if (!declared && !service.everyApp)
|
|
398
|
+
return [];
|
|
399
|
+
const base = declared ?? service.capability;
|
|
400
|
+
const required = Boolean(declared?.required || service.capability.required);
|
|
401
|
+
const suggested = !required && Boolean(declared?.suggested || service.capability.suggested);
|
|
402
|
+
return [
|
|
403
|
+
{
|
|
404
|
+
...base,
|
|
405
|
+
required,
|
|
406
|
+
suggested,
|
|
407
|
+
service: service.id,
|
|
408
|
+
...(service.kind === "builder-only" ? { builderOnly: true } : {}),
|
|
409
|
+
},
|
|
410
|
+
];
|
|
411
|
+
});
|
|
412
|
+
const appCapabilities = profile.capabilities.filter((capability) => !workspaceServiceForCapability(capability.id));
|
|
413
|
+
return {
|
|
414
|
+
...profile,
|
|
415
|
+
capabilities: [
|
|
416
|
+
// Jev is part of the model setup, so it follows the AI model.
|
|
417
|
+
...services.flatMap((capability) => capability.service === "model"
|
|
418
|
+
? [capability, { ...SYSTEM_ONE_CAPABILITY }]
|
|
419
|
+
: [capability]),
|
|
420
|
+
...appCapabilities.map((capability) => ({ ...capability })),
|
|
421
|
+
],
|
|
422
|
+
};
|
|
423
|
+
}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import type { OnboardingAppProfile } from "./types.js";
|
|
2
|
+
export { getOnboardingAppProfileForId } from "./app-profile-data.js";
|
|
2
3
|
export declare function resolveOnboardingAppId(explicit?: string): string;
|
|
3
|
-
/**
|
|
4
|
-
* The app's setup profile: the shared workspace services first (see
|
|
5
|
-
* `WORKSPACE_SERVICES`), each tagged with its `service` id, then the app's
|
|
6
|
-
* own capabilities. A profile that declares a
|
|
7
|
-
* service's capability tailors its copy and can raise it to required or
|
|
8
|
-
* recommended, never lower it.
|
|
9
|
-
*/
|
|
10
4
|
export declare function getOnboardingAppProfile(appId?: string): OnboardingAppProfile;
|