@superblocksteam/vite-plugin-file-sync 2.0.162-next.2 → 2.0.163-next.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 (420) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +18 -7
  3. package/dist/ai-service/agent/middleware.js.map +1 -1
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  5. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +43 -29
  6. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  7. package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts.map +1 -1
  8. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js +25 -0
  9. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js.map +1 -1
  10. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.d.ts.map +1 -1
  11. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js +15 -0
  12. package/dist/ai-service/agent/subagents/coding/run-coding-subagent.js.map +1 -1
  13. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/test-api.js +4 -2
  15. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  16. package/dist/ai-service/agent/tools/app-environment/switch-selected-environment.d.ts +18 -0
  17. package/dist/ai-service/agent/tools/app-environment/switch-selected-environment.d.ts.map +1 -0
  18. package/dist/ai-service/agent/tools/app-environment/switch-selected-environment.js +61 -0
  19. package/dist/ai-service/agent/tools/app-environment/switch-selected-environment.js.map +1 -0
  20. package/dist/ai-service/agent/tools/build-capture-screenshot.js +1 -1
  21. package/dist/ai-service/agent/tools/build-install-packages.d.ts.map +1 -1
  22. package/dist/ai-service/agent/tools/build-install-packages.js +21 -8
  23. package/dist/ai-service/agent/tools/build-install-packages.js.map +1 -1
  24. package/dist/ai-service/agent/tools/build-read-file.d.ts +87 -1
  25. package/dist/ai-service/agent/tools/build-read-file.d.ts.map +1 -1
  26. package/dist/ai-service/agent/tools/build-read-file.js +453 -82
  27. package/dist/ai-service/agent/tools/build-read-file.js.map +1 -1
  28. package/dist/ai-service/agent/tools/build-write-file.d.ts +1 -0
  29. package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
  30. package/dist/ai-service/agent/tools/build-write-file.js +18 -2
  31. package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
  32. package/dist/ai-service/agent/tools/debug-cache.d.ts +11 -0
  33. package/dist/ai-service/agent/tools/debug-cache.d.ts.map +1 -1
  34. package/dist/ai-service/agent/tools/debug-cache.js +62 -14
  35. package/dist/ai-service/agent/tools/debug-cache.js.map +1 -1
  36. package/dist/ai-service/agent/tools/index.d.ts +2 -1
  37. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  38. package/dist/ai-service/agent/tools/index.js +2 -1
  39. package/dist/ai-service/agent/tools/index.js.map +1 -1
  40. package/dist/ai-service/agent/tools/integrations/metadata.d.ts +1 -0
  41. package/dist/ai-service/agent/tools/integrations/metadata.d.ts.map +1 -1
  42. package/dist/ai-service/agent/tools/integrations/metadata.js +7 -2
  43. package/dist/ai-service/agent/tools/integrations/metadata.js.map +1 -1
  44. package/dist/ai-service/agent/tools/read-file-metrics.d.ts +30 -0
  45. package/dist/ai-service/agent/tools/read-file-metrics.d.ts.map +1 -0
  46. package/dist/ai-service/agent/tools/read-file-metrics.js +158 -0
  47. package/dist/ai-service/agent/tools/read-file-metrics.js.map +1 -0
  48. package/dist/ai-service/agent/tools/subagent-isolation.d.ts +27 -0
  49. package/dist/ai-service/agent/tools/subagent-isolation.d.ts.map +1 -0
  50. package/dist/ai-service/agent/tools/subagent-isolation.js +57 -0
  51. package/dist/ai-service/agent/tools/subagent-isolation.js.map +1 -0
  52. package/dist/ai-service/agent/tools.d.ts +4 -1
  53. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  54. package/dist/ai-service/agent/tools.js +51 -5
  55. package/dist/ai-service/agent/tools.js.map +1 -1
  56. package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts.map +1 -1
  57. package/dist/ai-service/agent/tools2/tools/download-attachments.js +1 -0
  58. package/dist/ai-service/agent/tools2/tools/download-attachments.js.map +1 -1
  59. package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -1
  60. package/dist/ai-service/agent/tools2/tools/start-test-run.js +14 -0
  61. package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -1
  62. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  63. package/dist/ai-service/agent/utils.js +2 -2
  64. package/dist/ai-service/agent/utils.js.map +1 -1
  65. package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts +2 -1
  66. package/dist/ai-service/app-interface/filesystem/draft-manager.d.ts.map +1 -1
  67. package/dist/ai-service/app-interface/filesystem/draft-manager.js +3 -0
  68. package/dist/ai-service/app-interface/filesystem/draft-manager.js.map +1 -1
  69. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts +2 -1
  70. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts.map +1 -1
  71. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js +13 -11
  72. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js.map +1 -1
  73. package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts.map +1 -1
  74. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js +1 -1
  75. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
  76. package/dist/ai-service/app-interface/shell.d.ts +18 -9
  77. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  78. package/dist/ai-service/app-interface/shell.js +92 -112
  79. package/dist/ai-service/app-interface/shell.js.map +1 -1
  80. package/dist/ai-service/app-interface/typecheck-output-parser.d.ts +9 -0
  81. package/dist/ai-service/app-interface/typecheck-output-parser.d.ts.map +1 -0
  82. package/dist/ai-service/app-interface/typecheck-output-parser.js +21 -0
  83. package/dist/ai-service/app-interface/typecheck-output-parser.js.map +1 -0
  84. package/dist/ai-service/app-interface/vulnerability-gate.d.ts +5 -0
  85. package/dist/ai-service/app-interface/vulnerability-gate.d.ts.map +1 -1
  86. package/dist/ai-service/app-interface/vulnerability-gate.js +9 -2
  87. package/dist/ai-service/app-interface/vulnerability-gate.js.map +1 -1
  88. package/dist/ai-service/app-layout.d.ts +13 -0
  89. package/dist/ai-service/app-layout.d.ts.map +1 -0
  90. package/dist/ai-service/app-layout.js +25 -0
  91. package/dist/ai-service/app-layout.js.map +1 -0
  92. package/dist/ai-service/app-skills/manager.d.ts +2 -0
  93. package/dist/ai-service/app-skills/manager.d.ts.map +1 -1
  94. package/dist/ai-service/app-skills/manager.js +13 -6
  95. package/dist/ai-service/app-skills/manager.js.map +1 -1
  96. package/dist/ai-service/attachment-label-metrics.d.ts +5 -0
  97. package/dist/ai-service/attachment-label-metrics.d.ts.map +1 -0
  98. package/dist/ai-service/attachment-label-metrics.js +26 -0
  99. package/dist/ai-service/attachment-label-metrics.js.map +1 -0
  100. package/dist/ai-service/attachment-upload.d.ts.map +1 -1
  101. package/dist/ai-service/attachment-upload.js +6 -1
  102. package/dist/ai-service/attachment-upload.js.map +1 -1
  103. package/dist/ai-service/attachments/validate-prompt-attachments.d.ts +7 -0
  104. package/dist/ai-service/attachments/validate-prompt-attachments.d.ts.map +1 -0
  105. package/dist/ai-service/attachments/validate-prompt-attachments.js +96 -0
  106. package/dist/ai-service/attachments/validate-prompt-attachments.js.map +1 -0
  107. package/dist/ai-service/chat/chat-push-metrics.d.ts +17 -0
  108. package/dist/ai-service/chat/chat-push-metrics.d.ts.map +1 -1
  109. package/dist/ai-service/chat/chat-push-metrics.js +45 -0
  110. package/dist/ai-service/chat/chat-push-metrics.js.map +1 -1
  111. package/dist/ai-service/chat/chat-session-store.d.ts +51 -0
  112. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  113. package/dist/ai-service/chat/chat-session-store.js +181 -4
  114. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  115. package/dist/ai-service/features.d.ts +32 -0
  116. package/dist/ai-service/features.d.ts.map +1 -1
  117. package/dist/ai-service/features.js +32 -0
  118. package/dist/ai-service/features.js.map +1 -1
  119. package/dist/ai-service/helper-system-ai-attributes.d.ts +1 -1
  120. package/dist/ai-service/helper-system-ai-attributes.d.ts.map +1 -1
  121. package/dist/ai-service/helper-system-ai-attributes.js.map +1 -1
  122. package/dist/ai-service/index.d.ts +19 -4
  123. package/dist/ai-service/index.d.ts.map +1 -1
  124. package/dist/ai-service/index.js +176 -23
  125. package/dist/ai-service/index.js.map +1 -1
  126. package/dist/ai-service/llm/client.d.ts +9 -0
  127. package/dist/ai-service/llm/client.d.ts.map +1 -1
  128. package/dist/ai-service/llm/client.js +13 -43
  129. package/dist/ai-service/llm/client.js.map +1 -1
  130. package/dist/ai-service/llm/context-v2/adapter.d.ts +2 -0
  131. package/dist/ai-service/llm/context-v2/adapter.d.ts.map +1 -1
  132. package/dist/ai-service/llm/context-v2/adapter.js +6 -0
  133. package/dist/ai-service/llm/context-v2/adapter.js.map +1 -1
  134. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts +8 -0
  135. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts.map +1 -1
  136. package/dist/ai-service/llm/context-v2/compaction/server-side.js +8 -0
  137. package/dist/ai-service/llm/context-v2/compaction/server-side.js.map +1 -1
  138. package/dist/ai-service/llm/context-v2/context-component-partition.d.ts +24 -0
  139. package/dist/ai-service/llm/context-v2/context-component-partition.d.ts.map +1 -0
  140. package/dist/ai-service/llm/context-v2/context-component-partition.js +222 -0
  141. package/dist/ai-service/llm/context-v2/context-component-partition.js.map +1 -0
  142. package/dist/ai-service/llm/context-v2/context-metrics.d.ts +9 -0
  143. package/dist/ai-service/llm/context-v2/context-metrics.d.ts.map +1 -1
  144. package/dist/ai-service/llm/context-v2/context-metrics.js +40 -2
  145. package/dist/ai-service/llm/context-v2/context-metrics.js.map +1 -1
  146. package/dist/ai-service/llm/context-v2/context.d.ts +116 -4
  147. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  148. package/dist/ai-service/llm/context-v2/context.js +276 -64
  149. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  150. package/dist/ai-service/llm/context-v2/conversation-context.d.ts +18 -0
  151. package/dist/ai-service/llm/context-v2/conversation-context.d.ts.map +1 -1
  152. package/dist/ai-service/llm/context-v2/file-read-ledger.d.ts +218 -0
  153. package/dist/ai-service/llm/context-v2/file-read-ledger.d.ts.map +1 -0
  154. package/dist/ai-service/llm/context-v2/file-read-ledger.js +275 -0
  155. package/dist/ai-service/llm/context-v2/file-read-ledger.js.map +1 -0
  156. package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.d.ts.map +1 -1
  157. package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.js +5 -2
  158. package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.js.map +1 -1
  159. package/dist/ai-service/llm/context-v2/token-tracker.d.ts +2 -0
  160. package/dist/ai-service/llm/context-v2/token-tracker.d.ts.map +1 -1
  161. package/dist/ai-service/llm/context-v2/token-tracker.js +4 -0
  162. package/dist/ai-service/llm/context-v2/token-tracker.js.map +1 -1
  163. package/dist/ai-service/llm/context-v2/tool-schema-tokens.d.ts +22 -0
  164. package/dist/ai-service/llm/context-v2/tool-schema-tokens.d.ts.map +1 -0
  165. package/dist/ai-service/llm/context-v2/tool-schema-tokens.js +36 -0
  166. package/dist/ai-service/llm/context-v2/tool-schema-tokens.js.map +1 -0
  167. package/dist/ai-service/llm/context-v2/types.d.ts +8 -0
  168. package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -1
  169. package/dist/ai-service/llm/context-v2/types.js +48 -0
  170. package/dist/ai-service/llm/context-v2/types.js.map +1 -1
  171. package/dist/ai-service/llm/error.d.ts +2 -0
  172. package/dist/ai-service/llm/error.d.ts.map +1 -1
  173. package/dist/ai-service/llm/error.js +1 -0
  174. package/dist/ai-service/llm/error.js.map +1 -1
  175. package/dist/ai-service/llm/retry-exhaustion-reason.d.ts +2 -0
  176. package/dist/ai-service/llm/retry-exhaustion-reason.d.ts.map +1 -0
  177. package/dist/ai-service/llm/retry-exhaustion-reason.js +2 -0
  178. package/dist/ai-service/llm/retry-exhaustion-reason.js.map +1 -0
  179. package/dist/ai-service/llm/stream/errors.d.ts +6 -7
  180. package/dist/ai-service/llm/stream/errors.d.ts.map +1 -1
  181. package/dist/ai-service/llm/stream/errors.js +7 -1
  182. package/dist/ai-service/llm/stream/errors.js.map +1 -1
  183. package/dist/ai-service/llm/stream/event-bus.d.ts +9 -1
  184. package/dist/ai-service/llm/stream/event-bus.d.ts.map +1 -1
  185. package/dist/ai-service/llm/stream/event-bus.js.map +1 -1
  186. package/dist/ai-service/llm/stream/idle-monitor.d.ts.map +1 -1
  187. package/dist/ai-service/llm/stream/idle-monitor.js.map +1 -1
  188. package/dist/ai-service/llm/stream/observers/context.d.ts.map +1 -1
  189. package/dist/ai-service/llm/stream/observers/context.js +13 -0
  190. package/dist/ai-service/llm/stream/observers/context.js.map +1 -1
  191. package/dist/ai-service/llm/stream/observers/llmobs.d.ts +14 -1
  192. package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
  193. package/dist/ai-service/llm/stream/observers/llmobs.js +91 -7
  194. package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
  195. package/dist/ai-service/llm/stream/observers/logging.d.ts +3 -1
  196. package/dist/ai-service/llm/stream/observers/logging.d.ts.map +1 -1
  197. package/dist/ai-service/llm/stream/observers/logging.js +73 -52
  198. package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
  199. package/dist/ai-service/llm/stream/observers/retry-notification.d.ts.map +1 -1
  200. package/dist/ai-service/llm/stream/observers/retry-notification.js +16 -9
  201. package/dist/ai-service/llm/stream/observers/retry-notification.js.map +1 -1
  202. package/dist/ai-service/llm/stream/orchestrator.d.ts +5 -1
  203. package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
  204. package/dist/ai-service/llm/stream/orchestrator.js +103 -12
  205. package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
  206. package/dist/ai-service/llm/stream/retry-engine.d.ts +3 -1
  207. package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
  208. package/dist/ai-service/llm/stream/retry-engine.js +9 -0
  209. package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
  210. package/dist/ai-service/llm/stream/session.d.ts +8 -1
  211. package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
  212. package/dist/ai-service/llm/stream/session.js +19 -0
  213. package/dist/ai-service/llm/stream/session.js.map +1 -1
  214. package/dist/ai-service/llm/stream/types.d.ts +13 -0
  215. package/dist/ai-service/llm/stream/types.d.ts.map +1 -1
  216. package/dist/ai-service/llm/stream/wait-state-tracker.d.ts +5 -14
  217. package/dist/ai-service/llm/stream/wait-state-tracker.d.ts.map +1 -1
  218. package/dist/ai-service/llm/stream/wait-state-tracker.js +25 -0
  219. package/dist/ai-service/llm/stream/wait-state-tracker.js.map +1 -1
  220. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +8 -8
  221. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -1
  222. package/dist/ai-service/policy-gate-remediation-usage.d.ts +2 -0
  223. package/dist/ai-service/policy-gate-remediation-usage.d.ts.map +1 -0
  224. package/dist/ai-service/policy-gate-remediation-usage.js +56 -0
  225. package/dist/ai-service/policy-gate-remediation-usage.js.map +1 -0
  226. package/dist/ai-service/prompts/summarize-destructive-migration.d.ts +12 -0
  227. package/dist/ai-service/prompts/summarize-destructive-migration.d.ts.map +1 -0
  228. package/dist/ai-service/prompts/summarize-destructive-migration.js +37 -0
  229. package/dist/ai-service/prompts/summarize-destructive-migration.js.map +1 -0
  230. package/dist/ai-service/recording/storage/session-recording-storage.js +2 -2
  231. package/dist/ai-service/recording/storage/session-recording-storage.js.map +1 -1
  232. package/dist/ai-service/security/secret-scanner-service.d.ts.map +1 -1
  233. package/dist/ai-service/security/secret-scanner-service.js +88 -23
  234. package/dist/ai-service/security/secret-scanner-service.js.map +1 -1
  235. package/dist/ai-service/skills/index.d.ts +0 -7
  236. package/dist/ai-service/skills/index.d.ts.map +1 -1
  237. package/dist/ai-service/skills/index.js +0 -9
  238. package/dist/ai-service/skills/index.js.map +1 -1
  239. package/dist/ai-service/skills/system/_registry.generated.d.ts.map +1 -1
  240. package/dist/ai-service/skills/system/_registry.generated.js +4 -0
  241. package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
  242. package/dist/ai-service/skills/system/resolve.d.ts +2 -0
  243. package/dist/ai-service/skills/system/resolve.d.ts.map +1 -0
  244. package/dist/ai-service/skills/system/resolve.js +32 -0
  245. package/dist/ai-service/skills/system/resolve.js.map +1 -0
  246. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-legacy.generated.d.ts +2 -0
  247. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-legacy.generated.d.ts.map +1 -0
  248. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-legacy.generated.js +9 -0
  249. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-legacy.generated.js.map +1 -0
  250. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-sdk.generated.d.ts +2 -0
  251. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-sdk.generated.d.ts.map +1 -0
  252. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-sdk.generated.js +11 -0
  253. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-imports-sdk.generated.js.map +1 -0
  254. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  255. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  256. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +16 -24
  257. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  258. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
  259. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
  260. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +1 -1
  261. package/dist/ai-service/state-machine/clark-fsm.d.ts +11 -0
  262. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  263. package/dist/ai-service/state-machine/clark-fsm.js +7 -1
  264. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  265. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  266. package/dist/ai-service/state-machine/handlers/agent-planning.js +21 -0
  267. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  268. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  269. package/dist/ai-service/state-machine/handlers/llm-generating.js +32 -9
  270. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  271. package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
  272. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +21 -2
  273. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
  274. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +11 -2
  275. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
  276. package/dist/ai-service/state-machine/helpers/stable-peer.js +105 -18
  277. package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
  278. package/dist/ai-service/state-machine/mocks.d.ts +3 -1
  279. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  280. package/dist/ai-service/state-machine/mocks.js +52 -13
  281. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  282. package/dist/ai-service/tasks/peer-push.d.ts +3 -0
  283. package/dist/ai-service/tasks/peer-push.d.ts.map +1 -1
  284. package/dist/ai-service/tasks/peer-push.js +33 -0
  285. package/dist/ai-service/tasks/peer-push.js.map +1 -1
  286. package/dist/ai-service/util/call-peer.d.ts +2 -0
  287. package/dist/ai-service/util/call-peer.d.ts.map +1 -1
  288. package/dist/ai-service/util/call-peer.js +17 -4
  289. package/dist/ai-service/util/call-peer.js.map +1 -1
  290. package/dist/ai-service/util/line-ranges.d.ts +21 -0
  291. package/dist/ai-service/util/line-ranges.d.ts.map +1 -0
  292. package/dist/ai-service/util/line-ranges.js +36 -0
  293. package/dist/ai-service/util/line-ranges.js.map +1 -0
  294. package/dist/ai-service/util/peer-liveness.d.ts +1 -0
  295. package/dist/ai-service/util/peer-liveness.d.ts.map +1 -1
  296. package/dist/ai-service/util/peer-liveness.js +2 -0
  297. package/dist/ai-service/util/peer-liveness.js.map +1 -1
  298. package/dist/dev-server-ws-smoke-client.d.ts.map +1 -1
  299. package/dist/dev-server-ws-smoke-client.js +7 -0
  300. package/dist/dev-server-ws-smoke-client.js.map +1 -1
  301. package/dist/draft-interface.d.ts +8 -0
  302. package/dist/draft-interface.d.ts.map +1 -1
  303. package/dist/early-error-relay.d.ts +2 -0
  304. package/dist/early-error-relay.d.ts.map +1 -1
  305. package/dist/early-error-relay.js +7 -3
  306. package/dist/early-error-relay.js.map +1 -1
  307. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  308. package/dist/file-sync-vite-plugin.js +43 -15
  309. package/dist/file-sync-vite-plugin.js.map +1 -1
  310. package/dist/file-system-helpers.d.ts +2 -2
  311. package/dist/file-system-helpers.d.ts.map +1 -1
  312. package/dist/file-system-helpers.js +3 -3
  313. package/dist/file-system-helpers.js.map +1 -1
  314. package/dist/git-service/errors.d.ts +9 -0
  315. package/dist/git-service/errors.d.ts.map +1 -1
  316. package/dist/git-service/errors.js +15 -0
  317. package/dist/git-service/errors.js.map +1 -1
  318. package/dist/git-service/index.d.ts +2 -2
  319. package/dist/git-service/index.d.ts.map +1 -1
  320. package/dist/git-service/index.js +2 -2
  321. package/dist/git-service/index.js.map +1 -1
  322. package/dist/index.d.ts +1 -0
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +1 -0
  325. package/dist/index.js.map +1 -1
  326. package/dist/lock-service/activity-tracker.d.ts +5 -0
  327. package/dist/lock-service/activity-tracker.d.ts.map +1 -1
  328. package/dist/lock-service/activity-tracker.js +10 -0
  329. package/dist/lock-service/activity-tracker.js.map +1 -1
  330. package/dist/lock-service/index.d.ts +69 -4
  331. package/dist/lock-service/index.d.ts.map +1 -1
  332. package/dist/lock-service/index.js +139 -29
  333. package/dist/lock-service/index.js.map +1 -1
  334. package/dist/migration-templates/app-fullstack/client/components/ui/accordion.tsx +9 -65
  335. package/dist/migration-templates/app-fullstack/client/components/ui/area-chart.tsx +36 -156
  336. package/dist/migration-templates/app-fullstack/client/components/ui/aspect-ratio.tsx +1 -5
  337. package/dist/migration-templates/app-fullstack/client/components/ui/avatar.tsx +4 -18
  338. package/dist/migration-templates/app-fullstack/client/components/ui/badge.tsx +6 -29
  339. package/dist/migration-templates/app-fullstack/client/components/ui/bar-chart.tsx +41 -167
  340. package/dist/migration-templates/app-fullstack/client/components/ui/breadcrumb.tsx +1 -4
  341. package/dist/migration-templates/app-fullstack/client/components/ui/button.tsx +5 -64
  342. package/dist/migration-templates/app-fullstack/client/components/ui/calendar.tsx +6 -42
  343. package/dist/migration-templates/app-fullstack/client/components/ui/card.tsx +1 -4
  344. package/dist/migration-templates/app-fullstack/client/components/ui/checkbox.tsx +4 -29
  345. package/dist/migration-templates/app-fullstack/client/components/ui/date-range-picker.tsx +13 -154
  346. package/dist/migration-templates/app-fullstack/client/components/ui/dialog.tsx +7 -34
  347. package/dist/migration-templates/app-fullstack/client/components/ui/file-dropzone.tsx +12 -95
  348. package/dist/migration-templates/app-fullstack/client/components/ui/file-input.tsx +12 -73
  349. package/dist/migration-templates/app-fullstack/client/components/ui/hover-card.tsx +10 -66
  350. package/dist/migration-templates/app-fullstack/client/components/ui/icon.tsx +3 -16
  351. package/dist/migration-templates/app-fullstack/client/components/ui/image.tsx +4 -16
  352. package/dist/migration-templates/app-fullstack/client/components/ui/input.tsx +18 -159
  353. package/dist/migration-templates/app-fullstack/client/components/ui/label.tsx +1 -4
  354. package/dist/migration-templates/app-fullstack/client/components/ui/line-chart.tsx +32 -148
  355. package/dist/migration-templates/app-fullstack/client/components/ui/link.tsx +4 -24
  356. package/dist/migration-templates/app-fullstack/client/components/ui/navigation-menu.tsx +3 -24
  357. package/dist/migration-templates/app-fullstack/client/components/ui/pagination.tsx +4 -24
  358. package/dist/migration-templates/app-fullstack/client/components/ui/pie-chart.tsx +28 -142
  359. package/dist/migration-templates/app-fullstack/client/components/ui/popover.tsx +9 -61
  360. package/dist/migration-templates/app-fullstack/client/components/ui/progress.tsx +2 -11
  361. package/dist/migration-templates/app-fullstack/client/components/ui/radar-chart.tsx +37 -171
  362. package/dist/migration-templates/app-fullstack/client/components/ui/radial-chart.tsx +50 -202
  363. package/dist/migration-templates/app-fullstack/client/components/ui/select.tsx +5 -35
  364. package/dist/migration-templates/app-fullstack/client/components/ui/separator.tsx +1 -8
  365. package/dist/migration-templates/app-fullstack/client/components/ui/sheet.tsx +7 -40
  366. package/dist/migration-templates/app-fullstack/client/components/ui/sidebar.tsx +3 -35
  367. package/dist/migration-templates/app-fullstack/client/components/ui/slider.tsx +11 -95
  368. package/dist/migration-templates/app-fullstack/client/components/ui/switch.tsx +5 -32
  369. package/dist/migration-templates/app-fullstack/client/components/ui/textarea.tsx +13 -90
  370. package/dist/migration-templates/app-fullstack/client/components/ui/toggle-group.tsx +11 -75
  371. package/dist/migration-templates/app-fullstack/client/components/ui/toggle.tsx +8 -70
  372. package/dist/migration-templates/app-fullstack/client/components/ui/tooltip.tsx +9 -62
  373. package/dist/parsing/imports.d.ts +22 -0
  374. package/dist/parsing/imports.d.ts.map +1 -1
  375. package/dist/parsing/imports.js +71 -0
  376. package/dist/parsing/imports.js.map +1 -1
  377. package/dist/reconnect-guard-plugin.d.ts +53 -0
  378. package/dist/reconnect-guard-plugin.d.ts.map +1 -0
  379. package/dist/reconnect-guard-plugin.js +203 -0
  380. package/dist/reconnect-guard-plugin.js.map +1 -0
  381. package/dist/resolver.d.ts +2 -1
  382. package/dist/resolver.d.ts.map +1 -1
  383. package/dist/resolver.js +4 -6
  384. package/dist/resolver.js.map +1 -1
  385. package/dist/router-parser-metrics.d.ts +2 -1
  386. package/dist/router-parser-metrics.d.ts.map +1 -1
  387. package/dist/router-parser-metrics.js.map +1 -1
  388. package/dist/router-parser.d.ts +10 -1
  389. package/dist/router-parser.d.ts.map +1 -1
  390. package/dist/router-parser.js +306 -69
  391. package/dist/router-parser.js.map +1 -1
  392. package/dist/scan-scope-merge-metrics.d.ts +2 -0
  393. package/dist/scan-scope-merge-metrics.d.ts.map +1 -0
  394. package/dist/scan-scope-merge-metrics.js +18 -0
  395. package/dist/scan-scope-merge-metrics.js.map +1 -0
  396. package/dist/scan-scope-merge.d.ts +2 -2
  397. package/dist/scan-scope-merge.d.ts.map +1 -1
  398. package/dist/scan-scope-merge.js +64 -14
  399. package/dist/scan-scope-merge.js.map +1 -1
  400. package/dist/server-rpc/index.d.ts.map +1 -1
  401. package/dist/server-rpc/index.js +12 -2
  402. package/dist/server-rpc/index.js.map +1 -1
  403. package/dist/socket-manager.d.ts +1 -1
  404. package/dist/socket-manager.d.ts.map +1 -1
  405. package/dist/socket-manager.js +276 -15
  406. package/dist/socket-manager.js.map +1 -1
  407. package/dist/sync-service/download.js +2 -2
  408. package/dist/sync-service/download.js.map +1 -1
  409. package/dist/sync-service/index.d.ts +95 -22
  410. package/dist/sync-service/index.d.ts.map +1 -1
  411. package/dist/sync-service/index.js +402 -56
  412. package/dist/sync-service/index.js.map +1 -1
  413. package/dist/sync-service/page-reference-guard.d.ts +17 -0
  414. package/dist/sync-service/page-reference-guard.d.ts.map +1 -0
  415. package/dist/sync-service/page-reference-guard.js +170 -0
  416. package/dist/sync-service/page-reference-guard.js.map +1 -0
  417. package/dist/util.d.ts.map +1 -1
  418. package/dist/util.js +16 -2
  419. package/dist/util.js.map +1 -1
  420. package/package.json +15 -14
@@ -1,41 +1,257 @@
1
+ import { createHash } from "node:crypto";
2
+ import { createTwoFilesPatch } from "diff";
1
3
  import z from "zod";
2
4
  import { recordAppKnowledgeReadIfApplicable } from "../../knowledge/knowledge-metrics-emitters.js";
3
- import { SKILL_PATH_PREFIXES, SkillLayer } from "../../skills/types.js";
5
+ import { isSkillPath, SKILL_PATH_PREFIXES, SkillLayer, } from "../../skills/types.js";
6
+ import { normalizeRanges } from "../../util/line-ranges.js";
4
7
  import { createToolFactory, ToolCategory, ToolExecutionError, } from "../tools2/types.js";
8
+ import { classifyReadFilePath, recordBuildReadFile, } from "./read-file-metrics.js";
5
9
  const MAX_LIMIT_READ_FILES = 25000;
10
+ const DEFAULT_PAGE_CHARS = 10000;
11
+ const DEFAULT_PAGE_LINES = 300;
12
+ const SKILL_FULL_READ_CHARS = 40000;
6
13
  const ERROR_PREFIX = "Failed to read file:";
14
+ const ALREADY_READ_MESSAGE = `This skill file has already been read in this session and is still in context. You do not need to read it again.`;
15
+ function isReadFileContent(output) {
16
+ return (typeof output === "object" &&
17
+ output !== null &&
18
+ output.kind === "content");
19
+ }
20
+ export function renderReadFileOutput(output) {
21
+ if (!isReadFileContent(output)) {
22
+ return typeof output === "string" ? output : String(output);
23
+ }
24
+ const parts = [];
25
+ if (output.nextStart !== undefined) {
26
+ const remaining = output.totalLines - output.nextStart + 1;
27
+ parts.push(`<truncated nextStart="${output.nextStart}" remaining="${remaining}"/>`);
28
+ }
29
+ parts.push(...output.ranges.map((range) => `<content range="${range.start}-${range.end}" lines="${range.end - range.start + 1}">\n${range.content}\n</content>`));
30
+ return `<file totalLines="${output.totalLines}">\n${parts.join("\n")}\n</file>`;
31
+ }
7
32
  /**
8
- * Clamps requested ranges to the file, drops ranges that fall past its end, and
9
- * merges overlapping or adjacent ranges so each line is served once. Returns
10
- * 1-indexed inclusive ranges in ascending order.
33
+ * Marks a stub returned instead of content the model can already see. Shared
34
+ * with the eval assertions so the two cannot drift.
11
35
  */
12
- function normalizeRanges(ranges, totalLines) {
13
- const clamped = ranges
14
- .map((range) => ({
15
- start: Math.max(1, range.start),
16
- end: Math.min(totalLines, range.end),
17
- }))
18
- .filter((range) => range.start <= range.end)
19
- .sort((a, b) => a.start - b.start || a.end - b.end);
20
- const merged = [];
21
- for (const range of clamped) {
22
- const last = merged.at(-1);
23
- if (last && range.start <= last.end + 1) {
24
- last.end = Math.max(last.end, range.end);
25
- continue;
36
+ export const BUILD_READ_FILE_STUB_MARKER = 'status="already-in-context"';
37
+ /**
38
+ * Inclusive 1-indexed end line of a page starting at `startLine`. Stops at
39
+ * `maxLines` or before the joined body would exceed `maxChars`. Always includes
40
+ * the first line even when that line alone is over `maxChars`.
41
+ */
42
+ function selectPageEnd(lines, startLine, maxChars, maxLines) {
43
+ const startIdx = startLine - 1;
44
+ const firstLine = lines[startIdx];
45
+ if (firstLine === undefined) {
46
+ return startLine - 1;
47
+ }
48
+ let endLine = startLine;
49
+ let charCount = firstLine.length;
50
+ const maxEnd = Math.min(lines.length, startIdx + maxLines);
51
+ for (let i = startIdx + 1; i < maxEnd; i++) {
52
+ const nextLine = lines[i];
53
+ if (nextLine === undefined) {
54
+ break;
26
55
  }
27
- merged.push({ ...range });
56
+ const nextCount = charCount + 1 + nextLine.length;
57
+ if (nextCount > maxChars) {
58
+ break;
59
+ }
60
+ charCount = nextCount;
61
+ endLine = i + 1;
62
+ }
63
+ return endLine;
64
+ }
65
+ function sliceBody(lines, startLine, endLine) {
66
+ return lines.slice(startLine - 1, endLine).join("\n");
67
+ }
68
+ /**
69
+ * Splitting on newlines yields a trailing empty element when the file ends in
70
+ * a newline. Drop that phantom line so a 300-line POSIX file is not reported
71
+ * as 301.
72
+ */
73
+ function splitFileLines(fileContent) {
74
+ const lines = fileContent.split("\n");
75
+ if (lines.length > 1 && lines[lines.length - 1] === "") {
76
+ lines.pop();
77
+ }
78
+ return lines;
79
+ }
80
+ function buildLeadingBlock(lines, totalLines, endLine, paged) {
81
+ const complete = endLine === totalLines;
82
+ return {
83
+ kind: "content",
84
+ totalLines,
85
+ ranges: [{ start: 1, end: endLine, content: sliceBody(lines, 1, endLine) }],
86
+ complete,
87
+ ...(paged && !complete ? { nextStart: endLine + 1 } : {}),
88
+ };
89
+ }
90
+ /**
91
+ * First delivered line that blows the cap even when returned on its own. The
92
+ * probe reproduces the shape a single-line result would really have so the
93
+ * answer does not drift from what the caller would get if it retried.
94
+ */
95
+ function findUnsplittableLine(result, lines) {
96
+ for (const range of result.ranges) {
97
+ for (let line = range.start; line <= range.end; line++) {
98
+ const alone = {
99
+ kind: "content",
100
+ totalLines: result.totalLines,
101
+ ranges: [{ start: line, end: line, content: lines[line - 1] ?? "" }],
102
+ complete: line === 1 && result.totalLines === 1,
103
+ ...(line < result.totalLines ? { nextStart: line + 1 } : {}),
104
+ };
105
+ if (renderReadFileOutput(alone).length > MAX_LIMIT_READ_FILES) {
106
+ return line;
107
+ }
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ /**
113
+ * The rendered size is the only budget the model sees, so every construction
114
+ * path checks it here. `fallbackMessage` carries the path-specific advice, but
115
+ * a line that cannot fit on its own is named instead: "use smaller ranges"
116
+ * sends the agent bisecting toward a range it can never satisfy.
117
+ */
118
+ function enforceRenderedCap(result, lines, fallbackMessage) {
119
+ if (renderReadFileOutput(result).length <= MAX_LIMIT_READ_FILES) {
120
+ return result;
121
+ }
122
+ const unsplittable = findUnsplittableLine(result, lines);
123
+ throw new ToolExecutionError(unsplittable === undefined
124
+ ? fallbackMessage
125
+ : `Line ${unsplittable} of this file is ${lines[unsplittable - 1]?.length ?? 0} characters, which alone exceeds the ${MAX_LIMIT_READ_FILES}-character result limit. That line cannot be returned; request ranges that exclude it.`, { toolName: "", input: {}, context: {}, severity: "warn" });
126
+ }
127
+ function buildDefaultPage(lines, totalLines) {
128
+ let endLine = selectPageEnd(lines, 1, DEFAULT_PAGE_CHARS, DEFAULT_PAGE_LINES);
129
+ let result = buildLeadingBlock(lines, totalLines, endLine, true);
130
+ while (renderReadFileOutput(result).length > MAX_LIMIT_READ_FILES &&
131
+ endLine > 1) {
132
+ endLine -= 1;
133
+ result = buildLeadingBlock(lines, totalLines, endLine, true);
134
+ }
135
+ // Only reachable once the page is down to a single line, so telling the
136
+ // caller to use ranges would just route it into the ranged-read cap.
137
+ return enforceRenderedCap(result, lines, `The first line of this file cannot be returned within the ${MAX_LIMIT_READ_FILES}-character result limit.`);
138
+ }
139
+ /**
140
+ * Clark is told to read app knowledge at `skills/app/*`; the virtual skill
141
+ * prefix for the same files is `.superblocks/skills/app/`. Treat both as
142
+ * user-authored skill paths so they get the 25k one-shot, not the 10k page.
143
+ */
144
+ function isUserAuthoredSkillPath(filePath) {
145
+ if (filePath.startsWith(SKILL_PATH_PREFIXES[SkillLayer.SYSTEM])) {
146
+ return false;
147
+ }
148
+ return isSkillPath(filePath) || filePath.startsWith("skills/app/");
149
+ }
150
+ function buildFullRead(lines, totalLines, enforceCap) {
151
+ const result = buildLeadingBlock(lines, totalLines, totalLines, false);
152
+ if (!enforceCap) {
153
+ return result;
28
154
  }
29
- return merged;
155
+ return enforceRenderedCap(result, lines, `The file is too large to read all at once. Please read it in parts by specifying line ranges.`);
30
156
  }
31
- export const buildReadFileToolFactory = createToolFactory("build_readFile", ({ services, skillReadTracker, }) => {
157
+ /**
158
+ * Structured like the content envelope because models re-read partly just to
159
+ * relearn line numbers. The closing instruction is the model-visible half of
160
+ * the ledger's auto-bypass: asking again serves the bytes.
161
+ */
162
+ function buildAlreadyInContextStub(filePath, totalLines, servedRanges) {
163
+ const served = servedRanges
164
+ .map((range) => `${range.start}-${range.end}`)
165
+ .join(",");
166
+ return (`<file path="${filePath}" lines="${totalLines}" ${BUILD_READ_FILE_STUB_MARKER} served="${served}"/>\n` +
167
+ `This file's current content is unchanged from the copy already in your context.\n` +
168
+ `Call this tool again for the same path if you cannot see it.`);
169
+ }
170
+ /**
171
+ * Matches only the complete, single-range envelope `renderReadFileOutput`
172
+ * writes for a full read (`result.complete === true`, no `<truncated>`
173
+ * prefix) - not a ranged/paged read, and not a previous diff or stub, both of
174
+ * which have a different shape. This is what keeps diff re-injection from
175
+ * chaining: a read served as a diff cannot itself become the base of a later
176
+ * diff, because its own output no longer matches this pattern. The next
177
+ * change after a diff-served read falls back to a full serve, which becomes
178
+ * a valid base again.
179
+ */
180
+ const FULL_READ_ENVELOPE_PATTERN = /^<file totalLines="\d+">\n<content range="1-\d+" lines="\d+">\n([\s\S]*)\n<\/content>\n<\/file>$/;
181
+ function extractFullReadContent(output) {
182
+ return FULL_READ_ENVELOPE_PATTERN.exec(output)?.[1];
183
+ }
184
+ /**
185
+ * Only diff-reinject when the delta is meaningfully cheaper than just serving
186
+ * the current content again. A near-total rewrite must not regress to a diff
187
+ * larger than the file it stands in for.
188
+ */
189
+ const DIFF_SIZE_GUARD_RATIO = 0.6;
190
+ /** Opening tag of a diff re-injection, for the paths that have to spot one. */
191
+ const DIFF_OUTPUT_PREFIX = "<file-diff";
192
+ function isDiffReinjectionOutput(output) {
193
+ return typeof output === "string" && output.startsWith(DIFF_OUTPUT_PREFIX);
194
+ }
195
+ /**
196
+ * Builds a diff-based re-injection output when the file changed since a
197
+ * still-live full read, and it is worth serving over the full new content.
198
+ * Returns undefined whenever any precondition fails, so the caller always has
199
+ * a safe, correct fallback: serve `fullOutput` as if this were never tried.
200
+ */
201
+ function buildDiffReinjectionOutput(input) {
202
+ const { fileReadTracker, isFullRead, evaluation, filePath, fileContent } = input;
203
+ if (!isFullRead ||
204
+ !fileReadTracker?.diffReinjectionEnabled ||
205
+ evaluation?.decision !== "serve" ||
206
+ evaluation.reason !== "content_changed" ||
207
+ !evaluation.previousFullReadToolCallId) {
208
+ return undefined;
209
+ }
210
+ const previousOutput = fileReadTracker.getPreviousReadText(evaluation.previousFullReadToolCallId);
211
+ const previousContent = previousOutput !== undefined
212
+ ? extractFullReadContent(previousOutput)
213
+ : undefined;
214
+ if (previousContent === undefined) {
215
+ return undefined;
216
+ }
217
+ const patch = createTwoFilesPatch(filePath, filePath, previousContent, fileContent);
218
+ const output = `<file-diff path="${filePath}" from-read="${evaluation.previousFullReadToolCallId}">\n` +
219
+ `${patch}` +
220
+ `</file-diff>\n` +
221
+ `Diff since your last full read of this file. Combine with that content for the current file, or call again for the full file.`;
222
+ if (output.length >= input.fullOutput.length * DIFF_SIZE_GUARD_RATIO) {
223
+ return undefined;
224
+ }
225
+ return { output, baseToolCallId: evaluation.previousFullReadToolCallId };
226
+ }
227
+ export const buildReadFileToolFactory = createToolFactory("build_readFile", ({ services, skillReadTracker, fileReadTracker, defaultReadMode = "page", }) => {
228
+ const pages = defaultReadMode === "page";
229
+ // Only promise the stub when this session will actually return one. At the
230
+ // default `off`, and under `observe`, the tool always serves content.
231
+ const dedupeEnforced = fileReadTracker !== undefined && !fileReadTracker.observeOnly;
32
232
  return {
33
233
  category: ToolCategory.FILE,
34
- description: `
35
- Read content from a file in the application. You can read the entire file or specify line ranges to read specific portions.
36
- - If the file is too large (>25k characters), you must read it in parts by specifying line ranges.
37
- - You can specify multiple ranges to read different sections of the file.
38
- - Only 25k characters can be read at once across all ranges.
234
+ description: pages
235
+ ? `
236
+ Read content from a file in the application.
237
+ - When ranges are omitted, return the first page: up to ${DEFAULT_PAGE_LINES} lines or ${DEFAULT_PAGE_CHARS} characters of file body, whichever is first.
238
+ - If the last returned line is not the last file line, the result leads with <truncated nextStart="N" remaining="M"/>, including ranged reads that were delivered in full. Resume with ranges starting at N. If there is no <truncated> element, this result reached the end of the file.
239
+ - File bytes are only inside <content>. <file totalLines="N"> is the full file length. Compare content range attributes to totalLines to see which lines this result actually holds.
240
+ - Org, user, integration, and app skill files that wrap under ${MAX_LIMIT_READ_FILES} characters are returned in full.
241
+ - System skill files under ${SKILL_FULL_READ_CHARS} characters are returned in full.
242
+ - Explicit ranges are returned as requested. Multiple ranges are allowed. The wrapped result must stay under ${MAX_LIMIT_READ_FILES} characters; oversized ranges error instead of truncating.${dedupeEnforced
243
+ ? `
244
+ - If you have already read a file in this session and it has not changed, this tool returns a short stub instead of the content.`
245
+ : ""}
246
+ `
247
+ : `
248
+ Read content from a file in the application.
249
+ - When ranges are omitted, the entire file is returned. Results over ${MAX_LIMIT_READ_FILES} characters error instead of truncating; read those files in parts by specifying line ranges.
250
+ - File bytes are only inside <content>. <file totalLines="N"> is the full file length. If a ranged read's last line is not the last file line, it leads with <truncated nextStart remaining/>.
251
+ - Explicit ranges are returned as requested. Multiple ranges are allowed.${dedupeEnforced
252
+ ? `
253
+ - If you have already read a file in this session and it has not changed, this tool returns a short stub instead of the content.`
254
+ : ""}
39
255
  `,
40
256
  inputSchema: z.object({
41
257
  filePath: z.string().describe("Path to the file to read"),
@@ -53,59 +269,188 @@ export const buildReadFileToolFactory = createToolFactory("build_readFile", ({ s
53
269
  .describe("Ending line number (1-indexed, inclusive)"),
54
270
  }))
55
271
  .optional()
56
- .describe("Optional line ranges to read. If not provided, attempts to read the entire file."),
272
+ .describe(pages
273
+ ? `Optional 1-indexed inclusive line ranges. If omitted, the first page is returned (${DEFAULT_PAGE_LINES} lines or ${DEFAULT_PAGE_CHARS} characters, whichever is first) unless this is a skill file under ${MAX_LIMIT_READ_FILES} characters or a system skill under ${SKILL_FULL_READ_CHARS} characters.`
274
+ : "Optional 1-indexed inclusive line ranges. If omitted, the entire file is returned."),
57
275
  }),
58
- execute: async ({ filePath, ranges }) => {
59
- let fileContent;
60
- let lines;
61
- let totalLines;
62
- // Deduplicate full reads of system skill files that are already in context
276
+ execute: async ({ filePath, ranges }, { toolCallId }) => {
63
277
  const isSystemSkill = filePath.startsWith(SKILL_PATH_PREFIXES[SkillLayer.SYSTEM]);
64
- if (isSystemSkill &&
65
- (!ranges || ranges.length === 0) &&
66
- skillReadTracker?.hasRead(filePath)) {
67
- return `This skill file has already been read in this session and is still in context. You do not need to read it again.`;
278
+ const unranged = !ranges || ranges.length === 0;
279
+ // Deduplicate full reads of system skill files that are already in
280
+ // context. Predates the read ledger and stays until the ledger is at
281
+ // 100%: it also drives `protected`, not just dedupe.
282
+ if (isSystemSkill && unranged && skillReadTracker?.hasRead(filePath)) {
283
+ return ALREADY_READ_MESSAGE;
68
284
  }
69
285
  try {
70
- fileContent = await services.appShell.readFile(filePath);
71
- lines = fileContent.split("\n");
72
- totalLines = lines.length;
73
- // If no ranges specified, check if entire file is too large
74
- if (!ranges || ranges.length === 0) {
75
- // Read entire file
76
- const output = `<file lines="${totalLines}">\n<content range="1-${totalLines}" lines="${totalLines}">\n${fileContent}\n</content>\n</file>`;
77
- if (output.length > MAX_LIMIT_READ_FILES) {
78
- throw new ToolExecutionError(`The file is too large to read all at once. Please read it in parts by specifying line ranges.`, { toolName: "", input: {}, context: {}, severity: "warn" });
79
- }
80
- if (isSystemSkill) {
81
- skillReadTracker?.markRead(filePath);
286
+ const fileContent = await services.appShell.readFile(filePath);
287
+ const lines = splitFileLines(fileContent);
288
+ const totalLines = lines.length;
289
+ const emit = (decision, reason, charsServed, charsSuppressed) => {
290
+ if (!fileReadTracker) {
291
+ return;
82
292
  }
83
- recordAppKnowledgeReadIfApplicable(filePath);
84
- return output;
293
+ recordBuildReadFile({
294
+ charsServed,
295
+ charsSuppressed,
296
+ decision,
297
+ ledgerEntries: fileReadTracker.ledgerSize(),
298
+ pathClass: classifyReadFilePath(filePath),
299
+ reason,
300
+ requestKind: unranged ? "full" : "ranged",
301
+ });
302
+ };
303
+ let result;
304
+ // Ranged-read cap enforcement is deferred past the ledger check
305
+ // below (see the `capMessage` use), so a request the ledger already
306
+ // covers dedupes into a stub instead of erroring on size. The
307
+ // unranged branch already enforces its own cap during
308
+ // construction: paging self-limits well under the cap, and the
309
+ // security-scan agent's uncapped full-read carve-out has no
310
+ // `fileReadTracker` wired in, so there is nothing to defer there.
311
+ let capMessage;
312
+ if (unranged) {
313
+ const skillCarveOut = isSystemSkill && fileContent.length <= SKILL_FULL_READ_CHARS;
314
+ result = (() => {
315
+ if (skillCarveOut || !pages) {
316
+ return buildFullRead(lines, totalLines, !skillCarveOut);
317
+ }
318
+ if (isUserAuthoredSkillPath(filePath)) {
319
+ const full = buildLeadingBlock(lines, totalLines, totalLines, false);
320
+ if (renderReadFileOutput(full).length <= MAX_LIMIT_READ_FILES) {
321
+ return full;
322
+ }
323
+ }
324
+ return buildDefaultPage(lines, totalLines);
325
+ })();
85
326
  }
86
- // Extract specified ranges
87
- const contentParts = normalizeRanges(ranges, totalLines).map((range) => {
88
- const selectedLines = lines.slice(range.start - 1, range.end);
89
- return {
90
- range: `${range.start}-${range.end}`,
91
- lines: selectedLines.length,
92
- content: selectedLines.join("\n"),
327
+ else {
328
+ const contentRanges = normalizeRanges(ranges, totalLines).map((range) => ({
329
+ start: range.start,
330
+ end: range.end,
331
+ content: sliceBody(lines, range.start, range.end),
332
+ }));
333
+ if (contentRanges.length === 0) {
334
+ // Counted so the redundancy rate's denominator stays complete. A
335
+ // request that fails definitionally did not dedupe, so `served`
336
+ // with no characters is the honest label.
337
+ emit("served", "range_not_covered", 0, 0);
338
+ throw new ToolExecutionError("No valid line ranges were provided or all ranges were invalid.", { toolName: "", input: {}, context: {}, severity: "warn" });
339
+ }
340
+ const first = contentRanges[0];
341
+ const lastEnd = Math.max(...contentRanges.map((range) => range.end));
342
+ result = {
343
+ kind: "content",
344
+ totalLines,
345
+ ranges: contentRanges,
346
+ complete: contentRanges.length === 1 &&
347
+ first !== undefined &&
348
+ first.start === 1 &&
349
+ first.end === totalLines,
350
+ ...(lastEnd < totalLines ? { nextStart: lastEnd + 1 } : {}),
93
351
  };
352
+ capMessage = `The total content across all specified ranges exceeds the ${MAX_LIMIT_READ_FILES}-character limit. Please reduce the number of ranges or the size of each range.`;
353
+ }
354
+ // Freshness is exact and free: the whole file is already in hand,
355
+ // so a hash comparison answers "did this change" with no
356
+ // invalidation plumbing. Only paid for when the ledger is on.
357
+ // `result.ranges` is ground truth for what this call would serve,
358
+ // whether that came from an explicit range or a computed page, so
359
+ // the ledger is always asked about the real coverage rather than
360
+ // assuming an unranged request means the whole file.
361
+ const requestedForLedger = result.ranges.map((range) => ({ start: range.start, end: range.end }));
362
+ const contentHash = fileReadTracker
363
+ ? createHash("sha256").update(fileContent).digest("hex")
364
+ : "";
365
+ const evaluation = fileReadTracker?.evaluate({
366
+ filePath,
367
+ contentHash,
368
+ totalLines,
369
+ requested: requestedForLedger,
94
370
  });
95
- if (contentParts.length === 0) {
96
- throw new ToolExecutionError("No valid line ranges were provided or all ranges were invalid.", { toolName: "", input: {}, context: {}, severity: "warn" });
371
+ if (fileReadTracker && evaluation?.decision === "dedupe") {
372
+ // Both modes take the same bookkeeping so `observe` measures what
373
+ // `enforce` would really do: without the stub count, the
374
+ // auto-bypass ceiling never applies and the counterfactual reads
375
+ // high. Neither mode records a contribution - `enforce` puts no
376
+ // new bytes in context, and `observe` must not either, or a
377
+ // re-read would keep appending ids nothing can prune.
378
+ fileReadTracker.recordStub(filePath, requestedForLedger);
379
+ // Still fires on the dedupe path: this is a knowledge-USAGE
380
+ // metric, so dropping it here would silently deflate app-knowledge
381
+ // adoption dashboards.
382
+ recordAppKnowledgeReadIfApplicable(filePath);
383
+ if (!fileReadTracker.observeOnly) {
384
+ emit("deduped", "stub", 0, renderReadFileOutput(result).length);
385
+ return buildAlreadyInContextStub(filePath, totalLines, evaluation.coverage);
386
+ }
387
+ // observe serves the real content below, so it still owes the cap
388
+ // the `off` path would have applied - but the counterfactual is
389
+ // recorded first. An oversize request the ledger already covers is
390
+ // the single largest saving `enforce` makes, and emitting after the
391
+ // throw would drop exactly that data point, biasing the rollout
392
+ // gate against its own best case.
393
+ const rendered = renderReadFileOutput(result);
394
+ const overCap = rendered.length > MAX_LIMIT_READ_FILES;
395
+ emit("would_dedupe", "stub", overCap ? 0 : rendered.length, rendered.length);
396
+ if (capMessage) {
397
+ enforceRenderedCap(result, lines, capMessage);
398
+ }
399
+ if (unranged && isSystemSkill && result.complete) {
400
+ skillReadTracker?.markRead(filePath);
401
+ }
402
+ return result;
403
+ }
404
+ const fullOutput = renderReadFileOutput(result);
405
+ if (capMessage) {
406
+ // Counted before the throw, for the same reason the observe branch
407
+ // is: a request that dies on the cap is still a request, and
408
+ // dropping it silently shrinks the denominator every rate on this
409
+ // metric is computed against.
410
+ if (fullOutput.length > MAX_LIMIT_READ_FILES) {
411
+ emit("served", evaluation?.decision === "serve"
412
+ ? evaluation.reason
413
+ : "no_context", 0, 0);
414
+ }
415
+ enforceRenderedCap(result, lines, capMessage);
97
416
  }
98
- // Build XML output
99
- const contentTags = contentParts
100
- .map((part) => `<content range="${part.range}" lines="${part.lines}">\n${part.content}\n</content>`)
101
- .join("\n");
102
- const output = `<file lines="${totalLines}">\n${contentTags}\n</file>`;
103
- // Check total output size
104
- if (output.length > MAX_LIMIT_READ_FILES) {
105
- throw new ToolExecutionError(`The total content across all specified ranges exceeds the 25k character limit. Please reduce the number of ranges or the size of each range.`, { toolName: "", input: {}, context: {}, severity: "warn" });
417
+ // `unranged` matters: the legacy skill dedupe only ever armed on a
418
+ // whole-file request with no ranges. A ranged read that happens to
419
+ // span the file must not arm it, or `off` stops reproducing prior
420
+ // behavior - this call is not gated on the ledger being on.
421
+ if (unranged && isSystemSkill && result.complete) {
422
+ skillReadTracker?.markRead(filePath);
106
423
  }
107
424
  recordAppKnowledgeReadIfApplicable(filePath);
108
- return output;
425
+ // Decided before recording, because what gets recorded depends on
426
+ // it: a diff covers the new content only in combination with the
427
+ // read it was built on.
428
+ const reinjection = buildDiffReinjectionOutput({
429
+ evaluation,
430
+ fileContent,
431
+ fileReadTracker,
432
+ filePath,
433
+ fullOutput,
434
+ isFullRead: result.complete,
435
+ });
436
+ fileReadTracker?.recordServed({
437
+ filePath,
438
+ contentHash,
439
+ totalLines,
440
+ served: requestedForLedger,
441
+ toolCallId,
442
+ ...(reinjection
443
+ ? { requiresToolCallIds: [reinjection.baseToolCallId] }
444
+ : {}),
445
+ });
446
+ if (evaluation?.decision === "serve") {
447
+ if (reinjection !== undefined) {
448
+ emit("served_diff", evaluation.reason, reinjection.output.length, fullOutput.length - reinjection.output.length);
449
+ return reinjection.output;
450
+ }
451
+ emit("served", evaluation.reason, fullOutput.length, 0);
452
+ }
453
+ return result;
109
454
  }
110
455
  catch (error) {
111
456
  if (!(error instanceof Error)) {
@@ -120,27 +465,53 @@ export const buildReadFileToolFactory = createToolFactory("build_readFile", ({ s
120
465
  }
121
466
  },
122
467
  readOnly: true,
468
+ toModelOutput: ({ output }) => ({
469
+ type: "text",
470
+ value: renderReadFileOutput(output),
471
+ }),
472
+ /**
473
+ * `execute` already holds its own rendered output under
474
+ * MAX_LIMIT_READ_FILES on every path except the deliberate system-skill
475
+ * carve-out. The limiter would instead measure `safeJsonStringify` of the
476
+ * structured result, whose escaping the model never sees, so let the
477
+ * tool's accounting win and leave the limiter to the bare-string cases.
478
+ *
479
+ * A diff is exempt for the same reason plus a sharper one: the ledger has
480
+ * already recorded the new content as covered by the time the limiter
481
+ * runs, so truncating the diff here would leave the ledger claiming
482
+ * coverage for bytes the model never received, and the next unchanged
483
+ * read would stub it. The diff carries its own bound instead - it is only
484
+ * served when it comes in under a fraction of the full result.
485
+ */
486
+ skipOutputLimit: (output) => isReadFileContent(output) || isDiffReinjectionOutput(output),
123
487
  getSummary: (input, output) => {
124
- // Check if this is a system skill file (protected from compaction)
125
488
  const isSystemSkill = input.filePath.startsWith(SKILL_PATH_PREFIXES[SkillLayer.SYSTEM]);
126
- // Full file read
127
- if (!input.ranges || input.ranges.length === 0) {
128
- return { output: "full read", protected: isSystemSkill };
489
+ // Protecting a stub costs real tokens for nothing.
490
+ if (typeof output === "string" &&
491
+ output.startsWith("<file path=") &&
492
+ output.includes(BUILD_READ_FILE_STUB_MARKER)) {
493
+ return { output: "already in context", protected: false };
129
494
  }
130
- // Extract ranges from output XML content tags
131
- const rangeMatches = typeof output === "string"
132
- ? [...output.matchAll(/<content range="(\d+-\d+)"/g)]
133
- : [];
134
- const ranges = rangeMatches.map((m) => m[1]);
135
- if (ranges.length === 0) {
495
+ // A diff is derived from a prior read that is still live elsewhere in
496
+ // context; the prior read already carries whatever protection it
497
+ // needs, so the diff itself does not need its own.
498
+ if (isDiffReinjectionOutput(output)) {
499
+ return { output: "diff", protected: false };
500
+ }
501
+ if (!isReadFileContent(output)) {
136
502
  return { output: "full read", protected: isSystemSkill };
137
503
  }
138
- if (ranges.length === 1) {
139
- return { output: `lines ${ranges[0]}`, protected: isSystemSkill };
504
+ if ((!input.ranges || input.ranges.length === 0) && output.complete) {
505
+ return { output: "full read", protected: isSystemSkill };
140
506
  }
507
+ const rangeText = output.ranges
508
+ .map((range) => `${range.start}-${range.end}`)
509
+ .join(", ");
510
+ // A read that stops short of the file is a candidate for compaction
511
+ // however it was requested; pinning half a skill helps nobody.
141
512
  return {
142
- output: `lines ${ranges.join(", ")}`,
143
- protected: isSystemSkill,
513
+ output: rangeText ? `lines ${rangeText}` : "partial read",
514
+ protected: isSystemSkill && output.complete,
144
515
  };
145
516
  },
146
517
  };
@@ -1 +1 @@
1
- {"version":3,"file":"build-read-file.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-read-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-read-file.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-read-file.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare const buildWriteFileToolFactory: import("../tools2/types.js").Too
7
7
  filePath: string;
8
8
  }, {
9
9
  filePath: string;
10
+ lines: number;
10
11
  contentLength: number;
11
12
  message: string;
12
13
  }>>;