@asgard-js/react 0.3.13 → 0.3.14

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 (41) hide show
  1. package/dist/components/chatbot/chatbot.d.ts +16 -0
  2. package/dist/components/chatbot/chatbot.d.ts.map +1 -1
  3. package/dist/components/chatbot/file-explorer/chatbot-file-explorer.d.ts +24 -0
  4. package/dist/components/chatbot/file-explorer/chatbot-file-explorer.d.ts.map +1 -0
  5. package/dist/components/chatbot/file-explorer/context-menu.d.ts +26 -0
  6. package/dist/components/chatbot/file-explorer/context-menu.d.ts.map +1 -0
  7. package/dist/components/chatbot/file-explorer/create-sandbox-fs-providers.d.ts +30 -0
  8. package/dist/components/chatbot/file-explorer/create-sandbox-fs-providers.d.ts.map +1 -0
  9. package/dist/components/chatbot/file-explorer/file-explorer-panel.d.ts +48 -0
  10. package/dist/components/chatbot/file-explorer/file-explorer-panel.d.ts.map +1 -0
  11. package/dist/components/chatbot/file-explorer/file-view.d.ts +24 -0
  12. package/dist/components/chatbot/file-explorer/file-view.d.ts.map +1 -0
  13. package/dist/components/chatbot/file-explorer/icons.d.ts +34 -0
  14. package/dist/components/chatbot/file-explorer/icons.d.ts.map +1 -0
  15. package/dist/components/chatbot/file-explorer/icons.spec.d.ts +2 -0
  16. package/dist/components/chatbot/file-explorer/icons.spec.d.ts.map +1 -0
  17. package/dist/components/chatbot/file-explorer/index.d.ts +8 -0
  18. package/dist/components/chatbot/file-explorer/index.d.ts.map +1 -0
  19. package/dist/components/chatbot/file-explorer/types.d.ts +15 -0
  20. package/dist/components/chatbot/file-explorer/types.d.ts.map +1 -0
  21. package/dist/components/index.d.ts +1 -0
  22. package/dist/components/index.d.ts.map +1 -1
  23. package/dist/components/templates/attachment-template/chip.d.ts.map +1 -1
  24. package/dist/components/templates/button-template/card.d.ts.map +1 -1
  25. package/dist/context/asgard-service-context.d.ts +5 -1
  26. package/dist/context/asgard-service-context.d.ts.map +1 -1
  27. package/dist/context/asgard-template-context.d.ts +9 -0
  28. package/dist/context/asgard-template-context.d.ts.map +1 -1
  29. package/dist/hooks/index.d.ts +1 -0
  30. package/dist/hooks/index.d.ts.map +1 -1
  31. package/dist/hooks/use-channel.d.ts +5 -1
  32. package/dist/hooks/use-channel.d.ts.map +1 -1
  33. package/dist/hooks/use-derived-state.d.ts +16 -1
  34. package/dist/hooks/use-derived-state.d.ts.map +1 -1
  35. package/dist/hooks/use-file-explorer-controller.d.ts +42 -0
  36. package/dist/hooks/use-file-explorer-controller.d.ts.map +1 -0
  37. package/dist/index.css +1 -1
  38. package/dist/index.js +16901 -15757
  39. package/dist/utils/dispatch-uri-action.d.ts +27 -0
  40. package/dist/utils/dispatch-uri-action.d.ts.map +1 -0
  41. package/package.json +2 -2
@@ -50,6 +50,22 @@ interface ChatbotProps extends AsgardTemplateContextValue {
50
50
  onClose?: () => void;
51
51
  loadingComponent?: ReactNode;
52
52
  defaultLinkTarget?: '_blank' | '_self' | '_parent' | '_top';
53
+ /** Host override for a `sandbox://<name>/open-browser` card (F-020); if set the SDK defers to it. */
54
+ onSandboxOpenBrowser?: (sandboxName: string) => void;
55
+ /** Host handler for a `sandbox://<name>/open-file` card (F-020) — the File Explorer destination (F-021). */
56
+ onSandboxOpenFile?: (sandboxName: string, absolutePath: string) => void;
57
+ /** Where the default open-browser handler opens the one-time URL (F-020). Defaults to `_blank`. */
58
+ sandboxBrowserOpenTarget?: '_blank' | '_self' | '_parent' | '_top';
59
+ /**
60
+ * Built-in File Explorer side panel (F-021). `'builtin'` renders a header folder toggle + a right-side
61
+ * aside; `'off'` (default) renders nothing built-in — the consumer places the exported `<FileExplorerPanel>`
62
+ * itself. Either way an `open-file` card hits the panel via the shared controller.
63
+ */
64
+ fileExplorer?: 'builtin' | 'off';
65
+ /** Whether an arriving `open-file` card auto-reveals the built-in aside (F-021 AC9). Defaults to true; a mid-edit dirty file suppresses the yank (AC10). */
66
+ autoRevealOnOpenFileCard?: boolean;
67
+ /** Override the File Explorer tree root (absolute path) instead of the sandbox `workingDirectory` (F-021 AC2). */
68
+ fileExplorerBasePath?: string;
53
69
  authState?: AuthState;
54
70
  onApiKeySubmit?: (apiKey: string) => Promise<void>;
55
71
  onAuthError?: (error: {
@@ -1 +1 @@
1
- {"version":3,"file":"chatbot.d.ts","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatbot.d.ts","sourceRoot":"","sources":["../../../src/components/chatbot/chatbot.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { FileExplorerController } from '../../../hooks/use-file-explorer-controller';
2
+ import { ReactNode } from 'react';
3
+
4
+ /**
5
+ * Arrival-side of the open-file intent (F-021 AC9, notify-not-force): scan the conversation for `open-file`
6
+ * `sandbox://` cards and fire `onIntent` once per (message, uri) — on arrival, without a click. Renders
7
+ * nothing. Must live inside the service context (reads `conversation`).
8
+ */
9
+ export declare function FileExplorerArrivalBridge({ onIntent, }: {
10
+ onIntent: (sandboxName: string, absolutePath: string) => void;
11
+ }): ReactNode;
12
+ /** Header folder toggle (F-021 AC6) — sits right of the ChannelTitle; toggles the built-in aside. */
13
+ export declare function FileExplorerToggle({ controller }: {
14
+ controller: FileExplorerController;
15
+ }): ReactNode;
16
+ /**
17
+ * The built-in File Explorer aside (F-021 AC6). Reads the live channel + client from context, drives the
18
+ * panel from `launchedSandboxes$` (F-019) and the shared controller, and wires the core fs client.
19
+ */
20
+ export declare function ChatbotFileExplorerAside({ controller, basePath, }: {
21
+ controller: FileExplorerController;
22
+ basePath?: string;
23
+ }): ReactNode;
24
+ //# sourceMappingURL=chatbot-file-explorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-file-explorer.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/chatbot-file-explorer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AA8CrF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D,GAAG,SAAS,CAuBZ;AAED,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,sBAAsB,CAAA;CAAE,GAAG,SAAS,CAapG;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,SAAS,CA0BZ"}
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface ContextMenuItem {
4
+ key: string;
5
+ label: string;
6
+ icon?: ReactNode;
7
+ onSelect: () => void;
8
+ danger?: boolean;
9
+ disabled?: boolean;
10
+ }
11
+ export interface ContextMenuProps {
12
+ /** Desired left/top relative to the positioned ancestor; clamped within its bounds. */
13
+ x: number;
14
+ y: number;
15
+ /** Grouped items; a separator renders between sections. */
16
+ sections: ContextMenuItem[][];
17
+ onClose: () => void;
18
+ }
19
+ /**
20
+ * A container-scoped context menu (F-021 Cycle 2, mirrors the prototype `ContextMenu`): `role=menu` +
21
+ * arrow-key navigation, Esc / outside-click / scroll / resize closes, danger items in `--asg-color-error`,
22
+ * and it clamps within the offset parent (never `fixed` to the viewport). Honors reduced-motion.
23
+ */
24
+ export declare function ContextMenu({ x, y, sections, onClose }: ContextMenuProps): ReactNode;
25
+ export default ContextMenu;
26
+ //# sourceMappingURL=context-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/context-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgD,MAAM,OAAO,CAAC;AAGhF,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,2DAA2D;IAC3D,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAmGpF;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { FsReadFile, FsSaveFile } from './types';
2
+ import { FsListDir } from './file-explorer-panel';
3
+ import { AsgardServiceClient } from '@asgard-js/core';
4
+
5
+ /** A directory mutation (mkdir / delete). */
6
+ export type FsMutatePath = (sandboxName: string, path: string) => Promise<void>;
7
+ /** A src→dst mutation (copy / move / rename). */
8
+ export type FsMutateSrcDst = (sandboxName: string, src: string, dst: string) => Promise<void>;
9
+ /** Upload a picked file into a directory. */
10
+ export type FsUpload = (sandboxName: string, dirPath: string, file: File) => Promise<void>;
11
+ export interface SandboxFsProviders {
12
+ listDir: FsListDir;
13
+ readFile: FsReadFile;
14
+ saveFile: FsSaveFile;
15
+ mkdir: FsMutatePath;
16
+ /** Delete a file (`fs/item`) or directory (`fs/all`, recursive) — routed by `isDir`. */
17
+ remove: (sandboxName: string, path: string, isDir: boolean) => Promise<void>;
18
+ copy: FsMutateSrcDst;
19
+ move: FsMutateSrcDst;
20
+ upload: FsUpload;
21
+ /** Download a file to the browser (`GET fs/file` → `<a download>`). */
22
+ download: (sandboxName: string, path: string, name: string) => Promise<void>;
23
+ }
24
+ /**
25
+ * Wire the core sandbox fs client methods into the `FileExplorerPanel` providers (F-021). Image files
26
+ * resolve to a data URL (for `<img src>`); text files to their decoded string. Cycle 2 adds the mutation
27
+ * providers (mkdir / remove / copy / move / upload) over the fuller fs edge API.
28
+ */
29
+ export declare function createSandboxFsProviders(client: AsgardServiceClient): SandboxFsProviders;
30
+ //# sourceMappingURL=create-sandbox-fs-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-sandbox-fs-providers.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/create-sandbox-fs-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAuB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAmBjD,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAChF,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9F,6CAA6C;AAC7C,MAAM,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IAErB,KAAK,EAAE,YAAY,CAAC;IACpB,wFAAwF;IACxF,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,QAAQ,CAAC;IACjB,uEAAuE;IACvE,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AAaD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CA4BxF"}
@@ -0,0 +1,48 @@
1
+ import { FsReadFile, FsSaveFile } from './types';
2
+ import { FileExplorerController } from '../../../hooks/use-file-explorer-controller';
3
+ import { LaunchedSandbox, SandboxFsListResult } from '@asgard-js/core';
4
+ import { ReactNode } from 'react';
5
+
6
+ /** List a directory (≈ `GET fs/list`). */
7
+ export type FsListDir = (sandboxName: string, path: string) => Promise<SandboxFsListResult>;
8
+ /** F-021 Cycle 2 — optional fs mutation callbacks; when omitted the corresponding action is unavailable. */
9
+ export interface FileExplorerMutations {
10
+ mkdir?: (sandboxName: string, path: string) => Promise<void>;
11
+ remove?: (sandboxName: string, path: string, isDir: boolean) => Promise<void>;
12
+ copy?: (sandboxName: string, src: string, dst: string) => Promise<void>;
13
+ move?: (sandboxName: string, src: string, dst: string) => Promise<void>;
14
+ upload?: (sandboxName: string, dirPath: string, file: File) => Promise<void>;
15
+ download?: (sandboxName: string, path: string, name: string) => Promise<void>;
16
+ }
17
+ export interface FileExplorerPanelProps extends FileExplorerMutations {
18
+ /** Live sandboxes (F-019 `launchedSandboxes$` snapshot) shown in the dropdown. */
19
+ sandboxes: LaunchedSandbox[];
20
+ /** Shared controller (F-021 AC7) — header toggle / open-file card / this panel all bind one. */
21
+ controller: FileExplorerController;
22
+ /** List a directory (≈ `GET fs/list`). */
23
+ listDir: FsListDir;
24
+ /** Read a file (≈ `GET fs/file`). */
25
+ readFile?: FsReadFile;
26
+ /** Save a file (≈ `PUT fs/file`). */
27
+ saveFile?: FsSaveFile;
28
+ /** Override the tree root (absolute path); the dropdown + cwd still show the real `workingDirectory` (AC2). */
29
+ basePath?: string;
30
+ /** Nudge an idle sandbox back to life (F-021 AC4); when provided, the empty state shows a Nudge button. */
31
+ onNudge?: () => void | Promise<void>;
32
+ /** When provided, the header shows a close (X) button (the built-in aside passes `controller.closeExplorer`). */
33
+ onClose?: () => void;
34
+ /**
35
+ * Chrome: `card` = a standalone card (rounded, fully bordered) for consumer-placed panels;
36
+ * `flush` = the built-in aside split into the chat view (no radius, left divider only). Defaults to `card`.
37
+ */
38
+ chrome?: 'card' | 'flush';
39
+ }
40
+ /**
41
+ * The sandbox File Explorer panel (F-021): dropdown + lazy tree rooted at `workingDirectory` (overridable
42
+ * via `basePath`), a single-panel FileView on open, and (Cycle 2) a toolbar + right-click context menu +
43
+ * copy/cut/paste clipboard wired to the fs mutation providers. Single-click selects (a dir toggles);
44
+ * double-click / an open-file intent opens the file.
45
+ */
46
+ export declare function FileExplorerPanel(props: FileExplorerPanelProps): ReactNode;
47
+ export default FileExplorerPanel;
48
+ //# sourceMappingURL=file-explorer-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-explorer-panel.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/file-explorer-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,SAAS,EAA4C,MAAM,OAAO,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAGrF,OAAO,EAAW,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA0B1D,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE5F,4GAA4G;AAC5G,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,kFAAkF;IAClF,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,gGAAgG;IAChG,UAAU,EAAE,sBAAsB,CAAC;IACnC,0CAA0C;IAC1C,OAAO,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,+GAA+G;IAC/G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,iHAAiH;IACjH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAkLD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,CA+iB1E;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { FsEntry, FsReadFile, FsSaveFile } from './types';
2
+ import { ReactNode } from 'react';
3
+
4
+ export interface FileViewProps {
5
+ sandboxName: string;
6
+ /** The opened file (`isDir: false`). */
7
+ file: FsEntry;
8
+ /** Read content (≈ `GET fs/file`; images resolve to a data/object URL). Absent → treated as empty. */
9
+ readFile?: FsReadFile;
10
+ /** Save content (≈ `PUT fs/file`); debounced by this component. */
11
+ onSaveFile?: FsSaveFile;
12
+ /** Report editing / unsaved-changes state so the host can guard mid-edit panel yanks (F-021 AC10). */
13
+ onDirtyChange?: (dirty: boolean) => void;
14
+ /** Back to the file tree. */
15
+ onBack: () => void;
16
+ }
17
+ /**
18
+ * Single-panel two-mode file view (F-021, Cycle 1): preview ↔ edit for text (`.md` preview renders
19
+ * markdown via `streamdown`; edit is a lightweight textarea — CodeMirror syntax highlighting is Cycle 2),
20
+ * preview-only for images. Save debounces to `onSaveFile` (≈ `PUT fs/file`). Reports dirty state (AC10).
21
+ */
22
+ export declare function FileView({ sandboxName, file, readFile, onSaveFile, onDirtyChange, onBack }: FileViewProps): ReactNode;
23
+ export default FileView;
24
+ //# sourceMappingURL=file-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-view.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/file-view.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AAGxE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAO1D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,sGAAsG;IACtG,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sGAAsG;IACtG,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,6BAA6B;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAgBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,SAAS,CAiIrH;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ interface IconProps {
4
+ className?: string;
5
+ size?: number;
6
+ label?: string;
7
+ }
8
+ export declare function ArrowLeftIcon(props: IconProps): ReactNode;
9
+ export declare function CodeIcon(props: IconProps): ReactNode;
10
+ export declare function EyeIcon(props: IconProps): ReactNode;
11
+ export declare function LoaderCircleIcon(props: IconProps): ReactNode;
12
+ export declare function CircleAlertIcon(props: IconProps): ReactNode;
13
+ export declare function FolderIcon(props: IconProps): ReactNode;
14
+ /** lucide `folder-tree` — the header toggle glyph (the design uses the tree, not a plain folder). */
15
+ export declare function FolderTreeIcon(props: IconProps): ReactNode;
16
+ export declare function FolderOpenIcon(props: IconProps): ReactNode;
17
+ export declare function FileIcon(props: IconProps): ReactNode;
18
+ export declare function ChevronRightIcon(props: IconProps): ReactNode;
19
+ export declare function RefreshIcon(props: IconProps): ReactNode;
20
+ export declare function FolderPlusIcon(props: IconProps): ReactNode;
21
+ export declare function FilePlusIcon(props: IconProps): ReactNode;
22
+ export declare function UploadIcon(props: IconProps): ReactNode;
23
+ export declare function DownloadIcon(props: IconProps): ReactNode;
24
+ export declare function CopyIcon(props: IconProps): ReactNode;
25
+ export declare function ScissorsIcon(props: IconProps): ReactNode;
26
+ export declare function ClipboardPasteIcon(props: IconProps): ReactNode;
27
+ export declare function PencilIcon(props: IconProps): ReactNode;
28
+ export declare function TrashIcon(props: IconProps): ReactNode;
29
+ export declare function XIcon(props: IconProps): ReactNode;
30
+ export declare function ChevronDownIcon(props: IconProps): ReactNode;
31
+ export declare function PackageOpenIcon(props: IconProps): ReactNode;
32
+ export declare function ZapIcon(props: IconProps): ReactNode;
33
+ export {};
34
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAclC,UAAU,SAAS;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOzD;AAGD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQpD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAM5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQ3D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAMtD;AAED,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAS1D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAM1D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOpD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAM5D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CASvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQ1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CASxD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQtD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQxD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAUxD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAQ9D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOtD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAWrD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAOjD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAM3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAS3D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAMnD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=icons.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.spec.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/icons.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export { FileExplorerPanel } from './file-explorer-panel';
2
+ export type { FileExplorerPanelProps, FsListDir } from './file-explorer-panel';
3
+ export { FileView } from './file-view';
4
+ export type { FileViewProps } from './file-view';
5
+ export { createSandboxFsProviders } from './create-sandbox-fs-providers';
6
+ export type { SandboxFsProviders } from './create-sandbox-fs-providers';
7
+ export type { FsEntry, FsReadFile, FsSaveFile } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { SandboxFsDirEntry } from '@asgard-js/core';
2
+
3
+ /**
4
+ * A file-tree node in the File Explorer (F-021): a `fs/list` entry plus its absolute path (the list API
5
+ * returns names relative to the queried dir; the panel composes the absolute path).
6
+ */
7
+ export interface FsEntry extends SandboxFsDirEntry {
8
+ /** Absolute path inside the sandbox. */
9
+ path: string;
10
+ }
11
+ /** Read a file's content (≈ `GET fs/file`). Images resolve to a data/object URL; text to the string body. */
12
+ export type FsReadFile = (sandboxName: string, path: string) => Promise<string>;
13
+ /** Persist a file's content (≈ `PUT fs/file`). */
14
+ export type FsSaveFile = (sandboxName: string, path: string, content: string) => Promise<void> | void;
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/chatbot/file-explorer/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,OAAQ,SAAQ,iBAAiB;IAChD,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,6GAA6G;AAC7G,MAAM,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhF,kDAAkD;AAClD,MAAM,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './chatbot/chatbot';
2
2
  export * from './chatbot/task-list';
3
3
  export * from './chatbot/subagent-list';
4
+ export * from './chatbot/file-explorer';
4
5
  export * from './templates';
5
6
  export * from './tool-call-consent';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/attachment-template/chip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,SAAS,EAAe,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QAClC,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QACxC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QACpC,cAAc,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CA0GpE"}
1
+ {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/attachment-template/chip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,SAAS,EAAe,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QAClC,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QACxC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;QACpC,cAAc,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAqHpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/button-template/card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAkC,aAAa,EAAE,MAAM,OAAO,CAAC;AAEpG,OAAO,EAAgB,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAO/F,UAAU,SAAS;IACjB,QAAQ,EAAE,qBAAqB,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,CAAC,EAAE;YACN,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;QACF,WAAW,CAAC,EAAE;YACZ,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CA8FhD"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/components/templates/button-template/card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAkC,aAAa,EAAE,MAAM,OAAO,CAAC;AAEpG,OAAO,EAAgB,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAM/F,UAAU,SAAS;IACjB,QAAQ,EAAE,qBAAqB,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,CAAC,EAAE;YACN,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;QACF,WAAW,CAAC,EAAE;YACZ,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,KAAK,CAAC,EAAE,aAAa,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAyGhD"}
@@ -1,6 +1,6 @@
1
1
  import { UseChannelProps, UseChannelReturn } from '../hooks';
2
2
  import { ForwardedRef, ReactNode, RefObject } from 'react';
3
- import { AsgardServiceClient, ClientConfig, Conversation, ConversationMessage, SandboxPhase, ToolCallConsentEventData } from '@asgard-js/core';
3
+ import { AsgardServiceClient, Channel, ClientConfig, Conversation, ConversationMessage, SandboxPhase, ToolCallConsentEventData } from '@asgard-js/core';
4
4
 
5
5
  /** Parameters for sending a message */
6
6
  export interface SendMessageParams {
@@ -14,6 +14,8 @@ export interface AsgardServiceContextValue {
14
14
  avatar?: string;
15
15
  title?: string;
16
16
  client: AsgardServiceClient | null;
17
+ /** The live `Channel` (F-019+) — for hooks that need the channel object (e.g. `useLaunchedSandboxes`). */
18
+ channel: Channel | null;
17
19
  customChannelId?: string;
18
20
  isOpen: boolean;
19
21
  isResetting: boolean;
@@ -32,6 +34,8 @@ export interface AsgardServiceContextValue {
32
34
  /** User-initiated stop-generation: abort the in-flight run and release the input. No-op when idle. */
33
35
  stopGeneration?: UseChannelReturn['stopGeneration'];
34
36
  replyToolCallConsents?: UseChannelReturn['replyToolCallConsents'];
37
+ /** Nudge an idle sandbox back to life (F-021 AC4) — invisible `action=NUDGE` turn. */
38
+ nudge?: UseChannelReturn['nudge'];
35
39
  pendingConsent: ToolCallConsentEventData | null;
36
40
  botTypingPlaceholder?: string;
37
41
  inputPlaceholder?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"asgard-service-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-service-context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asgard-service-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-service-context.tsx"],"names":[],"mappings":"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"}
@@ -73,6 +73,12 @@ export interface AsgardTemplateContextValue {
73
73
  untitledLabel?: string;
74
74
  /** Hide the channel-title row entirely (F-017) — a shortcut for `renderTitle` returning null. */
75
75
  channelTitleHidden?: boolean;
76
+ /** Host override for a `sandbox://<name>/open-browser` card (F-020); if set the SDK defers to it. */
77
+ onSandboxOpenBrowser?: (sandboxName: string) => void;
78
+ /** Host handler for a `sandbox://<name>/open-file` card (F-020) — the File Explorer destination (F-021). */
79
+ onSandboxOpenFile?: (sandboxName: string, absolutePath: string) => void;
80
+ /** Where the default open-browser handler opens the one-time URL (F-020). Defaults to `_blank`. */
81
+ sandboxBrowserOpenTarget?: '_blank' | '_self' | '_parent' | '_top';
76
82
  }
77
83
  export declare const AsgardTemplateContext: import('react').Context<AsgardTemplateContextValue>;
78
84
  interface AsgardTemplateContextProviderProps extends PropsWithChildren {
@@ -88,6 +94,9 @@ interface AsgardTemplateContextProviderProps extends PropsWithChildren {
88
94
  renderTitle?: (props: ChannelTitleRendererProps) => ReactNode;
89
95
  untitledLabel?: string;
90
96
  channelTitleHidden?: boolean;
97
+ onSandboxOpenBrowser?: (sandboxName: string) => void;
98
+ onSandboxOpenFile?: (sandboxName: string, absolutePath: string) => void;
99
+ sandboxBrowserOpenTarget?: '_blank' | '_self' | '_parent' | '_top';
91
100
  }
92
101
  export declare function AsgardTemplateContextProvider(props: AsgardTemplateContextProviderProps): ReactNode;
93
102
  export declare function useAsgardTemplateContext(): AsgardTemplateContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"asgard-template-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-template-context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asgard-template-context.d.ts","sourceRoot":"","sources":["../../src/context/asgard-template-context.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export * from './use-asgard-service-client';
2
2
  export * from './use-channel';
3
3
  export * from './use-derived-state';
4
4
  export * from './use-sandbox-launch';
5
+ export * from './use-file-explorer-controller';
5
6
  export * from './use-debounce';
6
7
  export * from './use-resize-observer';
7
8
  export * from './use-deep-compare-memo';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { AsgardServiceClient, Conversation, ConversationMessage, EventType, FetchSsePayload, SandboxPhase, SseResponse, ToolCallConsentAnswer } from '@asgard-js/core';
1
+ import { AsgardServiceClient, Channel, Conversation, ConversationMessage, EventType, FetchSsePayload, SandboxPhase, SseResponse, ToolCallConsentAnswer } from '@asgard-js/core';
2
2
 
3
3
  export interface UseChannelProps {
4
4
  defaultIsOpen?: boolean;
@@ -38,6 +38,8 @@ export interface UseChannelProps {
38
38
  onChannelReady?: () => void;
39
39
  }
40
40
  export interface UseChannelReturn {
41
+ /** The live `Channel` (null in preview mode / before creation) — for hooks like `useLaunchedSandboxes`. */
42
+ channel: Channel | null;
41
43
  isOpen: boolean;
42
44
  isResetting: boolean;
43
45
  isConnecting: boolean;
@@ -55,6 +57,8 @@ export interface UseChannelReturn {
55
57
  /** User-initiated stop-generation: abort the in-flight run and release the input. No-op when idle. */
56
58
  stopGeneration?: () => void;
57
59
  replyToolCallConsents?: (answers: ToolCallConsentAnswer[], payload?: FetchSsePayload['payload']) => Promise<void>;
60
+ /** Nudge an idle sandbox back to life (F-021 AC4) — invisible `action=NUDGE` turn, no reply rendered. */
61
+ nudge?: () => Promise<void>;
58
62
  }
59
63
  export declare function useChannel(props: UseChannelProps): UseChannelReturn;
60
64
  //# sourceMappingURL=use-channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-channel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAInB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,YAAY,EACZ,WAAW,EACX,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;IACzF,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,qGAAqG;IACrG,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,EAChC,OAAO,EAAE;QACP,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;KACnC,KACE,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5G,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACrE,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;IAC5F;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,0GAA0G;IAC1G,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0GAA0G;IAC1G,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KACnG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7G,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,sGAAsG;IACtG,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAuanE"}
1
+ {"version":3,"file":"use-channel.d.ts","sourceRoot":"","sources":["../../src/hooks/use-channel.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Channel, Subagent, Task } from '@asgard-js/core';
1
+ import { Channel, LaunchedSandbox, Subagent, Task } from '@asgard-js/core';
2
2
 
3
3
  /** Subscribe to a `Channel`'s current Task Check List (F-010 / F-013). Re-renders only on list change. */
4
4
  export declare function useTaskList(channel: Channel | null): Task[];
@@ -6,4 +6,19 @@ export declare function useTaskList(channel: Channel | null): Task[];
6
6
  export declare function useSubagents(channel: Channel | null): Subagent[];
7
7
  /** Subscribe to a `Channel`'s current channel title (F-016). Re-renders only when the title changes. */
8
8
  export declare function useChannelTitle(channel: Channel | null): string | null;
9
+ /** Options for {@link useLaunchedSandboxes}'s metadata-refetch lifecycle (F-019 / UC-033). */
10
+ export interface UseLaunchedSandboxesOptions {
11
+ /** Poll interval (ms) to refetch `/channel/metadata` so idle-recycled sandboxes drop off. `0` disables. Default 15000. */
12
+ pollMs?: number;
13
+ /** Refetch on `document.visibilitychange → visible` (a tab hidden long enough loses its sandbox). Default true. */
14
+ refetchOnVisible?: boolean;
15
+ }
16
+ /**
17
+ * Subscribe to a `Channel`'s live-sandbox list (F-019). Bridges the `launchedSandboxes$` slice +
18
+ * snapshot into `useSyncExternalStore` (re-renders only when the list changes, AC3), and owns the
19
+ * DOM-bound refetch lifecycle (AC5): a `visibilitychange → visible` and an optional poll both call
20
+ * `channel.refetchMetadata()` — metadata being the sole authority on "who is live". A null channel
21
+ * yields a stable `[]` and no lifecycle.
22
+ */
23
+ export declare function useLaunchedSandboxes(channel: Channel | null, { pollMs, refetchOnVisible }?: UseLaunchedSandboxesOptions): LaunchedSandbox[];
9
24
  //# sourceMappingURL=use-derived-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-derived-state.d.ts","sourceRoot":"","sources":["../../src/hooks/use-derived-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAa1D,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAe3D;AAED,wGAAwG;AACxG,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,QAAQ,EAAE,CAehE;AAED,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAetE"}
1
+ {"version":3,"file":"use-derived-state.d.ts","sourceRoot":"","sources":["../../src/hooks/use-derived-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAc3E,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAe3D;AAED,wGAAwG;AACxG,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,QAAQ,EAAE,CAehE;AAED,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAetE;AAED,8FAA8F;AAC9F,MAAM,WAAW,2BAA2B;IAC1C,0HAA0H;IAC1H,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,EAAE,MAAc,EAAE,gBAAuB,EAAE,GAAE,2BAAgC,GAC5E,eAAe,EAAE,CAkDnB"}
@@ -0,0 +1,42 @@
1
+ /** One "reveal this file" request; the nonce lets a repeat request for the same file re-trigger the reveal. */
2
+ export interface RequestedFile {
3
+ sandboxName: string;
4
+ absolutePath: string;
5
+ nonce: number;
6
+ }
7
+ /** Options for {@link FileExplorerController.requestFile}. */
8
+ export interface RequestFileOptions {
9
+ /** Also open the built-in aside (F-021 AC9 — "fire intent" and "open panel" are separate; default true). */
10
+ reveal?: boolean;
11
+ }
12
+ export interface FileExplorerController {
13
+ /** Whether the built-in right-side aside is expanded. Consumer-placed panels may ignore this. */
14
+ open: boolean;
15
+ /** Which sandbox is being viewed (`null` = unset; the panel falls back to the first live one). */
16
+ activeSandboxName: string | null;
17
+ /** The latest "reveal + select this file" request (the panel expands ancestors + highlights + previews). */
18
+ requestedFile: RequestedFile | null;
19
+ /** Whether a file is currently being edited with unsaved changes (F-021 AC10 — mid-edit guard). */
20
+ isEditingDirty: boolean;
21
+ openExplorer: () => void;
22
+ closeExplorer: () => void;
23
+ toggle: () => void;
24
+ selectSandbox: (sandboxName: string) => void;
25
+ /**
26
+ * open-file card / deep-link entry: select the sandbox + request a reveal of `absolutePath`. `reveal`
27
+ * (default true) also opens the built-in aside; pass `reveal: false` to expose the intent without
28
+ * yanking the panel (F-021 AC9 notify-not-force).
29
+ */
30
+ requestFile: (sandboxName: string, absolutePath: string, options?: RequestFileOptions) => void;
31
+ /** FileView reports its dirty state here so the arrival wiring can decline to yank mid-edit (AC10). */
32
+ setEditingDirty: (dirty: boolean) => void;
33
+ }
34
+ export interface UseFileExplorerControllerOptions {
35
+ /** Initial aside open state (default false). */
36
+ open?: boolean;
37
+ /** Initial active sandbox (default null → panel falls back to the first live one). */
38
+ activeSandboxName?: string | null;
39
+ }
40
+ export declare function useFileExplorerController({ open: initialOpen, activeSandboxName: initialActive, }?: UseFileExplorerControllerOptions): FileExplorerController;
41
+ export default useFileExplorerController;
42
+ //# sourceMappingURL=use-file-explorer-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-file-explorer-controller.d.ts","sourceRoot":"","sources":["../../src/hooks/use-file-explorer-controller.ts"],"names":[],"mappings":"AAQA,+GAA+G;AAC/G,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,4GAA4G;IAC5G,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IAErC,iGAAiG;IACjG,IAAI,EAAE,OAAO,CAAC;IACd,kGAAkG;IAClG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,4GAA4G;IAC5G,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,mGAAmG;IACnG,cAAc,EAAE,OAAO,CAAC;IAIxB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;;OAIG;IACH,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/F,uGAAuG;IACvG,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,gCAAgC;IAC/C,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EAAE,WAAmB,EACzB,iBAAiB,EAAE,aAAoB,GACxC,GAAE,gCAAqC,GAAG,sBAAsB,CAuChE;AAED,eAAe,yBAAyB,CAAC"}