@xopcai/xopc 0.0.29 → 0.0.31

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 (632) hide show
  1. package/dist/extensions/telegram/src/adapters/config-surface.js +3 -1
  2. package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
  3. package/dist/extensions/telegram/src/adapters/onboard-cli.js +23 -21
  4. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +1 -1
  5. package/dist/extensions/telegram/src/adapters/setup-wizard.js +3 -4
  6. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +1 -1
  7. package/dist/extensions/telegram/src/config-schema.d.ts +0 -1
  8. package/dist/extensions/telegram/src/config-schema.js +17 -4
  9. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +4 -17
  11. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  14. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  15. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  16. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js +216 -0
  17. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js.map +1 -0
  18. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js → apps-page-CWegY6Kp.js} +2 -2
  19. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js.map → apps-page-CWegY6Kp.js.map} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js +9 -0
  21. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js.map +1 -0
  22. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js +3 -0
  23. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js.map +1 -0
  24. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js +2 -0
  25. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js.map +1 -0
  26. package/dist/gateway/static/root/assets/dist-D0jxbvuz.js +2 -0
  27. package/dist/gateway/static/root/assets/{dist--p2HQ2QF.js.map → dist-D0jxbvuz.js.map} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js → extension-debug-page-DB630cW8.js} +2 -2
  29. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js.map → extension-debug-page-DB630cW8.js.map} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js → extension-page-CnoPUBul.js} +2 -2
  31. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js.map → extension-page-CnoPUBul.js.map} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js → extension-settings-page-BsiOkvBe.js} +2 -2
  33. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js.map → extension-settings-page-BsiOkvBe.js.map} +1 -1
  34. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js → index-DHLmAIQl.js} +63 -63
  35. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js.map → index-DHLmAIQl.js.map} +1 -1
  36. package/dist/gateway/static/root/assets/index-DoPwy4aU.css +1 -0
  37. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js +2 -0
  38. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js.map +1 -0
  39. package/dist/gateway/static/root/assets/sessions-page-Q201-_lP.js +2 -0
  40. package/dist/gateway/static/root/assets/{sessions-page-Be5kIGl_.js.map → sessions-page-Q201-_lP.js.map} +1 -1
  41. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js +2 -0
  42. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js.map +1 -0
  43. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js +3 -0
  44. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js.map +1 -0
  45. package/dist/gateway/static/root/index.html +2 -2
  46. package/dist/package.js +1 -1
  47. package/dist/src/agent/agent-manager.d.ts +5 -7
  48. package/dist/src/agent/agent-manager.js +21 -19
  49. package/dist/src/agent/agent-manager.js.map +1 -1
  50. package/dist/src/agent/ipc/inbox.js +4 -2
  51. package/dist/src/agent/ipc/inbox.js.map +1 -1
  52. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  53. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  54. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  55. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  56. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  57. package/dist/src/agent/prompt/system-prompt.d.ts +0 -2
  58. package/dist/src/agent/prompt/system-prompt.js +3 -17
  59. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  60. package/dist/src/agent/service/btw-query.d.ts +16 -0
  61. package/dist/src/agent/service/btw-query.js +88 -0
  62. package/dist/src/agent/service/btw-query.js.map +1 -0
  63. package/dist/src/agent/service/build-direct-message-content.d.ts +30 -0
  64. package/dist/src/agent/service/build-direct-message-content.js +75 -0
  65. package/dist/src/agent/service/build-direct-message-content.js.map +1 -0
  66. package/dist/src/agent/service/parse-outbound-session-key.d.ts +8 -0
  67. package/dist/src/agent/service/parse-outbound-session-key.js +41 -0
  68. package/dist/src/agent/service/parse-outbound-session-key.js.map +1 -0
  69. package/dist/src/agent/service/process-direct-one-shot.d.ts +34 -0
  70. package/dist/src/agent/service/process-direct-one-shot.js +67 -0
  71. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -0
  72. package/dist/src/agent/service/process-direct-streaming.js +12 -1
  73. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  74. package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +6 -0
  75. package/dist/src/agent/service/reconcile-dreaming-cron.js +70 -0
  76. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -0
  77. package/dist/src/agent/service/session-context-report.d.ts +19 -0
  78. package/dist/src/agent/service/session-context-report.js +47 -0
  79. package/dist/src/agent/service/session-context-report.js.map +1 -0
  80. package/dist/src/agent/service/webchat-tts.d.ts +28 -0
  81. package/dist/src/agent/service/webchat-tts.js +73 -0
  82. package/dist/src/agent/service/webchat-tts.js.map +1 -0
  83. package/dist/src/agent/service.d.ts +8 -12
  84. package/dist/src/agent/service.js +74 -379
  85. package/dist/src/agent/service.js.map +1 -1
  86. package/dist/src/agent/skills/config.js +4 -3
  87. package/dist/src/agent/skills/config.js.map +1 -1
  88. package/dist/src/agent/skills/format-skills-prompt.d.ts +0 -2
  89. package/dist/src/agent/skills/format-skills-prompt.js +3 -24
  90. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  91. package/dist/src/agent/skills/hub-lock.js +4 -5
  92. package/dist/src/agent/skills/hub-lock.js.map +1 -1
  93. package/dist/src/agent/skills/index.js +9 -21
  94. package/dist/src/agent/skills/index.js.map +1 -1
  95. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +17 -0
  96. package/dist/src/agent/skills/marketplace/adapter.types.js +1 -0
  97. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.d.ts +2 -0
  98. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +292 -0
  99. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -0
  100. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.d.ts +73 -0
  101. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js +200 -0
  102. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js.map +1 -0
  103. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.d.ts +137 -0
  104. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js +217 -0
  105. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js.map +1 -0
  106. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.d.ts +12 -0
  107. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js +90 -0
  108. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js.map +1 -0
  109. package/dist/src/agent/skills/marketplace/adapters/store/adapter.d.ts +2 -0
  110. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +35 -0
  111. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -0
  112. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +124 -0
  113. package/dist/src/agent/skills/{skills-store-client.js → marketplace/adapters/store/store-api-client.js} +4 -3
  114. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -0
  115. package/dist/src/agent/skills/marketplace/resolve-adapter.d.ts +6 -0
  116. package/dist/src/agent/skills/marketplace/resolve-adapter.js +26 -0
  117. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +1 -0
  118. package/dist/src/agent/skills/parse-skill-metadata.d.ts +5 -0
  119. package/dist/src/agent/skills/parse-skill-metadata.js +27 -0
  120. package/dist/src/agent/skills/parse-skill-metadata.js.map +1 -0
  121. package/dist/src/agent/skills/skill-markdown-preview-from-raw.d.ts +6 -0
  122. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +64 -0
  123. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +1 -0
  124. package/dist/src/agent/skills/skill-view-path.d.ts +17 -1
  125. package/dist/src/agent/skills/skill-view-path.js +66 -3
  126. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  127. package/dist/src/agent/skills/skills-marketplace.d.ts +21 -0
  128. package/dist/src/agent/skills/skills-marketplace.js +18 -0
  129. package/dist/src/agent/skills/skills-marketplace.js.map +1 -0
  130. package/dist/src/agent/skills/test-framework.d.ts +0 -1
  131. package/dist/src/agent/skills/test-framework.js +2 -20
  132. package/dist/src/agent/skills/test-framework.js.map +1 -1
  133. package/dist/src/agent/skills/types.d.ts +12 -6
  134. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  135. package/dist/src/agent/tools/image-generate-tool.js +2 -2
  136. package/dist/src/auth/credentials.js +8 -6
  137. package/dist/src/auth/credentials.js.map +1 -1
  138. package/dist/src/auth/profiles/store.js +5 -3
  139. package/dist/src/auth/profiles/store.js.map +1 -1
  140. package/dist/src/channels/manager.js +1 -1
  141. package/dist/src/channels/outbound/persist-store.js +4 -4
  142. package/dist/src/channels/outbound/persist-store.js.map +1 -1
  143. package/dist/src/cli/commands/config.js +8 -6
  144. package/dist/src/cli/commands/config.js.map +1 -1
  145. package/dist/src/cli/commands/doctor/checks/channel-config.js +3 -4
  146. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  147. package/dist/src/cli/commands/init.js +4 -2
  148. package/dist/src/cli/commands/init.js.map +1 -1
  149. package/dist/src/config/loader.js +3 -1
  150. package/dist/src/config/loader.js.map +1 -1
  151. package/dist/src/config/models-json.js +4 -5
  152. package/dist/src/config/models-json.js.map +1 -1
  153. package/dist/src/config/schema.d.ts +12 -4
  154. package/dist/src/config/schema.js +31 -5
  155. package/dist/src/config/schema.js.map +1 -1
  156. package/dist/src/cron/persistence.d.ts +1 -3
  157. package/dist/src/cron/persistence.js +6 -17
  158. package/dist/src/cron/persistence.js.map +1 -1
  159. package/dist/src/cron/validation.js +1 -1
  160. package/dist/src/cron/validation.js.map +1 -1
  161. package/dist/src/extensions/activation-context.js +0 -1
  162. package/dist/src/extensions/activation-context.js.map +1 -1
  163. package/dist/src/extensions/lockfile.js +4 -2
  164. package/dist/src/extensions/lockfile.js.map +1 -1
  165. package/dist/src/gateway/auth.d.ts +0 -9
  166. package/dist/src/gateway/auth.js +1 -12
  167. package/dist/src/gateway/auth.js.map +1 -1
  168. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
  169. package/dist/src/gateway/hono/lib/extension-store.js +4 -4
  170. package/dist/src/gateway/hono/lib/extension-store.js.map +1 -1
  171. package/dist/src/gateway/hono/routes/channels.js +5 -3
  172. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  173. package/dist/src/gateway/hono/routes/commands-skills.js +28 -3
  174. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  175. package/dist/src/gateway/hono/routes/config.js +23 -2
  176. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  177. package/dist/src/gateway/hono/routes/sessions.js +124 -2
  178. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  179. package/dist/src/gateway/hono/sse.js +9 -2
  180. package/dist/src/gateway/hono/sse.js.map +1 -1
  181. package/dist/src/gateway/index.js +2 -2
  182. package/dist/src/gateway/lock.js +1 -1
  183. package/dist/src/gateway/service/run-gateway-agent.d.ts +37 -0
  184. package/dist/src/gateway/service/run-gateway-agent.js +163 -0
  185. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -0
  186. package/dist/src/gateway/service/save-webchat-user-message.d.ts +9 -0
  187. package/dist/src/gateway/service/save-webchat-user-message.js +34 -0
  188. package/dist/src/gateway/service/save-webchat-user-message.js.map +1 -0
  189. package/dist/src/gateway/service/session-chat-ids.d.ts +9 -0
  190. package/dist/src/gateway/service/session-chat-ids.js +33 -0
  191. package/dist/src/gateway/service/session-chat-ids.js.map +1 -0
  192. package/dist/src/gateway/service/sse-hub.d.ts +10 -0
  193. package/dist/src/gateway/service/sse-hub.js +55 -0
  194. package/dist/src/gateway/service/sse-hub.js.map +1 -0
  195. package/dist/src/gateway/service/types.d.ts +9 -0
  196. package/dist/src/gateway/service/types.js +1 -0
  197. package/dist/src/gateway/service.d.ts +42 -33
  198. package/dist/src/gateway/service.js +92 -246
  199. package/dist/src/gateway/service.js.map +1 -1
  200. package/dist/src/infra/update-lock.js +4 -2
  201. package/dist/src/infra/update-lock.js.map +1 -1
  202. package/dist/src/infra/update-startup.js +5 -14
  203. package/dist/src/infra/update-startup.js.map +1 -1
  204. package/dist/src/infra/write-file-atomic.d.ts +18 -0
  205. package/dist/src/infra/write-file-atomic.js +115 -0
  206. package/dist/src/infra/write-file-atomic.js.map +1 -0
  207. package/dist/src/session/abort-cutoff.d.ts +6 -0
  208. package/dist/src/session/abort-cutoff.js +10 -0
  209. package/dist/src/session/abort-cutoff.js.map +1 -0
  210. package/dist/src/session/compaction-checkpoints.d.ts +8 -0
  211. package/dist/src/session/compaction-checkpoints.js +21 -0
  212. package/dist/src/session/compaction-checkpoints.js.map +1 -0
  213. package/dist/src/session/config-store.js +4 -2
  214. package/dist/src/session/config-store.js.map +1 -1
  215. package/dist/src/session/index.d.ts +8 -1
  216. package/dist/src/session/index.js +7 -1
  217. package/dist/src/session/manager.d.ts +26 -1
  218. package/dist/src/session/manager.js +39 -2
  219. package/dist/src/session/manager.js.map +1 -1
  220. package/dist/src/session/patch-metadata.d.ts +12 -0
  221. package/dist/src/session/patch-metadata.js +23 -0
  222. package/dist/src/session/patch-metadata.js.map +1 -0
  223. package/dist/src/session/search-index.d.ts +2 -0
  224. package/dist/src/session/search-index.js +30 -2
  225. package/dist/src/session/search-index.js.map +1 -1
  226. package/dist/src/session/session-context-for-llm.d.ts +32 -0
  227. package/dist/src/session/session-context-for-llm.js +60 -0
  228. package/dist/src/session/session-context-for-llm.js.map +1 -0
  229. package/dist/src/session/store.d.ts +53 -2
  230. package/dist/src/session/store.js +427 -145
  231. package/dist/src/session/store.js.map +1 -1
  232. package/dist/src/session/strip-webchat-early-save.d.ts +5 -0
  233. package/dist/src/session/strip-webchat-early-save.js +17 -0
  234. package/dist/src/session/strip-webchat-early-save.js.map +1 -0
  235. package/dist/src/session/transcript-format.d.ts +46 -0
  236. package/dist/src/session/transcript-format.js +88 -0
  237. package/dist/src/session/transcript-format.js.map +1 -0
  238. package/dist/src/session/types.d.ts +37 -0
  239. package/dist/src/session/types.js.map +1 -1
  240. package/dist/src/utils/logger/log-store.js +4 -3
  241. package/dist/src/utils/logger/log-store.js.map +1 -1
  242. package/dist/src/voice/tts/merge-config.js +0 -1
  243. package/dist/src/voice/tts/merge-config.js.map +1 -1
  244. package/dist/src/voice/tts/service.js +1 -2
  245. package/dist/src/voice/tts/service.js.map +1 -1
  246. package/package.json +1 -1
  247. package/skills/business/company-values/SKILL-zh.md +80 -0
  248. package/skills/business/company-values/SKILL.md +80 -0
  249. package/skills/business/find-community/SKILL-zh.md +50 -0
  250. package/skills/business/find-community/SKILL.md +50 -0
  251. package/skills/business/first-customers/SKILL-zh.md +76 -0
  252. package/skills/business/first-customers/SKILL.md +76 -0
  253. package/skills/business/grow-sustainably/SKILL-zh.md +92 -0
  254. package/skills/business/grow-sustainably/SKILL.md +92 -0
  255. package/skills/business/marketing-plan/SKILL-zh.md +100 -0
  256. package/skills/business/marketing-plan/SKILL.md +100 -0
  257. package/skills/business/minimalist-review/SKILL-zh.md +82 -0
  258. package/skills/business/minimalist-review/SKILL.md +82 -0
  259. package/skills/business/mvp/SKILL-zh.md +81 -0
  260. package/skills/business/mvp/SKILL.md +81 -0
  261. package/skills/business/pricing/SKILL-zh.md +64 -0
  262. package/skills/business/pricing/SKILL.md +64 -0
  263. package/skills/business/processize/SKILL-zh.md +91 -0
  264. package/skills/business/processize/SKILL.md +91 -0
  265. package/skills/business/validate-idea/SKILL-zh.md +68 -0
  266. package/skills/business/validate-idea/SKILL.md +68 -0
  267. package/skills/{skill-creator → creative/algorithmic-art}/LICENSE.txt +1 -1
  268. package/skills/creative/algorithmic-art/SKILL-zh.md +405 -0
  269. package/skills/creative/algorithmic-art/SKILL.md +405 -0
  270. package/skills/creative/algorithmic-art/templates/generator_template.js +223 -0
  271. package/skills/creative/algorithmic-art/templates/viewer.html +599 -0
  272. package/skills/creative/canvas-design/LICENSE.txt +202 -0
  273. package/skills/creative/canvas-design/SKILL-zh.md +130 -0
  274. package/skills/creative/canvas-design/SKILL.md +130 -0
  275. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  276. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  277. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  278. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  279. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  280. package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  281. package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  282. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  283. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  284. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  285. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  286. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  287. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  288. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  289. package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  290. package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  291. package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  292. package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  293. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  294. package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  295. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  296. package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  297. package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  298. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  299. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  300. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  301. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  302. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  303. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  304. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  305. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  306. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  307. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  308. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  309. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  310. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  311. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  312. package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  313. package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  314. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  315. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  316. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  317. package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  318. package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  319. package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  320. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  321. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  322. package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  323. package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  324. package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  325. package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  326. package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  327. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  328. package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  329. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  330. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  331. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  332. package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  333. package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  334. package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  335. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  336. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  337. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  338. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  339. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  340. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  341. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  342. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  343. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  344. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  345. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  346. package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  347. package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  348. package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  349. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  350. package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  351. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  352. package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  353. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  354. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  355. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  356. package/skills/creative/frontend-design/LICENSE.txt +177 -0
  357. package/skills/creative/frontend-design/SKILL-zh.md +42 -0
  358. package/skills/creative/frontend-design/SKILL.md +42 -0
  359. package/skills/creative/theme-factory/LICENSE.txt +202 -0
  360. package/skills/creative/theme-factory/SKILL-zh.md +59 -0
  361. package/skills/creative/theme-factory/SKILL.md +59 -0
  362. package/skills/creative/theme-factory/theme-showcase.pdf +0 -0
  363. package/skills/creative/theme-factory/themes/arctic-frost.md +19 -0
  364. package/skills/creative/theme-factory/themes/botanical-garden.md +19 -0
  365. package/skills/creative/theme-factory/themes/desert-rose.md +19 -0
  366. package/skills/creative/theme-factory/themes/forest-canopy.md +19 -0
  367. package/skills/creative/theme-factory/themes/golden-hour.md +19 -0
  368. package/skills/creative/theme-factory/themes/midnight-galaxy.md +19 -0
  369. package/skills/creative/theme-factory/themes/modern-minimalist.md +19 -0
  370. package/skills/creative/theme-factory/themes/ocean-depths.md +19 -0
  371. package/skills/creative/theme-factory/themes/sunset-boulevard.md +19 -0
  372. package/skills/creative/theme-factory/themes/tech-innovation.md +19 -0
  373. package/skills/creative/web-artifacts-builder/LICENSE.txt +202 -0
  374. package/skills/creative/web-artifacts-builder/SKILL-zh.md +74 -0
  375. package/skills/creative/web-artifacts-builder/SKILL.md +74 -0
  376. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  377. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  378. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  379. package/skills/documents/doc-coauthoring/SKILL-zh.md +375 -0
  380. package/skills/documents/doc-coauthoring/SKILL.md +375 -0
  381. package/skills/documents/docx/SKILL-zh.md +590 -0
  382. package/skills/{docx → documents/docx}/SKILL.md +11 -11
  383. package/skills/{docx → documents/docx}/scripts/comment.py +2 -2
  384. package/skills/{docx → documents/docx}/scripts/office/helpers/simplify_redlines.py +1 -1
  385. package/skills/{docx → documents/docx}/scripts/office/pack.py +2 -2
  386. package/skills/{xlsx → documents/docx}/scripts/office/validate.py +2 -2
  387. package/skills/{xlsx → documents/docx}/scripts/office/validators/redlining.py +1 -1
  388. package/skills/documents/pdf/SKILL-zh.md +314 -0
  389. package/skills/documents/pptx/SKILL-zh.md +232 -0
  390. package/skills/{pptx → documents/pptx}/editing.md +3 -3
  391. package/skills/{pptx → documents/pptx}/scripts/office/helpers/simplify_redlines.py +1 -1
  392. package/skills/{xlsx → documents/pptx}/scripts/office/pack.py +2 -2
  393. package/skills/{pptx → documents/pptx}/scripts/office/validate.py +2 -2
  394. package/skills/{docx → documents/pptx}/scripts/office/validators/redlining.py +1 -1
  395. package/skills/documents/xlsx/SKILL-zh.md +292 -0
  396. package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/simplify_redlines.py +1 -1
  397. package/skills/{pptx → documents/xlsx}/scripts/office/pack.py +2 -2
  398. package/skills/{docx → documents/xlsx}/scripts/office/validate.py +2 -2
  399. package/skills/{pptx → documents/xlsx}/scripts/office/validators/redlining.py +1 -1
  400. package/skills/meta/skill-creator/LICENSE.txt +202 -0
  401. package/skills/meta/skill-creator/SKILL-zh.md +483 -0
  402. package/skills/{skill-creator → meta/skill-creator}/SKILL.md +0 -1
  403. package/skills/tools/find-skills/SKILL-zh.md +440 -0
  404. package/skills/tools/github/SKILL-zh.md +48 -0
  405. package/skills/tools/internal-comms/LICENSE.txt +202 -0
  406. package/skills/tools/internal-comms/SKILL-zh.md +32 -0
  407. package/skills/tools/internal-comms/SKILL.md +32 -0
  408. package/skills/tools/internal-comms/examples/3p-updates.md +47 -0
  409. package/skills/tools/internal-comms/examples/company-newsletter.md +65 -0
  410. package/skills/tools/internal-comms/examples/faq-answers.md +30 -0
  411. package/skills/tools/internal-comms/examples/general-comms.md +16 -0
  412. package/skills/tools/summarize/SKILL-zh.md +47 -0
  413. package/skills/tools/weather/SKILL-zh.md +46 -0
  414. package/skills/tools/webapp-testing/LICENSE.txt +202 -0
  415. package/skills/tools/webapp-testing/SKILL-zh.md +96 -0
  416. package/skills/tools/webapp-testing/SKILL.md +96 -0
  417. package/skills/tools/webapp-testing/examples/console_logging.py +35 -0
  418. package/skills/tools/webapp-testing/examples/element_discovery.py +40 -0
  419. package/skills/tools/webapp-testing/examples/static_html_automation.py +33 -0
  420. package/skills/tools/webapp-testing/scripts/with_server.py +106 -0
  421. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js +0 -216
  422. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js.map +0 -1
  423. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js +0 -9
  424. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js.map +0 -1
  425. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js +0 -2
  426. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js.map +0 -1
  427. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js +0 -3
  428. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js.map +0 -1
  429. package/dist/gateway/static/root/assets/dist--p2HQ2QF.js +0 -2
  430. package/dist/gateway/static/root/assets/index-Dnfha4O2.css +0 -1
  431. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js +0 -2
  432. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js.map +0 -1
  433. package/dist/gateway/static/root/assets/sessions-page-Be5kIGl_.js +0 -2
  434. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js +0 -2
  435. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js.map +0 -1
  436. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js +0 -3
  437. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js.map +0 -1
  438. package/dist/src/agent/skills/skills-store-client.d.ts +0 -66
  439. package/dist/src/agent/skills/skills-store-client.js.map +0 -1
  440. package/dist/src/stt/index.d.ts +0 -1
  441. package/dist/src/stt/index.js +0 -8
  442. /package/skills/{docx → documents/docx}/LICENSE.txt +0 -0
  443. /package/skills/{docx → documents/docx}/scripts/__init__.py +0 -0
  444. /package/skills/{docx → documents/docx}/scripts/accept_changes.py +0 -0
  445. /package/skills/{docx → documents/docx}/scripts/office/helpers/__init__.py +0 -0
  446. /package/skills/{docx → documents/docx}/scripts/office/helpers/merge_runs.py +0 -0
  447. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  448. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  449. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  450. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  451. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  452. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  453. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  454. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  455. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  456. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  457. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  458. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  459. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  460. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  461. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  462. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  463. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  464. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  465. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  466. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  467. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  468. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  469. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  470. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  471. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  472. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  473. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  474. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  475. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  476. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  477. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  478. /package/skills/{docx → documents/docx}/scripts/office/schemas/mce/mc.xsd +0 -0
  479. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  480. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  481. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  482. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  483. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  484. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  485. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  486. /package/skills/{docx → documents/docx}/scripts/office/soffice.py +0 -0
  487. /package/skills/{docx → documents/docx}/scripts/office/unpack.py +0 -0
  488. /package/skills/{docx → documents/docx}/scripts/office/validators/__init__.py +0 -0
  489. /package/skills/{docx → documents/docx}/scripts/office/validators/base.py +0 -0
  490. /package/skills/{docx → documents/docx}/scripts/office/validators/docx.py +0 -0
  491. /package/skills/{docx → documents/docx}/scripts/office/validators/pptx.py +0 -0
  492. /package/skills/{docx → documents/docx}/scripts/templates/comments.xml +0 -0
  493. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtended.xml +0 -0
  494. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtensible.xml +0 -0
  495. /package/skills/{docx → documents/docx}/scripts/templates/commentsIds.xml +0 -0
  496. /package/skills/{docx → documents/docx}/scripts/templates/people.xml +0 -0
  497. /package/skills/{pdf → documents/pdf}/LICENSE.txt +0 -0
  498. /package/skills/{pdf → documents/pdf}/SKILL.md +0 -0
  499. /package/skills/{pdf → documents/pdf}/forms.md +0 -0
  500. /package/skills/{pdf → documents/pdf}/reference.md +0 -0
  501. /package/skills/{pdf → documents/pdf}/scripts/check_bounding_boxes.py +0 -0
  502. /package/skills/{pdf → documents/pdf}/scripts/check_fillable_fields.py +0 -0
  503. /package/skills/{pdf → documents/pdf}/scripts/convert_pdf_to_images.py +0 -0
  504. /package/skills/{pdf → documents/pdf}/scripts/create_validation_image.py +0 -0
  505. /package/skills/{pdf → documents/pdf}/scripts/extract_form_field_info.py +0 -0
  506. /package/skills/{pdf → documents/pdf}/scripts/extract_form_structure.py +0 -0
  507. /package/skills/{pdf → documents/pdf}/scripts/fill_fillable_fields.py +0 -0
  508. /package/skills/{pdf → documents/pdf}/scripts/fill_pdf_form_with_annotations.py +0 -0
  509. /package/skills/{pptx → documents/pptx}/LICENSE.txt +0 -0
  510. /package/skills/{pptx → documents/pptx}/SKILL.md +0 -0
  511. /package/skills/{pptx → documents/pptx}/pptxgenjs.md +0 -0
  512. /package/skills/{pptx → documents/pptx}/scripts/__init__.py +0 -0
  513. /package/skills/{pptx → documents/pptx}/scripts/add_slide.py +0 -0
  514. /package/skills/{pptx → documents/pptx}/scripts/clean.py +0 -0
  515. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/__init__.py +0 -0
  516. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/merge_runs.py +0 -0
  517. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  518. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  519. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  520. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  521. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  522. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  523. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  524. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  525. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  526. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  527. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  528. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  529. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  530. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  531. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  532. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  533. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  534. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  535. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  536. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  537. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  538. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  539. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  540. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  541. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  542. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  543. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  544. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  545. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  546. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  547. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  548. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/mce/mc.xsd +0 -0
  549. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  550. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  551. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  552. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  553. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  554. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  555. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  556. /package/skills/{pptx → documents/pptx}/scripts/office/soffice.py +0 -0
  557. /package/skills/{pptx → documents/pptx}/scripts/office/unpack.py +0 -0
  558. /package/skills/{pptx → documents/pptx}/scripts/office/validators/__init__.py +0 -0
  559. /package/skills/{pptx → documents/pptx}/scripts/office/validators/base.py +0 -0
  560. /package/skills/{pptx → documents/pptx}/scripts/office/validators/docx.py +0 -0
  561. /package/skills/{pptx → documents/pptx}/scripts/office/validators/pptx.py +0 -0
  562. /package/skills/{pptx → documents/pptx}/scripts/thumbnail.py +0 -0
  563. /package/skills/{xlsx → documents/xlsx}/LICENSE.txt +0 -0
  564. /package/skills/{xlsx → documents/xlsx}/SKILL.md +0 -0
  565. /package/skills/{skill-creator/scripts → documents/xlsx/scripts/office/helpers}/__init__.py +0 -0
  566. /package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/merge_runs.py +0 -0
  567. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  568. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  569. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  570. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  571. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  572. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  573. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  574. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  575. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  576. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  577. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  578. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  579. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  580. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  581. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  582. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  583. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  584. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  585. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  586. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  587. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  588. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  589. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  590. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  591. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  592. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  593. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  594. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  595. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  596. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  597. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  598. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/mce/mc.xsd +0 -0
  599. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  600. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  601. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  602. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  603. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  604. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  605. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  606. /package/skills/{xlsx → documents/xlsx}/scripts/office/soffice.py +0 -0
  607. /package/skills/{xlsx → documents/xlsx}/scripts/office/unpack.py +0 -0
  608. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/__init__.py +0 -0
  609. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/base.py +0 -0
  610. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/docx.py +0 -0
  611. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/pptx.py +0 -0
  612. /package/skills/{xlsx → documents/xlsx}/scripts/recalc.py +0 -0
  613. /package/skills/{skill-creator → meta/skill-creator}/agents/analyzer.md +0 -0
  614. /package/skills/{skill-creator → meta/skill-creator}/agents/comparator.md +0 -0
  615. /package/skills/{skill-creator → meta/skill-creator}/agents/grader.md +0 -0
  616. /package/skills/{skill-creator → meta/skill-creator}/assets/eval_review.html +0 -0
  617. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/generate_review.py +0 -0
  618. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/viewer.html +0 -0
  619. /package/skills/{skill-creator → meta/skill-creator}/references/schemas.md +0 -0
  620. /package/skills/{xlsx/scripts/office/helpers → meta/skill-creator/scripts}/__init__.py +0 -0
  621. /package/skills/{skill-creator → meta/skill-creator}/scripts/aggregate_benchmark.py +0 -0
  622. /package/skills/{skill-creator → meta/skill-creator}/scripts/generate_report.py +0 -0
  623. /package/skills/{skill-creator → meta/skill-creator}/scripts/improve_description.py +0 -0
  624. /package/skills/{skill-creator → meta/skill-creator}/scripts/package_skill.py +0 -0
  625. /package/skills/{skill-creator → meta/skill-creator}/scripts/quick_validate.py +0 -0
  626. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_eval.py +0 -0
  627. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_loop.py +0 -0
  628. /package/skills/{skill-creator → meta/skill-creator}/scripts/utils.py +0 -0
  629. /package/skills/{find-skills → tools/find-skills}/SKILL.md +0 -0
  630. /package/skills/{github → tools/github}/SKILL.md +0 -0
  631. /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
  632. /package/skills/{weather → tools/weather}/SKILL.md +0 -0
@@ -3,16 +3,21 @@ import { init_session_key, parseSessionKey } from "../routing/session-key.js";
3
3
  import { createLogger } from "../utils/logger/index.js";
4
4
  import { init_logger } from "../utils/logger.js";
5
5
  import { FILENAMES, init_paths, resolveSessionsDir } from "../config/paths.js";
6
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
7
+ import { buildSessionContextForLlm, isTranscriptContextEntry, mergeLlmMessagesPreservingContextRows } from "./session-context-for-llm.js";
8
+ import { buildTranscriptEnvelope, parseStoredTranscriptJson } from "./transcript-format.js";
6
9
  import { invalidateSessionSearchIndexCache } from "./search-index-cache.js";
7
10
  import { resolveSessionShardRelativePath } from "./shard-path.js";
8
11
  import "./types.js";
9
12
  import { SessionCompactor } from "../agent/memory/compaction.js";
10
13
  import { SlidingWindow } from "../agent/memory/window.js";
11
- import { cleanTrailingErrors, hasProblematicMessages } from "../agent/memory/message-sanitizer.js";
14
+ import { normalizeCompactionCheckpointId } from "./compaction-checkpoints.js";
12
15
  import { basename, join } from "path";
13
16
  import { existsSync } from "fs";
14
- import { mkdir, readFile, readdir, stat, unlink, writeFile } from "fs/promises";
17
+ import { copyFile, mkdir, readFile, readdir, stat, unlink } from "fs/promises";
18
+ import { randomUUID } from "node:crypto";
15
19
  //#region src/session/store.ts
20
+ init_write_file_atomic();
16
21
  init_paths();
17
22
  init_agent_scope();
18
23
  init_session_key();
@@ -20,6 +25,8 @@ init_logger();
20
25
  const log = createLogger("SessionStore");
21
26
  const INDEX_VERSION = "1.0";
22
27
  const DEFAULT_LIMIT = 50;
28
+ /** Pre-compaction transcript snapshots per session file (same directory as `{safeKey}.json`). */
29
+ const MAX_COMPACTION_CHECKPOINTS = 15;
23
30
  var SessionStore = class {
24
31
  sessionsDir;
25
32
  archiveDir;
@@ -29,6 +36,9 @@ var SessionStore = class {
29
36
  indexDirty = false;
30
37
  window;
31
38
  compactor;
39
+ /** Serialize index + transcript mutations (reentrant for nested store calls). */
40
+ storeMutationChain = Promise.resolve();
41
+ storeMutationDepth = 0;
32
42
  constructor(options, windowConfig, compactionConfig) {
33
43
  const agentId = options.agentId ?? resolveDefaultAgentId(options.config);
34
44
  this.sessionsDir = options.sessionsDir ?? resolveSessionsDir(options.config, agentId);
@@ -58,6 +68,77 @@ var SessionStore = class {
58
68
  metaPath: join(dir, `${safeKey}.meta.json`)
59
69
  };
60
70
  }
71
+ invalidateIndexCache() {
72
+ this.indexCache = null;
73
+ this.indexCacheTime = 0;
74
+ }
75
+ /**
76
+ * Serialize mutations that touch the sessions index or transcript paths.
77
+ * Reentrant: nested calls (e.g. applyCompaction → saveMessages) run inline without deadlocking.
78
+ */
79
+ async runStoreMutation(fn) {
80
+ if (this.storeMutationDepth > 0) return fn();
81
+ const run = this.storeMutationChain.then(async () => {
82
+ this.storeMutationDepth++;
83
+ try {
84
+ return await fn();
85
+ } finally {
86
+ this.storeMutationDepth--;
87
+ }
88
+ });
89
+ this.storeMutationChain = run.then(() => void 0).catch(() => void 0);
90
+ return run;
91
+ }
92
+ checkpointBasenamePrefix(safeKey) {
93
+ return `${safeKey}.compaction-backup.`;
94
+ }
95
+ async pruneCompactionCheckpoints(dir, safeKey) {
96
+ const prefix = this.checkpointBasenamePrefix(safeKey);
97
+ let names;
98
+ try {
99
+ names = await readdir(dir);
100
+ } catch {
101
+ return;
102
+ }
103
+ const candidates = names.filter((n) => n.startsWith(prefix) && n.endsWith(".json"));
104
+ if (candidates.length <= MAX_COMPACTION_CHECKPOINTS) return;
105
+ const stats = await Promise.all(candidates.map(async (name) => {
106
+ const p = join(dir, name);
107
+ try {
108
+ return {
109
+ p,
110
+ mtimeMs: (await stat(p)).mtimeMs
111
+ };
112
+ } catch {
113
+ return {
114
+ p,
115
+ mtimeMs: 0
116
+ };
117
+ }
118
+ }));
119
+ stats.sort((a, b) => a.mtimeMs - b.mtimeMs);
120
+ const removeCount = stats.length - MAX_COMPACTION_CHECKPOINTS;
121
+ for (let i = 0; i < removeCount; i++) try {
122
+ await unlink(stats[i].p);
123
+ } catch {}
124
+ }
125
+ /** Best-effort copy of the current transcript before compaction replaces it. */
126
+ async captureCompactionCheckpointIfExists(key, jsonPath) {
127
+ if (!existsSync(jsonPath)) return;
128
+ const safeKey = this.sanitizeKey(key);
129
+ const dir = join(this.sessionsDir, resolveSessionShardRelativePath(key));
130
+ const backupPath = join(dir, `${this.checkpointBasenamePrefix(safeKey)}${randomUUID()}.json`);
131
+ try {
132
+ await copyFile(jsonPath, backupPath);
133
+ await this.pruneCompactionCheckpoints(dir, safeKey);
134
+ } catch (err) {
135
+ log.warn({
136
+ err,
137
+ key,
138
+ jsonPath
139
+ }, "Compaction checkpoint copy failed (continuing)");
140
+ }
141
+ }
61
142
  /**
62
143
  * Get sessions by agent ID
63
144
  */
@@ -110,7 +191,7 @@ var SessionStore = class {
110
191
  async saveIndex() {
111
192
  if (!this.indexCache) return;
112
193
  this.indexCache.lastUpdated = (/* @__PURE__ */ new Date()).toISOString();
113
- await writeFile(this.indexFile, JSON.stringify(this.indexCache, null, 2));
194
+ await writeTextAtomic(this.indexFile, JSON.stringify(this.indexCache, null, 2));
114
195
  this.indexDirty = false;
115
196
  try {
116
197
  const stats = await stat(this.indexFile);
@@ -120,36 +201,39 @@ var SessionStore = class {
120
201
  }
121
202
  }
122
203
  async rebuildIndex() {
123
- log.info("Rebuilding session index...");
124
- const sessions = [];
125
- const files = await this.scanSessionFiles();
126
- for (const file of files) if (file.endsWith(".json") && !file.endsWith(".meta.json")) {
127
- const stem = basename(file, ".json");
128
- const key = this.fileNameToKey(stem);
204
+ return this.runStoreMutation(async () => {
205
+ log.info("Rebuilding session index...");
206
+ const sessions = [];
207
+ const files = await this.scanSessionFiles();
208
+ for (const file of files) if (file.endsWith(".json") && !file.endsWith(".meta.json")) {
209
+ const stem = basename(file, ".json");
210
+ if (stem.includes(".compaction-backup.")) continue;
211
+ const key = this.fileNameToKey(stem);
212
+ try {
213
+ const metadata = await this.scanSessionFile(key);
214
+ if (metadata) sessions.push(metadata);
215
+ } catch (err) {
216
+ log.warn({
217
+ key,
218
+ err
219
+ }, "Failed to scan session file");
220
+ }
221
+ }
222
+ this.indexCache = {
223
+ version: INDEX_VERSION,
224
+ lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
225
+ sessions
226
+ };
227
+ await this.saveIndex();
129
228
  try {
130
- const metadata = await this.scanSessionFile(key);
131
- if (metadata) sessions.push(metadata);
132
- } catch (err) {
133
- log.warn({
134
- key,
135
- err
136
- }, "Failed to scan session file");
229
+ const stats = await stat(this.indexFile);
230
+ this.indexCacheTime = stats.mtime.getTime();
231
+ } catch {
232
+ this.indexCacheTime = Date.now();
137
233
  }
138
- }
139
- this.indexCache = {
140
- version: INDEX_VERSION,
141
- lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
142
- sessions
143
- };
144
- await this.saveIndex();
145
- try {
146
- const stats = await stat(this.indexFile);
147
- this.indexCacheTime = stats.mtime.getTime();
148
- } catch {
149
- this.indexCacheTime = Date.now();
150
- }
151
- log.info({ count: sessions.length }, "Session index rebuilt");
152
- return this.indexCache;
234
+ log.info({ count: sessions.length }, "Session index rebuilt");
235
+ return this.indexCache;
236
+ });
153
237
  }
154
238
  async scanSessionFiles() {
155
239
  const out = [];
@@ -166,17 +250,25 @@ var SessionStore = class {
166
250
  if (ent.isDirectory()) {
167
251
  if (ent.name === "archive") continue;
168
252
  await walk(childRel);
169
- } else if (ent.name.endsWith(".json") && ent.name !== FILENAMES.SESSIONS_INDEX && !ent.name.endsWith(".meta.json")) out.push(childRel);
253
+ } else if (ent.name.endsWith(".json") && ent.name !== FILENAMES.SESSIONS_INDEX && !ent.name.endsWith(".meta.json") && !ent.name.includes(".compaction-backup.")) out.push(childRel);
170
254
  }
171
255
  };
172
256
  await walk("");
173
257
  return out;
174
258
  }
175
259
  async scanSessionFile(key) {
176
- const messages = await this.loadMessages(key);
177
- if (messages.length === 0) return null;
178
260
  const { jsonPath } = this.sessionPathsForKey(key);
261
+ let raw;
262
+ try {
263
+ raw = await readFile(jsonPath, "utf-8");
264
+ } catch {
265
+ return null;
266
+ }
267
+ const { messages, envelope } = parseStoredTranscriptJson(raw);
268
+ if (messages.length === 0) return null;
179
269
  const stats = await stat(jsonPath);
270
+ const sessionStartedAt = envelope?.createdAt ?? stats.birthtime.toISOString();
271
+ const lastInteractionAt = envelope?.updatedAt ?? stats.mtime.toISOString();
180
272
  const { channel, chatId } = this.parseSessionKey(key);
181
273
  const routing = this.extractRoutingFromKey(key, channel);
182
274
  const isCronSession = channel === "cron";
@@ -193,6 +285,9 @@ var SessionStore = class {
193
285
  compactedCount: 0,
194
286
  sourceChannel: channel,
195
287
  sourceChatId: chatId,
288
+ ...envelope?.id ? { transcriptId: envelope.id } : {},
289
+ sessionStartedAt,
290
+ lastInteractionAt,
196
291
  routing,
197
292
  ...isCronSession ? {
198
293
  sessionType: "cron",
@@ -270,66 +365,100 @@ var SessionStore = class {
270
365
  hasMore: offset + limit < total
271
366
  };
272
367
  }
273
- async get(key) {
368
+ async get(key, options) {
274
369
  const metadata = await this.getMetadata(key);
275
370
  if (!metadata) return null;
276
371
  const messages = await this.loadMessages(key);
372
+ let transcriptSummary;
373
+ if (options?.includeTranscriptSummary) {
374
+ const env = await this.loadTranscriptDocument(key);
375
+ if (env) transcriptSummary = {
376
+ id: env.id,
377
+ version: env.version,
378
+ createdAt: env.createdAt,
379
+ updatedAt: env.updatedAt,
380
+ compactionCount: env.compactions?.length ?? 0
381
+ };
382
+ }
383
+ let transcriptRows;
384
+ if (options?.includeTranscriptRows) transcriptRows = await this.loadTranscriptRows(key);
277
385
  return {
278
386
  ...metadata,
279
- messages: this.convertMessages(messages)
387
+ messages: this.convertMessages(messages),
388
+ ...transcriptSummary ? { transcriptSummary } : {},
389
+ ...transcriptRows !== void 0 ? { transcriptRows } : {}
280
390
  };
281
391
  }
392
+ /** Full on-disk transcript rows (LLM messages + optional `kind: 'context'`). */
393
+ async loadTranscriptRows(key) {
394
+ const { jsonPath } = this.sessionPathsForKey(key);
395
+ try {
396
+ return parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).rows;
397
+ } catch {
398
+ return [];
399
+ }
400
+ }
282
401
  async getMetadata(key) {
283
- const index = await this.loadIndex();
284
- const metadata = index.sessions.find((s) => s.key === key);
402
+ const metadata = (await this.loadIndex()).sessions.find((s) => s.key === key);
285
403
  if (!metadata) {
286
404
  const scanned = await this.scanSessionFile(key);
287
- if (scanned) {
288
- index.sessions.push(scanned);
405
+ if (!scanned) return null;
406
+ await this.runStoreMutation(async () => {
407
+ this.invalidateIndexCache();
408
+ const fresh = await this.loadIndex();
409
+ if (fresh.sessions.some((s) => s.key === key)) return;
410
+ fresh.sessions.push(scanned);
289
411
  this.indexDirty = true;
290
- return scanned;
291
- }
292
- return null;
412
+ await this.saveIndex();
413
+ invalidateSessionSearchIndexCache();
414
+ });
415
+ return scanned;
293
416
  }
294
417
  return metadata;
295
418
  }
296
419
  async updateMetadata(key, updates) {
297
- const index = await this.loadIndex();
298
- const idx = index.sessions.findIndex((s) => s.key === key);
299
- if (idx === -1) throw new Error(`Session not found: ${key}`);
300
- index.sessions[idx] = {
301
- ...index.sessions[idx],
302
- ...updates,
303
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
304
- };
305
- this.indexDirty = true;
306
- await this.saveIndex();
307
- log.debug({
308
- key,
309
- updates
310
- }, "Session metadata updated");
311
- }
312
- async delete(key) {
313
- const index = await this.loadIndex();
314
- const idx = index.sessions.findIndex((s) => s.key === key);
315
- const primary = this.sessionPathsForKey(key);
316
- for (const p of [primary.jsonPath]) try {
317
- await unlink(p);
318
- } catch (err) {
319
- if (err.code !== "ENOENT") throw err;
320
- }
321
- for (const p of [primary.metaPath]) try {
322
- await unlink(p);
323
- } catch (err) {
324
- if (err.code !== "ENOENT") throw err;
325
- }
326
- if (idx !== -1) {
327
- index.sessions.splice(idx, 1);
420
+ return this.runStoreMutation(async () => {
421
+ this.invalidateIndexCache();
422
+ const index = await this.loadIndex();
423
+ const idx = index.sessions.findIndex((s) => s.key === key);
424
+ if (idx === -1) throw new Error(`Session not found: ${key}`);
425
+ index.sessions[idx] = {
426
+ ...index.sessions[idx],
427
+ ...updates,
428
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
429
+ };
328
430
  this.indexDirty = true;
329
431
  await this.saveIndex();
330
- }
331
- log.info({ key }, "Session deleted");
332
- return true;
432
+ log.debug({
433
+ key,
434
+ updates
435
+ }, "Session metadata updated");
436
+ });
437
+ }
438
+ async delete(key) {
439
+ return this.runStoreMutation(async () => {
440
+ this.invalidateIndexCache();
441
+ const index = await this.loadIndex();
442
+ const idx = index.sessions.findIndex((s) => s.key === key);
443
+ const primary = this.sessionPathsForKey(key);
444
+ for (const p of [primary.jsonPath]) try {
445
+ await unlink(p);
446
+ } catch (err) {
447
+ if (err.code !== "ENOENT") throw err;
448
+ }
449
+ for (const p of [primary.metaPath]) try {
450
+ await unlink(p);
451
+ } catch (err) {
452
+ if (err.code !== "ENOENT") throw err;
453
+ }
454
+ if (idx !== -1) {
455
+ index.sessions.splice(idx, 1);
456
+ this.indexDirty = true;
457
+ await this.saveIndex();
458
+ }
459
+ log.info({ key }, "Session deleted");
460
+ return true;
461
+ });
333
462
  }
334
463
  async deleteMany(keys) {
335
464
  const success = [];
@@ -366,17 +495,7 @@ var SessionStore = class {
366
495
  const primary = this.sessionPathsForKey(key);
367
496
  const readAndNormalize = async (path) => {
368
497
  try {
369
- const data = await readFile(path, "utf-8");
370
- const messages = JSON.parse(data);
371
- if (hasProblematicMessages(messages)) {
372
- const cleaned = cleanTrailingErrors(messages);
373
- if (cleaned.length !== messages.length) log.info({
374
- key,
375
- original: messages.length,
376
- cleaned: cleaned.length
377
- }, "Cleaned problematic messages on load");
378
- return cleaned;
379
- }
498
+ const { messages } = parseStoredTranscriptJson(await readFile(path, "utf-8"));
380
499
  return messages;
381
500
  } catch {
382
501
  return null;
@@ -392,6 +511,17 @@ var SessionStore = class {
392
511
  return [];
393
512
  }
394
513
  /**
514
+ * Load the versioned transcript document (stable id, compaction history), or null if missing/invalid.
515
+ */
516
+ async loadTranscriptDocument(key) {
517
+ const { jsonPath } = this.sessionPathsForKey(key);
518
+ try {
519
+ return parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).envelope;
520
+ } catch {
521
+ return null;
522
+ }
523
+ }
524
+ /**
395
525
  * Find the most recent archived session file for a given key.
396
526
  * Archived files have format: {safeKey}.{timestamp}.json
397
527
  */
@@ -400,7 +530,7 @@ var SessionStore = class {
400
530
  const shardDir = join(this.archiveDir, resolveSessionShardRelativePath(sessionKey));
401
531
  const scanDir = async (dir) => {
402
532
  try {
403
- const matchingFiles = (await readdir(dir)).filter((f) => f.startsWith(`${safeKey}.`) && f.endsWith(".json") && !f.endsWith(".meta.json")).sort().reverse();
533
+ const matchingFiles = (await readdir(dir)).filter((f) => f.startsWith(`${safeKey}.`) && f.endsWith(".json") && !f.endsWith(".meta.json") && !f.includes(".compaction-backup.")).sort().reverse();
404
534
  if (matchingFiles.length === 0) return null;
405
535
  return join(dir, matchingFiles[0]);
406
536
  } catch {
@@ -411,10 +541,24 @@ var SessionStore = class {
411
541
  if (inShard) return inShard;
412
542
  return await scanDir(this.archiveDir);
413
543
  }
414
- async saveMessages(key, messages) {
544
+ /**
545
+ * Persist transcript JSON + merge session row into the index. Caller must hold {@link runStoreMutation} (or be nested under it).
546
+ * Transcript is stored as a versioned document (pi-style header) with stable {@link XopcSessionTranscriptV1.id}.
547
+ */
548
+ async writeSessionTranscriptFromStoredRows(key, storedRows, options) {
415
549
  const { dir, jsonPath } = this.sessionPathsForKey(key);
416
550
  await mkdir(dir, { recursive: true });
417
- await writeFile(jsonPath, JSON.stringify(messages, null, 2));
551
+ let previous = null;
552
+ try {
553
+ previous = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).envelope;
554
+ } catch {}
555
+ const doc = buildTranscriptEnvelope({
556
+ storedRows,
557
+ previous,
558
+ appendCompaction: options?.appendCompaction
559
+ });
560
+ await writeTextAtomic(jsonPath, JSON.stringify(doc, null, 2));
561
+ const llmMessages = buildSessionContextForLlm(storedRows);
418
562
  const index = await this.loadIndex();
419
563
  const existingIdx = index.sessions.findIndex((s) => s.key === key);
420
564
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -428,10 +572,13 @@ var SessionStore = class {
428
572
  ...prev,
429
573
  sourceChannel: channel,
430
574
  sourceChatId: chatId,
431
- messageCount: messages.length,
432
- estimatedTokens: this.estimateTokens(messages),
575
+ messageCount: llmMessages.length,
576
+ estimatedTokens: this.estimateTokens(llmMessages),
433
577
  updatedAt: now,
434
578
  lastAccessedAt: now,
579
+ transcriptId: doc.id,
580
+ sessionStartedAt: prev.sessionStartedAt ?? doc.createdAt,
581
+ lastInteractionAt: now,
435
582
  routing: routing || prev.routing,
436
583
  ...isCronSession ? {
437
584
  sessionType: "cron",
@@ -449,8 +596,8 @@ var SessionStore = class {
449
596
  } : {},
450
597
  stats: {
451
598
  ...prev.stats,
452
- messageCount: messages.length,
453
- tokenCount: this.estimateTokens(messages),
599
+ messageCount: llmMessages.length,
600
+ tokenCount: this.estimateTokens(llmMessages),
454
601
  lastTurnAt: Date.now()
455
602
  }
456
603
  };
@@ -461,8 +608,11 @@ var SessionStore = class {
461
608
  createdAt: now,
462
609
  updatedAt: now,
463
610
  lastAccessedAt: now,
464
- messageCount: messages.length,
465
- estimatedTokens: this.estimateTokens(messages),
611
+ transcriptId: doc.id,
612
+ sessionStartedAt: doc.createdAt,
613
+ lastInteractionAt: now,
614
+ messageCount: llmMessages.length,
615
+ estimatedTokens: this.estimateTokens(llmMessages),
466
616
  compactedCount: 0,
467
617
  sourceChannel: channel,
468
618
  sourceChatId: chatId,
@@ -476,8 +626,8 @@ var SessionStore = class {
476
626
  customData: { heartbeatTarget: chatId }
477
627
  } : {},
478
628
  stats: {
479
- messageCount: messages.length,
480
- tokenCount: this.estimateTokens(messages),
629
+ messageCount: llmMessages.length,
630
+ tokenCount: this.estimateTokens(llmMessages),
481
631
  lastTurnAt: Date.now()
482
632
  }
483
633
  });
@@ -485,6 +635,43 @@ var SessionStore = class {
485
635
  await this.saveIndex();
486
636
  invalidateSessionSearchIndexCache();
487
637
  }
638
+ async writeSessionTranscriptAndUpdateIndex(key, messages, options) {
639
+ const { jsonPath } = this.sessionPathsForKey(key);
640
+ let storedRows = messages;
641
+ try {
642
+ const parsed = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8"));
643
+ if (parsed.rows.some((r) => isTranscriptContextEntry(r))) storedRows = mergeLlmMessagesPreservingContextRows(parsed.rows, messages);
644
+ } catch {}
645
+ await this.writeSessionTranscriptFromStoredRows(key, storedRows, options);
646
+ }
647
+ /**
648
+ * Append a persisted-only transcript row (`kind: 'context'`), visible on disk and in session search
649
+ * after stripping, but never returned from {@link loadMessages}.
650
+ */
651
+ async appendTranscriptContextEntry(key, entry) {
652
+ return this.runStoreMutation(async () => {
653
+ this.invalidateIndexCache();
654
+ const { jsonPath } = this.sessionPathsForKey(key);
655
+ let rows = [];
656
+ try {
657
+ rows = parseStoredTranscriptJson(await readFile(jsonPath, "utf-8")).rows;
658
+ } catch {}
659
+ const row = {
660
+ kind: "context",
661
+ id: typeof entry.id === "string" ? entry.id : void 0,
662
+ text: typeof entry.text === "string" ? entry.text : void 0,
663
+ data: entry.data,
664
+ createdAt: entry.createdAt ?? (/* @__PURE__ */ new Date()).toISOString()
665
+ };
666
+ await this.writeSessionTranscriptFromStoredRows(key, [...rows, row], {});
667
+ });
668
+ }
669
+ async saveMessages(key, messages) {
670
+ return this.runStoreMutation(async () => {
671
+ this.invalidateIndexCache();
672
+ await this.writeSessionTranscriptAndUpdateIndex(key, messages);
673
+ });
674
+ }
488
675
  /**
489
676
  * Get window stats for messages
490
677
  */
@@ -513,16 +700,27 @@ var SessionStore = class {
513
700
  */
514
701
  async applyCompaction(key, messages, result) {
515
702
  const compacted = this.compactor.applyCompaction(messages, result);
516
- await this.saveMessages(key, compacted);
517
- const metadata = await this.getMetadata(key);
518
- if (metadata) await this.updateMetadata(key, { compactedCount: metadata.compactedCount + 1 });
519
- log.info({
520
- key,
521
- tokensBefore: result.tokensBefore,
522
- tokensAfter: result.tokensAfter,
523
- keptMessages: compacted.length
524
- }, "Session compacted");
525
- return compacted;
703
+ return this.runStoreMutation(async () => {
704
+ this.invalidateIndexCache();
705
+ const { jsonPath } = this.sessionPathsForKey(key);
706
+ await this.captureCompactionCheckpointIfExists(key, jsonPath);
707
+ await this.writeSessionTranscriptAndUpdateIndex(key, compacted, { appendCompaction: {
708
+ at: (/* @__PURE__ */ new Date()).toISOString(),
709
+ summary: result.summary,
710
+ firstKeptIndex: result.firstKeptIndex,
711
+ tokensBefore: result.tokensBefore,
712
+ tokensAfter: result.tokensAfter
713
+ } });
714
+ const metadata = await this.getMetadata(key);
715
+ if (metadata) await this.updateMetadata(key, { compactedCount: metadata.compactedCount + 1 });
716
+ log.info({
717
+ key,
718
+ tokensBefore: result.tokensBefore,
719
+ tokensAfter: result.tokensAfter,
720
+ keptMessages: compacted.length
721
+ }, "Session compacted");
722
+ return compacted;
723
+ });
526
724
  }
527
725
  /**
528
726
  * Compact session with LLM summary
@@ -545,6 +743,81 @@ var SessionStore = class {
545
743
  lastCompactionAt: void 0
546
744
  };
547
745
  }
746
+ /**
747
+ * List pre-compaction transcript snapshots for a session (newest first).
748
+ */
749
+ async listCompactionCheckpoints(key) {
750
+ const safeKey = this.sanitizeKey(key);
751
+ const dir = join(this.sessionsDir, resolveSessionShardRelativePath(key));
752
+ const prefix = this.checkpointBasenamePrefix(safeKey);
753
+ let names;
754
+ try {
755
+ names = await readdir(dir);
756
+ } catch {
757
+ return [];
758
+ }
759
+ const files = names.filter((n) => n.startsWith(prefix) && n.endsWith(".json"));
760
+ const valid = (await Promise.all(files.map(async (name) => {
761
+ const p = join(dir, name);
762
+ try {
763
+ const s = await stat(p);
764
+ const id = name.slice(prefix.length, -5);
765
+ if (!normalizeCompactionCheckpointId(id)) return null;
766
+ return {
767
+ id: normalizeCompactionCheckpointId(id),
768
+ sizeBytes: s.size,
769
+ modifiedAt: new Date(s.mtimeMs).toISOString()
770
+ };
771
+ } catch {
772
+ return null;
773
+ }
774
+ }))).filter((r) => r !== null);
775
+ valid.sort((a, b) => b.modifiedAt.localeCompare(a.modifiedAt));
776
+ return valid;
777
+ }
778
+ /**
779
+ * Metadata for a single compaction checkpoint file.
780
+ */
781
+ async getCompactionCheckpointDetail(key, checkpointId) {
782
+ const id = normalizeCompactionCheckpointId(checkpointId);
783
+ if (!id) return null;
784
+ const safeKey = this.sanitizeKey(key);
785
+ const cpPath = join(join(this.sessionsDir, resolveSessionShardRelativePath(key)), `${this.checkpointBasenamePrefix(safeKey)}${id}.json`);
786
+ if (!existsSync(cpPath)) return null;
787
+ try {
788
+ const { messages } = parseStoredTranscriptJson(await readFile(cpPath, "utf-8"));
789
+ const s = await stat(cpPath);
790
+ return {
791
+ id,
792
+ sizeBytes: s.size,
793
+ modifiedAt: new Date(s.mtimeMs).toISOString(),
794
+ messageCount: messages.length
795
+ };
796
+ } catch {
797
+ return null;
798
+ }
799
+ }
800
+ /**
801
+ * Restore main transcript from a pre-compaction snapshot (then re-wrap + index sync).
802
+ * Does not delete the checkpoint file.
803
+ */
804
+ async restoreCompactionCheckpoint(key, checkpointId) {
805
+ const id = normalizeCompactionCheckpointId(checkpointId);
806
+ if (!id) throw new Error("Invalid checkpoint id");
807
+ return this.runStoreMutation(async () => {
808
+ const safeKey = this.sanitizeKey(key);
809
+ const cpPath = join(join(this.sessionsDir, resolveSessionShardRelativePath(key)), `${this.checkpointBasenamePrefix(safeKey)}${id}.json`);
810
+ if (!existsSync(cpPath)) throw new Error(`Checkpoint not found: ${id}`);
811
+ const { jsonPath } = this.sessionPathsForKey(key);
812
+ await copyFile(cpPath, jsonPath);
813
+ const messages = await this.loadMessages(key);
814
+ await this.writeSessionTranscriptAndUpdateIndex(key, messages);
815
+ log.info({
816
+ key,
817
+ checkpointId: id
818
+ }, "Session transcript restored from compaction checkpoint");
819
+ });
820
+ }
548
821
  /** Alias for delete */
549
822
  async deleteSession(key) {
550
823
  return this.delete(key);
@@ -568,15 +841,20 @@ var SessionStore = class {
568
841
  return this.extractTextContent(m.content).toLowerCase().includes(keywordLower);
569
842
  }));
570
843
  }
844
+ /**
845
+ * JSON export includes API-shaped `messages` (LLM-only) plus `transcriptRows` (full on-disk order).
846
+ */
571
847
  async exportSession(key, format) {
572
848
  const detail = await this.get(key);
573
849
  if (!detail) throw new Error(`Session not found: ${key}`);
574
850
  if (format === "json") {
851
+ const transcriptRows = await this.loadTranscriptRows(key);
575
852
  const exportData = {
576
853
  version: INDEX_VERSION,
577
854
  exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
578
855
  metadata: detail,
579
- messages: detail.messages
856
+ messages: detail.messages,
857
+ transcriptRows
580
858
  };
581
859
  return JSON.stringify(exportData, null, 2);
582
860
  } else {
@@ -707,45 +985,49 @@ var SessionStore = class {
707
985
  });
708
986
  }
709
987
  async moveToArchive(key) {
710
- const safeKey = this.sanitizeKey(key);
711
- const primary = this.sessionPathsForKey(key);
712
- const sourcePath = existsSync(primary.jsonPath) ? primary.jsonPath : null;
713
- if (!sourcePath) return;
714
- const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
715
- const archiveShard = join(this.archiveDir, resolveSessionShardRelativePath(key));
716
- await mkdir(archiveShard, { recursive: true });
717
- const targetPath = join(archiveShard, `${safeKey}.${timestamp}.json`);
718
- try {
719
- await writeFile(targetPath, await readFile(sourcePath, "utf-8"));
720
- await unlink(sourcePath);
721
- const metaSource = primary.metaPath;
722
- const metaTarget = join(archiveShard, `${safeKey}.${timestamp}.meta.json`);
988
+ return this.runStoreMutation(async () => {
989
+ const safeKey = this.sanitizeKey(key);
990
+ const primary = this.sessionPathsForKey(key);
991
+ const sourcePath = existsSync(primary.jsonPath) ? primary.jsonPath : null;
992
+ if (!sourcePath) return;
993
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
994
+ const archiveShard = join(this.archiveDir, resolveSessionShardRelativePath(key));
995
+ await mkdir(archiveShard, { recursive: true });
996
+ const targetPath = join(archiveShard, `${safeKey}.${timestamp}.json`);
723
997
  try {
724
- await writeFile(metaTarget, await readFile(metaSource, "utf-8"));
725
- await unlink(metaSource);
726
- } catch {}
727
- } catch (err) {
728
- if (err.code !== "ENOENT") throw err;
729
- }
998
+ await writeTextAtomic(targetPath, await readFile(sourcePath, "utf-8"));
999
+ await unlink(sourcePath);
1000
+ const metaSource = primary.metaPath;
1001
+ const metaTarget = join(archiveShard, `${safeKey}.${timestamp}.meta.json`);
1002
+ try {
1003
+ await writeTextAtomic(metaTarget, await readFile(metaSource, "utf-8"));
1004
+ await unlink(metaSource);
1005
+ } catch {}
1006
+ } catch (err) {
1007
+ if (err.code !== "ENOENT") throw err;
1008
+ }
1009
+ });
730
1010
  }
731
1011
  async moveFromArchive(key) {
732
- const sourcePath = await this.findMostRecentArchive(key);
733
- if (!sourcePath) return;
734
- const primary = this.sessionPathsForKey(key);
735
- await mkdir(primary.dir, { recursive: true });
736
- const targetPath = primary.jsonPath;
737
- try {
738
- await writeFile(targetPath, await readFile(sourcePath, "utf-8"));
739
- await unlink(sourcePath);
740
- const metaSource = sourcePath.replace(".json", ".meta.json");
741
- const metaTarget = primary.metaPath;
1012
+ return this.runStoreMutation(async () => {
1013
+ const sourcePath = await this.findMostRecentArchive(key);
1014
+ if (!sourcePath) return;
1015
+ const primary = this.sessionPathsForKey(key);
1016
+ await mkdir(primary.dir, { recursive: true });
1017
+ const targetPath = primary.jsonPath;
742
1018
  try {
743
- await writeFile(metaTarget, await readFile(metaSource, "utf-8"));
744
- await unlink(metaSource);
745
- } catch {}
746
- } catch (err) {
747
- if (err.code !== "ENOENT") throw err;
748
- }
1019
+ await writeTextAtomic(targetPath, await readFile(sourcePath, "utf-8"));
1020
+ await unlink(sourcePath);
1021
+ const metaSource = sourcePath.replace(".json", ".meta.json");
1022
+ const metaTarget = primary.metaPath;
1023
+ try {
1024
+ await writeTextAtomic(metaTarget, await readFile(metaSource, "utf-8"));
1025
+ await unlink(metaSource);
1026
+ } catch {}
1027
+ } catch (err) {
1028
+ if (err.code !== "ENOENT") throw err;
1029
+ }
1030
+ });
749
1031
  }
750
1032
  };
751
1033
  //#endregion