axon-code 2.4.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. package/dist/auth/snapshot.d.ts +24 -0
  2. package/dist/auth/snapshot.d.ts.map +1 -0
  3. package/dist/auth/snapshot.js +144 -0
  4. package/dist/auth/snapshot.js.map +1 -0
  5. package/dist/cli.js +3 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/axon-md-parser.d.ts.map +1 -1
  8. package/dist/config/axon-md-parser.js +21 -4
  9. package/dist/config/axon-md-parser.js.map +1 -1
  10. package/dist/config/index.d.ts +39 -21
  11. package/dist/config/index.d.ts.map +1 -1
  12. package/dist/config/index.js +14 -2
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/context/enhanced.d.ts.map +1 -1
  15. package/dist/context/enhanced.js +5 -0
  16. package/dist/context/enhanced.js.map +1 -1
  17. package/dist/core/client.d.ts +7 -2
  18. package/dist/core/client.d.ts.map +1 -1
  19. package/dist/core/client.js +50 -18
  20. package/dist/core/client.js.map +1 -1
  21. package/dist/core/loop.d.ts +47 -8
  22. package/dist/core/loop.d.ts.map +1 -1
  23. package/dist/core/loop.js +333 -149
  24. package/dist/core/loop.js.map +1 -1
  25. package/dist/core/max-tokens.d.ts +24 -0
  26. package/dist/core/max-tokens.d.ts.map +1 -0
  27. package/dist/core/max-tokens.js +69 -0
  28. package/dist/core/max-tokens.js.map +1 -0
  29. package/dist/core/session.d.ts.map +1 -1
  30. package/dist/core/session.js +7 -14
  31. package/dist/core/session.js.map +1 -1
  32. package/dist/daemon/config.d.ts +6 -6
  33. package/dist/daemon/executor.d.ts.map +1 -1
  34. package/dist/daemon/executor.js +24 -30
  35. package/dist/daemon/executor.js.map +1 -1
  36. package/dist/goals/goal-store.d.ts +1 -1
  37. package/dist/goals/goal-store.d.ts.map +1 -1
  38. package/dist/goals/goal-store.js.map +1 -1
  39. package/dist/hooks/auto-verify.d.ts +86 -0
  40. package/dist/hooks/auto-verify.d.ts.map +1 -0
  41. package/dist/hooks/auto-verify.js +297 -0
  42. package/dist/hooks/auto-verify.js.map +1 -0
  43. package/dist/mcp/config.d.ts +16 -16
  44. package/dist/media/index.d.ts +2 -1
  45. package/dist/media/index.d.ts.map +1 -1
  46. package/dist/media/index.js +5 -3
  47. package/dist/media/index.js.map +1 -1
  48. package/dist/media/office-visual.d.ts +66 -0
  49. package/dist/media/office-visual.d.ts.map +1 -0
  50. package/dist/media/office-visual.js +409 -0
  51. package/dist/media/office-visual.js.map +1 -0
  52. package/dist/media/office.d.ts +17 -0
  53. package/dist/media/office.d.ts.map +1 -1
  54. package/dist/media/office.js +227 -2
  55. package/dist/media/office.js.map +1 -1
  56. package/dist/memory/long-term-store.d.ts +6 -0
  57. package/dist/memory/long-term-store.d.ts.map +1 -1
  58. package/dist/memory/long-term-store.js +66 -48
  59. package/dist/memory/long-term-store.js.map +1 -1
  60. package/dist/memory/memory-search.d.ts +9 -3
  61. package/dist/memory/memory-search.d.ts.map +1 -1
  62. package/dist/memory/memory-search.js +58 -12
  63. package/dist/memory/memory-search.js.map +1 -1
  64. package/dist/memory/memory-sync.d.ts +7 -0
  65. package/dist/memory/memory-sync.d.ts.map +1 -1
  66. package/dist/memory/memory-sync.js +92 -0
  67. package/dist/memory/memory-sync.js.map +1 -1
  68. package/dist/memory/notebook.d.ts +7 -0
  69. package/dist/memory/notebook.d.ts.map +1 -1
  70. package/dist/memory/notebook.js +624 -24
  71. package/dist/memory/notebook.js.map +1 -1
  72. package/dist/models/config.d.ts.map +1 -1
  73. package/dist/models/config.js +7 -4
  74. package/dist/models/config.js.map +1 -1
  75. package/dist/models/index.d.ts +1 -0
  76. package/dist/models/index.d.ts.map +1 -1
  77. package/dist/models/index.js +1 -0
  78. package/dist/models/index.js.map +1 -1
  79. package/dist/models/model-limits.d.ts +13 -0
  80. package/dist/models/model-limits.d.ts.map +1 -0
  81. package/dist/models/model-limits.js +79 -0
  82. package/dist/models/model-limits.js.map +1 -0
  83. package/dist/network/discovery.d.ts +2 -0
  84. package/dist/network/discovery.d.ts.map +1 -1
  85. package/dist/network/discovery.js +10 -5
  86. package/dist/network/discovery.js.map +1 -1
  87. package/dist/network/global-proxy.d.ts +7 -0
  88. package/dist/network/global-proxy.d.ts.map +1 -1
  89. package/dist/network/global-proxy.js +67 -0
  90. package/dist/network/global-proxy.js.map +1 -1
  91. package/dist/network/index.d.ts +6 -1
  92. package/dist/network/index.d.ts.map +1 -1
  93. package/dist/network/index.js +16 -11
  94. package/dist/network/index.js.map +1 -1
  95. package/dist/network/transport.d.ts +41 -4
  96. package/dist/network/transport.d.ts.map +1 -1
  97. package/dist/network/transport.js +234 -61
  98. package/dist/network/transport.js.map +1 -1
  99. package/dist/network/types.d.ts +19 -1
  100. package/dist/network/types.d.ts.map +1 -1
  101. package/dist/network/types.js.map +1 -1
  102. package/dist/notifications/cmux.d.ts +115 -0
  103. package/dist/notifications/cmux.d.ts.map +1 -0
  104. package/dist/notifications/cmux.js +436 -0
  105. package/dist/notifications/cmux.js.map +1 -0
  106. package/dist/prompt/attachments.d.ts +8 -0
  107. package/dist/prompt/attachments.d.ts.map +1 -1
  108. package/dist/prompt/attachments.js +74 -2
  109. package/dist/prompt/attachments.js.map +1 -1
  110. package/dist/prompt/builder.js +1 -1
  111. package/dist/prompt/builder.js.map +1 -1
  112. package/dist/prompt/cache.d.ts +1 -6
  113. package/dist/prompt/cache.d.ts.map +1 -1
  114. package/dist/prompt/cache.js +37 -7
  115. package/dist/prompt/cache.js.map +1 -1
  116. package/dist/prompt/templates.d.ts +1 -1
  117. package/dist/prompt/templates.d.ts.map +1 -1
  118. package/dist/prompt/templates.js +4 -3
  119. package/dist/prompt/templates.js.map +1 -1
  120. package/dist/prompt/types.d.ts +3 -1
  121. package/dist/prompt/types.d.ts.map +1 -1
  122. package/dist/prompt/types.js.map +1 -1
  123. package/dist/proxy/server.d.ts.map +1 -1
  124. package/dist/proxy/server.js +32 -11
  125. package/dist/proxy/server.js.map +1 -1
  126. package/dist/search/ripgrep.d.ts.map +1 -1
  127. package/dist/search/ripgrep.js +11 -0
  128. package/dist/search/ripgrep.js.map +1 -1
  129. package/dist/session/index.d.ts +3 -0
  130. package/dist/session/index.d.ts.map +1 -1
  131. package/dist/session/index.js +1 -0
  132. package/dist/session/index.js.map +1 -1
  133. package/dist/skills/builtin/algorithmic-art/LICENSE.txt +202 -0
  134. package/dist/skills/builtin/algorithmic-art/SKILL.md +405 -0
  135. package/dist/skills/builtin/algorithmic-art/templates/generator_template.js +223 -0
  136. package/dist/skills/builtin/algorithmic-art/templates/viewer.html +599 -0
  137. package/dist/skills/builtin/analyze-logs/SKILL.md +75 -0
  138. package/dist/skills/builtin/audit-official/SKILL.md +81 -0
  139. package/dist/skills/builtin/brand-guidelines/LICENSE.txt +202 -0
  140. package/dist/skills/builtin/brand-guidelines/SKILL.md +73 -0
  141. package/dist/skills/builtin/build-portable/SKILL.md +53 -0
  142. package/dist/skills/builtin/canvas-design/SKILL.md +130 -0
  143. package/dist/skills/builtin/changelog/SKILL.md +65 -0
  144. package/dist/skills/builtin/code-review/SKILL.md +75 -0
  145. package/dist/skills/builtin/doc-coauthoring/SKILL.md +375 -0
  146. package/dist/skills/builtin/doctor/SKILL.md +166 -0
  147. package/dist/skills/builtin/docx/LICENSE.txt +30 -0
  148. package/dist/skills/builtin/docx/SKILL.md +590 -0
  149. package/dist/skills/builtin/docx/scripts/__init__.py +1 -0
  150. package/dist/skills/builtin/docx/scripts/accept_changes.py +135 -0
  151. package/dist/skills/builtin/docx/scripts/comment.py +318 -0
  152. package/dist/skills/builtin/docx/scripts/office/helpers/__init__.py +0 -0
  153. package/dist/skills/builtin/docx/scripts/office/helpers/merge_runs.py +199 -0
  154. package/dist/skills/builtin/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  155. package/dist/skills/builtin/docx/scripts/office/pack.py +159 -0
  156. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  157. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  158. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  159. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  160. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  161. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  162. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  163. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  164. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  165. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  166. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  167. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  168. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  169. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  170. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  171. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  172. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  173. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  174. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  175. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  176. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  177. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  178. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  179. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  180. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  181. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  182. package/dist/skills/builtin/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  183. package/dist/skills/builtin/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  184. package/dist/skills/builtin/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  185. package/dist/skills/builtin/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  186. package/dist/skills/builtin/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  187. package/dist/skills/builtin/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  188. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  189. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  190. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  191. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  192. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  193. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  194. package/dist/skills/builtin/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  195. package/dist/skills/builtin/docx/scripts/office/soffice.py +183 -0
  196. package/dist/skills/builtin/docx/scripts/office/unpack.py +132 -0
  197. package/dist/skills/builtin/docx/scripts/office/validate.py +111 -0
  198. package/dist/skills/builtin/docx/scripts/office/validators/__init__.py +15 -0
  199. package/dist/skills/builtin/docx/scripts/office/validators/base.py +847 -0
  200. package/dist/skills/builtin/docx/scripts/office/validators/docx.py +446 -0
  201. package/dist/skills/builtin/docx/scripts/office/validators/pptx.py +275 -0
  202. package/dist/skills/builtin/docx/scripts/office/validators/redlining.py +247 -0
  203. package/dist/skills/builtin/docx/scripts/templates/comments.xml +3 -0
  204. package/dist/skills/builtin/docx/scripts/templates/commentsExtended.xml +3 -0
  205. package/dist/skills/builtin/docx/scripts/templates/commentsExtensible.xml +3 -0
  206. package/dist/skills/builtin/docx/scripts/templates/commentsIds.xml +3 -0
  207. package/dist/skills/builtin/docx/scripts/templates/people.xml +3 -0
  208. package/dist/skills/builtin/frontend-design/LICENSE.txt +177 -0
  209. package/dist/skills/builtin/frontend-design/SKILL.md +42 -0
  210. package/dist/skills/builtin/i18n-check/SKILL.md +56 -0
  211. package/dist/skills/builtin/internal-comms/LICENSE.txt +202 -0
  212. package/dist/skills/builtin/internal-comms/SKILL.md +32 -0
  213. package/dist/skills/builtin/internal-comms/examples/3p-updates.md +47 -0
  214. package/dist/skills/builtin/internal-comms/examples/company-newsletter.md +65 -0
  215. package/dist/skills/builtin/internal-comms/examples/faq-answers.md +30 -0
  216. package/dist/skills/builtin/internal-comms/examples/general-comms.md +16 -0
  217. package/dist/skills/builtin/mcp-builder/LICENSE.txt +202 -0
  218. package/dist/skills/builtin/mcp-builder/SKILL.md +236 -0
  219. package/dist/skills/builtin/mcp-builder/reference/evaluation.md +602 -0
  220. package/dist/skills/builtin/mcp-builder/reference/mcp_best_practices.md +249 -0
  221. package/dist/skills/builtin/mcp-builder/reference/node_mcp_server.md +970 -0
  222. package/dist/skills/builtin/mcp-builder/reference/python_mcp_server.md +719 -0
  223. package/dist/skills/builtin/mcp-builder/scripts/connections.py +151 -0
  224. package/dist/skills/builtin/mcp-builder/scripts/evaluation.py +373 -0
  225. package/dist/skills/builtin/mcp-builder/scripts/example_evaluation.xml +22 -0
  226. package/dist/skills/builtin/mcp-builder/scripts/requirements.txt +2 -0
  227. package/dist/skills/builtin/pdf/LICENSE.txt +30 -0
  228. package/dist/skills/builtin/pdf/SKILL.md +314 -0
  229. package/dist/skills/builtin/pdf/forms.md +294 -0
  230. package/dist/skills/builtin/pdf/reference.md +612 -0
  231. package/dist/skills/builtin/pdf/scripts/check_bounding_boxes.py +65 -0
  232. package/dist/skills/builtin/pdf/scripts/check_fillable_fields.py +11 -0
  233. package/dist/skills/builtin/pdf/scripts/convert_pdf_to_images.py +33 -0
  234. package/dist/skills/builtin/pdf/scripts/create_validation_image.py +37 -0
  235. package/dist/skills/builtin/pdf/scripts/extract_form_field_info.py +122 -0
  236. package/dist/skills/builtin/pdf/scripts/extract_form_structure.py +115 -0
  237. package/dist/skills/builtin/pdf/scripts/fill_fillable_fields.py +98 -0
  238. package/dist/skills/builtin/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  239. package/dist/skills/builtin/pptx/LICENSE.txt +30 -0
  240. package/dist/skills/builtin/pptx/SKILL.md +232 -0
  241. package/dist/skills/builtin/pptx/editing.md +205 -0
  242. package/dist/skills/builtin/pptx/pptxgenjs.md +420 -0
  243. package/dist/skills/builtin/pptx/scripts/__init__.py +0 -0
  244. package/dist/skills/builtin/pptx/scripts/add_slide.py +195 -0
  245. package/dist/skills/builtin/pptx/scripts/clean.py +286 -0
  246. package/dist/skills/builtin/pptx/scripts/office/helpers/__init__.py +0 -0
  247. package/dist/skills/builtin/pptx/scripts/office/helpers/merge_runs.py +199 -0
  248. package/dist/skills/builtin/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  249. package/dist/skills/builtin/pptx/scripts/office/pack.py +159 -0
  250. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  251. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  252. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  253. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  254. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  255. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  256. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  257. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  258. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  259. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  260. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  261. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  262. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  263. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  264. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  265. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  266. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  267. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  268. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  269. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  270. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  271. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  272. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  273. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  274. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  275. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  276. package/dist/skills/builtin/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  277. package/dist/skills/builtin/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  278. package/dist/skills/builtin/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  279. package/dist/skills/builtin/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  280. package/dist/skills/builtin/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  281. package/dist/skills/builtin/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  282. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  283. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  284. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  285. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  286. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  287. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  288. package/dist/skills/builtin/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  289. package/dist/skills/builtin/pptx/scripts/office/soffice.py +183 -0
  290. package/dist/skills/builtin/pptx/scripts/office/unpack.py +132 -0
  291. package/dist/skills/builtin/pptx/scripts/office/validate.py +111 -0
  292. package/dist/skills/builtin/pptx/scripts/office/validators/__init__.py +15 -0
  293. package/dist/skills/builtin/pptx/scripts/office/validators/base.py +847 -0
  294. package/dist/skills/builtin/pptx/scripts/office/validators/docx.py +446 -0
  295. package/dist/skills/builtin/pptx/scripts/office/validators/pptx.py +275 -0
  296. package/dist/skills/builtin/pptx/scripts/office/validators/redlining.py +247 -0
  297. package/dist/skills/builtin/pptx/scripts/thumbnail.py +289 -0
  298. package/dist/skills/builtin/promo-video/SKILL.md +124 -0
  299. package/dist/skills/builtin/promote/SKILL.md +77 -0
  300. package/dist/skills/builtin/skill-creator/LICENSE.txt +202 -0
  301. package/dist/skills/builtin/skill-creator/SKILL.md +598 -0
  302. package/dist/skills/builtin/skill-creator/agents/analyzer.md +274 -0
  303. package/dist/skills/builtin/skill-creator/agents/comparator.md +202 -0
  304. package/dist/skills/builtin/skill-creator/agents/grader.md +223 -0
  305. package/dist/skills/builtin/skill-creator/assets/eval_review.html +146 -0
  306. package/dist/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -0
  307. package/dist/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -0
  308. package/dist/skills/builtin/skill-creator/references/schemas.md +430 -0
  309. package/dist/skills/builtin/skill-creator/scripts/__init__.py +0 -0
  310. package/dist/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -0
  311. package/dist/skills/builtin/skill-creator/scripts/generate_report.py +326 -0
  312. package/dist/skills/builtin/skill-creator/scripts/improve_description.py +248 -0
  313. package/dist/skills/builtin/skill-creator/scripts/package_skill.py +136 -0
  314. package/dist/skills/builtin/skill-creator/scripts/quick_validate.py +103 -0
  315. package/dist/skills/builtin/skill-creator/scripts/run_eval.py +310 -0
  316. package/dist/skills/builtin/skill-creator/scripts/run_loop.py +332 -0
  317. package/dist/skills/builtin/skill-creator/scripts/utils.py +47 -0
  318. package/dist/skills/builtin/slack-gif-creator/LICENSE.txt +202 -0
  319. package/dist/skills/builtin/slack-gif-creator/SKILL.md +254 -0
  320. package/dist/skills/builtin/slack-gif-creator/core/easing.py +234 -0
  321. package/dist/skills/builtin/slack-gif-creator/core/frame_composer.py +176 -0
  322. package/dist/skills/builtin/slack-gif-creator/core/gif_builder.py +269 -0
  323. package/dist/skills/builtin/slack-gif-creator/core/validators.py +136 -0
  324. package/dist/skills/builtin/slack-gif-creator/requirements.txt +4 -0
  325. package/dist/skills/builtin/sync-version/SKILL.md +39 -0
  326. package/dist/skills/builtin/theme-factory/LICENSE.txt +202 -0
  327. package/dist/skills/builtin/theme-factory/SKILL.md +59 -0
  328. package/dist/skills/builtin/theme-factory/theme-showcase.pdf +0 -0
  329. package/dist/skills/builtin/theme-factory/themes/arctic-frost.md +19 -0
  330. package/dist/skills/builtin/theme-factory/themes/botanical-garden.md +19 -0
  331. package/dist/skills/builtin/theme-factory/themes/desert-rose.md +19 -0
  332. package/dist/skills/builtin/theme-factory/themes/forest-canopy.md +19 -0
  333. package/dist/skills/builtin/theme-factory/themes/golden-hour.md +19 -0
  334. package/dist/skills/builtin/theme-factory/themes/midnight-galaxy.md +19 -0
  335. package/dist/skills/builtin/theme-factory/themes/modern-minimalist.md +19 -0
  336. package/dist/skills/builtin/theme-factory/themes/ocean-depths.md +19 -0
  337. package/dist/skills/builtin/theme-factory/themes/sunset-boulevard.md +19 -0
  338. package/dist/skills/builtin/theme-factory/themes/tech-innovation.md +19 -0
  339. package/dist/skills/builtin/web-artifacts-builder/LICENSE.txt +202 -0
  340. package/dist/skills/builtin/web-artifacts-builder/SKILL.md +74 -0
  341. package/dist/skills/builtin/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  342. package/dist/skills/builtin/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  343. package/dist/skills/builtin/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  344. package/dist/skills/builtin/webapp-testing/LICENSE.txt +202 -0
  345. package/dist/skills/builtin/webapp-testing/SKILL.md +96 -0
  346. package/dist/skills/builtin/webapp-testing/examples/console_logging.py +35 -0
  347. package/dist/skills/builtin/webapp-testing/examples/element_discovery.py +40 -0
  348. package/dist/skills/builtin/webapp-testing/examples/static_html_automation.py +33 -0
  349. package/dist/skills/builtin/webapp-testing/scripts/with_server.py +106 -0
  350. package/dist/skills/builtin/xlsx/LICENSE.txt +30 -0
  351. package/dist/skills/builtin/xlsx/SKILL.md +292 -0
  352. package/dist/skills/builtin/xlsx/scripts/office/helpers/__init__.py +0 -0
  353. package/dist/skills/builtin/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  354. package/dist/skills/builtin/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  355. package/dist/skills/builtin/xlsx/scripts/office/pack.py +159 -0
  356. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  357. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  358. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  359. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  360. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  361. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  362. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  363. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  364. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  365. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  366. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  367. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  368. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  369. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  370. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  371. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  372. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  373. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  374. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  375. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  376. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  377. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  378. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  379. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  380. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  381. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  382. package/dist/skills/builtin/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  383. package/dist/skills/builtin/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  384. package/dist/skills/builtin/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  385. package/dist/skills/builtin/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  386. package/dist/skills/builtin/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  387. package/dist/skills/builtin/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  388. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  389. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  390. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  391. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  392. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  393. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  394. package/dist/skills/builtin/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  395. package/dist/skills/builtin/xlsx/scripts/office/soffice.py +183 -0
  396. package/dist/skills/builtin/xlsx/scripts/office/unpack.py +132 -0
  397. package/dist/skills/builtin/xlsx/scripts/office/validate.py +111 -0
  398. package/dist/skills/builtin/xlsx/scripts/office/validators/__init__.py +15 -0
  399. package/dist/skills/builtin/xlsx/scripts/office/validators/base.py +847 -0
  400. package/dist/skills/builtin/xlsx/scripts/office/validators/docx.py +446 -0
  401. package/dist/skills/builtin/xlsx/scripts/office/validators/pptx.py +275 -0
  402. package/dist/skills/builtin/xlsx/scripts/office/validators/redlining.py +247 -0
  403. package/dist/skills/builtin/xlsx/scripts/recalc.py +184 -0
  404. package/dist/tools/agent.d.ts +8 -0
  405. package/dist/tools/agent.d.ts.map +1 -1
  406. package/dist/tools/agent.js +66 -2
  407. package/dist/tools/agent.js.map +1 -1
  408. package/dist/tools/base.d.ts +16 -0
  409. package/dist/tools/base.d.ts.map +1 -1
  410. package/dist/tools/base.js +32 -0
  411. package/dist/tools/base.js.map +1 -1
  412. package/dist/tools/bash.d.ts.map +1 -1
  413. package/dist/tools/bash.js +8 -0
  414. package/dist/tools/bash.js.map +1 -1
  415. package/dist/tools/file.d.ts +3 -1
  416. package/dist/tools/file.d.ts.map +1 -1
  417. package/dist/tools/file.js +176 -117
  418. package/dist/tools/file.js.map +1 -1
  419. package/dist/tools/generate-design.d.ts +5 -1
  420. package/dist/tools/generate-design.d.ts.map +1 -1
  421. package/dist/tools/generate-design.js +25 -3
  422. package/dist/tools/generate-design.js.map +1 -1
  423. package/dist/tools/goal.d.ts +1 -1
  424. package/dist/tools/goal.d.ts.map +1 -1
  425. package/dist/tools/goal.js +18 -9
  426. package/dist/tools/goal.js.map +1 -1
  427. package/dist/tools/index.d.ts +7 -0
  428. package/dist/tools/index.d.ts.map +1 -1
  429. package/dist/tools/index.js +74 -5
  430. package/dist/tools/index.js.map +1 -1
  431. package/dist/tools/mcp.d.ts.map +1 -1
  432. package/dist/tools/mcp.js +5 -0
  433. package/dist/tools/mcp.js.map +1 -1
  434. package/dist/tools/memory-search.d.ts +1 -1
  435. package/dist/tools/memory-search.d.ts.map +1 -1
  436. package/dist/tools/memory-search.js +1 -1
  437. package/dist/tools/memory-search.js.map +1 -1
  438. package/dist/tools/network-agent.js +2 -1
  439. package/dist/tools/network-agent.js.map +1 -1
  440. package/dist/tools/notebook-write.d.ts.map +1 -1
  441. package/dist/tools/notebook-write.js +3 -1
  442. package/dist/tools/notebook-write.js.map +1 -1
  443. package/dist/tools/schedule.d.ts.map +1 -1
  444. package/dist/tools/schedule.js +2 -26
  445. package/dist/tools/schedule.js.map +1 -1
  446. package/dist/tools/skill.d.ts +1 -7
  447. package/dist/tools/skill.d.ts.map +1 -1
  448. package/dist/tools/skill.js +225 -61
  449. package/dist/tools/skill.js.map +1 -1
  450. package/dist/types/messages.d.ts +1 -5
  451. package/dist/types/messages.d.ts.map +1 -1
  452. package/dist/web/server/api-manager.d.ts +9 -4
  453. package/dist/web/server/api-manager.d.ts.map +1 -1
  454. package/dist/web/server/api-manager.js +173 -63
  455. package/dist/web/server/api-manager.js.map +1 -1
  456. package/dist/web/server/app-manager.d.ts +71 -0
  457. package/dist/web/server/app-manager.d.ts.map +1 -0
  458. package/dist/web/server/app-manager.js +364 -0
  459. package/dist/web/server/app-manager.js.map +1 -0
  460. package/dist/web/server/channels/bridge.d.ts.map +1 -1
  461. package/dist/web/server/channels/bridge.js +2 -1
  462. package/dist/web/server/channels/bridge.js.map +1 -1
  463. package/dist/web/server/codex-auth-manager.d.ts +43 -0
  464. package/dist/web/server/codex-auth-manager.d.ts.map +1 -0
  465. package/dist/web/server/codex-auth-manager.js +429 -0
  466. package/dist/web/server/codex-auth-manager.js.map +1 -0
  467. package/dist/web/server/conversation.d.ts +34 -5
  468. package/dist/web/server/conversation.d.ts.map +1 -1
  469. package/dist/web/server/conversation.js +435 -142
  470. package/dist/web/server/conversation.js.map +1 -1
  471. package/dist/web/server/image-attachments.d.ts +23 -0
  472. package/dist/web/server/image-attachments.d.ts.map +1 -0
  473. package/dist/web/server/image-attachments.js +93 -0
  474. package/dist/web/server/image-attachments.js.map +1 -0
  475. package/dist/web/server/index.d.ts.map +1 -1
  476. package/dist/web/server/index.js +28 -0
  477. package/dist/web/server/index.js.map +1 -1
  478. package/dist/web/server/routes/__tests__/app-api.test.d.ts +5 -0
  479. package/dist/web/server/routes/__tests__/app-api.test.d.ts.map +1 -0
  480. package/dist/web/server/routes/__tests__/app-api.test.js +48 -0
  481. package/dist/web/server/routes/__tests__/app-api.test.js.map +1 -0
  482. package/dist/web/server/routes/__tests__/tunnel-api.test.d.ts +2 -0
  483. package/dist/web/server/routes/__tests__/tunnel-api.test.d.ts.map +1 -0
  484. package/dist/web/server/routes/__tests__/tunnel-api.test.js +96 -0
  485. package/dist/web/server/routes/__tests__/tunnel-api.test.js.map +1 -0
  486. package/dist/web/server/routes/ai-editor.d.ts.map +1 -1
  487. package/dist/web/server/routes/ai-editor.js +9 -45
  488. package/dist/web/server/routes/ai-editor.js.map +1 -1
  489. package/dist/web/server/routes/ai-hover.d.ts.map +1 -1
  490. package/dist/web/server/routes/ai-hover.js +6 -23
  491. package/dist/web/server/routes/ai-hover.js.map +1 -1
  492. package/dist/web/server/routes/api.d.ts.map +1 -1
  493. package/dist/web/server/routes/api.js +27 -23
  494. package/dist/web/server/routes/api.js.map +1 -1
  495. package/dist/web/server/routes/app-api.d.ts +8 -0
  496. package/dist/web/server/routes/app-api.d.ts.map +1 -0
  497. package/dist/web/server/routes/app-api.js +191 -0
  498. package/dist/web/server/routes/app-api.js.map +1 -0
  499. package/dist/web/server/routes/auth.d.ts.map +1 -1
  500. package/dist/web/server/routes/auth.js +306 -5
  501. package/dist/web/server/routes/auth.js.map +1 -1
  502. package/dist/web/server/routes/autocomplete-api.d.ts.map +1 -1
  503. package/dist/web/server/routes/autocomplete-api.js +5 -43
  504. package/dist/web/server/routes/autocomplete-api.js.map +1 -1
  505. package/dist/web/server/routes/axon-cloud.d.ts.map +1 -1
  506. package/dist/web/server/routes/axon-cloud.js +352 -1
  507. package/dist/web/server/routes/axon-cloud.js.map +1 -1
  508. package/dist/web/server/routes/config-api.d.ts.map +1 -1
  509. package/dist/web/server/routes/config-api.js +12 -20
  510. package/dist/web/server/routes/config-api.js.map +1 -1
  511. package/dist/web/server/routes/download-proxy.d.ts.map +1 -1
  512. package/dist/web/server/routes/download-proxy.js +234 -12
  513. package/dist/web/server/routes/download-proxy.js.map +1 -1
  514. package/dist/web/server/routes/network-api.d.ts +1 -0
  515. package/dist/web/server/routes/network-api.d.ts.map +1 -1
  516. package/dist/web/server/routes/network-api.js +36 -11
  517. package/dist/web/server/routes/network-api.js.map +1 -1
  518. package/dist/web/server/routes/port-forward.d.ts.map +1 -1
  519. package/dist/web/server/routes/port-forward.js +3 -2
  520. package/dist/web/server/routes/port-forward.js.map +1 -1
  521. package/dist/web/server/routes/schedule-api.d.ts.map +1 -1
  522. package/dist/web/server/routes/schedule-api.js +5 -1
  523. package/dist/web/server/routes/schedule-api.js.map +1 -1
  524. package/dist/web/server/routes/tunnel-api.d.ts +14 -0
  525. package/dist/web/server/routes/tunnel-api.d.ts.map +1 -0
  526. package/dist/web/server/routes/tunnel-api.js +52 -0
  527. package/dist/web/server/routes/tunnel-api.js.map +1 -0
  528. package/dist/web/server/runtime/api-connection-test.d.ts +18 -0
  529. package/dist/web/server/runtime/api-connection-test.d.ts.map +1 -0
  530. package/dist/web/server/runtime/api-connection-test.js +62 -0
  531. package/dist/web/server/runtime/api-connection-test.js.map +1 -0
  532. package/dist/web/server/runtime/codex-client.d.ts +35 -0
  533. package/dist/web/server/runtime/codex-client.d.ts.map +1 -0
  534. package/dist/web/server/runtime/codex-client.js +1202 -0
  535. package/dist/web/server/runtime/codex-client.js.map +1 -0
  536. package/dist/web/server/runtime/factory.d.ts +3 -0
  537. package/dist/web/server/runtime/factory.d.ts.map +1 -0
  538. package/dist/web/server/runtime/factory.js +16 -0
  539. package/dist/web/server/runtime/factory.js.map +1 -0
  540. package/dist/web/server/runtime/runtime-model-catalog.d.ts +10 -0
  541. package/dist/web/server/runtime/runtime-model-catalog.d.ts.map +1 -0
  542. package/dist/web/server/runtime/runtime-model-catalog.js +85 -0
  543. package/dist/web/server/runtime/runtime-model-catalog.js.map +1 -0
  544. package/dist/web/server/runtime/runtime-model-list.d.ts +24 -0
  545. package/dist/web/server/runtime/runtime-model-list.d.ts.map +1 -0
  546. package/dist/web/server/runtime/runtime-model-list.js +43 -0
  547. package/dist/web/server/runtime/runtime-model-list.js.map +1 -0
  548. package/dist/web/server/runtime/runtime-selection.d.ts +17 -0
  549. package/dist/web/server/runtime/runtime-selection.d.ts.map +1 -0
  550. package/dist/web/server/runtime/runtime-selection.js +35 -0
  551. package/dist/web/server/runtime/runtime-selection.js.map +1 -0
  552. package/dist/web/server/runtime/tool-input-normalizer.d.ts +3 -0
  553. package/dist/web/server/runtime/tool-input-normalizer.d.ts.map +1 -0
  554. package/dist/web/server/runtime/tool-input-normalizer.js +52 -0
  555. package/dist/web/server/runtime/tool-input-normalizer.js.map +1 -0
  556. package/dist/web/server/runtime/types.d.ts +102 -0
  557. package/dist/web/server/runtime/types.d.ts.map +1 -0
  558. package/dist/web/server/runtime/types.js +2 -0
  559. package/dist/web/server/runtime/types.js.map +1 -0
  560. package/dist/web/server/runtime/utility-client.d.ts +5 -0
  561. package/dist/web/server/runtime/utility-client.d.ts.map +1 -0
  562. package/dist/web/server/runtime/utility-client.js +68 -0
  563. package/dist/web/server/runtime/utility-client.js.map +1 -0
  564. package/dist/web/server/services/axon-cloud-service.d.ts +24 -0
  565. package/dist/web/server/services/axon-cloud-service.d.ts.map +1 -1
  566. package/dist/web/server/services/axon-cloud-service.js +93 -0
  567. package/dist/web/server/services/axon-cloud-service.js.map +1 -1
  568. package/dist/web/server/services/config-service.d.ts +8 -2
  569. package/dist/web/server/services/config-service.d.ts.map +1 -1
  570. package/dist/web/server/services/config-service.js +51 -0
  571. package/dist/web/server/services/config-service.js.map +1 -1
  572. package/dist/web/server/services/gemini-image-service.d.ts +20 -1
  573. package/dist/web/server/services/gemini-image-service.d.ts.map +1 -1
  574. package/dist/web/server/services/gemini-image-service.js +121 -13
  575. package/dist/web/server/services/gemini-image-service.js.map +1 -1
  576. package/dist/web/server/session-manager.d.ts +10 -0
  577. package/dist/web/server/session-manager.d.ts.map +1 -1
  578. package/dist/web/server/session-manager.js +39 -0
  579. package/dist/web/server/session-manager.js.map +1 -1
  580. package/dist/web/server/slash-commands.d.ts.map +1 -1
  581. package/dist/web/server/slash-commands.js +127 -25
  582. package/dist/web/server/slash-commands.js.map +1 -1
  583. package/dist/web/server/task-manager.d.ts +4 -15
  584. package/dist/web/server/task-manager.d.ts.map +1 -1
  585. package/dist/web/server/task-manager.js +11 -4
  586. package/dist/web/server/task-manager.js.map +1 -1
  587. package/dist/web/server/tunnel.d.ts +47 -0
  588. package/dist/web/server/tunnel.d.ts.map +1 -0
  589. package/dist/web/server/tunnel.js +165 -0
  590. package/dist/web/server/tunnel.js.map +1 -0
  591. package/dist/web/server/user-interaction.d.ts +10 -0
  592. package/dist/web/server/user-interaction.d.ts.map +1 -1
  593. package/dist/web/server/user-interaction.js +28 -0
  594. package/dist/web/server/user-interaction.js.map +1 -1
  595. package/dist/web/server/web-auth.d.ts +35 -3
  596. package/dist/web/server/web-auth.d.ts.map +1 -1
  597. package/dist/web/server/web-auth.js +302 -29
  598. package/dist/web/server/web-auth.js.map +1 -1
  599. package/dist/web/server/web-scheduler.d.ts.map +1 -1
  600. package/dist/web/server/web-scheduler.js +9 -0
  601. package/dist/web/server/web-scheduler.js.map +1 -1
  602. package/dist/web/server/websocket-git-handlers.d.ts.map +1 -1
  603. package/dist/web/server/websocket-git-handlers.js +5 -29
  604. package/dist/web/server/websocket-git-handlers.js.map +1 -1
  605. package/dist/web/server/websocket.d.ts.map +1 -1
  606. package/dist/web/server/websocket.js +246 -70
  607. package/dist/web/server/websocket.js.map +1 -1
  608. package/dist/web/shared/auth-summary.d.ts +28 -0
  609. package/dist/web/shared/auth-summary.d.ts.map +1 -0
  610. package/dist/web/shared/auth-summary.js +56 -0
  611. package/dist/web/shared/auth-summary.js.map +1 -0
  612. package/dist/web/shared/model-catalog.d.ts +31 -0
  613. package/dist/web/shared/model-catalog.d.ts.map +1 -0
  614. package/dist/web/shared/model-catalog.js +365 -0
  615. package/dist/web/shared/model-catalog.js.map +1 -0
  616. package/dist/web/shared/model-preferences.d.ts +5 -0
  617. package/dist/web/shared/model-preferences.d.ts.map +1 -0
  618. package/dist/web/shared/model-preferences.js +13 -0
  619. package/dist/web/shared/model-preferences.js.map +1 -0
  620. package/dist/web/shared/runtime-capabilities.d.ts +37 -0
  621. package/dist/web/shared/runtime-capabilities.d.ts.map +1 -0
  622. package/dist/web/shared/runtime-capabilities.js +101 -0
  623. package/dist/web/shared/runtime-capabilities.js.map +1 -0
  624. package/dist/web/shared/setup-runtime.d.ts +50 -0
  625. package/dist/web/shared/setup-runtime.d.ts.map +1 -0
  626. package/dist/web/shared/setup-runtime.js +214 -0
  627. package/dist/web/shared/setup-runtime.js.map +1 -0
  628. package/dist/web/shared/thinking-config.d.ts +20 -0
  629. package/dist/web/shared/thinking-config.d.ts.map +1 -0
  630. package/dist/web/shared/thinking-config.js +104 -0
  631. package/dist/web/shared/thinking-config.js.map +1 -0
  632. package/dist/web/shared/types.d.ts +30 -2
  633. package/dist/web/shared/types.d.ts.map +1 -1
  634. package/dist/web/shared/types.js.map +1 -1
  635. package/electron/main.cjs +15 -3
  636. package/package.json +6 -2
  637. package/src/web/client/dist/assets/index-B2M5Nr-5.js +736 -0
  638. package/src/web/client/dist/assets/index-COEqamS-.css +32 -0
  639. package/src/web/client/dist/icons/icon-192.png +0 -0
  640. package/src/web/client/dist/icons/icon-512.png +0 -0
  641. package/src/web/client/dist/index.html +31 -0
  642. package/src/web/client/dist/logo.png +0 -0
  643. package/src/web/client/dist/manifest.webmanifest +25 -0
  644. package/src/web/client/dist/sw.js +78 -0
@@ -26,8 +26,12 @@ import { TerminalManager } from './terminal-manager.js';
26
26
  import { logger } from '../../utils/logger.js';
27
27
  // 错误感知
28
28
  import { errorWatcher } from '../../utils/error-watcher.js';
29
+ import { buildImageAttachmentPathHints, saveBase64AttachmentToTempFile, } from './image-attachments.js';
30
+ import { getDefaultWebModelForBackend, normalizeWebRuntimeModelForBackend, } from '../shared/model-catalog.js';
29
31
  // Git WebSocket 处理函数
30
32
  import { handleGitGetStatus, handleGitGetLog, handleGitGetBranches, handleGitGetStashes, handleGitStage, handleGitUnstage, handleGitCommit, handleGitPush, handleGitPull, handleGitCheckout, handleGitStashAndCheckout, handleGitForceCheckout, handleGitCreateBranch, handleGitDeleteBranch, handleGitStashSave, handleGitStashPop, handleGitStashDrop, handleGitStashApply, handleGitGetDiff, handleGitGetCommitDetail, handleGitGetCommitFileDiff, handleGitSmartCommit, handleGitSmartReview, handleGitSmartCommitAndReview, handleGitExplainCommit, handleGitMerge, handleGitRebase, handleGitMergeAbort, handleGitRebaseContinue, handleGitRebaseAbort, handleGitReset, handleGitDiscardFile, handleGitStageAll, handleGitUnstageAll, handleGitDiscardAll, handleGitAmendCommit, handleGitRevertCommit, handleGitCherryPick, handleGitGetTags, handleGitCreateTag, handleGitDeleteTag, handleGitPushTags, handleGitGetRemotes, handleGitAddRemote, handleGitRemoveRemote, handleGitFetch, handleGitSearchCommits, handleGitGetFileHistory, handleGitGetBlame, handleGitCompareBranches, handleGitGetMergeStatus, handleGitGetConflicts, handleGitResolveLock, } from './websocket-git-handlers.js';
33
+ // cmux 终端集成(macOS 原生 AI 终端 https://github.com/manaflow-ai/cmux)
34
+ import { getCmuxBridge } from '../../notifications/cmux.js';
31
35
  // ============================================================================
32
36
  // 工具分类函数 - 用于 Web UI 状态反馈
33
37
  // ============================================================================
@@ -63,6 +67,19 @@ const activeE2EState = new Map();
63
67
  const activeLeadAgentState = new Map();
64
68
  // 背压阈值:单连接缓冲区超过此字节数则视为慢客户端(参考 OpenClaw server-broadcast.ts)
65
69
  const MAX_BUFFERED_BYTES = 10 * 1024 * 1024; // 10MB
70
+ function getDefaultChatModel(runtimeBackend = webAuth.getRuntimeBackend()) {
71
+ return getDefaultWebModelForBackend(runtimeBackend, webAuth.getDefaultModelByBackend()[runtimeBackend]);
72
+ }
73
+ /**
74
+ * 会话操作互斥锁:确保修改 client.sessionId 的操作不会并发执行
75
+ * 使用 Promise 链模式:每个操作 await 上一个操作完成后才开始
76
+ */
77
+ function withSessionMutex(client, fn) {
78
+ const prev = client.sessionMutex || Promise.resolve();
79
+ let resolve;
80
+ client.sessionMutex = new Promise(r => { resolve = r; });
81
+ return prev.then(() => fn()).finally(() => resolve());
82
+ }
66
83
  // 全局检查点管理器实例(惰性初始化,避免模块加载时的副作用日志)
67
84
  let _checkpointManager = null;
68
85
  function getCheckpointManager() {
@@ -1026,11 +1043,14 @@ export function setupWebSocket(wss, conversationManager) {
1026
1043
  wss.on('connection', (ws) => {
1027
1044
  const clientId = randomUUID();
1028
1045
  const sessionId = randomUUID();
1046
+ const runtimeBackend = webAuth.getRuntimeBackend();
1047
+ const defaultModel = getDefaultChatModel(runtimeBackend);
1029
1048
  const client = {
1030
1049
  id: clientId,
1031
1050
  ws,
1032
1051
  sessionId,
1033
- model: 'opus',
1052
+ model: defaultModel,
1053
+ runtimeBackend,
1034
1054
  isAlive: true,
1035
1055
  swarmSubscriptions: new Set(),
1036
1056
  permissionMode: 'bypassPermissions',
@@ -1042,7 +1062,8 @@ export function setupWebSocket(wss, conversationManager) {
1042
1062
  type: 'connected',
1043
1063
  payload: {
1044
1064
  sessionId,
1045
- model: client.model,
1065
+ model: defaultModel,
1066
+ runtimeBackend,
1046
1067
  serverStartTime,
1047
1068
  },
1048
1069
  });
@@ -1192,15 +1213,27 @@ async function handleClientMessage(client, message, conversationManager, swarmSu
1192
1213
  });
1193
1214
  break;
1194
1215
  }
1195
- case 'chat':
1196
- // 确保会话关联 WebSocket
1197
- conversationManager.setWebSocket(client.sessionId, ws);
1198
- // 如果消息中包含 projectPath,更新 client.projectPath
1199
- if (message.payload.projectPath !== undefined) {
1200
- client.projectPath = message.payload.projectPath;
1216
+ case 'chat': {
1217
+ // 使用会话互斥锁保护 session 初始化阶段(读取/修改 client.sessionId)
1218
+ // 但不锁住整个流式响应,否则 session_new/session_switch 会被阻塞到 AI 回复完成
1219
+ const chatContext = await withSessionMutex(client, async () => {
1220
+ // 确保会话关联 WebSocket
1221
+ conversationManager.setWebSocket(client.sessionId, ws);
1222
+ // 如果消息中包含 projectPath,更新 client.projectPath
1223
+ if (message.payload.projectPath !== undefined) {
1224
+ client.projectPath = message.payload.projectPath;
1225
+ }
1226
+ // prepareChatSession: 初始化会话并返回闭包需要的上下文
1227
+ // 这里完成所有需要互斥保护的操作:读取 sessionId、创建持久化会话、更新 client.sessionId
1228
+ const ctx = await prepareChatSession(client, message.payload.content, message.payload.attachments || message.payload.images, conversationManager, message.payload.thinkingConfig);
1229
+ return ctx;
1230
+ });
1231
+ // Phase 2: 在锁外执行流式 chat(chatContext 中的 chatSessionId 已是闭包安全值)
1232
+ if (chatContext) {
1233
+ await executeChatStreaming(chatContext, conversationManager, message.payload.messageId);
1201
1234
  }
1202
- await handleChatMessage(client, message.payload.content, message.payload.attachments || message.payload.images, conversationManager, message.payload.messageId);
1203
1235
  break;
1236
+ }
1204
1237
  case 'cancel':
1205
1238
  conversationManager.cancel(client.sessionId);
1206
1239
  sendMessage(ws, {
@@ -1223,8 +1256,8 @@ async function handleClientMessage(client, message, conversationManager, swarmSu
1223
1256
  });
1224
1257
  break;
1225
1258
  case 'set_model':
1226
- client.model = message.payload.model;
1227
- conversationManager.setModel(client.sessionId, message.payload.model);
1259
+ client.model = normalizeWebRuntimeModelForBackend(client.runtimeBackend, message.payload.model, webAuth.getDefaultModelByBackend()[client.runtimeBackend]);
1260
+ conversationManager.setModel(client.sessionId, client.model);
1228
1261
  break;
1229
1262
  case 'set_language':
1230
1263
  try {
@@ -1279,15 +1312,15 @@ async function handleClientMessage(client, message, conversationManager, swarmSu
1279
1312
  await handleSessionList(client, message.payload, conversationManager);
1280
1313
  break;
1281
1314
  case 'session_create':
1282
- await handleSessionCreate(client, message.payload, conversationManager);
1315
+ await withSessionMutex(client, () => handleSessionCreate(client, message.payload, conversationManager));
1283
1316
  break;
1284
1317
  case 'session_new':
1285
1318
  // 官方规范:创建新的临时会话(不立即持久化)
1286
1319
  // 会话只有在发送第一条消息后才会真正创建
1287
- await handleSessionNew(client, message.payload, conversationManager);
1320
+ await withSessionMutex(client, () => handleSessionNew(client, message.payload, conversationManager));
1288
1321
  break;
1289
1322
  case 'session_switch':
1290
- await handleSessionSwitch(client, message.payload.sessionId, conversationManager);
1323
+ await withSessionMutex(client, () => handleSessionSwitch(client, message.payload.sessionId, conversationManager));
1291
1324
  break;
1292
1325
  case 'session_delete':
1293
1326
  await handleSessionDelete(client, message.payload.sessionId, conversationManager);
@@ -1882,9 +1915,10 @@ async function handleClientMessage(client, message, conversationManager, swarmSu
1882
1915
  }
1883
1916
  }
1884
1917
  /**
1885
- * 处理聊天消息
1918
+ * Phase 1: 在互斥锁内执行 — 初始化会话并返回流式 chat 所需的上下文
1919
+ * 所有读取/修改 client.sessionId 的操作在此完成
1886
1920
  */
1887
- async function handleChatMessage(client, content, attachments, conversationManager, userMessageId) {
1921
+ async function prepareChatSession(client, content, attachments, conversationManager, thinkingConfig) {
1888
1922
  const { ws, model, projectPath } = client;
1889
1923
  let { sessionId } = client;
1890
1924
  console.log(`[WebSocket] handleChatMessage - sessionId: ${sessionId}, projectPath: ${projectPath || 'undefined'}`);
@@ -1894,12 +1928,12 @@ async function handleChatMessage(client, content, attachments, conversationManag
1894
1928
  type: 'error',
1895
1929
  payload: { message: 'API Key not configured. Please configure an API Key in settings or log in via OAuth before sending messages.' },
1896
1930
  });
1897
- return;
1931
+ return null;
1898
1932
  }
1899
1933
  // 检查是否为斜杠命令
1900
1934
  if (isSlashCommand(content)) {
1901
- await handleSlashCommand(client, content, conversationManager);
1902
- return;
1935
+ await handleSlashCommand(client, content, conversationManager, thinkingConfig);
1936
+ return null;
1903
1937
  }
1904
1938
  // 确保会话存在于 sessionManager 中(处理临时会话 ID 的情况)
1905
1939
  const sessionManager = conversationManager.getSessionManager();
@@ -1908,14 +1942,17 @@ async function handleChatMessage(client, content, attachments, conversationManag
1908
1942
  if (!existingSession) {
1909
1943
  // 当前 sessionId 是临时的(WebSocket 连接时生成的),需要创建持久化会话
1910
1944
  // 官方规范:使用第一条消息的前50个字符作为会话标题
1945
+ const temporarySessionId = sessionId;
1911
1946
  const firstPrompt = content.substring(0, 50);
1912
1947
  console.log(`[WebSocket] Temporary session ${sessionId}, creating persistent session, title: ${firstPrompt}, projectPath: ${client.projectPath || 'global'}`);
1913
1948
  const newSession = sessionManager.createSession({
1914
1949
  name: firstPrompt, // 使用 firstPrompt 作为会话标题
1915
1950
  model: model,
1951
+ runtimeBackend: client.runtimeBackend,
1916
1952
  tags: ['webui'],
1917
1953
  projectPath: client.projectPath, // 传递项目路径
1918
1954
  });
1955
+ sessionManager.registerTemporarySessionId(newSession.metadata.id, temporarySessionId);
1919
1956
  // 更新 client 的 sessionId
1920
1957
  client.sessionId = newSession.metadata.id;
1921
1958
  sessionId = newSession.metadata.id;
@@ -1928,6 +1965,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
1928
1965
  sessionId: newSession.metadata.id,
1929
1966
  name: newSession.metadata.name,
1930
1967
  model: newSession.metadata.model,
1968
+ runtimeBackend: client.runtimeBackend,
1931
1969
  createdAt: newSession.metadata.createdAt,
1932
1970
  },
1933
1971
  });
@@ -1945,22 +1983,43 @@ async function handleChatMessage(client, content, attachments, conversationManag
1945
1983
  console.log(`[WebSocket] Updating session title to firstPrompt: ${firstPrompt}`);
1946
1984
  }
1947
1985
  }
1948
- const messageId = randomUUID();
1949
- // 处理附件:图片直接传递给 Claude API,其他文件保存为临时文件传路径
1986
+ // 处理附件:图片传递给模型视觉输入,同时也落盘为稳定的临时文件引用
1950
1987
  let mediaAttachments;
1951
1988
  let fileAttachments;
1952
1989
  let enhancedContent = content;
1953
1990
  if (attachments && Array.isArray(attachments)) {
1954
1991
  if (attachments.length > 0 && typeof attachments[0] === 'object') {
1955
1992
  const typedAttachments = attachments;
1956
- // 提取图片附件(直接传递给 Claude API)
1993
+ // 提取图片附件(视觉输入 + 稳定临时文件路径)
1957
1994
  mediaAttachments = typedAttachments
1958
1995
  .filter(att => att.type === 'image')
1959
- .map(att => ({
1960
- data: att.data,
1961
- mimeType: att.mimeType || 'image/png',
1962
- type: 'image',
1963
- }));
1996
+ .map(att => {
1997
+ const imageAttachment = {
1998
+ name: att.name,
1999
+ data: att.data,
2000
+ mimeType: att.mimeType || 'image/png',
2001
+ type: 'image',
2002
+ };
2003
+ try {
2004
+ imageAttachment.filePath = saveBase64AttachmentToTempFile(att.name, att.data);
2005
+ console.log('[WebSocket] Image attachment saved to temp file: ' + imageAttachment.filePath);
2006
+ }
2007
+ catch (error) {
2008
+ console.warn(`[WebSocket] Failed to persist image attachment ${att.name}:`, error);
2009
+ }
2010
+ return imageAttachment;
2011
+ });
2012
+ const imagePathHints = buildImageAttachmentPathHints(mediaAttachments);
2013
+ if (imagePathHints.length > 0) {
2014
+ enhancedContent = `Uploaded image files:\n${imagePathHints.join('\n')}\nUse the exact local image path above if you call ImageGen for one of these uploads.${enhancedContent ? `\n\n${enhancedContent}` : ''}`;
2015
+ }
2016
+ // 将图片编辑偏好显式注入到本轮文本上下文,降低模型忽略附件元数据的概率
2017
+ const imageEditHints = typedAttachments
2018
+ .filter(att => att.type === 'image' && att.imageEditStrength)
2019
+ .map(att => `- ${att.name}: preferred image edit strength = ${att.imageEditStrength}`);
2020
+ if (imageEditHints.length > 0) {
2021
+ enhancedContent = `Image attachment edit preferences:\n${imageEditHints.join('\n')}${enhancedContent ? `\n\n${enhancedContent}` : ''}`;
2022
+ }
1964
2023
  // 所有非图片附件统一保存为临时文件(包括 pdf/docx/xlsx/pptx/text/file 等任意格式)
1965
2024
  fileAttachments = typedAttachments
1966
2025
  .filter(att => att.type !== 'image')
@@ -1972,11 +2031,26 @@ async function handleChatMessage(client, content, attachments, conversationManag
1972
2031
  }
1973
2032
  else {
1974
2033
  // 旧格式:直接是 base64 字符串数组(默认图片 png)
1975
- mediaAttachments = attachments.map(data => ({
1976
- data,
1977
- mimeType: 'image/png',
1978
- type: 'image',
1979
- }));
2034
+ mediaAttachments = attachments.map((data, index) => {
2035
+ const imageAttachment = {
2036
+ name: `uploaded-image-${index + 1}.png`,
2037
+ data,
2038
+ mimeType: 'image/png',
2039
+ type: 'image',
2040
+ };
2041
+ try {
2042
+ imageAttachment.filePath = saveBase64AttachmentToTempFile(imageAttachment.name, data);
2043
+ console.log('[WebSocket] Legacy image attachment saved to temp file: ' + imageAttachment.filePath);
2044
+ }
2045
+ catch (error) {
2046
+ console.warn(`[WebSocket] Failed to persist legacy image attachment ${imageAttachment.name}:`, error);
2047
+ }
2048
+ return imageAttachment;
2049
+ });
2050
+ const imagePathHints = buildImageAttachmentPathHints(mediaAttachments);
2051
+ if (imagePathHints.length > 0) {
2052
+ enhancedContent = `Uploaded image files:\n${imagePathHints.join('\n')}\nUse the exact local image path above if you call ImageGen for one of these uploads.${enhancedContent ? `\n\n${enhancedContent}` : ''}`;
2053
+ }
1980
2054
  }
1981
2055
  }
1982
2056
  // 处理非图片文件附件:保存到临时目录,将文件路径告知模型
@@ -2007,6 +2081,26 @@ async function handleChatMessage(client, content, attachments, conversationManag
2007
2081
  const getActiveWs = () => {
2008
2082
  return conversationManager.getWebSocket(chatSessionId) || ws;
2009
2083
  };
2084
+ return {
2085
+ chatSessionId,
2086
+ model,
2087
+ projectPath: client.projectPath,
2088
+ ws,
2089
+ enhancedContent,
2090
+ mediaAttachments,
2091
+ permissionMode: client.permissionMode,
2092
+ runtimeBackend: client.runtimeBackend,
2093
+ thinkingConfig,
2094
+ getActiveWs,
2095
+ };
2096
+ }
2097
+ /**
2098
+ * Phase 2: 在互斥锁外执行 — 实际的流式 AI 对话
2099
+ * 使用 chatSessionId 闭包值,不再读写 client.sessionId
2100
+ */
2101
+ async function executeChatStreaming(ctx, conversationManager, userMessageId) {
2102
+ const { chatSessionId, model, enhancedContent, mediaAttachments, thinkingConfig, getActiveWs } = ctx;
2103
+ const messageId = randomUUID();
2010
2104
  // 始终发送流式消息到 WebSocket,不做服务端门控
2011
2105
  // 客户端已有基于 sessionId 的会话隔离过滤(useMessageHandler),
2012
2106
  // 服务端门控(isActiveSession)会导致用户切换会话或刷新页面时消息永久丢失,
@@ -2019,6 +2113,9 @@ async function handleChatMessage(client, content, attachments, conversationManag
2019
2113
  type: 'status',
2020
2114
  payload: { status: 'thinking', sessionId: chatSessionId },
2021
2115
  });
2116
+ // cmux 集成:通知 cmux 终端 Agent 开始思考
2117
+ const cmux = getCmuxBridge();
2118
+ cmux.onThinking();
2022
2119
  try {
2023
2120
  // 调用对话管理器,传入流式回调(媒体附件包含 mimeType 和类型)
2024
2121
  // 所有回调使用 getActiveWs() 动态获取 WebSocket,确保刷新后消息仍能送达
@@ -2057,6 +2154,13 @@ async function handleChatMessage(client, content, attachments, conversationManag
2057
2154
  type: 'status',
2058
2155
  payload: { status: 'tool_executing', message: `Executing ${toolName}...`, sessionId: chatSessionId },
2059
2156
  });
2157
+ cmux.onToolStart(toolName);
2158
+ },
2159
+ onToolUseInputReady: (toolUseId, input) => {
2160
+ sendMessage(getActiveWs(), {
2161
+ type: 'tool_use_input_ready',
2162
+ payload: { toolUseId, input, sessionId: chatSessionId },
2163
+ });
2060
2164
  },
2061
2165
  onToolUseDelta: (toolUseId, partialJson) => {
2062
2166
  sendMessage(getActiveWs(), {
@@ -2083,6 +2187,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
2083
2187
  type: 'permission_request',
2084
2188
  payload: { ...request, sessionId: chatSessionId },
2085
2189
  });
2190
+ cmux.onPermissionRequest(request.toolName || 'Unknown', request.description || 'execute');
2086
2191
  },
2087
2192
  onComplete: async (stopReason, usage) => {
2088
2193
  // 保存会话到磁盘(确保 messageCount 正确更新)
@@ -2112,6 +2217,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
2112
2217
  type: 'status',
2113
2218
  payload: { status: 'idle', sessionId: chatSessionId },
2114
2219
  });
2220
+ cmux.onComplete();
2115
2221
  },
2116
2222
  onError: (error) => {
2117
2223
  // 页面刷新恢复:错误时也需要重发 history 确保客户端状态一致
@@ -2130,6 +2236,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
2130
2236
  type: 'status',
2131
2237
  payload: { status: 'idle', sessionId: chatSessionId },
2132
2238
  });
2239
+ cmux.onError(error.message);
2133
2240
  },
2134
2241
  onContextUpdate: (usage) => {
2135
2242
  sendMessage(getActiveWs(), {
@@ -2160,7 +2267,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
2160
2267
  });
2161
2268
  }
2162
2269
  },
2163
- }, client.projectPath, getActiveWs(), client.permissionMode, userMessageId); // 传入动态 ws、权限模式和前端消息 ID,确保跨会话持久化
2270
+ }, ctx.projectPath, getActiveWs(), ctx.permissionMode, userMessageId, thinkingConfig); // 传入动态 ws、权限模式和前端消息 ID,确保跨会话持久化
2164
2271
  }
2165
2272
  catch (error) {
2166
2273
  console.error('[WebSocket] Chat handling error:', error);
@@ -2177,7 +2284,7 @@ async function handleChatMessage(client, content, attachments, conversationManag
2177
2284
  /**
2178
2285
  * 处理斜杠命令
2179
2286
  */
2180
- async function handleSlashCommand(client, command, conversationManager) {
2287
+ async function handleSlashCommand(client, command, conversationManager, thinkingConfig) {
2181
2288
  const { ws, sessionId, model, projectPath } = client;
2182
2289
  try {
2183
2290
  // 获取当前工作目录(优先使用项目路径)
@@ -2221,7 +2328,9 @@ async function handleSlashCommand(client, command, conversationManager) {
2221
2328
  }
2222
2329
  // 如果命令返回 chatPrompt,将其作为聊天消息发送给 AI(用于 /init 等命令)
2223
2330
  if (result.success && result.data?.chatPrompt) {
2224
- await handleChatMessage(client, result.data.chatPrompt, undefined, conversationManager);
2331
+ const ctx = await withSessionMutex(client, () => prepareChatSession(client, result.data.chatPrompt, undefined, conversationManager, thinkingConfig));
2332
+ if (ctx)
2333
+ await executeChatStreaming(ctx, conversationManager);
2225
2334
  return;
2226
2335
  }
2227
2336
  // 如果内置命令未找到,尝试作为 skill 执行
@@ -2246,7 +2355,9 @@ async function handleSlashCommand(client, command, conversationManager) {
2246
2355
  }
2247
2356
  const messageContent = `[Skill: ${skill.skillName}]\n\n${skillContent}`;
2248
2357
  console.log(`[WebSocket] Executing skill ${skill.skillName}, content length: ${skillContent.length}`);
2249
- await handleChatMessage(client, messageContent, undefined, conversationManager);
2358
+ const skillCtx = await withSessionMutex(client, () => prepareChatSession(client, messageContent, undefined, conversationManager, thinkingConfig));
2359
+ if (skillCtx)
2360
+ await executeChatStreaming(skillCtx, conversationManager);
2250
2361
  return;
2251
2362
  }
2252
2363
  }
@@ -2326,6 +2437,7 @@ async function handleSessionList(client, payload, conversationManager) {
2326
2437
  updatedAt: s.updatedAt,
2327
2438
  messageCount: s.messageCount,
2328
2439
  model: s.model,
2440
+ runtimeBackend: s.runtimeBackend,
2329
2441
  cost: s.cost,
2330
2442
  tokenUsage: s.tokenUsage,
2331
2443
  tags: s.tags,
@@ -2357,22 +2469,27 @@ async function handleSessionCreate(client, payload, conversationManager) {
2357
2469
  try {
2358
2470
  const { name, model, tags, projectPath } = payload;
2359
2471
  const sessionManager = conversationManager.getSessionManager();
2472
+ const runtimeBackend = payload?.runtimeBackend || client.runtimeBackend || webAuth.getRuntimeBackend();
2473
+ const effectiveModel = normalizeWebRuntimeModelForBackend(runtimeBackend, model || client.model || getDefaultChatModel(runtimeBackend), webAuth.getDefaultModelByBackend()[runtimeBackend]);
2360
2474
  const newSession = sessionManager.createSession({
2361
2475
  name: name || `WebUI Session - ${new Date().toLocaleString('en-US')}`,
2362
- model: model || 'opus',
2476
+ model: effectiveModel,
2477
+ runtimeBackend,
2363
2478
  tags: tags || ['webui'],
2364
2479
  projectPath,
2365
2480
  });
2366
2481
  // 更新客户端会话状态
2367
2482
  client.sessionId = newSession.metadata.id;
2368
- client.model = model || 'opus';
2483
+ client.model = effectiveModel;
2484
+ client.runtimeBackend = runtimeBackend;
2369
2485
  client.projectPath = projectPath;
2370
2486
  sendMessage(ws, {
2371
2487
  type: 'session_created',
2372
2488
  payload: {
2373
2489
  sessionId: newSession.metadata.id,
2374
2490
  name: newSession.metadata.name,
2375
- model: newSession.metadata.model,
2491
+ model: effectiveModel,
2492
+ runtimeBackend,
2376
2493
  createdAt: newSession.metadata.createdAt,
2377
2494
  projectPath: newSession.metadata.projectPath,
2378
2495
  },
@@ -2400,11 +2517,13 @@ async function handleSessionNew(client, payload, conversationManager) {
2400
2517
  await conversationManager.persistSession(client.sessionId);
2401
2518
  // 生成新的临时 sessionId(使用 crypto 生成 UUID)
2402
2519
  const tempSessionId = randomUUID();
2403
- const model = payload?.model || client.model || 'opus';
2520
+ const runtimeBackend = payload?.runtimeBackend || client.runtimeBackend || webAuth.getRuntimeBackend();
2521
+ const model = normalizeWebRuntimeModelForBackend(runtimeBackend, payload?.model || client.model || getDefaultChatModel(runtimeBackend), webAuth.getDefaultModelByBackend()[runtimeBackend]);
2404
2522
  const projectPath = payload?.projectPath;
2405
2523
  // 更新 client 的 sessionId、model 和 projectPath
2406
2524
  client.sessionId = tempSessionId;
2407
2525
  client.model = model;
2526
+ client.runtimeBackend = runtimeBackend;
2408
2527
  client.projectPath = projectPath;
2409
2528
  // 清空内存中的会话状态(如果存在)
2410
2529
  // 不创建持久化会话,等待用户发送第一条消息时再创建
@@ -2415,6 +2534,7 @@ async function handleSessionNew(client, payload, conversationManager) {
2415
2534
  payload: {
2416
2535
  sessionId: tempSessionId,
2417
2536
  model: model,
2537
+ runtimeBackend,
2418
2538
  projectPath,
2419
2539
  },
2420
2540
  });
@@ -2429,39 +2549,68 @@ async function handleSessionNew(client, payload, conversationManager) {
2429
2549
  });
2430
2550
  }
2431
2551
  }
2552
+ function resolveSessionRestoreTargetId(conversationManager, requestedSessionId) {
2553
+ const resolvedSessionId = conversationManager.getSessionManager().findSessionIdByTemporarySessionId(requestedSessionId);
2554
+ if (resolvedSessionId && resolvedSessionId !== requestedSessionId) {
2555
+ console.log(`[WebSocket] Resolved temporary session ${requestedSessionId} -> ${resolvedSessionId}`);
2556
+ return resolvedSessionId;
2557
+ }
2558
+ return requestedSessionId;
2559
+ }
2432
2560
  /**
2433
2561
  * 处理切换会话请求
2434
2562
  */
2435
2563
  async function handleSessionSwitch(client, sessionId, conversationManager) {
2436
2564
  const { ws } = client;
2437
2565
  try {
2566
+ let targetSessionId = sessionId;
2438
2567
  // 提前更新 ws:如果目标会话已在内存中(正在处理),立即将其 ws 指向新连接
2439
2568
  // 这样在 await resumeSession() 期间,流式回调就能通过 getActiveWs() 获取到新 ws,
2440
2569
  // 避免消息发送到已关闭的旧连接而丢失
2441
- conversationManager.setWebSocket(sessionId, ws);
2570
+ conversationManager.setWebSocket(targetSessionId, ws);
2442
2571
  // 保存当前会话
2443
2572
  await conversationManager.persistSession(client.sessionId);
2444
2573
  // 恢复目标会话(传入客户端权限模式,确保 YOLO 等模式跨会话持久化)
2445
- const success = await conversationManager.resumeSession(sessionId, client.permissionMode);
2574
+ let success = await conversationManager.resumeSession(targetSessionId, client.permissionMode);
2575
+ if (!success) {
2576
+ const resolvedSessionId = resolveSessionRestoreTargetId(conversationManager, targetSessionId);
2577
+ if (resolvedSessionId !== targetSessionId) {
2578
+ targetSessionId = resolvedSessionId;
2579
+ conversationManager.setWebSocket(targetSessionId, ws);
2580
+ success = await conversationManager.resumeSession(targetSessionId, client.permissionMode);
2581
+ }
2582
+ }
2446
2583
  if (success) {
2447
2584
  // 更新客户端会话ID
2448
- client.sessionId = sessionId;
2585
+ client.sessionId = targetSessionId;
2449
2586
  // 恢复后再次更新 ws(resumeSession 可能从磁盘新建了 SessionState)
2450
- conversationManager.setWebSocket(sessionId, ws);
2587
+ conversationManager.setWebSocket(targetSessionId, ws);
2451
2588
  // 更新客户端项目路径(优化:从内存中的 SessionState 获取,避免重复读磁盘)
2452
- const projectPath = conversationManager.getSessionProjectPath(sessionId);
2589
+ const projectPath = conversationManager.getSessionProjectPath(targetSessionId);
2453
2590
  if (projectPath) {
2454
2591
  client.projectPath = projectPath;
2455
2592
  }
2456
2593
  // 获取会话历史(使用 getLiveHistory:处理中时从 messages 实时构建,确保工具调用中间 turn 不丢失)
2457
- const history = conversationManager.getLiveHistory(sessionId);
2458
- console.log(`[WebSocket] handleSessionSwitch: sessionId=${sessionId}, history.length=${history.length}, isProcessing=${conversationManager.isSessionProcessing(sessionId)}`);
2594
+ const history = conversationManager.getLiveHistory(targetSessionId);
2595
+ console.log(`[WebSocket] handleSessionSwitch: sessionId=${targetSessionId}, history.length=${history.length}, isProcessing=${conversationManager.isSessionProcessing(targetSessionId)}`);
2596
+ const sessionName = conversationManager.getSessionName(targetSessionId);
2597
+ const sessionRuntimeBackend = conversationManager.getSessionRuntimeBackend(targetSessionId) || webAuth.getRuntimeBackend();
2598
+ const sessionModel = conversationManager.getSessionModel(targetSessionId) || getDefaultChatModel(sessionRuntimeBackend);
2599
+ client.model = sessionModel;
2600
+ client.runtimeBackend = sessionRuntimeBackend;
2459
2601
  sendMessage(ws, {
2460
2602
  type: 'session_switched',
2461
- payload: { sessionId, projectPath: client.projectPath, history },
2603
+ payload: {
2604
+ sessionId: targetSessionId,
2605
+ sessionName,
2606
+ projectPath: client.projectPath,
2607
+ history,
2608
+ model: sessionModel,
2609
+ runtimeBackend: sessionRuntimeBackend,
2610
+ },
2462
2611
  });
2463
2612
  // 同步权限配置到客户端(刷新后客户端 permissionMode 会重置为 'default',需要从服务端恢复)
2464
- const permConfig = conversationManager.getPermissionConfig(sessionId);
2613
+ const permConfig = conversationManager.getPermissionConfig(targetSessionId);
2465
2614
  if (permConfig) {
2466
2615
  sendMessage(ws, {
2467
2616
  type: 'permission_config_update',
@@ -2475,33 +2624,33 @@ async function handleSessionSwitch(client, sessionId, conversationManager) {
2475
2624
  }
2476
2625
  // 如果会话正在处理中(如页面刷新),恢复流式状态
2477
2626
  // 补发 message_start + 已累积的内容,让客户端立即显示已生成的内容
2478
- const isProcessing = conversationManager.isSessionProcessing(sessionId);
2627
+ const isProcessing = conversationManager.isSessionProcessing(targetSessionId);
2479
2628
  if (isProcessing) {
2480
2629
  const resumeMessageId = `resume-${Date.now()}`;
2481
2630
  // 补发 message_start,客户端收到后会创建 currentMessageRef
2482
2631
  sendMessage(ws, {
2483
2632
  type: 'message_start',
2484
- payload: { messageId: resumeMessageId, sessionId },
2633
+ payload: { messageId: resumeMessageId, sessionId: targetSessionId },
2485
2634
  });
2486
2635
  // 获取已累积的流式中间内容,补发给客户端
2487
2636
  // 这样用户刷新后能立即看到 API 已经生成的内容,而不是空气泡
2488
- const streamingContent = conversationManager.getStreamingContent(sessionId);
2637
+ const streamingContent = conversationManager.getStreamingContent(targetSessionId);
2489
2638
  if (streamingContent) {
2490
2639
  // 补发 thinking 内容(如果有)
2491
2640
  if (streamingContent.thinkingText) {
2492
2641
  sendMessage(ws, {
2493
2642
  type: 'thinking_start',
2494
- payload: { messageId: resumeMessageId, sessionId },
2643
+ payload: { messageId: resumeMessageId, sessionId: targetSessionId },
2495
2644
  });
2496
2645
  sendMessage(ws, {
2497
2646
  type: 'thinking_delta',
2498
- payload: { messageId: resumeMessageId, text: streamingContent.thinkingText, sessionId },
2647
+ payload: { messageId: resumeMessageId, text: streamingContent.thinkingText, sessionId: targetSessionId },
2499
2648
  });
2500
2649
  // 如果已有 text 内容,说明 thinking 已经结束
2501
2650
  if (streamingContent.textContent) {
2502
2651
  sendMessage(ws, {
2503
2652
  type: 'thinking_complete',
2504
- payload: { messageId: resumeMessageId, sessionId },
2653
+ payload: { messageId: resumeMessageId, sessionId: targetSessionId },
2505
2654
  });
2506
2655
  }
2507
2656
  }
@@ -2509,39 +2658,40 @@ async function handleSessionSwitch(client, sessionId, conversationManager) {
2509
2658
  if (streamingContent.textContent) {
2510
2659
  sendMessage(ws, {
2511
2660
  type: 'text_delta',
2512
- payload: { messageId: resumeMessageId, text: streamingContent.textContent, sessionId },
2661
+ payload: { messageId: resumeMessageId, text: streamingContent.textContent, sessionId: targetSessionId },
2513
2662
  });
2514
2663
  }
2515
2664
  }
2516
2665
  sendMessage(ws, {
2517
2666
  type: 'status',
2518
- payload: { status: 'streaming', message: 'Processing conversation...', sessionId },
2667
+ payload: { status: 'streaming', message: 'Processing conversation...', sessionId: targetSessionId },
2519
2668
  });
2520
2669
  // 重发待处理的权限请求和用户问题
2521
2670
  // 会话正在处理中且被阻塞在等待用户响应时,切换回来后需要重新弹出对话框
2522
- const pendingPermissions = conversationManager.getPendingPermissionRequests(sessionId);
2671
+ const pendingPermissions = conversationManager.getPendingPermissionRequests(targetSessionId);
2523
2672
  for (const req of pendingPermissions) {
2524
2673
  sendMessage(ws, {
2525
2674
  type: 'permission_request',
2526
- payload: { ...req, sessionId },
2675
+ payload: { ...req, sessionId: targetSessionId },
2527
2676
  });
2528
2677
  console.log(`[WebSocket] Resending pending permission request: ${req.tool} (${req.requestId})`);
2529
2678
  }
2530
- const pendingQuestions = conversationManager.getPendingUserQuestions(sessionId);
2679
+ const pendingQuestions = conversationManager.getUndeliveredPendingUserQuestions(targetSessionId);
2531
2680
  for (const q of pendingQuestions) {
2532
2681
  sendMessage(ws, {
2533
2682
  type: 'user_question',
2534
- payload: { ...q, sessionId },
2683
+ payload: { ...q, sessionId: targetSessionId },
2535
2684
  });
2685
+ conversationManager.markPendingUserQuestionDelivered(targetSessionId, q.requestId);
2536
2686
  console.log(`[WebSocket] Resending pending user question: ${q.header} (${q.requestId})`);
2537
2687
  }
2538
2688
  }
2539
- else if (conversationManager.needsContinuation(sessionId)) {
2689
+ else if (conversationManager.needsContinuation(targetSessionId)) {
2540
2690
  // SelfEvolve 重启等场景:工具结果已保存但模型还没来得及继续回复
2541
2691
  // 自动触发对话继续,让模型接着上次中断的地方回复
2542
- console.log(`[WebSocket] Session ${sessionId} needs continuation (last message is tool_result), auto-triggering`);
2692
+ console.log(`[WebSocket] Session ${targetSessionId} needs continuation (last message is tool_result), auto-triggering`);
2543
2693
  const continueMessageId = randomUUID();
2544
- const chatSessionId = sessionId;
2694
+ const chatSessionId = targetSessionId;
2545
2695
  const getActiveWs = () => {
2546
2696
  return conversationManager.getWebSocket(chatSessionId) || ws;
2547
2697
  };
@@ -2589,6 +2739,12 @@ async function handleSessionSwitch(client, sessionId, conversationManager) {
2589
2739
  payload: { status: 'tool_executing', message: `Executing ${toolName}...`, sessionId: chatSessionId },
2590
2740
  });
2591
2741
  },
2742
+ onToolUseInputReady: (toolUseId, input) => {
2743
+ sendMessage(getActiveWs(), {
2744
+ type: 'tool_use_input_ready',
2745
+ payload: { toolUseId, input, sessionId: chatSessionId },
2746
+ });
2747
+ },
2592
2748
  onToolUseDelta: (toolUseId, partialJson) => {
2593
2749
  sendMessage(getActiveWs(), {
2594
2750
  type: 'tool_use_delta',
@@ -2682,9 +2838,17 @@ async function handleSessionSwitch(client, sessionId, conversationManager) {
2682
2838
  // IM 会话尚未创建(首条消息还在处理中),预先切换过去
2683
2839
  // chat() 运行时会在内存中创建该会话,流式消息会正常显示
2684
2840
  client.sessionId = sessionId;
2841
+ client.runtimeBackend = webAuth.getRuntimeBackend();
2842
+ client.model = getDefaultChatModel(client.runtimeBackend);
2685
2843
  sendMessage(ws, {
2686
2844
  type: 'session_switched',
2687
- payload: { sessionId, projectPath: client.projectPath, history: [] },
2845
+ payload: {
2846
+ sessionId,
2847
+ projectPath: client.projectPath,
2848
+ history: [],
2849
+ model: client.model,
2850
+ runtimeBackend: client.runtimeBackend,
2851
+ },
2688
2852
  });
2689
2853
  }
2690
2854
  else {
@@ -2838,15 +3002,27 @@ async function handleSessionImport(client, content, format, conversationManager)
2838
3002
  async function handleSessionResume(client, sessionId, conversationManager) {
2839
3003
  const { ws } = client;
2840
3004
  try {
2841
- const success = await conversationManager.resumeSession(sessionId, client.permissionMode);
3005
+ let targetSessionId = sessionId;
3006
+ let success = await conversationManager.resumeSession(targetSessionId, client.permissionMode);
3007
+ if (!success) {
3008
+ const resolvedSessionId = resolveSessionRestoreTargetId(conversationManager, targetSessionId);
3009
+ if (resolvedSessionId !== targetSessionId) {
3010
+ targetSessionId = resolvedSessionId;
3011
+ success = await conversationManager.resumeSession(targetSessionId, client.permissionMode);
3012
+ }
3013
+ }
2842
3014
  if (success) {
2843
- client.sessionId = sessionId;
3015
+ client.sessionId = targetSessionId;
2844
3016
  // 重要:更新会话的 WebSocket 连接,确保 UserInteractionHandler 和 TaskManager 使用新连接
2845
- conversationManager.setWebSocket(sessionId, ws);
2846
- const history = conversationManager.getHistory(sessionId);
3017
+ conversationManager.setWebSocket(targetSessionId, ws);
3018
+ const history = conversationManager.getHistory(targetSessionId);
3019
+ const sessionRuntimeBackend = conversationManager.getSessionRuntimeBackend(targetSessionId) || webAuth.getRuntimeBackend();
3020
+ const sessionModel = conversationManager.getSessionModel(targetSessionId) || getDefaultChatModel(sessionRuntimeBackend);
3021
+ client.model = sessionModel;
3022
+ client.runtimeBackend = sessionRuntimeBackend;
2847
3023
  sendMessage(ws, {
2848
3024
  type: 'session_switched',
2849
- payload: { sessionId, history },
3025
+ payload: { sessionId: targetSessionId, history, model: sessionModel, runtimeBackend: sessionRuntimeBackend },
2850
3026
  });
2851
3027
  }
2852
3028
  else {