@openagt/dashboard 0.56.0 → 0.57.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 (212) hide show
  1. package/README.md +19 -1
  2. package/dist/built-in.d.ts +9 -0
  3. package/dist/built-in.d.ts.map +1 -1
  4. package/dist/built-in.js +19 -1
  5. package/dist/built-in.js.map +1 -1
  6. package/dist/cli/skills.d.ts +7 -9
  7. package/dist/cli/skills.d.ts.map +1 -1
  8. package/dist/cli/skills.js +25 -22
  9. package/dist/cli/skills.js.map +1 -1
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -1
  14. package/dist/clone-project.d.ts +10 -8
  15. package/dist/clone-project.d.ts.map +1 -1
  16. package/dist/clone-project.js +36 -47
  17. package/dist/clone-project.js.map +1 -1
  18. package/dist/cloud-scratch-refs.d.ts +9 -1
  19. package/dist/cloud-scratch-refs.d.ts.map +1 -1
  20. package/dist/cloud-scratch-refs.js +9 -2
  21. package/dist/cloud-scratch-refs.js.map +1 -1
  22. package/dist/daemon-runtime.d.ts.map +1 -1
  23. package/dist/daemon-runtime.js +37 -5
  24. package/dist/daemon-runtime.js.map +1 -1
  25. package/dist/daemon-services.d.ts.map +1 -1
  26. package/dist/daemon-services.js +4 -2
  27. package/dist/daemon-services.js.map +1 -1
  28. package/dist/daemon.d.ts.map +1 -1
  29. package/dist/daemon.js +7 -0
  30. package/dist/daemon.js.map +1 -1
  31. package/dist/dashboard/copy-logins.d.ts +1 -1
  32. package/dist/dashboard/copy-logins.d.ts.map +1 -1
  33. package/dist/dashboard/copy-logins.js +9 -6
  34. package/dist/dashboard/copy-logins.js.map +1 -1
  35. package/dist/dashboard/git-hosts.d.ts +1 -3
  36. package/dist/dashboard/git-hosts.d.ts.map +1 -1
  37. package/dist/dashboard/git-hosts.js +2 -2
  38. package/dist/dashboard/git-hosts.js.map +1 -1
  39. package/dist/dashboard/logins-sync.d.ts +25 -1
  40. package/dist/dashboard/logins-sync.d.ts.map +1 -1
  41. package/dist/dashboard/logins-sync.js +78 -15
  42. package/dist/dashboard/logins-sync.js.map +1 -1
  43. package/dist/dashboard/overview.d.ts +4 -2
  44. package/dist/dashboard/overview.d.ts.map +1 -1
  45. package/dist/dashboard/overview.js +7 -3
  46. package/dist/dashboard/overview.js.map +1 -1
  47. package/dist/dashboard/person.d.ts +13 -12
  48. package/dist/dashboard/person.d.ts.map +1 -1
  49. package/dist/dashboard/person.js +7 -21
  50. package/dist/dashboard/person.js.map +1 -1
  51. package/dist/dashboard/projects.d.ts.map +1 -1
  52. package/dist/dashboard/projects.js +5 -1
  53. package/dist/dashboard/projects.js.map +1 -1
  54. package/dist/dashboard/repos.d.ts +63 -0
  55. package/dist/dashboard/repos.d.ts.map +1 -0
  56. package/dist/dashboard/repos.js +131 -0
  57. package/dist/dashboard/repos.js.map +1 -0
  58. package/dist/dashboard/send-skills.d.ts +12 -1
  59. package/dist/dashboard/send-skills.d.ts.map +1 -1
  60. package/dist/dashboard/send-skills.js +11 -3
  61. package/dist/dashboard/send-skills.js.map +1 -1
  62. package/dist/dashboard/start-branch.d.ts.map +1 -1
  63. package/dist/dashboard/start-branch.js +5 -3
  64. package/dist/dashboard/start-branch.js.map +1 -1
  65. package/dist/dashboard/types.d.ts +26 -0
  66. package/dist/dashboard/types.d.ts.map +1 -1
  67. package/dist/dashboard-bundle/assets/host/module--PBDa8mk.js +1 -0
  68. package/dist/dashboard-bundle/assets/main-5Ke2be9l.js +152 -0
  69. package/dist/dashboard-bundle/assets/main-D9WdDo5V.css +2 -0
  70. package/dist/dashboard-bundle/assets/module-XkaUkYn0.js +19 -0
  71. package/dist/dashboard-bundle/index.html +4 -4
  72. package/dist/dashboard-rpc/agents.d.ts +64 -0
  73. package/dist/dashboard-rpc/agents.d.ts.map +1 -0
  74. package/dist/dashboard-rpc/agents.js +137 -0
  75. package/dist/dashboard-rpc/agents.js.map +1 -0
  76. package/dist/dashboard-rpc/copied-logins.d.ts +1 -1
  77. package/dist/dashboard-rpc/copied-logins.d.ts.map +1 -1
  78. package/dist/dashboard-rpc/copied-logins.js +7 -7
  79. package/dist/dashboard-rpc/copied-logins.js.map +1 -1
  80. package/dist/dashboard-rpc/hosted-repos.d.ts +42 -0
  81. package/dist/dashboard-rpc/hosted-repos.d.ts.map +1 -0
  82. package/dist/dashboard-rpc/hosted-repos.js +74 -0
  83. package/dist/dashboard-rpc/hosted-repos.js.map +1 -0
  84. package/dist/dashboard-rpc/index.d.ts +3 -2
  85. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  86. package/dist/dashboard-rpc/index.js +5 -3
  87. package/dist/dashboard-rpc/index.js.map +1 -1
  88. package/dist/dashboard-rpc/logins.d.ts +1 -33
  89. package/dist/dashboard-rpc/logins.d.ts.map +1 -1
  90. package/dist/dashboard-rpc/logins.js +3 -51
  91. package/dist/dashboard-rpc/logins.js.map +1 -1
  92. package/dist/dashboard-rpc/modules.d.ts +4 -3
  93. package/dist/dashboard-rpc/modules.d.ts.map +1 -1
  94. package/dist/dashboard-rpc/modules.js +6 -5
  95. package/dist/dashboard-rpc/modules.js.map +1 -1
  96. package/dist/dashboard-rpc/person.d.ts +32 -1
  97. package/dist/dashboard-rpc/person.d.ts.map +1 -1
  98. package/dist/dashboard-rpc/person.js +49 -8
  99. package/dist/dashboard-rpc/person.js.map +1 -1
  100. package/dist/dashboard-rpc/personal-folder.d.ts +19 -2
  101. package/dist/dashboard-rpc/personal-folder.d.ts.map +1 -1
  102. package/dist/dashboard-rpc/personal-folder.js +24 -6
  103. package/dist/dashboard-rpc/personal-folder.js.map +1 -1
  104. package/dist/dashboard-rpc/project-agent-data.d.ts +12 -0
  105. package/dist/dashboard-rpc/project-agent-data.d.ts.map +1 -1
  106. package/dist/dashboard-rpc/project-agent-data.js +17 -2
  107. package/dist/dashboard-rpc/project-agent-data.js.map +1 -1
  108. package/dist/dashboard-rpc/projects.d.ts +62 -6
  109. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  110. package/dist/dashboard-rpc/projects.js +104 -15
  111. package/dist/dashboard-rpc/projects.js.map +1 -1
  112. package/dist/dashboard-rpc/reads.d.ts +1 -1
  113. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  114. package/dist/dashboard-rpc/reads.js +6 -2
  115. package/dist/dashboard-rpc/reads.js.map +1 -1
  116. package/dist/dashboard-rpc/runs-changed.d.ts.map +1 -1
  117. package/dist/dashboard-rpc/runs-changed.js +9 -3
  118. package/dist/dashboard-rpc/runs-changed.js.map +1 -1
  119. package/dist/dashboard-rpc/send-as.d.ts +42 -0
  120. package/dist/dashboard-rpc/send-as.d.ts.map +1 -0
  121. package/dist/dashboard-rpc/send-as.js +78 -0
  122. package/dist/dashboard-rpc/send-as.js.map +1 -0
  123. package/dist/dashboard-rpc/skills.d.ts +2 -1
  124. package/dist/dashboard-rpc/skills.d.ts.map +1 -1
  125. package/dist/dashboard-rpc/skills.js +6 -4
  126. package/dist/dashboard-rpc/skills.js.map +1 -1
  127. package/dist/module-types/dashboard/components/ui/confirm-dialog.d.ts +5 -1
  128. package/dist/module-types/dashboard/components/ui/row-item.d.ts +1 -2
  129. package/dist/module-types/dashboard/lib/route.d.ts +3 -3
  130. package/dist/module-types/dashboard/module/index.d.ts +2 -2
  131. package/dist/module-types/src/built-in.d.ts +9 -0
  132. package/dist/module-types/src/client.d.ts +3 -0
  133. package/dist/module-types/src/clone-project.d.ts +10 -8
  134. package/dist/module-types/src/dashboard/git-hosts.d.ts +1 -3
  135. package/dist/module-types/src/dashboard/logins-sync.d.ts +25 -1
  136. package/dist/module-types/src/dashboard/overview.d.ts +4 -2
  137. package/dist/module-types/src/dashboard/person.d.ts +13 -12
  138. package/dist/module-types/src/dashboard/repos.d.ts +62 -0
  139. package/dist/module-types/src/dashboard/send-skills.d.ts +12 -1
  140. package/dist/module-types/src/dashboard/types.d.ts +26 -0
  141. package/dist/module-types/src/dashboard-rpc/agents.d.ts +63 -0
  142. package/dist/module-types/src/dashboard-rpc/copied-logins.d.ts +1 -1
  143. package/dist/module-types/src/dashboard-rpc/hosted-repos.d.ts +41 -0
  144. package/dist/module-types/src/dashboard-rpc/index.d.ts +3 -2
  145. package/dist/module-types/src/dashboard-rpc/logins.d.ts +1 -33
  146. package/dist/module-types/src/dashboard-rpc/modules.d.ts +4 -3
  147. package/dist/module-types/src/dashboard-rpc/person.d.ts +32 -1
  148. package/dist/module-types/src/dashboard-rpc/personal-folder.d.ts +19 -2
  149. package/dist/module-types/src/dashboard-rpc/project-agent-data.d.ts +12 -0
  150. package/dist/module-types/src/dashboard-rpc/projects.d.ts +62 -6
  151. package/dist/module-types/src/dashboard-rpc/reads.d.ts +1 -1
  152. package/dist/module-types/src/dashboard-rpc/send-as.d.ts +41 -0
  153. package/dist/module-types/src/dashboard-rpc/skills.d.ts +2 -1
  154. package/dist/module-types/src/project-address.d.ts +8 -1
  155. package/dist/module-types/src/project-hooks.d.ts +12 -2
  156. package/dist/module-types/src/project-modules.d.ts +6 -0
  157. package/dist/module-types/src/project-skills/catalogue.d.ts +6 -9
  158. package/dist/module-types/src/registry.d.ts +13 -0
  159. package/dist/module-types/src/store/agent-store.d.ts +14 -0
  160. package/dist/module-types/src/store/branches.d.ts +7 -0
  161. package/dist/module-types/src/store/git-host.d.ts +1 -3
  162. package/dist/module-types/src/typed-repository.d.ts +16 -0
  163. package/dist/project-address.d.ts +8 -1
  164. package/dist/project-address.d.ts.map +1 -1
  165. package/dist/project-address.js +11 -4
  166. package/dist/project-address.js.map +1 -1
  167. package/dist/project-hooks.d.ts +12 -2
  168. package/dist/project-hooks.d.ts.map +1 -1
  169. package/dist/project-hooks.js +9 -2
  170. package/dist/project-hooks.js.map +1 -1
  171. package/dist/project-modules.d.ts +6 -0
  172. package/dist/project-modules.d.ts.map +1 -1
  173. package/dist/project-modules.js +13 -1
  174. package/dist/project-modules.js.map +1 -1
  175. package/dist/project-skills/catalogue.d.ts +6 -9
  176. package/dist/project-skills/catalogue.d.ts.map +1 -1
  177. package/dist/project-skills/catalogue.js +9 -8
  178. package/dist/project-skills/catalogue.js.map +1 -1
  179. package/dist/registry.d.ts +13 -0
  180. package/dist/registry.d.ts.map +1 -1
  181. package/dist/registry.js +43 -2
  182. package/dist/registry.js.map +1 -1
  183. package/dist/sessions-home.d.ts +11 -0
  184. package/dist/sessions-home.d.ts.map +1 -0
  185. package/dist/sessions-home.js +41 -0
  186. package/dist/sessions-home.js.map +1 -0
  187. package/dist/store/agent-store.d.ts +14 -0
  188. package/dist/store/agent-store.d.ts.map +1 -1
  189. package/dist/store/agent-store.js.map +1 -1
  190. package/dist/store/branches.d.ts +7 -0
  191. package/dist/store/branches.d.ts.map +1 -1
  192. package/dist/store/branches.js +37 -2
  193. package/dist/store/branches.js.map +1 -1
  194. package/dist/store/git-host.d.ts +1 -3
  195. package/dist/store/git-host.d.ts.map +1 -1
  196. package/dist/store/git-host.js +0 -14
  197. package/dist/store/git-host.js.map +1 -1
  198. package/dist/typed-repository.d.ts +17 -0
  199. package/dist/typed-repository.d.ts.map +1 -0
  200. package/dist/typed-repository.js +29 -0
  201. package/dist/typed-repository.js.map +1 -0
  202. package/dist/website/assets/entries/{entry-client-routing.C33s8xOY.js → entry-client-routing.CvPemUV2.js} +2 -2
  203. package/dist/website/assets/entries/{pages_go-to-dashboard.C3OBfFYB.js → pages_go-to-dashboard.CUCqKDCh.js} +1 -1
  204. package/dist/website/banner/index.html +1 -1
  205. package/dist/website/go-to-dashboard/index.html +3 -3
  206. package/dist/website/index.html +1 -1
  207. package/dist/website/press/index.html +1 -1
  208. package/package.json +18 -18
  209. package/dist/dashboard-bundle/assets/host/module-BMyNrbiB.js +0 -1
  210. package/dist/dashboard-bundle/assets/main-BK8YIg7v.js +0 -152
  211. package/dist/dashboard-bundle/assets/main-mnNPGbsz.css +0 -2
  212. package/dist/dashboard-bundle/assets/module-DY3Aigsz.js +0 -19
@@ -0,0 +1,42 @@
1
+ import { type GitRunner, type RemoteAccount } from '@openagt/agent-data';
2
+ /** OpenAgent's accounts at one host: what a "Send as" select offers. */
3
+ export interface SendAsHost {
4
+ host: string;
5
+ /** The logins GitHub still takes, by name. */
6
+ logins: string[];
7
+ /** The one runs use, picked first where none is named yet. */
8
+ runs?: string;
9
+ }
10
+ /** OpenAgent's accounts at each host a package answers for. */
11
+ export declare function accountsByHost(): Promise<SendAsHost[]>;
12
+ /** What a repository at `host` keeps to be sent as `login`: what its git host's package says of that account, kept a few minutes. */
13
+ export declare function remoteAccount(host: string, login?: string): Promise<{
14
+ ok: true;
15
+ account: RemoteAccount;
16
+ } | {
17
+ ok: false;
18
+ error: string;
19
+ }>;
20
+ /** The account a repository at a typed address is cloned as: the one runs use at its host; none where OpenAgent has none there. */
21
+ export declare function cloneAccountFor(typed: string): Promise<RemoteAccount | undefined>;
22
+ /** The host the repository at `root` has its origin on; none for no origin, or one in a folder on this disk. */
23
+ export declare function originHost(root: string): Promise<string | undefined>;
24
+ /**
25
+ * The account a repository's own branches are sent as by a press of the person's (the Skills
26
+ * page's Send, the clean-up of Claude Code web's branches): the one kept for it at its Share
27
+ * switch, else the one runs use at its host. Nothing for a remote that is a folder on this disk,
28
+ * which asks no login.
29
+ */
30
+ export declare function originAccountOf(root: string): Promise<{
31
+ ok: true;
32
+ account?: RemoteAccount;
33
+ } | {
34
+ ok: false;
35
+ error: string;
36
+ }>;
37
+ /**
38
+ * git for the repository at `root`, its talks with origin going as {@link originAccountOf} says:
39
+ * never as the person's own login. With no account to go as, those talks are refused in words.
40
+ */
41
+ export declare function originGit(root: string): Promise<GitRunner>;
42
+ //# sourceMappingURL=send-as.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-as.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/send-as.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiF,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AASvJ,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,+DAA+D;AAC/D,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAQ5D;AAOD,qIAAqI;AACrI,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAa9I;AAED,mIAAmI;AACnI,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAOvF;AAED,gHAAgH;AAChH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM1E;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAOjI;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAGhE"}
@@ -0,0 +1,78 @@
1
+ import { accountGit, nodeGitRunner, noAccountSentence, readRemoteAccount, remoteHostOf } from '@openagt/agent-data';
2
+ import { typedRepository } from '../typed-repository.js';
3
+ import { gitHostPackages, onGitHosts } from './logins.js';
4
+ /** OpenAgent's accounts at each host a package answers for. */
5
+ export async function accountsByHost() {
6
+ const { hosts } = await onGitHosts();
7
+ return hosts.flatMap(row => {
8
+ const accounts = row.provider?.accounts.filter(account => account.ok) ?? [];
9
+ if (accounts.length === 0)
10
+ return [];
11
+ const runs = accounts.find(account => account.runs)?.login;
12
+ return [{ host: row.host, logins: accounts.map(account => account.login), ...(runs !== undefined ? { runs } : {}) }];
13
+ });
14
+ }
15
+ /** How long what a host's package said of an account is kept: asking it checks every account with the host. */
16
+ const ACCOUNT_KEEP_MS = 5 * 60_000;
17
+ const knownAccounts = new Map();
18
+ /** What a repository at `host` keeps to be sent as `login`: what its git host's package says of that account, kept a few minutes. */
19
+ export async function remoteAccount(host, login) {
20
+ if (login === undefined)
21
+ return { ok: false, error: `${noAccountSentence(host)}: add one in Permissions › Git hosts.` };
22
+ if (typeof login !== 'string' || !/^\S+$/.test(login))
23
+ return { ok: false, error: `${String(login)} is no account.` };
24
+ const known = knownAccounts.get(`${host}\n${login}`);
25
+ if (known && Date.now() - known.at < ACCOUNT_KEEP_MS)
26
+ return { ok: true, account: known.account };
27
+ const said = await gitHostPackages.run(host, ['git-config', '--user', login]);
28
+ if (!said.ok)
29
+ return said;
30
+ const { login: as, host: at, config } = (said.output ?? {});
31
+ const lines = Array.isArray(config) ? config.filter((line) => Array.isArray(line) && line.length === 2 && typeof line[0] === 'string' && typeof line[1] === 'string') : [];
32
+ if (typeof as !== 'string' || typeof at !== 'string' || lines.length === 0)
33
+ return { ok: false, error: `The package for ${host} gave no way to send as @${login}.` };
34
+ const account = { login: as, host: at, config: lines };
35
+ knownAccounts.set(`${host}\n${login}`, { at: Date.now(), account });
36
+ return { ok: true, account };
37
+ }
38
+ /** The account a repository at a typed address is cloned as: the one runs use at its host; none where OpenAgent has none there. */
39
+ export async function cloneAccountFor(typed) {
40
+ const host = typedRepository(typed)?.address.split('/')[0];
41
+ if (host === undefined)
42
+ return undefined;
43
+ const runs = (await accountsByHost().catch(() => [])).find(row => row.host === host)?.runs;
44
+ if (runs === undefined)
45
+ return undefined;
46
+ const account = await remoteAccount(host, runs);
47
+ return account.ok ? account.account : undefined;
48
+ }
49
+ /** The host the repository at `root` has its origin on; none for no origin, or one in a folder on this disk. */
50
+ export async function originHost(root) {
51
+ const url = await nodeGitRunner()(['remote', 'get-url', 'origin'], root).then(out => out.trim(), () => '');
52
+ return url ? remoteHostOf(url) : undefined;
53
+ }
54
+ /**
55
+ * The account a repository's own branches are sent as by a press of the person's (the Skills
56
+ * page's Send, the clean-up of Claude Code web's branches): the one kept for it at its Share
57
+ * switch, else the one runs use at its host. Nothing for a remote that is a folder on this disk,
58
+ * which asks no login.
59
+ */
60
+ export async function originAccountOf(root) {
61
+ const host = await originHost(root);
62
+ if (host === undefined)
63
+ return { ok: true };
64
+ const kept = await readRemoteAccount(root);
65
+ if (kept)
66
+ return { ok: true, account: kept };
67
+ const runs = (await accountsByHost()).find(row => row.host === host)?.runs;
68
+ return remoteAccount(host, runs);
69
+ }
70
+ /**
71
+ * git for the repository at `root`, its talks with origin going as {@link originAccountOf} says:
72
+ * never as the person's own login. With no account to go as, those talks are refused in words.
73
+ */
74
+ export async function originGit(root) {
75
+ const as = await originAccountOf(root).catch(() => ({ ok: false, error: '' }));
76
+ return accountGit(nodeGitRunner(), as.ok ? as.account : undefined);
77
+ }
78
+ //# sourceMappingURL=send-as.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-as.js","sourceRoot":"","sources":["../../src/dashboard-rpc/send-as.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,6 @@ export interface ProjectSkills {
20
20
  /** The list's groups; `ticked` says whether a group's skills are ticked in a project that has none yet. */
21
21
  groups: {
22
22
  title: string;
23
- ticked: boolean;
24
23
  skills: ProjectSkill[];
25
24
  }[];
26
25
  /** The branch agents start from, by its name: the remote's default branch, else the branch the folder is on. Absent where there is none. */
@@ -40,6 +39,8 @@ export interface ProjectSkills {
40
39
  branch?: string;
41
40
  /** Whether the branch the folder is on has every waiting skill: an agent started from it has them now. */
42
41
  local: boolean;
42
+ /** Every skill the project holds, by name, as a run's checkout has them: the list's, and the project's own; what the launcher's Skills menu offers per session. */
43
+ held: string[];
43
44
  }
44
45
  /** The project's skills; `null` when the project is unknown here. */
45
46
  export declare function onProjectSkills(projectId: string): Promise<ProjectSkills | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/skills.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAEzE,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAM9F,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE;;;;GAIG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAA;IACnB,+HAA+H;IAC/H,QAAQ,EAAE,QAAQ,CAAA;IAClB,wIAAwI;IACxI,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,2GAA2G;IAC3G,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAA;IACpE,4IAA4I;IAC5I,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,sFAAsF;IACtF,GAAG,EAAE,OAAO,CAAA;IACZ,uLAAuL;IACvL,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,0KAA0K;IAC1K,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0GAA0G;IAC1G,KAAK,EAAE,OAAO,CAAA;CACf;AAED,qEAAqE;AACrE,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA2BtF;AAKD,wKAAwK;AACxK,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5D;AAOD,6IAA6I;AAC7I,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/I;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAKhC;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4BtI;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CASrG"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/skills.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAEzE,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAO9F,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE;;;;GAIG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAA;IACnB,+HAA+H;IAC/H,QAAQ,EAAE,QAAQ,CAAA;IAClB,wIAAwI;IACxI,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,2GAA2G;IAC3G,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAA;IACnD,4IAA4I;IAC5I,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,sFAAsF;IACtF,GAAG,EAAE,OAAO,CAAA;IACZ,uLAAuL;IACvL,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,0KAA0K;IAC1K,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0GAA0G;IAC1G,KAAK,EAAE,OAAO,CAAA;IACd,mKAAmK;IACnK,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,qEAAqE;AACrE,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA2BtF;AAKD,wKAAwK;AACxK,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5D;AAOD,6IAA6I;AAC7I,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/I;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAKhC;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4BtI;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CASrG"}
@@ -1,4 +1,5 @@
1
1
  import { nodeGitRunner } from '@openagt/agent-data';
2
+ import { projectSkillNames } from '@openagt/agent-runner';
2
3
  import { skillsOn, uncommittedSkills } from '../project-skills/branch.js';
3
4
  import { carriedSkills, GROUPS } from '../project-skills/catalogue.js';
4
5
  import { applyChange, isKnown } from '../project-skills/change.js';
@@ -9,12 +10,13 @@ import { waitingSkills } from '../dashboard/start-branch.js';
9
10
  import { readProjectHooks, runProjectHooks } from '../project-hooks.js';
10
11
  import { providedDataChanged } from '../store/provided.js';
11
12
  import { resolveProjectPath } from './context.js';
13
+ import { originAccountOf } from './send-as.js';
12
14
  /** The project's skills; `null` when the project is unknown here. */
13
15
  export async function onProjectSkills(projectId) {
14
16
  const cwd = await resolveProjectPath(projectId);
15
17
  if (!cwd)
16
18
  return null;
17
- const [state, carried] = await Promise.all([readProject(cwd), carriedSkills()]);
19
+ const [state, carried, held] = await Promise.all([readProject(cwd), carriedSkills(), projectSkillNames(cwd)]);
18
20
  const standing = new Map(state.skills.map(skill => [skill.name, skill.standing]));
19
21
  const { start, waiting } = await waitingSkills(cwd, state.skills.filter(skill => skill.standing !== 'absent').map(skill => skill.name));
20
22
  const uncommitted = state.git ? await uncommittedSkills(cwd) : [];
@@ -27,7 +29,6 @@ export async function onProjectSkills(projectId) {
27
29
  return {
28
30
  groups: GROUPS.map(group => ({
29
31
  title: group.title,
30
- ticked: group.ticked,
31
32
  skills: group.skills.map(name => ({ name, description: carried.get(name).description, standing: standing.get(name) ?? 'absent', waiting: waiting.has(name) })),
32
33
  })),
33
34
  ...(start ? { startBranch: start.name } : {}),
@@ -37,6 +38,7 @@ export async function onProjectSkills(projectId) {
37
38
  ...(open ? { request: open } : {}),
38
39
  ...(pushed && [...waiting.keys()].every(name => pushed.has(name)) ? { branch: SKILLS_BRANCH } : {}),
39
40
  local: waiting.size > 0 && uncommitted.length === 0 && [...waiting.values()].every(skill => skill.here),
41
+ held,
40
42
  };
41
43
  }
42
44
  /** The git hosts a person knows by name, by their address. */
@@ -107,9 +109,9 @@ export async function sendProjectSkills(projectId, only) {
107
109
  if (!named)
108
110
  return { ok: false, error: 'not a list of skills' };
109
111
  if (named.length > 0)
110
- return sendSkills(cwd, named);
112
+ return sendSkills(cwd, named, { pushAccount: originAccountOf });
111
113
  const skills = await onProjectSkills(projectId);
112
114
  const due = skills ? [...new Set([...skills.uncommitted, ...skills.groups.flatMap(group => group.skills).filter(skill => skill.waiting).map(skill => skill.name)])] : [];
113
- return sendSkills(cwd, due);
115
+ return sendSkills(cwd, due, { pushAccount: originAccountOf });
114
116
  }
115
117
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/dashboard-rpc/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAiB,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAyB,MAAM,6BAA6B,CAAA;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAwCjD,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACvI,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,+FAA+F;IAC/F,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACzI,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,8GAA8G;IAC9G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,uBAAuB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChK,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,WAAW;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,KAAK,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KACxG,CAAA;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,KAAK,GAA2B,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,CAAA;AAElJ,wKAAwK;AACxK,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,wGAAwG;IACxG,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;IACpK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACjD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3F,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAA;AAC1C,CAAC;AAOD,kFAAkF;AAClF,MAAM,KAAK,GAAG,CAAC,KAAc,EAAwB,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAEzN;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,MAA+C;IACvG,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAA;IACtF,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;QAC/E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACzD,mBAAmB,CAAC,GAAG,CAAC,CAAA;QACxB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,8HAA8H;QAC9H,IAAI,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAC9E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YACvH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAE,KAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtI,GAAG,CAAC,SAAS,IAAI,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAe;IACxE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAA;IACtF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACnD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACxK,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/dashboard-rpc/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAiB,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAyB,MAAM,6BAA6B,CAAA;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AA0C9C,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC7G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACvI,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,+FAA+F;IAC/F,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACzI,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,8GAA8G;IAC9G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,uBAAuB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChK,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,WAAW;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,KAAK,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QACvG,IAAI;KACL,CAAA;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,KAAK,GAA2B,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,CAAA;AAElJ,wKAAwK;AACxK,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC9B,wGAAwG;IACxG,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;IACpK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACjD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3F,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAA;AAC1C,CAAC;AAOD,kFAAkF;AAClF,MAAM,KAAK,GAAG,CAAC,KAAc,EAAwB,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAEzN;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,MAA+C;IACvG,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAA;IACtF,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAA;QAC/E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACzD,mBAAmB,CAAC,GAAG,CAAC,CAAA;QACxB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,8HAA8H;QAC9H,IAAI,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAC9E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YACvH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAE,KAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtI,GAAG,CAAC,SAAS,IAAI,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAe;IACxE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAA;IACtF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACxK,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAA;AAC/D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- export declare function ConfirmDialog({ trigger, open: controlledOpen, onOpenChange, title, body, confirmLabel, confirmBusyLabel, onConfirm, onSuccess, fallbackError, destructive, }: {
2
+ export declare function ConfirmDialog({ trigger, open: controlledOpen, onOpenChange, title, body, confirmLabel, confirmBusyLabel, onConfirm, onSuccess, fallbackError, destructive, extra, confirmDisabled, }: {
3
3
  /** The control that opens the dialog (an icon button). Omit when driving `open` yourself — e.g.
4
4
  * opening from a menu item, where the menu closes on click and cannot also be the trigger. */
5
5
  trigger?: ReactNode;
@@ -17,4 +17,8 @@ export declare function ConfirmDialog({ trigger, open: controlledOpen, onOpenCha
17
17
  onSuccess?: () => void;
18
18
  fallbackError?: string;
19
19
  destructive?: boolean;
20
+ /** A pick the confirm goes with, under the body: the account a push goes as. */
21
+ extra?: ReactNode;
22
+ /** The confirm cannot go yet: what `extra` asks for is missing. */
23
+ confirmDisabled?: boolean;
20
24
  }): import("react").JSX.Element;
@@ -11,9 +11,8 @@ export declare const rowLeftClass = "flex min-w-0 flex-1 items-center gap-0.5 ma
11
11
  * and no wrap, so a name that lands late moves nothing; the later items give way first, each cut
12
12
  * short, and on a phone the row scrolls sideways, its right edge faded to say so.
13
13
  */
14
- export declare function RowAboveBox({ children, end }: {
14
+ export declare function RowAboveBox({ children }: {
15
15
  children: ReactNode;
16
- end?: ReactNode;
17
16
  }): import("react").JSX.Element;
18
17
  /**
19
18
  * A disabled row button and what its hover says. A disabled button takes no pointer, so the hover
@@ -11,9 +11,9 @@ export interface Route {
11
11
  * under Devices): what a link from elsewhere on the page opens. Carried as `&item=<it>`.
12
12
  */
13
13
  settingsItem?: string;
14
- /** The project whose agent or "New agent" page shows, by id; null for an Overview and a module's page. */
14
+ /** The project whose agent or "New agent session" page shows, by id; null for an Overview and a module's page. */
15
15
  projectId: string | null;
16
- /** The selected agent, or null for the project's "New agent" page. */
16
+ /** The selected agent, or null for the project's "New agent session" page. */
17
17
  agentId: string | null;
18
18
  /** A module's page (#1774), by its segment; no project's own page shows there. */
19
19
  page?: string;
@@ -21,7 +21,7 @@ export interface Route {
21
21
  pagePath?: string[];
22
22
  /**
23
23
  * The one project every page shows (#1513), by id; absent when every project shows. It is the
24
- * project the address starts with. On a project's agent and "New agent" pages it is that
24
+ * project the address starts with. On a project's agent and "New agent session" pages it is that
25
25
  * project, or absent when `?all` is there: never another one.
26
26
  */
27
27
  scope?: string;
@@ -443,7 +443,7 @@ export interface ModuleHost {
443
443
  machinePerson(machineId: string): Promise<ModuleMachinePerson>;
444
444
  /**
445
445
  * A saved server of the person's uses this computer's logins from now on: each account this
446
- * computer is logged in to gets a login of the server's own there, as Settings › Accounts says.
446
+ * computer is logged in to gets a login of the server's own there, as the Permissions page says.
447
447
  */
448
448
  useLoginsOn(machineId: string): Promise<MachineAdded>;
449
449
  /**
@@ -453,7 +453,7 @@ export interface ModuleHost {
453
453
  machineAccounts(machineId: string, agent: ModuleAccountsAgent): Promise<ModuleMachineAccount[] | null>;
454
454
  /**
455
455
  * Take one of them off the machine, by its id there, as its own page does: its runs no longer use
456
- * it. One this computer handed the machine, this computer offers it again (Settings › Accounts).
456
+ * it. One this computer handed the machine, this computer offers it again (the Permissions page).
457
457
  */
458
458
  removeMachineAccount(machineId: string, agent: ModuleAccountsAgent, id: string): Promise<MachineAdded>;
459
459
  /** Take one of that person's devices out at the machine, by its id there; answers as {@link machinePerson} does, after. */
@@ -11,6 +11,13 @@ import { type ProjectPackage, type ProvidedCommand, type ProvidedCommandLookup }
11
11
  */
12
12
  /** The packages every project has: an agent cannot start, be shown or be put on a git host without them. */
13
13
  export declare const BUILT_IN_PACKAGES: readonly string[];
14
+ /**
15
+ * Of the packages every project has, the ones whose pages and cards a project shows only once it
16
+ * picked their skill, by the rule of {@link PICKED_PACKAGES}. The logs package keeps every run's
17
+ * records, which the Log lists, so every project has it and its commands; its Logs page is a pick
18
+ * like any other skill's.
19
+ */
20
+ export declare const PICKED_PAGES: readonly string[];
14
21
  /**
15
22
  * The packages that are this computer's and no project's: the door to it, the servers it
16
23
  * installed OpenAgent on, and the accounts its runs use. Their pages show and their commands run with no project added, and
@@ -37,6 +44,8 @@ export declare function builtInPackages(): Promise<ProjectPackage[]>;
37
44
  * the computer's: no project has those.
38
45
  */
39
46
  export declare function builtInPackagesOf(root: string): Promise<ProjectPackage[]>;
47
+ /** Whether the project at `root` shows the pages and cards of `name`, one of the packages it has: always, but for one of {@link PICKED_PAGES} it did not pick. */
48
+ export declare function showsPages(root: string, name: string): Promise<boolean>;
40
49
  /** The project's own installed packages, less the names OpenAgent brings itself. */
41
50
  export declare function ownPackages(root: string): Promise<ProjectPackage[]>;
42
51
  /**
@@ -1,5 +1,7 @@
1
1
  export { DRIVERS, DRIVER_LABELS, isDriverName, driverFromImpl, type DriverName } from './driver-names.js';
2
2
  export { PUBLISH_LABELS, isPublishPick, offeredPublishPicks, publishPickIn, type PublishPick } from './publish-levels.js';
3
+ /** The default agent's id: the agent a run is on when none is picked (`agent-data`'s `agents.ts`). */
4
+ export declare const DEFAULT_AGENT = "default";
3
5
  export { formatOpenAgentEvent } from './terminal.js';
4
6
  export { ACCENTS, DEFAULT_ACCENT_LABELS, accentOf, CODE_FONTS, DOCUMENT_FONTS, FONTS, PALETTES, PALETTE_LABELS, type Accent, type CodeFont, type DocumentFont, type Font, type Palette } from './appearance.js';
5
7
  export { runName } from './run-name.js';
@@ -7,6 +9,7 @@ export { foldScreenRows } from './screens.js';
7
9
  export { formatBytes } from './format-bytes.js';
8
10
  export { errorMessage } from './error-message.js';
9
11
  export { publishedBase } from '@openagt/agent-data/names';
12
+ export { typedRepository, type TypedRepository } from './typed-repository.js';
10
13
  export { pickedIds } from './events.js';
11
14
  export { sessionInfo, agentErrors, type SessionInfo, type AgentError, } from './agent-view.js';
12
15
  export { pendingChoices } from './open-choices.js';
@@ -1,3 +1,4 @@
1
+ import { type RemoteAccount } from '@openagt/agent-data';
1
2
  /**
2
3
  * A project added by its repository's address, for a computer that does not have its folder: a
3
4
  * server that was just connected has no screen to pick a folder on and no folder to pick. The
@@ -5,8 +6,11 @@
5
6
  * and that folder is then added like any other. Nothing is asked about where: the page says
6
7
  * where it went.
7
8
  *
8
- * git clones with the logins this computer has (its credential helper, its SSH keys) and is
9
- * never let ask a person for one: a repository it cannot read is refused in words.
9
+ * git clones as one of OpenAgent's accounts at the repository's host (`account`), never with the
10
+ * person's own logins: their credential helpers are dropped, and an SSH address, which would use
11
+ * their own key, is refused unless the account's settings take it over the web. With no account
12
+ * there, only a public repository can be cloned. git is never let ask a person for a login: a
13
+ * repository it cannot read is refused in words.
10
14
  */
11
15
  /** Where a repository is cloned from and to. */
12
16
  export interface CloneTarget {
@@ -18,10 +22,8 @@ export interface CloneTarget {
18
22
  path: string;
19
23
  }
20
24
  /**
21
- * Read what a person typed as a repository's address: `github.com/you/shop`, the same with
22
- * `https://` before it, `ssh://git@github.com/you/shop.git`, or `git@github.com:you/shop.git`.
23
- * Undefined for anything else: a folder on this disk, another kind of address, a name that could
24
- * be read as an option or lead out of the folder projects are cloned into.
25
+ * Where what a person typed would be cloned to: `~/projects/<its name>`, in the home of the user
26
+ * OpenAgent runs as. Undefined wherever {@link typedRepository} is.
25
27
  */
26
28
  export declare function cloneTarget(typed: string, home?: string): CloneTarget | undefined;
27
29
  /** How a clone went: the folder the project is in, and whether it was cloned now or was already there. */
@@ -55,8 +57,8 @@ export interface CloneOptions {
55
57
  run?: CloneRunner;
56
58
  env?: NodeJS.ProcessEnv;
57
59
  timeoutMs?: number;
58
- /** The person's own way to SSH for git, when they set one; read off git's settings when unsaid. */
59
- sshCommand?: (env: NodeJS.ProcessEnv) => Promise<string | undefined>;
60
+ /** The account of OpenAgent's the repository is read as: its git settings. None: no login at all. */
61
+ account?: RemoteAccount;
60
62
  }
61
63
  /**
62
64
  * Clone the repository a person typed the address of into `~/projects/<its name>`. A folder that
@@ -1,8 +1,6 @@
1
- /** An account the git host's tool knows, as its package said it. */
1
+ /** One of OpenAgent's own accounts on the git host, as its package said it. */
2
2
  export interface GitHostAccount {
3
3
  login: string;
4
- /** The terminal's: the one the tool uses when not told which. */
5
- terminal: boolean;
6
4
  /** The one OpenAgent's runs use. */
7
5
  runs: boolean;
8
6
  /** Whether the tool could use it when asked. */
@@ -21,6 +21,10 @@ import { type CopiedKind, type UsageWindow } from './copied-logins.js';
21
21
  *
22
22
  * The person's settings follow the same way: what they change here is changed there, the next
23
23
  * minute. A setting changed on the server's own page stays, until the same one changes here.
24
+ *
25
+ * An agent's GitHub account (Rom's design: an agent is the same on every device) goes further:
26
+ * to every saved device of the person's, server or not, told to use this computer's logins or
27
+ * not, as soon as the agent is saved and every minute after. A git host's token goes as it is.
24
28
  */
25
29
  /** One of this computer's accounts, as a server gets it. */
26
30
  export interface LocalLogin {
@@ -97,6 +101,8 @@ export declare const syncWiring: {
97
101
  }>;
98
102
  /** This computer's own logins. */
99
103
  local: () => Promise<LocalLogin[]>;
104
+ /** The GitHub logins the agents name. */
105
+ agentLogins: () => Promise<string[]>;
100
106
  /** How full each of this computer's accounts is, as its own page reads it. */
101
107
  usage: () => Promise<{
102
108
  kind: CopiedKind;
@@ -119,8 +125,26 @@ export declare function claudeOwnAccount(env?: NodeJS.ProcessEnv): {
119
125
  } | undefined;
120
126
  /** Every account this computer is logged in to: its coding agents' and its git hosts'. */
121
127
  export declare function localLogins(env?: NodeJS.ProcessEnv): Promise<LocalLogin[]>;
122
- /** Bring every server that uses this computer's logins up to them, and note how each stands; a saved machine that is no server of the person's is left out. */
128
+ /** How an agent's GitHub accounts stand on one device of the person's. */
129
+ export interface AgentLoginsOn {
130
+ machineId: string;
131
+ label: string;
132
+ /** It answered when last asked; not reached, the states are as last read. */
133
+ reachable: boolean;
134
+ /** By login: there, or why it did not get there. */
135
+ github: Record<string, {
136
+ state: 'there' | 'failed';
137
+ error?: string;
138
+ }>;
139
+ }
140
+ /**
141
+ * Bring every server that uses this computer's logins up to them, and every device of the
142
+ * person's up to the GitHub accounts the agents name; note how each stands. A saved machine that
143
+ * is no server of the person's is left out of the servers' list.
144
+ */
123
145
  export declare function syncLogins(): Promise<ServerLogins[]>;
146
+ /** How the agents' GitHub accounts stand on each device of the person's, as last read: read anew when none were read yet. */
147
+ export declare function agentLoginsOn(): Promise<AgentLoginsOn[]>;
124
148
  /** The servers as last read, with the press under way on each: read anew when none were read yet. */
125
149
  export declare function serverLogins(): Promise<ServerLogins[]>;
126
150
  /**
@@ -46,7 +46,7 @@ export interface Overview {
46
46
  /** The most recently active projects (capped). */
47
47
  recent: RecentProject[];
48
48
  }
49
- /** One recent session, tagged with the project it belongs to, for the cross-project rail. */
49
+ /** One recent session, tagged with the project it belongs to, for the cross-project rail; a session with no project is tagged {@link SESSIONS_ID}, with no name. */
50
50
  export interface RecentAgent {
51
51
  projectId: string;
52
52
  projectName: string;
@@ -56,9 +56,11 @@ export interface RecentAgent {
56
56
  export interface RecentAgentsDeps {
57
57
  /** A project's runs: off its folder for one of this computer's, as its computer says them for another's. */
58
58
  agents?: (project: ProjectSummary) => Promise<AgentMeta[]>;
59
+ /** The sessions with no project; none when absent. */
60
+ sessions?: () => Promise<AgentMeta[]>;
59
61
  }
60
62
  /**
61
- * Every project's sessions pooled and sorted newest-first (capped), so the shared sidebar (#shared-
63
+ * Every project's sessions, and the sessions with no project, pooled and sorted newest-first (capped), so the shared sidebar (#shared-
62
64
  * shell) can show recents on the home/Overview where no single project is selected. Each row carries
63
65
  * the project it belongs to, so selecting it jumps into that project's session. Forgiving — a project
64
66
  * whose agents cannot be read simply contributes nothing.
@@ -1,17 +1,19 @@
1
- import { type GitHostFor } from '../store/git-host.js';
1
+ import { type PersonRecord } from '@openagt/agent-data';
2
2
  /**
3
- * The person at this dashboard, as the foot of its sidebar shows them: a name, and a picture
4
- * where a git host knows one. The name is git's own `user.name`, the one every commit of theirs
5
- * carries, else the git host's name for them, else their login there, else this computer's user.
6
- * The picture is asked of the git host of the first project that has one: OpenAgent names no git
7
- * host, so a project's own package answers (`me`).
3
+ * The person at this dashboard, as the foot of its sidebar shows them: their name, and a picture
4
+ * when they have one. Both are the person's own (`person.json` in the personal folder, the same on
5
+ * every computer of theirs): what they typed in Settings, or copied once from a GitHub profile.
6
+ * With none set, the name is git's own `user.name`, else this computer's user, and no picture;
7
+ * no git host is ever asked.
8
8
  */
9
9
  export interface Person {
10
10
  name: string;
11
- /** Their login at the git host, when one answered. */
12
- login?: string;
13
11
  /** A picture of them: an https address. */
14
12
  avatar?: string;
13
+ /** The GitHub login the name and picture were copied from. */
14
+ github?: string;
15
+ /** Whether the person set their name in OpenAgent, rather than it being the computer's. */
16
+ own?: true;
15
17
  }
16
18
  /**
17
19
  * Who a call came from, when the door in front of OpenAgent says (the devices package): the name
@@ -27,9 +29,8 @@ export declare function callerAtPage(): string | undefined;
27
29
  export declare const CALLER_ENV = "OPENAGENT_CALLER";
28
30
  /** The person at the page: the one this computer knows, or, for a call another person's device made, that person by their name. */
29
31
  export declare function personAtPage(own: Person, name?: string | undefined): Person;
30
- /** `projects` are the listed projects' folders, in the list's order. */
31
- export declare function readPerson(deps: {
32
- projects: () => Promise<string[]>;
32
+ /** The person this computer's OpenAgent knows: their own record, else git's name or this computer's user. */
33
+ export declare function readPerson(deps?: {
34
+ record?: () => Promise<PersonRecord | undefined>;
33
35
  gitName?: () => Promise<string | undefined>;
34
- gitHost?: GitHostFor;
35
36
  }): Promise<Person>;
@@ -0,0 +1,62 @@
1
+ /** A Git repository found on this computer. */
2
+ export interface FoundRepo {
3
+ /** Its folder, absolute. */
4
+ path: string;
5
+ /** The folder's name. */
6
+ name: string;
7
+ /** Its `origin` remote's address, when it has one. */
8
+ url?: string;
9
+ }
10
+ /** How far into a folder the crawl goes: `~/Projects/org/repo` is 3 deep. */
11
+ export declare const CRAWL_DEPTH = 4;
12
+ /** The crawl's strict limit: past it, what was found is the list. */
13
+ export declare const CRAWL_LIMIT_MS = 2000;
14
+ /** How old the kept list may be before a read crawls again, in the background. */
15
+ export declare const REPOS_MAX_AGE_MS = 60000;
16
+ /** The fs a crawl reads through, so a test can count and slow its reads. */
17
+ export interface CrawlFs {
18
+ /** The folder's entries, with whether each is a folder; a folder that cannot be read has none. */
19
+ entries(path: string): Promise<{
20
+ name: string;
21
+ directory: boolean;
22
+ }[]>;
23
+ /** A file's text, or undefined when it cannot be read. */
24
+ read(path: string): Promise<string | undefined>;
25
+ }
26
+ /** The {@link CrawlFs} of this computer's disk. A link is not followed: its folder is found where it is. */
27
+ export declare function nodeCrawlFs(): CrawlFs;
28
+ /** The `url` of `[remote "origin"]` in a repository's `.git/config`; undefined when it has none. */
29
+ export declare function originUrlOf(config: string): string | undefined;
30
+ /** What a crawl is told: where to look, and how far and how long. */
31
+ export interface CrawlOptions {
32
+ depth?: number;
33
+ limitMs?: number;
34
+ fs?: CrawlFs;
35
+ now?: () => number;
36
+ }
37
+ /**
38
+ * The repositories under `roots`, each found once, by name. A root that is itself a
39
+ * repository is one, and is still looked through: a home folder can be a repository of its own
40
+ * settings. Any other folder with a `.git` (a folder, or a worktree's file) is a repository, and the
41
+ * crawl goes no further into it. The crawl reads a level of folders at once, and stops when the
42
+ * time is up, between reads: what it found until then is the answer.
43
+ */
44
+ export declare function crawlRepos(roots: readonly string[], options?: CrawlOptions): Promise<FoundRepo[]>;
45
+ /** The kept repo list and how it is read again. */
46
+ export interface RepoIndex {
47
+ /** The repos as last found: the first read waits on a crawl, a read of an old list crawls again in the background. */
48
+ read(): Promise<FoundRepo[]>;
49
+ /** Crawl now, and answer what this crawl found: after a folder is added. */
50
+ refresh(): Promise<FoundRepo[]>;
51
+ }
52
+ /** A {@link RepoIndex} over the folders `roots` names when a crawl starts. */
53
+ export declare function repoIndex(roots: () => Promise<string[]>, options?: {
54
+ crawl?: (roots: string[]) => Promise<FoundRepo[]>;
55
+ now?: () => number;
56
+ maxAgeMs?: number;
57
+ }): RepoIndex;
58
+ /**
59
+ * This computer's repos: one list for the daemon, started at its boot. It looks in the home folder
60
+ * and in the folders the person added (`repoFolders` in the registry).
61
+ */
62
+ export declare function thisComputersRepos(): RepoIndex;
@@ -1,4 +1,4 @@
1
- import { type GitRunner } from '@openagt/agent-data';
1
+ import { type GitRunner, type RemoteAccount } from '@openagt/agent-data';
2
2
  import { type GitHostFor } from '../store/git-host.js';
3
3
  /**
4
4
  * A project's skills sent to where its agents start from (#2023): what "Save and send" and "Send"
@@ -11,6 +11,10 @@ import { type GitHostFor } from '../store/git-host.js';
11
11
  * Nothing else the person has is pushed: the folder's branch is pushed as it is only when it is the
12
12
  * default branch and holds nothing past the remote's but skill files; else the skills' files are
13
13
  * written onto the remote's branch in a commit of their own, made without touching the folder.
14
+ *
15
+ * The remote is talked with as one of OpenAgent's accounts (`pushAccount`, the one kept at the
16
+ * project's Share switch, else the one runs use), never as the person's own login: with none,
17
+ * nothing is sent and the reason is said.
14
18
  */
15
19
  /** The branch the skills go to when the default branch takes no push: one, so a second send updates the open pull request. */
16
20
  export declare const SKILLS_BRANCH = "openagent/skills";
@@ -47,4 +51,11 @@ export type SendSkillsResult =
47
51
  export declare function sendSkills(cwd: string, names: readonly string[], deps?: {
48
52
  git?: GitRunner;
49
53
  gitHost?: GitHostFor;
54
+ pushAccount?: (cwd: string) => Promise<{
55
+ ok: true;
56
+ account?: RemoteAccount;
57
+ } | {
58
+ ok: false;
59
+ error: string;
60
+ }>;
50
61
  }): Promise<SendSkillsResult>;