@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
|
@@ -10,14 +10,17 @@
|
|
|
10
10
|
* A chat already pinned to an unchecked model keeps running on it.
|
|
11
11
|
*/
|
|
12
12
|
import { AGENT_PROVIDER_CATALOG, } from "../client/agent-provider-catalog.js";
|
|
13
|
+
import { assertCredentialCanReachEndpoint, CredentialEndpointMismatchError, } from "../credentials/index.js";
|
|
13
14
|
import { getOrgRoleForEmail } from "../mcp/actions/service-token-access.js";
|
|
14
15
|
import { canManageOrg } from "../org/permissions.js";
|
|
15
|
-
import {
|
|
16
|
+
import { readAppSecret } from "../secrets/storage.js";
|
|
17
|
+
import { canUseDeployCredentialFallbackForRequest, resolveBuilderCredentialsDetailed, resolveSecretDetailed, readDeployCredentialEnv, } from "../server/credential-provider.js";
|
|
16
18
|
import { getRequestOrgId, getRequestUserEmail, } from "../server/request-context.js";
|
|
17
19
|
import { deleteOrgSetting, deleteUserSetting, getOrgSetting, getUserSetting, putOrgSetting, putUserSetting, } from "../settings/index.js";
|
|
18
|
-
import { OLLAMA_BASE_URL_ENV_VAR } from "./engine/openai-compatible-endpoint.js";
|
|
20
|
+
import { isCustomOpenAiBaseUrl, OLLAMA_BASE_URL_ENV_VAR, OPENAI_BASE_URL_ENV_VAR, } from "./engine/openai-compatible-endpoint.js";
|
|
19
21
|
import { PROVIDER_ENV_META } from "./engine/provider-env-vars.js";
|
|
20
22
|
import { BUILDER_MODEL_CONFIG } from "./model-config.js";
|
|
23
|
+
import { upgradeModelToLatestSupportedVersion } from "./model-version.js";
|
|
21
24
|
export const PROVIDER_MODEL_SELECTION_KEY_PREFIX = "agent-provider-models";
|
|
22
25
|
/** Audit target type for selection changes and refused attempts. */
|
|
23
26
|
export const PROVIDER_MODEL_SELECTION_AUDIT_TARGET_TYPE = "provider-models";
|
|
@@ -72,7 +75,7 @@ function providerCredentialEnvVar(provider) {
|
|
|
72
75
|
* only routes its own catalog, so ids outside it are refused rather than
|
|
73
76
|
* stored as choices the gateway would silently swap for its default.
|
|
74
77
|
*/
|
|
75
|
-
export function normalizeSelectedModels(provider, models) {
|
|
78
|
+
export function normalizeSelectedModels(provider, models, options = {}) {
|
|
76
79
|
if (models.length > MAX_SELECTED_MODELS) {
|
|
77
80
|
throw new ProviderModelSelectionError(`Select at most ${MAX_SELECTED_MODELS} models.`, 400);
|
|
78
81
|
}
|
|
@@ -89,7 +92,12 @@ export function normalizeSelectedModels(provider, models) {
|
|
|
89
92
|
}
|
|
90
93
|
seen.add(id);
|
|
91
94
|
}
|
|
92
|
-
const
|
|
95
|
+
const supportedModels = recommendedProviderModels(provider);
|
|
96
|
+
const normalized = [
|
|
97
|
+
...new Set([...seen].map((id) => options.preserveCustomModels
|
|
98
|
+
? id
|
|
99
|
+
: (upgradeModelToLatestSupportedVersion(id, supportedModels) ?? id))),
|
|
100
|
+
];
|
|
93
101
|
if (provider === "builder") {
|
|
94
102
|
const catalog = new Set(BUILDER_MODEL_CONFIG.supportedModels);
|
|
95
103
|
const unknown = normalized.filter((id) => !catalog.has(id));
|
|
@@ -99,17 +107,107 @@ export function normalizeSelectedModels(provider, models) {
|
|
|
99
107
|
}
|
|
100
108
|
return normalized;
|
|
101
109
|
}
|
|
102
|
-
function
|
|
110
|
+
async function preserveCustomModelsForScope(provider, scope, ctx) {
|
|
111
|
+
if (provider !== "openai")
|
|
112
|
+
return false;
|
|
113
|
+
const scopeId = scopeIdFor(ctx, scope);
|
|
114
|
+
const credentialRefs = scope === "user"
|
|
115
|
+
? [
|
|
116
|
+
{ scope: "user", scopeId },
|
|
117
|
+
{ scope: "workspace", scopeId: `solo:${scopeId}` },
|
|
118
|
+
]
|
|
119
|
+
: [
|
|
120
|
+
{ scope: "org", scopeId },
|
|
121
|
+
{ scope: "workspace", scopeId },
|
|
122
|
+
];
|
|
123
|
+
const [credentials, endpoints] = await Promise.all([
|
|
124
|
+
Promise.all(credentialRefs.map((ref) => readAppSecret({ key: PROVIDER_ENV_META.openai.envVar, ...ref }))),
|
|
125
|
+
Promise.all(credentialRefs.map((ref) => readAppSecret({ key: OPENAI_BASE_URL_ENV_VAR, ...ref }))),
|
|
126
|
+
]);
|
|
127
|
+
for (const [endpointIndex, endpoint] of endpoints.entries()) {
|
|
128
|
+
if (!isCustomOpenAiBaseUrl(endpoint?.value))
|
|
129
|
+
continue;
|
|
130
|
+
for (const [credentialIndex, credential] of credentials.entries()) {
|
|
131
|
+
if (!credential?.value)
|
|
132
|
+
continue;
|
|
133
|
+
try {
|
|
134
|
+
assertCredentialCanReachEndpoint(credentialRefs[endpointIndex], credentialRefs[credentialIndex], PROVIDER_ENV_META.openai.envVar);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (!(error instanceof CredentialEndpointMismatchError))
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (endpoints.some((secret) => secret?.value) ||
|
|
144
|
+
credentials.some((secret) => secret?.value)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if (scope === "user") {
|
|
148
|
+
if (!canUseDeployCredentialFallbackForRequest(PROVIDER_ENV_META.openai.envVar) ||
|
|
149
|
+
!canUseDeployCredentialFallbackForRequest(OPENAI_BASE_URL_ENV_VAR)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
return Boolean(readDeployCredentialEnv(PROVIDER_ENV_META.openai.envVar) &&
|
|
153
|
+
isCustomOpenAiBaseUrl(readDeployCredentialEnv(OPENAI_BASE_URL_ENV_VAR)));
|
|
154
|
+
}
|
|
155
|
+
const [credential, resolvedEndpoint] = await Promise.all([
|
|
156
|
+
resolveSecretDetailed(PROVIDER_ENV_META.openai.envVar, {
|
|
157
|
+
skipUserScope: true,
|
|
158
|
+
}),
|
|
159
|
+
resolveSecretDetailed(OPENAI_BASE_URL_ENV_VAR, { skipUserScope: true }),
|
|
160
|
+
]);
|
|
161
|
+
if (credential.lookupFailed || resolvedEndpoint.lookupFailed) {
|
|
162
|
+
throw new Error("Could not read the OpenAI credential configuration.");
|
|
163
|
+
}
|
|
164
|
+
if (!credential.value ||
|
|
165
|
+
!resolvedEndpoint.value ||
|
|
166
|
+
!isCustomOpenAiBaseUrl(resolvedEndpoint.value) ||
|
|
167
|
+
!credential.source ||
|
|
168
|
+
!resolvedEndpoint.source) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (credential.source === "env" || resolvedEndpoint.source === "env") {
|
|
172
|
+
return credential.source === "env" && resolvedEndpoint.source === "env";
|
|
173
|
+
}
|
|
174
|
+
if (credential.source === "workspace" &&
|
|
175
|
+
credential.scopeId?.startsWith("solo:")) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
assertCredentialCanReachEndpoint({
|
|
180
|
+
scope: resolvedEndpoint.source,
|
|
181
|
+
scopeId: resolvedEndpoint.scopeId,
|
|
182
|
+
}, { scope: credential.source, scopeId: credential.scopeId }, PROVIDER_ENV_META.openai.envVar);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
if (error instanceof CredentialEndpointMismatchError)
|
|
187
|
+
return false;
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function parseRow(provider, scope, stored, preserveCustomModels = false) {
|
|
192
|
+
const customModelMetadata = provider === "openai" && preserveCustomModels
|
|
193
|
+
? { preserveCustomModels: true }
|
|
194
|
+
: {};
|
|
103
195
|
if (!stored || !Array.isArray(stored.models)) {
|
|
104
|
-
return { provider, scope, models: null };
|
|
196
|
+
return { provider, scope, models: null, ...customModelMetadata };
|
|
105
197
|
}
|
|
106
198
|
const models = stored.models.filter((model) => typeof model === "string" && !!model.trim());
|
|
199
|
+
const currentModels = [
|
|
200
|
+
...new Set(models.map((model) => preserveCustomModels
|
|
201
|
+
? model
|
|
202
|
+
: (upgradeModelToLatestSupportedVersion(model, recommendedProviderModels(provider)) ?? model))),
|
|
203
|
+
];
|
|
107
204
|
return {
|
|
108
205
|
provider,
|
|
109
206
|
scope,
|
|
207
|
+
...customModelMetadata,
|
|
110
208
|
models: provider === "builder"
|
|
111
|
-
?
|
|
112
|
-
:
|
|
209
|
+
? currentModels.filter((model) => BUILDER_MODEL_CONFIG.supportedModels.includes(model))
|
|
210
|
+
: currentModels,
|
|
113
211
|
...(typeof stored.updatedAt === "number" &&
|
|
114
212
|
Number.isFinite(stored.updatedAt)
|
|
115
213
|
? { updatedAt: stored.updatedAt }
|
|
@@ -138,7 +236,8 @@ export async function readProviderModelSelection(ctx, provider, scope) {
|
|
|
138
236
|
const stored = scope === "org"
|
|
139
237
|
? await getOrgSetting(scopeId, key)
|
|
140
238
|
: await getUserSetting(scopeId, key);
|
|
141
|
-
|
|
239
|
+
const preserveCustomModels = await preserveCustomModelsForScope(provider, scope, ctx);
|
|
240
|
+
return parseRow(provider, scope, stored, preserveCustomModels);
|
|
142
241
|
}
|
|
143
242
|
/**
|
|
144
243
|
* Whether the caller may change `scope`'s selection. Personal selections are
|
|
@@ -157,7 +256,10 @@ export async function assertMayWriteProviderModelSelection(ctx, scope) {
|
|
|
157
256
|
}
|
|
158
257
|
export async function writeProviderModelSelection(ctx, provider, scope, models) {
|
|
159
258
|
await assertMayWriteProviderModelSelection(ctx, scope);
|
|
160
|
-
const
|
|
259
|
+
const preserveCustomModels = await preserveCustomModelsForScope(provider, scope, ctx);
|
|
260
|
+
const normalized = normalizeSelectedModels(provider, models, {
|
|
261
|
+
preserveCustomModels,
|
|
262
|
+
});
|
|
161
263
|
const scopeId = scopeIdFor(ctx, scope);
|
|
162
264
|
const key = providerModelSelectionSettingsKey(provider);
|
|
163
265
|
const value = {
|
|
@@ -211,7 +313,11 @@ export async function resolveProviderModelSelectionScope(provider, ctx = current
|
|
|
211
313
|
if (detail.lookupFailed && !detail.value) {
|
|
212
314
|
throw new Error("Could not read the credential store.");
|
|
213
315
|
}
|
|
214
|
-
return detail.source === "user"
|
|
316
|
+
return detail.source === "user" ||
|
|
317
|
+
(detail.source === "workspace" &&
|
|
318
|
+
detail.scopeId === `solo:${ctx.userEmail}`)
|
|
319
|
+
? "user"
|
|
320
|
+
: "org";
|
|
215
321
|
}
|
|
216
322
|
/** The selection the current request's picker shows for `provider`. */
|
|
217
323
|
export async function resolveEffectiveProviderModelSelection(provider, ctx = currentContext()) {
|
|
@@ -247,13 +353,22 @@ export async function resolveProviderModelSelectionAtScope(provider, scope, ctx)
|
|
|
247
353
|
}
|
|
248
354
|
}
|
|
249
355
|
function selectionFromRow(row) {
|
|
356
|
+
const customModelMetadata = row.preserveCustomModels
|
|
357
|
+
? { preserveCustomModels: true }
|
|
358
|
+
: {};
|
|
250
359
|
return row.models === null
|
|
251
|
-
? {
|
|
360
|
+
? {
|
|
361
|
+
state: "default",
|
|
362
|
+
provider: row.provider,
|
|
363
|
+
scope: row.scope,
|
|
364
|
+
...customModelMetadata,
|
|
365
|
+
}
|
|
252
366
|
: {
|
|
253
367
|
state: "selected",
|
|
254
368
|
provider: row.provider,
|
|
255
369
|
scope: row.scope,
|
|
256
370
|
models: row.models,
|
|
371
|
+
...customModelMetadata,
|
|
257
372
|
};
|
|
258
373
|
}
|
|
259
374
|
/**
|
|
@@ -280,7 +395,10 @@ export async function resolveUncheckedDefaultModelReplacement(engine) {
|
|
|
280
395
|
}
|
|
281
396
|
if (selection.state !== "selected")
|
|
282
397
|
return undefined;
|
|
283
|
-
|
|
398
|
+
const currentDefault = selection.preserveCustomModels
|
|
399
|
+
? engine.defaultModel
|
|
400
|
+
: (upgradeModelToLatestSupportedVersion(engine.defaultModel, recommendedProviderModels(provider)) ?? engine.defaultModel);
|
|
401
|
+
if (selection.models.includes(currentDefault))
|
|
284
402
|
return undefined;
|
|
285
403
|
return selection.models[0];
|
|
286
404
|
}
|
|
@@ -139,8 +139,8 @@ export declare function createAutomationCallbackHandler(runtime: AutomationRunti
|
|
|
139
139
|
duplicate?: undefined;
|
|
140
140
|
eventId?: undefined;
|
|
141
141
|
} | {
|
|
142
|
-
error?: undefined;
|
|
143
142
|
accepted: boolean;
|
|
144
143
|
duplicate: boolean;
|
|
145
144
|
eventId: string;
|
|
145
|
+
error?: undefined;
|
|
146
146
|
}>;
|
package/dist/cli/create.d.ts
CHANGED
|
@@ -102,7 +102,7 @@ export declare function detectWorkspace(startDir: string): {
|
|
|
102
102
|
} | null;
|
|
103
103
|
export { parseWorkspaceScope };
|
|
104
104
|
/** @internal — exported for E2E tests */
|
|
105
|
-
export { mergeWorkspaceYamlSections as _mergeWorkspaceYamlSections, scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot, mergeWorkspaceYamlListItems as _mergeWorkspaceYamlListItems, scaffoldOneAppIntoWorkspace as _scaffoldOneAppIntoWorkspace, CreateWizardCancelledError as _CreateWizardCancelledError, ensureGuardedScaffold as _ensureGuardedScaffold, scaffoldAppTemplate as _scaffoldAppTemplate, scaffoldRequiredPackages as _scaffoldRequiredPackages, postProcessStandalone as _postProcessStandalone, loadCatalog as _loadCatalog, fixPackageJsonName as _fixPackageJsonName, renameGitignore as _renameGitignore, discoverEnclosingRepo as _discoverEnclosingRepo, rewriteNetlifyToml as _rewriteNetlifyToml, getCoreDependencyVersion as _getCoreDependencyVersion, getDispatchDependencyVersion as _getDispatchDependencyVersion, getToolkitDependencyVersion as _getToolkitDependencyVersion, getAgentKitDependencyVersion as _getAgentKitDependencyVersion, prepareLocalWorkspaceOverrides as _prepareLocalWorkspaceOverrides, ensureLocalPackageBuildOutputs as _ensureLocalPackageBuildOutputs, getCorePackageVersion as _getCorePackageVersion, getGitHubTemplateRef as _getGitHubTemplateRef, getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates, githubTarballUrl as _githubTarballUrl, findLocalTemplateFrom as _findLocalTemplateFrom, workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection, startShapePromptOptions as _startShapePromptOptions, standaloneTemplatePromptOptions as _standaloneTemplatePromptOptions, parseCommunityTemplateSelection as _parseCommunityTemplateSelection, communityTemplateTrustMessage as _communityTemplateTrustMessage, communityTemplateTarballUrl as _communityTemplateTarballUrl, assertCommunityTemplateRoot as _assertCommunityTemplateRoot, assertSafeCommunityArchiveListing as _assertSafeCommunityArchiveListing, validateCommunityArchive as _validateCommunityArchive, resolveCommunityTemplateSource as _resolveCommunityTemplateSource, discoverCommunityWorkspaceApps as _discoverCommunityWorkspaceApps, normalizeCommunityWorkspaceAppDependencies as _normalizeCommunityWorkspaceAppDependencies, shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry, removeWorkspaceOnlyTemplateWiring as _removeWorkspaceOnlyTemplateWiring, tarExtractArgs as _tarExtractArgs, extractTarball as _extractTarball, materializeArchiveSymlinks as _materializeArchiveSymlinks, downloadGitHubSubdir as _downloadGitHubSubdir, findLocalTemplate as _findLocalTemplate, templateSourceName as _templateSourceName, normalizeTemplateName as _normalizeTemplateName, appTitleForScaffold as _appTitleForScaffold, replacePlaceholders as _replacePlaceholders, rewriteTrackingAppId as _rewriteTrackingAppId, rewriteAgentChatAppId as _rewriteAgentChatAppId, applyScaffoldIdentity as _applyScaffoldIdentity, ensureScaffoldEmailBrandingConfig as _ensureScaffoldEmailBrandingConfig, fixWebManifestName as _fixWebManifestName, copyDir as _copyDir, localTemplateSourceKind as _localTemplateSourceKind, REPO as _REPO, TEMPLATES_DIR as _TEMPLATES_DIR, };
|
|
105
|
+
export { mergeWorkspaceYamlSections as _mergeWorkspaceYamlSections, scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot, mergeWorkspaceYamlListItems as _mergeWorkspaceYamlListItems, scaffoldOneAppIntoWorkspace as _scaffoldOneAppIntoWorkspace, CreateWizardCancelledError as _CreateWizardCancelledError, ensureGuardedScaffold as _ensureGuardedScaffold, scaffoldAppTemplate as _scaffoldAppTemplate, scaffoldRequiredPackages as _scaffoldRequiredPackages, postProcessStandalone as _postProcessStandalone, loadCatalog as _loadCatalog, fixPackageJsonName as _fixPackageJsonName, renameGitignore as _renameGitignore, discoverEnclosingRepo as _discoverEnclosingRepo, rewriteNetlifyToml as _rewriteNetlifyToml, getCoreDependencyVersion as _getCoreDependencyVersion, getDispatchDependencyVersion as _getDispatchDependencyVersion, getOtelDependencyVersion as _getOtelDependencyVersion, getToolkitDependencyVersion as _getToolkitDependencyVersion, getAgentKitDependencyVersion as _getAgentKitDependencyVersion, prepareLocalWorkspaceOverrides as _prepareLocalWorkspaceOverrides, ensureLocalPackageBuildOutputs as _ensureLocalPackageBuildOutputs, getCorePackageVersion as _getCorePackageVersion, getGitHubTemplateRef as _getGitHubTemplateRef, getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates, githubTarballUrl as _githubTarballUrl, findLocalTemplateFrom as _findLocalTemplateFrom, workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection, startShapePromptOptions as _startShapePromptOptions, standaloneTemplatePromptOptions as _standaloneTemplatePromptOptions, parseCommunityTemplateSelection as _parseCommunityTemplateSelection, communityTemplateTrustMessage as _communityTemplateTrustMessage, communityTemplateTarballUrl as _communityTemplateTarballUrl, assertCommunityTemplateRoot as _assertCommunityTemplateRoot, assertSafeCommunityArchiveListing as _assertSafeCommunityArchiveListing, validateCommunityArchive as _validateCommunityArchive, resolveCommunityTemplateSource as _resolveCommunityTemplateSource, discoverCommunityWorkspaceApps as _discoverCommunityWorkspaceApps, normalizeCommunityWorkspaceAppDependencies as _normalizeCommunityWorkspaceAppDependencies, shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry, removeWorkspaceOnlyTemplateWiring as _removeWorkspaceOnlyTemplateWiring, tarExtractArgs as _tarExtractArgs, extractTarball as _extractTarball, materializeArchiveSymlinks as _materializeArchiveSymlinks, downloadGitHubSubdir as _downloadGitHubSubdir, findLocalTemplate as _findLocalTemplate, templateSourceName as _templateSourceName, normalizeTemplateName as _normalizeTemplateName, appTitleForScaffold as _appTitleForScaffold, replacePlaceholders as _replacePlaceholders, rewriteTrackingAppId as _rewriteTrackingAppId, rewriteAgentChatAppId as _rewriteAgentChatAppId, applyScaffoldIdentity as _applyScaffoldIdentity, ensureScaffoldEmailBrandingConfig as _ensureScaffoldEmailBrandingConfig, fixWebManifestName as _fixWebManifestName, copyDir as _copyDir, localTemplateSourceKind as _localTemplateSourceKind, REPO as _REPO, TEMPLATES_DIR as _TEMPLATES_DIR, };
|
|
106
106
|
declare function tarExtractArgs(tarPath: string, destDir: string, options?: {
|
|
107
107
|
skipAgentSymlinks?: boolean;
|
|
108
108
|
untrustedCommunityArchive?: boolean;
|
|
@@ -157,6 +157,7 @@ declare function ensureScaffoldEmailBrandingConfig(appDir: string, appName: stri
|
|
|
157
157
|
declare function fixWebManifestName(appDir: string, name: string, templateName?: string, sourceIdentity?: ScaffoldSourceIdentity): void;
|
|
158
158
|
declare function getCoreDependencyVersion(): string;
|
|
159
159
|
declare function getDispatchDependencyVersion(): string;
|
|
160
|
+
declare function getOtelDependencyVersion(): string;
|
|
160
161
|
declare function getToolkitDependencyVersion(): string;
|
|
161
162
|
declare function getAgentKitDependencyVersion(): string;
|
|
162
163
|
interface PreparedWorkspaceOverrides {
|
package/dist/cli/create.js
CHANGED
|
@@ -92,9 +92,7 @@ const FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES = [
|
|
|
92
92
|
// the files that import them. A scaffold cannot install these (a standalone app
|
|
93
93
|
// resolves them from npm, a new workspace has no such package), so it drops the
|
|
94
94
|
// dependency and those files. Publishing a package removes its entry here.
|
|
95
|
-
const WORKSPACE_ONLY_TEMPLATE_WIRING = {
|
|
96
|
-
"@agent-native/otel": ["server/plugins/otel.ts"],
|
|
97
|
-
};
|
|
95
|
+
const WORKSPACE_ONLY_TEMPLATE_WIRING = {};
|
|
98
96
|
const TAR_LISTING_MAX_BUFFER = 100 * 1024 * 1024;
|
|
99
97
|
const localPackageTarballs = new Map();
|
|
100
98
|
const IN_PLACE_ALLOWLIST = new Set([
|
|
@@ -557,6 +555,7 @@ async function createWorkspaceInteractive(name, opts, clack) {
|
|
|
557
555
|
dispatchDependencyVersion: getDispatchDependencyVersion(),
|
|
558
556
|
toolkitDependencyVersion: getToolkitDependencyVersion(),
|
|
559
557
|
agentKitDependencyVersion: getAgentKitDependencyVersion(),
|
|
558
|
+
otelDependencyVersion: getOtelDependencyVersion(),
|
|
560
559
|
});
|
|
561
560
|
fixPackageJsonName(appDir, appName, templateName, {
|
|
562
561
|
...resolution,
|
|
@@ -800,6 +799,7 @@ async function scaffoldOneAppIntoWorkspace(workspace, appName, templateName, cla
|
|
|
800
799
|
dispatchDependencyVersion: getDispatchDependencyVersion(),
|
|
801
800
|
toolkitDependencyVersion: getToolkitDependencyVersion(),
|
|
802
801
|
agentKitDependencyVersion: getAgentKitDependencyVersion(),
|
|
802
|
+
otelDependencyVersion: getOtelDependencyVersion(),
|
|
803
803
|
});
|
|
804
804
|
fixPackageJsonName(appDir, appName, templateName, {
|
|
805
805
|
...resolution,
|
|
@@ -1655,6 +1655,9 @@ function postProcessStandalone(name, targetDir, templateName, resolution) {
|
|
|
1655
1655
|
else if (key === "@agent-native/agentkit") {
|
|
1656
1656
|
deps[key] = getAgentKitDependencyVersion();
|
|
1657
1657
|
}
|
|
1658
|
+
else if (key === "@agent-native/otel") {
|
|
1659
|
+
deps[key] = getOtelDependencyVersion();
|
|
1660
|
+
}
|
|
1658
1661
|
else if (typeof val === "string" && val.startsWith("workspace:")) {
|
|
1659
1662
|
deps[key] = "latest";
|
|
1660
1663
|
}
|
|
@@ -1895,7 +1898,7 @@ export function detectWorkspace(startDir) {
|
|
|
1895
1898
|
}
|
|
1896
1899
|
export { parseWorkspaceScope };
|
|
1897
1900
|
/** @internal — exported for E2E tests */
|
|
1898
|
-
export { mergeWorkspaceYamlSections as _mergeWorkspaceYamlSections, scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot, mergeWorkspaceYamlListItems as _mergeWorkspaceYamlListItems, scaffoldOneAppIntoWorkspace as _scaffoldOneAppIntoWorkspace, CreateWizardCancelledError as _CreateWizardCancelledError, ensureGuardedScaffold as _ensureGuardedScaffold, scaffoldAppTemplate as _scaffoldAppTemplate, scaffoldRequiredPackages as _scaffoldRequiredPackages, postProcessStandalone as _postProcessStandalone, loadCatalog as _loadCatalog, fixPackageJsonName as _fixPackageJsonName, renameGitignore as _renameGitignore, discoverEnclosingRepo as _discoverEnclosingRepo, rewriteNetlifyToml as _rewriteNetlifyToml, getCoreDependencyVersion as _getCoreDependencyVersion, getDispatchDependencyVersion as _getDispatchDependencyVersion, getToolkitDependencyVersion as _getToolkitDependencyVersion, getAgentKitDependencyVersion as _getAgentKitDependencyVersion, prepareLocalWorkspaceOverrides as _prepareLocalWorkspaceOverrides, ensureLocalPackageBuildOutputs as _ensureLocalPackageBuildOutputs, getCorePackageVersion as _getCorePackageVersion, getGitHubTemplateRef as _getGitHubTemplateRef, getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates, githubTarballUrl as _githubTarballUrl, findLocalTemplateFrom as _findLocalTemplateFrom, workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection, startShapePromptOptions as _startShapePromptOptions, standaloneTemplatePromptOptions as _standaloneTemplatePromptOptions, parseCommunityTemplateSelection as _parseCommunityTemplateSelection, communityTemplateTrustMessage as _communityTemplateTrustMessage, communityTemplateTarballUrl as _communityTemplateTarballUrl, assertCommunityTemplateRoot as _assertCommunityTemplateRoot, assertSafeCommunityArchiveListing as _assertSafeCommunityArchiveListing, validateCommunityArchive as _validateCommunityArchive, resolveCommunityTemplateSource as _resolveCommunityTemplateSource, discoverCommunityWorkspaceApps as _discoverCommunityWorkspaceApps, normalizeCommunityWorkspaceAppDependencies as _normalizeCommunityWorkspaceAppDependencies, shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry, removeWorkspaceOnlyTemplateWiring as _removeWorkspaceOnlyTemplateWiring, tarExtractArgs as _tarExtractArgs, extractTarball as _extractTarball, materializeArchiveSymlinks as _materializeArchiveSymlinks, downloadGitHubSubdir as _downloadGitHubSubdir, findLocalTemplate as _findLocalTemplate, templateSourceName as _templateSourceName, normalizeTemplateName as _normalizeTemplateName, appTitleForScaffold as _appTitleForScaffold, replacePlaceholders as _replacePlaceholders, rewriteTrackingAppId as _rewriteTrackingAppId, rewriteAgentChatAppId as _rewriteAgentChatAppId, applyScaffoldIdentity as _applyScaffoldIdentity, ensureScaffoldEmailBrandingConfig as _ensureScaffoldEmailBrandingConfig, fixWebManifestName as _fixWebManifestName, copyDir as _copyDir, localTemplateSourceKind as _localTemplateSourceKind, REPO as _REPO, TEMPLATES_DIR as _TEMPLATES_DIR, };
|
|
1901
|
+
export { mergeWorkspaceYamlSections as _mergeWorkspaceYamlSections, scaffoldWorkspaceRoot as _scaffoldWorkspaceRoot, mergeWorkspaceYamlListItems as _mergeWorkspaceYamlListItems, scaffoldOneAppIntoWorkspace as _scaffoldOneAppIntoWorkspace, CreateWizardCancelledError as _CreateWizardCancelledError, ensureGuardedScaffold as _ensureGuardedScaffold, scaffoldAppTemplate as _scaffoldAppTemplate, scaffoldRequiredPackages as _scaffoldRequiredPackages, postProcessStandalone as _postProcessStandalone, loadCatalog as _loadCatalog, fixPackageJsonName as _fixPackageJsonName, renameGitignore as _renameGitignore, discoverEnclosingRepo as _discoverEnclosingRepo, rewriteNetlifyToml as _rewriteNetlifyToml, getCoreDependencyVersion as _getCoreDependencyVersion, getDispatchDependencyVersion as _getDispatchDependencyVersion, getOtelDependencyVersion as _getOtelDependencyVersion, getToolkitDependencyVersion as _getToolkitDependencyVersion, getAgentKitDependencyVersion as _getAgentKitDependencyVersion, prepareLocalWorkspaceOverrides as _prepareLocalWorkspaceOverrides, ensureLocalPackageBuildOutputs as _ensureLocalPackageBuildOutputs, getCorePackageVersion as _getCorePackageVersion, getGitHubTemplateRef as _getGitHubTemplateRef, getGitHubTemplateRefCandidates as _getGitHubTemplateRefCandidates, githubTarballUrl as _githubTarballUrl, findLocalTemplateFrom as _findLocalTemplateFrom, workspaceAppNameForTemplateSelection as _workspaceAppNameForTemplateSelection, startShapePromptOptions as _startShapePromptOptions, standaloneTemplatePromptOptions as _standaloneTemplatePromptOptions, parseCommunityTemplateSelection as _parseCommunityTemplateSelection, communityTemplateTrustMessage as _communityTemplateTrustMessage, communityTemplateTarballUrl as _communityTemplateTarballUrl, assertCommunityTemplateRoot as _assertCommunityTemplateRoot, assertSafeCommunityArchiveListing as _assertSafeCommunityArchiveListing, validateCommunityArchive as _validateCommunityArchive, resolveCommunityTemplateSource as _resolveCommunityTemplateSource, discoverCommunityWorkspaceApps as _discoverCommunityWorkspaceApps, normalizeCommunityWorkspaceAppDependencies as _normalizeCommunityWorkspaceAppDependencies, shouldSkipScaffoldEntry as _shouldSkipScaffoldEntry, removeWorkspaceOnlyTemplateWiring as _removeWorkspaceOnlyTemplateWiring, tarExtractArgs as _tarExtractArgs, extractTarball as _extractTarball, materializeArchiveSymlinks as _materializeArchiveSymlinks, downloadGitHubSubdir as _downloadGitHubSubdir, findLocalTemplate as _findLocalTemplate, templateSourceName as _templateSourceName, normalizeTemplateName as _normalizeTemplateName, appTitleForScaffold as _appTitleForScaffold, replacePlaceholders as _replacePlaceholders, rewriteTrackingAppId as _rewriteTrackingAppId, rewriteAgentChatAppId as _rewriteAgentChatAppId, applyScaffoldIdentity as _applyScaffoldIdentity, ensureScaffoldEmailBrandingConfig as _ensureScaffoldEmailBrandingConfig, fixWebManifestName as _fixWebManifestName, copyDir as _copyDir, localTemplateSourceKind as _localTemplateSourceKind, REPO as _REPO, TEMPLATES_DIR as _TEMPLATES_DIR, };
|
|
1899
1902
|
function validateRepoName(repo) {
|
|
1900
1903
|
const parts = repo.split("/");
|
|
1901
1904
|
if (!/^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/.test(repo) ||
|
|
@@ -2994,6 +2997,16 @@ function getDispatchDependencyVersion() {
|
|
|
2994
2997
|
}
|
|
2995
2998
|
return "latest";
|
|
2996
2999
|
}
|
|
3000
|
+
// OTel is versioned independently of Core (it peer-depends on Core's public
|
|
3001
|
+
// observability provider API), so a scaffold takes its current npm release.
|
|
3002
|
+
function getOtelDependencyVersion() {
|
|
3003
|
+
if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === "1") {
|
|
3004
|
+
const localOtel = findLocalPackage("otel");
|
|
3005
|
+
if (localOtel)
|
|
3006
|
+
return localPackageTarball(localOtel);
|
|
3007
|
+
}
|
|
3008
|
+
return "latest";
|
|
3009
|
+
}
|
|
2997
3010
|
function getToolkitDependencyVersion() {
|
|
2998
3011
|
if (process.env.AGENT_NATIVE_CREATE_USE_LOCAL_CORE === "1") {
|
|
2999
3012
|
const localToolkit = findLocalPackage("toolkit");
|
|
@@ -2,7 +2,7 @@ import { spawnSync } from "node:child_process";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import { detectWorkspace, _REPO, _TEMPLATES_DIR, _appTitleForScaffold, _copyDir, _downloadGitHubSubdir, _findLocalTemplate, _fixPackageJsonName, _fixWebManifestName, _getCoreDependencyVersion, _getCorePackageVersion, _getDispatchDependencyVersion, _getGitHubTemplateRefCandidates, _getToolkitDependencyVersion, _localTemplateSourceKind, _normalizeTemplateName, _postProcessStandalone, _removeWorkspaceOnlyTemplateWiring, _renameGitignore, _replacePlaceholders, _rewriteNetlifyToml, _rewriteTrackingAppId, _shouldSkipScaffoldEntry, _templateSourceName, } from "./create.js";
|
|
5
|
+
import { detectWorkspace, _REPO, _TEMPLATES_DIR, _appTitleForScaffold, _copyDir, _downloadGitHubSubdir, _findLocalTemplate, _fixPackageJsonName, _fixWebManifestName, _getCoreDependencyVersion, _getCorePackageVersion, _getDispatchDependencyVersion, _getGitHubTemplateRefCandidates, _getOtelDependencyVersion, _getToolkitDependencyVersion, _localTemplateSourceKind, _normalizeTemplateName, _postProcessStandalone, _removeWorkspaceOnlyTemplateWiring, _renameGitignore, _replacePlaceholders, _rewriteNetlifyToml, _rewriteTrackingAppId, _shouldSkipScaffoldEntry, _templateSourceName, } from "./create.js";
|
|
6
6
|
import { appDirtyPaths, baselineDescription, baselineExists, clearBaseline, materializeBaseline, promoteBaseline, resolveBaselineStore, writeBaseline, } from "./template-baseline.js";
|
|
7
7
|
import { workspacifyApp } from "./workspacify.js";
|
|
8
8
|
const defaultIO = {
|
|
@@ -56,6 +56,7 @@ export async function materializeTemplate(opts) {
|
|
|
56
56
|
coreDependencyVersion: _getCoreDependencyVersion(),
|
|
57
57
|
dispatchDependencyVersion: _getDispatchDependencyVersion(),
|
|
58
58
|
toolkitDependencyVersion: _getToolkitDependencyVersion(),
|
|
59
|
+
otelDependencyVersion: _getOtelDependencyVersion(),
|
|
59
60
|
});
|
|
60
61
|
_fixPackageJsonName(dest, opts.appName, opts.template, {
|
|
61
62
|
...provenance,
|
|
@@ -8,6 +8,7 @@ export interface WorkspacifyOptions {
|
|
|
8
8
|
dispatchDependencyVersion?: string;
|
|
9
9
|
toolkitDependencyVersion?: string;
|
|
10
10
|
agentKitDependencyVersion?: string;
|
|
11
|
+
otelDependencyVersion?: string;
|
|
11
12
|
}
|
|
12
13
|
export declare function ensureNodePtyBuildDependency(workspaceRoot: string): void;
|
|
13
14
|
export declare function workspacifyApp(opts: WorkspacifyOptions): void;
|
package/dist/cli/workspacify.js
CHANGED
|
@@ -55,6 +55,7 @@ export function workspacifyApp(opts) {
|
|
|
55
55
|
const dispatchDependencyVersion = pinnedByWorkspace("@agent-native/dispatch", opts.dispatchDependencyVersion);
|
|
56
56
|
const toolkitDependencyVersion = pinnedByWorkspace("@agent-native/toolkit", opts.toolkitDependencyVersion);
|
|
57
57
|
const agentKitDependencyVersion = pinnedByWorkspace("@agent-native/agentkit", opts.agentKitDependencyVersion);
|
|
58
|
+
const otelDependencyVersion = pinnedByWorkspace("@agent-native/otel", opts.otelDependencyVersion);
|
|
58
59
|
const pkgPath = path.join(appDir, "package.json");
|
|
59
60
|
let hasNodePty = false;
|
|
60
61
|
if (fs.existsSync(pkgPath)) {
|
|
@@ -82,6 +83,9 @@ export function workspacifyApp(opts) {
|
|
|
82
83
|
if (key === "@agent-native/agentkit") {
|
|
83
84
|
deps[key] = agentKitDependencyVersion;
|
|
84
85
|
}
|
|
86
|
+
if (key === "@agent-native/otel") {
|
|
87
|
+
deps[key] = otelDependencyVersion;
|
|
88
|
+
}
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
}
|
|
@@ -3,3 +3,22 @@ export function injectedAgentNativeConfig() {
|
|
|
3
3
|
? {}
|
|
4
4
|
: __AGENT_NATIVE_APP_CONFIG__;
|
|
5
5
|
}
|
|
6
|
+
export function injectedAgentNativeAppId() {
|
|
7
|
+
const browserConfig = typeof window !== "undefined"
|
|
8
|
+
? window.__AGENT_NATIVE_CONFIG__
|
|
9
|
+
: undefined;
|
|
10
|
+
const workspaceAppId = typeof __AGENT_NATIVE_WORKSPACE_APP_ID__ === "string" &&
|
|
11
|
+
__AGENT_NATIVE_WORKSPACE_APP_ID__.trim()
|
|
12
|
+
? __AGENT_NATIVE_WORKSPACE_APP_ID__
|
|
13
|
+
: browserConfig?.workspaceAppId;
|
|
14
|
+
const appId = browserConfig?.appId;
|
|
15
|
+
const compiledAppId = typeof __AGENT_NATIVE_APP_ID__ === "string"
|
|
16
|
+
? __AGENT_NATIVE_APP_ID__
|
|
17
|
+
: undefined;
|
|
18
|
+
for (const value of [workspaceAppId, appId, compiledAppId]) {
|
|
19
|
+
if (typeof value === "string" && value.trim()) {
|
|
20
|
+
return value.trim().toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|