@openviking/react 0.1.1 → 0.1.3

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 (229) hide show
  1. package/README.md +18 -15
  2. package/dist/1~0.js +506 -0
  3. package/dist/2~0.js +122 -0
  4. package/dist/30~0.js +1332 -0
  5. package/dist/3~0.js +2113 -4
  6. package/dist/ark-message-list-view~0.js +310 -0
  7. package/dist/c7~0.js +24 -0
  8. package/dist/client/index.d.ts +2 -1
  9. package/dist/client/paths.d.ts +64 -0
  10. package/dist/client/response.d.ts +31 -0
  11. package/dist/client/sse.d.ts +39 -0
  12. package/dist/client/stream.d.ts +26 -0
  13. package/dist/client/types.d.ts +104 -0
  14. package/dist/client.js +1 -239
  15. package/dist/components/agent-connect/agent-connect-copy.d.ts +34 -0
  16. package/dist/components/agent-connect/agent-connect-design.d.ts +1781 -0
  17. package/dist/components/agent-connect/agent-connect-detail.d.ts +13 -0
  18. package/dist/components/agent-connect/agent-connect-installer.d.ts +3 -0
  19. package/dist/components/agent-connect/agent-connect-instructions-view.d.ts +14 -0
  20. package/dist/components/agent-connect/agent-connect-instructions.d.ts +145 -0
  21. package/dist/components/agent-connect/agent-connect-markdown.d.ts +3 -0
  22. package/dist/components/agent-connect/agent-connect.d.ts +3 -3
  23. package/dist/components/agent-connect/content-en.d.ts +137 -0
  24. package/dist/components/agent-connect/content-zh.d.ts +137 -0
  25. package/dist/components/agent-connect/style.css +495 -6
  26. package/dist/components/agent-connect/types.d.ts +20 -166
  27. package/dist/components/file-browser-entries/file-browser-entries-icons.d.ts +18 -0
  28. package/dist/components/file-browser-entries/file-browser-entries.d.ts +14 -0
  29. package/dist/components/file-browser-entries/index.d.ts +1 -0
  30. package/dist/components/file-browser-entries/style.css +155 -0
  31. package/dist/components/file-browser-entries/types.d.ts +45 -0
  32. package/dist/components/file-browser-entries.js +1 -0
  33. package/dist/components/file-preview/file-preview-adapters.d.ts +33 -0
  34. package/dist/components/file-preview/file-preview-body.d.ts +24 -12
  35. package/dist/components/file-preview/file-preview-breadcrumb-menu.d.ts +16 -0
  36. package/dist/components/file-preview/file-preview-breadcrumb.d.ts +21 -0
  37. package/dist/components/file-preview/file-preview-copy-path.d.ts +12 -0
  38. package/dist/components/file-preview/file-preview-directory.d.ts +32 -0
  39. package/dist/components/file-preview/file-preview-editor.d.ts +22 -0
  40. package/dist/components/file-preview/file-preview-handle-adapters.d.ts +26 -0
  41. package/dist/components/file-preview/file-preview-header.d.ts +41 -14
  42. package/dist/components/file-preview/file-preview-labels.d.ts +15 -4
  43. package/dist/components/file-preview/file-preview-lazy-viewer.d.ts +3 -0
  44. package/dist/components/file-preview/file-preview-panels.d.ts +41 -0
  45. package/dist/components/file-preview/file-preview-path.d.ts +30 -0
  46. package/dist/components/file-preview/file-preview-source.d.ts +24 -0
  47. package/dist/components/file-preview/file-preview-state.d.ts +35 -0
  48. package/dist/components/file-preview/file-preview-tab-row.d.ts +16 -0
  49. package/dist/components/file-preview/file-preview-viewer.d.ts +31 -0
  50. package/dist/components/file-preview/file-preview.d.ts +9 -11
  51. package/dist/components/file-preview/level-selection.d.ts +25 -0
  52. package/dist/components/file-preview/style.css +4055 -126
  53. package/dist/components/file-preview/types.d.ts +350 -170
  54. package/dist/components/file-preview/use-directory-level.d.ts +30 -0
  55. package/dist/components/file-preview/use-file-preview-actions-context.d.ts +27 -0
  56. package/dist/components/file-preview/use-file-preview-actions.d.ts +19 -0
  57. package/dist/components/file-preview/use-file-preview-editing.d.ts +21 -2
  58. package/dist/components/file-preview/use-file-preview-ids.d.ts +24 -0
  59. package/dist/components/file-preview.js +1 -442
  60. package/dist/components/file-tree/file-tree-body.d.ts +8 -4
  61. package/dist/components/file-tree/file-tree-entry-row.d.ts +9 -3
  62. package/dist/components/file-tree/file-tree-icons.d.ts +12 -5
  63. package/dist/components/file-tree/file-tree-info-labels.d.ts +21 -0
  64. package/dist/components/file-tree/file-tree-info-tooltip.d.ts +43 -0
  65. package/dist/components/file-tree/file-tree-info.d.ts +29 -0
  66. package/dist/components/file-tree/file-tree-keyboard.d.ts +8 -4
  67. package/dist/components/file-tree/file-tree-row-context.d.ts +29 -12
  68. package/dist/components/file-tree/file-tree-row-shared.d.ts +18 -0
  69. package/dist/components/file-tree/file-tree-spinner.d.ts +10 -0
  70. package/dist/components/file-tree/file-tree-state-row.d.ts +7 -0
  71. package/dist/components/file-tree/file-tree-tooltip-surface.d.ts +22 -0
  72. package/dist/components/file-tree/file-tree.d.ts +12 -1
  73. package/dist/components/file-tree/style.css +280 -75
  74. package/dist/components/file-tree/types.d.ts +203 -0
  75. package/dist/components/file-tree/use-file-tree-actions.d.ts +7 -0
  76. package/dist/components/file-tree.js +1 -1
  77. package/dist/components/scope-switcher/scope-panel.d.ts +9 -3
  78. package/dist/components/scope-switcher/scope-selector.d.ts +1 -1
  79. package/dist/components/scope-switcher/scope-switcher.d.ts +1 -1
  80. package/dist/components/scope-switcher/style.css +282 -76
  81. package/dist/components/scope-switcher/types.d.ts +230 -108
  82. package/dist/components/style.css +14128 -390
  83. package/dist/components/tui/command-catalog.d.ts +58 -0
  84. package/dist/components/tui/command-completion.d.ts +19 -0
  85. package/dist/components/tui/command-definitions.d.ts +10 -0
  86. package/dist/components/tui/command-input.d.ts +16 -0
  87. package/dist/components/tui/style.css +1543 -5
  88. package/dist/components/tui/tui-assist.d.ts +15 -0
  89. package/dist/components/tui/tui-code-block.d.ts +8 -0
  90. package/dist/components/tui/tui-command-help.d.ts +9 -0
  91. package/dist/components/tui/tui-command-text.d.ts +6 -0
  92. package/dist/components/tui/tui-composer.d.ts +24 -0
  93. package/dist/components/tui/tui-copy-button.d.ts +9 -0
  94. package/dist/components/tui/tui-input-mirror.d.ts +14 -0
  95. package/dist/components/tui/tui-labels-zh.d.ts +2 -0
  96. package/dist/components/tui/tui-labels.d.ts +5 -0
  97. package/dist/components/tui/tui-markdown-renderers.d.ts +10 -0
  98. package/dist/components/tui/tui-markdown.d.ts +6 -0
  99. package/dist/components/tui/tui-param-hint.d.ts +7 -0
  100. package/dist/components/tui/tui-record-time.d.ts +11 -0
  101. package/dist/components/tui/tui-record.d.ts +13 -0
  102. package/dist/components/tui/tui-resource-preview.d.ts +10 -0
  103. package/dist/components/tui/tui-resource-tree.d.ts +10 -0
  104. package/dist/components/tui/tui-result-header.d.ts +7 -0
  105. package/dist/components/tui/tui-result-text.d.ts +5 -0
  106. package/dist/components/tui/tui-search-list.d.ts +8 -0
  107. package/dist/components/tui/tui-skeleton.d.ts +6 -0
  108. package/dist/components/tui/tui-status-card.d.ts +7 -0
  109. package/dist/components/tui/tui-text.d.ts +10 -0
  110. package/dist/components/tui/tui-uri-text.d.ts +19 -0
  111. package/dist/components/tui/tui-write-result.d.ts +7 -0
  112. package/dist/components/tui/tui.d.ts +10 -2
  113. package/dist/components/tui/types.d.ts +57 -15
  114. package/dist/components/tui/use-tui-assist-position.d.ts +3 -0
  115. package/dist/components/tui/use-tui-completion.d.ts +14 -0
  116. package/dist/components/tui/use-tui-composer-keyboard.d.ts +25 -0
  117. package/dist/components/viking-bot/ark-adapter.d.ts +45 -0
  118. package/dist/components/viking-bot/ark-message-body.d.ts +16 -0
  119. package/dist/components/viking-bot/ark-message-list-view.d.ts +7 -0
  120. package/dist/components/viking-bot/ark-message-row.d.ts +19 -0
  121. package/dist/components/viking-bot/index.d.ts +10 -0
  122. package/dist/components/viking-bot/interaction/ask-human-fields.d.ts +10 -0
  123. package/dist/components/viking-bot/interaction/index.d.ts +4 -0
  124. package/dist/components/viking-bot/interaction/labels.d.ts +7 -0
  125. package/dist/components/viking-bot/interaction/lazy-interaction.d.ts +3 -0
  126. package/dist/components/viking-bot/interaction/schedule-input.d.ts +13 -0
  127. package/dist/components/viking-bot/interaction/style.css +189 -0
  128. package/dist/components/viking-bot/interaction/style.js +0 -0
  129. package/dist/components/viking-bot/interaction/types.d.ts +188 -0
  130. package/dist/components/viking-bot/interaction/viking-bot-interaction.d.ts +9 -0
  131. package/dist/components/viking-bot/interaction.js +2 -0
  132. package/dist/components/viking-bot/labels.d.ts +2 -0
  133. package/dist/components/viking-bot/lazy-composer.d.ts +3 -0
  134. package/dist/components/viking-bot/message-groups.d.ts +12 -0
  135. package/dist/components/viking-bot/model.d.ts +252 -0
  136. package/dist/components/viking-bot/render-part.d.ts +12 -0
  137. package/dist/components/viking-bot/style.css +7135 -0
  138. package/dist/components/viking-bot/style.js +0 -0
  139. package/dist/components/viking-bot/types.d.ts +140 -0
  140. package/dist/components/viking-bot/viking-bot-composer.d.ts +6 -0
  141. package/dist/components/viking-bot/viking-bot-message-list.d.ts +3 -0
  142. package/dist/components/viking-bot/viking-bot.d.ts +16 -0
  143. package/dist/components/viking-bot.js +4 -0
  144. package/dist/c~0.js +201 -0
  145. package/dist/file-preview-viewer~0.js +191 -0
  146. package/dist/f~0.js +149 -77
  147. package/dist/h~0.js +58 -0
  148. package/dist/icons/file-type-icon.d.ts +31 -0
  149. package/dist/icons/index.d.ts +33 -23
  150. package/dist/icons/nextjs-icon.d.ts +19 -0
  151. package/dist/icons.js +1 -25
  152. package/dist/index.d.ts +4 -2
  153. package/dist/index.js +2 -1
  154. package/dist/k~0.js +1440 -0
  155. package/dist/lk~0.js +25 -12
  156. package/dist/l~0.js +1464 -25
  157. package/dist/modules/console/style.css +83 -1
  158. package/dist/modules/file-browser/file-browser-detail-icons.d.ts +10 -0
  159. package/dist/modules/file-browser/file-browser-detail.d.ts +33 -0
  160. package/dist/modules/file-browser/file-browser-empty.d.ts +3 -0
  161. package/dist/modules/file-browser/file-browser-failure.d.ts +22 -0
  162. package/dist/modules/file-browser/file-browser-icons.d.ts +18 -0
  163. package/dist/modules/file-browser/file-browser-labels.d.ts +28 -0
  164. package/dist/modules/file-browser/file-browser-layout.d.ts +27 -0
  165. package/dist/modules/file-browser/file-browser-toolbar.d.ts +18 -0
  166. package/dist/modules/file-browser/file-browser-tree-pane.d.ts +30 -0
  167. package/dist/modules/file-browser/file-browser.d.ts +14 -5
  168. package/dist/modules/file-browser/find-result.d.ts +24 -0
  169. package/dist/modules/file-browser/fs-directories.d.ts +33 -0
  170. package/dist/modules/file-browser/fs-file-kind.d.ts +19 -0
  171. package/dist/modules/file-browser/fs-icon.d.ts +17 -0
  172. package/dist/modules/file-browser/fs-model.d.ts +106 -0
  173. package/dist/modules/file-browser/fs-page.d.ts +16 -0
  174. package/dist/modules/file-browser/fs-path.d.ts +16 -0
  175. package/dist/modules/file-browser/fs-read-directory.d.ts +20 -0
  176. package/dist/modules/file-browser/fs-scope.d.ts +22 -0
  177. package/dist/modules/file-browser/fs-stat.d.ts +25 -0
  178. package/dist/modules/file-browser/index.d.ts +3 -1
  179. package/dist/modules/file-browser/style.css +5009 -34
  180. package/dist/modules/file-browser/tree-info-copy.d.ts +15 -0
  181. package/dist/modules/file-browser/tree-info-copy.zh-CN.d.ts +15 -0
  182. package/dist/modules/file-browser/types.d.ts +189 -44
  183. package/dist/modules/file-browser/use-container-width.d.ts +17 -0
  184. package/dist/modules/file-browser/use-file-browser.d.ts +49 -0
  185. package/dist/modules/file-browser/use-fs-preview.d.ts +51 -0
  186. package/dist/modules/file-browser/use-fs-search.d.ts +35 -0
  187. package/dist/modules/file-browser/use-fs-tree.d.ts +43 -0
  188. package/dist/modules/file-browser/use-request-scope.d.ts +39 -0
  189. package/dist/modules/file-browser.js +1 -1
  190. package/dist/modules/scope-cascade/style.css +282 -76
  191. package/dist/modules/style.css +5445 -130
  192. package/dist/n~0.js +568 -236
  193. package/dist/o~0.js +103 -0
  194. package/dist/shared/components/divider/divider.d.ts +18 -0
  195. package/dist/shared/components/divider/index.d.ts +1 -0
  196. package/dist/shared/components/divider/types.d.ts +35 -0
  197. package/dist/shared/components/overlay/types.d.ts +7 -0
  198. package/dist/shared/components/overlay/use-overlay-position.d.ts +38 -0
  199. package/dist/shared/components/popover/index.d.ts +1 -0
  200. package/dist/shared/components/popover/popover.d.ts +23 -0
  201. package/dist/shared/components/popover/types.d.ts +50 -0
  202. package/dist/shared/components/resizable/clamp.d.ts +13 -0
  203. package/dist/shared/components/resizable/index.d.ts +2 -0
  204. package/dist/shared/components/resizable/resizable-handle.d.ts +25 -0
  205. package/dist/shared/components/resizable/types.d.ts +48 -0
  206. package/dist/shared/components/tooltip/index.d.ts +1 -0
  207. package/dist/shared/components/tooltip/tooltip.d.ts +25 -0
  208. package/dist/shared/components/tooltip/types.d.ts +42 -0
  209. package/dist/style.css +19664 -530
  210. package/dist/u~0.js +1597 -4
  211. package/dist/viking-bot-composer~0.js +164 -0
  212. package/dist/viking-bot-interaction~0.js +284 -0
  213. package/dist/w~0.js +19 -0
  214. package/package.json +23 -10
  215. package/dist/components/file-preview/file-preview-icons.d.ts +0 -2
  216. package/dist/components/file-preview/file-preview-operations.d.ts +0 -1
  217. package/dist/components/file-tree/file-tree-dom.d.ts +0 -4
  218. package/dist/components/file-tree/file-tree-labels.d.ts +0 -5
  219. package/dist/components/file-tree/file-tree-rows.d.ts +0 -12
  220. package/dist/components/file-tree/file-tree-tooltip.d.ts +0 -11
  221. package/dist/i~0.js +0 -21
  222. package/dist/modules/file-browser/file-browser-toolbar-button.d.ts +0 -10
  223. package/dist/modules/task-center/columns.d.ts +0 -129
  224. package/dist/modules/task-center/index.d.ts +0 -1
  225. package/dist/modules/task-center/style.css +0 -29
  226. package/dist/modules/task-center/task-center.d.ts +0 -4
  227. package/dist/modules/task-center/types.d.ts +0 -168
  228. package/dist/modules/task-center.js +0 -1
  229. /package/dist/{modules/task-center → components/file-browser-entries}/style.js +0 -0
package/README.md CHANGED
@@ -2,29 +2,32 @@
2
2
 
3
3
  English / [中文](README_CN.md)
4
4
 
5
- React foundations for OpenViking AI application interfaces: build tooling, documentation, layered directories, and scoped styles. FileTree and FilePreview provide placeholder views, alongside five file-type icons. Three business module placeholders support early layout integration; ScopeCascade provides a working cascade Hook and composition.
5
+ React foundations for OpenViking AI application interfaces: build tooling, documentation, layered directories, and scoped styles. FileTree, Tui and FilePreview provide working views, alongside five file-type icons. Two business module placeholders support early layout integration; ScopeCascade provides a working cascade Hook and composition.
6
6
 
7
7
  This package inherits the repository's AGPL-3.0-only license. The release workflow publishes it to npm when a `react@<version>` tag matches the version in this package's manifest.
8
8
 
9
9
  ## Module map
10
10
 
11
- | Source directory | Public entry | Responsibility |
12
- | ---------------------------------------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------- |
13
- | [components/file-tree](./src/components/file-tree/README.md) | `@openviking/react/components/file-tree` | Directory tree rendering, expansion, selection and event callbacks; view is a placeholder |
14
- | [components/file-preview](./src/components/file-preview/README.md) | `@openviking/react/components/file-preview` | Read-only preview state and extension tabs; view is a placeholder |
15
- | [components/tui](./src/components/tui/README.md) | `@openviking/react/components/tui` | Reviewed command record, result and input types; view is a placeholder |
16
- | [components/scope-switcher](./src/components/scope-switcher/README.md) | `@openviking/react/components/scope-switcher` | Stateless scope layout and independent ScopeSelector options, panels and search |
17
- | [components/agent-connect](./src/components/agent-connect/README.md) | `@openviking/react/components/agent-connect` | Agent connection tab, list and detail contract; view is a placeholder |
18
- | [modules](./src/modules/README.md) | `@openviking/react/modules/<module>` | ScopeCascade Hooks and composition, plus three placeholder business modules |
19
- | [client](./src/client/index.ts) | `@openviking/react/client` | Framework-neutral request client: `createOvClient`, `OvClient`, `OvClientError` |
20
- | [hooks](./src/hooks/README.md), [utils](./src/utils/README.md) | Internal only | Cross-module Hooks and pure utilities |
11
+ | Source directory | Public entry | Responsibility |
12
+ | ---------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------- |
13
+ | [components/file-tree](./src/components/file-tree/README.md) | `@openviking/react/components/file-tree` | Directory tree rendering, expansion, selection and event callbacks |
14
+ | [components/file-preview](./src/components/file-preview/README.md) | `@openviking/react/components/file-preview` | Read-only preview state and extension tabs; view is a placeholder |
15
+ | [components/tui](./src/components/tui/README.md) | `@openviking/react/components/tui` | Command record, result and input views with host-provided command metadata |
16
+ | [components/scope-switcher](./src/components/scope-switcher/README.md) | `@openviking/react/components/scope-switcher` | Stateless scope layout and independent ScopeSelector options, panels and search |
17
+ | [components/agent-connect](./src/components/agent-connect/README.md) | `@openviking/react/components/agent-connect` | Fixed Figma connection view with original icons, built-in copy and clipboard feedback |
18
+ | [components/viking-bot](./src/components/viking-bot/README.md) | `@openviking/react/components/viking-bot` | Conversation contract with a placeholder view rendering against it |
19
+ | [modules](./src/modules/README.md) | `@openviking/react/modules/<module>` | ScopeCascade Hooks and composition, plus two placeholder business modules |
20
+ | [client](./src/client/index.ts) | `@openviking/react/client` | Framework-neutral request client: `createOvClient`, `OvClient`, `OvClientError` |
21
+ | [hooks](./src/hooks/README.md), [utils](./src/utils/README.md) | Internal only | Cross-module Hooks and pure utilities |
21
22
 
22
- Components implement their reviewed contracts incrementally. FileTree renders every documented row type with keyboard interaction; FilePreview implements the tab shell, header actions and the plain-text preview and editing foundation, with its body not yet wired to FileViewer. ScopeSwitcher is a stateless layout container; independently rendered ScopeSelector children own visibility, with host-owned per-level data subscriptions, search and requests. Tui and AgentConnect render a fixed-size shell only. Limits are described in each component's own docs. The package also ships five file-type icons.
23
+ Components implement their reviewed contracts incrementally. FileTree renders every documented row type with keyboard interaction; FilePreview implements the tab shell, header actions and the plain-text preview and editing foundation, with its body not yet wired to FileViewer. ScopeSwitcher is a stateless layout container; independently rendered ScopeSelector children own visibility, with host-owned per-level data subscriptions, search and requests. Tui renders records, results and the input. AgentConnect follows the Figma layout with built-in bilingual agent and developer integration content, host-provided credentials and locale, optional controlled selection and clipboard feedback. VikingBot provides a working view pending design review. Limits are described in each component's own docs. The package also ships five file-type icons.
23
24
 
24
- Components receive view data and state through props and express user intent through callbacks, following the [component directory conventions](./src/components/AGENTS.md). [modules](./src/modules/README.md) plan Hooks and views per business capability: Hooks load data, hold state and expose operations, and composite views wire them into components. Full pages and product-specific flows belong to the host; the admin console is out of scope for this phase. `file-browser`, `console` and `task-center` currently ship placeholder components, base Props / Labels types and styles so hosts can integrate layout first; business Hooks, data loading and cross-component coordination are not implemented yet.
25
+ Components receive view data and state through props and express user intent through callbacks, following the [component directory conventions](./src/components/AGENTS.md). [modules](./src/modules/README.md) plan Hooks and views per business capability: Hooks load data, hold state and expose operations, and composite views wire them into components. Full pages and product-specific flows belong to the host; the admin console is out of scope for this phase. `file-browser` and `console` currently ship placeholder components, base Props / Labels types and styles so hosts can integrate layout first; business Hooks, data loading and cross-component coordination are not implemented yet.
25
26
 
26
27
  Modules consume the native OpenViking API through a shared Client by default, with the Provider supplying `baseURL`, headers and other configuration, and modules or standalone Hooks overriding individual fields through `requestOptions`. Standard integration needs no per-module Adapter; nonstandard gateways are adapted at the host's request boundary. The request contract — `OvRequestOptions`, `OvClient` and `OvClientError` — comes from the `@openviking/react/client` subpath, which ships a `fetch`-based `createOvClient`; the Provider is exported from the same subpath; these native API module Hooks are not implemented yet. ScopeCascade instead accepts three host API adapters and needs no Provider. See [request conventions](./src/modules/README.md#request-conventions-and-default-configuration).
27
28
 
29
+ Tui preserves JSON numeric tokens when indenting output. Structured resource links allow only `viking://`, `https://`, and `http://`; other targets render as text. Resource tables retain entry titles, native links and metadata. Output follows updates only near the bottom or after explicit submission. Read-only and disabled consoles cannot submit or insert help commands. `labels.resource` customizes the resource identity column.
30
+
28
31
  ### Props conventions
29
32
 
30
33
  The same props are consumed by different hosts. Hosts differ in flows and interfaces while matching in interaction and UI, so:
@@ -37,7 +40,7 @@ The same props are consumed by different hosts. Hosts differ in flows and interf
37
40
 
38
41
  ## Public entries and styles
39
42
 
40
- - The root entry exports each component and each business module placeholder with its main Props type (`<Component>Props`) only — currently `FileTree`, `Tui`, `ScopeSwitcher`, `ScopeSelector`, `ScopeCascade`, `AgentConnect` and the three business module placeholders. Row types, option types, handles and label bags come from the `components/<component>` and `modules/<module>` subpaths. `FilePreview` is not on the root entry: its types reference the optional `@ark-design/ui`, and putting it there would make that peer required. ScopeCascade exports a working three-level composition and per-level subscription Hooks from `modules/scope-cascade`; other business modules remain placeholders. No aggregate `@openviking/react/components` or `@openviking/react/modules` JavaScript entry. Package exports are listed explicitly and internal files stay closed.
43
+ - The root entry exports each component and each business module placeholder with its main Props type (`<Component>Props`) only — currently `FileTree`, `Tui`, `ScopeSwitcher`, `ScopeSelector`, `ScopeCascade`, `AgentConnect` and the two business module placeholders. Row types, option types, handles and label bags come from the `components/<component>` and `modules/<module>` subpaths. `FilePreview` is not on the root entry: its types reference the optional `@ark-design/ui`, and putting it there would make that peer required. ScopeCascade exports a working three-level composition and per-level subscription Hooks from `modules/scope-cascade`; other business modules remain placeholders. No aggregate `@openviking/react/components` or `@openviking/react/modules` JavaScript entry. Package exports are listed explicitly and internal files stay closed.
41
44
  - Components expose only the explicitly listed layered subpaths, with no legacy path aliases.
42
45
  - JS entries share implementations and never load CSS implicitly. Whole-package, component-set and single-module stylesheets are built from the same source, so import the scope you need.
43
46
 
@@ -60,7 +63,7 @@ import '@openviking/react/modules/file-browser/style.css';
60
63
  />;
61
64
  ```
62
65
 
63
- The other modules export `Console` and `TaskCenter`; all currently accept `className`, `style` and `labels`, and need no Provider or request configuration.
66
+ The remaining module exports `Console`; it currently accepts `className`, `style` and `labels`, and needs no Provider or request configuration.
64
67
 
65
68
  Experience dashboards belong to preview extensions; task progress starts inside its owning module; API Key display controls are reused on demand while credential creation and management belong to the host. No separate modules are added for these now.
66
69
 
package/dist/1~0.js ADDED
@@ -0,0 +1,506 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo } from "react";
3
+ class OvClientError extends Error {
4
+ code;
5
+ statusCode;
6
+ details;
7
+ requestId;
8
+ responseBody;
9
+ constructor(options){
10
+ super(options.message, void 0 === options.cause ? void 0 : {
11
+ cause: options.cause
12
+ });
13
+ this.name = 'OvClientError';
14
+ this.code = options.code;
15
+ this.statusCode = options.statusCode;
16
+ this.details = options.details;
17
+ this.requestId = options.requestId;
18
+ this.responseBody = options.responseBody;
19
+ }
20
+ }
21
+ function isOvClientError(value) {
22
+ return value instanceof OvClientError;
23
+ }
24
+ const IDENTITY_HEADERS = {
25
+ apiKey: 'X-API-Key',
26
+ accountId: 'X-OpenViking-Account',
27
+ userId: 'X-OpenViking-User',
28
+ resourceId: 'V-Resource-Id'
29
+ };
30
+ async function evaluate(value) {
31
+ if (void 0 === value) return;
32
+ return 'function' == typeof value ? await value() : value;
33
+ }
34
+ async function resolveIdentityLayer(options) {
35
+ const layer = {};
36
+ for (const field of Object.keys(IDENTITY_HEADERS)){
37
+ const value = await evaluate(options?.[field]);
38
+ if (void 0 !== value) layer[field] = value;
39
+ }
40
+ return layer;
41
+ }
42
+ function mergeIdentityLayers(far, near) {
43
+ return {
44
+ ...far,
45
+ ...near
46
+ };
47
+ }
48
+ function toHeaders(layer) {
49
+ const out = {};
50
+ for (const field of Object.keys(IDENTITY_HEADERS)){
51
+ const value = layer[field]?.trim();
52
+ if (value) out[IDENTITY_HEADERS[field].toLowerCase()] = value;
53
+ }
54
+ return out;
55
+ }
56
+ function resolveClientOptions(options, identity) {
57
+ return {
58
+ baseURL: options.baseURL ?? '',
59
+ credentials: options.credentials ?? 'same-origin',
60
+ headers: toHeaders(identity),
61
+ signal: options.signal
62
+ };
63
+ }
64
+ function resolveRequestOptions(local, parent, mergedLayer) {
65
+ const headers = {
66
+ ...parent.headers
67
+ };
68
+ for (const field of Object.keys(IDENTITY_HEADERS)){
69
+ const value = mergedLayer[field];
70
+ if (void 0 === value) continue;
71
+ const name = IDENTITY_HEADERS[field].toLowerCase();
72
+ if (value.trim()) headers[name] = value;
73
+ else delete headers[name];
74
+ }
75
+ return {
76
+ baseURL: local?.baseURL ?? parent.baseURL,
77
+ credentials: parent.credentials,
78
+ headers,
79
+ signal: local?.signal ?? parent.signal
80
+ };
81
+ }
82
+ function joinUrl(baseURL, path) {
83
+ const prefix = baseURL.replace(/\/+$/, '');
84
+ return `${prefix}${path.startsWith('/') ? path : `/${path}`}`;
85
+ }
86
+ function buildQuery(query) {
87
+ if (!query) return '';
88
+ const params = new URLSearchParams();
89
+ for (const [key, value] of Object.entries(query))if (null != value) {
90
+ if (Array.isArray(value)) {
91
+ for (const item of value)params.append(key, String(item));
92
+ continue;
93
+ }
94
+ params.set(key, String(value));
95
+ }
96
+ const text = params.toString();
97
+ return text ? `?${text}` : '';
98
+ }
99
+ function mergeProviderConfig(inherited, local) {
100
+ const declared = {};
101
+ if (void 0 !== local.apiKey) declared.apiKey = local.apiKey;
102
+ if (void 0 !== local.accountId) declared.accountId = local.accountId;
103
+ if (void 0 !== local.userId) declared.userId = local.userId;
104
+ if (void 0 !== local.resourceId) declared.resourceId = local.resourceId;
105
+ return {
106
+ baseURL: local.baseURL ?? inherited?.baseURL,
107
+ credentials: local.credentials ?? inherited?.credentials,
108
+ signal: local.signal ?? inherited?.signal,
109
+ fetch: local.fetch ?? inherited?.fetch,
110
+ identity: {
111
+ ...inherited?.identity,
112
+ ...declared
113
+ }
114
+ };
115
+ }
116
+ function isRecord(value) {
117
+ return 'object' == typeof value && null !== value && !Array.isArray(value);
118
+ }
119
+ function readEnvelope(value) {
120
+ return isRecord(value) ? value : {};
121
+ }
122
+ function parseJson(raw) {
123
+ if (!raw.trim()) return;
124
+ try {
125
+ return JSON.parse(raw);
126
+ } catch {
127
+ return;
128
+ }
129
+ }
130
+ function isAbortError(error) {
131
+ return isRecord(error) && ('AbortError' === error.name || 'ABORT_ERR' === error.code);
132
+ }
133
+ function normalizeTransportError(error, signal) {
134
+ if (isAbortError(error) || signal?.aborted) throw error;
135
+ throw new OvClientError({
136
+ code: 'NETWORK_ERROR',
137
+ message: error instanceof Error ? error.message : 'Network request failed',
138
+ cause: error
139
+ });
140
+ }
141
+ async function readText(response, signal) {
142
+ try {
143
+ return await response.text();
144
+ } catch (error) {
145
+ normalizeTransportError(error, signal);
146
+ }
147
+ }
148
+ async function readBlob(response, signal) {
149
+ try {
150
+ return await response.blob();
151
+ } catch (error) {
152
+ normalizeTransportError(error, signal);
153
+ }
154
+ }
155
+ function toClientError(response, body, fallbackCode) {
156
+ const envelope = readEnvelope(body);
157
+ return new OvClientError({
158
+ code: envelope.error?.code ?? fallbackCode ?? `HTTP_${response.status}`,
159
+ message: envelope.error?.message ?? response.statusText,
160
+ statusCode: response.status,
161
+ details: envelope.error?.details,
162
+ requestId: response.headers.get('x-request-id') ?? void 0,
163
+ responseBody: body
164
+ });
165
+ }
166
+ function throwIfErrorEnvelope(response, body) {
167
+ const envelope = readEnvelope(body);
168
+ if ('error' !== envelope.status) return;
169
+ throw toClientError(response, body, 'UNKNOWN');
170
+ }
171
+ function parseEvent(lines) {
172
+ let data;
173
+ let event;
174
+ let id;
175
+ let retry;
176
+ for (const line of lines){
177
+ if (!line || line.startsWith(':')) continue;
178
+ const colon = line.indexOf(':');
179
+ const field = colon < 0 ? line : line.slice(0, colon);
180
+ let value = colon < 0 ? '' : line.slice(colon + 1);
181
+ if (value.startsWith(' ')) value = value.slice(1);
182
+ if ('data' === field) data = void 0 === data ? value : `${data}\n${value}`;
183
+ else if ('event' === field) event = value;
184
+ else if ('id' === field) id = value;
185
+ else if ('retry' === field) {
186
+ const parsed = Number.parseInt(value, 10);
187
+ if (Number.isFinite(parsed)) retry = parsed;
188
+ }
189
+ }
190
+ if (void 0 === data && void 0 === event && void 0 === id) return;
191
+ const result = {
192
+ data: data ?? ''
193
+ };
194
+ if (void 0 !== event) result.event = event;
195
+ if (void 0 !== id) result.id = id;
196
+ if (void 0 !== retry) result.retry = retry;
197
+ return result;
198
+ }
199
+ function createDecoder() {
200
+ if ("u" > typeof TextDecoderStream) return new TextDecoderStream();
201
+ const decoder = new TextDecoder('utf-8');
202
+ return new TransformStream({
203
+ transform (bytes, controller) {
204
+ controller.enqueue(decoder.decode(bytes, {
205
+ stream: true
206
+ }));
207
+ },
208
+ flush (controller) {
209
+ const rest = decoder.decode();
210
+ if (rest) controller.enqueue(rest);
211
+ }
212
+ });
213
+ }
214
+ function decodeEventStream(body) {
215
+ let line = '';
216
+ let block = [];
217
+ let skipLf = false;
218
+ return body.pipeThrough(createDecoder()).pipeThrough(new TransformStream({
219
+ transform (chunk, controller) {
220
+ const finishLine = ()=>{
221
+ if ('' === line) {
222
+ const parsed = parseEvent(block);
223
+ block = [];
224
+ if (parsed) controller.enqueue(parsed);
225
+ return;
226
+ }
227
+ block.push(line);
228
+ line = '';
229
+ };
230
+ for (const char of chunk)if ('\r' === char) {
231
+ finishLine();
232
+ skipLf = true;
233
+ } else if ('\n' === char) if (skipLf) skipLf = false;
234
+ else finishLine();
235
+ else {
236
+ skipLf = false;
237
+ line += char;
238
+ }
239
+ },
240
+ flush (controller) {
241
+ if ('' !== line) block.push(line);
242
+ line = '';
243
+ const parsed = parseEvent(block);
244
+ block = [];
245
+ if (parsed) controller.enqueue(parsed);
246
+ }
247
+ }));
248
+ }
249
+ const EVENT_STREAM = 'text/event-stream';
250
+ async function openStream(spec, { send, resolveFor, defaults }) {
251
+ const controller = new AbortController();
252
+ let releaseAbort;
253
+ const aborted = new Promise((resolve)=>{
254
+ releaseAbort = ()=>resolve('aborted');
255
+ });
256
+ const stop = ()=>{
257
+ releaseAbort?.();
258
+ controller.abort();
259
+ };
260
+ const resolved = await resolveFor(defaults, spec.options);
261
+ const callerSignals = [
262
+ resolved.signal,
263
+ spec.options?.signal
264
+ ].filter((candidate)=>Boolean(candidate));
265
+ let onCallerAbort = ()=>stop();
266
+ const forward = ()=>onCallerAbort();
267
+ for (const callerSignal of callerSignals){
268
+ if (callerSignal.aborted) {
269
+ forward();
270
+ break;
271
+ }
272
+ callerSignal.addEventListener('abort', forward, {
273
+ once: true
274
+ });
275
+ }
276
+ const detach = ()=>{
277
+ for (const callerSignal of callerSignals)callerSignal.removeEventListener('abort', forward);
278
+ };
279
+ let response;
280
+ try {
281
+ ({ response } = await send(spec, {
282
+ accept: EVENT_STREAM,
283
+ ...spec.headers
284
+ }, controller.signal, resolved));
285
+ } catch (error) {
286
+ detach();
287
+ throw error;
288
+ }
289
+ let body;
290
+ try {
291
+ if (!response.ok) {
292
+ const raw = await readText(response, controller.signal);
293
+ throw toClientError(response, parseJson(raw) ?? raw);
294
+ }
295
+ const contentType = response.headers.get('content-type') ?? '';
296
+ if (!contentType.includes(EVENT_STREAM) || !response.body) {
297
+ const envelope = parseJson(await readText(response, controller.signal));
298
+ if (void 0 !== envelope) throwIfErrorEnvelope(response, envelope);
299
+ throw new OvClientError({
300
+ code: 'UNEXPECTED_CONTENT_TYPE',
301
+ message: `Expected ${EVENT_STREAM}, got ${contentType || 'no content type'}`,
302
+ statusCode: response.status,
303
+ requestId: response.headers.get('x-request-id') ?? void 0,
304
+ responseBody: envelope
305
+ });
306
+ }
307
+ body = response.body;
308
+ } catch (error) {
309
+ detach();
310
+ throw error;
311
+ }
312
+ const reader = decodeEventStream(body).getReader();
313
+ let released = false;
314
+ const release = ()=>{
315
+ if (released) return;
316
+ released = true;
317
+ detach();
318
+ reader.cancel().catch(()=>{});
319
+ };
320
+ onCallerAbort = ()=>{
321
+ stop();
322
+ release();
323
+ };
324
+ if (controller.signal.aborted) release();
325
+ async function* iterate() {
326
+ try {
327
+ for(;;){
328
+ const next = await Promise.race([
329
+ reader.read(),
330
+ aborted
331
+ ]);
332
+ if ('aborted' === next) return;
333
+ if (next.done) return;
334
+ yield next.value;
335
+ }
336
+ } catch (error) {
337
+ if (isAbortError(error)) return;
338
+ throw error;
339
+ } finally{
340
+ release();
341
+ }
342
+ }
343
+ return {
344
+ abort: ()=>{
345
+ stop();
346
+ release();
347
+ },
348
+ [Symbol.asyncIterator]: iterate
349
+ };
350
+ }
351
+ async function client_resolveFor(defaults, override) {
352
+ const baseLayer = await resolveIdentityLayer(defaults);
353
+ const localLayer = await resolveIdentityLayer(override);
354
+ const parent = resolveClientOptions(defaults, baseLayer);
355
+ return resolveRequestOptions(override, parent, mergeIdentityLayers(baseLayer, localLayer));
356
+ }
357
+ function buildRequest(effective, spec, headers) {
358
+ const hasBody = void 0 !== spec.body;
359
+ return {
360
+ url: joinUrl(effective.baseURL, spec.path) + buildQuery(spec.query),
361
+ init: {
362
+ method: spec.method,
363
+ headers: hasBody ? {
364
+ 'content-type': 'application/json',
365
+ ...headers
366
+ } : headers,
367
+ body: hasBody ? JSON.stringify(spec.body) : void 0,
368
+ credentials: effective.credentials
369
+ }
370
+ };
371
+ }
372
+ function createOvClient(options = {}) {
373
+ const fetchImpl = options.fetch ?? globalThis.fetch;
374
+ if (!fetchImpl) throw new Error('createOvClient needs a fetch implementation. Pass `fetch` on platforms without a global one.');
375
+ const defaults = options;
376
+ async function send(spec, headers, signal, resolved) {
377
+ const effective = resolved ?? await client_resolveFor(defaults, spec.options);
378
+ const { url, init } = buildRequest(effective, spec, {
379
+ ...headers,
380
+ ...effective.headers
381
+ });
382
+ const active = signal ?? effective.signal;
383
+ try {
384
+ return {
385
+ response: await fetchImpl(url, {
386
+ ...init,
387
+ signal: active
388
+ }),
389
+ effective
390
+ };
391
+ } catch (error) {
392
+ normalizeTransportError(error, active);
393
+ }
394
+ }
395
+ async function requestJson(spec) {
396
+ const { response, effective } = await send(spec);
397
+ const raw = await readText(response, effective.signal);
398
+ const parsed = parseJson(raw);
399
+ const body = void 0 !== parsed ? parsed : raw.trim() ? raw : void 0;
400
+ if (!response.ok) throw toClientError(response, body);
401
+ throwIfErrorEnvelope(response, body);
402
+ const envelope = readEnvelope(body);
403
+ return {
404
+ result: 'result' in envelope ? envelope.result : body,
405
+ hasMore: true === envelope.has_more
406
+ };
407
+ }
408
+ const client = {
409
+ get baseURL () {
410
+ return defaults.baseURL ?? '';
411
+ },
412
+ async request (spec) {
413
+ if ('blob' === spec.responseType) {
414
+ const { response, effective } = await send(spec);
415
+ if (!response.ok) {
416
+ const raw = await readText(response, effective.signal);
417
+ throw toClientError(response, parseJson(raw) ?? raw);
418
+ }
419
+ return await readBlob(response, effective.signal);
420
+ }
421
+ const { result } = await requestJson(spec);
422
+ return result;
423
+ },
424
+ requestEnvelope (spec) {
425
+ if ('blob' === spec.responseType) return Promise.reject(new OvClientError({
426
+ code: 'INVALID_REQUEST',
427
+ message: 'requestEnvelope does not support responseType: blob'
428
+ }));
429
+ return requestJson(spec);
430
+ },
431
+ stream (spec) {
432
+ return openStream(spec, {
433
+ send,
434
+ resolveFor: client_resolveFor,
435
+ defaults
436
+ });
437
+ }
438
+ };
439
+ return client;
440
+ }
441
+ const OvClientContext = /*#__PURE__*/ createContext(null);
442
+ function OpenVikingProvider({ baseURL, apiKey, accountId, userId, resourceId, credentials, signal, fetch, children }) {
443
+ const parent = useContext(OvClientContext);
444
+ const value = useMemo(()=>{
445
+ const base = mergeProviderConfig(parent?.base, {
446
+ baseURL,
447
+ apiKey,
448
+ accountId,
449
+ userId,
450
+ resourceId,
451
+ credentials,
452
+ signal,
453
+ fetch
454
+ });
455
+ return {
456
+ base,
457
+ client: createOvClient({
458
+ ...base.identity,
459
+ baseURL: base.baseURL,
460
+ credentials: base.credentials,
461
+ signal: base.signal,
462
+ fetch: base.fetch
463
+ })
464
+ };
465
+ }, [
466
+ parent,
467
+ baseURL,
468
+ apiKey,
469
+ accountId,
470
+ userId,
471
+ resourceId,
472
+ credentials,
473
+ signal,
474
+ fetch
475
+ ]);
476
+ return /*#__PURE__*/ jsx(OvClientContext.Provider, {
477
+ value: value,
478
+ children: children
479
+ });
480
+ }
481
+ function useOvClient() {
482
+ return useContext(OvClientContext)?.client ?? null;
483
+ }
484
+ const OV_PATHS = {
485
+ fsLs: '/api/v1/fs/ls',
486
+ fsStat: '/api/v1/fs/stat',
487
+ fsTree: '/api/v1/fs/tree',
488
+ fsMkdir: '/api/v1/fs/mkdir',
489
+ fsMv: '/api/v1/fs/mv',
490
+ contentRead: '/api/v1/content/read',
491
+ contentAbstract: '/api/v1/content/abstract',
492
+ contentOverview: '/api/v1/content/overview',
493
+ contentDownload: '/api/v1/content/download',
494
+ contentWrite: '/api/v1/content/write',
495
+ searchGlob: '/api/v1/search/glob',
496
+ searchFind: '/api/v1/search/find',
497
+ searchGrep: '/api/v1/search/grep',
498
+ sessions: '/api/v1/sessions',
499
+ botChat: '/bot/v1/chat',
500
+ botChatStream: '/bot/v1/chat/stream'
501
+ };
502
+ const OV_PATH_BUILDERS = {
503
+ session: (sessionId)=>`${OV_PATHS.sessions}/${encodeURIComponent(sessionId)}`,
504
+ sessionMessages: (sessionId)=>`${OV_PATH_BUILDERS.session(sessionId)}/messages`
505
+ };
506
+ export { OV_PATHS, OV_PATH_BUILDERS, OpenVikingProvider, OvClientError, createOvClient, isOvClientError, useOvClient };