@cjhyy/code-shell-core 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/path-policy.js +99 -2
  374. package/dist/tool-system/permission.d.ts +26 -0
  375. package/dist/tool-system/permission.js +46 -0
  376. package/dist/tool-system/registry.d.ts +12 -1
  377. package/dist/tool-system/registry.js +31 -7
  378. package/dist/tool-system/sandbox/index.js +3 -8
  379. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  380. package/dist/tool-system/session-tool-host.d.ts +139 -0
  381. package/dist/tool-system/session-tool-host.js +167 -0
  382. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  383. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  384. package/dist/tool-system/validation.d.ts +14 -7
  385. package/dist/tool-system/validation.js +701 -7
  386. package/dist/types.d.ts +186 -20
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  388. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  389. package/dist/utils/file-mutex.d.ts +65 -0
  390. package/dist/utils/file-mutex.js +145 -0
  391. package/dist/utils/json.d.ts +2 -4
  392. package/dist/utils/json.js +2 -4
  393. package/dist/utils/lockfile.d.ts +30 -1
  394. package/dist/utils/lockfile.js +2 -2
  395. package/dist/utils/secret-scrubber.d.ts +8 -0
  396. package/dist/utils/secret-scrubber.js +227 -0
  397. package/dist/utils/toolDisplay.js +1 -1
  398. package/package.json +20 -5
  399. package/THIRD_PARTY_NOTICES.md +0 -206
  400. package/dist/arena/arena.d.ts +0 -45
  401. package/dist/arena/arena.js +0 -362
  402. package/dist/arena/context/context-tools.d.ts +0 -16
  403. package/dist/arena/context/context-tools.js +0 -272
  404. package/dist/arena/context/within-root.d.ts +0 -7
  405. package/dist/arena/context/within-root.js +0 -15
  406. package/dist/arena/detect-mode.d.ts +0 -20
  407. package/dist/arena/detect-mode.js +0 -78
  408. package/dist/arena/digest-builder.d.ts +0 -25
  409. package/dist/arena/digest-builder.js +0 -120
  410. package/dist/arena/index.d.ts +0 -29
  411. package/dist/arena/index.js +0 -29
  412. package/dist/arena/iterate/convergence.d.ts +0 -25
  413. package/dist/arena/iterate/convergence.js +0 -103
  414. package/dist/arena/iterate/formats/index.d.ts +0 -22
  415. package/dist/arena/iterate/formats/index.js +0 -283
  416. package/dist/arena/iterate/index.d.ts +0 -11
  417. package/dist/arena/iterate/index.js +0 -9
  418. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  419. package/dist/arena/iterate/iterative-arena.js +0 -237
  420. package/dist/arena/iterate/parse.d.ts +0 -42
  421. package/dist/arena/iterate/parse.js +0 -123
  422. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  423. package/dist/arena/iterate/phases/argue.js +0 -165
  424. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  425. package/dist/arena/iterate/phases/revise.js +0 -62
  426. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  427. package/dist/arena/iterate/phases/tournament.js +0 -113
  428. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  429. package/dist/arena/iterate/tools/web-tools.js +0 -54
  430. package/dist/arena/iterate/types.d.ts +0 -152
  431. package/dist/arena/iterate/types.js +0 -8
  432. package/dist/arena/ledger.d.ts +0 -47
  433. package/dist/arena/ledger.js +0 -159
  434. package/dist/arena/lenses/architecture.d.ts +0 -5
  435. package/dist/arena/lenses/architecture.js +0 -22
  436. package/dist/arena/lenses/engineering.d.ts +0 -5
  437. package/dist/arena/lenses/engineering.js +0 -22
  438. package/dist/arena/lenses/general.d.ts +0 -5
  439. package/dist/arena/lenses/general.js +0 -20
  440. package/dist/arena/lenses/index.d.ts +0 -16
  441. package/dist/arena/lenses/index.js +0 -47
  442. package/dist/arena/lenses/product.d.ts +0 -5
  443. package/dist/arena/lenses/product.js +0 -22
  444. package/dist/arena/model-presets.d.ts +0 -23
  445. package/dist/arena/model-presets.js +0 -44
  446. package/dist/arena/phases/adjudication.d.ts +0 -25
  447. package/dist/arena/phases/adjudication.js +0 -142
  448. package/dist/arena/phases/build-consensus.d.ts +0 -30
  449. package/dist/arena/phases/build-consensus.js +0 -85
  450. package/dist/arena/phases/claim-registry.d.ts +0 -26
  451. package/dist/arena/phases/claim-registry.js +0 -60
  452. package/dist/arena/phases/cross-review.d.ts +0 -47
  453. package/dist/arena/phases/cross-review.js +0 -224
  454. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  455. package/dist/arena/phases/debate-rounds.js +0 -161
  456. package/dist/arena/phases/participant-research.d.ts +0 -39
  457. package/dist/arena/phases/participant-research.js +0 -316
  458. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  459. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  460. package/dist/arena/planner.d.ts +0 -28
  461. package/dist/arena/planner.js +0 -312
  462. package/dist/arena/providers/docs.d.ts +0 -7
  463. package/dist/arena/providers/docs.js +0 -111
  464. package/dist/arena/providers/git.d.ts +0 -8
  465. package/dist/arena/providers/git.js +0 -174
  466. package/dist/arena/providers/index.d.ts +0 -32
  467. package/dist/arena/providers/index.js +0 -132
  468. package/dist/arena/providers/none.d.ts +0 -7
  469. package/dist/arena/providers/none.js +0 -11
  470. package/dist/arena/providers/repo.d.ts +0 -7
  471. package/dist/arena/providers/repo.js +0 -258
  472. package/dist/arena/render/session.d.ts +0 -17
  473. package/dist/arena/render/session.js +0 -190
  474. package/dist/arena/render/terminal.d.ts +0 -34
  475. package/dist/arena/render/terminal.js +0 -286
  476. package/dist/arena/strategies/discussion.d.ts +0 -25
  477. package/dist/arena/strategies/discussion.js +0 -143
  478. package/dist/arena/strategies/index.d.ts +0 -15
  479. package/dist/arena/strategies/index.js +0 -28
  480. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  481. package/dist/arena/strategies/language-wrapper.js +0 -102
  482. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  483. package/dist/arena/strategies/lens-wrapper.js +0 -236
  484. package/dist/arena/strategies/planning.d.ts +0 -30
  485. package/dist/arena/strategies/planning.js +0 -225
  486. package/dist/arena/strategies/review.d.ts +0 -26
  487. package/dist/arena/strategies/review.js +0 -168
  488. package/dist/arena/strategies/utils.d.ts +0 -36
  489. package/dist/arena/strategies/utils.js +0 -603
  490. package/dist/arena/tools/selector.d.ts +0 -17
  491. package/dist/arena/tools/selector.js +0 -61
  492. package/dist/arena/transitions.d.ts +0 -53
  493. package/dist/arena/transitions.js +0 -97
  494. package/dist/arena/types.d.ts +0 -518
  495. package/dist/arena/types.js +0 -27
  496. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  497. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  498. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  499. package/dist/cc-orchestrator/cc-capability.js +0 -53
  500. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  501. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  502. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  503. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  504. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  505. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  506. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  507. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  508. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  509. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  510. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  511. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  512. package/dist/cc-orchestrator/index.d.ts +0 -8
  513. package/dist/cc-orchestrator/index.js +0 -8
  514. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  515. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  516. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  517. package/dist/cc-orchestrator/session-discovery.js +0 -125
  518. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  519. package/dist/cc-orchestrator/session-history.js +0 -150
  520. package/dist/cron/cron-runtime.d.ts +0 -2
  521. package/dist/cron/cron-runtime.js +0 -2
  522. package/dist/cron/cron-store.d.ts +0 -2
  523. package/dist/cron/cron-store.js +0 -2
  524. package/dist/cron/scheduler.d.ts +0 -7
  525. package/dist/cron/scheduler.js +0 -7
  526. package/dist/engine/goal.js +0 -206
  527. package/dist/external-agents/config.d.ts +0 -2
  528. package/dist/external-agents/config.js +0 -15
  529. package/dist/external-agents/types.d.ts +0 -31
  530. package/dist/git/parse-log.d.ts +0 -13
  531. package/dist/git/parse-log.js +0 -21
  532. package/dist/git/utils.d.ts +0 -49
  533. package/dist/git/utils.js +0 -161
  534. package/dist/git/worktree/crud.d.ts +0 -72
  535. package/dist/git/worktree/crud.js +0 -235
  536. package/dist/git/worktree/diff.d.ts +0 -14
  537. package/dist/git/worktree/diff.js +0 -82
  538. package/dist/git/worktree/git-exec.d.ts +0 -7
  539. package/dist/git/worktree/git-exec.js +0 -87
  540. package/dist/git/worktree/index.d.ts +0 -5
  541. package/dist/git/worktree/index.js +0 -5
  542. package/dist/git/worktree/query.d.ts +0 -43
  543. package/dist/git/worktree/query.js +0 -128
  544. package/dist/git/worktree/slug.d.ts +0 -11
  545. package/dist/git/worktree/slug.js +0 -58
  546. package/dist/git/worktree.d.ts +0 -1
  547. package/dist/git/worktree.js +0 -5
  548. package/dist/lsp/client.d.ts +0 -41
  549. package/dist/lsp/client.js +0 -186
  550. package/dist/lsp/manager.d.ts +0 -40
  551. package/dist/lsp/manager.js +0 -155
  552. package/dist/lsp/root-path.d.ts +0 -9
  553. package/dist/lsp/root-path.js +0 -12
  554. package/dist/lsp/servers.d.ts +0 -16
  555. package/dist/lsp/servers.js +0 -60
  556. package/dist/prompt/sections/coding.md +0 -35
  557. package/dist/quota/credentials.d.ts +0 -3
  558. package/dist/quota/credentials.js +0 -80
  559. package/dist/quota/index.d.ts +0 -36
  560. package/dist/quota/index.js +0 -155
  561. package/dist/quota/types.d.ts +0 -48
  562. package/dist/quota/types.js +0 -13
  563. package/dist/review/review-prompt.d.ts +0 -28
  564. package/dist/review/review-prompt.js +0 -81
  565. package/dist/state.d.ts +0 -160
  566. package/dist/state.js +0 -267
  567. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  568. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  570. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  571. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  572. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  573. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  574. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  576. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  577. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  578. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  579. package/dist/tool-system/builtin/arena.d.ts +0 -31
  580. package/dist/tool-system/builtin/arena.js +0 -416
  581. package/dist/tool-system/builtin/brief.d.ts +0 -6
  582. package/dist/tool-system/builtin/brief.js +0 -41
  583. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  584. package/dist/tool-system/builtin/check-quota.js +0 -34
  585. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  586. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  587. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  588. package/dist/tool-system/builtin/lsp.js +0 -144
  589. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  590. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  591. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  592. package/dist/tool-system/builtin/worktree.js +0 -363
  593. /package/dist/{external-agents → links}/types.js +0 -0
  594. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  595. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Lightweight tool input validation against a JSON Schema.
2
+ * Compatibility validator used by existing built-ins and third-party MCP
3
+ * schemas. It checks `required` presence and top-level primitive types only;
4
+ * changing that permissive contract would be a broad compatibility break.
3
5
  *
4
- * NOT a full JSON-Schema validator: it only checks `required` presence and
5
- * top-level primitive types (string/number/boolean). Arrays, objects, enums,
6
- * nested shapes, and formats are intentionally NOT validated — this is a
7
- * cheap pre-flight guard, not a substitute for the provider's own schema
8
- * enforcement. (Was previously labelled "Zod-based" and imported `z`, but
9
- * never used zod — corrected to avoid misleading readers.)
6
+ * Reviewed Panel App schemas use the fail-closed recursive validator exported
7
+ * later in this module (`validateToolArgsStrict`).
10
8
  */
11
9
  /**
12
10
  * Validate tool args against the tool's inputSchema.
@@ -50,3 +48,699 @@ export function validateToolArgs(toolName, args, schema) {
50
48
  return null; // Don't block on validation errors
51
49
  }
52
50
  }
51
+ function schemaObject(value) {
52
+ if (!value || typeof value !== "object" || Array.isArray(value))
53
+ return false;
54
+ const prototype = Object.getPrototypeOf(value);
55
+ return prototype === Object.prototype || prototype === null;
56
+ }
57
+ function schemaTypeMatches(value, type) {
58
+ if (type === "null")
59
+ return value === null;
60
+ if (type === "array")
61
+ return Array.isArray(value);
62
+ if (type === "object")
63
+ return schemaObject(value);
64
+ if (type === "integer")
65
+ return typeof value === "number" && Number.isFinite(value) && Number.isInteger(value);
66
+ if (type === "number")
67
+ return typeof value === "number" && Number.isFinite(value);
68
+ return typeof value === type;
69
+ }
70
+ function schemaTypeLabel(type) {
71
+ if (type === "integer")
72
+ return "an integer";
73
+ if (type === "array")
74
+ return "an array";
75
+ if (type === "object")
76
+ return "an object";
77
+ if (type === "number")
78
+ return "a finite number";
79
+ if (type === "boolean")
80
+ return "a boolean";
81
+ if (type === "null")
82
+ return "null";
83
+ return `a ${type}`;
84
+ }
85
+ function schemaPath(parent, key) {
86
+ if (typeof key === "number")
87
+ return `${parent}[${key}]`;
88
+ return parent ? `${parent}.${key}` : key;
89
+ }
90
+ function schemaValueKey(value, depth = 0) {
91
+ if (depth > 64)
92
+ return null;
93
+ if (value === null)
94
+ return "null";
95
+ if (typeof value === "string")
96
+ return `string:${JSON.stringify(value)}`;
97
+ if (typeof value === "boolean")
98
+ return `boolean:${value}`;
99
+ if (typeof value === "number") {
100
+ if (!Number.isFinite(value))
101
+ return null;
102
+ return `number:${value === 0 ? 0 : value}`;
103
+ }
104
+ if (Array.isArray(value)) {
105
+ const items = value.map((item) => schemaValueKey(item, depth + 1));
106
+ if (items.some((item) => item === null))
107
+ return null;
108
+ return `array:[${items.join(",")}]`;
109
+ }
110
+ if (!schemaObject(value))
111
+ return null;
112
+ const entries = Object.keys(value)
113
+ .sort()
114
+ .map((key) => {
115
+ const child = schemaValueKey(value[key], depth + 1);
116
+ return child === null ? null : `${JSON.stringify(key)}:${child}`;
117
+ });
118
+ if (entries.some((entry) => entry === null))
119
+ return null;
120
+ return `object:{${entries.join(",")}}`;
121
+ }
122
+ function schemaValueEqual(left, right) {
123
+ if (Object.is(left, right))
124
+ return true;
125
+ const leftKey = schemaValueKey(left);
126
+ const rightKey = schemaValueKey(right);
127
+ return leftKey !== null && rightKey !== null && leftKey === rightKey;
128
+ }
129
+ function branchRelevance(value, branch, root) {
130
+ if (!schemaObject(value) || !schemaObject(branch))
131
+ return 0;
132
+ let candidate = branch;
133
+ if (typeof candidate.$ref === "string") {
134
+ const referenced = resolveLocalSchemaReference(root, candidate.$ref);
135
+ if (referenced && schemaObject(referenced))
136
+ candidate = referenced;
137
+ }
138
+ const properties = schemaObject(candidate.properties) ? candidate.properties : {};
139
+ let score = 0;
140
+ for (const [key, property] of Object.entries(properties)) {
141
+ if (!Object.hasOwn(value, key) || !schemaObject(property))
142
+ continue;
143
+ if (Object.hasOwn(property, "const")) {
144
+ score += schemaValueEqual(value[key], property.const) ? 1_000 : -1_000;
145
+ }
146
+ else if (Array.isArray(property.enum)) {
147
+ score += property.enum.some((entry) => schemaValueEqual(value[key], entry)) ? 500 : -500;
148
+ }
149
+ }
150
+ if (Array.isArray(candidate.required)) {
151
+ for (const field of candidate.required) {
152
+ if (typeof field === "string")
153
+ score += Object.hasOwn(value, field) ? 1 : -1;
154
+ }
155
+ }
156
+ return score;
157
+ }
158
+ function relevantBranchError(value, branches, errors, root) {
159
+ let bestIndex = -1;
160
+ let bestScore = Number.NEGATIVE_INFINITY;
161
+ for (const [index, error] of errors.entries()) {
162
+ if (error === null)
163
+ continue;
164
+ const score = branchRelevance(value, branches[index], root);
165
+ if (score > bestScore) {
166
+ bestIndex = index;
167
+ bestScore = score;
168
+ }
169
+ }
170
+ return bestIndex >= 0 ? errors[bestIndex] : null;
171
+ }
172
+ function strictSchemaFailure(error) {
173
+ return Boolean(error?.startsWith("Invalid JSON Schema") ||
174
+ error?.startsWith("Unsupported or unresolved JSON Schema") ||
175
+ error?.includes("exceeds the schema evaluation limit") ||
176
+ error?.includes("exceeds the schema depth limit"));
177
+ }
178
+ function resolveLocalSchemaReference(root, reference) {
179
+ if (reference === "#")
180
+ return root;
181
+ if (!reference.startsWith("#/"))
182
+ return null;
183
+ let current = root;
184
+ for (const rawSegment of reference.slice(2).split("/")) {
185
+ const segment = rawSegment.replaceAll("~1", "/").replaceAll("~0", "~");
186
+ if (!schemaObject(current) || !Object.hasOwn(current, segment))
187
+ return null;
188
+ current = current[segment];
189
+ }
190
+ return typeof current === "boolean" || schemaObject(current) ? current : null;
191
+ }
192
+ const STRICT_SCHEMA_KEYWORDS = new Set([
193
+ "$schema",
194
+ "$id",
195
+ "$ref",
196
+ "$defs",
197
+ "$comment",
198
+ "title",
199
+ "description",
200
+ "default",
201
+ "examples",
202
+ "deprecated",
203
+ "readOnly",
204
+ "writeOnly",
205
+ "allOf",
206
+ "anyOf",
207
+ "oneOf",
208
+ "not",
209
+ "if",
210
+ "then",
211
+ "else",
212
+ "type",
213
+ "enum",
214
+ "const",
215
+ "multipleOf",
216
+ "maximum",
217
+ "exclusiveMaximum",
218
+ "minimum",
219
+ "exclusiveMinimum",
220
+ "maxLength",
221
+ "minLength",
222
+ "pattern",
223
+ "maxItems",
224
+ "minItems",
225
+ "uniqueItems",
226
+ "items",
227
+ "maxProperties",
228
+ "minProperties",
229
+ "required",
230
+ "properties",
231
+ "additionalProperties",
232
+ ]);
233
+ const MAX_STRICT_SCHEMA_PATTERN_LENGTH = 512;
234
+ const MAX_STRICT_PATTERN_INPUT_LENGTH = 10_000;
235
+ const MAX_STRICT_VALUE_NODES = 20_000;
236
+ const MAX_STRICT_SCHEMA_EVALUATIONS = 100_000;
237
+ function validateStrictJsonValue(value, path, depth, ancestors, budget) {
238
+ budget.remaining -= 1;
239
+ if (budget.remaining < 0) {
240
+ return `Parameter '${path || "arguments"}' exceeds the JSON value-size limit`;
241
+ }
242
+ if (depth > 64) {
243
+ return `Parameter '${path || "arguments"}' exceeds the JSON value depth limit`;
244
+ }
245
+ if (value === null || typeof value === "string" || typeof value === "boolean")
246
+ return null;
247
+ if (typeof value === "number") {
248
+ return Number.isFinite(value)
249
+ ? null
250
+ : `Parameter '${path || "arguments"}' must contain only finite JSON numbers`;
251
+ }
252
+ if (Array.isArray(value)) {
253
+ if (ancestors.has(value)) {
254
+ return `Parameter '${path || "arguments"}' contains a circular JSON value`;
255
+ }
256
+ ancestors.add(value);
257
+ for (const [index, child] of value.entries()) {
258
+ const error = validateStrictJsonValue(child, schemaPath(path, index), depth + 1, ancestors, budget);
259
+ if (error)
260
+ return error;
261
+ }
262
+ ancestors.delete(value);
263
+ return null;
264
+ }
265
+ if (schemaObject(value)) {
266
+ if (ancestors.has(value)) {
267
+ return `Parameter '${path || "arguments"}' contains a circular JSON value`;
268
+ }
269
+ ancestors.add(value);
270
+ for (const [key, child] of Object.entries(value)) {
271
+ const error = validateStrictJsonValue(child, schemaPath(path, key), depth + 1, ancestors, budget);
272
+ if (error)
273
+ return error;
274
+ }
275
+ ancestors.delete(value);
276
+ return null;
277
+ }
278
+ return `Parameter '${path || "arguments"}' must contain only JSON values`;
279
+ }
280
+ function supportedStrictSchemaPattern(pattern) {
281
+ if (pattern.length > MAX_STRICT_SCHEMA_PATTERN_LENGTH)
282
+ return false;
283
+ let escaped = false;
284
+ let inCharacterClass = false;
285
+ let variableQuantifiers = 0;
286
+ for (let index = 0; index < pattern.length; index += 1) {
287
+ const character = pattern[index];
288
+ if (escaped) {
289
+ if (!inCharacterClass && /[1-9k]/u.test(character))
290
+ return false;
291
+ escaped = false;
292
+ continue;
293
+ }
294
+ if (character === "\\") {
295
+ escaped = true;
296
+ continue;
297
+ }
298
+ if (character === "[" && !inCharacterClass) {
299
+ inCharacterClass = true;
300
+ continue;
301
+ }
302
+ if (character === "]" && inCharacterClass) {
303
+ inCharacterClass = false;
304
+ continue;
305
+ }
306
+ if (!inCharacterClass && ["(", ")", "|", "."].includes(character))
307
+ return false;
308
+ if (!inCharacterClass && ["*", "+", "?"].includes(character)) {
309
+ variableQuantifiers += 1;
310
+ continue;
311
+ }
312
+ if (!inCharacterClass && character === "{") {
313
+ const closingBrace = pattern.indexOf("}", index + 1);
314
+ if (closingBrace < 0)
315
+ return false;
316
+ const body = pattern.slice(index + 1, closingBrace);
317
+ const match = /^(\d+)(?:,(\d+))?$/u.exec(body);
318
+ if (!match)
319
+ return false;
320
+ const minimum = Number(match[1]);
321
+ const maximum = match[2] === undefined ? minimum : Number(match[2]);
322
+ if (!Number.isSafeInteger(minimum) ||
323
+ !Number.isSafeInteger(maximum) ||
324
+ minimum > maximum ||
325
+ maximum > MAX_STRICT_PATTERN_INPUT_LENGTH) {
326
+ return false;
327
+ }
328
+ if (minimum !== maximum)
329
+ variableQuantifiers += 1;
330
+ index = closingBrace;
331
+ continue;
332
+ }
333
+ if (!inCharacterClass && character === "}")
334
+ return false;
335
+ }
336
+ if (escaped || inCharacterClass || variableQuantifiers > 1)
337
+ return false;
338
+ try {
339
+ new RegExp(pattern, "u");
340
+ return true;
341
+ }
342
+ catch {
343
+ return false;
344
+ }
345
+ }
346
+ function validateStrictSchemaDefinition(schema, root, path, depth, seen) {
347
+ if (depth > 64)
348
+ return `Invalid JSON Schema: '${path}' exceeds the schema depth limit`;
349
+ if (typeof schema === "boolean")
350
+ return null;
351
+ if (!schemaObject(schema))
352
+ return `Invalid JSON Schema at '${path}'`;
353
+ if (seen.has(schema))
354
+ return null;
355
+ seen.add(schema);
356
+ const label = path || "arguments";
357
+ for (const keyword of Object.keys(schema)) {
358
+ if (!STRICT_SCHEMA_KEYWORDS.has(keyword)) {
359
+ return `Unsupported JSON Schema keyword '${keyword}' at '${label}'`;
360
+ }
361
+ }
362
+ for (const keyword of ["$schema", "$id", "$comment", "title", "description"]) {
363
+ if (schema[keyword] !== undefined && typeof schema[keyword] !== "string") {
364
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
365
+ }
366
+ }
367
+ for (const keyword of ["deprecated", "readOnly", "writeOnly"]) {
368
+ if (schema[keyword] !== undefined && typeof schema[keyword] !== "boolean") {
369
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
370
+ }
371
+ }
372
+ if (schema.examples !== undefined && !Array.isArray(schema.examples)) {
373
+ return `Invalid JSON Schema examples at '${label}'`;
374
+ }
375
+ if (schema.$ref !== undefined) {
376
+ if (typeof schema.$ref !== "string") {
377
+ return `Invalid JSON Schema reference at '${label}'`;
378
+ }
379
+ const referenced = resolveLocalSchemaReference(root, schema.$ref);
380
+ if (!referenced)
381
+ return `Unsupported or unresolved JSON Schema reference: ${schema.$ref}`;
382
+ const referenceError = validateStrictSchemaDefinition(referenced, root, `${label}.$ref`, depth + 1, seen);
383
+ if (referenceError)
384
+ return referenceError;
385
+ }
386
+ const declaredTypes = typeof schema.type === "string"
387
+ ? [schema.type]
388
+ : Array.isArray(schema.type) && schema.type.every((type) => typeof type === "string")
389
+ ? schema.type
390
+ : schema.type === undefined
391
+ ? []
392
+ : null;
393
+ if (declaredTypes === null ||
394
+ (schema.type !== undefined && declaredTypes.length === 0) ||
395
+ declaredTypes.length !== new Set(declaredTypes).size ||
396
+ declaredTypes.some((type) => !["null", "array", "object", "integer", "number", "string", "boolean"].includes(type))) {
397
+ return `Invalid JSON Schema type at '${label}'`;
398
+ }
399
+ if (schema.enum !== undefined) {
400
+ if (!Array.isArray(schema.enum) || schema.enum.length === 0) {
401
+ return `Invalid JSON Schema enum at '${label}'`;
402
+ }
403
+ const enumKeys = schema.enum.map((candidate) => schemaValueKey(candidate));
404
+ if (enumKeys.some((key) => key === null) ||
405
+ new Set(enumKeys).size !== enumKeys.length) {
406
+ return `Invalid JSON Schema enum at '${label}'`;
407
+ }
408
+ }
409
+ for (const keyword of ["minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum"]) {
410
+ if (schema[keyword] !== undefined &&
411
+ (typeof schema[keyword] !== "number" || !Number.isFinite(schema[keyword]))) {
412
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
413
+ }
414
+ }
415
+ if (schema.multipleOf !== undefined &&
416
+ (typeof schema.multipleOf !== "number" ||
417
+ !Number.isFinite(schema.multipleOf) ||
418
+ schema.multipleOf <= 0)) {
419
+ return `Invalid JSON Schema multipleOf at '${label}'`;
420
+ }
421
+ for (const keyword of [
422
+ "minLength",
423
+ "maxLength",
424
+ "minItems",
425
+ "maxItems",
426
+ "minProperties",
427
+ "maxProperties",
428
+ ]) {
429
+ const value = schema[keyword];
430
+ if (value !== undefined &&
431
+ (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)) {
432
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
433
+ }
434
+ }
435
+ if (schema.uniqueItems !== undefined && typeof schema.uniqueItems !== "boolean") {
436
+ return `Invalid JSON Schema uniqueItems at '${label}'`;
437
+ }
438
+ if (schema.pattern !== undefined) {
439
+ if (typeof schema.pattern !== "string" || !supportedStrictSchemaPattern(schema.pattern)) {
440
+ return `Invalid JSON Schema pattern at '${label}'`;
441
+ }
442
+ }
443
+ if (schema.required !== undefined &&
444
+ (!Array.isArray(schema.required) ||
445
+ schema.required.some((field) => typeof field !== "string") ||
446
+ schema.required.length !== new Set(schema.required).size)) {
447
+ return `Invalid JSON Schema required-list at '${label}'`;
448
+ }
449
+ if (schema.$defs !== undefined && !schemaObject(schema.$defs)) {
450
+ return `Invalid JSON Schema $defs at '${label}'`;
451
+ }
452
+ if (schema.properties !== undefined && !schemaObject(schema.properties)) {
453
+ return `Invalid JSON Schema properties at '${label}'`;
454
+ }
455
+ const nestedSchemas = [];
456
+ for (const keyword of ["$defs", "properties"]) {
457
+ if (!schemaObject(schema[keyword]))
458
+ continue;
459
+ for (const [key, child] of Object.entries(schema[keyword])) {
460
+ nestedSchemas.push([`${label}.${keyword}.${key}`, child]);
461
+ }
462
+ }
463
+ for (const keyword of ["allOf", "anyOf", "oneOf"]) {
464
+ const branches = schema[keyword];
465
+ if (branches === undefined)
466
+ continue;
467
+ if (!Array.isArray(branches) ||
468
+ branches.length === 0 ||
469
+ branches.some((branch) => typeof branch !== "boolean" && !schemaObject(branch))) {
470
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
471
+ }
472
+ branches.forEach((branch, index) => nestedSchemas.push([`${label}.${keyword}[${index}]`, branch]));
473
+ }
474
+ for (const keyword of ["not", "if", "then", "else", "items", "additionalProperties"]) {
475
+ const child = schema[keyword];
476
+ if (child === undefined)
477
+ continue;
478
+ if (typeof child !== "boolean" && !schemaObject(child)) {
479
+ return `Invalid JSON Schema ${keyword} at '${label}'`;
480
+ }
481
+ nestedSchemas.push([`${label}.${keyword}`, child]);
482
+ }
483
+ for (const [childPath, child] of nestedSchemas) {
484
+ const childError = validateStrictSchemaDefinition(child, root, childPath, depth + 1, seen);
485
+ if (childError)
486
+ return childError;
487
+ }
488
+ return null;
489
+ }
490
+ function validateStrictSchemaValue(value, schema, root, path, depth, budget) {
491
+ budget.remaining -= 1;
492
+ if (budget.remaining < 0) {
493
+ return `Parameter '${path || "arguments"}' exceeds the schema evaluation limit`;
494
+ }
495
+ if (depth > 64)
496
+ return `Parameter '${path || "arguments"}' exceeds the schema depth limit`;
497
+ if (schema === true)
498
+ return null;
499
+ if (schema === false)
500
+ return `Parameter '${path || "arguments"}' is not allowed`;
501
+ if (!schemaObject(schema))
502
+ return `Invalid JSON Schema at '${path || "arguments"}'`;
503
+ if (typeof schema.$ref === "string") {
504
+ const referenced = resolveLocalSchemaReference(root, schema.$ref);
505
+ if (!referenced)
506
+ return `Unsupported or unresolved JSON Schema reference: ${schema.$ref}`;
507
+ const referenceError = validateStrictSchemaValue(value, referenced, root, path, depth + 1, budget);
508
+ if (referenceError)
509
+ return referenceError;
510
+ }
511
+ for (const keyword of ["allOf", "anyOf", "oneOf"]) {
512
+ const branches = schema[keyword];
513
+ if (branches === undefined)
514
+ continue;
515
+ if (!Array.isArray(branches) ||
516
+ branches.some((branch) => typeof branch !== "boolean" && !schemaObject(branch))) {
517
+ return `Invalid JSON Schema ${keyword} at '${path || "arguments"}'`;
518
+ }
519
+ const errors = branches.map((branch) => validateStrictSchemaValue(value, branch, root, path, depth + 1, budget));
520
+ const schemaFailure = errors.find(strictSchemaFailure);
521
+ if (schemaFailure)
522
+ return schemaFailure;
523
+ const matches = errors.filter((error) => error === null).length;
524
+ if (keyword === "allOf" && matches !== branches.length) {
525
+ return (errors.find((error) => error !== null) ?? `Parameter '${path}' is invalid`);
526
+ }
527
+ if (keyword === "anyOf" && matches === 0) {
528
+ return (relevantBranchError(value, branches, errors, root) ??
529
+ `Parameter '${path}' is invalid`);
530
+ }
531
+ if (keyword === "oneOf" && matches !== 1) {
532
+ return matches === 0
533
+ ? (relevantBranchError(value, branches, errors, root) ??
534
+ `Parameter '${path}' must match one allowed shape`)
535
+ : `Parameter '${path || "arguments"}' matches more than one oneOf branch`;
536
+ }
537
+ }
538
+ if (schema.not !== undefined) {
539
+ if (typeof schema.not !== "boolean" && !schemaObject(schema.not)) {
540
+ return `Invalid JSON Schema not-clause at '${path || "arguments"}'`;
541
+ }
542
+ const notError = validateStrictSchemaValue(value, schema.not, root, path, depth + 1, budget);
543
+ if (strictSchemaFailure(notError))
544
+ return notError;
545
+ if (notError === null) {
546
+ return `Parameter '${path || "arguments"}' matches a forbidden shape`;
547
+ }
548
+ }
549
+ if (schema.if !== undefined) {
550
+ if (typeof schema.if !== "boolean" && !schemaObject(schema.if)) {
551
+ return `Invalid JSON Schema if-clause at '${path || "arguments"}'`;
552
+ }
553
+ const conditionError = validateStrictSchemaValue(value, schema.if, root, path, depth + 1, budget);
554
+ if (strictSchemaFailure(conditionError))
555
+ return conditionError;
556
+ const conditionMatches = conditionError === null;
557
+ const selected = conditionMatches ? schema.then : schema.else;
558
+ if (selected !== undefined) {
559
+ if (typeof selected !== "boolean" && !schemaObject(selected)) {
560
+ return `Invalid JSON Schema conditional at '${path || "arguments"}'`;
561
+ }
562
+ const conditionalError = validateStrictSchemaValue(value, selected, root, path, depth + 1, budget);
563
+ if (conditionalError)
564
+ return conditionalError;
565
+ }
566
+ }
567
+ const declaredTypes = typeof schema.type === "string"
568
+ ? [schema.type]
569
+ : Array.isArray(schema.type) && schema.type.every((type) => typeof type === "string")
570
+ ? schema.type
571
+ : schema.type === undefined
572
+ ? []
573
+ : null;
574
+ if (declaredTypes === null ||
575
+ declaredTypes.some((type) => !["null", "array", "object", "integer", "number", "string", "boolean"].includes(type))) {
576
+ return `Invalid JSON Schema type at '${path || "arguments"}'`;
577
+ }
578
+ if (declaredTypes.length > 0 && !declaredTypes.some((type) => schemaTypeMatches(value, type))) {
579
+ const expected = declaredTypes.map(schemaTypeLabel).join(" or ");
580
+ return `Parameter '${path || "arguments"}' must be ${expected}`;
581
+ }
582
+ if (Object.hasOwn(schema, "const") && !schemaValueEqual(value, schema.const)) {
583
+ return `Parameter '${path || "arguments"}' must equal ${JSON.stringify(schema.const)}`;
584
+ }
585
+ if (schema.enum !== undefined && !Array.isArray(schema.enum)) {
586
+ return `Invalid JSON Schema enum at '${path || "arguments"}'`;
587
+ }
588
+ if (Array.isArray(schema.enum) &&
589
+ !schema.enum.some((candidate) => schemaValueEqual(value, candidate))) {
590
+ return `Parameter '${path || "arguments"}' must be one of the declared enum values`;
591
+ }
592
+ if (typeof value === "string") {
593
+ const characterLength = Array.from(value).length;
594
+ if (typeof schema.minLength === "number" && characterLength < schema.minLength) {
595
+ return `Parameter '${path}' must contain at least ${schema.minLength} characters`;
596
+ }
597
+ if (typeof schema.maxLength === "number" && characterLength > schema.maxLength) {
598
+ return `Parameter '${path}' must contain at most ${schema.maxLength} characters`;
599
+ }
600
+ if (typeof schema.pattern === "string") {
601
+ if (value.length > MAX_STRICT_PATTERN_INPUT_LENGTH) {
602
+ return `Parameter '${path}' is too long for pattern validation`;
603
+ }
604
+ try {
605
+ if (!new RegExp(schema.pattern, "u").test(value)) {
606
+ return `Parameter '${path}' does not match its required pattern`;
607
+ }
608
+ }
609
+ catch {
610
+ return `Invalid JSON Schema pattern at '${path}'`;
611
+ }
612
+ }
613
+ }
614
+ if (typeof value === "number" && Number.isFinite(value)) {
615
+ if (typeof schema.minimum === "number" && value < schema.minimum) {
616
+ return `Parameter '${path}' must be at least ${schema.minimum}`;
617
+ }
618
+ if (typeof schema.maximum === "number" && value > schema.maximum) {
619
+ return `Parameter '${path}' must be at most ${schema.maximum}`;
620
+ }
621
+ if (typeof schema.exclusiveMinimum === "number" && value <= schema.exclusiveMinimum) {
622
+ return `Parameter '${path}' must be greater than ${schema.exclusiveMinimum}`;
623
+ }
624
+ if (typeof schema.exclusiveMaximum === "number" && value >= schema.exclusiveMaximum) {
625
+ return `Parameter '${path}' must be less than ${schema.exclusiveMaximum}`;
626
+ }
627
+ if (typeof schema.multipleOf === "number" &&
628
+ schema.multipleOf > 0 &&
629
+ Math.abs(value / schema.multipleOf - Math.round(value / schema.multipleOf)) > 1e-9) {
630
+ return `Parameter '${path}' must be a multiple of ${schema.multipleOf}`;
631
+ }
632
+ }
633
+ if (Array.isArray(value)) {
634
+ if (typeof schema.minItems === "number" && value.length < schema.minItems) {
635
+ return `Parameter '${path}' must contain at least ${schema.minItems} item(s)`;
636
+ }
637
+ if (typeof schema.maxItems === "number" && value.length > schema.maxItems) {
638
+ return `Parameter '${path}' must contain at most ${schema.maxItems} item(s)`;
639
+ }
640
+ if (schema.uniqueItems === true &&
641
+ (() => {
642
+ const keys = value.map((item) => schemaValueKey(item));
643
+ return keys.some((key) => key === null) || new Set(keys).size !== keys.length;
644
+ })()) {
645
+ return `Parameter '${path}' must contain unique items`;
646
+ }
647
+ if (schema.items !== undefined) {
648
+ if (typeof schema.items !== "boolean" && !schemaObject(schema.items)) {
649
+ return `Invalid JSON Schema items at '${path}'`;
650
+ }
651
+ for (const [index, item] of value.entries()) {
652
+ const itemError = validateStrictSchemaValue(item, schema.items, root, schemaPath(path, index), depth + 1, budget);
653
+ if (itemError)
654
+ return itemError;
655
+ }
656
+ }
657
+ }
658
+ if (schemaObject(value)) {
659
+ if (schema.properties !== undefined && !schemaObject(schema.properties)) {
660
+ return `Invalid JSON Schema properties at '${path || "arguments"}'`;
661
+ }
662
+ const properties = schemaObject(schema.properties) ? schema.properties : {};
663
+ const required = schema.required;
664
+ if (required !== undefined &&
665
+ (!Array.isArray(required) || required.some((field) => typeof field !== "string"))) {
666
+ return `Invalid JSON Schema required-list at '${path || "arguments"}'`;
667
+ }
668
+ for (const field of required ?? []) {
669
+ if (!Object.hasOwn(value, field)) {
670
+ return `Missing required parameter: ${schemaPath(path, field)}`;
671
+ }
672
+ }
673
+ if (typeof schema.minProperties === "number" &&
674
+ Object.keys(value).length < schema.minProperties) {
675
+ return `Parameter '${path || "arguments"}' has too few properties`;
676
+ }
677
+ if (typeof schema.maxProperties === "number" &&
678
+ Object.keys(value).length > schema.maxProperties) {
679
+ return `Parameter '${path || "arguments"}' has too many properties`;
680
+ }
681
+ for (const [key, child] of Object.entries(value)) {
682
+ if (Object.hasOwn(properties, key)) {
683
+ const propertySchema = properties[key];
684
+ if (typeof propertySchema !== "boolean" && !schemaObject(propertySchema)) {
685
+ return `Invalid JSON Schema property '${schemaPath(path, key)}'`;
686
+ }
687
+ const propertyError = validateStrictSchemaValue(child, propertySchema, root, schemaPath(path, key), depth + 1, budget);
688
+ if (propertyError)
689
+ return propertyError;
690
+ continue;
691
+ }
692
+ if (schema.additionalProperties === false) {
693
+ return `Unexpected parameter: ${schemaPath(path, key)}`;
694
+ }
695
+ if (typeof schema.additionalProperties === "boolean" ||
696
+ schema.additionalProperties === undefined) {
697
+ continue;
698
+ }
699
+ if (!schemaObject(schema.additionalProperties)) {
700
+ return `Invalid JSON Schema additionalProperties at '${path || "arguments"}'`;
701
+ }
702
+ const additionalError = validateStrictSchemaValue(child, schema.additionalProperties, root, schemaPath(path, key), depth + 1, budget);
703
+ if (additionalError)
704
+ return additionalError;
705
+ }
706
+ }
707
+ return null;
708
+ }
709
+ /**
710
+ * Fail-closed recursive validation for reviewed Panel App Agent tools.
711
+ *
712
+ * This deliberately lives beside the lightweight validator instead of
713
+ * changing its permissive compatibility contract for existing built-ins and
714
+ * third-party MCP schemas.
715
+ */
716
+ export function validateToolInputSchemaStrict(schema) {
717
+ try {
718
+ const jsonError = validateStrictJsonValue(schema, "schema", 0, new WeakSet(), {
719
+ remaining: MAX_STRICT_VALUE_NODES,
720
+ });
721
+ if (jsonError)
722
+ return `Invalid JSON Schema: ${jsonError}`;
723
+ return validateStrictSchemaDefinition(schema, schema, "", 0, new WeakSet());
724
+ }
725
+ catch {
726
+ return "Invalid JSON Schema";
727
+ }
728
+ }
729
+ export function validateToolArgsStrict(toolName, args, schema) {
730
+ try {
731
+ const schemaError = validateToolInputSchemaStrict(schema);
732
+ if (schemaError)
733
+ return schemaError;
734
+ const jsonError = validateStrictJsonValue(args, "", 0, new WeakSet(), {
735
+ remaining: MAX_STRICT_VALUE_NODES,
736
+ });
737
+ if (jsonError)
738
+ return jsonError;
739
+ return validateStrictSchemaValue(args, schema, schema, "", 0, {
740
+ remaining: MAX_STRICT_SCHEMA_EVALUATIONS,
741
+ });
742
+ }
743
+ catch {
744
+ return `Invalid JSON Schema for tool '${toolName}'`;
745
+ }
746
+ }