@agent-native/core 0.146.3 → 0.146.4
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/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +13 -10
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/analytics/actions/compose-dashboard.ts +53 -6
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +8 -2
- package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +3 -1
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +48 -9
- package/corpus/templates/analytics/actions/update-dashboard.ts +80 -6
- package/corpus/templates/analytics/changelog/2026-08-07-dashboard-creation-and-edits-now-save-faster-with-reliable-s.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +19 -19
- package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +21 -2
- package/corpus/templates/analytics/server/lib/bigquery.ts +59 -24
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +44 -8
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +3 -5
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +33 -69
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +90 -24
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +1 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +17 -2
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +2 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/assets/netlify.toml +1 -1
- package/corpus/templates/assets/package.json +1 -0
- package/corpus/templates/assets/scripts/migrate-production.ts +24 -0
- package/corpus/templates/assets/server/plugins/db.ts +1 -1
- package/corpus/templates/assets/tsconfig.json +1 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/brain/netlify.toml +1 -1
- package/corpus/templates/brain/package.json +2 -0
- package/corpus/templates/brain/scripts/migrate-production.ts +24 -0
- package/corpus/templates/brain/server/plugins/db.ts +1 -1
- package/corpus/templates/brain/tsconfig.json +1 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/calendar/netlify.toml +1 -1
- package/corpus/templates/calendar/package.json +1 -0
- package/corpus/templates/calendar/scripts/migrate-production.ts +24 -0
- package/corpus/templates/calendar/server/plugins/db.ts +1 -1
- package/corpus/templates/calendar/tsconfig.json +1 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/chat/netlify.toml +1 -1
- package/corpus/templates/chat/package.json +1 -0
- package/corpus/templates/chat/scripts/migrate-production.ts +31 -0
- package/corpus/templates/chat/tsconfig.json +1 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/clips/netlify.toml +1 -1
- package/corpus/templates/clips/package.json +1 -0
- package/corpus/templates/clips/scripts/migrate-production.ts +24 -0
- package/corpus/templates/clips/server/plugins/db.ts +1 -1
- package/corpus/templates/clips/tsconfig.json +1 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/content/netlify.toml +1 -1
- package/corpus/templates/content/package.json +2 -0
- package/corpus/templates/content/scripts/migrate-production.ts +28 -0
- package/corpus/templates/content/server/plugins/db.ts +2 -2
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/crm/netlify.toml +1 -1
- package/corpus/templates/crm/package.json +2 -0
- package/corpus/templates/crm/scripts/migrate-production.ts +24 -0
- package/corpus/templates/crm/server/plugins/db.ts +1 -1
- package/corpus/templates/crm/tsconfig.json +1 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/design/netlify.toml +1 -1
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/scripts/migrate-production.ts +24 -0
- package/corpus/templates/design/server/plugins/db.ts +1 -1
- package/corpus/templates/design/tsconfig.json +1 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/dispatch/netlify.toml +1 -1
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/dispatch/scripts/migrate-production.ts +23 -0
- package/corpus/templates/dispatch/tsconfig.json +1 -0
- package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/factory/netlify.toml +1 -1
- package/corpus/templates/factory/package.json +1 -0
- package/corpus/templates/factory/scripts/migrate-production.ts +31 -0
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +2 -0
- package/corpus/templates/factory/tsconfig.json +1 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/forms/netlify.toml +1 -1
- package/corpus/templates/forms/package.json +2 -0
- package/corpus/templates/forms/scripts/migrate-production.ts +24 -0
- package/corpus/templates/forms/server/plugins/db.ts +1 -1
- package/corpus/templates/forms/tsconfig.json +1 -0
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/macros/netlify.toml +1 -1
- package/corpus/templates/macros/package.json +1 -0
- package/corpus/templates/macros/scripts/migrate-production.ts +24 -0
- package/corpus/templates/macros/server/plugins/db.ts +1 -1
- package/corpus/templates/macros/tsconfig.json +1 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/mail/netlify.toml +1 -1
- package/corpus/templates/mail/package.json +1 -0
- package/corpus/templates/mail/scripts/migrate-production.ts +24 -0
- package/corpus/templates/mail/server/plugins/db.ts +1 -1
- package/corpus/templates/mail/tsconfig.json +1 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/plan/netlify.toml +1 -1
- package/corpus/templates/plan/package.json +1 -0
- package/corpus/templates/plan/scripts/migrate-production.ts +24 -0
- package/corpus/templates/plan/server/plugins/00-mcp.ts +3 -2
- package/corpus/templates/plan/server/plugins/db.ts +1 -1
- package/corpus/templates/plan/tsconfig.json +1 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/slides/netlify.toml +1 -1
- package/corpus/templates/slides/package.json +1 -0
- package/corpus/templates/slides/scripts/migrate-production.ts +24 -0
- package/corpus/templates/slides/server/plugins/db.ts +1 -1
- package/corpus/templates/slides/tsconfig.json +1 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/corpus/templates/tasks/netlify.toml +1 -1
- package/corpus/templates/tasks/package.json +1 -0
- package/corpus/templates/tasks/scripts/migrate-production.ts +24 -0
- package/corpus/templates/tasks/server/plugins/db.ts +1 -1
- package/corpus/templates/tasks/tsconfig.json +1 -0
- package/dist/action.d.ts +2 -0
- package/dist/agent/production-agent.d.ts +1 -0
- package/dist/agent/production-agent.js +2 -0
- package/dist/agent/thread-data-builder.d.ts +4 -0
- package/dist/agent/thread-data-builder.js +44 -0
- package/dist/automations/service.d.ts +1 -0
- package/dist/automations/service.js +21 -2
- package/dist/cli/create.js +20 -2
- package/dist/client/agent-page/AgentJobsTab.js +3 -1
- package/dist/client/agent-page/AutomationDetailsDialog.js +9 -2
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/migrations.js +7 -13
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/jobs/actions/list-automation-runs.d.ts +1 -0
- package/dist/jobs/actions/list-automation-runs.js +9 -2
- package/dist/jobs/actions/list-recurring-jobs.js +3 -1
- package/dist/jobs/actions/manage-recurring-job.js +1 -1
- package/dist/jobs/actions/run-automation-now.js +1 -0
- package/dist/jobs/background-automation-runner.js +2 -0
- package/dist/jobs/frontmatter.d.ts +2 -0
- package/dist/jobs/frontmatter.js +4 -0
- package/dist/jobs/run-history.d.ts +4 -0
- package/dist/jobs/run-history.js +28 -8
- package/dist/jobs/run-now.d.ts +4 -1
- package/dist/jobs/run-now.js +4 -3
- package/dist/jobs/scheduler.js +18 -0
- package/dist/jobs/tools.d.ts +3 -2
- package/dist/jobs/tools.js +26 -12
- package/dist/localization/default-messages.d.ts +1 -0
- package/dist/localization/default-messages.js +1 -0
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/server/action-routes.d.ts +2 -0
- package/dist/server/action-routes.js +1 -0
- package/dist/server/agent-chat-plugin.js +3 -2
- package/dist/server/builder-browser.js +24 -8
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/dist/templates/chat/netlify.toml +1 -1
- package/dist/templates/chat/package.json +1 -0
- package/dist/templates/chat/scripts/migrate-production.ts +31 -0
- package/dist/templates/chat/tsconfig.json +1 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/default/scripts/migrate-production.ts +31 -0
- package/dist/templates/default/tsconfig.json +1 -0
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/dist/templates/workspace-root/AGENTS.md +2 -1
- package/dist/triggers/actions/list-automations.js +1 -1
- package/dist/triggers/actions/manage-automation.js +5 -1
- package/dist/triggers/actions.d.ts +1 -1
- package/dist/triggers/actions.js +21 -15
- package/dist/triggers/dispatcher.js +17 -2
- package/dist/triggers/routes.d.ts +1 -0
- package/dist/triggers/routes.js +1 -0
- package/package.json +1 -1
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/src/templates/chat/netlify.toml +1 -1
- package/src/templates/chat/package.json +1 -0
- package/src/templates/chat/scripts/migrate-production.ts +31 -0
- package/src/templates/chat/tsconfig.json +1 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/src/templates/default/package.json +1 -0
- package/src/templates/default/scripts/migrate-production.ts +31 -0
- package/src/templates/default/tsconfig.json +1 -0
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +5 -2
- package/src/templates/workspace-root/AGENTS.md +2 -1
package/dist/jobs/tools.js
CHANGED
|
@@ -14,6 +14,12 @@ function getOwner() {
|
|
|
14
14
|
function getSharedOwner() {
|
|
15
15
|
return sharedResourceOwner(getRequestOrgId());
|
|
16
16
|
}
|
|
17
|
+
export function jobBelongsToApp(meta, appId) {
|
|
18
|
+
const ownerAppId = meta.appId?.trim();
|
|
19
|
+
if (!ownerAppId)
|
|
20
|
+
return true;
|
|
21
|
+
return ownerAppId === appId?.trim();
|
|
22
|
+
}
|
|
17
23
|
/**
|
|
18
24
|
* Determine if the current request's user is an org owner/admin in the
|
|
19
25
|
* given org. Used to allow privileged users to update or delete shared
|
|
@@ -52,7 +58,10 @@ async function isCurrentUserOrgAdmin(orgId) {
|
|
|
52
58
|
* Returns null when the mutation is allowed, or an error string suitable
|
|
53
59
|
* for returning to the caller when not.
|
|
54
60
|
*/
|
|
55
|
-
export async function authorizeJobMutation(resourceOwner, meta) {
|
|
61
|
+
export async function authorizeJobMutation(resourceOwner, meta, appId) {
|
|
62
|
+
if (!jobBelongsToApp(meta, appId)) {
|
|
63
|
+
return "This job belongs to another app and cannot be changed here.";
|
|
64
|
+
}
|
|
56
65
|
const resourceOrgId = organizationIdFromResourceOwner(resourceOwner);
|
|
57
66
|
if (resourceOwner !== SHARED_OWNER && !resourceOrgId) {
|
|
58
67
|
// Personal-scope job — owner is the request's user. resourceGetByPath is
|
|
@@ -69,7 +78,7 @@ export async function authorizeJobMutation(resourceOwner, meta) {
|
|
|
69
78
|
return null;
|
|
70
79
|
return "Only the job's creator (or an org admin) can update or delete it.";
|
|
71
80
|
}
|
|
72
|
-
async function runCreate(args) {
|
|
81
|
+
async function runCreate(args, appId) {
|
|
73
82
|
const { name, schedule, instructions, scope, runAs, model } = args;
|
|
74
83
|
const requestedTimezone = args.timezone;
|
|
75
84
|
if (!name || !schedule || !instructions) {
|
|
@@ -111,6 +120,7 @@ async function runCreate(args) {
|
|
|
111
120
|
enabled: true,
|
|
112
121
|
createdBy: getOwner(),
|
|
113
122
|
orgId: getRequestOrgId() || undefined,
|
|
123
|
+
appId: appId?.trim() || undefined,
|
|
114
124
|
runAs: runAs === "shared" ? "shared" : "creator",
|
|
115
125
|
nextRun: next.toISOString(),
|
|
116
126
|
...(integration?.scopeId ? { originScopeId: integration.scopeId } : {}),
|
|
@@ -143,7 +153,7 @@ async function runCreate(args) {
|
|
|
143
153
|
...(mcpTools?.length ? { mcpTools } : {}),
|
|
144
154
|
});
|
|
145
155
|
}
|
|
146
|
-
async function runList(args) {
|
|
156
|
+
async function runList(args, appId) {
|
|
147
157
|
const owner = getOwner();
|
|
148
158
|
const sharedOwner = getSharedOwner();
|
|
149
159
|
// Fetch only current user's and shared jobs (not other users')
|
|
@@ -164,6 +174,8 @@ async function runList(args) {
|
|
|
164
174
|
if (classifyJobResource(full.content).kind === "automation")
|
|
165
175
|
return null;
|
|
166
176
|
const { meta } = parseJobFrontmatter(full.content);
|
|
177
|
+
if (!jobBelongsToApp(meta, appId))
|
|
178
|
+
return null;
|
|
167
179
|
return {
|
|
168
180
|
name: r.path.replace(/^jobs\//, "").replace(/\.md$/, ""),
|
|
169
181
|
path: r.path,
|
|
@@ -191,7 +203,7 @@ async function runList(args) {
|
|
|
191
203
|
}
|
|
192
204
|
return JSON.stringify(scheduledJobs, null, 2);
|
|
193
205
|
}
|
|
194
|
-
async function runUpdate(args) {
|
|
206
|
+
async function runUpdate(args, appId) {
|
|
195
207
|
const { name, schedule, instructions, enabled, scope, runAs, model } = args;
|
|
196
208
|
const path = `jobs/${name}.md`;
|
|
197
209
|
// Try to find the resource
|
|
@@ -213,10 +225,12 @@ async function runUpdate(args) {
|
|
|
213
225
|
// `createdBy` is alice@…, and the next cron tick would run the
|
|
214
226
|
// attacker's instructions as alice (creator-runAs schedules in
|
|
215
227
|
// jobs/scheduler.ts line 273-278).
|
|
216
|
-
const denied = await authorizeJobMutation(resource.owner, meta);
|
|
228
|
+
const denied = await authorizeJobMutation(resource.owner, meta, appId);
|
|
217
229
|
if (denied) {
|
|
218
230
|
return JSON.stringify({ error: denied });
|
|
219
231
|
}
|
|
232
|
+
if (!meta.appId && appId?.trim())
|
|
233
|
+
meta.appId = appId.trim();
|
|
220
234
|
if (schedule) {
|
|
221
235
|
if (!isValidCron(schedule)) {
|
|
222
236
|
return JSON.stringify({
|
|
@@ -273,7 +287,7 @@ async function runUpdate(args) {
|
|
|
273
287
|
mcpTools: meta.mcpTools || [],
|
|
274
288
|
});
|
|
275
289
|
}
|
|
276
|
-
async function runDelete(args) {
|
|
290
|
+
async function runDelete(args, appId) {
|
|
277
291
|
const { name, scope } = args;
|
|
278
292
|
const path = `jobs/${name}.md`;
|
|
279
293
|
let resource = await resourceGetByPath(getSharedOwner(), path);
|
|
@@ -292,14 +306,14 @@ async function runDelete(args) {
|
|
|
292
306
|
error: `"${name}" is an automation. Use manage-automations to delete it.`,
|
|
293
307
|
});
|
|
294
308
|
}
|
|
295
|
-
const denied = await authorizeJobMutation(resource.owner, meta);
|
|
309
|
+
const denied = await authorizeJobMutation(resource.owner, meta, appId);
|
|
296
310
|
if (denied) {
|
|
297
311
|
return JSON.stringify({ error: denied });
|
|
298
312
|
}
|
|
299
313
|
await resourceDelete(resource.id);
|
|
300
314
|
return JSON.stringify({ deleted: true, name });
|
|
301
315
|
}
|
|
302
|
-
export function createJobTools() {
|
|
316
|
+
export function createJobTools(appId) {
|
|
303
317
|
return {
|
|
304
318
|
"manage-jobs": {
|
|
305
319
|
tool: {
|
|
@@ -374,13 +388,13 @@ For jobs that use a connected MCP, pass the exact tool names in mcpTools. This b
|
|
|
374
388
|
run: async (args) => {
|
|
375
389
|
switch (args.action) {
|
|
376
390
|
case "create":
|
|
377
|
-
return runCreate(args);
|
|
391
|
+
return runCreate(args, appId);
|
|
378
392
|
case "list":
|
|
379
|
-
return runList(args);
|
|
393
|
+
return runList(args, appId);
|
|
380
394
|
case "update":
|
|
381
|
-
return runUpdate(args);
|
|
395
|
+
return runUpdate(args, appId);
|
|
382
396
|
case "delete":
|
|
383
|
-
return runDelete(args);
|
|
397
|
+
return runDelete(args, appId);
|
|
384
398
|
default:
|
|
385
399
|
return JSON.stringify({
|
|
386
400
|
error: `Unknown action "${args.action}". Use "create", "list", or "update".`,
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
export declare function createNotificationsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<"" | import("./types.js").Notification[] | {
|
|
14
14
|
count: number;
|
|
15
15
|
updated?: undefined;
|
|
16
|
-
error?: undefined;
|
|
17
16
|
ok?: undefined;
|
|
17
|
+
error?: undefined;
|
|
18
18
|
} | {
|
|
19
19
|
count?: undefined;
|
|
20
20
|
updated: number;
|
|
21
|
-
error?: undefined;
|
|
22
21
|
ok?: undefined;
|
|
22
|
+
error?: undefined;
|
|
23
23
|
} | {
|
|
24
24
|
count?: undefined;
|
|
25
25
|
updated?: undefined;
|
|
@@ -41,16 +41,16 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
|
|
|
41
41
|
thumbsUpRate: number;
|
|
42
42
|
avgEvalScore: number;
|
|
43
43
|
} | {
|
|
44
|
+
error?: undefined;
|
|
44
45
|
summary: import("./types.js").TraceSummary;
|
|
45
46
|
spans: import("./types.js").TraceSpan[];
|
|
46
47
|
id?: undefined;
|
|
47
|
-
error?: undefined;
|
|
48
48
|
ok?: undefined;
|
|
49
49
|
} | {
|
|
50
|
+
error?: undefined;
|
|
50
51
|
summary?: undefined;
|
|
51
52
|
spans?: undefined;
|
|
52
53
|
id: string;
|
|
53
|
-
error?: undefined;
|
|
54
54
|
ok?: undefined;
|
|
55
55
|
} | {
|
|
56
56
|
summary?: undefined;
|
|
@@ -59,9 +59,9 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
|
|
|
59
59
|
error: any;
|
|
60
60
|
ok?: undefined;
|
|
61
61
|
} | {
|
|
62
|
+
error?: undefined;
|
|
62
63
|
summary?: undefined;
|
|
63
64
|
spans?: undefined;
|
|
64
65
|
id?: undefined;
|
|
65
|
-
error?: undefined;
|
|
66
66
|
ok: boolean;
|
|
67
67
|
}>>;
|
|
@@ -48,8 +48,8 @@ export declare function handleUpdateResource(event: any): Promise<import("./stor
|
|
|
48
48
|
}>;
|
|
49
49
|
/** DELETE /_agent-native/resources/:id — delete a resource */
|
|
50
50
|
export declare function handleDeleteResource(event: any): Promise<{
|
|
51
|
-
error: string;
|
|
52
51
|
ok?: undefined;
|
|
52
|
+
error: string;
|
|
53
53
|
} | {
|
|
54
54
|
error?: undefined;
|
|
55
55
|
ok: boolean;
|
|
@@ -45,6 +45,8 @@ export interface ActionRouteAuthAdapter {
|
|
|
45
45
|
export interface MountActionRoutesOptions {
|
|
46
46
|
/** Resolve owner email from the H3 event (for data scoping). */
|
|
47
47
|
getOwnerFromEvent?: (event: any) => string | Promise<string>;
|
|
48
|
+
/** Hosting app/template id used for app-owned action resources. */
|
|
49
|
+
appId?: string;
|
|
48
50
|
/** Resolve display name from the H3 event, when available. */
|
|
49
51
|
getUserNameFromEvent?: (event: any) => string | undefined | Promise<string | undefined>;
|
|
50
52
|
/** Resolve org ID from the H3 event (for org scoping). */
|
|
@@ -673,7 +673,7 @@ export function createAgentChatPlugin(options) {
|
|
|
673
673
|
try {
|
|
674
674
|
if (automationGroupEnabled) {
|
|
675
675
|
const { createAutomationToolEntries } = await import("../triggers/actions.js");
|
|
676
|
-
automationTools = createAutomationToolEntries(() => requireCurrentRunOwner("manage automations"));
|
|
676
|
+
automationTools = createAutomationToolEntries(() => requireCurrentRunOwner("manage automations"), options?.appId);
|
|
677
677
|
}
|
|
678
678
|
}
|
|
679
679
|
catch { }
|
|
@@ -1914,6 +1914,7 @@ export function createAgentChatPlugin(options) {
|
|
|
1914
1914
|
mountActionRoutes(nitroApp, httpActions, {
|
|
1915
1915
|
getOwnerFromEvent,
|
|
1916
1916
|
getUserNameFromEvent,
|
|
1917
|
+
appId: options?.appId,
|
|
1917
1918
|
resolveOrgId: options?.resolveOrgId,
|
|
1918
1919
|
actionRouteAuth: options?.actionRouteAuth,
|
|
1919
1920
|
});
|
|
@@ -2243,7 +2244,7 @@ export function createAgentChatPlugin(options) {
|
|
|
2243
2244
|
try {
|
|
2244
2245
|
if (automationGroupEnabled) {
|
|
2245
2246
|
const { createJobTools } = await import("../jobs/tools.js");
|
|
2246
|
-
jobTools = createJobTools();
|
|
2247
|
+
jobTools = createJobTools(options?.appId);
|
|
2247
2248
|
}
|
|
2248
2249
|
}
|
|
2249
2250
|
catch { }
|
|
@@ -5,6 +5,7 @@ import { getAuthSecret, resolveSignupTrackingIdentity, } from "./better-auth-ins
|
|
|
5
5
|
import { getAppBasePath, getOrigin } from "./google-oauth.js";
|
|
6
6
|
const DEFAULT_BUILDER_APP_HOST = "https://builder.io";
|
|
7
7
|
const DEFAULT_BUILDER_API_HOST = "https://api.builder.io";
|
|
8
|
+
const BUILDER_API_REQUEST_TIMEOUT_MS = 30_000;
|
|
8
9
|
const BUILDER_BROWSER_HOST = "agent-native-browser";
|
|
9
10
|
const BUILDER_BROWSER_CLIENT_ID = "Agent Native Browser";
|
|
10
11
|
export const BUILDER_CALLBACK_PATH = "/_agent-native/builder/callback";
|
|
@@ -1359,6 +1360,21 @@ async function resolveBuilderApiCredentials() {
|
|
|
1359
1360
|
publicKey: creds.publicKey,
|
|
1360
1361
|
};
|
|
1361
1362
|
}
|
|
1363
|
+
async function fetchBuilderApi(input, init, operation) {
|
|
1364
|
+
try {
|
|
1365
|
+
return await fetch(input, {
|
|
1366
|
+
...init,
|
|
1367
|
+
signal: AbortSignal.timeout(BUILDER_API_REQUEST_TIMEOUT_MS),
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
catch (error) {
|
|
1371
|
+
const errorName = error instanceof Error ? error.name : "";
|
|
1372
|
+
if (errorName === "AbortError" || errorName === "TimeoutError") {
|
|
1373
|
+
throw new Error(`Builder ${operation} timed out after ${BUILDER_API_REQUEST_TIMEOUT_MS}ms`, { cause: error });
|
|
1374
|
+
}
|
|
1375
|
+
throw error;
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1362
1378
|
async function readBuilderApiObject(response, operation) {
|
|
1363
1379
|
let parsed;
|
|
1364
1380
|
try {
|
|
@@ -1400,10 +1416,10 @@ export async function findBuilderProjectForRepo(args) {
|
|
|
1400
1416
|
const url = new URL("/projects", getBuilderApiHost());
|
|
1401
1417
|
url.searchParams.set("apiKey", creds.publicKey);
|
|
1402
1418
|
url.searchParams.set("includeHidden", "true");
|
|
1403
|
-
const response = await
|
|
1419
|
+
const response = await fetchBuilderApi(url, {
|
|
1404
1420
|
method: "GET",
|
|
1405
1421
|
headers: { Authorization: `Bearer ${creds.privateKey}` },
|
|
1406
|
-
});
|
|
1422
|
+
}, "project lookup");
|
|
1407
1423
|
const parsed = await readBuilderApiObject(response, "project lookup");
|
|
1408
1424
|
if (!response.ok) {
|
|
1409
1425
|
throw new Error(builderApiErrorMessage(parsed, `Builder project lookup failed (${response.status})`));
|
|
@@ -1432,7 +1448,7 @@ export async function createBuilderProject(args) {
|
|
|
1432
1448
|
const creds = await resolveBuilderApiCredentials();
|
|
1433
1449
|
const url = new URL("/projects/create", getBuilderApiHost());
|
|
1434
1450
|
url.searchParams.set("apiKey", creds.publicKey);
|
|
1435
|
-
const response = await
|
|
1451
|
+
const response = await fetchBuilderApi(url, {
|
|
1436
1452
|
method: "POST",
|
|
1437
1453
|
headers: {
|
|
1438
1454
|
Authorization: `Bearer ${creds.privateKey}`,
|
|
@@ -1442,7 +1458,7 @@ export async function createBuilderProject(args) {
|
|
|
1442
1458
|
source: { kind: "repo", repoUrl },
|
|
1443
1459
|
name,
|
|
1444
1460
|
}),
|
|
1445
|
-
});
|
|
1461
|
+
}, "project creation");
|
|
1446
1462
|
const parsed = await readBuilderApiObject(response, "project creation");
|
|
1447
1463
|
if (!response.ok) {
|
|
1448
1464
|
throw new Error(builderApiErrorMessage(parsed, `Builder project creation failed (${response.status})`));
|
|
@@ -1526,14 +1542,14 @@ export async function runBuilderAgent(args) {
|
|
|
1526
1542
|
body.userEmail = actor.userEmail;
|
|
1527
1543
|
if (actor.userId)
|
|
1528
1544
|
body.userId = actor.userId;
|
|
1529
|
-
const response = await
|
|
1545
|
+
const response = await fetchBuilderApi(url, {
|
|
1530
1546
|
method: "POST",
|
|
1531
1547
|
headers: {
|
|
1532
1548
|
Authorization: `Bearer ${creds.privateKey}`,
|
|
1533
1549
|
"Content-Type": "application/json",
|
|
1534
1550
|
},
|
|
1535
1551
|
body: JSON.stringify(body),
|
|
1536
|
-
});
|
|
1552
|
+
}, "agent run");
|
|
1537
1553
|
const parsed = (await response.json().catch(() => ({})));
|
|
1538
1554
|
return { response, parsed };
|
|
1539
1555
|
};
|
|
@@ -1582,7 +1598,7 @@ export async function requestBuilderBrowserConnection(args) {
|
|
|
1582
1598
|
if (creds.userId) {
|
|
1583
1599
|
url.searchParams.set("userId", creds.userId);
|
|
1584
1600
|
}
|
|
1585
|
-
const response = await
|
|
1601
|
+
const response = await fetchBuilderApi(url, {
|
|
1586
1602
|
method: "POST",
|
|
1587
1603
|
headers: {
|
|
1588
1604
|
Authorization: `Bearer ${creds.privateKey}`,
|
|
@@ -1596,7 +1612,7 @@ export async function requestBuilderBrowserConnection(args) {
|
|
|
1596
1612
|
proxyDefaultOrigin: args.proxyDefaultOrigin || undefined,
|
|
1597
1613
|
proxyDst: args.proxyDestination || undefined,
|
|
1598
1614
|
}),
|
|
1599
|
-
});
|
|
1615
|
+
}, "browser connection request");
|
|
1600
1616
|
const body = (await response.json().catch(() => ({})));
|
|
1601
1617
|
if (!response.ok) {
|
|
1602
1618
|
const error = typeof body.error === "string"
|
|
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
|
|
|
36
36
|
- Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
|
|
37
37
|
- `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
|
|
38
38
|
target any `@agent-native/*` package
|
|
39
|
-
-
|
|
40
|
-
|
|
39
|
+
- `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
|
|
40
|
+
dependency
|
|
41
|
+
- Invented "dispatch/core behavior" shims meant to paper over a version skew
|
|
42
|
+
or failed upgrade
|
|
41
43
|
|
|
42
44
|
This does not prohibit intentional app-owned UI customization. When public
|
|
43
45
|
props and composition are insufficient, the `customizing-agent-native` skill
|
|
@@ -100,8 +102,10 @@ inline strings in components.
|
|
|
100
102
|
- Don't confuse readable package source with app-owned code: use
|
|
101
103
|
`customizing-agent-native` and `agent-native eject` for supported ownership
|
|
102
104
|
transfer
|
|
105
|
+
- Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
|
|
106
|
+
add `pnpm.patchedDependencies` to "make the app run" after a version bump
|
|
103
107
|
- Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
|
|
104
|
-
`@agent-native/*` to
|
|
108
|
+
`@agent-native/*` to paper over a broken upgrade
|
|
105
109
|
- Don't invent local dispatch/core behavior overrides when upgrade fails —
|
|
106
110
|
run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
|
|
107
111
|
- Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
|
|
@@ -15,8 +15,9 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
When an older Agent Native app/branch needs to run on current packages, use
|
|
17
17
|
`agent-native upgrade`. Never "fix" upgrade breakage with
|
|
18
|
-
`pnpm
|
|
19
|
-
|
|
18
|
+
`pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
|
|
19
|
+
`pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
|
|
20
|
+
or edits under `node_modules/@agent-native/*` — especially not against
|
|
20
21
|
`@agent-native/core` or `@agent-native/dispatch`.
|
|
21
22
|
|
|
22
23
|
## Why
|
|
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
109
110
|
|
|
110
111
|
- Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
|
|
111
112
|
`patchedDependencies` for any `@agent-native/*` package
|
|
113
|
+
- Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
|
|
114
|
+
`patches/`, for any dependency
|
|
112
115
|
- Don't edit `node_modules/@agent-native/core` or
|
|
113
116
|
`node_modules/@agent-native/dispatch`
|
|
114
117
|
- Don't invent local "dispatch behavior" shims to paper over version skew
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[build]
|
|
2
2
|
ignore = "node ./scripts/netlify-ignore-build.mjs chat"
|
|
3
|
-
command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter chat build"
|
|
3
|
+
command = "export DATABASE_URL=${NETLIFY_DATABASE_URL:-$DATABASE_URL} && pnpm install && NITRO_PRESET=netlify pnpm --filter chat build && if [ \"${CONTEXT:-}\" = \"production\" ]; then pnpm --filter chat migrate:production; fi"
|
|
4
4
|
publish = "templates/chat/dist"
|
|
5
5
|
functions = "templates/chat/.netlify/functions-internal"
|
|
6
6
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
|
|
2
|
+
import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Release-time schema entrypoint.
|
|
6
|
+
*
|
|
7
|
+
* Every deploy runs this once, and request functions never touch schema. That
|
|
8
|
+
* ordering is not an optimization: on serverless, "migrate on first use" means
|
|
9
|
+
* migrate on EVERY cold start, and a production incident traced a multi-hour
|
|
10
|
+
* outage to schema introspection running 4-6 times concurrently on the request
|
|
11
|
+
* path.
|
|
12
|
+
*
|
|
13
|
+
* `withMigrationRuntime()` is load-bearing. The Netlify BUILD environment sets
|
|
14
|
+
* NETLIFY=true, so this script looks like a serverless request to the guard in
|
|
15
|
+
* `runMigrations` — it is allowed to migrate only because it claims duty here.
|
|
16
|
+
* A release entrypoint that forgets the wrapper silently does nothing.
|
|
17
|
+
*
|
|
18
|
+
* If this app owns tables of its own, export its migration runner from
|
|
19
|
+
* `server/plugins/db.ts` and call it inside the same block.
|
|
20
|
+
*/
|
|
21
|
+
async function main(): Promise<void> {
|
|
22
|
+
await withMigrationRuntime(async () => {
|
|
23
|
+
await runFrameworkReleaseMigrations(null);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
await main();
|
|
29
|
+
} finally {
|
|
30
|
+
await closeDbExec();
|
|
31
|
+
}
|
|
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
|
|
|
36
36
|
- Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
|
|
37
37
|
- `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
|
|
38
38
|
target any `@agent-native/*` package
|
|
39
|
-
-
|
|
40
|
-
|
|
39
|
+
- `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
|
|
40
|
+
dependency
|
|
41
|
+
- Invented "dispatch/core behavior" shims meant to paper over a version skew
|
|
42
|
+
or failed upgrade
|
|
41
43
|
|
|
42
44
|
This does not prohibit intentional app-owned UI customization. When public
|
|
43
45
|
props and composition are insufficient, the `customizing-agent-native` skill
|
|
@@ -100,8 +102,10 @@ inline strings in components.
|
|
|
100
102
|
- Don't confuse readable package source with app-owned code: use
|
|
101
103
|
`customizing-agent-native` and `agent-native eject` for supported ownership
|
|
102
104
|
transfer
|
|
105
|
+
- Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
|
|
106
|
+
add `pnpm.patchedDependencies` to "make the app run" after a version bump
|
|
103
107
|
- Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
|
|
104
|
-
`@agent-native/*` to
|
|
108
|
+
`@agent-native/*` to paper over a broken upgrade
|
|
105
109
|
- Don't invent local dispatch/core behavior overrides when upgrade fails —
|
|
106
110
|
run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
|
|
107
111
|
- Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
|
|
@@ -15,8 +15,9 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
When an older Agent Native app/branch needs to run on current packages, use
|
|
17
17
|
`agent-native upgrade`. Never "fix" upgrade breakage with
|
|
18
|
-
`pnpm
|
|
19
|
-
|
|
18
|
+
`pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
|
|
19
|
+
`pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
|
|
20
|
+
or edits under `node_modules/@agent-native/*` — especially not against
|
|
20
21
|
`@agent-native/core` or `@agent-native/dispatch`.
|
|
21
22
|
|
|
22
23
|
## Why
|
|
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
109
110
|
|
|
110
111
|
- Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
|
|
111
112
|
`patchedDependencies` for any `@agent-native/*` package
|
|
113
|
+
- Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
|
|
114
|
+
`patches/`, for any dependency
|
|
112
115
|
- Don't edit `node_modules/@agent-native/core` or
|
|
113
116
|
`node_modules/@agent-native/dispatch`
|
|
114
117
|
- Don't invent local "dispatch behavior" shims to paper over version skew
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"agent-native:doctor": "agent-native doctor",
|
|
12
12
|
"action": "agent-native action",
|
|
13
13
|
"script": "agent-native script",
|
|
14
|
+
"migrate:production": "tsx scripts/migrate-production.ts",
|
|
14
15
|
"skills:update": "agent-native skills update scaffold --project",
|
|
15
16
|
"upgrade:agent-native": "agent-native upgrade"
|
|
16
17
|
},
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { closeDbExec, withMigrationRuntime } from "@agent-native/core/db";
|
|
2
|
+
import { runFrameworkReleaseMigrations } from "@agent-native/core/server";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Release-time schema entrypoint.
|
|
6
|
+
*
|
|
7
|
+
* Every deploy runs this once, and request functions never touch schema. That
|
|
8
|
+
* ordering is not an optimization: on serverless, "migrate on first use" means
|
|
9
|
+
* migrate on EVERY cold start, and a production incident traced a multi-hour
|
|
10
|
+
* outage to schema introspection running 4-6 times concurrently on the request
|
|
11
|
+
* path.
|
|
12
|
+
*
|
|
13
|
+
* `withMigrationRuntime()` is load-bearing. The Netlify BUILD environment sets
|
|
14
|
+
* NETLIFY=true, so this script looks like a serverless request to the guard in
|
|
15
|
+
* `runMigrations` — it is allowed to migrate only because it claims duty here.
|
|
16
|
+
* A release entrypoint that forgets the wrapper silently does nothing.
|
|
17
|
+
*
|
|
18
|
+
* If this app owns tables of its own, export its migration runner from
|
|
19
|
+
* `server/plugins/db.ts` and call it inside the same block.
|
|
20
|
+
*/
|
|
21
|
+
async function main(): Promise<void> {
|
|
22
|
+
await withMigrationRuntime(async () => {
|
|
23
|
+
await runFrameworkReleaseMigrations(null);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
await main();
|
|
29
|
+
} finally {
|
|
30
|
+
await closeDbExec();
|
|
31
|
+
}
|
|
@@ -15,8 +15,9 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
When an older Agent Native app/branch needs to run on current packages, use
|
|
17
17
|
`agent-native upgrade`. Never "fix" upgrade breakage with
|
|
18
|
-
`pnpm
|
|
19
|
-
|
|
18
|
+
`pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
|
|
19
|
+
`pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
|
|
20
|
+
or edits under `node_modules/@agent-native/*` — especially not against
|
|
20
21
|
`@agent-native/core` or `@agent-native/dispatch`.
|
|
21
22
|
|
|
22
23
|
## Why
|
|
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
109
110
|
|
|
110
111
|
- Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
|
|
111
112
|
`patchedDependencies` for any `@agent-native/*` package
|
|
113
|
+
- Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
|
|
114
|
+
`patches/`, for any dependency
|
|
112
115
|
- Don't edit `node_modules/@agent-native/core` or
|
|
113
116
|
`node_modules/@agent-native/dispatch`
|
|
114
117
|
- Don't invent local "dispatch behavior" shims to paper over version skew
|
|
@@ -36,8 +36,10 @@ Tier 4 includes **all** of the following — not only editing package source:
|
|
|
36
36
|
- Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
|
|
37
37
|
- `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
|
|
38
38
|
target any `@agent-native/*` package
|
|
39
|
-
-
|
|
40
|
-
|
|
39
|
+
- `pnpm patch`, `pnpm patch-commit`, or local package patch artifacts for any
|
|
40
|
+
dependency
|
|
41
|
+
- Invented "dispatch/core behavior" shims meant to paper over a version skew
|
|
42
|
+
or failed upgrade
|
|
41
43
|
|
|
42
44
|
This does not prohibit intentional app-owned UI customization. When public
|
|
43
45
|
props and composition are insufficient, the `customizing-agent-native` skill
|
|
@@ -100,8 +102,10 @@ inline strings in components.
|
|
|
100
102
|
- Don't confuse readable package source with app-owned code: use
|
|
101
103
|
`customizing-agent-native` and `agent-native eject` for supported ownership
|
|
102
104
|
transfer
|
|
105
|
+
- Don't use `pnpm patch` / `pnpm patch-commit`, commit `patches/` artifacts, or
|
|
106
|
+
add `pnpm.patchedDependencies` to "make the app run" after a version bump
|
|
103
107
|
- Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
|
|
104
|
-
`@agent-native/*` to
|
|
108
|
+
`@agent-native/*` to paper over a broken upgrade
|
|
105
109
|
- Don't invent local dispatch/core behavior overrides when upgrade fails —
|
|
106
110
|
run `npx @agent-native/core@latest upgrade`, then fix app-level errors only
|
|
107
111
|
- Don't modify `.agents/skills/` or `AGENTS.md` unless explicitly requested
|
|
@@ -15,8 +15,9 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
When an older Agent Native app/branch needs to run on current packages, use
|
|
17
17
|
`agent-native upgrade`. Never "fix" upgrade breakage with
|
|
18
|
-
`pnpm
|
|
19
|
-
|
|
18
|
+
`pnpm patch`, `pnpm patch-commit`, `pnpm.patchedDependencies`,
|
|
19
|
+
`pnpm.overrides`, `patchedDependencies`, `resolutions`, local patch artifacts,
|
|
20
|
+
or edits under `node_modules/@agent-native/*` — especially not against
|
|
20
21
|
`@agent-native/core` or `@agent-native/dispatch`.
|
|
21
22
|
|
|
22
23
|
## Why
|
|
@@ -109,6 +110,8 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
109
110
|
|
|
110
111
|
- Don't add `pnpm.overrides`, `overrides`, `resolutions`, or
|
|
111
112
|
`patchedDependencies` for any `@agent-native/*` package
|
|
113
|
+
- Don't run `pnpm patch` or `pnpm patch-commit`, or commit files under
|
|
114
|
+
`patches/`, for any dependency
|
|
112
115
|
- Don't edit `node_modules/@agent-native/core` or
|
|
113
116
|
`node_modules/@agent-native/dispatch`
|
|
114
117
|
- Don't invent local "dispatch behavior" shims to paper over version skew
|
|
@@ -36,7 +36,8 @@ Preview before `--apply`, commit `agent-native.ejections.json`, and never edit
|
|
|
36
36
|
To bring an older workspace current, run `pnpm upgrade:agent-native` or
|
|
37
37
|
`npx @agent-native/core@latest upgrade` from the workspace root. That bumps
|
|
38
38
|
`@agent-native/*` deps, installs, refreshes scaffold skills, and typechecks.
|
|
39
|
-
Do **not**
|
|
39
|
+
Do **not** run `pnpm patch` / `pnpm patch-commit`, add
|
|
40
|
+
`pnpm.patchedDependencies`, commit dependency patches, or edit
|
|
40
41
|
`node_modules/@agent-native/*` when an upgrade fails — fix app code or ask.
|
|
41
42
|
See the `upgrade-agent-native` and `self-modifying-code` skills.
|
|
42
43
|
After a manual core bump only, `pnpm skills:update` (or
|