@agent-native/core 0.45.1 → 0.47.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +1 -0
  2. package/dist/agent/production-agent.d.ts +28 -0
  3. package/dist/agent/production-agent.d.ts.map +1 -1
  4. package/dist/agent/production-agent.js +14 -7
  5. package/dist/agent/production-agent.js.map +1 -1
  6. package/dist/cli/skills.d.ts +2 -2
  7. package/dist/cli/skills.d.ts.map +1 -1
  8. package/dist/cli/skills.js +33 -0
  9. package/dist/cli/skills.js.map +1 -1
  10. package/dist/client/components/LiveCursorOverlay.d.ts +46 -0
  11. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -0
  12. package/dist/client/components/LiveCursorOverlay.js +137 -0
  13. package/dist/client/components/LiveCursorOverlay.js.map +1 -0
  14. package/dist/client/components/PresenceBar.d.ts +11 -1
  15. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  16. package/dist/client/components/PresenceBar.js +39 -7
  17. package/dist/client/components/PresenceBar.js.map +1 -1
  18. package/dist/client/components/RemoteSelectionRings.d.ts +43 -0
  19. package/dist/client/components/RemoteSelectionRings.d.ts.map +1 -0
  20. package/dist/client/components/RemoteSelectionRings.js +116 -0
  21. package/dist/client/components/RemoteSelectionRings.js.map +1 -0
  22. package/dist/client/index.d.ts +4 -0
  23. package/dist/client/index.d.ts.map +1 -1
  24. package/dist/client/index.js +5 -0
  25. package/dist/client/index.js.map +1 -1
  26. package/dist/coding-tools/run-code.d.ts +40 -0
  27. package/dist/coding-tools/run-code.d.ts.map +1 -0
  28. package/dist/coding-tools/run-code.js +511 -0
  29. package/dist/coding-tools/run-code.js.map +1 -0
  30. package/dist/collab/awareness.d.ts +25 -0
  31. package/dist/collab/awareness.d.ts.map +1 -1
  32. package/dist/collab/awareness.js +42 -5
  33. package/dist/collab/awareness.js.map +1 -1
  34. package/dist/collab/client.d.ts +19 -1
  35. package/dist/collab/client.d.ts.map +1 -1
  36. package/dist/collab/client.js +362 -57
  37. package/dist/collab/client.js.map +1 -1
  38. package/dist/collab/follow-mode.d.ts +56 -0
  39. package/dist/collab/follow-mode.d.ts.map +1 -0
  40. package/dist/collab/follow-mode.js +54 -0
  41. package/dist/collab/follow-mode.js.map +1 -0
  42. package/dist/collab/index.d.ts +3 -1
  43. package/dist/collab/index.d.ts.map +1 -1
  44. package/dist/collab/index.js +5 -1
  45. package/dist/collab/index.js.map +1 -1
  46. package/dist/collab/presence.d.ts +56 -0
  47. package/dist/collab/presence.d.ts.map +1 -0
  48. package/dist/collab/presence.js +98 -0
  49. package/dist/collab/presence.js.map +1 -0
  50. package/dist/collab/routes.d.ts.map +1 -1
  51. package/dist/collab/routes.js +33 -6
  52. package/dist/collab/routes.js.map +1 -1
  53. package/dist/collab/struct-routes.d.ts.map +1 -1
  54. package/dist/collab/struct-routes.js +24 -4
  55. package/dist/collab/struct-routes.js.map +1 -1
  56. package/dist/collab/ydoc-manager.d.ts +13 -0
  57. package/dist/collab/ydoc-manager.d.ts.map +1 -1
  58. package/dist/collab/ydoc-manager.js +51 -15
  59. package/dist/collab/ydoc-manager.js.map +1 -1
  60. package/dist/extensions/fetch-tool.d.ts.map +1 -1
  61. package/dist/extensions/fetch-tool.js +62 -7
  62. package/dist/extensions/fetch-tool.js.map +1 -1
  63. package/dist/extensions/web-search-tool.d.ts +41 -0
  64. package/dist/extensions/web-search-tool.d.ts.map +1 -0
  65. package/dist/extensions/web-search-tool.js +200 -0
  66. package/dist/extensions/web-search-tool.js.map +1 -0
  67. package/dist/provider-api/custom-registry.d.ts +92 -0
  68. package/dist/provider-api/custom-registry.d.ts.map +1 -0
  69. package/dist/provider-api/custom-registry.js +289 -0
  70. package/dist/provider-api/custom-registry.js.map +1 -0
  71. package/dist/provider-api/index.d.ts +80 -44
  72. package/dist/provider-api/index.d.ts.map +1 -1
  73. package/dist/provider-api/index.js +569 -18
  74. package/dist/provider-api/index.js.map +1 -1
  75. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  76. package/dist/secrets/register-framework-secrets.js +36 -3
  77. package/dist/secrets/register-framework-secrets.js.map +1 -1
  78. package/dist/server/agent-chat-plugin.d.ts +36 -0
  79. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  80. package/dist/server/agent-chat-plugin.js +119 -0
  81. package/dist/server/agent-chat-plugin.js.map +1 -1
  82. package/dist/server/collab-plugin.d.ts +6 -0
  83. package/dist/server/collab-plugin.d.ts.map +1 -1
  84. package/dist/server/collab-plugin.js +105 -5
  85. package/dist/server/collab-plugin.js.map +1 -1
  86. package/dist/server/poll-events.d.ts +5 -0
  87. package/dist/server/poll-events.d.ts.map +1 -1
  88. package/dist/server/poll-events.js +27 -4
  89. package/dist/server/poll-events.js.map +1 -1
  90. package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +185 -37
  91. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +12 -2
  92. package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +185 -37
  93. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +12 -2
  94. package/dist/workspace-files/index.d.ts +4 -0
  95. package/dist/workspace-files/index.d.ts.map +1 -0
  96. package/dist/workspace-files/index.js +4 -0
  97. package/dist/workspace-files/index.js.map +1 -0
  98. package/dist/workspace-files/schema.d.ts +195 -0
  99. package/dist/workspace-files/schema.d.ts.map +1 -0
  100. package/dist/workspace-files/schema.js +48 -0
  101. package/dist/workspace-files/schema.js.map +1 -0
  102. package/dist/workspace-files/store.d.ts +89 -0
  103. package/dist/workspace-files/store.d.ts.map +1 -0
  104. package/dist/workspace-files/store.js +298 -0
  105. package/dist/workspace-files/store.js.map +1 -0
  106. package/dist/workspace-files/tool.d.ts +15 -0
  107. package/dist/workspace-files/tool.d.ts.map +1 -0
  108. package/dist/workspace-files/tool.js +226 -0
  109. package/dist/workspace-files/tool.js.map +1 -0
  110. package/docs/content/real-time-collaboration.md +481 -97
  111. package/package.json +2 -1
  112. package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +185 -37
  113. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +12 -2
  114. package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +185 -37
  115. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"register-framework-secrets.d.ts","sourceRoot":"","sources":["../../src/secrets/register-framework-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C"}
1
+ {"version":3,"file":"register-framework-secrets.d.ts","sourceRoot":"","sources":["../../src/secrets/register-framework-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,wBAAgB,wBAAwB,IAAI,IAAI,CA6C/C"}
@@ -14,9 +14,42 @@
14
14
  * gateway (or Groq as a BYOK fallback), so the framework no longer registers
15
15
  * the OpenAI key. Templates that need it (e.g. Clips) register it themselves.
16
16
  */
17
+ import { getRequiredSecret, registerRequiredSecret } from "./register.js";
17
18
  export function registerFrameworkSecrets() {
18
- // No framework-level secrets at this time.
19
- // Templates register their own keys via `registerRequiredSecret` in
20
- // their own `register-secrets.ts`.
19
+ // Web-search tool backends optional; the tool selects the first
20
+ // configured key at call time (Brave Tavily → Exa).
21
+ const webSearchKeys = [
22
+ {
23
+ key: "BRAVE_SEARCH_API_KEY",
24
+ label: "Brave Search API Key",
25
+ description: "Enables the web-search agent tool via Brave Search. At least one of BRAVE_SEARCH_API_KEY, TAVILY_API_KEY, or EXA_API_KEY is needed.",
26
+ docsUrl: "https://brave.com/search/api/",
27
+ },
28
+ {
29
+ key: "TAVILY_API_KEY",
30
+ label: "Tavily API Key",
31
+ description: "Enables the web-search agent tool via Tavily. Used as fallback when BRAVE_SEARCH_API_KEY is not set.",
32
+ docsUrl: "https://tavily.com/",
33
+ },
34
+ {
35
+ key: "EXA_API_KEY",
36
+ label: "Exa API Key",
37
+ description: "Enables the web-search agent tool via Exa. Used as fallback when neither BRAVE_SEARCH_API_KEY nor TAVILY_API_KEY is set.",
38
+ docsUrl: "https://exa.ai/",
39
+ },
40
+ ];
41
+ for (const entry of webSearchKeys) {
42
+ if (!getRequiredSecret(entry.key)) {
43
+ registerRequiredSecret({
44
+ key: entry.key,
45
+ label: entry.label,
46
+ description: entry.description,
47
+ docsUrl: entry.docsUrl,
48
+ scope: "workspace",
49
+ kind: "api-key",
50
+ required: false,
51
+ });
52
+ }
53
+ }
21
54
  }
22
55
  //# sourceMappingURL=register-framework-secrets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-framework-secrets.js","sourceRoot":"","sources":["../../src/secrets/register-framework-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,wBAAwB;IACtC,2CAA2C;IAC3C,oEAAoE;IACpE,mCAAmC;AACrC,CAAC","sourcesContent":["/**\n * Framework-level secret registrations.\n *\n * Side-effect module — imported by the core-routes plugin at boot so the\n * sidebar settings UI and the `/_agent-native/secrets` list route surface the\n * relevant keys in every template.\n *\n * Each call uses a `getRequiredSecret` guard so a template that has already\n * registered the same key (often with stricter settings like `required: true`)\n * wins — the framework registration is a fallback, not an override.\n *\n * NOTE: The framework previously registered OPENAI_API_KEY here for Whisper\n * voice transcription. Voice transcription now routes through the Builder.io\n * gateway (or Groq as a BYOK fallback), so the framework no longer registers\n * the OpenAI key. Templates that need it (e.g. Clips) register it themselves.\n */\n\nexport function registerFrameworkSecrets(): void {\n // No framework-level secrets at this time.\n // Templates register their own keys via `registerRequiredSecret` in\n // their own `register-secrets.ts`.\n}\n"]}
1
+ {"version":3,"file":"register-framework-secrets.js","sourceRoot":"","sources":["../../src/secrets/register-framework-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,UAAU,wBAAwB;IACtC,kEAAkE;IAClE,sDAAsD;IACtD,MAAM,aAAa,GAKd;QACH;YACE,GAAG,EAAE,sBAAsB;YAC3B,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,qIAAqI;YACvI,OAAO,EAAE,+BAA+B;SACzC;QACD;YACE,GAAG,EAAE,gBAAgB;YACrB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACT,sGAAsG;YACxG,OAAO,EAAE,qBAAqB;SAC/B;QACD;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,aAAa;YACpB,WAAW,EACT,0HAA0H;YAC5H,OAAO,EAAE,iBAAiB;SAC3B;KACF,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,sBAAsB,CAAC;gBACrB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["/**\n * Framework-level secret registrations.\n *\n * Side-effect module — imported by the core-routes plugin at boot so the\n * sidebar settings UI and the `/_agent-native/secrets` list route surface the\n * relevant keys in every template.\n *\n * Each call uses a `getRequiredSecret` guard so a template that has already\n * registered the same key (often with stricter settings like `required: true`)\n * wins — the framework registration is a fallback, not an override.\n *\n * NOTE: The framework previously registered OPENAI_API_KEY here for Whisper\n * voice transcription. Voice transcription now routes through the Builder.io\n * gateway (or Groq as a BYOK fallback), so the framework no longer registers\n * the OpenAI key. Templates that need it (e.g. Clips) register it themselves.\n */\n\nimport { getRequiredSecret, registerRequiredSecret } from \"./register.js\";\n\nexport function registerFrameworkSecrets(): void {\n // Web-search tool backends — optional; the tool selects the first\n // configured key at call time (Brave → Tavily → Exa).\n const webSearchKeys: Array<{\n key: string;\n label: string;\n description: string;\n docsUrl: string;\n }> = [\n {\n key: \"BRAVE_SEARCH_API_KEY\",\n label: \"Brave Search API Key\",\n description:\n \"Enables the web-search agent tool via Brave Search. At least one of BRAVE_SEARCH_API_KEY, TAVILY_API_KEY, or EXA_API_KEY is needed.\",\n docsUrl: \"https://brave.com/search/api/\",\n },\n {\n key: \"TAVILY_API_KEY\",\n label: \"Tavily API Key\",\n description:\n \"Enables the web-search agent tool via Tavily. Used as fallback when BRAVE_SEARCH_API_KEY is not set.\",\n docsUrl: \"https://tavily.com/\",\n },\n {\n key: \"EXA_API_KEY\",\n label: \"Exa API Key\",\n description:\n \"Enables the web-search agent tool via Exa. Used as fallback when neither BRAVE_SEARCH_API_KEY nor TAVILY_API_KEY is set.\",\n docsUrl: \"https://exa.ai/\",\n },\n ];\n\n for (const entry of webSearchKeys) {\n if (!getRequiredSecret(entry.key)) {\n registerRequiredSecret({\n key: entry.key,\n label: entry.label,\n description: entry.description,\n docsUrl: entry.docsUrl,\n scope: \"workspace\",\n kind: \"api-key\",\n required: false,\n });\n }\n }\n}\n"]}
@@ -198,6 +198,42 @@ export interface AgentChatPluginOptions {
198
198
  context: import("../a2a/types.js").A2AHandlerContext;
199
199
  userEmail: string | undefined;
200
200
  }) => import("../a2a/types.js").Message | string | null | undefined | Promise<import("../a2a/types.js").Message | string | null | undefined>;
201
+ /**
202
+ * Code-execution capability for the production agent.
203
+ *
204
+ * - `"off"` (default) — no code-execution tools in production.
205
+ * - `"sandboxed"` — registers the `run-code` tool (isolated Node.js sandbox
206
+ * with a bridge to allowlisted registered tools). Safe for shared or
207
+ * hosted deployments.
208
+ * - `"trusted"` — registers both the full coding tool registry
209
+ * (bash / read / edit / write) and the `run-code` sandbox. Only use in
210
+ * single-tenant or operator-controlled deployments where full shell access
211
+ * to the host machine is intentional.
212
+ *
213
+ * The `AGENT_PROD_CODE_EXECUTION` environment variable (`"trusted"`,
214
+ * `"sandboxed"`, or `"off"`) takes precedence over this option, allowing
215
+ * per-deployment overrides without code changes.
216
+ *
217
+ * Dev-mode behavior is unchanged — both the coding tools and `run-code` are
218
+ * always available when the environment allows toggling.
219
+ */
220
+ codeExecution?: {
221
+ production?: "off" | "sandboxed" | "trusted";
222
+ /**
223
+ * Extra registered-tool names the sandbox bridge may forward (beyond the
224
+ * default allowlist: provider-api-request, provider-api-docs,
225
+ * provider-api-catalog, web-request).
226
+ */
227
+ bridgeTools?: string[];
228
+ };
229
+ /**
230
+ * App-level default tool-call limits. Individual actions override these with
231
+ * their own `timeoutMs` / `maxResultChars` declarations.
232
+ */
233
+ toolLimits?: {
234
+ timeoutMs?: number;
235
+ maxResultChars?: number;
236
+ };
201
237
  }
202
238
  export declare const _agentChatPromptSectionsForTests: {
203
239
  frameworkCore: string;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"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"}
@@ -2821,6 +2821,23 @@ export function createAgentChatPlugin(options) {
2821
2821
  });
2822
2822
  }
2823
2823
  catch { }
2824
+ let webSearchTool = {};
2825
+ try {
2826
+ const { createWebSearchToolEntry } = await import("../extensions/web-search-tool.js");
2827
+ const { resolveCredential } = await import("../credentials/index.js");
2828
+ const { getCredentialContext: getCredCtx } = await import("./request-context.js");
2829
+ webSearchTool = createWebSearchToolEntry({
2830
+ resolveCredential,
2831
+ getCredentialContext: () => getCredCtx(),
2832
+ });
2833
+ }
2834
+ catch { }
2835
+ let workspaceFilesTool = {};
2836
+ try {
2837
+ const { createWorkspaceFilesTool } = await import("../workspace-files/tool.js");
2838
+ workspaceFilesTool = createWorkspaceFilesTool();
2839
+ }
2840
+ catch { }
2824
2841
  let toolActions = {};
2825
2842
  try {
2826
2843
  const { createExtensionActionEntries } = await import("../extensions/actions.js");
@@ -2865,6 +2882,7 @@ export function createAgentChatPlugin(options) {
2865
2882
  ...notificationTools,
2866
2883
  ...progressTools,
2867
2884
  ...fetchTool,
2885
+ ...webSearchTool,
2868
2886
  ...toolActions,
2869
2887
  ...browserSessionTools,
2870
2888
  ...browserTools,
@@ -2885,6 +2903,7 @@ export function createAgentChatPlugin(options) {
2885
2903
  ...notificationTools,
2886
2904
  ...progressTools,
2887
2905
  ...fetchTool,
2906
+ ...webSearchTool,
2888
2907
  ...toolActions,
2889
2908
  ...browserSessionTools,
2890
2909
  ...browserTools,
@@ -2916,6 +2935,7 @@ export function createAgentChatPlugin(options) {
2916
2935
  ...notificationTools,
2917
2936
  ...progressTools,
2918
2937
  ...fetchTool,
2938
+ ...webSearchTool,
2919
2939
  ...toolActions,
2920
2940
  ...browserSessionTools,
2921
2941
  ...browserTools,
@@ -3699,6 +3719,77 @@ export function createAgentChatPlugin(options) {
3699
3719
  // Code-mode toggle), so the agent has the same DB-admin capability the UI
3700
3720
  // does whenever it is available — true agent/UI parity, in App or Code mode.
3701
3721
  const dbAdminScripts = process.env.NODE_ENV === "development" ? createDbAdminAgentTools() : {};
3722
+ // -----------------------------------------------------------------------
3723
+ // Production code-execution mode resolution.
3724
+ //
3725
+ // Priority (highest → lowest):
3726
+ // 1. AGENT_PROD_CODE_EXECUTION env var ("trusted" | "sandboxed" | "off")
3727
+ // 2. options.codeExecution.production
3728
+ // 3. Default: "off"
3729
+ //
3730
+ // Dev mode ignores this entirely — dev always gets the full coding surface.
3731
+ // -----------------------------------------------------------------------
3732
+ const rawEnvCodeExec = (process.env.AGENT_PROD_CODE_EXECUTION ?? "")
3733
+ .toLowerCase()
3734
+ .trim();
3735
+ const resolvedProdCodeExec = rawEnvCodeExec === "trusted"
3736
+ ? "trusted"
3737
+ : rawEnvCodeExec === "sandboxed"
3738
+ ? "sandboxed"
3739
+ : rawEnvCodeExec === "off"
3740
+ ? "off"
3741
+ : (options?.codeExecution?.production ?? "off");
3742
+ // Forward-declaration for the production run-code bridge supplier.
3743
+ // Must come before createRunCodeEntry so the closure can capture it.
3744
+ let prodRunCodeToolActions = {};
3745
+ // Sandboxed run-code tool — available in "sandboxed" or "trusted" prod
3746
+ // modes and always in dev mode.
3747
+ const runCodeTool = {};
3748
+ try {
3749
+ const { createRunCodeEntry } = await import("../coding-tools/run-code.js");
3750
+ runCodeTool["run-code"] = createRunCodeEntry(
3751
+ // Supplier is evaluated at invocation time so runtime additions to
3752
+ // prodActions (e.g. MCP sync) are visible to the bridge.
3753
+ () => prodRunCodeToolActions, { bridgeTools: options?.codeExecution?.bridgeTools });
3754
+ }
3755
+ catch {
3756
+ // Module unavailable (e.g. bundled browser build) — skip silently.
3757
+ }
3758
+ // Full coding tool registry (bash/read/edit/write) for "trusted" prod.
3759
+ // In dev mode this is handled separately via devHandler below.
3760
+ const prodCodingTools = {};
3761
+ if (resolvedProdCodeExec === "trusted" && !canToggle) {
3762
+ try {
3763
+ const { createCodingToolRegistry } = await import("../coding-tools/index.js");
3764
+ const codingRegistry = createCodingToolRegistry({
3765
+ cwd: process.cwd(),
3766
+ beforeBash: async ({ command }) => {
3767
+ // In plan mode the agent loop blocks via isPlanModeToolCallAllowed;
3768
+ // this hook is a belt-and-suspenders guard inside "trusted" production.
3769
+ return null;
3770
+ },
3771
+ });
3772
+ Object.assign(prodCodingTools, codingRegistry);
3773
+ }
3774
+ catch {
3775
+ // Coding tools unavailable — skip silently.
3776
+ }
3777
+ }
3778
+ // Forward-declaration: populated after devActions is assembled below.
3779
+ // Must be declared BEFORE devRunCodeTool so the closure can close over it.
3780
+ let devRunCodeToolActions = {};
3781
+ // Always register run-code in dev mode (when the coding module loads).
3782
+ const devRunCodeTool = {};
3783
+ if (canToggle) {
3784
+ try {
3785
+ const { createRunCodeEntry } = await import("../coding-tools/run-code.js");
3786
+ // devActions is not yet defined at this point; we use a late-binding
3787
+ // supplier so devRunCodeTool can reference the devActions registry
3788
+ // once it is built below (see devHandler block).
3789
+ devRunCodeTool["run-code"] = createRunCodeEntry(() => devRunCodeToolActions, { bridgeTools: options?.codeExecution?.bridgeTools });
3790
+ }
3791
+ catch { }
3792
+ }
3702
3793
  const prodActions = attachToolSearch({
3703
3794
  ...templateScripts,
3704
3795
  ...resourceScripts,
@@ -3716,11 +3807,20 @@ export function createAgentChatPlugin(options) {
3716
3807
  ...notificationTools,
3717
3808
  ...progressTools,
3718
3809
  ...fetchTool,
3810
+ ...webSearchTool,
3811
+ ...workspaceFilesTool,
3719
3812
  ...toolActions,
3720
3813
  ...browserSessionTools,
3721
3814
  ...browserTools,
3722
3815
  ...mcpActionEntries,
3816
+ // Sandboxed run-code tool in production when mode allows it.
3817
+ ...(resolvedProdCodeExec !== "off" && !canToggle ? runCodeTool : {}),
3818
+ // Full coding tools in production when mode is "trusted".
3819
+ ...(!canToggle ? prodCodingTools : {}),
3723
3820
  });
3821
+ // Wire the prod run-code bridge supplier so it sees the fully-assembled
3822
+ // prodActions registry (including MCP entries added at runtime).
3823
+ prodRunCodeToolActions = prodActions;
3724
3824
  // Keep the prod action dict's MCP entries in sync when the manager's
3725
3825
  // server set changes at runtime (e.g. a user adds a remote MCP server
3726
3826
  // through the settings UI). getEngineTools() in production-agent re-reads
@@ -3797,6 +3897,12 @@ When the user asks to add a feature, edit a component, fix a bug in the app itse
3797
3897
 
3798
3898
  Non-code requests are still fine on this surface: read data, navigate the UI, summarize, search, create/update extensions (sandboxed Alpine.js mini-apps stored in SQL), and call template actions. The restriction is specifically about direct edits to the host app's own source files.
3799
3899
  </app-rendered-chat-no-direct-code-edits>`;
3900
+ // System-prompt note appended when production code execution is enabled.
3901
+ const prodCodeExecPromptNote = !canToggle && resolvedProdCodeExec !== "off"
3902
+ ? resolvedProdCodeExec === "trusted"
3903
+ ? "\n\n<code-execution-mode>Full shell access is enabled (trusted mode). You have bash, read, edit, write, and run-code tools available. Use bash for file discovery, running tests and builds, and project CLIs. Use run-code for sandboxed JavaScript analytics. Use `pnpm action <name>` in bash to invoke registered app actions from the shell.</code-execution-mode>"
3904
+ : "\n\n<code-execution-mode>Sandboxed code execution is enabled. The run-code tool lets you execute isolated JavaScript (ESM, top-level await) to fetch, aggregate, and reduce data. Use providerFetch() and webFetch() inside run-code for authenticated provider calls.</code-execution-mode>"
3905
+ : "";
3800
3906
  const prodHandler = createProductionAgentHandler({
3801
3907
  actions: leanPrompt ? leanActions : prodActions,
3802
3908
  systemPrompt: async (event) => {
@@ -3809,6 +3915,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3809
3915
  return setSystemPromptOnContext(leanBasePrompt +
3810
3916
  runtimeContext +
3811
3917
  codeEditingSurfaceRestriction +
3918
+ prodCodeExecPromptNote +
3812
3919
  extra);
3813
3920
  }
3814
3921
  const resources = await loadResourcesForPrompt(owner, lazyContext, options?.appId);
@@ -3822,6 +3929,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3822
3929
  resources +
3823
3930
  schemaBlock +
3824
3931
  codeEditingSurfaceRestriction +
3932
+ prodCodeExecPromptNote +
3825
3933
  extra);
3826
3934
  },
3827
3935
  model: options?.model,
@@ -3831,6 +3939,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3831
3939
  finalResponseGuard: options?.finalResponseGuard,
3832
3940
  prepareRequest: options?.prepareRequest,
3833
3941
  skipFilesContext: leanPrompt,
3942
+ ...(options?.toolLimits ? { toolLimits: options.toolLimits } : {}),
3834
3943
  onEngineResolved: (engine, model) => {
3835
3944
  const runCtx = ensureRequestRunContext();
3836
3945
  if (runCtx) {
@@ -3923,6 +4032,8 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3923
4032
  ...notificationTools,
3924
4033
  ...progressTools,
3925
4034
  ...fetchTool,
4035
+ ...webSearchTool,
4036
+ ...workspaceFilesTool,
3926
4037
  ...toolActions,
3927
4038
  ...browserSessionTools,
3928
4039
  ...browserTools,
@@ -3931,7 +4042,12 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3931
4042
  // Full-database admin tools (NODE_ENV=development gate — see
3932
4043
  // dbAdminScripts; also in prodActions so App mode has them too).
3933
4044
  ...dbAdminScripts,
4045
+ // run-code sandbox is always available in dev mode.
4046
+ ...devRunCodeTool,
3934
4047
  });
4048
+ // Wire the late-binding supplier for devRunCodeTool so the bridge can
4049
+ // call back into the fully-assembled devActions registry.
4050
+ devRunCodeToolActions = devActions;
3935
4051
  // Keep dev action dict in sync with runtime MCP additions. When
3936
4052
  // native-actions mode is on (lean or `nativeActionsInDev`), devActions
3937
4053
  // === prodActions so the prod listener already covers it.
@@ -3961,6 +4077,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
3961
4077
  finalResponseGuard: options?.finalResponseGuard,
3962
4078
  prepareRequest: options?.prepareRequest,
3963
4079
  skipFilesContext: leanPrompt,
4080
+ ...(options?.toolLimits ? { toolLimits: options.toolLimits } : {}),
3964
4081
  onEngineResolved: (engine, model) => {
3965
4082
  const runCtx = ensureRequestRunContext();
3966
4083
  if (runCtx) {
@@ -5407,6 +5524,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
5407
5524
  ...notificationTools,
5408
5525
  ...progressTools,
5409
5526
  ...fetchTool,
5527
+ ...webSearchTool,
5410
5528
  ...toolActions,
5411
5529
  }),
5412
5530
  getSystemPrompt: async (owner) => {
@@ -5449,6 +5567,7 @@ Non-code requests are still fine on this surface: read data, navigate the UI, su
5449
5567
  ...notificationTools,
5450
5568
  ...progressTools,
5451
5569
  ...fetchTool,
5570
+ ...webSearchTool,
5452
5571
  ...toolActions,
5453
5572
  }),
5454
5573
  getSystemPrompt: async (owner) => {