@evalops/maestro 0.10.22 → 0.10.24

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 (387) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/agent.d.ts +2 -2
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +1 -1
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/keys.d.ts +2 -5
  7. package/dist/agent/keys.d.ts.map +1 -1
  8. package/dist/agent/keys.js +4 -5
  9. package/dist/agent/keys.js.map +1 -1
  10. package/dist/agent/modes.d.ts +2 -2
  11. package/dist/agent/modes.d.ts.map +1 -1
  12. package/dist/agent/modes.js +6 -7
  13. package/dist/agent/modes.js.map +1 -1
  14. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  15. package/dist/agent/providers/anthropic.js +4 -4
  16. package/dist/agent/providers/anthropic.js.map +1 -1
  17. package/dist/agent/providers/google.js +1 -1
  18. package/dist/agent/swarm/executor.d.ts +2 -0
  19. package/dist/agent/swarm/executor.d.ts.map +1 -1
  20. package/dist/agent/swarm/executor.js +208 -35
  21. package/dist/agent/swarm/executor.js.map +1 -1
  22. package/dist/agent/swarm/types.d.ts +2 -0
  23. package/dist/agent/swarm/types.d.ts.map +1 -1
  24. package/dist/agent/swarm/types.js.map +1 -1
  25. package/dist/agent/tool-capability-types.d.ts +36 -0
  26. package/dist/agent/tool-capability-types.d.ts.map +1 -0
  27. package/dist/agent/tool-capability-types.js +2 -0
  28. package/dist/agent/tool-capability-types.js.map +1 -0
  29. package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
  30. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  31. package/dist/agent/transport/tool-execution-bridge.js +28 -15
  32. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  33. package/dist/agent/transport/transport-utils.d.ts.map +1 -1
  34. package/dist/agent/transport/transport-utils.js +2 -3
  35. package/dist/agent/transport/transport-utils.js.map +1 -1
  36. package/dist/agent/transport.js +1 -1
  37. package/dist/agent/transport.js.map +1 -1
  38. package/dist/agent/type-guards.d.ts +1 -1
  39. package/dist/agent/type-guards.js +1 -1
  40. package/dist/agent/type-guards.js.map +1 -1
  41. package/dist/agent/types.d.ts +5 -3
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/agent/types.js +2 -2
  44. package/dist/agent/types.js.map +1 -1
  45. package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
  46. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
  47. package/dist/app-server/daemon-lifecycle-api.js +259 -0
  48. package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
  49. package/dist/app-server/external-agent-import-api.d.ts +30 -0
  50. package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
  51. package/dist/app-server/external-agent-import-api.js +553 -0
  52. package/dist/app-server/external-agent-import-api.js.map +1 -0
  53. package/dist/app-server/host-control-api.d.ts +30 -0
  54. package/dist/app-server/host-control-api.d.ts.map +1 -0
  55. package/dist/app-server/host-control-api.js +343 -0
  56. package/dist/app-server/host-control-api.js.map +1 -0
  57. package/dist/app-server/in-process-client.d.ts +2 -2
  58. package/dist/app-server/in-process-client.d.ts.map +1 -1
  59. package/dist/app-server/in-process-client.js.map +1 -1
  60. package/dist/app-server/network-governance-api.d.ts +26 -0
  61. package/dist/app-server/network-governance-api.d.ts.map +1 -0
  62. package/dist/app-server/network-governance-api.js +476 -0
  63. package/dist/app-server/network-governance-api.js.map +1 -0
  64. package/dist/app-server/plugin-bundle-api.d.ts +17 -0
  65. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
  66. package/dist/app-server/plugin-bundle-api.js +219 -0
  67. package/dist/app-server/plugin-bundle-api.js.map +1 -0
  68. package/dist/app-server/policy-control-api.d.ts +14 -0
  69. package/dist/app-server/policy-control-api.d.ts.map +1 -0
  70. package/dist/app-server/policy-control-api.js +200 -0
  71. package/dist/app-server/policy-control-api.js.map +1 -0
  72. package/dist/app-server/protocol-modes-api.d.ts +22 -0
  73. package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
  74. package/dist/app-server/protocol-modes-api.js +124 -0
  75. package/dist/app-server/protocol-modes-api.js.map +1 -0
  76. package/dist/app-server/sandbox-proof-api.d.ts +21 -0
  77. package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
  78. package/dist/app-server/sandbox-proof-api.js +127 -0
  79. package/dist/app-server/sandbox-proof-api.js.map +1 -0
  80. package/dist/app-server/session-api.d.ts +93 -3
  81. package/dist/app-server/session-api.d.ts.map +1 -1
  82. package/dist/app-server/session-api.js +706 -18
  83. package/dist/app-server/session-api.js.map +1 -1
  84. package/dist/audit/logger.d.ts +1 -1
  85. package/dist/bootstrap/auth-setup.d.ts.map +1 -1
  86. package/dist/bootstrap/auth-setup.js +17 -2
  87. package/dist/bootstrap/auth-setup.js.map +1 -1
  88. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  89. package/dist/bootstrap/model-resolution-setup.js +19 -4
  90. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  91. package/dist/cli/args.d.ts +2 -2
  92. package/dist/cli/args.d.ts.map +1 -1
  93. package/dist/cli/args.js +2 -2
  94. package/dist/cli/args.js.map +1 -1
  95. package/dist/cli/commands/a2a.d.ts.map +1 -1
  96. package/dist/cli/commands/a2a.js +226 -14
  97. package/dist/cli/commands/a2a.js.map +1 -1
  98. package/dist/cli/commands/anthropic.d.ts +1 -1
  99. package/dist/cli/commands/anthropic.d.ts.map +1 -1
  100. package/dist/cli/commands/anthropic.js +3 -68
  101. package/dist/cli/commands/anthropic.js.map +1 -1
  102. package/dist/cli/commands/modes.js +1 -1
  103. package/dist/cli/commands/modes.js.map +1 -1
  104. package/dist/cli/help.d.ts.map +1 -1
  105. package/dist/cli/help.js +5 -7
  106. package/dist/cli/help.js.map +1 -1
  107. package/dist/cli/rpc-mode.d.ts +1 -1
  108. package/dist/cli/rpc-mode.js +1 -1
  109. package/dist/cli/rpc-mode.js.map +1 -1
  110. package/dist/cli/session.js +1 -1
  111. package/dist/cli/session.js.map +1 -1
  112. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  113. package/dist/cli-tui/commands/command-catalog.js +7 -12
  114. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  115. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
  116. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  117. package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
  118. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  119. package/dist/cli-tui/custom-editor.d.ts +1 -1
  120. package/dist/cli-tui/custom-editor.js +2 -2
  121. package/dist/cli-tui/custom-editor.js.map +1 -1
  122. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  123. package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
  124. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  125. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  126. package/dist/cli-tui/selectors/model-selector.js +0 -1
  127. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  128. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
  129. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  130. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  131. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
  132. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  133. package/dist/cli-tui/selectors/oauth-selector.js +3 -4
  134. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  135. package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
  136. package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
  137. package/dist/cli-tui/tui-renderer.js +2 -2
  138. package/dist/cli-tui/tui-renderer.js.map +1 -1
  139. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  140. package/dist/cli-tui/utils/footer-utils.js +1 -1
  141. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  142. package/dist/cli.js +15171 -14298
  143. package/dist/commands/prompts.d.ts +1 -1
  144. package/dist/commands/prompts.js +1 -1
  145. package/dist/commands/prompts.js.map +1 -1
  146. package/dist/config/constants.d.ts +2 -2
  147. package/dist/config/constants.d.ts.map +1 -1
  148. package/dist/config/constants.js +2 -2
  149. package/dist/config/constants.js.map +1 -1
  150. package/dist/config/index.d.ts +1 -1
  151. package/dist/config/index.js +1 -1
  152. package/dist/config/index.js.map +1 -1
  153. package/dist/config/toml-config.js +3 -3
  154. package/dist/config/toml-config.js.map +1 -1
  155. package/dist/db/client.d.ts +2 -2
  156. package/dist/db/client.js +2 -2
  157. package/dist/db/client.js.map +1 -1
  158. package/dist/db/migrate.d.ts +1 -1
  159. package/dist/db/migrate.js +1 -1
  160. package/dist/db/migrate.js.map +1 -1
  161. package/dist/db/schema.d.ts +2 -2
  162. package/dist/db/schema.js +1 -1
  163. package/dist/db/schema.js.map +1 -1
  164. package/dist/errors/index.d.ts +2 -2
  165. package/dist/errors/index.js +2 -2
  166. package/dist/errors/index.js.map +1 -1
  167. package/dist/main.d.ts +4 -5
  168. package/dist/main.d.ts.map +1 -1
  169. package/dist/main.js +17 -14
  170. package/dist/main.js.map +1 -1
  171. package/dist/mcp/config.d.ts +15 -2
  172. package/dist/mcp/config.d.ts.map +1 -1
  173. package/dist/mcp/config.js +50 -26
  174. package/dist/mcp/config.js.map +1 -1
  175. package/dist/mcp/fathom-cua.d.ts.map +1 -1
  176. package/dist/mcp/fathom-cua.js +10 -0
  177. package/dist/mcp/fathom-cua.js.map +1 -1
  178. package/dist/mcp/manager.d.ts.map +1 -1
  179. package/dist/mcp/manager.js +32 -1
  180. package/dist/mcp/manager.js.map +1 -1
  181. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  182. package/dist/mcp/tool-bridge.js +12 -3
  183. package/dist/mcp/tool-bridge.js.map +1 -1
  184. package/dist/mcp/tool-capabilities.d.ts +5 -0
  185. package/dist/mcp/tool-capabilities.d.ts.map +1 -0
  186. package/dist/mcp/tool-capabilities.js +271 -0
  187. package/dist/mcp/tool-capabilities.js.map +1 -0
  188. package/dist/mcp/types.d.ts +6 -1
  189. package/dist/mcp/types.d.ts.map +1 -1
  190. package/dist/mcp/types.js.map +1 -1
  191. package/dist/models/config-loader.d.ts +1 -1
  192. package/dist/models/factory-integration.d.ts +1 -1
  193. package/dist/models/factory-integration.js +1 -1
  194. package/dist/models/factory-integration.js.map +1 -1
  195. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
  196. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
  197. package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
  198. package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
  199. package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
  200. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +4 -3
  201. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  202. package/dist/node_modules/@evalops/contracts/dist/index.js +3 -2
  203. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  204. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
  205. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  206. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
  207. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  208. package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
  209. package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
  210. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  211. package/dist/node_modules/@evalops/tui/package.json +1 -1
  212. package/dist/oauth/connectors.d.ts +2 -2
  213. package/dist/oauth/connectors.d.ts.map +1 -1
  214. package/dist/oauth/connectors.js +3 -5
  215. package/dist/oauth/connectors.js.map +1 -1
  216. package/dist/oauth/github-copilot.d.ts +1 -1
  217. package/dist/oauth/github-copilot.js +1 -1
  218. package/dist/oauth/github-copilot.js.map +1 -1
  219. package/dist/oauth/index.d.ts +10 -8
  220. package/dist/oauth/index.d.ts.map +1 -1
  221. package/dist/oauth/index.js +54 -31
  222. package/dist/oauth/index.js.map +1 -1
  223. package/dist/oauth/openai.d.ts +1 -1
  224. package/dist/oauth/openai.js +2 -2
  225. package/dist/oauth/openai.js.map +1 -1
  226. package/dist/platform/a2a-completion-audit.d.ts +41 -0
  227. package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
  228. package/dist/platform/a2a-completion-audit.js +177 -0
  229. package/dist/platform/a2a-completion-audit.js.map +1 -0
  230. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  231. package/dist/platform/a2a-task-ledger.js +17 -0
  232. package/dist/platform/a2a-task-ledger.js.map +1 -1
  233. package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
  234. package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
  235. package/dist/platform/a2a-telemetry-inspect.js +224 -0
  236. package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
  237. package/dist/platform/agent-registry-client.d.ts +8 -0
  238. package/dist/platform/agent-registry-client.d.ts.map +1 -1
  239. package/dist/platform/agent-registry-client.js +9 -1
  240. package/dist/platform/agent-registry-client.js.map +1 -1
  241. package/dist/providers/api-keys.d.ts +2 -2
  242. package/dist/providers/api-keys.js +2 -2
  243. package/dist/providers/api-keys.js.map +1 -1
  244. package/dist/providers/auth.d.ts +3 -6
  245. package/dist/providers/auth.d.ts.map +1 -1
  246. package/dist/providers/auth.js +1 -40
  247. package/dist/providers/auth.js.map +1 -1
  248. package/dist/rpc/index.d.ts +2 -2
  249. package/dist/rpc/index.js +2 -2
  250. package/dist/rpc/index.js.map +1 -1
  251. package/dist/rpc/rpc-types.d.ts +1 -1
  252. package/dist/rpc/rpc-types.js +1 -1
  253. package/dist/rpc/rpc-types.js.map +1 -1
  254. package/dist/safety/nested-agent-guard.js +1 -1
  255. package/dist/safety/nested-agent-guard.js.map +1 -1
  256. package/dist/safety/policy.d.ts +2 -2
  257. package/dist/safety/policy.js +2 -2
  258. package/dist/safety/policy.js.map +1 -1
  259. package/dist/safety/validators/network-policy-validator.d.ts +8 -0
  260. package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
  261. package/dist/safety/validators/network-policy-validator.js +29 -4
  262. package/dist/safety/validators/network-policy-validator.js.map +1 -1
  263. package/dist/sandbox/local-sandbox.d.ts +1 -1
  264. package/dist/sandbox/local-sandbox.js +1 -1
  265. package/dist/sandbox/local-sandbox.js.map +1 -1
  266. package/dist/server/app-context.d.ts +2 -0
  267. package/dist/server/app-context.d.ts.map +1 -1
  268. package/dist/server/app-context.js.map +1 -1
  269. package/dist/server/handlers/attachments.d.ts.map +1 -1
  270. package/dist/server/handlers/attachments.js +1 -0
  271. package/dist/server/handlers/attachments.js.map +1 -1
  272. package/dist/server/handlers/models.d.ts.map +1 -1
  273. package/dist/server/handlers/models.js +3 -1
  274. package/dist/server/handlers/models.js.map +1 -1
  275. package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
  276. package/dist/server/handlers/session-artifacts.js +13 -74
  277. package/dist/server/handlers/session-artifacts.js.map +1 -1
  278. package/dist/server/handlers/session-attachments.d.ts.map +1 -1
  279. package/dist/server/handlers/session-attachments.js +2 -0
  280. package/dist/server/handlers/session-attachments.js.map +1 -1
  281. package/dist/server/handlers/sessions.js +1 -1
  282. package/dist/server/handlers/sessions.js.map +1 -1
  283. package/dist/server/handlers/status.d.ts +2 -0
  284. package/dist/server/handlers/status.d.ts.map +1 -1
  285. package/dist/server/handlers/status.js +3 -2
  286. package/dist/server/handlers/status.js.map +1 -1
  287. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  288. package/dist/server/headless-runtime-service.js +32 -3
  289. package/dist/server/headless-runtime-service.js.map +1 -1
  290. package/dist/server/hosted-session-manager.d.ts +2 -0
  291. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  292. package/dist/server/hosted-session-manager.js +9 -0
  293. package/dist/server/hosted-session-manager.js.map +1 -1
  294. package/dist/server/model-selection.d.ts.map +1 -1
  295. package/dist/server/model-selection.js +9 -1
  296. package/dist/server/model-selection.js.map +1 -1
  297. package/dist/server/rate-limiter.d.ts +1 -1
  298. package/dist/server/rate-limiter.js +1 -1
  299. package/dist/server/rate-limiter.js.map +1 -1
  300. package/dist/server/router.d.ts +2 -2
  301. package/dist/server/router.js.map +1 -1
  302. package/dist/server/session-serialization.d.ts +9 -9
  303. package/dist/server/session-serialization.js +15 -15
  304. package/dist/server/session-serialization.js.map +1 -1
  305. package/dist/session/manager.d.ts +5 -0
  306. package/dist/session/manager.d.ts.map +1 -1
  307. package/dist/session/manager.js +56 -8
  308. package/dist/session/manager.js.map +1 -1
  309. package/dist/session/session-catalog.d.ts +2 -0
  310. package/dist/session/session-catalog.d.ts.map +1 -1
  311. package/dist/session/session-catalog.js +6 -0
  312. package/dist/session/session-catalog.js.map +1 -1
  313. package/dist/session/session-context.d.ts +2 -0
  314. package/dist/session/session-context.d.ts.map +1 -1
  315. package/dist/session/session-context.js +15 -0
  316. package/dist/session/session-context.js.map +1 -1
  317. package/dist/session/types.d.ts +7 -0
  318. package/dist/session/types.d.ts.map +1 -1
  319. package/dist/session/types.js.map +1 -1
  320. package/dist/session/wire-format.generated.d.ts +1 -0
  321. package/dist/session/wire-format.generated.d.ts.map +1 -1
  322. package/dist/session/wire-format.generated.js +1 -0
  323. package/dist/session/wire-format.generated.js.map +1 -1
  324. package/dist/shared-memory/contract.d.ts +4 -4
  325. package/dist/shared-memory/contract.js +2 -2
  326. package/dist/shared-memory/contract.js.map +1 -1
  327. package/dist/telemetry/index.d.ts +2 -2
  328. package/dist/telemetry/index.d.ts.map +1 -1
  329. package/dist/telemetry/index.js +2 -2
  330. package/dist/telemetry/index.js.map +1 -1
  331. package/dist/telemetry/maestro-event-bus.d.ts +57 -0
  332. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  333. package/dist/telemetry/maestro-event-bus.js +59 -1
  334. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  335. package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
  336. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  337. package/dist/telemetry/maestro-event-catalog.js +24 -0
  338. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  339. package/dist/telemetry/mcp-beacon.d.ts +2 -0
  340. package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
  341. package/dist/telemetry/mcp-beacon.js +15 -0
  342. package/dist/telemetry/mcp-beacon.js.map +1 -1
  343. package/dist/telemetry/metrics.d.ts +62 -0
  344. package/dist/telemetry/metrics.d.ts.map +1 -1
  345. package/dist/telemetry/metrics.js +84 -0
  346. package/dist/telemetry/metrics.js.map +1 -1
  347. package/dist/telemetry.d.ts +44 -0
  348. package/dist/telemetry.d.ts.map +1 -1
  349. package/dist/telemetry.js +84 -2
  350. package/dist/telemetry.js.map +1 -1
  351. package/dist/theme/theme-loader.js +2 -2
  352. package/dist/theme/theme-loader.js.map +1 -1
  353. package/dist/theme/theme-schema.json +2 -2
  354. package/dist/theme/theme.d.ts +1 -1
  355. package/dist/theme/theme.js.map +1 -1
  356. package/dist/tools/background/task-types.d.ts +1 -1
  357. package/dist/tools/extract-document.d.ts +1 -0
  358. package/dist/tools/extract-document.d.ts.map +1 -1
  359. package/dist/tools/extract-document.js +2 -1
  360. package/dist/tools/extract-document.js.map +1 -1
  361. package/dist/tools/index.d.ts +55 -55
  362. package/dist/tools/index.js +1 -1
  363. package/dist/tools/index.js.map +1 -1
  364. package/dist/tools/tool-dsl.d.ts +1 -1
  365. package/dist/tools/tool-dsl.js +1 -1
  366. package/dist/tools/tool-dsl.js.map +1 -1
  367. package/dist/utils/document-extractor.d.ts +1 -0
  368. package/dist/utils/document-extractor.d.ts.map +1 -1
  369. package/dist/utils/document-extractor.js +320 -40
  370. package/dist/utils/document-extractor.js.map +1 -1
  371. package/dist/utils/logger.d.ts +1 -1
  372. package/dist/utils/logger.js +1 -1
  373. package/dist/utils/logger.js.map +1 -1
  374. package/dist/version.json +2 -2
  375. package/dist/web-server.d.ts +1 -1
  376. package/dist/web-server.d.ts.map +1 -1
  377. package/dist/web-server.js +12 -8
  378. package/dist/web-server.js.map +1 -1
  379. package/package.json +4 -2
  380. package/dist/oauth/anthropic.d.ts +0 -17
  381. package/dist/oauth/anthropic.d.ts.map +0 -1
  382. package/dist/oauth/anthropic.js +0 -81
  383. package/dist/oauth/anthropic.js.map +0 -1
  384. package/dist/providers/anthropic-auth.d.ts +0 -75
  385. package/dist/providers/anthropic-auth.d.ts.map +0 -1
  386. package/dist/providers/anthropic-auth.js +0 -221
  387. package/dist/providers/anthropic-auth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"toml-config.js","sourceRoot":"","sources":["../../src/config/toml-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACN,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AA6M3C,gEAAgE;AAChE,+CAA+C;AAC/C,gEAAgE;AAEhE,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;IACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAC5C;IACC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAC7D;IACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/D,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CAClE,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CACxC;IACC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/D,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5D,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;CACxD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CACvC;IACC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjD,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CAC3C,EACD,EAAE,oBAAoB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CACxC,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CACpC;IACC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACzC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CACzC,EACD,EAAE,oBAAoB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CACxC,CAAC;AAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CACvC;IACC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAC1D;IACD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;CACjE,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CACvC;IACC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;CACjE,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,MAAM,CACV,EAAE,WAAW,EAAE,oBAAoB,EAAE,EACrC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAC/B;IACD,IAAI,CAAC,MAAM,CACV,EAAE,WAAW,EAAE,oBAAoB,EAAE,EACrC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAC/B;CACD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CACnC;IACC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC3C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CAC9C,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CACpC;IACC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CACzD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CACtC;IACC,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAC5D;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CACrD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAClC;IACC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CACvD;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CACzC,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CAC/C;IACC,OAAO,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,KAAK,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KACpB,CAAC,CACF;IACD,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;CACtD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,iCAAiC,GAAG,IAAI,CAAC,MAAM,CACpD;IACC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7C,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACrD,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CAChD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CACtC;IACC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC9C,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC5D,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CACpD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE;IACb,IAAI,CAAC,MAAM,CACV;QACC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QACrB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAChD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B;CACD,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CACvC;IACC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5C,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC5D,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpD,kCAAkC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC9C,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACzE,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACrE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CACrD;IACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CACjD;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACrC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACnD,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACvD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACvC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACxE,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,KAAK,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KACpB,CAAC,CACF;IACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1C,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,MAAM,CACV,IAAI,CAAC,MAAM,EAAE,EACb,IAAI,CAAC,MAAM,CACV;QACC,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAChE;KACD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CACD,CACD;CACD,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,MAAM,cAAc,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAElE,gEAAgE;AAChE,wBAAwB;AACxB,gEAAgE;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC7C,KAAK,EAAE,0BAA0B;IACjC,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,WAAW;IAC5B,YAAY,EAAE,iBAAiB;IAC/B,sBAAsB,EAAE,QAAQ;IAChC,QAAQ,EAAE;QACT,eAAe,EAAE,IAAI;KACrB;IACD,OAAO,EAAE;QACR,WAAW,EAAE,UAAU;KACvB;IACD,KAAK,EAAE;QACN,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,IAAI;KACnB;IACD,GAAG,EAAE;QACJ,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,IAAI;KAChB;IACD,WAAW,EAAE,QAAQ;IACrB,qBAAqB,EAAE,EAAE,GAAG,IAAI;IAChC,8BAA8B,EAAE,CAAC,WAAW,CAAC;CAC7C,CAAC;AAEF,MAAM,UAAU,mCAAmC,CAClD,MAAuB;IAEvB,MAAM,QAAQ,GACb,MAAM,EAAE,8BAA8B;QACtC,cAAc,CAAC,8BAA8B;QAC7C,EAAE,CAAC;IACJ,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC;AA0CD,SAAS,wBAAwB,CAAC,MAAc,EAAE,SAAiB;IAClE,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACV,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;IACpB,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,GAAG,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QACrE,KAAK,IAAI,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACV,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,QAAQ,GAAG,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QACjD,QAAQ,GAAG,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QACjD,QAAQ,GAAG,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QACjD,QAAQ,GAAG,CAAC,CAAC;IACd,CAAC;SAAM,CAAC;QACP,GAAG,GAAG,KAAK,CAAC;IACb,CAAC;IAED,IAAI,KAAK,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC;QAC5B,GAAG,GAAG,KAAK,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IACnD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAC7B,QAAgB,EAChB,MAAe;IAQf,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;QAC/D,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/D,OAAO;gBACN,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACtD,SAAS,EAAE,UAAU;gBACrB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,KAAK,CAAC,IAAI;gBACxB,QAAQ,EAAE,MAAM;aAChB,CAAC;QACH,CAAC;gBAAS,CAAC;YACV,SAAS,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO;QACN,OAAO;QACP,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK,CAAC,IAAI;KACxB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAChC,GAAW,EACX,UAAoB,EACpB,UAAsC,EACtC,cAAuB,EACvB,cAA4C,EAAE;IAE9C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,IAA8C,CAAC;YACnD,IAAI,CAAC;gBACJ,IAAI,GAAG,qBAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,mCAAmC,YAAY,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACrH,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC;iBACtB,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS;gBAC1B,CAAC,CAAC,qBAAqB,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,YAAY,UAAU;gBAC/E,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;YACzC,OAAO;gBACN,IAAI,EAAE,YAAY;gBAClB,UAAU;gBACV,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC;gBACtB,aAAa,EAAE,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtD,OAAO;gBACP,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC;QACH,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kCAAkC;IACjD,OAAO,KAAK,CAAC,IAAI,CAChB,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CACnE,CAAC;AACH,CAAC;AAED,SAAS,oCAAoC,CAAC,GAAW;IACxD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,IAAI,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM;QACP,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM;QACP,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,OAAO,EAAE,CAAC;IACtB,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC3C,WAAoB,EACpB,MAAuB;IAEvB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,mCAAmC,CAAC,cAAc,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,cAAc,CAAC,qBAAqB,CAAC;IACzD,MAAM,QAAQ,GACb,OAAO,WAAW,KAAK,QAAQ;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,cAAc,GAAG,QAAQ,CAAC;IAC9B,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,MAAM,WAAW,GAAiC,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,MAAM,SAAS,GAAG,CACjB,KAAoE,EAC7D,EAAE;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;QACR,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,0DAA0D,YAAY,GAAG;gBAClF,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,KAAK;YACR,IAAI,EAAE,YAAY;YAClB,eAAe,EAAE,OAAO,CAAC,MAAM;SAC/B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,eAAe,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,YAAY,IAAI,SAAS,eAAe,YAAY,GAAG;gBAC3G,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACxB,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CACf,GAAW,EACX,UAAsC,EAC5B,EAAE;QACZ,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,oCAAoC,OAAO,CAAC,GAAG,CAAC,+CAA+C;gBACxG,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC;aACtB,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACd,CAAC;QACD,SAAS,CACR,wBAAwB,CACvB,GAAG,EACH,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,CACX,CACD,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IAEF,KAAK,MAAM,gBAAgB,IAAI,kCAAkC,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1C,MAAM;QACP,CAAC;IACF,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,oCAAoC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM;QACP,CAAC;IACF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,CACd,KAAK,CAAC,aAAa,EACnB,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC/C,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAClD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,GAAG,KAAK,IAAI,aAAa,6FAA6F;aAC/H,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO;QACN,GAAG;QACH,UAAU;QACV,QAAQ;QACR,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACvE,OAAO;QACP,WAAW;KACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CACjD,WAAoB,EACpB,MAAuB;IAEvB,OAAO,4BAA4B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CACnE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mCAAmC,CAClD,WAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACvE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,gEAAgE;AAChE,wBAAwB;AACxB,gEAAgE;AAEhE,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAE5C;;GAEG;AACH,SAAS,SAAS,CAAmB,MAAS,EAAE,MAAkB;IACjE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAA6B,CAAC;IAExD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,WAAW,GAAI,MAAkC,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IACC,WAAW,KAAK,SAAS;YACzB,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,KAAK,IAAI;YACpB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,KAAK,IAAI;YACpB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC1B,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACtB,WAAsC,EACtC,WAA+C,CAC/C,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3B,CAAC;IACF,CAAC;IAED,OAAO,MAAW,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GACZ,cAAc,CAAC,MAAM;gBACpB,EAAE,GAAG,CACJ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,EAAE,CACjE;iBACA,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAwB,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC1C,IAAI;YACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,6BAA6B,CACrC,MAA6B,EAC7B,UAAkB,EAClB,KAAqC;IAErC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI;QACJ,GAAG,EAAE,SAAS;QACd,KAAK;QACL,UAAU;KACV,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC3C,KAA2B,EAC3B,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;IAE5B,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,MAAM;YACV,OAAO,iBAAiB,EAAE,CAAC;QAC5B,KAAK,SAAS;YACb,OAAO,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACtD,KAAK,OAAO;YACX,OAAO,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC7D,CAAC;AACF,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GACZ,cAAc,CAAC,MAAM;gBACpB,EAAE,GAAG,CACJ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,EAAE,CACjE;iBACA,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,MAAwB,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC;QACb,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,MAAsB;IAChE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAiC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9D,gBAAgB,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAiB,EAAE,GAAW;IACjE,MAAM,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,+BAA+B,CACvC,UAAkB,EAClB,GAAW;IAEX,IAAI,CAAC;QACJ,OAAO,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,iCAAiC,CACzC,SAAiB,EACjB,YAAoB;IAEpB,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,YAAY,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,YAAY,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,8BAA8B,CACtC,IAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,KAA2B;IAE3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,gCAAgC,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACN,GAAG,IAAI;QACP,MAAM,EAAE,gCAAgC,CACvC,IAAI,CAAC,MAAM,EACX,UAAU,EACV,QAAQ,EACR,KAAK,CACL;KACD,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACxC,UAAkB,EAClB,UAAkB,EAClB,QAAgB,EAChB,KAA2B;IAE3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,iCAAiC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,0BAA0B,CAClC,IAAiB,EACjB,UAAkB,EAClB,aAAqB,EACrB,YAAoB;IAEpB,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,iBAAiB,GAAG,+BAA+B,CACxD,aAAa,EACb,YAAY,CACZ,CAAC;IACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,iBAAiB,CAAC;AAC1E,CAAC;AAED,SAAS,0BAA0B,CAClC,YAAoB,EACpB,aAAqB;IAErB,MAAM,OAAO,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACzE,0BAA0B,CACzB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,aAAa,EACb,YAAY,CACZ,CACD,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAU,EAAE,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,kBAAkB,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC/C,OAAwC;IAExC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,4BAA4B,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,iBAAiB,GAAG,0BAA0B,CACnD,OAAO,CAAC,IAAI,EACZ,YAAY,CACZ,CAAC;IACF,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,iBAAiB,CAC3E,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,uBAAuB,IAAI,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,UAAU,GAAG,8BAA8B,CAChD,OAAO,CAAC,IAAI,EACZ,IAAI,EACJ,YAAY,EACZ,OAAO,CAAC,KAAK,CACb,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,UAAU,CAAC,QAAQ,GAAG,CAAC,GAAG,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACxD,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,qCAAqC,CACpD,OAA2C;IAE3C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,KAAK,GACV,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,4BAA4B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAChD,CAAC,IAAI,EAAE,EAAE,CACR,CAAC,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CACpE,CAAC;IACF,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACxE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,uBAAuB,OAAO,CAAC,IAAI,sBAAsB,IAAI,GAAG,CAChE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,UAAU,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IACzC,CAAC;SAAM,CAAC;QACP,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC5B,CAAC;IACD,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAsB;IAChD,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,gBAAgB;IAChB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC1C,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACxC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC5D,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAyC,CAAC;QACrE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC;QACjC,CAAC;IACF,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAmC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC9C,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;QAC7C,MAAM,WAAW,GAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9D,IACC,WAAW,KAAK,UAAU;YAC1B,WAAW,KAAK,MAAM;YACtB,WAAW,KAAK,MAAM,EACrB,CAAC;YACF,MAAM,CAAC,OAAO,GAAG;gBAChB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACzB,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;aAC9D,CAAC;QACH,CAAC;IACF,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,OAAO,GAAG;gBAChB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACzB,SAAS,EAAE,MAAM;aACjB,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACpB,MAAsB,EACtB,WAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,OAAkC,CAAC,CAAC;IAErE,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACzB,YAAoB,EACpB,WAAoB,EACpB,YAAsC;IAEtC,cAAc;IACd,IACC,YAAY;QACZ,kBAAkB,KAAK,YAAY;QACnC,iBAAiB,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAC1C,CAAC;QACF,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,YAAY,CAAC;QACrB,CAAC;QACD,OAAO,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IAEnC,qBAAqB;IACrB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,qDAAqD;IACrD,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,8BAA8B;IAC9B,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,MAAM,aAAa,GAAG,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC;IACpD,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,2CAA2C;IAC3C,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,YAAY,GAAG,MAAM,CAAC;IACtB,kBAAkB,GAAG,YAAY,CAAC;IAClC,iBAAiB,GAAG,WAAW,IAAI,IAAI,CAAC;IAExC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;QACnC,MAAM,EAAE,YAAY,KAAK,IAAI;QAC7B,OAAO,EAAE,aAAa,KAAK,IAAI;QAC/B,OAAO,EAAE,aAAa;KACtB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CACzC,YAAoB;IAEpB,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAEtE,OAAO;QACN,GAAG,6BAA6B,CAC/B,eAAe,CAAC,UAAU,CAAC,EAC3B,UAAU,EACV,MAAM,CACN;QACD,GAAG,6BAA6B,CAC/B,eAAe,CAAC,WAAW,CAAC,EAC5B,WAAW,EACX,SAAS,CACT;QACD,GAAG,6BAA6B,CAC/B,eAAe,CAAC,SAAS,CAAC,EAC1B,SAAS,EACT,OAAO,CACP;KACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,YAAY,GAAG,IAAI,CAAC;IACpB,kBAAkB,GAAG,IAAI,CAAC;IAC1B,iBAAiB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC7B,MAAsB,EACtB,GAAM;IAEN,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,cAAc,IAAI,WAAW,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,eAAe,IAAI,WAAW,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,YAAY,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAExE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,YAAY,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IACrE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,QAAgB;IAEhB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,6BAA6B;IAC7B,IAAI,CAAC;QACJ,2BAA2B;QAC3B,MAAM,OAAO,GAAG,WAAW,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAuB,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,oCAAoC;QACpC,uCAAuC;QACvC,IACC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EACnD,CAAC;YACF,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAsB,EACtB,GAAW,EACX,KAAc;IAEd,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,6BAA6B;IAC7B,IAAI,OAAO,GAA4B,MAAiC,CAAC;IACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,CAAC,CAA4B,CAAC;IACjD,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC","sourcesContent":["/**\n * TOML-based Configuration System with Profiles\n *\n * Ported from OpenAI Codex (MIT License) config pattern.\n * Supports:\n * - ~/.maestro/config.toml (global config)\n * - .maestro/config.toml (project config - shared, committed to git)\n * - .maestro/config.local.toml (local overrides - gitignored)\n * - Named profiles for different configurations\n * - Environment variable overrides\n * - CLI flag overrides\n *\n * Configuration precedence (highest first):\n * 1. CLI flags (--model, --config key=value)\n * 2. Environment variables (MAESTRO_*)\n * 3. Active profile settings\n * 4. Local config.local.toml (personal overrides)\n * 5. Project config.toml (shared)\n * 6. Global config.toml\n * 7. Built-in defaults\n *\n * The config.local.toml file follows Claude Code's settings.local.json pattern,\n * allowing users to have personal settings that don't get committed to git.\n */\n\nimport { createHash } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\treadSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport { parse as parseTOML, stringify as stringifyTOML } from \"smol-toml\";\nimport { parsePackageSpec } from \"../packages/loader.js\";\nimport {\n\tformatPackageSource,\n\tparsePackageSource,\n} from \"../packages/sources.js\";\nimport type { PackageSpec } from \"../packages/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport { compileTypeboxSchema } from \"../utils/typebox-ajv.js\";\nimport { PATHS, getAgentDir } from \"./constants.js\";\n\nconst logger = createLogger(\"config:toml\");\n\n// ─────────────────────────────────────────────────────────────\n// Configuration Types\n// ─────────────────────────────────────────────────────────────\n\nexport type ApprovalPolicy =\n\t| \"untrusted\"\n\t| \"on-failure\"\n\t| \"on-request\"\n\t| \"never\";\nexport type SandboxMode =\n\t| \"read-only\"\n\t| \"workspace-write\"\n\t| \"danger-full-access\";\nexport type ReasoningEffort = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport interface ModelProviderConfig {\n\tname: string;\n\tbase_url: string;\n\tenv_key?: string;\n\twire_api?: \"chat\" | \"responses\";\n\tquery_params?: Record<string, string>;\n\thttp_headers?: Record<string, string>;\n\tenv_http_headers?: Record<string, string>;\n\trequest_max_retries?: number;\n\tstream_max_retries?: number;\n\tstream_idle_timeout_ms?: number;\n}\n\nexport interface McpServerConfig {\n\tcommand?: string;\n\targs?: string[];\n\tenv?: Record<string, string>;\n\tcwd?: string;\n\turl?: string;\n\tbearer_token_env_var?: string;\n\thttp_headers?: Record<string, string>;\n\tenv_http_headers?: Record<string, string>;\n\tenabled?: boolean;\n\tstartup_timeout_sec?: number;\n\ttool_timeout_sec?: number;\n\tenabled_tools?: string[];\n\tdisabled_tools?: string[];\n}\n\nexport interface FeaturesConfig {\n\tweb_search_request?: boolean;\n\tview_image_tool?: boolean;\n\tghost_commit?: boolean;\n\t[key: string]: boolean | undefined;\n}\n\nexport interface ToolsConfig {\n\tweb_search?: boolean;\n\tview_image?: boolean;\n}\n\nexport interface OtelConfig {\n\tenvironment?: string;\n\texporter?:\n\t\t| \"none\"\n\t\t| { \"otlp-http\": OtlpHttpConfig }\n\t\t| { \"otlp-grpc\": OtlpGrpcConfig };\n\tlog_user_prompt?: boolean;\n}\n\nexport interface OtlpHttpConfig {\n\tendpoint: string;\n\tprotocol?: \"binary\" | \"json\";\n\theaders?: Record<string, string>;\n}\n\nexport interface OtlpGrpcConfig {\n\tendpoint: string;\n\theaders?: Record<string, string>;\n}\n\nexport interface RetryConfig {\n\tenabled?: boolean; // default: true\n\tmax_retries?: number; // default: 3\n\tbase_delay_ms?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n}\n\nexport interface HistoryConfig {\n\tpersistence?: \"save-all\" | \"none\";\n\tmax_bytes?: number;\n}\n\nexport interface TuiConfig {\n\tnotifications?: boolean | string[];\n\tanimations?: boolean;\n}\n\nexport interface ShellEnvironmentPolicy {\n\tinherit?: \"all\" | \"core\" | \"none\";\n\tignore_default_excludes?: boolean;\n\texclude?: string[];\n\tset?: Record<string, string>;\n\tinclude_only?: string[];\n}\n\nexport interface SandboxWorkspaceWriteConfig {\n\twritable_roots?: string[];\n\tnetwork_access?: boolean;\n\texclude_tmpdir_env_var?: boolean;\n\texclude_slash_tmp?: boolean;\n}\n\nexport interface ProfileConfig {\n\tmodel?: string;\n\tmodel_provider?: string;\n\tapproval_policy?: ApprovalPolicy;\n\tsandbox_mode?: SandboxMode;\n\tmodel_reasoning_effort?: ReasoningEffort;\n\tmodel_reasoning_summary?: \"auto\" | \"concise\" | \"detailed\" | \"none\";\n\tmodel_verbosity?: \"low\" | \"medium\" | \"high\";\n\t// Allow any other config keys\n\t[key: string]: unknown;\n}\n\nexport interface ComposerConfig {\n\t// Model settings\n\tmodel?: string;\n\tmodel_provider?: string;\n\tmodel_context_window?: number;\n\tmodel_reasoning_effort?: ReasoningEffort;\n\tmodel_reasoning_summary?: \"auto\" | \"concise\" | \"detailed\" | \"none\";\n\tmodel_verbosity?: \"low\" | \"medium\" | \"high\";\n\tmodel_supports_reasoning_summaries?: boolean;\n\n\t// Execution environment\n\tapproval_policy?: ApprovalPolicy;\n\tsandbox_mode?: SandboxMode;\n\tsandbox_workspace_write?: SandboxWorkspaceWriteConfig;\n\tshell_environment_policy?: ShellEnvironmentPolicy;\n\n\t// Providers\n\tmodel_providers?: Record<string, ModelProviderConfig>;\n\n\t// MCP\n\tmcp_servers?: Record<string, McpServerConfig>;\n\n\t// Features\n\tfeatures?: FeaturesConfig;\n\ttools?: ToolsConfig;\n\n\t// Observability\n\totel?: OtelConfig;\n\tnotify?: string[];\n\thide_agent_reasoning?: boolean;\n\tshow_raw_agent_reasoning?: boolean;\n\n\t// History\n\thistory?: HistoryConfig;\n\n\t// Retry on transient errors\n\tretry?: RetryConfig;\n\n\t// TUI\n\ttui?: TuiConfig;\n\n\t// Project docs\n\tproject_doc_max_bytes?: number;\n\tproject_doc_fallback_filenames?: string[];\n\n\t// Profiles\n\tprofile?: string;\n\tprofiles?: Record<string, ProfileConfig>;\n\n\t// File opener\n\tfile_opener?: \"vscode\" | \"vscode-insiders\" | \"windsurf\" | \"cursor\" | \"none\";\n\n\t// Instructions\n\tinstructions?: string;\n\texperimental_instructions_file?: string;\n\n\t// Packages\n\tpackages?: PackageSpec[];\n\n\t// Trust\n\tprojects?: Record<string, { trust_level?: \"trusted\" | \"untrusted\" }>;\n}\n\nexport interface ConfiguredPackageSpec {\n\tspec: PackageSpec;\n\tcwd: string;\n\tscope: \"user\" | \"project\" | \"local\";\n\tconfigPath: string;\n}\n\nexport type WritablePackageScope = ConfiguredPackageSpec[\"scope\"];\n\nexport interface AddConfiguredPackageSpecOptions {\n\tworkspaceDir?: string;\n\tscope: WritablePackageScope;\n\tspec: PackageSpec;\n}\n\nexport interface RemoveConfiguredPackageSpecOptions {\n\tworkspaceDir?: string;\n\tscope?: WritablePackageScope;\n\tspec: string;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Validation Schema (loose, allows extra keys)\n// ─────────────────────────────────────────────────────────────\n\nconst ApprovalPolicySchema = Type.Union([\n\tType.Literal(\"untrusted\"),\n\tType.Literal(\"on-failure\"),\n\tType.Literal(\"on-request\"),\n\tType.Literal(\"never\"),\n]);\n\nconst SandboxModeSchema = Type.Union([\n\tType.Literal(\"read-only\"),\n\tType.Literal(\"workspace-write\"),\n\tType.Literal(\"danger-full-access\"),\n]);\n\nconst ReasoningEffortSchema = Type.Union([\n\tType.Literal(\"minimal\"),\n\tType.Literal(\"low\"),\n\tType.Literal(\"medium\"),\n\tType.Literal(\"high\"),\n]);\n\nconst ModelReasoningSummarySchema = Type.Union([\n\tType.Literal(\"auto\"),\n\tType.Literal(\"concise\"),\n\tType.Literal(\"detailed\"),\n\tType.Literal(\"none\"),\n]);\n\nconst ModelVerbositySchema = Type.Union([\n\tType.Literal(\"low\"),\n\tType.Literal(\"medium\"),\n\tType.Literal(\"high\"),\n]);\n\nconst ModelProviderConfigSchema = Type.Object(\n\t{\n\t\tname: Type.Optional(Type.String()),\n\t\tbase_url: Type.Optional(Type.String()),\n\t\tenv_key: Type.Optional(Type.String()),\n\t\twire_api: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"chat\"), Type.Literal(\"responses\")]),\n\t\t),\n\t\tquery_params: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\thttp_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenv_http_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\trequest_max_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tstream_max_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tstream_idle_timeout_ms: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst McpServerConfigSchema = Type.Object(\n\t{\n\t\tcommand: Type.Optional(Type.String()),\n\t\targs: Type.Optional(Type.Array(Type.String())),\n\t\tenv: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tcwd: Type.Optional(Type.String()),\n\t\turl: Type.Optional(Type.String()),\n\t\tbearer_token_env_var: Type.Optional(Type.String()),\n\t\thttp_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenv_http_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenabled: Type.Optional(Type.Boolean()),\n\t\tstartup_timeout_sec: Type.Optional(Type.Number({ minimum: 0 })),\n\t\ttool_timeout_sec: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tenabled_tools: Type.Optional(Type.Array(Type.String())),\n\t\tdisabled_tools: Type.Optional(Type.Array(Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst FeaturesConfigSchema = Type.Object(\n\t{\n\t\tweb_search_request: Type.Optional(Type.Boolean()),\n\t\tview_image_tool: Type.Optional(Type.Boolean()),\n\t\tghost_commit: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: Type.Boolean() },\n);\n\nconst ToolsConfigSchema = Type.Object(\n\t{\n\t\tweb_search: Type.Optional(Type.Boolean()),\n\t\tview_image: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: Type.Boolean() },\n);\n\nconst OtlpHttpConfigSchema = Type.Object(\n\t{\n\t\tendpoint: Type.String(),\n\t\tprotocol: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"binary\"), Type.Literal(\"json\")]),\n\t\t),\n\t\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst OtlpGrpcConfigSchema = Type.Object(\n\t{\n\t\tendpoint: Type.String(),\n\t\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst OtelExporterSchema = Type.Union([\n\tType.Literal(\"none\"),\n\tType.Object(\n\t\t{ \"otlp-http\": OtlpHttpConfigSchema },\n\t\t{ additionalProperties: false },\n\t),\n\tType.Object(\n\t\t{ \"otlp-grpc\": OtlpGrpcConfigSchema },\n\t\t{ additionalProperties: false },\n\t),\n]);\n\nconst OtelConfigSchema = Type.Object(\n\t{\n\t\tenvironment: Type.Optional(Type.String()),\n\t\texporter: Type.Optional(OtelExporterSchema),\n\t\tlog_user_prompt: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst RetryConfigSchema = Type.Object(\n\t{\n\t\tenabled: Type.Optional(Type.Boolean()),\n\t\tmax_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tbase_delay_ms: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst HistoryConfigSchema = Type.Object(\n\t{\n\t\tpersistence: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"save-all\"), Type.Literal(\"none\")]),\n\t\t),\n\t\tmax_bytes: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst TuiConfigSchema = Type.Object(\n\t{\n\t\tnotifications: Type.Optional(\n\t\t\tType.Union([Type.Boolean(), Type.Array(Type.String())]),\n\t\t),\n\t\tanimations: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst ShellEnvironmentPolicySchema = Type.Object(\n\t{\n\t\tinherit: Type.Optional(\n\t\t\tType.Union([\n\t\t\t\tType.Literal(\"all\"),\n\t\t\t\tType.Literal(\"core\"),\n\t\t\t\tType.Literal(\"none\"),\n\t\t\t]),\n\t\t),\n\t\tignore_default_excludes: Type.Optional(Type.Boolean()),\n\t\texclude: Type.Optional(Type.Array(Type.String())),\n\t\tset: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tinclude_only: Type.Optional(Type.Array(Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst SandboxWorkspaceWriteConfigSchema = Type.Object(\n\t{\n\t\twritable_roots: Type.Optional(Type.Array(Type.String())),\n\t\tnetwork_access: Type.Optional(Type.Boolean()),\n\t\texclude_tmpdir_env_var: Type.Optional(Type.Boolean()),\n\t\texclude_slash_tmp: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst ProfileConfigSchema = Type.Object(\n\t{\n\t\tmodel: Type.Optional(Type.String()),\n\t\tmodel_provider: Type.Optional(Type.String()),\n\t\tapproval_policy: Type.Optional(ApprovalPolicySchema),\n\t\tsandbox_mode: Type.Optional(SandboxModeSchema),\n\t\tmodel_reasoning_effort: Type.Optional(ReasoningEffortSchema),\n\t\tmodel_reasoning_summary: Type.Optional(ModelReasoningSummarySchema),\n\t\tmodel_verbosity: Type.Optional(ModelVerbositySchema),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst PackageSpecSchema = Type.Union([\n\tType.String(),\n\tType.Object(\n\t\t{\n\t\t\tsource: Type.String(),\n\t\t\textensions: Type.Optional(Type.Array(Type.String())),\n\t\t\tskills: Type.Optional(Type.Array(Type.String())),\n\t\t\tprompts: Type.Optional(Type.Array(Type.String())),\n\t\t\tthemes: Type.Optional(Type.Array(Type.String())),\n\t\t},\n\t\t{ additionalProperties: true },\n\t),\n]);\n\nconst ComposerConfigSchema = Type.Object(\n\t{\n\t\tmodel: Type.Optional(Type.String()),\n\t\tmodel_provider: Type.Optional(Type.String()),\n\t\tmodel_context_window: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tmodel_reasoning_effort: Type.Optional(ReasoningEffortSchema),\n\t\tmodel_reasoning_summary: Type.Optional(ModelReasoningSummarySchema),\n\t\tmodel_verbosity: Type.Optional(ModelVerbositySchema),\n\t\tmodel_supports_reasoning_summaries: Type.Optional(Type.Boolean()),\n\t\tapproval_policy: Type.Optional(ApprovalPolicySchema),\n\t\tsandbox_mode: Type.Optional(SandboxModeSchema),\n\t\tsandbox_workspace_write: Type.Optional(SandboxWorkspaceWriteConfigSchema),\n\t\tshell_environment_policy: Type.Optional(ShellEnvironmentPolicySchema),\n\t\tmodel_providers: Type.Optional(\n\t\t\tType.Record(Type.String(), ModelProviderConfigSchema),\n\t\t),\n\t\tmcp_servers: Type.Optional(\n\t\t\tType.Record(Type.String(), McpServerConfigSchema),\n\t\t),\n\t\tfeatures: Type.Optional(FeaturesConfigSchema),\n\t\ttools: Type.Optional(ToolsConfigSchema),\n\t\totel: Type.Optional(OtelConfigSchema),\n\t\tnotify: Type.Optional(Type.Array(Type.String())),\n\t\thide_agent_reasoning: Type.Optional(Type.Boolean()),\n\t\tshow_raw_agent_reasoning: Type.Optional(Type.Boolean()),\n\t\thistory: Type.Optional(HistoryConfigSchema),\n\t\tretry: Type.Optional(RetryConfigSchema),\n\t\ttui: Type.Optional(TuiConfigSchema),\n\t\tproject_doc_max_bytes: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tproject_doc_fallback_filenames: Type.Optional(Type.Array(Type.String())),\n\t\tprofile: Type.Optional(Type.String()),\n\t\tprofiles: Type.Optional(Type.Record(Type.String(), ProfileConfigSchema)),\n\t\tfile_opener: Type.Optional(\n\t\t\tType.Union([\n\t\t\t\tType.Literal(\"vscode\"),\n\t\t\t\tType.Literal(\"vscode-insiders\"),\n\t\t\t\tType.Literal(\"windsurf\"),\n\t\t\t\tType.Literal(\"cursor\"),\n\t\t\t\tType.Literal(\"none\"),\n\t\t\t]),\n\t\t),\n\t\tinstructions: Type.Optional(Type.String()),\n\t\texperimental_instructions_file: Type.Optional(Type.String()),\n\t\tpackages: Type.Optional(Type.Array(PackageSpecSchema)),\n\t\tprojects: Type.Optional(\n\t\t\tType.Record(\n\t\t\t\tType.String(),\n\t\t\t\tType.Object(\n\t\t\t\t\t{\n\t\t\t\t\t\ttrust_level: Type.Optional(\n\t\t\t\t\t\t\tType.Union([Type.Literal(\"trusted\"), Type.Literal(\"untrusted\")]),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{ additionalProperties: true },\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst validateConfig = compileTypeboxSchema(ComposerConfigSchema);\n\n// ─────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────\n\nexport const DEFAULT_CONFIG: ComposerConfig = {\n\tmodel: \"claude-sonnet-4-20250514\",\n\tmodel_provider: \"anthropic\",\n\tapproval_policy: \"untrusted\",\n\tsandbox_mode: \"workspace-write\",\n\tmodel_reasoning_effort: \"medium\",\n\tfeatures: {\n\t\tview_image_tool: true,\n\t},\n\thistory: {\n\t\tpersistence: \"save-all\",\n\t},\n\tretry: {\n\t\tenabled: true,\n\t\tmax_retries: 3,\n\t\tbase_delay_ms: 2000,\n\t},\n\ttui: {\n\t\tnotifications: true,\n\t\tanimations: true,\n\t},\n\tfile_opener: \"vscode\",\n\tproject_doc_max_bytes: 32 * 1024,\n\tproject_doc_fallback_filenames: [\"CLAUDE.md\"],\n};\n\nexport function resolveProjectDocCandidateFilenames(\n\tconfig?: ComposerConfig,\n): string[] {\n\tconst fallback =\n\t\tconfig?.project_doc_fallback_filenames ??\n\t\tDEFAULT_CONFIG.project_doc_fallback_filenames ??\n\t\t[];\n\tconst merged = [...PATHS.AGENT_CONTEXT_FILES, ...fallback];\n\treturn Array.from(new Set(merged));\n}\n\nexport type PromptProjectDocSourceKind = \"global\" | \"project\";\n\nexport type PromptProjectDocDiagnosticSeverity = \"info\" | \"warning\";\n\nexport interface PromptProjectDocManifestEntry {\n\tpath: string;\n\tsourceKind: PromptProjectDocSourceKind;\n\tscopeDir: string;\n\tcandidateName: string;\n\tbytesRead: number;\n\ttruncated: boolean;\n\tcontentHash: string;\n\tprecedenceIndex: number;\n\tcontent: string;\n\toriginalSize?: number;\n\tmaxBytes?: number;\n}\n\nexport interface PromptProjectDocDiagnostic {\n\tcode:\n\t\t| \"budget_exhausted\"\n\t\t| \"duplicate_skipped\"\n\t\t| \"multiple_instruction_layers\"\n\t\t| \"read_failed\"\n\t\t| \"truncated\";\n\tseverity: PromptProjectDocDiagnosticSeverity;\n\tmessage: string;\n\tpath?: string;\n\tscopeDir?: string;\n}\n\nexport interface PromptProjectDocManifest {\n\tcwd: string;\n\tcandidates: string[];\n\tmaxBytes?: number;\n\tbytesRead: number;\n\tentries: PromptProjectDocManifestEntry[];\n\tdiagnostics: PromptProjectDocDiagnostic[];\n}\n\nfunction truncateUtf8ToValidBytes(buffer: Buffer, bytesRead: number): number {\n\tlet end = bytesRead;\n\tif (end === 0) {\n\t\treturn 0;\n\t}\n\n\tlet start = end - 1;\n\twhile (start >= 0 && (buffer[start]! & 0b1100_0000) === 0b1000_0000) {\n\t\tstart -= 1;\n\t}\n\n\tif (start < 0) {\n\t\treturn 0;\n\t}\n\n\tconst lead = buffer[start]!;\n\tlet expected = 1;\n\tif ((lead & 0b1000_0000) === 0) {\n\t\texpected = 1;\n\t} else if ((lead & 0b1110_0000) === 0b1100_0000) {\n\t\texpected = 2;\n\t} else if ((lead & 0b1111_0000) === 0b1110_0000) {\n\t\texpected = 3;\n\t} else if ((lead & 0b1111_1000) === 0b1111_0000) {\n\t\texpected = 4;\n\t} else {\n\t\tend = start;\n\t}\n\n\tif (start + expected > end) {\n\t\tend = start;\n\t}\n\n\treturn Math.max(0, end);\n}\n\nfunction hashPromptProjectDocContent(content: string): string {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nfunction readProjectDocContent(\n\tfilePath: string,\n\tbudget?: number,\n): {\n\tcontent: string;\n\tbytesRead: number;\n\ttruncated: boolean;\n\toriginalSize?: number;\n\tmaxBytes?: number;\n} {\n\tconst stats = statSync(filePath);\n\tif (budget !== undefined && budget > 0 && stats.size > budget) {\n\t\tconst fd = openSync(filePath, \"r\");\n\t\ttry {\n\t\t\tconst buffer = Buffer.alloc(budget);\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, budget, 0);\n\t\t\tconst validBytes = truncateUtf8ToValidBytes(buffer, bytesRead);\n\t\t\treturn {\n\t\t\t\tcontent: buffer.slice(0, validBytes).toString(\"utf-8\"),\n\t\t\t\tbytesRead: validBytes,\n\t\t\t\ttruncated: true,\n\t\t\t\toriginalSize: stats.size,\n\t\t\t\tmaxBytes: budget,\n\t\t\t};\n\t\t} finally {\n\t\t\tcloseSync(fd);\n\t\t}\n\t}\n\n\tconst content = readFileSync(filePath, \"utf-8\");\n\treturn {\n\t\tcontent,\n\t\tbytesRead: Buffer.byteLength(content),\n\t\ttruncated: false,\n\t\toriginalSize: stats.size,\n\t};\n}\n\nfunction loadFirstProjectDocInDir(\n\tdir: string,\n\tcandidates: string[],\n\tsourceKind: PromptProjectDocSourceKind,\n\tremainingBytes?: number,\n\tdiagnostics: PromptProjectDocDiagnostic[] = [],\n): Omit<PromptProjectDocManifestEntry, \"precedenceIndex\"> | null {\n\tif (remainingBytes !== undefined && remainingBytes <= 0) {\n\t\treturn null;\n\t}\n\tfor (const filename of candidates) {\n\t\tconst filePath = join(dir, filename);\n\t\tif (existsSync(filePath)) {\n\t\t\tconst resolvedPath = resolve(filePath);\n\t\t\tlet read: ReturnType<typeof readProjectDocContent>;\n\t\t\ttry {\n\t\t\t\tread = readProjectDocContent(resolvedPath, remainingBytes);\n\t\t\t} catch (error) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"read_failed\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tmessage: `Could not read instruction file ${resolvedPath}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\tpath: resolvedPath,\n\t\t\t\t\tscopeDir: resolve(dir),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst note = read.truncated\n\t\t\t\t? `\\n\\n[Truncated to ${read.bytesRead} bytes from ${read.originalSize} bytes.]`\n\t\t\t\t: \"\";\n\t\t\tconst content = `${read.content}${note}`;\n\t\t\treturn {\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tsourceKind,\n\t\t\t\tscopeDir: resolve(dir),\n\t\t\t\tcandidateName: filename,\n\t\t\t\tbytesRead: read.bytesRead,\n\t\t\t\ttruncated: read.truncated,\n\t\t\t\tcontentHash: hashPromptProjectDocContent(read.content),\n\t\t\t\tcontent,\n\t\t\t\toriginalSize: read.originalSize,\n\t\t\t\tmaxBytes: read.maxBytes,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function resolveProjectDocGlobalDirectories(): string[] {\n\treturn Array.from(\n\t\tnew Set([resolve(getAgentDir()), resolve(getHomeDir(), \".config\")]),\n\t);\n}\n\nfunction resolveProjectDocAncestorDirectories(cwd: string): string[] {\n\tconst directories: string[] = [];\n\tlet currentDir = resolve(cwd);\n\tconst root = resolve(\"/\");\n\n\twhile (true) {\n\t\tdirectories.push(currentDir);\n\t\tif (currentDir === root) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst parentDir = resolve(currentDir, \"..\");\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\tdirectories.reverse();\n\treturn directories;\n}\n\nexport function loadPromptProjectDocManifest(\n\tcwdOverride?: string,\n\tconfig?: ComposerConfig,\n): PromptProjectDocManifest {\n\tconst cwd = resolve(cwdOverride ?? process.cwd());\n\tconst resolvedConfig = config ?? loadConfig(cwd);\n\tconst candidates = resolveProjectDocCandidateFilenames(resolvedConfig);\n\tconst maxBytesRaw = resolvedConfig.project_doc_max_bytes;\n\tconst maxBytes =\n\t\ttypeof maxBytesRaw === \"number\"\n\t\t\t? Math.max(0, Math.floor(maxBytesRaw))\n\t\t\t: undefined;\n\tlet remainingBytes = maxBytes;\n\tconst entries: PromptProjectDocManifestEntry[] = [];\n\tconst diagnostics: PromptProjectDocDiagnostic[] = [];\n\tconst loadedPaths = new Set<string>();\n\n\tconst pushEntry = (\n\t\tentry: Omit<PromptProjectDocManifestEntry, \"precedenceIndex\"> | null,\n\t): void => {\n\t\tif (!entry) {\n\t\t\treturn;\n\t\t}\n\t\tconst resolvedPath = resolve(entry.path);\n\t\tif (loadedPaths.has(resolvedPath)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"duplicate_skipped\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Skipped duplicate instruction file already loaded from ${resolvedPath}.`,\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tscopeDir: entry.scopeDir,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tloadedPaths.add(resolvedPath);\n\t\tentries.push({\n\t\t\t...entry,\n\t\t\tpath: resolvedPath,\n\t\t\tprecedenceIndex: entries.length,\n\t\t});\n\t\tif (entry.truncated) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"truncated\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Loaded only ${entry.bytesRead} of ${entry.originalSize ?? \"unknown\"} bytes from ${resolvedPath}.`,\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tscopeDir: entry.scopeDir,\n\t\t\t});\n\t\t}\n\t\tif (remainingBytes !== undefined) {\n\t\t\tremainingBytes = Math.max(0, remainingBytes - entry.bytesRead);\n\t\t}\n\t};\n\n\tconst scanDir = (\n\t\tdir: string,\n\t\tsourceKind: PromptProjectDocSourceKind,\n\t): boolean => {\n\t\tif (remainingBytes === 0) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"budget_exhausted\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Skipped instruction lookup under ${resolve(dir)} because project_doc_max_bytes was exhausted.`,\n\t\t\t\tscopeDir: resolve(dir),\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t\tpushEntry(\n\t\t\tloadFirstProjectDocInDir(\n\t\t\t\tdir,\n\t\t\t\tcandidates,\n\t\t\t\tsourceKind,\n\t\t\t\tremainingBytes,\n\t\t\t\tdiagnostics,\n\t\t\t),\n\t\t);\n\t\treturn true;\n\t};\n\n\tfor (const globalContextDir of resolveProjectDocGlobalDirectories()) {\n\t\tif (!scanDir(globalContextDir, \"global\")) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const dir of resolveProjectDocAncestorDirectories(cwd)) {\n\t\tif (!scanDir(dir, \"project\")) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst layerCounts = new Map<string, number>();\n\tfor (const entry of entries) {\n\t\tlayerCounts.set(\n\t\t\tentry.candidateName,\n\t\t\t(layerCounts.get(entry.candidateName) ?? 0) + 1,\n\t\t);\n\t}\n\tfor (const [candidateName, count] of layerCounts) {\n\t\tif (count > 1) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"multiple_instruction_layers\",\n\t\t\t\tseverity: \"info\",\n\t\t\t\tmessage: `${count} ${candidateName} instruction layers were loaded; later project scopes have higher precedence in the prompt.`,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcwd,\n\t\tcandidates,\n\t\tmaxBytes,\n\t\tbytesRead: entries.reduce((total, entry) => total + entry.bytesRead, 0),\n\t\tentries,\n\t\tdiagnostics,\n\t};\n}\n\nexport function resolvePromptLoadedProjectDocPaths(\n\tcwdOverride?: string,\n\tconfig?: ComposerConfig,\n): string[] {\n\treturn loadPromptProjectDocManifest(cwdOverride, config).entries.map(\n\t\t(entry) => entry.path,\n\t);\n}\n\nexport function resolveLoadedAppendSystemPromptPath(\n\tcwdOverride?: string,\n): string | null {\n\tconst cwd = cwdOverride ?? process.cwd();\n\tconst projectPath = resolve(join(cwd, \".maestro\", \"APPEND_SYSTEM.md\"));\n\tif (existsSync(projectPath)) {\n\t\treturn projectPath;\n\t}\n\n\tconst globalPath = resolve(join(getAgentDir(), \"APPEND_SYSTEM.md\"));\n\treturn existsSync(globalPath) ? globalPath : null;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Configuration Loading\n// ─────────────────────────────────────────────────────────────\n\nlet cachedConfig: ComposerConfig | null = null;\nlet cachedWorkspaceDir: string | null = null;\nlet cachedProfileName: string | null = null;\n\n/**\n * Deep merge two objects, with source values overwriting target values.\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n\tconst result = { ...target } as Record<string, unknown>;\n\n\tfor (const key of Object.keys(source)) {\n\t\tconst sourceValue = (source as Record<string, unknown>)[key];\n\t\tconst targetValue = result[key];\n\n\t\tif (\n\t\t\tsourceValue !== undefined &&\n\t\t\ttypeof sourceValue === \"object\" &&\n\t\t\tsourceValue !== null &&\n\t\t\t!Array.isArray(sourceValue) &&\n\t\t\ttypeof targetValue === \"object\" &&\n\t\t\ttargetValue !== null &&\n\t\t\t!Array.isArray(targetValue)\n\t\t) {\n\t\t\tresult[key] = deepMerge(\n\t\t\t\ttargetValue as Record<string, unknown>,\n\t\t\t\tsourceValue as Partial<Record<string, unknown>>,\n\t\t\t);\n\t\t} else if (sourceValue !== undefined) {\n\t\t\tresult[key] = sourceValue;\n\t\t}\n\t}\n\n\treturn result as T;\n}\n\n/**\n * Parse a TOML configuration file.\n */\nfunction parseConfigFile(path: string): ComposerConfig | null {\n\tif (!existsSync(path)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst parsed = parseTOML(content);\n\t\tif (!validateConfig(parsed)) {\n\t\t\tconst message =\n\t\t\t\tvalidateConfig.errors\n\t\t\t\t\t?.map(\n\t\t\t\t\t\t(err) => `${err.instancePath || \"/\"} ${err.message ?? \"invalid\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"; \") ?? \"Invalid config\";\n\t\t\tlogger.warn(\"Invalid config file\", { path, error: message });\n\t\t\treturn null;\n\t\t}\n\t\tlogger.debug(\"Parsed config file\", { path });\n\t\treturn parsed as ComposerConfig;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to parse config file\", {\n\t\t\tpath,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn null;\n\t}\n}\n\nfunction extractConfiguredPackageSpecs(\n\tconfig: ComposerConfig | null,\n\tconfigPath: string,\n\tscope: ConfiguredPackageSpec[\"scope\"],\n): ConfiguredPackageSpec[] {\n\tif (!config?.packages || config.packages.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst configDir = dirname(configPath);\n\treturn config.packages.map((spec) => ({\n\t\tspec,\n\t\tcwd: configDir,\n\t\tscope,\n\t\tconfigPath,\n\t}));\n}\n\nfunction getUserConfigPath(): string {\n\treturn join(PATHS.MAESTRO_HOME, \"config.toml\");\n}\n\nexport function getWritablePackageConfigPath(\n\tscope: WritablePackageScope,\n\tworkspaceDir = process.cwd(),\n): string {\n\tswitch (scope) {\n\t\tcase \"user\":\n\t\t\treturn getUserConfigPath();\n\t\tcase \"project\":\n\t\t\treturn join(workspaceDir, \".maestro\", \"config.toml\");\n\t\tcase \"local\":\n\t\t\treturn join(workspaceDir, \".maestro\", \"config.local.toml\");\n\t}\n}\n\nfunction readWritableComposerConfig(path: string): ComposerConfig {\n\tif (!existsSync(path)) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst parsed = parseTOML(content);\n\t\tif (!validateConfig(parsed)) {\n\t\t\tconst message =\n\t\t\t\tvalidateConfig.errors\n\t\t\t\t\t?.map(\n\t\t\t\t\t\t(err) => `${err.instancePath || \"/\"} ${err.message ?? \"invalid\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"; \") ?? \"Invalid config\";\n\t\t\tthrow new Error(`Invalid config at ${path}: ${message}`);\n\t\t}\n\t\treturn parsed as ComposerConfig;\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new Error(`Failed to parse config at ${path}: ${String(error)}`);\n\t}\n}\n\nfunction writeComposerConfig(path: string, config: ComposerConfig): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\tconst rendered = stringifyTOML(config as Record<string, unknown>).trim();\n\twriteFileSync(path, rendered ? `${rendered}\\n` : \"\", \"utf-8\");\n\tclearConfigCache();\n}\n\nfunction resolvePackageSpecIdentity(spec: PackageSpec, cwd: string): string {\n\tconst [sourceSpec] = parsePackageSpec(spec, cwd);\n\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n}\n\nfunction tryResolvePackageSourceIdentity(\n\tsourceSpec: string,\n\tcwd: string,\n): string | null {\n\ttry {\n\t\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction normalizeRelativeLocalPackagePath(\n\tconfigDir: string,\n\tabsolutePath: string,\n): string {\n\tconst relativePath = relative(configDir, absolutePath);\n\tif (!relativePath || relativePath === \".\") {\n\t\treturn \"./\";\n\t}\n\tif (relativePath.startsWith(\".\") || relativePath.startsWith(\"/\")) {\n\t\treturn relativePath;\n\t}\n\treturn `./${relativePath}`;\n}\n\nfunction normalizePackageSpecForStorage(\n\tspec: PackageSpec,\n\tconfigPath: string,\n\tinputCwd: string,\n\tscope: WritablePackageScope,\n): PackageSpec {\n\tif (typeof spec === \"string\") {\n\t\treturn normalizePackageSourceForStorage(spec, configPath, inputCwd, scope);\n\t}\n\n\treturn {\n\t\t...spec,\n\t\tsource: normalizePackageSourceForStorage(\n\t\t\tspec.source,\n\t\t\tconfigPath,\n\t\t\tinputCwd,\n\t\t\tscope,\n\t\t),\n\t};\n}\n\nfunction normalizePackageSourceForStorage(\n\tsourceSpec: string,\n\tconfigPath: string,\n\tinputCwd: string,\n\tscope: WritablePackageScope,\n): string {\n\tconst source = parsePackageSource(sourceSpec, inputCwd);\n\tif (source.type !== \"local\") {\n\t\treturn formatPackageSource(source);\n\t}\n\n\tif (scope === \"user\") {\n\t\treturn source.path;\n\t}\n\n\treturn normalizeRelativeLocalPackagePath(dirname(configPath), source.path);\n}\n\nfunction doesConfiguredPackageMatch(\n\tspec: PackageSpec,\n\tconfigPath: string,\n\trequestedSpec: string,\n\trequestedCwd: string,\n): boolean {\n\tconst configDir = dirname(configPath);\n\tconst [rawSourceSpec] = parsePackageSpec(spec, configDir);\n\tif (rawSourceSpec === requestedSpec) {\n\t\treturn true;\n\t}\n\n\tconst requestedIdentity = tryResolvePackageSourceIdentity(\n\t\trequestedSpec,\n\t\trequestedCwd,\n\t);\n\tif (!requestedIdentity) {\n\t\treturn false;\n\t}\n\n\treturn resolvePackageSpecIdentity(spec, configDir) === requestedIdentity;\n}\n\nfunction resolvePackageRemovalScope(\n\tworkspaceDir: string,\n\trequestedSpec: string,\n): WritablePackageScope {\n\tconst matches = loadConfiguredPackageSpecs(workspaceDir).filter((entry) =>\n\t\tdoesConfiguredPackageMatch(\n\t\t\tentry.spec,\n\t\t\tentry.configPath,\n\t\t\trequestedSpec,\n\t\t\tworkspaceDir,\n\t\t),\n\t);\n\tfor (const scope of [\"local\", \"project\", \"user\"] as const) {\n\t\tif (matches.some((entry) => entry.scope === scope)) {\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tthrow new Error(`Configured package \"${requestedSpec}\" was not found.`);\n}\n\nexport function addConfiguredPackageSpecToConfig(\n\toptions: AddConfiguredPackageSpecOptions,\n): { path: string; scope: WritablePackageScope; spec: PackageSpec } {\n\tconst workspaceDir = options.workspaceDir ?? process.cwd();\n\tconst path = getWritablePackageConfigPath(options.scope, workspaceDir);\n\tconst config = readWritableComposerConfig(path);\n\tconst configDir = dirname(path);\n\tconst requestedIdentity = resolvePackageSpecIdentity(\n\t\toptions.spec,\n\t\tworkspaceDir,\n\t);\n\tconst existingPackages = [...(config.packages ?? [])];\n\tconst duplicate = existingPackages.find(\n\t\t(spec) => resolvePackageSpecIdentity(spec, configDir) === requestedIdentity,\n\t);\n\tif (duplicate) {\n\t\tconst [sourceSpec] = parsePackageSpec(duplicate, configDir);\n\t\tthrow new Error(`Package \"${sourceSpec}\" already exists in ${path}.`);\n\t}\n\n\tconst storedSpec = normalizePackageSpecForStorage(\n\t\toptions.spec,\n\t\tpath,\n\t\tworkspaceDir,\n\t\toptions.scope,\n\t);\n\tconst nextConfig = structuredClone(config);\n\tnextConfig.packages = [...existingPackages, storedSpec];\n\twriteComposerConfig(path, nextConfig);\n\treturn { path, scope: options.scope, spec: storedSpec };\n}\n\nexport function removeConfiguredPackageSpecFromConfig(\n\toptions: RemoveConfiguredPackageSpecOptions,\n): { path: string; scope: WritablePackageScope; removedCount: number } {\n\tconst workspaceDir = options.workspaceDir ?? process.cwd();\n\tconst scope =\n\t\toptions.scope ?? resolvePackageRemovalScope(workspaceDir, options.spec);\n\tconst path = getWritablePackageConfigPath(scope, workspaceDir);\n\tconst config = readWritableComposerConfig(path);\n\tconst existingPackages = [...(config.packages ?? [])];\n\tconst remainingPackages = existingPackages.filter(\n\t\t(spec) =>\n\t\t\t!doesConfiguredPackageMatch(spec, path, options.spec, workspaceDir),\n\t);\n\tconst removedCount = existingPackages.length - remainingPackages.length;\n\tif (removedCount === 0) {\n\t\tthrow new Error(\n\t\t\t`Configured package \"${options.spec}\" was not found in ${path}.`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(config);\n\tif (remainingPackages.length > 0) {\n\t\tnextConfig.packages = remainingPackages;\n\t} else {\n\t\tdelete nextConfig.packages;\n\t}\n\twriteComposerConfig(path, nextConfig);\n\treturn { path, scope, removedCount };\n}\n\n/**\n * Apply environment variable overrides.\n */\nfunction applyEnvOverrides(config: ComposerConfig): ComposerConfig {\n\tconst result = { ...config };\n\n\t// MAESTRO_MODEL\n\tif (process.env.MAESTRO_MODEL) {\n\t\tresult.model = process.env.MAESTRO_MODEL;\n\t}\n\n\t// MAESTRO_MODEL_PROVIDER\n\tif (process.env.MAESTRO_MODEL_PROVIDER) {\n\t\tresult.model_provider = process.env.MAESTRO_MODEL_PROVIDER;\n\t}\n\n\t// MAESTRO_APPROVAL_POLICY\n\tif (process.env.MAESTRO_APPROVAL_POLICY) {\n\t\tconst policy = process.env.MAESTRO_APPROVAL_POLICY as ApprovalPolicy;\n\t\tif ([\"untrusted\", \"on-failure\", \"on-request\", \"never\"].includes(policy)) {\n\t\t\tresult.approval_policy = policy;\n\t\t}\n\t}\n\n\t// MAESTRO_SANDBOX_MODE\n\tif (process.env.MAESTRO_SANDBOX_MODE) {\n\t\tconst mode = process.env.MAESTRO_SANDBOX_MODE as SandboxMode;\n\t\tif ([\"read-only\", \"workspace-write\", \"danger-full-access\"].includes(mode)) {\n\t\t\tresult.sandbox_mode = mode;\n\t\t}\n\t}\n\n\t// MAESTRO_PROFILE\n\tif (process.env.MAESTRO_PROFILE) {\n\t\tresult.profile = process.env.MAESTRO_PROFILE;\n\t}\n\n\t// MAESTRO_HISTORY_PERSISTENCE\n\tif (process.env.MAESTRO_HISTORY_PERSISTENCE) {\n\t\tconst persistence =\n\t\t\tprocess.env.MAESTRO_HISTORY_PERSISTENCE.trim().toLowerCase();\n\t\tif (\n\t\t\tpersistence === \"save-all\" ||\n\t\t\tpersistence === \"none\" ||\n\t\t\tpersistence === \"save\"\n\t\t) {\n\t\t\tresult.history = {\n\t\t\t\t...(result.history ?? {}),\n\t\t\t\tpersistence: persistence === \"save\" ? \"save-all\" : persistence,\n\t\t\t};\n\t\t}\n\t}\n\n\t// MAESTRO_HISTORY_MAX_BYTES\n\tif (process.env.MAESTRO_HISTORY_MAX_BYTES) {\n\t\tconst parsed = Number.parseInt(process.env.MAESTRO_HISTORY_MAX_BYTES, 10);\n\t\tif (Number.isFinite(parsed) && parsed >= 0) {\n\t\t\tresult.history = {\n\t\t\t\t...(result.history ?? {}),\n\t\t\t\tmax_bytes: parsed,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Apply profile settings to configuration.\n */\nfunction applyProfile(\n\tconfig: ComposerConfig,\n\tprofileName: string,\n): ComposerConfig {\n\tif (!config.profiles || !config.profiles[profileName]) {\n\t\tlogger.warn(\"Profile not found\", { profile: profileName });\n\t\treturn config;\n\t}\n\n\tconst profile = config.profiles[profileName];\n\tconst result = deepMerge(config, profile as Partial<ComposerConfig>);\n\n\tlogger.debug(\"Applied profile\", { profile: profileName });\n\treturn result;\n}\n\n/**\n * Load configuration from files and environment.\n *\n * @param workspaceDir - The current workspace directory\n * @param profileName - Optional profile name to activate\n * @param cliOverrides - Optional CLI flag overrides\n */\nexport function loadConfig(\n\tworkspaceDir: string,\n\tprofileName?: string,\n\tcliOverrides?: Partial<ComposerConfig>,\n): ComposerConfig {\n\t// Check cache\n\tif (\n\t\tcachedConfig &&\n\t\tcachedWorkspaceDir === workspaceDir &&\n\t\tcachedProfileName === (profileName ?? null)\n\t) {\n\t\tif (!cliOverrides || Object.keys(cliOverrides).length === 0) {\n\t\t\treturn cachedConfig;\n\t\t}\n\t\treturn deepMerge(cachedConfig, cliOverrides);\n\t}\n\n\t// Start with defaults\n\tlet config = { ...DEFAULT_CONFIG };\n\n\t// Load global config\n\tconst globalPath = getUserConfigPath();\n\tconst globalConfig = parseConfigFile(globalPath);\n\tif (globalConfig) {\n\t\tconfig = deepMerge(config, globalConfig);\n\t}\n\n\t// Load project config (shared, committed to git)\n\tconst projectPath = join(workspaceDir, \".maestro\", \"config.toml\");\n\tconst projectConfig = parseConfigFile(projectPath);\n\tif (projectConfig) {\n\t\tconfig = deepMerge(config, projectConfig);\n\t}\n\n\t// Load local config (personal overrides, gitignored)\n\t// This follows Claude Code's pattern of settings.local.json\n\tconst localPath = join(workspaceDir, \".maestro\", \"config.local.toml\");\n\tconst localConfig = parseConfigFile(localPath);\n\tif (localConfig) {\n\t\tconfig = deepMerge(config, localConfig);\n\t\tlogger.debug(\"Applied local config overrides\", { path: localPath });\n\t}\n\n\t// Apply environment overrides\n\tconfig = applyEnvOverrides(config);\n\n\t// Determine active profile\n\tconst activeProfile = profileName ?? config.profile;\n\tif (activeProfile) {\n\t\tconfig = applyProfile(config, activeProfile);\n\t}\n\n\t// Apply CLI overrides (highest precedence)\n\tif (cliOverrides && Object.keys(cliOverrides).length > 0) {\n\t\tconfig = deepMerge(config, cliOverrides);\n\t}\n\n\t// Cache the result (without CLI overrides)\n\tcachedConfig = config;\n\tcachedWorkspaceDir = workspaceDir;\n\tcachedProfileName = profileName ?? null;\n\n\tlogger.info(\"Loaded configuration\", {\n\t\tglobal: globalConfig !== null,\n\t\tproject: projectConfig !== null,\n\t\tprofile: activeProfile,\n\t});\n\n\treturn config;\n}\n\nexport function loadConfiguredPackageSpecs(\n\tworkspaceDir: string,\n): ConfiguredPackageSpec[] {\n\tconst globalPath = getUserConfigPath();\n\tconst projectPath = join(workspaceDir, \".maestro\", \"config.toml\");\n\tconst localPath = join(workspaceDir, \".maestro\", \"config.local.toml\");\n\n\treturn [\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(globalPath),\n\t\t\tglobalPath,\n\t\t\t\"user\",\n\t\t),\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(projectPath),\n\t\t\tprojectPath,\n\t\t\t\"project\",\n\t\t),\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(localPath),\n\t\t\tlocalPath,\n\t\t\t\"local\",\n\t\t),\n\t];\n}\n\n/**\n * Clear the configuration cache.\n */\nexport function clearConfigCache(): void {\n\tcachedConfig = null;\n\tcachedWorkspaceDir = null;\n\tcachedProfileName = null;\n}\n\n/**\n * Get a specific configuration value with type safety.\n */\nexport function getConfigValue<K extends keyof ComposerConfig>(\n\tconfig: ComposerConfig,\n\tkey: K,\n): ComposerConfig[K] {\n\treturn config[key];\n}\n\n/**\n * Get the list of available profiles.\n */\nexport function getAvailableProfiles(workspaceDir: string): string[] {\n\tconst config = loadConfig(workspaceDir);\n\tif (!config.profiles) {\n\t\treturn [];\n\t}\n\treturn Object.keys(config.profiles);\n}\n\n/**\n * Get a summary of the current configuration for display.\n */\nexport function getConfigSummary(workspaceDir: string): string {\n\tconst config = loadConfig(workspaceDir);\n\tconst lines: string[] = [];\n\n\tlines.push(\"Current Configuration\");\n\tlines.push(\"─\".repeat(40));\n\tlines.push(`Model: ${config.model ?? \"default\"}`);\n\tlines.push(`Provider: ${config.model_provider ?? \"anthropic\"}`);\n\tlines.push(`Approval Policy: ${config.approval_policy ?? \"untrusted\"}`);\n\tlines.push(`Sandbox Mode: ${config.sandbox_mode ?? \"workspace-write\"}`);\n\n\tif (config.profile) {\n\t\tlines.push(`Active Profile: ${config.profile}`);\n\t}\n\n\tconst profiles = getAvailableProfiles(workspaceDir);\n\tif (profiles.length > 0) {\n\t\tlines.push(`Available Profiles: ${profiles.join(\", \")}`);\n\t}\n\n\tconst packageCount = loadConfiguredPackageSpecs(workspaceDir).length;\n\tif (packageCount > 0) {\n\t\tlines.push(`Configured Packages: ${packageCount}`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Parse a CLI config override in the format \"key=value\".\n * Supports nested keys with dots (e.g., \"model_providers.openai.base_url\").\n */\nexport function parseCliOverride(\n\toverride: string,\n): { key: string; value: unknown } | null {\n\tconst eqIndex = override.indexOf(\"=\");\n\tif (eqIndex <= 0) {\n\t\treturn null;\n\t}\n\n\tconst key = override.slice(0, eqIndex).trim();\n\tlet valueStr = override.slice(eqIndex + 1).trim();\n\n\t// Try to parse as TOML value\n\ttry {\n\t\t// Wrap in a table to parse\n\t\tconst tomlStr = `value = ${valueStr}`;\n\t\tconst parsed = parseTOML(tomlStr) as { value: unknown };\n\t\treturn { key, value: parsed.value };\n\t} catch {\n\t\t// If parsing fails, treat as string\n\t\t// Remove surrounding quotes if present\n\t\tif (\n\t\t\t(valueStr.startsWith('\"') && valueStr.endsWith('\"')) ||\n\t\t\t(valueStr.startsWith(\"'\") && valueStr.endsWith(\"'\"))\n\t\t) {\n\t\t\tvalueStr = valueStr.slice(1, -1);\n\t\t}\n\t\treturn { key, value: valueStr };\n\t}\n}\n\n/**\n * Apply a parsed CLI override to a configuration object.\n */\nexport function applyCliOverride(\n\tconfig: ComposerConfig,\n\tkey: string,\n\tvalue: unknown,\n): ComposerConfig {\n\tconst keys = key.split(\".\");\n\tconst result = { ...config };\n\n\t// Navigate to the nested key\n\tlet current: Record<string, unknown> = result as Record<string, unknown>;\n\tfor (let i = 0; i < keys.length - 1; i++) {\n\t\tconst k = keys[i]!;\n\t\tif (current[k] === undefined || typeof current[k] !== \"object\") {\n\t\t\tcurrent[k] = {};\n\t\t}\n\t\tcurrent = current[k] as Record<string, unknown>;\n\t}\n\n\t// Set the value\n\tconst finalKey = keys[keys.length - 1];\n\tif (finalKey !== undefined) {\n\t\tcurrent[finalKey] = value;\n\t}\n\n\treturn result;\n}\n"]}
1
+ {"version":3,"file":"toml-config.js","sourceRoot":"","sources":["../../src/config/toml-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TOML-based Configuration System with Profiles\n *\n * Ported from OpenAI Codex (MIT License) config pattern.\n * Supports:\n * - ~/.maestro/config.toml (global config)\n * - .maestro/config.toml (project config - shared, committed to git)\n * - .maestro/config.local.toml (local overrides - gitignored)\n * - Named profiles for different configurations\n * - Environment variable overrides\n * - CLI flag overrides\n *\n * Configuration precedence (highest first):\n * 1. CLI flags (--model, --config key=value)\n * 2. Environment variables (MAESTRO_*)\n * 3. Active profile settings\n * 4. Local config.local.toml (personal overrides)\n * 5. Project config.toml (shared)\n * 6. Global config.toml\n * 7. Built-in defaults\n *\n * The config.local.toml file follows Claude Code's settings.local.json pattern,\n * allowing users to have personal settings that don't get committed to git.\n */\n\nimport { createHash } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\treadSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { Type } from \"@sinclair/typebox\";\nimport { parse as parseTOML, stringify as stringifyTOML } from \"smol-toml\";\nimport { parsePackageSpec } from \"../packages/loader.js\";\nimport {\n\tformatPackageSource,\n\tparsePackageSource,\n} from \"../packages/sources.js\";\nimport type { PackageSpec } from \"../packages/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport { compileTypeboxSchema } from \"../utils/typebox-ajv.js\";\nimport { PATHS, getAgentDir } from \"./constants.js\";\n\nconst logger = createLogger(\"config:toml\");\n\n// ─────────────────────────────────────────────────────────────\n// Configuration Types\n// ─────────────────────────────────────────────────────────────\n\nexport type ApprovalPolicy =\n\t| \"untrusted\"\n\t| \"on-failure\"\n\t| \"on-request\"\n\t| \"never\";\nexport type SandboxMode =\n\t| \"read-only\"\n\t| \"workspace-write\"\n\t| \"danger-full-access\";\nexport type ReasoningEffort = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport interface ModelProviderConfig {\n\tname: string;\n\tbase_url: string;\n\tenv_key?: string;\n\twire_api?: \"chat\" | \"responses\";\n\tquery_params?: Record<string, string>;\n\thttp_headers?: Record<string, string>;\n\tenv_http_headers?: Record<string, string>;\n\trequest_max_retries?: number;\n\tstream_max_retries?: number;\n\tstream_idle_timeout_ms?: number;\n}\n\nexport interface McpServerConfig {\n\tcommand?: string;\n\targs?: string[];\n\tenv?: Record<string, string>;\n\tcwd?: string;\n\turl?: string;\n\tbearer_token_env_var?: string;\n\thttp_headers?: Record<string, string>;\n\tenv_http_headers?: Record<string, string>;\n\tenabled?: boolean;\n\tstartup_timeout_sec?: number;\n\ttool_timeout_sec?: number;\n\tenabled_tools?: string[];\n\tdisabled_tools?: string[];\n}\n\nexport interface FeaturesConfig {\n\tweb_search_request?: boolean;\n\tview_image_tool?: boolean;\n\tghost_commit?: boolean;\n\t[key: string]: boolean | undefined;\n}\n\nexport interface ToolsConfig {\n\tweb_search?: boolean;\n\tview_image?: boolean;\n}\n\nexport interface OtelConfig {\n\tenvironment?: string;\n\texporter?:\n\t\t| \"none\"\n\t\t| { \"otlp-http\": OtlpHttpConfig }\n\t\t| { \"otlp-grpc\": OtlpGrpcConfig };\n\tlog_user_prompt?: boolean;\n}\n\nexport interface OtlpHttpConfig {\n\tendpoint: string;\n\tprotocol?: \"binary\" | \"json\";\n\theaders?: Record<string, string>;\n}\n\nexport interface OtlpGrpcConfig {\n\tendpoint: string;\n\theaders?: Record<string, string>;\n}\n\nexport interface RetryConfig {\n\tenabled?: boolean; // default: true\n\tmax_retries?: number; // default: 3\n\tbase_delay_ms?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n}\n\nexport interface HistoryConfig {\n\tpersistence?: \"save-all\" | \"none\";\n\tmax_bytes?: number;\n}\n\nexport interface TuiConfig {\n\tnotifications?: boolean | string[];\n\tanimations?: boolean;\n}\n\nexport interface ShellEnvironmentPolicy {\n\tinherit?: \"all\" | \"core\" | \"none\";\n\tignore_default_excludes?: boolean;\n\texclude?: string[];\n\tset?: Record<string, string>;\n\tinclude_only?: string[];\n}\n\nexport interface SandboxWorkspaceWriteConfig {\n\twritable_roots?: string[];\n\tnetwork_access?: boolean;\n\texclude_tmpdir_env_var?: boolean;\n\texclude_slash_tmp?: boolean;\n}\n\nexport interface ProfileConfig {\n\tmodel?: string;\n\tmodel_provider?: string;\n\tapproval_policy?: ApprovalPolicy;\n\tsandbox_mode?: SandboxMode;\n\tmodel_reasoning_effort?: ReasoningEffort;\n\tmodel_reasoning_summary?: \"auto\" | \"concise\" | \"detailed\" | \"none\";\n\tmodel_verbosity?: \"low\" | \"medium\" | \"high\";\n\t// Allow any other config keys\n\t[key: string]: unknown;\n}\n\nexport interface ComposerConfig {\n\t// Model settings\n\tmodel?: string;\n\tmodel_provider?: string;\n\tmodel_context_window?: number;\n\tmodel_reasoning_effort?: ReasoningEffort;\n\tmodel_reasoning_summary?: \"auto\" | \"concise\" | \"detailed\" | \"none\";\n\tmodel_verbosity?: \"low\" | \"medium\" | \"high\";\n\tmodel_supports_reasoning_summaries?: boolean;\n\n\t// Execution environment\n\tapproval_policy?: ApprovalPolicy;\n\tsandbox_mode?: SandboxMode;\n\tsandbox_workspace_write?: SandboxWorkspaceWriteConfig;\n\tshell_environment_policy?: ShellEnvironmentPolicy;\n\n\t// Providers\n\tmodel_providers?: Record<string, ModelProviderConfig>;\n\n\t// MCP\n\tmcp_servers?: Record<string, McpServerConfig>;\n\n\t// Features\n\tfeatures?: FeaturesConfig;\n\ttools?: ToolsConfig;\n\n\t// Observability\n\totel?: OtelConfig;\n\tnotify?: string[];\n\thide_agent_reasoning?: boolean;\n\tshow_raw_agent_reasoning?: boolean;\n\n\t// History\n\thistory?: HistoryConfig;\n\n\t// Retry on transient errors\n\tretry?: RetryConfig;\n\n\t// TUI\n\ttui?: TuiConfig;\n\n\t// Project docs\n\tproject_doc_max_bytes?: number;\n\tproject_doc_fallback_filenames?: string[];\n\n\t// Profiles\n\tprofile?: string;\n\tprofiles?: Record<string, ProfileConfig>;\n\n\t// File opener\n\tfile_opener?: \"vscode\" | \"vscode-insiders\" | \"windsurf\" | \"cursor\" | \"none\";\n\n\t// Instructions\n\tinstructions?: string;\n\texperimental_instructions_file?: string;\n\n\t// Packages\n\tpackages?: PackageSpec[];\n\n\t// Trust\n\tprojects?: Record<string, { trust_level?: \"trusted\" | \"untrusted\" }>;\n}\n\nexport interface ConfiguredPackageSpec {\n\tspec: PackageSpec;\n\tcwd: string;\n\tscope: \"user\" | \"project\" | \"local\";\n\tconfigPath: string;\n}\n\nexport type WritablePackageScope = ConfiguredPackageSpec[\"scope\"];\n\nexport interface AddConfiguredPackageSpecOptions {\n\tworkspaceDir?: string;\n\tscope: WritablePackageScope;\n\tspec: PackageSpec;\n}\n\nexport interface RemoveConfiguredPackageSpecOptions {\n\tworkspaceDir?: string;\n\tscope?: WritablePackageScope;\n\tspec: string;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Validation Schema (loose, allows extra keys)\n// ─────────────────────────────────────────────────────────────\n\nconst ApprovalPolicySchema = Type.Union([\n\tType.Literal(\"untrusted\"),\n\tType.Literal(\"on-failure\"),\n\tType.Literal(\"on-request\"),\n\tType.Literal(\"never\"),\n]);\n\nconst SandboxModeSchema = Type.Union([\n\tType.Literal(\"read-only\"),\n\tType.Literal(\"workspace-write\"),\n\tType.Literal(\"danger-full-access\"),\n]);\n\nconst ReasoningEffortSchema = Type.Union([\n\tType.Literal(\"minimal\"),\n\tType.Literal(\"low\"),\n\tType.Literal(\"medium\"),\n\tType.Literal(\"high\"),\n]);\n\nconst ModelReasoningSummarySchema = Type.Union([\n\tType.Literal(\"auto\"),\n\tType.Literal(\"concise\"),\n\tType.Literal(\"detailed\"),\n\tType.Literal(\"none\"),\n]);\n\nconst ModelVerbositySchema = Type.Union([\n\tType.Literal(\"low\"),\n\tType.Literal(\"medium\"),\n\tType.Literal(\"high\"),\n]);\n\nconst ModelProviderConfigSchema = Type.Object(\n\t{\n\t\tname: Type.Optional(Type.String()),\n\t\tbase_url: Type.Optional(Type.String()),\n\t\tenv_key: Type.Optional(Type.String()),\n\t\twire_api: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"chat\"), Type.Literal(\"responses\")]),\n\t\t),\n\t\tquery_params: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\thttp_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenv_http_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\trequest_max_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tstream_max_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tstream_idle_timeout_ms: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst McpServerConfigSchema = Type.Object(\n\t{\n\t\tcommand: Type.Optional(Type.String()),\n\t\targs: Type.Optional(Type.Array(Type.String())),\n\t\tenv: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tcwd: Type.Optional(Type.String()),\n\t\turl: Type.Optional(Type.String()),\n\t\tbearer_token_env_var: Type.Optional(Type.String()),\n\t\thttp_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenv_http_headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tenabled: Type.Optional(Type.Boolean()),\n\t\tstartup_timeout_sec: Type.Optional(Type.Number({ minimum: 0 })),\n\t\ttool_timeout_sec: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tenabled_tools: Type.Optional(Type.Array(Type.String())),\n\t\tdisabled_tools: Type.Optional(Type.Array(Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst FeaturesConfigSchema = Type.Object(\n\t{\n\t\tweb_search_request: Type.Optional(Type.Boolean()),\n\t\tview_image_tool: Type.Optional(Type.Boolean()),\n\t\tghost_commit: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: Type.Boolean() },\n);\n\nconst ToolsConfigSchema = Type.Object(\n\t{\n\t\tweb_search: Type.Optional(Type.Boolean()),\n\t\tview_image: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: Type.Boolean() },\n);\n\nconst OtlpHttpConfigSchema = Type.Object(\n\t{\n\t\tendpoint: Type.String(),\n\t\tprotocol: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"binary\"), Type.Literal(\"json\")]),\n\t\t),\n\t\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst OtlpGrpcConfigSchema = Type.Object(\n\t{\n\t\tendpoint: Type.String(),\n\t\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst OtelExporterSchema = Type.Union([\n\tType.Literal(\"none\"),\n\tType.Object(\n\t\t{ \"otlp-http\": OtlpHttpConfigSchema },\n\t\t{ additionalProperties: false },\n\t),\n\tType.Object(\n\t\t{ \"otlp-grpc\": OtlpGrpcConfigSchema },\n\t\t{ additionalProperties: false },\n\t),\n]);\n\nconst OtelConfigSchema = Type.Object(\n\t{\n\t\tenvironment: Type.Optional(Type.String()),\n\t\texporter: Type.Optional(OtelExporterSchema),\n\t\tlog_user_prompt: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst RetryConfigSchema = Type.Object(\n\t{\n\t\tenabled: Type.Optional(Type.Boolean()),\n\t\tmax_retries: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tbase_delay_ms: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst HistoryConfigSchema = Type.Object(\n\t{\n\t\tpersistence: Type.Optional(\n\t\t\tType.Union([Type.Literal(\"save-all\"), Type.Literal(\"none\")]),\n\t\t),\n\t\tmax_bytes: Type.Optional(Type.Number({ minimum: 0 })),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst TuiConfigSchema = Type.Object(\n\t{\n\t\tnotifications: Type.Optional(\n\t\t\tType.Union([Type.Boolean(), Type.Array(Type.String())]),\n\t\t),\n\t\tanimations: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst ShellEnvironmentPolicySchema = Type.Object(\n\t{\n\t\tinherit: Type.Optional(\n\t\t\tType.Union([\n\t\t\t\tType.Literal(\"all\"),\n\t\t\t\tType.Literal(\"core\"),\n\t\t\t\tType.Literal(\"none\"),\n\t\t\t]),\n\t\t),\n\t\tignore_default_excludes: Type.Optional(Type.Boolean()),\n\t\texclude: Type.Optional(Type.Array(Type.String())),\n\t\tset: Type.Optional(Type.Record(Type.String(), Type.String())),\n\t\tinclude_only: Type.Optional(Type.Array(Type.String())),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst SandboxWorkspaceWriteConfigSchema = Type.Object(\n\t{\n\t\twritable_roots: Type.Optional(Type.Array(Type.String())),\n\t\tnetwork_access: Type.Optional(Type.Boolean()),\n\t\texclude_tmpdir_env_var: Type.Optional(Type.Boolean()),\n\t\texclude_slash_tmp: Type.Optional(Type.Boolean()),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst ProfileConfigSchema = Type.Object(\n\t{\n\t\tmodel: Type.Optional(Type.String()),\n\t\tmodel_provider: Type.Optional(Type.String()),\n\t\tapproval_policy: Type.Optional(ApprovalPolicySchema),\n\t\tsandbox_mode: Type.Optional(SandboxModeSchema),\n\t\tmodel_reasoning_effort: Type.Optional(ReasoningEffortSchema),\n\t\tmodel_reasoning_summary: Type.Optional(ModelReasoningSummarySchema),\n\t\tmodel_verbosity: Type.Optional(ModelVerbositySchema),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst PackageSpecSchema = Type.Union([\n\tType.String(),\n\tType.Object(\n\t\t{\n\t\t\tsource: Type.String(),\n\t\t\textensions: Type.Optional(Type.Array(Type.String())),\n\t\t\tskills: Type.Optional(Type.Array(Type.String())),\n\t\t\tprompts: Type.Optional(Type.Array(Type.String())),\n\t\t\tthemes: Type.Optional(Type.Array(Type.String())),\n\t\t},\n\t\t{ additionalProperties: true },\n\t),\n]);\n\nconst ComposerConfigSchema = Type.Object(\n\t{\n\t\tmodel: Type.Optional(Type.String()),\n\t\tmodel_provider: Type.Optional(Type.String()),\n\t\tmodel_context_window: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tmodel_reasoning_effort: Type.Optional(ReasoningEffortSchema),\n\t\tmodel_reasoning_summary: Type.Optional(ModelReasoningSummarySchema),\n\t\tmodel_verbosity: Type.Optional(ModelVerbositySchema),\n\t\tmodel_supports_reasoning_summaries: Type.Optional(Type.Boolean()),\n\t\tapproval_policy: Type.Optional(ApprovalPolicySchema),\n\t\tsandbox_mode: Type.Optional(SandboxModeSchema),\n\t\tsandbox_workspace_write: Type.Optional(SandboxWorkspaceWriteConfigSchema),\n\t\tshell_environment_policy: Type.Optional(ShellEnvironmentPolicySchema),\n\t\tmodel_providers: Type.Optional(\n\t\t\tType.Record(Type.String(), ModelProviderConfigSchema),\n\t\t),\n\t\tmcp_servers: Type.Optional(\n\t\t\tType.Record(Type.String(), McpServerConfigSchema),\n\t\t),\n\t\tfeatures: Type.Optional(FeaturesConfigSchema),\n\t\ttools: Type.Optional(ToolsConfigSchema),\n\t\totel: Type.Optional(OtelConfigSchema),\n\t\tnotify: Type.Optional(Type.Array(Type.String())),\n\t\thide_agent_reasoning: Type.Optional(Type.Boolean()),\n\t\tshow_raw_agent_reasoning: Type.Optional(Type.Boolean()),\n\t\thistory: Type.Optional(HistoryConfigSchema),\n\t\tretry: Type.Optional(RetryConfigSchema),\n\t\ttui: Type.Optional(TuiConfigSchema),\n\t\tproject_doc_max_bytes: Type.Optional(Type.Number({ minimum: 0 })),\n\t\tproject_doc_fallback_filenames: Type.Optional(Type.Array(Type.String())),\n\t\tprofile: Type.Optional(Type.String()),\n\t\tprofiles: Type.Optional(Type.Record(Type.String(), ProfileConfigSchema)),\n\t\tfile_opener: Type.Optional(\n\t\t\tType.Union([\n\t\t\t\tType.Literal(\"vscode\"),\n\t\t\t\tType.Literal(\"vscode-insiders\"),\n\t\t\t\tType.Literal(\"windsurf\"),\n\t\t\t\tType.Literal(\"cursor\"),\n\t\t\t\tType.Literal(\"none\"),\n\t\t\t]),\n\t\t),\n\t\tinstructions: Type.Optional(Type.String()),\n\t\texperimental_instructions_file: Type.Optional(Type.String()),\n\t\tpackages: Type.Optional(Type.Array(PackageSpecSchema)),\n\t\tprojects: Type.Optional(\n\t\t\tType.Record(\n\t\t\t\tType.String(),\n\t\t\t\tType.Object(\n\t\t\t\t\t{\n\t\t\t\t\t\ttrust_level: Type.Optional(\n\t\t\t\t\t\t\tType.Union([Type.Literal(\"trusted\"), Type.Literal(\"untrusted\")]),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{ additionalProperties: true },\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t},\n\t{ additionalProperties: true },\n);\n\nconst validateConfig = compileTypeboxSchema(ComposerConfigSchema);\n\n// ─────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────\n\nexport const DEFAULT_CONFIG: ComposerConfig = {\n\tmodel: \"gpt-5.5\",\n\tmodel_provider: \"openai-codex\",\n\tapproval_policy: \"untrusted\",\n\tsandbox_mode: \"workspace-write\",\n\tmodel_reasoning_effort: \"medium\",\n\tfeatures: {\n\t\tview_image_tool: true,\n\t},\n\thistory: {\n\t\tpersistence: \"save-all\",\n\t},\n\tretry: {\n\t\tenabled: true,\n\t\tmax_retries: 3,\n\t\tbase_delay_ms: 2000,\n\t},\n\ttui: {\n\t\tnotifications: true,\n\t\tanimations: true,\n\t},\n\tfile_opener: \"vscode\",\n\tproject_doc_max_bytes: 32 * 1024,\n\tproject_doc_fallback_filenames: [\"CLAUDE.md\"],\n};\n\nexport function resolveProjectDocCandidateFilenames(\n\tconfig?: ComposerConfig,\n): string[] {\n\tconst fallback =\n\t\tconfig?.project_doc_fallback_filenames ??\n\t\tDEFAULT_CONFIG.project_doc_fallback_filenames ??\n\t\t[];\n\tconst merged = [...PATHS.AGENT_CONTEXT_FILES, ...fallback];\n\treturn Array.from(new Set(merged));\n}\n\nexport type PromptProjectDocSourceKind = \"global\" | \"project\";\n\nexport type PromptProjectDocDiagnosticSeverity = \"info\" | \"warning\";\n\nexport interface PromptProjectDocManifestEntry {\n\tpath: string;\n\tsourceKind: PromptProjectDocSourceKind;\n\tscopeDir: string;\n\tcandidateName: string;\n\tbytesRead: number;\n\ttruncated: boolean;\n\tcontentHash: string;\n\tprecedenceIndex: number;\n\tcontent: string;\n\toriginalSize?: number;\n\tmaxBytes?: number;\n}\n\nexport interface PromptProjectDocDiagnostic {\n\tcode:\n\t\t| \"budget_exhausted\"\n\t\t| \"duplicate_skipped\"\n\t\t| \"multiple_instruction_layers\"\n\t\t| \"read_failed\"\n\t\t| \"truncated\";\n\tseverity: PromptProjectDocDiagnosticSeverity;\n\tmessage: string;\n\tpath?: string;\n\tscopeDir?: string;\n}\n\nexport interface PromptProjectDocManifest {\n\tcwd: string;\n\tcandidates: string[];\n\tmaxBytes?: number;\n\tbytesRead: number;\n\tentries: PromptProjectDocManifestEntry[];\n\tdiagnostics: PromptProjectDocDiagnostic[];\n}\n\nfunction truncateUtf8ToValidBytes(buffer: Buffer, bytesRead: number): number {\n\tlet end = bytesRead;\n\tif (end === 0) {\n\t\treturn 0;\n\t}\n\n\tlet start = end - 1;\n\twhile (start >= 0 && (buffer[start]! & 0b1100_0000) === 0b1000_0000) {\n\t\tstart -= 1;\n\t}\n\n\tif (start < 0) {\n\t\treturn 0;\n\t}\n\n\tconst lead = buffer[start]!;\n\tlet expected = 1;\n\tif ((lead & 0b1000_0000) === 0) {\n\t\texpected = 1;\n\t} else if ((lead & 0b1110_0000) === 0b1100_0000) {\n\t\texpected = 2;\n\t} else if ((lead & 0b1111_0000) === 0b1110_0000) {\n\t\texpected = 3;\n\t} else if ((lead & 0b1111_1000) === 0b1111_0000) {\n\t\texpected = 4;\n\t} else {\n\t\tend = start;\n\t}\n\n\tif (start + expected > end) {\n\t\tend = start;\n\t}\n\n\treturn Math.max(0, end);\n}\n\nfunction hashPromptProjectDocContent(content: string): string {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nfunction readProjectDocContent(\n\tfilePath: string,\n\tbudget?: number,\n): {\n\tcontent: string;\n\tbytesRead: number;\n\ttruncated: boolean;\n\toriginalSize?: number;\n\tmaxBytes?: number;\n} {\n\tconst stats = statSync(filePath);\n\tif (budget !== undefined && budget > 0 && stats.size > budget) {\n\t\tconst fd = openSync(filePath, \"r\");\n\t\ttry {\n\t\t\tconst buffer = Buffer.alloc(budget);\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, budget, 0);\n\t\t\tconst validBytes = truncateUtf8ToValidBytes(buffer, bytesRead);\n\t\t\treturn {\n\t\t\t\tcontent: buffer.slice(0, validBytes).toString(\"utf-8\"),\n\t\t\t\tbytesRead: validBytes,\n\t\t\t\ttruncated: true,\n\t\t\t\toriginalSize: stats.size,\n\t\t\t\tmaxBytes: budget,\n\t\t\t};\n\t\t} finally {\n\t\t\tcloseSync(fd);\n\t\t}\n\t}\n\n\tconst content = readFileSync(filePath, \"utf-8\");\n\treturn {\n\t\tcontent,\n\t\tbytesRead: Buffer.byteLength(content),\n\t\ttruncated: false,\n\t\toriginalSize: stats.size,\n\t};\n}\n\nfunction loadFirstProjectDocInDir(\n\tdir: string,\n\tcandidates: string[],\n\tsourceKind: PromptProjectDocSourceKind,\n\tremainingBytes?: number,\n\tdiagnostics: PromptProjectDocDiagnostic[] = [],\n): Omit<PromptProjectDocManifestEntry, \"precedenceIndex\"> | null {\n\tif (remainingBytes !== undefined && remainingBytes <= 0) {\n\t\treturn null;\n\t}\n\tfor (const filename of candidates) {\n\t\tconst filePath = join(dir, filename);\n\t\tif (existsSync(filePath)) {\n\t\t\tconst resolvedPath = resolve(filePath);\n\t\t\tlet read: ReturnType<typeof readProjectDocContent>;\n\t\t\ttry {\n\t\t\t\tread = readProjectDocContent(resolvedPath, remainingBytes);\n\t\t\t} catch (error) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"read_failed\",\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tmessage: `Could not read instruction file ${resolvedPath}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\tpath: resolvedPath,\n\t\t\t\t\tscopeDir: resolve(dir),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst note = read.truncated\n\t\t\t\t? `\\n\\n[Truncated to ${read.bytesRead} bytes from ${read.originalSize} bytes.]`\n\t\t\t\t: \"\";\n\t\t\tconst content = `${read.content}${note}`;\n\t\t\treturn {\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tsourceKind,\n\t\t\t\tscopeDir: resolve(dir),\n\t\t\t\tcandidateName: filename,\n\t\t\t\tbytesRead: read.bytesRead,\n\t\t\t\ttruncated: read.truncated,\n\t\t\t\tcontentHash: hashPromptProjectDocContent(read.content),\n\t\t\t\tcontent,\n\t\t\t\toriginalSize: read.originalSize,\n\t\t\t\tmaxBytes: read.maxBytes,\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function resolveProjectDocGlobalDirectories(): string[] {\n\treturn Array.from(\n\t\tnew Set([resolve(getAgentDir()), resolve(getHomeDir(), \".config\")]),\n\t);\n}\n\nfunction resolveProjectDocAncestorDirectories(cwd: string): string[] {\n\tconst directories: string[] = [];\n\tlet currentDir = resolve(cwd);\n\tconst root = resolve(\"/\");\n\n\twhile (true) {\n\t\tdirectories.push(currentDir);\n\t\tif (currentDir === root) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst parentDir = resolve(currentDir, \"..\");\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\tdirectories.reverse();\n\treturn directories;\n}\n\nexport function loadPromptProjectDocManifest(\n\tcwdOverride?: string,\n\tconfig?: ComposerConfig,\n): PromptProjectDocManifest {\n\tconst cwd = resolve(cwdOverride ?? process.cwd());\n\tconst resolvedConfig = config ?? loadConfig(cwd);\n\tconst candidates = resolveProjectDocCandidateFilenames(resolvedConfig);\n\tconst maxBytesRaw = resolvedConfig.project_doc_max_bytes;\n\tconst maxBytes =\n\t\ttypeof maxBytesRaw === \"number\"\n\t\t\t? Math.max(0, Math.floor(maxBytesRaw))\n\t\t\t: undefined;\n\tlet remainingBytes = maxBytes;\n\tconst entries: PromptProjectDocManifestEntry[] = [];\n\tconst diagnostics: PromptProjectDocDiagnostic[] = [];\n\tconst loadedPaths = new Set<string>();\n\n\tconst pushEntry = (\n\t\tentry: Omit<PromptProjectDocManifestEntry, \"precedenceIndex\"> | null,\n\t): void => {\n\t\tif (!entry) {\n\t\t\treturn;\n\t\t}\n\t\tconst resolvedPath = resolve(entry.path);\n\t\tif (loadedPaths.has(resolvedPath)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"duplicate_skipped\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Skipped duplicate instruction file already loaded from ${resolvedPath}.`,\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tscopeDir: entry.scopeDir,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tloadedPaths.add(resolvedPath);\n\t\tentries.push({\n\t\t\t...entry,\n\t\t\tpath: resolvedPath,\n\t\t\tprecedenceIndex: entries.length,\n\t\t});\n\t\tif (entry.truncated) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"truncated\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Loaded only ${entry.bytesRead} of ${entry.originalSize ?? \"unknown\"} bytes from ${resolvedPath}.`,\n\t\t\t\tpath: resolvedPath,\n\t\t\t\tscopeDir: entry.scopeDir,\n\t\t\t});\n\t\t}\n\t\tif (remainingBytes !== undefined) {\n\t\t\tremainingBytes = Math.max(0, remainingBytes - entry.bytesRead);\n\t\t}\n\t};\n\n\tconst scanDir = (\n\t\tdir: string,\n\t\tsourceKind: PromptProjectDocSourceKind,\n\t): boolean => {\n\t\tif (remainingBytes === 0) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"budget_exhausted\",\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tmessage: `Skipped instruction lookup under ${resolve(dir)} because project_doc_max_bytes was exhausted.`,\n\t\t\t\tscopeDir: resolve(dir),\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t\tpushEntry(\n\t\t\tloadFirstProjectDocInDir(\n\t\t\t\tdir,\n\t\t\t\tcandidates,\n\t\t\t\tsourceKind,\n\t\t\t\tremainingBytes,\n\t\t\t\tdiagnostics,\n\t\t\t),\n\t\t);\n\t\treturn true;\n\t};\n\n\tfor (const globalContextDir of resolveProjectDocGlobalDirectories()) {\n\t\tif (!scanDir(globalContextDir, \"global\")) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const dir of resolveProjectDocAncestorDirectories(cwd)) {\n\t\tif (!scanDir(dir, \"project\")) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst layerCounts = new Map<string, number>();\n\tfor (const entry of entries) {\n\t\tlayerCounts.set(\n\t\t\tentry.candidateName,\n\t\t\t(layerCounts.get(entry.candidateName) ?? 0) + 1,\n\t\t);\n\t}\n\tfor (const [candidateName, count] of layerCounts) {\n\t\tif (count > 1) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"multiple_instruction_layers\",\n\t\t\t\tseverity: \"info\",\n\t\t\t\tmessage: `${count} ${candidateName} instruction layers were loaded; later project scopes have higher precedence in the prompt.`,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcwd,\n\t\tcandidates,\n\t\tmaxBytes,\n\t\tbytesRead: entries.reduce((total, entry) => total + entry.bytesRead, 0),\n\t\tentries,\n\t\tdiagnostics,\n\t};\n}\n\nexport function resolvePromptLoadedProjectDocPaths(\n\tcwdOverride?: string,\n\tconfig?: ComposerConfig,\n): string[] {\n\treturn loadPromptProjectDocManifest(cwdOverride, config).entries.map(\n\t\t(entry) => entry.path,\n\t);\n}\n\nexport function resolveLoadedAppendSystemPromptPath(\n\tcwdOverride?: string,\n): string | null {\n\tconst cwd = cwdOverride ?? process.cwd();\n\tconst projectPath = resolve(join(cwd, \".maestro\", \"APPEND_SYSTEM.md\"));\n\tif (existsSync(projectPath)) {\n\t\treturn projectPath;\n\t}\n\n\tconst globalPath = resolve(join(getAgentDir(), \"APPEND_SYSTEM.md\"));\n\treturn existsSync(globalPath) ? globalPath : null;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Configuration Loading\n// ─────────────────────────────────────────────────────────────\n\nlet cachedConfig: ComposerConfig | null = null;\nlet cachedWorkspaceDir: string | null = null;\nlet cachedProfileName: string | null = null;\n\n/**\n * Deep merge two objects, with source values overwriting target values.\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n\tconst result = { ...target } as Record<string, unknown>;\n\n\tfor (const key of Object.keys(source)) {\n\t\tconst sourceValue = (source as Record<string, unknown>)[key];\n\t\tconst targetValue = result[key];\n\n\t\tif (\n\t\t\tsourceValue !== undefined &&\n\t\t\ttypeof sourceValue === \"object\" &&\n\t\t\tsourceValue !== null &&\n\t\t\t!Array.isArray(sourceValue) &&\n\t\t\ttypeof targetValue === \"object\" &&\n\t\t\ttargetValue !== null &&\n\t\t\t!Array.isArray(targetValue)\n\t\t) {\n\t\t\tresult[key] = deepMerge(\n\t\t\t\ttargetValue as Record<string, unknown>,\n\t\t\t\tsourceValue as Partial<Record<string, unknown>>,\n\t\t\t);\n\t\t} else if (sourceValue !== undefined) {\n\t\t\tresult[key] = sourceValue;\n\t\t}\n\t}\n\n\treturn result as T;\n}\n\n/**\n * Parse a TOML configuration file.\n */\nfunction parseConfigFile(path: string): ComposerConfig | null {\n\tif (!existsSync(path)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst parsed = parseTOML(content);\n\t\tif (!validateConfig(parsed)) {\n\t\t\tconst message =\n\t\t\t\tvalidateConfig.errors\n\t\t\t\t\t?.map(\n\t\t\t\t\t\t(err) => `${err.instancePath || \"/\"} ${err.message ?? \"invalid\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"; \") ?? \"Invalid config\";\n\t\t\tlogger.warn(\"Invalid config file\", { path, error: message });\n\t\t\treturn null;\n\t\t}\n\t\tlogger.debug(\"Parsed config file\", { path });\n\t\treturn parsed as ComposerConfig;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to parse config file\", {\n\t\t\tpath,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn null;\n\t}\n}\n\nfunction extractConfiguredPackageSpecs(\n\tconfig: ComposerConfig | null,\n\tconfigPath: string,\n\tscope: ConfiguredPackageSpec[\"scope\"],\n): ConfiguredPackageSpec[] {\n\tif (!config?.packages || config.packages.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst configDir = dirname(configPath);\n\treturn config.packages.map((spec) => ({\n\t\tspec,\n\t\tcwd: configDir,\n\t\tscope,\n\t\tconfigPath,\n\t}));\n}\n\nfunction getUserConfigPath(): string {\n\treturn join(PATHS.MAESTRO_HOME, \"config.toml\");\n}\n\nexport function getWritablePackageConfigPath(\n\tscope: WritablePackageScope,\n\tworkspaceDir = process.cwd(),\n): string {\n\tswitch (scope) {\n\t\tcase \"user\":\n\t\t\treturn getUserConfigPath();\n\t\tcase \"project\":\n\t\t\treturn join(workspaceDir, \".maestro\", \"config.toml\");\n\t\tcase \"local\":\n\t\t\treturn join(workspaceDir, \".maestro\", \"config.local.toml\");\n\t}\n}\n\nfunction readWritableComposerConfig(path: string): ComposerConfig {\n\tif (!existsSync(path)) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst parsed = parseTOML(content);\n\t\tif (!validateConfig(parsed)) {\n\t\t\tconst message =\n\t\t\t\tvalidateConfig.errors\n\t\t\t\t\t?.map(\n\t\t\t\t\t\t(err) => `${err.instancePath || \"/\"} ${err.message ?? \"invalid\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"; \") ?? \"Invalid config\";\n\t\t\tthrow new Error(`Invalid config at ${path}: ${message}`);\n\t\t}\n\t\treturn parsed as ComposerConfig;\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new Error(`Failed to parse config at ${path}: ${String(error)}`);\n\t}\n}\n\nfunction writeComposerConfig(path: string, config: ComposerConfig): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\tconst rendered = stringifyTOML(config as Record<string, unknown>).trim();\n\twriteFileSync(path, rendered ? `${rendered}\\n` : \"\", \"utf-8\");\n\tclearConfigCache();\n}\n\nfunction resolvePackageSpecIdentity(spec: PackageSpec, cwd: string): string {\n\tconst [sourceSpec] = parsePackageSpec(spec, cwd);\n\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n}\n\nfunction tryResolvePackageSourceIdentity(\n\tsourceSpec: string,\n\tcwd: string,\n): string | null {\n\ttry {\n\t\treturn formatPackageSource(parsePackageSource(sourceSpec, cwd));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction normalizeRelativeLocalPackagePath(\n\tconfigDir: string,\n\tabsolutePath: string,\n): string {\n\tconst relativePath = relative(configDir, absolutePath);\n\tif (!relativePath || relativePath === \".\") {\n\t\treturn \"./\";\n\t}\n\tif (relativePath.startsWith(\".\") || relativePath.startsWith(\"/\")) {\n\t\treturn relativePath;\n\t}\n\treturn `./${relativePath}`;\n}\n\nfunction normalizePackageSpecForStorage(\n\tspec: PackageSpec,\n\tconfigPath: string,\n\tinputCwd: string,\n\tscope: WritablePackageScope,\n): PackageSpec {\n\tif (typeof spec === \"string\") {\n\t\treturn normalizePackageSourceForStorage(spec, configPath, inputCwd, scope);\n\t}\n\n\treturn {\n\t\t...spec,\n\t\tsource: normalizePackageSourceForStorage(\n\t\t\tspec.source,\n\t\t\tconfigPath,\n\t\t\tinputCwd,\n\t\t\tscope,\n\t\t),\n\t};\n}\n\nfunction normalizePackageSourceForStorage(\n\tsourceSpec: string,\n\tconfigPath: string,\n\tinputCwd: string,\n\tscope: WritablePackageScope,\n): string {\n\tconst source = parsePackageSource(sourceSpec, inputCwd);\n\tif (source.type !== \"local\") {\n\t\treturn formatPackageSource(source);\n\t}\n\n\tif (scope === \"user\") {\n\t\treturn source.path;\n\t}\n\n\treturn normalizeRelativeLocalPackagePath(dirname(configPath), source.path);\n}\n\nfunction doesConfiguredPackageMatch(\n\tspec: PackageSpec,\n\tconfigPath: string,\n\trequestedSpec: string,\n\trequestedCwd: string,\n): boolean {\n\tconst configDir = dirname(configPath);\n\tconst [rawSourceSpec] = parsePackageSpec(spec, configDir);\n\tif (rawSourceSpec === requestedSpec) {\n\t\treturn true;\n\t}\n\n\tconst requestedIdentity = tryResolvePackageSourceIdentity(\n\t\trequestedSpec,\n\t\trequestedCwd,\n\t);\n\tif (!requestedIdentity) {\n\t\treturn false;\n\t}\n\n\treturn resolvePackageSpecIdentity(spec, configDir) === requestedIdentity;\n}\n\nfunction resolvePackageRemovalScope(\n\tworkspaceDir: string,\n\trequestedSpec: string,\n): WritablePackageScope {\n\tconst matches = loadConfiguredPackageSpecs(workspaceDir).filter((entry) =>\n\t\tdoesConfiguredPackageMatch(\n\t\t\tentry.spec,\n\t\t\tentry.configPath,\n\t\t\trequestedSpec,\n\t\t\tworkspaceDir,\n\t\t),\n\t);\n\tfor (const scope of [\"local\", \"project\", \"user\"] as const) {\n\t\tif (matches.some((entry) => entry.scope === scope)) {\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tthrow new Error(`Configured package \"${requestedSpec}\" was not found.`);\n}\n\nexport function addConfiguredPackageSpecToConfig(\n\toptions: AddConfiguredPackageSpecOptions,\n): { path: string; scope: WritablePackageScope; spec: PackageSpec } {\n\tconst workspaceDir = options.workspaceDir ?? process.cwd();\n\tconst path = getWritablePackageConfigPath(options.scope, workspaceDir);\n\tconst config = readWritableComposerConfig(path);\n\tconst configDir = dirname(path);\n\tconst requestedIdentity = resolvePackageSpecIdentity(\n\t\toptions.spec,\n\t\tworkspaceDir,\n\t);\n\tconst existingPackages = [...(config.packages ?? [])];\n\tconst duplicate = existingPackages.find(\n\t\t(spec) => resolvePackageSpecIdentity(spec, configDir) === requestedIdentity,\n\t);\n\tif (duplicate) {\n\t\tconst [sourceSpec] = parsePackageSpec(duplicate, configDir);\n\t\tthrow new Error(`Package \"${sourceSpec}\" already exists in ${path}.`);\n\t}\n\n\tconst storedSpec = normalizePackageSpecForStorage(\n\t\toptions.spec,\n\t\tpath,\n\t\tworkspaceDir,\n\t\toptions.scope,\n\t);\n\tconst nextConfig = structuredClone(config);\n\tnextConfig.packages = [...existingPackages, storedSpec];\n\twriteComposerConfig(path, nextConfig);\n\treturn { path, scope: options.scope, spec: storedSpec };\n}\n\nexport function removeConfiguredPackageSpecFromConfig(\n\toptions: RemoveConfiguredPackageSpecOptions,\n): { path: string; scope: WritablePackageScope; removedCount: number } {\n\tconst workspaceDir = options.workspaceDir ?? process.cwd();\n\tconst scope =\n\t\toptions.scope ?? resolvePackageRemovalScope(workspaceDir, options.spec);\n\tconst path = getWritablePackageConfigPath(scope, workspaceDir);\n\tconst config = readWritableComposerConfig(path);\n\tconst existingPackages = [...(config.packages ?? [])];\n\tconst remainingPackages = existingPackages.filter(\n\t\t(spec) =>\n\t\t\t!doesConfiguredPackageMatch(spec, path, options.spec, workspaceDir),\n\t);\n\tconst removedCount = existingPackages.length - remainingPackages.length;\n\tif (removedCount === 0) {\n\t\tthrow new Error(\n\t\t\t`Configured package \"${options.spec}\" was not found in ${path}.`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(config);\n\tif (remainingPackages.length > 0) {\n\t\tnextConfig.packages = remainingPackages;\n\t} else {\n\t\tdelete nextConfig.packages;\n\t}\n\twriteComposerConfig(path, nextConfig);\n\treturn { path, scope, removedCount };\n}\n\n/**\n * Apply environment variable overrides.\n */\nfunction applyEnvOverrides(config: ComposerConfig): ComposerConfig {\n\tconst result = { ...config };\n\n\t// MAESTRO_MODEL\n\tif (process.env.MAESTRO_MODEL) {\n\t\tresult.model = process.env.MAESTRO_MODEL;\n\t}\n\n\t// MAESTRO_MODEL_PROVIDER\n\tif (process.env.MAESTRO_MODEL_PROVIDER) {\n\t\tresult.model_provider = process.env.MAESTRO_MODEL_PROVIDER;\n\t}\n\n\t// MAESTRO_APPROVAL_POLICY\n\tif (process.env.MAESTRO_APPROVAL_POLICY) {\n\t\tconst policy = process.env.MAESTRO_APPROVAL_POLICY as ApprovalPolicy;\n\t\tif ([\"untrusted\", \"on-failure\", \"on-request\", \"never\"].includes(policy)) {\n\t\t\tresult.approval_policy = policy;\n\t\t}\n\t}\n\n\t// MAESTRO_SANDBOX_MODE\n\tif (process.env.MAESTRO_SANDBOX_MODE) {\n\t\tconst mode = process.env.MAESTRO_SANDBOX_MODE as SandboxMode;\n\t\tif ([\"read-only\", \"workspace-write\", \"danger-full-access\"].includes(mode)) {\n\t\t\tresult.sandbox_mode = mode;\n\t\t}\n\t}\n\n\t// MAESTRO_PROFILE\n\tif (process.env.MAESTRO_PROFILE) {\n\t\tresult.profile = process.env.MAESTRO_PROFILE;\n\t}\n\n\t// MAESTRO_HISTORY_PERSISTENCE\n\tif (process.env.MAESTRO_HISTORY_PERSISTENCE) {\n\t\tconst persistence =\n\t\t\tprocess.env.MAESTRO_HISTORY_PERSISTENCE.trim().toLowerCase();\n\t\tif (\n\t\t\tpersistence === \"save-all\" ||\n\t\t\tpersistence === \"none\" ||\n\t\t\tpersistence === \"save\"\n\t\t) {\n\t\t\tresult.history = {\n\t\t\t\t...(result.history ?? {}),\n\t\t\t\tpersistence: persistence === \"save\" ? \"save-all\" : persistence,\n\t\t\t};\n\t\t}\n\t}\n\n\t// MAESTRO_HISTORY_MAX_BYTES\n\tif (process.env.MAESTRO_HISTORY_MAX_BYTES) {\n\t\tconst parsed = Number.parseInt(process.env.MAESTRO_HISTORY_MAX_BYTES, 10);\n\t\tif (Number.isFinite(parsed) && parsed >= 0) {\n\t\t\tresult.history = {\n\t\t\t\t...(result.history ?? {}),\n\t\t\t\tmax_bytes: parsed,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Apply profile settings to configuration.\n */\nfunction applyProfile(\n\tconfig: ComposerConfig,\n\tprofileName: string,\n): ComposerConfig {\n\tif (!config.profiles || !config.profiles[profileName]) {\n\t\tlogger.warn(\"Profile not found\", { profile: profileName });\n\t\treturn config;\n\t}\n\n\tconst profile = config.profiles[profileName];\n\tconst result = deepMerge(config, profile as Partial<ComposerConfig>);\n\n\tlogger.debug(\"Applied profile\", { profile: profileName });\n\treturn result;\n}\n\n/**\n * Load configuration from files and environment.\n *\n * @param workspaceDir - The current workspace directory\n * @param profileName - Optional profile name to activate\n * @param cliOverrides - Optional CLI flag overrides\n */\nexport function loadConfig(\n\tworkspaceDir: string,\n\tprofileName?: string,\n\tcliOverrides?: Partial<ComposerConfig>,\n): ComposerConfig {\n\t// Check cache\n\tif (\n\t\tcachedConfig &&\n\t\tcachedWorkspaceDir === workspaceDir &&\n\t\tcachedProfileName === (profileName ?? null)\n\t) {\n\t\tif (!cliOverrides || Object.keys(cliOverrides).length === 0) {\n\t\t\treturn cachedConfig;\n\t\t}\n\t\treturn deepMerge(cachedConfig, cliOverrides);\n\t}\n\n\t// Start with defaults\n\tlet config = { ...DEFAULT_CONFIG };\n\n\t// Load global config\n\tconst globalPath = getUserConfigPath();\n\tconst globalConfig = parseConfigFile(globalPath);\n\tif (globalConfig) {\n\t\tconfig = deepMerge(config, globalConfig);\n\t}\n\n\t// Load project config (shared, committed to git)\n\tconst projectPath = join(workspaceDir, \".maestro\", \"config.toml\");\n\tconst projectConfig = parseConfigFile(projectPath);\n\tif (projectConfig) {\n\t\tconfig = deepMerge(config, projectConfig);\n\t}\n\n\t// Load local config (personal overrides, gitignored)\n\t// This follows Claude Code's pattern of settings.local.json\n\tconst localPath = join(workspaceDir, \".maestro\", \"config.local.toml\");\n\tconst localConfig = parseConfigFile(localPath);\n\tif (localConfig) {\n\t\tconfig = deepMerge(config, localConfig);\n\t\tlogger.debug(\"Applied local config overrides\", { path: localPath });\n\t}\n\n\t// Apply environment overrides\n\tconfig = applyEnvOverrides(config);\n\n\t// Determine active profile\n\tconst activeProfile = profileName ?? config.profile;\n\tif (activeProfile) {\n\t\tconfig = applyProfile(config, activeProfile);\n\t}\n\n\t// Apply CLI overrides (highest precedence)\n\tif (cliOverrides && Object.keys(cliOverrides).length > 0) {\n\t\tconfig = deepMerge(config, cliOverrides);\n\t}\n\n\t// Cache the result (without CLI overrides)\n\tcachedConfig = config;\n\tcachedWorkspaceDir = workspaceDir;\n\tcachedProfileName = profileName ?? null;\n\n\tlogger.info(\"Loaded configuration\", {\n\t\tglobal: globalConfig !== null,\n\t\tproject: projectConfig !== null,\n\t\tprofile: activeProfile,\n\t});\n\n\treturn config;\n}\n\nexport function loadConfiguredPackageSpecs(\n\tworkspaceDir: string,\n): ConfiguredPackageSpec[] {\n\tconst globalPath = getUserConfigPath();\n\tconst projectPath = join(workspaceDir, \".maestro\", \"config.toml\");\n\tconst localPath = join(workspaceDir, \".maestro\", \"config.local.toml\");\n\n\treturn [\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(globalPath),\n\t\t\tglobalPath,\n\t\t\t\"user\",\n\t\t),\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(projectPath),\n\t\t\tprojectPath,\n\t\t\t\"project\",\n\t\t),\n\t\t...extractConfiguredPackageSpecs(\n\t\t\tparseConfigFile(localPath),\n\t\t\tlocalPath,\n\t\t\t\"local\",\n\t\t),\n\t];\n}\n\n/**\n * Clear the configuration cache.\n */\nexport function clearConfigCache(): void {\n\tcachedConfig = null;\n\tcachedWorkspaceDir = null;\n\tcachedProfileName = null;\n}\n\n/**\n * Get a specific configuration value with type safety.\n */\nexport function getConfigValue<K extends keyof ComposerConfig>(\n\tconfig: ComposerConfig,\n\tkey: K,\n): ComposerConfig[K] {\n\treturn config[key];\n}\n\n/**\n * Get the list of available profiles.\n */\nexport function getAvailableProfiles(workspaceDir: string): string[] {\n\tconst config = loadConfig(workspaceDir);\n\tif (!config.profiles) {\n\t\treturn [];\n\t}\n\treturn Object.keys(config.profiles);\n}\n\n/**\n * Get a summary of the current configuration for display.\n */\nexport function getConfigSummary(workspaceDir: string): string {\n\tconst config = loadConfig(workspaceDir);\n\tconst lines: string[] = [];\n\n\tlines.push(\"Current Configuration\");\n\tlines.push(\"─\".repeat(40));\n\tlines.push(`Model: ${config.model ?? \"default\"}`);\n\tlines.push(`Provider: ${config.model_provider ?? \"openai-codex\"}`);\n\tlines.push(`Approval Policy: ${config.approval_policy ?? \"untrusted\"}`);\n\tlines.push(`Sandbox Mode: ${config.sandbox_mode ?? \"workspace-write\"}`);\n\n\tif (config.profile) {\n\t\tlines.push(`Active Profile: ${config.profile}`);\n\t}\n\n\tconst profiles = getAvailableProfiles(workspaceDir);\n\tif (profiles.length > 0) {\n\t\tlines.push(`Available Profiles: ${profiles.join(\", \")}`);\n\t}\n\n\tconst packageCount = loadConfiguredPackageSpecs(workspaceDir).length;\n\tif (packageCount > 0) {\n\t\tlines.push(`Configured Packages: ${packageCount}`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Parse a CLI config override in the format \"key=value\".\n * Supports nested keys with dots (e.g., \"model_providers.openai.base_url\").\n */\nexport function parseCliOverride(\n\toverride: string,\n): { key: string; value: unknown } | null {\n\tconst eqIndex = override.indexOf(\"=\");\n\tif (eqIndex <= 0) {\n\t\treturn null;\n\t}\n\n\tconst key = override.slice(0, eqIndex).trim();\n\tlet valueStr = override.slice(eqIndex + 1).trim();\n\n\t// Try to parse as TOML value\n\ttry {\n\t\t// Wrap in a table to parse\n\t\tconst tomlStr = `value = ${valueStr}`;\n\t\tconst parsed = parseTOML(tomlStr) as { value: unknown };\n\t\treturn { key, value: parsed.value };\n\t} catch {\n\t\t// If parsing fails, treat as string\n\t\t// Remove surrounding quotes if present\n\t\tif (\n\t\t\t(valueStr.startsWith('\"') && valueStr.endsWith('\"')) ||\n\t\t\t(valueStr.startsWith(\"'\") && valueStr.endsWith(\"'\"))\n\t\t) {\n\t\t\tvalueStr = valueStr.slice(1, -1);\n\t\t}\n\t\treturn { key, value: valueStr };\n\t}\n}\n\n/**\n * Apply a parsed CLI override to a configuration object.\n */\nexport function applyCliOverride(\n\tconfig: ComposerConfig,\n\tkey: string,\n\tvalue: unknown,\n): ComposerConfig {\n\tconst keys = key.split(\".\");\n\tconst result = { ...config };\n\n\t// Navigate to the nested key\n\tlet current: Record<string, unknown> = result as Record<string, unknown>;\n\tfor (let i = 0; i < keys.length - 1; i++) {\n\t\tconst k = keys[i]!;\n\t\tif (current[k] === undefined || typeof current[k] !== \"object\") {\n\t\t\tcurrent[k] = {};\n\t\t}\n\t\tcurrent = current[k] as Record<string, unknown>;\n\t}\n\n\t// Set the value\n\tconst finalKey = keys[keys.length - 1];\n\tif (finalKey !== undefined) {\n\t\tcurrent[finalKey] = value;\n\t}\n\n\treturn result;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @fileoverview PostgreSQL Database Client
3
3
  *
4
- * This module provides the database connection layer for Composer's enterprise
4
+ * This module provides the database connection layer for Maestro's enterprise
5
5
  * features. It uses PostgreSQL via the `postgres.js` driver with Drizzle ORM
6
6
  * for type-safe queries.
7
7
  *
@@ -46,7 +46,7 @@
46
46
  * - API token management
47
47
  *
48
48
  * For single-user deployments without enterprise features, the database
49
- * is optional and Composer falls back to file-based storage.
49
+ * is optional and Maestro falls back to file-based storage.
50
50
  *
51
51
  * @module db/client
52
52
  */
package/dist/db/client.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @fileoverview PostgreSQL Database Client
3
3
  *
4
- * This module provides the database connection layer for Composer's enterprise
4
+ * This module provides the database connection layer for Maestro's enterprise
5
5
  * features. It uses PostgreSQL via the `postgres.js` driver with Drizzle ORM
6
6
  * for type-safe queries.
7
7
  *
@@ -46,7 +46,7 @@
46
46
  * - API token management
47
47
  *
48
48
  * For single-user deployments without enterprise features, the database
49
- * is optional and Composer falls back to file-based storage.
49
+ * is optional and Maestro falls back to file-based storage.
50
50
  *
51
51
  * @module db/client
52
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview PostgreSQL Database Client\n *\n * This module provides the database connection layer for Composer's enterprise\n * features. It uses PostgreSQL via the `postgres.js` driver with Drizzle ORM\n * for type-safe queries.\n *\n * ## Features\n *\n * - **Connection Pooling**: Configurable pool size via `MAESTRO_DB_MAX_CONNECTIONS`\n * - **Graceful Shutdown**: Signal handlers ensure clean connection closure\n * - **Lazy Initialization**: Database connects on first use\n * - **Health Checks**: `testConnection()` for readiness probes\n *\n * ## Configuration\n *\n * | Environment Variable | Description | Default |\n * |---------------------|-------------|---------|\n * | `MAESTRO_DATABASE_URL` | PostgreSQL connection string | (required) |\n * | `DATABASE_URL` | Fallback connection string | - |\n * | `MAESTRO_DB_MAX_CONNECTIONS` | Connection pool size | 10 |\n * | `MAESTRO_DB_IDLE_TIMEOUT` | Idle connection timeout (seconds) | 20 |\n * | `MAESTRO_DB_CONNECT_TIMEOUT` | Connection timeout (seconds) | 10 |\n *\n * ## Usage\n *\n * ```typescript\n * import { getDb, isDbAvailable, testConnection } from \"./db/client.js\";\n *\n * // Check if database is configured\n * if (isDatabaseConfigured()) {\n * // Get the database client (connects lazily)\n * const db = getDb();\n *\n * // Execute type-safe queries\n * const sessions = await db.select().from(schema.sessions);\n * }\n * ```\n *\n * ## Enterprise Use Cases\n *\n * The database stores:\n * - Shared session tokens and access tracking\n * - Webhook configurations\n * - Enterprise audit logs\n * - API token management\n *\n * For single-user deployments without enterprise features, the database\n * is optional and Composer falls back to file-based storage.\n *\n * @module db/client\n */\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport postgres from \"postgres\";\nimport { createLogger } from \"../utils/logger.js\";\nimport * as schema from \"./schema.js\";\n\nconst logger = createLogger(\"db\");\n\nexport type DbClient = ReturnType<typeof drizzle<typeof schema>>;\n\nlet dbInstance: DbClient | null = null;\nlet pgClient: ReturnType<typeof postgres> | null = null;\n\nexport interface DatabaseConfig {\n\turl: string;\n\tmaxConnections?: number;\n\tidleTimeout?: number;\n\tconnectTimeout?: number;\n}\n\nfunction getDatabaseConfig(): DatabaseConfig {\n\tconst url = process.env.MAESTRO_DATABASE_URL || process.env.DATABASE_URL;\n\n\tif (!url) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_DATABASE_URL or DATABASE_URL environment variable must be set for enterprise features\",\n\t\t);\n\t}\n\n\treturn {\n\t\turl,\n\t\tmaxConnections: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_MAX_CONNECTIONS || \"10\",\n\t\t\t10,\n\t\t),\n\t\tidleTimeout: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_IDLE_TIMEOUT || \"20\",\n\t\t\t10,\n\t\t),\n\t\tconnectTimeout: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_CONNECT_TIMEOUT || \"10\",\n\t\t\t10,\n\t\t),\n\t};\n}\n\nexport function getDb(): DbClient {\n\tif (dbInstance) {\n\t\treturn dbInstance;\n\t}\n\n\tconst config = getDatabaseConfig();\n\n\tlogger.info(\"Connecting to PostgreSQL database\");\n\n\tpgClient = postgres(config.url, {\n\t\tmax: config.maxConnections,\n\t\tidle_timeout: config.idleTimeout,\n\t\tconnect_timeout: config.connectTimeout,\n\t});\n\n\tdbInstance = drizzle(pgClient, { schema });\n\n\treturn dbInstance;\n}\n\nexport async function closeDb(): Promise<void> {\n\tif (pgClient) {\n\t\tlogger.info(\"Closing database connection\");\n\t\tawait pgClient.end();\n\t\tpgClient = null;\n\t\tdbInstance = null;\n\t}\n}\n\n/**\n * Check if database is configured and available\n */\nexport function isDatabaseConfigured(): boolean {\n\treturn !!(process.env.MAESTRO_DATABASE_URL || process.env.DATABASE_URL);\n}\n\n/**\n * Check if database connection is currently available.\n * Returns true if configured and connected, false otherwise.\n */\nexport function isDbAvailable(): boolean {\n\treturn isDatabaseConfigured() && dbInstance !== null;\n}\n\n/**\n * Test database connection\n */\nexport async function testConnection(): Promise<boolean> {\n\ttry {\n\t\tconst db = getDb();\n\t\t// Simple query to test connection\n\t\tawait db.execute(\"SELECT 1\");\n\t\treturn true;\n\t} catch (error) {\n\t\tlogger.error(\n\t\t\t\"Database connection test failed\",\n\t\t\terror instanceof Error ? error : undefined,\n\t\t);\n\t\treturn false;\n\t}\n}\n\n// Graceful shutdown\nlet shuttingDown = false;\nasync function handleShutdown(signal: NodeJS.Signals): Promise<void> {\n\tif (shuttingDown) {\n\t\treturn;\n\t}\n\tshuttingDown = true;\n\tlogger.info(`Received ${signal}, shutting down database connections`);\n\ttry {\n\t\tawait closeDb();\n\t} catch (error) {\n\t\tlogger.error(\n\t\t\t\"Error while closing database connection\",\n\t\t\terror instanceof Error ? error : undefined,\n\t\t);\n\t} finally {\n\t\t// Don't exit in test mode - let vitest handle process lifecycle\n\t\tif (process.env.VITEST !== \"true\" && process.env.NODE_ENV !== \"test\") {\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n}\n\n// Only register signal handlers outside of test mode\n// In test mode, vitest manages the process lifecycle\nif (process.env.VITEST !== \"true\" && process.env.NODE_ENV !== \"test\") {\n\tprocess.once(\"SIGINT\", () => {\n\t\thandleShutdown(\"SIGINT\").catch((error) => {\n\t\t\tlogger.error(\n\t\t\t\t\"Error during SIGINT shutdown\",\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t});\n\t});\n\n\tprocess.once(\"SIGTERM\", () => {\n\t\thandleShutdown(\"SIGTERM\").catch((error) => {\n\t\t\tlogger.error(\n\t\t\t\t\"Error during SIGTERM shutdown\",\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview PostgreSQL Database Client\n *\n * This module provides the database connection layer for Maestro's enterprise\n * features. It uses PostgreSQL via the `postgres.js` driver with Drizzle ORM\n * for type-safe queries.\n *\n * ## Features\n *\n * - **Connection Pooling**: Configurable pool size via `MAESTRO_DB_MAX_CONNECTIONS`\n * - **Graceful Shutdown**: Signal handlers ensure clean connection closure\n * - **Lazy Initialization**: Database connects on first use\n * - **Health Checks**: `testConnection()` for readiness probes\n *\n * ## Configuration\n *\n * | Environment Variable | Description | Default |\n * |---------------------|-------------|---------|\n * | `MAESTRO_DATABASE_URL` | PostgreSQL connection string | (required) |\n * | `DATABASE_URL` | Fallback connection string | - |\n * | `MAESTRO_DB_MAX_CONNECTIONS` | Connection pool size | 10 |\n * | `MAESTRO_DB_IDLE_TIMEOUT` | Idle connection timeout (seconds) | 20 |\n * | `MAESTRO_DB_CONNECT_TIMEOUT` | Connection timeout (seconds) | 10 |\n *\n * ## Usage\n *\n * ```typescript\n * import { getDb, isDbAvailable, testConnection } from \"./db/client.js\";\n *\n * // Check if database is configured\n * if (isDatabaseConfigured()) {\n * // Get the database client (connects lazily)\n * const db = getDb();\n *\n * // Execute type-safe queries\n * const sessions = await db.select().from(schema.sessions);\n * }\n * ```\n *\n * ## Enterprise Use Cases\n *\n * The database stores:\n * - Shared session tokens and access tracking\n * - Webhook configurations\n * - Enterprise audit logs\n * - API token management\n *\n * For single-user deployments without enterprise features, the database\n * is optional and Maestro falls back to file-based storage.\n *\n * @module db/client\n */\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport postgres from \"postgres\";\nimport { createLogger } from \"../utils/logger.js\";\nimport * as schema from \"./schema.js\";\n\nconst logger = createLogger(\"db\");\n\nexport type DbClient = ReturnType<typeof drizzle<typeof schema>>;\n\nlet dbInstance: DbClient | null = null;\nlet pgClient: ReturnType<typeof postgres> | null = null;\n\nexport interface DatabaseConfig {\n\turl: string;\n\tmaxConnections?: number;\n\tidleTimeout?: number;\n\tconnectTimeout?: number;\n}\n\nfunction getDatabaseConfig(): DatabaseConfig {\n\tconst url = process.env.MAESTRO_DATABASE_URL || process.env.DATABASE_URL;\n\n\tif (!url) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_DATABASE_URL or DATABASE_URL environment variable must be set for enterprise features\",\n\t\t);\n\t}\n\n\treturn {\n\t\turl,\n\t\tmaxConnections: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_MAX_CONNECTIONS || \"10\",\n\t\t\t10,\n\t\t),\n\t\tidleTimeout: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_IDLE_TIMEOUT || \"20\",\n\t\t\t10,\n\t\t),\n\t\tconnectTimeout: Number.parseInt(\n\t\t\tprocess.env.MAESTRO_DB_CONNECT_TIMEOUT || \"10\",\n\t\t\t10,\n\t\t),\n\t};\n}\n\nexport function getDb(): DbClient {\n\tif (dbInstance) {\n\t\treturn dbInstance;\n\t}\n\n\tconst config = getDatabaseConfig();\n\n\tlogger.info(\"Connecting to PostgreSQL database\");\n\n\tpgClient = postgres(config.url, {\n\t\tmax: config.maxConnections,\n\t\tidle_timeout: config.idleTimeout,\n\t\tconnect_timeout: config.connectTimeout,\n\t});\n\n\tdbInstance = drizzle(pgClient, { schema });\n\n\treturn dbInstance;\n}\n\nexport async function closeDb(): Promise<void> {\n\tif (pgClient) {\n\t\tlogger.info(\"Closing database connection\");\n\t\tawait pgClient.end();\n\t\tpgClient = null;\n\t\tdbInstance = null;\n\t}\n}\n\n/**\n * Check if database is configured and available\n */\nexport function isDatabaseConfigured(): boolean {\n\treturn !!(process.env.MAESTRO_DATABASE_URL || process.env.DATABASE_URL);\n}\n\n/**\n * Check if database connection is currently available.\n * Returns true if configured and connected, false otherwise.\n */\nexport function isDbAvailable(): boolean {\n\treturn isDatabaseConfigured() && dbInstance !== null;\n}\n\n/**\n * Test database connection\n */\nexport async function testConnection(): Promise<boolean> {\n\ttry {\n\t\tconst db = getDb();\n\t\t// Simple query to test connection\n\t\tawait db.execute(\"SELECT 1\");\n\t\treturn true;\n\t} catch (error) {\n\t\tlogger.error(\n\t\t\t\"Database connection test failed\",\n\t\t\terror instanceof Error ? error : undefined,\n\t\t);\n\t\treturn false;\n\t}\n}\n\n// Graceful shutdown\nlet shuttingDown = false;\nasync function handleShutdown(signal: NodeJS.Signals): Promise<void> {\n\tif (shuttingDown) {\n\t\treturn;\n\t}\n\tshuttingDown = true;\n\tlogger.info(`Received ${signal}, shutting down database connections`);\n\ttry {\n\t\tawait closeDb();\n\t} catch (error) {\n\t\tlogger.error(\n\t\t\t\"Error while closing database connection\",\n\t\t\terror instanceof Error ? error : undefined,\n\t\t);\n\t} finally {\n\t\t// Don't exit in test mode - let vitest handle process lifecycle\n\t\tif (process.env.VITEST !== \"true\" && process.env.NODE_ENV !== \"test\") {\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n}\n\n// Only register signal handlers outside of test mode\n// In test mode, vitest manages the process lifecycle\nif (process.env.VITEST !== \"true\" && process.env.NODE_ENV !== \"test\") {\n\tprocess.once(\"SIGINT\", () => {\n\t\thandleShutdown(\"SIGINT\").catch((error) => {\n\t\t\tlogger.error(\n\t\t\t\t\"Error during SIGINT shutdown\",\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t});\n\t});\n\n\tprocess.once(\"SIGTERM\", () => {\n\t\thandleShutdown(\"SIGTERM\").catch((error) => {\n\t\t\tlogger.error(\n\t\t\t\t\"Error during SIGTERM shutdown\",\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t});\n\t});\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Database migration runner for Composer
2
+ * Database migration runner for Maestro
3
3
  *
4
4
  * Uses drizzle-orm's migrate function to apply SQL migrations
5
5
  * from the migrations folder generated by drizzle-kit.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Database migration runner for Composer
2
+ * Database migration runner for Maestro
3
3
  *
4
4
  * Uses drizzle-orm's migrate function to apply SQL migrations
5
5
  * from the migrations folder generated by drizzle-kit.