npcts 0.1.5 → 0.1.7

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 (323) hide show
  1. package/dist/adapters/base.d.ts.map +1 -0
  2. package/dist/adapters/base.js.map +1 -0
  3. package/dist/adapters/electron/bridge.d.ts.map +1 -0
  4. package/dist/adapters/electron/bridge.js.map +1 -0
  5. package/dist/adapters/http/index.js +1 -1
  6. package/dist/adapters/index.js +3 -3
  7. package/dist/core/browser.d.ts.map +1 -0
  8. package/dist/core/browser.js.map +1 -0
  9. package/dist/core/chat.d.ts.map +1 -0
  10. package/dist/core/chat.js.map +1 -0
  11. package/dist/core/files.d.ts +28 -0
  12. package/dist/core/files.d.ts.map +1 -0
  13. package/dist/core/files.js +6 -0
  14. package/dist/core/files.js.map +1 -0
  15. package/dist/core/index.d.ts +1 -0
  16. package/dist/core/index.js +11 -10
  17. package/dist/core/jinx.d.ts +118 -0
  18. package/dist/core/jinx.js +264 -0
  19. package/dist/core/jobs.d.ts.map +1 -0
  20. package/dist/core/jobs.js.map +1 -0
  21. package/dist/core/layout.d.ts.map +1 -0
  22. package/dist/core/layout.js.map +1 -0
  23. package/dist/core/spatial.d.ts +51 -0
  24. package/dist/core/stream.d.ts.map +1 -0
  25. package/dist/core/stream.js.map +1 -0
  26. package/dist/core/types.d.ts.map +1 -0
  27. package/dist/core/types.js.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +28 -28
  31. package/dist/index.js.map +1 -0
  32. package/dist/server/index.js +1 -1
  33. package/dist/server/spatial/index.js +4 -4
  34. package/dist/server/spatial/routes.js +2 -2
  35. package/dist/ui/chat/components/ChatHeaderBar.d.ts.map +1 -0
  36. package/dist/ui/chat/components/ChatHeaderBar.js.map +1 -0
  37. package/dist/ui/chat/components/ChatInterface.d.ts.map +1 -0
  38. package/dist/ui/chat/components/ChatInterface.js +5 -5
  39. package/dist/ui/chat/components/ChatInterface.js.map +1 -0
  40. package/dist/ui/chat/components/ChatMessage.d.ts.map +1 -0
  41. package/dist/ui/chat/components/ChatMessage.js +2 -2
  42. package/dist/ui/chat/components/ChatMessage.js.map +1 -0
  43. package/dist/ui/chat/components/ChatPane.d.ts.map +1 -0
  44. package/dist/ui/chat/components/ChatPane.js +1 -1
  45. package/dist/ui/chat/components/ChatPane.js.map +1 -0
  46. package/dist/ui/chat/components/ChatView.d.ts.map +1 -0
  47. package/dist/ui/chat/components/ChatView.js +4 -4
  48. package/dist/ui/chat/components/ChatView.js.map +1 -0
  49. package/dist/ui/chat/components/ConversationList.d.ts.map +1 -0
  50. package/dist/ui/chat/components/ConversationList.js +1 -1
  51. package/dist/ui/chat/components/ConversationList.js.map +1 -0
  52. package/dist/ui/chat/components/InPaneSearchBar.d.ts.map +1 -0
  53. package/dist/ui/chat/components/InPaneSearchBar.js.map +1 -0
  54. package/dist/ui/chat/components/InputArea.d.ts.map +1 -0
  55. package/dist/ui/chat/components/InputArea.js +1 -1
  56. package/dist/ui/chat/components/InputArea.js.map +1 -0
  57. package/dist/ui/chat/components/MessageAttachments.d.ts.map +1 -0
  58. package/dist/ui/chat/components/MessageAttachments.js.map +1 -0
  59. package/dist/ui/chat/components/MessageItem.d.ts.map +1 -0
  60. package/dist/ui/chat/components/MessageItem.js.map +1 -0
  61. package/dist/ui/chat/components/PredictiveTextOverlay.d.ts.map +1 -0
  62. package/dist/ui/chat/components/PredictiveTextOverlay.js.map +1 -0
  63. package/dist/ui/chat/context/ChatContext.d.ts.map +1 -0
  64. package/dist/ui/chat/context/ChatContext.js.map +1 -0
  65. package/dist/ui/chat/hooks/useAutoScroll.d.ts.map +1 -0
  66. package/dist/ui/chat/hooks/useAutoScroll.js.map +1 -0
  67. package/dist/ui/chat/index.d.ts.map +1 -0
  68. package/dist/ui/chat/index.js +7 -7
  69. package/dist/ui/chat/index.js.map +1 -0
  70. package/dist/ui/dashboard/QueryWidget.js +3 -3
  71. package/dist/ui/dashboard/index.js +4 -4
  72. package/dist/ui/dialogs/BrowserUrlDialog.d.ts.map +1 -0
  73. package/dist/ui/dialogs/BrowserUrlDialog.js.map +1 -0
  74. package/dist/ui/dialogs/index.d.ts.map +1 -0
  75. package/dist/ui/dialogs/index.js +1 -1
  76. package/dist/ui/dialogs/index.js.map +1 -0
  77. package/dist/ui/editors/ImageEditor.js +2 -2
  78. package/dist/ui/editors/index.js +1 -1
  79. package/dist/ui/execution/index.js +2 -2
  80. package/dist/ui/files/components/FileTree.d.ts.map +1 -0
  81. package/dist/ui/files/components/FileTree.js.map +1 -0
  82. package/dist/ui/files/components/Sidebar.d.ts.map +1 -0
  83. package/dist/ui/files/components/Sidebar.js +1 -1
  84. package/dist/ui/files/components/Sidebar.js.map +1 -0
  85. package/dist/ui/files/components/index.d.ts.map +1 -0
  86. package/dist/ui/files/components/index.js +2 -2
  87. package/dist/ui/files/components/index.js.map +1 -0
  88. package/dist/ui/files/context/FileSystemContext.d.ts.map +1 -0
  89. package/dist/ui/files/context/FileSystemContext.js.map +1 -0
  90. package/dist/ui/files/context/index.d.ts.map +1 -0
  91. package/dist/ui/files/context/index.js +1 -1
  92. package/dist/ui/files/context/index.js.map +1 -0
  93. package/dist/ui/files/index.d.ts.map +1 -0
  94. package/dist/ui/files/index.js +2 -2
  95. package/dist/ui/files/index.js.map +1 -0
  96. package/dist/ui/hooks/index.js +3 -3
  97. package/dist/ui/hooks/useQuery.js +1 -1
  98. package/dist/ui/index.d.ts.map +1 -0
  99. package/dist/ui/index.js +20 -20
  100. package/dist/ui/index.js.map +1 -0
  101. package/dist/ui/jinx/index.js +2 -2
  102. package/dist/ui/knowledge-graph/index.js +3 -3
  103. package/dist/ui/layout/components/AppShell.d.ts.map +1 -0
  104. package/dist/ui/layout/components/AppShell.js +5 -5
  105. package/dist/ui/layout/components/AppShell.js.map +1 -0
  106. package/dist/ui/layout/components/ContentPaneContainer.d.ts.map +1 -0
  107. package/dist/ui/layout/components/ContentPaneContainer.js +9 -9
  108. package/dist/ui/layout/components/ContentPaneContainer.js.map +1 -0
  109. package/dist/ui/layout/components/LayoutNode.d.ts.map +1 -0
  110. package/dist/ui/layout/components/LayoutNode.js +2 -2
  111. package/dist/ui/layout/components/LayoutNode.js.map +1 -0
  112. package/dist/ui/layout/components/PaneHeader.d.ts.map +1 -0
  113. package/dist/ui/layout/components/PaneHeader.js.map +1 -0
  114. package/dist/ui/layout/components/SplitView.d.ts.map +1 -0
  115. package/dist/ui/layout/components/SplitView.js +2 -2
  116. package/dist/ui/layout/components/SplitView.js.map +1 -0
  117. package/dist/ui/layout/components/Studio.d.ts.map +1 -0
  118. package/dist/ui/layout/components/Studio.js +2 -2
  119. package/dist/ui/layout/components/Studio.js.map +1 -0
  120. package/dist/ui/layout/components/contextMenus/BrowserContextMenu.d.ts.map +1 -0
  121. package/dist/ui/layout/components/contextMenus/BrowserContextMenu.js +1 -1
  122. package/dist/ui/layout/components/contextMenus/BrowserContextMenu.js.map +1 -0
  123. package/dist/ui/layout/components/contextMenus/EditorContextMenu.d.ts.map +1 -0
  124. package/dist/ui/layout/components/contextMenus/EditorContextMenu.js +1 -1
  125. package/dist/ui/layout/components/contextMenus/EditorContextMenu.js.map +1 -0
  126. package/dist/ui/layout/components/contextMenus/FileContextMenu.d.ts.map +1 -0
  127. package/dist/ui/layout/components/contextMenus/FileContextMenu.js +1 -1
  128. package/dist/ui/layout/components/contextMenus/FileContextMenu.js.map +1 -0
  129. package/dist/ui/layout/components/contextMenus/PdfContextMenu.d.ts.map +1 -0
  130. package/dist/ui/layout/components/contextMenus/PdfContextMenu.js +1 -1
  131. package/dist/ui/layout/components/contextMenus/PdfContextMenu.js.map +1 -0
  132. package/dist/ui/layout/components/contextMenus/index.d.ts.map +1 -0
  133. package/dist/ui/layout/components/contextMenus/index.js +4 -4
  134. package/dist/ui/layout/components/contextMenus/index.js.map +1 -0
  135. package/dist/ui/layout/components/index.d.ts.map +1 -0
  136. package/dist/ui/layout/components/index.js +8 -8
  137. package/dist/ui/layout/components/index.js.map +1 -0
  138. package/dist/ui/layout/components/modals/AIEditModal.d.ts.map +1 -0
  139. package/dist/ui/layout/components/modals/AIEditModal.js +4 -4
  140. package/dist/ui/layout/components/modals/AIEditModal.js.map +1 -0
  141. package/dist/ui/layout/components/modals/MemoryApprovalModal.d.ts.map +1 -0
  142. package/dist/ui/layout/components/modals/MemoryApprovalModal.js +2 -2
  143. package/dist/ui/layout/components/modals/MemoryApprovalModal.js.map +1 -0
  144. package/dist/ui/layout/components/modals/PromptModal.d.ts.map +1 -0
  145. package/dist/ui/layout/components/modals/PromptModal.js +3 -3
  146. package/dist/ui/layout/components/modals/PromptModal.js.map +1 -0
  147. package/dist/ui/layout/components/modals/ResendModal.d.ts.map +1 -0
  148. package/dist/ui/layout/components/modals/ResendModal.js +3 -3
  149. package/dist/ui/layout/components/modals/ResendModal.js.map +1 -0
  150. package/dist/ui/layout/components/modals/index.d.ts.map +1 -0
  151. package/dist/ui/layout/components/modals/index.js +4 -4
  152. package/dist/ui/layout/components/modals/index.js.map +1 -0
  153. package/dist/ui/layout/context/LayoutContext.d.ts.map +1 -0
  154. package/dist/ui/layout/context/LayoutContext.js.map +1 -0
  155. package/dist/ui/layout/index.d.ts.map +1 -0
  156. package/dist/ui/layout/index.js +2 -2
  157. package/dist/ui/layout/index.js.map +1 -0
  158. package/dist/ui/markdown/Markdown.d.ts.map +1 -0
  159. package/dist/ui/markdown/Markdown.js.map +1 -0
  160. package/dist/ui/memory/index.js +2 -2
  161. package/dist/ui/models/index.js +2 -2
  162. package/dist/ui/npc/JinxMenu.d.ts +7 -0
  163. package/dist/ui/npc/JinxMenu.d.ts.map +1 -0
  164. package/dist/ui/npc/JinxMenu.js +330 -0
  165. package/dist/ui/npc/JinxMenu.js.map +1 -0
  166. package/dist/ui/npc/McpServerMenu.d.ts.map +1 -0
  167. package/dist/ui/npc/McpServerMenu.js +3 -3
  168. package/dist/ui/npc/McpServerMenu.js.map +1 -0
  169. package/dist/ui/npc/NPCTeamMenu.d.ts +8 -0
  170. package/dist/ui/npc/NPCTeamMenu.d.ts.map +1 -0
  171. package/dist/ui/npc/NPCTeamMenu.js +546 -0
  172. package/dist/ui/npc/NPCTeamMenu.js.map +1 -0
  173. package/dist/ui/npc/SettingsMenu.d.ts +15 -0
  174. package/dist/ui/npc/SettingsMenu.d.ts.map +1 -0
  175. package/dist/ui/npc/SettingsMenu.js +484 -0
  176. package/dist/ui/npc/SettingsMenu.js.map +1 -0
  177. package/dist/ui/npc/index.d.ts.map +1 -0
  178. package/dist/ui/npc/index.js +2 -2
  179. package/dist/ui/npc/index.js.map +1 -0
  180. package/dist/ui/primitives/AutosizeTextarea.d.ts.map +1 -0
  181. package/dist/ui/primitives/AutosizeTextarea.js.map +1 -0
  182. package/dist/ui/primitives/Button.d.ts.map +1 -0
  183. package/dist/ui/primitives/Button.js.map +1 -0
  184. package/dist/ui/primitives/ContextMenu.d.ts.map +1 -0
  185. package/dist/ui/primitives/ContextMenu.js.map +1 -0
  186. package/dist/ui/primitives/FileUpload.js +1 -1
  187. package/dist/ui/primitives/Input.d.ts.map +1 -0
  188. package/dist/ui/primitives/Input.js.map +1 -0
  189. package/dist/ui/primitives/Modal.d.ts.map +1 -0
  190. package/dist/ui/primitives/Modal.js.map +1 -0
  191. package/dist/ui/primitives/Select.d.ts.map +1 -0
  192. package/dist/ui/primitives/Select.js.map +1 -0
  193. package/dist/ui/primitives/Spinner.d.ts.map +1 -0
  194. package/dist/ui/primitives/Spinner.js.map +1 -0
  195. package/dist/ui/primitives/index.d.ts.map +1 -0
  196. package/dist/ui/primitives/index.js +19 -19
  197. package/dist/ui/primitives/index.js.map +1 -0
  198. package/dist/ui/spatial/components/Application.d.ts +1 -0
  199. package/dist/ui/spatial/components/Application.js +32 -2
  200. package/dist/ui/spatial/components/AvatarEditorOverlay.d.ts +27 -6
  201. package/dist/ui/spatial/components/AvatarEditorOverlay.js +355 -493
  202. package/dist/ui/spatial/components/Character.js +48 -24
  203. package/dist/ui/spatial/components/ControlPanel.d.ts +10 -2
  204. package/dist/ui/spatial/components/ControlPanel.js +127 -85
  205. package/dist/ui/spatial/components/Door.d.ts +10 -0
  206. package/dist/ui/spatial/components/Door.js +146 -16
  207. package/dist/ui/spatial/components/EditRoomOverlay.d.ts +4 -4
  208. package/dist/ui/spatial/components/EditRoomOverlay.js +142 -307
  209. package/dist/ui/spatial/components/FormOverlay.js +114 -83
  210. package/dist/ui/spatial/components/FurnitureItem.js +57 -21
  211. package/dist/ui/spatial/components/HelpOverlay.js +55 -44
  212. package/dist/ui/spatial/components/KeyLegend.js +1 -1
  213. package/dist/ui/spatial/components/MediaPlayerDock.d.ts +20 -3
  214. package/dist/ui/spatial/components/MediaPlayerDock.js +458 -90
  215. package/dist/ui/spatial/components/MenuOverlay.js +96 -85
  216. package/dist/ui/spatial/components/Room.d.ts +5 -0
  217. package/dist/ui/spatial/components/Room.js +9 -22
  218. package/dist/ui/spatial/components/SettingsOverlay.d.ts +2 -4
  219. package/dist/ui/spatial/components/SettingsOverlay.js +187 -200
  220. package/dist/ui/spatial/components/SpatialWorld.d.ts +14 -0
  221. package/dist/ui/spatial/components/SpatialWorld.js +333 -60
  222. package/dist/ui/spatial/components/TimeStatsPopup.d.ts +19 -0
  223. package/dist/ui/spatial/components/TimeStatsPopup.js +106 -0
  224. package/dist/ui/spatial/components/Wall.js +4 -1
  225. package/dist/ui/spatial/components/WorldMapOverlay.js +14 -1
  226. package/dist/ui/spatial/components/index.d.ts +5 -4
  227. package/dist/ui/spatial/components/index.js +23 -22
  228. package/dist/ui/spatial/context/SpatialContext.d.ts +5 -0
  229. package/dist/ui/spatial/context/SpatialContext.js +117 -23
  230. package/dist/ui/spatial/context/index.js +1 -1
  231. package/dist/ui/spatial/editors/index.js +1 -1
  232. package/dist/ui/spatial/hooks/index.js +3 -3
  233. package/dist/ui/spatial/hooks/useCollisionDetection.js +1 -1
  234. package/dist/ui/spatial/index.d.ts +8 -3
  235. package/dist/ui/spatial/index.js +7 -5
  236. package/dist/ui/spatial/outside/OutsideChatOverlay.d.ts +13 -0
  237. package/dist/ui/spatial/outside/OutsideChatOverlay.js +113 -0
  238. package/dist/ui/spatial/outside/OutsideContext.d.ts +35 -0
  239. package/dist/ui/spatial/outside/OutsideContext.js +130 -0
  240. package/dist/ui/spatial/outside/OutsideWorld.d.ts +20 -0
  241. package/dist/ui/spatial/outside/OutsideWorld.js +230 -0
  242. package/dist/ui/spatial/outside/index.d.ts +7 -0
  243. package/dist/ui/spatial/outside/index.js +7 -0
  244. package/dist/ui/spatial/outside/useOutsideSocket.d.ts +54 -0
  245. package/dist/ui/spatial/outside/useOutsideSocket.js +91 -0
  246. package/dist/ui/spatial/utils/index.js +2 -2
  247. package/dist/ui/spatial/utils/transforms.d.ts +1 -1
  248. package/dist/ui/spatial/utils/transforms.js +5 -3
  249. package/dist/ui/specialized/CronDaemonPanel.d.ts +9 -0
  250. package/dist/ui/specialized/CronDaemonPanel.d.ts.map +1 -0
  251. package/dist/ui/specialized/CronDaemonPanel.js +220 -0
  252. package/dist/ui/specialized/CronDaemonPanel.js.map +1 -0
  253. package/dist/ui/specialized/DataDash.d.ts +11 -0
  254. package/dist/ui/specialized/DataDash.d.ts.map +1 -0
  255. package/dist/ui/specialized/DataDash.js +1729 -0
  256. package/dist/ui/specialized/DataDash.js.map +1 -0
  257. package/dist/ui/specialized/DiskUsageAnalyzer.d.ts.map +1 -0
  258. package/dist/ui/specialized/DiskUsageAnalyzer.js.map +1 -0
  259. package/dist/ui/specialized/index.d.ts.map +1 -0
  260. package/dist/ui/specialized/index.js +7 -7
  261. package/dist/ui/specialized/index.js.map +1 -0
  262. package/dist/ui/sql/index.js +3 -3
  263. package/dist/ui/utils/cn.d.ts.map +1 -0
  264. package/dist/ui/utils/cn.js.map +1 -0
  265. package/dist/ui/utils/index.js +3 -3
  266. package/dist/ui/viewers/components/BrowserViewer.d.ts.map +1 -0
  267. package/dist/ui/viewers/components/BrowserViewer.js.map +1 -0
  268. package/dist/ui/viewers/components/CodeEditor.d.ts.map +1 -0
  269. package/dist/ui/viewers/components/CodeEditor.js.map +1 -0
  270. package/dist/ui/viewers/components/CsvViewer.d.ts +36 -5
  271. package/dist/ui/viewers/components/CsvViewer.d.ts.map +1 -0
  272. package/dist/ui/viewers/components/CsvViewer.js +1678 -14
  273. package/dist/ui/viewers/components/CsvViewer.js.map +1 -0
  274. package/dist/ui/viewers/components/DocxViewer.d.ts +27 -0
  275. package/dist/ui/viewers/components/DocxViewer.d.ts.map +1 -0
  276. package/dist/ui/viewers/components/DocxViewer.js +958 -0
  277. package/dist/ui/viewers/components/DocxViewer.js.map +1 -0
  278. package/dist/ui/viewers/components/ImageViewer.d.ts.map +1 -0
  279. package/dist/ui/viewers/components/ImageViewer.js.map +1 -0
  280. package/dist/ui/viewers/components/LatexViewer.d.ts +11 -0
  281. package/dist/ui/viewers/components/LatexViewer.d.ts.map +1 -0
  282. package/dist/ui/viewers/components/LatexViewer.js +154 -0
  283. package/dist/ui/viewers/components/LatexViewer.js.map +1 -0
  284. package/dist/ui/viewers/components/MindMapViewer.d.ts +50 -0
  285. package/dist/ui/viewers/components/MindMapViewer.js +677 -0
  286. package/dist/ui/viewers/components/PdfViewer.d.ts.map +1 -0
  287. package/dist/ui/viewers/components/PdfViewer.js.map +1 -0
  288. package/dist/ui/viewers/components/PhotoViewer.d.ts +8 -0
  289. package/dist/ui/viewers/components/PhotoViewer.d.ts.map +1 -0
  290. package/dist/ui/viewers/components/PhotoViewer.js +2059 -0
  291. package/dist/ui/viewers/components/PhotoViewer.js.map +1 -0
  292. package/dist/ui/viewers/components/PptxViewer.d.ts +25 -0
  293. package/dist/ui/viewers/components/PptxViewer.d.ts.map +1 -0
  294. package/dist/ui/viewers/components/PptxViewer.js +1891 -0
  295. package/dist/ui/viewers/components/PptxViewer.js.map +1 -0
  296. package/dist/ui/viewers/components/Terminal.d.ts.map +1 -0
  297. package/dist/ui/viewers/components/Terminal.js.map +1 -0
  298. package/dist/ui/viewers/components/index.d.ts +7 -0
  299. package/dist/ui/viewers/components/index.d.ts.map +1 -0
  300. package/dist/ui/viewers/components/index.js +9 -6
  301. package/dist/ui/viewers/components/index.js.map +1 -0
  302. package/dist/ui/viewers/index.d.ts.map +1 -0
  303. package/dist/ui/viewers/index.js +1 -1
  304. package/dist/ui/viewers/index.js.map +1 -0
  305. package/package.json +13 -7
  306. package/dist/ui/dashboard/ChartWidget.d.ts +0 -18
  307. package/dist/ui/dashboard/ChartWidget.js +0 -98
  308. package/dist/ui/dashboard/TableWidget.d.ts +0 -14
  309. package/dist/ui/dashboard/TableWidget.js +0 -117
  310. package/dist/ui/photo/GalleryGrid.d.ts +0 -25
  311. package/dist/ui/photo/GalleryGrid.js +0 -46
  312. package/dist/ui/photo/ImageAdjustmentSliders.d.ts +0 -37
  313. package/dist/ui/photo/ImageAdjustmentSliders.js +0 -56
  314. package/dist/ui/photo/ImageLabelingCanvas.d.ts +0 -47
  315. package/dist/ui/photo/ImageLabelingCanvas.js +0 -174
  316. package/dist/ui/photo/ImageSourceTabs.d.ts +0 -28
  317. package/dist/ui/photo/ImageSourceTabs.js +0 -46
  318. package/dist/ui/photo/LayerPanel.d.ts +0 -87
  319. package/dist/ui/photo/LayerPanel.js +0 -70
  320. package/dist/ui/photo/Lightbox.d.ts +0 -12
  321. package/dist/ui/photo/Lightbox.js +0 -90
  322. package/dist/ui/photo/index.d.ts +0 -6
  323. package/dist/ui/photo/index.js +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/adapters/electron/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,SAAS,CAAC;AAM3D,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAyFnD,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,WAAW,CAO7D,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/adapters/electron/bridge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * HTTP Adapters
3
3
  */
4
- export { createHttpSpatialConfigClient, createHttpCommandClient, createHttpImageUploadClient, createHttpSpatialServices, } from './spatialServices';
4
+ export { createHttpSpatialConfigClient, createHttpCommandClient, createHttpImageUploadClient, createHttpSpatialServices, } from './spatialServices.js';
@@ -1,4 +1,4 @@
1
1
  // Adapters module exports
2
- export * from './base';
3
- export { createElectronAdapter } from './electron/bridge';
4
- export * from './http';
2
+ export * from './base.js';
3
+ export { createElectronAdapter } from './electron/bridge.js';
4
+ export * from './http/index.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9C,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/F,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/core/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACnE,kBAAkB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9F,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/core/chat.ts"],"names":[],"mappings":""}
@@ -15,6 +15,34 @@ export interface FileSystemClient {
15
15
  deleteDirectory(path: string): Promise<void>;
16
16
  rename(oldPath: string, newPath: string): Promise<void>;
17
17
  }
18
+ /**
19
+ * File I/O adapter for document viewers (CsvViewer, DocxViewer, PptxViewer).
20
+ * Abstracts over Electron IPC (window.api) and HTTP fetch so the same
21
+ * viewer components work in both incognide and web apps.
22
+ */
23
+ export interface DocumentFileApi {
24
+ /** Read a file as binary (XLSX, DOCX, PPTX are all ZIP-based) */
25
+ readFileBuffer(path: string): Promise<ArrayBuffer>;
26
+ /** Read a file as text (CSV, HTML, plain text) */
27
+ readFileContent(path: string): Promise<string>;
28
+ /** Write text content to a file */
29
+ writeFileContent(path: string, content: string): Promise<void>;
30
+ /** Write binary content to a file */
31
+ writeFileBuffer(path: string, buffer: ArrayBuffer | Uint8Array): Promise<void>;
32
+ /** Convert a DOCX file to HTML via mammoth (optional, DocxViewer only) */
33
+ convertDocxToHtml?(path: string): Promise<{
34
+ html: string;
35
+ fonts?: string[];
36
+ error?: string;
37
+ }>;
38
+ /** Read CSV content as text with error handling (optional, CsvViewer only) */
39
+ readCsvContent?(path: string): Promise<{
40
+ content: string;
41
+ error?: string;
42
+ }>;
43
+ }
44
+ /** Extract filename from a file path */
45
+ export declare const getFileName: (filePath: string | null | undefined) => string;
18
46
  /**
19
47
  * Normalize a file path by converting backslashes to forward slashes
20
48
  * and removing trailing slashes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/core/files.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD"}
@@ -1,3 +1,9 @@
1
+ /** Extract filename from a file path */
2
+ export const getFileName = (filePath) => {
3
+ if (!filePath)
4
+ return '';
5
+ return filePath.replace(/\\/g, '/').split('/').pop() || '';
6
+ };
1
7
  /**
2
8
  * Normalize a file path by converting backslashes to forward slashes
3
9
  * and removing trailing slashes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/core/files.ts"],"names":[],"mappings":""}
@@ -8,3 +8,4 @@ export * from './browser';
8
8
  export * from './jobs';
9
9
  export * from './database';
10
10
  export * from './spatial';
11
+ export * from './jinx';
@@ -1,11 +1,12 @@
1
1
  // Core module exports
2
- export * from './types';
3
- export * from './layout';
4
- export * from './files';
5
- export * from './utils';
6
- export * from './chat';
7
- export * from './stream';
8
- export * from './browser';
9
- export * from './jobs';
10
- export * from './database';
11
- export * from './spatial';
2
+ export * from './types.js';
3
+ export * from './layout.js';
4
+ export * from './files.js';
5
+ export * from './utils.js';
6
+ export * from './chat.js';
7
+ export * from './stream.js';
8
+ export * from './browser.js';
9
+ export * from './jobs.js';
10
+ export * from './database.js';
11
+ export * from './spatial.js';
12
+ export * from './jinx.js';
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Jinx - TypeScript/TSX workflow engine for npcts
3
+ *
4
+ * Mirrors the Python jinx system in npcpy but handles:
5
+ * - engine: tsx - React components, transpiled with esbuild-wasm
6
+ * - engine: node - Node.js code execution
7
+ *
8
+ * Jinx format (YAML):
9
+ * ```yaml
10
+ * jinx_name: tile.db_tool
11
+ * description: Opens Database Tool pane
12
+ * inputs:
13
+ * - label: "DB Tool"
14
+ * - icon: "Database"
15
+ * steps:
16
+ * - name: render
17
+ * engine: tsx
18
+ * code: |
19
+ * export default function({ actions }) {
20
+ * return <button onClick={() => actions.createDBToolPane()}>DB</button>
21
+ * }
22
+ * ```
23
+ */
24
+ import React from 'react';
25
+ /**
26
+ * Initialize esbuild-wasm (call once at app startup)
27
+ */
28
+ export declare function initJinxEngine(): Promise<void>;
29
+ /**
30
+ * Input parameter definition
31
+ */
32
+ export interface JinxInput {
33
+ [key: string]: any;
34
+ }
35
+ /**
36
+ * Step definition
37
+ */
38
+ export interface JinxStep {
39
+ name: string;
40
+ engine: 'tsx' | 'node' | string;
41
+ code: string;
42
+ }
43
+ /**
44
+ * Jinx definition (parsed from YAML)
45
+ */
46
+ export interface JinxDefinition {
47
+ jinx_name: string;
48
+ description?: string;
49
+ inputs?: JinxInput[];
50
+ steps: JinxStep[];
51
+ _source_path?: string;
52
+ }
53
+ /**
54
+ * Execution context passed to jinx code
55
+ */
56
+ export interface JinxContext {
57
+ [key: string]: any;
58
+ output?: any;
59
+ }
60
+ /**
61
+ * Result of executing a TSX step (returns a React component)
62
+ */
63
+ export interface TsxStepResult {
64
+ Component: React.ComponentType<any>;
65
+ props?: Record<string, any>;
66
+ }
67
+ /**
68
+ * Jinx class - loads and executes jinx workflows
69
+ */
70
+ export declare class Jinx {
71
+ jinx_name: string;
72
+ description: string;
73
+ inputs: JinxInput[];
74
+ steps: JinxStep[];
75
+ _source_path?: string;
76
+ constructor(data: JinxDefinition | string, sourcePath?: string);
77
+ private _loadFromData;
78
+ /**
79
+ * Get default input values from the inputs definition
80
+ */
81
+ getDefaultInputs(): Record<string, any>;
82
+ /**
83
+ * Execute all steps in the jinx
84
+ */
85
+ execute(inputValues?: Record<string, any>, extraContext?: Record<string, any>): Promise<JinxContext>;
86
+ /**
87
+ * Execute a single step and get a React component (for tsx engine)
88
+ */
89
+ executeForComponent(inputValues?: Record<string, any>, extraContext?: Record<string, any>): Promise<TsxStepResult | null>;
90
+ private _executeStep;
91
+ /**
92
+ * Execute a TSX step - transpile and return the component
93
+ */
94
+ private _executeTsxStep;
95
+ /**
96
+ * Execute a Node step - runs JS code with context available
97
+ */
98
+ private _executeNodeStep;
99
+ /**
100
+ * Convert to a tool definition (for LLM tool use)
101
+ */
102
+ toToolDef(): Record<string, any>;
103
+ /**
104
+ * Serialize back to YAML
105
+ */
106
+ toYaml(): string;
107
+ }
108
+ /**
109
+ * Load a jinx from a YAML string
110
+ */
111
+ export declare function loadJinx(yamlContent: string, sourcePath?: string): Jinx;
112
+ /**
113
+ * Load multiple jinxes and return a lookup dict
114
+ */
115
+ export declare function loadJinxes(jinxYamls: Array<{
116
+ content: string;
117
+ path?: string;
118
+ }>): Map<string, Jinx>;
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Jinx - TypeScript/TSX workflow engine for npcts
3
+ *
4
+ * Mirrors the Python jinx system in npcpy but handles:
5
+ * - engine: tsx - React components, transpiled with esbuild-wasm
6
+ * - engine: node - Node.js code execution
7
+ *
8
+ * Jinx format (YAML):
9
+ * ```yaml
10
+ * jinx_name: tile.db_tool
11
+ * description: Opens Database Tool pane
12
+ * inputs:
13
+ * - label: "DB Tool"
14
+ * - icon: "Database"
15
+ * steps:
16
+ * - name: render
17
+ * engine: tsx
18
+ * code: |
19
+ * export default function({ actions }) {
20
+ * return <button onClick={() => actions.createDBToolPane()}>DB</button>
21
+ * }
22
+ * ```
23
+ */
24
+ import * as esbuild from 'esbuild-wasm';
25
+ import yaml from 'js-yaml';
26
+ import React from 'react';
27
+ // Track esbuild initialization
28
+ let esbuildInitialized = false;
29
+ let esbuildInitPromise = null;
30
+ /**
31
+ * Initialize esbuild-wasm (call once at app startup)
32
+ */
33
+ export async function initJinxEngine() {
34
+ if (esbuildInitialized)
35
+ return;
36
+ if (esbuildInitPromise)
37
+ return esbuildInitPromise;
38
+ esbuildInitPromise = esbuild.initialize({
39
+ wasmURL: 'https://unpkg.com/esbuild-wasm@0.24.0/esbuild.wasm',
40
+ }).then(() => {
41
+ esbuildInitialized = true;
42
+ });
43
+ return esbuildInitPromise;
44
+ }
45
+ /**
46
+ * Jinx class - loads and executes jinx workflows
47
+ */
48
+ export class Jinx {
49
+ constructor(data, sourcePath) {
50
+ if (typeof data === 'string') {
51
+ // Parse YAML string
52
+ const parsed = yaml.load(data);
53
+ this._loadFromData(parsed);
54
+ }
55
+ else {
56
+ this._loadFromData(data);
57
+ }
58
+ if (sourcePath) {
59
+ this._source_path = sourcePath;
60
+ }
61
+ }
62
+ _loadFromData(data) {
63
+ if (!data.jinx_name) {
64
+ throw new Error("Missing 'jinx_name' in jinx definition");
65
+ }
66
+ this.jinx_name = data.jinx_name;
67
+ this.description = data.description || '';
68
+ this.inputs = data.inputs || [];
69
+ this.steps = data.steps || [];
70
+ this._source_path = data._source_path;
71
+ }
72
+ /**
73
+ * Get default input values from the inputs definition
74
+ */
75
+ getDefaultInputs() {
76
+ const defaults = {};
77
+ for (const input of this.inputs) {
78
+ if (typeof input === 'object') {
79
+ for (const [key, value] of Object.entries(input)) {
80
+ defaults[key] = value;
81
+ }
82
+ }
83
+ }
84
+ return defaults;
85
+ }
86
+ /**
87
+ * Execute all steps in the jinx
88
+ */
89
+ async execute(inputValues = {}, extraContext = {}) {
90
+ await initJinxEngine();
91
+ // Build initial context with defaults + provided inputs
92
+ const context = {
93
+ ...this.getDefaultInputs(),
94
+ ...inputValues,
95
+ ...extraContext,
96
+ output: null,
97
+ };
98
+ // Execute each step
99
+ for (const step of this.steps) {
100
+ await this._executeStep(step, context);
101
+ }
102
+ return context;
103
+ }
104
+ /**
105
+ * Execute a single step and get a React component (for tsx engine)
106
+ */
107
+ async executeForComponent(inputValues = {}, extraContext = {}) {
108
+ await initJinxEngine();
109
+ const context = {
110
+ ...this.getDefaultInputs(),
111
+ ...inputValues,
112
+ ...extraContext,
113
+ output: null,
114
+ };
115
+ // Find the tsx step (usually named 'render')
116
+ const tsxStep = this.steps.find(s => s.engine === 'tsx');
117
+ if (!tsxStep) {
118
+ return null;
119
+ }
120
+ const Component = await this._executeTsxStep(tsxStep, context);
121
+ return Component ? { Component, props: context } : null;
122
+ }
123
+ async _executeStep(step, context) {
124
+ const { engine, code, name } = step;
125
+ try {
126
+ switch (engine) {
127
+ case 'tsx':
128
+ const Component = await this._executeTsxStep(step, context);
129
+ if (Component) {
130
+ context[name] = Component;
131
+ context.output = Component;
132
+ }
133
+ break;
134
+ case 'node':
135
+ await this._executeNodeStep(step, context);
136
+ break;
137
+ default:
138
+ console.warn(`Unknown engine '${engine}' in step '${name}'`);
139
+ }
140
+ }
141
+ catch (err) {
142
+ console.error(`Error executing step '${name}':`, err);
143
+ context.output = `Error in step '${name}': ${err}`;
144
+ }
145
+ }
146
+ /**
147
+ * Execute a TSX step - transpile and return the component
148
+ */
149
+ async _executeTsxStep(step, context) {
150
+ const { code, name } = step;
151
+ try {
152
+ // Transpile TSX to JS
153
+ const result = await esbuild.transform(code, {
154
+ loader: 'tsx',
155
+ jsx: 'transform',
156
+ jsxFactory: 'React.createElement',
157
+ jsxFragment: 'React.Fragment',
158
+ target: 'es2020',
159
+ });
160
+ const transpiledCode = result.code;
161
+ // Create a module-like execution environment
162
+ // We'll wrap the code to capture the default export
163
+ const wrappedCode = `
164
+ const exports = {};
165
+ const module = { exports };
166
+ ${transpiledCode}
167
+ return module.exports.default || exports.default;
168
+ `;
169
+ // Execute with React and context available
170
+ const execFn = new Function('React', 'context', wrappedCode);
171
+ const Component = execFn(React, context);
172
+ return Component;
173
+ }
174
+ catch (err) {
175
+ console.error(`TSX transpile error in step '${name}':`, err);
176
+ return null;
177
+ }
178
+ }
179
+ /**
180
+ * Execute a Node step - runs JS code with context available
181
+ */
182
+ async _executeNodeStep(step, context) {
183
+ const { code, name } = step;
184
+ try {
185
+ // Wrap code to have context available and handle async
186
+ const wrappedCode = `
187
+ return (async function(context) {
188
+ ${code}
189
+ })(context);
190
+ `;
191
+ const execFn = new Function('context', wrappedCode);
192
+ await execFn(context);
193
+ }
194
+ catch (err) {
195
+ console.error(`Node execution error in step '${name}':`, err);
196
+ context.output = `Error: ${err}`;
197
+ }
198
+ }
199
+ /**
200
+ * Convert to a tool definition (for LLM tool use)
201
+ */
202
+ toToolDef() {
203
+ const properties = {};
204
+ const required = [];
205
+ for (const input of this.inputs) {
206
+ if (typeof input === 'string') {
207
+ properties[input] = { type: 'string', description: `Parameter: ${input}` };
208
+ required.push(input);
209
+ }
210
+ else if (typeof input === 'object') {
211
+ const [inputName, defaultValue] = Object.entries(input)[0];
212
+ properties[inputName] = {
213
+ type: 'string',
214
+ description: `Parameter: ${inputName}${defaultValue !== '' ? ` (default: ${defaultValue})` : ''}`,
215
+ };
216
+ }
217
+ }
218
+ return {
219
+ type: 'function',
220
+ function: {
221
+ name: this.jinx_name,
222
+ description: this.description || `Jinx: ${this.jinx_name}`,
223
+ parameters: {
224
+ type: 'object',
225
+ properties,
226
+ required,
227
+ },
228
+ },
229
+ };
230
+ }
231
+ /**
232
+ * Serialize back to YAML
233
+ */
234
+ toYaml() {
235
+ return yaml.dump({
236
+ jinx_name: this.jinx_name,
237
+ description: this.description,
238
+ inputs: this.inputs,
239
+ steps: this.steps,
240
+ });
241
+ }
242
+ }
243
+ /**
244
+ * Load a jinx from a YAML string
245
+ */
246
+ export function loadJinx(yamlContent, sourcePath) {
247
+ return new Jinx(yamlContent, sourcePath);
248
+ }
249
+ /**
250
+ * Load multiple jinxes and return a lookup dict
251
+ */
252
+ export function loadJinxes(jinxYamls) {
253
+ const jinxMap = new Map();
254
+ for (const { content, path } of jinxYamls) {
255
+ try {
256
+ const jinx = loadJinx(content, path);
257
+ jinxMap.set(jinx.jinx_name, jinx);
258
+ }
259
+ catch (err) {
260
+ console.error(`Failed to load jinx from ${path}:`, err);
261
+ }
262
+ }
263
+ return jinxMap;
264
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/core/jobs.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACnC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/core/jobs.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/core/layout.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,SAAS,CACP,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/core/layout.ts"],"names":[],"mappings":""}
@@ -41,11 +41,13 @@ export interface DoorConfig {
41
41
  leadsTo: string;
42
42
  orientation: DoorDirection;
43
43
  image?: string;
44
+ type?: 'room' | 'outside';
44
45
  }
45
46
  export interface Door extends BoundingBox {
46
47
  leadsTo: string;
47
48
  orientation: DoorDirection;
48
49
  image?: string;
50
+ type?: 'room' | 'outside';
49
51
  }
50
52
  export interface MenuItemConfig {
51
53
  name: string;
@@ -88,6 +90,7 @@ export interface RoomConfig {
88
90
  floor_tile_size?: number;
89
91
  floor_pattern?: string;
90
92
  floor_pattern_size?: string;
93
+ outside?: boolean;
91
94
  }
92
95
  export interface Room {
93
96
  walls: Record<string, Wall>;
@@ -259,3 +262,51 @@ export interface LoadedImage {
259
262
  src: string;
260
263
  finalPath?: string;
261
264
  }
265
+ export type AvatarAccessory = 'none' | 'hat' | 'glasses' | 'crown' | 'halo' | 'horns' | 'cat-ears' | 'headphones' | 'bow' | 'bandana';
266
+ export type AvatarTrailEffect = 'none' | 'sparkle' | 'glow' | 'shadow' | 'hearts' | 'fire' | 'ice' | 'leaves';
267
+ export type AvatarEmote = 'neutral' | 'happy' | 'sad' | 'angry' | 'surprised' | 'sleeping' | 'love' | 'cool';
268
+ export interface AvatarSettings {
269
+ name: string;
270
+ primaryColor: string;
271
+ secondaryColor: string;
272
+ outlineColor: string;
273
+ size: number;
274
+ showNameTag: boolean;
275
+ nameTagColor: string;
276
+ trailEffect: AvatarTrailEffect;
277
+ accessory: AvatarAccessory;
278
+ statusMessage?: string;
279
+ emote?: AvatarEmote;
280
+ moveSpeed?: number;
281
+ nameTagStyle?: 'default' | 'bubble' | 'minimal' | 'fancy';
282
+ useCustomColors?: boolean;
283
+ }
284
+ export interface RemotePlayer {
285
+ id: string;
286
+ name: string;
287
+ x: number;
288
+ y: number;
289
+ direction: CharacterDirection;
290
+ frame: number;
291
+ isMoving: boolean;
292
+ avatarSettings?: AvatarSettings;
293
+ spriteSheets: SpriteSheets;
294
+ }
295
+ export interface OutsideZoneConfig {
296
+ name: string;
297
+ walls: Record<WallPosition, WallConfig>;
298
+ doors: Record<string, DoorConfig>;
299
+ applications: Record<string, ApplicationConfig>;
300
+ floor_image?: string;
301
+ floor_tile?: boolean;
302
+ floor_tile_size?: number;
303
+ floor_pattern?: string;
304
+ floor_pattern_size?: string;
305
+ }
306
+ export interface OutsideChatMessage {
307
+ id: string;
308
+ senderId: string;
309
+ senderName: string;
310
+ content: string;
311
+ timestamp: number;
312
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/core/stream.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/core/stream.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export * from "./core/files";
5
5
  export * from "./core/utils";
6
6
  export * from "./core/database";
7
7
  export * from "./core/vm";
8
- export type { Vector2D, Dimensions, BoundingBox, WallOrientation, DoorDirection, CharacterDirection, WallStyle, WallPosition, WallConfig, DoorConfig, MenuItemConfig, ApplicationConfig, RoomConfig, CharacterConfig, SpriteSheets, SpatialWorldConfig, CharacterState, SpatialWorldState, CommandResult, RunningApp, ImageUploadResult, CollisionCheckResult, CollisionContext, SpatialEventType, SpatialEvent, RoomChangeEvent, AppOpenEvent, CharacterMoveEvent, EditorSelection, DragState, ViewportDimensions, LoadedImage, SpatialConfigClient, CommandExecutionClient, ImageUploadClient, Wall as WallData, Door as DoorData, Application as ApplicationData, Room as RoomData, Character as CharacterData, } from "./core/spatial";
8
+ export type { Vector2D, Dimensions, BoundingBox, WallOrientation, DoorDirection, CharacterDirection, WallStyle, WallPosition, WallConfig, DoorConfig, MenuItemConfig, ApplicationConfig, RoomConfig, CharacterConfig, SpriteSheets, SpatialWorldConfig, CharacterState, SpatialWorldState, CommandResult, RunningApp, ImageUploadResult, CollisionCheckResult, CollisionContext, SpatialEventType, SpatialEvent, RoomChangeEvent, AppOpenEvent, CharacterMoveEvent, EditorSelection, DragState, ViewportDimensions, LoadedImage, SpatialConfigClient, CommandExecutionClient, ImageUploadClient, RemotePlayer, OutsideZoneConfig, OutsideChatMessage, Wall as WallData, Door as DoorData, Application as ApplicationData, Room as RoomData, Character as CharacterData, } from "./core/spatial";
9
9
  export * from "./adapters/base";
10
10
  export { createElectronAdapter } from "./adapters/electron/bridge";
11
11
  export * from "./adapters/http";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9E,cAAc,wBAAwB,CAAC"}