@openagt/dashboard 0.25.0 → 0.26.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 (133) hide show
  1. package/dist/bridge-browser.d.ts +6 -4
  2. package/dist/bridge-browser.d.ts.map +1 -1
  3. package/dist/bridge-browser.js +68 -21
  4. package/dist/bridge-browser.js.map +1 -1
  5. package/dist/browser-stream.d.ts.map +1 -1
  6. package/dist/browser-stream.js +11 -0
  7. package/dist/browser-stream.js.map +1 -1
  8. package/dist/daemon-runtime.d.ts +8 -1
  9. package/dist/daemon-runtime.d.ts.map +1 -1
  10. package/dist/daemon-runtime.js +19 -2
  11. package/dist/daemon-runtime.js.map +1 -1
  12. package/dist/daemon.d.ts +5 -6
  13. package/dist/daemon.d.ts.map +1 -1
  14. package/dist/daemon.js +68 -33
  15. package/dist/daemon.js.map +1 -1
  16. package/dist/dashboard/agent-handoff.d.ts +2 -1
  17. package/dist/dashboard/agent-handoff.d.ts.map +1 -1
  18. package/dist/dashboard/agent-handoff.js +30 -4
  19. package/dist/dashboard/agent-handoff.js.map +1 -1
  20. package/dist/dashboard/cache.js +4 -1
  21. package/dist/dashboard/cache.js.map +1 -1
  22. package/dist/dashboard/index.d.ts +1 -1
  23. package/dist/dashboard/index.d.ts.map +1 -1
  24. package/dist/dashboard/interventions.d.ts +8 -11
  25. package/dist/dashboard/interventions.d.ts.map +1 -1
  26. package/dist/dashboard/interventions.js +106 -133
  27. package/dist/dashboard/interventions.js.map +1 -1
  28. package/dist/dashboard/keys.d.ts +2 -2
  29. package/dist/dashboard/keys.js +4 -4
  30. package/dist/dashboard/keys.js.map +1 -1
  31. package/dist/dashboard/overview.d.ts.map +1 -1
  32. package/dist/dashboard/overview.js +5 -6
  33. package/dist/dashboard/overview.js.map +1 -1
  34. package/dist/dashboard/pull-requests.d.ts +27 -1
  35. package/dist/dashboard/pull-requests.d.ts.map +1 -1
  36. package/dist/dashboard/pull-requests.js +55 -1
  37. package/dist/dashboard/pull-requests.js.map +1 -1
  38. package/dist/dashboard/rpc-serve.d.ts +4 -1
  39. package/dist/dashboard/rpc-serve.d.ts.map +1 -1
  40. package/dist/dashboard/rpc-serve.js.map +1 -1
  41. package/dist/dashboard/server.d.ts +3 -1
  42. package/dist/dashboard/server.d.ts.map +1 -1
  43. package/dist/dashboard/server.js +1 -0
  44. package/dist/dashboard/server.js.map +1 -1
  45. package/dist/dashboard/types.d.ts +18 -0
  46. package/dist/dashboard/types.d.ts.map +1 -1
  47. package/dist/dashboard/unpublished.d.ts +43 -0
  48. package/dist/dashboard/unpublished.d.ts.map +1 -0
  49. package/dist/dashboard/unpublished.js +74 -0
  50. package/dist/dashboard/unpublished.js.map +1 -0
  51. package/dist/dashboard-bundle/assets/main-CTqah6if.js +145 -0
  52. package/dist/dashboard-bundle/assets/main-iqtcpdTX.css +2 -0
  53. package/dist/dashboard-bundle/assets/module-Dy8zK3Qd.js +14 -0
  54. package/dist/dashboard-bundle/host/module.js +1 -1
  55. package/dist/dashboard-bundle/index.html +3 -3
  56. package/dist/dashboard-rpc/context.d.ts +2 -0
  57. package/dist/dashboard-rpc/context.d.ts.map +1 -1
  58. package/dist/dashboard-rpc/context.js +4 -0
  59. package/dist/dashboard-rpc/context.js.map +1 -1
  60. package/dist/dashboard-rpc/index.d.ts +1 -1
  61. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  62. package/dist/dashboard-rpc/index.js +1 -1
  63. package/dist/dashboard-rpc/index.js.map +1 -1
  64. package/dist/dashboard-rpc/projects.d.ts +11 -1
  65. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  66. package/dist/dashboard-rpc/projects.js +15 -1
  67. package/dist/dashboard-rpc/projects.js.map +1 -1
  68. package/dist/dashboard-rpc/reads.d.ts +18 -1
  69. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  70. package/dist/dashboard-rpc/reads.js +40 -2
  71. package/dist/dashboard-rpc/reads.js.map +1 -1
  72. package/dist/dashboard-rpc/test-context.d.ts.map +1 -1
  73. package/dist/dashboard-rpc/test-context.js +3 -2
  74. package/dist/dashboard-rpc/test-context.js.map +1 -1
  75. package/dist/join-dashboard.d.ts +21 -0
  76. package/dist/join-dashboard.d.ts.map +1 -0
  77. package/dist/join-dashboard.js +22 -0
  78. package/dist/join-dashboard.js.map +1 -0
  79. package/dist/module-types/dashboard/components/ui/checkbox.d.ts +1 -1
  80. package/dist/module-types/dashboard/components/ui/context-menu.d.ts +2 -2
  81. package/dist/module-types/dashboard/components/ui/dropdown-menu.d.ts +2 -2
  82. package/dist/module-types/dashboard/components/ui/popover.d.ts +1 -1
  83. package/dist/module-types/dashboard/components/ui/radio-group.d.ts +2 -2
  84. package/dist/module-types/dashboard/components/ui/scroll-area.d.ts +1 -1
  85. package/dist/module-types/dashboard/components/ui/select.d.ts +1 -1
  86. package/dist/module-types/dashboard/components/ui/separator.d.ts +1 -1
  87. package/dist/module-types/dashboard/components/ui/switch.d.ts +1 -1
  88. package/dist/module-types/dashboard/components/ui/tooltip.d.ts +3 -3
  89. package/dist/module-types/dashboard/lib/data-link.d.ts +1 -1
  90. package/dist/module-types/dashboard/lib/route.d.ts +1 -24
  91. package/dist/module-types/src/bridge-browser.d.ts +6 -4
  92. package/dist/module-types/src/dashboard/agent-handoff.d.ts +2 -1
  93. package/dist/module-types/src/dashboard/interventions.d.ts +8 -11
  94. package/dist/module-types/src/dashboard/keys.d.ts +2 -2
  95. package/dist/module-types/src/dashboard/pull-requests.d.ts +27 -1
  96. package/dist/module-types/src/dashboard/rpc-serve.d.ts +4 -1
  97. package/dist/module-types/src/dashboard/types.d.ts +18 -0
  98. package/dist/module-types/src/dashboard/unpublished.d.ts +42 -0
  99. package/dist/module-types/src/dashboard-rpc/context.d.ts +2 -0
  100. package/dist/module-types/src/dashboard-rpc/index.d.ts +1 -1
  101. package/dist/module-types/src/dashboard-rpc/projects.d.ts +11 -1
  102. package/dist/module-types/src/dashboard-rpc/reads.d.ts +18 -1
  103. package/dist/module-types/src/project-address.d.ts +32 -0
  104. package/dist/module-types/src/store/agent-store.d.ts +13 -0
  105. package/dist/module-types/src/store/branches.d.ts +28 -2
  106. package/dist/module-types/src/store/index.d.ts +1 -1
  107. package/dist/module.css +1 -0
  108. package/dist/project-address.d.ts +33 -0
  109. package/dist/project-address.d.ts.map +1 -0
  110. package/dist/project-address.js +57 -0
  111. package/dist/project-address.js.map +1 -0
  112. package/dist/serve.d.ts +2 -0
  113. package/dist/serve.d.ts.map +1 -1
  114. package/dist/serve.js +1 -0
  115. package/dist/serve.js.map +1 -1
  116. package/dist/store/agent-store.d.ts +13 -0
  117. package/dist/store/agent-store.d.ts.map +1 -1
  118. package/dist/store/agent-store.js.map +1 -1
  119. package/dist/store/branches.d.ts +28 -2
  120. package/dist/store/branches.d.ts.map +1 -1
  121. package/dist/store/branches.js +38 -22
  122. package/dist/store/branches.js.map +1 -1
  123. package/dist/store/index.d.ts +1 -1
  124. package/dist/store/index.d.ts.map +1 -1
  125. package/dist/store/index.js +1 -1
  126. package/dist/store/index.js.map +1 -1
  127. package/dist/store/test-branches.d.ts.map +1 -1
  128. package/dist/store/test-branches.js +6 -0
  129. package/dist/store/test-branches.js.map +1 -1
  130. package/package.json +13 -13
  131. package/dist/dashboard-bundle/assets/main-CTyvdSpb.js +0 -145
  132. package/dist/dashboard-bundle/assets/main-CvaxZfR1.css +0 -2
  133. package/dist/dashboard-bundle/assets/module-Ba-5IEOx.js +0 -25
@@ -1,13 +1,11 @@
1
1
  import { listAgents, loadAgentEvents, readLiveMetas } from '../store/index.js';
2
2
  import { pendingChoices } from '../open-choices.js';
3
- import { agentBranchFor } from './agent-handoff.js';
4
3
  import { projectBranches } from '../store/branches.js';
5
- import { openPrs } from './pull-requests.js';
4
+ import { unpublishedRuns } from './unpublished.js';
5
+ import { cachedOpenPrs } from './pull-requests.js';
6
6
  import { interventionKey } from './keys.js';
7
7
  // Pure identity + diff, in the leaf `keys.ts` so the dashboard shares them rather than copying.
8
8
  export { interventionKey } from './keys.js';
9
- /** How many recent finished agents are inspected per project by default. */
10
- const HANDOFF_LIMIT = 5;
11
9
  /**
12
10
  * Build the cross-project interventions queue: every registered project's open PRs, plus any run
13
11
  * currently paused on a choice gate (#636), newest first. Forgiving — a project with no remote
@@ -21,79 +19,11 @@ const HANDOFF_LIMIT = 5;
21
19
  * the notification watcher is the caller that cannot.
22
20
  */
23
21
  export async function buildInterventions(projects, deps = {}) {
24
- const prs = deps.prs ?? openPrs;
25
- const liveAgents = deps.liveAgents ?? readLiveMetas;
26
- const events = deps.events ?? loadAgentEvents;
27
- const items = [];
28
- const whole = [];
29
- for (const project of projects) {
30
- // A project is read whole only when every one of its sources answered. Each `unread()` below is
31
- // a source that did not, and contributed nothing for a reason other than nothing being there.
32
- let sawEverything = true;
33
- const unread = () => {
34
- sawEverything = false;
35
- return [];
36
- };
37
- const open = await prs(project.path).catch(unread);
38
- // The branches the project's runs are on, recorded or in a checkout (#1774): what tells a
39
- // run's draft from one opened by hand. Read only when a draft asks.
40
- let runBranches;
41
- const isRunBranch = async (branch) => {
42
- runBranches ??= new Set([...(await (deps.agents ?? listAgents)(project.path).catch(() => [])), ...(await liveAgents(project.path).catch(() => []))].flatMap(agent => (agent.branch ? [agent.branch] : [])));
43
- return runBranches.has(branch);
44
- };
45
- for (const pr of open) {
46
- // A draft opened by hand is not asking for review, so it stays off the queue. A draft on a
47
- // run's branch is the opposite (#1102): the agent, or cloud work adoption, opened it as a
48
- // draft so it does not ping reviewers, and if the queue then dropped it too, nothing
49
- // would tell anyone the work exists — which is the whole of #860 again.
50
- if (pr.isDraft && !(pr.headRefName !== undefined && (await isRunBranch(pr.headRefName))))
51
- continue;
52
- items.push({
53
- projectId: project.id,
54
- projectName: project.name,
55
- kind: 'pr',
56
- number: pr.number,
57
- title: pr.title,
58
- url: pr.url,
59
- ...(pr.createdAt ? { createdAt: pr.createdAt } : {}),
60
- });
61
- }
62
- // A run that ended on a question waits for the user, a "needs you" too (#636): it ended
63
- // `waiting`, its checkout kept for the answer (#1774). The question is read off the run's own
64
- // diary by the rule the run page and the open-questions list use, so the ping names the question
65
- // they offer; a waiting run whose diary shows none is skipped. A project has several runs
66
- // (#736), so each waiting run contributes its own item — keyed on the question's id, plus the
67
- // agent id so two runs are told apart.
68
- for (const meta of await liveAgents(project.path).catch(unread)) {
69
- if (meta.status !== 'waiting')
70
- continue;
71
- const choice = pendingChoices((await events(project.path, meta.id).catch(() => undefined)) ?? []).at(-1);
72
- if (!choice)
73
- continue;
74
- items.push({
75
- projectId: project.id,
76
- projectName: project.name,
77
- kind: 'awaiting',
78
- title: choice.title,
79
- awaitId: choice.id,
80
- agentId: meta.id,
81
- ...(meta.updatedAt ? { createdAt: meta.updatedAt } : {}),
82
- });
83
- }
84
- // A finished agent whose work never left the machine is a "needs you" too (#860). Until now the
85
- // queue only knew about a PR that is *already on the git host* and an agent parked on a gate, so an agent
86
- // that committed real code and stopped produced neither, and nothing told anyone: the overview
87
- // drops it (it filters on `running`) and the handoff panel is behind clicking into that agent.
88
- //
89
- // Surfacing only: this says there is a decision waiting, it does not take it. A run publishes
90
- // nothing by itself, so every finished run with work of its own reaches here until a person
91
- // publishes it, or the agent does on their ask.
92
- for (const item of await unpushedFor(project, deps, unread).catch(unread))
93
- items.push(item);
94
- if (sawEverything)
95
- whole.push(project.id);
96
- }
22
+ // Every project at once, and each one's sources at once: a project's open requests are a git host
23
+ // read, and asking them one project after the other kept the queue waiting seconds.
24
+ const read = await Promise.all(projects.map(project => projectInterventions(project, deps)));
25
+ const items = read.flatMap(project => project.items);
26
+ const whole = read.flatMap(project => (project.whole ? [project.id] : []));
97
27
  items.sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
98
28
  // The same repo can be registered under two projects (e.g. a monorepo root + a subdir), so a
99
29
  // PR would otherwise appear once per entry. Collapse by identity, keeping the first (newest-sorted).
@@ -101,69 +31,112 @@ export async function buildInterventions(projects, deps = {}) {
101
31
  const unique = items.filter(item => (seen.has(interventionKey(item)) ? false : (seen.add(interventionKey(item)), true)));
102
32
  return { items: unique, whole };
103
33
  }
104
- /**
105
- * The finished agents of a project whose branch still holds unpushed, unmerged commits (#860).
106
- *
107
- * Only the most recent {@link InterventionsDeps.handoffLimit} finished agents are inspected, and
108
- * their branches in one read of the project's branches provider: each read is a process, and
109
- * this runs on a poll. A run started from another branch is the exception: its branch is read on
110
- * its own, measured from the commit its own work begins at, as its page measures it; counted from
111
- * the default branch it would be credited that other branch's commits too. The provider answers git facts only, so the git host PR lookup the handoff
112
- * summary makes per branch is never paid here: an open PR means the branch was pushed, so
113
- * `pushed` already excludes it, and the `pr` kind above is what surfaces it.
114
- */
115
- async function unpushedFor(project, deps, unread) {
116
- const agents = deps.agents ?? listAgents;
117
- const branches = deps.branches ?? projectBranches;
118
- const finished = (await agents(project.path))
119
- // A subagent's branch is its main agent's to land, never a person's to push.
120
- .filter(agent => agent.status !== 'running' && agent.parent === undefined)
121
- .sort((a, b) => (b.startedAt ?? '').localeCompare(a.startedAt ?? ''))
122
- .slice(0, deps.handoffLimit ?? HANDOFF_LIMIT)
123
- .flatMap(agent => {
124
- const branch = agentBranchFor(agent);
125
- return branch === undefined ? [] : [{ agent, branch }];
126
- });
127
- if (finished.length === 0)
128
- return [];
129
- // No provider: the project has no checkouts and no branch state to read; nothing is waiting.
130
- const source = await branches(project.path).catch(() => undefined);
131
- if (!source)
132
- return [];
133
- // One read per commit the branches are measured from; the runs that name none share one.
134
- const asks = new Map();
135
- for (const { agent, branch } of finished)
136
- asks.set(agent.baseCommit, [...(asks.get(agent.baseCommit) ?? []), branch]);
137
- const states = new Map();
138
- try {
139
- for (const shown of await Promise.all([...asks].map(([from, asked]) => source.show(asked, from)))) {
140
- for (const state of shown)
141
- states.set(state.branch, state);
142
- }
143
- }
144
- catch {
145
- unread();
34
+ /** One project's items, and whether every one of its sources answered. */
35
+ async function projectInterventions(project, deps) {
36
+ const prs = deps.prs ?? cachedOpenPrs;
37
+ const liveAgents = deps.liveAgents ?? readLiveMetas;
38
+ const events = deps.events ?? loadAgentEvents;
39
+ // A project is read whole only when every one of its sources answered. Each `unread()` below is
40
+ // a source that did not, and contributed nothing for a reason other than nothing being there.
41
+ let sawEverything = true;
42
+ const unread = () => {
43
+ sawEverything = false;
146
44
  return [];
147
- }
45
+ };
46
+ // The project's runs, recorded and live, read once for every source that asks.
47
+ const [open, recorded, live] = await Promise.all([
48
+ prs(project.path).catch(unread),
49
+ (deps.agents ?? listAgents)(project.path).catch(() => undefined),
50
+ liveAgents(project.path).catch(() => undefined),
51
+ ]);
52
+ // Newest first: a branch name reused by a later run, or a run continued on it, is that run's now.
53
+ const runs = [...(live ?? []), ...(recorded ?? [])].sort((a, b) => b.startedAt.localeCompare(a.startedAt));
148
54
  const items = [];
149
- for (const { agent, branch } of finished) {
150
- const state = states.get(branch);
151
- // Every condition is a reason this is *not* waiting on anyone: the branch is gone, the session
152
- // wrote nothing, it already landed, it is already on the remote, or there is nowhere to push.
153
- if (!state || !state.exists || state.commits.length === 0 || state.files.length === 0 || state.merged || state.pushed || !state.hasRemote)
55
+ for (const pr of open) {
56
+ // The run that opened it, by the request its record names, else by the branch a run's record or
57
+ // checkout names (#1774): what tells a run's draft from one opened by hand, and where a click on
58
+ // the row goes, the conversation rather than the git host.
59
+ const run = runs.find(agent => agent.pr?.url === pr.url) ?? (pr.headRefName !== undefined ? runs.find(agent => agent.branch === pr.headRefName) : undefined);
60
+ // A draft opened by hand is not asking for review, so it stays off the queue. A draft on a
61
+ // run's branch is the opposite (#1102): the agent, or cloud work adoption, opened it as a
62
+ // draft so it does not ping reviewers, and if the queue then dropped it too, nothing
63
+ // would tell anyone the work exists — which is the whole of #860 again.
64
+ if (pr.isDraft && !run)
154
65
  continue;
155
66
  items.push({
156
67
  projectId: project.id,
157
68
  projectName: project.name,
158
- kind: 'unpushed',
159
- // What was asked, else the name the provider gave the branch, else the branch: never a prefix cut off here.
160
- title: agent.intent?.trim() || state.name || branch,
161
- agentId: agent.id,
162
- branch,
163
- commits: state.commits.length,
164
- ...(agent.updatedAt ? { createdAt: agent.updatedAt } : {}),
69
+ kind: 'pr',
70
+ number: pr.number,
71
+ title: pr.title,
72
+ url: pr.url,
73
+ ...(run ? { agentId: run.id } : {}),
74
+ ...(pr.createdAt ? { createdAt: pr.createdAt } : {}),
165
75
  });
166
76
  }
167
- return items;
77
+ // A run that ended on a question waits for the user, a "needs you" too (#636): it ended
78
+ // `waiting`, its checkout kept for the answer (#1774). The question is read off the run's own
79
+ // diary by the rule the run page and the open-questions list use, so the ping names the question
80
+ // they offer; a waiting run whose diary shows none is skipped. A project has several runs
81
+ // (#736), so each waiting run contributes its own item — keyed on the question's id, plus the
82
+ // agent id so two runs are told apart.
83
+ if (live === undefined)
84
+ unread();
85
+ const awaiting = await Promise.all((live ?? [])
86
+ .filter(meta => meta.status === 'waiting')
87
+ .map(async (meta) => {
88
+ const choice = pendingChoices((await events(project.path, meta.id).catch(() => undefined)) ?? []).at(-1);
89
+ return choice
90
+ ? [{ projectId: project.id, projectName: project.name, kind: 'awaiting', title: choice.title, awaitId: choice.id, agentId: meta.id, ...(meta.updatedAt ? { createdAt: meta.updatedAt } : {}) }]
91
+ : [];
92
+ }));
93
+ items.push(...awaiting.flat());
94
+ // A finished run whose work never left the machine is a "needs you" too (#860). Until then the
95
+ // queue only knew about a PR that is *already on the git host* and an agent parked on a gate, so an agent
96
+ // that committed real code and stopped produced neither, and nothing told anyone: the overview
97
+ // drops it (it filters on `running`) and the handoff panel is behind clicking into that agent.
98
+ //
99
+ // Surfacing only: this says there is a decision waiting, it does not take it. A run publishes
100
+ // nothing by itself, so every finished run with work of its own reaches here until a person
101
+ // publishes it, or the agent does on their ask.
102
+ if (recorded === undefined)
103
+ unread();
104
+ items.push(...(await unpushedFor(project, recorded ?? [], deps.branches ?? projectBranches, unread)));
105
+ return { id: project.id, items, whole: sawEverything };
106
+ }
107
+ /**
108
+ * The finished runs of a project whose work never left this machine (#860), as
109
+ * {@link unpublishedRuns} finds them for the list of runs too: files left uncommitted first, since
110
+ * committing them is the run's next step, else commits never pushed. The provider answers git
111
+ * facts only, so the git host PR lookup the handoff summary makes per branch is never paid here: an
112
+ * open PR means the branch was pushed, and the `pr` kind above is what surfaces it.
113
+ */
114
+ async function unpushedFor(project, agents, branches, unread) {
115
+ let found;
116
+ try {
117
+ found = await unpublishedRuns(project.path, agents, branches);
118
+ }
119
+ catch {
120
+ unread();
121
+ return [];
122
+ }
123
+ return agents.flatMap(agent => {
124
+ const work = found.get(agent.id);
125
+ if (!work)
126
+ return [];
127
+ const left = work.uncommitted > 0 ? { kind: 'uncommitted', files: work.uncommitted } : { kind: 'unpushed', commits: work.commits };
128
+ return [
129
+ {
130
+ projectId: project.id,
131
+ projectName: project.name,
132
+ ...left,
133
+ // What was asked, else the run's own name, else the branch: never a prefix cut off here.
134
+ title: agent.intent?.trim() || agent.title?.trim() || work.branch,
135
+ agentId: agent.id,
136
+ branch: work.branch,
137
+ ...(agent.updatedAt ? { createdAt: agent.updatedAt } : {}),
138
+ },
139
+ ];
140
+ });
168
141
  }
169
142
  //# sourceMappingURL=interventions.js.map
@@ -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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"}
@@ -14,8 +14,8 @@ import type { Intervention } from './interventions.js';
14
14
  */
15
15
  /**
16
16
  * The stable identity of an intervention. A PR is its url (survives title edits and re-sorts);
17
- * the other two have no url and are keyed on the project plus the thing waiting — the agent and
18
- * the gate it is parked on, or the agent whose branch is unpushed.
17
+ * the others have no url and are keyed on the project plus the thing waiting — the agent and
18
+ * the gate it is parked on, or the agent whose work is uncommitted or unpushed.
19
19
  *
20
20
  * The agent is part of the awaiting key because a gate id is only unique within its own agent:
21
21
  * every agent's first gate is `await-choices`. Two agents running in one project (#736) and both
@@ -12,8 +12,8 @@
12
12
  */
13
13
  /**
14
14
  * The stable identity of an intervention. A PR is its url (survives title edits and re-sorts);
15
- * the other two have no url and are keyed on the project plus the thing waiting — the agent and
16
- * the gate it is parked on, or the agent whose branch is unpushed.
15
+ * the others have no url and are keyed on the project plus the thing waiting — the agent and
16
+ * the gate it is parked on, or the agent whose work is uncommitted or unpushed.
17
17
  *
18
18
  * The agent is part of the awaiting key because a gate id is only unique within its own agent:
19
19
  * every agent's first gate is `await-choices`. Two agents running in one project (#736) and both
@@ -22,8 +22,8 @@
22
22
  export function interventionKey(item) {
23
23
  if (item.kind === 'awaiting')
24
24
  return `awaiting:${item.projectId}:${item.agentId ?? ''}:${item.awaitId ?? ''}`;
25
- if (item.kind === 'unpushed')
26
- return `unpushed:${item.projectId}:${item.agentId ?? ''}`;
25
+ if (item.kind === 'uncommitted' || item.kind === 'unpushed')
26
+ return `${item.kind}:${item.projectId}:${item.agentId ?? ''}`;
27
27
  return item.url ?? '';
28
28
  }
29
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/dashboard/keys.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,YAAY,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IAC7G,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,YAAY,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IACvF,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/dashboard/keys.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,YAAY,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IAC7G,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;IAC1H,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../src/dashboard/overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAW5D,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,CAAA;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC9B,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,kEAAkE;IAClE,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,6FAA6F;AAC7F,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;CACjB;AAQD,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;CAC/C;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAavH;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAClD,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/D,yGAAyG;IACzG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC9C,uGAAuG;IACvG,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoD1G"}
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../src/dashboard/overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAW5D,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,CAAA;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC9B,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,kEAAkE;IAClE,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,6FAA6F;AAC7F,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;CACjB;AAQD,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;CAC/C;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAYvH;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAClD,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/D,yGAAyG;IACzG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC9C,uGAAuG;IACvG,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoD1G"}
@@ -15,12 +15,11 @@ const RECENT_RUNS_LIMIT = 30;
15
15
  */
16
16
  export async function buildRecentAgents(projects, deps = {}) {
17
17
  const readAgents = deps.agents ?? readAllAgents;
18
- const all = [];
19
- for (const project of projects) {
20
- for (const agent of await readAgents(project.path).catch(() => [])) {
21
- all.push({ projectId: project.id, projectName: project.name, agent });
22
- }
23
- }
18
+ // Every project at once: each one's read is a git read of its branches too (the rows' marks), and
19
+ // one after the other the list waited for all of them in turn. Kept in the projects' order, so
20
+ // the first project to list a run still keeps it below.
21
+ const read = await Promise.all(projects.map(project => readAgents(project.path).catch(() => [])));
22
+ const all = projects.flatMap((project, at) => (read[at] ?? []).map(agent => ({ projectId: project.id, projectName: project.name, agent })));
24
23
  all.sort((a, b) => (b.agent.startedAt ?? '').localeCompare(a.agent.startedAt ?? ''));
25
24
  // One row per run (#1648): two checkouts of one repository share their archive, so every run
26
25
  // was listed once per checkout; the first project to list it keeps it.
@@ -1 +1 @@
1
- {"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/dashboard/overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoD,MAAM,mBAAmB,CAAA;AAElH,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAwDlC,sDAAsD;AACtD,MAAM,YAAY,GAAG,CAAC,CAAA;AAEtB,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAO5B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAA0B,EAAE,IAAI,GAAqB,EAAE;IAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAA;IAC/C,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAA;IACpF,6FAA6F;IAC7F,uEAAuE;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACzG,CAAC;AAeD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAA0B,EAAE,IAAI,GAAiB,EAAE;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,aAAa,CAAA;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;IACnF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAA;IAExC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,8FAA8F;IAC9F,qFAAqF;IACrF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,KAAK,GAAG,CAAC,OAAuB,EAAE,IAAe,EAAE,GAAW,EAAe,EAAE,CAAC,CAAC;QACrF,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,GAAG;QACH,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,+FAA+F;QAC/F,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAElF,CAAC,CAAA;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,yFAAyF;QACzF,KAAK,MAAM,IAAI,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAQ;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,CAAC;QACD,6FAA6F;QAC7F,+FAA+F;QAC/F,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAQ;YAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YACpH,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACzD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACtB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IACD,MAAM,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;IAE3E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEtE,MAAM,MAAM,GAAG,QAAQ;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;SAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;SAC9E,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,cAAe,EAAE,CAAC,CAAC,CAAA;IAE1F,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/dashboard/overview.ts"],"names":[],"mappings":"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"}
@@ -91,8 +91,25 @@ export declare function prView(cwd: string, branch: string, gitHost?: GitHostFor
91
91
  * deciding whether to offer "Open PR". A read with no branch to ask about answers nothing at once.
92
92
  */
93
93
  export declare function cachedPrView(cwd: string, branch?: string): Promise<Cached<LinkedPr | undefined>>;
94
- /** Forget a branch's PR, after an action that changes whether it has one. */
94
+ /** Forget a branch's PR, after an action that changes whether it has one, and with it how the project's PRs stand and which are open. */
95
95
  export declare function forgetPr(cwd: string, branch?: string): void;
96
+ /** How a run's pull request stands, as its row in the list of runs shows it. */
97
+ export type PrState = 'open' | 'draft' | 'merged' | 'closed';
98
+ /**
99
+ * How each of a project's newest pull requests stands, by its address: what the list of runs marks
100
+ * each run's PR with. One listing of the project's requests, whatever their state, rather than one
101
+ * per run; a request older than what the git host lists has no state here. A listing the git host
102
+ * cannot answer throws.
103
+ */
104
+ export declare function prStates(cwd: string, gitHost?: GitHostFor): Promise<Map<string, PrState>>;
105
+ /**
106
+ * The cached form of {@link prStates} (#1028): the list of runs is polled every few seconds, and a
107
+ * PR's state changes far less often. A listing that fails is kept like an answer, as the states
108
+ * last read, so a git host that cannot answer is asked again a minute later, not at every poll;
109
+ * and while a read is on its way, after a request was opened or merged here, the rows keep the
110
+ * states they had.
111
+ */
112
+ export declare function cachedPrStates(cwd: string, read?: (cwd: string) => Promise<Map<string, PrState>>): Promise<Map<string, PrState>>;
96
113
  /** The cached form of {@link prsForBranch}, shared through the same read-through cache (#1028). */
97
114
  export declare function cachedPrsForBranch(cwd: string, branch: string): Promise<Cached<LinkedPr[]>>;
98
115
  /** Forget a branch's PR history, after an action that changes it (opening one). */
@@ -124,4 +141,13 @@ export declare function pickAgentPr(prs: LinkedPr[], since?: string, order?: 'fi
124
141
  * it cannot decide what it never hears about. A project with no git host package has none open.
125
142
  */
126
143
  export declare function openPrs(cwd: string, gitHost?: GitHostFor): Promise<OpenPr[]>;
144
+ /**
145
+ * The cached form of {@link openPrs} (#1028), for the Human Queue: it asked the git host at every
146
+ * poll of every page that shows it, and the page waited. The first ask waits for the answer; after
147
+ * that the list last read answers at once and is read again behind it once it is
148
+ * {@link OPEN_PRS_TTL_MS} old. A request opened or merged here is read again at once
149
+ * ({@link forgetPr}). A first read that fails rejects, as {@link openPrs} does; a later one keeps
150
+ * the list last read.
151
+ */
152
+ export declare function cachedOpenPrs(cwd: string, read?: (cwd: string) => Promise<OpenPr[]>): Promise<OpenPr[]>;
127
153
  //# sourceMappingURL=pull-requests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull-requests.d.ts","sourceRoot":"","sources":["../../src/dashboard/pull-requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-requests.d.ts","sourceRoot":"","sources":["../../src/dashboard/pull-requests.ts"],"names":[],"mappings":"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"}
@@ -69,9 +69,39 @@ export async function cachedPrView(cwd, branch) {
69
69
  return { value: undefined, pending: false };
70
70
  return cachedRead(prCacheKey(cwd, branch), () => prView(cwd, branch));
71
71
  }
72
- /** Forget a branch's PR, after an action that changes whether it has one. */
72
+ /** Forget a branch's PR, after an action that changes whether it has one, and with it how the project's PRs stand and which are open. */
73
73
  export function forgetPr(cwd, branch) {
74
74
  invalidate(prCacheKey(cwd, branch));
75
+ invalidate(prStatesCacheKey(cwd));
76
+ invalidate(openPrsCacheKey(cwd));
77
+ }
78
+ /**
79
+ * How each of a project's newest pull requests stands, by its address: what the list of runs marks
80
+ * each run's PR with. One listing of the project's requests, whatever their state, rather than one
81
+ * per run; a request older than what the git host lists has no state here. A listing the git host
82
+ * cannot answer throws.
83
+ */
84
+ export async function prStates(cwd, gitHost = projectGitHost) {
85
+ const source = await gitHost(cwd);
86
+ if (!source)
87
+ return new Map();
88
+ const listed = await source.requests({ state: 'all' });
89
+ if (!listed.ok)
90
+ throw new Error(listed.error);
91
+ return new Map(listed.requests.map(request => [request.url, request.state === 'open' && request.draft ? 'draft' : request.state]));
92
+ }
93
+ /** The states each project last read, so a read that fails or is on its way shows those rather than none. */
94
+ const lastStates = new Map();
95
+ /**
96
+ * The cached form of {@link prStates} (#1028): the list of runs is polled every few seconds, and a
97
+ * PR's state changes far less often. A listing that fails is kept like an answer, as the states
98
+ * last read, so a git host that cannot answer is asked again a minute later, not at every poll;
99
+ * and while a read is on its way, after a request was opened or merged here, the rows keep the
100
+ * states they had.
101
+ */
102
+ export async function cachedPrStates(cwd, read = prStates) {
103
+ const cached = await cachedRead(prStatesCacheKey(cwd), () => read(cwd).then(states => (lastStates.set(cwd, states), states), () => lastStates.get(cwd) ?? new Map()));
104
+ return cached.value ?? lastStates.get(cwd) ?? new Map();
75
105
  }
76
106
  /** The cached form of {@link prsForBranch}, shared through the same read-through cache (#1028). */
77
107
  export async function cachedPrsForBranch(cwd, branch) {
@@ -86,6 +116,12 @@ const KEY_SEP = String.fromCharCode(0);
86
116
  function prCacheKey(cwd, branch) {
87
117
  return ['pr', cwd, branch ?? ''].join(KEY_SEP);
88
118
  }
119
+ function prStatesCacheKey(cwd) {
120
+ return ['pr-states', cwd].join(KEY_SEP);
121
+ }
122
+ function openPrsCacheKey(cwd) {
123
+ return ['open-prs', cwd].join(KEY_SEP);
124
+ }
89
125
  function branchPrsCacheKey(cwd, branch) {
90
126
  return ['prs', cwd, branch].join(KEY_SEP);
91
127
  }
@@ -134,4 +170,22 @@ export async function openPrs(cwd, gitHost = projectGitHost) {
134
170
  throw new Error(listed.error);
135
171
  return listed.requests.map(openPrOf);
136
172
  }
173
+ /** How old a project's list of open requests may be before it is read again, behind whoever asks. */
174
+ const OPEN_PRS_TTL_MS = 20_000;
175
+ /** How long a first ask of a project's open requests waits for them: the git host answers well within it. */
176
+ const OPEN_PRS_FIRST_MS = 15_000;
177
+ /**
178
+ * The cached form of {@link openPrs} (#1028), for the Human Queue: it asked the git host at every
179
+ * poll of every page that shows it, and the page waited. The first ask waits for the answer; after
180
+ * that the list last read answers at once and is read again behind it once it is
181
+ * {@link OPEN_PRS_TTL_MS} old. A request opened or merged here is read again at once
182
+ * ({@link forgetPr}). A first read that fails rejects, as {@link openPrs} does; a later one keeps
183
+ * the list last read.
184
+ */
185
+ export async function cachedOpenPrs(cwd, read = openPrs) {
186
+ const cached = await cachedRead(openPrsCacheKey(cwd), () => read(cwd), { ttlMs: OPEN_PRS_TTL_MS, budgetMs: OPEN_PRS_FIRST_MS });
187
+ if (cached.value === undefined)
188
+ throw new Error('the open pull requests could not be read');
189
+ return cached.value;
190
+ }
137
191
  //# sourceMappingURL=pull-requests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull-requests.js","sourceRoot":"","sources":["../../src/dashboard/pull-requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-requests.js","sourceRoot":"","sources":["../../src/dashboard/pull-requests.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,15 @@ import type { QuotaSource } from './quota.js';
5
5
  import type { ModelsSource } from './models.js';
6
6
  import type { BridgeBrowserOwner } from '../bridge-browser.js';
7
7
  import type { ProjectErrorsReader } from '../project-errors.js';
8
- import type { AddProjectResult, RemoveProjectResult, StartAgentOptions, StartAgentResult } from './types.js';
8
+ import type { AddProjectResult, RemoveProjectResult, StartAgentOptions, StartAgentResult, StartedInResult } from './types.js';
9
9
  import type { AgentMeta } from '../store/index.js';
10
10
  import type { RemoteTarget } from './remote-run.js';
11
11
  /** Wired by the daemon so `sendStart` can reach the daemon's own `startAgent` closure. */
12
12
  export type StartAgentHandler = (prompt: string, options: StartAgentOptions, projectId?: string) => StartAgentResult | Promise<StartAgentResult>;
13
13
  /** Wired by the daemon so `sendAddProject` can install + register a repo (#433). */
14
14
  export type AddProjectHandler = (path: string, share: boolean) => AddProjectResult | Promise<AddProjectResult>;
15
+ /** Wired by the daemon so `sendStartedAgain` can find or add the project a second `openagent` was started in. */
16
+ export type StartedInHandler = (folder: string) => StartedInResult | Promise<StartedInResult>;
15
17
  /** Wired by the daemon so `sendRemoveProject` can take a project off the list, by its id, and with `files` remove what OpenAgent left in its folder. */
16
18
  export type RemoveProjectHandler = (projectId: string, files: boolean) => RemoveProjectResult | Promise<RemoveProjectResult>;
17
19
  /** Resolve an agent to its live event stream: the relay feeds `onEvents` from its own in-memory stream
@@ -63,6 +65,7 @@ export interface RemoteAgents {
63
65
  export interface DashboardContext {
64
66
  startAgent: StartAgentHandler;
65
67
  addProject: AddProjectHandler;
68
+ startedIn: StartedInHandler;
66
69
  removeProject: RemoveProjectHandler;
67
70
  /** The in-memory event stream for an agent relayed from a saved machine (#1067), else undefined. */
68
71
  eventsSource: EventsSource;