@desktalk/core 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +82 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/frontend/assets/frontend-B3QNYf3p.js +413 -0
  7. package/dist/frontend/assets/frontend-B3QNYf3p.js.map +1 -0
  8. package/dist/frontend/assets/frontend-B4aeXn9d.js +416 -0
  9. package/dist/frontend/assets/frontend-B4aeXn9d.js.map +1 -0
  10. package/dist/frontend/assets/frontend-BwyRSlHp.js +6513 -0
  11. package/dist/frontend/assets/frontend-BwyRSlHp.js.map +1 -0
  12. package/dist/frontend/assets/frontend-Dix2OWTT.js +229 -0
  13. package/dist/frontend/assets/frontend-Dix2OWTT.js.map +1 -0
  14. package/dist/frontend/assets/frontend-Dx41dEM9.js +407 -0
  15. package/dist/frontend/assets/frontend-Dx41dEM9.js.map +1 -0
  16. package/dist/frontend/assets/frontend-WpQng8Mt.js +1991 -0
  17. package/dist/frontend/assets/frontend-WpQng8Mt.js.map +1 -0
  18. package/dist/frontend/assets/frontend-rTwBdJbn.js +2123 -0
  19. package/dist/frontend/assets/frontend-rTwBdJbn.js.map +1 -0
  20. package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js +2 -0
  21. package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js.map +1 -0
  22. package/dist/frontend/assets/index-C5-XUOS7.js +1863 -0
  23. package/dist/frontend/assets/index-C5-XUOS7.js.map +1 -0
  24. package/dist/frontend/assets/index-C_e3_6yE.css +1 -0
  25. package/dist/frontend/index.html +22 -0
  26. package/dist/frontend/pcm-capture-processor.js +65 -0
  27. package/dist/i18n/manifest.json +34 -0
  28. package/dist/i18n/zh-CN.json +7 -0
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +6 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/server/admin-routes.d.ts +14 -0
  34. package/dist/server/admin-routes.d.ts.map +1 -0
  35. package/dist/server/admin-routes.js +118 -0
  36. package/dist/server/admin-routes.js.map +1 -0
  37. package/dist/server/api-routes.d.ts +8 -0
  38. package/dist/server/api-routes.d.ts.map +1 -0
  39. package/dist/server/api-routes.js +203 -0
  40. package/dist/server/api-routes.js.map +1 -0
  41. package/dist/server/auth-routes.d.ts +19 -0
  42. package/dist/server/auth-routes.d.ts.map +1 -0
  43. package/dist/server/auth-routes.js +155 -0
  44. package/dist/server/auth-routes.js.map +1 -0
  45. package/dist/server/dtfs-routes.d.ts +3 -0
  46. package/dist/server/dtfs-routes.d.ts.map +1 -0
  47. package/dist/server/dtfs-routes.js +183 -0
  48. package/dist/server/dtfs-routes.js.map +1 -0
  49. package/dist/server/index.d.ts +15 -0
  50. package/dist/server/index.d.ts.map +1 -0
  51. package/dist/server/index.js +158 -0
  52. package/dist/server/index.js.map +1 -0
  53. package/dist/server/monaco-routes.d.ts +3 -0
  54. package/dist/server/monaco-routes.d.ts.map +1 -0
  55. package/dist/server/monaco-routes.js +45 -0
  56. package/dist/server/monaco-routes.js.map +1 -0
  57. package/dist/server/voice-routes.d.ts +7 -0
  58. package/dist/server/voice-routes.d.ts.map +1 -0
  59. package/dist/server/voice-routes.js +142 -0
  60. package/dist/server/voice-routes.js.map +1 -0
  61. package/dist/server/ws-routes.d.ts +29 -0
  62. package/dist/server/ws-routes.d.ts.map +1 -0
  63. package/dist/server/ws-routes.js +334 -0
  64. package/dist/server/ws-routes.js.map +1 -0
  65. package/dist/services/ai/action-tool.d.ts +9 -0
  66. package/dist/services/ai/action-tool.d.ts.map +1 -0
  67. package/dist/services/ai/action-tool.js +51 -0
  68. package/dist/services/ai/action-tool.js.map +1 -0
  69. package/dist/services/ai/app-tools.d.ts +15 -0
  70. package/dist/services/ai/app-tools.d.ts.map +1 -0
  71. package/dist/services/ai/app-tools.js +119 -0
  72. package/dist/services/ai/app-tools.js.map +1 -0
  73. package/dist/services/ai/chat-service.d.ts +27 -0
  74. package/dist/services/ai/chat-service.d.ts.map +1 -0
  75. package/dist/services/ai/chat-service.js +213 -0
  76. package/dist/services/ai/chat-service.js.map +1 -0
  77. package/dist/services/ai/create-liveapp-tool.d.ts +15 -0
  78. package/dist/services/ai/create-liveapp-tool.d.ts.map +1 -0
  79. package/dist/services/ai/create-liveapp-tool.js +142 -0
  80. package/dist/services/ai/create-liveapp-tool.js.map +1 -0
  81. package/dist/services/ai/desktop-tool.d.ts +27 -0
  82. package/dist/services/ai/desktop-tool.d.ts.map +1 -0
  83. package/dist/services/ai/desktop-tool.js +106 -0
  84. package/dist/services/ai/desktop-tool.js.map +1 -0
  85. package/dist/services/ai/edit-history.d.ts +16 -0
  86. package/dist/services/ai/edit-history.d.ts.map +1 -0
  87. package/dist/services/ai/edit-history.js +137 -0
  88. package/dist/services/ai/edit-history.js.map +1 -0
  89. package/dist/services/ai/edit-tool.d.ts +9 -0
  90. package/dist/services/ai/edit-tool.d.ts.map +1 -0
  91. package/dist/services/ai/edit-tool.js +113 -0
  92. package/dist/services/ai/edit-tool.js.map +1 -0
  93. package/dist/services/ai/generate-html-tool.d.ts +15 -0
  94. package/dist/services/ai/generate-html-tool.d.ts.map +1 -0
  95. package/dist/services/ai/generate-html-tool.js +140 -0
  96. package/dist/services/ai/generate-html-tool.js.map +1 -0
  97. package/dist/services/ai/generate-icon-tool.d.ts +10 -0
  98. package/dist/services/ai/generate-icon-tool.d.ts.map +1 -0
  99. package/dist/services/ai/generate-icon-tool.js +58 -0
  100. package/dist/services/ai/generate-icon-tool.js.map +1 -0
  101. package/dist/services/ai/html-bridge-script.d.ts +2 -0
  102. package/dist/services/ai/html-bridge-script.d.ts.map +1 -0
  103. package/dist/services/ai/html-bridge-script.js +2 -0
  104. package/dist/services/ai/html-bridge-script.js.map +1 -0
  105. package/dist/services/ai/html-guidelines-tool.d.ts +3 -0
  106. package/dist/services/ai/html-guidelines-tool.d.ts.map +1 -0
  107. package/dist/services/ai/html-guidelines-tool.js +157 -0
  108. package/dist/services/ai/html-guidelines-tool.js.map +1 -0
  109. package/dist/services/ai/html-stream-coordinator.d.ts +92 -0
  110. package/dist/services/ai/html-stream-coordinator.d.ts.map +1 -0
  111. package/dist/services/ai/html-stream-coordinator.js +314 -0
  112. package/dist/services/ai/html-stream-coordinator.js.map +1 -0
  113. package/dist/services/ai/html-theme-link.d.ts +9 -0
  114. package/dist/services/ai/html-theme-link.d.ts.map +1 -0
  115. package/dist/services/ai/html-theme-link.js +12 -0
  116. package/dist/services/ai/html-theme-link.js.map +1 -0
  117. package/dist/services/ai/html-ui-script.d.ts +9 -0
  118. package/dist/services/ai/html-ui-script.d.ts.map +1 -0
  119. package/dist/services/ai/html-ui-script.js +9 -0
  120. package/dist/services/ai/html-ui-script.js.map +1 -0
  121. package/dist/services/ai/image-generation-service.d.ts +26 -0
  122. package/dist/services/ai/image-generation-service.d.ts.map +1 -0
  123. package/dist/services/ai/image-generation-service.js +205 -0
  124. package/dist/services/ai/image-generation-service.js.map +1 -0
  125. package/dist/services/ai/manual-pages/desktop-actions.md +36 -0
  126. package/dist/services/ai/manual-pages/desktop-windows.md +24 -0
  127. package/dist/services/ai/manual-pages/dt-badge.md +36 -0
  128. package/dist/services/ai/manual-pages/dt-button.md +38 -0
  129. package/dist/services/ai/manual-pages/dt-card.md +22 -0
  130. package/dist/services/ai/manual-pages/dt-chart.md +261 -0
  131. package/dist/services/ai/manual-pages/dt-divider.md +25 -0
  132. package/dist/services/ai/manual-pages/dt-grid.md +29 -0
  133. package/dist/services/ai/manual-pages/dt-list-view.md +96 -0
  134. package/dist/services/ai/manual-pages/dt-markdown-editor.md +90 -0
  135. package/dist/services/ai/manual-pages/dt-markdown.md +86 -0
  136. package/dist/services/ai/manual-pages/dt-select.md +21 -0
  137. package/dist/services/ai/manual-pages/dt-stack.md +31 -0
  138. package/dist/services/ai/manual-pages/dt-stat.md +43 -0
  139. package/dist/services/ai/manual-pages/dt-table-view.md +120 -0
  140. package/dist/services/ai/manual-pages/dt-tooltip.md +18 -0
  141. package/dist/services/ai/manual-pages/editing-preview.md +25 -0
  142. package/dist/services/ai/manual-pages/html-actions.md +74 -0
  143. package/dist/services/ai/manual-pages/html-bridge.md +187 -0
  144. package/dist/services/ai/manual-pages/html-components.md +66 -0
  145. package/dist/services/ai/manual-pages/html-examples.md +185 -0
  146. package/dist/services/ai/manual-pages/html-layouts.md +128 -0
  147. package/dist/services/ai/manual-pages/html-storage.md +153 -0
  148. package/dist/services/ai/manual-pages/html-tokens.md +26 -0
  149. package/dist/services/ai/manual-pages/index.d.ts +10 -0
  150. package/dist/services/ai/manual-pages/index.d.ts.map +1 -0
  151. package/dist/services/ai/manual-pages/index.js +186 -0
  152. package/dist/services/ai/manual-pages/index.js.map +1 -0
  153. package/dist/services/ai/manual-tool.d.ts +3 -0
  154. package/dist/services/ai/manual-tool.d.ts.map +1 -0
  155. package/dist/services/ai/manual-tool.js +104 -0
  156. package/dist/services/ai/manual-tool.js.map +1 -0
  157. package/dist/services/ai/pi-session-service.d.ts +101 -0
  158. package/dist/services/ai/pi-session-service.d.ts.map +1 -0
  159. package/dist/services/ai/pi-session-service.js +697 -0
  160. package/dist/services/ai/pi-session-service.js.map +1 -0
  161. package/dist/services/ai/providers.d.ts +21 -0
  162. package/dist/services/ai/providers.d.ts.map +1 -0
  163. package/dist/services/ai/providers.js +93 -0
  164. package/dist/services/ai/providers.js.map +1 -0
  165. package/dist/services/ai/redo-edit-tool.d.ts +9 -0
  166. package/dist/services/ai/redo-edit-tool.d.ts.map +1 -0
  167. package/dist/services/ai/redo-edit-tool.js +44 -0
  168. package/dist/services/ai/redo-edit-tool.js.map +1 -0
  169. package/dist/services/ai/system-prompt.d.ts +7 -0
  170. package/dist/services/ai/system-prompt.d.ts.map +1 -0
  171. package/dist/services/ai/system-prompt.js +72 -0
  172. package/dist/services/ai/system-prompt.js.map +1 -0
  173. package/dist/services/ai/undo-edit-tool.d.ts +9 -0
  174. package/dist/services/ai/undo-edit-tool.d.ts.map +1 -0
  175. package/dist/services/ai/undo-edit-tool.js +44 -0
  176. package/dist/services/ai/undo-edit-tool.js.map +1 -0
  177. package/dist/services/ai/window-tools.d.ts +27 -0
  178. package/dist/services/ai/window-tools.d.ts.map +1 -0
  179. package/dist/services/ai/window-tools.js +155 -0
  180. package/dist/services/ai/window-tools.js.map +1 -0
  181. package/dist/services/backend-host.d.ts +10 -0
  182. package/dist/services/backend-host.d.ts.map +1 -0
  183. package/dist/services/backend-host.js +117 -0
  184. package/dist/services/backend-host.js.map +1 -0
  185. package/dist/services/backend-ipc.d.ts +60 -0
  186. package/dist/services/backend-ipc.d.ts.map +1 -0
  187. package/dist/services/backend-ipc.js +2 -0
  188. package/dist/services/backend-ipc.js.map +1 -0
  189. package/dist/services/backend-process-manager.d.ts +60 -0
  190. package/dist/services/backend-process-manager.d.ts.map +1 -0
  191. package/dist/services/backend-process-manager.js +203 -0
  192. package/dist/services/backend-process-manager.js.map +1 -0
  193. package/dist/services/filesystem.d.ts +8 -0
  194. package/dist/services/filesystem.d.ts.map +1 -0
  195. package/dist/services/filesystem.js +94 -0
  196. package/dist/services/filesystem.js.map +1 -0
  197. package/dist/services/i18n.d.ts +28 -0
  198. package/dist/services/i18n.d.ts.map +1 -0
  199. package/dist/services/i18n.js +76 -0
  200. package/dist/services/i18n.js.map +1 -0
  201. package/dist/services/liveapp-icon.d.ts +9 -0
  202. package/dist/services/liveapp-icon.d.ts.map +1 -0
  203. package/dist/services/liveapp-icon.js +28 -0
  204. package/dist/services/liveapp-icon.js.map +1 -0
  205. package/dist/services/liveapps.d.ts +12 -0
  206. package/dist/services/liveapps.d.ts.map +1 -0
  207. package/dist/services/liveapps.js +84 -0
  208. package/dist/services/liveapps.js.map +1 -0
  209. package/dist/services/logger.d.ts +34 -0
  210. package/dist/services/logger.d.ts.map +1 -0
  211. package/dist/services/logger.js +74 -0
  212. package/dist/services/logger.js.map +1 -0
  213. package/dist/services/messaging.d.ts +14 -0
  214. package/dist/services/messaging.d.ts.map +1 -0
  215. package/dist/services/messaging.js +41 -0
  216. package/dist/services/messaging.js.map +1 -0
  217. package/dist/services/miniapp-icon.d.ts +9 -0
  218. package/dist/services/miniapp-icon.d.ts.map +1 -0
  219. package/dist/services/miniapp-icon.js +25 -0
  220. package/dist/services/miniapp-icon.js.map +1 -0
  221. package/dist/services/miniapp-registry.d.ts +73 -0
  222. package/dist/services/miniapp-registry.d.ts.map +1 -0
  223. package/dist/services/miniapp-registry.js +144 -0
  224. package/dist/services/miniapp-registry.js.map +1 -0
  225. package/dist/services/onboarding-config.d.ts +37 -0
  226. package/dist/services/onboarding-config.d.ts.map +1 -0
  227. package/dist/services/onboarding-config.js +76 -0
  228. package/dist/services/onboarding-config.js.map +1 -0
  229. package/dist/services/preferences.d.ts +10 -0
  230. package/dist/services/preferences.d.ts.map +1 -0
  231. package/dist/services/preferences.js +48 -0
  232. package/dist/services/preferences.js.map +1 -0
  233. package/dist/services/proxy-dispatcher.d.ts +18 -0
  234. package/dist/services/proxy-dispatcher.d.ts.map +1 -0
  235. package/dist/services/proxy-dispatcher.js +33 -0
  236. package/dist/services/proxy-dispatcher.js.map +1 -0
  237. package/dist/services/storage.d.ts +7 -0
  238. package/dist/services/storage.d.ts.map +1 -0
  239. package/dist/services/storage.js +55 -0
  240. package/dist/services/storage.js.map +1 -0
  241. package/dist/services/theme-css.d.ts +21 -0
  242. package/dist/services/theme-css.d.ts.map +1 -0
  243. package/dist/services/theme-css.js +213 -0
  244. package/dist/services/theme-css.js.map +1 -0
  245. package/dist/services/user-db.d.ts +69 -0
  246. package/dist/services/user-db.d.ts.map +1 -0
  247. package/dist/services/user-db.js +175 -0
  248. package/dist/services/user-db.js.map +1 -0
  249. package/dist/services/voice/audio-format.d.ts +5 -0
  250. package/dist/services/voice/audio-format.d.ts.map +1 -0
  251. package/dist/services/voice/audio-format.js +27 -0
  252. package/dist/services/voice/audio-format.js.map +1 -0
  253. package/dist/services/voice/azure-openai-whisper-adapter.d.ts +23 -0
  254. package/dist/services/voice/azure-openai-whisper-adapter.d.ts.map +1 -0
  255. package/dist/services/voice/azure-openai-whisper-adapter.js +60 -0
  256. package/dist/services/voice/azure-openai-whisper-adapter.js.map +1 -0
  257. package/dist/services/voice/openai-whisper-adapter.d.ts +22 -0
  258. package/dist/services/voice/openai-whisper-adapter.d.ts.map +1 -0
  259. package/dist/services/voice/openai-whisper-adapter.js +61 -0
  260. package/dist/services/voice/openai-whisper-adapter.js.map +1 -0
  261. package/dist/services/voice/stt-adapter.d.ts +31 -0
  262. package/dist/services/voice/stt-adapter.d.ts.map +1 -0
  263. package/dist/services/voice/stt-adapter.js +8 -0
  264. package/dist/services/voice/stt-adapter.js.map +1 -0
  265. package/dist/services/voice/vad-segmenter.d.ts +68 -0
  266. package/dist/services/voice/vad-segmenter.d.ts.map +1 -0
  267. package/dist/services/voice/vad-segmenter.js +159 -0
  268. package/dist/services/voice/vad-segmenter.js.map +1 -0
  269. package/dist/services/voice/voice-session.d.ts +54 -0
  270. package/dist/services/voice/voice-session.d.ts.map +1 -0
  271. package/dist/services/voice/voice-session.js +137 -0
  272. package/dist/services/voice/voice-session.js.map +1 -0
  273. package/dist/services/window-manager.d.ts +94 -0
  274. package/dist/services/window-manager.d.ts.map +1 -0
  275. package/dist/services/window-manager.js +282 -0
  276. package/dist/services/window-manager.js.map +1 -0
  277. package/dist/services/workspace.d.ts +51 -0
  278. package/dist/services/workspace.d.ts.map +1 -0
  279. package/dist/services/workspace.js +144 -0
  280. package/dist/services/workspace.js.map +1 -0
  281. package/package.json +89 -0
@@ -0,0 +1,58 @@
1
+ import { writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { Type } from '@sinclair/typebox';
4
+ import { broadcastEvent } from '../messaging.js';
5
+ const generateIconSchema = Type.Object({
6
+ liveAppId: Type.String({ description: 'Directory name of the LiveApp to generate an icon for.' }),
7
+ description: Type.String({ description: 'Short visual description of the desired app icon.' }),
8
+ });
9
+ export function createGenerateIconTool(options) {
10
+ const { imageGenerationService, getCurrentUsername, workspaceDataDir } = options;
11
+ return {
12
+ name: 'generate_icon',
13
+ label: 'Generate Icon',
14
+ description: 'Generate a 256x256 PNG icon for an existing LiveApp and save it as icon.png in the LiveApp directory.',
15
+ promptSnippet: 'Generate or regenerate an icon for any LiveApp.',
16
+ promptGuidelines: [
17
+ 'Use this after `create_liveapp`, or later for an existing LiveApp that has no icon yet or needs a refreshed icon.',
18
+ 'Pass the LiveApp directory name as `liveAppId` and a short visual description as `description`.',
19
+ 'If you need to identify an existing LiveApp, use the Desktop Context, `desktop` action="list", or a focused Preview window state to find its LiveApp ID.',
20
+ 'If this tool reports `{ ok: false }`, continue normally without retrying. The app can keep the default icon.',
21
+ ],
22
+ parameters: generateIconSchema,
23
+ async execute(_toolCallId, params) {
24
+ const input = params;
25
+ const liveAppDir = join(workspaceDataDir, 'home', getCurrentUsername(), '.data', 'liveapps', input.liveAppId);
26
+ const iconPath = join(liveAppDir, 'icon.png');
27
+ try {
28
+ const result = await imageGenerationService.generateIcon(input.description);
29
+ writeFileSync(iconPath, result.image);
30
+ broadcastEvent('preview', 'liveapps.changed', {
31
+ path: iconPath,
32
+ reason: 'icon-generated',
33
+ });
34
+ const payload = {
35
+ ok: true,
36
+ path: iconPath,
37
+ provider: result.provider,
38
+ model: result.model,
39
+ };
40
+ return {
41
+ content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
42
+ details: payload,
43
+ };
44
+ }
45
+ catch (error) {
46
+ const payload = {
47
+ ok: false,
48
+ reason: error instanceof Error ? error.message : String(error),
49
+ };
50
+ return {
51
+ content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
52
+ details: payload,
53
+ };
54
+ }
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=generate-icon-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-icon-tool.js","sourceRoot":"","sources":["../../../src/services/ai/generate-icon-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wDAAwD,EAAE,CAAC;IACjG,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC;CAC/F,CAAC,CAAC;AAaH,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAEjF,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,uGAAuG;QACzG,aAAa,EAAE,iDAAiD;QAChE,gBAAgB,EAAE;YAChB,mHAAmH;YACnH,iGAAiG;YACjG,0JAA0J;YAC1J,8GAA8G;SAC/G;QACD,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,KAAK,GAAG,MAA4B,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAI,CACrB,gBAAgB,EAChB,MAAM,EACN,kBAAkB,EAAE,EACpB,OAAO,EACP,UAAU,EACV,KAAK,CAAC,SAAS,CAChB,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAE9C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC5E,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtC,cAAc,CAAC,SAAS,EAAE,kBAAkB,EAAE;oBAC5C,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG;oBACd,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBACnE,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG;oBACd,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC/D,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBACnE,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createHtmlBridgeScript } from '@desktalk/sdk';
2
+ //# sourceMappingURL=html-bridge-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-bridge-script.d.ts","sourceRoot":"","sources":["../../../src/services/ai/html-bridge-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createHtmlBridgeScript } from '@desktalk/sdk';
2
+ //# sourceMappingURL=html-bridge-script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-bridge-script.js","sourceRoot":"","sources":["../../../src/services/ai/html-bridge-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from '@mariozechner/pi-coding-agent';
2
+ export declare function createReadHtmlGuidelinesTool(): ToolDefinition;
3
+ //# sourceMappingURL=html-guidelines-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-guidelines-tool.d.ts","sourceRoot":"","sources":["../../../src/services/ai/html-guidelines-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAiJpE,wBAAgB,4BAA4B,IAAI,cAAc,CAe7D"}
@@ -0,0 +1,157 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ const readHtmlGuidelinesSchema = Type.Object({});
3
+ const HTML_GUIDELINES = [
4
+ '# DeskTalk HTML Guidelines',
5
+ '',
6
+ 'Use these rules before calling `generate_html`.',
7
+ '',
8
+ '## Required',
9
+ '- Use semantic `--dt-*` CSS custom properties for all colors.',
10
+ '- Never hardcode hex, rgb, rgba, hsl, or oklch values.',
11
+ '- Provide a complete HTML document with `<html>`, `<head>`, and `<body>`.',
12
+ '- Inline CSS and JavaScript; do not reference external files or CDNs unless explicitly needed.',
13
+ '',
14
+ '## Semantic Tokens',
15
+ '- Backgrounds: `--dt-bg`, `--dt-bg-subtle`, `--dt-surface`, `--dt-surface-hover`, `--dt-surface-active`',
16
+ '- Text: `--dt-text`, `--dt-text-secondary`, `--dt-text-muted`, `--dt-text-on-accent`',
17
+ '- Borders: `--dt-border`, `--dt-border-subtle`, `--dt-border-strong`',
18
+ '- Accent: `--dt-accent`, `--dt-accent-hover`, `--dt-accent-active`, `--dt-accent-subtle`, `--dt-accent-ghost`',
19
+ '- Status: `--dt-danger`, `--dt-danger-subtle`, `--dt-success`, `--dt-success-subtle`, `--dt-warning`, `--dt-warning-subtle`, `--dt-info`, `--dt-info-subtle`',
20
+ '- Effects: `--dt-overlay`, `--dt-glass`, `--dt-shadow-color`',
21
+ '',
22
+ '## Auto-Injected Styles',
23
+ '- A `<link data-dt-theme>` stylesheet is injected automatically at execution time, loaded from the DeskTalk server.',
24
+ "- That stylesheet contains the full DeskTalk `:root { --dt-* }` token set for the user's current accent color and theme mode.",
25
+ '- It also contains a base stylesheet for `body`, headings, paragraphs, links, tables, cards, buttons, badges, `code`, and `pre`.',
26
+ '- A `window.DeskTalk` bridge is also injected automatically for generated HTML previews.',
27
+ '- `await DeskTalk.getState(selector)` supports: `desktop.summary`, `desktop.windows`, `desktop.focusedWindow`, `theme.current`, and `preview.context`.',
28
+ '- `DeskTalk.exec` and `DeskTalk.execute` are equivalent.',
29
+ '- Both accept a shell string: `await DeskTalk.exec("ls -la")` — this is automatically wrapped as `sh -c "ls -la"`.',
30
+ '- Both also accept explicit arguments: `await DeskTalk.exec("ls", ["-la"])` — this runs without a shell.',
31
+ '- An optional options object can be passed as the last argument: `await DeskTalk.exec("git", ["status"], { cwd: "subdir" })`.',
32
+ '- Commands on the dangerous list such as `rm`, `chmod`, `sudo`, `kill`, or destructive `git` subcommands trigger a native confirmation dialog before execution.',
33
+ '- Catastrophic commands such as filesystem formatting or `rm` against `/` are blocked outright.',
34
+ '- Available utility classes: `.badge`, `.badge-danger`, `.badge-success`, `.badge-warning`, `.badge-info`, `.btn`, `.text-muted`, `.text-secondary`, `.accent-bg`.',
35
+ '- **Do NOT create custom container classes** (e.g. `.card`, `.panel`, `.box`, `.section`, `.tile`, `.info-card`, `.stat-box`, or similar). Use `<dt-card>` for all visually distinct content sections (see Layout Rules below).',
36
+ '- Prefer those semantic tokens and utility classes over custom color literals or one-off palette definitions.',
37
+ '',
38
+ '## Typography (Pre-Styled — Do NOT Override)',
39
+ '- **Headings (`h1`–`h6`) and paragraphs (`p`) are fully styled by the injected base stylesheet.** Their font-size, font-weight, line-height, color, and spacing are pre-defined.',
40
+ '- **NEVER write CSS rules, inline `style` attributes, or `<style>` blocks that target `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, or `p`.** This includes font-size, font-weight, font-family, color, margin, padding, line-height, letter-spacing, and text-transform.',
41
+ '- Simply use the native HTML tags and the injected styles will apply automatically:',
42
+ ' - `<h1>` — 2rem, bold (700), tight letter-spacing. Use for main page titles.',
43
+ ' - `<h2>` — 1.5rem, semibold (600). Use for section titles.',
44
+ ' - `<h3>` — 1.25rem, semibold (600). Use for subsection titles.',
45
+ ' - `<h4>` — 1.125rem, semibold (600). Use for card/group headings.',
46
+ ' - `<h5>` — 1rem, semibold (600). Use for minor headings.',
47
+ ' - `<h6>` — 0.875rem, semibold (600), uppercase. Use for label-style headings.',
48
+ ' - `<p>` — 1rem, normal weight, secondary text color. Use for body text.',
49
+ '- To change text color, use the utility classes `.text-muted` or `.text-secondary`, or apply `color` via `--dt-*` tokens on a wrapper — **not** on the heading/paragraph itself.',
50
+ '',
51
+ '## Layout Rules — Content Sections',
52
+ '- **Every visually distinct content block MUST be wrapped in a `<dt-card>`.** This includes anything you would otherwise put in a styled `<div>` with background, border, padding, or shadow — such as cards, panels, tiles, info boxes, stat blocks, sections, containers, or groups.',
53
+ '- **NEVER create a `<div>` (or `<section>`) with custom CSS classes for layout containers.** No `.card`, `.panel`, `.box`, `.tile`, `.info-card`, `.stat-box`, `.section-block`, `.container`, or any similar class. Use `<dt-card>` instead.',
54
+ '- **NEVER write CSS that styles a `<div>` to look like a container** (e.g. adding background, border, border-radius, padding, or box-shadow to a class). That is what `<dt-card>` already provides.',
55
+ '- Use plain `<div>` only for structural layout (flexbox/grid wrappers with no visual styling beyond `display`, `gap`, `flex`, `grid`, `align-items`, `justify-content`, `width`, `max-width`, and `margin`).',
56
+ '',
57
+ '## DeskTalk Web Components',
58
+ '- The `@desktalk/ui` component library is **automatically loaded** via a `<script>` tag injected into every generated HTML preview.',
59
+ '- All `<dt-*>` custom elements are registered and ready to use — no additional scripts or imports needed.',
60
+ '',
61
+ '### `<dt-card>`',
62
+ '- Use for **any visually grouped content**: information panels, stat displays, status sections, feature cards, list items with backgrounds, settings groups, etc.',
63
+ '- A card container with a **solid accent-colored border** and **no border-radius**.',
64
+ '- Attributes:',
65
+ ' - `variant` — `"default"` (solid surface background), `"outlined"` (transparent background), `"filled"` (accent-subtle background). Default is `"default"`.',
66
+ '- Place any content inside as children (headings, paragraphs, buttons, etc.).',
67
+ '- Example — stat display:',
68
+ ' ```html',
69
+ ' <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;">',
70
+ ' <dt-card>',
71
+ ' <h6>CPU Usage</h6>',
72
+ ' <h2>42%</h2>',
73
+ ' <p>Normal load</p>',
74
+ ' </dt-card>',
75
+ ' <dt-card>',
76
+ ' <h6>Memory</h6>',
77
+ ' <h2>8.2 GB</h2>',
78
+ ' <p>of 16 GB used</p>',
79
+ ' </dt-card>',
80
+ ' <dt-card variant="filled">',
81
+ ' <h6>Disk</h6>',
82
+ ' <h2>256 GB</h2>',
83
+ ' <p>free space</p>',
84
+ ' </dt-card>',
85
+ ' </div>',
86
+ ' ```',
87
+ '- Example — simple info panel:',
88
+ ' ```html',
89
+ ' <dt-card variant="outlined">',
90
+ ' <h3>Notice</h3>',
91
+ ' <p>This card has a transparent background.</p>',
92
+ ' </dt-card>',
93
+ ' ```',
94
+ '',
95
+ '### `<dt-tooltip>`',
96
+ '- A tooltip that appears on hover/focus around its slotted child.',
97
+ '- Attributes: `content` (text), `placement` (top|bottom|left|right), `delay` (ms), `disabled`.',
98
+ '- Example:',
99
+ ' ```html',
100
+ ' <dt-tooltip content="Save file" placement="top">',
101
+ ' <button class="btn">Save</button>',
102
+ ' </dt-tooltip>',
103
+ ' ```',
104
+ '',
105
+ '## Bridge Examples',
106
+ '```html',
107
+ '<script>',
108
+ ' async function loadDesktopState() {',
109
+ " const desktop = await window.DeskTalk.getState('desktop.summary');",
110
+ ' console.log(desktop.windows);',
111
+ ' }',
112
+ '',
113
+ ' async function runCommand() {',
114
+ ' // Shell-style (simple, recommended for one-liners):',
115
+ " const top = await window.DeskTalk.exec('top -l 1 -n 0 | head -12');",
116
+ ' console.log(top.stdout);',
117
+ '',
118
+ ' // Explicit args (no shell, safer for untrusted input):',
119
+ " const git = await window.DeskTalk.exec('git', ['status', '--short']);",
120
+ ' console.log(git.stdout);',
121
+ ' }',
122
+ '</script>',
123
+ '```',
124
+ '',
125
+ '## Example',
126
+ '```html',
127
+ '<h1>Dashboard</h1>',
128
+ '<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px;">',
129
+ ' <dt-card>',
130
+ ' <h3>Status</h3>',
131
+ ' <p>All systems operational.</p>',
132
+ ' <span class="badge badge-success">Online</span>',
133
+ ' </dt-card>',
134
+ ' <dt-card variant="outlined">',
135
+ ' <h3>Activity</h3>',
136
+ ' <p>12 events in the last hour.</p>',
137
+ ' <button class="btn">View All</button>',
138
+ ' </dt-card>',
139
+ '</div>',
140
+ '```',
141
+ ].join('\n');
142
+ export function createReadHtmlGuidelinesTool() {
143
+ return {
144
+ name: 'read_html_guidelines',
145
+ label: 'Read HTML Guidelines',
146
+ description: 'Read the detailed DeskTalk HTML styling rules for generate_html, including allowed color tokens, injected classes, and examples.',
147
+ promptSnippet: 'Read detailed styling rules before using generate_html.',
148
+ parameters: readHtmlGuidelinesSchema,
149
+ async execute() {
150
+ return {
151
+ content: [{ type: 'text', text: HTML_GUIDELINES }],
152
+ details: { ok: true },
153
+ };
154
+ },
155
+ };
156
+ }
157
+ //# sourceMappingURL=html-guidelines-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-guidelines-tool.js","sourceRoot":"","sources":["../../../src/services/ai/html-guidelines-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type pino from 'pino';
2
+ import type { SendAiCommand } from './desktop-tool.js';
3
+ type PreferenceValue = string | number | boolean;
4
+ type PreferenceReader = (key: string) => PreferenceValue | undefined | Promise<PreferenceValue | undefined>;
5
+ export type HtmlStreamState = 'idle' | 'streaming' | 'done' | 'failed';
6
+ export interface HtmlStreamSession {
7
+ /** Unique stream identifier shared between coordinator and preview window. */
8
+ streamId: string;
9
+ /** Bridge authentication token. */
10
+ bridgeToken: string;
11
+ /** Current state of this streaming session. */
12
+ state: HtmlStreamState;
13
+ /** How much of the parsed `content` we've already sent to the preview. */
14
+ streamedContentLength: number;
15
+ /** Accumulated raw JSON argument string from toolcall_delta events. */
16
+ accumulatedJson: string;
17
+ /** The title extracted from partial JSON (used to open the window). */
18
+ title: string | null;
19
+ /** Whether the preview window has been opened. */
20
+ windowOpened: boolean;
21
+ /** Whether the synthetic preamble (theme + bridge) has been sent. */
22
+ preambleSent: boolean;
23
+ /** The window ID returned by sendAiCommand, if available. */
24
+ windowId: string | null;
25
+ /**
26
+ * Offset into the LLM `content` string where actual streamable content
27
+ * begins (right after the opening `<head…>` tag). Everything before this
28
+ * is structural markup (`<!DOCTYPE html><html><head>`) that the preamble
29
+ * already provides. Set to 0 if no `<head>` tag is found.
30
+ */
31
+ contentStartOffset: number;
32
+ }
33
+ export declare class HtmlStreamCoordinator {
34
+ /** The currently active streaming session, or null. */
35
+ private activeSession;
36
+ /**
37
+ * A promise chain that serializes all async operations (opening the window,
38
+ * sending the preamble, broadcasting chunks). Every call to `onToolcallDelta`
39
+ * appends to this chain so that operations execute in order without races.
40
+ */
41
+ private pendingWork;
42
+ private readonly sendAiCommand;
43
+ private readonly activateMiniApp;
44
+ private readonly getPreference;
45
+ private readonly log;
46
+ constructor(options: {
47
+ sendAiCommand: SendAiCommand;
48
+ activateMiniApp: (miniAppId: string) => void;
49
+ getPreference: PreferenceReader;
50
+ logger: pino.Logger;
51
+ });
52
+ /**
53
+ * Returns the active session, if any.
54
+ */
55
+ getActiveSession(): HtmlStreamSession | null;
56
+ /**
57
+ * Called when a `toolcall_start` event is detected for `create_liveapp`.
58
+ * Creates a new streaming session.
59
+ */
60
+ onToolcallStart(): void;
61
+ /**
62
+ * Called on each `toolcall_delta` event while a session is active.
63
+ *
64
+ * This method is synchronous — it accumulates the JSON fragment immediately,
65
+ * then queues any async work (window open, preamble, chunk broadcast) onto
66
+ * the serialized `pendingWork` chain so operations never race.
67
+ */
68
+ onToolcallDelta(delta: string): void;
69
+ /**
70
+ * Called when the `toolcall_end` event fires. The tool's `execute()` will run
71
+ * next with the complete params, so we just mark the LLM streaming as done.
72
+ */
73
+ onToolcallEnd(): void;
74
+ /**
75
+ * Called by `create-liveapp-tool.ts` execute() to finalize the stream.
76
+ *
77
+ * Waits for all pending async work (window open, preamble, chunk sends) to
78
+ * complete, then sends any remaining content and the done signal.
79
+ *
80
+ * Returns the session info so execute() can build its result, or null if
81
+ * no streaming session was active (fallback to non-streaming path).
82
+ */
83
+ finalize(finalContent: string): Promise<HtmlStreamSession | null>;
84
+ /**
85
+ * Abort the current session (e.g. on error).
86
+ */
87
+ abort(): void;
88
+ private openPreviewWindow;
89
+ private sendPreamble;
90
+ }
91
+ export {};
92
+ //# sourceMappingURL=html-stream-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-stream-coordinator.d.ts","sourceRoot":"","sources":["../../../src/services/ai/html-stream-coordinator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAM7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACjD,KAAK,gBAAgB,GAAG,CACtB,GAAG,EAAE,MAAM,KACR,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAExE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,KAAK,EAAE,eAAe,CAAC;IACvB,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAUD,qBAAa,qBAAqB;IAChC,uDAAuD;IACvD,OAAO,CAAC,aAAa,CAAkC;IAEvD;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEtB,OAAO,EAAE;QACnB,aAAa,EAAE,aAAa,CAAC;QAC7B,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7C,aAAa,EAAE,gBAAgB,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;KACrB;IAOD;;OAEG;IACH,gBAAgB,IAAI,iBAAiB,GAAG,IAAI;IAI5C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAkBvB;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAwHpC;;;OAGG;IACH,aAAa,IAAI,IAAI;IAIrB;;;;;;;;OAQG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAoEvE;;OAEG;IACH,KAAK,IAAI,IAAI;YAaC,iBAAiB;YAuBjB,YAAY;CAqC3B"}