@xrkseek/harness-cli 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1000) hide show
  1. package/README.md +13 -6
  2. package/dist/commands/plugin.d.ts.map +1 -1
  3. package/dist/commands/plugin.js +4 -3
  4. package/dist/commands/plugin.js.map +1 -1
  5. package/dist/commands/restart.d.ts.map +1 -1
  6. package/dist/commands/restart.js +16 -7
  7. package/dist/commands/restart.js.map +1 -1
  8. package/dist/commands/serve.d.ts.map +1 -1
  9. package/dist/commands/serve.js +15 -3
  10. package/dist/commands/serve.js.map +1 -1
  11. package/dist/host-lock.d.ts +15 -0
  12. package/dist/host-lock.d.ts.map +1 -0
  13. package/dist/host-lock.js +64 -0
  14. package/dist/host-lock.js.map +1 -0
  15. package/dist/parse-args.d.ts.map +1 -1
  16. package/dist/parse-args.js +13 -10
  17. package/dist/parse-args.js.map +1 -1
  18. package/dist/plugin/install-client.d.ts.map +1 -1
  19. package/dist/plugin/install-client.js +80 -2
  20. package/dist/plugin/install-client.js.map +1 -1
  21. package/dist/port.d.ts +20 -2
  22. package/dist/port.d.ts.map +1 -1
  23. package/dist/port.js +147 -28
  24. package/dist/port.js.map +1 -1
  25. package/node_modules/@img/colour/LICENSE.md +82 -0
  26. package/node_modules/@img/colour/README.md +15 -0
  27. package/node_modules/@img/colour/color.cjs +1596 -0
  28. package/node_modules/@img/colour/index.cjs +1 -0
  29. package/node_modules/@img/colour/index.d.ts +929 -0
  30. package/node_modules/@img/colour/package.json +58 -0
  31. package/node_modules/@img/sharp-win32-x64/LICENSE +191 -0
  32. package/node_modules/@img/sharp-win32-x64/README.md +59 -0
  33. package/node_modules/@img/sharp-win32-x64/index.cjs +1 -0
  34. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  35. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.3.dll +0 -0
  36. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.3.node +0 -0
  37. package/node_modules/@img/sharp-win32-x64/package.json +40 -0
  38. package/node_modules/@img/sharp-win32-x64/versions.json +30 -0
  39. package/node_modules/@types/node/LICENSE +21 -0
  40. package/node_modules/@types/node/README.md +15 -0
  41. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  42. package/node_modules/@types/node/assert.d.ts +1115 -0
  43. package/node_modules/@types/node/async_hooks.d.ts +623 -0
  44. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  45. package/node_modules/@types/node/buffer.d.ts +1934 -0
  46. package/node_modules/@types/node/child_process.d.ts +1476 -0
  47. package/node_modules/@types/node/cluster.d.ts +578 -0
  48. package/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  49. package/node_modules/@types/node/console.d.ts +453 -0
  50. package/node_modules/@types/node/constants.d.ts +21 -0
  51. package/node_modules/@types/node/crypto.d.ts +5417 -0
  52. package/node_modules/@types/node/dgram.d.ts +600 -0
  53. package/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  54. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  55. package/node_modules/@types/node/dns.d.ts +923 -0
  56. package/node_modules/@types/node/domain.d.ts +166 -0
  57. package/node_modules/@types/node/events.d.ts +976 -0
  58. package/node_modules/@types/node/fs/promises.d.ts +1341 -0
  59. package/node_modules/@types/node/fs.d.ts +4714 -0
  60. package/node_modules/@types/node/globals.d.ts +170 -0
  61. package/node_modules/@types/node/globals.typedarray.d.ts +41 -0
  62. package/node_modules/@types/node/http.d.ts +2154 -0
  63. package/node_modules/@types/node/http2.d.ts +2835 -0
  64. package/node_modules/@types/node/https.d.ts +585 -0
  65. package/node_modules/@types/node/index.d.ts +101 -0
  66. package/node_modules/@types/node/inspector.d.ts +277 -0
  67. package/node_modules/@types/node/inspector.generated.d.ts +4239 -0
  68. package/node_modules/@types/node/module.d.ts +843 -0
  69. package/node_modules/@types/node/net.d.ts +1073 -0
  70. package/node_modules/@types/node/os.d.ts +507 -0
  71. package/node_modules/@types/node/package.json +155 -0
  72. package/node_modules/@types/node/path.d.ts +200 -0
  73. package/node_modules/@types/node/perf_hooks.d.ts +1042 -0
  74. package/node_modules/@types/node/process.d.ts +2102 -0
  75. package/node_modules/@types/node/punycode.d.ts +117 -0
  76. package/node_modules/@types/node/querystring.d.ts +152 -0
  77. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  78. package/node_modules/@types/node/readline.d.ts +600 -0
  79. package/node_modules/@types/node/repl.d.ts +438 -0
  80. package/node_modules/@types/node/sea.d.ts +162 -0
  81. package/node_modules/@types/node/sqlite.d.ts +1040 -0
  82. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  83. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  84. package/node_modules/@types/node/stream/web.d.ts +573 -0
  85. package/node_modules/@types/node/stream.d.ts +1706 -0
  86. package/node_modules/@types/node/string_decoder.d.ts +67 -0
  87. package/node_modules/@types/node/test.d.ts +2349 -0
  88. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  89. package/node_modules/@types/node/timers.d.ts +285 -0
  90. package/node_modules/@types/node/tls.d.ts +1279 -0
  91. package/node_modules/@types/node/trace_events.d.ts +197 -0
  92. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  93. package/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  94. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  95. package/node_modules/@types/node/ts5.6/index.d.ts +103 -0
  96. package/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  97. package/node_modules/@types/node/ts5.7/index.d.ts +103 -0
  98. package/node_modules/@types/node/tty.d.ts +208 -0
  99. package/node_modules/@types/node/url.d.ts +1079 -0
  100. package/node_modules/@types/node/util.d.ts +2336 -0
  101. package/node_modules/@types/node/v8.d.ts +982 -0
  102. package/node_modules/@types/node/vm.d.ts +1195 -0
  103. package/node_modules/@types/node/wasi.d.ts +202 -0
  104. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  105. package/node_modules/@types/node/web-globals/crypto.d.ts +32 -0
  106. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  107. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  108. package/node_modules/@types/node/web-globals/fetch.d.ts +62 -0
  109. package/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  110. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  111. package/node_modules/@types/node/web-globals/streams.d.ts +22 -0
  112. package/node_modules/@types/node/worker_threads.d.ts +894 -0
  113. package/node_modules/@types/node/zlib.d.ts +745 -0
  114. package/node_modules/@xrkseek/attachment/dist/error.d.ts +3 -2
  115. package/node_modules/@xrkseek/attachment/dist/error.d.ts.map +1 -1
  116. package/node_modules/@xrkseek/attachment/dist/error.js +17 -2
  117. package/node_modules/@xrkseek/attachment/dist/error.js.map +1 -1
  118. package/node_modules/@xrkseek/attachment/dist/index.d.ts +2 -2
  119. package/node_modules/@xrkseek/attachment/dist/index.d.ts.map +1 -1
  120. package/node_modules/@xrkseek/attachment/dist/index.js +1 -1
  121. package/node_modules/@xrkseek/attachment/dist/index.js.map +1 -1
  122. package/node_modules/@xrkseek/attachment/dist/memory.d.ts.map +1 -1
  123. package/node_modules/@xrkseek/attachment/dist/memory.js +6 -0
  124. package/node_modules/@xrkseek/attachment/dist/memory.js.map +1 -1
  125. package/node_modules/@xrkseek/attachment/dist/store.d.ts +6 -1
  126. package/node_modules/@xrkseek/attachment/dist/store.d.ts.map +1 -1
  127. package/node_modules/@xrkseek/attachment/dist/types.d.ts +19 -0
  128. package/node_modules/@xrkseek/attachment/dist/types.d.ts.map +1 -1
  129. package/node_modules/@xrkseek/attachment/dist/types.js.map +1 -1
  130. package/node_modules/@xrkseek/attachment-local/README.md +3 -0
  131. package/node_modules/@xrkseek/attachment-local/dist/compression-limiter.d.ts +18 -0
  132. package/node_modules/@xrkseek/attachment-local/dist/compression-limiter.d.ts.map +1 -0
  133. package/node_modules/@xrkseek/attachment-local/dist/compression-limiter.js +43 -0
  134. package/node_modules/@xrkseek/attachment-local/dist/compression-limiter.js.map +1 -0
  135. package/node_modules/@xrkseek/attachment-local/dist/encoding.d.ts +23 -0
  136. package/node_modules/@xrkseek/attachment-local/dist/encoding.d.ts.map +1 -0
  137. package/node_modules/@xrkseek/attachment-local/dist/encoding.js +33 -0
  138. package/node_modules/@xrkseek/attachment-local/dist/encoding.js.map +1 -0
  139. package/node_modules/@xrkseek/attachment-local/dist/image.d.ts +54 -0
  140. package/node_modules/@xrkseek/attachment-local/dist/image.d.ts.map +1 -0
  141. package/node_modules/@xrkseek/attachment-local/dist/image.js +97 -0
  142. package/node_modules/@xrkseek/attachment-local/dist/image.js.map +1 -0
  143. package/node_modules/@xrkseek/attachment-local/dist/index.d.ts +32 -0
  144. package/node_modules/@xrkseek/attachment-local/dist/index.d.ts.map +1 -0
  145. package/node_modules/@xrkseek/attachment-local/dist/index.js +188 -0
  146. package/node_modules/@xrkseek/attachment-local/dist/index.js.map +1 -0
  147. package/node_modules/@xrkseek/attachment-local/dist/normalization.d.ts +44 -0
  148. package/node_modules/@xrkseek/attachment-local/dist/normalization.d.ts.map +1 -0
  149. package/node_modules/@xrkseek/attachment-local/dist/normalization.js +148 -0
  150. package/node_modules/@xrkseek/attachment-local/dist/normalization.js.map +1 -0
  151. package/node_modules/@xrkseek/attachment-local/dist/request-image.d.ts +34 -0
  152. package/node_modules/@xrkseek/attachment-local/dist/request-image.d.ts.map +1 -0
  153. package/node_modules/@xrkseek/attachment-local/dist/request-image.js +208 -0
  154. package/node_modules/@xrkseek/attachment-local/dist/request-image.js.map +1 -0
  155. package/node_modules/@xrkseek/attachment-local/dist/store.d.ts +58 -0
  156. package/node_modules/@xrkseek/attachment-local/dist/store.d.ts.map +1 -0
  157. package/node_modules/@xrkseek/attachment-local/dist/store.js +290 -0
  158. package/node_modules/@xrkseek/attachment-local/dist/store.js.map +1 -0
  159. package/node_modules/@xrkseek/attachment-local/package.json +25 -0
  160. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts +3 -0
  161. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts.map +1 -1
  162. package/node_modules/@xrkseek/exec-fs/dist/index.js +10 -0
  163. package/node_modules/@xrkseek/exec-fs/dist/index.js.map +1 -1
  164. package/node_modules/@xrkseek/exec-fs/dist/read-image.d.ts +35 -0
  165. package/node_modules/@xrkseek/exec-fs/dist/read-image.d.ts.map +1 -0
  166. package/node_modules/@xrkseek/exec-fs/dist/read-image.js +120 -0
  167. package/node_modules/@xrkseek/exec-fs/dist/read-image.js.map +1 -0
  168. package/node_modules/@xrkseek/exec-fs/package.json +3 -1
  169. package/node_modules/@xrkseek/llm/dist/index.d.ts +1 -0
  170. package/node_modules/@xrkseek/llm/dist/index.d.ts.map +1 -1
  171. package/node_modules/@xrkseek/llm/dist/index.js.map +1 -1
  172. package/node_modules/@xrkseek/llm-deepseek/README.md +3 -1
  173. package/node_modules/@xrkseek/llm-deepseek/dist/file-id.d.ts +10 -0
  174. package/node_modules/@xrkseek/llm-deepseek/dist/file-id.d.ts.map +1 -0
  175. package/node_modules/@xrkseek/llm-deepseek/dist/file-id.js +8 -0
  176. package/node_modules/@xrkseek/llm-deepseek/dist/file-id.js.map +1 -0
  177. package/node_modules/@xrkseek/llm-deepseek/dist/file-store.d.ts +40 -0
  178. package/node_modules/@xrkseek/llm-deepseek/dist/file-store.d.ts.map +1 -0
  179. package/node_modules/@xrkseek/llm-deepseek/dist/file-store.js +164 -0
  180. package/node_modules/@xrkseek/llm-deepseek/dist/file-store.js.map +1 -0
  181. package/node_modules/@xrkseek/llm-deepseek/dist/files-api.d.ts +56 -0
  182. package/node_modules/@xrkseek/llm-deepseek/dist/files-api.d.ts.map +1 -0
  183. package/node_modules/@xrkseek/llm-deepseek/dist/files-api.js +180 -0
  184. package/node_modules/@xrkseek/llm-deepseek/dist/files-api.js.map +1 -0
  185. package/node_modules/@xrkseek/llm-deepseek/dist/index.d.ts +15 -6
  186. package/node_modules/@xrkseek/llm-deepseek/dist/index.d.ts.map +1 -1
  187. package/node_modules/@xrkseek/llm-deepseek/dist/index.js +63 -13
  188. package/node_modules/@xrkseek/llm-deepseek/dist/index.js.map +1 -1
  189. package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.d.ts +8 -0
  190. package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.d.ts.map +1 -0
  191. package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.js +12 -0
  192. package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.js.map +1 -0
  193. package/node_modules/@xrkseek/llm-deepseek/dist/upload-index.d.ts +28 -0
  194. package/node_modules/@xrkseek/llm-deepseek/dist/upload-index.d.ts.map +1 -0
  195. package/node_modules/@xrkseek/llm-deepseek/dist/upload-index.js +142 -0
  196. package/node_modules/@xrkseek/llm-deepseek/dist/upload-index.js.map +1 -0
  197. package/node_modules/@xrkseek/llm-deepseek/package.json +3 -1
  198. package/node_modules/@xrkseek/llm-openai-compatible/dist/index.d.ts +27 -0
  199. package/node_modules/@xrkseek/llm-openai-compatible/dist/index.d.ts.map +1 -1
  200. package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js +20 -5
  201. package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js.map +1 -1
  202. package/node_modules/@xrkseek/llm-registry/dist/registry.d.ts +1 -0
  203. package/node_modules/@xrkseek/llm-registry/dist/registry.d.ts.map +1 -1
  204. package/node_modules/@xrkseek/llm-registry/dist/registry.js +15 -1
  205. package/node_modules/@xrkseek/llm-registry/dist/registry.js.map +1 -1
  206. package/node_modules/@xrkseek/preset-harness/README.md +5 -2
  207. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +5 -0
  208. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  209. package/node_modules/@xrkseek/preset-harness/dist/preset.js +12 -3
  210. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  211. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  212. package/node_modules/@xrkseek/preset-harness/package.json +1 -0
  213. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  214. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
  215. package/node_modules/@xrkseek/preset-server/dist/preset.js +3 -1
  216. package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
  217. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  218. package/node_modules/@xrkseek/protocol/dist/content.d.ts +5 -0
  219. package/node_modules/@xrkseek/protocol/dist/content.d.ts.map +1 -1
  220. package/node_modules/@xrkseek/protocol/dist/content.js +8 -1
  221. package/node_modules/@xrkseek/protocol/dist/content.js.map +1 -1
  222. package/node_modules/@xrkseek/server-face/dist/context.d.ts +6 -3
  223. package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
  224. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.d.ts +9 -0
  225. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.d.ts.map +1 -0
  226. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.js +28 -0
  227. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.js.map +1 -0
  228. package/node_modules/@xrkseek/server-face/dist/cost-meter-balance.d.ts +16 -0
  229. package/node_modules/@xrkseek/server-face/dist/cost-meter-balance.d.ts.map +1 -0
  230. package/node_modules/@xrkseek/server-face/dist/cost-meter-balance.js +141 -0
  231. package/node_modules/@xrkseek/server-face/dist/cost-meter-balance.js.map +1 -0
  232. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plan-service.d.ts +13 -0
  233. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plan-service.d.ts.map +1 -0
  234. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plan-service.js +158 -0
  235. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plan-service.js.map +1 -0
  236. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plans.d.ts +284 -0
  237. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plans.d.ts.map +1 -0
  238. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plans.js +696 -0
  239. package/node_modules/@xrkseek/server-face/dist/cost-meter-coding-plans.js.map +1 -0
  240. package/node_modules/@xrkseek/server-face/dist/cost-meter-custom-balance.d.ts +15 -0
  241. package/node_modules/@xrkseek/server-face/dist/cost-meter-custom-balance.d.ts.map +1 -0
  242. package/node_modules/@xrkseek/server-face/dist/cost-meter-custom-balance.js +196 -0
  243. package/node_modules/@xrkseek/server-face/dist/cost-meter-custom-balance.js.map +1 -0
  244. package/node_modules/@xrkseek/server-face/dist/cost-meter-go-quota.d.ts +19 -0
  245. package/node_modules/@xrkseek/server-face/dist/cost-meter-go-quota.d.ts.map +1 -0
  246. package/node_modules/@xrkseek/server-face/dist/cost-meter-go-quota.js +143 -0
  247. package/node_modules/@xrkseek/server-face/dist/cost-meter-go-quota.js.map +1 -0
  248. package/node_modules/@xrkseek/server-face/dist/cost-meter-pricing.d.ts +16 -0
  249. package/node_modules/@xrkseek/server-face/dist/cost-meter-pricing.d.ts.map +1 -0
  250. package/node_modules/@xrkseek/server-face/dist/cost-meter-pricing.js +84 -0
  251. package/node_modules/@xrkseek/server-face/dist/cost-meter-pricing.js.map +1 -0
  252. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.d.ts +19 -0
  253. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.d.ts.map +1 -0
  254. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.js +221 -0
  255. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.js.map +1 -0
  256. package/node_modules/@xrkseek/server-face/dist/cost-meter-store.d.ts +133 -0
  257. package/node_modules/@xrkseek/server-face/dist/cost-meter-store.d.ts.map +1 -0
  258. package/node_modules/@xrkseek/server-face/dist/cost-meter-store.js +561 -0
  259. package/node_modules/@xrkseek/server-face/dist/cost-meter-store.js.map +1 -0
  260. package/node_modules/@xrkseek/server-face/dist/dispatch.d.ts.map +1 -1
  261. package/node_modules/@xrkseek/server-face/dist/dispatch.js +15 -0
  262. package/node_modules/@xrkseek/server-face/dist/dispatch.js.map +1 -1
  263. package/node_modules/@xrkseek/server-face/dist/handlers/cordis-stub.d.ts +0 -5
  264. package/node_modules/@xrkseek/server-face/dist/handlers/cordis-stub.d.ts.map +1 -1
  265. package/node_modules/@xrkseek/server-face/dist/handlers/cordis-stub.js +277 -24
  266. package/node_modules/@xrkseek/server-face/dist/handlers/cordis-stub.js.map +1 -1
  267. package/node_modules/@xrkseek/server-face/dist/handlers/cost-meter.d.ts +30 -0
  268. package/node_modules/@xrkseek/server-face/dist/handlers/cost-meter.d.ts.map +1 -0
  269. package/node_modules/@xrkseek/server-face/dist/handlers/cost-meter.js +48 -0
  270. package/node_modules/@xrkseek/server-face/dist/handlers/cost-meter.js.map +1 -0
  271. package/node_modules/@xrkseek/server-face/dist/handlers/references.d.ts +6 -0
  272. package/node_modules/@xrkseek/server-face/dist/handlers/references.d.ts.map +1 -0
  273. package/node_modules/@xrkseek/server-face/dist/handlers/references.js +42 -0
  274. package/node_modules/@xrkseek/server-face/dist/handlers/references.js.map +1 -0
  275. package/node_modules/@xrkseek/server-face/dist/handlers/staged-client-code.d.ts +6 -0
  276. package/node_modules/@xrkseek/server-face/dist/handlers/staged-client-code.d.ts.map +1 -0
  277. package/node_modules/@xrkseek/server-face/dist/handlers/staged-client-code.js +24 -0
  278. package/node_modules/@xrkseek/server-face/dist/handlers/staged-client-code.js.map +1 -0
  279. package/node_modules/@xrkseek/server-face/dist/index.d.ts +1 -0
  280. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  281. package/node_modules/@xrkseek/server-face/dist/index.js +1 -0
  282. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  283. package/node_modules/@xrkseek/server-face/dist/llm-resolve.d.ts.map +1 -1
  284. package/node_modules/@xrkseek/server-face/dist/llm-resolve.js +5 -3
  285. package/node_modules/@xrkseek/server-face/dist/llm-resolve.js.map +1 -1
  286. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.d.ts +2 -2
  287. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.d.ts.map +1 -1
  288. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.js +7 -3
  289. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.js.map +1 -1
  290. package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts.map +1 -1
  291. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js +3 -3
  292. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
  293. package/node_modules/@xrkseek/server-face/dist/projections/index.d.ts +2 -0
  294. package/node_modules/@xrkseek/server-face/dist/projections/index.d.ts.map +1 -1
  295. package/node_modules/@xrkseek/server-face/dist/projections/index.js +2 -0
  296. package/node_modules/@xrkseek/server-face/dist/projections/index.js.map +1 -1
  297. package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.d.ts.map +1 -1
  298. package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.js +12 -0
  299. package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.js.map +1 -1
  300. package/node_modules/@xrkseek/server-face/dist/projections/registry.d.ts +45 -0
  301. package/node_modules/@xrkseek/server-face/dist/projections/registry.d.ts.map +1 -1
  302. package/node_modules/@xrkseek/server-face/dist/projections/registry.js.map +1 -1
  303. package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.d.ts +40 -0
  304. package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.d.ts.map +1 -0
  305. package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.js +103 -0
  306. package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.js.map +1 -0
  307. package/node_modules/@xrkseek/server-face/dist/projections/units/context-headers.d.ts +9 -0
  308. package/node_modules/@xrkseek/server-face/dist/projections/units/context-headers.d.ts.map +1 -0
  309. package/node_modules/@xrkseek/server-face/dist/projections/units/context-headers.js +24 -0
  310. package/node_modules/@xrkseek/server-face/dist/projections/units/context-headers.js.map +1 -0
  311. package/node_modules/@xrkseek/server-face/dist/projections/units/context-timeline.d.ts +37 -0
  312. package/node_modules/@xrkseek/server-face/dist/projections/units/context-timeline.d.ts.map +1 -0
  313. package/node_modules/@xrkseek/server-face/dist/projections/units/context-timeline.js +109 -0
  314. package/node_modules/@xrkseek/server-face/dist/projections/units/context-timeline.js.map +1 -0
  315. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.d.ts +35 -0
  316. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.d.ts.map +1 -0
  317. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.js +151 -0
  318. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.js.map +1 -0
  319. package/node_modules/@xrkseek/server-face/dist/reference-discovery.d.ts +13 -0
  320. package/node_modules/@xrkseek/server-face/dist/reference-discovery.d.ts.map +1 -0
  321. package/node_modules/@xrkseek/server-face/dist/reference-discovery.js +81 -0
  322. package/node_modules/@xrkseek/server-face/dist/reference-discovery.js.map +1 -0
  323. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts +5 -1
  324. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  325. package/node_modules/@xrkseek/server-face/dist/runtime.js +25 -0
  326. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  327. package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts +15 -0
  328. package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts.map +1 -1
  329. package/node_modules/@xrkseek/server-face/dist/settings-credentials.js.map +1 -1
  330. package/node_modules/@xrkseek/server-face/dist/slash.d.ts.map +1 -1
  331. package/node_modules/@xrkseek/server-face/dist/slash.js +19 -0
  332. package/node_modules/@xrkseek/server-face/dist/slash.js.map +1 -1
  333. package/node_modules/@xrkseek/server-face/dist/wire/paths.d.ts.map +1 -1
  334. package/node_modules/@xrkseek/server-face/dist/wire/paths.js +3 -0
  335. package/node_modules/@xrkseek/server-face/dist/wire/paths.js.map +1 -1
  336. package/node_modules/@xrkseek/server-face/package.json +3 -0
  337. package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.d.ts +4 -0
  338. package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.d.ts.map +1 -0
  339. package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.js +10 -0
  340. package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.js.map +1 -0
  341. package/node_modules/@xrkseek/server-host/dist/cost-meter-bridge.d.ts +11 -0
  342. package/node_modules/@xrkseek/server-host/dist/cost-meter-bridge.d.ts.map +1 -0
  343. package/node_modules/@xrkseek/server-host/dist/cost-meter-bridge.js +29 -0
  344. package/node_modules/@xrkseek/server-host/dist/cost-meter-bridge.js.map +1 -0
  345. package/node_modules/@xrkseek/server-host/dist/harness-connector-bridge.d.ts +15 -0
  346. package/node_modules/@xrkseek/server-host/dist/harness-connector-bridge.d.ts.map +1 -0
  347. package/node_modules/@xrkseek/server-host/dist/harness-connector-bridge.js +34 -0
  348. package/node_modules/@xrkseek/server-host/dist/harness-connector-bridge.js.map +1 -0
  349. package/node_modules/@xrkseek/server-host/dist/index.d.ts +6 -1
  350. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  351. package/node_modules/@xrkseek/server-host/dist/index.js +126 -19
  352. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  353. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.d.ts +17 -0
  354. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.d.ts.map +1 -0
  355. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.js +201 -0
  356. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.js.map +1 -0
  357. package/node_modules/@xrkseek/server-host/dist/usage-stats-bridge.d.ts +10 -0
  358. package/node_modules/@xrkseek/server-host/dist/usage-stats-bridge.d.ts.map +1 -0
  359. package/node_modules/@xrkseek/server-host/dist/usage-stats-bridge.js +31 -0
  360. package/node_modules/@xrkseek/server-host/dist/usage-stats-bridge.js.map +1 -0
  361. package/node_modules/@xrkseek/server-host/dist/wallet-bridge.d.ts +7 -0
  362. package/node_modules/@xrkseek/server-host/dist/wallet-bridge.d.ts.map +1 -0
  363. package/node_modules/@xrkseek/server-host/dist/wallet-bridge.js +40 -0
  364. package/node_modules/@xrkseek/server-host/dist/wallet-bridge.js.map +1 -0
  365. package/node_modules/@xrkseek/server-host/package.json +8 -1
  366. package/node_modules/@xrkseek/server-http/dist/boot-inject.d.ts +12 -0
  367. package/node_modules/@xrkseek/server-http/dist/boot-inject.d.ts.map +1 -1
  368. package/node_modules/@xrkseek/server-http/dist/boot-inject.js +54 -0
  369. package/node_modules/@xrkseek/server-http/dist/boot-inject.js.map +1 -1
  370. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-compose.d.ts +6 -0
  371. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-compose.d.ts.map +1 -0
  372. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-compose.js +141 -0
  373. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-compose.js.map +1 -0
  374. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.d.ts +3 -0
  375. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.d.ts.map +1 -0
  376. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js +445 -0
  377. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js.map +1 -0
  378. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-registry.d.ts +7 -0
  379. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-registry.d.ts.map +1 -0
  380. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-registry.js +15 -0
  381. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-registry.js.map +1 -0
  382. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts +57 -0
  383. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts.map +1 -0
  384. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.js +2 -0
  385. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.js.map +1 -0
  386. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapters/builtin.d.ts +10 -0
  387. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapters/builtin.d.ts.map +1 -0
  388. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapters/builtin.js +275 -0
  389. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapters/builtin.js.map +1 -0
  390. package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.d.ts +10 -0
  391. package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.d.ts.map +1 -0
  392. package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.js +41 -0
  393. package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.js.map +1 -0
  394. package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.d.ts +17 -0
  395. package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.d.ts.map +1 -0
  396. package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.js +184 -0
  397. package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.js.map +1 -0
  398. package/node_modules/@xrkseek/server-http/dist/dsh-compat/barrel.d.ts +5 -0
  399. package/node_modules/@xrkseek/server-http/dist/dsh-compat/barrel.d.ts.map +1 -0
  400. package/node_modules/@xrkseek/server-http/dist/dsh-compat/barrel.js +5 -0
  401. package/node_modules/@xrkseek/server-http/dist/dsh-compat/barrel.js.map +1 -0
  402. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.d.ts +21 -0
  403. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.d.ts.map +1 -0
  404. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.js +122 -0
  405. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.js.map +1 -0
  406. package/node_modules/@xrkseek/server-http/dist/dsh-compat/chat-import.d.ts +10 -0
  407. package/node_modules/@xrkseek/server-http/dist/dsh-compat/chat-import.d.ts.map +1 -0
  408. package/node_modules/@xrkseek/server-http/dist/dsh-compat/chat-import.js +58 -0
  409. package/node_modules/@xrkseek/server-http/dist/dsh-compat/chat-import.js.map +1 -0
  410. package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-root-http.d.ts +7 -0
  411. package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-root-http.d.ts.map +1 -0
  412. package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-root-http.js +59 -0
  413. package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-root-http.js.map +1 -0
  414. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-runner.d.ts +25 -0
  415. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-runner.d.ts.map +1 -0
  416. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-runner.js +154 -0
  417. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-runner.js.map +1 -0
  418. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-worker.d.ts +2 -0
  419. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-worker.d.ts.map +1 -0
  420. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-worker.js +77 -0
  421. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-fiber-worker.js.map +1 -0
  422. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-registry.d.ts +16 -0
  423. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-registry.d.ts.map +1 -0
  424. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-registry.js +121 -0
  425. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-registry.js.map +1 -0
  426. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-settings-fallback.d.ts +12 -0
  427. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-settings-fallback.d.ts.map +1 -0
  428. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-settings-fallback.js +48 -0
  429. package/node_modules/@xrkseek/server-http/dist/dsh-compat/cordis-settings-fallback.js.map +1 -0
  430. package/node_modules/@xrkseek/server-http/dist/dsh-compat/create-host-plugin.d.ts +18 -0
  431. package/node_modules/@xrkseek/server-http/dist/dsh-compat/create-host-plugin.d.ts.map +1 -0
  432. package/node_modules/@xrkseek/server-http/dist/dsh-compat/create-host-plugin.js +62 -0
  433. package/node_modules/@xrkseek/server-http/dist/dsh-compat/create-host-plugin.js.map +1 -0
  434. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dream-skin.d.ts +9 -0
  435. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dream-skin.d.ts.map +1 -0
  436. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dream-skin.js +42 -0
  437. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dream-skin.js.map +1 -0
  438. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.d.ts +6 -0
  439. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.d.ts.map +1 -0
  440. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.js +88 -0
  441. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.js.map +1 -0
  442. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-community-infer.d.ts +9 -0
  443. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-community-infer.d.ts.map +1 -0
  444. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-community-infer.js +67 -0
  445. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-community-infer.js.map +1 -0
  446. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.d.ts +18 -0
  447. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.d.ts.map +1 -0
  448. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js +198 -0
  449. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js.map +1 -0
  450. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-upgrades.d.ts +27 -0
  451. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-upgrades.d.ts.map +1 -0
  452. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-upgrades.js +71 -0
  453. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-upgrades.js.map +1 -0
  454. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-envelope.d.ts +8 -0
  455. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-envelope.d.ts.map +1 -0
  456. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-envelope.js +12 -0
  457. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-envelope.js.map +1 -0
  458. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-package-names.d.ts +2 -0
  459. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-package-names.d.ts.map +1 -0
  460. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-package-names.js +6 -0
  461. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-package-names.js.map +1 -0
  462. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.d.ts +22 -0
  463. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.d.ts.map +1 -0
  464. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.js +219 -0
  465. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.js.map +1 -0
  466. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-plugin-presets.d.ts +4 -0
  467. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-plugin-presets.d.ts.map +1 -0
  468. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-plugin-presets.js +53 -0
  469. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-plugin-presets.js.map +1 -0
  470. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-dsh-http.d.ts +11 -0
  471. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-dsh-http.d.ts.map +1 -0
  472. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-dsh-http.js +61 -0
  473. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-dsh-http.js.map +1 -0
  474. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-plugin-http.d.ts +7 -0
  475. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-plugin-http.d.ts.map +1 -0
  476. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-plugin-http.js +150 -0
  477. package/node_modules/@xrkseek/server-http/dist/dsh-compat/generic-plugin-http.js.map +1 -0
  478. package/node_modules/@xrkseek/server-http/dist/dsh-compat/genui.d.ts +10 -0
  479. package/node_modules/@xrkseek/server-http/dist/dsh-compat/genui.d.ts.map +1 -0
  480. package/node_modules/@xrkseek/server-http/dist/dsh-compat/genui.js +239 -0
  481. package/node_modules/@xrkseek/server-http/dist/dsh-compat/genui.js.map +1 -0
  482. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector-store.d.ts +22 -0
  483. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector-store.d.ts.map +1 -0
  484. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector-store.js +83 -0
  485. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector-store.js.map +1 -0
  486. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector.d.ts +18 -0
  487. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector.d.ts.map +1 -0
  488. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector.js +191 -0
  489. package/node_modules/@xrkseek/server-http/dist/dsh-compat/harness-connector.js.map +1 -0
  490. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-envelope.d.ts +21 -0
  491. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-envelope.d.ts.map +1 -0
  492. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-envelope.js +105 -0
  493. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-envelope.js.map +1 -0
  494. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-http-catchall.d.ts +7 -0
  495. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-http-catchall.d.ts.map +1 -0
  496. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-http-catchall.js +57 -0
  497. package/node_modules/@xrkseek/server-http/dist/dsh-compat/honest-http-catchall.js.map +1 -0
  498. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.d.ts +6 -0
  499. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.d.ts.map +1 -0
  500. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.js +74 -0
  501. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-bridge.js.map +1 -0
  502. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-registry.d.ts +14 -0
  503. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-registry.d.ts.map +1 -0
  504. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-registry.js +17 -0
  505. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-apply-registry.js.map +1 -0
  506. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-feature-bridge.d.ts +76 -0
  507. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-feature-bridge.d.ts.map +1 -0
  508. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-feature-bridge.js +551 -0
  509. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-feature-bridge.js.map +1 -0
  510. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-manifest.d.ts +7 -0
  511. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-manifest.d.ts.map +1 -0
  512. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-manifest.js +136 -0
  513. package/node_modules/@xrkseek/server-http/dist/dsh-compat/host-manifest.js.map +1 -0
  514. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-channels.d.ts +21 -0
  515. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-channels.d.ts.map +1 -0
  516. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-channels.js +281 -0
  517. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-channels.js.map +1 -0
  518. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-messaging-bridge.d.ts +16 -0
  519. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-messaging-bridge.d.ts.map +1 -0
  520. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-messaging-bridge.js +163 -0
  521. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-messaging-bridge.js.map +1 -0
  522. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-office.d.ts +5 -0
  523. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-office.d.ts.map +1 -0
  524. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-office.js +125 -0
  525. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-office.js.map +1 -0
  526. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-provision-bridge.d.ts +17 -0
  527. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-provision-bridge.d.ts.map +1 -0
  528. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-provision-bridge.js +188 -0
  529. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-provision-bridge.js.map +1 -0
  530. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-rpc-adapter.d.ts +9 -0
  531. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-rpc-adapter.d.ts.map +1 -0
  532. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-rpc-adapter.js +55 -0
  533. package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-rpc-adapter.js.map +1 -0
  534. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts +37 -0
  535. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts.map +1 -0
  536. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js +36 -0
  537. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js.map +1 -0
  538. package/node_modules/@xrkseek/server-http/dist/dsh-compat/json-store.d.ts +5 -0
  539. package/node_modules/@xrkseek/server-http/dist/dsh-compat/json-store.d.ts.map +1 -0
  540. package/node_modules/@xrkseek/server-http/dist/dsh-compat/json-store.js +28 -0
  541. package/node_modules/@xrkseek/server-http/dist/dsh-compat/json-store.js.map +1 -0
  542. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market-adapter.d.ts +7 -0
  543. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market-adapter.d.ts.map +1 -0
  544. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market-adapter.js +108 -0
  545. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market-adapter.js.map +1 -0
  546. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.d.ts +7 -0
  547. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.d.ts.map +1 -0
  548. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js +218 -0
  549. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js.map +1 -0
  550. package/node_modules/@xrkseek/server-http/dist/dsh-compat/memento.d.ts +10 -0
  551. package/node_modules/@xrkseek/server-http/dist/dsh-compat/memento.d.ts.map +1 -0
  552. package/node_modules/@xrkseek/server-http/dist/dsh-compat/memento.js +81 -0
  553. package/node_modules/@xrkseek/server-http/dist/dsh-compat/memento.js.map +1 -0
  554. package/node_modules/@xrkseek/server-http/dist/dsh-compat/meta.d.ts +10 -0
  555. package/node_modules/@xrkseek/server-http/dist/dsh-compat/meta.d.ts.map +1 -0
  556. package/node_modules/@xrkseek/server-http/dist/dsh-compat/meta.js +15 -0
  557. package/node_modules/@xrkseek/server-http/dist/dsh-compat/meta.js.map +1 -0
  558. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-adapter.d.ts +8 -0
  559. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-adapter.d.ts.map +1 -0
  560. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-adapter.js +83 -0
  561. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-adapter.js.map +1 -0
  562. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-shapes.d.ts +9 -0
  563. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-shapes.d.ts.map +1 -0
  564. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-shapes.js +144 -0
  565. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-shapes.js.map +1 -0
  566. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-store.d.ts +17 -0
  567. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-store.d.ts.map +1 -0
  568. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-store.js +52 -0
  569. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon-store.js.map +1 -0
  570. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon.d.ts +11 -0
  571. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon.d.ts.map +1 -0
  572. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon.js +221 -0
  573. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mnemon.js.map +1 -0
  574. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.d.ts +22 -0
  575. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.d.ts.map +1 -0
  576. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.js +155 -0
  577. package/node_modules/@xrkseek/server-http/dist/dsh-compat/mobile-access.js.map +1 -0
  578. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modlens.d.ts +14 -0
  579. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modlens.d.ts.map +1 -0
  580. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modlens.js +213 -0
  581. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modlens.js.map +1 -0
  582. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modsearch.d.ts +14 -0
  583. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modsearch.d.ts.map +1 -0
  584. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modsearch.js +200 -0
  585. package/node_modules/@xrkseek/server-http/dist/dsh-compat/modsearch.js.map +1 -0
  586. package/node_modules/@xrkseek/server-http/dist/dsh-compat/noema.d.ts +11 -0
  587. package/node_modules/@xrkseek/server-http/dist/dsh-compat/noema.d.ts.map +1 -0
  588. package/node_modules/@xrkseek/server-http/dist/dsh-compat/noema.js +200 -0
  589. package/node_modules/@xrkseek/server-http/dist/dsh-compat/noema.js.map +1 -0
  590. package/node_modules/@xrkseek/server-http/dist/dsh-compat/persisted-settings-store.d.ts +6 -0
  591. package/node_modules/@xrkseek/server-http/dist/dsh-compat/persisted-settings-store.d.ts.map +1 -0
  592. package/node_modules/@xrkseek/server-http/dist/dsh-compat/persisted-settings-store.js +47 -0
  593. package/node_modules/@xrkseek/server-http/dist/dsh-compat/persisted-settings-store.js.map +1 -0
  594. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-host-manifest.d.ts +15 -0
  595. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-host-manifest.d.ts.map +1 -0
  596. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-host-manifest.js +132 -0
  597. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-host-manifest.js.map +1 -0
  598. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-surface-adapter.d.ts +13 -0
  599. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-surface-adapter.d.ts.map +1 -0
  600. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-surface-adapter.js +336 -0
  601. package/node_modules/@xrkseek/server-http/dist/dsh-compat/plugin-surface-adapter.js.map +1 -0
  602. package/node_modules/@xrkseek/server-http/dist/dsh-compat/pocket.d.ts +10 -0
  603. package/node_modules/@xrkseek/server-http/dist/dsh-compat/pocket.d.ts.map +1 -0
  604. package/node_modules/@xrkseek/server-http/dist/dsh-compat/pocket.js +86 -0
  605. package/node_modules/@xrkseek/server-http/dist/dsh-compat/pocket.js.map +1 -0
  606. package/node_modules/@xrkseek/server-http/dist/dsh-compat/releases.d.ts +8 -0
  607. package/node_modules/@xrkseek/server-http/dist/dsh-compat/releases.d.ts.map +1 -0
  608. package/node_modules/@xrkseek/server-http/dist/dsh-compat/releases.js +34 -0
  609. package/node_modules/@xrkseek/server-http/dist/dsh-compat/releases.js.map +1 -0
  610. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-defaults.d.ts +4 -0
  611. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-defaults.d.ts.map +1 -0
  612. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-defaults.js +170 -0
  613. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-defaults.js.map +1 -0
  614. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-store.d.ts +33 -0
  615. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-store.d.ts.map +1 -0
  616. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-store.js +108 -0
  617. package/node_modules/@xrkseek/server-http/dist/dsh-compat/settings-store.js.map +1 -0
  618. package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.d.ts +10 -0
  619. package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.d.ts.map +1 -0
  620. package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.js +38 -0
  621. package/node_modules/@xrkseek/server-http/dist/dsh-compat/shared-registry.js.map +1 -0
  622. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-adapter.d.ts +10 -0
  623. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-adapter.d.ts.map +1 -0
  624. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-adapter.js +358 -0
  625. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-adapter.js.map +1 -0
  626. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-git.d.ts +25 -0
  627. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-git.d.ts.map +1 -0
  628. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-git.js +78 -0
  629. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-git.js.map +1 -0
  630. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-prefs-store.d.ts +9 -0
  631. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-prefs-store.d.ts.map +1 -0
  632. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-prefs-store.js +56 -0
  633. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-prefs-store.js.map +1 -0
  634. package/node_modules/@xrkseek/server-http/dist/dsh-compat/skin-market.d.ts +11 -0
  635. package/node_modules/@xrkseek/server-http/dist/dsh-compat/skin-market.d.ts.map +1 -0
  636. package/node_modules/@xrkseek/server-http/dist/dsh-compat/skin-market.js +106 -0
  637. package/node_modules/@xrkseek/server-http/dist/dsh-compat/skin-market.js.map +1 -0
  638. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surface-registry.d.ts +18 -0
  639. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surface-registry.d.ts.map +1 -0
  640. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surface-registry.js +240 -0
  641. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surface-registry.js.map +1 -0
  642. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surfaces.d.ts +5 -0
  643. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surfaces.d.ts.map +1 -0
  644. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surfaces.js +78 -0
  645. package/node_modules/@xrkseek/server-http/dist/dsh-compat/surfaces.js.map +1 -0
  646. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tokenledger.d.ts +42 -0
  647. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tokenledger.d.ts.map +1 -0
  648. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tokenledger.js +117 -0
  649. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tokenledger.js.map +1 -0
  650. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow-node-runtime.d.ts +11 -0
  651. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow-node-runtime.d.ts.map +1 -0
  652. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow-node-runtime.js +111 -0
  653. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow-node-runtime.js.map +1 -0
  654. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow.d.ts +16 -0
  655. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow.d.ts.map +1 -0
  656. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow.js +455 -0
  657. package/node_modules/@xrkseek/server-http/dist/dsh-compat/tongflow.js.map +1 -0
  658. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-store.d.ts +26 -0
  659. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-store.d.ts.map +1 -0
  660. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-store.js +22 -0
  661. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-store.js.map +1 -0
  662. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.d.ts +12 -0
  663. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.d.ts.map +1 -0
  664. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.js +123 -0
  665. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.js.map +1 -0
  666. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.d.ts +16 -0
  667. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.d.ts.map +1 -0
  668. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.js +99 -0
  669. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.js.map +1 -0
  670. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/contracts/wallet-port.d.ts +106 -0
  671. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/contracts/wallet-port.d.ts.map +1 -0
  672. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/contracts/wallet-port.js +6 -0
  673. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/contracts/wallet-port.js.map +1 -0
  674. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/doc-store.d.ts +14 -0
  675. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/doc-store.d.ts.map +1 -0
  676. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/doc-store.js +21 -0
  677. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/doc-store.js.map +1 -0
  678. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/http-kit.d.ts +9 -0
  679. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/http-kit.d.ts.map +1 -0
  680. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/http-kit.js +22 -0
  681. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/http-kit.js.map +1 -0
  682. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.d.ts +22 -0
  683. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.d.ts.map +1 -0
  684. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.js +13 -0
  685. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/index.js.map +1 -0
  686. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/wallet-service.d.ts +21 -0
  687. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/wallet-service.d.ts.map +1 -0
  688. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/wallet-service.js +190 -0
  689. package/node_modules/@xrkseek/server-http/dist/dsh-compat/underlying/wallet-service.js.map +1 -0
  690. package/node_modules/@xrkseek/server-http/dist/dsh-compat/undo.d.ts +10 -0
  691. package/node_modules/@xrkseek/server-http/dist/dsh-compat/undo.d.ts.map +1 -0
  692. package/node_modules/@xrkseek/server-http/dist/dsh-compat/undo.js +438 -0
  693. package/node_modules/@xrkseek/server-http/dist/dsh-compat/undo.js.map +1 -0
  694. package/node_modules/@xrkseek/server-http/dist/dsh-compat/usage-stats.d.ts +8 -0
  695. package/node_modules/@xrkseek/server-http/dist/dsh-compat/usage-stats.d.ts.map +1 -0
  696. package/node_modules/@xrkseek/server-http/dist/dsh-compat/usage-stats.js +69 -0
  697. package/node_modules/@xrkseek/server-http/dist/dsh-compat/usage-stats.js.map +1 -0
  698. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-adapter.d.ts +6 -0
  699. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-adapter.d.ts.map +1 -0
  700. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-adapter.js +62 -0
  701. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-adapter.js.map +1 -0
  702. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-defaults.d.ts +5 -0
  703. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-defaults.d.ts.map +1 -0
  704. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-defaults.js +17 -0
  705. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-defaults.js.map +1 -0
  706. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-router-adapter.d.ts +7 -0
  707. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-router-adapter.d.ts.map +1 -0
  708. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-router-adapter.js +67 -0
  709. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision-router-adapter.js.map +1 -0
  710. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision.d.ts +12 -0
  711. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision.d.ts.map +1 -0
  712. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision.js +198 -0
  713. package/node_modules/@xrkseek/server-http/dist/dsh-compat/vision.js.map +1 -0
  714. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallet.d.ts +15 -0
  715. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallet.d.ts.map +1 -0
  716. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallet.js +111 -0
  717. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallet.js.map +1 -0
  718. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallpaper.d.ts +9 -0
  719. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallpaper.d.ts.map +1 -0
  720. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallpaper.js +161 -0
  721. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wallpaper.js.map +1 -0
  722. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/settings-provider.d.ts +6 -0
  723. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/settings-provider.d.ts.map +1 -0
  724. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/settings-provider.js +31 -0
  725. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/settings-provider.js.map +1 -0
  726. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/stub-handlers.d.ts +9 -0
  727. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/stub-handlers.d.ts.map +1 -0
  728. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/stub-handlers.js +103 -0
  729. package/node_modules/@xrkseek/server-http/dist/dsh-compat/wire/stub-handlers.js.map +1 -0
  730. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-host-apply.d.ts +49 -0
  731. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-host-apply.d.ts.map +1 -0
  732. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-host-apply.js +190 -0
  733. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-host-apply.js.map +1 -0
  734. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-json-store.d.ts +9 -0
  735. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-json-store.d.ts.map +1 -0
  736. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-json-store.js +44 -0
  737. package/node_modules/@xrkseek/server-http/dist/dsh-compat/xrk-json-store.js.map +1 -0
  738. package/node_modules/@xrkseek/server-http/dist/dsh-compat.d.ts +6 -0
  739. package/node_modules/@xrkseek/server-http/dist/dsh-compat.d.ts.map +1 -0
  740. package/node_modules/@xrkseek/server-http/dist/dsh-compat.js +6 -0
  741. package/node_modules/@xrkseek/server-http/dist/dsh-compat.js.map +1 -0
  742. package/node_modules/@xrkseek/server-http/dist/host-wire.d.ts +14 -0
  743. package/node_modules/@xrkseek/server-http/dist/host-wire.d.ts.map +1 -0
  744. package/node_modules/@xrkseek/server-http/dist/host-wire.js +15 -0
  745. package/node_modules/@xrkseek/server-http/dist/host-wire.js.map +1 -0
  746. package/node_modules/@xrkseek/server-http/dist/http-json.d.ts +12 -0
  747. package/node_modules/@xrkseek/server-http/dist/http-json.d.ts.map +1 -0
  748. package/node_modules/@xrkseek/server-http/dist/http-json.js +40 -0
  749. package/node_modules/@xrkseek/server-http/dist/http-json.js.map +1 -0
  750. package/node_modules/@xrkseek/server-http/dist/index.d.ts +12 -1
  751. package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
  752. package/node_modules/@xrkseek/server-http/dist/index.js +12 -1
  753. package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
  754. package/node_modules/@xrkseek/server-http/dist/public-routes.d.ts +19 -0
  755. package/node_modules/@xrkseek/server-http/dist/public-routes.d.ts.map +1 -0
  756. package/node_modules/@xrkseek/server-http/dist/public-routes.js +34 -0
  757. package/node_modules/@xrkseek/server-http/dist/public-routes.js.map +1 -0
  758. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.d.ts +13 -0
  759. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.d.ts.map +1 -0
  760. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.js +58 -0
  761. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.js.map +1 -0
  762. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-routes.d.ts +16 -0
  763. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-routes.d.ts.map +1 -0
  764. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-routes.js +49 -0
  765. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-routes.js.map +1 -0
  766. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.d.ts +35 -0
  767. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.d.ts.map +1 -0
  768. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js +103 -0
  769. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js.map +1 -0
  770. package/node_modules/@xrkseek/server-http/package.json +2 -1
  771. package/node_modules/@xrkseek/server-loader/dist/host.d.ts +6 -0
  772. package/node_modules/@xrkseek/server-loader/dist/host.d.ts.map +1 -0
  773. package/node_modules/@xrkseek/server-loader/dist/host.js +11 -0
  774. package/node_modules/@xrkseek/server-loader/dist/host.js.map +1 -0
  775. package/node_modules/@xrkseek/server-loader/dist/index.d.ts +2 -1
  776. package/node_modules/@xrkseek/server-loader/dist/index.d.ts.map +1 -1
  777. package/node_modules/@xrkseek/server-loader/dist/index.js +1 -0
  778. package/node_modules/@xrkseek/server-loader/dist/index.js.map +1 -1
  779. package/node_modules/@xrkseek/server-loader/dist/kinds.d.ts +5 -0
  780. package/node_modules/@xrkseek/server-loader/dist/kinds.d.ts.map +1 -1
  781. package/node_modules/@xrkseek/server-loader/dist/kinds.js +5 -0
  782. package/node_modules/@xrkseek/server-loader/dist/kinds.js.map +1 -1
  783. package/node_modules/@xrkseek/server-loader/dist/load.d.ts.map +1 -1
  784. package/node_modules/@xrkseek/server-loader/dist/load.js +5 -0
  785. package/node_modules/@xrkseek/server-loader/dist/load.js.map +1 -1
  786. package/node_modules/@xrkseek/server-loader/dist/types.d.ts +40 -0
  787. package/node_modules/@xrkseek/server-loader/dist/types.d.ts.map +1 -1
  788. package/node_modules/@xrkseek/xrk-file-reference/README.i18n.yaml +6 -0
  789. package/node_modules/@xrkseek/xrk-file-reference/README.md +22 -0
  790. package/node_modules/@xrkseek/xrk-file-reference/README.zh.md +22 -0
  791. package/node_modules/@xrkseek/xrk-file-reference/package.json +68 -0
  792. package/node_modules/@xrkseek/xrk-file-reference-local/README.i18n.yaml +6 -0
  793. package/node_modules/@xrkseek/xrk-file-reference-local/README.md +45 -0
  794. package/node_modules/@xrkseek/xrk-file-reference-local/README.zh.md +45 -0
  795. package/node_modules/@xrkseek/xrk-file-reference-local/package.json +56 -0
  796. package/node_modules/@xrkseek/xrk-session-reference/README.i18n.yaml +6 -0
  797. package/node_modules/@xrkseek/xrk-session-reference/README.md +50 -0
  798. package/node_modules/@xrkseek/xrk-session-reference/README.zh.md +50 -0
  799. package/node_modules/@xrkseek/xrk-session-reference/package.json +79 -0
  800. package/node_modules/detect-libc/LICENSE +201 -0
  801. package/node_modules/detect-libc/README.md +163 -0
  802. package/node_modules/detect-libc/index.d.ts +14 -0
  803. package/node_modules/detect-libc/lib/detect-libc.js +313 -0
  804. package/node_modules/detect-libc/lib/elf.js +39 -0
  805. package/node_modules/detect-libc/lib/filesystem.js +51 -0
  806. package/node_modules/detect-libc/lib/process.js +24 -0
  807. package/node_modules/detect-libc/package.json +44 -0
  808. package/node_modules/semver/LICENSE +15 -0
  809. package/node_modules/semver/README.md +680 -0
  810. package/node_modules/semver/bin/semver.js +195 -0
  811. package/node_modules/semver/classes/comparator.js +143 -0
  812. package/node_modules/semver/classes/index.js +7 -0
  813. package/node_modules/semver/classes/range.js +577 -0
  814. package/node_modules/semver/classes/semver.js +350 -0
  815. package/node_modules/semver/functions/clean.js +8 -0
  816. package/node_modules/semver/functions/cmp.js +54 -0
  817. package/node_modules/semver/functions/coerce.js +62 -0
  818. package/node_modules/semver/functions/compare-build.js +9 -0
  819. package/node_modules/semver/functions/compare-loose.js +5 -0
  820. package/node_modules/semver/functions/compare.js +7 -0
  821. package/node_modules/semver/functions/diff.js +60 -0
  822. package/node_modules/semver/functions/eq.js +5 -0
  823. package/node_modules/semver/functions/gt.js +5 -0
  824. package/node_modules/semver/functions/gte.js +5 -0
  825. package/node_modules/semver/functions/inc.js +21 -0
  826. package/node_modules/semver/functions/lt.js +5 -0
  827. package/node_modules/semver/functions/lte.js +5 -0
  828. package/node_modules/semver/functions/major.js +5 -0
  829. package/node_modules/semver/functions/minor.js +5 -0
  830. package/node_modules/semver/functions/neq.js +5 -0
  831. package/node_modules/semver/functions/parse.js +18 -0
  832. package/node_modules/semver/functions/patch.js +5 -0
  833. package/node_modules/semver/functions/prerelease.js +8 -0
  834. package/node_modules/semver/functions/rcompare.js +5 -0
  835. package/node_modules/semver/functions/rsort.js +5 -0
  836. package/node_modules/semver/functions/satisfies.js +12 -0
  837. package/node_modules/semver/functions/sort.js +5 -0
  838. package/node_modules/semver/functions/truncate.js +48 -0
  839. package/node_modules/semver/functions/valid.js +8 -0
  840. package/node_modules/semver/index.js +93 -0
  841. package/node_modules/semver/internal/constants.js +37 -0
  842. package/node_modules/semver/internal/debug.js +11 -0
  843. package/node_modules/semver/internal/identifiers.js +29 -0
  844. package/node_modules/semver/internal/lrucache.js +42 -0
  845. package/node_modules/semver/internal/parse-options.js +17 -0
  846. package/node_modules/semver/internal/re.js +223 -0
  847. package/node_modules/semver/package.json +78 -0
  848. package/node_modules/semver/preload.js +4 -0
  849. package/node_modules/semver/range.bnf +17 -0
  850. package/node_modules/semver/ranges/gtr.js +6 -0
  851. package/node_modules/semver/ranges/intersects.js +9 -0
  852. package/node_modules/semver/ranges/ltr.js +6 -0
  853. package/node_modules/semver/ranges/max-satisfying.js +27 -0
  854. package/node_modules/semver/ranges/min-satisfying.js +26 -0
  855. package/node_modules/semver/ranges/min-version.js +63 -0
  856. package/node_modules/semver/ranges/outside.js +82 -0
  857. package/node_modules/semver/ranges/simplify.js +49 -0
  858. package/node_modules/semver/ranges/subset.js +249 -0
  859. package/node_modules/semver/ranges/to-comparators.js +10 -0
  860. package/node_modules/semver/ranges/valid.js +13 -0
  861. package/node_modules/sharp/LICENSE +191 -0
  862. package/node_modules/sharp/README.md +112 -0
  863. package/node_modules/sharp/dist/channel.cjs +177 -0
  864. package/node_modules/sharp/dist/channel.mjs +177 -0
  865. package/node_modules/sharp/dist/colour.cjs +199 -0
  866. package/node_modules/sharp/dist/colour.mjs +199 -0
  867. package/node_modules/sharp/dist/composite.cjs +213 -0
  868. package/node_modules/sharp/dist/composite.mjs +213 -0
  869. package/node_modules/sharp/dist/constructor.cjs +511 -0
  870. package/node_modules/sharp/dist/constructor.mjs +511 -0
  871. package/node_modules/sharp/dist/index.cjs +25 -0
  872. package/node_modules/sharp/dist/index.d.cts +1999 -0
  873. package/node_modules/sharp/dist/index.d.mts +2046 -0
  874. package/node_modules/sharp/dist/index.mjs +25 -0
  875. package/node_modules/sharp/dist/input.cjs +814 -0
  876. package/node_modules/sharp/dist/input.mjs +814 -0
  877. package/node_modules/sharp/dist/is.cjs +143 -0
  878. package/node_modules/sharp/dist/is.mjs +143 -0
  879. package/node_modules/sharp/dist/libvips.cjs +212 -0
  880. package/node_modules/sharp/dist/libvips.mjs +212 -0
  881. package/node_modules/sharp/dist/operation.cjs +998 -0
  882. package/node_modules/sharp/dist/operation.mjs +998 -0
  883. package/node_modules/sharp/dist/output.cjs +1788 -0
  884. package/node_modules/sharp/dist/output.mjs +1788 -0
  885. package/node_modules/sharp/dist/resize.cjs +617 -0
  886. package/node_modules/sharp/dist/resize.mjs +617 -0
  887. package/node_modules/sharp/dist/sharp.cjs +174 -0
  888. package/node_modules/sharp/dist/sharp.mjs +174 -0
  889. package/node_modules/sharp/dist/utility.cjs +301 -0
  890. package/node_modules/sharp/dist/utility.mjs +301 -0
  891. package/node_modules/sharp/install/build.js +38 -0
  892. package/node_modules/sharp/lib/index.d.ts +1999 -0
  893. package/node_modules/sharp/package.json +227 -0
  894. package/node_modules/sharp/src/binding.gyp +303 -0
  895. package/node_modules/sharp/src/common.cc +1183 -0
  896. package/node_modules/sharp/src/common.h +421 -0
  897. package/node_modules/sharp/src/metadata.cc +404 -0
  898. package/node_modules/sharp/src/metadata.h +95 -0
  899. package/node_modules/sharp/src/operations.cc +516 -0
  900. package/node_modules/sharp/src/operations.h +137 -0
  901. package/node_modules/sharp/src/pipeline.cc +1948 -0
  902. package/node_modules/sharp/src/pipeline.h +422 -0
  903. package/node_modules/sharp/src/sharp.cc +43 -0
  904. package/node_modules/sharp/src/stats.cc +186 -0
  905. package/node_modules/sharp/src/stats.h +62 -0
  906. package/node_modules/sharp/src/utilities.cc +289 -0
  907. package/node_modules/sharp/src/utilities.h +22 -0
  908. package/node_modules/undici-types/LICENSE +21 -0
  909. package/node_modules/undici-types/README.md +6 -0
  910. package/node_modules/undici-types/agent.d.ts +32 -0
  911. package/node_modules/undici-types/api.d.ts +43 -0
  912. package/node_modules/undici-types/balanced-pool.d.ts +30 -0
  913. package/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  914. package/node_modules/undici-types/cache.d.ts +36 -0
  915. package/node_modules/undici-types/client-stats.d.ts +15 -0
  916. package/node_modules/undici-types/client.d.ts +108 -0
  917. package/node_modules/undici-types/connector.d.ts +34 -0
  918. package/node_modules/undici-types/content-type.d.ts +21 -0
  919. package/node_modules/undici-types/cookies.d.ts +30 -0
  920. package/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  921. package/node_modules/undici-types/dispatcher.d.ts +276 -0
  922. package/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  923. package/node_modules/undici-types/errors.d.ts +161 -0
  924. package/node_modules/undici-types/eventsource.d.ts +66 -0
  925. package/node_modules/undici-types/fetch.d.ts +211 -0
  926. package/node_modules/undici-types/formdata.d.ts +108 -0
  927. package/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  928. package/node_modules/undici-types/global-origin.d.ts +7 -0
  929. package/node_modules/undici-types/h2c-client.d.ts +73 -0
  930. package/node_modules/undici-types/handlers.d.ts +15 -0
  931. package/node_modules/undici-types/header.d.ts +160 -0
  932. package/node_modules/undici-types/index.d.ts +88 -0
  933. package/node_modules/undici-types/interceptors.d.ts +73 -0
  934. package/node_modules/undici-types/mock-agent.d.ts +68 -0
  935. package/node_modules/undici-types/mock-call-history.d.ts +111 -0
  936. package/node_modules/undici-types/mock-client.d.ts +27 -0
  937. package/node_modules/undici-types/mock-errors.d.ts +12 -0
  938. package/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  939. package/node_modules/undici-types/mock-pool.d.ts +27 -0
  940. package/node_modules/undici-types/package.json +55 -0
  941. package/node_modules/undici-types/patch.d.ts +29 -0
  942. package/node_modules/undici-types/pool-stats.d.ts +19 -0
  943. package/node_modules/undici-types/pool.d.ts +41 -0
  944. package/node_modules/undici-types/proxy-agent.d.ts +29 -0
  945. package/node_modules/undici-types/readable.d.ts +68 -0
  946. package/node_modules/undici-types/retry-agent.d.ts +8 -0
  947. package/node_modules/undici-types/retry-handler.d.ts +125 -0
  948. package/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  949. package/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  950. package/node_modules/undici-types/util.d.ts +18 -0
  951. package/node_modules/undici-types/utility.d.ts +7 -0
  952. package/node_modules/undici-types/webidl.d.ts +341 -0
  953. package/node_modules/undici-types/websocket.d.ts +186 -0
  954. package/package.json +23 -1
  955. package/product-web/assets/{index-CSGf6Qzd.css → index-C0u-TtQQ.css} +1 -1
  956. package/product-web/assets/index-CHKZdZNt.js +112 -0
  957. package/product-web/assets/index-CHKZdZNt.js.map +1 -0
  958. package/product-web/assets/langs/{php-DY2VakOf.js → php-9bx0az3O.js} +2 -2
  959. package/product-web/assets/langs/{php-DY2VakOf.js.map → php-9bx0az3O.js.map} +1 -1
  960. package/product-web/assets/langs/{ruby-hwtoiFmS.js → ruby-HDLHRjSL.js} +2 -2
  961. package/product-web/assets/langs/{ruby-hwtoiFmS.js.map → ruby-HDLHRjSL.js.map} +1 -1
  962. package/product-web/assets/{vendor-CldRVjca.js → vendor-CeMKrCZm.js} +36 -35
  963. package/product-web/assets/vendor-CeMKrCZm.js.map +1 -0
  964. package/product-web/boot.json +20 -1
  965. package/product-web/index.html +3 -3
  966. package/product-web/plugins/@xrkseek/client-locale/client.js +3 -3
  967. package/product-web/plugins/@xrkseek/client-modules/client.js +83 -12
  968. package/product-web/plugins/@xrkseek/client-runtime/client.js +5 -37
  969. package/product-web/plugins/@xrkseek/client-ui-agent-preset/client.js +63 -80
  970. package/product-web/plugins/@xrkseek/client-ui-attachment/client.js +782 -0
  971. package/product-web/plugins/@xrkseek/client-ui-commands/client.js +8 -8
  972. package/product-web/plugins/@xrkseek/client-ui-conversation/client.js +933 -505
  973. package/product-web/plugins/@xrkseek/client-ui-deliverables/client.js +6 -6
  974. package/product-web/plugins/@xrkseek/client-ui-directory-picker-browse/client.js +28 -28
  975. package/product-web/plugins/@xrkseek/client-ui-goal/client.js +8 -8
  976. package/product-web/plugins/@xrkseek/client-ui-input-trigger/client.js +82 -26
  977. package/product-web/plugins/@xrkseek/client-ui-jobs/client.js +8 -8
  978. package/product-web/plugins/@xrkseek/client-ui-layout/client.js +4 -4
  979. package/product-web/plugins/@xrkseek/client-ui-message-feedback/client.js +5 -5
  980. package/product-web/plugins/@xrkseek/client-ui-model-selection/client.js +17 -17
  981. package/product-web/plugins/@xrkseek/client-ui-permission-presets/client.js +3 -3
  982. package/product-web/plugins/@xrkseek/client-ui-plan/client.js +1 -1
  983. package/product-web/plugins/@xrkseek/client-ui-reference/client.js +148 -0
  984. package/product-web/plugins/@xrkseek/client-ui-settings-general/client.js +12 -12
  985. package/product-web/plugins/@xrkseek/client-ui-settings-models/client.js +62 -62
  986. package/product-web/plugins/@xrkseek/client-ui-settings-plugin-inventory/client.js +12 -12
  987. package/product-web/plugins/@xrkseek/client-ui-settings-plugins/client.js +38 -38
  988. package/product-web/plugins/@xrkseek/client-ui-sidebar/client.js +16 -16
  989. package/product-web/plugins/@xrkseek/client-ui-skill/client.js +11 -11
  990. package/product-web/plugins/@xrkseek/client-ui-subagent/client.js +289 -157
  991. package/product-web/plugins/@xrkseek/client-ui-theme/client.js +2 -2
  992. package/product-web/plugins/@xrkseek/client-ui-tool/client.js +41 -41
  993. package/product-web/plugins/@xrkseek/client-ui-trajectory/client.js +149 -170
  994. package/product-web/plugins/@xrkseek/client-ui-user-questions/client.js +28 -28
  995. package/product-web/plugins/@xrkseek/client-ui-workflow-run/client.js +14 -14
  996. package/product-web/plugins/@xrkseek/client-ui-workspace/client.js +52 -52
  997. package/product-web/plugins/@xrkseek/xrk-api-remotes/client.js +20 -1
  998. package/product-web/assets/index-CcF0Sxxg.js +0 -297
  999. package/product-web/assets/index-CcF0Sxxg.js.map +0 -1
  1000. package/product-web/assets/vendor-CldRVjca.js.map +0 -1
@@ -9,7 +9,6 @@ window.__ModuleLoader__.load({
9
9
  let _xrkseek_cordis = require("@xrkseek/cordis");
10
10
  let react = require("react");
11
11
  let _xrkseek_client_ui_primitives = require("@xrkseek/client-ui-primitives");
12
- let _xrkseek_client_ui_attachment = require("@xrkseek/client-ui-attachment");
13
12
  let react_jsx_runtime = require("react/jsx-runtime");
14
13
  //#region src/client/stores.ts
15
14
  /**
@@ -126,17 +125,19 @@ window.__ModuleLoader__.load({
126
125
  * @param text - serialized prompt text.
127
126
  * @param imageIds - ordered draft-local attachment ids.
128
127
  * @param mode - queue or steer delivery selected by composer policy.
128
+ * @param signal - optional cancellation for the complete Host admission.
129
+ * @returns the Host admission outcome; local attachment preparation failures reject.
129
130
  */
130
- async sendSession(session, text, imageIds, mode) {
131
+ async sendSession(session, text, imageIds, mode, signal) {
131
132
  const attachments = this.draftImages(imageIds);
132
133
  if (attachments.length !== imageIds.length) throw new Error("conversation.sendSession: one or more draft images are no longer available");
133
134
  const content = [...await this.serializeImages(attachments.map((attachment) => attachment.file)), ...text === "" ? [] : [{
134
135
  type: "text",
135
136
  text
136
137
  }]];
137
- const result = await session.prompt(content, mode);
138
- if (!result.ok) throw new Error(`conversation.send failed: ${result.error.code}: ${result.error.message}`);
138
+ if (!(await session.prompt(content, mode, signal)).ok) return { kind: "error" };
139
139
  this.releaseDraftImages(attachments);
140
+ return { kind: "success" };
140
141
  }
141
142
  /**
142
143
  * Create runtime-only draft images and their object URLs.
@@ -166,6 +167,18 @@ window.__ModuleLoader__.load({
166
167
  return attachments;
167
168
  }
168
169
  /**
170
+ * Serialize ordered draft images to command-submit wire payloads without
171
+ * sending or releasing them (the composer releases only after the command
172
+ * settles successfully).
173
+ * @param imageIds - ordered draft-local attachment ids.
174
+ * @returns base64 payloads in id order.
175
+ */
176
+ async serializeDraftImages(imageIds) {
177
+ const attachments = this.draftImages(imageIds);
178
+ if (attachments.length !== imageIds.length) throw new Error("conversation.serializeDraftImages: one or more draft images are no longer available");
179
+ return Promise.all(attachments.map((attachment) => this.encodeImage(attachment.file)));
180
+ }
181
+ /**
169
182
  * Release one browser-owned draft image and preview URL.
170
183
  * @param id - draft attachment id.
171
184
  */
@@ -271,10 +284,16 @@ window.__ModuleLoader__.load({
271
284
  serializeImages(images) {
272
285
  return Promise.all(images.map(async (file) => ({
273
286
  type: "image",
287
+ ...await this.encodeImage(file)
288
+ })));
289
+ }
290
+ /** Canonical base64 wire form of one browser image file. */
291
+ async encodeImage(file) {
292
+ return {
274
293
  mediaType: imageMediaType(file.type),
275
294
  data: bytesToBase64(new Uint8Array(await file.arrayBuffer())),
276
295
  ...file.name === "" ? {} : { name: file.name }
277
- })));
296
+ };
278
297
  }
279
298
  };
280
299
  function imageMediaType(value) {
@@ -348,6 +367,18 @@ window.__ModuleLoader__.load({
348
367
  subscribe: (fn) => session.subscribe(fn)
349
368
  };
350
369
  }
370
+ //#endregion
371
+ //#region src/client/input/machine.ts
372
+ const REFERENCE_PLACEHOLDER_RE = /[\uE100-\uE11D\uFFFC]/gu;
373
+ /**
374
+ * Build the inline draft text whose leading marker is decorated as the
375
+ * reference icon in the backdrop.
376
+ * @param reference - reference insertion with its cached display projection.
377
+ * @returns display text with one marker glyph followed by the complete label.
378
+ */
379
+ function referenceDraftText(reference) {
380
+ return `@${reference.label}`;
381
+ }
351
382
  /** The machine never writes the queue; the wiring layer overlays the queue store's projection. */
352
383
  const EMPTY_QUEUE$1 = [];
353
384
  /** Undo ring depth (bounded self-managed transaction log). */
@@ -391,6 +422,24 @@ window.__ModuleLoader__.load({
391
422
  };
392
423
  }
393
424
  /**
425
+ * Expand the draft's reference ranges into their occurrences' clipboard text
426
+ * for persistence and clipboard projection. Table order is offset order, so
427
+ * one linear walk pairs ranges with entries.
428
+ * @param state - published input state.
429
+ * @returns the plain-text projection of the draft.
430
+ */
431
+ function projectClipboard(state) {
432
+ const { draft, occurrences } = state;
433
+ if (occurrences.length === 0) return draft;
434
+ let out = "";
435
+ let cursor = 0;
436
+ for (const o of occurrences) {
437
+ out += draft.slice(cursor, o.offset) + o.clipboardText;
438
+ cursor = o.offset + o.length;
439
+ }
440
+ return out + draft.slice(cursor);
441
+ }
442
+ /**
394
443
  * Pure input machine, one instance per session (per-session isolation is by
395
444
  * construction). The machine constructs one AbortController per SubmitAttempt
396
445
  * at enter time and aborts it itself on release; the shell never aborts, it
@@ -429,7 +478,8 @@ window.__ModuleLoader__.load({
429
478
  phase: this.phase,
430
479
  ...c ? { claim: {
431
480
  token: c.token,
432
- ...c.hint !== void 0 ? { hint: c.hint } : {}
481
+ ...c.hint !== void 0 ? { hint: c.hint } : {},
482
+ ...c.images === true ? { images: true } : {}
433
483
  } } : {},
434
484
  occurrences: this.occurrences,
435
485
  ...this.paste !== void 0 ? { paste: this.paste } : {},
@@ -481,14 +531,14 @@ window.__ModuleLoader__.load({
481
531
  }
482
532
  /**
483
533
  * Reconcile the occurrence table with one edit (old-draft coordinates):
484
- * entries past the range shift by the length delta; entries whose
485
- * placeholder sits inside the replaced range go away whole (a
486
- * deletion/replacement intersecting a placeholder acts on the whole chip).
534
+ * entries past the range shift by the length delta; an edit that intersects
535
+ * a reference range removes its structured occurrence and leaves the edited
536
+ * characters as ordinary draft text.
487
537
  */
488
538
  reconcile(range) {
489
539
  const delta = range.insertedLength - (range.end - range.start);
490
540
  const kept = [];
491
- for (const o of this.occurrences) if (o.offset < range.start) kept.push(o);
541
+ for (const o of this.occurrences) if (o.offset + o.length <= range.start) kept.push(o);
492
542
  else if (o.offset >= range.end) kept.push(delta === 0 ? o : {
493
543
  ...o,
494
544
  offset: o.offset + delta
@@ -503,14 +553,16 @@ window.__ModuleLoader__.load({
503
553
  }
504
554
  }
505
555
  /** Mint one occurrence at a draft offset. */
506
- mint(reference, offset) {
556
+ mint(reference, offset, length) {
507
557
  this.occurrenceSeq += 1;
508
558
  return {
509
559
  occurrenceId: this.occurrenceSeq,
510
560
  source: reference.source,
511
561
  ref: reference.ref,
512
562
  offset,
563
+ length,
513
564
  label: reference.label,
565
+ ...reference.appearance === void 0 ? {} : { appearance: reference.appearance },
514
566
  clipboardText: reference.clipboardText
515
567
  };
516
568
  }
@@ -567,22 +619,24 @@ window.__ModuleLoader__.load({
567
619
  return [];
568
620
  }
569
621
  /**
570
- * Shared chip-insertion transaction: replace [span) with one placeholder
622
+ * Shared reference-insertion transaction: replace [span) with one inline
571
623
  * occurrence (insert-ref and paste-upgrade both land here). A separating
572
- * space follows the chip unless one is already next.
573
- * @returns the inserted length (placeholder plus optional gap).
624
+ * space follows the reference unless one is already next.
625
+ * @returns the inserted length (display text plus optional gap).
574
626
  */
575
627
  replaceSpanWithChip(reference, span) {
576
628
  this.pushTxn();
577
629
  this.typingRun = void 0;
578
630
  const tail = this.draft.slice(span.end);
579
- const inserted = "" + (tail.length === 0 || tail[0] !== " " ? " " : "");
631
+ const gap = tail.length === 0 || tail[0] !== " " ? " " : "";
632
+ const displayText = referenceDraftText(reference);
633
+ const inserted = displayText + gap;
580
634
  this.reconcile({
581
635
  start: span.start,
582
636
  end: span.end,
583
637
  insertedLength: inserted.length
584
638
  });
585
- this.withMinted([this.mint(reference, span.start)]);
639
+ this.withMinted([this.mint(reference, span.start, displayText.length)]);
586
640
  this.adopt(this.draft.slice(0, span.start) + inserted + tail);
587
641
  this.watchClaim();
588
642
  return inserted.length;
@@ -671,7 +725,7 @@ window.__ModuleLoader__.load({
671
725
  return [];
672
726
  }
673
727
  /**
674
- * Paste as one transaction: the text (U+FFFC-sanitized) replaces the
728
+ * Paste as one transaction: the text (reference-placeholder-sanitized) replaces the
675
729
  * selection; hot-snapshot sync matches componentize inside the SAME
676
730
  * transaction (one undo returns to pre-paste); a match attempt opens for
677
731
  * the async remainder while the phase still accepts reference mutations.
@@ -679,7 +733,7 @@ window.__ModuleLoader__.load({
679
733
  onPasteBegin(rawText, selection, components = [], generation = 0) {
680
734
  const { start, end } = selection;
681
735
  if (start < 0 || start > end || end > this.draft.length) return [];
682
- const text = rawText.split("").join("");
736
+ const text = rawText.replace(REFERENCE_PLACEHOLDER_RE, "");
683
737
  this.pushTxn(selection);
684
738
  this.typingRun = void 0;
685
739
  const sorted = [...components].sort((a, b) => a.start - b.start);
@@ -688,8 +742,9 @@ window.__ModuleLoader__.load({
688
742
  let cursor = 0;
689
743
  for (const c of sorted) {
690
744
  inserted += text.slice(cursor, c.start);
691
- minted.push(this.mint(c.reference, start + inserted.length));
692
- inserted += "";
745
+ const displayText = referenceDraftText(c.reference);
746
+ minted.push(this.mint(c.reference, start + inserted.length, displayText.length));
747
+ inserted += displayText;
693
748
  cursor = c.end;
694
749
  }
695
750
  inserted += text.slice(cursor);
@@ -775,8 +830,11 @@ window.__ModuleLoader__.load({
775
830
  draft: this.draft
776
831
  }];
777
832
  }
833
+ const attempt = this.beginAttempt(mode);
834
+ this.phase = "submitting";
778
835
  return [{
779
836
  type: "default-sink",
837
+ attempt,
780
838
  draft: this.draft,
781
839
  mode
782
840
  }];
@@ -794,13 +852,18 @@ window.__ModuleLoader__.load({
794
852
  args: argsAfter(attempt.draftSnapshot, outcome.claim.token)
795
853
  }];
796
854
  }
855
+ if (outcome === void 0) {
856
+ this.phase = "submitting";
857
+ return [{
858
+ type: "default-sink",
859
+ attempt,
860
+ draft: attempt.draftSnapshot,
861
+ mode: attempt.mode
862
+ }];
863
+ }
797
864
  this.inflight = void 0;
798
865
  this.phase = "plain";
799
- return outcome === void 0 ? [{
800
- type: "default-sink",
801
- draft: attempt.draftSnapshot,
802
- mode: attempt.mode
803
- }] : [];
866
+ return [];
804
867
  }
805
868
  onAdjudicationFailed(attempt, message) {
806
869
  if (this.phase !== "adjudicating" || this.inflight?.attempt.seq !== attempt.seq) return [];
@@ -820,7 +883,8 @@ window.__ModuleLoader__.load({
820
883
  this.phase = "plain";
821
884
  this.claim = void 0;
822
885
  this.occurrences = [];
823
- this.adopt("");
886
+ const snapshot = flight.attempt.draftSnapshot;
887
+ this.adopt(this.draft !== snapshot && this.draft.startsWith(snapshot) ? this.draft.slice(snapshot.length) : "");
824
888
  this.log = [];
825
889
  this.redoStack = [];
826
890
  this.typingRun = void 0;
@@ -831,10 +895,10 @@ window.__ModuleLoader__.load({
831
895
  text: ev.outcome.text
832
896
  }] : [];
833
897
  }
834
- const text = ev.message ?? ev.outcome?.text ?? "command failed";
898
+ const text = ev.message ?? ev.outcome?.text;
835
899
  if (this.draft === flight.attempt.draftSnapshot && this.claim !== void 0 && this.draft.startsWith(this.claim.token)) {
836
900
  this.phase = "claimed";
837
- return [{
901
+ return text === void 0 ? [] : [{
838
902
  type: "notice",
839
903
  level: "error",
840
904
  text
@@ -842,15 +906,15 @@ window.__ModuleLoader__.load({
842
906
  }
843
907
  this.phase = "plain";
844
908
  this.claim = void 0;
845
- return [{
909
+ return text === void 0 ? [] : [{
846
910
  type: "notice",
847
911
  level: "error",
848
912
  text
849
913
  }];
850
914
  }
851
- /** Ordinary send accepted: clear as a commit (no undo unit; sent content
852
- * must not be resurrectable — same discipline as submit-settled success). */
915
+ /** Cut undo state after an accepted image-only send. */
853
916
  onSendCommitted() {
917
+ if (this.phase !== "plain") return [];
854
918
  this.claim = void 0;
855
919
  this.occurrences = [];
856
920
  this.adopt("");
@@ -893,7 +957,7 @@ window.__ModuleLoader__.load({
893
957
  deps;
894
958
  /** Published machine state + queue overlay (the InputZone currency source). */
895
959
  state;
896
- /** Latest surfaced notice (null after clear); the wiring renders it beside the error strip. */
960
+ /** Latest surfaced notice (null after clear); the bar renders errors as banners and information inline. */
897
961
  notices = (0, _xrkseek_client_runtime_client.createSnapshotStore)(null);
898
962
  /** The public provide-channel action face (one stable identity per session). */
899
963
  actions = {
@@ -913,10 +977,12 @@ window.__ModuleLoader__.load({
913
977
  };
914
978
  core = new InputMachine({ now: () => Date.now() });
915
979
  noticeSeq = 0;
916
- lastDraft = "";
980
+ lastMirroredDraft = "";
917
981
  imageIds = [];
982
+ /** One image-only send at a time: Enter during the Host round-trip is a no-op. */
983
+ imageSendInFlight = false;
918
984
  disposed = false;
919
- /** Draft persistence mirror (chat store write; receives the clipboard projection, never raw placeholders). */
985
+ /** Draft persistence mirror (chat store write; receives the clipboard projection, never display-only ranges). */
920
986
  mirrorFn;
921
987
  constructor(deps) {
922
988
  this.deps = deps;
@@ -946,8 +1012,13 @@ window.__ModuleLoader__.load({
946
1012
  this.publish();
947
1013
  return true;
948
1014
  }
949
- /** Remove one image id from this draft. */
1015
+ /**
1016
+ * Remove one image id from this draft. Busy admission phases refuse, like
1017
+ * {@link addImages}: a removal landing while a command submit serializes
1018
+ * would otherwise vanish from the rail yet still ride the in-flight send.
1019
+ */
950
1020
  removeImage(id) {
1021
+ if (this.snapshot.phase === "adjudicating" || this.snapshot.phase === "submitting") return;
951
1022
  const next = this.imageIds.filter((candidate) => candidate !== id);
952
1023
  if (next.length === this.imageIds.length) return;
953
1024
  this.imageIds = next;
@@ -965,15 +1036,6 @@ window.__ModuleLoader__.load({
965
1036
  this.publish();
966
1037
  }
967
1038
  /**
968
- * Restore a failed attempt before any images added after its admission.
969
- * @param ids - failed attempt image ids.
970
- */
971
- restoreImages(ids) {
972
- const current = new Set(this.imageIds);
973
- this.imageIds = [...ids.filter((id) => !current.has(id)), ...this.imageIds];
974
- this.publish();
975
- }
976
- /**
977
1039
  * Clear the draft as a successful-send commit: no undo unit is recorded and
978
1040
  * the undo history is cut, so Ctrl/Cmd-Z cannot resurrect sent content
979
1041
  * (the command path gets the same discipline from submit-settled success).
@@ -1021,7 +1083,24 @@ window.__ModuleLoader__.load({
1021
1083
  */
1022
1084
  submit(mode = "queue") {
1023
1085
  if (this.snapshot.draft.trim() === "" && this.imageIds.length > 0) {
1024
- if (this.snapshot.phase === "plain") this.deps.defaultSink("", [...this.imageIds], mode);
1086
+ if (this.snapshot.phase === "plain" && !this.imageSendInFlight) {
1087
+ const imageIds = [...this.imageIds];
1088
+ this.imageSendInFlight = true;
1089
+ this.deps.defaultSink("", imageIds, mode, new AbortController().signal).then((outcome) => {
1090
+ this.imageSendInFlight = false;
1091
+ if (this.disposed) return;
1092
+ if (outcome.kind === "success") this.commitSend(imageIds);
1093
+ else if (outcome.text !== void 0) this.notify("error", outcome.text);
1094
+ }, (error) => {
1095
+ this.imageSendInFlight = false;
1096
+ if (!this.disposed) this.notify("error", error instanceof Error ? error.message : String(error));
1097
+ });
1098
+ }
1099
+ return;
1100
+ }
1101
+ const before = this.snapshot;
1102
+ if (before.phase === "claimed" && this.imageIds.length > 0 && before.claim?.images !== true) {
1103
+ this.notify("error", this.deps.commandImages.unsupportedNotice(before.claim?.token ?? before.draft));
1025
1104
  return;
1026
1105
  }
1027
1106
  this.run(this.core.dispatch({
@@ -1149,13 +1228,19 @@ window.__ModuleLoader__.load({
1149
1228
  * a scan-derived decoration, never state.
1150
1229
  * @param text - the plain reference text to splice in (e.g. `/name `).
1151
1230
  * @param span - pick-time span snapshot (draftRev CAS).
1231
+ * @param keepCompleting - re-track at the caret after the splice so an open
1232
+ * token (a directory pick's trailing slash) reopens the menu.
1152
1233
  * @returns whether the text was applied.
1153
1234
  */
1154
- insertText(text, span) {
1235
+ insertText(text, span, keepCompleting = false) {
1155
1236
  const snapshot = this.core.state;
1156
1237
  if (span.draftRev !== snapshot.draftRev) return false;
1157
1238
  const draft = snapshot.draft;
1158
1239
  this.setDraft(draft.slice(0, span.start) + text + draft.slice(span.end));
1240
+ if (keepCompleting) {
1241
+ const next = this.snapshot;
1242
+ this.deps.inputTriggers?.()?.track(next.draft, span.start + text.length, { tier: guardOf(next.phase) }, next.draftRev);
1243
+ }
1159
1244
  return true;
1160
1245
  }
1161
1246
  /**
@@ -1215,23 +1300,23 @@ window.__ModuleLoader__.load({
1215
1300
  this.beginSubmit(fx.attempt, fx.claim, fx.args);
1216
1301
  return;
1217
1302
  case "default-sink":
1218
- this.sinkSerialized(fx.draft, fx.mode);
1303
+ this.sinkSerialized(fx.attempt, fx.draft, fx.mode);
1219
1304
  return;
1220
1305
  default: return;
1221
1306
  }
1222
1307
  }
1223
1308
  /**
1224
1309
  * Prompt serialization before the sink: expand each
1225
- * placeholder to its owner's model form via the session controller's
1310
+ * inline reference range to its owner's model form via the session controller's
1226
1311
  * codec routing. Owner missing / serialize failure / disposal blocks the
1227
1312
  * send — notice + draft and chips retained, never a silent downgrade to
1228
1313
  * the clipboard text. Chip-free drafts skip the async detour.
1229
1314
  */
1230
- sinkSerialized(draft, mode) {
1315
+ sinkSerialized(attempt, draft, mode) {
1231
1316
  const imageIds = [...this.imageIds];
1232
1317
  const occurrences = this.core.state.occurrences;
1233
1318
  if (occurrences.length === 0) {
1234
- this.deps.defaultSink(draft.trim(), imageIds, mode);
1319
+ this.settleSubmit(attempt, this.deps.defaultSink(draft.trim(), imageIds, mode, attempt.signal), imageIds);
1235
1320
  return;
1236
1321
  }
1237
1322
  const inputTriggers = this.deps.inputTriggers?.();
@@ -1240,6 +1325,7 @@ window.__ModuleLoader__.load({
1240
1325
  if (inputTriggers === void 0) throw new Error(`no serializer for reference source "${o.source}"`);
1241
1326
  return {
1242
1327
  offset: o.offset,
1328
+ length: o.length,
1243
1329
  text: await inputTriggers.serializeReference(o.source, o.ref, controller.signal)
1244
1330
  };
1245
1331
  })).then((parts) => {
@@ -1248,15 +1334,44 @@ window.__ModuleLoader__.load({
1248
1334
  let cursor = 0;
1249
1335
  for (const part of parts) {
1250
1336
  out += draft.slice(cursor, part.offset) + part.text;
1251
- cursor = part.offset + 1;
1337
+ cursor = part.offset + part.length;
1252
1338
  }
1253
1339
  out += draft.slice(cursor);
1254
- this.deps.defaultSink(out.trim(), imageIds, mode);
1340
+ this.settleSubmit(attempt, this.deps.defaultSink(out.trim(), imageIds, mode, attempt.signal), imageIds);
1255
1341
  }, (error) => {
1256
1342
  controller.abort();
1257
- if (this.disposed) return;
1343
+ if (this.dead(attempt)) return;
1258
1344
  const message = error instanceof Error ? error.message : String(error);
1259
- this.notify("error", message);
1345
+ this.run(this.core.dispatch({
1346
+ type: "submit-settled",
1347
+ attempt,
1348
+ ok: false,
1349
+ message
1350
+ }));
1351
+ });
1352
+ }
1353
+ /** Settle one admission attempt; successful sends consume only their captured images. */
1354
+ settleSubmit(attempt, pending, imageIds = []) {
1355
+ pending.then((outcome) => {
1356
+ if (this.dead(attempt)) return;
1357
+ if (outcome.kind === "success" && imageIds.length > 0) {
1358
+ const submitted = new Set(imageIds);
1359
+ this.imageIds = this.imageIds.filter((id) => !submitted.has(id));
1360
+ }
1361
+ this.run(this.core.dispatch({
1362
+ type: "submit-settled",
1363
+ attempt,
1364
+ ok: outcome.kind === "success",
1365
+ outcome
1366
+ }));
1367
+ }, (error) => {
1368
+ if (this.dead(attempt)) return;
1369
+ this.run(this.core.dispatch({
1370
+ type: "submit-settled",
1371
+ attempt,
1372
+ ok: false,
1373
+ message: error instanceof Error ? error.message : String(error)
1374
+ }));
1260
1375
  });
1261
1376
  }
1262
1377
  /** Enter adjudication: poll the session controller; failure = notice + draft retained (never a silent downgrade). */
@@ -1270,7 +1385,7 @@ window.__ModuleLoader__.load({
1270
1385
  }));
1271
1386
  return;
1272
1387
  }
1273
- inputTriggers.adjudicate(draft.trim(), attempt.signal).then((outcome) => {
1388
+ inputTriggers.adjudicate(draft.trim(), attempt.signal, { images: this.imageIds.length }).then((outcome) => {
1274
1389
  if (this.dead(attempt)) return;
1275
1390
  this.run(this.core.dispatch({
1276
1391
  type: "adjudicated",
@@ -1287,15 +1402,32 @@ window.__ModuleLoader__.load({
1287
1402
  }));
1288
1403
  });
1289
1404
  }
1290
- /** The submit transaction: claim.submit against the session scope; ok maps from the outcome kind. */
1405
+ /**
1406
+ * The submit transaction: claim.submit against the session scope; ok maps
1407
+ * from the outcome kind. An accepting claim receives the serialized draft
1408
+ * images, which are cleared and released only on a success outcome; a
1409
+ * failure (serialize, transport, or handler error) keeps draft and images
1410
+ * for correction.
1411
+ */
1291
1412
  beginSubmit(attempt, claim, args) {
1292
- Promise.resolve().then(() => claim.submit(args, this.deps.actx)).then((outcome) => {
1293
- if (this.dead(attempt)) return;
1413
+ const imageIds = claim.images === true ? [...this.imageIds] : [];
1414
+ Promise.resolve().then(async () => {
1415
+ const images = imageIds.length > 0 ? await this.deps.commandImages.serialize(imageIds) : [];
1416
+ if (this.dead(attempt)) return void 0;
1417
+ return claim.submit(args, this.deps.actx, images);
1418
+ }).then((outcome) => {
1419
+ if (outcome === void 0 || this.dead(attempt)) return;
1420
+ if (outcome.kind === "success" && imageIds.length > 0) {
1421
+ const submitted = new Set(imageIds);
1422
+ this.imageIds = this.imageIds.filter((id) => !submitted.has(id));
1423
+ this.deps.commandImages.release(imageIds);
1424
+ }
1294
1425
  this.run(this.core.dispatch({
1295
1426
  type: "submit-settled",
1296
1427
  attempt,
1297
1428
  ok: outcome.kind === "success",
1298
- outcome
1429
+ outcome,
1430
+ ...outcome.kind === "error" && outcome.text === void 0 ? { message: "command failed" } : {}
1299
1431
  }));
1300
1432
  }, (error) => {
1301
1433
  if (this.dead(attempt)) return;
@@ -1322,9 +1454,10 @@ window.__ModuleLoader__.load({
1322
1454
  publish() {
1323
1455
  const next = this.compose();
1324
1456
  this.state.set(next);
1325
- if (next.draft !== this.lastDraft) {
1326
- this.lastDraft = next.draft;
1327
- this.mirrorFn?.(next.draft);
1457
+ const mirroredDraft = projectClipboard(next);
1458
+ if (mirroredDraft !== this.lastMirroredDraft) {
1459
+ this.lastMirroredDraft = mirroredDraft;
1460
+ this.mirrorFn?.(mirroredDraft);
1328
1461
  }
1329
1462
  }
1330
1463
  };
@@ -1370,11 +1503,17 @@ window.__ModuleLoader__.load({
1370
1503
  inputTriggers: () => this.controller(actx),
1371
1504
  popup: () => this.popup(actx),
1372
1505
  queue: queueReadFaceOf(session),
1373
- defaultSink: (text, imageIds, mode) => {
1374
- this.sink(session, text, imageIds, mode);
1375
- },
1506
+ defaultSink: (text, imageIds, mode, signal) => this.sink(session, text, imageIds, mode, signal),
1376
1507
  steerQueue: () => {
1377
1508
  this.steerQueue(session, shell);
1509
+ },
1510
+ commandImages: {
1511
+ serialize: (ids) => this.conversation().serializeDraftImages(ids),
1512
+ release: (ids) => {
1513
+ const conversation = this.rootCtx.get("conversation");
1514
+ for (const imageId of ids) conversation?.releaseDraftImage(imageId);
1515
+ },
1516
+ unsupportedNotice: (token) => this.t("command.imagesUnsupported", { command: token.trim().replace(/^\//u, "") })
1378
1517
  }
1379
1518
  });
1380
1519
  this.shells.set(id, shell);
@@ -1383,7 +1522,7 @@ window.__ModuleLoader__.load({
1383
1522
  actx.on("slash/input-begin-command", (req) => shell.beginCommand(req.claim, req.span) ? true : void 0),
1384
1523
  actx.on("slash/input-insert-reference", (req) => shell.insertReference(req.reference, req.span) ? true : void 0),
1385
1524
  actx.on("slash/input-consume-token", (req) => shell.consumeToken(req.guard) ? true : void 0),
1386
- actx.on("slash/input-insert-text", (req) => shell.insertText(req.text, req.span) ? true : void 0)
1525
+ actx.on("slash/input-insert-text", (req) => shell.insertText(req.text, req.span, req.continue === true) ? true : void 0)
1387
1526
  ];
1388
1527
  return () => {
1389
1528
  for (const off of offs) off();
@@ -1433,21 +1572,11 @@ window.__ModuleLoader__.load({
1433
1572
  * Default sink: optimistic clear + prompt. The session is always a real
1434
1573
  * host entity (materialized when its workspace was picked), so there is
1435
1574
  * exactly one path; a failed first prompt is an ordinary prompt failure
1436
- * (error strip via promptError, draft restored only while untouched).
1575
+ * (banner via promptError, draft restored only while untouched).
1437
1576
  */
1438
- sink(session, text, imageIds, mode) {
1439
- if (text === "" && imageIds.length === 0) return;
1440
- const shell = this.shells.get(session.sessionId);
1441
- shell?.commitSend(imageIds);
1442
- this.conversation().sendSession(session, text, imageIds, mode).catch(() => {
1443
- if (this.shells.get(session.sessionId) === shell) {
1444
- shell?.restoreImages(imageIds);
1445
- if (shell?.snapshot.draft === "") shell.setDraft(text);
1446
- return;
1447
- }
1448
- const conversation = this.rootCtx.get("conversation");
1449
- for (const id of imageIds) conversation?.releaseDraftImage(id);
1450
- });
1577
+ sink(session, text, imageIds, mode, signal) {
1578
+ if (text === "" && imageIds.length === 0) return Promise.resolve({ kind: "success" });
1579
+ return this.conversation().sendSession(session, text, imageIds, mode, signal);
1451
1580
  }
1452
1581
  /**
1453
1582
  * Steer every still-pending queued message into the running turn, in FIFO
@@ -2374,6 +2503,7 @@ window.__ModuleLoader__.load({
2374
2503
  //#region src/client/input/decorations.ts
2375
2504
  /** Token matcher: a trigger char at line start or after whitespace, then a word-ish name (never crosses \n). */
2376
2505
  const TEXT_REF_RE = /(^|\s)([/@])([\w-]+)/g;
2506
+ const FOLDER_REF_RE = /(^|\s)(@(?:"[^"\n]*\/|[^\s"]+\/))/g;
2377
2507
  /**
2378
2508
  * Scan the draft for plain-text reference tokens against the hot lexicons.
2379
2509
  * Word-boundary discipline: the trigger must sit at the draft
@@ -2384,23 +2514,38 @@ window.__ModuleLoader__.load({
2384
2514
  * @returns matched ranges in draft order.
2385
2515
  */
2386
2516
  function scanTextRefs(draft, lexicon) {
2387
- if (lexicon.size === 0 || draft === "") return [];
2517
+ if (draft === "") return [];
2388
2518
  const out = [];
2389
- TEXT_REF_RE.lastIndex = 0;
2390
- let m;
2391
- while ((m = TEXT_REF_RE.exec(draft)) !== null) {
2392
- const trigger = m[2];
2393
- const name = m[3] ?? "";
2394
- if (lexicon.get(trigger)?.includes(name)) {
2395
- const start = m.index + (m[1]?.length ?? 0);
2396
- out.push({
2397
- start,
2398
- end: start + 1 + name.length,
2399
- trigger
2400
- });
2519
+ if (lexicon.size > 0) {
2520
+ TEXT_REF_RE.lastIndex = 0;
2521
+ let m;
2522
+ while ((m = TEXT_REF_RE.exec(draft)) !== null) {
2523
+ const trigger = m[2];
2524
+ const name = m[3] ?? "";
2525
+ if (lexicon.get(trigger)?.includes(name)) {
2526
+ const start = m.index + (m[1]?.length ?? 0);
2527
+ out.push({
2528
+ start,
2529
+ end: start + 1 + name.length,
2530
+ trigger
2531
+ });
2532
+ }
2401
2533
  }
2402
2534
  }
2403
- return out;
2535
+ FOLDER_REF_RE.lastIndex = 0;
2536
+ let folder;
2537
+ while ((folder = FOLDER_REF_RE.exec(draft)) !== null) {
2538
+ const token = folder[2] ?? "";
2539
+ const start = folder.index + (folder[1]?.length ?? 0);
2540
+ const end = start + token.length;
2541
+ if (!out.some((range) => range.start < end && range.end > start)) out.push({
2542
+ start,
2543
+ end,
2544
+ trigger: "@",
2545
+ appearance: "folder"
2546
+ });
2547
+ }
2548
+ return out.sort((left, right) => left.start - right.start);
2404
2549
  }
2405
2550
  /** The empty lexicon (default: zero text-ref decorations, old call sites unchanged). */
2406
2551
  const EMPTY_LEXICON$1 = /* @__PURE__ */ new Map();
@@ -2420,7 +2565,10 @@ window.__ModuleLoader__.load({
2420
2565
  const chips = occurrences.map((o) => ({
2421
2566
  occurrenceId: o.occurrenceId,
2422
2567
  offset: o.offset,
2568
+ length: o.length,
2569
+ text: draft.slice(o.offset, o.offset + o.length),
2423
2570
  label: o.label,
2571
+ ...o.appearance === void 0 ? {} : { appearance: o.appearance },
2424
2572
  invalid: o.invalid === true
2425
2573
  }));
2426
2574
  const hint = claimActive && claim.hint !== void 0 && draft.slice(claim.token.length).trim() === "" ? claim.hint : null;
@@ -2457,6 +2605,9 @@ window.__ModuleLoader__.load({
2457
2605
  case "MODEL_DOES_NOT_SUPPORT_IMAGES": return t("image.modelUnsupported");
2458
2606
  case "SUBAGENT_IMAGE_UNSUPPORTED": return t("image.subagentUnsupported");
2459
2607
  case "IMAGE_TOO_MANY_PIXELS": return t("image.tooManyPixels");
2608
+ case "IMAGE_DIMENSION_TOO_LARGE":
2609
+ if (limits !== void 0) return t("image.dimensionTooLarge", { size: limits.maxImageDimension });
2610
+ break;
2460
2611
  case "INVALID_IMAGE":
2461
2612
  case "IMAGE_TYPE_MISMATCH": return t("image.unsupportedType");
2462
2613
  case "TOO_MANY_IMAGES":
@@ -2469,61 +2620,36 @@ window.__ModuleLoader__.load({
2469
2620
  }
2470
2621
  return t("image.sendFailed", { reason });
2471
2622
  }
2623
+ //#endregion
2624
+ //#region src/client/reference/ReferenceIcon.tsx
2472
2625
  /**
2473
- * Resolve the original-image lightbox strings.
2474
- * @param t - the conversation-namespace translate.
2475
- * @returns the lightbox dialog and close-control labels.
2476
- */
2477
- function lightboxLabels(t) {
2478
- return {
2479
- dialog: t("image.preview"),
2480
- close: t("image.closePreview")
2481
- };
2482
- }
2483
- /**
2484
- * Resolve the chat-history image strings.
2485
- * @param t - the conversation-namespace translate.
2486
- * @returns the message-image labels including the forwarded lightbox strings.
2487
- */
2488
- function messageImageLabels(t) {
2489
- return {
2490
- image: t("image.label"),
2491
- open: t("image.openOriginal"),
2492
- openNamed: (label) => t("image.openOriginalLabel", { label }),
2493
- loading: t("image.loading"),
2494
- loadFailed: t("image.loadFailed"),
2495
- lightbox: lightboxLabels(t)
2496
- };
2497
- }
2498
- /**
2499
- * Resolve the full-page drop overlay strings.
2500
- * @param t - the conversation-namespace translate.
2501
- * @param accepting - whether drops are currently accepted.
2502
- * @param limits - per-message limits for the desc line, when known.
2503
- * @returns the overlay title, with the limits desc while accepting.
2504
- */
2505
- function dropOverlayLabels(t, accepting, limits) {
2506
- if (!accepting) return { title: t("image.dropBlocked") };
2507
- return {
2508
- title: t("image.dropTitle"),
2509
- desc: limits === void 0 ? void 0 : t("image.dropDesc", {
2510
- count: limits.count,
2511
- size: limits.size
2512
- })
2513
- };
2514
- }
2515
- /**
2516
- * Resolve the composer draft-image rail strings.
2517
- * @param t - the conversation-namespace translate.
2518
- * @returns the rail group, open-tooltip, and paging-arrow labels.
2626
+ * Render the icon that identifies one inline reference domain.
2627
+ * @param props - Reference kind, optional size, and optional CSS class.
2628
+ * @returns The corresponding current-color SVG glyph.
2519
2629
  */
2520
- function attachmentRailLabels(t) {
2521
- return {
2522
- group: t("image.pending"),
2523
- open: t("image.openOriginal"),
2524
- scrollLeft: t("image.scrollLeft"),
2525
- scrollRight: t("image.scrollRight")
2526
- };
2630
+ function ReferenceIcon({ kind, size = 16, className }) {
2631
+ switch (kind) {
2632
+ case "session": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2633
+ width: size,
2634
+ height: size,
2635
+ className,
2636
+ viewBox: "0 0 16 16",
2637
+ fill: "none",
2638
+ "aria-hidden": true,
2639
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
2640
+ d: "M8 0.597656C3.91296 0.597656 0.599716 3.91103 0.599609 7.99805C0.599609 9.13171 0.854567 10.2079 1.31152 11.1699L1.59277 11.7607L2.77441 11.1992L2.49414 10.6084L2.36035 10.3076C2.06865 9.59612 1.90723 8.81645 1.90723 7.99805C1.90733 4.63362 4.63554 1.90625 8 1.90625C11.3644 1.90635 14.0917 4.63368 14.0918 7.99805C14.0918 11.3625 11.3644 14.0907 8 14.0908C7.311 14.0908 6.80642 14.0414 6.35938 13.918C5.919 13.7963 5.50105 13.5929 5.00098 13.2441C4.26805 12.7329 3.21756 12.5526 2.35156 13.0996L2.33789 13.1084L2.32422 13.1182L1.74805 13.5234L2.18164 14.8184L3.05957 14.2002C3.37505 14.0068 3.84248 14.0319 4.25195 14.3174C4.84447 14.7307 5.39718 15.009 6.01172 15.1787C6.61963 15.3465 7.25579 15.3984 8 15.3984C12.087 15.3983 15.4004 12.0851 15.4004 7.99805C15.4003 3.9111 12.087 0.59776 8 0.597656ZM4.56836 8.50977V9.80371H8.12402V8.50977H4.56836ZM4.56836 7.30078H11.4619V6.00684H4.56836V7.30078Z",
2641
+ fill: "currentColor"
2642
+ })
2643
+ });
2644
+ case "file": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconBrowseOutline16, {
2645
+ size,
2646
+ className
2647
+ });
2648
+ case "folder": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconFolderClose16, {
2649
+ size,
2650
+ className
2651
+ });
2652
+ }
2527
2653
  }
2528
2654
  //#endregion
2529
2655
  //#region src/client/chat/message-chrome.ts
@@ -2683,8 +2809,8 @@ window.__ModuleLoader__.load({
2683
2809
  document.head.appendChild(tag);
2684
2810
  }
2685
2811
  var StatsLine_module_css_default = {
2686
- "root": "_EvZDq_root",
2687
- "sep": "_EvZDq_sep"
2812
+ "sep": "_EvZDq_sep",
2813
+ "root": "_EvZDq_root"
2688
2814
  };
2689
2815
  //#endregion
2690
2816
  //#region src/client/chat/StatsLine.tsx
@@ -2761,14 +2887,52 @@ window.__ModuleLoader__.load({
2761
2887
  const whole = Math.round(s);
2762
2888
  return `${Math.floor(whole / 60)}m${whole % 60}s`;
2763
2889
  }
2890
+ /** Round a cache-read ratio to an integer percentage, with positive ties rounded up. */
2891
+ function roundedIntegerPercent(cacheReadTokens, denominator) {
2892
+ const denominatorQuotient = Math.floor(denominator / 200);
2893
+ const denominatorRemainder = denominator % 200;
2894
+ let lower = 0;
2895
+ let upper = 100;
2896
+ while (lower < upper) {
2897
+ const candidate = Math.floor((lower + upper + 1) / 2);
2898
+ const factor = candidate * 2 - 1;
2899
+ if (cacheReadTokens >= factor * denominatorQuotient + Math.ceil(factor * denominatorRemainder / 200)) lower = candidate;
2900
+ else upper = candidate - 1;
2901
+ }
2902
+ return lower;
2903
+ }
2764
2904
  /**
2765
- * Cache-hit share of prompt-side input over the whole durable log.
2905
+ * Display-ready cache-hit share of prompt-side input over the whole durable log.
2766
2906
  * @param usage - the session's token-usage projection value.
2767
- * @returns rounded integer percent, or null when no input was billed.
2907
+ * @returns integer text when integer rounding stays below 100, otherwise the
2908
+ * minimum decimal precision that still rounds below 100; a full hit returns
2909
+ * 100, and no billed input returns null.
2768
2910
  */
2769
2911
  function cacheHitPercent(usage) {
2770
2912
  const denominator = billedInputTokens(usage);
2771
- return denominator === 0 ? null : Math.round(usage.cacheReadTokens / denominator * 100);
2913
+ if (denominator === 0) return null;
2914
+ const missedInputTokens = usage.uncachedInputTokens + usage.cacheWriteTokens;
2915
+ if (missedInputTokens === 0) return "100";
2916
+ const integerPercent = roundedIntegerPercent(usage.cacheReadTokens, denominator);
2917
+ if (integerPercent < 100) return String(integerPercent);
2918
+ let decimalPlaces = 1;
2919
+ let scaledDoubleGap = missedInputTokens * 200;
2920
+ const denominatorTens = Math.floor(denominator / 10);
2921
+ while (scaledDoubleGap <= denominatorTens) {
2922
+ scaledDoubleGap *= 10;
2923
+ decimalPlaces += 1;
2924
+ }
2925
+ const denominatorOnes = denominator % 10;
2926
+ let roundedLoss = 5;
2927
+ for (let loss = 1; loss < 5; loss += 1) {
2928
+ const factor = loss * 2 + 1;
2929
+ const threshold = factor * denominatorTens + Math.floor(factor * denominatorOnes / 10);
2930
+ if (scaledDoubleGap <= threshold) {
2931
+ roundedLoss = loss;
2932
+ break;
2933
+ }
2934
+ }
2935
+ return `99.${"9".repeat(decimalPlaces - 1)}${10 - roundedLoss}`;
2772
2936
  }
2773
2937
  /**
2774
2938
  * Sum the three disjoint prompt-side billing buckets.
@@ -2873,23 +3037,23 @@ window.__ModuleLoader__.load({
2873
3037
  document.head.appendChild(tag);
2874
3038
  }
2875
3039
  var ContextMeter_module_css_default = {
2876
- "headline": "bloECW_headline",
3040
+ "percent": "bloECW_percent",
2877
3041
  "row": "bloECW_row",
2878
- "bar": "bloECW_bar",
2879
- "root": "bloECW_root",
2880
3042
  "figures": "bloECW_figures",
2881
- "header": "bloECW_header",
2882
- "colorMessages": "bloECW_colorMessages",
3043
+ "bar": "bloECW_bar",
2883
3044
  "colorSystem": "bloECW_colorSystem",
2884
- "percent": "bloECW_percent",
3045
+ "colorMessages": "bloECW_colorMessages",
2885
3046
  "track": "bloECW_track",
2886
- "panel": "bloECW_panel",
2887
- "segment": "bloECW_segment",
2888
3047
  "swatch": "bloECW_swatch",
3048
+ "panel": "bloECW_panel",
2889
3049
  "trigger": "bloECW_trigger",
3050
+ "headline": "bloECW_headline",
2890
3051
  "rows": "bloECW_rows",
3052
+ "header": "bloECW_header",
3053
+ "fill": "bloECW_fill",
3054
+ "root": "bloECW_root",
2891
3055
  "colorTools": "bloECW_colorTools",
2892
- "fill": "bloECW_fill"
3056
+ "segment": "bloECW_segment"
2893
3057
  };
2894
3058
  //#endregion
2895
3059
  //#region src/client/skeleton/ContextMeter.tsx
@@ -3062,10 +3226,10 @@ window.__ModuleLoader__.load({
3062
3226
  }
3063
3227
  var PermissionSelect_module_css_default = {
3064
3228
  "trigger": "UJ7tKa_trigger",
3229
+ "chevron": "UJ7tKa_chevron",
3065
3230
  "triggerIcon": "UJ7tKa_triggerIcon",
3066
3231
  "triggerLabel": "UJ7tKa_triggerLabel",
3067
- "chevronOpen": "UJ7tKa_chevronOpen",
3068
- "chevron": "UJ7tKa_chevron"
3232
+ "chevronOpen": "UJ7tKa_chevronOpen"
3069
3233
  };
3070
3234
  //#endregion
3071
3235
  //#region src/client/skeleton/PermissionSelect.tsx
@@ -3289,7 +3453,7 @@ window.__ModuleLoader__.load({
3289
3453
  }
3290
3454
  //#endregion
3291
3455
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\skeleton\InputBar.module.css.mjs
3292
- const css$17 = "@font-face{font-family:DshChipCell;src:url(data:font/ttf;base64,AAEAAAAKAIAAAwAgT1MvMkT8SmIAAAEoAAAAYGNtYXAADQBPAAABkAAAADRnbHlmAAAAAAAAAcwAAAABaGVhZCwtPGoAAACsAAAANmhoZWEDIg7bAAAA5AAAACRobXR4EZQAAAAAAYgAAAAIbG9jYQAAAAAAAAHEAAAABm1heHAAAwACAAABCAAAACBuYW1lvljk2gAAAdAAAABscG9zdNNweNQAAAI8AAAALQABAAAAAQAAdia1tV8PPPUAAwPoAAAAAOaLfcUAAAAA5ot9xQAAAAAAAAAAAAAAAwACAAAAAAAAAAEAAAMg/zgAAA+gAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAEAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwjKAZAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAPz8/PwAA//z//AMg/zgAAAMgAMgAAAAAAAAAAAAAAAAAAAAgAAAB9AAAD6AAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAIAAAAAQABAABAAD//P//AAD//P//AAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAEADYAAQAAAAAAAQALAAAAAQAAAAAAAgAHAAsAAwABBAkAAQAWABIAAwABBAkAAgAOAChEc2hDaGlwQ2VsbFJlZ3VsYXIARABzAGgAQwBoAGkAcABDAGUAbABsAFIAZQBnAHUAbABhAHIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAABAgZvYmpyZXAAAAA=)format(\"truetype\")}.QdFsVG_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}.QdFsVG_hero{padding:0 var(--dsh-composer-side-clearance)}.QdFsVG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.QdFsVG_noticeError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.QdFsVG_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:22px;flex-direction:column;gap:12px;padding-top:10px;font-size:16px;line-height:24px;display:flex;position:relative}.QdFsVG_cardWorkspaceTrigger{cursor:pointer;border-color:#0000}.QdFsVG_cardWorkspaceTrigger:after{content:\"\";background:var(--dsw-alias-border-l4);pointer-events:none;border-radius:22px;transition:background-color .1s;position:absolute;inset:-1px;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\");mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\")}.QdFsVG_cardWorkspaceTrigger :disabled{pointer-events:none}.QdFsVG_cardWorkspaceTrigger:hover:after{background:var(--dsw-alias-state-business-primary)}.QdFsVG_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.QdFsVG_attachments{min-width:0;padding:4px 12px 0}.QdFsVG_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.QdFsVG_scroll{max-height:var(--dsh-composer-text-max-height);overflow-y:auto}.QdFsVG_grow{position:relative}.QdFsVG_backdrop{color:var(--dsw-alias-label-primary);pointer-events:none;position:absolute;inset:0;overflow:hidden}.QdFsVG_hlToken{color:var(--dsw-alias-state-warn-label);background-color:#0000}.QdFsVG_hlSegment{color:#0000;background-color:#0000;border-radius:4px}.QdFsVG_hint{color:var(--dsw-alias-label-caption)}.QdFsVG_pending{background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate QdFsVG_input-pending}@keyframes QdFsVG_input-pending{0%{opacity:.35}to{opacity:1}}.QdFsVG_input{resize:none;color:#0000;width:100%;height:100%;caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:hidden}.QdFsVG_input,.QdFsVG_mirror,.QdFsVG_backdrop{box-sizing:border-box;font-family:\"DshChipCell\", var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;padding:4px 12px 0 16px}.QdFsVG_input::placeholder{color:var(--dsw-alias-label-caption);user-select:none}.QdFsVG_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}.QdFsVG_input[aria-haspopup=menu]{cursor:pointer}.QdFsVG_mirror{visibility:hidden;pointer-events:none}.QdFsVG_hero .QdFsVG_mirror{min-height:52px}.QdFsVG_row{justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.QdFsVG_tools,.QdFsVG_modes,.QdFsVG_trailing{align-items:center;min-width:0;display:flex}.QdFsVG_tools{gap:16px}.QdFsVG_modes{gap:12px}.QdFsVG_trailing{flex:none;gap:12px}.QdFsVG_add{background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.QdFsVG_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.QdFsVG_add:disabled{opacity:.5;cursor:default}.QdFsVG_select{max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;border-radius:8px;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.QdFsVG_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.QdFsVG_select:disabled{opacity:.5;cursor:default}.QdFsVG_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.QdFsVG_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.QdFsVG_primary:disabled{opacity:.4;cursor:default}.QdFsVG_retry{color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:8px;padding:1px 8px;font-size:12px}.QdFsVG_textRef{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000}.QdFsVG_textRef:after{display:none}.QdFsVG_chip{background:#6187d838;border-radius:6px;position:relative}.QdFsVG_chip:before{content:\"\";color:#0000}.QdFsVG_chipLabel{width:calc(138.889% - 10px);color:var(--dsw-alias-label-primary);white-space:nowrap;justify-content:center;align-items:center;display:flex;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)scale(.72)}.QdFsVG_chipInvalid{opacity:.7;background:#d8616133;text-decoration:line-through}";
3456
+ const css$17 = ".QdFsVG_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}.QdFsVG_hero{padding:0 var(--dsh-composer-side-clearance)}.QdFsVG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.QdFsVG_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:22px;flex-direction:column;gap:12px;padding-top:10px;font-size:16px;line-height:24px;display:flex;position:relative}.QdFsVG_cardWorkspaceTrigger{cursor:pointer;border-color:#0000}.QdFsVG_cardWorkspaceTrigger:after{content:\"\";background:var(--dsw-alias-border-l4);pointer-events:none;border-radius:22px;transition:background-color .1s;position:absolute;inset:-1px;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\");mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\")}.QdFsVG_cardWorkspaceTrigger :disabled{pointer-events:none}.QdFsVG_cardWorkspaceTrigger:hover:after{background:var(--dsw-alias-state-business-primary)}.QdFsVG_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.QdFsVG_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.QdFsVG_scroll{max-height:var(--dsh-composer-text-max-height);overflow-y:auto}.QdFsVG_grow{position:relative}.QdFsVG_backdrop{color:var(--dsw-alias-label-primary);pointer-events:none;position:absolute;inset:0;overflow:hidden}.QdFsVG_backdropDisabled,.QdFsVG_backdropDisabled :is(.QdFsVG_hlToken,.QdFsVG_hint,.QdFsVG_textRef,.QdFsVG_chip,.QdFsVG_chipInvalid){color:var(--dsw-alias-label-tertiary)}.QdFsVG_hlToken{color:var(--dsw-alias-state-warn-label);background-color:#0000}.QdFsVG_hlSegment{color:#0000;background-color:#0000;border-radius:4px}.QdFsVG_hint{color:var(--dsw-alias-label-caption)}.QdFsVG_pending{background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate QdFsVG_input-pending}@keyframes QdFsVG_input-pending{0%{opacity:.35}to{opacity:1}}.QdFsVG_input{resize:none;color:#0000;-webkit-text-fill-color:transparent;width:100%;height:100%;caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:hidden}.QdFsVG_input,.QdFsVG_mirror,.QdFsVG_backdrop{box-sizing:border-box;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;padding:4px 12px 0 16px}.QdFsVG_input::placeholder{color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);user-select:none}.QdFsVG_input:disabled{color:#0000;-webkit-text-fill-color:transparent;cursor:not-allowed}.QdFsVG_input[aria-haspopup=menu]{cursor:pointer}.QdFsVG_mirror{visibility:hidden;pointer-events:none}.QdFsVG_hero .QdFsVG_mirror{min-height:52px}.QdFsVG_row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.QdFsVG_tools,.QdFsVG_modes,.QdFsVG_trailing{align-items:center;min-width:0;display:flex}.QdFsVG_tools{gap:16px}.QdFsVG_modes{gap:12px}.QdFsVG_trailing{flex:none;gap:12px;margin-left:auto}.QdFsVG_add{background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.QdFsVG_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.QdFsVG_add:disabled{opacity:.5;cursor:default}.QdFsVG_select{max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;border-radius:8px;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.QdFsVG_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.QdFsVG_select:disabled{opacity:.5;cursor:default}.QdFsVG_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.QdFsVG_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.QdFsVG_primary:disabled{opacity:.4;cursor:default}.QdFsVG_retry{color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:8px;padding:1px 8px;font-size:12px}.QdFsVG_textRef{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000}.QdFsVG_textRef:after{display:none}.QdFsVG_textRefTrigger{position:relative}.QdFsVG_textRefTriggerGlyph{color:#0000}.QdFsVG_textRefIcon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.QdFsVG_chip{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;position:relative}.QdFsVG_chipTrigger{position:relative}.QdFsVG_chipTriggerGlyph{color:#0000}.QdFsVG_chipIcon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.QdFsVG_chipInvalid{opacity:.7;color:var(--dsw-alias-state-error-primary);text-decoration:line-through}";
3293
3457
  const tagId$17 = "@xrkseek/client-ui-conversation/InputBar.module.css";
3294
3458
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$17) + "]") === null) {
3295
3459
  const tag = document.createElement("style");
@@ -3299,37 +3463,41 @@ window.__ModuleLoader__.load({
3299
3463
  document.head.appendChild(tag);
3300
3464
  }
3301
3465
  var InputBar_module_css_default = {
3302
- "attachments": "QdFsVG_attachments",
3303
- "pending": "QdFsVG_pending",
3304
- "chipInvalid": "QdFsVG_chipInvalid",
3305
- "cardWorkspaceTrigger": "QdFsVG_cardWorkspaceTrigger",
3466
+ "backdropDisabled": "QdFsVG_backdropDisabled",
3467
+ "hlToken": "QdFsVG_hlToken",
3468
+ "backdrop": "QdFsVG_backdrop",
3469
+ "textRef": "QdFsVG_textRef",
3470
+ "retry": "QdFsVG_retry",
3471
+ "textRefIcon": "QdFsVG_textRefIcon",
3472
+ "card": "QdFsVG_card",
3473
+ "chipIcon": "QdFsVG_chipIcon",
3306
3474
  "add": "QdFsVG_add",
3307
- "chipLabel": "QdFsVG_chipLabel",
3308
- "trailing": "QdFsVG_trailing",
3309
- "scroll": "QdFsVG_scroll",
3310
3475
  "tools": "QdFsVG_tools",
3476
+ "select": "QdFsVG_select",
3311
3477
  "chip": "QdFsVG_chip",
3312
- "textRef": "QdFsVG_textRef",
3478
+ "chipInvalid": "QdFsVG_chipInvalid",
3479
+ "input-pending": "QdFsVG_input-pending",
3480
+ "grow": "QdFsVG_grow",
3481
+ "textRefTriggerGlyph": "QdFsVG_textRefTriggerGlyph",
3482
+ "chipTrigger": "QdFsVG_chipTrigger",
3483
+ "cardWorkspaceTrigger": "QdFsVG_cardWorkspaceTrigger",
3484
+ "input": "QdFsVG_input",
3485
+ "mirror": "QdFsVG_mirror",
3486
+ "chipTriggerGlyph": "QdFsVG_chipTriggerGlyph",
3487
+ "hint": "QdFsVG_hint",
3488
+ "root": "QdFsVG_root",
3489
+ "hlSegment": "QdFsVG_hlSegment",
3313
3490
  "hero": "QdFsVG_hero",
3314
- "overlayAnchor": "QdFsVG_overlayAnchor",
3315
- "notice": "QdFsVG_notice",
3316
3491
  "accessory": "QdFsVG_accessory",
3317
- "hint": "QdFsVG_hint",
3318
- "noticeError": "QdFsVG_noticeError",
3319
- "mirror": "QdFsVG_mirror",
3320
3492
  "modes": "QdFsVG_modes",
3321
- "hlToken": "QdFsVG_hlToken",
3322
- "input": "QdFsVG_input",
3323
- "grow": "QdFsVG_grow",
3493
+ "trailing": "QdFsVG_trailing",
3324
3494
  "row": "QdFsVG_row",
3325
- "root": "QdFsVG_root",
3326
- "input-pending": "QdFsVG_input-pending",
3327
- "backdrop": "QdFsVG_backdrop",
3328
- "retry": "QdFsVG_retry",
3329
- "hlSegment": "QdFsVG_hlSegment",
3330
- "select": "QdFsVG_select",
3331
- "card": "QdFsVG_card",
3332
- "primary": "QdFsVG_primary"
3495
+ "textRefTrigger": "QdFsVG_textRefTrigger",
3496
+ "overlayAnchor": "QdFsVG_overlayAnchor",
3497
+ "primary": "QdFsVG_primary",
3498
+ "pending": "QdFsVG_pending",
3499
+ "scroll": "QdFsVG_scroll",
3500
+ "notice": "QdFsVG_notice"
3333
3501
  };
3334
3502
  //#endregion
3335
3503
  //#region src/client/skeleton/InputBar.tsx
@@ -3347,6 +3515,41 @@ window.__ModuleLoader__.load({
3347
3515
  textRefs: [],
3348
3516
  hint: null
3349
3517
  };
3518
+ /**
3519
+ * Resolve one edit's range from the record taken before it applied.
3520
+ * A selection the edit replaces is the range outright. A caret delete replaces
3521
+ * nothing and reports the bare caret, so the removed span is whatever the draft
3522
+ * lost, on the side `inputType` names — measured, because one caret gesture can
3523
+ * remove a multi-unit grapheme, a word, or a line.
3524
+ * @param pending - record taken at `beforeinput`, null when none was seen.
3525
+ * @param prevLength - length of the draft the edit applied to.
3526
+ * @param nextLength - length of the resulting draft.
3527
+ * @returns the exact range, or undefined when the record cannot describe this
3528
+ * edit and the machine's diff scan has to recover it.
3529
+ */
3530
+ function editRangeOf(pending, prevLength, nextLength) {
3531
+ if (pending === null || pending.draftLength !== prevLength) return void 0;
3532
+ const { start, end, inputType } = pending;
3533
+ if (start > end || end > prevLength) return void 0;
3534
+ const insertedLength = nextLength - prevLength + (end - start);
3535
+ if (insertedLength >= 0) return {
3536
+ start,
3537
+ end,
3538
+ insertedLength
3539
+ };
3540
+ if (start !== end) return void 0;
3541
+ const removed = prevLength - nextLength;
3542
+ if (inputType.endsWith("Backward")) return removed <= start ? {
3543
+ start: start - removed,
3544
+ end: start,
3545
+ insertedLength: 0
3546
+ } : void 0;
3547
+ if (inputType.endsWith("Forward")) return start + removed <= prevLength ? {
3548
+ start,
3549
+ end: start + removed,
3550
+ insertedLength: 0
3551
+ } : void 0;
3552
+ }
3350
3553
  function InputBar({ useSession, useInput, inputActions, keyboard, addImages, removeImage, draftImages, resolveSubmitMode, toggleCommandMenu, stop, command, t, renderSlot, useNotices, useLexicon, useMenuLauncher, useProjection, sessionId, variant, disabled: inert = false, blocked, workspacePickerOpen = false, onRequestWorkspace, placeholder, accessory, overlay, leftItems, rightItems, footer }) {
3351
3554
  const input = useInput((s) => s);
3352
3555
  const notice = useNotices((s) => s);
@@ -3362,8 +3565,6 @@ window.__ModuleLoader__.load({
3362
3565
  const draft = input?.draft ?? "";
3363
3566
  const attachments = (0, react.useMemo)(() => input === void 0 || draftImages === void 0 ? [] : draftImages(input.imageIds), [draftImages, input?.imageIds]);
3364
3567
  const empty = draft.trim() === "" && attachments.length === 0;
3365
- const [preview, setPreview] = (0, react.useState)(null);
3366
- const [dragActive, setDragActive] = (0, react.useState)(false);
3367
3568
  const [toast, setToast] = (0, react.useState)(null);
3368
3569
  const toastSeq = (0, react.useRef)(0);
3369
3570
  const showToast = (0, react.useCallback)((text) => {
@@ -3386,9 +3587,11 @@ window.__ModuleLoader__.load({
3386
3587
  t,
3387
3588
  imageLimits
3388
3589
  ]);
3590
+ (0, react.useEffect)(() => {
3591
+ if (notice?.level === "error") showToast(notice.text);
3592
+ }, [notice, showToast]);
3389
3593
  const inputRef = (0, react.useRef)(null);
3390
3594
  const cardRef = (0, react.useRef)(null);
3391
- const dragDepthRef = (0, react.useRef)(0);
3392
3595
  const scrollRef = (0, react.useRef)(null);
3393
3596
  const mirrorRef = (0, react.useRef)(null);
3394
3597
  const safari = (0, react.useMemo)(() => isSafariBrowser(navigator), []);
@@ -3425,9 +3628,6 @@ window.__ModuleLoader__.load({
3425
3628
  safariNativeShrinkRef.current = false;
3426
3629
  if (safari && nativeShrink) repairSafariTextareaLayout(inputRef.current);
3427
3630
  }, [draft, safari]);
3428
- (0, react.useEffect)(() => {
3429
- if (preview !== null && !attachments.some((attachment) => attachment.id === preview.id)) setPreview(null);
3430
- }, [attachments, preview]);
3431
3631
  const revealCaret = (caret) => {
3432
3632
  const scrollEl = scrollRef.current;
3433
3633
  const mirrorEl = mirrorRef.current;
@@ -3484,6 +3684,32 @@ window.__ModuleLoader__.load({
3484
3684
  el.removeEventListener("wheel", onWheel);
3485
3685
  };
3486
3686
  }, []);
3687
+ const selectionOf = (el) => ({
3688
+ start: el.selectionStart ?? 0,
3689
+ end: el.selectionEnd ?? el.selectionStart ?? 0
3690
+ });
3691
+ const pendingEditRef = (0, react.useRef)(null);
3692
+ (0, react.useEffect)(() => {
3693
+ const el = inputRef.current;
3694
+ if (el === null) return;
3695
+ const onBeforeInput = (e) => {
3696
+ if (!e.inputType.startsWith("insert") && !e.inputType.startsWith("delete")) {
3697
+ pendingEditRef.current = null;
3698
+ return;
3699
+ }
3700
+ const { start, end } = selectionOf(el);
3701
+ pendingEditRef.current = {
3702
+ start,
3703
+ end,
3704
+ draftLength: el.value.length,
3705
+ inputType: e.inputType
3706
+ };
3707
+ };
3708
+ el.addEventListener("beforeinput", onBeforeInput);
3709
+ return () => {
3710
+ el.removeEventListener("beforeinput", onBeforeInput);
3711
+ };
3712
+ }, []);
3487
3713
  const onKeyDown = (e) => {
3488
3714
  if (workspaceTrigger) {
3489
3715
  if (e.key === "Enter" || e.key === " ") {
@@ -3492,9 +3718,28 @@ window.__ModuleLoader__.load({
3492
3718
  }
3493
3719
  return;
3494
3720
  }
3495
- if (keyboard === void 0 || inputActions === void 0) return;
3721
+ if (input === void 0 || keyboard === void 0 || inputActions === void 0) return;
3496
3722
  if (e.key === "Enter" && e.shiftKey) return;
3497
3723
  const composing = composingRef.current || e.nativeEvent.isComposing || e.nativeEvent.keyCode === 229;
3724
+ if (!composing && !machineBusy && !locked && (e.key === "Backspace" || e.key === "Delete")) {
3725
+ const selection = selectionOf(e.currentTarget);
3726
+ if (selection.start === selection.end) {
3727
+ const occurrence = input.occurrences.find((o) => e.key === "Backspace" ? o.offset + o.length === selection.start : o.offset === selection.start);
3728
+ if (occurrence !== void 0) {
3729
+ e.preventDefault();
3730
+ const start = occurrence.offset;
3731
+ const end = occurrence.offset + occurrence.length;
3732
+ keyboard.setDraft(draft.slice(0, start) + draft.slice(end), {
3733
+ start,
3734
+ end,
3735
+ insertedLength: 0
3736
+ });
3737
+ restoreCaret(e.currentTarget, start);
3738
+ keyboard.track(keyboard.snapshot.draft, start);
3739
+ return;
3740
+ }
3741
+ }
3742
+ }
3498
3743
  if (e.key === "ArrowUp" || e.key === "ArrowDown") {
3499
3744
  if (keyboard.arbitrate(e.key === "ArrowUp" ? "up" : "down", composing) === "consumed") e.preventDefault();
3500
3745
  return;
@@ -3536,38 +3781,37 @@ window.__ModuleLoader__.load({
3536
3781
  if (keyboard === void 0 || locked) return;
3537
3782
  if (machineBusy) return;
3538
3783
  const next = e.target.value;
3784
+ const pending = pendingEditRef.current;
3785
+ pendingEditRef.current = null;
3539
3786
  safariNativeShrinkRef.current = safari && next.length < draft.length;
3540
- keyboard.setDraft(next);
3787
+ keyboard.setDraft(next, editRangeOf(pending, draft.length, next.length));
3541
3788
  keyboard.track(next, e.target.selectionStart ?? next.length);
3542
3789
  };
3543
- const selectionOf = (el) => ({
3544
- start: el.selectionStart ?? 0,
3545
- end: el.selectionEnd ?? el.selectionStart ?? 0
3546
- });
3547
3790
  const onCopyOrCut = (e, cut) => {
3548
3791
  if (input === void 0 || keyboard === void 0) return;
3549
3792
  const el = e.currentTarget;
3550
3793
  const { start, end } = selectionOf(el);
3551
3794
  if (start === end) return;
3552
- draft.slice(start, end);
3553
- const touched = input.occurrences.filter((o) => o.offset >= start && o.offset < end);
3795
+ const touched = input.occurrences.filter((o) => o.offset < end && o.offset + o.length > start);
3554
3796
  if (touched.length === 0 && !cut) return;
3555
3797
  e.preventDefault();
3798
+ const copyStart = touched.reduce((value, o) => Math.min(value, o.offset), start);
3799
+ const copyEnd = touched.reduce((value, o) => Math.max(value, o.offset + o.length), end);
3556
3800
  let text = "";
3557
- let cursor = start;
3801
+ let cursor = copyStart;
3558
3802
  for (const o of touched) {
3559
3803
  text += draft.slice(cursor, o.offset) + o.clipboardText;
3560
- cursor = o.offset + 1;
3804
+ cursor = o.offset + o.length;
3561
3805
  }
3562
- text += draft.slice(cursor, end);
3806
+ text += draft.slice(cursor, copyEnd);
3563
3807
  e.clipboardData.setData("text/plain", text);
3564
3808
  if (cut && !machineBusy && !locked) {
3565
- keyboard.setDraft(draft.slice(0, start) + draft.slice(end), {
3566
- start,
3567
- end,
3809
+ keyboard.setDraft(draft.slice(0, copyStart) + draft.slice(copyEnd), {
3810
+ start: copyStart,
3811
+ end: copyEnd,
3568
3812
  insertedLength: 0
3569
3813
  });
3570
- restoreCaret(el, start);
3814
+ restoreCaret(el, copyStart);
3571
3815
  }
3572
3816
  };
3573
3817
  const onPaste = (e) => {
@@ -3608,60 +3852,6 @@ window.__ModuleLoader__.load({
3608
3852
  t
3609
3853
  ]);
3610
3854
  const canAcceptDrop = !locked && !machineBusy && addImages !== void 0;
3611
- (0, react.useEffect)(() => {
3612
- const hasFiles = (event) => event.dataTransfer?.types.includes("Files") ?? false;
3613
- const reset = () => {
3614
- dragDepthRef.current = 0;
3615
- setDragActive(false);
3616
- };
3617
- const onDragEnter = (event) => {
3618
- if (!hasFiles(event)) return;
3619
- event.preventDefault();
3620
- dragDepthRef.current += 1;
3621
- setDragActive(true);
3622
- };
3623
- const onDragOver = (event) => {
3624
- if (!hasFiles(event) || event.dataTransfer === null) return;
3625
- event.preventDefault();
3626
- event.dataTransfer.dropEffect = canAcceptDrop ? "copy" : "none";
3627
- };
3628
- const onDragLeave = (event) => {
3629
- if (!hasFiles(event)) return;
3630
- dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
3631
- if (dragDepthRef.current === 0) setDragActive(false);
3632
- const leavingViewport = event.clientX <= 0 || event.clientY <= 0 || event.clientX >= window.innerWidth || event.clientY >= window.innerHeight;
3633
- if ((event.target === document.documentElement || event.target === document.body) && leavingViewport) reset();
3634
- };
3635
- const onDrop = (event) => {
3636
- if (!hasFiles(event)) return;
3637
- event.preventDefault();
3638
- reset();
3639
- if (!canAcceptDrop) return;
3640
- intakeImages([...event.dataTransfer?.files ?? []]);
3641
- };
3642
- document.addEventListener("dragenter", onDragEnter);
3643
- document.addEventListener("dragover", onDragOver);
3644
- document.addEventListener("dragleave", onDragLeave);
3645
- document.addEventListener("drop", onDrop);
3646
- window.addEventListener("dragend", reset);
3647
- return () => {
3648
- document.removeEventListener("dragenter", onDragEnter);
3649
- document.removeEventListener("dragover", onDragOver);
3650
- document.removeEventListener("dragleave", onDragLeave);
3651
- document.removeEventListener("drop", onDrop);
3652
- window.removeEventListener("dragend", reset);
3653
- };
3654
- }, [canAcceptDrop, intakeImages]);
3655
- const closePreview = (0, react.useCallback)(() => {
3656
- setPreview(null);
3657
- }, []);
3658
- const railItems = (0, react.useMemo)(() => attachments.map((attachment) => ({
3659
- id: attachment.id,
3660
- previewUrl: attachment.previewUrl,
3661
- alt: attachment.file.name || t("image.pending"),
3662
- removeLabel: t("image.remove", { name: attachment.file.name }),
3663
- attachment
3664
- })), [attachments, t]);
3665
3855
  const onSelect = (e) => {
3666
3856
  if (keyboard !== void 0 && keyboard.snapshot.paste !== void 0) keyboard.invalidatePaste();
3667
3857
  };
@@ -3711,34 +3901,54 @@ window.__ModuleLoader__.load({
3711
3901
  at: chip.offset,
3712
3902
  kind: "chip",
3713
3903
  chip
3714
- })), ...deco.textRefs.map((ref) => ({
3904
+ })), ...deco.textRefs.map((ref, ordinal) => ({
3715
3905
  at: ref.start,
3716
3906
  kind: "text-ref",
3717
- ref
3907
+ ref,
3908
+ ordinal
3718
3909
  }))].sort((a, b) => a.at - b.at);
3719
3910
  for (const b of boundaries) {
3720
3911
  if (b.at < cursor) continue;
3721
3912
  pushPlain(b.at);
3722
3913
  if (b.kind === "chip") {
3723
3914
  const chip = b.chip;
3724
- backdrop.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3915
+ backdrop.push(/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3725
3916
  className: clsx(InputBar_module_css_default.chip, chip.invalid && InputBar_module_css_default.chipInvalid),
3726
3917
  "data-decoration": "chip",
3918
+ "data-reference-appearance": chip.appearance,
3727
3919
  "data-occurrence": chip.occurrenceId,
3728
3920
  "data-invalid": chip.invalid || void 0,
3729
3921
  title: chip.label,
3730
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3731
- className: InputBar_module_css_default.chipLabel,
3732
- children: chip.label
3733
- })
3922
+ children: [chip.appearance === void 0 ? chip.text[0] : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3923
+ className: InputBar_module_css_default.chipTrigger,
3924
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3925
+ className: InputBar_module_css_default.chipTriggerGlyph,
3926
+ children: chip.text[0]
3927
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReferenceIcon, {
3928
+ kind: chip.appearance,
3929
+ size: 16,
3930
+ className: InputBar_module_css_default.chipIcon
3931
+ })]
3932
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: chip.text.slice(1) })]
3734
3933
  }, `chip-${chip.occurrenceId}`));
3735
- cursor = chip.offset + 1;
3934
+ cursor = chip.offset + chip.length;
3736
3935
  } else {
3936
+ const text = draft.slice(b.ref.start, b.ref.end);
3737
3937
  backdrop.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("mark", {
3738
3938
  className: InputBar_module_css_default.textRef,
3739
3939
  "data-decoration": "text-ref",
3740
- children: draft.slice(b.ref.start, b.ref.end)
3741
- }, `ref-${b.ref.start}`));
3940
+ children: b.ref.appearance === "folder" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3941
+ className: InputBar_module_css_default.textRefTrigger,
3942
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3943
+ className: InputBar_module_css_default.textRefTriggerGlyph,
3944
+ children: text[0]
3945
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReferenceIcon, {
3946
+ kind: "folder",
3947
+ size: 16,
3948
+ className: InputBar_module_css_default.textRefIcon
3949
+ })]
3950
+ }), text.slice(1)] }) : text
3951
+ }, `ref-${b.ordinal}`));
3742
3952
  cursor = b.ref.end;
3743
3953
  }
3744
3954
  }
@@ -3758,21 +3968,14 @@ window.__ModuleLoader__.load({
3758
3968
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3759
3969
  className: clsx(InputBar_module_css_default.root, variant === "hero" && InputBar_module_css_default.hero),
3760
3970
  children: [
3761
- dragActive && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_attachment.DropOverlay, {
3762
- disabled: !canAcceptDrop,
3763
- labels: dropOverlayLabels(t, canAcceptDrop, imageLimits === void 0 ? void 0 : {
3764
- count: imageLimits.maxImagesPerMessage,
3765
- size: imageSizeText(imageLimits.maxImageBytes)
3766
- })
3767
- }),
3768
3971
  toast !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.Toast, {
3769
3972
  text: toast.text,
3770
3973
  icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconWarningOutline16, {}),
3771
3974
  anchor: cardRef.current,
3772
3975
  onDone: dismissToast
3773
3976
  }, toast.seq),
3774
- notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3775
- className: clsx(InputBar_module_css_default.notice, notice.level === "error" && InputBar_module_css_default.noticeError),
3977
+ notice?.level === "info" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3978
+ className: InputBar_module_css_default.notice,
3776
3979
  role: "status",
3777
3980
  children: notice.text
3778
3981
  }),
@@ -3793,18 +3996,17 @@ window.__ModuleLoader__.load({
3793
3996
  className: InputBar_module_css_default.accessory,
3794
3997
  children: accessory
3795
3998
  }),
3796
- railItems.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3797
- className: InputBar_module_css_default.attachments,
3798
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_attachment.AttachmentRail, {
3799
- items: railItems,
3800
- labels: attachmentRailLabels(t),
3801
- onOpen: (item) => {
3802
- setPreview(item.attachment);
3803
- },
3804
- onRemove: (item) => {
3805
- removeImage?.(item.attachment.id);
3806
- }
3807
- })
3999
+ renderSlot("conversation.input.attachments", {
4000
+ attachments,
4001
+ canAcceptDrop,
4002
+ onAddImages: intakeImages,
4003
+ onRemoveImage: (id) => {
4004
+ removeImage?.(id);
4005
+ },
4006
+ dropLimits: imageLimits === void 0 ? void 0 : {
4007
+ count: imageLimits.maxImagesPerMessage,
4008
+ size: imageSizeText(imageLimits.maxImageBytes)
4009
+ }
3808
4010
  }),
3809
4011
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3810
4012
  ref: scrollRef,
@@ -3815,8 +4017,9 @@ window.__ModuleLoader__.load({
3815
4017
  children: [
3816
4018
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3817
4019
  "aria-hidden": true,
3818
- className: InputBar_module_css_default.backdrop,
4020
+ className: clsx(InputBar_module_css_default.backdrop, textareaDisabled && InputBar_module_css_default.backdropDisabled),
3819
4021
  "data-input-backdrop": true,
4022
+ "data-disabled": textareaDisabled || void 0,
3820
4023
  children: backdrop
3821
4024
  }),
3822
4025
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
@@ -3958,12 +4161,6 @@ window.__ModuleLoader__.load({
3958
4161
  })
3959
4162
  ]
3960
4163
  }),
3961
- preview !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_attachment.ImageLightbox, {
3962
- src: preview.previewUrl,
3963
- alt: preview.file.name || t("image.original"),
3964
- labels: lightboxLabels(t),
3965
- onClose: closePreview
3966
- }),
3967
4164
  footer
3968
4165
  ]
3969
4166
  });
@@ -3980,12 +4177,12 @@ window.__ModuleLoader__.load({
3980
4177
  document.head.appendChild(tag);
3981
4178
  }
3982
4179
  var EnterBehaviorRow_module_css_default = {
3983
- "row": "ssSNSa_row",
3984
4180
  "chevron": "ssSNSa_chevron",
3985
- "title": "ssSNSa_title",
3986
- "desc": "ssSNSa_desc",
4181
+ "row": "ssSNSa_row",
3987
4182
  "selector": "ssSNSa_selector",
3988
- "rowText": "ssSNSa_rowText"
4183
+ "desc": "ssSNSa_desc",
4184
+ "rowText": "ssSNSa_rowText",
4185
+ "title": "ssSNSa_title"
3989
4186
  };
3990
4187
  //#endregion
3991
4188
  //#region src/client/settings/EnterBehaviorRow.tsx
@@ -4048,7 +4245,7 @@ window.__ModuleLoader__.load({
4048
4245
  }
4049
4246
  //#endregion
4050
4247
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\chat\MessageItem.module.css.mjs
4051
- const css$15 = ".DuLIaW_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.DuLIaW_userStack{flex-direction:column;align-items:flex-end;gap:8px;min-width:0;max-width:min(525px,82%);display:flex}.DuLIaW_bubble{background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);border-radius:22px;padding:10px 16px;font-size:16px;line-height:24px}.DuLIaW_contextRow,.DuLIaW_compactionRow{padding:2px 0}.DuLIaW_compactionButton{width:100%;min-width:0;height:24px;color:inherit;font:inherit;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;padding:0;display:flex}.DuLIaW_compactionButton:not(:disabled){cursor:pointer}.DuLIaW_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.DuLIaW_compactionLeading{width:16px;height:16px;color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.DuLIaW_compactionContextIcon,.DuLIaW_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.DuLIaW_compactionDisclosureIcon,.DuLIaW_compactionButton:not(:disabled):hover .DuLIaW_compactionContextIcon,.DuLIaW_compactionButton:not(:disabled):focus-visible .DuLIaW_compactionContextIcon{opacity:0}.DuLIaW_compactionButton:not(:disabled):hover .DuLIaW_compactionDisclosureIcon,.DuLIaW_compactionButton:not(:disabled):focus-visible .DuLIaW_compactionDisclosureIcon{opacity:1}.DuLIaW_compactionTitle{color:var(--dsw-alias-label-primary-dimmed);flex:none;font-size:14px;line-height:24px}.DuLIaW_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.DuLIaW_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}.DuLIaW_compactionBody{color:var(--dsw-alias-label-tertiary);padding:4px 0 4px 22px;font-size:14px;line-height:24px}.DuLIaW_retryRow{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.DuLIaW_retrySummary{width:fit-content;color:inherit;cursor:pointer;user-select:none;border-radius:3px;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.DuLIaW_retrySummary::-webkit-details-marker{display:none}.DuLIaW_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.DuLIaW_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.DuLIaW_retrySummary:focus-visible{outline:1.5px solid var(--dsw-alias-button-info-fill);outline-offset:2px}.DuLIaW_retryText{color:inherit}.DuLIaW_retryRow[data-active] .DuLIaW_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite DuLIaW_retry-shimmer}.DuLIaW_retryRow[open] .DuLIaW_retrySummary:after{transform:rotate(45deg)}.DuLIaW_retryDetails{overflow-wrap:anywhere;gap:2px;margin-top:3px;padding-left:14px;font-size:12px;line-height:18px;display:grid}.DuLIaW_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.DuLIaW_turnErrorRow{grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;font-size:13px;line-height:20px;display:grid}.DuLIaW_turnErrorDot{margin-top:5px}.DuLIaW_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.DuLIaW_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.DuLIaW_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.DuLIaW_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.DuLIaW_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes DuLIaW_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.DuLIaW_retryRow[data-active] .DuLIaW_retryText{color:inherit;background:0 0;animation:none}}.DuLIaW_refChip{color:var(--dsw-alias-label-primary);white-space:nowrap;vertical-align:baseline;background:#6187d838;border-radius:6px;margin:0 2px;padding:0 8px;font-size:.85em;line-height:1.6;display:inline-block}";
4248
+ const css$15 = ".DuLIaW_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.DuLIaW_userStack{flex-direction:column;align-items:flex-end;gap:8px;min-width:0;max-width:min(525px,82%);display:flex}.DuLIaW_bubble{background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);border-radius:22px;padding:10px 16px;font-size:16px;line-height:24px}.DuLIaW_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.DuLIaW_contextRow,.DuLIaW_compactionRow{padding:2px 0}.DuLIaW_compactionButton{width:100%;min-width:0;height:24px;color:inherit;font:inherit;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;padding:0;display:flex}.DuLIaW_compactionButton:not(:disabled){cursor:pointer}.DuLIaW_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.DuLIaW_compactionLeading{width:16px;height:16px;color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.DuLIaW_compactionContextIcon,.DuLIaW_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.DuLIaW_compactionDisclosureIcon,.DuLIaW_compactionButton:not(:disabled):hover .DuLIaW_compactionContextIcon,.DuLIaW_compactionButton:not(:disabled):focus-visible .DuLIaW_compactionContextIcon{opacity:0}.DuLIaW_compactionButton:not(:disabled):hover .DuLIaW_compactionDisclosureIcon,.DuLIaW_compactionButton:not(:disabled):focus-visible .DuLIaW_compactionDisclosureIcon{opacity:1}.DuLIaW_compactionTitle{color:var(--dsw-alias-label-primary-dimmed);flex:none;font-size:14px;line-height:24px}.DuLIaW_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.DuLIaW_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}.DuLIaW_compactionBody{color:var(--dsw-alias-label-tertiary);padding:4px 0 4px 22px;font-size:14px;line-height:24px}.DuLIaW_retryRow{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.DuLIaW_retrySummary{width:fit-content;color:inherit;cursor:pointer;user-select:none;border-radius:3px;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.DuLIaW_retrySummary::-webkit-details-marker{display:none}.DuLIaW_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.DuLIaW_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.DuLIaW_retrySummary:focus-visible{outline:1.5px solid var(--dsw-alias-button-info-fill);outline-offset:2px}.DuLIaW_retryText{color:inherit}.DuLIaW_retryRow[data-active] .DuLIaW_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite DuLIaW_retry-shimmer}.DuLIaW_retryRow[open] .DuLIaW_retrySummary:after{transform:rotate(45deg)}.DuLIaW_retryDetails{overflow-wrap:anywhere;gap:2px;margin-top:3px;padding-left:14px;font-size:12px;line-height:18px;display:grid}.DuLIaW_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.DuLIaW_turnErrorRow{grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;font-size:13px;line-height:20px;display:grid}.DuLIaW_turnErrorDot{margin-top:5px}.DuLIaW_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.DuLIaW_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.DuLIaW_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.DuLIaW_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.DuLIaW_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes DuLIaW_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.DuLIaW_retryRow[data-active] .DuLIaW_retryText{color:inherit;background:0 0;animation:none}}.DuLIaW_refChip{color:var(--dsw-alias-state-business-primary);white-space:nowrap;vertical-align:baseline;align-items:center;gap:4px;margin:0 2px;font-weight:500;display:inline-flex}.DuLIaW_refIcon{flex:none}";
4052
4249
  const tagId$15 = "@xrkseek/client-ui-conversation/MessageItem.module.css";
4053
4250
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$15) + "]") === null) {
4054
4251
  const tag = document.createElement("style");
@@ -4058,33 +4255,35 @@ window.__ModuleLoader__.load({
4058
4255
  document.head.appendChild(tag);
4059
4256
  }
4060
4257
  var MessageItem_module_css_default = {
4061
- "compactionSummary": "DuLIaW_compactionSummary",
4062
- "turnErrorCopy": "DuLIaW_turnErrorCopy",
4258
+ "compactionRow": "DuLIaW_compactionRow",
4259
+ "turnErrorDot": "DuLIaW_turnErrorDot",
4260
+ "compactionTitle": "DuLIaW_compactionTitle",
4261
+ "refIcon": "DuLIaW_refIcon",
4262
+ "bubble": "DuLIaW_bubble",
4063
4263
  "compactionDisclosureIcon": "DuLIaW_compactionDisclosureIcon",
4064
- "compactionBody": "DuLIaW_compactionBody",
4065
- "retrySummary": "DuLIaW_retrySummary",
4066
- "userRow": "DuLIaW_userRow",
4067
4264
  "contextRow": "DuLIaW_contextRow",
4265
+ "compactionButton": "DuLIaW_compactionButton",
4068
4266
  "userStack": "DuLIaW_userStack",
4069
- "retryDetails": "DuLIaW_retryDetails",
4070
- "retryDetailLabel": "DuLIaW_retryDetailLabel",
4071
- "turnErrorDot": "DuLIaW_turnErrorDot",
4072
4267
  "compactionLeading": "DuLIaW_compactionLeading",
4073
- "turnErrorTitle": "DuLIaW_turnErrorTitle",
4074
- "compactionContextIcon": "DuLIaW_compactionContextIcon",
4075
- "bubble": "DuLIaW_bubble",
4076
- "maxTokensTitle": "DuLIaW_maxTokensTitle",
4077
- "retryRow": "DuLIaW_retryRow",
4078
- "compactionButton": "DuLIaW_compactionButton",
4079
- "turnErrorCode": "DuLIaW_turnErrorCode",
4268
+ "retryDetailLabel": "DuLIaW_retryDetailLabel",
4080
4269
  "retry-shimmer": "DuLIaW_retry-shimmer",
4081
4270
  "refChip": "DuLIaW_refChip",
4271
+ "userRow": "DuLIaW_userRow",
4272
+ "turnErrorTitle": "DuLIaW_turnErrorTitle",
4273
+ "compactionBody": "DuLIaW_compactionBody",
4274
+ "turnErrorCopy": "DuLIaW_turnErrorCopy",
4275
+ "compactionSummary": "DuLIaW_compactionSummary",
4082
4276
  "compactionSep": "DuLIaW_compactionSep",
4277
+ "retrySummary": "DuLIaW_retrySummary",
4278
+ "turnErrorCode": "DuLIaW_turnErrorCode",
4083
4279
  "turnErrorRow": "DuLIaW_turnErrorRow",
4084
- "compactionRow": "DuLIaW_compactionRow",
4085
- "compactionTitle": "DuLIaW_compactionTitle",
4280
+ "retryRow": "DuLIaW_retryRow",
4086
4281
  "retryText": "DuLIaW_retryText",
4087
- "turnErrorMessage": "DuLIaW_turnErrorMessage"
4282
+ "maxTokensTitle": "DuLIaW_maxTokensTitle",
4283
+ "compactionContextIcon": "DuLIaW_compactionContextIcon",
4284
+ "referenceSummary": "DuLIaW_referenceSummary",
4285
+ "turnErrorMessage": "DuLIaW_turnErrorMessage",
4286
+ "retryDetails": "DuLIaW_retryDetails"
4088
4287
  };
4089
4288
  //#endregion
4090
4289
  //#region src/client/chat/CompactionItem.tsx
@@ -4156,29 +4355,29 @@ window.__ModuleLoader__.load({
4156
4355
  document.head.appendChild(tag);
4157
4356
  }
4158
4357
  var ContextBody_module_css_default = {
4159
- "recallLabel": "mBNGpa_recallLabel",
4160
- "entries": "mBNGpa_entries",
4161
- "field": "mBNGpa_field",
4358
+ "fileAction": "mBNGpa_fileAction",
4162
4359
  "catalogNotice": "mBNGpa_catalogNotice",
4360
+ "file": "mBNGpa_file",
4163
4361
  "sections": "mBNGpa_sections",
4164
- "fieldValue": "mBNGpa_fieldValue",
4165
- "fileAction": "mBNGpa_fileAction",
4362
+ "recallLabel": "mBNGpa_recallLabel",
4363
+ "text": "mBNGpa_text",
4364
+ "entries": "mBNGpa_entries",
4365
+ "section": "mBNGpa_section",
4166
4366
  "sectionText": "mBNGpa_sectionText",
4167
- "files": "mBNGpa_files",
4168
- "filePath": "mBNGpa_filePath",
4169
- "fields": "mBNGpa_fields",
4170
- "recall": "mBNGpa_recall",
4171
- "recallCounts": "mBNGpa_recallCounts",
4172
4367
  "sectionName": "mBNGpa_sectionName",
4368
+ "recall": "mBNGpa_recall",
4369
+ "files": "mBNGpa_files",
4370
+ "fieldKey": "mBNGpa_fieldKey",
4371
+ "field": "mBNGpa_field",
4173
4372
  "entryDescription": "mBNGpa_entryDescription",
4174
- "entry": "mBNGpa_entry",
4175
- "entryName": "mBNGpa_entryName",
4176
4373
  "relaySender": "mBNGpa_relaySender",
4177
- "fieldKey": "mBNGpa_fieldKey",
4178
- "text": "mBNGpa_text",
4179
- "section": "mBNGpa_section",
4180
- "file": "mBNGpa_file",
4181
- "recalls": "mBNGpa_recalls"
4374
+ "recallCounts": "mBNGpa_recallCounts",
4375
+ "recalls": "mBNGpa_recalls",
4376
+ "fields": "mBNGpa_fields",
4377
+ "fieldValue": "mBNGpa_fieldValue",
4378
+ "filePath": "mBNGpa_filePath",
4379
+ "entryName": "mBNGpa_entryName",
4380
+ "entry": "mBNGpa_entry"
4182
4381
  };
4183
4382
  //#endregion
4184
4383
  //#region src/client/chat/ContextBody.tsx
@@ -4713,12 +4912,12 @@ window.__ModuleLoader__.load({
4713
4912
  document.head.appendChild(tag);
4714
4913
  }
4715
4914
  var ContextInjectionRow_module_css_default = {
4716
- "sep": "BCt95a_sep",
4717
- "summary": "BCt95a_summary",
4915
+ "chevron": "BCt95a_chevron",
4718
4916
  "root": "BCt95a_root",
4719
4917
  "source": "BCt95a_source",
4720
4918
  "body": "BCt95a_body",
4721
- "chevron": "BCt95a_chevron"
4919
+ "sep": "BCt95a_sep",
4920
+ "summary": "BCt95a_summary"
4722
4921
  };
4723
4922
  //#endregion
4724
4923
  //#region src/client/chat/ContextInjectionRow.tsx
@@ -4742,7 +4941,10 @@ window.__ModuleLoader__.load({
4742
4941
  });
4743
4942
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.DisclosureRow, {
4744
4943
  className: ContextInjectionRow_module_css_default.root,
4745
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconBrowseOutline16, { size: 14 }),
4944
+ icon: provenance.role === "recall" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4945
+ "data-context-recall-icon": true,
4946
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReferenceIcon, { kind: "session" })
4947
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconBrowseOutline16, { size: 14 }),
4746
4948
  chevronClassName: ContextInjectionRow_module_css_default.chevron,
4747
4949
  title: t(provenance.role === "recall" ? "message.contextRecall" : "message.contextInjection"),
4748
4950
  collapsedContent: provenance.label === null ? void 0 : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
@@ -4813,12 +5015,12 @@ window.__ModuleLoader__.load({
4813
5015
  document.head.appendChild(tag);
4814
5016
  }
4815
5017
  var MessageIconActions_module_css_default = {
4816
- "actions": "vWo8Ba_actions",
4817
5018
  "visuallyHidden": "vWo8Ba_visuallyHidden",
5019
+ "runTimeDot": "vWo8Ba_runTimeDot",
4818
5020
  "timeEnd": "vWo8Ba_timeEnd",
4819
- "action": "vWo8Ba_action",
5021
+ "actions": "vWo8Ba_actions",
4820
5022
  "timeStart": "vWo8Ba_timeStart",
4821
- "runTimeDot": "vWo8Ba_runTimeDot"
5023
+ "action": "vWo8Ba_action"
4822
5024
  };
4823
5025
  //#endregion
4824
5026
  //#region src/client/chat/MessageIconActions.tsx
@@ -5066,28 +5268,62 @@ window.__ModuleLoader__.load({
5066
5268
  * scan as the composer, minus the lexicon: sent tokens were validated at
5067
5269
  * compose time, so shape alone decorates).
5068
5270
  */
5069
- function projectUserText(text) {
5070
- const re = /(^|\s)([/@][\w-]+)(?=\s|$)/g;
5071
- const parts = [];
5072
- let cursor = 0;
5271
+ function projectUserText(text, sessionLabels) {
5272
+ const ranges = [];
5273
+ for (const rawLabel of [...new Set(sessionLabels)].sort((a, b) => b.length - a.length)) {
5274
+ const label = `@${rawLabel}`;
5275
+ let start = text.indexOf(label);
5276
+ while (start >= 0) {
5277
+ ranges.push({
5278
+ start,
5279
+ end: start + label.length,
5280
+ label,
5281
+ kind: "session"
5282
+ });
5283
+ start = text.indexOf(label, start + label.length);
5284
+ }
5285
+ }
5286
+ const re = /(^|\s)(\/[\w-]+|@"[^"\n]+"|@[^\s]+)/gu;
5073
5287
  let m;
5074
5288
  while ((m = re.exec(text)) !== null) {
5075
5289
  const tokenStart = m.index + (m[1]?.length ?? 0);
5076
- const label = m[2] ?? "";
5290
+ const rawLabel = m[2] ?? "";
5291
+ const label = rawLabel.startsWith("@\"") ? rawLabel : rawLabel.replace(/[.,;:!?,。;:!?]+$/gu, "");
5292
+ if (label.length <= 1) continue;
5293
+ ranges.push({
5294
+ start: tokenStart,
5295
+ end: tokenStart + label.length,
5296
+ label,
5297
+ kind: "plain"
5298
+ });
5299
+ }
5300
+ ranges.sort((a, b) => a.start - b.start || (a.kind === b.kind ? b.end - a.end : a.kind === "session" ? -1 : 1));
5301
+ const parts = [];
5302
+ let cursor = 0;
5303
+ for (const range of ranges) {
5304
+ if (range.start < cursor) continue;
5305
+ const { start: tokenStart, end, label, kind } = range;
5077
5306
  if (tokenStart > cursor) parts.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.MessageText, { text: text.slice(cursor, tokenStart) }, cursor));
5078
- parts.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5307
+ const referenceKind = kind === "session" ? "session" : label.startsWith("@") ? label.endsWith("/") ? "folder" : "file" : void 0;
5308
+ const displayLabel = referenceKind === void 0 ? label : referenceKind === "session" ? label.slice(1) : label.slice(1).replace(/^"|"$/gu, "").split(/[\\/]/u).filter(Boolean).at(-1) ?? label.slice(1);
5309
+ parts.push(/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5079
5310
  className: MessageItem_module_css_default.refChip,
5080
- "data-ref-chip": label.startsWith("@") ? "subagent" : "skill",
5081
- children: label
5311
+ "data-ref-chip": referenceKind ?? "skill",
5312
+ title: label,
5313
+ children: [referenceKind !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReferenceIcon, {
5314
+ kind: referenceKind,
5315
+ size: 16,
5316
+ className: MessageItem_module_css_default.refIcon
5317
+ }), displayLabel]
5082
5318
  }, tokenStart));
5083
- cursor = tokenStart + label.length;
5319
+ cursor = end;
5084
5320
  }
5085
5321
  if (parts.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.MessageText, { text });
5086
5322
  if (cursor < text.length) parts.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.MessageText, { text: text.slice(cursor) }, cursor));
5087
5323
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: parts });
5088
5324
  }
5089
5325
  /** Right-aligned bubble shared by user and steering rows. */
5090
- function UserStyleBubble({ content, imageLoader, actions, pending = false, t }) {
5326
+ function UserStyleBubble({ content, renderMessageImages, actions, pending = false, referenceLabels = [], t }) {
5091
5327
  const { text, images, rest } = contentParts(content);
5092
5328
  const truncated = (total) => t("json.truncated", { total });
5093
5329
  const showBubble = text !== "" || rest.length > 0;
@@ -5097,19 +5333,24 @@ window.__ModuleLoader__.load({
5097
5333
  "data-time-hover-root": true,
5098
5334
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5099
5335
  className: MessageItem_module_css_default.userStack,
5100
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_attachment.ImageGallery, {
5101
- images,
5102
- load: imageLoader,
5103
- align: "end",
5104
- labels: messageImageLabels(t)
5105
- }), showBubble && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5106
- className: MessageItem_module_css_default.bubble,
5107
- children: [projectUserText(text), rest.map((block, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.JsonBlock, {
5108
- label: t("message.extraBlock"),
5109
- payload: block,
5110
- truncatedLabel: truncated
5111
- }, i))]
5112
- })]
5336
+ children: [
5337
+ renderMessageImages({
5338
+ images,
5339
+ align: "end"
5340
+ }),
5341
+ showBubble && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5342
+ className: MessageItem_module_css_default.bubble,
5343
+ children: [projectUserText(text, referenceLabels), rest.map((block, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.JsonBlock, {
5344
+ label: t("message.extraBlock"),
5345
+ payload: block,
5346
+ truncatedLabel: truncated
5347
+ }, i))]
5348
+ }),
5349
+ referenceLabels.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5350
+ className: MessageItem_module_css_default.referenceSummary,
5351
+ children: t("message.referenceSummary", { labels: referenceLabels.join(t("message.referenceSeparator")) })
5352
+ })
5353
+ ]
5113
5354
  }), actions?.(text)]
5114
5355
  });
5115
5356
  }
@@ -5119,10 +5360,10 @@ window.__ModuleLoader__.load({
5119
5360
  * @param props - Pending message content and conversation translator.
5120
5361
  * @returns the pending steering bubble.
5121
5362
  */
5122
- function PendingSteeringBubble({ content, loadImage, t }) {
5363
+ function PendingSteeringBubble({ content, renderMessageImages, t }) {
5123
5364
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UserStyleBubble, {
5124
5365
  content,
5125
- imageLoader: loadImage ?? (() => Promise.reject(new Error(t("image.serviceUnavailable")))),
5366
+ renderMessageImages,
5126
5367
  pending: true,
5127
5368
  t,
5128
5369
  actions: (text) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MessageIconActions, {
@@ -5134,11 +5375,12 @@ window.__ModuleLoader__.load({
5134
5375
  });
5135
5376
  }
5136
5377
  /** User and admitted-steering keyed Chat renderer. */
5137
- const UserMessageNodeView = (0, react.memo)(function UserMessageNodeView({ node, loadImage, t }) {
5378
+ const UserMessageNodeView = (0, react.memo)(function UserMessageNodeView({ node, renderMessageImages, t }) {
5138
5379
  const data = node.data;
5139
5380
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UserStyleBubble, {
5140
5381
  content: data.content,
5141
- imageLoader: loadImage,
5382
+ renderMessageImages,
5383
+ ...data.referenceLabels === void 0 ? {} : { referenceLabels: data.referenceLabels },
5142
5384
  t,
5143
5385
  actions: (text) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MessageIconActions, {
5144
5386
  text,
@@ -5201,7 +5443,7 @@ window.__ModuleLoader__.load({
5201
5443
  });
5202
5444
  //#endregion
5203
5445
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\chat\ChatView.module.css.mjs
5204
- const css$11 = ".rzfPEq_root{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.rzfPEq_scroll{min-height:0;padding:16px calc(var(--dsh-composer-side-clearance) + 16px);flex:auto;overflow-y:auto}[data-conversation-scroll] .rzfPEq_root{flex:none;height:auto;min-height:auto}[data-conversation-scroll] .rzfPEq_scroll{flex:none;min-height:auto;overflow:visible}.rzfPEq_column{max-width:var(--dsh-chat-content-width);flex-direction:column;gap:16px;width:100%;margin:0 auto;display:flex}.rzfPEq_flowItem{min-width:0}.rzfPEq_flowItem:empty{display:none}.rzfPEq_callRow{border-radius:6px}.rzfPEq_turnStatus{height:26px;font:var(--dsw-font-s-strong-14);white-space:nowrap;background:linear-gradient(90deg, var(--dsw-static-deepseek-500) 0%, var(--dsw-static-deepseek-500) 40%, var(--dsw-static-deepseek-200) 50%, var(--dsw-static-deepseek-500) 60%, var(--dsw-static-deepseek-500) 100%);color:#0000;-webkit-text-fill-color:transparent;background-position:100% 0;background-size:250% 100%;-webkit-background-clip:text;background-clip:text;flex:none;align-self:flex-start;align-items:center;animation:1.8s linear infinite rzfPEq_dsh-turn-status-shimmer;display:inline-flex}.rzfPEq_turnStatusClock{font:var(--dsw-font-xs-13);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);margin-left:8px;font-weight:400}@keyframes rzfPEq_dsh-turn-status-shimmer{to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.rzfPEq_turnStatus{background-position:0 0;background-size:100% 100%;animation:none}}.rzfPEq_hint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.rzfPEq_openError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.rzfPEq_older{justify-content:center;display:flex}.rzfPEq_older button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover-solid);cursor:pointer;border:none;border-radius:14px;padding:4px 12px;font-size:12px}.rzfPEq_older button:disabled{cursor:default;opacity:.6}.rzfPEq_toBottomSlot{z-index:8;height:0;padding-right:max(0px, calc((100% - var(--dsh-chat-content-width)) / 2));pointer-events:none;justify-content:flex-end;display:flex;position:sticky;bottom:16px}[data-conversation-scroll] .rzfPEq_toBottomSlot{bottom:calc(var(--dsh-composer-height,152px) + 16px)}.rzfPEq_toBottom{border:1px solid var(--dsw-alias-border-l2);width:34px;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-floating-fill);box-shadow:var(--dsw-shadow-lv2);cursor:pointer;pointer-events:auto;border-radius:100px;justify-content:center;align-items:center;margin-top:-34px;padding:0;display:flex}.rzfPEq_toBottom:hover{background:var(--dsw-alias-button-floating-hover)}";
5446
+ const css$11 = ".rzfPEq_root{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.rzfPEq_scroll{min-height:0;padding:16px calc(var(--dsh-composer-side-clearance) + 16px);flex:auto;overflow-y:auto;container-type:inline-size}[data-conversation-scroll] .rzfPEq_root{flex:none;height:auto;min-height:auto}[data-conversation-scroll] .rzfPEq_scroll{flex:none;min-height:auto;overflow:visible}.rzfPEq_column{max-width:var(--dsh-chat-content-width);flex-direction:column;gap:16px;width:100%;margin:0 auto;display:flex}.rzfPEq_flowItem{min-width:0}.rzfPEq_flowItem:empty{display:none}.rzfPEq_callRow{border-radius:6px}.rzfPEq_turnStatus{height:26px;font:var(--dsw-font-s-strong-14);white-space:nowrap;background:linear-gradient(90deg, var(--dsw-static-deepseek-500) 0%, var(--dsw-static-deepseek-500) 40%, var(--dsw-static-deepseek-200) 50%, var(--dsw-static-deepseek-500) 60%, var(--dsw-static-deepseek-500) 100%);color:#0000;-webkit-text-fill-color:transparent;background-position:100% 0;background-size:250% 100%;-webkit-background-clip:text;background-clip:text;flex:none;align-self:flex-start;align-items:center;animation:1.8s linear infinite rzfPEq_dsh-turn-status-shimmer;display:inline-flex}.rzfPEq_turnStatusClock{font:var(--dsw-font-xs-13);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);margin-left:8px;font-weight:400}@keyframes rzfPEq_dsh-turn-status-shimmer{to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.rzfPEq_turnStatus{background-position:0 0;background-size:100% 100%;animation:none}}.rzfPEq_hint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.rzfPEq_openError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.rzfPEq_older{justify-content:center;display:flex}.rzfPEq_older button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover-solid);cursor:pointer;border:none;border-radius:14px;padding:4px 12px;font-size:12px}.rzfPEq_older button:disabled{cursor:default;opacity:.6}.rzfPEq_toBottomSlot{z-index:8;height:0;padding-right:max(0px, calc((100% - var(--dsh-chat-content-width)) / 2));pointer-events:none;justify-content:flex-end;display:flex;position:sticky;bottom:16px}[data-conversation-scroll] .rzfPEq_toBottomSlot{bottom:calc(var(--dsh-composer-height,152px) + 16px)}.rzfPEq_toBottom{border:1px solid var(--dsw-alias-border-l2);width:34px;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-floating-fill);box-shadow:var(--dsw-shadow-lv2);cursor:pointer;pointer-events:auto;border-radius:100px;justify-content:center;align-items:center;margin-top:-34px;padding:0;display:flex}.rzfPEq_toBottom:hover{background:var(--dsw-alias-button-floating-hover)}.rzfPEq_modalAction{min-width:72px}";
5205
5447
  const tagId$11 = "@xrkseek/client-ui-conversation/ChatView.module.css";
5206
5448
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$11) + "]") === null) {
5207
5449
  const tag = document.createElement("style");
@@ -5212,23 +5454,24 @@ window.__ModuleLoader__.load({
5212
5454
  }
5213
5455
  var ChatView_module_css_default = {
5214
5456
  "toBottom": "rzfPEq_toBottom",
5457
+ "modalAction": "rzfPEq_modalAction",
5458
+ "root": "rzfPEq_root",
5459
+ "callRow": "rzfPEq_callRow",
5460
+ "turnStatusClock": "rzfPEq_turnStatusClock",
5215
5461
  "dsh-turn-status-shimmer": "rzfPEq_dsh-turn-status-shimmer",
5462
+ "flowItem": "rzfPEq_flowItem",
5463
+ "openError": "rzfPEq_openError",
5216
5464
  "older": "rzfPEq_older",
5217
- "callRow": "rzfPEq_callRow",
5465
+ "column": "rzfPEq_column",
5466
+ "hint": "rzfPEq_hint",
5218
5467
  "scroll": "rzfPEq_scroll",
5219
5468
  "turnStatus": "rzfPEq_turnStatus",
5220
- "root": "rzfPEq_root",
5221
- "hint": "rzfPEq_hint",
5222
- "column": "rzfPEq_column",
5223
- "turnStatusClock": "rzfPEq_turnStatusClock",
5224
- "openError": "rzfPEq_openError",
5225
- "toBottomSlot": "rzfPEq_toBottomSlot",
5226
- "flowItem": "rzfPEq_flowItem"
5469
+ "toBottomSlot": "rzfPEq_toBottomSlot"
5227
5470
  };
5228
5471
  //#endregion
5229
5472
  //#region src/client/chat/ChatNodeSeat.tsx
5230
5473
  /** Subscribe and dispatch one stable Context key without observing sibling Nodes. */
5231
- const ChatNodeSeat = (0, react.memo)(function ChatNodeSeat({ nodeKey, selectedCallId, cwd, openFile, inspectCall, forkAt, loadImage, fileMentions, useSession, renderSlot, t }) {
5474
+ const ChatNodeSeat = (0, react.memo)(function ChatNodeSeat({ nodeKey, selectedCallId, cwd, openFile, inspectCall, forkAt, renderMessageImages, fileMentions, useSession, renderSlot, t }) {
5232
5475
  const node = useSession((snapshot) => snapshot.chat.nodes.get(nodeKey));
5233
5476
  const routedNode = node;
5234
5477
  const owner = (0, react.useMemo)(() => node === void 0 ? null : {
@@ -5237,7 +5480,7 @@ window.__ModuleLoader__.load({
5237
5480
  openFile,
5238
5481
  inspectCall,
5239
5482
  forkAt,
5240
- loadImage,
5483
+ renderMessageImages,
5241
5484
  fileMentions
5242
5485
  }, [
5243
5486
  node,
@@ -5246,7 +5489,7 @@ window.__ModuleLoader__.load({
5246
5489
  openFile,
5247
5490
  inspectCall,
5248
5491
  forkAt,
5249
- loadImage,
5492
+ renderMessageImages,
5250
5493
  fileMentions
5251
5494
  ]);
5252
5495
  if (routedNode === void 0 || owner === null) return null;
@@ -5324,6 +5567,15 @@ window.__ModuleLoader__.load({
5324
5567
  scrollTop: scrollport.scrollTop
5325
5568
  };
5326
5569
  }
5570
+ /** Host/OS refusal text for the file-open dialog; empty throws keep a locale fallback. */
5571
+ function openFailureMessage(error, fallback) {
5572
+ const message = error instanceof Error ? error.message : String(error);
5573
+ return message === "" ? fallback : message;
5574
+ }
5575
+ /** ProducedFiles opens the session workspace as `.`. */
5576
+ function isFolderOpenPath(path) {
5577
+ return path === ".";
5578
+ }
5327
5579
  function runningTurnStartTime(timeline) {
5328
5580
  let latest = null;
5329
5581
  for (const turn of timeline.turns.values()) if (turn.status === "open" && turn.start !== void 0) latest = turn.start.time;
@@ -5372,7 +5624,35 @@ window.__ModuleLoader__.load({
5372
5624
  const hasMore = useSession((s) => s.hasMore);
5373
5625
  const loadingOlder = useSession((s) => s.loadingOlder);
5374
5626
  const selectedCallId = useStore((s) => s.selection?.callId);
5627
+ const [fileOpenError, setFileOpenError] = (0, react.useState)(null);
5628
+ const [fileOpenBusy, setFileOpenBusy] = (0, react.useState)(false);
5629
+ const fileOpenRequest = (0, react.useRef)(0);
5630
+ const requestOpenFile = (0, react.useCallback)((path) => {
5631
+ const id = ++fileOpenRequest.current;
5632
+ setFileOpenBusy(true);
5633
+ openFile(path).then(() => {
5634
+ if (id !== fileOpenRequest.current) return;
5635
+ setFileOpenError(null);
5636
+ setFileOpenBusy(false);
5637
+ }, (error) => {
5638
+ if (id !== fileOpenRequest.current) return;
5639
+ setFileOpenError({
5640
+ path,
5641
+ message: openFailureMessage(error, t(isFolderOpenPath(path) ? "fileOpen.folderUnknown" : "fileOpen.unknown"))
5642
+ });
5643
+ setFileOpenBusy(false);
5644
+ });
5645
+ }, [openFile, t]);
5646
+ const closeFileOpenError = (0, react.useCallback)(() => {
5647
+ fileOpenRequest.current += 1;
5648
+ setFileOpenError(null);
5649
+ setFileOpenBusy(false);
5650
+ }, []);
5375
5651
  const pendingSteering = (0, react.useMemo)(() => inbox.filter((item) => item.placement === "steering"), [inbox]);
5652
+ const renderMessageImages = (0, react.useCallback)((owner) => renderSlot("conversation.message.images", {
5653
+ ...owner,
5654
+ loadImage
5655
+ }), [loadImage, renderSlot]);
5376
5656
  const runningTurnStart = (0, react.useMemo)(() => runningTurnStartTime(timeline), [timeline]);
5377
5657
  const listRef = (0, react.useRef)(null);
5378
5658
  const columnRef = (0, react.useRef)(null);
@@ -5532,9 +5812,9 @@ window.__ModuleLoader__.load({
5532
5812
  }
5533
5813
  loadOlder();
5534
5814
  };
5535
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
5815
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5536
5816
  className: ChatView_module_css_default.root,
5537
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5817
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5538
5818
  ref: listRef,
5539
5819
  className: ChatView_module_css_default.scroll,
5540
5820
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -5567,10 +5847,10 @@ window.__ModuleLoader__.load({
5567
5847
  useSession,
5568
5848
  selectedCallId,
5569
5849
  cwd,
5570
- openFile,
5850
+ openFile: requestOpenFile,
5571
5851
  inspectCall,
5572
5852
  forkAt,
5573
- loadImage,
5853
+ renderMessageImages,
5574
5854
  fileMentions,
5575
5855
  renderSlot,
5576
5856
  t
@@ -5581,7 +5861,7 @@ window.__ModuleLoader__.load({
5581
5861
  }),
5582
5862
  pendingSteering.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PendingSteeringBubble, {
5583
5863
  content: item.content,
5584
- loadImage,
5864
+ renderMessageImages,
5585
5865
  t
5586
5866
  }, item.id))
5587
5867
  ]
@@ -5599,7 +5879,38 @@ window.__ModuleLoader__.load({
5599
5879
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.IconChevronDownOutline14, {})
5600
5880
  })
5601
5881
  })]
5602
- })
5882
+ }), fileOpenError !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FileOpenErrorDialog, {
5883
+ path: fileOpenError.path,
5884
+ message: fileOpenError.message,
5885
+ busy: fileOpenBusy,
5886
+ onClose: closeFileOpenError,
5887
+ onRetry: () => {
5888
+ requestOpenFile(fileOpenError.path);
5889
+ },
5890
+ t
5891
+ })]
5892
+ });
5893
+ }
5894
+ /** In-page Host open-path refusal: the wire reason plus a retry of the same path. */
5895
+ function FileOpenErrorDialog({ path, message, busy, onClose, onRetry, t }) {
5896
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.Modal, {
5897
+ open: true,
5898
+ onClose,
5899
+ closeLabel: t("close"),
5900
+ title: t(isFolderOpenPath(path) ? "fileOpen.folderTitle" : "fileOpen.title"),
5901
+ description: message,
5902
+ footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.Button, {
5903
+ variant: "outline",
5904
+ className: ChatView_module_css_default.modalAction,
5905
+ onClick: onClose,
5906
+ children: t("cancel")
5907
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.Button, {
5908
+ variant: "primary",
5909
+ className: ChatView_module_css_default.modalAction,
5910
+ disabled: busy,
5911
+ onClick: onRetry,
5912
+ children: t("retry")
5913
+ })] })
5603
5914
  });
5604
5915
  }
5605
5916
  //#endregion
@@ -5700,15 +6011,15 @@ window.__ModuleLoader__.load({
5700
6011
  document.head.appendChild(tag);
5701
6012
  }
5702
6013
  var ApprovalPanel_module_css_default = {
5703
- "actionRow": "HtARWq_actionRow",
5704
- "headline": "HtARWq_headline",
5705
6014
  "card": "HtARWq_card",
6015
+ "command": "HtARWq_command",
5706
6016
  "body": "HtARWq_body",
5707
- "strip": "HtARWq_strip",
5708
6017
  "root": "HtARWq_root",
6018
+ "actionRow": "HtARWq_actionRow",
6019
+ "strip": "HtARWq_strip",
5709
6020
  "dot": "HtARWq_dot",
5710
- "reject": "HtARWq_reject",
5711
- "command": "HtARWq_command"
6021
+ "headline": "HtARWq_headline",
6022
+ "reject": "HtARWq_reject"
5712
6023
  };
5713
6024
  //#endregion
5714
6025
  //#region src/client/skeleton/ApprovalPanel.tsx
@@ -5843,6 +6154,7 @@ window.__ModuleLoader__.load({
5843
6154
  "image.fileTooLarge": "单张图片不能超过 {size}",
5844
6155
  "image.totalTooLarge": "图片总大小超过 {size},请移除部分图片",
5845
6156
  "image.tooManyPixels": "图片分辨率过大,请压缩后重试",
6157
+ "image.dimensionTooLarge": "图片宽高不能超过 {size}px,请缩小后重试",
5846
6158
  "image.modelUnsupported": "当前模型不支持图片,请切换支持图片的模型",
5847
6159
  "image.subagentUnsupported": "子智能体会话暂不支持图片",
5848
6160
  "image.sendFailed": "图片发送失败({reason}),请重新添加图片后再试",
@@ -5888,9 +6200,15 @@ window.__ModuleLoader__.load({
5888
6200
  "chat.loadError": "历史加载失败:{message}({code})",
5889
6201
  "chat.loadOlder": "加载更早",
5890
6202
  "chat.toBottom": "回到底部",
6203
+ "fileOpen.title": "无法打开文件",
6204
+ "fileOpen.unknown": "无法打开此文件",
6205
+ "fileOpen.folderTitle": "无法打开文件夹",
6206
+ "fileOpen.folderUnknown": "无法打开此文件夹",
5891
6207
  "message.extraBlock": "附加内容块",
5892
6208
  "message.contextInjection": "上下文注入",
5893
6209
  "message.contextRecall": "跨会话召回",
6210
+ "message.referenceSummary": "引用会话 · {labels}",
6211
+ "message.referenceSeparator": "、",
5894
6212
  "message.context.instructions.loaded": "已载入",
5895
6213
  "message.context.instructions.added": "已新增",
5896
6214
  "message.context.instructions.updated": "已更新",
@@ -5930,6 +6248,7 @@ window.__ModuleLoader__.load({
5930
6248
  "command.failed": "命令失败",
5931
6249
  "command.done": "已完成",
5932
6250
  "command.title": "命令",
6251
+ "command.imagesUnsupported": "/{command} 不接受图片附件,请先移除图片",
5933
6252
  "approval.waiting": "等待审批",
5934
6253
  "approval.detail.aria": "审批详情",
5935
6254
  "approval.escalation": "工具 {toolName} 请求越权执行",
@@ -6008,6 +6327,7 @@ window.__ModuleLoader__.load({
6008
6327
  "image.fileTooLarge": "Each image must be smaller than {size}",
6009
6328
  "image.totalTooLarge": "Images exceed {size} in total; remove some and try again",
6010
6329
  "image.tooManyPixels": "Image resolution is too high; compress it and try again",
6330
+ "image.dimensionTooLarge": "Image sides must be at most {size}px; downscale it and try again",
6011
6331
  "image.modelUnsupported": "The current model does not support images; switch to a model that does",
6012
6332
  "image.subagentUnsupported": "Subagent sessions do not support images yet",
6013
6333
  "image.sendFailed": "Sending images failed ({reason}); re-add them and try again",
@@ -6053,9 +6373,15 @@ window.__ModuleLoader__.load({
6053
6373
  "chat.loadError": "Failed to load history: {message} ({code})",
6054
6374
  "chat.loadOlder": "Load earlier",
6055
6375
  "chat.toBottom": "Back to bottom",
6376
+ "fileOpen.title": "Couldn’t open file",
6377
+ "fileOpen.unknown": "Couldn’t open this file",
6378
+ "fileOpen.folderTitle": "Couldn’t open folder",
6379
+ "fileOpen.folderUnknown": "Couldn’t open this folder",
6056
6380
  "message.extraBlock": "Extra content block",
6057
6381
  "message.contextInjection": "Context injection",
6058
6382
  "message.contextRecall": "Session recall",
6383
+ "message.referenceSummary": "Referenced session · {labels}",
6384
+ "message.referenceSeparator": ", ",
6059
6385
  "message.context.instructions.loaded": "loaded",
6060
6386
  "message.context.instructions.added": "added",
6061
6387
  "message.context.instructions.updated": "updated",
@@ -6095,6 +6421,7 @@ window.__ModuleLoader__.load({
6095
6421
  "command.failed": "Command failed",
6096
6422
  "command.done": "Completed",
6097
6423
  "command.title": "Command",
6424
+ "command.imagesUnsupported": "/{command} does not accept image attachments; remove them first",
6098
6425
  "approval.waiting": "Waiting for approval",
6099
6426
  "approval.detail.aria": "Approval details",
6100
6427
  "approval.escalation": "Tool {toolName} requests privileged execution",
@@ -6147,21 +6474,21 @@ window.__ModuleLoader__.load({
6147
6474
  document.head.appendChild(tag);
6148
6475
  }
6149
6476
  var TodoPanel_module_css_default = {
6150
- "item": "_S9Ibq_item",
6151
- "glyphProgress": "_S9Ibq_glyphProgress",
6152
- "lead": "_S9Ibq_lead",
6153
- "chevron": "_S9Ibq_chevron",
6154
6477
  "glyphCompleted": "_S9Ibq_glyphCompleted",
6155
- "todo-progress-spin": "_S9Ibq_todo-progress-spin",
6156
- "glyphPending": "_S9Ibq_glyphPending",
6478
+ "lead": "_S9Ibq_lead",
6479
+ "glyph": "_S9Ibq_glyph",
6157
6480
  "progress": "_S9Ibq_progress",
6158
- "content": "_S9Ibq_content",
6159
- "list": "_S9Ibq_list",
6160
6481
  "header": "_S9Ibq_header",
6482
+ "chevron": "_S9Ibq_chevron",
6483
+ "title": "_S9Ibq_title",
6484
+ "todo-progress-spin": "_S9Ibq_todo-progress-spin",
6161
6485
  "root": "_S9Ibq_root",
6162
6486
  "body": "_S9Ibq_body",
6163
- "title": "_S9Ibq_title",
6164
- "glyph": "_S9Ibq_glyph"
6487
+ "list": "_S9Ibq_list",
6488
+ "item": "_S9Ibq_item",
6489
+ "content": "_S9Ibq_content",
6490
+ "glyphProgress": "_S9Ibq_glyphProgress",
6491
+ "glyphPending": "_S9Ibq_glyphPending"
6165
6492
  };
6166
6493
  //#endregion
6167
6494
  //#region src/client/skeleton/TodoPanel.tsx
@@ -6355,18 +6682,18 @@ window.__ModuleLoader__.load({
6355
6682
  document.head.appendChild(tag);
6356
6683
  }
6357
6684
  var QueueDock_module_css_default = {
6358
- "row": "u7UfBG_row",
6359
- "preview": "u7UfBG_preview",
6360
6685
  "header": "u7UfBG_header",
6686
+ "row": "u7UfBG_row",
6687
+ "lead": "u7UfBG_lead",
6688
+ "panel": "u7UfBG_panel",
6361
6689
  "count": "u7UfBG_count",
6362
6690
  "editor": "u7UfBG_editor",
6363
- "panel": "u7UfBG_panel",
6691
+ "actions": "u7UfBG_actions",
6364
6692
  "action": "u7UfBG_action",
6365
- "lead": "u7UfBG_lead",
6366
6693
  "list": "u7UfBG_list",
6367
- "dock": "u7UfBG_dock",
6368
6694
  "chevron": "u7UfBG_chevron",
6369
- "actions": "u7UfBG_actions"
6695
+ "preview": "u7UfBG_preview",
6696
+ "dock": "u7UfBG_dock"
6370
6697
  };
6371
6698
  //#endregion
6372
6699
  //#region src/client/queue/QueueDock.tsx
@@ -6614,7 +6941,7 @@ window.__ModuleLoader__.load({
6614
6941
  };
6615
6942
  //#endregion
6616
6943
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\skeleton\HeroShell.module.css.mjs
6617
- const css$7 = ".W1fuRW_root{justify-content:center;align-items:center;min-width:0;height:100%;padding:0 24px;display:flex}.W1fuRW_stack{width:100%;max-width:var(--dsh-composer-card-max-width);flex-direction:column;align-items:stretch;gap:12px;display:flex;overflow:visible}.W1fuRW_headline{color:var(--dsw-alias-label-primary);grid-template-columns:34px auto auto;justify-content:center;align-items:center;column-gap:10px;font-size:26px;font-weight:500;line-height:32px;display:grid}.W1fuRW_headlineText{grid-area:1/2}.W1fuRW_previewBadge{border:1px solid var(--dsw-alias-interactive-bg-hover);background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-label-primary-bluish);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:24px;grid-area:1/3;align-self:start;margin-top:2px;margin-left:-3px;padding:1px 7px 0;font-size:12px;font-weight:500;line-height:18px}.W1fuRW_markHitbox{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.W1fuRW_mark{color:var(--dsw-alias-label-primary);transform-origin:50% 60%}@keyframes W1fuRW_hero-mark-nudge{0%,to{transform:translate(0)rotate(0)}35%{transform:translate(-1px,-1px)rotate(-5deg)}70%{transform:translate(1px)rotate(3deg)}}@media (hover:hover) and (prefers-reduced-motion:no-preference){.W1fuRW_markHitbox:hover .W1fuRW_mark{animation:W1fuRW_hero-mark-nudge var(--ds-transition-duration-slow) var(--ds-ease-in-out)}}.W1fuRW_body{flex-direction:column;gap:12px;min-width:0;display:flex;position:relative;overflow:visible}.W1fuRW_body>*{z-index:1;position:relative}.W1fuRW_body>.W1fuRW_workspaceRow{z-index:10;align-items:center;min-width:0;padding-left:8px;display:flex}.W1fuRW_workspace{max-width:min(100%,360px);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:16px;align-items:center;gap:4px;padding:0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.W1fuRW_workspace:not(:disabled):hover,.W1fuRW_workspace[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.W1fuRW_workspace:disabled{cursor:default}.W1fuRW_folder{color:var(--dsw-alias-label-primary);flex:none}.W1fuRW_workspaceLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.W1fuRW_chevron{color:var(--dsw-alias-label-caption);flex:none}.W1fuRW_modalInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;height:44px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:22px;outline:none;padding:7px 14px;font-size:14px;font-weight:400;line-height:22px}.W1fuRW_modalInput::placeholder{color:var(--dsw-alias-label-caption)}.W1fuRW_modalInput:disabled{color:var(--dsw-alias-label-dimmed)}.W1fuRW_modalAction{min-width:72px}.W1fuRW_modalError{color:var(--dsw-alias-state-error-primary);margin-top:8px;font-size:12px;line-height:18px}";
6944
+ const css$7 = ".W1fuRW_root{justify-content:center;align-items:center;min-width:0;height:100%;padding:0 24px;display:flex}.W1fuRW_stack{width:100%;max-width:var(--dsh-composer-card-max-width);flex-direction:column;align-items:stretch;gap:12px;display:flex;overflow:visible}.W1fuRW_headline{color:var(--dsw-alias-label-primary);grid-template-columns:34px auto auto;justify-content:center;align-items:center;column-gap:10px;font-size:26px;font-weight:500;line-height:32px;display:grid}.W1fuRW_headlineText{grid-area:1/2}.W1fuRW_previewBadge{border:1px solid var(--dsw-alias-interactive-bg-hover);background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-label-primary-bluish);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:24px;grid-area:1/3;align-self:start;margin-top:2px;margin-left:-3px;padding:1px 7px 0;font-size:12px;font-weight:500;line-height:18px}.W1fuRW_fishHitbox{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.W1fuRW_fish{color:var(--dsw-alias-label-primary);transform-origin:50% 60%}@keyframes W1fuRW_hero-fish-swim{0%,to{transform:translate(0)rotate(0)}35%{transform:translate(-1px,-1px)rotate(-5deg)}70%{transform:translate(1px)rotate(3deg)}}@media (hover:hover) and (prefers-reduced-motion:no-preference){.W1fuRW_fishHitbox:hover .W1fuRW_fish{animation:W1fuRW_hero-fish-swim var(--ds-transition-duration-slow) var(--ds-ease-in-out)}}.W1fuRW_body{flex-direction:column;gap:12px;min-width:0;display:flex;position:relative;overflow:visible}.W1fuRW_body>*{z-index:1;position:relative}.W1fuRW_body>.W1fuRW_workspaceRow{z-index:10;align-items:center;min-width:0;padding-left:8px;display:flex}.W1fuRW_workspace{max-width:min(100%,360px);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:16px;align-items:center;gap:4px;padding:0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.W1fuRW_workspace:not(:disabled):hover,.W1fuRW_workspace[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.W1fuRW_workspace:disabled{cursor:default}.W1fuRW_folder{color:var(--dsw-alias-label-primary);flex:none}.W1fuRW_workspaceLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.W1fuRW_chevron{color:var(--dsw-alias-label-caption);flex:none}.W1fuRW_modalInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;height:44px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:22px;outline:none;padding:7px 14px;font-size:14px;font-weight:400;line-height:22px}.W1fuRW_modalInput::placeholder{color:var(--dsw-alias-label-caption)}.W1fuRW_modalInput:disabled{color:var(--dsw-alias-label-dimmed)}.W1fuRW_modalAction{min-width:72px}.W1fuRW_modalError{color:var(--dsw-alias-state-error-primary);margin-top:8px;font-size:12px;line-height:18px}";
6618
6945
  const tagId$7 = "@xrkseek/client-ui-conversation/HeroShell.module.css";
6619
6946
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
6620
6947
  const tag = document.createElement("style");
@@ -6624,23 +6951,23 @@ window.__ModuleLoader__.load({
6624
6951
  document.head.appendChild(tag);
6625
6952
  }
6626
6953
  var HeroShell_module_css_default = {
6627
- "markHitbox": "W1fuRW_markHitbox",
6628
- "folder": "W1fuRW_folder",
6629
- "workspaceLabel": "W1fuRW_workspaceLabel",
6630
- "mark": "W1fuRW_mark",
6631
- "hero-mark-nudge": "W1fuRW_hero-mark-nudge",
6632
6954
  "chevron": "W1fuRW_chevron",
6633
- "headlineText": "W1fuRW_headlineText",
6634
- "modalError": "W1fuRW_modalError",
6635
- "body": "W1fuRW_body",
6955
+ "workspaceRow": "W1fuRW_workspaceRow",
6636
6956
  "workspace": "W1fuRW_workspace",
6637
6957
  "headline": "W1fuRW_headline",
6638
6958
  "modalInput": "W1fuRW_modalInput",
6639
- "modalAction": "W1fuRW_modalAction",
6640
- "root": "W1fuRW_root",
6641
- "previewBadge": "W1fuRW_previewBadge",
6642
6959
  "stack": "W1fuRW_stack",
6643
- "workspaceRow": "W1fuRW_workspaceRow"
6960
+ "previewBadge": "W1fuRW_previewBadge",
6961
+ "modalError": "W1fuRW_modalError",
6962
+ "fish": "W1fuRW_fish",
6963
+ "root": "W1fuRW_root",
6964
+ "fishHitbox": "W1fuRW_fishHitbox",
6965
+ "body": "W1fuRW_body",
6966
+ "folder": "W1fuRW_folder",
6967
+ "hero-fish-swim": "W1fuRW_hero-fish-swim",
6968
+ "workspaceLabel": "W1fuRW_workspaceLabel",
6969
+ "modalAction": "W1fuRW_modalAction",
6970
+ "headlineText": "W1fuRW_headlineText"
6644
6971
  };
6645
6972
  //#endregion
6646
6973
  //#region src/client/skeleton/EmptyHero.tsx
@@ -6750,7 +7077,7 @@ window.__ModuleLoader__.load({
6750
7077
  * @param props - see {@link HeroShellProps}.
6751
7078
  * @returns the centered hero element tree.
6752
7079
  */
6753
- function HeroShell({ t, children }) {
7080
+ function HeroShell({ t, renderSlot, children }) {
6754
7081
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6755
7082
  className: HeroShell_module_css_default.root,
6756
7083
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -6759,11 +7086,14 @@ window.__ModuleLoader__.load({
6759
7086
  className: HeroShell_module_css_default.headline,
6760
7087
  children: [
6761
7088
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6762
- className: HeroShell_module_css_default.markHitbox,
6763
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.BrandMark, {
7089
+ className: HeroShell_module_css_default.fishHitbox,
7090
+ children: renderSlot("conversation.hero.brand.mark", {
6764
7091
  size: 34,
6765
- className: HeroShell_module_css_default.mark
6766
- })
7092
+ className: HeroShell_module_css_default.fish
7093
+ }, { fallback: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_primitives.FishLogo, {
7094
+ size: 34,
7095
+ className: HeroShell_module_css_default.fish
7096
+ }) })
6767
7097
  }),
6768
7098
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6769
7099
  className: HeroShell_module_css_default.headlineText,
@@ -6780,7 +7110,7 @@ window.__ModuleLoader__.load({
6780
7110
  }
6781
7111
  //#endregion
6782
7112
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\skeleton\ConversationRoot.module.css.mjs
6783
- const css$6 = ".MBmynq_root{background:var(--dsw-alias-bg-base);--dsh-chat-content-width:748px;--dsh-composer-card-max-width:calc(var(--dsh-chat-content-width) + 32px);--dsh-composer-side-clearance:16px;--dsh-composer-dock-inset:8px;flex-direction:column;min-width:0;height:100%;display:flex}.MBmynq_header{border-bottom:1px solid #0000;flex:none;padding:12px 28px 0 20px;position:relative}.MBmynq_header:after{content:\"\";z-index:0;background:var(--dsw-alias-border-l2);pointer-events:none;height:1px;position:absolute;bottom:1px;left:0;right:0}.MBmynq_headerHidden{display:none}.MBmynq_titleRow{align-items:center;gap:0;min-height:32px;display:flex}.MBmynq_titleCluster{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.MBmynq_crumbs{white-space:nowrap;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.MBmynq_crumbSeg{align-items:center;gap:4px;min-width:0;display:inline-flex}.MBmynq_crumbSep{color:var(--dsw-alias-label-caption);font-size:14px;line-height:20px}.MBmynq_crumb{max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:12px;padding:4px 8px;font-size:14px;line-height:20px;overflow:hidden}.MBmynq_crumb:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.MBmynq_crumbCurrent{color:var(--dsw-alias-label-primary);cursor:default;font-weight:500}.MBmynq_headerActions{flex:none;align-items:center;gap:8px;display:flex}.MBmynq_headerUtilities{flex:none;align-items:center;gap:8px;margin-left:20px;display:flex}.MBmynq_headerUtilities:empty{display:none}.MBmynq_tabs{z-index:1;gap:36px;margin-top:4px;padding-left:8px;display:flex;position:relative}.MBmynq_tab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;padding:0 0 11px;font-size:13px;font-weight:500;line-height:16px;position:relative}.MBmynq_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.MBmynq_tabActive{color:var(--dsw-alias-state-business-primary)}.MBmynq_tabActive:after{background:var(--dsw-alias-state-business-primary)}.MBmynq_viewArea{flex-direction:column;flex:1;min-height:0;display:flex}.MBmynq_composerStack{--dsh-composer-stack-gap:6px;gap:var(--dsh-composer-stack-gap);flex-direction:column;display:flex}.MBmynq_composerSeat{--dsh-composer-text-max-height:336px;flex-direction:column;flex:none;display:flex}.MBmynq_root[data-phase=active]{overflow:hidden}.MBmynq_root[data-phase=active] .MBmynq_header{flex:none}.MBmynq_scrollBody{scrollbar-gutter:stable;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden auto}.MBmynq_root[data-phase=active] .MBmynq_viewArea{flex:1 0 auto;min-height:auto}.MBmynq_root[data-phase=active] .MBmynq_composerSeat{z-index:7;background:linear-gradient(180deg, color-mix(in srgb, var(--dsw-alias-bg-base) 0%, transparent) 0px, var(--dsw-alias-bg-base) 36px);position:sticky;bottom:0}.MBmynq_scrollBody:has([data-conversation-composer-overlay]){scrollbar-gutter:auto;position:relative;overflow:hidden auto}.MBmynq_scrollBody:has([data-conversation-composer-overlay])>[data-slot=conversation\\.session]>.MBmynq_viewArea{flex:1 1 0;min-height:0;overflow:hidden}.MBmynq_scrollBody:has([data-conversation-composer-overlay])>.MBmynq_composerSeat{right:var(--dsh-scrollbar-width);position:absolute;bottom:0;left:0}.MBmynq_composerHero{width:min(calc(var(--dsh-composer-card-max-width) + 2 * var(--dsh-composer-side-clearance)), 100%);z-index:1;align-self:center;gap:8px;padding-bottom:32px;position:relative}.MBmynq_heroGlow{z-index:-1;aspect-ratio:1051/468;pointer-events:none;width:135.438%;position:absolute;bottom:92px;left:50%;transform:translate(-50%,50%)}.MBmynq_heroWorkspaceRow{align-items:center;gap:2px;min-width:0;margin-top:4px;padding-left:20px;display:flex}.MBmynq_root[data-phase=hero] .MBmynq_scrollBody{justify-content:center;overflow-y:auto}.MBmynq_root[data-phase=settling] .MBmynq_composerSeat{visibility:hidden}";
7113
+ const css$6 = ".MBmynq_root{background:var(--dsw-alias-bg-base);--dsh-chat-content-width:748px;--dsh-composer-card-max-width:calc(var(--dsh-chat-content-width) + 32px);--dsh-composer-side-clearance:16px;--dsh-composer-dock-inset:8px;flex-direction:column;min-width:0;height:100%;display:flex}.MBmynq_header{border-bottom:1px solid #0000;flex:none;padding:12px 28px 0 20px;position:relative}.MBmynq_header:after{content:\"\";z-index:0;background:var(--dsw-alias-border-l2);pointer-events:none;height:1px;position:absolute;bottom:1px;left:0;right:0}.MBmynq_headerHidden{display:none}.MBmynq_titleRow{align-items:center;gap:0;min-height:32px;display:flex}.MBmynq_titleCluster{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.MBmynq_crumbs{white-space:nowrap;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.MBmynq_crumbSeg{align-items:center;gap:4px;min-width:0;display:inline-flex}.MBmynq_crumbSep{color:var(--dsw-alias-label-caption);font-size:14px;line-height:20px}.MBmynq_crumb{max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:12px;padding:4px 8px;font-size:14px;line-height:20px;overflow:hidden}.MBmynq_crumbSubagent{font-size:12px;line-height:18px}.MBmynq_crumb:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.MBmynq_crumbCurrent{color:var(--dsw-alias-label-primary);cursor:default;font-weight:500}.MBmynq_headerActions{flex:none;align-items:center;gap:8px;display:flex}.MBmynq_headerUtilities{flex:none;align-items:center;gap:8px;margin-left:20px;display:flex}.MBmynq_headerUtilities:empty{display:none}.MBmynq_tabs{z-index:1;gap:36px;margin-top:4px;padding-left:8px;display:flex;position:relative}.MBmynq_tab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;padding:0 0 11px;font-size:13px;font-weight:500;line-height:16px;position:relative}.MBmynq_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.MBmynq_tabActive{color:var(--dsw-alias-state-business-primary)}.MBmynq_tabActive:after{background:var(--dsw-alias-state-business-primary)}.MBmynq_viewArea{flex-direction:column;flex:1;min-height:0;display:flex}.MBmynq_composerStack{--dsh-composer-stack-gap:6px;gap:var(--dsh-composer-stack-gap);flex-direction:column;display:flex}.MBmynq_composerSeat{--dsh-composer-text-max-height:336px;flex-direction:column;flex:none;display:flex}.MBmynq_root[data-phase=active]{overflow:hidden}.MBmynq_root[data-phase=active] .MBmynq_header{flex:none}.MBmynq_scrollBody{scrollbar-gutter:stable;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden auto}.MBmynq_root[data-phase=active] .MBmynq_viewArea{flex:1 0 auto;min-height:auto}.MBmynq_root[data-phase=active] .MBmynq_composerSeat{z-index:7;background:linear-gradient(180deg, color-mix(in srgb, var(--dsw-alias-bg-base) 0%, transparent) 0px, var(--dsw-alias-bg-base) 36px);position:sticky;bottom:0}.MBmynq_scrollBody:has([data-conversation-composer-overlay]){scrollbar-gutter:auto;position:relative;overflow:hidden auto}.MBmynq_scrollBody:has([data-conversation-composer-overlay])>[data-slot=conversation\\.session]>.MBmynq_viewArea{flex:1 1 0;min-height:0;overflow:hidden}.MBmynq_scrollBody:has([data-conversation-composer-overlay])>.MBmynq_composerSeat{right:var(--dsh-scrollbar-width);position:absolute;bottom:0;left:0}.MBmynq_composerHero{width:min(calc(var(--dsh-composer-card-max-width) + 2 * var(--dsh-composer-side-clearance)), 100%);z-index:1;align-self:center;gap:8px;padding-bottom:32px;position:relative}.MBmynq_heroGlow{z-index:-1;aspect-ratio:1051/468;pointer-events:none;width:135.438%;position:absolute;bottom:92px;left:50%;transform:translate(-50%,50%)}.MBmynq_heroWorkspaceRow{align-items:center;gap:2px;min-width:0;margin-top:4px;padding-left:20px;display:flex}.MBmynq_root[data-phase=hero] .MBmynq_scrollBody{justify-content:center;overflow-y:auto}.MBmynq_root[data-phase=settling] .MBmynq_composerSeat{visibility:hidden}";
6784
7114
  const tagId$6 = "@xrkseek/client-ui-conversation/ConversationRoot.module.css";
6785
7115
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
6786
7116
  const tag = document.createElement("style");
@@ -6790,28 +7120,29 @@ window.__ModuleLoader__.load({
6790
7120
  document.head.appendChild(tag);
6791
7121
  }
6792
7122
  var ConversationRoot_module_css_default = {
6793
- "composerSeat": "MBmynq_composerSeat",
6794
7123
  "crumbSeg": "MBmynq_crumbSeg",
7124
+ "root": "MBmynq_root",
6795
7125
  "crumbSep": "MBmynq_crumbSep",
6796
- "crumbs": "MBmynq_crumbs",
7126
+ "composerSeat": "MBmynq_composerSeat",
7127
+ "titleCluster": "MBmynq_titleCluster",
7128
+ "tabActive": "MBmynq_tabActive",
7129
+ "heroWorkspaceRow": "MBmynq_heroWorkspaceRow",
7130
+ "crumbCurrent": "MBmynq_crumbCurrent",
6797
7131
  "headerActions": "MBmynq_headerActions",
6798
- "viewArea": "MBmynq_viewArea",
6799
- "heroGlow": "MBmynq_heroGlow",
7132
+ "crumbs": "MBmynq_crumbs",
6800
7133
  "header": "MBmynq_header",
6801
- "tab": "MBmynq_tab",
6802
- "headerUtilities": "MBmynq_headerUtilities",
7134
+ "headerHidden": "MBmynq_headerHidden",
6803
7135
  "scrollBody": "MBmynq_scrollBody",
6804
- "tabs": "MBmynq_tabs",
7136
+ "headerUtilities": "MBmynq_headerUtilities",
7137
+ "heroGlow": "MBmynq_heroGlow",
7138
+ "tab": "MBmynq_tab",
7139
+ "viewArea": "MBmynq_viewArea",
6805
7140
  "composerStack": "MBmynq_composerStack",
6806
- "heroWorkspaceRow": "MBmynq_heroWorkspaceRow",
6807
- "headerHidden": "MBmynq_headerHidden",
6808
- "crumbCurrent": "MBmynq_crumbCurrent",
6809
- "tabActive": "MBmynq_tabActive",
6810
7141
  "composerHero": "MBmynq_composerHero",
6811
7142
  "titleRow": "MBmynq_titleRow",
6812
- "root": "MBmynq_root",
6813
- "titleCluster": "MBmynq_titleCluster",
6814
- "crumb": "MBmynq_crumb"
7143
+ "crumbSubagent": "MBmynq_crumbSubagent",
7144
+ "crumb": "MBmynq_crumb",
7145
+ "tabs": "MBmynq_tabs"
6815
7146
  };
6816
7147
  //#endregion
6817
7148
  //#region src/client/skeleton/ConversationRoot.tsx
@@ -6910,7 +7241,10 @@ window.__ModuleLoader__.load({
6910
7241
  className: clsx(ConversationRoot_module_css_default.composerStack, hero && ConversationRoot_module_css_default.composerHero),
6911
7242
  children: [
6912
7243
  hero && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HeroGlow, { className: ConversationRoot_module_css_default.heroGlow }),
6913
- hero && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HeroShell, { t }),
7244
+ hero && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HeroShell, {
7245
+ t,
7246
+ renderSlot
7247
+ }),
6914
7248
  hero && heroWorkspaceRow,
6915
7249
  zone !== void 0 && renderSlot("conversation.input.dock", zone),
6916
7250
  inputBar
@@ -6960,7 +7294,8 @@ window.__ModuleLoader__.load({
6960
7294
  if (summary === void 0) break;
6961
7295
  chain.unshift({
6962
7296
  id: summary.id,
6963
- displayTitle: summary.displayTitle
7297
+ displayTitle: summary.displayTitle,
7298
+ subagent: summary.origin === "subagent"
6964
7299
  });
6965
7300
  if (summary.origin !== "subagent") break;
6966
7301
  cursor = summary.parentId;
@@ -6997,20 +7332,29 @@ window.__ModuleLoader__.load({
6997
7332
  "aria-label": t("session.hierarchy"),
6998
7333
  children: [ancestry.map((summary, index) => {
6999
7334
  const last = index === ancestry.length - 1;
7335
+ const title = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7336
+ type: "button",
7337
+ className: clsx(ConversationRoot_module_css_default.crumb, summary.subagent && ConversationRoot_module_css_default.crumbSubagent, last && ConversationRoot_module_css_default.crumbCurrent),
7338
+ disabled: last,
7339
+ onClick: () => {
7340
+ open(summary.id);
7341
+ },
7342
+ children: summary.displayTitle
7343
+ });
7344
+ const lineage = last || summary.subagent;
7345
+ const lineageOwner = {
7346
+ lineageSessionId: summary.id,
7347
+ displayTitle: summary.displayTitle,
7348
+ ...last ? {} : { openTitle: () => {
7349
+ open(summary.id);
7350
+ } }
7351
+ };
7000
7352
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
7001
7353
  className: ConversationRoot_module_css_default.crumbSeg,
7002
7354
  children: [index > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7003
7355
  className: ConversationRoot_module_css_default.crumbSep,
7004
7356
  children: "/"
7005
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7006
- type: "button",
7007
- className: clsx(ConversationRoot_module_css_default.crumb, last && ConversationRoot_module_css_default.crumbCurrent),
7008
- disabled: last,
7009
- onClick: () => {
7010
- open(summary.id);
7011
- },
7012
- children: summary.displayTitle
7013
- })]
7357
+ }), lineage ? summary.subagent ? renderSlot("conversation.session.header.lineage", lineageOwner, { fallback: title }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [title, renderSlot("conversation.session.header.lineage", lineageOwner, { fallback: null })] }) : title]
7014
7358
  }, summary.id);
7015
7359
  }), ancestry.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7016
7360
  className: ConversationRoot_module_css_default.crumbCurrent,
@@ -7087,15 +7431,15 @@ window.__ModuleLoader__.load({
7087
7431
  document.head.appendChild(tag);
7088
7432
  }
7089
7433
  var DetailsPanel_module_css_default = {
7090
- "code": "H9rWiW_code",
7091
- "title": "H9rWiW_title",
7092
7434
  "header": "H9rWiW_header",
7093
- "root": "H9rWiW_root",
7094
7435
  "empty": "H9rWiW_empty",
7095
- "close": "H9rWiW_close",
7096
- "body": "H9rWiW_body",
7436
+ "sectionLabel": "H9rWiW_sectionLabel",
7437
+ "title": "H9rWiW_title",
7097
7438
  "section": "H9rWiW_section",
7098
- "sectionLabel": "H9rWiW_sectionLabel"
7439
+ "root": "H9rWiW_root",
7440
+ "code": "H9rWiW_code",
7441
+ "body": "H9rWiW_body",
7442
+ "close": "H9rWiW_close"
7099
7443
  };
7100
7444
  //#endregion
7101
7445
  //#region src/client/skeleton/DetailsPanel.tsx
@@ -7638,6 +7982,76 @@ window.__ModuleLoader__.load({
7638
7982
  function orderedVisible(nodes) {
7639
7983
  return nodes.filter((node) => node.visibility === "visible").sort((left, right) => left.anchorSeq - right.anchorSeq || left.key.localeCompare(right.key));
7640
7984
  }
7985
+ function referenceMessageSeq(node) {
7986
+ const candidate = node;
7987
+ return candidate.kind === "user" || candidate.kind === "steering" ? candidate.data.seq : void 0;
7988
+ }
7989
+ function followingRecall(node) {
7990
+ const candidate = node;
7991
+ if (candidate.kind !== "context") return void 0;
7992
+ return {
7993
+ messageSeq: candidate.data.seq - 1,
7994
+ labels: (0, _xrkseek_client_runtime_client.sessionRecallLabels)(candidate.data.source)
7995
+ };
7996
+ }
7997
+ function withReferenceLabels(node, labels) {
7998
+ const candidate = node;
7999
+ if (candidate.kind !== "user" && candidate.kind !== "steering") return node;
8000
+ const current = candidate.data.referenceLabels ?? EMPTY_KEYS;
8001
+ const hasLabels = Object.hasOwn(candidate.data, "referenceLabels");
8002
+ if (sameReferences$1(current, labels) && hasLabels === labels.length > 0) return node;
8003
+ const data = { ...candidate.data };
8004
+ if (labels.length === 0) delete data.referenceLabels;
8005
+ else data.referenceLabels = labels;
8006
+ return {
8007
+ ...candidate,
8008
+ data
8009
+ };
8010
+ }
8011
+ /** Associates a direct message with the sourced recall event that immediately follows it. */
8012
+ var ReferenceLabelProjector = class {
8013
+ messagesBySeq = /* @__PURE__ */ new Map();
8014
+ labelsByMessageSeq = /* @__PURE__ */ new Map();
8015
+ replace(nodes) {
8016
+ this.messagesBySeq.clear();
8017
+ this.labelsByMessageSeq.clear();
8018
+ for (const node of nodes) {
8019
+ const messageSeq = referenceMessageSeq(node);
8020
+ if (messageSeq !== void 0) this.messagesBySeq.set(messageSeq, node.key);
8021
+ const recall = followingRecall(node);
8022
+ if (recall !== void 0 && recall.labels.length > 0) this.labelsByMessageSeq.set(recall.messageSeq, recall.labels);
8023
+ }
8024
+ return nodes.map((node) => {
8025
+ const messageSeq = referenceMessageSeq(node);
8026
+ return messageSeq === void 0 ? node : withReferenceLabels(node, this.labelsByMessageSeq.get(messageSeq) ?? EMPTY_KEYS);
8027
+ });
8028
+ }
8029
+ apply(upserts, store) {
8030
+ const byKey = new Map(upserts.map((node) => [node.key, node]));
8031
+ const affected = /* @__PURE__ */ new Set();
8032
+ for (const node of upserts) {
8033
+ const messageSeq = referenceMessageSeq(node);
8034
+ if (messageSeq !== void 0) {
8035
+ this.messagesBySeq.set(messageSeq, node.key);
8036
+ affected.add(messageSeq);
8037
+ }
8038
+ const recall = followingRecall(node);
8039
+ if (recall === void 0) continue;
8040
+ const current = this.labelsByMessageSeq.get(recall.messageSeq);
8041
+ if (recall.labels.length === 0) this.labelsByMessageSeq.delete(recall.messageSeq);
8042
+ else this.labelsByMessageSeq.set(recall.messageSeq, current !== void 0 && sameReferences$1(current, recall.labels) ? current : recall.labels);
8043
+ affected.add(recall.messageSeq);
8044
+ }
8045
+ for (const messageSeq of affected) {
8046
+ const key = this.messagesBySeq.get(messageSeq);
8047
+ if (key === void 0) continue;
8048
+ const node = byKey.get(key) ?? store.get(key);
8049
+ if (node === void 0) continue;
8050
+ byKey.set(key, withReferenceLabels(node, this.labelsByMessageSeq.get(messageSeq) ?? EMPTY_KEYS));
8051
+ }
8052
+ return [...byKey.values()];
8053
+ }
8054
+ };
7641
8055
  const EMPTY_CONTRIBUTION = {
7642
8056
  anchorSeq: 0,
7643
8057
  nodes: EMPTY_LIST,
@@ -7828,6 +8242,7 @@ window.__ModuleLoader__.load({
7828
8242
  store = new MutableChatNodeStore();
7829
8243
  locations = new MutableChatLocationIndex();
7830
8244
  legacy = new LegacySliceBuilder();
8245
+ referenceLabels = new ReferenceLabelProjector();
7831
8246
  order = EMPTY_KEYS;
7832
8247
  empty;
7833
8248
  constructor() {
@@ -7837,28 +8252,30 @@ window.__ModuleLoader__.load({
7837
8252
  });
7838
8253
  }
7839
8254
  replace(input) {
7840
- this.store.replace(input.nodes);
7841
- this.order = orderedVisible(input.nodes).map((node) => node.key);
8255
+ const nodes = this.referenceLabels.replace(input.nodes);
8256
+ this.store.replace(nodes);
8257
+ this.order = orderedVisible(nodes).map((node) => node.key);
7842
8258
  this.locations.rebuild(this.order, this.store);
7843
- return this.snapshot(input.timeline, this.legacy.replace(input.nodes, input.timeline));
8259
+ return this.snapshot(input.timeline, this.legacy.replace(nodes, input.timeline));
7844
8260
  }
7845
8261
  apply(input) {
8262
+ const upserts = this.referenceLabels.apply(input.upserts, this.store);
7846
8263
  let structural = false;
7847
8264
  const contentOnly = [];
7848
- for (const node of input.upserts) {
8265
+ for (const node of upserts) {
7849
8266
  const previous = this.store.get(node.key);
7850
8267
  const nodeStructural = previous === void 0 || previous.anchorSeq !== node.anchorSeq || previous.visibility !== node.visibility || locationIdentity(previous.location) !== locationIdentity(node.location);
7851
8268
  structural ||= nodeStructural;
7852
8269
  if (!nodeStructural) contentOnly.push(node);
7853
8270
  }
7854
- this.store.upsert(input.upserts);
8271
+ this.store.upsert(upserts);
7855
8272
  if (structural) {
7856
8273
  const next = orderedVisible(this.store.values()).map((node) => node.key);
7857
8274
  this.order = sameReferences$1(this.order, next) ? this.order : next;
7858
8275
  this.locations.rebuild(this.order, this.store);
7859
8276
  }
7860
8277
  this.locations.touch(contentOnly);
7861
- return this.snapshot(input.timeline, this.legacy.apply(input.upserts, input.timeline));
8278
+ return this.snapshot(input.timeline, this.legacy.apply(upserts, input.timeline));
7862
8279
  }
7863
8280
  snapshot(timeline, legacy = this.legacy.replace(EMPTY_LIST, timeline)) {
7864
8281
  return {
@@ -8321,19 +8738,14 @@ window.__ModuleLoader__.load({
8321
8738
  const MAX_DEPTH = 256;
8322
8739
  const projectedBlocks = /* @__PURE__ */ new WeakMap();
8323
8740
  function jsonArguments(value) {
8324
- if (typeof value === "string") return value;
8325
- try {
8326
- return JSON.stringify(value ?? {});
8327
- } catch {
8328
- return "{}";
8329
- }
8741
+ return JSON.stringify(value);
8330
8742
  }
8331
8743
  function rootCall(match) {
8332
8744
  if (match.event.type !== "tool/call") throw new Error("tool-call start requires tool/call");
8333
8745
  return {
8334
8746
  callId: String(match.event.data.callId),
8335
8747
  name: match.event.data.name,
8336
- argsRaw: jsonArguments(match.event.data.arguments),
8748
+ argsRaw: match.event.data.arguments,
8337
8749
  turn: match.event.data.turn,
8338
8750
  step: match.event.data.step,
8339
8751
  time: match.event.time,
@@ -8940,15 +9352,15 @@ window.__ModuleLoader__.load({
8940
9352
  document.head.appendChild(tag);
8941
9353
  }
8942
9354
  var ReasoningRow_module_css_default = {
8943
- "thinkBody": "dc9yZG_thinkBody",
8944
9355
  "title": "dc9yZG_title",
8945
- "dsh-reasoning-row-sweep": "dc9yZG_dsh-reasoning-row-sweep",
9356
+ "root": "dc9yZG_root",
9357
+ "separator": "dc9yZG_separator",
8946
9358
  "chevron": "dc9yZG_chevron",
8947
9359
  "leading": "dc9yZG_leading",
8948
- "summary": "dc9yZG_summary",
8949
- "root": "dc9yZG_root",
9360
+ "thinkBody": "dc9yZG_thinkBody",
8950
9361
  "row": "dc9yZG_row",
8951
- "separator": "dc9yZG_separator"
9362
+ "dsh-reasoning-row-sweep": "dc9yZG_dsh-reasoning-row-sweep",
9363
+ "summary": "dc9yZG_summary"
8952
9364
  };
8953
9365
  //#endregion
8954
9366
  //#region src/client/chat/ReasoningRow.tsx
@@ -9023,7 +9435,7 @@ window.__ModuleLoader__.load({
9023
9435
  }
9024
9436
  //#endregion
9025
9437
  //#region \0xrk-css:C:\Users\sunflowerss\Desktop\XRKgrocery\XRK-harness\packages\client\ui-conversation\src\client\chat\AssistantMarkdown.module.css.mjs
9026
- const css$2 = ".wAd5ea_root{color:var(--dsw-alias-label-primary);flex-direction:column;font-size:16px;line-height:28px;display:flex}.wAd5ea_body{flex-direction:column;gap:16px;display:flex}.wAd5ea_stopped{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-tertiary);border-radius:6px;align-self:flex-start;padding:0 6px;font-size:11px;line-height:18px}.wAd5ea_actions{margin-top:16px;margin-left:-6px}";
9438
+ const css$2 = ".wAd5ea_root{color:var(--dsw-alias-label-primary);flex-direction:column;font-size:16px;line-height:28px;display:flex}.wAd5ea_body{flex-direction:column;gap:16px;display:flex}.wAd5ea_body .md-table-wide{--dsh-table-spare:max(0px, calc((100cqw - var(--dsh-chat-content-width)) / 2));--dsh-table-lead:calc(var(--dsh-table-spare) + min(var(--dsh-chat-content-width), 100cqw) - 100%);box-sizing:border-box;width:calc(100% + var(--dsh-table-lead) + var(--dsh-table-spare));max-width:none;margin-left:calc(-1 * var(--dsh-table-lead));padding-left:var(--dsh-table-lead)}.wAd5ea_stopped{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-tertiary);border-radius:6px;align-self:flex-start;padding:0 6px;font-size:11px;line-height:18px}.wAd5ea_actions{margin-top:16px;margin-left:-6px}";
9027
9439
  const tagId$2 = "@xrkseek/client-ui-conversation/AssistantMarkdown.module.css";
9028
9440
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
9029
9441
  const tag = document.createElement("style");
@@ -9033,16 +9445,15 @@ window.__ModuleLoader__.load({
9033
9445
  document.head.appendChild(tag);
9034
9446
  }
9035
9447
  var AssistantMarkdown_module_css_default = {
9036
- "actions": "wAd5ea_actions",
9037
- "body": "wAd5ea_body",
9038
9448
  "root": "wAd5ea_root",
9449
+ "body": "wAd5ea_body",
9450
+ "actions": "wAd5ea_actions",
9039
9451
  "stopped": "wAd5ea_stopped"
9040
9452
  };
9041
9453
  //#endregion
9042
9454
  //#region src/client/chat/AssistantMarkdown.tsx
9043
9455
  /** Reasoning block as the Think variant summary row (figma 39:28304). */
9044
- const AssistantMarkdown = (0, react.memo)(function AssistantMarkdown({ blocks, streaming, interrupted, loadImage, mentions, t }) {
9045
- const imageLoader = loadImage ?? (() => Promise.reject(new Error(t("image.serviceUnavailable"))));
9456
+ const AssistantMarkdown = (0, react.memo)(function AssistantMarkdown({ blocks, streaming, interrupted, renderMessageImages, mentions, t }) {
9046
9457
  const codeLabels = (0, react.useMemo)(() => ({
9047
9458
  copyLabel: t("copy"),
9048
9459
  copiedLabel: t("copied")
@@ -9078,12 +9489,10 @@ window.__ModuleLoader__.load({
9078
9489
  group.push(next);
9079
9490
  i += 1;
9080
9491
  }
9081
- rendered.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_xrkseek_client_ui_attachment.ImageGallery, {
9082
- images: group,
9083
- load: imageLoader,
9084
- align: "start",
9085
- labels: messageImageLabels(t)
9086
- }, start));
9492
+ rendered.push(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderMessageImages({
9493
+ images: group.map(({ attachment }) => ({ attachment })),
9494
+ align: "start"
9495
+ }) }, start));
9087
9496
  break;
9088
9497
  }
9089
9498
  case "tool-call": break;
@@ -9109,7 +9518,7 @@ window.__ModuleLoader__.load({
9109
9518
  //#endregion
9110
9519
  //#region src/client/chat/AssistantNodeView.tsx
9111
9520
  /** Streaming, settled, and interrupted Assistant states share one keyed renderer instance. */
9112
- const AssistantNodeView = (0, react.memo)(function AssistantNodeView({ node, useTurnData, openFile, loadImage, fileMentions, t }) {
9521
+ const AssistantNodeView = (0, react.memo)(function AssistantNodeView({ node, useTurnData, openFile, renderMessageImages, fileMentions, t }) {
9113
9522
  const data = node.data;
9114
9523
  const turn = node.location.kind === "turn" || node.location.kind === "step" ? node.location.turn : void 0;
9115
9524
  const tail = useTurnData("turn-tail");
@@ -9132,7 +9541,7 @@ window.__ModuleLoader__.load({
9132
9541
  blocks: data.blocks,
9133
9542
  streaming: data.status === "running",
9134
9543
  interrupted: data.status === "interrupted",
9135
- loadImage,
9544
+ renderMessageImages,
9136
9545
  mentions,
9137
9546
  t
9138
9547
  });
@@ -9149,15 +9558,15 @@ window.__ModuleLoader__.load({
9149
9558
  document.head.appendChild(tag);
9150
9559
  }
9151
9560
  var GenericCommandCard_module_css_default = {
9561
+ "body": "Ga_JSG_body",
9152
9562
  "root": "Ga_JSG_root",
9153
- "chevron": "Ga_JSG_chevron",
9154
9563
  "summary": "Ga_JSG_summary",
9155
- "separator": "Ga_JSG_separator",
9156
9564
  "title": "Ga_JSG_title",
9157
- "row": "Ga_JSG_row",
9565
+ "separator": "Ga_JSG_separator",
9158
9566
  "dsh-command-row-sweep": "Ga_JSG_dsh-command-row-sweep",
9567
+ "row": "Ga_JSG_row",
9159
9568
  "leading": "Ga_JSG_leading",
9160
- "body": "Ga_JSG_body"
9569
+ "chevron": "Ga_JSG_chevron"
9161
9570
  };
9162
9571
  //#endregion
9163
9572
  //#region src/client/chat/GenericCommandCard.tsx
@@ -9576,6 +9985,10 @@ window.__ModuleLoader__.load({
9576
9985
  kind: "list",
9577
9986
  scope: "session"
9578
9987
  },
9988
+ "conversation.hero.brand.mark": {
9989
+ kind: "single",
9990
+ scope: "root"
9991
+ },
9579
9992
  "conversation.hero.workspace": {
9580
9993
  kind: "single",
9581
9994
  scope: "root"
@@ -9628,6 +10041,10 @@ window.__ModuleLoader__.load({
9628
10041
  name: "conversation.session.header",
9629
10042
  locale: NS,
9630
10043
  children: {
10044
+ "conversation.session.header.lineage": {
10045
+ kind: "single",
10046
+ scope: "session"
10047
+ },
9631
10048
  "conversation.session.header.actions": {
9632
10049
  kind: "list",
9633
10050
  scope: "session"
@@ -9649,6 +10066,10 @@ window.__ModuleLoader__.load({
9649
10066
  name: "conversation.composer.bar",
9650
10067
  locale: NS,
9651
10068
  children: {
10069
+ "conversation.input.attachments": {
10070
+ kind: "single",
10071
+ scope: "session-maybe"
10072
+ },
9652
10073
  "conversation.input.plan": {
9653
10074
  kind: "single",
9654
10075
  scope: "session"
@@ -9701,6 +10122,7 @@ window.__ModuleLoader__.load({
9701
10122
  inputTriggers.toggleSource("command", {
9702
10123
  trigger: "/",
9703
10124
  query: "",
10125
+ quoted: false,
9704
10126
  position: snapshot.draft.slice(0, selection.start).trim() === "" ? "leading" : "inline",
9705
10127
  span: {
9706
10128
  ...selection,
@@ -9737,11 +10159,17 @@ window.__ModuleLoader__.load({
9737
10159
  order: 0,
9738
10160
  label: () => t("view.chat"),
9739
10161
  locale: NS,
9740
- children: { "conversation.chat.node": {
9741
- kind: "keyed",
9742
- scope: "session",
9743
- inject: CHAT_NODE_INJECT
9744
- } },
10162
+ children: {
10163
+ "conversation.chat.node": {
10164
+ kind: "keyed",
10165
+ scope: "session",
10166
+ inject: CHAT_NODE_INJECT
10167
+ },
10168
+ "conversation.message.images": {
10169
+ kind: "single",
10170
+ scope: "session"
10171
+ }
10172
+ },
9745
10173
  store: chatStore,
9746
10174
  inject: (sessionId, actions) => {
9747
10175
  const conversation = concreteConversation(ctx);
@@ -9754,7 +10182,7 @@ window.__ModuleLoader__.load({
9754
10182
  fileMentions: (owner) => ctx.get("chatFileMentions")?.forClosing(owner),
9755
10183
  openFile: (path) => {
9756
10184
  const cwd = sessions.list.getSnapshot().byId[sessionId]?.cwd;
9757
- workspaces.openPath((0, _xrkseek_client_runtime_client.resolveWorkspacePath)(cwd, path)).catch(() => {});
10185
+ return workspaces.openPath((0, _xrkseek_client_runtime_client.resolveWorkspacePath)(cwd, path));
9758
10186
  },
9759
10187
  loadOlder: () => {
9760
10188
  scoped.loadOlder();