@notis_ai/cli 0.2.18 → 0.2.20

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 (395) hide show
  1. package/README.md +542 -146
  2. package/bin/check-runtime.js +15 -0
  3. package/bin/notis.js +2 -0
  4. package/config/notis_app_design_rules.json +320 -0
  5. package/config/portal-route-roots.json +45 -0
  6. package/dist/agent-hooks/notis-agent-hook.mjs +42325 -18273
  7. package/dist/base-skills/notis-cli/.notis-base-skill.json +1 -0
  8. package/dist/base-skills/notis-cli/SKILL.md +51 -280
  9. package/dist/base-skills/notis-cli/references/app-delivery.md +17 -0
  10. package/dist/base-skills/notis-cli/references/intelligence.md +94 -0
  11. package/dist/base-skills/notis-cli/references/native-databases.md +21 -0
  12. package/dist/base-skills/notis-cli/references/tool-examples.md +56 -0
  13. package/dist/base-skills/notis-cli/references/troubleshooting.md +67 -0
  14. package/dist/base-skills/notis-query/.notis-base-skill.json +1 -0
  15. package/dist/base-skills/notis-query/SKILL.md +35 -699
  16. package/dist/base-skills/notis-query/references/database-discovery.md +59 -0
  17. package/dist/base-skills/notis-query/references/documents.md +74 -0
  18. package/dist/base-skills/notis-query/references/query.md +76 -0
  19. package/dist/base-skills/notis-spaces/.notis-base-skill.json +1 -0
  20. package/dist/base-skills/notis-spaces/SKILL.md +218 -0
  21. package/dist/base-skills/notis-spaces/references/architecture.md +116 -0
  22. package/dist/base-skills/notis-spaces/references/context.md +81 -0
  23. package/dist/base-skills/notis-spaces/references/design.md +141 -0
  24. package/dist/base-skills/notis-spaces/references/fixtures.md +29 -0
  25. package/dist/base-skills/notis-spaces/references/memory.md +58 -0
  26. package/dist/base-skills/notis-spaces/references/reading.md +73 -0
  27. package/dist/base-skills/notis-spaces/references/release.md +120 -0
  28. package/dist/base-skills/notis-spaces/references/reports.md +77 -0
  29. package/dist/base-skills/notis-spaces/references/sdk.md +273 -0
  30. package/dist/base-skills/notis-spaces/references/store.md +118 -0
  31. package/dist/base-skills/notis-spaces/references/troubleshooting.md +28 -0
  32. package/dist/base-skills/notis-spaces/references/views.md +229 -0
  33. package/{template/packages → dist}/sdk/package.json +9 -10
  34. package/dist/sdk/src/agentContext.ts +36 -0
  35. package/dist/sdk/src/bundleModule.ts +175 -0
  36. package/dist/sdk/src/components/Dialog.tsx +103 -0
  37. package/dist/sdk/src/components/DocumentEditor.tsx +113 -0
  38. package/dist/sdk/src/components/DocumentPage.tsx +184 -0
  39. package/{template/packages → dist}/sdk/src/components/Markdown.tsx +9 -3
  40. package/{template/packages → dist}/sdk/src/components/MarkdownEditor.tsx +26 -5
  41. package/{template/packages → dist}/sdk/src/components/MultiSelectActionBar.tsx +95 -12
  42. package/{template/packages → dist}/sdk/src/components/MultiSelectCheckbox.tsx +4 -2
  43. package/dist/sdk/src/components/NotisCommentBoundary.tsx +172 -0
  44. package/{template/packages → dist}/sdk/src/components/NotisSelectionBoundary.tsx +9 -5
  45. package/dist/sdk/src/components/RecordComponents.tsx +111 -0
  46. package/dist/sdk/src/components/Skeleton.tsx +38 -0
  47. package/dist/sdk/src/config.ts +31 -0
  48. package/{template/packages → dist}/sdk/src/documents.ts +21 -6
  49. package/dist/sdk/src/hooks/useAction.ts +28 -0
  50. package/dist/sdk/src/hooks/useAgentContext.ts +23 -0
  51. package/{template/packages → dist}/sdk/src/hooks/useBackend.ts +3 -2
  52. package/dist/sdk/src/hooks/useCloudComputer.ts +94 -0
  53. package/dist/sdk/src/hooks/useCloudComputerShell.ts +114 -0
  54. package/{template/packages → dist}/sdk/src/hooks/useCollectionInteractions.ts +157 -147
  55. package/dist/sdk/src/hooks/useDatabaseSchema.ts +50 -0
  56. package/{template/packages → dist}/sdk/src/hooks/useDatabaseSubscription.ts +2 -2
  57. package/dist/sdk/src/hooks/useDocument.ts +51 -0
  58. package/{template/packages → dist}/sdk/src/hooks/useDocuments.ts +25 -59
  59. package/{template/packages → dist}/sdk/src/hooks/useHandover.ts +7 -7
  60. package/dist/sdk/src/hooks/useLongPressSelection.ts +79 -0
  61. package/dist/sdk/src/hooks/useMarqueeSelection.ts +194 -0
  62. package/{template/packages → dist}/sdk/src/hooks/useMultiSelect.ts +2 -8
  63. package/dist/sdk/src/hooks/useNativeDocumentBody.ts +50 -0
  64. package/dist/sdk/src/hooks/useNativeDocuments.ts +143 -0
  65. package/{template/packages → dist}/sdk/src/hooks/useNotis.ts +6 -1
  66. package/dist/sdk/src/hooks/useNotisNavigation.ts +70 -0
  67. package/dist/sdk/src/hooks/useQuery.ts +81 -0
  68. package/dist/sdk/src/hooks/useToolQuery.ts +12 -0
  69. package/dist/sdk/src/hooks/useTopBarSearch.ts +102 -0
  70. package/dist/sdk/src/hooks/useTopBarTitleLeaf.ts +75 -0
  71. package/{template/packages → dist}/sdk/src/hooks/useUpsertDocument.ts +1 -1
  72. package/dist/sdk/src/hooks/useViewParams.ts +195 -0
  73. package/dist/sdk/src/hooks/useViewerReads.ts +129 -0
  74. package/{template/packages → dist}/sdk/src/index.ts +64 -1
  75. package/{template/packages → dist}/sdk/src/interactions/actions.ts +14 -1
  76. package/{template/packages → dist}/sdk/src/interactions/shortcuts.tsx +129 -23
  77. package/dist/sdk/src/interactions/visibility.ts +13 -0
  78. package/{template/packages → dist}/sdk/src/interactions.ts +5 -1
  79. package/dist/sdk/src/nativeData.ts +39 -0
  80. package/{template/packages → dist}/sdk/src/provider.tsx +9 -4
  81. package/dist/sdk/src/queryCache.ts +292 -0
  82. package/dist/sdk/src/queryErrors.ts +51 -0
  83. package/dist/sdk/src/runtime.ts +675 -0
  84. package/dist/sdk/src/runtimeModules.ts +33 -0
  85. package/dist/sdk/src/space.ts +442 -0
  86. package/dist/sdk/src/standardViewParams.ts +36 -0
  87. package/{template/packages → dist}/sdk/src/styles.css +81 -16
  88. package/dist/sdk/src/tailwind.ts +66 -0
  89. package/dist/sdk/src/ui/charts/RenderChartData.tsx +25 -0
  90. package/dist/sdk/src/ui/engine/core.ts +392 -0
  91. package/dist/sdk/src/ui/engine/dom.ts +183 -0
  92. package/dist/sdk/src/ui/engine/hooks.ts +195 -0
  93. package/dist/sdk/src/ui/engine/instance.ts +63 -0
  94. package/dist/sdk/src/ui/engine/keycapContext.ts +2 -0
  95. package/dist/sdk/src/ui/engine/registry.ts +262 -0
  96. package/dist/sdk/src/ui/engine/types.ts +62 -0
  97. package/dist/sdk/src/ui/icons.tsx +91 -0
  98. package/dist/sdk/src/ui/util.ts +83 -0
  99. package/dist/sdk/src/viewPeriod.ts +26 -0
  100. package/dist/sdk/src/vite.ts +92 -0
  101. package/dist/sdk/src/words/actions.ts +295 -0
  102. package/dist/sdk/src/words/clashes.ts +158 -0
  103. package/dist/sdk/src/words/format.ts +136 -0
  104. package/dist/sdk/src/words/index.ts +13 -0
  105. package/dist/sdk/src/words/keymap.ts +72 -0
  106. package/dist/sdk/src/words/keys.ts +297 -0
  107. package/dist/sdk/src/words/shell.ts +46 -0
  108. package/dist/sdk/src/words/types.ts +65 -0
  109. package/dist/skill-sync/index.js +832 -151
  110. package/dist/skill-sync/index.js.map +4 -4
  111. package/dist/skill-sync-worker.mjs +3941 -0
  112. package/dist/space-harness/host.js +1460 -0
  113. package/dist/space-sdk/dist/chunk-ZSN57ATH.js +5 -0
  114. package/dist/space-sdk/dist/index.js +15 -0
  115. package/dist/space-sdk/dist/ui.js +18 -0
  116. package/dist/space-sdk/package.json +33 -0
  117. package/dist/space-sdk/src/agentContext.d.ts +36 -0
  118. package/dist/space-sdk/src/components/Dialog.d.ts +20 -0
  119. package/dist/space-sdk/src/components/DocumentEditor.d.ts +46 -0
  120. package/dist/space-sdk/src/components/DocumentPage.d.ts +53 -0
  121. package/dist/space-sdk/src/components/Markdown.d.ts +18 -0
  122. package/dist/space-sdk/src/components/MarkdownEditor.d.ts +11 -0
  123. package/dist/space-sdk/src/components/MultiSelectActionBar.d.ts +31 -0
  124. package/dist/space-sdk/src/components/MultiSelectCheckbox.d.ts +14 -0
  125. package/dist/space-sdk/src/components/MultiSelectDragOverlay.d.ts +8 -0
  126. package/dist/space-sdk/src/components/NotisCommentBoundary.d.ts +36 -0
  127. package/dist/space-sdk/src/components/NotisSelectionBoundary.d.ts +16 -0
  128. package/dist/space-sdk/src/components/RecordComponents.d.ts +64 -0
  129. package/dist/space-sdk/src/components/ShortcutHints.d.ts +12 -0
  130. package/dist/space-sdk/src/components/Skeleton.d.ts +23 -0
  131. package/dist/space-sdk/src/config.ts +31 -0
  132. package/dist/space-sdk/src/documents.d.ts +59 -0
  133. package/dist/space-sdk/src/hooks/useAction.d.ts +8 -0
  134. package/dist/space-sdk/src/hooks/useActiveResource.d.ts +3 -0
  135. package/dist/space-sdk/src/hooks/useAgentContext.d.ts +7 -0
  136. package/dist/space-sdk/src/hooks/useBackend.d.ts +23 -0
  137. package/dist/space-sdk/src/hooks/useCloudComputer.d.ts +45 -0
  138. package/dist/space-sdk/src/hooks/useCloudComputerShell.d.ts +49 -0
  139. package/dist/space-sdk/src/hooks/useCollectionInteractions.d.ts +118 -0
  140. package/dist/space-sdk/src/hooks/useDatabaseSchema.d.ts +14 -0
  141. package/dist/space-sdk/src/hooks/useDatabaseSubscription.d.ts +26 -0
  142. package/dist/space-sdk/src/hooks/useDocument.d.ts +22 -0
  143. package/dist/space-sdk/src/hooks/useDocuments.d.ts +31 -0
  144. package/dist/space-sdk/src/hooks/useHandover.d.ts +43 -0
  145. package/dist/space-sdk/src/hooks/useLongPressSelection.d.ts +9 -0
  146. package/dist/space-sdk/src/hooks/useMarqueeSelection.d.ts +57 -0
  147. package/dist/space-sdk/src/hooks/useMultiSelect.d.ts +51 -0
  148. package/dist/space-sdk/src/hooks/useNativeDocumentBody.d.ts +24 -0
  149. package/dist/space-sdk/src/hooks/useNativeDocuments.d.ts +55 -0
  150. package/dist/space-sdk/src/hooks/useNotis.d.ts +25 -0
  151. package/dist/space-sdk/src/hooks/useNotisNavigation.d.ts +33 -0
  152. package/dist/space-sdk/src/hooks/useQuery.d.ts +22 -0
  153. package/dist/space-sdk/src/hooks/useTool.d.ts +20 -0
  154. package/dist/space-sdk/src/hooks/useToolQuery.d.ts +3 -0
  155. package/dist/space-sdk/src/hooks/useTools.d.ts +15 -0
  156. package/dist/space-sdk/src/hooks/useTopBarSearch.d.ts +48 -0
  157. package/dist/space-sdk/src/hooks/useTopBarTitleLeaf.d.ts +24 -0
  158. package/dist/space-sdk/src/hooks/useUpsertDocument.d.ts +27 -0
  159. package/dist/space-sdk/src/hooks/useViewParams.d.ts +76 -0
  160. package/dist/space-sdk/src/hooks/useViewerReads.d.ts +38 -0
  161. package/dist/space-sdk/src/index.d.ts +98 -0
  162. package/dist/space-sdk/src/interactions/actions.d.ts +33 -0
  163. package/dist/space-sdk/src/interactions/shortcuts.d.ts +42 -0
  164. package/dist/space-sdk/src/interactions/visibility.d.ts +2 -0
  165. package/dist/space-sdk/src/nativeData.d.ts +66 -0
  166. package/dist/space-sdk/src/provider.d.ts +17 -0
  167. package/dist/space-sdk/src/queryCache.d.ts +45 -0
  168. package/dist/space-sdk/src/queryErrors.ts +51 -0
  169. package/dist/space-sdk/src/runtime.d.ts +615 -0
  170. package/dist/space-sdk/src/runtimeModules.ts +33 -0
  171. package/dist/space-sdk/src/space.ts +442 -0
  172. package/dist/space-sdk/src/standardViewParams.d.ts +15 -0
  173. package/dist/space-sdk/src/tailwind-candidates.d.ts +3418 -0
  174. package/dist/space-sdk/src/tailwind.ts +66 -0
  175. package/dist/space-sdk/src/ui/actions/ActionToast.d.ts +15 -0
  176. package/dist/space-sdk/src/ui/actions/actionWords.d.ts +16 -0
  177. package/dist/space-sdk/src/ui/actions/index.d.ts +7 -0
  178. package/dist/space-sdk/src/ui/actions/useActions.d.ts +69 -0
  179. package/dist/space-sdk/src/ui/actions/useToast.d.ts +41 -0
  180. package/dist/space-sdk/src/ui/blocks/Tabs.d.ts +139 -0
  181. package/dist/space-sdk/src/ui/blocks/blocks.d.ts +217 -0
  182. package/dist/space-sdk/src/ui/blocks/index.d.ts +4 -0
  183. package/dist/space-sdk/src/ui/board/BoardView.d.ts +36 -0
  184. package/dist/space-sdk/src/ui/board/boardModel.d.ts +46 -0
  185. package/dist/space-sdk/src/ui/board/boardWords.d.ts +9 -0
  186. package/dist/space-sdk/src/ui/board/index.d.ts +5 -0
  187. package/dist/space-sdk/src/ui/calendar/CalendarView.d.ts +49 -0
  188. package/dist/space-sdk/src/ui/calendar/DayPicker.d.ts +23 -0
  189. package/dist/space-sdk/src/ui/calendar/calendarMath.d.ts +81 -0
  190. package/dist/space-sdk/src/ui/charts/Chart.d.ts +203 -0
  191. package/dist/space-sdk/src/ui/charts/ChartTable.d.ts +37 -0
  192. package/dist/space-sdk/src/ui/charts/RenderChartData.d.ts +16 -0
  193. package/dist/space-sdk/src/ui/charts/StatRow.d.ts +59 -0
  194. package/dist/space-sdk/src/ui/charts/chartData.d.ts +84 -0
  195. package/dist/space-sdk/src/ui/comments/CommentPane.d.ts +58 -0
  196. package/dist/space-sdk/src/ui/comments/commentModel.d.ts +157 -0
  197. package/dist/space-sdk/src/ui/comments/commentWords.d.ts +60 -0
  198. package/dist/space-sdk/src/ui/comments/index.d.ts +4 -0
  199. package/dist/space-sdk/src/ui/comments/useComments.d.ts +146 -0
  200. package/dist/space-sdk/src/ui/engine/HelpSheet.d.ts +12 -0
  201. package/dist/space-sdk/src/ui/engine/KeyboardEngine.d.ts +27 -0
  202. package/dist/space-sdk/src/ui/engine/core.d.ts +73 -0
  203. package/dist/space-sdk/src/ui/engine/hooks.d.ts +64 -0
  204. package/dist/space-sdk/src/ui/engine/index.d.ts +14 -0
  205. package/dist/space-sdk/src/ui/engine/instance.d.ts +21 -0
  206. package/dist/space-sdk/src/ui/engine/keycapContext.d.ts +2 -0
  207. package/dist/space-sdk/src/ui/engine/registry.d.ts +77 -0
  208. package/dist/space-sdk/src/ui/engine/step.d.ts +11 -0
  209. package/dist/space-sdk/src/ui/engine/types.d.ts +54 -0
  210. package/dist/space-sdk/src/ui/fields/fieldWords.d.ts +56 -0
  211. package/dist/space-sdk/src/ui/fields/fields.d.ts +162 -0
  212. package/dist/space-sdk/src/ui/fields/index.d.ts +5 -0
  213. package/dist/space-sdk/src/ui/fields/useFieldDraft.d.ts +22 -0
  214. package/dist/space-sdk/src/ui/gallery/AttachmentGallery.d.ts +53 -0
  215. package/dist/space-sdk/src/ui/gallery/ImageViewer.d.ts +27 -0
  216. package/dist/space-sdk/src/ui/gallery/galleryWords.d.ts +95 -0
  217. package/dist/space-sdk/src/ui/gallery/index.d.ts +5 -0
  218. package/dist/space-sdk/src/ui/icons.d.ts +13 -0
  219. package/dist/space-sdk/src/ui/index.d.ts +54 -0
  220. package/dist/space-sdk/src/ui/keycap/Keycap.d.ts +22 -0
  221. package/dist/space-sdk/src/ui/keycap/index.d.ts +2 -0
  222. package/dist/space-sdk/src/ui/layout/Panels.d.ts +50 -0
  223. package/dist/space-sdk/src/ui/layout/chatPanelEdge.d.ts +77 -0
  224. package/dist/space-sdk/src/ui/layout/index.d.ts +5 -0
  225. package/dist/space-sdk/src/ui/layout/panelMath.d.ts +91 -0
  226. package/dist/space-sdk/src/ui/list/ListReader.d.ts +380 -0
  227. package/dist/space-sdk/src/ui/list/Row.d.ts +145 -0
  228. package/dist/space-sdk/src/ui/list/SelectionBar.d.ts +65 -0
  229. package/dist/space-sdk/src/ui/list/index.d.ts +14 -0
  230. package/dist/space-sdk/src/ui/list/rowState.d.ts +22 -0
  231. package/dist/space-sdk/src/ui/list/useListKeys.d.ts +89 -0
  232. package/dist/space-sdk/src/ui/list/useReorder.d.ts +86 -0
  233. package/dist/space-sdk/src/ui/list/useSelection.d.ts +90 -0
  234. package/dist/space-sdk/src/ui/open/OpenAsMenu.d.ts +15 -0
  235. package/dist/space-sdk/src/ui/open/index.d.ts +6 -0
  236. package/dist/space-sdk/src/ui/open/openModeStore.d.ts +39 -0
  237. package/dist/space-sdk/src/ui/open/useOpenMode.d.ts +17 -0
  238. package/dist/space-sdk/src/ui/overlay/Menu.d.ts +88 -0
  239. package/dist/space-sdk/src/ui/overlay/Popover.d.ts +28 -0
  240. package/dist/space-sdk/src/ui/overlay/Tooltip.d.ts +19 -0
  241. package/dist/space-sdk/src/ui/overlay/index.d.ts +9 -0
  242. package/dist/space-sdk/src/ui/overlay/layerRoot.d.ts +24 -0
  243. package/dist/space-sdk/src/ui/overlay/position.d.ts +31 -0
  244. package/dist/space-sdk/src/ui/period/PeriodPicker.d.ts +30 -0
  245. package/dist/space-sdk/src/ui/period/dateFormat.d.ts +50 -0
  246. package/dist/space-sdk/src/ui/period/dateWords.d.ts +88 -0
  247. package/dist/space-sdk/src/ui/period/periods.d.ts +70 -0
  248. package/dist/space-sdk/src/ui/period/usePeriod.d.ts +23 -0
  249. package/dist/space-sdk/src/ui/present/index.d.ts +3 -0
  250. package/dist/space-sdk/src/ui/present/presentWords.d.ts +27 -0
  251. package/dist/space-sdk/src/ui/present/screens.d.ts +36 -0
  252. package/dist/space-sdk/src/ui/present/useAudienceScreen.d.ts +38 -0
  253. package/dist/space-sdk/src/ui/styles.d.ts +21 -0
  254. package/dist/space-sdk/src/ui/timeline/TimelineView.d.ts +44 -0
  255. package/dist/space-sdk/src/ui/timeline/timelineMath.d.ts +123 -0
  256. package/dist/space-sdk/src/viewPeriod.d.ts +8 -0
  257. package/dist/space-sdk/src/vite.ts +92 -0
  258. package/dist/space-sdk/src/words/actions.ts +295 -0
  259. package/dist/space-sdk/src/words/clashes.ts +158 -0
  260. package/dist/space-sdk/src/words/format.ts +136 -0
  261. package/dist/space-sdk/src/words/index.ts +13 -0
  262. package/dist/space-sdk/src/words/keymap.ts +72 -0
  263. package/dist/space-sdk/src/words/keys.ts +297 -0
  264. package/dist/space-sdk/src/words/shell.ts +46 -0
  265. package/dist/space-sdk/src/words/types.ts +65 -0
  266. package/dist/view-renderer/dist/host.css +1 -0
  267. package/dist/view-renderer/dist/host.js +2374 -0
  268. package/dist/view-renderer/dist/theme.css +73 -0
  269. package/dist/view-renderer/src/dom.js +212 -0
  270. package/dist/view-renderer/src/errors.js +8 -0
  271. package/dist/view-renderer/src/host.tsx +250 -0
  272. package/dist/view-renderer/src/index.js +4 -0
  273. package/dist/view-renderer/src/png.js +213 -0
  274. package/dist/view-renderer/src/pool.js +110 -0
  275. package/dist/view-renderer/src/remote-broker.js +59 -0
  276. package/dist/view-renderer/src/renderer.js +279 -0
  277. package/package.json +21 -11
  278. package/skills/notis-cli/AGENT_INSTRUCTIONS.md +63 -12
  279. package/skills/notis-onboarding/BRIEF.md +14 -9
  280. package/skills/notis-query/cli.md +1 -1
  281. package/skills/notis-spaces/cli.md +540 -0
  282. package/src/cli.js +8 -8
  283. package/src/command-specs/agents.js +121 -8
  284. package/src/command-specs/auth.js +3 -3
  285. package/src/command-specs/diagnostics.js +97 -20
  286. package/src/command-specs/documents.js +158 -0
  287. package/src/command-specs/files.js +29 -0
  288. package/src/command-specs/handover.js +331 -79
  289. package/src/command-specs/helpers.js +50 -40
  290. package/src/command-specs/index.js +14 -5
  291. package/src/command-specs/meta.js +38 -9
  292. package/src/command-specs/onboarding.js +1 -1
  293. package/src/command-specs/profile.js +42 -1
  294. package/src/command-specs/skills.js +314 -9
  295. package/src/command-specs/smoke.js +16 -4
  296. package/src/command-specs/spaces.js +783 -0
  297. package/src/command-specs/tools.js +118 -21
  298. package/src/command-specs/version-history.js +20 -0
  299. package/src/command-specs/views.js +69 -0
  300. package/src/runtime/agent-browser.js +178 -267
  301. package/src/runtime/agent-setup.js +172 -13
  302. package/src/runtime/app-boundary-validator.js +338 -2
  303. package/src/runtime/app-data-literals.js +82 -0
  304. package/src/runtime/app-platform.js +750 -1570
  305. package/src/runtime/auth-recovery.js +17 -0
  306. package/src/runtime/base-skills.d.ts +11 -0
  307. package/src/runtime/base-skills.js +100 -3
  308. package/src/runtime/computer-identity.d.ts +30 -0
  309. package/src/runtime/computer-identity.js +151 -0
  310. package/src/runtime/config-lock.js +135 -0
  311. package/src/runtime/confined-space-build.js +74 -0
  312. package/src/runtime/confined-space-verify.js +49 -0
  313. package/src/runtime/delegated-context.js +5 -21
  314. package/src/runtime/native-record-files.js +47 -0
  315. package/src/runtime/oauth.js +342 -31
  316. package/src/runtime/profiles.js +19 -112
  317. package/src/runtime/retired-sdk-files.js +24 -0
  318. package/src/runtime/retry.js +150 -0
  319. package/src/runtime/skill-sync/cloud-client.ts +33 -8
  320. package/src/runtime/skill-sync/index.ts +443 -106
  321. package/src/runtime/skill-sync/local-scanner.ts +248 -32
  322. package/src/runtime/skill-sync/native-identity.ts +102 -0
  323. package/src/runtime/skill-sync/native-plan.ts +70 -0
  324. package/src/runtime/skill-sync/symlink-manager.ts +66 -16
  325. package/src/runtime/skill-sync/sync-plan.ts +34 -2
  326. package/src/runtime/skill-sync/types.ts +54 -0
  327. package/src/runtime/skill-sync/write-cloud-skill.ts +4 -4
  328. package/src/runtime/skill-sync-service.js +109 -0
  329. package/src/runtime/source-root.js +32 -0
  330. package/src/runtime/space-collection-scaffold.js +107 -0
  331. package/src/runtime/space-database-structures.js +229 -0
  332. package/src/runtime/space-fixture-broker.js +68 -0
  333. package/src/runtime/space-lock.js +337 -0
  334. package/src/runtime/space-platform.js +133 -0
  335. package/src/runtime/space-source.js +290 -0
  336. package/src/runtime/space-test-server.js +354 -0
  337. package/src/runtime/space-verification.js +94 -0
  338. package/src/runtime/space-verify-browser-worker.js +51 -0
  339. package/src/runtime/space-view-manifest.js +368 -0
  340. package/src/runtime/sync-skills.d.ts +5 -1
  341. package/src/runtime/sync-skills.js +11 -2
  342. package/src/runtime/tool-confirmation.js +138 -0
  343. package/src/runtime/transport.js +118 -24
  344. package/src/runtime/upsell.js +219 -0
  345. package/src/runtime/view-render.js +49 -0
  346. package/src/skill-sync-worker-entry.js +2 -0
  347. package/src/skill-sync-worker.js +114 -0
  348. package/src/space-harness-host.ts +122 -0
  349. package/template/.harness/index.html.tmpl +9 -352
  350. package/template/app/globals.css +29 -3
  351. package/template/app/layout.tsx +2 -6
  352. package/template/components/ui/badge.tsx +7 -4
  353. package/template/components/ui/button.tsx +1 -1
  354. package/template/components/ui/native-select.tsx +24 -0
  355. package/template/notis.config.ts +4 -36
  356. package/template/package-lock.json +1800 -1867
  357. package/template/package.json +16 -14
  358. package/template/postcss.config.mjs +1 -1
  359. package/template/tailwind.config.ts +1 -6
  360. package/template/tsconfig.json +1 -0
  361. package/template/vite.config.ts +2 -2
  362. package/dist/base-skills/notis-apps/SKILL.md +0 -613
  363. package/skills/notis-apps/cli.md +0 -285
  364. package/src/command-specs/apps.js +0 -3011
  365. package/src/runtime/app-changelog.js +0 -79
  366. package/src/runtime/app-dev-consumers.js +0 -154
  367. package/src/runtime/app-dev-host-lock.js +0 -80
  368. package/src/runtime/app-dev-process-identity.js +0 -111
  369. package/src/runtime/app-dev-roots.js +0 -284
  370. package/src/runtime/app-dev-server.js +0 -1140
  371. package/src/runtime/app-dev-sessions.js +0 -185
  372. package/src/runtime/app-registry-scaffolds.js +0 -367
  373. package/src/runtime/assets/store-screenshot-dark.png +0 -0
  374. package/src/runtime/cli-mode.generated.js +0 -5
  375. package/src/runtime/cli-mode.js +0 -34
  376. package/src/runtime/store-screenshot.js +0 -143
  377. package/template/CHANGELOG.md +0 -5
  378. package/template/app/page.tsx +0 -60
  379. package/template/components/ui/card.tsx +0 -56
  380. package/template/packages/sdk/src/components/DocumentEditor.tsx +0 -103
  381. package/template/packages/sdk/src/config.ts +0 -259
  382. package/template/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
  383. package/template/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
  384. package/template/packages/sdk/src/hooks/useDocument.ts +0 -78
  385. package/template/packages/sdk/src/hooks/useNotisNavigation.ts +0 -52
  386. package/template/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
  387. package/template/packages/sdk/src/runtime.ts +0 -439
  388. package/template/packages/sdk/src/vite.ts +0 -56
  389. package/template/packages/sdk/tsconfig.json +0 -15
  390. /package/{template/packages → dist}/sdk/src/components/MultiSelectDragOverlay.tsx +0 -0
  391. /package/{template/packages → dist}/sdk/src/components/ShortcutHints.tsx +0 -0
  392. /package/{template/packages → dist}/sdk/src/hooks/useActiveResource.ts +0 -0
  393. /package/{template/packages → dist}/sdk/src/hooks/useTool.ts +0 -0
  394. /package/{template/packages → dist}/sdk/src/hooks/useTools.ts +0 -0
  395. /package/{template/packages → dist}/sdk/src/ui.ts +0 -0
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@notis/sdk",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./src/index.d.ts",
8
+ "node": "./dist/index.js"
9
+ },
10
+ "./ui": {
11
+ "types": "./src/ui/index.d.ts",
12
+ "node": "./dist/ui.js"
13
+ },
14
+ "./words": "./src/words/index.ts",
15
+ "./config": "./src/config.ts",
16
+ "./vite": "./src/vite.ts"
17
+ },
18
+ "dependencies": {
19
+ "date-fns": "^4.4.0",
20
+ "react-day-picker": "^10.0.2",
21
+ "react-markdown": "^10.1.0",
22
+ "recharts": "^3.10.1",
23
+ "remark-gfm": "^4.0.1"
24
+ },
25
+ "peerDependencies": {
26
+ "@vitejs/plugin-react": ">=4.0.0",
27
+ "react": ">=18.0.0",
28
+ "react-dom": ">=18.0.0",
29
+ "vite": ">=5.0.0"
30
+ },
31
+ "description": "Notis SDK types for Spaces. The Notis host provides @notis/sdk and @notis/sdk/ui at runtime; dist/ serves Node tests only.",
32
+ "types": "./src/index.d.ts"
33
+ }
@@ -0,0 +1,36 @@
1
+ /** Serializable context shared with the agent. Apps own annotation storage. */
2
+ export interface ContextAttachment {
3
+ /** Durable HTTPS URL supplied by the app. Sent through the host media pipeline. */
4
+ url: string;
5
+ name: string;
6
+ mimeType: string;
7
+ }
8
+ export interface AgentContextContent {
9
+ title?: string;
10
+ /** Emoji, Phosphor icon name, or HTTPS image URL. Never executable markup. */
11
+ icon?: string;
12
+ /** An app-defined kind, not a closed list of annotation types. */
13
+ kind?: string;
14
+ text?: string;
15
+ comment?: string;
16
+ preview?: {
17
+ format: 'text' | 'markdown';
18
+ content: string;
19
+ };
20
+ /** Any JSON-serializable value: coordinates, chart state, loaded records, etc. */
21
+ data?: unknown;
22
+ attachments?: ContextAttachment[];
23
+ }
24
+ export interface AgentContextItem extends AgentContextContent {
25
+ /** Stable within this app. The host scopes IDs to the originating app. */
26
+ id: string;
27
+ resource?: import('./runtime').ContextResource | null;
28
+ }
29
+ /** Host-stamped origin. Apps describe resources; the host identifies the app/view. */
30
+ export interface AgentContextSource {
31
+ appId: string;
32
+ appName: string;
33
+ viewSlug: string;
34
+ viewName: string;
35
+ viewUrl?: string | null;
36
+ }
@@ -0,0 +1,20 @@
1
+ import React, { type ReactNode } from 'react';
2
+ export interface DialogProps {
3
+ open: boolean;
4
+ /** Request dismissal. Keep open unchanged to prevent dismissal while saving. */
5
+ onClose: () => void;
6
+ title: ReactNode;
7
+ description?: ReactNode;
8
+ role?: 'dialog' | 'alertdialog';
9
+ /**
10
+ * A confirmation: on phones and tablets the operating system's own dialog asks instead of the card. OK clicks the
11
+ * button marked `data-dialog-confirm`; Cancel clicks the one marked `data-dialog-cancel`, else calls `onClose`.
12
+ * Desktop browsers and the Desktop app keep the card.
13
+ */
14
+ nativeOnTouch?: boolean;
15
+ children: ReactNode;
16
+ }
17
+ /** Touch-first devices confirm with the operating system's dialog, as the Portal's AlertDialog does. */
18
+ export declare function prefersNativeConfirm(): boolean;
19
+ /** Native top-layer dialog; content and actions remain app-owned. */
20
+ export declare function Dialog({ open, onClose, title, description, role, nativeOnTouch, children }: DialogProps): React.JSX.Element;
@@ -0,0 +1,46 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { NotisDocumentEditorProps } from '../runtime';
3
+ /** The words of the read-only document preview, in English and French (C7). */
4
+ export declare const DOCUMENT_EDITOR_WORDS: Readonly<{
5
+ loading: {
6
+ en: string;
7
+ fr: string;
8
+ };
9
+ readOnly: {
10
+ en: string;
11
+ fr: string;
12
+ };
13
+ report: {
14
+ en: string;
15
+ fr: string;
16
+ };
17
+ html: {
18
+ en: string;
19
+ fr: string;
20
+ };
21
+ view: {
22
+ en: string;
23
+ fr: string;
24
+ };
25
+ file: {
26
+ en: string;
27
+ fr: string;
28
+ };
29
+ anyFile: {
30
+ en: string;
31
+ fr: string;
32
+ };
33
+ }>;
34
+ /**
35
+ * Embeds the document editor for a document anywhere in an app view. The host
36
+ * (portal) provides the implementation through `runtime.ui.DocumentEditor` and
37
+ * dispatches on the document's content type (markdown -> rich text editor,
38
+ * files -> matching viewer, views -> their trusted native Documents surface).
39
+ * Outside the portal this falls back to a read-only preview or an explicit
40
+ * open-in-Space notice for native views.
41
+ *
42
+ * ```tsx
43
+ * <DocumentEditor documentId={entry.id} variant="body" className="min-h-[320px]" />
44
+ * ```
45
+ */
46
+ export declare function DocumentEditor(props: NotisDocumentEditorProps): ReactElement;
@@ -0,0 +1,53 @@
1
+ import { type ReactElement } from 'react';
2
+ import type { NotisDocumentPageProps } from '../runtime';
3
+ /** Column widths shared by the host page, its skeleton and the fallback, so nothing moves when the page arrives. */
4
+ export declare const DOCUMENT_PAGE_WIDTHS: {
5
+ readonly standard: 900;
6
+ readonly wide: 1200;
7
+ readonly full: undefined;
8
+ };
9
+ /**
10
+ * The page's horizontal gutter: 16px, then 48px from 640px wide (the host page's px-4 sm:px-12), and its
11
+ * toolbar height (56px plus its 1px border, Beta's py-3 toolbar). The skeleton uses the same values.
12
+ */
13
+ export declare const DOCUMENT_PAGE_GUTTER: {
14
+ readonly narrow: 16;
15
+ readonly wide: 48;
16
+ readonly breakpoint: 640;
17
+ readonly toolbar: 57;
18
+ };
19
+ /**
20
+ * Placeholder shaped like the document page (toolbar, icon row, title, meta strip, body lines) at the
21
+ * same column width and gutter, so the page replaces it without a layout shift. Hosts show it while the
22
+ * record and the editor load; a Space can show it while its own data decides which record opens.
23
+ */
24
+ export declare function DocumentPageSkeleton({ width, className, label }: {
25
+ width?: NotisDocumentPageProps['width'];
26
+ className?: string;
27
+ label?: string;
28
+ }): ReactElement;
29
+ /**
30
+ * The full page of one record that is the main content of a Space view, such as a note: breadcrumb,
31
+ * Saving or Saved status, '...' menu, cover, icon, title, meta strip, properties that save
32
+ * automatically, and the collaborative body with presence. The host (Portal) draws it and keeps one
33
+ * save queue for the whole record. Files open in their viewer under the header; HTML and reports show
34
+ * only the toolbar (breadcrumb, actions, Share, '...' menu) above their frame, with no header, meta,
35
+ * properties, aboveBody or belowBody. `viewer: 'html'` opens a record whose one stored `.html` file is
36
+ * the page (for example a note that keeps a saved HTML report) the same way.
37
+ *
38
+ * ```tsx
39
+ * if (params.note) return <DocumentPage recordKey={params.note}
40
+ * breadcrumb={[{ label: 'All notes', onSelect: () => setParams({ note: null }) }]}
41
+ * actions={<TrashButton />} onSaved={() => notes.refetch()} />;
42
+ * ```
43
+ *
44
+ * Slots (`breadcrumb`, `actions`, `menuItems`, `aboveBody`, `belowBody`) and toggles (`share`,
45
+ * `header`, `meta`, `properties`, `width`) adjust it; `layout` rearranges its parts. Hosts without
46
+ * this component show the record with `DocumentEditor` instead.
47
+ */
48
+ export declare function DocumentPage(props: NotisDocumentPageProps): ReactElement;
49
+ /**
50
+ * Starts reading a record before it opens (for example on a list row's hover or focus), so its
51
+ * DocumentPage shows at once. Does nothing outside a host that supports it.
52
+ */
53
+ export declare function usePrefetchRecord(): (recordKey: string) => void;
@@ -0,0 +1,18 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type Components } from 'react-markdown';
3
+ export interface MarkdownProps {
4
+ /** Markdown source to render. */
5
+ value: string;
6
+ /** Typography scale. 'sm' suits dense surfaces (cards, list rows). */
7
+ size?: 'sm' | 'base';
8
+ className?: string;
9
+ /** Per-element overrides, passed through to react-markdown. */
10
+ components?: Components;
11
+ }
12
+ /**
13
+ * Renders a markdown value with Notis typography. Markdown is a value type:
14
+ * use this anywhere markdown appears (document content, database fields,
15
+ * generated text). Styling comes from `.notis-markdown` rules in the SDK
16
+ * stylesheet and follows the portal theme variables.
17
+ */
18
+ export declare function Markdown({ value, size, className, components }: MarkdownProps): ReactElement;
@@ -0,0 +1,11 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { NotisMarkdownEditorProps } from '../runtime';
3
+ /** The words of the fallback Markdown editor, in English and French (C9). */
4
+ export declare const MARKDOWN_EDITOR_WORDS: Readonly<{
5
+ placeholder: {
6
+ en: string;
7
+ fr: string;
8
+ };
9
+ }>;
10
+ /** Use Notis' editor while leaving persistence entirely under app control; outside Notis a plain EN/FR textarea stands in. */
11
+ export declare function MarkdownEditor(props: NotisMarkdownEditorProps): ReactElement;
@@ -0,0 +1,31 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ import type { ResolvedCollectionAction } from '../interactions/actions';
3
+ import type { ShortcutScope } from '../interactions/shortcuts';
4
+ export type MultiSelectAction = ResolvedCollectionAction;
5
+ /** The Portal owns global launcher positioning; app code only reports its own bar. */
6
+ export declare const BULK_ACTION_LAYOUT_EVENT = "notis:bulk-actions-layout";
7
+ export interface BulkActionLayoutDetail {
8
+ bar: HTMLElement;
9
+ active: boolean;
10
+ }
11
+ export interface MultiSelectActionBarProps {
12
+ selectedCount: number;
13
+ actions: MultiSelectAction[];
14
+ /** Override the "{count} selected" label units. Default: "selected" with no item word. */
15
+ itemLabel?: {
16
+ singular: string;
17
+ plural: string;
18
+ };
19
+ /** Optional extra class on the outer container (composed alongside the inline styles). */
20
+ className?: string;
21
+ /** Optional override for the bar's positioning style. Defaults to bottom-center floating. */
22
+ style?: CSSProperties;
23
+ /** Disable action key bindings while leaving the visible toolbar mounted. */
24
+ shortcutsEnabled?: boolean;
25
+ /** Override the default collection shortcut scope. */
26
+ shortcutScope?: ShortcutScope;
27
+ collectionOwnerId?: string;
28
+ isAvailable?: () => boolean;
29
+ onClearSelection?: () => void;
30
+ }
31
+ export declare function MultiSelectActionBar({ selectedCount, actions, itemLabel, className, style, shortcutsEnabled, shortcutScope, collectionOwnerId, isAvailable, onClearSelection, }: MultiSelectActionBarProps): ReactElement | null;
@@ -0,0 +1,14 @@
1
+ import { type CSSProperties, type MouseEvent as ReactMouseEvent, type ReactElement } from 'react';
2
+ export interface MultiSelectCheckboxProps {
3
+ isSelected: boolean;
4
+ onClick: (event: ReactMouseEvent) => void;
5
+ disabled?: boolean;
6
+ /** When true, the checkbox is always visible. Default false (hover/focus reveal via the parent's :hover state). */
7
+ alwaysVisible?: boolean;
8
+ /** Optional aria-label override. Defaults to "Select item" / "Deselect item". */
9
+ ariaLabel?: string;
10
+ className?: string;
11
+ /** Optional inline-style override merged with the defaults. */
12
+ style?: CSSProperties;
13
+ }
14
+ export declare function MultiSelectCheckbox({ isSelected, onClick, disabled, alwaysVisible, ariaLabel, className, style, }: MultiSelectCheckboxProps): ReactElement;
@@ -0,0 +1,8 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ import type { DragRect } from '../hooks/useMultiSelect';
3
+ export interface MultiSelectDragOverlayProps {
4
+ rect: DragRect | null;
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ }
8
+ export declare function MultiSelectDragOverlay({ rect, className, style, }: MultiSelectDragOverlayProps): ReactElement | null;
@@ -0,0 +1,36 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import type { ContextResource } from '../runtime';
3
+ export interface NotisCommentBoxProps {
4
+ quote?: string;
5
+ value: string;
6
+ onChange(value: string): void;
7
+ onSubmit(): void;
8
+ onCancel(): void;
9
+ pending?: boolean;
10
+ error?: string;
11
+ className?: string;
12
+ }
13
+ /** Compact, chrome-themed presentation. Apps retain ownership of comment state. */
14
+ export declare function NotisCommentBox({ quote, value, onChange, onSubmit, onCancel, pending, error, className }: NotisCommentBoxProps): React.JSX.Element;
15
+ export interface NotisCommentBoundaryProps {
16
+ resource?: ContextResource | null;
17
+ children: ReactNode;
18
+ className?: string;
19
+ commentClassName?: string;
20
+ /** Replace the optional standard editor while retaining selection/context behavior. */
21
+ renderComment?: (props: NotisCommentBoxProps) => ReactNode;
22
+ }
23
+ type SelectionRect = Pick<DOMRect, 'left' | 'right' | 'top' | 'bottom'>;
24
+ /** Place the tile after the final selected line, otherwise below (or above near the viewport bottom). */
25
+ export declare function getCommentActionPosition(rects: SelectionRect[], viewport: {
26
+ width: number;
27
+ height: number;
28
+ }, rightBoundary?: number, trailing?: SelectionRect[]): {
29
+ left: number;
30
+ top: number;
31
+ };
32
+ /** Browser paragraph selection may include an adjacent block's empty starting boundary. */
33
+ export declare function getOwnedCommentRange(selected: Range, content: Element): Range | null;
34
+ /** Selection-to-chat convenience. No annotation database, polling or background attachment. */
35
+ export declare function NotisCommentBoundary({ resource, children, className, commentClassName, renderComment }: NotisCommentBoundaryProps): React.JSX.Element;
36
+ export {};
@@ -0,0 +1,16 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import React from 'react';
3
+ import type { ContextResource } from '../runtime';
4
+ export declare const NOTIS_CONTEXT_CLIPBOARD_TYPE = "application/x-notis-context+json";
5
+ export interface NotisSelectionBoundaryProps {
6
+ resource?: ContextResource | null;
7
+ children: ReactNode;
8
+ className?: string;
9
+ style?: CSSProperties;
10
+ }
11
+ /**
12
+ * Adds structured provenance to ordinary copied text. Pasting still works in
13
+ * every app because `text/plain` is preserved; Notis chat additionally reads
14
+ * the custom MIME payload and renders a separate quote pill.
15
+ */
16
+ export declare function NotisSelectionBoundary({ resource, children, className, style, }: NotisSelectionBoundaryProps): React.JSX.Element;
@@ -0,0 +1,64 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { NotisHtmlFrameProps, NotisRecordPropertiesProps, NotisReportFrameProps, NotisShareControlProps, NotisSpacePageFrameProps } from '../runtime';
3
+ /** The words a record component says outside Notis, in English and French. */
4
+ export declare const RECORD_COMPONENT_WORDS: Readonly<{
5
+ unavailable: {
6
+ en: string;
7
+ fr: string;
8
+ };
9
+ /** Short enough for a toolbar (C11); the full sentence is its tooltip. */
10
+ shareUnavailable: {
11
+ en: string;
12
+ fr: string;
13
+ };
14
+ shareUnavailableHint: {
15
+ en: string;
16
+ fr: string;
17
+ };
18
+ spacePageTitle: {
19
+ en: string;
20
+ fr: string;
21
+ };
22
+ spacePagePreview: {
23
+ en: string;
24
+ fr: string;
25
+ };
26
+ spacePageOpen: {
27
+ en: string;
28
+ fr: string;
29
+ };
30
+ }>;
31
+ /** What a record component shows when the host does not draw it: one sentence, in the Space's language. */
32
+ export declare function RecordComponentUnavailable({ className }: {
33
+ className?: string;
34
+ }): ReactElement;
35
+ /** The record's properties, drawn by the host. */
36
+ export declare function RecordProperties(props: NotisRecordPropertiesProps): ReactElement;
37
+ /** The host applies its viewer CSP and an opaque-origin sandbox; source cannot relax either. */
38
+ export declare function HtmlFrame(props: NotisHtmlFrameProps): ReactElement;
39
+ /** A saved report's frame, drawn by the host. */
40
+ export declare function ReportFrame(props: NotisReportFrameProps): ReactElement;
41
+ /**
42
+ * Private/shared state, copy link and revoke, backed by this record's Site. Outside Notis it sits in a toolbar as a
43
+ * short muted label whose tooltip says where sharing works (C11), never a sentence that fills the bar.
44
+ */
45
+ export declare function ShareControl(props: NotisShareControlProps): ReactElement;
46
+ /**
47
+ * The path a Space page link names and the link the fallback card may open: a site-relative path, or an http(s) URL
48
+ * without credentials. Anything else (script URLs, protocol-relative links) opens nothing.
49
+ */
50
+ export declare function spacePageLink(href: string): {
51
+ path: string;
52
+ openHref: string | null;
53
+ };
54
+ /** What a Space page frame shows when the host does not draw it (previews, verify): its title, its path and Open page. */
55
+ export declare function SpacePageCard({ href, title, className, notice }: Pick<NotisSpacePageFrameProps, 'href' | 'title' | 'className'> & {
56
+ /** One sentence under the path; default: the page shows live once the Space opens in Notis. */
57
+ notice?: string;
58
+ }): ReactElement;
59
+ /**
60
+ * Another Space page shown live inside this view. The host loads only a Space page of its own Notis origin, with the
61
+ * viewer's own access; any other link (and every host without the frame) shows a card with the title, the path and
62
+ * Open page. Not interactive by default, so a deck around it keeps its keys and clicks.
63
+ */
64
+ export declare function SpacePageFrame(props: NotisSpacePageFrameProps): ReactElement;
@@ -0,0 +1,12 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ export interface ShortcutHint {
3
+ id: string;
4
+ keys: string;
5
+ label: string;
6
+ }
7
+ export interface ShortcutHintsProps {
8
+ shortcuts: ShortcutHint[];
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ }
12
+ export declare function ShortcutHints({ shortcuts, className, style }: ShortcutHintsProps): ReactElement | null;
@@ -0,0 +1,23 @@
1
+ import type { CSSProperties } from 'react';
2
+ import { type Locale, type Words } from '../words/types';
3
+ /** What a loading placeholder says to screen readers. */
4
+ export declare const SKELETON_WORDS: Readonly<{
5
+ loading: {
6
+ en: string;
7
+ fr: string;
8
+ };
9
+ }>;
10
+ /** Content-shaped placeholder. Never use it to replace a successful cached result. */
11
+ export declare function Skeleton({ className, style }: {
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }): import("react").JSX.Element;
15
+ /** A whole view loading: a title bar and table, cards, graph or detail placeholders, named for screen readers in the Space's language. */
16
+ export declare function ViewSkeleton({ variant, rows, label, locale }: {
17
+ variant?: 'table' | 'cards' | 'graph' | 'detail';
18
+ rows?: number;
19
+ /** What loads, said to screen readers ("Loading meetings"). Default "Loading content". */
20
+ label?: Words | string;
21
+ /** Default the Space's locale. */
22
+ locale?: Locale;
23
+ }): import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ export { defineSpace, defineSpaces } from './space';
2
+ export type { SpaceDefinition, SpacesWorkspace, SpaceActionTemplate, SpaceResourceReference, SpaceDatabaseCreate } from './space';
3
+ export type { SpaceViewParam, SpaceViewParamType, SpaceShows, SpaceMemoryPolicy, SpaceMemorySnapshot, SpaceChrome, SpaceMarkdownInput } from './space';
4
+
5
+ /**
6
+ * Configuration utilities for notis.config.ts and Space definitions.
7
+ *
8
+ * Usage:
9
+ * ```ts
10
+ * // notis.config.ts
11
+ * import { defineSpaces } from '@notis/sdk/config';
12
+ *
13
+ * export default defineSpaces({
14
+ * spaces: { notes: { definition: 'spaces/notes/space.config.ts' } },
15
+ * });
16
+ * ```
17
+ *
18
+ * Each definition file exports `defineSpace({ ... })`. `notis spaces build`
19
+ * reads only these two shapes.
20
+ */
21
+
22
+ /**
23
+ * Identity helper kept so older sources whose configuration files still import
24
+ * it keep loading and bundling. It accepts any object and returns it unchanged;
25
+ * `notis spaces build` never reads that shape.
26
+ *
27
+ * @deprecated Use `defineSpaces` for the workspace index and `defineSpace` for each Space.
28
+ */
29
+ export function defineNotisApp<T extends object>(config: T): T {
30
+ return config;
31
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Document data helpers: normalize raw tool results (Notion-shaped property
3
+ * values, snake_case fields) into the SDK's `DocumentRecord`/`DatabaseProperty`
4
+ * shapes, and derive plain-text projections from typed content.
5
+ *
6
+ * These are pure functions — safe in any context (portal, dev harness, tests).
7
+ */
8
+ import type { DatabaseProperty, DocumentRecord, SecretPropertyValue } from './runtime';
9
+ import { type Locale } from './words/types';
10
+ /** The words the document helpers fall back on. */
11
+ export declare const DOCUMENT_WORDS: Readonly<{
12
+ untitled: {
13
+ en: string;
14
+ fr: string;
15
+ };
16
+ }>;
17
+ /** The locale of the fallback words ("Untitled"). Default English; the SDK hooks pass the Space's locale. */
18
+ export interface DocumentWordsOptions {
19
+ locale?: Locale;
20
+ }
21
+ export declare function isPresentString(value: unknown): value is string;
22
+ export declare function asRecord(value: unknown): Record<string, unknown> | null;
23
+ export declare function optionalString(value: unknown): string | null;
24
+ /** Flattens a Notion-shaped rich_text array (or plain string) to text. */
25
+ export declare function extractRichText(value: unknown): string;
26
+ /**
27
+ * Reads a `secret` property value. The platform only ever sends the pointer
28
+ * ({present, reference, status, metadata}), so this rebuilds it field by field
29
+ * rather than passing the payload through — an app can never surface secret
30
+ * material through this helper, whatever the server sent.
31
+ */
32
+ export declare function getSecretValue(value: unknown): SecretPropertyValue;
33
+ /** Extracts the ids of a normalized relation property value. */
34
+ export declare function getRelationIds(value: unknown): string[];
35
+ /**
36
+ * Collapses a Notion-shaped property value ({type: 'select', select: {...}})
37
+ * into a plain JS value (string, string[], number, boolean, ...). Values that
38
+ * are already plain pass through unchanged.
39
+ */
40
+ export declare function normalizePropertyValue(value: unknown): unknown;
41
+ /**
42
+ * Normalizes a raw document from a Notis database tool result
43
+ * (LOCAL_NOTIS_DATABASE_QUERY / GET_DOCUMENT / UPSERT_*) into a
44
+ * `DocumentRecord`: camelCases fields and collapses property values. A
45
+ * document with no title is titled "Untitled" in `options.locale`.
46
+ */
47
+ export declare function normalizeDocumentRecord(value: unknown, options?: DocumentWordsOptions): DocumentRecord;
48
+ /** Normalizes a raw schema property from LOCAL_NOTIS_DATABASE_GET_DATABASE. */
49
+ export declare function normalizeDatabaseProperty(value: unknown): DatabaseProperty | null;
50
+ /** Strips markdown syntax to readable plain text (previews, search). */
51
+ export declare function markdownToPlainText(markdown: string): string;
52
+ /** Flattens BlockNote block JSON to plain text. */
53
+ export declare function blockNoteToPlainText(blocks: unknown): string;
54
+ /**
55
+ * Best-available plain-text preview for a document:
56
+ * plainText -> contentMarkdown -> contentBlocknote -> title, else "Untitled"
57
+ * in `options.locale`.
58
+ */
59
+ export declare function getDocumentPreview(document: DocumentRecord, options?: DocumentWordsOptions): string;
@@ -0,0 +1,8 @@
1
+ import { type UseQueryOptions, type UseQueryResult } from './useQuery';
2
+ import type { SpaceActionOptions } from '../space';
3
+ export declare function useAction<TInput extends Record<string, unknown> = Record<string, unknown>, TResult = unknown>(actionId: string): {
4
+ call: (inputs: TInput, options?: SpaceActionOptions) => Promise<TResult>;
5
+ loading: boolean;
6
+ error: Error | null;
7
+ };
8
+ export declare function useActionQuery<TResult = unknown>(actionId: string, inputs: Record<string, unknown>, options?: UseQueryOptions): UseQueryResult<TResult>;
@@ -0,0 +1,3 @@
1
+ import type { ContextResource } from '../runtime';
2
+ /** Keep Notis aware of the resource currently open inside an app view. */
3
+ export declare function useActiveResource(resource: ContextResource | null): void;
@@ -0,0 +1,7 @@
1
+ import type { AgentContextItem } from '../agentContext';
2
+ /** Share context without owning storage, opening a new thread, or sending a message. */
3
+ export declare function useAgentContext(): {
4
+ add(item: AgentContextItem): Promise<boolean>;
5
+ update(item: AgentContextItem): Promise<boolean>;
6
+ remove(id: string): Promise<boolean>;
7
+ };
@@ -0,0 +1,23 @@
1
+ interface UseBackendResult {
2
+ /**
3
+ * Make an authenticated request to the Notis backend.
4
+ * The path should be an absolute backend path (e.g. `/portal_composio/toolkits`).
5
+ */
6
+ request: (path: string, options?: {
7
+ method?: string;
8
+ headers?: Record<string, string>;
9
+ body?: unknown;
10
+ }) => Promise<unknown>;
11
+ }
12
+ /**
13
+ * Raw backend request proxy. Use this for custom server endpoints or
14
+ * integration APIs not covered by the typed hooks.
15
+ * Spaces deny raw requests; use useAction or useActionQuery for declared actions.
16
+ *
17
+ * ```tsx
18
+ * const { request } = useBackend();
19
+ * const data = await request('/portal_composio/toolkits', { method: 'GET' });
20
+ * ```
21
+ */
22
+ export declare function useBackend(): UseBackendResult;
23
+ export {};
@@ -0,0 +1,45 @@
1
+ import type { CloudComputerFacts, NotisRuntime } from '../runtime';
2
+ /** Cache key of the facts read; re-read once the viewer allows a Space to use the cloud computer. */
3
+ export declare const CLOUD_COMPUTER_FACTS_KEY: readonly ['cloud-computer-facts'];
4
+ /** Marks the facts stale in the host cache so every mounted `useCloudComputer()` reads them again. */
5
+ export declare function invalidateCloudComputerFacts(runtime: NotisRuntime | null): void;
6
+ export interface UseCloudComputerResult {
7
+ /**
8
+ * The facts, or null while the first read is in flight. `facts.available`
9
+ * is false when this host cannot answer — render the app's own fallback.
10
+ */
11
+ facts: CloudComputerFacts | null;
12
+ loading: boolean;
13
+ isFetching: boolean;
14
+ error: Error | null;
15
+ /** Re-read the facts. The platform caches them for a few minutes. */
16
+ refresh: () => Promise<void>;
17
+ /**
18
+ * Space only (`cloudComputer: 'read'` or `'shell'`): ask the host to show its approval prompt.
19
+ * Resolves true once the viewer allowed it (the facts are then read again), false when they did
20
+ * not, and null on hosts without the prompt (Beta Apps, Sites, previews offline).
21
+ */
22
+ requestApproval: () => Promise<boolean | null>;
23
+ }
24
+ /**
25
+ * Read-only facts about the user's cloud computer.
26
+ *
27
+ * ```tsx
28
+ * const { facts } = useCloudComputer();
29
+ * const gh = facts?.available ? facts.cli_auth.gh : null;
30
+ *
31
+ * return gh?.authenticated
32
+ * ? <p>Signed in as {gh.account}</p>
33
+ * : <GithubConnect />;
34
+ * ```
35
+ *
36
+ * Requires `cloudComputer: 'read'` (or `'shell'`) in `defineSpace` and the
37
+ * viewer's approval; until the viewer allows it the facts answer
38
+ * unavailable, so offer `requestApproval()`. It answers with state the platform already
39
+ * holds: reading it never creates, resumes or commands a sandbox, and the GitHub
40
+ * probe only runs when the sandbox is already awake. `authenticated: null`
41
+ * therefore means *unknown*, not *signed out* — keep the app's own fallback for
42
+ * that case and for hosts that answer `{ available: false }` (the dev harness,
43
+ * the vite preview).
44
+ */
45
+ export declare function useCloudComputer(): UseCloudComputerResult;