@agent-native/core 0.52.0 → 0.53.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.
Files changed (212) hide show
  1. package/README.md +41 -95
  2. package/blueprints/action/crud.md +98 -0
  3. package/blueprints/channel/discord.md +74 -0
  4. package/blueprints/provider/stripe.md +87 -0
  5. package/blueprints/sandbox/docker.md +78 -0
  6. package/dist/action.d.ts +24 -0
  7. package/dist/action.d.ts.map +1 -1
  8. package/dist/action.js +4 -0
  9. package/dist/action.js.map +1 -1
  10. package/dist/agent/observational-memory/compactor.d.ts +43 -0
  11. package/dist/agent/observational-memory/compactor.d.ts.map +1 -0
  12. package/dist/agent/observational-memory/compactor.js +50 -0
  13. package/dist/agent/observational-memory/compactor.js.map +1 -0
  14. package/dist/agent/observational-memory/config.d.ts +37 -0
  15. package/dist/agent/observational-memory/config.d.ts.map +1 -0
  16. package/dist/agent/observational-memory/config.js +48 -0
  17. package/dist/agent/observational-memory/config.js.map +1 -0
  18. package/dist/agent/observational-memory/index.d.ts +26 -0
  19. package/dist/agent/observational-memory/index.d.ts.map +1 -0
  20. package/dist/agent/observational-memory/index.js +25 -0
  21. package/dist/agent/observational-memory/index.js.map +1 -0
  22. package/dist/agent/observational-memory/internal-run.d.ts +37 -0
  23. package/dist/agent/observational-memory/internal-run.d.ts.map +1 -0
  24. package/dist/agent/observational-memory/internal-run.js +59 -0
  25. package/dist/agent/observational-memory/internal-run.js.map +1 -0
  26. package/dist/agent/observational-memory/message-text.d.ts +13 -0
  27. package/dist/agent/observational-memory/message-text.d.ts.map +1 -0
  28. package/dist/agent/observational-memory/message-text.js +46 -0
  29. package/dist/agent/observational-memory/message-text.js.map +1 -0
  30. package/dist/agent/observational-memory/migrations.d.ts +13 -0
  31. package/dist/agent/observational-memory/migrations.d.ts.map +1 -0
  32. package/dist/agent/observational-memory/migrations.js +43 -0
  33. package/dist/agent/observational-memory/migrations.js.map +1 -0
  34. package/dist/agent/observational-memory/observer.d.ts +37 -0
  35. package/dist/agent/observational-memory/observer.d.ts.map +1 -0
  36. package/dist/agent/observational-memory/observer.js +82 -0
  37. package/dist/agent/observational-memory/observer.js.map +1 -0
  38. package/dist/agent/observational-memory/plugin.d.ts +16 -0
  39. package/dist/agent/observational-memory/plugin.d.ts.map +1 -0
  40. package/dist/agent/observational-memory/plugin.js +26 -0
  41. package/dist/agent/observational-memory/plugin.js.map +1 -0
  42. package/dist/agent/observational-memory/prompts.d.ts +27 -0
  43. package/dist/agent/observational-memory/prompts.d.ts.map +1 -0
  44. package/dist/agent/observational-memory/prompts.js +42 -0
  45. package/dist/agent/observational-memory/prompts.js.map +1 -0
  46. package/dist/agent/observational-memory/read.d.ts +47 -0
  47. package/dist/agent/observational-memory/read.d.ts.map +1 -0
  48. package/dist/agent/observational-memory/read.js +99 -0
  49. package/dist/agent/observational-memory/read.js.map +1 -0
  50. package/dist/agent/observational-memory/reflector.d.ts +31 -0
  51. package/dist/agent/observational-memory/reflector.d.ts.map +1 -0
  52. package/dist/agent/observational-memory/reflector.js +76 -0
  53. package/dist/agent/observational-memory/reflector.js.map +1 -0
  54. package/dist/agent/observational-memory/schema.d.ts +267 -0
  55. package/dist/agent/observational-memory/schema.d.ts.map +1 -0
  56. package/dist/agent/observational-memory/schema.js +48 -0
  57. package/dist/agent/observational-memory/schema.js.map +1 -0
  58. package/dist/agent/observational-memory/store.d.ts +52 -0
  59. package/dist/agent/observational-memory/store.d.ts.map +1 -0
  60. package/dist/agent/observational-memory/store.js +197 -0
  61. package/dist/agent/observational-memory/store.js.map +1 -0
  62. package/dist/agent/observational-memory/types.d.ts +61 -0
  63. package/dist/agent/observational-memory/types.d.ts.map +1 -0
  64. package/dist/agent/observational-memory/types.js +9 -0
  65. package/dist/agent/observational-memory/types.js.map +1 -0
  66. package/dist/agent/production-agent.d.ts +15 -0
  67. package/dist/agent/production-agent.d.ts.map +1 -1
  68. package/dist/agent/production-agent.js +240 -1
  69. package/dist/agent/production-agent.js.map +1 -1
  70. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  71. package/dist/agent/run-loop-with-resume.js +49 -0
  72. package/dist/agent/run-loop-with-resume.js.map +1 -1
  73. package/dist/agent/run-store.d.ts +17 -0
  74. package/dist/agent/run-store.d.ts.map +1 -1
  75. package/dist/agent/run-store.js +55 -0
  76. package/dist/agent/run-store.js.map +1 -1
  77. package/dist/agent/runtime-context.d.ts +30 -0
  78. package/dist/agent/runtime-context.d.ts.map +1 -1
  79. package/dist/agent/runtime-context.js +54 -1
  80. package/dist/agent/runtime-context.js.map +1 -1
  81. package/dist/agent/tool-call-journal.d.ts +101 -0
  82. package/dist/agent/tool-call-journal.d.ts.map +1 -0
  83. package/dist/agent/tool-call-journal.js +214 -0
  84. package/dist/agent/tool-call-journal.js.map +1 -0
  85. package/dist/agent/types.d.ts +24 -0
  86. package/dist/agent/types.d.ts.map +1 -1
  87. package/dist/agent/types.js.map +1 -1
  88. package/dist/cli/add.d.ts +109 -0
  89. package/dist/cli/add.d.ts.map +1 -0
  90. package/dist/cli/add.js +352 -0
  91. package/dist/cli/add.js.map +1 -0
  92. package/dist/cli/connect.d.ts +2 -2
  93. package/dist/cli/connect.d.ts.map +1 -1
  94. package/dist/cli/connect.js +92 -24
  95. package/dist/cli/connect.js.map +1 -1
  96. package/dist/cli/eval.d.ts +17 -0
  97. package/dist/cli/eval.d.ts.map +1 -0
  98. package/dist/cli/eval.js +121 -0
  99. package/dist/cli/eval.js.map +1 -0
  100. package/dist/cli/index.js +44 -3
  101. package/dist/cli/index.js.map +1 -1
  102. package/dist/cli/mcp.d.ts.map +1 -1
  103. package/dist/cli/mcp.js +11 -5
  104. package/dist/cli/mcp.js.map +1 -1
  105. package/dist/cli/plan-local.d.ts +66 -5
  106. package/dist/cli/plan-local.d.ts.map +1 -1
  107. package/dist/cli/plan-local.js +495 -19
  108. package/dist/cli/plan-local.js.map +1 -1
  109. package/dist/cli/skills.d.ts +2 -2
  110. package/dist/cli/skills.d.ts.map +1 -1
  111. package/dist/cli/skills.js +70 -59
  112. package/dist/cli/skills.js.map +1 -1
  113. package/dist/client/AssistantChat.d.ts.map +1 -1
  114. package/dist/client/AssistantChat.js +118 -92
  115. package/dist/client/AssistantChat.js.map +1 -1
  116. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  117. package/dist/client/agent-chat-adapter.js +16 -0
  118. package/dist/client/agent-chat-adapter.js.map +1 -1
  119. package/dist/client/chat/tool-call-display.d.ts +20 -1
  120. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  121. package/dist/client/chat/tool-call-display.js +32 -7
  122. package/dist/client/chat/tool-call-display.js.map +1 -1
  123. package/dist/client/sse-event-processor.d.ts +13 -0
  124. package/dist/client/sse-event-processor.d.ts.map +1 -1
  125. package/dist/client/sse-event-processor.js +21 -0
  126. package/dist/client/sse-event-processor.js.map +1 -1
  127. package/dist/db/client.d.ts +4 -2
  128. package/dist/db/client.d.ts.map +1 -1
  129. package/dist/db/client.js +6 -4
  130. package/dist/db/client.js.map +1 -1
  131. package/dist/deploy/route-discovery.d.ts.map +1 -1
  132. package/dist/deploy/route-discovery.js +1 -0
  133. package/dist/deploy/route-discovery.js.map +1 -1
  134. package/dist/eval/agent-runner.d.ts +63 -0
  135. package/dist/eval/agent-runner.d.ts.map +1 -0
  136. package/dist/eval/agent-runner.js +142 -0
  137. package/dist/eval/agent-runner.js.map +1 -0
  138. package/dist/eval/define-eval.d.ts +29 -0
  139. package/dist/eval/define-eval.d.ts.map +1 -0
  140. package/dist/eval/define-eval.js +43 -0
  141. package/dist/eval/define-eval.js.map +1 -0
  142. package/dist/eval/index.d.ts +18 -0
  143. package/dist/eval/index.d.ts.map +1 -0
  144. package/dist/eval/index.js +17 -0
  145. package/dist/eval/index.js.map +1 -0
  146. package/dist/eval/report.d.ts +8 -0
  147. package/dist/eval/report.d.ts.map +1 -0
  148. package/dist/eval/report.js +44 -0
  149. package/dist/eval/report.js.map +1 -0
  150. package/dist/eval/runner.d.ts +67 -0
  151. package/dist/eval/runner.d.ts.map +1 -0
  152. package/dist/eval/runner.js +256 -0
  153. package/dist/eval/runner.js.map +1 -0
  154. package/dist/eval/scorer.d.ts +83 -0
  155. package/dist/eval/scorer.d.ts.map +1 -0
  156. package/dist/eval/scorer.js +195 -0
  157. package/dist/eval/scorer.js.map +1 -0
  158. package/dist/eval/types.d.ts +162 -0
  159. package/dist/eval/types.d.ts.map +1 -0
  160. package/dist/eval/types.js +20 -0
  161. package/dist/eval/types.js.map +1 -0
  162. package/dist/observability/traces.d.ts.map +1 -1
  163. package/dist/observability/traces.js +100 -1
  164. package/dist/observability/traces.js.map +1 -1
  165. package/dist/observability/tracing.d.ts +73 -0
  166. package/dist/observability/tracing.d.ts.map +1 -0
  167. package/dist/observability/tracing.js +126 -0
  168. package/dist/observability/tracing.js.map +1 -0
  169. package/dist/onboarding/default-steps.d.ts.map +1 -1
  170. package/dist/onboarding/default-steps.js +4 -1
  171. package/dist/onboarding/default-steps.js.map +1 -1
  172. package/dist/provider-api/actions/query-staged-dataset.d.ts +1 -1
  173. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  174. package/dist/scripts/agent-engines/list-agent-engines.js +10 -3
  175. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  176. package/dist/server/action-discovery.d.ts.map +1 -1
  177. package/dist/server/action-discovery.js +4 -0
  178. package/dist/server/action-discovery.js.map +1 -1
  179. package/dist/server/agent-chat-plugin.d.ts +9 -0
  180. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  181. package/dist/server/agent-chat-plugin.js +118 -110
  182. package/dist/server/agent-chat-plugin.js.map +1 -1
  183. package/dist/server/agent-teams.d.ts +62 -0
  184. package/dist/server/agent-teams.d.ts.map +1 -1
  185. package/dist/server/agent-teams.js +99 -2
  186. package/dist/server/agent-teams.js.map +1 -1
  187. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  188. package/dist/server/core-routes-plugin.js +7 -4
  189. package/dist/server/core-routes-plugin.js.map +1 -1
  190. package/dist/server/credential-provider.d.ts.map +1 -1
  191. package/dist/server/credential-provider.js +2 -0
  192. package/dist/server/credential-provider.js.map +1 -1
  193. package/dist/server/framework-request-handler.d.ts.map +1 -1
  194. package/dist/server/framework-request-handler.js +33 -1
  195. package/dist/server/framework-request-handler.js.map +1 -1
  196. package/dist/server/index.d.ts +1 -0
  197. package/dist/server/index.d.ts.map +1 -1
  198. package/dist/server/index.js +1 -0
  199. package/dist/server/index.js.map +1 -1
  200. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +10 -0
  201. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +20 -0
  202. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  203. package/docs/content/agent-teams.md +32 -0
  204. package/docs/content/blueprint-installer.md +73 -0
  205. package/docs/content/evals.md +141 -0
  206. package/docs/content/pr-visual-recap.md +7 -4
  207. package/docs/content/sandbox-adapters.md +134 -0
  208. package/docs/content/template-plan.md +20 -8
  209. package/package.json +5 -1
  210. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +10 -0
  211. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +20 -0
  212. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
@@ -21,7 +21,7 @@ import { resourceList, resourceListAccessible, resourceGet, resourceGetByPath, e
21
21
  import { getFrontmatterValue, getSkillNameFromPath, parseFrontmatter, } from "../resources/metadata.js";
22
22
  import nodePath from "node:path";
23
23
  import { readBody } from "./h3-helpers.js";
24
- import { AGENT_TEAM_PROCESS_RUN_PATH, processAgentTeamRun, reconcileAgentTeamRunsForOwner, } from "./agent-teams.js";
24
+ import { AGENT_TEAM_PROCESS_RUN_PATH, getCurrentDelegationDepth, processAgentTeamRun, reconcileAgentTeamRunsForOwner, } from "./agent-teams.js";
25
25
  import { setProgressPreListHook } from "../progress/store.js";
26
26
  import { verifyInternalToken, extractBearerToken, } from "../integrations/internal-token.js";
27
27
  import { hasConfiguredA2ASecret, isA2AProductionRuntime, } from "../a2a/auth-policy.js";
@@ -3280,116 +3280,118 @@ export function createAgentChatPlugin(options) {
3280
3280
  : DEV_FRAMEWORK_PROMPT) + devActionsPrompt;
3281
3281
  // Keep legacy names for the composition below
3282
3282
  const basePrompt = prodPrompt;
3283
- // Mount MCP remote server — same action registry as A2A + agent chat
3284
- const { mountMCP } = await import("../mcp/server.js");
3285
- mountMCP(nitroApp, {
3286
- name: options?.appId
3287
- ? options.appId.charAt(0).toUpperCase() + options.appId.slice(1)
3288
- : "Agent",
3289
- title: options?.mcpServerInfo?.title,
3290
- appId: options?.appId,
3291
- description: options?.mcpServerInfo?.description ??
3292
- `Agent-native ${options?.appId ?? "app"} agent`,
3293
- websiteUrl: options?.mcpServerInfo?.websiteUrl,
3294
- icons: options?.mcpServerInfo?.icons,
3295
- actions: allScripts,
3296
- productionActions: mcpFullActions,
3297
- ...(options?.connectorCatalog
3298
- ? { connectorCatalog: options.connectorCatalog }
3299
- : {}),
3300
- askAgent: async (message) => {
3301
- const mcpEngine = await resolveEngine({
3302
- engineOption: options?.engine,
3303
- apiKey: options?.apiKey,
3304
- appId: options?.appId,
3305
- });
3306
- const mcpModelCandidate = options?.model ??
3307
- (await getStoredModelForEngine(mcpEngine, {
3283
+ if (options?.disableMcp !== true) {
3284
+ // Mount MCP remote server same action registry as A2A + agent chat
3285
+ const { mountMCP } = await import("../mcp/server.js");
3286
+ mountMCP(nitroApp, {
3287
+ name: options?.appId
3288
+ ? options.appId.charAt(0).toUpperCase() + options.appId.slice(1)
3289
+ : "Agent",
3290
+ title: options?.mcpServerInfo?.title,
3291
+ appId: options?.appId,
3292
+ description: options?.mcpServerInfo?.description ??
3293
+ `Agent-native ${options?.appId ?? "app"} agent`,
3294
+ websiteUrl: options?.mcpServerInfo?.websiteUrl,
3295
+ icons: options?.mcpServerInfo?.icons,
3296
+ actions: allScripts,
3297
+ productionActions: mcpFullActions,
3298
+ ...(options?.connectorCatalog
3299
+ ? { connectorCatalog: options.connectorCatalog }
3300
+ : {}),
3301
+ askAgent: async (message) => {
3302
+ const mcpEngine = await resolveEngine({
3303
+ engineOption: options?.engine,
3304
+ apiKey: options?.apiKey,
3308
3305
  appId: options?.appId,
3309
- })) ??
3310
- mcpEngine.defaultModel;
3311
- const model = normalizeModelForEngine(mcpEngine, mcpModelCandidate);
3312
- // Same actions as A2A — without call-agent to prevent loops.
3313
- // In dev mode, template actions go through bash, not native tools.
3314
- const devActiveMcp = isDevMode();
3315
- const mcpActions = attachToolSearch(devActiveMcp
3316
- ? {
3317
- ...resourceScripts,
3318
- ...docsScripts,
3319
- ...(lazyContext ? frameworkContextTool : {}),
3320
- ...urlTools,
3321
- ...chatScripts,
3322
- ...fetchTool,
3323
- ...webSearchTool,
3324
- ...workspaceFilesTool,
3325
- ...toolActions,
3326
- ...mcpActionEntries,
3327
- ...devScriptsForA2A,
3328
- ...devRunCodeTool,
3329
- }
3330
- : {
3331
- ...templateScripts,
3332
- ...resourceScripts,
3333
- ...docsScripts,
3334
- ...dbScripts,
3335
- ...refreshScreenTool,
3336
- ...(lazyContext ? frameworkContextTool : {}),
3337
- ...urlTools,
3338
- ...chatScripts,
3339
- ...fetchTool,
3340
- ...webSearchTool,
3341
- ...workspaceFilesTool,
3342
- ...toolActions,
3343
- ...mcpActionEntries,
3344
- ...(resolvedProdCodeExec !== "off" ? runCodeTool : {}),
3345
- ...prodCodingTools,
3346
3306
  });
3347
- const mcpTools = actionsToEngineTools(mcpActions);
3348
- const resources = await loadResourcesForPrompt(SHARED_OWNER, lazyContext, options?.appId);
3349
- const schemaBlock = lazyContext
3350
- ? ""
3351
- : await buildSchemaBlock(SHARED_OWNER, devActiveMcp);
3352
- // Build the MCP handler's own prompt — always use the bash-based
3353
- // dev prompt in dev mode because mcpActions routes template actions
3354
- // through bash (`devScriptsForA2A`), regardless of `nativeActionsInDev`.
3355
- const mcpDevPrompt = (options?.devSystemPrompt
3356
- ? options.devSystemPrompt +
3357
- (options?.systemPrompt ??
3358
- (lazyContext
3359
- ? PROD_FRAMEWORK_PROMPT_COMPACT
3360
- : PROD_FRAMEWORK_PROMPT))
3361
- : lazyContext
3362
- ? DEV_FRAMEWORK_PROMPT_COMPACT
3363
- : DEV_FRAMEWORK_PROMPT) + devActionsPrompt;
3364
- const systemPrompt = devActiveMcp
3365
- ? mcpDevPrompt +
3366
- buildRuntimeContextPrompt() +
3367
- resources +
3368
- schemaBlock
3369
- : basePrompt +
3370
- buildRuntimeContextPrompt() +
3371
- resources +
3372
- schemaBlock;
3373
- let accumulatedText = "";
3374
- const controller = new AbortController();
3375
- await runAgentLoopDirectWithSoftTimeout({
3376
- engine: mcpEngine,
3377
- model,
3378
- systemPrompt,
3379
- tools: mcpTools,
3380
- messages: [
3381
- { role: "user", content: [{ type: "text", text: message }] },
3382
- ],
3383
- actions: mcpActions,
3384
- send: (event) => {
3385
- if (event.type === "text")
3386
- accumulatedText += event.text;
3387
- },
3388
- signal: controller.signal,
3389
- }, options?.runSoftTimeoutMs);
3390
- return accumulatedText || "(no response)";
3391
- },
3392
- });
3307
+ const mcpModelCandidate = options?.model ??
3308
+ (await getStoredModelForEngine(mcpEngine, {
3309
+ appId: options?.appId,
3310
+ })) ??
3311
+ mcpEngine.defaultModel;
3312
+ const model = normalizeModelForEngine(mcpEngine, mcpModelCandidate);
3313
+ // Same actions as A2A without call-agent to prevent loops.
3314
+ // In dev mode, template actions go through bash, not native tools.
3315
+ const devActiveMcp = isDevMode();
3316
+ const mcpActions = attachToolSearch(devActiveMcp
3317
+ ? {
3318
+ ...resourceScripts,
3319
+ ...docsScripts,
3320
+ ...(lazyContext ? frameworkContextTool : {}),
3321
+ ...urlTools,
3322
+ ...chatScripts,
3323
+ ...fetchTool,
3324
+ ...webSearchTool,
3325
+ ...workspaceFilesTool,
3326
+ ...toolActions,
3327
+ ...mcpActionEntries,
3328
+ ...devScriptsForA2A,
3329
+ ...devRunCodeTool,
3330
+ }
3331
+ : {
3332
+ ...templateScripts,
3333
+ ...resourceScripts,
3334
+ ...docsScripts,
3335
+ ...dbScripts,
3336
+ ...refreshScreenTool,
3337
+ ...(lazyContext ? frameworkContextTool : {}),
3338
+ ...urlTools,
3339
+ ...chatScripts,
3340
+ ...fetchTool,
3341
+ ...webSearchTool,
3342
+ ...workspaceFilesTool,
3343
+ ...toolActions,
3344
+ ...mcpActionEntries,
3345
+ ...(resolvedProdCodeExec !== "off" ? runCodeTool : {}),
3346
+ ...prodCodingTools,
3347
+ });
3348
+ const mcpTools = actionsToEngineTools(mcpActions);
3349
+ const resources = await loadResourcesForPrompt(SHARED_OWNER, lazyContext, options?.appId);
3350
+ const schemaBlock = lazyContext
3351
+ ? ""
3352
+ : await buildSchemaBlock(SHARED_OWNER, devActiveMcp);
3353
+ // Build the MCP handler's own prompt — always use the bash-based
3354
+ // dev prompt in dev mode because mcpActions routes template actions
3355
+ // through bash (`devScriptsForA2A`), regardless of `nativeActionsInDev`.
3356
+ const mcpDevPrompt = (options?.devSystemPrompt
3357
+ ? options.devSystemPrompt +
3358
+ (options?.systemPrompt ??
3359
+ (lazyContext
3360
+ ? PROD_FRAMEWORK_PROMPT_COMPACT
3361
+ : PROD_FRAMEWORK_PROMPT))
3362
+ : lazyContext
3363
+ ? DEV_FRAMEWORK_PROMPT_COMPACT
3364
+ : DEV_FRAMEWORK_PROMPT) + devActionsPrompt;
3365
+ const systemPrompt = devActiveMcp
3366
+ ? mcpDevPrompt +
3367
+ buildRuntimeContextPrompt() +
3368
+ resources +
3369
+ schemaBlock
3370
+ : basePrompt +
3371
+ buildRuntimeContextPrompt() +
3372
+ resources +
3373
+ schemaBlock;
3374
+ let accumulatedText = "";
3375
+ const controller = new AbortController();
3376
+ await runAgentLoopDirectWithSoftTimeout({
3377
+ engine: mcpEngine,
3378
+ model,
3379
+ systemPrompt,
3380
+ tools: mcpTools,
3381
+ messages: [
3382
+ { role: "user", content: [{ type: "text", text: message }] },
3383
+ ],
3384
+ actions: mcpActions,
3385
+ send: (event) => {
3386
+ if (event.type === "text")
3387
+ accumulatedText += event.text;
3388
+ },
3389
+ signal: controller.signal,
3390
+ }, options?.runSoftTimeoutMs);
3391
+ return accumulatedText || "(no response)";
3392
+ },
3393
+ });
3394
+ }
3393
3395
  const OWNER_CONTEXT_KEY = "__agentNativeOwnerContext";
3394
3396
  // Resolve owner from the H3 event's session, with an optional
3395
3397
  // template-provided anonymous owner for public read-only surfaces.
@@ -3889,7 +3891,13 @@ export function createAgentChatPlugin(options) {
3889
3891
  tzRaw.trim().length < 64
3890
3892
  ? tzRaw.trim()
3891
3893
  : undefined;
3892
- return buildRuntimeContextPrompt({ timezone });
3894
+ // Thread the ambient sub-agent delegation depth so a sub-agent running
3895
+ // at the depth cap is told in its runtime context that it cannot
3896
+ // delegate further. The depth-guard already enforces the cap
3897
+ // server-side (`evaluateSubagentDepth`); this only surfaces it to the
3898
+ // model. 0 (the top-level chat) emits no delegation line.
3899
+ const delegationDepth = getCurrentDelegationDepth();
3900
+ return buildRuntimeContextPrompt({ timezone, delegationDepth });
3893
3901
  };
3894
3902
  // The app-rendered sidebar must never edit the app's source code
3895
3903
  // directly. Source-file edits can trigger HMR or full reloads of the