@openagt/dashboard 0.37.0 → 0.39.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.
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/computer-name.d.ts +3 -0
- package/dist/computer-name.d.ts.map +1 -0
- package/dist/computer-name.js +6 -0
- package/dist/computer-name.js.map +1 -0
- package/dist/daemon-runtime.d.ts.map +1 -1
- package/dist/daemon-runtime.js +64 -7
- package/dist/daemon-runtime.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +6 -1
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/compress.d.ts +23 -0
- package/dist/dashboard/compress.d.ts.map +1 -0
- package/dist/dashboard/compress.js +55 -0
- package/dist/dashboard/compress.js.map +1 -0
- package/dist/dashboard/copied-logins.d.ts +54 -0
- package/dist/dashboard/copied-logins.d.ts.map +1 -0
- package/dist/dashboard/copied-logins.js +60 -0
- package/dist/dashboard/copied-logins.js.map +1 -0
- package/dist/dashboard/copy-logins.d.ts +5 -1
- package/dist/dashboard/copy-logins.d.ts.map +1 -1
- package/dist/dashboard/copy-logins.js +9 -3
- package/dist/dashboard/copy-logins.js.map +1 -1
- package/dist/dashboard/git-hosts.d.ts +2 -0
- package/dist/dashboard/git-hosts.d.ts.map +1 -1
- package/dist/dashboard/git-hosts.js +1 -1
- package/dist/dashboard/git-hosts.js.map +1 -1
- package/dist/dashboard/logins-sync.d.ts +146 -0
- package/dist/dashboard/logins-sync.d.ts.map +1 -0
- package/dist/dashboard/logins-sync.js +344 -0
- package/dist/dashboard/logins-sync.js.map +1 -0
- package/dist/dashboard/machine-runs.d.ts +111 -0
- package/dist/dashboard/machine-runs.d.ts.map +1 -0
- package/dist/dashboard/machine-runs.js +252 -0
- package/dist/dashboard/machine-runs.js.map +1 -0
- package/dist/dashboard/module-agents.d.ts +44 -0
- package/dist/dashboard/module-agents.d.ts.map +1 -0
- package/dist/dashboard/module-agents.js +25 -0
- package/dist/dashboard/module-agents.js.map +1 -0
- package/dist/dashboard/module-serve.d.ts +10 -1
- package/dist/dashboard/module-serve.d.ts.map +1 -1
- package/dist/dashboard/module-serve.js +25 -6
- package/dist/dashboard/module-serve.js.map +1 -1
- package/dist/dashboard/relay-endpoints.d.ts +8 -4
- package/dist/dashboard/relay-endpoints.d.ts.map +1 -1
- package/dist/dashboard/relay-endpoints.js +41 -9
- package/dist/dashboard/relay-endpoints.js.map +1 -1
- package/dist/dashboard/remote-run.d.ts +18 -3
- package/dist/dashboard/remote-run.d.ts.map +1 -1
- package/dist/dashboard/remote-run.js +32 -5
- package/dist/dashboard/remote-run.js.map +1 -1
- package/dist/dashboard/rpc-serve.d.ts +8 -2
- package/dist/dashboard/rpc-serve.d.ts.map +1 -1
- package/dist/dashboard/rpc-serve.js +41 -11
- package/dist/dashboard/rpc-serve.js.map +1 -1
- package/dist/dashboard/runs-watch.d.ts +32 -0
- package/dist/dashboard/runs-watch.d.ts.map +1 -0
- package/dist/dashboard/runs-watch.js +89 -0
- package/dist/dashboard/runs-watch.js.map +1 -0
- package/dist/dashboard/server.d.ts +4 -2
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1 -1
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/static.d.ts.map +1 -1
- package/dist/dashboard/static.js +8 -6
- package/dist/dashboard/static.js.map +1 -1
- package/dist/dashboard-bundle/assets/host/module-CUc1n2SP.js +1 -0
- package/dist/dashboard-bundle/assets/host/react-B7Fi4tYT.js +1 -0
- package/dist/dashboard-bundle/assets/host/react-dom-client-owmMVl4T.js +1 -0
- package/dist/dashboard-bundle/assets/host/react-dom-oeGwGKD7.js +1 -0
- package/dist/dashboard-bundle/assets/host/react-jsx-runtime-Dxx08tyw.js +1 -0
- package/dist/dashboard-bundle/assets/main-Cv9CrCec.css +2 -0
- package/dist/dashboard-bundle/assets/main-dejlwmyP.js +149 -0
- package/dist/dashboard-bundle/assets/module-DR2oCWs5.js +14 -0
- package/dist/dashboard-bundle/index.html +10 -9
- package/dist/dashboard-rpc/accounts.d.ts +17 -1
- package/dist/dashboard-rpc/accounts.d.ts.map +1 -1
- package/dist/dashboard-rpc/accounts.js +46 -8
- package/dist/dashboard-rpc/accounts.js.map +1 -1
- package/dist/dashboard-rpc/context.js +1 -1
- package/dist/dashboard-rpc/context.js.map +1 -1
- package/dist/dashboard-rpc/copied-logins.d.ts +49 -0
- package/dist/dashboard-rpc/copied-logins.d.ts.map +1 -0
- package/dist/dashboard-rpc/copied-logins.js +179 -0
- package/dist/dashboard-rpc/copied-logins.js.map +1 -0
- package/dist/dashboard-rpc/index.d.ts +6 -3
- package/dist/dashboard-rpc/index.d.ts.map +1 -1
- package/dist/dashboard-rpc/index.js +10 -4
- package/dist/dashboard-rpc/index.js.map +1 -1
- package/dist/dashboard-rpc/logins.d.ts +18 -0
- package/dist/dashboard-rpc/logins.d.ts.map +1 -1
- package/dist/dashboard-rpc/logins.js +51 -7
- package/dist/dashboard-rpc/logins.js.map +1 -1
- package/dist/dashboard-rpc/machines.d.ts +15 -2
- package/dist/dashboard-rpc/machines.d.ts.map +1 -1
- package/dist/dashboard-rpc/machines.js +32 -8
- package/dist/dashboard-rpc/machines.js.map +1 -1
- package/dist/dashboard-rpc/modules.d.ts +9 -9
- package/dist/dashboard-rpc/modules.d.ts.map +1 -1
- package/dist/dashboard-rpc/modules.js +14 -13
- package/dist/dashboard-rpc/modules.js.map +1 -1
- package/dist/dashboard-rpc/people.d.ts +16 -0
- package/dist/dashboard-rpc/people.d.ts.map +1 -0
- package/dist/dashboard-rpc/people.js +32 -0
- package/dist/dashboard-rpc/people.js.map +1 -0
- package/dist/dashboard-rpc/reads.d.ts +29 -1
- package/dist/dashboard-rpc/reads.d.ts.map +1 -1
- package/dist/dashboard-rpc/reads.js +111 -8
- package/dist/dashboard-rpc/reads.js.map +1 -1
- package/dist/dashboard-rpc/relay-dispatch.d.ts +6 -0
- package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -1
- package/dist/dashboard-rpc/relay-dispatch.js +25 -2
- package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
- package/dist/dashboard-rpc/runs-changed.d.ts +8 -0
- package/dist/dashboard-rpc/runs-changed.d.ts.map +1 -0
- package/dist/dashboard-rpc/runs-changed.js +62 -0
- package/dist/dashboard-rpc/runs-changed.js.map +1 -0
- package/dist/dashboard-rpc/server-logins.d.ts +22 -0
- package/dist/dashboard-rpc/server-logins.d.ts.map +1 -0
- package/dist/dashboard-rpc/server-logins.js +26 -0
- package/dist/dashboard-rpc/server-logins.js.map +1 -0
- package/dist/dashboard-rpc/test-context.js +1 -1
- package/dist/dashboard-rpc/test-context.js.map +1 -1
- package/dist/health.d.ts +20 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +98 -0
- package/dist/health.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/module-types/dashboard/components/FilterChips.d.ts +12 -0
- package/dist/module-types/dashboard/components/Page.d.ts +12 -0
- package/dist/module-types/dashboard/components/SidebarToggle.d.ts +4 -0
- package/dist/module-types/dashboard/components/StatTile.d.ts +15 -0
- package/dist/module-types/dashboard/components/ui/sheet.d.ts +10 -0
- package/dist/module-types/dashboard/components/ui/sidebar.d.ts +71 -0
- package/dist/module-types/dashboard/lib/use-async.d.ts +24 -6
- package/dist/module-types/dashboard/lib/use-mobile.d.ts +4 -0
- package/dist/module-types/dashboard/lib/use-modules.d.ts +7 -3
- package/dist/module-types/dashboard/module/index.d.ts +42 -15
- package/dist/module-types/src/client.d.ts +1 -0
- package/dist/module-types/src/computer-name.d.ts +2 -0
- package/dist/module-types/src/dashboard/compress.d.ts +22 -0
- package/dist/module-types/src/dashboard/copied-logins.d.ts +53 -0
- package/dist/module-types/src/dashboard/git-hosts.d.ts +2 -0
- package/dist/module-types/src/dashboard/logins-sync.d.ts +145 -0
- package/dist/module-types/src/dashboard/machine-runs.d.ts +110 -0
- package/dist/module-types/src/dashboard/module-agents.d.ts +43 -0
- package/dist/module-types/src/dashboard/module-serve.d.ts +10 -1
- package/dist/module-types/src/dashboard/remote-run.d.ts +18 -3
- package/dist/module-types/src/dashboard/rpc-serve.d.ts +8 -2
- package/dist/module-types/src/dashboard/runs-watch.d.ts +31 -0
- package/dist/module-types/src/dashboard-rpc/accounts.d.ts +17 -1
- package/dist/module-types/src/dashboard-rpc/copied-logins.d.ts +48 -0
- package/dist/module-types/src/dashboard-rpc/index.d.ts +6 -3
- package/dist/module-types/src/dashboard-rpc/logins.d.ts +18 -0
- package/dist/module-types/src/dashboard-rpc/machines.d.ts +15 -2
- package/dist/module-types/src/dashboard-rpc/modules.d.ts +9 -9
- package/dist/module-types/src/dashboard-rpc/people.d.ts +15 -0
- package/dist/module-types/src/dashboard-rpc/reads.d.ts +29 -1
- package/dist/module-types/src/dashboard-rpc/runs-changed.d.ts +7 -0
- package/dist/module-types/src/dashboard-rpc/server-logins.d.ts +21 -0
- package/dist/module-types/src/health.d.ts +19 -0
- package/dist/module-types/src/index.d.ts +1 -0
- package/dist/module-types/src/overview-layout.d.ts +37 -0
- package/dist/module-types/src/project-hooks.d.ts +11 -1
- package/dist/module-types/src/registry.d.ts +14 -0
- package/dist/module-types/src/store/agent-store.d.ts +15 -1
- package/dist/module-types/src/store/branches.d.ts +2 -2
- package/dist/module-types/src/store/git-host.d.ts +8 -2
- package/dist/module-types/src/store/provided.d.ts +5 -4
- package/dist/module-types/src/store/queue.d.ts +3 -2
- package/dist/module-types/src/store/runs.d.ts +6 -3
- package/dist/module-types/src/store/tickets.d.ts +3 -2
- package/dist/module.css +1 -1
- package/dist/overview-layout.d.ts +38 -0
- package/dist/overview-layout.d.ts.map +1 -0
- package/dist/overview-layout.js +61 -0
- package/dist/overview-layout.js.map +1 -0
- package/dist/project-hooks.d.ts +11 -1
- package/dist/project-hooks.d.ts.map +1 -1
- package/dist/project-hooks.js +21 -11
- package/dist/project-hooks.js.map +1 -1
- package/dist/registry.d.ts +14 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +31 -2
- package/dist/registry.js.map +1 -1
- package/dist/store/agent-store.d.ts +15 -1
- package/dist/store/agent-store.d.ts.map +1 -1
- package/dist/store/agent-store.js.map +1 -1
- package/dist/store/branches.d.ts +2 -2
- package/dist/store/branches.d.ts.map +1 -1
- package/dist/store/branches.js +8 -2
- package/dist/store/branches.js.map +1 -1
- package/dist/store/git-host.d.ts +8 -2
- package/dist/store/git-host.d.ts.map +1 -1
- package/dist/store/git-host.js +21 -2
- package/dist/store/git-host.js.map +1 -1
- package/dist/store/provided.d.ts +5 -4
- package/dist/store/provided.d.ts.map +1 -1
- package/dist/store/provided.js +10 -9
- package/dist/store/provided.js.map +1 -1
- package/dist/store/queue.d.ts +3 -2
- package/dist/store/queue.d.ts.map +1 -1
- package/dist/store/queue.js +9 -2
- package/dist/store/queue.js.map +1 -1
- package/dist/store/runs.d.ts +6 -3
- package/dist/store/runs.d.ts.map +1 -1
- package/dist/store/runs.js +10 -3
- package/dist/store/runs.js.map +1 -1
- package/dist/store/tickets.d.ts +3 -2
- package/dist/store/tickets.d.ts.map +1 -1
- package/dist/store/tickets.js +9 -2
- package/dist/store/tickets.js.map +1 -1
- package/package.json +23 -23
- package/dist/dashboard-bundle/assets/main-B_YIbzfX.js +0 -148
- package/dist/dashboard-bundle/assets/main-COZtHuZ-.css +0 -2
- package/dist/dashboard-bundle/assets/module-B_KMN8r0.js +0 -14
- package/dist/dashboard-bundle/host/module.js +0 -1
- package/dist/dashboard-bundle/host/react-dom-client.js +0 -1
- package/dist/dashboard-bundle/host/react-dom.js +0 -1
- package/dist/dashboard-bundle/host/react-jsx-runtime.js +0 -1
- package/dist/dashboard-bundle/host/react.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logins-sync.js","sourceRoot":"","sources":["../../src/dashboard/logins-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type AgentMeta } from '../store/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The runs of another computer, as this one lists them: a laptop's on its server, a server's on
|
|
4
|
+
* the laptop. Each computer answers for its own runs only, as they stand right now, over the relay
|
|
5
|
+
* of the saved machine it is ({@link RunChanges}); this computer takes what it says over the
|
|
6
|
+
* records of those runs it holds, which come through a project's shared records and stop at
|
|
7
|
+
* whatever was shared last ({@link withMachineRuns}). So how a computer's runs stand never
|
|
8
|
+
* depends on its records being shared: a computer that does not answer has its runs known by what
|
|
9
|
+
* it said last, or by their records, and none of them going: their status is `unknown`.
|
|
10
|
+
*/
|
|
11
|
+
/** What a computer answers for its own runs of a project. */
|
|
12
|
+
export interface OwnRuns {
|
|
13
|
+
/**
|
|
14
|
+
* What to ask with next time, as `since`: the answer then holds only the runs that changed after
|
|
15
|
+
* this one. The same as `since` when nothing changed.
|
|
16
|
+
*/
|
|
17
|
+
at: string;
|
|
18
|
+
/** Its runs that changed since the `since` it was asked with; every one when there was none, or one it does not know. */
|
|
19
|
+
runs: AgentMeta[];
|
|
20
|
+
/** Every one of its runs of the project, by id: a run the asker holds that is not here is gone. */
|
|
21
|
+
ids: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* What a list shows of a run, as one string to compare: what it is, how it stands, and its name.
|
|
25
|
+
* A run's card is written at every step it takes, with a later time and a higher cost, and none
|
|
26
|
+
* of that is a change a person waits on.
|
|
27
|
+
*/
|
|
28
|
+
export declare function shownOf(run: AgentMeta): string;
|
|
29
|
+
/**
|
|
30
|
+
* A computer's own runs, counted as they change, per project: each answer says where it leaves
|
|
31
|
+
* the asker, and the next holds what changed after that. A count from before this OpenAgent
|
|
32
|
+
* started, or from no answer of its, is answered with every run.
|
|
33
|
+
*/
|
|
34
|
+
export declare class RunChanges {
|
|
35
|
+
private readonly started;
|
|
36
|
+
private readonly projects;
|
|
37
|
+
answer(project: string, runs: readonly AgentMeta[], since?: unknown): OwnRuns;
|
|
38
|
+
/** Whether what a list shows of the runs changed after `since`, as of the last answer: a count not of this OpenAgent's says so. */
|
|
39
|
+
shownSince(project: string, since: unknown): boolean;
|
|
40
|
+
private known;
|
|
41
|
+
private countOf;
|
|
42
|
+
}
|
|
43
|
+
/** A saved machine's runs of one project, as this computer last heard them. */
|
|
44
|
+
export interface MachineRuns {
|
|
45
|
+
/** The computer's own name, as the records of its runs carry it. */
|
|
46
|
+
host: string;
|
|
47
|
+
/** Its runs as it said them last, since this OpenAgent started. */
|
|
48
|
+
runs: readonly AgentMeta[];
|
|
49
|
+
/** It answered the last time it was asked. */
|
|
50
|
+
answered: boolean;
|
|
51
|
+
/** When it last answered, ISO, when this computer knows. */
|
|
52
|
+
seenAt?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A project's runs with what its saved machines said of theirs: a machine's word on a run of its
|
|
56
|
+
* own wins over the run's record, and a run of its own with no record here yet is listed too. A
|
|
57
|
+
* machine's run that is going is going only by its machine's word just now: one whose machine did
|
|
58
|
+
* not answer, or that its machine did not say, reads `unknown`, with when its machine was last
|
|
59
|
+
* seen. The runs of every other computer pass through as recorded.
|
|
60
|
+
*/
|
|
61
|
+
export declare function withMachineRuns(records: AgentMeta[], machines: readonly MachineRuns[]): AgentMeta[];
|
|
62
|
+
/** A saved machine to ask for its runs: where it answers and its computer's own name. */
|
|
63
|
+
export interface AskedMachine {
|
|
64
|
+
url: string;
|
|
65
|
+
host: string;
|
|
66
|
+
/** When it last answered, ISO, as kept with the machine. */
|
|
67
|
+
seenAt?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* How long a computer holds a call for its runs when nothing a list shows changed since it last
|
|
71
|
+
* answered: it answers at the first such change, else with what else changed once this is up, and
|
|
72
|
+
* is asked again.
|
|
73
|
+
*/
|
|
74
|
+
export declare const RUNS_WAIT_MS = 25000;
|
|
75
|
+
/**
|
|
76
|
+
* What each saved machine says of its runs of a project, followed while a page wants them: one call
|
|
77
|
+
* to each machine is kept open, which the machine answers when its runs change
|
|
78
|
+
* ({@link RUNS_WAIT_MS}), and asked again at once from where the answer left off ({@link OwnRuns}).
|
|
79
|
+
* So what is kept is what the machine says now, and whoever listens to the project's address is
|
|
80
|
+
* told the moment it changes. A page is answered at once with what is known, and waits only for a
|
|
81
|
+
* machine's first answer, and not long.
|
|
82
|
+
*/
|
|
83
|
+
export declare class MachineRunsKept {
|
|
84
|
+
/** Ask the machine for its runs of the project at `address`, since what it answered last: it answers when they change. */
|
|
85
|
+
private readonly ask;
|
|
86
|
+
/** Told each time a machine answered. */
|
|
87
|
+
private readonly seen;
|
|
88
|
+
private readonly now;
|
|
89
|
+
/** Wait before the next ask. */
|
|
90
|
+
private readonly pause;
|
|
91
|
+
private readonly kept;
|
|
92
|
+
private readonly listeners;
|
|
93
|
+
constructor(
|
|
94
|
+
/** Ask the machine for its runs of the project at `address`, since what it answered last: it answers when they change. */
|
|
95
|
+
ask: (machine: AskedMachine, address: string, since: string | undefined) => Promise<unknown>,
|
|
96
|
+
/** Told each time a machine answered. */
|
|
97
|
+
seen?: (machine: AskedMachine, at: string) => void, now?: () => number,
|
|
98
|
+
/** Wait before the next ask. */
|
|
99
|
+
pause?: (ms: number) => Promise<void>);
|
|
100
|
+
/** The machines' runs of the project at `address`, followed from now on for a while: a page reads them every few seconds. */
|
|
101
|
+
of(machines: readonly AskedMachine[], address: string): Promise<MachineRuns[]>;
|
|
102
|
+
/** Follow nothing more: each machine's call is let go once it is answered. */
|
|
103
|
+
stop(): void;
|
|
104
|
+
/** Tell `changed` each time a machine's runs of the project at `address` change, until the answer is called. */
|
|
105
|
+
listen(address: string, changed: () => void): () => void;
|
|
106
|
+
private follow;
|
|
107
|
+
/** Ask once, and keep what the machine said: whether a change a list shows was told, nothing such changed, or it did not answer. */
|
|
108
|
+
private askAgain;
|
|
109
|
+
private tell;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=machine-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-runs.d.ts","sourceRoot":"","sources":["../../src/dashboard/machine-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAoB,MAAM,mBAAmB,CAAA;AAE7E;;;;;;;;GAQG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAA;IACV,yHAAyH;IACzH,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,mGAAmG;IACnG,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAE9C;AAUD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAoB5E;IAED,mIAAmI;IACnI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAOnD;IAED,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,OAAO;CAKhB;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;IAC1B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,CAoBnG;AAED,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAS,CAAA;AAwBlC;;;;;;;GAOG;AACH,qBAAa,eAAe;IAKxB,0HAA0H;IAC1H,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAE/D;IACE,0HAA0H;IACzG,GAAG,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC;IAC7G,yCAAyC;IACxB,IAAI,GAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,KAAK,IAAe,EAC5D,GAAG,GAAE,MAAM,MAAiB;IAC7C,gCAAgC;IACf,KAAK,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAA2D,EAC7G;IAEJ,6HAA6H;IACvH,EAAE,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAiBnF;IAED,8EAA8E;IAC9E,IAAI,IAAI,IAAI,CAEX;IAED,gHAAgH;IAChH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CASvD;YAEa,MAAM;IAYpB,oIAAoI;YACtH,QAAQ;IAoCtB,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { isRunId } from '../store/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* What a list shows of a run, as one string to compare: what it is, how it stands, and its name.
|
|
4
|
+
* A run's card is written at every step it takes, with a later time and a higher cost, and none
|
|
5
|
+
* of that is a change a person waits on.
|
|
6
|
+
*/
|
|
7
|
+
export function shownOf(run) {
|
|
8
|
+
return JSON.stringify([run.id, run.status, run.title, run.branch, run.pr?.number, run.endedAt]);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A computer's own runs, counted as they change, per project: each answer says where it leaves
|
|
12
|
+
* the asker, and the next holds what changed after that. A count from before this OpenAgent
|
|
13
|
+
* started, or from no answer of its, is answered with every run.
|
|
14
|
+
*/
|
|
15
|
+
export class RunChanges {
|
|
16
|
+
started = Math.random().toString(36).slice(2, 10);
|
|
17
|
+
projects = new Map();
|
|
18
|
+
answer(project, runs, since) {
|
|
19
|
+
const known = this.known(project);
|
|
20
|
+
const ids = new Set();
|
|
21
|
+
for (const run of runs) {
|
|
22
|
+
ids.add(run.id);
|
|
23
|
+
const said = JSON.stringify(run);
|
|
24
|
+
const before = known.seen.get(run.id);
|
|
25
|
+
if (before?.said === said)
|
|
26
|
+
continue;
|
|
27
|
+
const at = ++known.count;
|
|
28
|
+
const shown = shownOf(run);
|
|
29
|
+
known.seen.set(run.id, { said, at, shown, shownAt: before?.shown === shown ? before.shownAt : at });
|
|
30
|
+
}
|
|
31
|
+
// A run gone is a change too: an answer after it says so by its ids.
|
|
32
|
+
for (const id of known.seen.keys()) {
|
|
33
|
+
if (ids.has(id))
|
|
34
|
+
continue;
|
|
35
|
+
known.seen.delete(id);
|
|
36
|
+
known.goneAt = ++known.count;
|
|
37
|
+
}
|
|
38
|
+
const after = this.countOf(since, known.count);
|
|
39
|
+
return { at: `${this.started}.${known.count}`, runs: after === undefined ? [...runs] : runs.filter(run => known.seen.get(run.id).at > after), ids: [...ids] };
|
|
40
|
+
}
|
|
41
|
+
/** Whether what a list shows of the runs changed after `since`, as of the last answer: a count not of this OpenAgent's says so. */
|
|
42
|
+
shownSince(project, since) {
|
|
43
|
+
const known = this.known(project);
|
|
44
|
+
const after = this.countOf(since, known.count);
|
|
45
|
+
if (after === undefined)
|
|
46
|
+
return true;
|
|
47
|
+
if (known.goneAt > after)
|
|
48
|
+
return true;
|
|
49
|
+
for (const run of known.seen.values())
|
|
50
|
+
if (run.shownAt > after)
|
|
51
|
+
return true;
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
known(project) {
|
|
55
|
+
let known = this.projects.get(project);
|
|
56
|
+
if (!known)
|
|
57
|
+
this.projects.set(project, (known = { count: 0, seen: new Map(), goneAt: 0 }));
|
|
58
|
+
return known;
|
|
59
|
+
}
|
|
60
|
+
countOf(since, count) {
|
|
61
|
+
if (typeof since !== 'string')
|
|
62
|
+
return undefined;
|
|
63
|
+
const [started, at] = since.split('.');
|
|
64
|
+
return started === this.started && /^\d+$/.test(at ?? '') && Number(at) <= count ? Number(at) : undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const GOING = new Set(['running', 'waiting']);
|
|
68
|
+
/**
|
|
69
|
+
* A project's runs with what its saved machines said of theirs: a machine's word on a run of its
|
|
70
|
+
* own wins over the run's record, and a run of its own with no record here yet is listed too. A
|
|
71
|
+
* machine's run that is going is going only by its machine's word just now: one whose machine did
|
|
72
|
+
* not answer, or that its machine did not say, reads `unknown`, with when its machine was last
|
|
73
|
+
* seen. The runs of every other computer pass through as recorded.
|
|
74
|
+
*/
|
|
75
|
+
export function withMachineRuns(records, machines) {
|
|
76
|
+
if (machines.length === 0)
|
|
77
|
+
return records;
|
|
78
|
+
const byHost = new Map(machines.map(machine => [machine.host, machine]));
|
|
79
|
+
const said = new Map();
|
|
80
|
+
for (const machine of machines)
|
|
81
|
+
for (const run of machine.runs)
|
|
82
|
+
if (run.host === machine.host)
|
|
83
|
+
said.set(run.id, run);
|
|
84
|
+
const theirs = (run) => {
|
|
85
|
+
const own = said.get(run.id);
|
|
86
|
+
return own && own.host === run.host ? own : undefined;
|
|
87
|
+
};
|
|
88
|
+
const recorded = new Set(records.map(record => record.id));
|
|
89
|
+
const rows = records.map(record => theirs(record) ?? record);
|
|
90
|
+
const added = [...said.values()].filter(run => !recorded.has(run.id));
|
|
91
|
+
// Newest first, as the records are: a run only its machine knows goes where it started.
|
|
92
|
+
const all = added.length > 0 ? [...added, ...rows].sort((a, b) => b.startedAt.localeCompare(a.startedAt)) : rows;
|
|
93
|
+
return all.map(run => {
|
|
94
|
+
const machine = run.host === undefined ? undefined : byHost.get(run.host);
|
|
95
|
+
if (!machine || !GOING.has(run.status))
|
|
96
|
+
return run;
|
|
97
|
+
if (machine.answered && said.get(run.id) === run)
|
|
98
|
+
return run;
|
|
99
|
+
return { ...run, status: 'unknown', ...(machine.seenAt !== undefined ? { seenAt: machine.seenAt } : {}) };
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* How long a computer holds a call for its runs when nothing a list shows changed since it last
|
|
104
|
+
* answered: it answers at the first such change, else with what else changed once this is up, and
|
|
105
|
+
* is asked again.
|
|
106
|
+
*/
|
|
107
|
+
export const RUNS_WAIT_MS = 25_000;
|
|
108
|
+
/** How long a machine's runs of a project are followed after a page last asked for them. */
|
|
109
|
+
const WANTED_MS = 60_000;
|
|
110
|
+
/** How long a machine that did not answer is left before it is asked again. */
|
|
111
|
+
const UNANSWERED_MS = 10_000;
|
|
112
|
+
/** The least time between two asks of one machine for one project. */
|
|
113
|
+
const ASK_GAP_MS = 1_000;
|
|
114
|
+
/** How long a machine that answered at once with no change a list shows is left: it does not hold the call, and is asked as a page reads. */
|
|
115
|
+
const HELD_NOT_MS = 5_000;
|
|
116
|
+
/** How long a list waits for a machine's first answer: one that is off does not hold a page. */
|
|
117
|
+
const FIRST_WAIT_MS = 1_500;
|
|
118
|
+
/** How many machine-and-project answers are kept before the memory starts over. */
|
|
119
|
+
const MAX_KEPT = 200;
|
|
120
|
+
const RECORD_STATUSES = ['running', 'done', 'stopped', 'failed', 'waiting'];
|
|
121
|
+
/** One of a machine's runs as it said it, when it is one of its own and reads as a run: else nothing. */
|
|
122
|
+
function runOf(value, host) {
|
|
123
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
124
|
+
return undefined;
|
|
125
|
+
const run = value;
|
|
126
|
+
if (typeof run.id !== 'string' || !isRunId(run.id) || typeof run.startedAt !== 'string' || typeof run.updatedAt !== 'string' || !RECORD_STATUSES.includes(run.status))
|
|
127
|
+
return undefined;
|
|
128
|
+
return run.host === host ? run : undefined;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* What each saved machine says of its runs of a project, followed while a page wants them: one call
|
|
132
|
+
* to each machine is kept open, which the machine answers when its runs change
|
|
133
|
+
* ({@link RUNS_WAIT_MS}), and asked again at once from where the answer left off ({@link OwnRuns}).
|
|
134
|
+
* So what is kept is what the machine says now, and whoever listens to the project's address is
|
|
135
|
+
* told the moment it changes. A page is answered at once with what is known, and waits only for a
|
|
136
|
+
* machine's first answer, and not long.
|
|
137
|
+
*/
|
|
138
|
+
export class MachineRunsKept {
|
|
139
|
+
ask;
|
|
140
|
+
seen;
|
|
141
|
+
now;
|
|
142
|
+
pause;
|
|
143
|
+
kept = new Map();
|
|
144
|
+
listeners = new Map();
|
|
145
|
+
constructor(
|
|
146
|
+
/** Ask the machine for its runs of the project at `address`, since what it answered last: it answers when they change. */
|
|
147
|
+
ask,
|
|
148
|
+
/** Told each time a machine answered. */
|
|
149
|
+
seen = () => { }, now = Date.now,
|
|
150
|
+
/** Wait before the next ask. */
|
|
151
|
+
pause = ms => new Promise(done => setTimeout(done, ms).unref())) {
|
|
152
|
+
this.ask = ask;
|
|
153
|
+
this.seen = seen;
|
|
154
|
+
this.now = now;
|
|
155
|
+
this.pause = pause;
|
|
156
|
+
}
|
|
157
|
+
/** The machines' runs of the project at `address`, followed from now on for a while: a page reads them every few seconds. */
|
|
158
|
+
async of(machines, address) {
|
|
159
|
+
return Promise.all(machines.map(async (machine) => {
|
|
160
|
+
const key = `${machine.url} ${address}`;
|
|
161
|
+
let found = this.kept.get(key);
|
|
162
|
+
if (!found) {
|
|
163
|
+
if (this.kept.size >= MAX_KEPT)
|
|
164
|
+
this.kept.clear();
|
|
165
|
+
this.kept.set(key, (found = { runs: new Map(), answered: false, asked: false, wanted: 0 }));
|
|
166
|
+
}
|
|
167
|
+
const entry = found;
|
|
168
|
+
entry.wanted = this.now() + WANTED_MS;
|
|
169
|
+
entry.following ??= this.follow(machine, address, entry).finally(() => (entry.following = undefined));
|
|
170
|
+
if (!entry.asked)
|
|
171
|
+
await Promise.race([(entry.first ??= new Promise(done => (entry.answer = done))), new Promise(done => setTimeout(done, FIRST_WAIT_MS).unref())]);
|
|
172
|
+
const seenAt = entry.seenAt ?? machine.seenAt;
|
|
173
|
+
return { host: machine.host, runs: [...entry.runs.values()], answered: entry.answered, ...(seenAt !== undefined ? { seenAt } : {}) };
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
/** Follow nothing more: each machine's call is let go once it is answered. */
|
|
177
|
+
stop() {
|
|
178
|
+
this.kept.clear();
|
|
179
|
+
}
|
|
180
|
+
/** Tell `changed` each time a machine's runs of the project at `address` change, until the answer is called. */
|
|
181
|
+
listen(address, changed) {
|
|
182
|
+
let listening = this.listeners.get(address);
|
|
183
|
+
if (!listening)
|
|
184
|
+
this.listeners.set(address, (listening = new Set()));
|
|
185
|
+
const listener = () => changed();
|
|
186
|
+
listening.add(listener);
|
|
187
|
+
return () => {
|
|
188
|
+
listening.delete(listener);
|
|
189
|
+
if (listening.size === 0 && this.listeners.get(address) === listening)
|
|
190
|
+
this.listeners.delete(address);
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async follow(machine, address, entry) {
|
|
194
|
+
while (entry.wanted > this.now() && this.kept.get(`${machine.url} ${address}`) === entry) {
|
|
195
|
+
const asked = this.now();
|
|
196
|
+
const said = await this.askAgain(machine, address, entry);
|
|
197
|
+
const took = this.now() - asked;
|
|
198
|
+
const gap = said === 'nothing' ? UNANSWERED_MS : said === 'kept' && took < ASK_GAP_MS ? HELD_NOT_MS : ASK_GAP_MS - took;
|
|
199
|
+
entry.asked = true;
|
|
200
|
+
entry.answer?.();
|
|
201
|
+
if (gap > 0)
|
|
202
|
+
await this.pause(gap);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/** Ask once, and keep what the machine said: whether a change a list shows was told, nothing such changed, or it did not answer. */
|
|
206
|
+
async askAgain(machine, address, entry) {
|
|
207
|
+
try {
|
|
208
|
+
const said = (await this.ask(machine, address, entry.at));
|
|
209
|
+
if (!said || typeof said.at !== 'string' || !Array.isArray(said.runs) || !Array.isArray(said.ids))
|
|
210
|
+
throw new Error('the machine answered something else than its runs');
|
|
211
|
+
// A change a list shows is told: a run's step, with its later time and higher cost, is only kept.
|
|
212
|
+
let changed = !entry.answered;
|
|
213
|
+
for (const value of said.runs) {
|
|
214
|
+
const run = runOf(value, machine.host);
|
|
215
|
+
if (!run)
|
|
216
|
+
continue;
|
|
217
|
+
const before = entry.runs.get(run.id);
|
|
218
|
+
if (!before || shownOf(before) !== shownOf(run))
|
|
219
|
+
changed = true;
|
|
220
|
+
entry.runs.set(run.id, run);
|
|
221
|
+
}
|
|
222
|
+
const ids = new Set(said.ids);
|
|
223
|
+
for (const id of entry.runs.keys()) {
|
|
224
|
+
if (ids.has(id))
|
|
225
|
+
continue;
|
|
226
|
+
entry.runs.delete(id);
|
|
227
|
+
changed = true;
|
|
228
|
+
}
|
|
229
|
+
entry.at = said.at;
|
|
230
|
+
entry.answered = true;
|
|
231
|
+
entry.seenAt = new Date(this.now()).toISOString();
|
|
232
|
+
this.seen(machine, entry.seenAt);
|
|
233
|
+
if (!changed)
|
|
234
|
+
return 'kept';
|
|
235
|
+
this.tell(address);
|
|
236
|
+
return 'told';
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// What it said last stands, and it is asked again from where that left off.
|
|
240
|
+
if (entry.answered) {
|
|
241
|
+
entry.answered = false;
|
|
242
|
+
this.tell(address);
|
|
243
|
+
}
|
|
244
|
+
return 'nothing';
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
tell(address) {
|
|
248
|
+
for (const listener of [...(this.listeners.get(address) ?? [])])
|
|
249
|
+
listener();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=machine-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-runs.js","sourceRoot":"","sources":["../../src/dashboard/machine-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAoC,MAAM,mBAAmB,CAAA;AAyB7E;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAc;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;AACjG,CAAC;AAUD;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjD,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IAEtD,MAAM,CAAC,OAAe,EAAE,IAA0B,EAAE,KAAe;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrC,IAAI,MAAM,EAAE,IAAI,KAAK,IAAI;gBAAE,SAAQ;YACnC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAA;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACrG,CAAC;QACD,qEAAqE;QACrE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACrB,KAAK,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,KAAK,CAAA;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAC9C,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAA;IAChK,CAAC;IAED,mIAAmI;IACnI,UAAU,CAAC,OAAe,EAAE,KAAc;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACpC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;YAAE,OAAO,IAAI,CAAA;QACrC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA;QAC3E,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,OAAe;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1F,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,OAAO,CAAC,KAAc,EAAE,KAAa;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/C,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3G,CAAC;CACF;AAcD,MAAM,KAAK,GAA6B,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAoB,EAAE,QAAgC;IACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAA;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpH,MAAM,MAAM,GAAG,CAAC,GAAc,EAAyB,EAAE;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC5B,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAA;IAC5D,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACrE,wFAAwF;IACxF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChH,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAA;QAClD,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG;YAAE,OAAO,GAAG,CAAA;QAC5D,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAkB,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACpH,CAAC,CAAC,CAAA;AACJ,CAAC;AAUD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAA;AAClC,4FAA4F;AAC5F,MAAM,SAAS,GAAG,MAAM,CAAA;AACxB,+EAA+E;AAC/E,MAAM,aAAa,GAAG,MAAM,CAAA;AAC5B,sEAAsE;AACtE,MAAM,UAAU,GAAG,KAAK,CAAA;AACxB,6IAA6I;AAC7I,MAAM,WAAW,GAAG,KAAK,CAAA;AACzB,gGAAgG;AAChG,MAAM,aAAa,GAAG,KAAK,CAAA;AAC3B,mFAAmF;AACnF,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,MAAM,eAAe,GAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AAEnG,yGAAyG;AACzG,SAAS,KAAK,CAAC,KAAc,EAAE,IAAY;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjF,MAAM,GAAG,GAAG,KAA2B,CAAA;IACvC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAqB,CAAC;QAAE,OAAO,SAAS,CAAA;IACtM,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAE,GAAiB,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IAMP,GAAG;IAEH,IAAI;IACJ,GAAG;IAEH,KAAK;IAVP,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAA;IAC9B,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAA;IAE/D;IACE,0HAA0H;IACzG,GAA4F;IAC7G,yCAAyC;IACxB,IAAI,GAAgD,GAAG,EAAE,GAAE,CAAC,EAC5D,GAAG,GAAiB,IAAI,CAAC,GAAG;IAC7C,gCAAgC;IACf,KAAK,GAAkC,EAAE,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;mBAL9F,GAAG;oBAEH,IAAI;mBACJ,GAAG;qBAEH,KAAK;IACrB,CAAC;IAEJ,6HAA6H;IAC7H,KAAK,CAAC,EAAE,CAAC,QAAiC,EAAE,OAAe;QACzD,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE,CAAA;YACvC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;gBACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC7F,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAA;YACnB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YACrC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAA;YACrG,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,OAAO,CAAO,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;YACxK,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAA;YAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QACtI,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IACnB,CAAC;IAED,gHAAgH;IAChH,MAAM,CAAC,OAAe,EAAE,OAAmB;QACzC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;QACpE,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,OAAO,EAAE,CAAA;QACtC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC1B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACvG,CAAC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,OAAqB,EAAE,OAAe,EAAE,KAAW;QACtE,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YACzF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;YAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAA;YACvH,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;YAClB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAA;YAChB,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,oIAAoI;IAC5H,KAAK,CAAC,QAAQ,CAAC,OAAqB,EAAE,OAAe,EAAE,KAAW;QACxE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAiC,CAAA;YACzF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;YACvK,kGAAkG;YAClG,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAA;YAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;gBACtC,IAAI,CAAC,GAAG;oBAAE,SAAQ;gBAClB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACrC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,IAAI,CAAA;gBAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAC7B,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACrB,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;YAClB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;YACrB,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YAChC,IAAI,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAA;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAClB,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,4EAA4E;YAC5E,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAA;gBACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACpB,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,OAAe;QAC1B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,QAAQ,EAAE,CAAA;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AgentMeta, AgentStatus } from '../store/agent-store.js';
|
|
2
|
+
/** One run of a project, as a module sees it: what a page or a card shows of a run, and no more. */
|
|
3
|
+
export interface ModuleAgent {
|
|
4
|
+
/** The run's id, the one `ModuleHost.openAgent` takes. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** The run's branch, the name the agent gave its work, when its record carries one. */
|
|
7
|
+
name?: string;
|
|
8
|
+
/** What the run was asked, as typed or as queued; absent when its record carries none. */
|
|
9
|
+
ask?: string;
|
|
10
|
+
/** How it stands: `unknown` while the computer it runs on does not answer, whatever its record last said. */
|
|
11
|
+
status: AgentStatus;
|
|
12
|
+
/** ISO 8601. */
|
|
13
|
+
startedAt: string;
|
|
14
|
+
/** ISO 8601, once it ended. */
|
|
15
|
+
endedAt?: string;
|
|
16
|
+
/** Its short name, as a list of runs shows it. */
|
|
17
|
+
title?: string;
|
|
18
|
+
/** Whose run it is, by the email its record is kept under. */
|
|
19
|
+
person?: string;
|
|
20
|
+
/** What it cost so far, in US dollars. */
|
|
21
|
+
cost?: number;
|
|
22
|
+
/** The coding agent that runs it (`claude-code`, `codex`, …) and its model. */
|
|
23
|
+
driver?: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
/** The saved machine it runs on, by the name it was given; absent for a run of this computer's. */
|
|
26
|
+
machine?: string;
|
|
27
|
+
/** While its status is `unknown`: when its computer was last seen, ISO, if it was. */
|
|
28
|
+
seenAt?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Which of a project's runs a module asks for, when not all of them: a project keeps every run it
|
|
32
|
+
* ever made, hundreds, and a card shows a few. Both given, a run must be both.
|
|
33
|
+
*/
|
|
34
|
+
export interface ModuleAgentsWanted {
|
|
35
|
+
/** These runs only, by id: the ones holding a claim. */
|
|
36
|
+
ids?: string[];
|
|
37
|
+
/** The runs started at this time or later, ISO 8601: the last 30 days. */
|
|
38
|
+
since?: string;
|
|
39
|
+
}
|
|
40
|
+
/** A run as a module sees it. */
|
|
41
|
+
export declare function moduleAgentOf(agent: AgentMeta): ModuleAgent;
|
|
42
|
+
/** The runs a module asked for, as it sees them. */
|
|
43
|
+
export declare function moduleAgents(agents: readonly AgentMeta[], wanted?: ModuleAgentsWanted): ModuleAgent[];
|
|
44
|
+
//# sourceMappingURL=module-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-agents.d.ts","sourceRoot":"","sources":["../../src/dashboard/module-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErE,oGAAoG;AACpG,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAA;IACV,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0FAA0F;IAC1F,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6GAA6G;IAC7G,MAAM,EAAE,WAAW,CAAA;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAgB3D;AAED,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,GAAE,kBAAuB,GAAG,WAAW,EAAE,CAIzG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** A run as a module sees it. */
|
|
2
|
+
export function moduleAgentOf(agent) {
|
|
3
|
+
return {
|
|
4
|
+
id: agent.id,
|
|
5
|
+
status: agent.status,
|
|
6
|
+
startedAt: agent.startedAt,
|
|
7
|
+
...(agent.branch ? { name: agent.branch } : {}),
|
|
8
|
+
...(agent.intent ? { ask: agent.intent } : {}),
|
|
9
|
+
...(agent.endedAt ? { endedAt: agent.endedAt } : {}),
|
|
10
|
+
...(agent.title ? { title: agent.title } : {}),
|
|
11
|
+
...(agent.person ? { person: agent.person } : {}),
|
|
12
|
+
...(agent.cost !== undefined ? { cost: agent.cost } : {}),
|
|
13
|
+
...(agent.driver ? { driver: agent.driver } : {}),
|
|
14
|
+
...(agent.model ? { model: agent.model } : {}),
|
|
15
|
+
...(agent.remoteLabel ? { machine: agent.remoteLabel } : {}),
|
|
16
|
+
...(agent.seenAt ? { seenAt: agent.seenAt } : {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** The runs a module asked for, as it sees them. */
|
|
20
|
+
export function moduleAgents(agents, wanted = {}) {
|
|
21
|
+
const ids = wanted.ids ? new Set(wanted.ids) : undefined;
|
|
22
|
+
const since = wanted.since !== undefined ? Date.parse(wanted.since) : undefined;
|
|
23
|
+
return agents.filter(agent => (!ids || ids.has(agent.id)) && (since === undefined || Date.parse(agent.startedAt) >= since)).map(moduleAgentOf);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=module-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-agents.js","sourceRoot":"","sources":["../../src/dashboard/module-agents.ts"],"names":[],"mappings":"AA0CA,iCAAiC;AACjC,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAA;AACH,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,MAA4B,EAAE,MAAM,GAAuB,EAAE;IACxF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAChJ,CAAC"}
|
|
@@ -9,11 +9,20 @@ export declare const COMPUTER_MODULES_PREFIX = "/_computer-modules";
|
|
|
9
9
|
export declare function moduleUrl(projectId: string, module: Pick<ProjectModule, 'package' | 'entry'>): string;
|
|
10
10
|
/** The URL the browser part of one of the computer's modules is served at. */
|
|
11
11
|
export declare function computerModuleUrl(module: Pick<ProjectModule, 'package' | 'entry'>): string;
|
|
12
|
+
/**
|
|
13
|
+
* A module's URL with its entry file's version (`?v=`): a browser keeps that file for good, and
|
|
14
|
+
* the next version of the module is another URL. Without the file there to read, the URL as it is.
|
|
15
|
+
*/
|
|
16
|
+
export declare function versionedModuleUrl(url: string, module: Pick<ProjectModule, 'dir' | 'entry'>): Promise<string>;
|
|
12
17
|
/**
|
|
13
18
|
* Serve one module file (#1774): the project must be registered, the package must be a module of
|
|
14
19
|
* that project, and the file must sit inside the module's browser part's own directory. Anything else is a
|
|
15
20
|
* 404, never a fallback: a module URL is asked for by the dashboard's loader, not typed by a person.
|
|
16
|
-
*
|
|
21
|
+
* Asked for with the file's own version ({@link versionedModuleUrl}), it is kept for good: a page
|
|
22
|
+
* opened again does not ask for it at all. Otherwise it is served as `no-cache`, since a module is
|
|
23
|
+
* rebuilt in place under the same name (its stylesheet, a file another of its files imports, a URL
|
|
24
|
+
* naming a version gone since), with a tag of the file's own: a page opened again asks with it and
|
|
25
|
+
* is answered "not changed", with no body. Sent gzipped, a module's code being a page's largest file.
|
|
17
26
|
*/
|
|
18
27
|
export declare function serveModuleFile(req: IncomingMessage, res: ServerResponse, pathname: string, projects?: ProjectsProvider): Promise<void>;
|
|
19
28
|
/** Serve one file of a module that is the computer's: as {@link serveModuleFile}, with no project to be registered. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"module-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAIhE,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAqD,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE7G,sGAAsG;AACtG,eAAO,MAAM,cAAc,cAAc,CAAA;AAEzC,2HAA2H;AAC3H,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAI3D,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,CAErG;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,CAE1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnH;AAUD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,gBAA4C,GACrD,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,uHAAuH;AACvH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExH"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { fileTag, fileVersion, sendBody } from './compress.js';
|
|
2
4
|
import { contentTypeFor } from './content-type.js';
|
|
3
5
|
import { defaultProjectsProvider } from './projects.js';
|
|
4
6
|
import { findComputerModule, findProjectModule, moduleFile } from '../project-modules.js';
|
|
@@ -15,6 +17,14 @@ export function moduleUrl(projectId, module) {
|
|
|
15
17
|
export function computerModuleUrl(module) {
|
|
16
18
|
return `${COMPUTER_MODULES_PREFIX}/${encodeURIComponent(module.package)}/${encoded(module.entry)}`;
|
|
17
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* A module's URL with its entry file's version (`?v=`): a browser keeps that file for good, and
|
|
22
|
+
* the next version of the module is another URL. Without the file there to read, the URL as it is.
|
|
23
|
+
*/
|
|
24
|
+
export async function versionedModuleUrl(url, module) {
|
|
25
|
+
const facts = await stat(join(module.dir, module.entry)).catch(() => undefined);
|
|
26
|
+
return facts ? `${url}?v=${fileVersion(facts)}` : url;
|
|
27
|
+
}
|
|
18
28
|
function decode(segment) {
|
|
19
29
|
try {
|
|
20
30
|
return decodeURIComponent(segment);
|
|
@@ -27,7 +37,11 @@ function decode(segment) {
|
|
|
27
37
|
* Serve one module file (#1774): the project must be registered, the package must be a module of
|
|
28
38
|
* that project, and the file must sit inside the module's browser part's own directory. Anything else is a
|
|
29
39
|
* 404, never a fallback: a module URL is asked for by the dashboard's loader, not typed by a person.
|
|
30
|
-
*
|
|
40
|
+
* Asked for with the file's own version ({@link versionedModuleUrl}), it is kept for good: a page
|
|
41
|
+
* opened again does not ask for it at all. Otherwise it is served as `no-cache`, since a module is
|
|
42
|
+
* rebuilt in place under the same name (its stylesheet, a file another of its files imports, a URL
|
|
43
|
+
* naming a version gone since), with a tag of the file's own: a page opened again asks with it and
|
|
44
|
+
* is answered "not changed", with no body. Sent gzipped, a module's code being a page's largest file.
|
|
31
45
|
*/
|
|
32
46
|
export async function serveModuleFile(req, res, pathname, projects = defaultProjectsProvider()) {
|
|
33
47
|
const [projectSegment, ...rest] = pathname.slice(MODULES_PREFIX.length + 1).split('/');
|
|
@@ -52,10 +66,15 @@ async function serveFileOf(req, res, [packageSegment, ...rest], find) {
|
|
|
52
66
|
return notFound();
|
|
53
67
|
const module = await find(pkg).catch(() => undefined);
|
|
54
68
|
const file = module ? await moduleFile(module, rel.join('/')) : undefined;
|
|
55
|
-
const
|
|
56
|
-
|
|
69
|
+
const facts = file ? await stat(file).catch(() => undefined) : undefined;
|
|
70
|
+
const body = file && facts ? await readFile(file).catch(() => undefined) : undefined;
|
|
71
|
+
if (!file || !facts || body === undefined)
|
|
57
72
|
return notFound();
|
|
58
|
-
|
|
59
|
-
|
|
73
|
+
const asked = new URL(req.url ?? '/', 'http://x').searchParams.get('v');
|
|
74
|
+
const cacheControl = asked === fileVersion(facts) ? 'public, max-age=31536000, immutable' : 'no-cache';
|
|
75
|
+
const headers = { 'content-type': contentTypeFor(file), 'cache-control': cacheControl, etag: fileTag(facts) };
|
|
76
|
+
if (req.method === 'HEAD')
|
|
77
|
+
return void res.writeHead(200, headers).end();
|
|
78
|
+
await sendBody(req, res, 200, headers, body, `${file} ${facts.mtimeMs} ${facts.size}`);
|
|
60
79
|
}
|
|
61
80
|
//# sourceMappingURL=module-serve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-serve.js","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"module-serve.js","sourceRoot":"","sources":["../../src/dashboard/module-serve.ts"],"names":[],"mappings":"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"}
|