@openagt/dashboard 0.39.1 → 0.41.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 (156) hide show
  1. package/dist/built-in.d.ts +5 -0
  2. package/dist/built-in.d.ts.map +1 -1
  3. package/dist/built-in.js +7 -0
  4. package/dist/built-in.js.map +1 -1
  5. package/dist/client.d.ts +1 -1
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +1 -1
  8. package/dist/client.js.map +1 -1
  9. package/dist/clone-project.d.ts +11 -0
  10. package/dist/clone-project.d.ts.map +1 -1
  11. package/dist/clone-project.js +38 -12
  12. package/dist/clone-project.js.map +1 -1
  13. package/dist/daemon-runtime.d.ts.map +1 -1
  14. package/dist/daemon-runtime.js +216 -63
  15. package/dist/daemon-runtime.js.map +1 -1
  16. package/dist/daemon.js +2 -2
  17. package/dist/daemon.js.map +1 -1
  18. package/dist/dashboard/activity.d.ts +2 -2
  19. package/dist/dashboard/activity.d.ts.map +1 -1
  20. package/dist/dashboard/activity.js +2 -2
  21. package/dist/dashboard/activity.js.map +1 -1
  22. package/dist/dashboard/elsewhere.d.ts +92 -0
  23. package/dist/dashboard/elsewhere.d.ts.map +1 -0
  24. package/dist/dashboard/elsewhere.js +155 -0
  25. package/dist/dashboard/elsewhere.js.map +1 -0
  26. package/dist/dashboard/interventions.d.ts +6 -0
  27. package/dist/dashboard/interventions.d.ts.map +1 -1
  28. package/dist/dashboard/interventions.js.map +1 -1
  29. package/dist/dashboard/machine-interventions.d.ts +52 -0
  30. package/dist/dashboard/machine-interventions.d.ts.map +1 -0
  31. package/dist/dashboard/machine-interventions.js +117 -0
  32. package/dist/dashboard/machine-interventions.js.map +1 -0
  33. package/dist/dashboard/module-serve.d.ts +6 -0
  34. package/dist/dashboard/module-serve.d.ts.map +1 -1
  35. package/dist/dashboard/module-serve.js +11 -1
  36. package/dist/dashboard/module-serve.js.map +1 -1
  37. package/dist/dashboard/overview.d.ts +20 -5
  38. package/dist/dashboard/overview.d.ts.map +1 -1
  39. package/dist/dashboard/overview.js +28 -8
  40. package/dist/dashboard/overview.js.map +1 -1
  41. package/dist/dashboard/projects.d.ts +11 -2
  42. package/dist/dashboard/projects.d.ts.map +1 -1
  43. package/dist/dashboard/projects.js +3 -2
  44. package/dist/dashboard/projects.js.map +1 -1
  45. package/dist/dashboard/relay-endpoints.d.ts +2 -0
  46. package/dist/dashboard/relay-endpoints.d.ts.map +1 -1
  47. package/dist/dashboard/relay-endpoints.js +4 -2
  48. package/dist/dashboard/relay-endpoints.js.map +1 -1
  49. package/dist/dashboard/remote-run.d.ts +1 -6
  50. package/dist/dashboard/remote-run.d.ts.map +1 -1
  51. package/dist/dashboard/remote-run.js +1 -6
  52. package/dist/dashboard/remote-run.js.map +1 -1
  53. package/dist/dashboard/rpc-serve.d.ts +21 -1
  54. package/dist/dashboard/rpc-serve.d.ts.map +1 -1
  55. package/dist/dashboard/rpc-serve.js +9 -3
  56. package/dist/dashboard/rpc-serve.js.map +1 -1
  57. package/dist/dashboard/server.d.ts +2 -0
  58. package/dist/dashboard/server.d.ts.map +1 -1
  59. package/dist/dashboard/server.js +6 -4
  60. package/dist/dashboard/server.js.map +1 -1
  61. package/dist/dashboard/types.d.ts +3 -1
  62. package/dist/dashboard/types.d.ts.map +1 -1
  63. package/dist/dashboard-bundle/assets/host/module-BcFzlJhp.js +1 -0
  64. package/dist/dashboard-bundle/assets/main-Ca6eaXat.css +2 -0
  65. package/dist/dashboard-bundle/assets/main-rpNhGecV.js +148 -0
  66. package/dist/dashboard-bundle/assets/module-Bhd9t16k.js +14 -0
  67. package/dist/dashboard-bundle/index.html +4 -4
  68. package/dist/dashboard-rpc/context.js +1 -1
  69. package/dist/dashboard-rpc/context.js.map +1 -1
  70. package/dist/dashboard-rpc/index.d.ts +2 -2
  71. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  72. package/dist/dashboard-rpc/index.js +2 -2
  73. package/dist/dashboard-rpc/index.js.map +1 -1
  74. package/dist/dashboard-rpc/logins.d.ts +7 -0
  75. package/dist/dashboard-rpc/logins.d.ts.map +1 -1
  76. package/dist/dashboard-rpc/logins.js +17 -0
  77. package/dist/dashboard-rpc/logins.js.map +1 -1
  78. package/dist/dashboard-rpc/machines.d.ts +21 -4
  79. package/dist/dashboard-rpc/machines.d.ts.map +1 -1
  80. package/dist/dashboard-rpc/machines.js +85 -23
  81. package/dist/dashboard-rpc/machines.js.map +1 -1
  82. package/dist/dashboard-rpc/modules.d.ts.map +1 -1
  83. package/dist/dashboard-rpc/modules.js +19 -3
  84. package/dist/dashboard-rpc/modules.js.map +1 -1
  85. package/dist/dashboard-rpc/projects.d.ts +14 -0
  86. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  87. package/dist/dashboard-rpc/projects.js +48 -5
  88. package/dist/dashboard-rpc/projects.js.map +1 -1
  89. package/dist/dashboard-rpc/reads.d.ts +9 -3
  90. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  91. package/dist/dashboard-rpc/reads.js +55 -21
  92. package/dist/dashboard-rpc/reads.js.map +1 -1
  93. package/dist/dashboard-rpc/relay-dispatch.d.ts +12 -0
  94. package/dist/dashboard-rpc/relay-dispatch.d.ts.map +1 -1
  95. package/dist/dashboard-rpc/relay-dispatch.js +42 -7
  96. package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
  97. package/dist/dashboard-rpc/runs-changed.d.ts.map +1 -1
  98. package/dist/dashboard-rpc/runs-changed.js +14 -6
  99. package/dist/dashboard-rpc/runs-changed.js.map +1 -1
  100. package/dist/dashboard-rpc/test-context.d.ts +3 -1
  101. package/dist/dashboard-rpc/test-context.d.ts.map +1 -1
  102. package/dist/dashboard-rpc/test-context.js +13 -1
  103. package/dist/dashboard-rpc/test-context.js.map +1 -1
  104. package/dist/module-types/dashboard/components/MachineMark.d.ts +33 -0
  105. package/dist/module-types/dashboard/lib/models.d.ts +6 -0
  106. package/dist/module-types/dashboard/lib/route.d.ts +6 -0
  107. package/dist/module-types/dashboard/module/index.d.ts +4 -0
  108. package/dist/module-types/dashboard/rpc/machines.d.ts +35 -0
  109. package/dist/module-types/src/built-in.d.ts +5 -0
  110. package/dist/module-types/src/client.d.ts +1 -1
  111. package/dist/module-types/src/clone-project.d.ts +11 -0
  112. package/dist/module-types/src/dashboard/activity.d.ts +2 -2
  113. package/dist/module-types/src/dashboard/elsewhere.d.ts +91 -0
  114. package/dist/module-types/src/dashboard/interventions.d.ts +6 -0
  115. package/dist/module-types/src/dashboard/machine-interventions.d.ts +51 -0
  116. package/dist/module-types/src/dashboard/module-serve.d.ts +6 -0
  117. package/dist/module-types/src/dashboard/overview.d.ts +20 -5
  118. package/dist/module-types/src/dashboard/projects.d.ts +11 -2
  119. package/dist/module-types/src/dashboard/remote-run.d.ts +1 -6
  120. package/dist/module-types/src/dashboard/rpc-serve.d.ts +21 -1
  121. package/dist/module-types/src/dashboard/types.d.ts +3 -1
  122. package/dist/module-types/src/dashboard-rpc/index.d.ts +2 -2
  123. package/dist/module-types/src/dashboard-rpc/logins.d.ts +7 -0
  124. package/dist/module-types/src/dashboard-rpc/machines.d.ts +21 -4
  125. package/dist/module-types/src/dashboard-rpc/projects.d.ts +14 -0
  126. package/dist/module-types/src/dashboard-rpc/reads.d.ts +9 -3
  127. package/dist/module-types/src/dashboard-rpc/relay-dispatch.d.ts +28 -0
  128. package/dist/module-types/src/project-modules.d.ts +19 -0
  129. package/dist/module-types/src/reached-by-line.d.ts +32 -0
  130. package/dist/module-types/src/registry.d.ts +8 -0
  131. package/dist/module-types/src/repository-address.d.ts +6 -0
  132. package/dist/module-types/src/store/agent-store.d.ts +4 -3
  133. package/dist/project-modules.d.ts +19 -0
  134. package/dist/project-modules.d.ts.map +1 -1
  135. package/dist/project-modules.js +42 -2
  136. package/dist/project-modules.js.map +1 -1
  137. package/dist/reached-by-line.d.ts +32 -0
  138. package/dist/reached-by-line.d.ts.map +1 -1
  139. package/dist/reached-by-line.js +51 -0
  140. package/dist/reached-by-line.js.map +1 -1
  141. package/dist/registry.d.ts +8 -0
  142. package/dist/registry.d.ts.map +1 -1
  143. package/dist/registry.js +13 -2
  144. package/dist/registry.js.map +1 -1
  145. package/dist/repository-address.d.ts +6 -0
  146. package/dist/repository-address.d.ts.map +1 -1
  147. package/dist/repository-address.js +9 -0
  148. package/dist/repository-address.js.map +1 -1
  149. package/dist/store/agent-store.d.ts +4 -3
  150. package/dist/store/agent-store.d.ts.map +1 -1
  151. package/dist/store/agent-store.js.map +1 -1
  152. package/package.json +15 -15
  153. package/dist/dashboard-bundle/assets/host/module-CUc1n2SP.js +0 -1
  154. package/dist/dashboard-bundle/assets/main-Cv9CrCec.css +0 -2
  155. package/dist/dashboard-bundle/assets/main-dejlwmyP.js +0 -149
  156. package/dist/dashboard-bundle/assets/module-DR2oCWs5.js +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/dashboard/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoC,MAAM,mBAAmB,CAAA;AAGnF,kGAAkG;AAClG,+FAA+F;AAC/F,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,6FAA6F;AAC7F,kGAAkG;AAClG,2FAA2F;AAC3F,2FAA2F;AAC3F,+FAA+F;AAC/F,oEAAoE;AAEpE;;mDAEmD;AACnD,MAAM,WAAW,GAAG,EAAE,CAAA;AA4BtB,4FAA4F;AAC5F,SAAS,WAAW,CAAC,OAAuB,EAAE,KAAgB;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,IAAI;QACJ,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA0B,EAC1B,IAAI,GAAiB,EAAE;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,aAAa,CAAA;IACnD,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAClE,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/dashboard/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoC,MAAM,mBAAmB,CAAA;AAGnF,kGAAkG;AAClG,+FAA+F;AAC/F,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,6FAA6F;AAC7F,kGAAkG;AAClG,2FAA2F;AAC3F,2FAA2F;AAC3F,+FAA+F;AAC/F,oEAAoE;AAEpE;;mDAEmD;AACnD,MAAM,WAAW,GAAG,EAAE,CAAA;AA4BtB,4FAA4F;AAC5F,SAAS,WAAW,CAAC,OAAuB,EAAE,KAAgB;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,IAAI;QACJ,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA0B,EAC1B,IAAI,GAAiB,EAAE;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9E,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC7D,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC"}
@@ -0,0 +1,92 @@
1
+ import type { ProjectSummary } from './projects.js';
2
+ /**
3
+ * The projects of the person's other computers, as this one lists them beside its own: a
4
+ * laptop's on its server, a server's on the laptop. Each computer says its own projects only
5
+ * ({@link OwnProject}), over the relay of the saved machine it is, and only a computer that is
6
+ * the person's own is asked: a computer of another person's, shared on a server, keeps its
7
+ * projects to its person.
8
+ *
9
+ * A project this computer has too, by its repository's address, is listed once, as this
10
+ * computer's: a run of it goes to any computer that has it, by "Run on". One only another
11
+ * computer has is listed as that computer's, under an id of its own ({@link elsewhereId}): what
12
+ * the page asks of it is asked of that computer, and a run of it starts there unless another
13
+ * computer is picked, which clones it first. What a computer said last is kept, so its projects
14
+ * stay listed while it is off.
15
+ */
16
+ /** What a computer says of one of its own projects to another computer of the person's. */
17
+ export interface OwnProject {
18
+ /** Its id there. */
19
+ id: string;
20
+ name: string;
21
+ /** Its folder there. */
22
+ path: string;
23
+ /** Its repository's address ({@link import('../repository-address.js').repositoryAddress}), when it has one. */
24
+ address?: string;
25
+ /** The same address in the letters its `origin` is written with: what another computer clones it from. */
26
+ spelling?: string;
27
+ /** Whether the agents' records of it go to its repository's remote: a copy cloned from it takes the same answer. */
28
+ share: boolean;
29
+ gitHost: boolean;
30
+ activated: boolean;
31
+ lastActivityAt?: string;
32
+ /** The packages that bring it a module's pages there (Queue, Tickets, Automations): the pages it has here too. */
33
+ modules?: string[];
34
+ }
35
+ /** What a computer answered as its projects, the ones that read as projects: anything else is dropped. */
36
+ export declare function ownProjectsOf(said: unknown): OwnProject[];
37
+ /** The id here of a project of another computer's: its id there, and the mark of the saved machine it is. */
38
+ export declare function elsewhereId(projectId: string, machineId: string): string;
39
+ /** Whether an id is that of another computer's project, not one of this computer's own. */
40
+ export declare function isElsewhereId(id: unknown): id is string;
41
+ /** How a call about the project names it to its computer: its repository's address, or its id there when it has none. */
42
+ export declare function lineNameOf(project: Pick<OwnProject, 'id' | 'address'>): string;
43
+ /** The project's id on its computer, from how a call named it there: undefined for an address. */
44
+ export declare function idInLineName(name: string): string | undefined;
45
+ /** A saved machine of the person's own, with what it said of its projects last. */
46
+ export interface OwnMachine {
47
+ id: string;
48
+ projects?: OwnProject[];
49
+ }
50
+ /** A project of another computer's: the saved machine it is on, and the project as that computer said it. */
51
+ export interface ElsewhereHome<M extends OwnMachine = OwnMachine> {
52
+ machine: M;
53
+ project: OwnProject;
54
+ }
55
+ /** The listing of another computer's project, as the page lists projects: marked with the saved machine it is on. */
56
+ export declare function elsewhereSummary(home: ElsewhereHome): ProjectSummary;
57
+ /**
58
+ * The projects of the person's other computers that this one does not have, each listed once:
59
+ * one whose repository's address is a project here is this computer's, and of two computers
60
+ * with the same repository the first one listed has it. A project with no address is only its
61
+ * own computer's, and listed for it.
62
+ */
63
+ export declare function elsewhereHomes<M extends OwnMachine>(machines: readonly M[], ownAddresses: ReadonlySet<string>): ElsewhereHome<M>[];
64
+ /** The project of another computer's with this id, among the saved machines, whether it is listed here or not. */
65
+ export declare function homeOf<M extends OwnMachine>(machines: readonly M[], id: string): ElsewhereHome<M> | undefined;
66
+ /** How long a computer's word on its projects is taken before it is asked again. */
67
+ export declare const PROJECTS_KEPT_MS = 20000;
68
+ /** How long a list waits for a computer never answered before: what it says after comes at the next list. */
69
+ export declare const FIRST_WAIT_MS = 3000;
70
+ /**
71
+ * Each of the person's computers asked for its projects at most every {@link PROJECTS_KEPT_MS}, and
72
+ * what it said kept by `keep` (the saved machine's record), so a list is made of what each said
73
+ * last: at once, while each is asked again behind it. One never answered yet is waited for a
74
+ * little, the first time.
75
+ */
76
+ export declare class OwnProjectsAsked<M extends OwnMachine> {
77
+ /** Ask the machine for its projects. */
78
+ private readonly ask;
79
+ /** Keep what the machine said, when it answered and said otherwise than it had. */
80
+ private readonly keep;
81
+ private readonly now;
82
+ private readonly asked;
83
+ constructor(
84
+ /** Ask the machine for its projects. */
85
+ ask: (machine: M) => Promise<unknown>,
86
+ /** Keep what the machine said, when it answered and said otherwise than it had. */
87
+ keep: (machine: M, projects: OwnProject[]) => Promise<void>, now?: () => number);
88
+ /** Ask each machine whose word is old, and wait for the ones never heard from, a little. */
89
+ refresh(machines: readonly M[]): Promise<void>;
90
+ private askOne;
91
+ }
92
+ //# sourceMappingURL=elsewhere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elsewhere.d.ts","sourceRoot":"","sources":["../../src/dashboard/elsewhere.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /** The longest list a computer is taken at its word for, and the longest strings in it. */
2
+ const MAX_PROJECTS = 200;
3
+ const MAX_WORD = 512;
4
+ /** The most module packages a project is taken to have. */
5
+ const MAX_MODULES = 50;
6
+ /** What a computer answered as its projects, the ones that read as projects: anything else is dropped. */
7
+ export function ownProjectsOf(said) {
8
+ if (!Array.isArray(said))
9
+ return [];
10
+ const word = (value) => typeof value === 'string' && value.length > 0 && value.length <= MAX_WORD;
11
+ const projects = [];
12
+ for (const raw of said.slice(0, MAX_PROJECTS)) {
13
+ if (!raw || typeof raw !== 'object')
14
+ continue;
15
+ const { id, name, path, address, spelling, share, gitHost, activated, lastActivityAt, modules } = raw;
16
+ // An id is a word of the URL-safe kind a computer makes its ids of: it goes in this computer's ids too.
17
+ if (!word(id) || !/^[a-z0-9-]+$/.test(id) || !word(name) || !word(path))
18
+ continue;
19
+ projects.push({
20
+ id,
21
+ name,
22
+ path,
23
+ ...(word(address) ? { address } : {}),
24
+ ...(word(spelling) ? { spelling } : {}),
25
+ share: share === true,
26
+ gitHost: gitHost === true,
27
+ activated: activated === true,
28
+ ...(word(lastActivityAt) && !Number.isNaN(Date.parse(lastActivityAt)) ? { lastActivityAt } : {}),
29
+ ...(Array.isArray(modules) ? { modules: modules.slice(0, MAX_MODULES).filter(word) } : {}),
30
+ });
31
+ }
32
+ return projects;
33
+ }
34
+ /** What separates a project's id on its computer from the mark of that computer in an id here. A computer's own ids never have it. */
35
+ const MARK = '~';
36
+ /** A short, URL-safe mark of a saved machine, by its address: the same machine always gets the same one. */
37
+ function markOf(machineId) {
38
+ // djb2, as a project's own id hashes its path.
39
+ let hash = 5381;
40
+ for (let i = 0; i < machineId.length; i++)
41
+ hash = ((hash * 33) ^ machineId.charCodeAt(i)) >>> 0;
42
+ return hash.toString(36);
43
+ }
44
+ /** The id here of a project of another computer's: its id there, and the mark of the saved machine it is. */
45
+ export function elsewhereId(projectId, machineId) {
46
+ return `${projectId}${MARK}${markOf(machineId)}`;
47
+ }
48
+ /** Whether an id is that of another computer's project, not one of this computer's own. */
49
+ export function isElsewhereId(id) {
50
+ return typeof id === 'string' && id.includes(MARK);
51
+ }
52
+ /** How a call about the project names it to its computer: its repository's address, or its id there when it has none. */
53
+ export function lineNameOf(project) {
54
+ return project.address ?? `#${project.id}`;
55
+ }
56
+ /** The project's id on its computer, from how a call named it there: undefined for an address. */
57
+ export function idInLineName(name) {
58
+ return name.startsWith('#') ? name.slice(1) : undefined;
59
+ }
60
+ /** The listing of another computer's project, as the page lists projects: marked with the saved machine it is on. */
61
+ export function elsewhereSummary(home) {
62
+ const { machine, project } = home;
63
+ return {
64
+ id: elsewhereId(project.id, machine.id),
65
+ path: project.path,
66
+ name: project.name,
67
+ activated: project.activated,
68
+ gitHost: project.gitHost,
69
+ machine: machine.id,
70
+ ...(project.lastActivityAt !== undefined ? { lastActivityAt: project.lastActivityAt } : {}),
71
+ ...(project.modules !== undefined ? { modules: project.modules } : {}),
72
+ };
73
+ }
74
+ /**
75
+ * The projects of the person's other computers that this one does not have, each listed once:
76
+ * one whose repository's address is a project here is this computer's, and of two computers
77
+ * with the same repository the first one listed has it. A project with no address is only its
78
+ * own computer's, and listed for it.
79
+ */
80
+ export function elsewhereHomes(machines, ownAddresses) {
81
+ const taken = new Set(ownAddresses);
82
+ const homes = [];
83
+ for (const machine of machines) {
84
+ for (const project of machine.projects ?? []) {
85
+ if (project.address !== undefined) {
86
+ if (taken.has(project.address))
87
+ continue;
88
+ taken.add(project.address);
89
+ }
90
+ homes.push({ machine, project });
91
+ }
92
+ }
93
+ return homes;
94
+ }
95
+ /** The project of another computer's with this id, among the saved machines, whether it is listed here or not. */
96
+ export function homeOf(machines, id) {
97
+ if (!isElsewhereId(id))
98
+ return undefined;
99
+ const at = id.lastIndexOf(MARK);
100
+ const projectId = id.slice(0, at);
101
+ const mark = id.slice(at + MARK.length);
102
+ const machine = machines.find(saved => markOf(saved.id) === mark);
103
+ const project = machine?.projects?.find(own => own.id === projectId);
104
+ return machine && project ? { machine, project } : undefined;
105
+ }
106
+ /** How long a computer's word on its projects is taken before it is asked again. */
107
+ export const PROJECTS_KEPT_MS = 20_000;
108
+ /** How long a list waits for a computer never answered before: what it says after comes at the next list. */
109
+ export const FIRST_WAIT_MS = 3_000;
110
+ /**
111
+ * Each of the person's computers asked for its projects at most every {@link PROJECTS_KEPT_MS}, and
112
+ * what it said kept by `keep` (the saved machine's record), so a list is made of what each said
113
+ * last: at once, while each is asked again behind it. One never answered yet is waited for a
114
+ * little, the first time.
115
+ */
116
+ export class OwnProjectsAsked {
117
+ ask;
118
+ keep;
119
+ now;
120
+ asked = new Map();
121
+ constructor(
122
+ /** Ask the machine for its projects. */
123
+ ask,
124
+ /** Keep what the machine said, when it answered and said otherwise than it had. */
125
+ keep, now = Date.now) {
126
+ this.ask = ask;
127
+ this.keep = keep;
128
+ this.now = now;
129
+ }
130
+ /** Ask each machine whose word is old, and wait for the ones never heard from, a little. */
131
+ async refresh(machines) {
132
+ const waits = [];
133
+ for (const machine of machines) {
134
+ const was = this.asked.get(machine.id);
135
+ if (was?.asking || (was && this.now() - was.at < PROJECTS_KEPT_MS))
136
+ continue;
137
+ const one = { at: this.now() };
138
+ one.asking = this.askOne(machine).finally(() => (one.asking = undefined));
139
+ this.asked.set(machine.id, one);
140
+ if (machine.projects === undefined)
141
+ waits.push(one.asking);
142
+ }
143
+ if (waits.length > 0)
144
+ await Promise.race([Promise.all(waits), new Promise(done => setTimeout(done, FIRST_WAIT_MS).unref())]);
145
+ }
146
+ async askOne(machine) {
147
+ const said = await this.ask(machine).then(answer => ({ answer }), () => undefined);
148
+ if (said === undefined)
149
+ return;
150
+ const projects = ownProjectsOf(said.answer);
151
+ if (JSON.stringify(projects) !== JSON.stringify(machine.projects ?? null))
152
+ await this.keep(machine, projects).catch(() => { });
153
+ }
154
+ }
155
+ //# sourceMappingURL=elsewhere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elsewhere.js","sourceRoot":"","sources":["../../src/dashboard/elsewhere.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { ProjectSummary, ProjectionRead } from './projects.js';
4
4
  import { type BranchesFor } from '../store/branches.js';
5
5
  import { type PrLister } from './pull-requests.js';
6
6
  import { type BridgeQuestion } from './bridge-question.js';
7
+ import type { MachineKind } from '../reached-by-line.js';
7
8
  export { interventionKey } from './keys.js';
8
9
  /**
9
10
  * One item awaiting the human: an open `pr` to review and merge or close, a run `awaiting` the
@@ -42,6 +43,11 @@ export interface Intervention {
42
43
  files?: number;
43
44
  /** When the PR was opened (`pr`) or the agent last updated (the other two), ISO, for ordering. */
44
45
  createdAt?: string;
46
+ /** The computer the run it is about runs on, when that is one of the person's other computers: the saved machine's name and kind. */
47
+ computer?: {
48
+ name: string;
49
+ kind: MachineKind;
50
+ };
45
51
  }
46
52
  /** Injectable seam so {@link buildInterventions} is unit-testable off disk. */
47
53
  export interface InterventionsDeps {
@@ -1 +1 @@
1
- {"version":3,"file":"interventions.d.ts","sourceRoot":"","sources":["../../src/dashboard/interventions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE9G,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAExE,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGjE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI/E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAS3C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAA;IACpD,oHAAoH;IACpH,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gHAAgH;IAChH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0HAA0H;IAC1H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+GAA+G;IAC/G,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd,qJAAqJ;IACrJ,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAClD,0IAA0I;IAC1I,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,CAAA;IAChF,mGAAmG;IACnG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC9C,2KAA2K;IAC3K,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,iLAAiL;IACjL,OAAO,CAAC,EAAE,MAAM,cAAc,EAAE,CAAA;CACjC;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAgBvC"}
1
+ {"version":3,"file":"interventions.d.ts","sourceRoot":"","sources":["../../src/dashboard/interventions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE9G,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAExE,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGjE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAS3C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAA;IACpD,oHAAoH;IACpH,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gHAAgH;IAChH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0HAA0H;IAC1H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+GAA+G;IAC/G,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qIAAqI;IACrI,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,CAAA;CAC/C;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd,qJAAqJ;IACrJ,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAClD,0IAA0I;IAC1I,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,CAAA;IAChF,mGAAmG;IACnG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC9C,2KAA2K;IAC3K,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,iLAAiL;IACjL,OAAO,CAAC,EAAE,MAAM,cAAc,EAAE,CAAA;CACjC;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EAAE,EAC1B,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAgBvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"interventions.js","sourceRoot":"","sources":["../../src/dashboard/interventions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interventions.js","sourceRoot":"","sources":["../../src/dashboard/interventions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Intervention } from './interventions.js';
2
+ import type { ProjectionRead } from './projects.js';
3
+ /**
4
+ * The Human Queue of the person's other computers, beside this one's own: what needs the person in
5
+ * a run there (its question, the work it left unpublished, the PR it opened) and the PRs of a
6
+ * project only another computer has. Each computer says the items of its own projects only, never
7
+ * the ones it lists of other computers', so two computers never ask each other in a circle. Here
8
+ * each item is named by the project as it is listed here: this computer's own of the same
9
+ * repository, else the other computer's under its id here; and an item of a run there is marked
10
+ * with that computer.
11
+ */
12
+ /** What the person's other computers said of their Human Queues, each as named here, and the projects here that one which did not answer has. */
13
+ export interface MachinesQueue {
14
+ said: ProjectionRead<Intervention>[];
15
+ /** Projects here whose items on a computer that did not answer are not known: none of them is read whole. */
16
+ unread: string[];
17
+ }
18
+ /** What a computer answered as its Human Queue, the items that read as items, each in the fields an item has: anything else is dropped. */
19
+ export declare function interventionsOf(said: unknown): ProjectionRead<Intervention>;
20
+ /**
21
+ * A computer's Human Queue as named here: each item by `idHere` of its project's id there, and one
22
+ * about a run marked with the computer it runs on. An item of a project not listed here is dropped.
23
+ */
24
+ export declare function namedHere(said: ProjectionRead<Intervention>, idHere: (theirs: string) => string | undefined, computer: NonNullable<Intervention['computer']>): ProjectionRead<Intervention>;
25
+ /**
26
+ * This computer's Human Queue with what the other computers said: each item named as its project is
27
+ * here (`names`, by id: one not listed is dropped), once, newest first. Of a PR both list, the one
28
+ * a run opened is kept: its row opens the run. A project is read whole when every computer that has
29
+ * it answered.
30
+ */
31
+ export declare function withMachinesQueue(own: ProjectionRead<Intervention>, machines: MachinesQueue, names: ReadonlyMap<string, string>): ProjectionRead<Intervention>;
32
+ /** How long a computer's Human Queue is taken before it is asked again: a page asks every few seconds. */
33
+ export declare const QUEUE_KEPT_MS = 10000;
34
+ /** How long a Human Queue waits for a computer never answered before: what it says after comes at the next read. */
35
+ export declare const QUEUE_FIRST_WAIT_MS = 3000;
36
+ /**
37
+ * Each machine asked at most every {@link QUEUE_KEPT_MS}, and what it said last kept: a read is
38
+ * answered at once with that while the machine is asked again behind it. One never answered yet is
39
+ * waited for a little; one whose last ask failed has nothing kept, so its items are not taken as
40
+ * still there.
41
+ */
42
+ export declare class AnswersKept<M extends {
43
+ id: string;
44
+ }, T> {
45
+ private readonly ask;
46
+ private readonly now;
47
+ private readonly kept;
48
+ constructor(ask: (machine: M) => Promise<T>, now?: () => number);
49
+ /** What each machine said last, by its id: one that never answered, or whose last ask failed, has none. */
50
+ of(machines: readonly M[]): Promise<Map<string, T>>;
51
+ }
52
+ //# sourceMappingURL=machine-interventions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-interventions.d.ts","sourceRoot":"","sources":["../../src/dashboard/machine-interventions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;;;;GAQG;AAEH,iJAAiJ;AACjJ,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE,CAAA;IACpC,6GAA6G;IAC7G,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAOD,2IAA2I;AAC3I,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CA6B3E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAO3L;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAY9J;AAED,0GAA0G;AAC1G,eAAO,MAAM,aAAa,QAAS,CAAA;AACnC,oHAAoH;AACpH,eAAO,MAAM,mBAAmB,OAAQ,CAAA;AAExC;;;;;GAKG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC;IAIhD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkF;IAEvG,YACmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/B,GAAG,GAAE,MAAM,MAAiB,EAC3C;IAEJ,2GAA2G;IACrG,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAuBxD;CACF"}
@@ -0,0 +1,117 @@
1
+ import { interventionKey } from './keys.js';
2
+ /** The longest list a computer is taken at its word for, and the longest strings in it. */
3
+ const MAX_ITEMS = 500;
4
+ const MAX_WORD = 2_048;
5
+ const KINDS = new Set(['pr', 'awaiting', 'uncommitted', 'unpushed']);
6
+ /** What a computer answered as its Human Queue, the items that read as items, each in the fields an item has: anything else is dropped. */
7
+ export function interventionsOf(said) {
8
+ if (!said || typeof said !== 'object')
9
+ return { items: [], whole: [] };
10
+ const { items, whole } = said;
11
+ const word = (value) => typeof value === 'string' && value.length > 0 && value.length <= MAX_WORD;
12
+ const count = (value) => typeof value === 'number' && Number.isInteger(value) && value >= 0;
13
+ const read = [];
14
+ for (const raw of Array.isArray(items) ? items.slice(0, MAX_ITEMS) : []) {
15
+ if (!raw || typeof raw !== 'object')
16
+ continue;
17
+ const item = raw;
18
+ if (!word(item.projectId) || !word(item.projectName) || !word(item.kind) || !KINDS.has(item.kind) || !word(item.title))
19
+ continue;
20
+ read.push({
21
+ projectId: item.projectId,
22
+ projectName: item.projectName,
23
+ kind: item.kind,
24
+ title: item.title,
25
+ ...(word(item.question) ? { question: item.question } : {}),
26
+ // Only a page on the web: the row opens it.
27
+ ...(word(item.url) && /^https?:\/\//.test(item.url) ? { url: item.url } : {}),
28
+ ...(count(item.number) ? { number: item.number } : {}),
29
+ ...(word(item.awaitId) ? { awaitId: item.awaitId } : {}),
30
+ ...(word(item.agentId) ? { agentId: item.agentId } : {}),
31
+ ...(word(item.branch) ? { branch: item.branch } : {}),
32
+ ...(count(item.commits) ? { commits: item.commits } : {}),
33
+ ...(typeof item.gitHost === 'boolean' ? { gitHost: item.gitHost } : {}),
34
+ ...(count(item.files) ? { files: item.files } : {}),
35
+ ...(word(item.createdAt) && !Number.isNaN(Date.parse(item.createdAt)) ? { createdAt: item.createdAt } : {}),
36
+ });
37
+ }
38
+ return { items: read, whole: Array.isArray(whole) ? whole.filter(word) : [] };
39
+ }
40
+ /**
41
+ * A computer's Human Queue as named here: each item by `idHere` of its project's id there, and one
42
+ * about a run marked with the computer it runs on. An item of a project not listed here is dropped.
43
+ */
44
+ export function namedHere(said, idHere, computer) {
45
+ const items = said.items.flatMap(item => {
46
+ const projectId = idHere(item.projectId);
47
+ return projectId === undefined ? [] : [{ ...item, projectId, ...(item.agentId !== undefined ? { computer } : {}) }];
48
+ });
49
+ const whole = said.whole.flatMap(id => idHere(id) ?? []);
50
+ return { items, whole };
51
+ }
52
+ /**
53
+ * This computer's Human Queue with what the other computers said: each item named as its project is
54
+ * here (`names`, by id: one not listed is dropped), once, newest first. Of a PR both list, the one
55
+ * a run opened is kept: its row opens the run. A project is read whole when every computer that has
56
+ * it answered.
57
+ */
58
+ export function withMachinesQueue(own, machines, names) {
59
+ const theirs = machines.said.flatMap(said => said.items.flatMap(item => (names.has(item.projectId) ? [{ ...item, projectName: names.get(item.projectId) }] : [])));
60
+ const kept = new Map();
61
+ for (const item of [...own.items, ...theirs]) {
62
+ const key = interventionKey(item);
63
+ const was = kept.get(key);
64
+ if (!was || (was.agentId === undefined && item.agentId !== undefined))
65
+ kept.set(key, item);
66
+ }
67
+ const items = [...kept.values()].sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
68
+ const unread = new Set(machines.unread);
69
+ const whole = [...new Set([...own.whole, ...machines.said.flatMap(said => said.whole)])].filter(id => !unread.has(id) && names.has(id));
70
+ return { items, whole };
71
+ }
72
+ /** How long a computer's Human Queue is taken before it is asked again: a page asks every few seconds. */
73
+ export const QUEUE_KEPT_MS = 10_000;
74
+ /** How long a Human Queue waits for a computer never answered before: what it says after comes at the next read. */
75
+ export const QUEUE_FIRST_WAIT_MS = 3_000;
76
+ /**
77
+ * Each machine asked at most every {@link QUEUE_KEPT_MS}, and what it said last kept: a read is
78
+ * answered at once with that while the machine is asked again behind it. One never answered yet is
79
+ * waited for a little; one whose last ask failed has nothing kept, so its items are not taken as
80
+ * still there.
81
+ */
82
+ export class AnswersKept {
83
+ ask;
84
+ now;
85
+ kept = new Map();
86
+ constructor(ask, now = Date.now) {
87
+ this.ask = ask;
88
+ this.now = now;
89
+ }
90
+ /** What each machine said last, by its id: one that never answered, or whose last ask failed, has none. */
91
+ async of(machines) {
92
+ const waits = [];
93
+ for (const machine of machines) {
94
+ const entry = this.kept.get(machine.id);
95
+ if (entry?.asking || (entry && this.now() - entry.at < QUEUE_KEPT_MS)) {
96
+ if (entry.asking && !('said' in entry))
97
+ waits.push(entry.asking);
98
+ continue;
99
+ }
100
+ const one = { at: this.now(), ...(entry && 'said' in entry ? { said: entry.said } : {}) };
101
+ one.asking = this.ask(machine).then(said => void (one.said = said), () => void delete one.said).finally(() => (one.asking = undefined));
102
+ this.kept.set(machine.id, one);
103
+ if (!('said' in one))
104
+ waits.push(one.asking);
105
+ }
106
+ if (waits.length > 0)
107
+ await Promise.race([Promise.all(waits), new Promise(done => setTimeout(done, QUEUE_FIRST_WAIT_MS).unref())]);
108
+ const said = new Map();
109
+ for (const machine of machines) {
110
+ const entry = this.kept.get(machine.id);
111
+ if (entry && 'said' in entry)
112
+ said.set(machine.id, entry.said);
113
+ }
114
+ return said;
115
+ }
116
+ }
117
+ //# sourceMappingURL=machine-interventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-interventions.js","sourceRoot":"","sources":["../../src/dashboard/machine-interventions.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,14 @@ import { type ProjectModule } from '../project-modules.js';
5
5
  export declare const MODULES_PREFIX = "/_modules";
6
6
  /** Where the files of the computer's modules are served, which are no project's: `/_computer-modules/<package>/<file>`. */
7
7
  export declare const COMPUTER_MODULES_PREFIX = "/_computer-modules";
8
+ /** Where the files of the modules OpenAgent brings to projects are served from its own copy: `/_brought-modules/<package>/<file>`. */
9
+ export declare const BROUGHT_MODULES_PREFIX = "/_brought-modules";
8
10
  /** The URL a module's browser part is served at from one project. */
9
11
  export declare function moduleUrl(projectId: string, module: Pick<ProjectModule, 'package' | 'entry'>): string;
10
12
  /** The URL the browser part of one of the computer's modules is served at. */
11
13
  export declare function computerModuleUrl(module: Pick<ProjectModule, 'package' | 'entry'>): string;
14
+ /** The URL the browser part of a module OpenAgent brings to projects is served at from its own copy. */
15
+ export declare function broughtModuleUrl(module: Pick<ProjectModule, 'package' | 'entry'>): string;
12
16
  /**
13
17
  * A module's URL with its entry file's version (`?v=`): a browser keeps that file for good, and
14
18
  * the next version of the module is another URL. Without the file there to read, the URL as it is.
@@ -27,4 +31,6 @@ export declare function versionedModuleUrl(url: string, module: Pick<ProjectModu
27
31
  export declare function serveModuleFile(req: IncomingMessage, res: ServerResponse, pathname: string, projects?: ProjectsProvider): Promise<void>;
28
32
  /** Serve one file of a module that is the computer's: as {@link serveModuleFile}, with no project to be registered. */
29
33
  export declare function serveComputerModuleFile(req: IncomingMessage, res: ServerResponse, pathname: string): Promise<void>;
34
+ /** Serve one file of a module OpenAgent brings to projects, from its own copy: as {@link serveComputerModuleFile}. */
35
+ export declare function serveBroughtModuleFile(req: IncomingMessage, res: ServerResponse, pathname: string): Promise<void>;
30
36
  //# sourceMappingURL=module-serve.d.ts.map
@@ -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;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
+ {"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,EAAwE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEhI,sGAAsG;AACtG,eAAO,MAAM,cAAc,cAAc,CAAA;AAEzC,2HAA2H;AAC3H,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAE3D,sIAAsI;AACtI,eAAO,MAAM,sBAAsB,sBAAsB,CAAA;AAIzD,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,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,MAAM,CAEzF;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;AAED,sHAAsH;AACtH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvH"}
@@ -3,11 +3,13 @@ import { join } from 'node:path';
3
3
  import { fileTag, fileVersion, sendBody } from './compress.js';
4
4
  import { contentTypeFor } from './content-type.js';
5
5
  import { defaultProjectsProvider } from './projects.js';
6
- import { findComputerModule, findProjectModule, moduleFile } from '../project-modules.js';
6
+ import { findBroughtModule, findComputerModule, findProjectModule, moduleFile } from '../project-modules.js';
7
7
  /** Where module files are served: `/_modules/<project id>/<package>/<file>`, each segment encoded. */
8
8
  export const MODULES_PREFIX = '/_modules';
9
9
  /** Where the files of the computer's modules are served, which are no project's: `/_computer-modules/<package>/<file>`. */
10
10
  export const COMPUTER_MODULES_PREFIX = '/_computer-modules';
11
+ /** Where the files of the modules OpenAgent brings to projects are served from its own copy: `/_brought-modules/<package>/<file>`. */
12
+ export const BROUGHT_MODULES_PREFIX = '/_brought-modules';
11
13
  const encoded = (path) => path.split('/').map(encodeURIComponent).join('/');
12
14
  /** The URL a module's browser part is served at from one project. */
13
15
  export function moduleUrl(projectId, module) {
@@ -17,6 +19,10 @@ export function moduleUrl(projectId, module) {
17
19
  export function computerModuleUrl(module) {
18
20
  return `${COMPUTER_MODULES_PREFIX}/${encodeURIComponent(module.package)}/${encoded(module.entry)}`;
19
21
  }
22
+ /** The URL the browser part of a module OpenAgent brings to projects is served at from its own copy. */
23
+ export function broughtModuleUrl(module) {
24
+ return `${BROUGHT_MODULES_PREFIX}/${encodeURIComponent(module.package)}/${encoded(module.entry)}`;
25
+ }
20
26
  /**
21
27
  * A module's URL with its entry file's version (`?v=`): a browser keeps that file for good, and
22
28
  * the next version of the module is another URL. Without the file there to read, the URL as it is.
@@ -55,6 +61,10 @@ export async function serveModuleFile(req, res, pathname, projects = defaultProj
55
61
  export async function serveComputerModuleFile(req, res, pathname) {
56
62
  return serveFileOf(req, res, pathname.slice(COMPUTER_MODULES_PREFIX.length + 1).split('/'), findComputerModule);
57
63
  }
64
+ /** Serve one file of a module OpenAgent brings to projects, from its own copy: as {@link serveComputerModuleFile}. */
65
+ export async function serveBroughtModuleFile(req, res, pathname) {
66
+ return serveFileOf(req, res, pathname.slice(BROUGHT_MODULES_PREFIX.length + 1).split('/'), findBroughtModule);
67
+ }
58
68
  /** Answer the file `<package>/<file>` names, of the module `find` knows the package as. */
59
69
  async function serveFileOf(req, res, [packageSegment, ...rest], find) {
60
70
  const notFound = () => void res.writeHead(404, { 'content-type': 'text/plain' }).end('no such module file');