@agent-native/core 0.165.4 → 0.167.0
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/secrets/SKILL.md +5 -1
- package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +93 -56
- package/corpus/templates/analytics/app/i18n-data.ts +23 -20
- package/corpus/templates/analytics/app/pages/Settings.tsx +0 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +0 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +2 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +0 -32
- package/corpus/templates/analytics/server/lib/session-replay.ts +1 -5
- package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/assets/actions/navigate.ts +2 -2
- package/corpus/templates/assets/actions/save-generated-image.ts +0 -5
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +2 -262
- package/corpus/templates/assets/app/routes/library.tsx +1 -1
- package/corpus/templates/assets/app/routes/settings.tsx +0 -3
- package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/brain/actions/ask-brain.ts +0 -1
- package/corpus/templates/brain/actions/navigate.ts +2 -2
- package/corpus/templates/brain/app/routes/sources.tsx +0 -4
- package/corpus/templates/brain/server/lib/capture-sanitization.ts +0 -11
- package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +0 -20
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +0 -1
- package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/chat/actions/navigate.ts +2 -2
- package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/clips/CHANGELOG.md +1 -0
- package/corpus/templates/clips/actions/import-loom-recording.ts +16 -4
- package/corpus/templates/clips/actions/navigate.ts +2 -2
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +0 -1
- package/corpus/templates/clips/app/components/library/space-dialogs.tsx +0 -1
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +0 -1
- package/corpus/templates/clips/app/components/player/clips-share-trigger.tsx +17 -0
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +3 -3
- package/corpus/templates/clips/app/components/player/video-player.tsx +2 -2
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +0 -1
- package/corpus/templates/clips/app/components/settings/ai-setup-section.tsx +0 -1
- package/corpus/templates/clips/app/global.css +31 -0
- package/corpus/templates/clips/app/hooks/use-playback-position.ts +0 -2
- package/corpus/templates/clips/app/lib/download-release-channel.ts +10 -0
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -3
- package/corpus/templates/clips/app/routes/download.tsx +67 -44
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -12
- package/corpus/templates/clips/app/routes/record.tsx +6 -6
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +26 -29
- package/corpus/templates/clips/changelog/2026-08-20-clip-viewer-share-actions.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-20-preparing-recording-countdown-overlay.md +1 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +0 -13
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +0 -1
- package/corpus/templates/clips/chrome-extension/src/popup.ts +0 -20
- package/corpus/templates/clips/desktop/src/app.tsx +6 -18
- package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +0 -1
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +0 -8
- package/corpus/templates/content/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/content/actions/_database-source-utils.ts +0 -3
- package/corpus/templates/content/actions/attach-content-database-source.ts +1 -4
- package/corpus/templates/content/actions/navigate.ts +2 -2
- package/corpus/templates/content/actions/prepare-builder-source-execution.ts +1 -1
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +0 -6
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +0 -580
- package/corpus/templates/content/app/components/editor/database/FormView.tsx +2 -2
- package/corpus/templates/content/app/components/editor/database/filter-sort.ts +1 -1
- package/corpus/templates/content/app/components/editor/database/settings.tsx +0 -23
- package/corpus/templates/content/app/components/editor/database/sidebar.tsx +0 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +8 -304
- package/corpus/templates/content/app/hooks/use-documents.ts +0 -1
- package/corpus/templates/content/shared/api.ts +0 -1
- package/corpus/templates/content/shared/builder-mdx.ts +0 -1
- package/corpus/templates/content/shared/nfm.ts +1 -7
- package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/crm/actions/merge-crm-records.ts +0 -4
- package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +0 -1
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1
- package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1
- package/corpus/templates/crm/server/db/crm-store.ts +1 -1
- package/corpus/templates/design/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1 -14
- package/corpus/templates/design/AGENTS.md +2 -1
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +1 -5
- package/corpus/templates/design/actions/generate-design.ts +0 -1
- package/corpus/templates/design/actions/generate-screens.ts +5 -2
- package/corpus/templates/design/actions/go-to-main-component.ts +2 -2
- package/corpus/templates/design/actions/list-design-systems.ts +10 -0
- package/corpus/templates/design/actions/navigate.ts +2 -2
- package/corpus/templates/design/actions/open-component-source.ts +4 -4
- package/corpus/templates/design/actions/present-design-variants.ts +1 -2
- package/corpus/templates/design/actions/run-design-audit.ts +0 -22
- package/corpus/templates/design/actions/show-design-questions.ts +5 -2
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +19 -8
- package/corpus/templates/design/app/components/design/EditPanel.tsx +11 -183
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +21 -4
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -5
- package/corpus/templates/design/app/components/design/bridge/codegen.ts +1 -1
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +10 -19
- package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +1 -1
- package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +13 -3
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +38 -32
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +1 -4
- package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +0 -4
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +15 -6
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +2 -2
- package/corpus/templates/design/app/components/visual-editor/NodeRewriteProposal.tsx +0 -1
- package/corpus/templates/design/app/components/visual-editor/ReviewCanvasPins.tsx +1 -1
- package/corpus/templates/design/app/i18n-data.ts +122 -0
- package/corpus/templates/design/app/lib/clipboard-content-lineage.ts +11 -1
- package/corpus/templates/design/app/pages/DesignEditor.tsx +50 -254
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +163 -8
- package/corpus/templates/design/app/pages/Index.tsx +17 -0
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +44 -32
- package/corpus/templates/design/app/pages/design-editor/canvas-primitives.ts +10 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +49 -3
- package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +31 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +28 -0
- package/corpus/templates/design/app/pages/design-editor/commands/add-auto-layout.ts +3 -3
- package/corpus/templates/design/app/pages/design-editor/commands/align-selection.ts +44 -14
- package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +16 -5
- package/corpus/templates/design/app/pages/design-editor/commands/change-selected-z-index.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/frame-selection.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/group-selection.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/nudge-selection.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/paste-selection.ts +142 -17
- package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-duplicate-change.ts +1 -0
- package/corpus/templates/design/app/pages/design-editor/commands/ungroup-selection.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/commands/visual-duplicate-change.ts +1 -0
- package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +25 -9
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +1 -0
- package/corpus/templates/design/app/pages/design-editor/measure-child-rects.ts +83 -0
- package/corpus/templates/design/app/pages/design-editor/paste-placement.ts +66 -0
- package/corpus/templates/design/server/routes/[...page].get.ts +0 -1
- package/corpus/templates/design/shared/code-layer.ts +120 -70
- package/corpus/templates/design/shared/design-surface-index.ts +0 -1
- package/corpus/templates/design/shared/pen-path.ts +0 -4
- package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/dispatch/app/routes/integrations.tsx +0 -109
- package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/factory/actions/navigate.ts +2 -2
- package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +0 -13
- package/corpus/templates/factory/app/routes/factory.tsx +0 -1
- package/corpus/templates/factory/server/factory-graph/store.ts +0 -1
- package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -1
- package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/mail/app/components/email/EmailList.tsx +0 -1
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/mail/shared/markdown.ts +3 -0
- package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/slides/actions/add-slide.ts +0 -1
- package/corpus/templates/slides/actions/list-decks.ts +1 -1
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -4
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +0 -1
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1 -1
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +1 -6
- package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +5 -1
- package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/corpus/templates/tasks/app/components/layout/Layout.tsx +0 -1
- package/corpus/templates/tasks/app/hooks/use-visible-task-fields.ts +1 -4
- package/corpus/templates/tasks/server/custom-fields/store.ts +1 -6
- package/corpus/templates/tasks/shared/list-screen-snapshot.ts +2 -2
- package/dist/agent/engine/registry.js +27 -14
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/production-agent.d.ts +19 -6
- package/dist/agent/production-agent.js +57 -16
- package/dist/agent/types.d.ts +3 -0
- package/dist/client/EnvironmentBadge.d.ts +1 -0
- package/dist/client/EnvironmentBadge.js +7 -0
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/routes.d.ts +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +248 -0
- package/dist/deploy/build.js +12 -1
- package/dist/index.d.ts +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +2 -2
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/agent-chat/plugin-options.d.ts +3 -2
- package/dist/server/agent-chat-plugin.js +5 -2
- package/dist/server/index.d.ts +1 -1
- package/dist/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
- package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/dist/templates/chat/actions/navigate.ts +2 -2
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +5 -1
- package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/dist/vite/agent-native-config-loader.d.ts +1 -0
- package/dist/vite/agent-native-config-loader.js +3 -3
- package/dist/vite/agents-bundle-plugin.d.ts +1 -1
- package/dist/vite/agents-bundle-plugin.js +13 -1
- package/dist/vite/client.js +14 -14
- package/docs/content/agent-native-config.mdx +62 -11
- package/docs/content/agent-surfaces.mdx +6 -0
- package/docs/content/environment-variables.mdx +5 -2
- package/package.json +3 -3
- package/src/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
- package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/src/templates/chat/actions/navigate.ts +2 -2
- package/src/templates/default/.agents/skills/secrets/SKILL.md +5 -1
- package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
|
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
|
|
|
62
62
|
error: string;
|
|
63
63
|
states?: undefined;
|
|
64
64
|
} | {
|
|
65
|
+
error?: undefined;
|
|
65
66
|
states: {
|
|
66
67
|
clientId: number;
|
|
67
68
|
state: string;
|
|
68
69
|
}[];
|
|
69
|
-
error?: undefined;
|
|
70
70
|
}>>;
|
|
71
71
|
/**
|
|
72
72
|
* GET /_agent-native/collab/:docId/users
|
|
@@ -77,9 +77,9 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
|
|
|
77
77
|
error: string;
|
|
78
78
|
users?: undefined;
|
|
79
79
|
} | {
|
|
80
|
+
error?: undefined;
|
|
80
81
|
users: {
|
|
81
82
|
clientId: number;
|
|
82
83
|
lastSeen: number;
|
|
83
84
|
}[];
|
|
84
|
-
error?: undefined;
|
|
85
85
|
}>>;
|
package/dist/collab/routes.d.ts
CHANGED
|
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
|
|
|
26
26
|
* Body: { update: string (base64), requestSource?: string }
|
|
27
27
|
*/
|
|
28
28
|
export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
29
|
-
error: string;
|
|
30
29
|
ok?: undefined;
|
|
30
|
+
error: string;
|
|
31
31
|
} | {
|
|
32
32
|
error?: undefined;
|
|
33
33
|
ok: boolean;
|
package/dist/config.d.ts
CHANGED
|
@@ -101,6 +101,17 @@ export type AgentNativeConfigInput = AgentNativeConfig | AgentNativeConfigFactor
|
|
|
101
101
|
* phase, while the browser only receives the resolved serializable result.
|
|
102
102
|
*/
|
|
103
103
|
export declare function defineAgentNativeConfig(config: AgentNativeConfigInput): AgentNativeConfigInput;
|
|
104
|
+
export declare const AGENT_NATIVE_CONFIG_ENV_PREFIX: "AGENT_NATIVE_CONFIG";
|
|
105
|
+
/** Convert a config path such as `runtime.auth.enabled` to its env name. */
|
|
106
|
+
export declare function agentNativeConfigEnvName(path: readonly string[]): string;
|
|
107
|
+
/**
|
|
108
|
+
* Reads the public config's deterministic environment aliases.
|
|
109
|
+
*
|
|
110
|
+
* `AGENT_NATIVE_CONFIG` contains a complete JSON object. A suffixed name
|
|
111
|
+
* contains a JSON fragment at that config path, or a typed scalar at a leaf.
|
|
112
|
+
* Nodes are applied from shallowest to deepest so a more specific path wins.
|
|
113
|
+
*/
|
|
114
|
+
export declare function readAgentNativeConfigEnv(env: Record<string, string | undefined>): AgentNativeConfig;
|
|
104
115
|
export declare function normalizeAgentNativeConfig(input: unknown, source?: string): AgentNativeConfig;
|
|
105
116
|
export declare function mergeAgentNativeConfigs(base: AgentNativeConfig, override: AgentNativeConfig): AgentNativeConfig;
|
|
106
117
|
export declare function resolveAgentNativeConfig(input: AgentNativeConfigInput | undefined, context: AgentNativeConfigContext): AgentNativeConfig;
|
package/dist/config.js
CHANGED
|
@@ -16,6 +16,254 @@ export const AGENT_NATIVE_CONFIG_VERSION = 1;
|
|
|
16
16
|
export function defineAgentNativeConfig(config) {
|
|
17
17
|
return config;
|
|
18
18
|
}
|
|
19
|
+
export const AGENT_NATIVE_CONFIG_ENV_PREFIX = "AGENT_NATIVE_CONFIG";
|
|
20
|
+
/**
|
|
21
|
+
* Serializable public config nodes that may be initialized from the
|
|
22
|
+
* deployment environment. Object nodes accept JSON fragments, which lets a
|
|
23
|
+
* deploy set a whole section without requiring a separate alias for every
|
|
24
|
+
* leaf. Dynamic keys in the onboarding mode map stay JSON-only at the union
|
|
25
|
+
* node because they are not part of the fixed config shape.
|
|
26
|
+
*/
|
|
27
|
+
const AGENT_NATIVE_CONFIG_ENV_NODES = [
|
|
28
|
+
{ path: [], kind: "object" },
|
|
29
|
+
{ path: ["version"], kind: "number" },
|
|
30
|
+
{ path: ["onboarding"], kind: "object" },
|
|
31
|
+
{
|
|
32
|
+
path: ["onboarding", "firstRun"],
|
|
33
|
+
kind: "union",
|
|
34
|
+
dynamicObjectKeys: true,
|
|
35
|
+
},
|
|
36
|
+
{ path: ["runtime"], kind: "object" },
|
|
37
|
+
{ path: ["runtime", "auth"], kind: "object" },
|
|
38
|
+
{ path: ["runtime", "auth", "enabled"], kind: "boolean" },
|
|
39
|
+
{ path: ["runtime", "database"], kind: "object" },
|
|
40
|
+
{ path: ["runtime", "database", "required"], kind: "boolean" },
|
|
41
|
+
{ path: ["runtime", "environment"], kind: "object" },
|
|
42
|
+
{
|
|
43
|
+
path: ["runtime", "environment", "required"],
|
|
44
|
+
kind: "array",
|
|
45
|
+
},
|
|
46
|
+
{ path: ["deployment"], kind: "object" },
|
|
47
|
+
{
|
|
48
|
+
path: ["deployment", "environment"],
|
|
49
|
+
kind: "deployment-environment",
|
|
50
|
+
},
|
|
51
|
+
{ path: ["diagnostics"], kind: "object" },
|
|
52
|
+
{ path: ["diagnostics", "failOnBuild"], kind: "boolean" },
|
|
53
|
+
{ path: ["instructions"], kind: "object" },
|
|
54
|
+
{ path: ["instructions", "runtime"], kind: "string" },
|
|
55
|
+
{ path: ["instructions", "development"], kind: "string" },
|
|
56
|
+
{ path: ["translations"], kind: "object" },
|
|
57
|
+
{ path: ["translations", "locales"], kind: "array" },
|
|
58
|
+
{ path: ["changelog"], kind: "object" },
|
|
59
|
+
{ path: ["changelog", "enabled"], kind: "boolean" },
|
|
60
|
+
{ path: ["harness"], kind: "union" },
|
|
61
|
+
{ path: ["harness", "runtimes"], kind: "array" },
|
|
62
|
+
];
|
|
63
|
+
function agentNativeConfigEnvSegment(segment) {
|
|
64
|
+
return segment
|
|
65
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1_$2")
|
|
66
|
+
.replace(/[^A-Za-z0-9]+/g, "_")
|
|
67
|
+
.replace(/_+/g, "_")
|
|
68
|
+
.replace(/^_|_$/g, "")
|
|
69
|
+
.toUpperCase();
|
|
70
|
+
}
|
|
71
|
+
/** Convert a config path such as `runtime.auth.enabled` to its env name. */
|
|
72
|
+
export function agentNativeConfigEnvName(path) {
|
|
73
|
+
if (path.length === 0)
|
|
74
|
+
return AGENT_NATIVE_CONFIG_ENV_PREFIX;
|
|
75
|
+
return `${AGENT_NATIVE_CONFIG_ENV_PREFIX}_${path
|
|
76
|
+
.map(agentNativeConfigEnvSegment)
|
|
77
|
+
.join("_")}`;
|
|
78
|
+
}
|
|
79
|
+
function agentNativeConfigEnvKeys(node) {
|
|
80
|
+
return [agentNativeConfigEnvName(node.path), ...(node.aliases ?? [])];
|
|
81
|
+
}
|
|
82
|
+
function isAgentNativeConfigEnvKey(key) {
|
|
83
|
+
return (key === AGENT_NATIVE_CONFIG_ENV_PREFIX ||
|
|
84
|
+
key.startsWith(`${AGENT_NATIVE_CONFIG_ENV_PREFIX}_`));
|
|
85
|
+
}
|
|
86
|
+
function parseAgentNativeConfigJson(raw, key) {
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(raw);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new Error(`${key} must contain valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function parseAgentNativeConfigEnvValue(raw, key, kind) {
|
|
95
|
+
const value = raw.trim();
|
|
96
|
+
switch (kind) {
|
|
97
|
+
case "object": {
|
|
98
|
+
const parsed = parseAgentNativeConfigJson(value, key);
|
|
99
|
+
if (!isRecord(parsed)) {
|
|
100
|
+
throw new Error(`${key} must contain a JSON object`);
|
|
101
|
+
}
|
|
102
|
+
return parsed;
|
|
103
|
+
}
|
|
104
|
+
case "array": {
|
|
105
|
+
const parsed = parseAgentNativeConfigJson(value, key);
|
|
106
|
+
if (!Array.isArray(parsed)) {
|
|
107
|
+
throw new Error(`${key} must contain a JSON array`);
|
|
108
|
+
}
|
|
109
|
+
return parsed;
|
|
110
|
+
}
|
|
111
|
+
case "boolean": {
|
|
112
|
+
const normalized = value.toLowerCase();
|
|
113
|
+
if (["1", "true", "yes", "on"].includes(normalized))
|
|
114
|
+
return true;
|
|
115
|
+
if (["0", "false", "no", "off"].includes(normalized))
|
|
116
|
+
return false;
|
|
117
|
+
throw new Error(`${key} must be a boolean`);
|
|
118
|
+
}
|
|
119
|
+
case "number": {
|
|
120
|
+
const parsed = Number(value);
|
|
121
|
+
if (!Number.isFinite(parsed))
|
|
122
|
+
throw new Error(`${key} must be a number`);
|
|
123
|
+
return parsed;
|
|
124
|
+
}
|
|
125
|
+
case "deployment-environment":
|
|
126
|
+
return value.toLowerCase();
|
|
127
|
+
case "string": {
|
|
128
|
+
if (value.startsWith('"')) {
|
|
129
|
+
const parsed = parseAgentNativeConfigJson(value, key);
|
|
130
|
+
if (typeof parsed !== "string") {
|
|
131
|
+
throw new Error(`${key} must contain a string`);
|
|
132
|
+
}
|
|
133
|
+
return parsed;
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
case "union": {
|
|
138
|
+
if (value.startsWith("{") || value.startsWith("[")) {
|
|
139
|
+
return parseAgentNativeConfigJson(value, key);
|
|
140
|
+
}
|
|
141
|
+
const normalized = value.toLowerCase();
|
|
142
|
+
if (["1", "true", "yes", "on"].includes(normalized))
|
|
143
|
+
return true;
|
|
144
|
+
if (["0", "false", "no", "off"].includes(normalized))
|
|
145
|
+
return false;
|
|
146
|
+
if (value.startsWith('"')) {
|
|
147
|
+
const parsed = parseAgentNativeConfigJson(value, key);
|
|
148
|
+
if (typeof parsed !== "string") {
|
|
149
|
+
throw new Error(`${key} must contain a string or JSON object`);
|
|
150
|
+
}
|
|
151
|
+
return parsed;
|
|
152
|
+
}
|
|
153
|
+
return value;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function agentNativeConfigEnvNodeForPath(path) {
|
|
158
|
+
return AGENT_NATIVE_CONFIG_ENV_NODES.find((node) => node.path.length === path.length &&
|
|
159
|
+
node.path.every((segment, index) => segment === path[index]));
|
|
160
|
+
}
|
|
161
|
+
function agentNativeConfigEnvChildren(path) {
|
|
162
|
+
return AGENT_NATIVE_CONFIG_ENV_NODES.filter((node) => node.path.length === path.length + 1 &&
|
|
163
|
+
path.every((segment, index) => node.path[index] === segment));
|
|
164
|
+
}
|
|
165
|
+
function validateAgentNativeConfigEnvFragment(value, path, key) {
|
|
166
|
+
const node = agentNativeConfigEnvNodeForPath(path);
|
|
167
|
+
if (!node)
|
|
168
|
+
return;
|
|
169
|
+
if (node.kind === "object") {
|
|
170
|
+
if (!isRecord(value)) {
|
|
171
|
+
throw new Error(`${key} must contain a JSON object`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (node.kind !== "union" || !isRecord(value)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (node.dynamicObjectKeys)
|
|
178
|
+
return;
|
|
179
|
+
const children = new Map(agentNativeConfigEnvChildren(path).map((child) => [
|
|
180
|
+
child.path[child.path.length - 1],
|
|
181
|
+
child,
|
|
182
|
+
]));
|
|
183
|
+
for (const [childKey, childValue] of Object.entries(value)) {
|
|
184
|
+
const child = children.get(childKey);
|
|
185
|
+
if (!child) {
|
|
186
|
+
const childPath = [...path, childKey].join(".");
|
|
187
|
+
throw new Error(`${key} contains unsupported Agent-Native config path ${childPath}`);
|
|
188
|
+
}
|
|
189
|
+
validateAgentNativeConfigEnvFragment(childValue, child.path, key);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function mergeAgentNativeConfigEnvFragments(base, override) {
|
|
193
|
+
const result = { ...base };
|
|
194
|
+
for (const [key, value] of Object.entries(override)) {
|
|
195
|
+
const existing = result[key];
|
|
196
|
+
result[key] =
|
|
197
|
+
isRecord(existing) && isRecord(value)
|
|
198
|
+
? mergeAgentNativeConfigEnvFragments(existing, value)
|
|
199
|
+
: value;
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
function assignAgentNativeConfigEnvFragment(target, path, value, key) {
|
|
204
|
+
if (path.length === 0) {
|
|
205
|
+
if (!isRecord(value)) {
|
|
206
|
+
throw new Error(`${key} must contain a JSON object`);
|
|
207
|
+
}
|
|
208
|
+
Object.assign(target, mergeAgentNativeConfigEnvFragments(target, value));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
let node = target;
|
|
212
|
+
for (const segment of path.slice(0, -1)) {
|
|
213
|
+
const existing = node[segment];
|
|
214
|
+
if (existing === undefined) {
|
|
215
|
+
node[segment] = {};
|
|
216
|
+
}
|
|
217
|
+
else if (!isRecord(existing)) {
|
|
218
|
+
node[segment] = {};
|
|
219
|
+
}
|
|
220
|
+
node = node[segment];
|
|
221
|
+
}
|
|
222
|
+
const leaf = path[path.length - 1];
|
|
223
|
+
const existing = node[leaf];
|
|
224
|
+
node[leaf] =
|
|
225
|
+
isRecord(existing) && isRecord(value)
|
|
226
|
+
? mergeAgentNativeConfigEnvFragments(existing, value)
|
|
227
|
+
: value;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Reads the public config's deterministic environment aliases.
|
|
231
|
+
*
|
|
232
|
+
* `AGENT_NATIVE_CONFIG` contains a complete JSON object. A suffixed name
|
|
233
|
+
* contains a JSON fragment at that config path, or a typed scalar at a leaf.
|
|
234
|
+
* Nodes are applied from shallowest to deepest so a more specific path wins.
|
|
235
|
+
*/
|
|
236
|
+
export function readAgentNativeConfigEnv(env) {
|
|
237
|
+
const known = new Map();
|
|
238
|
+
for (const node of AGENT_NATIVE_CONFIG_ENV_NODES) {
|
|
239
|
+
for (const key of agentNativeConfigEnvKeys(node)) {
|
|
240
|
+
const previous = known.get(key);
|
|
241
|
+
if (previous && previous.path.join(".") !== node.path.join(".")) {
|
|
242
|
+
throw new Error(`Duplicate Agent-Native config environment key ${key}`);
|
|
243
|
+
}
|
|
244
|
+
known.set(key, node);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
for (const key of Object.keys(env)) {
|
|
248
|
+
if (isAgentNativeConfigEnvKey(key) && !known.has(key)) {
|
|
249
|
+
throw new Error(`${key} is not a supported Agent-Native config path. Use agent-native.config.ts or a documented config env alias.`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const layer = {};
|
|
253
|
+
const nodes = [...AGENT_NATIVE_CONFIG_ENV_NODES].sort((left, right) => left.path.length - right.path.length);
|
|
254
|
+
for (const node of nodes) {
|
|
255
|
+
for (const key of agentNativeConfigEnvKeys(node)) {
|
|
256
|
+
const raw = env[key];
|
|
257
|
+
if (raw === undefined || raw.trim() === "")
|
|
258
|
+
continue;
|
|
259
|
+
const value = parseAgentNativeConfigEnvValue(raw, key, node.kind);
|
|
260
|
+
validateAgentNativeConfigEnvFragment(value, node.path, key);
|
|
261
|
+
assignAgentNativeConfigEnvFragment(layer, node.path, value, key);
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return normalizeAgentNativeConfig(layer, "Agent-Native config environment");
|
|
266
|
+
}
|
|
19
267
|
export function normalizeAgentNativeConfig(input, source = "agent-native config") {
|
|
20
268
|
if (!isRecord(input)) {
|
|
21
269
|
throw new Error(`${source} must export an object`);
|
package/dist/deploy/build.js
CHANGED
|
@@ -18,10 +18,12 @@ import fs from "fs";
|
|
|
18
18
|
import { createRequire } from "module";
|
|
19
19
|
import path from "path";
|
|
20
20
|
import { fileURLToPath } from "url";
|
|
21
|
+
import { loadEnv } from "vite";
|
|
21
22
|
import { AGENT_BACKGROUND_FUNCTION_NAME, AGENT_BACKGROUND_FUNCTION_URL_PATH, AGENT_BACKGROUND_PROCESSOR_A2A, AGENT_BACKGROUND_PROCESSOR_FIELD, AGENT_BACKGROUND_PROCESSOR_INTEGRATION, AGENT_BACKGROUND_PROCESSOR_ROUTE, AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD, AGENT_CHAT_PROCESS_RUN_PATH, isDurableBackgroundFlagExplicitlyDisabled, } from "../agent/durable-background.js";
|
|
22
23
|
import { INTEGRATION_RECOVERY_RUNTIME_MARKER, INTEGRATION_RETRY_SWEEP_PATH, INTEGRATION_RETRY_SWEEP_TOKEN_SUBJECT, isIntegrationDurableDispatchConfigured, } from "../integrations/integration-durable-dispatch-config.js";
|
|
23
24
|
import { isValidCron } from "../jobs/cron.js";
|
|
24
25
|
import { RECURRING_JOBS_SWEEP_PATH, RECURRING_JOBS_SWEEP_TOKEN_SUBJECT, } from "../jobs/scheduler-dispatch.js";
|
|
26
|
+
import { findWorkspaceRoot as findAgentNativeWorkspaceRoot } from "../scripts/utils.js";
|
|
25
27
|
import { normalizeAppBasePath } from "../server/app-base-path.js";
|
|
26
28
|
import { DEFAULT_SPECULATION_RULES_PATH, resolveSsrCacheHeaders, resolveSsrCacheKeyHeaders, SSR_QUERY_CACHE_KEY_HEADER, } from "../shared/cache-control.js";
|
|
27
29
|
import { mcpEmbedStaticAssetRouteRules } from "../shared/mcp-embed-headers.js";
|
|
@@ -3922,7 +3924,16 @@ async function buildWithNitro() {
|
|
|
3922
3924
|
// own virtual module registration. Both paths reuse `readAgentsBundleFromFs`
|
|
3923
3925
|
// from `server/agents-bundle.ts` to guarantee identical content.
|
|
3924
3926
|
const { readAgentsBundleFromFs } = await import("../server/agents-bundle.js");
|
|
3925
|
-
const
|
|
3927
|
+
const nitroMode = process.env.NODE_ENV === "development" ? "development" : "production";
|
|
3928
|
+
const agentNativeWorkspaceRoot = findAgentNativeWorkspaceRoot(cwd);
|
|
3929
|
+
const nitroEnvironment = {
|
|
3930
|
+
...(agentNativeWorkspaceRoot && agentNativeWorkspaceRoot !== cwd
|
|
3931
|
+
? loadEnv(nitroMode, agentNativeWorkspaceRoot, "")
|
|
3932
|
+
: {}),
|
|
3933
|
+
...loadEnv(nitroMode, cwd, ""),
|
|
3934
|
+
...process.env,
|
|
3935
|
+
};
|
|
3936
|
+
const nitroAgentConfig = await loadResolvedAgentNativeConfig(cwd, createAgentNativeConfigContext("build", nitroMode), { environment: nitroEnvironment });
|
|
3926
3937
|
// Resolve the workspace core (if present) up front so the bundle embeds
|
|
3927
3938
|
// enterprise-wide AGENTS.md + skills alongside the template's.
|
|
3928
3939
|
const nitroWorkspaceCore = await getWorkspaceCoreExports(cwd);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from "./config.js";
|
|
2
|
-
export { createProductionAgentHandler, type ActionEntry, type ScriptEntry, type ProductionAgentOptions, type AgentActionSurface, type AgentActionSurfaceDetails, type ActionTool, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, type AgentChatAttachment, DEFAULT_MODEL, TripWire, type Processor, type ProcessorState, type ProcessorAbort, } from "./agent/index.js";
|
|
2
|
+
export { createProductionAgentHandler, type ActionEntry, type ScriptEntry, type ProductionAgentOptions, type AgentActionSurface, type DefaultAgentActionSurface, type AgentActionSurfaceResolution, type AgentActionSurfaceDetails, type ActionTool, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, type AgentChatAttachment, DEFAULT_MODEL, TripWire, type Processor, type ProcessorState, type ProcessorAbort, } from "./agent/index.js";
|
|
3
3
|
export { defineAction, ActionContractError, isActionContractError, type ActionContractErrorOptions, AgentActionStopError, isAgentActionStopError, type ActionDefinition, type ActionHttpConfig, type AgentActionStopOptions, type PublicAgentActionConfig, type ActionDeepLink, type ActionLinkBuilder, MCP_APP_EXTENSION_ID, MCP_APP_MIME_TYPE, MCP_APP_RESOURCE_URI_META_KEY, type ActionMcpAppConfig, type ActionMcpAppCsp, type ActionMcpAppCspBuilder, type ActionMcpAppHtmlBuilder, type ActionMcpAppPermissions, type ActionMcpAppResourceConfig, type ActionMcpAppResourceMeta, } from "./action.js";
|
|
4
4
|
export * from "./user-profile/index.js";
|
|
5
5
|
export { embedApp, MCP_APP_REQUEST_ORIGIN_CSP_SOURCE, type EmbedAppOptions, } from "./mcp/embed-app.js";
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
* DELETE /_agent-native/notifications/:id — delete
|
|
12
12
|
*/
|
|
13
13
|
export declare function createNotificationsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<"" | import("./types.js").Notification[] | {
|
|
14
|
+
error?: undefined;
|
|
14
15
|
count: number;
|
|
15
16
|
updated?: undefined;
|
|
16
|
-
error?: undefined;
|
|
17
17
|
ok?: undefined;
|
|
18
18
|
} | {
|
|
19
|
+
error?: undefined;
|
|
19
20
|
count?: undefined;
|
|
20
21
|
updated: number;
|
|
21
|
-
error?: undefined;
|
|
22
22
|
ok?: undefined;
|
|
23
23
|
} | {
|
|
24
24
|
count?: undefined;
|
|
@@ -26,8 +26,8 @@ export declare function createNotificationsHandler(): import("h3").EventHandlerW
|
|
|
26
26
|
error: string;
|
|
27
27
|
ok?: undefined;
|
|
28
28
|
} | {
|
|
29
|
+
error?: undefined;
|
|
29
30
|
count?: undefined;
|
|
30
31
|
updated?: undefined;
|
|
31
|
-
error?: undefined;
|
|
32
32
|
ok: boolean;
|
|
33
33
|
}>>;
|
|
@@ -41,14 +41,14 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
|
|
|
41
41
|
thumbsUpRate: number;
|
|
42
42
|
avgEvalScore: number;
|
|
43
43
|
} | {
|
|
44
|
-
error?: undefined;
|
|
45
44
|
ok?: undefined;
|
|
45
|
+
error?: undefined;
|
|
46
46
|
summary: import("./types.js").TraceSummary;
|
|
47
47
|
spans: import("./types.js").TraceSpan[];
|
|
48
48
|
id?: undefined;
|
|
49
49
|
} | {
|
|
50
|
-
error?: undefined;
|
|
51
50
|
ok?: undefined;
|
|
51
|
+
error?: undefined;
|
|
52
52
|
summary?: undefined;
|
|
53
53
|
spans?: undefined;
|
|
54
54
|
id: string;
|
|
@@ -51,8 +51,8 @@ export declare function handleDeleteResource(event: any): Promise<{
|
|
|
51
51
|
error: string;
|
|
52
52
|
ok?: undefined;
|
|
53
53
|
} | {
|
|
54
|
-
ok: boolean;
|
|
55
54
|
error?: undefined;
|
|
55
|
+
ok: boolean;
|
|
56
56
|
}>;
|
|
57
57
|
/** POST /_agent-native/resources/upload — upload a file as a resource */
|
|
58
58
|
export declare function handleUploadResource(event: any): Promise<import("./store.js").Resource | {
|
|
@@ -73,10 +73,10 @@ export declare function handleUploadResource(event: any): Promise<import("./stor
|
|
|
73
73
|
runId: string | null;
|
|
74
74
|
expiresAt: number | null;
|
|
75
75
|
metadata: string | null;
|
|
76
|
+
error?: undefined;
|
|
76
77
|
url: string;
|
|
77
78
|
provider: string;
|
|
78
79
|
storageSetupRequired?: undefined;
|
|
79
|
-
error?: undefined;
|
|
80
80
|
} | {
|
|
81
81
|
error: string;
|
|
82
82
|
storageSetupRequired: boolean;
|
|
@@ -171,8 +171,9 @@ export interface AgentChatPluginOptions {
|
|
|
171
171
|
}>;
|
|
172
172
|
/**
|
|
173
173
|
* Resolve the exact native action surface for each interactive chat request.
|
|
174
|
-
* Omitted names are not sent to the model
|
|
175
|
-
* tool-search.
|
|
174
|
+
* Omitted allowlist names are not sent to the model or discoverable through
|
|
175
|
+
* tool-search. Return `{ mode: "default" }` to keep the normal initial-tool
|
|
176
|
+
* and discovery behavior for a request instead.
|
|
176
177
|
*/
|
|
177
178
|
resolveActionSurface?: ProductionAgentOptions["resolveActionSurface"];
|
|
178
179
|
/**
|
|
@@ -13,7 +13,7 @@ import { resolveEngine, createAnthropicEngine, getStoredModelForEngine, normaliz
|
|
|
13
13
|
import { SYSTEM_PROMPT_CACHE_SPLIT } from "../agent/engine/prompt-cache.js";
|
|
14
14
|
import { PROVIDER_TO_ENV } from "../agent/engine/provider-env-vars.js";
|
|
15
15
|
import { hostedHarnessSystemPrompt } from "../agent/harness/hosted.js";
|
|
16
|
-
import { createProductionAgentHandler, actionsToEngineTools, executeAgentToolCall, filterActionsByAllowedNames, readPersistedActionSurface, toolCallCacheKey, getActiveRunForThreadAsync, abortRunDurably, abortTurnDurably, subscribeToRun, } from "../agent/production-agent.js";
|
|
16
|
+
import { createProductionAgentHandler, actionsToEngineTools, executeAgentToolCall, filterActionsByAllowedNames, normalizeAgentActionSurfaceResolution, readPersistedActionSurface, toolCallCacheKey, getActiveRunForThreadAsync, abortRunDurably, abortTurnDurably, subscribeToRun, } from "../agent/production-agent.js";
|
|
17
17
|
import { callerHasRunAccess, callerHasThreadAccess, } from "../agent/run-ownership.js";
|
|
18
18
|
import { markTurnAborted, readBackgroundRunClaim } from "../agent/run-store.js";
|
|
19
19
|
import { buildCurrentTimeUserContext, buildRuntimeContextPrompt, } from "../agent/runtime-context.js";
|
|
@@ -2974,11 +2974,14 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
|
|
|
2974
2974
|
...details,
|
|
2975
2975
|
availableActionNames: appActionNames,
|
|
2976
2976
|
});
|
|
2977
|
+
const normalizedSurface = normalizeAgentActionSurfaceResolution(surface);
|
|
2978
|
+
if (normalizedSurface.mode === "default")
|
|
2979
|
+
return surface;
|
|
2977
2980
|
const localActionNames = details.availableActionNames.filter((name) => localDevActionNames.has(name));
|
|
2978
2981
|
return {
|
|
2979
2982
|
allowedActionNames: [
|
|
2980
2983
|
...new Set([
|
|
2981
|
-
...
|
|
2984
|
+
...normalizedSurface.allowedActionNames,
|
|
2982
2985
|
...localActionNames,
|
|
2983
2986
|
]),
|
|
2984
2987
|
],
|
package/dist/server/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export { requireEnvKey, type MissingKeyResponse } from "./missing-key.js";
|
|
|
15
15
|
export { assertCurrentRequestUserIsOrgAdmin, currentRequestUserIsOrgAdmin, } from "./org-admin.js";
|
|
16
16
|
export { verifyCaptcha, type CaptchaVerifyResult } from "./captcha.js";
|
|
17
17
|
export { getLocaleInitScript, parseAcceptLanguage, resolveLocaleFromRequest, type LocaleInitScriptOptions, type ResolveLocaleFromRequestOptions, type ResolvedRequestLocale, } from "../localization/server.js";
|
|
18
|
-
export { createProductionAgentHandler, type ActionEntry, type ScriptEntry, type ProductionAgentOptions, type AgentActionSurface, type AgentActionSurfaceDetails, type ActionTool, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, type AgentChatAttachment, type AgentChatReference, type MentionProvider, type MentionProviderItem, type AgentLoopFinalResponseGuard, type AgentLoopFinalResponseGuardContext, type AgentLoopFinalResponseGuardResult, type AgentLoopToolCallSummary, type AgentLoopToolResultSummary, } from "../agent/index.js";
|
|
18
|
+
export { createProductionAgentHandler, type ActionEntry, type ScriptEntry, type ProductionAgentOptions, type AgentActionSurface, type DefaultAgentActionSurface, type AgentActionSurfaceResolution, type AgentActionSurfaceDetails, type ActionTool, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, type AgentChatAttachment, type AgentChatReference, type MentionProvider, type MentionProviderItem, type AgentLoopFinalResponseGuard, type AgentLoopFinalResponseGuardContext, type AgentLoopFinalResponseGuardResult, type AgentLoopToolCallSummary, type AgentLoopToolResultSummary, } from "../agent/index.js";
|
|
19
19
|
export { actionsToEngineTools, executeAgentToolCall, getOwnerActiveApiKey, getOwnerApiKeyForEngine, resolveOwnerEngineApiKey, runAgentLoop, type AgentToolCallExecutionResult, type ExecuteAgentToolCallOptions, type ResolvedOwnerApiKey, } from "../agent/production-agent.js";
|
|
20
20
|
export { mountRealtimeVoiceRoutes, realtimeVoiceSafetyIdentifier, REALTIME_VOICE_MAX_SDP_BYTES, REALTIME_VOICE_MAX_TOOL_BODY_BYTES, REALTIME_VOICE_MAX_TOOL_OUTPUT_CHARS, REALTIME_VOICE_SESSION_PATH, REALTIME_VOICE_TOOL_PATH, type MountRealtimeVoiceRoutesOptions, type RealtimeVoiceRequestContext, type RealtimeVoiceToolExecutionRequest, type RealtimeVoiceToolExecutionResult, } from "./realtime-voice.js";
|
|
21
21
|
export { getStoredModelForEngine, resolveEngine, } from "../agent/engine/index.js";
|
|
@@ -38,7 +38,11 @@ connection exists:
|
|
|
38
38
|
register a `kind: "oauth"` entry so the shared UI renders Connect and the
|
|
39
39
|
runtime owns status, refresh, and reauthorization.
|
|
40
40
|
- **Deploy- or app-level configuration** - use deployment/runtime
|
|
41
|
-
configuration, not a per-user secret row.
|
|
41
|
+
configuration, not a per-user secret row. For a non-secret public setting
|
|
42
|
+
already represented by `AgentNativeConfig`, put the default in
|
|
43
|
+
`agent-native.config.ts` and use its `AGENT_NATIVE_CONFIG_<PATH>` alias only
|
|
44
|
+
for a deployment override. Never put a credential or provider key in that
|
|
45
|
+
public namespace.
|
|
42
46
|
- **Account, customer, manager, or other non-secret identifier** - store it as
|
|
43
47
|
scoped connection metadata or app data, not as a masked secret field.
|
|
44
48
|
|
|
@@ -55,7 +55,10 @@ Preview before `--apply`, commit `agent-native.ejections.json`, and never edit
|
|
|
55
55
|
ZIPs, screenshots, thumbnails, session replay chunks) in configured file/blob
|
|
56
56
|
storage and persist only URLs, ids, or handles.
|
|
57
57
|
- Store shared runtime configuration in the workspace root `.env`; use
|
|
58
|
-
`apps/<app>/.env` only for app-specific overrides.
|
|
58
|
+
`apps/<app>/.env` only for app-specific overrides. For public app behavior,
|
|
59
|
+
prefer the default in `agent-native.config.ts` and use the deterministic
|
|
60
|
+
`AGENT_NATIVE_CONFIG_<UPPER_SNAKE_PATH>` alias only when a non-secret value
|
|
61
|
+
needs a deployment override. Never hardcode API keys,
|
|
59
62
|
tokens, webhook URLs, signing secrets, private Builder/internal data, customer
|
|
60
63
|
data, or credential-looking literals in source, docs, prompts, fixtures,
|
|
61
64
|
application state, action responses, or generated app content. Use
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { defineAction } from "@agent-native/core/action";
|
|
17
|
-
import {
|
|
17
|
+
import { writeAppStateForCurrentTab } from "@agent-native/core/application-state";
|
|
18
18
|
import { z } from "zod";
|
|
19
19
|
|
|
20
20
|
export default defineAction({
|
|
@@ -35,7 +35,7 @@ export default defineAction({
|
|
|
35
35
|
if (args.path) nav.path = args.path;
|
|
36
36
|
if (args.threadId) nav.threadId = args.threadId;
|
|
37
37
|
nav._writeId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
38
|
-
await
|
|
38
|
+
await writeAppStateForCurrentTab("navigate", nav);
|
|
39
39
|
return `Navigating to ${args.view || args.path}`;
|
|
40
40
|
},
|
|
41
41
|
});
|
|
@@ -38,7 +38,11 @@ connection exists:
|
|
|
38
38
|
register a `kind: "oauth"` entry so the shared UI renders Connect and the
|
|
39
39
|
runtime owns status, refresh, and reauthorization.
|
|
40
40
|
- **Deploy- or app-level configuration** - use deployment/runtime
|
|
41
|
-
configuration, not a per-user secret row.
|
|
41
|
+
configuration, not a per-user secret row. For a non-secret public setting
|
|
42
|
+
already represented by `AgentNativeConfig`, put the default in
|
|
43
|
+
`agent-native.config.ts` and use its `AGENT_NATIVE_CONFIG_<PATH>` alias only
|
|
44
|
+
for a deployment override. Never put a credential or provider key in that
|
|
45
|
+
public namespace.
|
|
42
46
|
- **Account, customer, manager, or other non-secret identifier** - store it as
|
|
43
47
|
scoped connection metadata or app data, not as a masked secret field.
|
|
44
48
|
|
|
@@ -55,7 +55,10 @@ Preview before `--apply`, commit `agent-native.ejections.json`, and never edit
|
|
|
55
55
|
ZIPs, screenshots, thumbnails, session replay chunks) in configured file/blob
|
|
56
56
|
storage and persist only URLs, ids, or handles.
|
|
57
57
|
- Store shared runtime configuration in the workspace root `.env`; use
|
|
58
|
-
`apps/<app>/.env` only for app-specific overrides.
|
|
58
|
+
`apps/<app>/.env` only for app-specific overrides. For public app behavior,
|
|
59
|
+
prefer the default in `agent-native.config.ts` and use the deterministic
|
|
60
|
+
`AGENT_NATIVE_CONFIG_<UPPER_SNAKE_PATH>` alias only when a non-secret value
|
|
61
|
+
needs a deployment override. Never hardcode API keys,
|
|
59
62
|
tokens, webhook URLs, signing secrets, private Builder/internal data, customer
|
|
60
63
|
data, or credential-looking literals in source, docs, prompts, fixtures,
|
|
61
64
|
application state, action responses, or generated app content. Use
|
|
@@ -38,7 +38,11 @@ connection exists:
|
|
|
38
38
|
register a `kind: "oauth"` entry so the shared UI renders Connect and the
|
|
39
39
|
runtime owns status, refresh, and reauthorization.
|
|
40
40
|
- **Deploy- or app-level configuration** - use deployment/runtime
|
|
41
|
-
configuration, not a per-user secret row.
|
|
41
|
+
configuration, not a per-user secret row. For a non-secret public setting
|
|
42
|
+
already represented by `AgentNativeConfig`, put the default in
|
|
43
|
+
`agent-native.config.ts` and use its `AGENT_NATIVE_CONFIG_<PATH>` alias only
|
|
44
|
+
for a deployment override. Never put a credential or provider key in that
|
|
45
|
+
public namespace.
|
|
42
46
|
- **Account, customer, manager, or other non-secret identifier** - store it as
|
|
43
47
|
scoped connection metadata or app data, not as a masked secret field.
|
|
44
48
|
|
|
@@ -38,7 +38,11 @@ connection exists:
|
|
|
38
38
|
register a `kind: "oauth"` entry so the shared UI renders Connect and the
|
|
39
39
|
runtime owns status, refresh, and reauthorization.
|
|
40
40
|
- **Deploy- or app-level configuration** - use deployment/runtime
|
|
41
|
-
configuration, not a per-user secret row.
|
|
41
|
+
configuration, not a per-user secret row. For a non-secret public setting
|
|
42
|
+
already represented by `AgentNativeConfig`, put the default in
|
|
43
|
+
`agent-native.config.ts` and use its `AGENT_NATIVE_CONFIG_<PATH>` alias only
|
|
44
|
+
for a deployment override. Never put a credential or provider key in that
|
|
45
|
+
public namespace.
|
|
42
46
|
- **Account, customer, manager, or other non-secret identifier** - store it as
|
|
43
47
|
scoped connection metadata or app data, not as a masked secret field.
|
|
44
48
|
|
|
@@ -55,7 +55,10 @@ Preview before `--apply`, commit `agent-native.ejections.json`, and never edit
|
|
|
55
55
|
ZIPs, screenshots, thumbnails, session replay chunks) in configured file/blob
|
|
56
56
|
storage and persist only URLs, ids, or handles.
|
|
57
57
|
- Store shared runtime configuration in the workspace root `.env`; use
|
|
58
|
-
`apps/<app>/.env` only for app-specific overrides.
|
|
58
|
+
`apps/<app>/.env` only for app-specific overrides. For public app behavior,
|
|
59
|
+
prefer the default in `agent-native.config.ts` and use the deterministic
|
|
60
|
+
`AGENT_NATIVE_CONFIG_<UPPER_SNAKE_PATH>` alias only when a non-secret value
|
|
61
|
+
needs a deployment override. Never hardcode API keys,
|
|
59
62
|
tokens, webhook URLs, signing secrets, private Builder/internal data, customer
|
|
60
63
|
data, or credential-looking literals in source, docs, prompts, fixtures,
|
|
61
64
|
application state, action responses, or generated app content. Use
|
|
@@ -11,6 +11,7 @@ export declare function loadAgentNativeConfigFile(cwd: string): Promise<AgentNat
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function loadWorkspaceAgentNativeConfigFile(cwd: string): Promise<AgentNativeConfigInput | undefined>;
|
|
13
13
|
export declare function loadResolvedAgentNativeConfig(cwd: string, context: AgentNativeConfigContext, options?: {
|
|
14
|
+
environment?: Record<string, string | undefined>;
|
|
14
15
|
loadProjectConfig?: boolean;
|
|
15
16
|
projectConfig?: AgentNativeConfigInput;
|
|
16
17
|
}): Promise<AgentNativeConfig>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
|
-
import { mergeAgentNativeConfigs, normalizeAgentNativeConfig, resolveAgentNativeConfig, } from "../config.js";
|
|
4
|
+
import { mergeAgentNativeConfigs, normalizeAgentNativeConfig, readAgentNativeConfigEnv, resolveAgentNativeConfig, } from "../config.js";
|
|
5
5
|
/** The canonical filename comes first; the remaining names stay compatible. */
|
|
6
6
|
export const AGENT_NATIVE_CONFIG_FILE_CANDIDATES = [
|
|
7
7
|
"agent-native.config.ts",
|
|
@@ -79,9 +79,9 @@ export async function loadResolvedAgentNativeConfig(cwd, context, options = {})
|
|
|
79
79
|
(options.loadProjectConfig === false
|
|
80
80
|
? undefined
|
|
81
81
|
: await loadAgentNativeConfigFile(cwd));
|
|
82
|
-
return resolveAgentNativeConfig(mergeAgentNativeConfigs(mergeAgentNativeConfigs(workspaceConfig
|
|
82
|
+
return resolveAgentNativeConfig(mergeAgentNativeConfigs(mergeAgentNativeConfigs(mergeAgentNativeConfigs(workspaceConfig
|
|
83
83
|
? resolveAgentNativeConfig(workspaceConfig, context)
|
|
84
|
-
: {}, readAgentNativeJsonConfig(cwd)), projectConfig ? resolveAgentNativeConfig(projectConfig, context) : {}), context);
|
|
84
|
+
: {}, readAgentNativeJsonConfig(cwd)), readAgentNativeConfigEnv(options.environment ?? process.env)), projectConfig ? resolveAgentNativeConfig(projectConfig, context) : {}), context);
|
|
85
85
|
}
|
|
86
86
|
function findConfigPath(cwd) {
|
|
87
87
|
return AGENT_NATIVE_CONFIG_FILE_CANDIDATES.map((filename) => path.join(cwd, filename)).find((candidate) => fs.existsSync(candidate));
|