veryfront 0.1.759 → 0.1.761

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 (205) hide show
  1. package/esm/cli/commands/init/catalog.d.ts.map +1 -1
  2. package/esm/cli/commands/init/catalog.js +116 -1
  3. package/esm/cli/shared/config.d.ts +0 -6
  4. package/esm/cli/shared/config.d.ts.map +1 -1
  5. package/esm/cli/shared/config.js +64 -8
  6. package/esm/cli/templates/integration-loader.d.ts.map +1 -1
  7. package/esm/cli/templates/integration-loader.js +2 -52
  8. package/esm/deno.d.ts +5 -16
  9. package/esm/deno.js +6 -17
  10. package/esm/src/agent/ag-ui/tool-shared.d.ts.map +1 -1
  11. package/esm/src/agent/ag-ui/tool-shared.js +7 -1
  12. package/esm/src/agent/child-run/invoke-agent-child-runs.d.ts +0 -1
  13. package/esm/src/agent/child-run/invoke-agent-child-runs.d.ts.map +1 -1
  14. package/esm/src/agent/child-run/invoke-agent-child-runs.js +0 -1
  15. package/esm/src/agent/conversation/bootstrap.d.ts +0 -1
  16. package/esm/src/agent/conversation/bootstrap.d.ts.map +1 -1
  17. package/esm/src/agent/conversation/bootstrap.js +0 -1
  18. package/esm/src/agent/conversation/durable.d.ts +0 -1
  19. package/esm/src/agent/conversation/durable.d.ts.map +1 -1
  20. package/esm/src/agent/conversation/durable.js +0 -1
  21. package/esm/src/agent/factory.d.ts.map +1 -1
  22. package/esm/src/agent/factory.js +7 -1
  23. package/esm/src/agent/hosted/chat-preparation.d.ts +1 -1
  24. package/esm/src/agent/hosted/chat-preparation.d.ts.map +1 -1
  25. package/esm/src/agent/hosted/chat-preparation.js +17 -3
  26. package/esm/src/agent/hosted/chat-runtime-contract.d.ts +2 -0
  27. package/esm/src/agent/hosted/chat-runtime-contract.d.ts.map +1 -1
  28. package/esm/src/agent/hosted/default-chat-runtime.d.ts +2 -0
  29. package/esm/src/agent/hosted/default-chat-runtime.d.ts.map +1 -1
  30. package/esm/src/agent/hosted/default-chat-runtime.js +1 -0
  31. package/esm/src/agent/hosted/default-project-steering-refresh.js +1 -1
  32. package/esm/src/agent/hosted/project-steering-adapter.d.ts +7 -0
  33. package/esm/src/agent/hosted/project-steering-adapter.d.ts.map +1 -1
  34. package/esm/src/agent/hosted/project-steering-adapter.js +12 -1
  35. package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts +4 -0
  36. package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
  37. package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +14 -12
  38. package/esm/src/agent/index.d.ts +1 -0
  39. package/esm/src/agent/index.d.ts.map +1 -1
  40. package/esm/src/agent/index.js +1 -0
  41. package/esm/src/agent/project/context.d.ts +2 -0
  42. package/esm/src/agent/project/context.d.ts.map +1 -1
  43. package/esm/src/agent/project/context.js +1 -0
  44. package/esm/src/agent/project/steering-mutation.d.ts.map +1 -1
  45. package/esm/src/agent/project/steering-mutation.js +7 -1
  46. package/esm/src/agent/runtime/agent-definition.d.ts +6 -0
  47. package/esm/src/agent/runtime/agent-definition.d.ts.map +1 -1
  48. package/esm/src/agent/runtime/agent-definition.js +46 -0
  49. package/esm/src/agent/runtime/agent-delegation-names.d.ts +5 -0
  50. package/esm/src/agent/runtime/agent-delegation-names.d.ts.map +1 -0
  51. package/esm/src/agent/runtime/agent-delegation-names.js +8 -0
  52. package/esm/src/agent/runtime/agent-delegation.d.ts +32 -0
  53. package/esm/src/agent/runtime/agent-delegation.d.ts.map +1 -0
  54. package/esm/src/agent/runtime/agent-delegation.js +57 -0
  55. package/esm/src/agent/runtime/agent-markdown-adapter.d.ts.map +1 -1
  56. package/esm/src/agent/runtime/agent-markdown-adapter.js +24 -0
  57. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  58. package/esm/src/agent/runtime/index.js +8 -0
  59. package/esm/src/agent/runtime/local-tool.d.ts +6 -0
  60. package/esm/src/agent/runtime/local-tool.d.ts.map +1 -0
  61. package/esm/src/agent/runtime/local-tool.js +15 -0
  62. package/esm/src/agent/runtime/project-skill-catalog.d.ts.map +1 -1
  63. package/esm/src/agent/runtime/project-skill-catalog.js +67 -0
  64. package/esm/src/agent/runtime/project-skill-loader.d.ts +9 -0
  65. package/esm/src/agent/runtime/project-skill-loader.d.ts.map +1 -1
  66. package/esm/src/agent/runtime/project-skill-loader.js +44 -6
  67. package/esm/src/agent/runtime/skill-metadata.d.ts +23 -0
  68. package/esm/src/agent/runtime/skill-metadata.d.ts.map +1 -1
  69. package/esm/src/agent/runtime/skill-metadata.js +11 -0
  70. package/esm/src/agent/runtime/tool-helpers.d.ts +3 -1
  71. package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
  72. package/esm/src/agent/runtime/tool-helpers.js +45 -11
  73. package/esm/src/agent/service/request-auth-cache.d.ts +0 -1
  74. package/esm/src/agent/service/request-auth-cache.d.ts.map +1 -1
  75. package/esm/src/agent/service/request-auth-cache.js +0 -1
  76. package/esm/src/channels/control-plane.d.ts +1 -0
  77. package/esm/src/channels/control-plane.d.ts.map +1 -1
  78. package/esm/src/channels/control-plane.js +4 -2
  79. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  80. package/esm/src/chat/conversation.d.ts.map +1 -1
  81. package/esm/src/chat/final-step-fallback.d.ts.map +1 -1
  82. package/esm/src/chat/protocol.d.ts.map +1 -1
  83. package/esm/src/chat/protocol.js +1 -0
  84. package/esm/src/chat/provider-errors.d.ts.map +1 -1
  85. package/esm/src/chat/provider-errors.js +0 -1
  86. package/esm/src/chat/stream-watchdog.d.ts +0 -1
  87. package/esm/src/chat/stream-watchdog.d.ts.map +1 -1
  88. package/esm/src/chat/stream-watchdog.js +0 -1
  89. package/esm/src/config/environment-config.d.ts +1 -0
  90. package/esm/src/config/environment-config.d.ts.map +1 -1
  91. package/esm/src/config/environment-config.js +4 -0
  92. package/esm/src/discovery/agent-scoped-capabilities.d.ts +54 -0
  93. package/esm/src/discovery/agent-scoped-capabilities.d.ts.map +1 -0
  94. package/esm/src/discovery/agent-scoped-capabilities.js +228 -0
  95. package/esm/src/discovery/discovery-engine.d.ts.map +1 -1
  96. package/esm/src/discovery/discovery-engine.js +19 -15
  97. package/esm/src/discovery/file-discovery.d.ts +10 -0
  98. package/esm/src/discovery/file-discovery.d.ts.map +1 -1
  99. package/esm/src/discovery/file-discovery.js +46 -0
  100. package/esm/src/discovery/handlers/runtime-agent-markdown-handler.d.ts +12 -0
  101. package/esm/src/discovery/handlers/runtime-agent-markdown-handler.d.ts.map +1 -1
  102. package/esm/src/discovery/handlers/runtime-agent-markdown-handler.js +99 -22
  103. package/esm/src/errors/error-registry/agent.d.ts +2 -0
  104. package/esm/src/errors/error-registry/agent.d.ts.map +1 -1
  105. package/esm/src/errors/error-registry/agent.js +8 -0
  106. package/esm/src/errors/error-registry.d.ts +1 -0
  107. package/esm/src/errors/error-registry.d.ts.map +1 -1
  108. package/esm/src/extensions/errors.d.ts +2 -0
  109. package/esm/src/extensions/errors.d.ts.map +1 -1
  110. package/esm/src/extensions/errors.js +8 -0
  111. package/esm/src/extensions/loader.d.ts +9 -6
  112. package/esm/src/extensions/loader.d.ts.map +1 -1
  113. package/esm/src/extensions/loader.js +39 -4
  114. package/esm/src/extensions/orchestrate.d.ts +3 -0
  115. package/esm/src/extensions/orchestrate.d.ts.map +1 -1
  116. package/esm/src/extensions/orchestrate.js +3 -1
  117. package/esm/src/integrations/_data.d.ts.map +1 -1
  118. package/esm/src/integrations/_data.js +31348 -7873
  119. package/esm/src/integrations/_tool_summaries.d.ts.map +1 -1
  120. package/esm/src/integrations/_tool_summaries.js +1737 -11
  121. package/esm/src/integrations/feature-flags.d.ts +1 -1
  122. package/esm/src/integrations/feature-flags.d.ts.map +1 -1
  123. package/esm/src/integrations/feature-flags.js +83 -0
  124. package/esm/src/integrations/schema.d.ts +129 -4
  125. package/esm/src/integrations/schema.d.ts.map +1 -1
  126. package/esm/src/integrations/schema.js +126 -1
  127. package/esm/src/internal-agents/run-stream.d.ts +4 -0
  128. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  129. package/esm/src/internal-agents/run-stream.js +18 -5
  130. package/esm/src/mcp/server.d.ts.map +1 -1
  131. package/esm/src/mcp/server.js +5 -0
  132. package/esm/src/platform/adapters/base.d.ts +7 -0
  133. package/esm/src/platform/adapters/base.d.ts.map +1 -1
  134. package/esm/src/platform/adapters/runtime/deno/adapter.d.ts.map +1 -1
  135. package/esm/src/platform/adapters/runtime/deno/adapter.js +7 -2
  136. package/esm/src/registry/project-scoped-registry-manager.d.ts +7 -0
  137. package/esm/src/registry/project-scoped-registry-manager.d.ts.map +1 -1
  138. package/esm/src/registry/project-scoped-registry-manager.js +10 -0
  139. package/esm/src/registry/scoped-registry-facade.d.ts +2 -0
  140. package/esm/src/registry/scoped-registry-facade.d.ts.map +1 -1
  141. package/esm/src/registry/scoped-registry-facade.js +4 -0
  142. package/esm/src/rendering/layouts/utils/component-loader.d.ts +1 -1
  143. package/esm/src/rendering/layouts/utils/component-loader.d.ts.map +1 -1
  144. package/esm/src/rendering/layouts/utils/component-loader.js +82 -3
  145. package/esm/src/rendering/orchestrator/css-cache.d.ts +3 -0
  146. package/esm/src/rendering/orchestrator/css-cache.d.ts.map +1 -1
  147. package/esm/src/rendering/orchestrator/css-cache.js +16 -8
  148. package/esm/src/rendering/orchestrator/mdx.d.ts.map +1 -1
  149. package/esm/src/rendering/orchestrator/mdx.js +12 -1
  150. package/esm/src/server/bootstrap.d.ts.map +1 -1
  151. package/esm/src/server/bootstrap.js +3 -0
  152. package/esm/src/server/handlers/dev/dashboard/api.js +6 -3
  153. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  154. package/esm/src/server/handlers/request/agent-stream.handler.js +10 -0
  155. package/esm/src/server/handlers/request/channel-invoke.handler.d.ts.map +1 -1
  156. package/esm/src/server/handlers/request/channel-invoke.handler.js +8 -0
  157. package/esm/src/server/handlers/request/runtime-shutdown-response.d.ts +13 -0
  158. package/esm/src/server/handlers/request/runtime-shutdown-response.d.ts.map +1 -0
  159. package/esm/src/server/handlers/request/runtime-shutdown-response.js +16 -0
  160. package/esm/src/server/production-server.d.ts.map +1 -1
  161. package/esm/src/server/production-server.js +7 -1
  162. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
  163. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +2 -2
  164. package/esm/src/server/shutdown-state.d.ts +16 -0
  165. package/esm/src/server/shutdown-state.d.ts.map +1 -0
  166. package/esm/src/server/shutdown-state.js +22 -0
  167. package/esm/src/skill/index.d.ts +1 -1
  168. package/esm/src/skill/index.d.ts.map +1 -1
  169. package/esm/src/skill/index.js +1 -1
  170. package/esm/src/skill/registry.d.ts +29 -3
  171. package/esm/src/skill/registry.d.ts.map +1 -1
  172. package/esm/src/skill/registry.js +57 -8
  173. package/esm/src/skill/tools.d.ts.map +1 -1
  174. package/esm/src/skill/tools.js +27 -25
  175. package/esm/src/skill/types.d.ts +8 -0
  176. package/esm/src/skill/types.d.ts.map +1 -1
  177. package/esm/src/tool/executor.d.ts +7 -1
  178. package/esm/src/tool/executor.d.ts.map +1 -1
  179. package/esm/src/tool/executor.js +12 -1
  180. package/esm/src/tool/index.d.ts +1 -1
  181. package/esm/src/tool/index.d.ts.map +1 -1
  182. package/esm/src/tool/index.js +1 -1
  183. package/esm/src/tool/registry.d.ts +1 -0
  184. package/esm/src/tool/registry.d.ts.map +1 -1
  185. package/esm/src/tool/registry.js +25 -0
  186. package/esm/src/tool/types.d.ts +9 -0
  187. package/esm/src/tool/types.d.ts.map +1 -1
  188. package/esm/src/utils/constants/cache.d.ts +8 -0
  189. package/esm/src/utils/constants/cache.d.ts.map +1 -1
  190. package/esm/src/utils/constants/cache.js +8 -0
  191. package/esm/src/utils/constants/index.d.ts +1 -1
  192. package/esm/src/utils/constants/index.d.ts.map +1 -1
  193. package/esm/src/utils/constants/index.js +1 -1
  194. package/esm/src/utils/index.d.ts +1 -1
  195. package/esm/src/utils/index.d.ts.map +1 -1
  196. package/esm/src/utils/index.js +1 -1
  197. package/esm/src/utils/lru-wrapper.d.ts +2 -0
  198. package/esm/src/utils/lru-wrapper.d.ts.map +1 -1
  199. package/esm/src/utils/lru-wrapper.js +1 -0
  200. package/esm/src/utils/version-constant.d.ts +1 -1
  201. package/esm/src/utils/version-constant.js +1 -1
  202. package/package.json +1 -45
  203. package/esm/src/chat/compat.d.ts +0 -782
  204. package/esm/src/chat/compat.d.ts.map +0 -1
  205. package/esm/src/chat/compat.js +0 -113
@@ -7,7 +7,7 @@ import { createAgentServiceSandboxTools } from "../sandbox/index.js";
7
7
  import { tryResolve } from "../extensions/contracts.js";
8
8
  import { SandboxShellToolsProviderName, } from "../extensions/sandbox/index.js";
9
9
  import { SKILL_TOOL_IDS } from "../skill/types.js";
10
- import { toolRegistry } from "../tool/index.js";
10
+ import { isToolVisibleTo, toolRegistry } from "../tool/index.js";
11
11
  import { defineSchema, lazySchema } from "../schemas/index.js";
12
12
  import { createStreamTransformState, finalizeRunEvents, formatAgUiEvent, mapRuntimeEventToAgUi, parseSseJsonEvents, } from "./ag-ui-sse.js";
13
13
  import { AgentRunCancelledError } from "./session-manager.js";
@@ -56,7 +56,7 @@ function createInjectedStudioTool(runId, toolName, description, parameters, sess
56
56
  },
57
57
  };
58
58
  }
59
- function buildMergedTools(agent, input, sessionManager, availableForwardedToolNames, availableLocalTools) {
59
+ export function buildMergedTools(agent, input, sessionManager, availableForwardedToolNames, availableLocalTools) {
60
60
  const serverResolvedProjectToolNames = getServerResolvedProjectToolNames(input.forwardedProps);
61
61
  const concreteSourceToolNames = agent.config.tools && agent.config.tools !== true
62
62
  ? new Set(Object.entries(agent.config.tools)
@@ -76,10 +76,15 @@ function buildMergedTools(agent, input, sessionManager, availableForwardedToolNa
76
76
  const sourceAllowedRemoteToolNames = getAgentAllowedRemoteToolNames(agent);
77
77
  if (agent.config.tools === true) {
78
78
  const merged = {};
79
- for (const [toolId] of toolRegistry.getAll()) {
79
+ for (const [toolId, registryTool] of toolRegistry.getAll()) {
80
80
  if (!agent.config.skills && SKILL_TOOL_IDS.has(toolId)) {
81
81
  continue;
82
82
  }
83
+ // Owner-aware: another agent's owned tool never enters this agent's
84
+ // model tool definitions.
85
+ if (!isToolVisibleTo(registryTool, { agentId: agent.id })) {
86
+ continue;
87
+ }
83
88
  merged[toolId] = true;
84
89
  }
85
90
  for (const toolName of sourceAllowedRemoteToolNames) {
@@ -90,11 +95,19 @@ function buildMergedTools(agent, input, sessionManager, availableForwardedToolNa
90
95
  const merged = {};
91
96
  for (const [toolName, entry] of Object.entries(agent.config.tools)) {
92
97
  if (entry === true) {
98
+ // Registry lookups are owner-aware: another agent's owned tool behaves
99
+ // as if it does not exist for this agent.
100
+ const visibleRegistryTool = (() => {
101
+ const registryTool = toolRegistry.get(toolName);
102
+ return registryTool && isToolVisibleTo(registryTool, { agentId: agent.id })
103
+ ? registryTool
104
+ : undefined;
105
+ })();
93
106
  const serverResolvedProjectTool = serverResolvedProjectToolNames.has(toolName)
94
- ? toolRegistry.get(toolName)
107
+ ? visibleRegistryTool
95
108
  : undefined;
96
109
  if (serverResolvedProjectTool ||
97
- toolRegistry.get(toolName) ||
110
+ visibleRegistryTool ||
98
111
  availableLocalTools?.[toolName] ||
99
112
  availableForwardedToolNames?.includes(toolName) ||
100
113
  sourceAllowedRemoteToolNames.includes(toolName)) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -251,6 +251,11 @@ export class MCPServer {
251
251
  for (const [id, tool] of registry.tools.entries()) {
252
252
  if (tool.mcp?.enabled === false)
253
253
  continue;
254
+ // Agent-owned tools are never listed to MCP clients: external callers
255
+ // have no agent identity, so owned capabilities are invisible here
256
+ // (and rejected at execution time by the registry executor).
257
+ if (tool.ownerAgentId !== undefined)
258
+ continue;
254
259
  const entry = {
255
260
  name: id,
256
261
  description: tool.description,
@@ -150,6 +150,13 @@ export interface FileChangeEvent {
150
150
  }
151
151
  export interface FileWatcher extends AsyncIterable<FileChangeEvent> {
152
152
  close(): void;
153
+ /**
154
+ * Resolves once the watcher's internal loop has fully stopped, including
155
+ * any in-flight filesystem operations. close() only signals shutdown;
156
+ * await this to guarantee no pending async ops remain (e.g. before test
157
+ * sanitizer checks or process exit).
158
+ */
159
+ done?: Promise<void>;
153
160
  }
154
161
  export interface ShellAdapter {
155
162
  statSync(path: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/adapters/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/adapters/base.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/runtime/deno/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,eAAe,CAAC;AA8HvB,cAAM,qBAAsB,YAAW,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAY/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW;CAuErE;AAED,cAAM,sBAAuB,YAAW,kBAAkB;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGnC;AAED,cAAM,iBAAkB,YAAW,aAAa;IAC9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;CAYrD;AAED,cAAM,gBAAiB,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IAejE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAanC;AAwBD,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,EAAE,wBAA+B;IAC1C,QAAQ,CAAC,GAAG,yBAAgC;IAC5C,QAAQ,CAAC,MAAM,oBAA2B;IAC1C,QAAQ,CAAC,KAAK,mBAA0B;IAExC,QAAQ,CAAC,YAAY;;;;;;;;;;MAUnB;IAEF,OAAO,CAAC,YAAY,CAA2B;IAE/C,KAAK,CACH,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAC3D,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC;IA4DZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/runtime/deno/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,eAAe,CAAC;AA8HvB,cAAM,qBAAsB,YAAW,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAY/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW;CA4ErE;AAED,cAAM,sBAAuB,YAAW,kBAAkB;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGnC;AAED,cAAM,iBAAkB,YAAW,aAAa;IAC9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;CAYrD;AAED,cAAM,gBAAiB,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IAejE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAanC;AAwBD,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,EAAE,wBAA+B;IAC1C,QAAQ,CAAC,GAAG,yBAAgC;IAC5C,QAAQ,CAAC,MAAM,oBAA2B;IAC1C,QAAQ,CAAC,KAAK,mBAA0B;IAExC,QAAQ,CAAC,YAAY;;;;;;;;;;MAUnB;IAEF,OAAO,CAAC,YAAY,CAA2B;IAE/C,KAAK,CACH,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAC3D,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC;IA4DZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -196,8 +196,13 @@ class DenoFileSystemAdapter {
196
196
  }
197
197
  };
198
198
  signal?.addEventListener("abort", cleanup, { once: true });
199
- void pollLoop();
200
- return createFileWatcher(iterator, cleanup);
199
+ // Keep the loop promise so callers can await full termination: close()
200
+ // only flips the flag, while an in-flight snapshot (Deno.readDir) keeps
201
+ // running and would otherwise trip test op-sanitizers or delay shutdown.
202
+ const done = pollLoop();
203
+ const watcher = createFileWatcher(iterator, cleanup);
204
+ watcher.done = done;
205
+ return watcher;
201
206
  }
202
207
  }
203
208
  class DenoEnvironmentAdapter {
@@ -55,6 +55,13 @@ export declare class ProjectScopedRegistryManager<T> {
55
55
  * Falls back to shared registry for items not found in project registry.
56
56
  */
57
57
  get(id: string): T | undefined;
58
+ /**
59
+ * Get item registered in the current project's own scope, without falling
60
+ * back to the shared registry. Use this to distinguish a project-local
61
+ * registration (which may legitimately shadow a shared item) from a true
62
+ * same-scope duplicate.
63
+ */
64
+ getOwn(id: string): T | undefined;
58
65
  /**
59
66
  * Check if item exists for the current project.
60
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"project-scoped-registry-manager.d.ts","sourceRoot":"","sources":["../../../src/src/registry/project-scoped-registry-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAgBH;;;;GAIG;AACH,qBAAa,4BAA4B,CAAC,CAAC;IAI7B,OAAO,CAAC,YAAY;IAHhC,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,cAAc,CAAwB;gBAE1B,YAAY,EAAE,MAAM;IAExC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAcnC;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IASzC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAK9B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAMxB;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAOrB;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAUxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAU3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAcrC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF"}
1
+ {"version":3,"file":"project-scoped-registry-manager.d.ts","sourceRoot":"","sources":["../../../src/src/registry/project-scoped-registry-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAgBH;;;;GAIG;AACH,qBAAa,4BAA4B,CAAC,CAAC;IAI7B,OAAO,CAAC,YAAY;IAHhC,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,cAAc,CAAwB;gBAE1B,YAAY,EAAE,MAAM;IAExC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAcnC;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IASzC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAK9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKjC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAMxB;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAOrB;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAUxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAU3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAcrC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF"}
@@ -93,6 +93,16 @@ export class ProjectScopedRegistryManager {
93
93
  const scopeId = this.getCurrentScopeId();
94
94
  return this.registriesByScope.get(scopeId)?.get(id) ?? this.sharedRegistry.get(id);
95
95
  }
96
+ /**
97
+ * Get item registered in the current project's own scope, without falling
98
+ * back to the shared registry. Use this to distinguish a project-local
99
+ * registration (which may legitimately shadow a shared item) from a true
100
+ * same-scope duplicate.
101
+ */
102
+ getOwn(id) {
103
+ const scopeId = this.getCurrentScopeId();
104
+ return this.registriesByScope.get(scopeId)?.get(id);
105
+ }
96
106
  /**
97
107
  * Check if item exists for the current project.
98
108
  */
@@ -8,6 +8,8 @@ export declare class ScopedRegistryFacade<T> {
8
8
  */
9
9
  registerShared(id: string, item: T): void;
10
10
  get(id: string): T | undefined;
11
+ /** Get item from the current scope only, without shared-registry fallback. */
12
+ getOwn(id: string): T | undefined;
11
13
  has(id: string): boolean;
12
14
  getAllIds(): string[];
13
15
  getAll(): Map<string, T>;
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-registry-facade.d.ts","sourceRoot":"","sources":["../../../src/src/registry/scoped-registry-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,qBAAa,oBAAoB,CAAC,CAAC;IACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;gBAAxC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAEvE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAIzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,SAAS,IAAI,MAAM,EAAE;IAIrB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAIxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB,QAAQ,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;CAGpE"}
1
+ {"version":3,"file":"scoped-registry-facade.d.ts","sourceRoot":"","sources":["../../../src/src/registry/scoped-registry-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,qBAAa,oBAAoB,CAAC,CAAC;IACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;gBAAxC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAEvE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAIzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,SAAS,IAAI,MAAM,EAAE;IAIrB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAIxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB,QAAQ,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;CAGpE"}
@@ -15,6 +15,10 @@ export class ScopedRegistryFacade {
15
15
  get(id) {
16
16
  return this.manager.get(id);
17
17
  }
18
+ /** Get item from the current scope only, without shared-registry fallback. */
19
+ getOwn(id) {
20
+ return this.manager.getOwn(id);
21
+ }
18
22
  has(id) {
19
23
  return this.manager.has(id);
20
24
  }
@@ -12,7 +12,7 @@ export interface LayoutComponentCache {
12
12
  clear(): void;
13
13
  clearForProject?(projectId: string): void;
14
14
  }
15
- export declare function createLayoutComponentCache(maxEntries?: number): LayoutComponentCache;
15
+ export declare function createLayoutComponentCache(maxEntries?: number, perProjectMaxEntries?: number): LayoutComponentCache;
16
16
  export declare function shouldUnwrapAppRouterDocumentLayout(componentPath: string | undefined, projectDir: string): boolean;
17
17
  export declare function unwrapAppRouterDocumentLayout(React: typeof BundledReact, LayoutComponent: AppRouterDocumentLayoutFunction): BundledReact.FunctionComponent<{
18
18
  children?: BundledReact.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"component-loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/layouts/utils/component-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/layouts/utils/component-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,MAAM,yBAAyB,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAgB5E,KAAK,+BAA+B,GAAG,CACrC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,SAAS,CAAA;CAAE,KACzC,YAAY,CAAC,SAAS,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;IACzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC;IAC1D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAmID,wBAAgB,0BAA0B,CACxC,UAAU,SAAyB,EACnC,oBAAoB,SAAqC,GACxD,oBAAoB,CAOtB;AAED,wBAAgB,mCAAmC,CACjD,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAMT;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,YAAY,EAC1B,eAAe,EAAE,+BAA+B,GAC/C,YAAY,CAAC,iBAAiB,CAAC;IAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,SAAS,CAAA;CAAE,CAAC,CAcvE;AAED,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CA2BrC;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,kBAAkB,CAAC,EAAE,eAAe,GACnC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC;IAAE,UAAU,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC,GAAG,SAAS,CAAC,CA0CjF;AAED,2EAA2E;AAC3E,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,IAAI,EAAE,UAAU,EAChB,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CA6CpC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,kBAAkB,CAAC,EAAE,eAAe,GACnC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAuBpC"}
@@ -1,4 +1,4 @@
1
- import { computeHash, rendererLogger as logger, TSX_LAYOUT_MAX_ENTRIES } from "../../../utils/index.js";
1
+ import { computeHash, rendererLogger as logger, TSX_LAYOUT_MAX_ENTRIES, TSX_LAYOUT_PER_PROJECT_MAX_ENTRIES, } from "../../../utils/index.js";
2
2
  import { createError, toError } from "../../../errors/veryfront-error.js";
3
3
  import { withSpan } from "../../../observability/tracing/otlp-setup.js";
4
4
  import { SpanNames } from "../../../observability/tracing/span-names.js";
@@ -39,6 +39,9 @@ class InMemoryLayoutComponentCache {
39
39
  }
40
40
  this.entries.set(key, value);
41
41
  }
42
+ get size() {
43
+ return this.entries.size;
44
+ }
42
45
  delete(key) {
43
46
  this.entries.delete(key);
44
47
  }
@@ -54,8 +57,84 @@ class InMemoryLayoutComponentCache {
54
57
  }
55
58
  }
56
59
  }
57
- export function createLayoutComponentCache(maxEntries = TSX_LAYOUT_MAX_ENTRIES) {
58
- return new InMemoryLayoutComponentCache(maxEntries);
60
+ /**
61
+ * Per-project layout component cache.
62
+ *
63
+ * Wraps a Map of per-project LRU sub-caches so that one noisy project cannot
64
+ * evict another project's cached layouts. Two limits apply:
65
+ *
66
+ * 1. **Per-project cap** (`perProjectMaxEntries`): each project's sub-cache is
67
+ * bounded independently. Configurable via `TSX_LAYOUT_PER_PROJECT_MAX_ENTRIES`.
68
+ * 2. **Global project-count cap** (`maxProjects`): the number of distinct
69
+ * projects that can have a sub-cache is bounded. When the cap is reached the
70
+ * project whose sub-cache has the fewest entries (i.e. least active) is
71
+ * evicted first to make room. This keeps total memory bounded even when many
72
+ * projects exist. Defaults to `floor(maxEntries / perProjectMaxEntries)`.
73
+ *
74
+ * Cache keys are expected to start with `layout:{projectId}:` (the format
75
+ * produced by `buildLayoutComponentCacheKey`). The projectId is extracted from
76
+ * the key so no extra argument is needed for `get`/`set`.
77
+ */
78
+ class PerProjectLayoutComponentCache {
79
+ perProjectMaxEntries;
80
+ maxProjects;
81
+ projects = new Map();
82
+ constructor(perProjectMaxEntries, maxProjects) {
83
+ this.perProjectMaxEntries = perProjectMaxEntries;
84
+ this.maxProjects = maxProjects;
85
+ }
86
+ /** Extract projectId from a `layout:{projectId}:…` cache key. */
87
+ projectIdFromKey(key) {
88
+ const second = key.indexOf(":", key.indexOf(":") + 1);
89
+ return second === -1 ? key : key.slice(key.indexOf(":") + 1, second);
90
+ }
91
+ getOrCreateBucket(projectId) {
92
+ let bucket = this.projects.get(projectId);
93
+ if (bucket)
94
+ return bucket;
95
+ // Evict the least-active project when the project-count cap is reached.
96
+ if (this.projects.size >= this.maxProjects) {
97
+ let smallestId;
98
+ let smallestSize = Infinity;
99
+ for (const [id, b] of this.projects) {
100
+ if (b.size < smallestSize) {
101
+ smallestSize = b.size;
102
+ smallestId = id;
103
+ }
104
+ }
105
+ if (smallestId !== undefined)
106
+ this.projects.delete(smallestId);
107
+ }
108
+ bucket = new InMemoryLayoutComponentCache(this.perProjectMaxEntries);
109
+ this.projects.set(projectId, bucket);
110
+ return bucket;
111
+ }
112
+ get(key) {
113
+ const projectId = this.projectIdFromKey(key);
114
+ return this.projects.get(projectId)?.get(key);
115
+ }
116
+ set(key, value) {
117
+ const projectId = this.projectIdFromKey(key);
118
+ this.getOrCreateBucket(projectId).set(key, value);
119
+ }
120
+ delete(key) {
121
+ const projectId = this.projectIdFromKey(key);
122
+ this.projects.get(projectId)?.delete(key);
123
+ }
124
+ clear() {
125
+ this.projects.clear();
126
+ }
127
+ clearForProject(projectId) {
128
+ this.projects.delete(projectId);
129
+ }
130
+ }
131
+ export function createLayoutComponentCache(maxEntries = TSX_LAYOUT_MAX_ENTRIES, perProjectMaxEntries = TSX_LAYOUT_PER_PROJECT_MAX_ENTRIES) {
132
+ // A single bucket may never exceed the caller's total budget: with a small
133
+ // custom maxEntries (e.g. tests passing 2), the env-derived per-project
134
+ // default would otherwise let one project hold more than the whole cache.
135
+ const perProject = Math.max(1, Math.min(perProjectMaxEntries, maxEntries));
136
+ const maxProjects = Math.max(1, Math.floor(maxEntries / perProject));
137
+ return new PerProjectLayoutComponentCache(perProject, maxProjects);
59
138
  }
60
139
  export function shouldUnwrapAppRouterDocumentLayout(componentPath, projectDir) {
61
140
  if (!componentPath)
@@ -7,10 +7,13 @@
7
7
  * @module rendering/orchestrator/css-cache
8
8
  */
9
9
  import type { CacheRepository } from "../../repositories/types.js";
10
+ import { LRUCache } from "../../utils/lru-wrapper.js";
10
11
  /** Timeout for CSS generation SSR (shorter than full SSR since it's optional) */
11
12
  export declare const CSS_SSR_TIMEOUT_MS = 5000;
12
13
  /** Maximum number of entries in the CSS cache */
13
14
  export declare const PAGE_CSS_CACHE_MAX_SIZE = 200;
15
+ /** Exposed for testing only — do not use in production code */
16
+ export declare const __pageCssCacheForTests: LRUCache<string, string>;
14
17
  /**
15
18
  * Inject a CacheRepository for CSS cache testing.
16
19
  * Call with null to restore default Map-based caching.
@@ -1 +1 @@
1
- {"version":3,"file":"css-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/css-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AASxC,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAK3C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAExF;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,MAAM,CAIR;AAWD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAWD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAOhE"}
1
+ {"version":3,"file":"css-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/css-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAmB3C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,0BAAe,CAAC;AAKnD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAExF;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,MAAM,CAIR;AAOD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAWD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAOhE"}
@@ -6,16 +6,29 @@
6
6
  *
7
7
  * @module rendering/orchestrator/css-cache
8
8
  */
9
+ import { LRUCache } from "../../utils/lru-wrapper.js";
10
+ import { registerLRUCache } from "../../cache/index.js";
9
11
  /** Timeout for CSS generation SSR (shorter than full SSR since it's optional) */
10
12
  export const CSS_SSR_TIMEOUT_MS = 5_000;
13
+ /** Maximum number of entries in the CSS cache */
14
+ export const PAGE_CSS_CACHE_MAX_SIZE = 200;
11
15
  /**
12
16
  * Per-page CSS cache to avoid redundant SSR for CSS generation.
13
17
  * Key: projectId:environment:slug:contentVersion
14
18
  * Value: Generated CSS string
19
+ * Uses LRU eviction so frequently-used pages' CSS is retained under cache pressure.
15
20
  */
16
- const pageCssCache = new Map();
17
- /** Maximum number of entries in the CSS cache */
18
- export const PAGE_CSS_CACHE_MAX_SIZE = 200;
21
+ const pageCssCache = new LRUCache({
22
+ maxEntries: PAGE_CSS_CACHE_MAX_SIZE,
23
+ // The previous plain-Map cache was bounded by entry count only. Disable the
24
+ // adapter's default 50 MiB byte cap so large CSS payloads aren't evicted
25
+ // (or rejected) on insert; only the entry-count bound applies.
26
+ maxSizeBytes: Number.MAX_SAFE_INTEGER,
27
+ });
28
+ // Register cache for monitoring
29
+ registerLRUCache("page-css-cache", pageCssCache);
30
+ /** Exposed for testing only — do not use in production code */
31
+ export const __pageCssCacheForTests = pageCssCache;
19
32
  /** Injected cache repository for testing */
20
33
  let injectedCssCacheRepo = null;
21
34
  /**
@@ -31,11 +44,6 @@ export function getPageCssCacheKey(projectId, environment, slug, projectUpdatedA
31
44
  }
32
45
  /** Cache CSS for a page - internal implementation */
33
46
  function cachePageCssInternal(cacheKey, css) {
34
- if (pageCssCache.size >= PAGE_CSS_CACHE_MAX_SIZE && !pageCssCache.has(cacheKey)) {
35
- const firstKey = pageCssCache.keys().next().value;
36
- if (firstKey)
37
- pageCssCache.delete(firstKey);
38
- }
39
47
  pageCssCache.set(cacheKey, css);
40
48
  }
41
49
  /** Get cached CSS for a page (if available) - sync for backward compatibility */
@@ -1 +1 @@
1
- {"version":3,"file":"mdx.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/mdx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,KAAK,gBAAgB,GAAG,SAAS,GAAG;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAE7C,UAAU,CACR,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC;YAuBd,eAAe;CA4B9B"}
1
+ {"version":3,"file":"mdx.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/mdx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAKrE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,KAAK,gBAAgB,GAAG,SAAS,GAAG;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAOF,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAE7C,UAAU,CACR,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC;YAmCd,eAAe;CA4B9B"}
@@ -1,6 +1,11 @@
1
1
  import { wrapWithContext } from "../../errors/index.js";
2
2
  import { withSpan } from "../../observability/tracing/otlp-setup.js";
3
3
  import { SpanNames } from "../../observability/tracing/span-names.js";
4
+ import { Singleflight } from "../../utils/singleflight.js";
5
+ // Module-level so dedup spans compiler instances: the renderer creates an
6
+ // MDXCompiler per render context, and the bundle cache key (mdx:<mode>:<hash>)
7
+ // is already global, so the flight map can be too.
8
+ const compileFlight = new Singleflight();
4
9
  export class MDXCompiler {
5
10
  config;
6
11
  constructor(config) {
@@ -15,7 +20,13 @@ export class MDXCompiler {
15
20
  const cachedBundle = await withSpan(SpanNames.MDX_CACHE_GET, () => this.config.mdxCacheAdapter.getCachedBundle(content, frontmatter, filePath), spanAttrs);
16
21
  if (cachedBundle)
17
22
  return cachedBundle;
18
- return this.compileAndCache(content, frontmatter, filePath);
23
+ // Key includes projectDir and filePath because relative imports are
24
+ // resolved against the file's location: identical source in two
25
+ // places can compile to different modules, so only compiles of the
26
+ // same file may share an in-flight promise.
27
+ const contentHash = await this.config.mdxCacheAdapter.computeHash(content);
28
+ const flightKey = `mdx:${this.config.projectDir}:${this.config.mode}:${contentHash}:${filePath ?? "inline"}`;
29
+ return compileFlight.do(flightKey, () => this.compileAndCache(content, frontmatter, filePath));
19
30
  }, { ...spanAttrs, "mdx.mode": this.config.mode });
20
31
  }
21
32
  async compileAndCache(content, frontmatter, filePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/src/server/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,wBAAwB,CAAC;AAqDjG,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,OAAO,EAAE,cAAc,CAAC;IAExB,2BAA2B;IAC3B,MAAM,EAAE,eAAe,CAAC;IAExB,wCAAwC;IACxC,cAAc,EAAE,OAAO,CAAC;IAExB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAgHD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,EAC3C,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAO1B;AAkDD,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA2K1B;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAa1B;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/src/server/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,wBAAwB,CAAC;AAqDjG,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,OAAO,EAAE,cAAc,CAAC;IAExB,2BAA2B;IAC3B,MAAM,EAAE,eAAe,CAAC;IAExB,wCAAwC;IACxC,cAAc,EAAE,OAAO,CAAC;IAExB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAgHD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,EAC3C,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAO1B;AAkDD,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA8K1B;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAa1B;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
@@ -196,6 +196,7 @@ export async function bootstrap(projectDir, adapter) {
196
196
  logger: bootstrapLog,
197
197
  primeContracts: { [LLMProviderRegistryName]: createLLMProviderRegistry() },
198
198
  builtinExtensions: createBuiltinExtensions(),
199
+ setupTimeoutMs: getEnvironmentConfig().extensionSetupTimeoutMs,
199
200
  });
200
201
  wireTracingShim();
201
202
  assertRequiredContracts();
@@ -237,6 +238,7 @@ export async function bootstrap(projectDir, adapter) {
237
238
  logger: bootstrapLog,
238
239
  primeContracts: { [LLMProviderRegistryName]: createLLMProviderRegistry() },
239
240
  builtinExtensions: createBuiltinExtensions(),
241
+ setupTimeoutMs: getEnvironmentConfig().extensionSetupTimeoutMs,
240
242
  });
241
243
  wireTracingShim();
242
244
  assertRequiredContracts();
@@ -300,6 +302,7 @@ export async function bootstrap(projectDir, adapter) {
300
302
  logger: bootstrapLog,
301
303
  primeContracts: { [LLMProviderRegistryName]: createLLMProviderRegistry() },
302
304
  builtinExtensions: createBuiltinExtensions(),
305
+ setupTimeoutMs: getEnvironmentConfig().extensionSetupTimeoutMs,
303
306
  }), fsDispose);
304
307
  wireTracingShim();
305
308
  assertRequiredContracts();
@@ -1,7 +1,7 @@
1
1
  import * as dntShim from "../../../../../_dnt.shims.js";
2
2
  import { getMCPRegistry, getMCPStats } from "../../../../mcp/index.js";
3
3
  import { REQUEST_ERROR } from "../../../../errors/index.js";
4
- import { executeTool, toolRegistry } from "../../../../tool/index.js";
4
+ import { executeTool, isToolVisibleTo, toolRegistry } from "../../../../tool/index.js";
5
5
  import { resourceRegistry } from "../../../../resource/index.js";
6
6
  import { promptRegistry } from "../../../../prompt/index.js";
7
7
  import { agentRegistry } from "../../../../agent/composition/index.js";
@@ -166,7 +166,7 @@ function handleListPrompts() {
166
166
  return jsonResponse({ prompts: list, count: list.length });
167
167
  }
168
168
  function handleListAgents() {
169
- const allToolIds = Array.from(toolRegistry.getAll().keys());
169
+ const allTools = Array.from(toolRegistry.getAll().entries());
170
170
  const list = Array.from(agentRegistry.getAll().entries()).map(([id, agent]) => {
171
171
  const cfg = agent.config;
172
172
  let system = null;
@@ -176,7 +176,10 @@ function handleListAgents() {
176
176
  system = "(dynamic)";
177
177
  let tools = {};
178
178
  if (cfg.tools === true) {
179
- tools = Object.fromEntries(allToolIds.map((tid) => [tid, true]));
179
+ // Owner-aware: list only tools this agent can actually resolve.
180
+ tools = Object.fromEntries(allTools
181
+ .filter(([, registryTool]) => isToolVisibleTo(registryTool, { agentId: id }))
182
+ .map(([tid]) => [tid, true]));
180
183
  }
181
184
  else if (typeof cfg.tools === "object" && cfg.tools !== null) {
182
185
  tools = cfg.tools;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAwBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAUnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AA2SD,qBAAa,kBAAmB,SAAQ,WAAW;IASrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,QAAQ,EAAE,eAAe,CAMvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmKxE"}
1
+ {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAwBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAYnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AA2SD,qBAAa,kBAAmB,SAAQ,WAAW;IASrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,QAAQ,EAAE,eAAe,CAMvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CA4KxE"}
@@ -9,6 +9,8 @@ import { buildRuntimeAgentControlPlaneStreamRequestFromInvocation, RuntimeAgentR
9
9
  import { getInternalAgentStreamRequestSchema, toRuntimeRunAgentInput, } from "../../../internal-agents/schema.js";
10
10
  import { BaseHandler } from "../response/base.js";
11
11
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
12
+ import { buildRuntimeShuttingDownResponse } from "./runtime-shutdown-response.js";
13
+ import { isServerShuttingDown } from "../../shutdown-state.js";
12
14
  import { getHostEnv } from "../../../platform/compat/process.js";
13
15
  import { serverLogger } from "../../../utils/index.js";
14
16
  import { EnvironmentVariableCache, fetchProjectEnvVars, runWithProjectEnv, } from "../../project-env/index.js";
@@ -252,6 +254,14 @@ export class AgentStreamHandler extends BaseHandler {
252
254
  if (!this.shouldHandle(req, ctx)) {
253
255
  return this.continue();
254
256
  }
257
+ // Lame-duck: reject NEW agent streams during graceful shutdown before any
258
+ // control-plane verification, discovery, or runtime-owner resolution, so the
259
+ // API gets a clean pre-side-effect failure (without the runtime-owner header
260
+ // that would otherwise re-pin the run to this terminating pod) and can retry
261
+ // against another instance. In-flight streams are unaffected.
262
+ if (isServerShuttingDown()) {
263
+ return this.respond(buildRuntimeShuttingDownResponse(this.createResponseBuilder(ctx)));
264
+ }
255
265
  return this.withProxyContext(ctx, async () => {
256
266
  const builder = this.createResponseBuilder(ctx)
257
267
  .withCORS(req, ctx.securityConfig?.cors)
@@ -1 +1 @@
1
- {"version":3,"file":"channel-invoke.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/channel-invoke.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EACL,KAAK,iBAAiB,EAIvB,MAAM,6BAA6B,CAAC;AAIrC,qBAAa,oBAAqB,SAAQ,WAAW;IAOvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,iBAA4C;IAIzE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CA0BxE"}
1
+ {"version":3,"file":"channel-invoke.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/channel-invoke.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EACL,KAAK,iBAAiB,EAIvB,MAAM,6BAA6B,CAAC;AAMrC,qBAAa,oBAAqB,SAAQ,WAAW;IAOvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,iBAA4C;IAIzE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAiCxE"}
@@ -2,6 +2,8 @@ import { BaseHandler } from "../response/base.js";
2
2
  import { ChannelInvokeRequestSchema, defaultChannelInvokeDeps, executeChannelInvoke, } from "../../../channels/invoke.js";
3
3
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
4
4
  import { readSignedChannelDispatchRequest } from "./channel-dispatch-request.js";
5
+ import { buildRuntimeShuttingDownResponse } from "./runtime-shutdown-response.js";
6
+ import { isServerShuttingDown } from "../../shutdown-state.js";
5
7
  export class ChannelInvokeHandler extends BaseHandler {
6
8
  deps;
7
9
  metadata = {
@@ -17,6 +19,12 @@ export class ChannelInvokeHandler extends BaseHandler {
17
19
  if (!this.shouldHandle(req, ctx)) {
18
20
  return this.continue();
19
21
  }
22
+ // Lame-duck: reject NEW agent work during graceful shutdown before any
23
+ // dispatch verification or agent execution, so the API gets a clean
24
+ // pre-side-effect failure it can retry against another instance.
25
+ if (isServerShuttingDown()) {
26
+ return this.respond(buildRuntimeShuttingDownResponse(this.createResponseBuilder(ctx)));
27
+ }
20
28
  return this.withProxyContext(ctx, async () => {
21
29
  const builder = this.createResponseBuilder(ctx)
22
30
  .withCORS(req, ctx.securityConfig?.cors)
@@ -0,0 +1,13 @@
1
+ import type { ResponseBuilder } from "../../../security/index.js";
2
+ /** Stable error code returned when the renderer is in lame-duck shutdown mode. */
3
+ export declare const RUNTIME_SHUTTING_DOWN_CODE = "RUNTIME_SHUTTING_DOWN";
4
+ /** Human-readable message paired with {@link RUNTIME_SHUTTING_DOWN_CODE}. */
5
+ export declare const RUNTIME_SHUTTING_DOWN_MESSAGE = "Runtime is shutting down; retry against another instance";
6
+ /**
7
+ * Builds the 503 response used to reject new agent-work requests while the
8
+ * renderer is draining. Sends `Connection: close` so the API drops the keep-alive
9
+ * connection to this terminating pod, and deliberately omits the runtime-owner
10
+ * invoke URL header so the API does not re-pin the run to this pod's IP.
11
+ */
12
+ export declare function buildRuntimeShuttingDownResponse(builder: ResponseBuilder): Response;
13
+ //# sourceMappingURL=runtime-shutdown-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-shutdown-response.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/runtime-shutdown-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,6DACkB,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAOnF"}
@@ -0,0 +1,16 @@
1
+ import { HTTP_UNAVAILABLE } from "../../../utils/constants/index.js";
2
+ /** Stable error code returned when the renderer is in lame-duck shutdown mode. */
3
+ export const RUNTIME_SHUTTING_DOWN_CODE = "RUNTIME_SHUTTING_DOWN";
4
+ /** Human-readable message paired with {@link RUNTIME_SHUTTING_DOWN_CODE}. */
5
+ export const RUNTIME_SHUTTING_DOWN_MESSAGE = "Runtime is shutting down; retry against another instance";
6
+ /**
7
+ * Builds the 503 response used to reject new agent-work requests while the
8
+ * renderer is draining. Sends `Connection: close` so the API drops the keep-alive
9
+ * connection to this terminating pod, and deliberately omits the runtime-owner
10
+ * invoke URL header so the API does not re-pin the run to this pod's IP.
11
+ */
12
+ export function buildRuntimeShuttingDownResponse(builder) {
13
+ return builder
14
+ .withHeaders({ Connection: "close" })
15
+ .json({ code: RUNTIME_SHUTTING_DOWN_CODE, message: RUNTIME_SHUTTING_DOWN_MESSAGE }, HTTP_UNAVAILABLE);
16
+ }