@openagt/dashboard 0.14.0 → 0.16.0

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 (85) hide show
  1. package/dist/client.d.ts +2 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +4 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/daemon-runtime.d.ts.map +1 -1
  6. package/dist/daemon-runtime.js +113 -7
  7. package/dist/daemon-runtime.js.map +1 -1
  8. package/dist/dashboard/relay-endpoints.d.ts +12 -0
  9. package/dist/dashboard/relay-endpoints.d.ts.map +1 -1
  10. package/dist/dashboard/relay-endpoints.js +29 -7
  11. package/dist/dashboard/relay-endpoints.js.map +1 -1
  12. package/dist/dashboard/remote-run.d.ts +43 -8
  13. package/dist/dashboard/remote-run.d.ts.map +1 -1
  14. package/dist/dashboard/remote-run.js +120 -24
  15. package/dist/dashboard/remote-run.js.map +1 -1
  16. package/dist/dashboard/rpc-serve.d.ts +23 -1
  17. package/dist/dashboard/rpc-serve.d.ts.map +1 -1
  18. package/dist/dashboard/rpc-serve.js.map +1 -1
  19. package/dist/dashboard/screen.d.ts +2 -2
  20. package/dist/dashboard/screen.d.ts.map +1 -1
  21. package/dist/dashboard/screen.js +1 -1
  22. package/dist/dashboard/screen.js.map +1 -1
  23. package/dist/dashboard/server.js +1 -1
  24. package/dist/dashboard/server.js.map +1 -1
  25. package/dist/dashboard-bundle/assets/main-DHxsfluB.js +140 -0
  26. package/dist/dashboard-bundle/assets/main-DbqABoVD.css +2 -0
  27. package/dist/dashboard-bundle/assets/module-CFB4pxwP.js +24 -0
  28. package/dist/dashboard-bundle/host/module.js +1 -1
  29. package/dist/dashboard-bundle/index.html +3 -3
  30. package/dist/dashboard-rpc/context.js +1 -1
  31. package/dist/dashboard-rpc/context.js.map +1 -1
  32. package/dist/dashboard-rpc/events.d.ts.map +1 -1
  33. package/dist/dashboard-rpc/events.js +4 -1
  34. package/dist/dashboard-rpc/events.js.map +1 -1
  35. package/dist/dashboard-rpc/reads.d.ts +30 -0
  36. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  37. package/dist/dashboard-rpc/reads.js +73 -11
  38. package/dist/dashboard-rpc/reads.js.map +1 -1
  39. package/dist/dashboard-rpc/relay-agent.d.ts +12 -5
  40. package/dist/dashboard-rpc/relay-agent.d.ts.map +1 -1
  41. package/dist/dashboard-rpc/relay-agent.js +43 -10
  42. package/dist/dashboard-rpc/relay-agent.js.map +1 -1
  43. package/dist/dashboard-rpc/relay-dispatch.d.ts +2 -0
  44. package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -1
  45. package/dist/dashboard-rpc/relay-dispatch.js +13 -6
  46. package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
  47. package/dist/dashboard-rpc/test-context.js +1 -1
  48. package/dist/dashboard-rpc/test-context.js.map +1 -1
  49. package/dist/module-types/dashboard/components/SettingsRows.d.ts +1 -1
  50. package/dist/module-types/dashboard/components/ui/card.d.ts +15 -1
  51. package/dist/module-types/dashboard/components/ui/confirm-dialog.d.ts +20 -0
  52. package/dist/module-types/dashboard/components/ui/label.d.ts +2 -0
  53. package/dist/module-types/dashboard/components/ui/radio-group.d.ts +23 -0
  54. package/dist/module-types/dashboard/components/ui/select.d.ts +12 -0
  55. package/dist/module-types/dashboard/components/ui/table.d.ts +7 -0
  56. package/dist/module-types/dashboard/components/ui/textarea.d.ts +2 -0
  57. package/dist/module-types/dashboard/lib/data-link.d.ts +14 -0
  58. package/dist/module-types/dashboard/lib/route.d.ts +6 -0
  59. package/dist/module-types/dashboard/lib/use-file-names.d.ts +20 -0
  60. package/dist/module-types/dashboard/lib/use-modules.d.ts +8 -1
  61. package/dist/module-types/dashboard/lib/use-schedule.d.ts +20 -0
  62. package/dist/module-types/dashboard/module/index.d.ts +47 -1
  63. package/dist/module-types/src/client.d.ts +2 -0
  64. package/dist/module-types/src/dashboard/remote-run.d.ts +43 -8
  65. package/dist/module-types/src/dashboard/rpc-serve.d.ts +23 -1
  66. package/dist/module-types/src/dashboard-rpc/reads.d.ts +30 -0
  67. package/dist/module-types/src/dashboard-rpc/relay-agent.d.ts +12 -5
  68. package/dist/module-types/src/reached-by-line.d.ts +12 -0
  69. package/dist/module-types/src/registry.d.ts +18 -0
  70. package/dist/module-types/src/store/agent-store.d.ts +2 -0
  71. package/dist/reached-by-line.d.ts +13 -0
  72. package/dist/reached-by-line.d.ts.map +1 -0
  73. package/dist/reached-by-line.js +22 -0
  74. package/dist/reached-by-line.js.map +1 -0
  75. package/dist/registry.d.ts +18 -0
  76. package/dist/registry.d.ts.map +1 -1
  77. package/dist/registry.js +25 -2
  78. package/dist/registry.js.map +1 -1
  79. package/dist/store/agent-store.d.ts +2 -0
  80. package/dist/store/agent-store.d.ts.map +1 -1
  81. package/dist/store/agent-store.js.map +1 -1
  82. package/package.json +14 -14
  83. package/dist/dashboard-bundle/assets/main-3NAPTQ8N.js +0 -140
  84. package/dist/dashboard-bundle/assets/main-DD99HRP9.css +0 -2
  85. package/dist/dashboard-bundle/assets/module-ZjyA5WUg.js +0 -21
@@ -0,0 +1,2 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare function Label({ className, ...props }: ComponentProps<'label'>): import("react").JSX.Element;
@@ -0,0 +1,23 @@
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
+ import { RadioGroup as RadioGroupPrimitive } from '@base-ui-components/react/radio-group';
3
+ import { Radio } from '@base-ui-components/react/radio';
4
+ type RadioGroupProps = Omit<ComponentProps<typeof RadioGroupPrimitive>, 'disabled'> & {
5
+ disabled?: boolean | undefined;
6
+ };
7
+ export declare function RadioGroup({ className, disabled, onKeyDown, ...props }: RadioGroupProps): import("react").JSX.Element;
8
+ type RadioGroupItemProps = Omit<ComponentProps<typeof Radio.Root>, 'disabled'> & {
9
+ disabled?: boolean | undefined;
10
+ };
11
+ export declare function RadioGroupItem({ className, disabled, ...props }: RadioGroupItemProps): import("react").JSX.Element;
12
+ /**
13
+ * A radio with its words: the dot inside a `<label>`, so a click on the words picks it. The label
14
+ * also names the dot for a screen reader, by `aria-labelledby`: Base UI's radio is no form control,
15
+ * so a `<label>` around it alone gives it no name.
16
+ */
17
+ export declare function RadioGroupOption({ value, disabled, className, children }: {
18
+ value: string;
19
+ disabled?: boolean | undefined;
20
+ className?: string;
21
+ children: ReactNode;
22
+ }): import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Select as SelectPrimitive } from '@base-ui-components/react/select';
3
+ export declare const Select: typeof SelectPrimitive.Root;
4
+ export declare function SelectValue(props: ComponentProps<typeof SelectPrimitive.Value>): import("react").JSX.Element;
5
+ export declare function SelectTrigger({ className, size, children, ...props }: ComponentProps<typeof SelectPrimitive.Trigger> & {
6
+ size?: 'default' | 'sm';
7
+ }): import("react").JSX.Element;
8
+ export declare function SelectContent({ className, sideOffset, align, children, ...props }: ComponentProps<typeof SelectPrimitive.Popup> & {
9
+ sideOffset?: number;
10
+ align?: 'start' | 'center' | 'end';
11
+ }): import("react").JSX.Element;
12
+ export declare function SelectItem({ className, children, ...props }: ComponentProps<typeof SelectPrimitive.Item>): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare function Table({ className, ...props }: ComponentProps<'table'>): import("react").JSX.Element;
3
+ export declare function TableHeader({ className, ...props }: ComponentProps<'thead'>): import("react").JSX.Element;
4
+ export declare function TableBody({ className, ...props }: ComponentProps<'tbody'>): import("react").JSX.Element;
5
+ export declare function TableRow({ className, ...props }: ComponentProps<'tr'>): import("react").JSX.Element;
6
+ export declare function TableHead({ className, ...props }: ComponentProps<'th'>): import("react").JSX.Element;
7
+ export declare function TableCell({ className, ...props }: ComponentProps<'td'>): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { ComponentProps } from 'react';
2
+ export declare function Textarea({ className, ...props }: ComponentProps<'textarea'>): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { type Route } from './route.js';
2
+ /** A repository path's page segment and the rest: `tickets/a.md` → `{ segment: 'tickets', rest: ['a.md'] }`; nothing for a path with no page-shaped first segment or no rest. */
3
+ export declare function dataLinkParts(href: string): {
4
+ segment: string;
5
+ rest: string[];
6
+ } | undefined;
7
+ /**
8
+ * The route a link into `projectId`'s files opens, when one of `pages` (the mounted module pages,
9
+ * by segment) claims the path's first segment; `undefined` when none does, so the link is shown
10
+ * as text and opens nothing.
11
+ */
12
+ export declare function dataLinkRoute(projectId: string, href: string, pages: readonly {
13
+ segment: string;
14
+ }[]): Route | undefined;
@@ -36,3 +36,9 @@ export declare function formatRoute(route: Route): string;
36
36
  * module's page mirrored there (a list's filters) stays when only the picked project changes.
37
37
  */
38
38
  export declare function keepPageQuery(url: string, search: string): string;
39
+ /**
40
+ * The address of a module's page as a link holds it, for a link that must also open in a new
41
+ * tab: the page's segment, with the one project the dashboard is showing when one is picked, so
42
+ * the new tab shows that project too.
43
+ */
44
+ export declare function pageHref(segment: string, search?: string): string;
@@ -0,0 +1,20 @@
1
+ /** A path that has a name: what to show for it, and how to open it. */
2
+ export interface NamedFile {
3
+ title: string;
4
+ /** Open the page that shows it. */
5
+ open(): void;
6
+ }
7
+ /** The name of a path into a project's files; `undefined` for one no installed page names. */
8
+ export type FileNames = (projectId: string, path: string) => NamedFile | undefined;
9
+ /**
10
+ * The paths into a project's files a text names: each run of characters with a slash in it whose
11
+ * first segment could be a page's (`tickets/2026-01-01_x.md`), without the brackets or the stop
12
+ * around it. Never a piece of something longer: a web address and an absolute path name no file
13
+ * of the project.
14
+ */
15
+ export declare function pathsIn(text: string): string[];
16
+ /** The names of the paths asked about, per project, read once a minute. A path whose page is not installed in that project, or does not name it, has no name. */
17
+ export declare function useFileNames(asked: readonly {
18
+ projectId: string;
19
+ paths: readonly string[];
20
+ }[]): FileNames;
@@ -1,4 +1,4 @@
1
- import type { LinkAction, ModuleCard, ModulePage, ModulePanel, ModuleRunSlots, ModuleSettings, ModuleUsageLimit } from '../module/index.js';
1
+ import type { LinkAction, ModuleCard, ModulePage, ModulePanel, ModuleRunSlots, ModuleSchedule, ModuleSettings, ModuleUsageLimit } from '../module/index.js';
2
2
  /** A module page as the shell mounts it: the page, plus the package it came from and the projects that have it. */
3
3
  export interface MountedPage extends ModulePage {
4
4
  package: string;
@@ -34,6 +34,11 @@ export interface MountedUsageLimit extends ModuleUsageLimit {
34
34
  package: string;
35
35
  projects: string[];
36
36
  }
37
+ /** The commands a module starts by itself, as the shell mounts them: the read, plus the package it came from and the projects that have it. */
38
+ export interface MountedSchedule extends ModuleSchedule {
39
+ package: string;
40
+ projects: string[];
41
+ }
37
42
  /** What the installed modules bring, once loaded: their pages, their cards and their link actions. */
38
43
  export interface MountedModules {
39
44
  pages: MountedPage[];
@@ -48,6 +53,8 @@ export interface MountedModules {
48
53
  settings: MountedSettings[];
49
54
  /** The usage bar's stop line: the first module's that declares one, in package order; absent when none does. */
50
55
  usageLimit?: MountedUsageLimit;
56
+ /** What starts by itself: the first module's that declares it, in package order; absent when none does. */
57
+ schedule?: MountedSchedule;
51
58
  /** True once the module list was read and every module in it imported or skipped. */
52
59
  loaded: boolean;
53
60
  }
@@ -0,0 +1,20 @@
1
+ import { type ModuleProject, type ModuleScheduledCommand } from '../module/index.js';
2
+ /** What starts by itself, as a page reads it. */
3
+ export interface Schedule {
4
+ /** The page where a person switches a command on: its segment, its sidebar label and its address. Absent when no installed module schedules anything. */
5
+ page?: {
6
+ segment: string;
7
+ label: string;
8
+ href: string;
9
+ };
10
+ /**
11
+ * Each project's commands that can start by themselves, by project id: none for a project no
12
+ * scheduling module is in. A project whose answer is not known, not read yet or a read that
13
+ * failed, has no entry: a page then says nothing of it, since "nothing starts" would be a guess.
14
+ */
15
+ commands: Record<string, ModuleScheduledCommand[]>;
16
+ /** Open the page where a person switches a command on. */
17
+ open(): void;
18
+ }
19
+ /** The commands that start by themselves in `projects`, read every 10 seconds. */
20
+ export declare function useSchedule(projects: readonly ModuleProject[]): Schedule;
@@ -38,6 +38,20 @@ export interface ModulePage {
38
38
  }>;
39
39
  /** The page itself. */
40
40
  Page: ComponentType<ModulePageProps>;
41
+ /**
42
+ * What the paths into a project's files that this page opens are called: asked by other pages
43
+ * that show such a path (a queue entry that names `tickets/2026-01-01_x.md`), so they can show
44
+ * a name a person reads in place of a file path. Given the paths whose first segment is the
45
+ * page's own; answers the ones it can name, by path. Read through {@link useFileNames}.
46
+ */
47
+ names?(host: ModuleHost, projectId: string, paths: string[]): Promise<Record<string, ModuleFileName>>;
48
+ }
49
+ /** What a path into a project's files is called, as the page that opens it says. */
50
+ export interface ModuleFileName {
51
+ /** The name a person reads: a ticket's title. */
52
+ title: string;
53
+ /** The path that is opened for it, when it is not the path asked about: a plan still to be written opens its ticket. */
54
+ href?: string;
41
55
  }
42
56
  /**
43
57
  * A link a dashboard page shows (#1774): the name of some work and where it points. What a
@@ -140,6 +154,27 @@ export interface ModuleUsageLimit {
140
154
  /** Save the offset the handle was dragged to, within ±{@link MAX_SPEND_OFFSET}. */
141
155
  save(host: ModuleHost, projects: ModuleProject[], points: number): Promise<UsageLimitSaved>;
142
156
  }
157
+ /** A command that starts by itself in a project, as the module that schedules it says it. */
158
+ export interface ModuleScheduledCommand {
159
+ /** The command as a person types it, without its slash: `work-queue`. */
160
+ command: string;
161
+ /** Whether it starts by itself on this computer right now. */
162
+ on: boolean;
163
+ /** One line on it, for a person: when it starts next while it is on ("Next start in 3h, if there is work"), or why it does not start though its own switch is on ("The scheduler is off", "Cannot start on Codex: …"). */
164
+ note?: string;
165
+ }
166
+ /**
167
+ * What a module that starts commands by itself tells the other pages: which commands, and whether
168
+ * each is on. A page whose work such a command takes (a queue) says so with it, and links to the
169
+ * module's own page, where a person switches a command on. The first module that declares one
170
+ * (in package order) is asked. Read through {@link useSchedule}.
171
+ */
172
+ export interface ModuleSchedule {
173
+ /** The module's own page where a person switches a command on, by its segment. */
174
+ page: string;
175
+ /** One project's commands that can start by themselves. Rejects when they cannot be read: the page then says nothing of that project. */
176
+ read(host: ModuleHost, project: ModuleProject): Promise<ModuleScheduledCommand[]>;
177
+ }
143
178
  /**
144
179
  * The Context as a side-rail tab sees it (#504): the files the next run is pointed at. A tab may
145
180
  * show which files are in it and add or remove one.
@@ -230,6 +265,8 @@ export interface ModuleDefinition {
230
265
  settings?: ModuleSettings[];
231
266
  /** The stop line the module puts on the usage bar. */
232
267
  usageLimit?: ModuleUsageLimit;
268
+ /** The commands the module starts by itself, for the other pages to say. */
269
+ schedule?: ModuleSchedule;
233
270
  /** A stylesheet to load with the module, relative to the module's browser part's own URL. */
234
271
  stylesheet?: string;
235
272
  }
@@ -362,11 +399,16 @@ export declare const ModuleHostContext: import("react").Context<ModuleHost | Mod
362
399
  export declare function useModuleHost(): ModuleHost;
363
400
  export { Button, buttonVariants, type ButtonProps } from '../components/ui/button.js';
364
401
  export { Badge } from '../components/ui/badge.js';
365
- export { Card, CardHeader, CardTitle, CardContent } from '../components/ui/card.js';
402
+ export { Card, CardHeader, CardTitle, CardTitleLink, CardContent } from '../components/ui/card.js';
366
403
  export { Skeleton } from '../components/ui/skeleton.js';
367
404
  export { Checkbox } from '../components/ui/checkbox.js';
368
405
  export { Switch } from '../components/ui/switch.js';
369
406
  export { Input } from '../components/ui/input.js';
407
+ export { Textarea } from '../components/ui/textarea.js';
408
+ export { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../components/ui/table.js';
409
+ export { Label } from '../components/ui/label.js';
410
+ export { RadioGroup, RadioGroupItem, RadioGroupOption } from '../components/ui/radio-group.js';
411
+ export { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../components/ui/select.js';
370
412
  export { Popover, PopoverContent, PopoverTrigger } from '../components/ui/popover.js';
371
413
  export { RangeSlider } from '../components/ui/slider.js';
372
414
  export { Separator } from '../components/ui/separator.js';
@@ -386,3 +428,7 @@ export { MAX_SPEND_OFFSET } from '../../src/preference-defaults.js';
386
428
  export { formatRelative, formatDateTime, formatDuration, formatAge } from '../lib/format-date.js';
387
429
  export { usePolled, useLoaded, forgetRemembered } from '../lib/use-async.js';
388
430
  export { useAction } from '../lib/use-action.js';
431
+ export { useSchedule, type Schedule } from '../lib/use-schedule.js';
432
+ export { pageHref } from '../lib/route.js';
433
+ export { useFileNames, pathsIn, type FileNames, type NamedFile } from '../lib/use-file-names.js';
434
+ export { ConfirmDialog } from '../components/ui/confirm-dialog.js';
@@ -12,5 +12,7 @@ export { SeenTracker } from './dashboard/keyed-watcher.js';
12
12
  export type { ProjectionRead } from './dashboard/projects.js';
13
13
  export { NOTIFICATION_DEFAULTS, MAX_SPEND_OFFSET, notifies, browserNotifyEnabled, notifyCategoryEnabled, type NotifyCategory } from './preference-defaults.js';
14
14
  export { parseMachineLink } from './machine-link.js';
15
+ export { reachedByLine } from './reached-by-line.js';
16
+ export { isLoopbackHost } from './loopback-host.js';
15
17
  export { bridgeChoiceRequest } from './dashboard/bridge-question.js';
16
18
  export { cloudRunState, cloudRunActive, CLOUD_SESSION_WINDOW_MS, type CloudRunState } from './cloud-run-state.js';
@@ -47,8 +47,20 @@ export type RelayStartResult = StartAgentResult | {
47
47
  * the browser's status dots learn reachable from not.
48
48
  */
49
49
  export declare function pingRemote(target: MachineAccess): Promise<boolean>;
50
+ /**
51
+ * What a saved machine says of itself in its ping: the OpenAgent it runs, and the computer's own
52
+ * name, which the records of its runs carry. Nothing for a machine that does not answer, or
53
+ * does not say.
54
+ */
55
+ export declare function remoteFacts(target: MachineAccess): Promise<{
56
+ version?: string;
57
+ host?: string;
58
+ }>;
50
59
  /** The OpenAgent a saved machine runs, as its ping tells it; nothing for a machine that does not answer, or does not say. */
51
60
  export declare function remoteVersion(target: MachineAccess): Promise<string | undefined>;
61
+ /** A machine refused a call and said why: the message is the machine's own words, for the person to read. */
62
+ export declare class MachineRefusal extends Error {
63
+ }
52
64
  /** What asking to be let in came to: this computer's key there, or why not, in words. */
53
65
  export type EnterResult = {
54
66
  ok: true;
@@ -112,7 +124,8 @@ export interface BringProject {
112
124
  * holds this computer's key there, so a read/diff/handoff/push/PR for a relayed agent runs ON the machine: POST
113
125
  * {fn, args} to the remote's /_relay/rpc with the key (no Origin), returning the machine's
114
126
  * result. Throws on an unreachable machine or a non-2xx so the caller falls back to its own empty/error
115
- * shape, the same way a failed local read does.
127
+ * shape, the same way a failed local read does. A refusal the machine gave a reason for is thrown
128
+ * as a {@link MachineRefusal}, so the reason can be shown in place of that shape's own words.
116
129
  */
117
130
  export declare function relayRpc(target: RemoteTarget, fn: string, args: unknown[]): Promise<unknown>;
118
131
  /**
@@ -141,14 +154,36 @@ export declare class RelayedAgents {
141
154
  private readonly agents;
142
155
  private readonly targets;
143
156
  private readonly metas;
144
- /** Open a local stream for a remote agent and start pumping the remote's events into it. */
145
- register(agentId: string, target: RemoteTarget, meta: AgentMeta, projectId: string): void;
146
- /** The live event stream for a relayed agent, or undefined when this daemon is not relaying it. */
147
- get(agentId: string | undefined): EventStream<OpenAgentEvent> | undefined;
148
- /** The machine a relayed agent runs on, kept past the event stream so post-run push/PR still reach it. */
149
- target(agentId: string | undefined): RemoteTarget | undefined;
150
- /** Whether a run this daemon follows is still at work on the machine at `url`: its events still stream. */
157
+ private readonly followed;
158
+ /**
159
+ * Open a local stream for a remote agent and start pumping the remote's events into it. `sent`
160
+ * is a run this computer started there. Any other is followed by its record, which someone
161
+ * else may have written: it never stands for a run that is at work ({@link working}), and only
162
+ * so many are followed at once.
163
+ */
164
+ register(agentId: string, target: RemoteTarget, meta: AgentMeta, projectId: string, sent?: boolean): void;
165
+ /**
166
+ * Whether the run is kept here as a run of that project. A run's id says nothing of its
167
+ * project, and a run of one project is never taken for one of another by its id alone.
168
+ */
169
+ private of;
170
+ /** The live event stream for a relayed agent of the project, or undefined when this daemon is not relaying it. */
171
+ get(agentId: string | undefined, projectId?: string): EventStream<OpenAgentEvent> | undefined;
172
+ /** The machine a relayed agent of the project runs on, kept past the event stream so post-run push/PR still reach it. */
173
+ target(agentId: string | undefined, projectId?: string): RemoteTarget | undefined;
174
+ /** Whether this daemon follows the project's run now: its events stream. */
175
+ follows(agentId: string, projectId?: string): boolean;
176
+ /**
177
+ * Whether a run this computer sent is still at work on the machine at `url`. A machine's
178
+ * stream stays open after its run ended, for the next message to it, so the run's own state
179
+ * says it and not the stream. A run followed by its record does not count: its state is what
180
+ * a record said, and a machine is not held by a record anyone with the project can write.
181
+ */
151
182
  working(url: string): boolean;
183
+ /** Whether the run is one this computer sent to its machine, not one followed by its record. */
184
+ isSent(agentId: string): boolean;
185
+ /** Stop following a run and forget it: it is read by its record again. */
186
+ private forget;
152
187
  /** How the machine at `url` is reached since it was added again, for the runs kept from before: this computer's new key there, and the key the machine is known by. */
153
188
  rekey(url: string, key: string, pin?: string): void;
154
189
  /** A project's relayed run stubs (#1077), newest-first, so `onAgents` can surface them in the list. */
@@ -18,17 +18,39 @@ export type RemoveProjectHandler = (projectId: string, files: boolean) => Remove
18
18
  * rather than a file on disk (#426), and the daemon feeds an agent it is relaying from a machine (#1067).
19
19
  * Returns undefined when there is no in-memory stream, so `onEvents` falls back to tailing the log. */
20
20
  export type EventsSource = (projectId: string, agentId?: string) => AsyncIterable<OpenAgentEvent> | undefined;
21
+ /** A saved machine as a run's row needs it: the name it was given, and its address. */
22
+ export interface SavedMachine {
23
+ label: string;
24
+ url: string;
25
+ }
21
26
  /** Look up the machine a relayed agent (#1067) executes on, or undefined for an ordinary local agent. The
22
27
  * daemon wires this from its live relayed-agent map; a run-scoped RPC uses it to forward a remote agent's
23
28
  * read/steer/handoff to that machine instead of resolving a (nonexistent) local checkout. */
24
29
  export interface RemoteAgents {
25
- target(agentId: string | undefined): RemoteTarget | undefined;
30
+ /** The machine of a run this daemon follows, in the project when one is named: a run's id alone says nothing of its project. */
31
+ target(agentId: string | undefined, projectId?: string): RemoteTarget | undefined;
26
32
  /** A project's relayed run stubs (#1077), so `onAgents` can show a remote agent in the list and re-open it after a reload. */
27
33
  list(projectId: string): AgentMeta[];
34
+ /** Whether a followed run is one this computer sent to its machine. Any other is followed by its record, and is listed only while that record is there. */
35
+ sent(agentId: string): boolean;
28
36
  /** Whether a run relayed from here is still at work on the machine at `url`. */
29
37
  working(url: string): boolean;
30
38
  /** How the machine at `url` is reached since it was added again, for the runs kept from before. */
31
39
  rekey(url: string, key: string, pin?: string): void;
40
+ /**
41
+ * The saved machine a run of the project runs on, whoever started it there: one this computer
42
+ * sent, or one whose record, come through the project's shared records, names that machine's
43
+ * computer. Undefined for a run of this computer's own, and for one of a computer that is
44
+ * no saved machine.
45
+ */
46
+ home(projectId: string, agentId: string): Promise<RemoteTarget | undefined>;
47
+ /** Follow a run that runs on a saved machine, when it is not followed yet: its events then stream here, as for a run this computer sent. */
48
+ follow(projectId: string, agentId: string): Promise<void>;
49
+ /**
50
+ * The saved machine, by its computer's own name, as the records of its runs carry it: the name
51
+ * it was given and its address. Asked of the machines first, when one has not said its name yet.
52
+ */
53
+ machineNames(): Promise<(host: string) => SavedMachine | undefined>;
32
54
  }
33
55
  /**
34
56
  * What every RPC acts through.
@@ -16,6 +16,7 @@ import type { AgentWorktree } from '../dashboard/types.js';
16
16
  import type { OpenAgentEvent } from '../events.js';
17
17
  import type { BridgeEvent, BridgeHello, BridgeQuestion } from '../dashboard/bridge-endpoints.js';
18
18
  import type { BridgeAnswer, BridgeContact, BridgeVersion } from '../dashboard/bridge-store.js';
19
+ import type { SavedMachine } from '../dashboard/rpc-serve.js';
19
20
  /**
20
21
  * The project's runs, most-recent first (or `[]`). The archived (finished) runs
21
22
  * from `agents/`, plus every live agent prepended — so the sidebar shows an in-progress
@@ -36,6 +37,15 @@ import type { BridgeAnswer, BridgeContact, BridgeVersion } from '../dashboard/br
36
37
  * instead of losing it.
37
38
  */
38
39
  export declare function onAgents(projectId: string): Promise<AgentMeta[]>;
40
+ /**
41
+ * A project's runs with the ones this daemon follows on a machine (#1067), which live in its
42
+ * memory. A run this computer sent that has no record here is listed first, as followed, so a
43
+ * reload re-opens it instead of losing it. One that has a record keeps the record's row, in
44
+ * its place, which holds more (its branch, its pull request, its parent), and takes from the
45
+ * followed one what the machine said since: whether it works, and its session. A run followed
46
+ * by its record is listed only while that record is there: deleted, it is gone from the list.
47
+ */
48
+ export declare function withFollowed(followed: AgentMeta[], local: AgentMeta[], sent: (agentId: string) => boolean): AgentMeta[];
39
49
  /**
40
50
  * A web run whose cloud session is waiting on a human — the bridge holds its parked question, or
41
51
  * claude.ai's session list shows it awaiting input (#1332) — is marked waiting (#1668), so its row
@@ -50,6 +60,19 @@ export declare function markCloudWaiting(agent: AgentMeta): AgentMeta;
50
60
  * with no recorded host predates the field and passes through untouched.
51
61
  */
52
62
  export declare function markOtherHost(agent: AgentMeta, thisHost?: string): AgentMeta;
63
+ /**
64
+ * What a run's row says of the saved machine it runs on: the name the machine was given, and
65
+ * that it is a person's own computer reached by its line, when it is one.
66
+ */
67
+ export declare function onMachine(machine: SavedMachine): Pick<AgentMeta, 'remoteLabel' | 'remoteByLine'>;
68
+ /**
69
+ * A run whose record names the computer of a saved machine runs on that machine, whoever started
70
+ * it there, and reads like one this computer sent: by the name the machine was given. The record
71
+ * comes through the project's shared records, so it is here for a run started on the machine's
72
+ * own page too, and after this daemon forgot the runs it sent. A run of this computer, and one of
73
+ * a computer that is no saved machine, pass through untouched.
74
+ */
75
+ export declare function markMachine(agent: AgentMeta, machineOf: (host: string) => SavedMachine | undefined, thisHost?: string): AgentMeta;
53
76
  /**
54
77
  * A run that ended clean while the process its card names is still alive on this host is marked
55
78
  * saving: the tool that runs it saves the run's record and cleans up its checkout after the card says
@@ -57,6 +80,13 @@ export declare function markOtherHost(agent: AgentMeta, thisHost?: string): Agen
57
80
  * run of another host, or with no recorded process, passes through untouched.
58
81
  */
59
82
  export declare function markSaving(agent: AgentMeta, thisHost?: string, alive?: (pid: number) => boolean): AgentMeta;
83
+ /**
84
+ * A run as its record may say it. A record is a file anyone with the project can write, and its
85
+ * tool's own words are read into the row as they are, so the words only this daemon gives a row
86
+ * are taken off it first: that it runs on a saved machine and which, that it is another
87
+ * computer's, that it is being saved. A computer's name that is no name is none.
88
+ */
89
+ export declare function asRecorded(agent: AgentMeta): AgentMeta;
60
90
  /**
61
91
  * The agent ids that still have a worktree on disk (#737). An agent that failed or was stopped keeps
62
92
  * its checkout so you can go look at what it was holding; this is how the dashboard knows which
@@ -1,8 +1,15 @@
1
+ /** Run `call` as one that came in from another computer: nothing in it is passed on to a machine. */
2
+ export declare function asArrived<T>(call: () => Promise<T>): Promise<T>;
1
3
  /**
2
- * Run a run-scoped RPC locally, or relay it to the machine when `agentId` names an agent this daemon is
3
- * relaying to a saved one (#1067 slice 2). For an ordinary local agent the remote lookup is empty and
4
- * `local()` runs unchanged. For a remote agent there is no local checkout, so the call is forwarded to the
5
- * machine with this computer's key there; if the machine is unreachable, or no longer lets this computer in, `unreachable` is returned - the same empty/error
6
- * shape `local()` gives on a failed read - so the caller never special-cases a remote agent.
4
+ * Run a run-scoped RPC locally, or relay it to the machine when `agentId` names an agent that runs on a
5
+ * saved one (#1067 slice 2): one this daemon sent there, or one the machine's own page started,
6
+ * known here by its record. For an ordinary local agent the remote lookup is empty and
7
+ * `local()` runs unchanged. For a remote agent the call is forwarded to the machine with this
8
+ * computer's key there. If the machine is unreachable, no longer lets this computer in, or
9
+ * knows nothing of the run, a read
10
+ * is answered from what this computer holds of the run, its record when it has one, and
11
+ * anything that would change the run answers `unreachable`: it is never done here in the
12
+ * machine's place. A machine that refused and said why (one that only lets its server watch) is
13
+ * answered in its own words, where `unreachable` has words of its own to replace.
7
14
  */
8
15
  export declare function relayOr<T>(agentId: string | undefined, fn: string, args: unknown[], local: () => Promise<T>, unreachable: T): Promise<T>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether a saved machine is a person's own computer, reached by the line it keeps open to this
3
+ * server. Such a computer sits behind a home network, where a server cannot call it: it calls
4
+ * the server and keeps that one connection open, and the server serves an address on its own
5
+ * loopback that stands for the computer. That address is what the machine is saved by, so a
6
+ * saved machine whose address is a loopback origin is such a computer, and no other machine is:
7
+ * every other one is saved by an address on a network.
8
+ *
9
+ * A leaf with no Node in it: the daemon says it of a run, and the dashboard draws such a machine
10
+ * as a computer, not as a server, and has it removed under Devices, where the computer is taken out.
11
+ */
12
+ export declare function reachedByLine(url: string): boolean;
@@ -34,6 +34,12 @@ export interface MachineRecord {
34
34
  door: string;
35
35
  /** What the machine's key is known by, when its link said: every call goes only to a machine that shows that key. */
36
36
  pin?: string;
37
+ /**
38
+ * The computer's own name, as the machine first said it: what the records of its runs carry,
39
+ * so a run in a project's shared records is known as this machine's. Kept as first said: a
40
+ * machine that later says another name does not get another computer's runs by it.
41
+ */
42
+ host?: string;
37
43
  }
38
44
  /**
39
45
  * The dashboard's Global options (#410), persisted next to the project list so they
@@ -189,6 +195,8 @@ export declare function nodeRegistryFs(): RegistryFs;
189
195
  * and duplicate ids dropped. A malformed entry is skipped, not thrown — a bad registry never breaks the read.
190
196
  */
191
197
  export declare function sanitizeCustomPresets(value: unknown): CustomPreset[];
198
+ /** Whether a value reads as a computer's own name: the letters a host name has, at a host name's length. A page shows it. */
199
+ export declare function isHostName(value: unknown): value is string;
192
200
  /**
193
201
  * Read the whole registry. Forgiving: a missing / unreadable / malformed file — or one in a shape
194
202
  * this no longer writes — yields an empty registry, never throws. Projects are deduped by resolved
@@ -255,6 +263,16 @@ export declare function addMachine(machine: {
255
263
  record: MachineRecord;
256
264
  displaced: MachineRecord[];
257
265
  }>;
266
+ /**
267
+ * Keep the computer's own name a saved machine said, the first time it says one. A machine that
268
+ * already has a name keeps it, and one saved again (a new link) starts without one: `key` is
269
+ * the key the machine was asked with, and a machine saved anew since is not named by an answer
270
+ * to the old one. Answers whether the name was written.
271
+ */
272
+ export declare function nameMachine(machine: {
273
+ id: string;
274
+ key: string;
275
+ }, host: string, fs?: RegistryFs, env?: NodeJS.ProcessEnv): Promise<boolean>;
258
276
  /** Take a saved machine off the list, by id. Answers the one that was there. */
259
277
  export declare function removeMachine(id: string, fs?: RegistryFs, env?: NodeJS.ProcessEnv): Promise<MachineRecord | undefined>;
260
278
  /** A {@link PreferencesStore} bound to the real registry file, wired by the daemon so the
@@ -164,6 +164,8 @@ export interface AgentMeta {
164
164
  target?: 'local' | 'actions' | 'remote' | 'web';
165
165
  /** The saved machine a remote agent (#1067) executes on, for the session list + notice after a reload. */
166
166
  remoteLabel?: string;
167
+ /** That saved machine is a person's own computer, reached by the line it keeps open here (reached-by-line.ts): the run is drawn with a computer, not a server. */
168
+ remoteByLine?: true;
167
169
  /**
168
170
  * The flow this agent started under (#1467): `build` for the scope→build orchestration, `prompt`
169
171
  * for the direct-prompt path (research and transparent runs record `prompt` too). Persisted so a
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Whether a saved machine is a person's own computer, reached by the line it keeps open to this
3
+ * server. Such a computer sits behind a home network, where a server cannot call it: it calls
4
+ * the server and keeps that one connection open, and the server serves an address on its own
5
+ * loopback that stands for the computer. That address is what the machine is saved by, so a
6
+ * saved machine whose address is a loopback origin is such a computer, and no other machine is:
7
+ * every other one is saved by an address on a network.
8
+ *
9
+ * A leaf with no Node in it: the daemon says it of a run, and the dashboard draws such a machine
10
+ * as a computer, not as a server, and has it removed under Devices, where the computer is taken out.
11
+ */
12
+ export declare function reachedByLine(url: string): boolean;
13
+ //# sourceMappingURL=reached-by-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reached-by-line.d.ts","sourceRoot":"","sources":["../src/reached-by-line.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlD"}
@@ -0,0 +1,22 @@
1
+ import { isLoopbackHost } from './loopback-host.js';
2
+ /**
3
+ * Whether a saved machine is a person's own computer, reached by the line it keeps open to this
4
+ * server. Such a computer sits behind a home network, where a server cannot call it: it calls
5
+ * the server and keeps that one connection open, and the server serves an address on its own
6
+ * loopback that stands for the computer. That address is what the machine is saved by, so a
7
+ * saved machine whose address is a loopback origin is such a computer, and no other machine is:
8
+ * every other one is saved by an address on a network.
9
+ *
10
+ * A leaf with no Node in it: the daemon says it of a run, and the dashboard draws such a machine
11
+ * as a computer, not as a server, and has it removed under Devices, where the computer is taken out.
12
+ */
13
+ export function reachedByLine(url) {
14
+ try {
15
+ const at = new URL(url);
16
+ return at.protocol === 'http:' && isLoopbackHost(at.hostname);
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ //# sourceMappingURL=reached-by-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reached-by-line.js","sourceRoot":"","sources":["../src/reached-by-line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACvB,OAAO,EAAE,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -34,6 +34,12 @@ export interface MachineRecord {
34
34
  door: string;
35
35
  /** What the machine's key is known by, when its link said: every call goes only to a machine that shows that key. */
36
36
  pin?: string;
37
+ /**
38
+ * The computer's own name, as the machine first said it: what the records of its runs carry,
39
+ * so a run in a project's shared records is known as this machine's. Kept as first said: a
40
+ * machine that later says another name does not get another computer's runs by it.
41
+ */
42
+ host?: string;
37
43
  }
38
44
  /**
39
45
  * The dashboard's Global options (#410), persisted next to the project list so they
@@ -189,6 +195,8 @@ export declare function nodeRegistryFs(): RegistryFs;
189
195
  * and duplicate ids dropped. A malformed entry is skipped, not thrown — a bad registry never breaks the read.
190
196
  */
191
197
  export declare function sanitizeCustomPresets(value: unknown): CustomPreset[];
198
+ /** Whether a value reads as a computer's own name: the letters a host name has, at a host name's length. A page shows it. */
199
+ export declare function isHostName(value: unknown): value is string;
192
200
  /**
193
201
  * Read the whole registry. Forgiving: a missing / unreadable / malformed file — or one in a shape
194
202
  * this no longer writes — yields an empty registry, never throws. Projects are deduped by resolved
@@ -255,6 +263,16 @@ export declare function addMachine(machine: {
255
263
  record: MachineRecord;
256
264
  displaced: MachineRecord[];
257
265
  }>;
266
+ /**
267
+ * Keep the computer's own name a saved machine said, the first time it says one. A machine that
268
+ * already has a name keeps it, and one saved again (a new link) starts without one: `key` is
269
+ * the key the machine was asked with, and a machine saved anew since is not named by an answer
270
+ * to the old one. Answers whether the name was written.
271
+ */
272
+ export declare function nameMachine(machine: {
273
+ id: string;
274
+ key: string;
275
+ }, host: string, fs?: RegistryFs, env?: NodeJS.ProcessEnv): Promise<boolean>;
258
276
  /** Take a saved machine off the list, by id. Answers the one that was there. */
259
277
  export declare function removeMachine(id: string, fs?: RegistryFs, env?: NodeJS.ProcessEnv): Promise<MachineRecord | undefined>;
260
278
  /** A {@link PreferencesStore} bound to the real registry file, wired by the daemon so the
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGrE;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,qGAAqG;IACrG,EAAE,EAAE,MAAM,CAAA;IACV,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAA;IACX,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,uGAAuG;IACvG,IAAI,EAAE,MAAM,CAAA;IACZ,qHAAqH;IACrH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAKD;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AASD,MAAM,WAAW,WAAW;IAC1B,sGAAsG;IACtG,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,+HAA+H;IAC/H,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gJAAgJ;IAChJ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4QAA4Q;IAC5Q,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;gEAC4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gHAAgH;IAChH,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,2HAA2H;IAC3H,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,WAAW,EAAE,WAAW,CAAA;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;CAC3B;AAED,sGAAsG;AACtG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5B,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CAChD;AAED,6FAA6F;AAC7F,eAAO,MAAM,aAAa,mBAAmB,CAAA;AAE7C,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,MAAQ,CAAA;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAG3D;AAED,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,yDAAyD;IACzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;;;OAIG;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD;;;;OAIG;IACH,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,IAAI,UAAU,CAG3C;AAkGD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,EAAE,CAiBpE;AAmBD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,QAAQ,CAAC,CAmBnB;AA6DD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CASpC;AAED,6EAA6E;AAC7E,wBAAsB,eAAe,CACnC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,WAAW,CAAC,CAEtB;AAED,wFAAwF;AACxF,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,WAAW,EACxB,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,WAAW,EAClB,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,WAAW,CAAC,CAOtB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,sGAAsG;AACtG,wBAAsB,eAAe,CACnC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED,oGAAoG;AACpG,wBAAsB,YAAY,CAChC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAgBhE;AAED,gFAAgF;AAChF,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAQpC;AAWD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,GAAE,UAA6B,EACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GACxC,gBAAgB,CAclB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}