qlogicagent 2.13.3 → 2.13.5

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 (1268) hide show
  1. package/dist/agent/agent.d.ts +48 -0
  2. package/dist/agent/agent.js +197 -0
  3. package/dist/agent/memory-recall-context.d.ts +18 -0
  4. package/dist/agent/memory-recall-context.js +139 -0
  5. package/dist/agent/memory-recall-context.test.d.ts +1 -0
  6. package/dist/agent/memory-recall-context.test.js +58 -0
  7. package/dist/agent/memory-recall-injection.d.ts +34 -0
  8. package/dist/agent/memory-recall-injection.js +66 -0
  9. package/dist/agent/runtime-vars.d.ts +48 -0
  10. package/dist/agent/runtime-vars.js +54 -0
  11. package/dist/agent/tool-access.d.ts +1 -0
  12. package/dist/agent/tool-access.js +1 -0
  13. package/dist/agent/tool-loop/artifact-events.d.ts +17 -0
  14. package/dist/agent/tool-loop/artifact-events.js +75 -0
  15. package/dist/agent/tool-loop/budget-continuation-policy.d.ts +22 -0
  16. package/dist/agent/tool-loop/budget-continuation-policy.js +44 -0
  17. package/dist/agent/tool-loop/completion-action-policy.d.ts +19 -0
  18. package/dist/agent/tool-loop/completion-action-policy.js +68 -0
  19. package/dist/agent/tool-loop/completion-action-policy.test.d.ts +1 -0
  20. package/dist/agent/tool-loop/completion-action-policy.test.js +77 -0
  21. package/dist/agent/tool-loop/completion-stop-policy.d.ts +19 -0
  22. package/dist/agent/tool-loop/completion-stop-policy.js +31 -0
  23. package/dist/agent/tool-loop/compression-pipeline.d.ts +44 -0
  24. package/dist/agent/tool-loop/compression-pipeline.js +68 -0
  25. package/dist/agent/tool-loop/loop-helpers.d.ts +15 -0
  26. package/dist/agent/tool-loop/loop-helpers.js +86 -0
  27. package/dist/agent/tool-loop/recovery-helpers.d.ts +18 -0
  28. package/dist/agent/tool-loop/recovery-helpers.js +42 -0
  29. package/dist/agent/tool-loop/single-round.d.ts +2 -0
  30. package/dist/agent/tool-loop/single-round.js +43 -0
  31. package/dist/agent/tool-loop/skill-instruction-policy.d.ts +7 -0
  32. package/dist/agent/tool-loop/skill-instruction-policy.js +18 -0
  33. package/dist/agent/tool-loop/stream-error-recovery.d.ts +59 -0
  34. package/dist/agent/tool-loop/stream-error-recovery.js +93 -0
  35. package/dist/agent/tool-loop/tool-failure-policy.d.ts +22 -0
  36. package/dist/agent/tool-loop/tool-failure-policy.js +46 -0
  37. package/dist/agent/tool-loop/tool-result-events.d.ts +11 -0
  38. package/dist/agent/tool-loop/tool-result-events.js +59 -0
  39. package/dist/agent/tool-loop/tool-result-events.test.d.ts +1 -0
  40. package/dist/agent/tool-loop/tool-result-events.test.js +30 -0
  41. package/dist/agent/tool-loop.contract.test.d.ts +1 -0
  42. package/dist/agent/tool-loop.contract.test.js +254 -0
  43. package/dist/agent/tool-loop.d.ts +121 -0
  44. package/dist/agent/tool-loop.js +1017 -0
  45. package/dist/agent/tool-loop.policy-architecture.test.d.ts +1 -0
  46. package/dist/agent/tool-loop.policy-architecture.test.js +21 -0
  47. package/dist/agent/tool-loop.states.test.d.ts +1 -0
  48. package/dist/agent/tool-loop.states.test.js +211 -0
  49. package/dist/agent/tunable-defaults.d.ts +1 -0
  50. package/dist/agent/tunable-defaults.js +1 -0
  51. package/dist/agent/types.d.ts +311 -0
  52. package/dist/agent/types.js +8 -0
  53. package/dist/cli/acp-commands.d.ts +32 -0
  54. package/dist/cli/acp-commands.js +145 -0
  55. package/dist/cli/acp-commands.test.d.ts +1 -0
  56. package/dist/cli/acp-commands.test.js +89 -0
  57. package/dist/cli/acp-extended-handlers.d.ts +69 -0
  58. package/dist/cli/acp-extended-handlers.js +484 -0
  59. package/dist/cli/acp-extended-handlers.product-confirm.test.d.ts +1 -0
  60. package/dist/cli/acp-extended-handlers.product-confirm.test.js +56 -0
  61. package/dist/cli/acp-extended-handlers.product-project.test.d.ts +1 -0
  62. package/dist/cli/acp-extended-handlers.product-project.test.js +66 -0
  63. package/dist/cli/acp-extended-handlers.solo-project.test.d.ts +1 -0
  64. package/dist/cli/acp-extended-handlers.solo-project.test.js +51 -0
  65. package/dist/cli/acp-extended-handlers.specchat.test.d.ts +1 -0
  66. package/dist/cli/acp-extended-handlers.specchat.test.js +62 -0
  67. package/dist/cli/acp-extended-handlers.workflowchat.test.d.ts +1 -0
  68. package/dist/cli/acp-extended-handlers.workflowchat.test.js +49 -0
  69. package/dist/cli/acp-extended-host-adapter.d.ts +29 -0
  70. package/dist/cli/acp-extended-host-adapter.js +40 -0
  71. package/dist/cli/acp-extended-host-adapter.test.d.ts +1 -0
  72. package/dist/cli/acp-extended-host-adapter.test.js +63 -0
  73. package/dist/cli/acp-message-router.d.ts +8 -0
  74. package/dist/cli/acp-message-router.js +40 -0
  75. package/dist/cli/acp-message-router.test.d.ts +1 -0
  76. package/dist/cli/acp-message-router.test.js +30 -0
  77. package/dist/cli/acp-session-handlers.d.ts +41 -0
  78. package/dist/cli/acp-session-handlers.js +304 -0
  79. package/dist/cli/acp-session-handlers.test.d.ts +1 -0
  80. package/dist/cli/acp-session-handlers.test.js +346 -0
  81. package/dist/cli/acp-session-host.d.ts +48 -0
  82. package/dist/cli/acp-session-host.js +1 -0
  83. package/dist/cli/agent-config-coordinator.d.ts +16 -0
  84. package/dist/cli/agent-config-coordinator.js +56 -0
  85. package/dist/cli/agent-config-coordinator.test.d.ts +1 -0
  86. package/dist/cli/agent-config-coordinator.test.js +51 -0
  87. package/dist/cli/agent-config-runtime.d.ts +11 -0
  88. package/dist/cli/agent-config-runtime.js +4 -0
  89. package/dist/cli/agent-runner-factory.d.ts +2 -0
  90. package/dist/cli/agent-runner-factory.js +11 -0
  91. package/dist/cli/agent-runtime-bootstrap.d.ts +67 -0
  92. package/dist/cli/agent-runtime-bootstrap.js +104 -0
  93. package/dist/cli/agent-runtime-ports-adapter.d.ts +2 -0
  94. package/dist/cli/agent-runtime-ports-adapter.js +22 -0
  95. package/dist/cli/agent-runtime-session-state.d.ts +24 -0
  96. package/dist/cli/agent-runtime-session-state.js +51 -0
  97. package/dist/cli/agent-status-notifier.d.ts +11 -0
  98. package/dist/cli/agent-status-notifier.js +26 -0
  99. package/dist/cli/agent-status-notifier.test.d.ts +1 -0
  100. package/dist/cli/agent-status-notifier.test.js +33 -0
  101. package/dist/cli/base-tool-bootstrap.d.ts +16 -0
  102. package/dist/cli/base-tool-bootstrap.js +20 -0
  103. package/dist/cli/cli-acp-request-handler.d.ts +11 -0
  104. package/dist/cli/cli-acp-request-handler.js +61 -0
  105. package/dist/cli/cli-acp-request-handler.test.d.ts +1 -0
  106. package/dist/cli/cli-acp-request-handler.test.js +58 -0
  107. package/dist/cli/cli-agent-builder.d.ts +35 -0
  108. package/dist/cli/cli-agent-builder.js +33 -0
  109. package/dist/cli/community-resource-installer.d.ts +30 -0
  110. package/dist/cli/community-resource-installer.js +66 -0
  111. package/dist/cli/community-resource-installer.test.d.ts +1 -0
  112. package/dist/cli/community-resource-installer.test.js +175 -0
  113. package/dist/cli/community-skill-installer.d.ts +12 -0
  114. package/dist/cli/community-skill-installer.js +220 -0
  115. package/dist/cli/community-skill-installer.test.d.ts +1 -0
  116. package/dist/cli/community-skill-installer.test.js +179 -0
  117. package/dist/cli/community-workflow-installer.d.ts +29 -0
  118. package/dist/cli/community-workflow-installer.js +69 -0
  119. package/dist/cli/conversation-context.d.ts +30 -0
  120. package/dist/cli/conversation-context.js +69 -0
  121. package/dist/cli/conversation-context.test.d.ts +1 -0
  122. package/dist/cli/conversation-context.test.js +61 -0
  123. package/dist/cli/core-tool-coordinator.d.ts +41 -0
  124. package/dist/cli/core-tool-coordinator.js +55 -0
  125. package/dist/cli/core-tools/agent-tool-bootstrap.d.ts +12 -0
  126. package/dist/cli/core-tools/agent-tool-bootstrap.js +5 -0
  127. package/dist/cli/core-tools/agent-tool-service.background.test.d.ts +1 -0
  128. package/dist/cli/core-tools/agent-tool-service.background.test.js +212 -0
  129. package/dist/cli/core-tools/agent-tool-service.d.ts +36 -0
  130. package/dist/cli/core-tools/agent-tool-service.js +152 -0
  131. package/dist/cli/core-tools/checkpoint-tool-bootstrap.d.ts +9 -0
  132. package/dist/cli/core-tools/checkpoint-tool-bootstrap.js +8 -0
  133. package/dist/cli/core-tools/checkpoint-tool-service.d.ts +7 -0
  134. package/dist/cli/core-tools/checkpoint-tool-service.js +5 -0
  135. package/dist/cli/core-tools/config-tool-bootstrap.d.ts +5 -0
  136. package/dist/cli/core-tools/config-tool-bootstrap.js +5 -0
  137. package/dist/cli/core-tools/config-tool-service.d.ts +11 -0
  138. package/dist/cli/core-tools/config-tool-service.js +86 -0
  139. package/dist/cli/core-tools/config-tool-service.test.d.ts +1 -0
  140. package/dist/cli/core-tools/config-tool-service.test.js +69 -0
  141. package/dist/cli/core-tools/cron-tool-bootstrap.d.ts +8 -0
  142. package/dist/cli/core-tools/cron-tool-bootstrap.js +8 -0
  143. package/dist/cli/core-tools/cron-workflow-service.d.ts +7 -0
  144. package/dist/cli/core-tools/cron-workflow-service.js +206 -0
  145. package/dist/cli/core-tools/cron-workflow-service.test.d.ts +1 -0
  146. package/dist/cli/core-tools/cron-workflow-service.test.js +78 -0
  147. package/dist/cli/core-tools/fork-system-prompt.d.ts +45 -0
  148. package/dist/cli/core-tools/fork-system-prompt.js +66 -0
  149. package/dist/cli/core-tools/fork-system-prompt.test.d.ts +1 -0
  150. package/dist/cli/core-tools/fork-system-prompt.test.js +77 -0
  151. package/dist/cli/core-tools/monitor-tool-bootstrap.d.ts +7 -0
  152. package/dist/cli/core-tools/monitor-tool-bootstrap.js +8 -0
  153. package/dist/cli/core-tools/monitor-tool-service.d.ts +6 -0
  154. package/dist/cli/core-tools/monitor-tool-service.js +74 -0
  155. package/dist/cli/core-tools/registry.d.ts +8 -0
  156. package/dist/cli/core-tools/registry.js +60 -0
  157. package/dist/cli/core-tools/session-tool-manifest.d.ts +12 -0
  158. package/dist/cli/core-tools/session-tool-manifest.js +19 -0
  159. package/dist/cli/core-tools/team-registry.d.ts +62 -0
  160. package/dist/cli/core-tools/team-registry.js +85 -0
  161. package/dist/cli/core-tools/team-registry.test.d.ts +1 -0
  162. package/dist/cli/core-tools/team-registry.test.js +79 -0
  163. package/dist/cli/core-tools/team-tool-bootstrap.d.ts +11 -0
  164. package/dist/cli/core-tools/team-tool-bootstrap.js +8 -0
  165. package/dist/cli/core-tools/team-tool-service.d.ts +43 -0
  166. package/dist/cli/core-tools/team-tool-service.js +326 -0
  167. package/dist/cli/core-tools/team-tool-service.test.d.ts +1 -0
  168. package/dist/cli/core-tools/team-tool-service.test.js +48 -0
  169. package/dist/cli/credential-vault.d.ts +62 -0
  170. package/dist/cli/credential-vault.js +190 -0
  171. package/dist/cli/credential-vault.test.d.ts +6 -0
  172. package/dist/cli/credential-vault.test.js +130 -0
  173. package/dist/cli/default-project-bootstrap.d.ts +8 -0
  174. package/dist/cli/default-project-bootstrap.js +39 -0
  175. package/dist/cli/dev-tool-bootstrap.d.ts +8 -0
  176. package/dist/cli/dev-tool-bootstrap.js +19 -0
  177. package/dist/cli/dev-tools/dev-tool-bootstrap-service.d.ts +6 -0
  178. package/dist/cli/dev-tools/dev-tool-bootstrap-service.js +6 -0
  179. package/dist/cli/dev-tools/dev-tool-registry.d.ts +6 -0
  180. package/dist/cli/dev-tools/dev-tool-registry.js +7 -0
  181. package/dist/cli/dev-tools/lsp-tool-service.d.ts +5 -0
  182. package/dist/cli/dev-tools/lsp-tool-service.js +30 -0
  183. package/dist/cli/dev-tools/lsp-tool-service.test.d.ts +1 -0
  184. package/dist/cli/dev-tools/lsp-tool-service.test.js +14 -0
  185. package/dist/cli/dream-host-adapter.d.ts +23 -0
  186. package/dist/cli/dream-host-adapter.js +33 -0
  187. package/dist/cli/gateway-rpc-connection.d.ts +50 -0
  188. package/dist/cli/gateway-rpc-connection.js +133 -0
  189. package/dist/cli/handlers/agents-handler.d.ts +51 -0
  190. package/dist/cli/handlers/agents-handler.js +769 -0
  191. package/dist/cli/handlers/community-handler.d.ts +39 -0
  192. package/dist/cli/handlers/community-handler.js +671 -0
  193. package/dist/cli/handlers/community-handler.test.d.ts +1 -0
  194. package/dist/cli/handlers/community-handler.test.js +1602 -0
  195. package/dist/cli/handlers/config-handler.d.ts +28 -0
  196. package/dist/cli/handlers/config-handler.js +438 -0
  197. package/dist/cli/handlers/config-handler.test.d.ts +1 -0
  198. package/dist/cli/handlers/config-handler.test.js +140 -0
  199. package/dist/cli/handlers/config-handler.tools-list.test.d.ts +1 -0
  200. package/dist/cli/handlers/config-handler.tools-list.test.js +93 -0
  201. package/dist/cli/handlers/control-handler.d.ts +23 -0
  202. package/dist/cli/handlers/control-handler.js +88 -0
  203. package/dist/cli/handlers/dream-handler.d.ts +31 -0
  204. package/dist/cli/handlers/dream-handler.js +235 -0
  205. package/dist/cli/handlers/files-handler.d.ts +22 -0
  206. package/dist/cli/handlers/files-handler.instructions.test.d.ts +1 -0
  207. package/dist/cli/handlers/files-handler.instructions.test.js +127 -0
  208. package/dist/cli/handlers/files-handler.js +593 -0
  209. package/dist/cli/handlers/media-handler.d.ts +19 -0
  210. package/dist/cli/handlers/media-handler.js +212 -0
  211. package/dist/cli/handlers/media-handler.test.d.ts +1 -0
  212. package/dist/cli/handlers/media-handler.test.js +107 -0
  213. package/dist/cli/handlers/memory-handler.d.ts +61 -0
  214. package/dist/cli/handlers/memory-handler.js +792 -0
  215. package/dist/cli/handlers/pet-confirm-handler.d.ts +7 -0
  216. package/dist/cli/handlers/pet-confirm-handler.js +6 -0
  217. package/dist/cli/handlers/pet-handler.d.ts +47 -0
  218. package/dist/cli/handlers/pet-handler.js +455 -0
  219. package/dist/cli/handlers/pet-handler.test.d.ts +1 -0
  220. package/dist/cli/handlers/pet-handler.test.js +620 -0
  221. package/dist/cli/handlers/product-handler.d.ts +37 -0
  222. package/dist/cli/handlers/product-handler.js +393 -0
  223. package/dist/cli/handlers/project-handler.d.ts +28 -0
  224. package/dist/cli/handlers/project-handler.js +421 -0
  225. package/dist/cli/handlers/session-handler.channel.test.d.ts +1 -0
  226. package/dist/cli/handlers/session-handler.channel.test.js +157 -0
  227. package/dist/cli/handlers/session-handler.d.ts +58 -0
  228. package/dist/cli/handlers/session-handler.delete.test.d.ts +1 -0
  229. package/dist/cli/handlers/session-handler.delete.test.js +38 -0
  230. package/dist/cli/handlers/session-handler.js +833 -0
  231. package/dist/cli/handlers/session-handler.resume.test.d.ts +1 -0
  232. package/dist/cli/handlers/session-handler.resume.test.js +66 -0
  233. package/dist/cli/handlers/settings-handler.d.ts +19 -0
  234. package/dist/cli/handlers/settings-handler.js +710 -0
  235. package/dist/cli/handlers/settings-handler.remote-catalog.test.d.ts +1 -0
  236. package/dist/cli/handlers/settings-handler.remote-catalog.test.js +1247 -0
  237. package/dist/cli/handlers/skills-handler.d.ts +29 -0
  238. package/dist/cli/handlers/skills-handler.js +368 -0
  239. package/dist/cli/handlers/skills-handler.profile.test.d.ts +1 -0
  240. package/dist/cli/handlers/skills-handler.profile.test.js +70 -0
  241. package/dist/cli/handlers/solo-handler.d.ts +38 -0
  242. package/dist/cli/handlers/solo-handler.js +351 -0
  243. package/dist/cli/handlers/turn-handler.d.ts +52 -0
  244. package/dist/cli/handlers/turn-handler.js +574 -0
  245. package/dist/cli/handlers/turn-handler.test.d.ts +1 -0
  246. package/dist/cli/handlers/turn-handler.test.js +22 -0
  247. package/dist/cli/handlers/workflow-handler.d.ts +181 -0
  248. package/dist/cli/handlers/workflow-handler.events.test.d.ts +1 -0
  249. package/dist/cli/handlers/workflow-handler.events.test.js +113 -0
  250. package/dist/cli/handlers/workflow-handler.js +1449 -0
  251. package/dist/cli/handlers/workflow-handler.multiroot.test.d.ts +12 -0
  252. package/dist/cli/handlers/workflow-handler.multiroot.test.js +745 -0
  253. package/dist/cli/idle-dream-coordinator.d.ts +47 -0
  254. package/dist/cli/idle-dream-coordinator.js +126 -0
  255. package/dist/cli/idle-dream-coordinator.test.d.ts +1 -0
  256. package/dist/cli/idle-dream-coordinator.test.js +125 -0
  257. package/dist/cli/main.d.ts +15 -0
  258. package/dist/cli/main.js +112 -0
  259. package/dist/cli/mcp-bootstrap.d.ts +20 -0
  260. package/dist/cli/mcp-bootstrap.js +66 -0
  261. package/dist/cli/mcp-plugin-bootstrap.d.ts +2 -0
  262. package/dist/cli/mcp-plugin-bootstrap.js +2 -0
  263. package/dist/cli/mcp-plugin-bootstrap.test.d.ts +1 -0
  264. package/dist/cli/mcp-plugin-bootstrap.test.js +38 -0
  265. package/dist/cli/mcp-tool-proxy.d.ts +7 -0
  266. package/dist/cli/mcp-tool-proxy.js +15 -0
  267. package/dist/cli/media-capability-schema.d.ts +49 -0
  268. package/dist/cli/media-capability-schema.js +384 -0
  269. package/dist/cli/media-capability-schema.test.d.ts +1 -0
  270. package/dist/cli/media-capability-schema.test.js +103 -0
  271. package/dist/cli/media-file-api-service.d.ts +73 -0
  272. package/dist/cli/media-file-api-service.js +143 -0
  273. package/dist/cli/media-file-api-service.test.d.ts +1 -0
  274. package/dist/cli/media-file-api-service.test.js +119 -0
  275. package/dist/cli/media-file-tool-service.d.ts +13 -0
  276. package/dist/cli/media-file-tool-service.js +63 -0
  277. package/dist/cli/media-runtime-capability.test.d.ts +1 -0
  278. package/dist/cli/media-runtime-capability.test.js +106 -0
  279. package/dist/cli/media-runtime-facade.d.ts +51 -0
  280. package/dist/cli/media-runtime-facade.js +389 -0
  281. package/dist/cli/media-runtime-facade.test.d.ts +1 -0
  282. package/dist/cli/media-runtime-facade.test.js +42 -0
  283. package/dist/cli/memory-candidate-service.d.ts +83 -0
  284. package/dist/cli/memory-candidate-service.js +341 -0
  285. package/dist/cli/memory-coordinator.d.ts +37 -0
  286. package/dist/cli/memory-coordinator.js +85 -0
  287. package/dist/cli/memory-coordinator.test.d.ts +1 -0
  288. package/dist/cli/memory-coordinator.test.js +78 -0
  289. package/dist/cli/memory-multimodal.test.d.ts +1 -0
  290. package/dist/cli/memory-multimodal.test.js +137 -0
  291. package/dist/cli/model-client-resolver.d.ts +31 -0
  292. package/dist/cli/model-client-resolver.js +173 -0
  293. package/dist/cli/model-client-resolver.test.d.ts +1 -0
  294. package/dist/cli/model-client-resolver.test.js +105 -0
  295. package/dist/cli/multi-agent-handler-host.d.ts +27 -0
  296. package/dist/cli/multi-agent-handler-host.js +55 -0
  297. package/dist/cli/multi-agent-handler-host.test.d.ts +1 -0
  298. package/dist/cli/multi-agent-handler-host.test.js +63 -0
  299. package/dist/cli/multi-agent-state-coordinator.d.ts +11 -0
  300. package/dist/cli/multi-agent-state-coordinator.js +7 -0
  301. package/dist/cli/permission-approval-bridge.d.ts +15 -0
  302. package/dist/cli/permission-approval-bridge.js +66 -0
  303. package/dist/cli/permission-approval-bridge.test.d.ts +1 -0
  304. package/dist/cli/permission-approval-bridge.test.js +100 -0
  305. package/dist/cli/permission-bootstrap.d.ts +40 -0
  306. package/dist/cli/permission-bootstrap.js +58 -0
  307. package/dist/cli/permission-bootstrap.test.d.ts +1 -0
  308. package/dist/cli/permission-bootstrap.test.js +129 -0
  309. package/dist/cli/permission-runtime-service.d.ts +9 -0
  310. package/dist/cli/permission-runtime-service.js +11 -0
  311. package/dist/cli/permission-settings-store.d.ts +1 -0
  312. package/dist/cli/permission-settings-store.js +3 -0
  313. package/dist/cli/permission-settings-store.test.d.ts +1 -0
  314. package/dist/cli/permission-settings-store.test.js +65 -0
  315. package/dist/cli/pet-confirm-coordinator.d.ts +20 -0
  316. package/dist/cli/pet-confirm-coordinator.js +32 -0
  317. package/dist/cli/pet-confirm-coordinator.test.d.ts +1 -0
  318. package/dist/cli/pet-confirm-coordinator.test.js +34 -0
  319. package/dist/cli/pet-runtime.d.ts +55 -0
  320. package/dist/cli/pet-runtime.js +220 -0
  321. package/dist/cli/pet-runtime.test.d.ts +1 -0
  322. package/dist/cli/pet-runtime.test.js +46 -0
  323. package/dist/cli/plugin-bootstrap.d.ts +15 -0
  324. package/dist/cli/plugin-bootstrap.js +63 -0
  325. package/dist/cli/product-coordinator.d.ts +34 -0
  326. package/dist/cli/product-coordinator.js +124 -0
  327. package/dist/cli/product-coordinator.test.d.ts +1 -0
  328. package/dist/cli/product-coordinator.test.js +51 -0
  329. package/dist/cli/project-command-service.d.ts +28 -0
  330. package/dist/cli/project-command-service.js +99 -0
  331. package/dist/cli/project-context.d.ts +1 -0
  332. package/dist/cli/project-context.js +4 -0
  333. package/dist/cli/project-memory-store-factory.d.ts +2 -0
  334. package/dist/cli/project-memory-store-factory.js +11 -0
  335. package/dist/cli/project-template-seeder.d.ts +5 -0
  336. package/dist/cli/project-template-seeder.js +43 -0
  337. package/dist/cli/provider-core-facade.d.ts +31 -0
  338. package/dist/cli/provider-core-facade.js +51 -0
  339. package/dist/cli/provider-core-facade.test.d.ts +1 -0
  340. package/dist/cli/provider-core-facade.test.js +9 -0
  341. package/dist/cli/resolved-agent-cache.d.ts +47 -0
  342. package/dist/cli/resolved-agent-cache.js +38 -0
  343. package/dist/cli/rpc-registry.community.test.d.ts +1 -0
  344. package/dist/cli/rpc-registry.community.test.js +45 -0
  345. package/dist/cli/rpc-registry.d.ts +62 -0
  346. package/dist/cli/rpc-registry.js +243 -0
  347. package/dist/cli/runtime-dependency-catalog.d.ts +56 -0
  348. package/dist/cli/runtime-dependency-catalog.js +110 -0
  349. package/dist/cli/runtime-hook-bootstrap.d.ts +38 -0
  350. package/dist/cli/runtime-hook-bootstrap.js +71 -0
  351. package/dist/cli/runtime-watcher-bootstrap.d.ts +15 -0
  352. package/dist/cli/runtime-watcher-bootstrap.js +30 -0
  353. package/dist/cli/session-context.d.ts +32 -0
  354. package/dist/cli/session-context.js +15 -0
  355. package/dist/cli/session-coordinator.d.ts +22 -0
  356. package/dist/cli/session-coordinator.js +47 -0
  357. package/dist/cli/session-coordinator.test.d.ts +1 -0
  358. package/dist/cli/session-coordinator.test.js +61 -0
  359. package/dist/cli/session-history-coordinator.d.ts +8 -0
  360. package/dist/cli/session-history-coordinator.js +57 -0
  361. package/dist/cli/session-history-coordinator.test.d.ts +1 -0
  362. package/dist/cli/session-history-coordinator.test.js +39 -0
  363. package/dist/cli/session-query-service.d.ts +24 -0
  364. package/dist/cli/session-query-service.js +57 -0
  365. package/dist/cli/skill-meta-subturn-service.d.ts +26 -0
  366. package/dist/cli/skill-meta-subturn-service.js +93 -0
  367. package/dist/cli/skill-meta-tool-bootstrap.d.ts +34 -0
  368. package/dist/cli/skill-meta-tool-bootstrap.js +295 -0
  369. package/dist/cli/skill-meta-tool-bootstrap.test.d.ts +1 -0
  370. package/dist/cli/skill-meta-tool-bootstrap.test.js +42 -0
  371. package/dist/cli/skill-supporting-file.test.d.ts +1 -0
  372. package/dist/cli/skill-supporting-file.test.js +97 -0
  373. package/dist/cli/skills-query-service.d.ts +29 -0
  374. package/dist/cli/skills-query-service.js +38 -0
  375. package/dist/cli/stdio-acp-protocol-coordinator.d.ts +18 -0
  376. package/dist/cli/stdio-acp-protocol-coordinator.js +33 -0
  377. package/dist/cli/stdio-acp-request-host.d.ts +28 -0
  378. package/dist/cli/stdio-acp-request-host.js +82 -0
  379. package/dist/cli/stdio-acp-request-host.test.d.ts +1 -0
  380. package/dist/cli/stdio-acp-request-host.test.js +61 -0
  381. package/dist/cli/stdio-agent-session-bootstrap.d.ts +80 -0
  382. package/dist/cli/stdio-agent-session-bootstrap.js +74 -0
  383. package/dist/cli/stdio-rpc-handler-hosts.d.ts +50 -0
  384. package/dist/cli/stdio-rpc-handler-hosts.js +135 -0
  385. package/dist/cli/stdio-rpc-handler-hosts.test.d.ts +1 -0
  386. package/dist/cli/stdio-rpc-handler-hosts.test.js +10 -0
  387. package/dist/cli/stdio-runtime-bootstrap.d.ts +16 -0
  388. package/dist/cli/stdio-runtime-bootstrap.js +17 -0
  389. package/dist/cli/stdio-runtime-services.d.ts +36 -0
  390. package/dist/cli/stdio-runtime-services.js +53 -0
  391. package/dist/cli/stdio-server.architecture.test.d.ts +1 -0
  392. package/dist/cli/stdio-server.architecture.test.js +18 -0
  393. package/dist/cli/stdio-server.contract.test.d.ts +1 -0
  394. package/dist/cli/stdio-server.contract.test.js +96 -0
  395. package/dist/cli/stdio-server.d.ts +211 -0
  396. package/dist/cli/stdio-server.js +731 -0
  397. package/dist/cli/stdio-session-runtime-coordinator.d.ts +19 -0
  398. package/dist/cli/stdio-session-runtime-coordinator.js +21 -0
  399. package/dist/cli/test-support/tool-catalog-fixture.d.ts +3 -0
  400. package/dist/cli/test-support/tool-catalog-fixture.js +98 -0
  401. package/dist/cli/tool-bootstrap-core-registration.d.ts +30 -0
  402. package/dist/cli/tool-bootstrap-core-registration.js +555 -0
  403. package/dist/cli/tool-bootstrap-media-registration.d.ts +8 -0
  404. package/dist/cli/tool-bootstrap-media-registration.js +348 -0
  405. package/dist/cli/tool-bootstrap-paths.d.ts +7 -0
  406. package/dist/cli/tool-bootstrap-paths.js +17 -0
  407. package/dist/cli/tool-bootstrap-providers.d.ts +3 -0
  408. package/dist/cli/tool-bootstrap-providers.js +10 -0
  409. package/dist/cli/tool-bootstrap-web-registration.d.ts +13 -0
  410. package/dist/cli/tool-bootstrap-web-registration.js +144 -0
  411. package/dist/cli/tool-bootstrap-workflow-registration.d.ts +7 -0
  412. package/dist/cli/tool-bootstrap-workflow-registration.js +65 -0
  413. package/dist/cli/tool-bootstrap.background-exec.test.d.ts +1 -0
  414. package/dist/cli/tool-bootstrap.background-exec.test.js +83 -0
  415. package/dist/cli/tool-bootstrap.cwd.test.d.ts +1 -0
  416. package/dist/cli/tool-bootstrap.cwd.test.js +37 -0
  417. package/dist/cli/tool-bootstrap.d.ts +63 -0
  418. package/dist/cli/tool-bootstrap.instructions.test.d.ts +1 -0
  419. package/dist/cli/tool-bootstrap.instructions.test.js +37 -0
  420. package/dist/cli/tool-bootstrap.js +255 -0
  421. package/dist/cli/tool-bootstrap.media-provider-alias.test.d.ts +1 -0
  422. package/dist/cli/tool-bootstrap.media-provider-alias.test.js +90 -0
  423. package/dist/cli/tool-bootstrap.test.d.ts +1 -0
  424. package/dist/cli/tool-bootstrap.test.js +94 -0
  425. package/dist/cli/tool-catalog.d.ts +4 -0
  426. package/dist/cli/tool-catalog.js +14 -0
  427. package/dist/cli/tool-invoker-factory.d.ts +12 -0
  428. package/dist/cli/tool-invoker-factory.js +45 -0
  429. package/dist/cli/tool-registration-modules.contract.test.d.ts +1 -0
  430. package/dist/cli/tool-registration-modules.contract.test.js +75 -0
  431. package/dist/cli/tool-registry-adapter.d.ts +5 -0
  432. package/dist/cli/tool-registry-adapter.js +27 -0
  433. package/dist/cli/tool-result-processor.d.ts +14 -0
  434. package/dist/cli/tool-result-processor.js +83 -0
  435. package/dist/cli/tool-result-processor.test.d.ts +1 -0
  436. package/dist/cli/tool-result-processor.test.js +69 -0
  437. package/dist/cli/transport.d.ts +30 -0
  438. package/dist/cli/transport.js +68 -0
  439. package/dist/cli/tunable-store.d.ts +26 -0
  440. package/dist/cli/tunable-store.js +105 -0
  441. package/dist/cli/turn-ask-user-setup.d.ts +24 -0
  442. package/dist/cli/turn-ask-user-setup.js +46 -0
  443. package/dist/cli/turn-ask-user-setup.test.d.ts +1 -0
  444. package/dist/cli/turn-ask-user-setup.test.js +39 -0
  445. package/dist/cli/turn-core.d.ts +57 -0
  446. package/dist/cli/turn-core.js +58 -0
  447. package/dist/cli/turn-event-forwarder.d.ts +10 -0
  448. package/dist/cli/turn-event-forwarder.js +136 -0
  449. package/dist/cli/turn-lifecycle.d.ts +19 -0
  450. package/dist/cli/turn-lifecycle.js +53 -0
  451. package/dist/cli/turn-lifecycle.test.d.ts +1 -0
  452. package/dist/cli/turn-lifecycle.test.js +32 -0
  453. package/dist/cli/turn-media-setup.d.ts +19 -0
  454. package/dist/cli/turn-media-setup.js +71 -0
  455. package/dist/cli/turn-media-setup.test.d.ts +1 -0
  456. package/dist/cli/turn-media-setup.test.js +280 -0
  457. package/dist/cli/turn-permission-sync.d.ts +6 -0
  458. package/dist/cli/turn-permission-sync.js +7 -0
  459. package/dist/cli/turn-permission-sync.test.d.ts +1 -0
  460. package/dist/cli/turn-permission-sync.test.js +20 -0
  461. package/dist/cli/turn-project-router.d.ts +22 -0
  462. package/dist/cli/turn-project-router.js +141 -0
  463. package/dist/cli/turn-project-router.test.d.ts +1 -0
  464. package/dist/cli/turn-project-router.test.js +79 -0
  465. package/dist/cli/turn-skill-autopersist.d.ts +47 -0
  466. package/dist/cli/turn-skill-autopersist.js +262 -0
  467. package/dist/cli/turn-skill-autopersist.test.d.ts +1 -0
  468. package/dist/cli/turn-skill-autopersist.test.js +222 -0
  469. package/dist/cli/turn-suggestion-generator.d.ts +15 -0
  470. package/dist/cli/turn-suggestion-generator.js +34 -0
  471. package/dist/cli/workflow-host-adapter.d.ts +29 -0
  472. package/dist/cli/workflow-host-adapter.js +15 -0
  473. package/dist/cli/workflow-host-adapter.test.d.ts +1 -0
  474. package/dist/cli/workflow-host-adapter.test.js +35 -0
  475. package/dist/cli.js +312 -308
  476. package/dist/config/config.d.ts +17 -0
  477. package/dist/config/config.js +21 -0
  478. package/dist/contracts/fire-hook.d.ts +14 -0
  479. package/dist/contracts/fire-hook.js +14 -0
  480. package/dist/contracts/fire-hook.test.d.ts +1 -0
  481. package/dist/contracts/fire-hook.test.js +34 -0
  482. package/dist/contracts/hooks.d.ts +186 -0
  483. package/dist/contracts/hooks.js +7 -0
  484. package/dist/contracts/index.d.ts +4 -0
  485. package/dist/contracts/index.js +4 -0
  486. package/dist/index.d.ts +15 -0
  487. package/dist/index.js +15 -1265
  488. package/dist/orchestration/agent-instance.d.ts +84 -0
  489. package/dist/orchestration/agent-instance.js +535 -0
  490. package/dist/orchestration/context/context-collapse.d.ts +58 -0
  491. package/dist/orchestration/context/context-collapse.js +134 -0
  492. package/dist/orchestration/context/reactive-compact.d.ts +73 -0
  493. package/dist/orchestration/context/reactive-compact.js +78 -0
  494. package/dist/orchestration/context/turn-loop-guard.d.ts +86 -0
  495. package/dist/orchestration/context/turn-loop-guard.js +100 -0
  496. package/dist/orchestration/dag-scheduler.d.ts +167 -0
  497. package/dist/orchestration/dag-scheduler.js +546 -0
  498. package/dist/orchestration/error-handling/error-classification.d.ts +3 -0
  499. package/dist/orchestration/error-handling/error-classification.js +35 -0
  500. package/dist/orchestration/error-handling/failover-classification.d.ts +8 -0
  501. package/dist/orchestration/error-handling/failover-classification.js +381 -0
  502. package/dist/orchestration/error-handling/retry-loop.d.ts +69 -0
  503. package/dist/orchestration/error-handling/retry-loop.js +96 -0
  504. package/dist/orchestration/index.d.ts +15 -0
  505. package/dist/orchestration/index.js +18 -0
  506. package/dist/orchestration/product-budget.d.ts +56 -0
  507. package/dist/orchestration/product-budget.js +112 -0
  508. package/dist/orchestration/product-checkpoint.d.ts +46 -0
  509. package/dist/orchestration/product-checkpoint.js +74 -0
  510. package/dist/orchestration/product-dag-mutation-applier.d.ts +10 -0
  511. package/dist/orchestration/product-dag-mutation-applier.js +91 -0
  512. package/dist/orchestration/product-persistence.d.ts +35 -0
  513. package/dist/orchestration/product-persistence.js +55 -0
  514. package/dist/orchestration/product-planner.d.ts +146 -0
  515. package/dist/orchestration/product-planner.js +379 -0
  516. package/dist/orchestration/product-run-coordinator.d.ts +31 -0
  517. package/dist/orchestration/product-run-coordinator.js +31 -0
  518. package/dist/orchestration/product-worktree.d.ts +12 -0
  519. package/dist/orchestration/product-worktree.js +69 -0
  520. package/dist/orchestration/skill-improvement.d.ts +129 -0
  521. package/dist/orchestration/skill-improvement.js +243 -0
  522. package/dist/orchestration/solo-evaluator.d.ts +124 -0
  523. package/dist/orchestration/solo-evaluator.js +611 -0
  524. package/dist/orchestration/solo-persistence.d.ts +48 -0
  525. package/dist/orchestration/solo-persistence.js +67 -0
  526. package/dist/orchestration/solo-spec-builder.d.ts +48 -0
  527. package/dist/orchestration/solo-spec-builder.js +139 -0
  528. package/dist/orchestration/subagent/agent-registry.d.ts +46 -0
  529. package/dist/orchestration/subagent/agent-registry.js +129 -0
  530. package/dist/orchestration/subagent/fork-subagent.d.ts +100 -0
  531. package/dist/orchestration/subagent/fork-subagent.js +101 -0
  532. package/dist/orchestration/subagent/task-types.d.ts +1 -0
  533. package/dist/orchestration/subagent/task-types.js +1 -0
  534. package/dist/orchestration/tool-cascade.d.ts +49 -0
  535. package/dist/orchestration/tool-cascade.js +86 -0
  536. package/dist/orchestration/tool-loop/conversation-repair.d.ts +61 -0
  537. package/dist/orchestration/tool-loop/conversation-repair.js +429 -0
  538. package/dist/orchestration/tool-loop/tool-choice-policy.d.ts +54 -0
  539. package/dist/orchestration/tool-loop/tool-choice-policy.js +164 -0
  540. package/dist/orchestration/tool-loop/tool-loop-state.d.ts +50 -0
  541. package/dist/orchestration/tool-loop/tool-loop-state.js +133 -0
  542. package/dist/orchestration/tool-loop/tool-schema.d.ts +46 -0
  543. package/dist/orchestration/tool-loop/tool-schema.js +208 -0
  544. package/dist/orchestration/workflow/budget-permission-gate.d.ts +85 -0
  545. package/dist/orchestration/workflow/budget-permission-gate.js +134 -0
  546. package/dist/orchestration/workflow/builtin-executors.d.ts +18 -0
  547. package/dist/orchestration/workflow/builtin-executors.js +191 -0
  548. package/dist/orchestration/workflow/capability-catalog.d.ts +64 -0
  549. package/dist/orchestration/workflow/capability-catalog.js +166 -0
  550. package/dist/orchestration/workflow/cron-schedule.d.ts +37 -0
  551. package/dist/orchestration/workflow/cron-schedule.js +199 -0
  552. package/dist/orchestration/workflow/data-item.d.ts +39 -0
  553. package/dist/orchestration/workflow/data-item.js +52 -0
  554. package/dist/orchestration/workflow/expression.d.ts +60 -0
  555. package/dist/orchestration/workflow/expression.js +474 -0
  556. package/dist/orchestration/workflow/host-executors.d.ts +15 -0
  557. package/dist/orchestration/workflow/host-executors.js +207 -0
  558. package/dist/orchestration/workflow/n8n-expression.d.ts +48 -0
  559. package/dist/orchestration/workflow/n8n-expression.js +95 -0
  560. package/dist/orchestration/workflow/n8n-import.d.ts +68 -0
  561. package/dist/orchestration/workflow/n8n-import.js +319 -0
  562. package/dist/orchestration/workflow/node-registry.d.ts +19 -0
  563. package/dist/orchestration/workflow/node-registry.js +45 -0
  564. package/dist/orchestration/workflow/node-schema.d.ts +232 -0
  565. package/dist/orchestration/workflow/node-schema.js +29 -0
  566. package/dist/orchestration/workflow/qla-executor-host.d.ts +77 -0
  567. package/dist/orchestration/workflow/qla-executor-host.js +124 -0
  568. package/dist/orchestration/workflow/run-checkpoint-store.d.ts +53 -0
  569. package/dist/orchestration/workflow/run-checkpoint-store.js +59 -0
  570. package/dist/orchestration/workflow/run-history-store.d.ts +65 -0
  571. package/dist/orchestration/workflow/run-history-store.js +104 -0
  572. package/dist/orchestration/workflow/trigger-validation.d.ts +22 -0
  573. package/dist/orchestration/workflow/trigger-validation.js +241 -0
  574. package/dist/orchestration/workflow/workflow-audit-store.d.ts +31 -0
  575. package/dist/orchestration/workflow/workflow-audit-store.js +55 -0
  576. package/dist/orchestration/workflow/workflow-bundle.d.ts +65 -0
  577. package/dist/orchestration/workflow/workflow-bundle.js +168 -0
  578. package/dist/orchestration/workflow/workflow-controller.d.ts +219 -0
  579. package/dist/orchestration/workflow/workflow-controller.js +522 -0
  580. package/dist/orchestration/workflow/workflow-patch.d.ts +116 -0
  581. package/dist/orchestration/workflow/workflow-patch.js +369 -0
  582. package/dist/orchestration/workflow/workflow-render.d.ts +41 -0
  583. package/dist/orchestration/workflow/workflow-render.js +108 -0
  584. package/dist/orchestration/workflow/workflow-runtime.d.ts +171 -0
  585. package/dist/orchestration/workflow/workflow-runtime.js +474 -0
  586. package/dist/orchestration/workflow/workflow-scheduler.d.ts +111 -0
  587. package/dist/orchestration/workflow/workflow-scheduler.js +230 -0
  588. package/dist/orchestration/workflow/workflow-service.d.ts +14 -0
  589. package/dist/orchestration/workflow/workflow-service.js +18 -0
  590. package/dist/orchestration/workflow/workflow-store.d.ts +81 -0
  591. package/dist/orchestration/workflow/workflow-store.js +123 -0
  592. package/dist/orchestration/workflow/workflow-trigger.d.ts +35 -0
  593. package/dist/orchestration/workflow/workflow-trigger.js +1 -0
  594. package/dist/orchestration/workflow-chat-builder.d.ts +57 -0
  595. package/dist/orchestration/workflow-chat-builder.js +202 -0
  596. package/dist/permissions.d.ts +2 -0
  597. package/dist/permissions.js +1 -1
  598. package/dist/permissions.public-api.test.d.ts +1 -0
  599. package/dist/permissions.public-api.test.js +32 -0
  600. package/dist/pet-contracts.d.ts +1 -0
  601. package/dist/pet-contracts.js +1 -1
  602. package/dist/protocol/index.d.ts +7 -0
  603. package/dist/protocol/index.js +7 -0
  604. package/dist/protocol/methods.d.ts +1190 -0
  605. package/dist/protocol/methods.js +110 -0
  606. package/dist/protocol/notifications.d.ts +9 -0
  607. package/dist/protocol/notifications.js +9 -0
  608. package/dist/protocol/wire/acp-agent-management.d.ts +456 -0
  609. package/dist/protocol/wire/acp-agent-management.js +7 -0
  610. package/dist/protocol/wire/acp-protocol.d.ts +369 -0
  611. package/dist/protocol/wire/acp-protocol.js +120 -0
  612. package/dist/protocol/wire/agent-events.d.ts +32 -0
  613. package/dist/protocol/wire/agent-events.js +113 -0
  614. package/dist/protocol/wire/agent-methods.d.ts +564 -0
  615. package/dist/protocol/wire/agent-methods.js +11 -0
  616. package/dist/protocol/wire/agent-rpc.d.ts +100 -0
  617. package/dist/protocol/wire/agent-rpc.js +72 -0
  618. package/dist/protocol/wire/capability-manifest.d.ts +112 -0
  619. package/dist/protocol/wire/capability-manifest.js +149 -0
  620. package/dist/protocol/wire/capability-transport.d.ts +207 -0
  621. package/dist/protocol/wire/capability-transport.js +1 -0
  622. package/dist/protocol/wire/channel-ingress.d.ts +29 -0
  623. package/dist/protocol/wire/channel-ingress.js +1 -0
  624. package/dist/protocol/wire/channel.d.ts +89 -0
  625. package/dist/protocol/wire/channel.js +1 -0
  626. package/dist/protocol/wire/chat-types.d.ts +106 -0
  627. package/dist/protocol/wire/chat-types.js +7 -0
  628. package/dist/protocol/wire/checkpoint-runtime.d.ts +61 -0
  629. package/dist/protocol/wire/checkpoint-runtime.js +499 -0
  630. package/dist/protocol/wire/checkpoint.d.ts +72 -0
  631. package/dist/protocol/wire/checkpoint.js +12 -0
  632. package/dist/protocol/wire/execution.d.ts +391 -0
  633. package/dist/protocol/wire/execution.js +1 -0
  634. package/dist/protocol/wire/gateway-contract.d.ts +61 -0
  635. package/dist/protocol/wire/gateway-contract.js +236 -0
  636. package/dist/protocol/wire/gateway-contract.test.d.ts +1 -0
  637. package/dist/protocol/wire/gateway-contract.test.js +123 -0
  638. package/dist/protocol/wire/gateway-rpc.d.ts +652 -0
  639. package/dist/protocol/wire/gateway-rpc.js +58 -0
  640. package/dist/protocol/wire/gateway.d.ts +62 -0
  641. package/dist/protocol/wire/gateway.js +1 -0
  642. package/dist/protocol/wire/hook-protocol.d.ts +37 -0
  643. package/dist/protocol/wire/hook-protocol.js +2 -0
  644. package/dist/protocol/wire/index.d.ts +28 -0
  645. package/dist/protocol/wire/index.js +27 -0
  646. package/dist/protocol/wire/memory-provider-lifecycle.d.ts +82 -0
  647. package/dist/protocol/wire/memory-provider-lifecycle.js +24 -0
  648. package/dist/protocol/wire/notification-payloads.d.ts +918 -0
  649. package/dist/protocol/wire/notification-payloads.js +13 -0
  650. package/dist/protocol/wire/pet-contracts.d.ts +76 -0
  651. package/dist/protocol/wire/pet-contracts.js +23 -0
  652. package/dist/protocol/wire/provider-runtime-contract.d.ts +66 -0
  653. package/dist/protocol/wire/provider-runtime-contract.js +23 -0
  654. package/dist/protocol/wire/provider-runtime-core.d.ts +147 -0
  655. package/dist/protocol/wire/provider-runtime-core.js +488 -0
  656. package/dist/protocol/wire/provider-runtime-io.d.ts +20 -0
  657. package/dist/protocol/wire/provider-runtime-io.js +57 -0
  658. package/dist/protocol/wire/resource-manifest.d.ts +68 -0
  659. package/dist/protocol/wire/resource-manifest.js +174 -0
  660. package/dist/protocol/wire/session.d.ts +32 -0
  661. package/dist/protocol/wire/session.js +1 -0
  662. package/dist/protocol/wire/thread-protocol.d.ts +145 -0
  663. package/dist/protocol/wire/thread-protocol.js +13 -0
  664. package/dist/protocol/wire/transport.d.ts +57 -0
  665. package/dist/protocol/wire/transport.js +1 -0
  666. package/dist/protocol/wire/turn.d.ts +208 -0
  667. package/dist/protocol/wire/turn.js +1 -0
  668. package/dist/protocol/wire/web-capability.d.ts +54 -0
  669. package/dist/protocol/wire/web-capability.js +52 -0
  670. package/dist/runtime/community/community-consent-client.d.ts +142 -0
  671. package/dist/runtime/community/community-consent-client.js +381 -0
  672. package/dist/runtime/community/community-consent-client.test.d.ts +1 -0
  673. package/dist/runtime/community/community-consent-client.test.js +491 -0
  674. package/dist/runtime/community/community-desensitization-red-team-cli.d.ts +7 -0
  675. package/dist/runtime/community/community-desensitization-red-team-cli.js +43 -0
  676. package/dist/runtime/community/community-desensitization-red-team-cli.test.d.ts +1 -0
  677. package/dist/runtime/community/community-desensitization-red-team-cli.test.js +23 -0
  678. package/dist/runtime/community/community-desensitization.d.ts +29 -0
  679. package/dist/runtime/community/community-desensitization.js +81 -0
  680. package/dist/runtime/community/community-desensitization.test.d.ts +1 -0
  681. package/dist/runtime/community/community-desensitization.test.js +43 -0
  682. package/dist/runtime/community/community-discovery-cache.d.ts +24 -0
  683. package/dist/runtime/community/community-discovery-cache.js +52 -0
  684. package/dist/runtime/community/community-discovery-coordinator.d.ts +33 -0
  685. package/dist/runtime/community/community-discovery-coordinator.js +84 -0
  686. package/dist/runtime/community/community-discovery-coordinator.test.d.ts +1 -0
  687. package/dist/runtime/community/community-discovery-coordinator.test.js +97 -0
  688. package/dist/runtime/community/community-pet-publisher.d.ts +30 -0
  689. package/dist/runtime/community/community-pet-publisher.js +53 -0
  690. package/dist/runtime/community/community-pet-publisher.test.d.ts +1 -0
  691. package/dist/runtime/community/community-pet-publisher.test.js +53 -0
  692. package/dist/runtime/community/community-signal-reporter.d.ts +33 -0
  693. package/dist/runtime/community/community-signal-reporter.js +85 -0
  694. package/dist/runtime/community/community-signal-reporter.test.d.ts +1 -0
  695. package/dist/runtime/community/community-signal-reporter.test.js +100 -0
  696. package/dist/runtime/community/community-telemetry-metadata.d.ts +4 -0
  697. package/dist/runtime/community/community-telemetry-metadata.js +42 -0
  698. package/dist/runtime/community/community-telemetry-recorder.d.ts +6 -0
  699. package/dist/runtime/community/community-telemetry-recorder.js +31 -0
  700. package/dist/runtime/community/community-telemetry-types.d.ts +1 -0
  701. package/dist/runtime/community/community-telemetry-types.js +1 -0
  702. package/dist/runtime/config/tunable-defaults.d.ts +255 -0
  703. package/dist/runtime/config/tunable-defaults.js +293 -0
  704. package/dist/runtime/context/context-compression-strategies.d.ts +301 -0
  705. package/dist/runtime/context/context-compression-strategies.js +860 -0
  706. package/dist/runtime/execution/dream-agent.d.ts +260 -0
  707. package/dist/runtime/execution/dream-agent.js +974 -0
  708. package/dist/runtime/execution/dream-category-context.d.ts +47 -0
  709. package/dist/runtime/execution/dream-category-context.js +226 -0
  710. package/dist/runtime/execution/dream-lock.test.d.ts +1 -0
  711. package/dist/runtime/execution/dream-lock.test.js +54 -0
  712. package/dist/runtime/execution/fork-context.d.ts +14 -0
  713. package/dist/runtime/execution/fork-context.js +20 -0
  714. package/dist/runtime/execution/fork-context.test.d.ts +1 -0
  715. package/dist/runtime/execution/fork-context.test.js +101 -0
  716. package/dist/runtime/execution/forked-agent.d.ts +111 -0
  717. package/dist/runtime/execution/forked-agent.js +172 -0
  718. package/dist/runtime/execution/index.d.ts +7 -0
  719. package/dist/runtime/execution/index.js +8 -0
  720. package/dist/runtime/execution/memory-decay.d.ts +69 -0
  721. package/dist/runtime/execution/memory-decay.js +80 -0
  722. package/dist/runtime/execution/progress-tracker.d.ts +78 -0
  723. package/dist/runtime/execution/progress-tracker.js +107 -0
  724. package/dist/runtime/execution/streaming-tool-executor.d.ts +102 -0
  725. package/dist/runtime/execution/streaming-tool-executor.js +345 -0
  726. package/dist/runtime/execution/streaming-tool-executor.test.d.ts +1 -0
  727. package/dist/runtime/execution/streaming-tool-executor.test.js +49 -0
  728. package/dist/runtime/execution/tool-eligibility.d.ts +36 -0
  729. package/dist/runtime/execution/tool-eligibility.js +94 -0
  730. package/dist/runtime/execution/tool-eligibility.test.d.ts +1 -0
  731. package/dist/runtime/execution/tool-eligibility.test.js +96 -0
  732. package/dist/runtime/execution/tool-result-storage.d.ts +87 -0
  733. package/dist/runtime/execution/tool-result-storage.js +274 -0
  734. package/dist/runtime/hooks/context-compression.d.ts +61 -0
  735. package/dist/runtime/hooks/context-compression.js +334 -0
  736. package/dist/runtime/hooks/hook-registry.d.ts +12 -0
  737. package/dist/runtime/hooks/hook-registry.js +61 -0
  738. package/dist/runtime/hooks/hook-registry.test.d.ts +1 -0
  739. package/dist/runtime/hooks/hook-registry.test.js +51 -0
  740. package/dist/runtime/hooks/index.d.ts +4 -0
  741. package/dist/runtime/hooks/index.js +5 -0
  742. package/dist/runtime/hooks/memory-hooks.d.ts +75 -0
  743. package/dist/runtime/hooks/memory-hooks.js +356 -0
  744. package/dist/runtime/hooks/skill-recall-hooks.d.ts +37 -0
  745. package/dist/runtime/hooks/skill-recall-hooks.js +263 -0
  746. package/dist/runtime/hooks/skill-recall-hooks.test.d.ts +1 -0
  747. package/dist/runtime/hooks/skill-recall-hooks.test.js +52 -0
  748. package/dist/runtime/index.d.ts +5 -0
  749. package/dist/runtime/index.js +13 -0
  750. package/dist/runtime/infra/acp-detector.d.ts +133 -0
  751. package/dist/runtime/infra/acp-detector.js +862 -0
  752. package/dist/runtime/infra/acp-detector.test.d.ts +1 -0
  753. package/dist/runtime/infra/acp-detector.test.js +164 -0
  754. package/dist/runtime/infra/acp-host-handler.d.ts +31 -0
  755. package/dist/runtime/infra/acp-host-handler.js +123 -0
  756. package/dist/runtime/infra/acp-host-handler.test.d.ts +1 -0
  757. package/dist/runtime/infra/acp-host-handler.test.js +64 -0
  758. package/dist/runtime/infra/acp-protocol-adapter.d.ts +146 -0
  759. package/dist/runtime/infra/acp-protocol-adapter.js +382 -0
  760. package/dist/runtime/infra/acp-protocol-adapter.test.d.ts +1 -0
  761. package/dist/runtime/infra/acp-protocol-adapter.test.js +180 -0
  762. package/dist/runtime/infra/acp-usage-tracker.d.ts +46 -0
  763. package/dist/runtime/infra/acp-usage-tracker.js +92 -0
  764. package/dist/runtime/infra/agent-catalog.test.d.ts +1 -0
  765. package/dist/runtime/infra/agent-catalog.test.js +174 -0
  766. package/dist/runtime/infra/agent-config-store.d.ts +30 -0
  767. package/dist/runtime/infra/agent-config-store.js +115 -0
  768. package/dist/runtime/infra/agent-install-runner.d.ts +57 -0
  769. package/dist/runtime/infra/agent-install-runner.js +123 -0
  770. package/dist/runtime/infra/agent-install-runner.test.d.ts +1 -0
  771. package/dist/runtime/infra/agent-install-runner.test.js +103 -0
  772. package/dist/runtime/infra/agent-paths.d.ts +67 -0
  773. package/dist/runtime/infra/agent-paths.js +167 -0
  774. package/dist/runtime/infra/agent-paths.test.d.ts +1 -0
  775. package/dist/runtime/infra/agent-paths.test.js +49 -0
  776. package/dist/runtime/infra/agent-process.d.ts +299 -0
  777. package/dist/runtime/infra/agent-process.js +1318 -0
  778. package/dist/runtime/infra/background-tasks.d.ts +115 -0
  779. package/dist/runtime/infra/background-tasks.js +249 -0
  780. package/dist/runtime/infra/background-tasks.test.d.ts +1 -0
  781. package/dist/runtime/infra/background-tasks.test.js +242 -0
  782. package/dist/runtime/infra/checkpoint-backend.d.ts +8 -0
  783. package/dist/runtime/infra/checkpoint-backend.js +110 -0
  784. package/dist/runtime/infra/cleanup-registry.d.ts +23 -0
  785. package/dist/runtime/infra/cleanup-registry.js +34 -0
  786. package/dist/runtime/infra/default-path-service.d.ts +33 -0
  787. package/dist/runtime/infra/default-path-service.js +76 -0
  788. package/dist/runtime/infra/default-path-service.test.d.ts +1 -0
  789. package/dist/runtime/infra/default-path-service.test.js +31 -0
  790. package/dist/runtime/infra/disk-storage.d.ts +20 -0
  791. package/dist/runtime/infra/disk-storage.js +64 -0
  792. package/dist/runtime/infra/external-agent-approvals.d.ts +41 -0
  793. package/dist/runtime/infra/external-agent-approvals.js +101 -0
  794. package/dist/runtime/infra/external-agent-approvals.test.d.ts +1 -0
  795. package/dist/runtime/infra/external-agent-approvals.test.js +99 -0
  796. package/dist/runtime/infra/external-agent-pool.d.ts +54 -0
  797. package/dist/runtime/infra/external-agent-pool.js +0 -0
  798. package/dist/runtime/infra/external-agent-pool.test.d.ts +1 -0
  799. package/dist/runtime/infra/external-agent-pool.test.js +102 -0
  800. package/dist/runtime/infra/file-watcher.d.ts +72 -0
  801. package/dist/runtime/infra/file-watcher.js +154 -0
  802. package/dist/runtime/infra/index.d.ts +19 -0
  803. package/dist/runtime/infra/index.js +19 -0
  804. package/dist/runtime/infra/key-injection.test.d.ts +1 -0
  805. package/dist/runtime/infra/key-injection.test.js +88 -0
  806. package/dist/runtime/infra/key-pool.d.ts +122 -0
  807. package/dist/runtime/infra/key-pool.js +378 -0
  808. package/dist/runtime/infra/key-pool.test.d.ts +1 -0
  809. package/dist/runtime/infra/key-pool.test.js +36 -0
  810. package/dist/runtime/infra/llmrouter-catalog.d.ts +84 -0
  811. package/dist/runtime/infra/llmrouter-catalog.js +287 -0
  812. package/dist/runtime/infra/llmrouter-catalog.test.d.ts +1 -0
  813. package/dist/runtime/infra/llmrouter-catalog.test.js +80 -0
  814. package/dist/runtime/infra/llmrouter-zero-config.test.d.ts +1 -0
  815. package/dist/runtime/infra/llmrouter-zero-config.test.js +64 -0
  816. package/dist/runtime/infra/mcp-bridge.d.ts +166 -0
  817. package/dist/runtime/infra/mcp-bridge.js +161 -0
  818. package/dist/runtime/infra/media-persistence.d.ts +87 -0
  819. package/dist/runtime/infra/media-persistence.js +278 -0
  820. package/dist/runtime/infra/migrate-project-skills.d.ts +21 -0
  821. package/dist/runtime/infra/migrate-project-skills.js +131 -0
  822. package/dist/runtime/infra/migrate-project-skills.test.d.ts +1 -0
  823. package/dist/runtime/infra/migrate-project-skills.test.js +69 -0
  824. package/dist/runtime/infra/model-id-translator.d.ts +22 -0
  825. package/dist/runtime/infra/model-id-translator.js +74 -0
  826. package/dist/runtime/infra/model-registry.d.ts +148 -0
  827. package/dist/runtime/infra/model-registry.js +529 -0
  828. package/dist/runtime/infra/model-registry.test.d.ts +1 -0
  829. package/dist/runtime/infra/model-registry.test.js +253 -0
  830. package/dist/runtime/infra/process-config-port.d.ts +2 -0
  831. package/dist/runtime/infra/process-config-port.js +5 -0
  832. package/dist/runtime/infra/profile-storage.test.d.ts +1 -0
  833. package/dist/runtime/infra/profile-storage.test.js +41 -0
  834. package/dist/runtime/infra/project-instructions-store.d.ts +30 -0
  835. package/dist/runtime/infra/project-instructions-store.js +124 -0
  836. package/dist/runtime/infra/project-skill-manifest.d.ts +32 -0
  837. package/dist/runtime/infra/project-skill-manifest.js +160 -0
  838. package/dist/runtime/infra/project-skill-manifest.test.d.ts +1 -0
  839. package/dist/runtime/infra/project-skill-manifest.test.js +42 -0
  840. package/dist/runtime/infra/project-store.d.ts +48 -0
  841. package/dist/runtime/infra/project-store.js +284 -0
  842. package/dist/runtime/infra/secure-storage.d.ts +81 -0
  843. package/dist/runtime/infra/secure-storage.js +117 -0
  844. package/dist/runtime/infra/skill-injector.d.ts +59 -0
  845. package/dist/runtime/infra/skill-injector.js +155 -0
  846. package/dist/runtime/infra/skill-injector.test.d.ts +1 -0
  847. package/dist/runtime/infra/skill-injector.test.js +9 -0
  848. package/dist/runtime/infra/skill-resolver.d.ts +51 -0
  849. package/dist/runtime/infra/skill-resolver.js +109 -0
  850. package/dist/runtime/infra/skill-resolver.test.d.ts +1 -0
  851. package/dist/runtime/infra/skill-resolver.test.js +72 -0
  852. package/dist/runtime/infra/task-runtime.d.ts +71 -0
  853. package/dist/runtime/infra/task-runtime.js +181 -0
  854. package/dist/runtime/infra/token-budget.d.ts +92 -0
  855. package/dist/runtime/infra/token-budget.js +170 -0
  856. package/dist/runtime/infra/worktree-backend.d.ts +86 -0
  857. package/dist/runtime/infra/worktree-backend.js +522 -0
  858. package/dist/runtime/memory/categories.d.ts +5 -0
  859. package/dist/runtime/memory/categories.js +4 -0
  860. package/dist/runtime/memory/find-relevant-memories.d.ts +70 -0
  861. package/dist/runtime/memory/find-relevant-memories.js +270 -0
  862. package/dist/runtime/memory/implicit-extraction.d.ts +58 -0
  863. package/dist/runtime/memory/implicit-extraction.js +187 -0
  864. package/dist/runtime/memory/recall-category-filter.d.ts +54 -0
  865. package/dist/runtime/memory/recall-category-filter.js +215 -0
  866. package/dist/runtime/permission-model.d.ts +19 -0
  867. package/dist/runtime/permission-model.js +24 -0
  868. package/dist/runtime/permission-model.test.d.ts +1 -0
  869. package/dist/runtime/permission-model.test.js +32 -0
  870. package/dist/runtime/pet/hatch-pet-runner.d.ts +18 -0
  871. package/dist/runtime/pet/hatch-pet-runner.js +120 -0
  872. package/dist/runtime/pet/hatch-pet-runner.test.d.ts +1 -0
  873. package/dist/runtime/pet/hatch-pet-runner.test.js +28 -0
  874. package/dist/runtime/pet/index.d.ts +18 -0
  875. package/dist/runtime/pet/index.js +9 -0
  876. package/dist/runtime/pet/pet-community-assets.d.ts +13 -0
  877. package/dist/runtime/pet/pet-community-assets.js +106 -0
  878. package/dist/runtime/pet/pet-file-loader.d.ts +5 -0
  879. package/dist/runtime/pet/pet-file-loader.js +11 -0
  880. package/dist/runtime/pet/pet-growth-engine.d.ts +2 -0
  881. package/dist/runtime/pet/pet-growth-engine.js +1 -0
  882. package/dist/runtime/pet/pet-profile-service.d.ts +91 -0
  883. package/dist/runtime/pet/pet-profile-service.js +296 -0
  884. package/dist/runtime/pet/pet-profile-service.test.d.ts +1 -0
  885. package/dist/runtime/pet/pet-profile-service.test.js +171 -0
  886. package/dist/runtime/pet/pet-reaction-engine.d.ts +11 -0
  887. package/dist/runtime/pet/pet-reaction-engine.js +11 -0
  888. package/dist/runtime/pet/pet-reaction-engine.test.d.ts +1 -0
  889. package/dist/runtime/pet/pet-reaction-engine.test.js +12 -0
  890. package/dist/runtime/pet/pet-soul-service.d.ts +21 -0
  891. package/dist/runtime/pet/pet-soul-service.js +63 -0
  892. package/dist/runtime/pet/pet-soul-service.test.d.ts +1 -0
  893. package/dist/runtime/pet/pet-soul-service.test.js +115 -0
  894. package/dist/runtime/pet/pet-types.d.ts +1 -0
  895. package/dist/runtime/pet/pet-types.js +1 -0
  896. package/dist/runtime/pet/petdex-asset.d.ts +32 -0
  897. package/dist/runtime/pet/petdex-asset.js +242 -0
  898. package/dist/runtime/pet/petdex-asset.test.d.ts +1 -0
  899. package/dist/runtime/pet/petdex-asset.test.js +257 -0
  900. package/dist/runtime/pet/petdex-forge-service.d.ts +19 -0
  901. package/dist/runtime/pet/petdex-forge-service.js +820 -0
  902. package/dist/runtime/pet/petdex-forge-service.test.d.ts +1 -0
  903. package/dist/runtime/pet/petdex-forge-service.test.js +142 -0
  904. package/dist/runtime/ports/agent-execution-contracts.d.ts +182 -0
  905. package/dist/runtime/ports/agent-execution-contracts.js +1 -0
  906. package/dist/runtime/ports/agent-runtime-ports.d.ts +76 -0
  907. package/dist/runtime/ports/agent-runtime-ports.js +1 -0
  908. package/dist/runtime/ports/checkpoint-contracts.d.ts +19 -0
  909. package/dist/runtime/ports/checkpoint-contracts.js +1 -0
  910. package/dist/runtime/ports/config-port.d.ts +4 -0
  911. package/dist/runtime/ports/config-port.js +5 -0
  912. package/dist/runtime/ports/index.d.ts +19 -0
  913. package/dist/runtime/ports/index.js +5 -0
  914. package/dist/runtime/ports/memory-provider.d.ts +181 -0
  915. package/dist/runtime/ports/memory-provider.js +1 -0
  916. package/dist/runtime/ports/memory-recall-source.d.ts +3 -0
  917. package/dist/runtime/ports/memory-recall-source.js +1 -0
  918. package/dist/runtime/ports/memory-writer.d.ts +21 -0
  919. package/dist/runtime/ports/memory-writer.js +1 -0
  920. package/dist/runtime/ports/model-transport-contracts.d.ts +125 -0
  921. package/dist/runtime/ports/model-transport-contracts.js +9 -0
  922. package/dist/runtime/ports/path-service.d.ts +31 -0
  923. package/dist/runtime/ports/path-service.js +1 -0
  924. package/dist/runtime/ports/permission-contracts.d.ts +128 -0
  925. package/dist/runtime/ports/permission-contracts.js +5 -0
  926. package/dist/runtime/ports/project-memory-store.d.ts +44 -0
  927. package/dist/runtime/ports/project-memory-store.js +1 -0
  928. package/dist/runtime/ports/source-provider.d.ts +39 -0
  929. package/dist/runtime/ports/source-provider.js +4 -0
  930. package/dist/runtime/ports/tool-call-contracts.d.ts +16 -0
  931. package/dist/runtime/ports/tool-call-contracts.js +13 -0
  932. package/dist/runtime/ports/tool-contracts.d.ts +87 -0
  933. package/dist/runtime/ports/tool-contracts.js +3 -0
  934. package/dist/runtime/ports/tool-risk.d.ts +7 -0
  935. package/dist/runtime/ports/tool-risk.js +16 -0
  936. package/dist/runtime/ports/web-search-contracts.d.ts +21 -0
  937. package/dist/runtime/ports/web-search-contracts.js +1 -0
  938. package/dist/runtime/ports/worktree-contracts.d.ts +22 -0
  939. package/dist/runtime/ports/worktree-contracts.js +1 -0
  940. package/dist/runtime/prompt/environment-context.d.ts +60 -0
  941. package/dist/runtime/prompt/environment-context.js +410 -0
  942. package/dist/runtime/prompt/environment-context.test.d.ts +1 -0
  943. package/dist/runtime/prompt/environment-context.test.js +75 -0
  944. package/dist/runtime/prompt/fresh-workspace-evidence.d.ts +21 -0
  945. package/dist/runtime/prompt/fresh-workspace-evidence.js +224 -0
  946. package/dist/runtime/prompt/fresh-workspace-evidence.test.d.ts +1 -0
  947. package/dist/runtime/prompt/fresh-workspace-evidence.test.js +163 -0
  948. package/dist/runtime/prompt/index.d.ts +5 -0
  949. package/dist/runtime/prompt/index.js +6 -0
  950. package/dist/runtime/prompt/instruction-loader.d.ts +70 -0
  951. package/dist/runtime/prompt/instruction-loader.js +515 -0
  952. package/dist/runtime/prompt/instruction-loader.test.d.ts +1 -0
  953. package/dist/runtime/prompt/instruction-loader.test.js +64 -0
  954. package/dist/runtime/prompt/prompt-policy.d.ts +12 -0
  955. package/dist/runtime/prompt/prompt-policy.js +40 -0
  956. package/dist/runtime/prompt/system-prompt-sections.d.ts +65 -0
  957. package/dist/runtime/prompt/system-prompt-sections.js +93 -0
  958. package/dist/runtime/prompt/task-domain.d.ts +82 -0
  959. package/dist/runtime/prompt/task-domain.js +248 -0
  960. package/dist/runtime/sandbox/index.d.ts +2 -0
  961. package/dist/runtime/sandbox/index.js +2 -0
  962. package/dist/runtime/sandbox/skill-sandbox.d.ts +53 -0
  963. package/dist/runtime/sandbox/skill-sandbox.js +93 -0
  964. package/dist/runtime/sandbox/skill-sandbox.test.d.ts +1 -0
  965. package/dist/runtime/sandbox/skill-sandbox.test.js +172 -0
  966. package/dist/runtime/sandbox/windows-skill-sandbox.d.ts +78 -0
  967. package/dist/runtime/sandbox/windows-skill-sandbox.js +128 -0
  968. package/dist/runtime/session/group-session-split.d.ts +38 -0
  969. package/dist/runtime/session/group-session-split.js +99 -0
  970. package/dist/runtime/session/index.d.ts +4 -0
  971. package/dist/runtime/session/index.js +5 -0
  972. package/dist/runtime/session/session-catalog.d.ts +4 -0
  973. package/dist/runtime/session/session-catalog.js +59 -0
  974. package/dist/runtime/session/session-locator.d.ts +26 -0
  975. package/dist/runtime/session/session-locator.js +91 -0
  976. package/dist/runtime/session/session-locator.test.d.ts +1 -0
  977. package/dist/runtime/session/session-locator.test.js +59 -0
  978. package/dist/runtime/session/session-metadata-store.d.ts +8 -0
  979. package/dist/runtime/session/session-metadata-store.js +167 -0
  980. package/dist/runtime/session/session-paths.d.ts +9 -0
  981. package/dist/runtime/session/session-paths.js +27 -0
  982. package/dist/runtime/session/session-persistence.d.ts +16 -0
  983. package/dist/runtime/session/session-persistence.js +16 -0
  984. package/dist/runtime/session/session-persistence.test.d.ts +1 -0
  985. package/dist/runtime/session/session-persistence.test.js +237 -0
  986. package/dist/runtime/session/session-resume.d.ts +4 -0
  987. package/dist/runtime/session/session-resume.js +60 -0
  988. package/dist/runtime/session/session-schema.d.ts +10 -0
  989. package/dist/runtime/session/session-schema.js +35 -0
  990. package/dist/runtime/session/session-state.d.ts +96 -0
  991. package/dist/runtime/session/session-state.js +180 -0
  992. package/dist/runtime/session/session-summary.d.ts +5 -0
  993. package/dist/runtime/session/session-summary.js +67 -0
  994. package/dist/runtime/session/session-transcript-store.d.ts +13 -0
  995. package/dist/runtime/session/session-transcript-store.js +109 -0
  996. package/dist/runtime/session/session-types.d.ts +77 -0
  997. package/dist/runtime/session/session-types.js +1 -0
  998. package/dist/runtime/session/session-write-queue.d.ts +2 -0
  999. package/dist/runtime/session/session-write-queue.js +48 -0
  1000. package/dist/runtime/tasks/task-types.d.ts +166 -0
  1001. package/dist/runtime/tasks/task-types.js +64 -0
  1002. package/dist/server/search-svc.d.ts +1 -0
  1003. package/dist/server/search-svc.js +113 -0
  1004. package/dist/skills/index.d.ts +6 -0
  1005. package/dist/skills/index.js +5 -0
  1006. package/dist/skills/mcp/index.d.ts +1 -0
  1007. package/dist/skills/mcp/index.js +3 -0
  1008. package/dist/skills/mcp/mcp-manager.d.ts +75 -0
  1009. package/dist/skills/mcp/mcp-manager.js +358 -0
  1010. package/dist/skills/mcp/mcp-tool-metadata.d.ts +18 -0
  1011. package/dist/skills/mcp/mcp-tool-metadata.js +48 -0
  1012. package/dist/skills/memory/categories.d.ts +1 -0
  1013. package/dist/skills/memory/categories.js +1 -0
  1014. package/dist/skills/memory/find-relevant-memories.d.ts +1 -0
  1015. package/dist/skills/memory/find-relevant-memories.js +1 -0
  1016. package/dist/skills/memory/implicit-extraction.d.ts +1 -0
  1017. package/dist/skills/memory/implicit-extraction.js +1 -0
  1018. package/dist/skills/memory/local-embedding.d.ts +80 -0
  1019. package/dist/skills/memory/local-embedding.js +210 -0
  1020. package/dist/skills/memory/local-memory-provider.d.ts +257 -0
  1021. package/dist/skills/memory/local-memory-provider.js +486 -0
  1022. package/dist/skills/memory/local-store-records.d.ts +184 -0
  1023. package/dist/skills/memory/local-store-records.js +1 -0
  1024. package/dist/skills/memory/local-store.d.ts +479 -0
  1025. package/dist/skills/memory/local-store.js +1022 -0
  1026. package/dist/skills/memory/memdir.d.ts +93 -0
  1027. package/dist/skills/memory/memdir.js +530 -0
  1028. package/dist/skills/memory/memory-attachment-store.d.ts +62 -0
  1029. package/dist/skills/memory/memory-attachment-store.js +0 -0
  1030. package/dist/skills/memory/memory-consolidation.d.ts +43 -0
  1031. package/dist/skills/memory/memory-consolidation.js +462 -0
  1032. package/dist/skills/memory/memory-db-path.d.ts +13 -0
  1033. package/dist/skills/memory/memory-db-path.js +27 -0
  1034. package/dist/skills/memory/memory-embedding-config.d.ts +31 -0
  1035. package/dist/skills/memory/memory-embedding-config.js +66 -0
  1036. package/dist/skills/memory/memory-provider-factory.d.ts +33 -0
  1037. package/dist/skills/memory/memory-provider-factory.js +79 -0
  1038. package/dist/skills/memory/memory-tool.d.ts +85 -0
  1039. package/dist/skills/memory/memory-tool.js +326 -0
  1040. package/dist/skills/memory/memory-vector-utils.d.ts +2 -0
  1041. package/dist/skills/memory/memory-vector-utils.js +19 -0
  1042. package/dist/skills/memory/recall-category-filter.d.ts +1 -0
  1043. package/dist/skills/memory/recall-category-filter.js +1 -0
  1044. package/dist/skills/memory/sqlite-memory-mappers.d.ts +6 -0
  1045. package/dist/skills/memory/sqlite-memory-mappers.js +104 -0
  1046. package/dist/skills/memory/sqlite-memory-schema.d.ts +3 -0
  1047. package/dist/skills/memory/sqlite-memory-schema.js +152 -0
  1048. package/dist/skills/permissions/bash-classifier.d.ts +30 -0
  1049. package/dist/skills/permissions/bash-classifier.js +174 -0
  1050. package/dist/skills/permissions/classifier-cache.d.ts +51 -0
  1051. package/dist/skills/permissions/classifier-cache.js +103 -0
  1052. package/dist/skills/permissions/community-sandbox-policy.d.ts +3 -0
  1053. package/dist/skills/permissions/community-sandbox-policy.js +233 -0
  1054. package/dist/skills/permissions/community-sandbox-red-team-cli.d.ts +7 -0
  1055. package/dist/skills/permissions/community-sandbox-red-team-cli.js +43 -0
  1056. package/dist/skills/permissions/community-sandbox-red-team.d.ts +32 -0
  1057. package/dist/skills/permissions/community-sandbox-red-team.js +221 -0
  1058. package/dist/skills/permissions/denial-audit-log.d.ts +52 -0
  1059. package/dist/skills/permissions/denial-audit-log.js +80 -0
  1060. package/dist/skills/permissions/denial-tracking.d.ts +42 -0
  1061. package/dist/skills/permissions/denial-tracking.js +60 -0
  1062. package/dist/skills/permissions/group-security-policy.d.ts +15 -0
  1063. package/dist/skills/permissions/group-security-policy.js +60 -0
  1064. package/dist/skills/permissions/hook-runner.d.ts +120 -0
  1065. package/dist/skills/permissions/hook-runner.js +545 -0
  1066. package/dist/skills/permissions/index.d.ts +13 -0
  1067. package/dist/skills/permissions/index.js +8 -0
  1068. package/dist/skills/permissions/operation-classifier.d.ts +43 -0
  1069. package/dist/skills/permissions/operation-classifier.js +251 -0
  1070. package/dist/skills/permissions/permission-classifier.d.ts +41 -0
  1071. package/dist/skills/permissions/permission-classifier.js +186 -0
  1072. package/dist/skills/permissions/rule-engine.d.ts +49 -0
  1073. package/dist/skills/permissions/rule-engine.js +285 -0
  1074. package/dist/skills/permissions/settings-watcher.d.ts +19 -0
  1075. package/dist/skills/permissions/settings-watcher.js +121 -0
  1076. package/dist/skills/permissions/types.d.ts +2 -0
  1077. package/dist/skills/permissions/types.js +1 -0
  1078. package/dist/skills/plugins/index.d.ts +2 -0
  1079. package/dist/skills/plugins/index.js +3 -0
  1080. package/dist/skills/plugins/plugin-api.d.ts +38 -0
  1081. package/dist/skills/plugins/plugin-api.js +18 -0
  1082. package/dist/skills/plugins/plugin-loader.d.ts +57 -0
  1083. package/dist/skills/plugins/plugin-loader.js +254 -0
  1084. package/dist/skills/plugins/plugin-marketplace.d.ts +61 -0
  1085. package/dist/skills/plugins/plugin-marketplace.js +229 -0
  1086. package/dist/skills/portable-tool.d.ts +165 -0
  1087. package/dist/skills/portable-tool.js +34 -0
  1088. package/dist/skills/skill-system/skill-frontmatter.d.ts +19 -0
  1089. package/dist/skills/skill-system/skill-frontmatter.js +344 -0
  1090. package/dist/skills/skill-system/skill-guard.d.ts +23 -0
  1091. package/dist/skills/skill-system/skill-guard.js +229 -0
  1092. package/dist/skills/skill-system/skill-lifecycle.d.ts +93 -0
  1093. package/dist/skills/skill-system/skill-lifecycle.js +236 -0
  1094. package/dist/skills/skill-system/skill-source.d.ts +38 -0
  1095. package/dist/skills/skill-system/skill-source.js +75 -0
  1096. package/dist/skills/skill-system/skill-types.d.ts +140 -0
  1097. package/dist/skills/skill-system/skill-types.js +6 -0
  1098. package/dist/skills/skill-system/skill-validation.d.ts +29 -0
  1099. package/dist/skills/skill-system/skill-validation.js +154 -0
  1100. package/dist/skills/tool-access.d.ts +30 -0
  1101. package/dist/skills/tool-access.js +58 -0
  1102. package/dist/skills/tools/agent-tool.d.ts +102 -0
  1103. package/dist/skills/tools/agent-tool.js +159 -0
  1104. package/dist/skills/tools/ask-user-tool.d.ts +80 -0
  1105. package/dist/skills/tools/ask-user-tool.js +121 -0
  1106. package/dist/skills/tools/brief-tool.d.ts +74 -0
  1107. package/dist/skills/tools/brief-tool.js +95 -0
  1108. package/dist/skills/tools/browser-tool.d.ts +114 -0
  1109. package/dist/skills/tools/browser-tool.js +160 -0
  1110. package/dist/skills/tools/checkpoint-tool.d.ts +66 -0
  1111. package/dist/skills/tools/checkpoint-tool.js +102 -0
  1112. package/dist/skills/tools/config-tool.d.ts +61 -0
  1113. package/dist/skills/tools/config-tool.js +123 -0
  1114. package/dist/skills/tools/cron-tool.d.ts +96 -0
  1115. package/dist/skills/tools/cron-tool.js +165 -0
  1116. package/dist/skills/tools/edit-tool.d.ts +43 -0
  1117. package/dist/skills/tools/edit-tool.js +72 -0
  1118. package/dist/skills/tools/exec-tool.d.ts +117 -0
  1119. package/dist/skills/tools/exec-tool.js +354 -0
  1120. package/dist/skills/tools/file-management-tool.d.ts +90 -0
  1121. package/dist/skills/tools/file-management-tool.js +166 -0
  1122. package/dist/skills/tools/image-generate-tool.d.ts +74 -0
  1123. package/dist/skills/tools/image-generate-tool.js +91 -0
  1124. package/dist/skills/tools/instructions-tool.d.ts +65 -0
  1125. package/dist/skills/tools/instructions-tool.js +209 -0
  1126. package/dist/skills/tools/lsp-tool.d.ts +153 -0
  1127. package/dist/skills/tools/lsp-tool.js +230 -0
  1128. package/dist/skills/tools/media-cancel-tool.d.ts +30 -0
  1129. package/dist/skills/tools/media-cancel-tool.js +46 -0
  1130. package/dist/skills/tools/monitor-tool.d.ts +113 -0
  1131. package/dist/skills/tools/monitor-tool.js +129 -0
  1132. package/dist/skills/tools/music-generate-tool.d.ts +80 -0
  1133. package/dist/skills/tools/music-generate-tool.js +98 -0
  1134. package/dist/skills/tools/notebook-edit-tool.d.ts +15 -0
  1135. package/dist/skills/tools/notebook-edit-tool.js +206 -0
  1136. package/dist/skills/tools/patch-tool.d.ts +52 -0
  1137. package/dist/skills/tools/patch-tool.js +556 -0
  1138. package/dist/skills/tools/petdex-create-tool.d.ts +47 -0
  1139. package/dist/skills/tools/petdex-create-tool.js +95 -0
  1140. package/dist/skills/tools/plan-mode-tool.d.ts +98 -0
  1141. package/dist/skills/tools/plan-mode-tool.js +164 -0
  1142. package/dist/skills/tools/read-tool.d.ts +51 -0
  1143. package/dist/skills/tools/read-tool.js +88 -0
  1144. package/dist/skills/tools/search-tool.d.ts +112 -0
  1145. package/dist/skills/tools/search-tool.js +226 -0
  1146. package/dist/skills/tools/shell/bash-provider.d.ts +26 -0
  1147. package/dist/skills/tools/shell/bash-provider.js +125 -0
  1148. package/dist/skills/tools/shell/command-classification.d.ts +44 -0
  1149. package/dist/skills/tools/shell/command-classification.js +119 -0
  1150. package/dist/skills/tools/shell/command-semantics.d.ts +14 -0
  1151. package/dist/skills/tools/shell/command-semantics.js +87 -0
  1152. package/dist/skills/tools/shell/destructive-command-warning.d.ts +10 -0
  1153. package/dist/skills/tools/shell/destructive-command-warning.js +80 -0
  1154. package/dist/skills/tools/shell/exec-permissions.d.ts +52 -0
  1155. package/dist/skills/tools/shell/exec-permissions.js +277 -0
  1156. package/dist/skills/tools/shell/index.d.ts +18 -0
  1157. package/dist/skills/tools/shell/index.js +18 -0
  1158. package/dist/skills/tools/shell/powershell-provider.d.ts +15 -0
  1159. package/dist/skills/tools/shell/powershell-provider.js +80 -0
  1160. package/dist/skills/tools/shell/sandbox/helper-resolver.d.ts +7 -0
  1161. package/dist/skills/tools/shell/sandbox/helper-resolver.js +20 -0
  1162. package/dist/skills/tools/shell/sandbox/landlock-argv.d.ts +6 -0
  1163. package/dist/skills/tools/shell/sandbox/landlock-argv.js +13 -0
  1164. package/dist/skills/tools/shell/sandbox/platform.d.ts +3 -0
  1165. package/dist/skills/tools/shell/sandbox/platform.js +13 -0
  1166. package/dist/skills/tools/shell/sandbox/sandbox-launcher.d.ts +15 -0
  1167. package/dist/skills/tools/shell/sandbox/sandbox-launcher.js +59 -0
  1168. package/dist/skills/tools/shell/sandbox/sandbox-scope.d.ts +6 -0
  1169. package/dist/skills/tools/shell/sandbox/sandbox-scope.js +17 -0
  1170. package/dist/skills/tools/shell/sandbox/sandbox-types.d.ts +47 -0
  1171. package/dist/skills/tools/shell/sandbox/sandbox-types.js +1 -0
  1172. package/dist/skills/tools/shell/sandbox/seatbelt-profile.d.ts +6 -0
  1173. package/dist/skills/tools/shell/sandbox/seatbelt-profile.js +28 -0
  1174. package/dist/skills/tools/shell/shell-command.d.ts +54 -0
  1175. package/dist/skills/tools/shell/shell-command.js +347 -0
  1176. package/dist/skills/tools/shell/shell-exec.d.ts +38 -0
  1177. package/dist/skills/tools/shell/shell-exec.js +202 -0
  1178. package/dist/skills/tools/shell/shell-provider.d.ts +85 -0
  1179. package/dist/skills/tools/shell/shell-provider.js +38 -0
  1180. package/dist/skills/tools/shell/subprocess-env.d.ts +6 -0
  1181. package/dist/skills/tools/shell/subprocess-env.js +87 -0
  1182. package/dist/skills/tools/shell/task-output.d.ts +44 -0
  1183. package/dist/skills/tools/shell/task-output.js +137 -0
  1184. package/dist/skills/tools/skill-tool.d.ts +106 -0
  1185. package/dist/skills/tools/skill-tool.js +265 -0
  1186. package/dist/skills/tools/sleep-tool.d.ts +49 -0
  1187. package/dist/skills/tools/sleep-tool.js +81 -0
  1188. package/dist/skills/tools/structured-output-tool.d.ts +116 -0
  1189. package/dist/skills/tools/structured-output-tool.js +176 -0
  1190. package/dist/skills/tools/stt-tool.d.ts +33 -0
  1191. package/dist/skills/tools/stt-tool.js +58 -0
  1192. package/dist/skills/tools/task-tool.d.ts +125 -0
  1193. package/dist/skills/tools/task-tool.js +390 -0
  1194. package/dist/skills/tools/team-tool.d.ts +156 -0
  1195. package/dist/skills/tools/team-tool.js +173 -0
  1196. package/dist/skills/tools/three-d-generate-tool.d.ts +46 -0
  1197. package/dist/skills/tools/three-d-generate-tool.js +66 -0
  1198. package/dist/skills/tools/tool-search-tool.d.ts +62 -0
  1199. package/dist/skills/tools/tool-search-tool.js +187 -0
  1200. package/dist/skills/tools/tts-tool.d.ts +50 -0
  1201. package/dist/skills/tools/tts-tool.js +58 -0
  1202. package/dist/skills/tools/video-edit-tool.d.ts +72 -0
  1203. package/dist/skills/tools/video-edit-tool.js +84 -0
  1204. package/dist/skills/tools/video-generate-tool.d.ts +162 -0
  1205. package/dist/skills/tools/video-generate-tool.js +178 -0
  1206. package/dist/skills/tools/video-merge-tool.d.ts +105 -0
  1207. package/dist/skills/tools/video-merge-tool.js +95 -0
  1208. package/dist/skills/tools/video-upscale-tool.d.ts +45 -0
  1209. package/dist/skills/tools/video-upscale-tool.js +57 -0
  1210. package/dist/skills/tools/voice-clone-tool.d.ts +40 -0
  1211. package/dist/skills/tools/voice-clone-tool.js +58 -0
  1212. package/dist/skills/tools/web-answer-tool.d.ts +27 -0
  1213. package/dist/skills/tools/web-answer-tool.js +124 -0
  1214. package/dist/skills/tools/web-fetch-tool.d.ts +80 -0
  1215. package/dist/skills/tools/web-fetch-tool.js +95 -0
  1216. package/dist/skills/tools/web-research-tool.d.ts +48 -0
  1217. package/dist/skills/tools/web-research-tool.js +254 -0
  1218. package/dist/skills/tools/web-search-tool.d.ts +46 -0
  1219. package/dist/skills/tools/web-search-tool.js +95 -0
  1220. package/dist/skills/tools/workflow-tool.d.ts +45 -0
  1221. package/dist/skills/tools/workflow-tool.js +113 -0
  1222. package/dist/skills/tools/worktree-tool.d.ts +69 -0
  1223. package/dist/skills/tools/worktree-tool.js +147 -0
  1224. package/dist/skills/tools/write-tool.d.ts +45 -0
  1225. package/dist/skills/tools/write-tool.js +83 -0
  1226. package/dist/skills/tools.d.ts +45 -0
  1227. package/dist/skills/tools.js +165 -0
  1228. package/dist/skills/web-search/brave-source.d.ts +2 -0
  1229. package/dist/skills/web-search/brave-source.js +36 -0
  1230. package/dist/skills/web-search/crawl4ai-extractor.d.ts +15 -0
  1231. package/dist/skills/web-search/crawl4ai-extractor.js +92 -0
  1232. package/dist/skills/web-search/embedding-rerank.d.ts +13 -0
  1233. package/dist/skills/web-search/embedding-rerank.js +44 -0
  1234. package/dist/skills/web-search/exa-source.d.ts +2 -0
  1235. package/dist/skills/web-search/exa-source.js +43 -0
  1236. package/dist/skills/web-search/multi-source-backend.d.ts +23 -0
  1237. package/dist/skills/web-search/multi-source-backend.js +99 -0
  1238. package/dist/skills/web-search/redis-source-cache.d.ts +6 -0
  1239. package/dist/skills/web-search/redis-source-cache.js +44 -0
  1240. package/dist/skills/web-search/search-svc-source.d.ts +4 -0
  1241. package/dist/skills/web-search/search-svc-source.js +64 -0
  1242. package/dist/skills/web-search/searxng-source.d.ts +2 -0
  1243. package/dist/skills/web-search/searxng-source.js +91 -0
  1244. package/dist/skills/web-search/serper-source.d.ts +2 -0
  1245. package/dist/skills/web-search/serper-source.js +33 -0
  1246. package/dist/skills/web-search/source-factory.d.ts +5 -0
  1247. package/dist/skills/web-search/source-factory.js +15 -0
  1248. package/dist/skills/web-search/stability.d.ts +26 -0
  1249. package/dist/skills/web-search/stability.js +57 -0
  1250. package/dist/transport/acp-event-emitter.d.ts +21 -0
  1251. package/dist/transport/acp-event-emitter.js +142 -0
  1252. package/dist/transport/acp-event-emitter.test.d.ts +1 -0
  1253. package/dist/transport/acp-event-emitter.test.js +87 -0
  1254. package/dist/transport/acp-server.d.ts +169 -0
  1255. package/dist/transport/acp-server.js +480 -0
  1256. package/dist/transport/acp-server.test.d.ts +1 -0
  1257. package/dist/transport/acp-server.test.js +230 -0
  1258. package/dist/transport/index.d.ts +7 -0
  1259. package/dist/transport/index.js +5 -0
  1260. package/dist/transport/io-transport.d.ts +19 -0
  1261. package/dist/transport/io-transport.js +8 -0
  1262. package/dist/types/cli/agent-config-coordinator.d.ts +2 -0
  1263. package/dist/types/cli/handlers/community-handler.d.ts +8 -0
  1264. package/dist/types/cli/runtime-dependency-catalog.d.ts +56 -0
  1265. package/dist/types/protocol/methods.d.ts +35 -0
  1266. package/dist/types/runtime/infra/acp-detector.d.ts +16 -0
  1267. package/dist/types/runtime/infra/project-skill-manifest.d.ts +4 -0
  1268. package/package.json +2 -2
@@ -0,0 +1,820 @@
1
+ /**
2
+ * Petdex forge — drives the vendored OpenAI Codex Hatch-Pet Python pipeline
3
+ * (Apache-2.0, under vendor/hatch-pet) to produce Codex-compatible animated pet
4
+ * sprite atlases.
5
+ *
6
+ * The forge owns NO image-processing heuristics. Chroma-key background removal,
7
+ * stable-slots frame extraction, atlas composition and validation are all done
8
+ * by the deterministic vendored Python scripts — the same pipeline OpenAI ships
9
+ * for Codex `/hatch`. This module only:
10
+ * 1. spawns prepare_pet_run.py to lay out a run directory (prompts, layout
11
+ * guides, chroma-key selection, imagegen-jobs.json),
12
+ * 2. fulfils each generation job by calling the provider-core media generator,
13
+ * 3. spawns extract / inspect / compose / validate / contact-sheet / preview,
14
+ * 4. reads the composed atlas back and packages it through pet-core.
15
+ *
16
+ * Prompts come exclusively from the Python prompt files (single source of
17
+ * truth, chroma-hex + per-state frame counts baked in) — there is no TS prompt
18
+ * builder path.
19
+ */
20
+ import fs from "node:fs/promises";
21
+ import os from "node:os";
22
+ import path from "node:path";
23
+ import { createCanvas, loadImage } from "@napi-rs/canvas";
24
+ import { createPetdexAssetFromSpritesheet, writePetdexAssetPackage, PETDEX_ATLAS_CONTRACT } from "./petdex-asset.js";
25
+ import { isHatchPetAvailable, runHatchPetScript } from "./hatch-pet-runner.js";
26
+ import { PETDEX_REFERENCE_IMAGE_SIZE, buildPetdexProductionRun, petdexSourceMode, accumulatePetdexUsage, } from "@xiaozhiclaw/pet-core";
27
+ export { PETDEX_PRODUCTION_SCHEMA, } from "@xiaozhiclaw/pet-core";
28
+ const CANONICAL_BASE_REL = "references/canonical-base.png";
29
+ const BASE_STYLE = "single centered full-body desktop pet character on a flat chroma-key background, readable at pet size";
30
+ const ROW_STYLE = "one horizontal animation row strip with evenly spaced full-body frames sharing a single consistent character identity";
31
+ // Row strips are generated at a wide, provider-accepted resolution rather than
32
+ // the (tiny) layout-guide dimensions: image providers like Volcengine Seedream
33
+ // enforce a minimum pixel count (~1920x1920 = 3.69M px) that a 1536x208 guide
34
+ // strip violates. extract_strip_frames slots by frame count, independent of the
35
+ // generated resolution, so a 4096x1024 (4:1) strip extracts cleanly.
36
+ const ROW_STRIP_SIZE = "4096x1024";
37
+ // Image models do not honour the requested chroma-key hex exactly (e.g. Volcengine
38
+ // Seedream renders a deep purple-magenta ~#9413A3 instead of pure #FF00FF), so
39
+ // keying on the configured fallback leaves the real background behind. We detect
40
+ // the actual flat background from the generated base and key extraction on that.
41
+ const FALLBACK_CHROMA_HEX = "#FF00FF";
42
+ const CHROMA_KEY_THRESHOLD = "110";
43
+ // Component-based extraction with a shared viewport: finds the actual pose blobs
44
+ // (merging detached bits — sweat drops, antenna balls — into the nearest pose by
45
+ // x-position) so a drifting pose is never sliced across two cells, and crops every
46
+ // pose to ONE shared viewport so the character keeps a stable scale across the row
47
+ // (no size popping). This needs clean flat strips with no separator lines, which
48
+ // the layout-guide-suppression + anti-frame guard now produce; pure equal-slot
49
+ // "slots" was a stopgap for the separator era and could halve a misplaced pose.
50
+ const EXTRACT_METHOD = "stable-slots";
51
+ // inspect_frames' chroma-adjacent check must stay BELOW the extraction threshold:
52
+ // extraction already removes everything within CHROMA_KEY_THRESHOLD of the key,
53
+ // so anything still opaque is intentionally-kept character. The default (150) is
54
+ // above our 110 and would flag the character's own edges as "chroma residue",
55
+ // triggering an endless false-positive repair storm.
56
+ const INSPECT_CHROMA_ADJ_THRESHOLD = "90";
57
+ // Some image models (e.g. Volcengine Seedream) interpret "N frames in a row" as
58
+ // a gallery of framed pictures — drawing white borders / mats / panels around
59
+ // each pose. Those bright frames survive chroma keying and show as bars in the
60
+ // atlas. The vendored Codex prompts (tuned for GPT-image) don't forbid this, so
61
+ // we append an explicit anti-frame guard the orchestrator owns.
62
+ const GENERATION_LAYOUT_GUARD = [
63
+ "STRICT BACKGROUND: render one single continuous flat background of the same solid color filling the entire image edge to edge.",
64
+ "Do NOT draw any picture frame, framed panel, border, mat, outline, box, gallery frame, white or light margin, or divider around or between the poses.",
65
+ "The poses sit directly on the one seamless flat background, evenly spaced, with nothing separating them.",
66
+ "IDENTITY LOCK: every frame is the EXACT same character — identical species, body shape, proportions, colors, palette, face, and markings. Do not redesign, restyle, recolor, or resize the character between frames; only its pose changes.",
67
+ "Each pose is ONE connected solid silhouette at a consistent size. No detached parts, sweat drops, tears, dust, puffs, sparkles, speed lines, motion blur, floating effects, or drop shadows.",
68
+ ].join(" ");
69
+ const MIRROR_DECISION_NOTE = "Leftward gait is the framewise horizontal mirror of the approved rightward row, preserving frame order and timing semantics.";
70
+ // Vision-QA loop (Codex method): generate up to N candidates per job and keep the
71
+ // first that a vision model accepts; if none pass, fall through with the last (the
72
+ // deterministic validate_atlas gate still protects the contract). Default 2.
73
+ const DEFAULT_CANDIDATES = 2;
74
+ const MAX_QA_PROMPTS = 2; // initial prompt, then the row's retry prompt
75
+ // ── Public API ─────────────────────────────────────────────
76
+ export async function forgePetdexAsset(input, generateImage, options = {}) {
77
+ if (!(await isHatchPetAvailable())) {
78
+ throw new Error("Petdex forge requires the vendored Hatch-Pet pipeline (Python with Pillow). Install Python + Pillow or set QLOGICAGENT_PYTHON to a python that can `import PIL`.");
79
+ }
80
+ const usage = { billingQuantity: 0, durationMs: 0 };
81
+ const productionJobs = [];
82
+ const combinedPrompts = [];
83
+ const sourceMode = petdexSourceMode(input);
84
+ const runDir = await createRunDir();
85
+ const stagedRefs = await stageReferenceFiles(input);
86
+ try {
87
+ // 1. Lay out the run directory: prompts, layout guides, chroma-key, jobs.
88
+ await runScript("prepare_pet_run.py", [
89
+ "--pet-name", input.name,
90
+ "--display-name", input.name,
91
+ "--description", input.description,
92
+ "--pet-notes", input.prompt?.trim() || input.description,
93
+ "--pet-id", asciiSlug(input.id ?? input.name),
94
+ "--output-dir", runDir,
95
+ "--chroma-key", "auto",
96
+ ...stagedRefs.flatMap((file) => ["--reference", file]),
97
+ ]);
98
+ const manifestPath = path.join(runDir, "imagegen-jobs.json");
99
+ const manifest = await readJson(manifestPath);
100
+ // 2. Fulfil each job in manifest order. The array is dependency-ordered
101
+ // (base first; idle/running-right next, then the rest), so a plain
102
+ // in-order walk satisfies depends_on and gives the Codex identity+gait
103
+ // check for free: base → idle → running-right are vision-QA'd first.
104
+ const inspectImage = options.inspectImage;
105
+ const candidates = Math.max(1, options.candidates ?? DEFAULT_CANDIDATES);
106
+ const generatedRows = [];
107
+ let chromaHex = FALLBACK_CHROMA_HEX;
108
+ let baseDataUrl;
109
+ for (const job of manifest.jobs) {
110
+ // running-left is mirror-derivable. Without vision QA we mirror it (cheap,
111
+ // current behaviour). With vision QA we instead generate it as a normal
112
+ // grounded row so each frame is independently checked — Codex only mirrors
113
+ // a confirmed-safe running-right, and a drifting mirror yields empty cells.
114
+ const isDerived = !!(job.derivation_policy?.may_derive && job.derivation_policy.may_derive_from);
115
+ if (isDerived && !inspectImage) {
116
+ await deriveRow(runDir);
117
+ productionJobs.push({
118
+ id: `row-${job.id}`,
119
+ kind: "row-strip",
120
+ status: "complete",
121
+ animationId: job.id,
122
+ prompt: `derived: framewise-horizontal-mirror of ${job.derivation_policy.may_derive_from}`,
123
+ inputImages: [],
124
+ outputUrl: job.output_path,
125
+ });
126
+ continue;
127
+ }
128
+ const prompt = await fs.readFile(path.join(runDir, job.prompt_file), "utf-8");
129
+ const retryPrompt = job.retry_prompt_file
130
+ ? await fs.readFile(path.join(runDir, job.retry_prompt_file), "utf-8").catch(() => undefined)
131
+ : undefined;
132
+ combinedPrompts.push(prompt);
133
+ const isBase = job.kind === "base-pet";
134
+ const { mediaUrl, inputImages } = await selectJobImage({
135
+ runDir, job, prompt, retryPrompt, generateImage, inspectImage, candidates, usage, upload: options.uploadReferenceImage, baseDataUrl,
136
+ });
137
+ // The canonical base is the identity reference every row reuses; it also
138
+ // reveals the actual flat background colour the model rendered (which we
139
+ // key extraction on) and is the image vision QA compares every row against.
140
+ if (isBase) {
141
+ await fs.copyFile(path.join(runDir, job.output_path), path.join(runDir, CANONICAL_BASE_REL));
142
+ chromaHex = await detectChromaHex(path.join(runDir, job.output_path));
143
+ baseDataUrl = await fileToDataUrl(path.join(runDir, CANONICAL_BASE_REL));
144
+ }
145
+ // The vendored mirror step gates on running-right being marked complete
146
+ // in the manifest, so persist job status as each generation lands.
147
+ job.status = "complete";
148
+ await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
149
+ productionJobs.push({
150
+ id: isBase ? "base-reference" : `row-${job.id}`,
151
+ kind: isBase ? "reference" : "row-strip",
152
+ status: "complete",
153
+ ...(isBase ? {} : { animationId: job.id }),
154
+ prompt,
155
+ inputImages,
156
+ outputUrl: mediaUrl,
157
+ });
158
+ if (!isBase)
159
+ generatedRows.push(job);
160
+ }
161
+ // 3. Deterministic pipeline: extract → QA-repair → compose → validate (+ artifacts).
162
+ const decodedDir = path.join(runDir, "decoded");
163
+ const framesDir = path.join(runDir, "frames");
164
+ const atlasPng = path.join(runDir, "atlas.png");
165
+ const atlasWebp = path.join(runDir, "atlas.webp");
166
+ await runScript("extract_strip_frames.py", ["--decoded-dir", decodedDir, "--output-dir", framesDir, "--chroma-key", chromaHex, "--key-threshold", CHROMA_KEY_THRESHOLD, "--method", EXTRACT_METHOD]);
167
+ // Codex deterministic repair: regenerate only the rows inspect flags
168
+ // (empty/sparse frames, wrong cell size, chroma bleed) with the retry
169
+ // prompt, re-extract that row, and re-inspect — bounded retries per row.
170
+ await repairFlaggedRows({
171
+ runDir, decodedDir, framesDir, generatedRows, chromaHex, generateImage,
172
+ inspectImage, candidates, baseDataUrl, usage, upload: options.uploadReferenceImage, productionJobs,
173
+ });
174
+ const contactSheet = path.join(runDir, "qa", "contact-sheet.png");
175
+ await composeAndValidate(runDir, framesDir, atlasPng, atlasWebp, contactSheet);
176
+ // Hybrid frame-level repair: the strip pass gives temporal continuity; here
177
+ // each extracted frame is scored DETERMINISTICALLY (non-transparent pixel
178
+ // count + mean brightness vs the row median) to catch dark silhouettes,
179
+ // off-brightness, empty, or fragment frames cheaply (no per-frame vision
180
+ // call). Each flagged frame is regenerated as ONE pose (img2img on the base,
181
+ // vision-QA'd when a vision model is present) and spliced back into its cell,
182
+ // then the atlas is recomposed + re-validated. One bounded round.
183
+ if (baseDataUrl) {
184
+ await repairBadFrames({
185
+ runDir, framesDir, atlasPng, atlasWebp, contactSheet, generatedRows,
186
+ generateImage, inspectImage, candidates, usage, upload: options.uploadReferenceImage, baseDataUrl,
187
+ });
188
+ }
189
+ await runScriptSoft("render_animation_previews.py", ["--frames-root", framesDir, "--output-dir", path.join(runDir, "qa", "previews")]);
190
+ // 4. Package through pet-core (re-encodes webp, builds the Codex-aligned manifest).
191
+ const spritesheet = await fs.readFile(atlasWebp);
192
+ const asset = await createPetdexAssetFromSpritesheet({
193
+ id: input.id,
194
+ name: input.name,
195
+ description: input.description,
196
+ prompt: input.prompt,
197
+ spritesheet,
198
+ sourceKind: "forge",
199
+ });
200
+ return {
201
+ ...asset,
202
+ prompt: combinedPrompts.join("\n\n---\n\n"),
203
+ productionRun: buildPetdexProductionRun(sourceMode, productionJobs),
204
+ model: usage.model,
205
+ size: usage.size,
206
+ durationMs: usage.durationMs || undefined,
207
+ ...(usage.provider ? {
208
+ mediaUsage: {
209
+ provider: usage.provider,
210
+ model: usage.model ?? "unknown",
211
+ billingUnit: usage.billingUnit ?? "per_call",
212
+ billingQuantity: usage.billingQuantity || 1,
213
+ },
214
+ } : {}),
215
+ };
216
+ }
217
+ finally {
218
+ await cleanupDir(stagedRefs.length ? path.dirname(stagedRefs[0]) : undefined);
219
+ if (!keepRuns())
220
+ await cleanupDir(runDir);
221
+ }
222
+ }
223
+ export async function forgePetdexAssetPackage(params) {
224
+ const forged = await forgePetdexAsset(params.input, params.generateImage, {
225
+ uploadReferenceImage: params.uploadReferenceImage,
226
+ });
227
+ const assetDir = path.join(params.outputDir, forged.asset.id);
228
+ await fs.mkdir(assetDir, { recursive: true });
229
+ const manifestPath = path.join(assetDir, "pet.json");
230
+ const spritesheetPath = path.join(assetDir, "spritesheet.webp");
231
+ const validationPath = path.join(assetDir, "validation.json");
232
+ const productionRunPath = path.join(assetDir, "production-run.json");
233
+ await fs.writeFile(manifestPath, JSON.stringify(forged.asset, null, 2), "utf-8");
234
+ await fs.writeFile(spritesheetPath, forged.spritesheet);
235
+ await fs.writeFile(validationPath, JSON.stringify(forged.validation, null, 2), "utf-8");
236
+ await fs.writeFile(productionRunPath, JSON.stringify(forged.productionRun, null, 2), "utf-8");
237
+ const packagePath = await writePetdexAssetPackage({
238
+ asset: forged.asset,
239
+ spritesheet: forged.spritesheet,
240
+ validation: forged.validation,
241
+ productionRun: forged.productionRun,
242
+ outputDir: params.outputDir,
243
+ fileName: `${forged.asset.id}.petdex`,
244
+ });
245
+ return {
246
+ ...forged,
247
+ packagePath,
248
+ assetDir,
249
+ manifestPath,
250
+ spritesheetPath,
251
+ validationPath,
252
+ productionRunPath,
253
+ };
254
+ }
255
+ export async function readGeneratedPetdexImage(mediaUrl) {
256
+ if (mediaUrl.startsWith("data:")) {
257
+ const match = mediaUrl.match(/^data:[^;]+;base64,(.+)$/);
258
+ if (!match)
259
+ throw new Error("Generated Petdex image data URL is not base64 encoded");
260
+ return Buffer.from(match[1], "base64");
261
+ }
262
+ if (/^https?:\/\//i.test(mediaUrl)) {
263
+ const response = await fetch(mediaUrl);
264
+ if (!response.ok)
265
+ throw new Error(`Generated Petdex image download failed: ${response.status} ${response.statusText}`);
266
+ return Buffer.from(await response.arrayBuffer());
267
+ }
268
+ if (mediaUrl.startsWith("file://")) {
269
+ return fs.readFile(new URL(mediaUrl));
270
+ }
271
+ return fs.readFile(mediaUrl);
272
+ }
273
+ // ── Internal helpers ───────────────────────────────────────
274
+ async function deriveRow(runDir) {
275
+ await runScript("derive_running_left_from_running_right.py", [
276
+ "--run-dir", runDir,
277
+ "--confirm-appropriate-mirror",
278
+ "--decision-note", MIRROR_DECISION_NOTE,
279
+ "--force",
280
+ ]);
281
+ }
282
+ /** Generate one candidate image (base or row). Does NOT write to disk. */
283
+ async function generateCandidate(runDir, job, promptText, generateImage, usage, upload) {
284
+ const inputImages = await resolveJobImages(runDir, job, upload);
285
+ const isBase = job.kind === "base-pet";
286
+ // Do NOT send the layout guide to the model: providers like Seedream copy its
287
+ // visible slot boxes / crosslines straight into the output. Frame spacing comes
288
+ // from the prompt ("N evenly-spaced frames") and the explicit ROW_STRIP_SIZE;
289
+ // extraction divides into equal slots regardless. The base pet grounds identity.
290
+ const sentImages = inputImages.filter((image) => image.role !== "layout-guide");
291
+ const identity = sentImages.find((image) => image.role === "canonical-reference") ?? sentImages[0];
292
+ const result = await generateImage({
293
+ prompt: `${promptText}\n\n${GENERATION_LAYOUT_GUARD}`,
294
+ purpose: isBase ? "petdex-reference" : "petdex-row-strip",
295
+ ...(isBase ? {} : { animationId: job.id }),
296
+ style: isBase ? BASE_STYLE : ROW_STYLE,
297
+ size: isBase ? PETDEX_REFERENCE_IMAGE_SIZE : ROW_STRIP_SIZE,
298
+ imageUrl: identity?.imageUrl,
299
+ referenceImages: sentImages,
300
+ n: 1,
301
+ quality: "auto",
302
+ });
303
+ accumulatePetdexUsage(usage, result);
304
+ const mediaUrl = result.mediaUrls[0];
305
+ if (!mediaUrl)
306
+ throw new Error(`Petdex generation returned no image for job ${job.id}`);
307
+ return { mediaUrl, inputImages: sentImages };
308
+ }
309
+ async function writeDecoded(runDir, job, mediaUrl) {
310
+ const outputPath = path.join(runDir, job.output_path);
311
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
312
+ await fs.writeFile(outputPath, await readGeneratedPetdexImage(mediaUrl));
313
+ }
314
+ /**
315
+ * Generate a job image with the Codex vision-QA loop: up to `candidates` per
316
+ * prompt (initial, then the row's retry prompt), keeping the first that vision QA
317
+ * accepts. With no inspectImage, takes the first candidate. The chosen image is
318
+ * written to the decoded output path. If nothing passes, the last candidate is
319
+ * used — validate_atlas stays the hard contract gate.
320
+ */
321
+ async function selectJobImage(ctx) {
322
+ const prompts = [ctx.prompt, ...(ctx.retryPrompt ? [ctx.retryPrompt] : [])].slice(0, MAX_QA_PROMPTS);
323
+ let fallback = null;
324
+ for (const promptText of prompts) {
325
+ for (let attempt = 0; attempt < ctx.candidates; attempt++) {
326
+ const candidate = await generateCandidate(ctx.runDir, ctx.job, promptText, ctx.generateImage, ctx.usage, ctx.upload);
327
+ if (!ctx.inspectImage) {
328
+ await writeDecoded(ctx.runDir, ctx.job, candidate.mediaUrl);
329
+ return candidate;
330
+ }
331
+ const verdict = await qaJobImage(ctx.inspectImage, ctx.job, candidate.mediaUrl, ctx.baseDataUrl);
332
+ if (verdict.ok) {
333
+ await writeDecoded(ctx.runDir, ctx.job, candidate.mediaUrl);
334
+ return candidate;
335
+ }
336
+ fallback = candidate;
337
+ }
338
+ }
339
+ const chosen = fallback ?? await generateCandidate(ctx.runDir, ctx.job, ctx.prompt, ctx.generateImage, ctx.usage, ctx.upload);
340
+ await writeDecoded(ctx.runDir, ctx.job, chosen.mediaUrl);
341
+ return chosen;
342
+ }
343
+ // ── Vision QA (Codex method) ───────────────────────────────
344
+ const FRAME_COUNTS = {
345
+ idle: 6, "running-right": 8, "running-left": 8, waving: 4, jumping: 5, failed: 8, waiting: 6, running: 6, review: 6,
346
+ };
347
+ /** Lenient parse: only an explicit FAIL blocks (ambiguous output never burns regenerations). */
348
+ function parseVerdict(text) {
349
+ const value = (text ?? "").trim();
350
+ if (/\bfail\b/i.test(value) && !/\bpass\b/i.test(value.slice(0, 8))) {
351
+ const match = value.match(/fail[:\s-]*(.+)/i);
352
+ return { ok: false, reason: (match?.[1] ?? "").trim().slice(0, 200) };
353
+ }
354
+ return { ok: true, reason: "" };
355
+ }
356
+ async function qaJobImage(inspectImage, job, mediaUrl, baseDataUrl) {
357
+ try {
358
+ if (job.kind === "base-pet") {
359
+ return parseVerdict(await inspectImage({ prompt: BASE_QA_PROMPT, imageUrls: [mediaUrl] }));
360
+ }
361
+ const frames = FRAME_COUNTS[job.id] ?? 6;
362
+ const imageUrls = baseDataUrl ? [mediaUrl, baseDataUrl] : [mediaUrl];
363
+ return parseVerdict(await inspectImage({ prompt: rowQaPrompt(job.id, frames), imageUrls }));
364
+ }
365
+ catch {
366
+ return { ok: true, reason: "" }; // a QA-call failure must not block generation
367
+ }
368
+ }
369
+ const BASE_QA_PROMPT = [
370
+ "You are a strict desktop-pet sprite reviewer. The image is a single pet character reference.",
371
+ "Reply PASS only if ALL hold: one centered full-body cute pet; one flat solid background; no text, scenery, picture frames, borders, drop shadows, or detached effects.",
372
+ 'Reply with exactly "PASS" or "FAIL: <one short reason>".',
373
+ ].join(" ");
374
+ function rowQaPrompt(state, frames) {
375
+ return [
376
+ `You are a strict sprite-sheet reviewer. Image 1 is a horizontal strip of ${frames} animation frames for a desktop pet's "${state}" animation. Image 2 is the canonical reference of the SAME pet.`,
377
+ "Reply PASS only if ALL hold: (1) every frame is the SAME character as the reference — same species, colors, palette, face, proportions, markings; (2) one flat solid background with NO picture frames, borders, boxes, mats, panels, dividers, or copied guide lines; (3) each pose is a complete pet, fully inside its own area, not cut off or split between cells; (4) no detached effects — no drop shadows, sparkles, dust, tears, speed lines, or text.",
378
+ 'Reply with exactly "PASS" or "FAIL: <one short reason>".',
379
+ ].join(" ");
380
+ }
381
+ async function fileToDataUrl(filePath) {
382
+ const buffer = await fs.readFile(filePath);
383
+ const mimeType = filePath.toLowerCase().endsWith(".webp") ? "image/webp" : "image/png";
384
+ return `data:${mimeType};base64,${buffer.toString("base64")}`;
385
+ }
386
+ const MAX_ROW_REPAIRS = 2;
387
+ /**
388
+ * Re-inspect extracted frames and regenerate only the rows that fail QA, using
389
+ * each row's retry prompt and re-extracting just that row. Mirrors the Codex
390
+ * "repair the smallest failing scope first" policy; bounded per row so a
391
+ * persistently bad row falls through to the hard validate gate rather than
392
+ * looping forever.
393
+ */
394
+ async function repairFlaggedRows(ctx) {
395
+ const reviewPath = path.join(ctx.runDir, "qa", "review.json");
396
+ const inspect = () => runScriptSoft("inspect_frames.py", ["--frames-root", ctx.framesDir, "--json-out", reviewPath, "--chroma-adjacent-threshold", INSPECT_CHROMA_ADJ_THRESHOLD]);
397
+ await inspect();
398
+ let review = await readReview(reviewPath);
399
+ for (const job of ctx.generatedRows) {
400
+ let attempts = 0;
401
+ while (review && rowFailed(review, job.id) && attempts < MAX_ROW_REPAIRS) {
402
+ attempts++;
403
+ await regenerateRow(ctx, job);
404
+ await reextractRows(ctx, await rowsToReextract(ctx, job));
405
+ await inspect();
406
+ review = await readReview(reviewPath);
407
+ }
408
+ }
409
+ }
410
+ /** Regenerate one row (vision-QA loop) and update its provenance + decoded output. */
411
+ async function regenerateRow(ctx, job) {
412
+ // Repairs escalate to the row's stricter retry prompt as the primary prompt.
413
+ const prompt = await fs.readFile(path.join(ctx.runDir, job.prompt_file), "utf-8");
414
+ const retryPrompt = job.retry_prompt_file
415
+ ? await fs.readFile(path.join(ctx.runDir, job.retry_prompt_file), "utf-8").catch(() => undefined)
416
+ : undefined;
417
+ const repairPrompt = retryPrompt ?? prompt;
418
+ const { mediaUrl, inputImages } = await selectJobImage({
419
+ runDir: ctx.runDir, job, prompt: repairPrompt, generateImage: ctx.generateImage, inspectImage: ctx.inspectImage,
420
+ candidates: ctx.candidates, usage: ctx.usage, upload: ctx.upload, baseDataUrl: ctx.baseDataUrl,
421
+ });
422
+ const provenance = ctx.productionJobs.find((entry) => entry.id === `row-${job.id}`);
423
+ if (provenance) {
424
+ provenance.prompt = repairPrompt;
425
+ provenance.outputUrl = mediaUrl;
426
+ provenance.inputImages = inputImages;
427
+ }
428
+ }
429
+ /** When running-right is regenerated and running-left was mirror-derived, re-mirror it. */
430
+ async function rowsToReextract(ctx, job) {
431
+ if (job.id !== "running-right")
432
+ return job.id;
433
+ // running-left was mirror-derived only when there is no vision QA.
434
+ const leftDerived = !ctx.inspectImage && await fileExists(path.join(ctx.decodedDir, "running-left.png"));
435
+ if (leftDerived) {
436
+ await deriveRow(ctx.runDir);
437
+ return "running-right,running-left";
438
+ }
439
+ return "running-right";
440
+ }
441
+ async function reextractRows(ctx, states) {
442
+ await runScript("extract_strip_frames.py", ["--decoded-dir", ctx.decodedDir, "--output-dir", ctx.framesDir, "--states", states, "--chroma-key", ctx.chromaHex, "--key-threshold", CHROMA_KEY_THRESHOLD, "--method", EXTRACT_METHOD]);
443
+ }
444
+ async function fileExists(filePath) {
445
+ return fs.access(filePath).then(() => true, () => false);
446
+ }
447
+ /** Compose the atlas, hard-validate it, and refresh the contact sheet. */
448
+ async function composeAndValidate(runDir, framesDir, atlasPng, atlasWebp, contactSheet) {
449
+ await runScript("compose_atlas.py", ["--frames-root", framesDir, "--output", atlasPng, "--webp-output", atlasWebp]);
450
+ // Atlas validation is the hard gate: a contract-violating atlas is never packaged.
451
+ await runScript("validate_atlas.py", [atlasPng, "--json-out", path.join(runDir, "qa", "validation.json")]);
452
+ await runScriptSoft("make_contact_sheet.py", [atlasPng, "--output", contactSheet]);
453
+ }
454
+ const MAX_FRAME_REPAIRS_PER_ROW = 4; // cap single-frame regenerations per row
455
+ const SINGLE_FRAME_STYLE = "one single centered full-body desktop pet pose on a flat chroma-key background";
456
+ const FRAME_EXTRACT_THRESHOLD = 120; // chroma distance for single-frame background removal
457
+ // Brief per-state pose hints for single-frame regeneration (the row prompt is for
458
+ // a whole strip; one replacement frame just needs the state's gist + identity).
459
+ const STATE_HINTS = {
460
+ idle: "a calm resting pose, breathing, standing still",
461
+ "running-right": "a mid-stride running pose facing and moving to the right",
462
+ "running-left": "a mid-stride running pose facing and moving to the left",
463
+ waving: "raising a paw/hand/limb in a friendly wave",
464
+ jumping: "a mid-air playful jump",
465
+ failed: "a sad, deflated, slumped reaction pose",
466
+ waiting: "an expectant waiting pose, looking up for input",
467
+ running: "a focused working/thinking pose, busy but not foot-running",
468
+ review: "a focused inspecting pose, leaning in to review",
469
+ };
470
+ const MIN_FRAME_PIXELS = 400; // matches inspect_frames --min-used-pixels
471
+ const ABSOLUTE_DARK_LUM = 45; // mean luminance below which a frame is a dark silhouette
472
+ /**
473
+ * Frame-level repair (deterministic detection): score every extracted frame by
474
+ * non-transparent pixel count + mean brightness against the row median. Frames
475
+ * that are empty/fragment (too few pixels) or a dark silhouette / off-brightness
476
+ * (much darker than the row) are regenerated as ONE pose (img2img on the base,
477
+ * vision-QA'd when a vision model is present) and spliced back into the cell.
478
+ * No per-frame vision call — the user's "black vs blue / wrong count" defects are
479
+ * measurable directly, which also keeps the run fast enough for the RPC timeout.
480
+ */
481
+ async function repairBadFrames(ctx) {
482
+ let repaired = 0;
483
+ for (const job of ctx.generatedRows) {
484
+ const frames = FRAME_COUNTS[job.id] ?? 6;
485
+ const stats = [];
486
+ for (let index = 0; index < frames; index++) {
487
+ stats.push(await analyzeFrame(path.join(ctx.framesDir, job.id, `${String(index).padStart(2, "0")}.png`)));
488
+ }
489
+ const medianCount = median(stats.map((s) => s.count).filter((c) => c > 0));
490
+ const medianLum = median(stats.map((s) => s.lum).filter((l) => l > 0));
491
+ let rowRepairs = 0;
492
+ for (let index = 0; index < frames && rowRepairs < MAX_FRAME_REPAIRS_PER_ROW; index++) {
493
+ const stat = stats[index];
494
+ const sparse = stat.count < Math.max(MIN_FRAME_PIXELS, medianCount * 0.4);
495
+ const dark = stat.lum < ABSOLUTE_DARK_LUM || (medianLum > 0 && stat.lum < medianLum * 0.6);
496
+ if (!sparse && !dark)
497
+ continue;
498
+ const single = await generateSingleFrame(ctx, job, index, frames);
499
+ if (!single)
500
+ continue;
501
+ await extractFrameToCell(await readGeneratedPetdexImage(single), path.join(ctx.framesDir, job.id, `${String(index).padStart(2, "0")}.png`));
502
+ rowRepairs++;
503
+ repaired++;
504
+ }
505
+ }
506
+ if (repaired > 0) {
507
+ await composeAndValidate(ctx.runDir, ctx.framesDir, ctx.atlasPng, ctx.atlasWebp, ctx.contactSheet);
508
+ }
509
+ }
510
+ /** Non-transparent pixel count + mean luminance of those pixels for one frame. */
511
+ async function analyzeFrame(framePath) {
512
+ try {
513
+ const image = await loadImage(await fs.readFile(framePath));
514
+ const width = Math.max(1, image.width);
515
+ const height = Math.max(1, image.height);
516
+ const canvas = createCanvas(width, height);
517
+ const ctx = canvas.getContext("2d");
518
+ ctx.drawImage(image, 0, 0);
519
+ const data = ctx.getImageData(0, 0, width, height).data;
520
+ let count = 0;
521
+ let lumSum = 0;
522
+ for (let i = 0; i < data.length; i += 4) {
523
+ if ((data[i + 3] ?? 0) > 40) {
524
+ count++;
525
+ lumSum += 0.299 * (data[i] ?? 0) + 0.587 * (data[i + 1] ?? 0) + 0.114 * (data[i + 2] ?? 0);
526
+ }
527
+ }
528
+ return { count, lum: count ? lumSum / count : 0 };
529
+ }
530
+ catch {
531
+ return { count: Number.MAX_SAFE_INTEGER, lum: 255 }; // unreadable → treat as ok
532
+ }
533
+ }
534
+ function median(values) {
535
+ if (values.length === 0)
536
+ return 0;
537
+ const sorted = [...values].sort((a, b) => a - b);
538
+ const mid = Math.floor(sorted.length / 2);
539
+ return sorted.length % 2 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
540
+ }
541
+ function frameQaPrompt(state) {
542
+ return [
543
+ `Image 1 is ONE animation frame of a desktop pet's "${state}" pose. Image 2 is the canonical reference of the SAME pet.`,
544
+ "Reply PASS only if image 1 shows ONE complete pet that clearly matches the reference — same species, colors, palette, BRIGHTNESS, proportions, markings; centered and fully visible.",
545
+ "Reply FAIL if it is a dark or black silhouette, off-colour, dimmer/brighter than the reference, cut off, empty, a fragment, or shows two pets.",
546
+ 'Reply with exactly "PASS" or "FAIL: <one short reason>".',
547
+ ].join(" ");
548
+ }
549
+ /** Generate ONE replacement pose (img2img on the canonical base), vision-QA'd. */
550
+ async function generateSingleFrame(ctx, job, index, frames) {
551
+ const prompt = [
552
+ `Create ONE single image of a desktop pet in the "${job.id}" animation, pose ${index + 1} of ${frames}.`,
553
+ "Output exactly ONE complete, centered, full-body pose of the SAME pet as the attached reference image — identical species, colors, palette, brightness, proportions, and markings.",
554
+ "This is a single sprite frame: NOT a strip, NOT a grid, NOT multiple poses, NOT a dark silhouette.",
555
+ `Pose: ${STATE_HINTS[job.id] ?? "a clear pose for this state"}.`,
556
+ ].join(" ");
557
+ let fallback = null;
558
+ for (let attempt = 0; attempt < ctx.candidates; attempt++) {
559
+ const result = await ctx.generateImage({
560
+ prompt: `${prompt}\n\n${GENERATION_LAYOUT_GUARD}`,
561
+ purpose: "petdex-reference",
562
+ style: SINGLE_FRAME_STYLE,
563
+ size: PETDEX_REFERENCE_IMAGE_SIZE,
564
+ imageUrl: ctx.baseDataUrl,
565
+ referenceImages: [{ role: "canonical-reference", imageUrl: ctx.baseDataUrl }],
566
+ n: 1,
567
+ quality: "auto",
568
+ });
569
+ accumulatePetdexUsage(ctx.usage, result);
570
+ const url = result.mediaUrls[0];
571
+ if (!url)
572
+ continue;
573
+ fallback = url;
574
+ if (!ctx.inspectImage)
575
+ return url;
576
+ try {
577
+ const verdict = parseVerdict(await ctx.inspectImage({ prompt: frameQaPrompt(job.id), imageUrls: [url, ctx.baseDataUrl] }));
578
+ if (verdict.ok)
579
+ return url;
580
+ }
581
+ catch {
582
+ return url; // vision-call failure → accept the candidate
583
+ }
584
+ }
585
+ return fallback;
586
+ }
587
+ /**
588
+ * Extract a single generated pose into one transparent 192x208 cell: detect the
589
+ * flat background colour from the image border, key it out, then crop-to-content
590
+ * and fit centred. (Single clean pose only — not the flawed multi-pose slotting.)
591
+ */
592
+ async function extractFrameToCell(srcBuffer, outPath) {
593
+ const image = await loadImage(srcBuffer);
594
+ const width = Math.max(1, image.width);
595
+ const height = Math.max(1, image.height);
596
+ const canvas = createCanvas(width, height);
597
+ const ctx = canvas.getContext("2d");
598
+ ctx.drawImage(image, 0, 0);
599
+ const imageData = ctx.getImageData(0, 0, width, height);
600
+ const data = imageData.data;
601
+ const [kr, kg, kb] = dominantBorderColor(data, width, height);
602
+ for (let i = 0; i < data.length; i += 4) {
603
+ const dr = (data[i] ?? 0) - kr;
604
+ const dg = (data[i + 1] ?? 0) - kg;
605
+ const db = (data[i + 2] ?? 0) - kb;
606
+ if (Math.sqrt(dr * dr + dg * dg + db * db) <= FRAME_EXTRACT_THRESHOLD) {
607
+ data[i] = 0;
608
+ data[i + 1] = 0;
609
+ data[i + 2] = 0;
610
+ data[i + 3] = 0;
611
+ }
612
+ }
613
+ ctx.putImageData(imageData, 0, 0);
614
+ let minX = width, minY = height, maxX = -1, maxY = -1;
615
+ for (let y = 0; y < height; y++) {
616
+ for (let x = 0; x < width; x++) {
617
+ if ((data[(y * width + x) * 4 + 3] ?? 0) > 16) {
618
+ if (x < minX)
619
+ minX = x;
620
+ if (x > maxX)
621
+ maxX = x;
622
+ if (y < minY)
623
+ minY = y;
624
+ if (y > maxY)
625
+ maxY = y;
626
+ }
627
+ }
628
+ }
629
+ const cell = createCanvas(PETDEX_ATLAS_CONTRACT.cellWidth, PETDEX_ATLAS_CONTRACT.cellHeight);
630
+ const cellCtx = cell.getContext("2d");
631
+ if (maxX >= minX && maxY >= minY) {
632
+ const bw = maxX - minX + 1;
633
+ const bh = maxY - minY + 1;
634
+ const maxW = PETDEX_ATLAS_CONTRACT.cellWidth - 10;
635
+ const maxH = PETDEX_ATLAS_CONTRACT.cellHeight - 10;
636
+ const scale = Math.min(maxW / bw, maxH / bh, 1);
637
+ const dw = bw * scale;
638
+ const dh = bh * scale;
639
+ cellCtx.imageSmoothingEnabled = true;
640
+ cellCtx.imageSmoothingQuality = "high";
641
+ cellCtx.drawImage(canvas, minX, minY, bw, bh, (PETDEX_ATLAS_CONTRACT.cellWidth - dw) / 2, (PETDEX_ATLAS_CONTRACT.cellHeight - dh) / 2, dw, dh);
642
+ }
643
+ await fs.mkdir(path.dirname(outPath), { recursive: true });
644
+ await fs.writeFile(outPath, Buffer.from(cell.toBuffer("image/png")));
645
+ }
646
+ /** Dominant colour of an inset border ring (the flat chroma background). */
647
+ function dominantBorderColor(data, width, height) {
648
+ const inset = Math.max(4, Math.floor(Math.min(width, height) * 0.02));
649
+ const step = Math.max(1, Math.floor(width / 200));
650
+ const buckets = new Map();
651
+ const sample = (x, y) => {
652
+ const idx = (y * width + x) * 4;
653
+ const r = data[idx] ?? 0, g = data[idx + 1] ?? 0, b = data[idx + 2] ?? 0;
654
+ if (r + g + b < 24)
655
+ return;
656
+ const key = ((r >> 4) << 8) | ((g >> 4) << 4) | (b >> 4);
657
+ const e = buckets.get(key) ?? { n: 0, r: 0, g: 0, b: 0 };
658
+ e.n++;
659
+ e.r += r;
660
+ e.g += g;
661
+ e.b += b;
662
+ buckets.set(key, e);
663
+ };
664
+ for (let x = inset; x < width - inset; x += step) {
665
+ sample(x, inset);
666
+ sample(x, height - 1 - inset);
667
+ }
668
+ for (let y = inset; y < height - inset; y += step) {
669
+ sample(inset, y);
670
+ sample(width - 1 - inset, y);
671
+ }
672
+ let best = null;
673
+ for (const e of buckets.values())
674
+ if (!best || e.n > best.n)
675
+ best = e;
676
+ if (!best || best.n === 0)
677
+ return [255, 0, 255];
678
+ return [Math.round(best.r / best.n), Math.round(best.g / best.n), Math.round(best.b / best.n)];
679
+ }
680
+ function rowFailed(review, state) {
681
+ const row = review.rows.find((entry) => entry.state === state);
682
+ return row ? row.ok === false : false;
683
+ }
684
+ async function readReview(reviewPath) {
685
+ return readJson(reviewPath).catch(() => null);
686
+ }
687
+ async function resolveJobImages(runDir, job, upload) {
688
+ const images = [];
689
+ for (const image of job.input_images) {
690
+ const absPath = path.join(runDir, image.path);
691
+ // canonical-base is produced after the base job; tolerate its absence on
692
+ // the base job itself (where it is not referenced anyway).
693
+ const buffer = await fs.readFile(absPath).catch(() => null);
694
+ if (!buffer)
695
+ continue;
696
+ const imageUrl = await toImageUrl(buffer, path.basename(absPath), upload);
697
+ images.push({ role: mapReferenceRole(image.role), imageUrl });
698
+ }
699
+ return images;
700
+ }
701
+ function mapReferenceRole(role) {
702
+ const lower = role.toLowerCase();
703
+ if (lower.includes("layout guide"))
704
+ return "layout-guide";
705
+ if (lower.includes("atlas"))
706
+ return "existing-atlas";
707
+ return "canonical-reference";
708
+ }
709
+ async function toImageUrl(buffer, filename, upload) {
710
+ const mimeType = filename.toLowerCase().endsWith(".webp") ? "image/webp" : "image/png";
711
+ if (upload)
712
+ return upload({ buffer, mimeType, filename });
713
+ return `data:${mimeType};base64,${buffer.toString("base64")}`;
714
+ }
715
+ async function stageReferenceFiles(input) {
716
+ const buffers = [];
717
+ if (input.referenceImageUrl)
718
+ buffers.push(await readGeneratedPetdexImage(input.referenceImageUrl));
719
+ // A refine run grounds identity on the existing atlas.
720
+ if (input.baseSpritesheet)
721
+ buffers.push(input.baseSpritesheet);
722
+ if (buffers.length === 0)
723
+ return [];
724
+ const stagingDir = await fs.mkdtemp(path.join(os.tmpdir(), "petdex-ref-"));
725
+ const files = [];
726
+ for (let index = 0; index < buffers.length; index++) {
727
+ const file = path.join(stagingDir, `reference-${String(index + 1).padStart(2, "0")}.png`);
728
+ await fs.writeFile(file, buffers[index]);
729
+ files.push(file);
730
+ }
731
+ return files;
732
+ }
733
+ async function createRunDir() {
734
+ const base = process.env.QLOGICAGENT_PETDEX_RUN_DIR?.trim() || os.tmpdir();
735
+ await fs.mkdir(base, { recursive: true });
736
+ return fs.mkdtemp(path.join(base, "petdex-run-"));
737
+ }
738
+ function keepRuns() {
739
+ const value = process.env.QLOGICAGENT_PETDEX_KEEP_RUNS?.trim().toLowerCase();
740
+ return value === "1" || value === "true";
741
+ }
742
+ async function cleanupDir(dir) {
743
+ if (!dir)
744
+ return;
745
+ await fs.rm(dir, { recursive: true, force: true }).catch(() => undefined);
746
+ }
747
+ async function readJson(file) {
748
+ return JSON.parse(await fs.readFile(file, "utf-8"));
749
+ }
750
+ /**
751
+ * Detect the flat background colour the model actually rendered, by taking the
752
+ * dominant colour of an inset border ring of the base image. Image models do not
753
+ * honour the requested chroma hex, so extraction must key on what was produced.
754
+ */
755
+ async function detectChromaHex(pngPath) {
756
+ try {
757
+ const image = await loadImage(await fs.readFile(pngPath));
758
+ const width = Math.max(1, image.width);
759
+ const height = Math.max(1, image.height);
760
+ const canvas = createCanvas(width, height);
761
+ const ctx = canvas.getContext("2d");
762
+ ctx.drawImage(image, 0, 0);
763
+ const data = ctx.getImageData(0, 0, width, height).data;
764
+ const inset = Math.max(8, Math.floor(Math.min(width, height) * 0.02));
765
+ const step = Math.max(1, Math.floor(width / 240));
766
+ const buckets = new Map();
767
+ const sample = (x, y) => {
768
+ const idx = (y * width + x) * 4;
769
+ const a = data[idx + 3] ?? 0;
770
+ const r = data[idx] ?? 0;
771
+ const g = data[idx + 1] ?? 0;
772
+ const b = data[idx + 2] ?? 0;
773
+ if (a < 200)
774
+ return;
775
+ if (r + g + b < 48)
776
+ return; // skip near-black borders/separator lines
777
+ const key = ((r >> 4) << 8) | ((g >> 4) << 4) | (b >> 4);
778
+ const e = buckets.get(key) ?? { n: 0, r: 0, g: 0, b: 0 };
779
+ e.n++;
780
+ e.r += r;
781
+ e.g += g;
782
+ e.b += b;
783
+ buckets.set(key, e);
784
+ };
785
+ for (let x = inset; x < width - inset; x += step) {
786
+ sample(x, inset);
787
+ sample(x, height - 1 - inset);
788
+ }
789
+ for (let y = inset; y < height - inset; y += step) {
790
+ sample(inset, y);
791
+ sample(width - 1 - inset, y);
792
+ }
793
+ let best = null;
794
+ for (const e of buckets.values())
795
+ if (!best || e.n > best.n)
796
+ best = e;
797
+ if (!best || best.n === 0)
798
+ return FALLBACK_CHROMA_HEX;
799
+ const r = Math.round(best.r / best.n);
800
+ const g = Math.round(best.g / best.n);
801
+ const b = Math.round(best.b / best.n);
802
+ return `#${[r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("")}`.toUpperCase();
803
+ }
804
+ catch {
805
+ return FALLBACK_CHROMA_HEX;
806
+ }
807
+ }
808
+ function asciiSlug(value) {
809
+ const slug = value.replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
810
+ return slug || "petdex";
811
+ }
812
+ async function runScript(script, args) {
813
+ const result = await runHatchPetScript(script, args, { timeoutMs: 180_000 });
814
+ if (!result.ok) {
815
+ throw new Error(`Petdex pipeline step ${script} failed (exit ${result.code ?? "?"}): ${result.stderr.trim() || result.stdout.trim()}`);
816
+ }
817
+ }
818
+ async function runScriptSoft(script, args) {
819
+ await runHatchPetScript(script, args, { timeoutMs: 180_000 }).catch(() => undefined);
820
+ }