@openagt/dashboard 0.56.0 → 0.58.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 (223) 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 +3 -3
  36. package/dist/dashboard/git-hosts.d.ts.map +1 -1
  37. package/dist/dashboard/git-hosts.js +3 -2
  38. package/dist/dashboard/git-hosts.js.map +1 -1
  39. package/dist/dashboard/index.d.ts +1 -1
  40. package/dist/dashboard/index.d.ts.map +1 -1
  41. package/dist/dashboard/logins-sync.d.ts +25 -1
  42. package/dist/dashboard/logins-sync.d.ts.map +1 -1
  43. package/dist/dashboard/logins-sync.js +78 -15
  44. package/dist/dashboard/logins-sync.js.map +1 -1
  45. package/dist/dashboard/overview.d.ts +4 -2
  46. package/dist/dashboard/overview.d.ts.map +1 -1
  47. package/dist/dashboard/overview.js +7 -3
  48. package/dist/dashboard/overview.js.map +1 -1
  49. package/dist/dashboard/person.d.ts +13 -12
  50. package/dist/dashboard/person.d.ts.map +1 -1
  51. package/dist/dashboard/person.js +7 -21
  52. package/dist/dashboard/person.js.map +1 -1
  53. package/dist/dashboard/projects.d.ts.map +1 -1
  54. package/dist/dashboard/projects.js +5 -1
  55. package/dist/dashboard/projects.js.map +1 -1
  56. package/dist/dashboard/repos.d.ts +75 -0
  57. package/dist/dashboard/repos.d.ts.map +1 -0
  58. package/dist/dashboard/repos.js +142 -0
  59. package/dist/dashboard/repos.js.map +1 -0
  60. package/dist/dashboard/send-skills.d.ts +12 -1
  61. package/dist/dashboard/send-skills.d.ts.map +1 -1
  62. package/dist/dashboard/send-skills.js +11 -3
  63. package/dist/dashboard/send-skills.js.map +1 -1
  64. package/dist/dashboard/start-branch.d.ts.map +1 -1
  65. package/dist/dashboard/start-branch.js +5 -3
  66. package/dist/dashboard/start-branch.js.map +1 -1
  67. package/dist/dashboard/types.d.ts +26 -15
  68. package/dist/dashboard/types.d.ts.map +1 -1
  69. package/dist/dashboard-bundle/assets/host/module-Jq6JDNSB.js +1 -0
  70. package/dist/dashboard-bundle/assets/main-BIyFp6td.js +152 -0
  71. package/dist/dashboard-bundle/assets/main-C_ohUWaY.css +2 -0
  72. package/dist/dashboard-bundle/assets/module-Cqcyno9w.js +19 -0
  73. package/dist/dashboard-bundle/index.html +19 -4
  74. package/dist/dashboard-rpc/agents.d.ts +64 -0
  75. package/dist/dashboard-rpc/agents.d.ts.map +1 -0
  76. package/dist/dashboard-rpc/agents.js +137 -0
  77. package/dist/dashboard-rpc/agents.js.map +1 -0
  78. package/dist/dashboard-rpc/backup.d.ts +36 -0
  79. package/dist/dashboard-rpc/backup.d.ts.map +1 -0
  80. package/dist/dashboard-rpc/backup.js +62 -0
  81. package/dist/dashboard-rpc/backup.js.map +1 -0
  82. package/dist/dashboard-rpc/copied-logins.d.ts +1 -1
  83. package/dist/dashboard-rpc/copied-logins.d.ts.map +1 -1
  84. package/dist/dashboard-rpc/copied-logins.js +7 -7
  85. package/dist/dashboard-rpc/copied-logins.js.map +1 -1
  86. package/dist/dashboard-rpc/hosted-repos.d.ts +42 -0
  87. package/dist/dashboard-rpc/hosted-repos.d.ts.map +1 -0
  88. package/dist/dashboard-rpc/hosted-repos.js +74 -0
  89. package/dist/dashboard-rpc/hosted-repos.js.map +1 -0
  90. package/dist/dashboard-rpc/index.d.ts +3 -2
  91. package/dist/dashboard-rpc/index.d.ts.map +1 -1
  92. package/dist/dashboard-rpc/index.js +6 -3
  93. package/dist/dashboard-rpc/index.js.map +1 -1
  94. package/dist/dashboard-rpc/logins.d.ts +3 -33
  95. package/dist/dashboard-rpc/logins.d.ts.map +1 -1
  96. package/dist/dashboard-rpc/logins.js +8 -51
  97. package/dist/dashboard-rpc/logins.js.map +1 -1
  98. package/dist/dashboard-rpc/modules.d.ts +4 -3
  99. package/dist/dashboard-rpc/modules.d.ts.map +1 -1
  100. package/dist/dashboard-rpc/modules.js +6 -5
  101. package/dist/dashboard-rpc/modules.js.map +1 -1
  102. package/dist/dashboard-rpc/person.d.ts +34 -1
  103. package/dist/dashboard-rpc/person.d.ts.map +1 -1
  104. package/dist/dashboard-rpc/person.js +49 -8
  105. package/dist/dashboard-rpc/person.js.map +1 -1
  106. package/dist/dashboard-rpc/personal-folder.d.ts +19 -2
  107. package/dist/dashboard-rpc/personal-folder.d.ts.map +1 -1
  108. package/dist/dashboard-rpc/personal-folder.js +24 -6
  109. package/dist/dashboard-rpc/personal-folder.js.map +1 -1
  110. package/dist/dashboard-rpc/project-agent-data.d.ts +12 -0
  111. package/dist/dashboard-rpc/project-agent-data.d.ts.map +1 -1
  112. package/dist/dashboard-rpc/project-agent-data.js +17 -2
  113. package/dist/dashboard-rpc/project-agent-data.js.map +1 -1
  114. package/dist/dashboard-rpc/projects.d.ts +63 -10
  115. package/dist/dashboard-rpc/projects.d.ts.map +1 -1
  116. package/dist/dashboard-rpc/projects.js +103 -23
  117. package/dist/dashboard-rpc/projects.js.map +1 -1
  118. package/dist/dashboard-rpc/reads.d.ts +1 -1
  119. package/dist/dashboard-rpc/reads.d.ts.map +1 -1
  120. package/dist/dashboard-rpc/reads.js +6 -2
  121. package/dist/dashboard-rpc/reads.js.map +1 -1
  122. package/dist/dashboard-rpc/runs-changed.d.ts.map +1 -1
  123. package/dist/dashboard-rpc/runs-changed.js +9 -3
  124. package/dist/dashboard-rpc/runs-changed.js.map +1 -1
  125. package/dist/dashboard-rpc/send-as.d.ts +42 -0
  126. package/dist/dashboard-rpc/send-as.d.ts.map +1 -0
  127. package/dist/dashboard-rpc/send-as.js +78 -0
  128. package/dist/dashboard-rpc/send-as.js.map +1 -0
  129. package/dist/dashboard-rpc/skills.d.ts +2 -1
  130. package/dist/dashboard-rpc/skills.d.ts.map +1 -1
  131. package/dist/dashboard-rpc/skills.js +6 -4
  132. package/dist/dashboard-rpc/skills.js.map +1 -1
  133. package/dist/index.d.ts +1 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/module-types/dashboard/components/ui/confirm-dialog.d.ts +5 -1
  136. package/dist/module-types/dashboard/components/ui/popup-placement.d.ts +5 -0
  137. package/dist/module-types/dashboard/components/ui/row-item.d.ts +1 -2
  138. package/dist/module-types/dashboard/lib/route.d.ts +3 -3
  139. package/dist/module-types/dashboard/module/index.d.ts +18 -3
  140. package/dist/module-types/src/built-in.d.ts +9 -0
  141. package/dist/module-types/src/client.d.ts +3 -0
  142. package/dist/module-types/src/clone-project.d.ts +10 -8
  143. package/dist/module-types/src/dashboard/git-hosts.d.ts +3 -3
  144. package/dist/module-types/src/dashboard/logins-sync.d.ts +25 -1
  145. package/dist/module-types/src/dashboard/overview.d.ts +4 -2
  146. package/dist/module-types/src/dashboard/person.d.ts +13 -12
  147. package/dist/module-types/src/dashboard/repos.d.ts +74 -0
  148. package/dist/module-types/src/dashboard/send-skills.d.ts +12 -1
  149. package/dist/module-types/src/dashboard/types.d.ts +26 -15
  150. package/dist/module-types/src/dashboard-rpc/agents.d.ts +63 -0
  151. package/dist/module-types/src/dashboard-rpc/backup.d.ts +35 -0
  152. package/dist/module-types/src/dashboard-rpc/copied-logins.d.ts +1 -1
  153. package/dist/module-types/src/dashboard-rpc/hosted-repos.d.ts +41 -0
  154. package/dist/module-types/src/dashboard-rpc/index.d.ts +3 -2
  155. package/dist/module-types/src/dashboard-rpc/logins.d.ts +3 -33
  156. package/dist/module-types/src/dashboard-rpc/modules.d.ts +4 -3
  157. package/dist/module-types/src/dashboard-rpc/person.d.ts +34 -1
  158. package/dist/module-types/src/dashboard-rpc/personal-folder.d.ts +19 -2
  159. package/dist/module-types/src/dashboard-rpc/project-agent-data.d.ts +12 -0
  160. package/dist/module-types/src/dashboard-rpc/projects.d.ts +63 -10
  161. package/dist/module-types/src/dashboard-rpc/reads.d.ts +1 -1
  162. package/dist/module-types/src/dashboard-rpc/send-as.d.ts +41 -0
  163. package/dist/module-types/src/dashboard-rpc/skills.d.ts +2 -1
  164. package/dist/module-types/src/index.d.ts +1 -1
  165. package/dist/module-types/src/project-address.d.ts +8 -1
  166. package/dist/module-types/src/project-hooks.d.ts +12 -2
  167. package/dist/module-types/src/project-modules.d.ts +6 -0
  168. package/dist/module-types/src/project-skills/catalogue.d.ts +6 -9
  169. package/dist/module-types/src/registry.d.ts +13 -0
  170. package/dist/module-types/src/store/agent-store.d.ts +14 -0
  171. package/dist/module-types/src/store/branches.d.ts +7 -0
  172. package/dist/module-types/src/store/git-host.d.ts +1 -3
  173. package/dist/module-types/src/typed-repository.d.ts +16 -0
  174. package/dist/project-address.d.ts +8 -1
  175. package/dist/project-address.d.ts.map +1 -1
  176. package/dist/project-address.js +11 -4
  177. package/dist/project-address.js.map +1 -1
  178. package/dist/project-hooks.d.ts +12 -2
  179. package/dist/project-hooks.d.ts.map +1 -1
  180. package/dist/project-hooks.js +9 -2
  181. package/dist/project-hooks.js.map +1 -1
  182. package/dist/project-modules.d.ts +6 -0
  183. package/dist/project-modules.d.ts.map +1 -1
  184. package/dist/project-modules.js +13 -1
  185. package/dist/project-modules.js.map +1 -1
  186. package/dist/project-skills/catalogue.d.ts +6 -9
  187. package/dist/project-skills/catalogue.d.ts.map +1 -1
  188. package/dist/project-skills/catalogue.js +9 -8
  189. package/dist/project-skills/catalogue.js.map +1 -1
  190. package/dist/registry.d.ts +13 -0
  191. package/dist/registry.d.ts.map +1 -1
  192. package/dist/registry.js +43 -2
  193. package/dist/registry.js.map +1 -1
  194. package/dist/sessions-home.d.ts +11 -0
  195. package/dist/sessions-home.d.ts.map +1 -0
  196. package/dist/sessions-home.js +41 -0
  197. package/dist/sessions-home.js.map +1 -0
  198. package/dist/store/agent-store.d.ts +14 -0
  199. package/dist/store/agent-store.d.ts.map +1 -1
  200. package/dist/store/agent-store.js.map +1 -1
  201. package/dist/store/branches.d.ts +7 -0
  202. package/dist/store/branches.d.ts.map +1 -1
  203. package/dist/store/branches.js +37 -2
  204. package/dist/store/branches.js.map +1 -1
  205. package/dist/store/git-host.d.ts +1 -3
  206. package/dist/store/git-host.d.ts.map +1 -1
  207. package/dist/store/git-host.js +0 -14
  208. package/dist/store/git-host.js.map +1 -1
  209. package/dist/typed-repository.d.ts +17 -0
  210. package/dist/typed-repository.d.ts.map +1 -0
  211. package/dist/typed-repository.js +29 -0
  212. package/dist/typed-repository.js.map +1 -0
  213. package/dist/website/assets/entries/{entry-client-routing.C33s8xOY.js → entry-client-routing.CvPemUV2.js} +2 -2
  214. package/dist/website/assets/entries/{pages_go-to-dashboard.C3OBfFYB.js → pages_go-to-dashboard.CUCqKDCh.js} +1 -1
  215. package/dist/website/banner/index.html +1 -1
  216. package/dist/website/go-to-dashboard/index.html +3 -3
  217. package/dist/website/index.html +1 -1
  218. package/dist/website/press/index.html +1 -1
  219. package/package.json +21 -21
  220. package/dist/dashboard-bundle/assets/host/module-BMyNrbiB.js +0 -1
  221. package/dist/dashboard-bundle/assets/main-BK8YIg7v.js +0 -152
  222. package/dist/dashboard-bundle/assets/main-mnNPGbsz.css +0 -2
  223. package/dist/dashboard-bundle/assets/module-DY3Aigsz.js +0 -19
@@ -10,6 +10,21 @@
10
10
  <!-- The brand mark as the tab icon (#757). It carries its own dark-mode ramp inside the file:
11
11
  a favicon sits on browser chrome, which follows the OS theme, not our in-app theme choice. -->
12
12
  <link rel="icon" href="/logo.svg" />
13
+ <!-- The look the page had last time, put back before its first paint (lib/kept-look.ts keeps
14
+ it): the person's theme from the first frame, not the default's until their preferences
15
+ arrive. A first visit takes the OS's light or dark. Inline, so it runs before anything is drawn. -->
16
+ <script>
17
+ try {
18
+ var root = document.documentElement
19
+ var look = JSON.parse(localStorage.getItem('openagent:look') || 'null')
20
+ var systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches
21
+ var theme = (look && look.theme) || 'system'
22
+ if (theme === 'dark' || (theme === 'system' && systemDark)) root.classList.add('dark')
23
+ if (look && look.palette) root.dataset.palette = look.palette
24
+ if (look && look.accent) root.dataset.accent = look.accent
25
+ if (look && look.style) root.setAttribute('style', look.style)
26
+ } catch (e) {}
27
+ </script>
13
28
  <!-- The fonts with no pick in Settings › Appearance (tailwind.css): IBM Plex Sans for the page,
14
29
  JetBrains Mono for code, Source Serif 4 for a Markdown file read as a page. Another pick
15
30
  is loaded the same way by AppFrame (lib/fonts.ts). -->
@@ -25,17 +40,17 @@
25
40
  "react/jsx-runtime": "/assets/host/react-jsx-runtime-Dxx08tyw.js",
26
41
  "react-dom": "/assets/host/react-dom-oeGwGKD7.js",
27
42
  "react-dom/client": "/assets/host/react-dom-client-owmMVl4T.js",
28
- "@openagt/dashboard/module": "/assets/host/module-BMyNrbiB.js"
43
+ "@openagt/dashboard/module": "/assets/host/module-Jq6JDNSB.js"
29
44
  }
30
45
  }</script>
31
- <script blocking="render" type="module" crossorigin src="/assets/main-BK8YIg7v.js"></script>
46
+ <script blocking="render" type="module" crossorigin src="/assets/main-BIyFp6td.js"></script>
32
47
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
33
48
  <link rel="modulepreload" crossorigin href="/assets/react-CZI7_Jkm.js">
34
49
  <link rel="modulepreload" crossorigin href="/assets/react-dom-cJyBB_A4.js">
35
50
  <link rel="modulepreload" crossorigin href="/assets/client-CbBRB9m4.js">
36
51
  <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-By8HlURe.js">
37
- <link rel="modulepreload" crossorigin href="/assets/module-DY3Aigsz.js">
38
- <link rel="stylesheet" crossorigin href="/assets/main-mnNPGbsz.css">
52
+ <link rel="modulepreload" crossorigin href="/assets/module-Cqcyno9w.js">
53
+ <link rel="stylesheet" crossorigin href="/assets/main-C_ohUWaY.css">
39
54
  </head>
40
55
  <body>
41
56
  <div id="root"></div>
@@ -0,0 +1,64 @@
1
+ import { type AgentAccounts, type AgentRecord } from '@openagt/agent-data';
2
+ import { type AccountResult } from './accounts.js';
3
+ import { type AgentLoginsOn } from '../dashboard/logins-sync.js';
4
+ export type { AgentAccounts, AgentRecord } from '@openagt/agent-data';
5
+ export type { AgentLoginsOn } from '../dashboard/logins-sync.js';
6
+ /** One skill an agent can be given. */
7
+ export interface AgentSkillChoice {
8
+ name: string;
9
+ /** The one line the skill's text says of itself. */
10
+ description: string;
11
+ }
12
+ export interface AgentsView {
13
+ /** Every agent, the default first. */
14
+ agents: AgentRecord[];
15
+ /** The skills to pick from, in groups: the default agent's first, then the catalogue's. */
16
+ skills: {
17
+ title: string;
18
+ skills: AgentSkillChoice[];
19
+ }[];
20
+ /** OpenAgent's GitHub accounts on this computer. */
21
+ github?: {
22
+ accounts: string[];
23
+ };
24
+ /** The Claude accounts of the Permissions page, by id and name. */
25
+ claude: {
26
+ id: string;
27
+ name: string;
28
+ }[];
29
+ /** The Codex accounts, the same way. */
30
+ codex: {
31
+ id: string;
32
+ name: string;
33
+ }[];
34
+ }
35
+ /** Every agent, and what one can be given. (`onAgents` names the runs' list already.) */
36
+ export declare function onAgentsList(): Promise<AgentsView>;
37
+ /** What the page sends to save an agent: a new one has no id yet. */
38
+ export interface AgentChange {
39
+ id?: string;
40
+ name: string;
41
+ skills: string[];
42
+ accounts: AgentAccounts;
43
+ /** Whether its sessions get the project's own skills. */
44
+ projectSkills: boolean;
45
+ }
46
+ /**
47
+ * Save an agent: a new one under the id its name gives, an existing one under its own. The name
48
+ * must give an id, every skill must be one this computer carries, and every account one it knows;
49
+ * else nothing is written and the reason is said.
50
+ */
51
+ export declare function sendSaveAgent(change: AgentChange): Promise<({
52
+ ok: true;
53
+ id: string;
54
+ } | {
55
+ ok: false;
56
+ error: string;
57
+ }) & Partial<AccountResult>>;
58
+ /** How the agents' GitHub accounts stand on each device of the person's. A server copies to no device: none. */
59
+ export declare function onAgentLogins(): Promise<AgentLoginsOn[]>;
60
+ /** Copy the agents' GitHub accounts to every device again, now: the press for one that failed. */
61
+ export declare function sendCopyAgentLogins(): Promise<AccountResult>;
62
+ /** Remove an agent; the default agent stays. */
63
+ export declare function sendRemoveAgent(id: string): Promise<AccountResult>;
64
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0H,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAElM,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3F,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAYhE,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,2FAA2F;IAC3F,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE,EAAE,CAAA;IACvD,oDAAoD;IACpD,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC/B,mEAAmE;IACnE,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtC,wCAAwC;IACxC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACtC;AAmCD,yFAAyF;AACzF,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAUxD;AAED,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAA;IACvB,yDAAyD;IACzD,aAAa,EAAE,OAAO,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CA+BpJ;AAED,gHAAgH;AAChH,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAG9D;AAED,kGAAkG;AAClG,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAIlE;AAED,gDAAgD;AAChD,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CASxE"}
@@ -0,0 +1,137 @@
1
+ import { readFile, realpath } from 'node:fs/promises';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, join } from 'node:path';
4
+ import { agentIdOf, DEFAULT_AGENT, DEFAULT_AGENT_SKILLS, isAgentId, isAgentName, listAgents, readAgent, removeAgent, writeAgent } from '@openagt/agent-data';
5
+ import { carriedSkills, GROUPS } from '../project-skills/catalogue.js';
6
+ import { onAgentAccounts } from './accounts.js';
7
+ import { onGitHosts } from './logins.js';
8
+ import { agentLoginsOn, syncLogins } from '../dashboard/logins-sync.js';
9
+ // The Agents page (Rom's design): an agent is a name, a set of skills and a set of accounts, kept
10
+ // as one file each in the personal folder, so every computer that syncs it has the same agents.
11
+ // The page lists them, edits them in place, makes new ones and removes them; the default agent is
12
+ // edited like the others and never removed. What an agent can be given is what this computer
13
+ // knows: the skills the dashboard carries, OpenAgent's own GitHub accounts here, and the Claude
14
+ // and Codex accounts of the Permissions page.
15
+ /** The host the GitHub skill answers for, whose accounts an agent names. */
16
+ const GITHUB = 'github.com';
17
+ /** The group the default agent's skills are shown in. */
18
+ const DEFAULTS_GROUP = 'Every agent starts with';
19
+ let defaults;
20
+ /** The default skills' names and lines, read once from their packages. */
21
+ function defaultSkillChoices() {
22
+ return (defaults ??= (async () => {
23
+ const require = createRequire(import.meta.url);
24
+ const choices = [];
25
+ for (const name of DEFAULT_AGENT_SKILLS) {
26
+ try {
27
+ const dir = await realpath(dirname(require.resolve(`@openagt/skill-${name}/package.json`)));
28
+ const text = await readFile(join(dir, 'SKILL.md'), 'utf8');
29
+ const description = /^description:[ \t]*(.*)$/m.exec(text)?.[1]?.trim().replace(/^"(.*)"$/, '$1') ?? '';
30
+ choices.push({ name, description });
31
+ }
32
+ catch {
33
+ choices.push({ name, description: '' });
34
+ }
35
+ }
36
+ return choices;
37
+ })());
38
+ }
39
+ /** The skills an agent can be given, in groups. */
40
+ async function skillChoices() {
41
+ const carried = await carriedSkills();
42
+ return [
43
+ { title: DEFAULTS_GROUP, skills: await defaultSkillChoices() },
44
+ ...GROUPS.map(group => ({ title: group.title, skills: group.skills.flatMap(name => (carried.has(name) ? [{ name, description: carried.get(name).description }] : [])) })),
45
+ ];
46
+ }
47
+ /** Every agent, and what one can be given. (`onAgents` names the runs' list already.) */
48
+ export async function onAgentsList() {
49
+ const [agents, skills, hosts, claude, codex] = await Promise.all([listAgents(), skillChoices(), onGitHosts(), onAgentAccounts('claude'), onAgentAccounts('codex')]);
50
+ const provider = hosts.hosts.find(row => row.host === GITHUB)?.provider;
51
+ return {
52
+ agents,
53
+ skills,
54
+ ...(provider ? { github: { accounts: provider.accounts.filter(account => account.ok).map(account => account.login) } } : {}),
55
+ claude: claude.accounts.map(account => ({ id: account.id, name: account.name })),
56
+ codex: codex.accounts.map(account => ({ id: account.id, name: account.name })),
57
+ };
58
+ }
59
+ /**
60
+ * Save an agent: a new one under the id its name gives, an existing one under its own. The name
61
+ * must give an id, every skill must be one this computer carries, and every account one it knows;
62
+ * else nothing is written and the reason is said.
63
+ */
64
+ export async function sendSaveAgent(change) {
65
+ if (typeof change !== 'object' || change === null)
66
+ return { ok: false, error: 'That is no agent.' };
67
+ if (!isAgentName(change.name))
68
+ return { ok: false, error: 'An agent needs a name of a few words: letters and digits, at most 40 characters.' };
69
+ const name = change.name.trim();
70
+ const id = change.id === undefined ? agentIdOf(name) : change.id;
71
+ if (!isAgentId(id))
72
+ return { ok: false, error: 'That is no agent id.' };
73
+ if (change.id === undefined && (await readAgent(id)) !== undefined)
74
+ return { ok: false, error: `There is an agent ${name} already.` };
75
+ if (change.id !== undefined && change.id !== DEFAULT_AGENT && (await readAgent(change.id)) === undefined)
76
+ return { ok: false, error: 'That agent is gone: make it again.' };
77
+ if (id === DEFAULT_AGENT && name !== 'Default')
78
+ return { ok: false, error: 'The default agent keeps its name.' };
79
+ const known = new Set((await skillChoices()).flatMap(group => group.skills.map(skill => skill.name)));
80
+ const skills = Array.isArray(change.skills) ? change.skills : undefined;
81
+ if (!skills || skills.some(skill => typeof skill !== 'string' || !known.has(skill)))
82
+ return { ok: false, error: 'An agent is given skills from the list.' };
83
+ if (typeof change.projectSkills !== 'boolean')
84
+ return { ok: false, error: 'Whether an agent gets project skills is yes or no.' };
85
+ const view = await onAgentsList();
86
+ const given = typeof change.accounts === 'object' && change.accounts !== null ? change.accounts : {};
87
+ const accounts = {};
88
+ if (given.github !== undefined) {
89
+ if (typeof given.github !== 'string' || !view.github?.accounts.includes(given.github))
90
+ return { ok: false, error: `OpenAgent has no GitHub account ${String(given.github)} on this computer.` };
91
+ accounts.github = given.github;
92
+ }
93
+ for (const kind of ['claude', 'codex']) {
94
+ const picked = given[kind];
95
+ if (picked === undefined)
96
+ continue;
97
+ if (!Array.isArray(picked) || picked.some(one => typeof one !== 'string' || !view[kind].some(account => account.id === one)))
98
+ return { ok: false, error: `That ${kind === 'claude' ? 'Claude' : 'Codex'} account is not on this computer.` };
99
+ if (picked.length > 0)
100
+ accounts[kind] = picked;
101
+ }
102
+ const written = await writeAgent({ id, name, skills: [...new Set(skills)], accounts, projectSkills: change.projectSkills });
103
+ if (!written.ok && !written.committed)
104
+ return { ok: false, error: written.error };
105
+ // Its GitHub account goes to every device of the person's now, not a minute from now; the page follows it.
106
+ if (accounts.github !== undefined && process.env['OPENAGENT_SERVER'] !== '1')
107
+ void syncLogins().catch(() => []);
108
+ return { ok: true, id };
109
+ }
110
+ /** How the agents' GitHub accounts stand on each device of the person's. A server copies to no device: none. */
111
+ export async function onAgentLogins() {
112
+ if (process.env['OPENAGENT_SERVER'] === '1')
113
+ return [];
114
+ return agentLoginsOn();
115
+ }
116
+ /** Copy the agents' GitHub accounts to every device again, now: the press for one that failed. */
117
+ export async function sendCopyAgentLogins() {
118
+ if (process.env['OPENAGENT_SERVER'] === '1')
119
+ return { ok: false, error: 'A server copies logins to no device.' };
120
+ await syncLogins();
121
+ return { ok: true };
122
+ }
123
+ /** Remove an agent; the default agent stays. */
124
+ export async function sendRemoveAgent(id) {
125
+ if (!isAgentId(id))
126
+ return { ok: false, error: 'That is no agent id.' };
127
+ if (id === DEFAULT_AGENT)
128
+ return { ok: false, error: 'The default agent stays.' };
129
+ try {
130
+ const removed = await removeAgent(id);
131
+ return removed.ok || removed.committed ? { ok: true } : { ok: false, error: removed.error };
132
+ }
133
+ catch (err) {
134
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
135
+ }
136
+ }
137
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/dashboard-rpc/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /** Data that is not backed up. */
2
+ export interface BackupGap {
3
+ /** The person's own folder, or one shared project's data. */
4
+ kind: 'personal' | 'project';
5
+ /** The project, for a shared project's data. */
6
+ projectId?: string;
7
+ /** The project's name, for a shared project's data. */
8
+ project?: string;
9
+ /** The repository it syncs with, as shown: `github.com/me/agent`. */
10
+ address: string;
11
+ /** The repository's page, when it has one. */
12
+ url?: string;
13
+ /** The git host it is sent to. */
14
+ host: string;
15
+ /** Changes made here that wait, when they can be counted. */
16
+ waiting?: number;
17
+ }
18
+ export interface BackupView {
19
+ gaps: BackupGap[];
20
+ }
21
+ /** Everything not backed up now. OpenAgent's accounts that could back it up are the git hosts' own read (`onGitHosts`). */
22
+ export declare function onBackup(): Promise<BackupView>;
23
+ /**
24
+ * Back up `gap` as `login`, one of OpenAgent's accounts at its host, from now on: what waited is
25
+ * sent now. A send the repository refuses leaves it as it was, the reason said.
26
+ */
27
+ export declare function sendBackUpAs(gap: {
28
+ kind: 'personal' | 'project';
29
+ projectId?: string;
30
+ }, login: string): Promise<{
31
+ ok: true;
32
+ } | {
33
+ ok: false;
34
+ error: string;
35
+ }>;
36
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/backup.ts"],"names":[],"mappings":"AAcA,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB;AAED,2HAA2H;AAC3H,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAiBpD;AAOD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBjK"}
@@ -0,0 +1,62 @@
1
+ import { clearRemoteAccount, pullProjectData, readPersonalFolder, readRemoteAccount, readSharing, remoteHostOf, repositoryAddress, writeRemoteAccount } from '@openagt/agent-data';
2
+ import { contextProjects, resolveProjectPath } from './context.js';
3
+ import { originHost } from './send-as.js';
4
+ import { sendPersonalFolderAs } from './personal-folder.js';
5
+ import { sendProjectDataAs } from './project-agent-data.js';
6
+ import { providedDataChanged } from '../store/provided.js';
7
+ import { personalFolderShown } from '../personal-folder-shown.js';
8
+ /** Everything not backed up now. OpenAgent's accounts that could back it up are the git hosts' own read (`onGitHosts`). */
9
+ export async function onBackup() {
10
+ const [state, projects] = await Promise.all([readPersonalFolder(), contextProjects().list()]);
11
+ const gaps = [];
12
+ const personalHost = state.remote ? remoteHostOf(state.remote) : undefined;
13
+ if (personalHost !== undefined && !state.account) {
14
+ const shown = personalFolderShown(state);
15
+ gaps.push({ kind: 'personal', address: shown.remote ?? state.remote, ...(shown.remoteUrl ? { url: shown.remoteUrl } : {}), host: personalHost, waiting: state.unsent });
16
+ }
17
+ for (const project of projects) {
18
+ if (project.machine !== undefined)
19
+ continue;
20
+ if (!(await readSharing(project.path).catch(() => false)))
21
+ continue;
22
+ const host = await originHost(project.path).catch(() => undefined);
23
+ if (host === undefined || (await readRemoteAccount(project.path).catch(() => undefined)))
24
+ continue;
25
+ const address = await repositoryAddress(project.path).catch(() => undefined);
26
+ gaps.push({ kind: 'project', projectId: project.id, project: project.name, address: address ?? host, ...(address ? { url: `https://${address}` } : {}), host });
27
+ }
28
+ return { gaps };
29
+ }
30
+ /** What git said went wrong, as a person reads it: its last line, not the command it ran. */
31
+ function gitReason(error) {
32
+ return (error.trim().split('\n').at(-1) ?? error).replace(/^(fatal|error): /, '');
33
+ }
34
+ /**
35
+ * Back up `gap` as `login`, one of OpenAgent's accounts at its host, from now on: what waited is
36
+ * sent now. A send the repository refuses leaves it as it was, the reason said.
37
+ */
38
+ export async function sendBackUpAs(gap, login) {
39
+ if (typeof login !== 'string' || !login)
40
+ return { ok: false, error: 'Pick an account.' };
41
+ if (gap?.kind === 'personal') {
42
+ const sent = await sendPersonalFolderAs(login);
43
+ return sent.ok ? sent : { ok: false, error: `Could not back up: ${sent.error.replace(/^the personal folder could not be sent to its remote: /, '')}` };
44
+ }
45
+ if (gap?.kind !== 'project' || typeof gap.projectId !== 'string')
46
+ return { ok: false, error: 'Nothing to back up named.' };
47
+ const root = await resolveProjectPath(gap.projectId);
48
+ if (!root)
49
+ return { ok: false, error: 'this project has no local path on this server' };
50
+ const before = await readRemoteAccount(root).catch(() => undefined);
51
+ const named = await sendProjectDataAs(gap.projectId, login);
52
+ if (!named.ok)
53
+ return named;
54
+ const sent = await pullProjectData(root);
55
+ if (!sent.ok) {
56
+ await (before ? writeRemoteAccount(root, before) : clearRemoteAccount(root)).catch(() => { });
57
+ return { ok: false, error: `Could not back up: ${gitReason(sent.error)}` };
58
+ }
59
+ providedDataChanged(root);
60
+ return { ok: true };
61
+ }
62
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/dashboard-rpc/backup.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export type CopiedView = {
23
23
  ok: false;
24
24
  error: string;
25
25
  };
26
- /** What the server keeps from the person's computers, without how full each is: what a computer compares its own with. */
26
+ /** What this device keeps from the person's computers, without how full each is: what a computer compares its own with. A device that is no server keeps git hosts' accounts alone. */
27
27
  export declare function onCopiedLogins(): Promise<CopiedView>;
28
28
  /**
29
29
  * Take a login a computer of the person's handed over: it goes where its tool reads it, in place
@@ -1 +1 @@
1
- {"version":3,"file":"copied-logins.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/copied-logins.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC9K,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAUlE,iDAAiD;AACjD,eAAO,MAAM,YAAY,EAAE;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,OAAO,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,MAAM,CAAA;IACtB,uFAAuF;IACvF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAKjI,CAAA;AAED,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAM1G,0HAA0H;AAC1H,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAG1D;AAsDD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqC/F;AAYD,wHAAwH;AACxH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAQxH;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAOtH;AAED,8IAA8I;AAC9I,wBAAsB,eAAe,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAcjK"}
1
+ {"version":3,"file":"copied-logins.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/copied-logins.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC9K,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAYlE,iDAAiD;AACjD,eAAO,MAAM,YAAY,EAAE;IACzB,wEAAwE;IACxE,MAAM,EAAE,MAAM,OAAO,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,MAAM,CAAA;IACtB,uFAAuF;IACvF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAKjI,CAAA;AAED,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAM1G,uLAAuL;AACvL,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAE1D;AAsDD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqC/F;AAYD,wHAAwH;AACxH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAQxH;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAOtH;AAED,8IAA8I;AAC9I,wBAAsB,eAAe,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAcjK"}
@@ -9,7 +9,9 @@ import { gitHostPackages } from './logins.js';
9
9
  import { addAccount, changeAccounts, readAccounts, removeAccount } from '@openagt/skill-account-rotation';
10
10
  // What a server answers the person's own computers about their logins here (the logins, and what
11
11
  // is kept of them: `dashboard/copied-logins.ts`): what it keeps, a login handed over, one taken
12
- // off or kept, how full each is. Only a server's OpenAgent takes logins.
12
+ // off or kept, how full each is. Only a server's OpenAgent takes a coding agent's login; a git
13
+ // host's account that an agent names (Rom's design: an agent is skills and accounts, the same
14
+ // on every device) is taken on any device of the person's, a laptop too.
13
15
  //
14
16
  // Taking one off deletes it here and ends nothing: the computer goes on logged in.
15
17
  /** What the RPCs reach for, swapped in tests. */
@@ -21,10 +23,8 @@ export const copiedWiring = {
21
23
  function refused() {
22
24
  return { ok: false, error: 'This OpenAgent takes no logins from another computer: it is no server.' };
23
25
  }
24
- /** What the server keeps from the person's computers, without how full each is: what a computer compares its own with. */
26
+ /** What this device keeps from the person's computers, without how full each is: what a computer compares its own with. A device that is no server keeps git hosts' accounts alone. */
25
27
  export async function onCopiedLogins() {
26
- if (!copiedWiring.server())
27
- return refused();
28
28
  return { ok: true, logins: readCopied().map(({ usage: _usage, ...rest }) => rest) };
29
29
  }
30
30
  /** A name for the row that no other account here has: the computer's name beside it when one has it already. */
@@ -85,9 +85,9 @@ async function codexFolder(auth) {
85
85
  * Claude login, a Codex sign-in as Codex keeps it, a git host's token.
86
86
  */
87
87
  export async function sendCopiedLogin(given, secret) {
88
- if (!copiedWiring.server())
89
- return refused();
90
88
  const { kind, host, source, name, who, from } = (given ?? {});
89
+ if (kind !== 'git' && !copiedWiring.server())
90
+ return refused();
91
91
  if (!isKind(kind) || !isWord(source) || !isWord(name) || !isWord(who) || !isServerName(from) || (kind === 'git' && !isWord(host)) || typeof secret !== 'string' || !secret.trim() || secret.length > 64 * 1024) {
92
92
  return { ok: false, error: 'That is no login.' };
93
93
  }
@@ -140,7 +140,7 @@ function claudeAccountId(who) {
140
140
  }
141
141
  /** Take a login a computer handed over off this server: it is deleted here, and goes on working wherever else it is. */
142
142
  export async function sendForgetCopiedLogin(which) {
143
- if (!copiedWiring.server())
143
+ if (which?.kind !== 'git' && !copiedWiring.server())
144
144
  return refused();
145
145
  const login = readCopied().find(other => isKind(which?.kind) && same(other, which));
146
146
  if (!login)
@@ -1 +1 @@
1
- {"version":3,"file":"copied-logins.js","sourceRoot":"","sources":["../../src/dashboard-rpc/copied-logins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copied-logins.js","sourceRoot":"","sources":["../../src/dashboard-rpc/copied-logins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /** A repository at a git host, not looked for on this computer. */
2
+ export interface HostedRepo {
3
+ /** `<host>/<owner>/<name>`: what a clone is asked for. */
4
+ address: string;
5
+ url: string;
6
+ private: boolean;
7
+ description?: string;
8
+ /** Why it is listed: the account it is one of, or the owner the person named. */
9
+ from: string;
10
+ }
11
+ /** How old the kept lists may be before a read asks the hosts again, behind the answer. */
12
+ export declare const HOSTED_MAX_AGE_MS: number;
13
+ /** How long a first read waits for the hosts before it answers with nothing yet. */
14
+ export declare const HOSTED_FIRST_WAIT_MS = 1500;
15
+ /** What a read answers: the lists as kept, and whether the hosts are being asked now. */
16
+ export interface HostedRead {
17
+ repos: HostedRepo[];
18
+ loading: boolean;
19
+ }
20
+ /** What a listing is asked through: the host's package, and OpenAgent's accounts and the person's owners. */
21
+ export declare const hostedWiring: {
22
+ run: (host: string, args: string[]) => Promise<{
23
+ ok: true;
24
+ output: unknown;
25
+ } | {
26
+ ok: false;
27
+ error: string;
28
+ }>;
29
+ hosts: () => Promise<import("./send-as.js").SendAsHost[]>;
30
+ owners: () => Promise<string[]>;
31
+ now: () => number;
32
+ };
33
+ /**
34
+ * The hosts' repositories as kept. The first read waits {@link HOSTED_FIRST_WAIT_MS} at most, and
35
+ * then says they are still being read; a read of old lists answers them and asks again behind.
36
+ */
37
+ export declare function readHosted(): Promise<HostedRead>;
38
+ /** Ask the hosts again now, and answer what they listed: after the person named another owner. */
39
+ export declare function refreshHosted(): Promise<HostedRepo[]>;
40
+ /** Forget the kept lists: for a test. */
41
+ export declare function forgetHosted(): void;
42
+ //# sourceMappingURL=hosted-repos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-repos.d.ts","sourceRoot":"","sources":["../../src/dashboard-rpc/hosted-repos.ts"],"names":[],"mappings":"AAUA,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAA;CACb;AAED,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB,QAAc,CAAA;AAE5C,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAExC,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,6GAA6G;AAC7G,eAAO,MAAM,YAAY;IACvB,GAAG,SAAS,MAAM,QAAQ,MAAM,EAAE;;;;;;;IAClC,KAAK;IACL,MAAM;IACN,GAAG;CACJ,CAAA;AAwCD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAQtD;AAED,kGAAkG;AAClG,wBAAgB,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAErD;AAED,yCAAyC;AACzC,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}
@@ -0,0 +1,74 @@
1
+ import { readRepoOwners } from '@openagt/agent-data';
2
+ import { gitHostPackages } from './logins.js';
3
+ import { accountsByHost } from './send-as.js';
4
+ /** How old the kept lists may be before a read asks the hosts again, behind the answer. */
5
+ export const HOSTED_MAX_AGE_MS = 10 * 60_000;
6
+ /** How long a first read waits for the hosts before it answers with nothing yet. */
7
+ export const HOSTED_FIRST_WAIT_MS = 1500;
8
+ /** What a listing is asked through: the host's package, and OpenAgent's accounts and the person's owners. */
9
+ export const hostedWiring = {
10
+ run: (host, args) => gitHostPackages.run(host, args),
11
+ hosts: () => accountsByHost(),
12
+ owners: () => readRepoOwners(),
13
+ now: () => Date.now(),
14
+ };
15
+ /** Every repository the hosts list now: each account's own, then each named owner's; one address listed once. */
16
+ async function listHosted() {
17
+ const [hosts, owners] = await Promise.all([hostedWiring.hosts(), hostedWiring.owners().catch(() => [])]);
18
+ const asks = [];
19
+ for (const row of hosts) {
20
+ for (const login of row.logins)
21
+ asks.push({ host: row.host, args: ['repos', '--user', login], from: `@${login}` });
22
+ for (const owner of owners) {
23
+ const [host, name] = owner.split('/');
24
+ if (host === row.host)
25
+ asks.push({ host, args: ['repos', '--owner', name], from: name });
26
+ }
27
+ }
28
+ const lists = await Promise.all(asks.map(async (ask) => ({ ask, said: await hostedWiring.run(ask.host, ask.args).catch(() => undefined) })));
29
+ const repos = new Map();
30
+ for (const { ask, said } of lists) {
31
+ if (!said?.ok)
32
+ continue;
33
+ const listed = (said.output ?? {}).repos;
34
+ for (const row of Array.isArray(listed) ? listed : []) {
35
+ const { address, url, private: hidden, description } = (row ?? {});
36
+ if (typeof address !== 'string' || typeof url !== 'string' || repos.has(address.toLowerCase()))
37
+ continue;
38
+ repos.set(address.toLowerCase(), { address, url, private: hidden === true, ...(typeof description === 'string' && description ? { description } : {}), from: ask.from });
39
+ }
40
+ }
41
+ return [...repos.values()];
42
+ }
43
+ let kept;
44
+ let running;
45
+ function listOnce() {
46
+ running ??= listHosted()
47
+ .then(repos => ((kept = { repos, at: hostedWiring.now() }), repos), () => kept?.repos ?? [])
48
+ .finally(() => (running = undefined));
49
+ return running;
50
+ }
51
+ /**
52
+ * The hosts' repositories as kept. The first read waits {@link HOSTED_FIRST_WAIT_MS} at most, and
53
+ * then says they are still being read; a read of old lists answers them and asks again behind.
54
+ */
55
+ export async function readHosted() {
56
+ if (!kept) {
57
+ const listing = listOnce();
58
+ const first = await Promise.race([listing, new Promise(done => setTimeout(() => done(undefined), HOSTED_FIRST_WAIT_MS))]);
59
+ return first ? { repos: first, loading: false } : { repos: [], loading: true };
60
+ }
61
+ if (hostedWiring.now() - kept.at > HOSTED_MAX_AGE_MS)
62
+ void listOnce();
63
+ return { repos: kept.repos, loading: running !== undefined };
64
+ }
65
+ /** Ask the hosts again now, and answer what they listed: after the person named another owner. */
66
+ export function refreshHosted() {
67
+ return (running ?? Promise.resolve()).then(listOnce);
68
+ }
69
+ /** Forget the kept lists: for a test. */
70
+ export function forgetHosted() {
71
+ kept = undefined;
72
+ running = undefined;
73
+ }
74
+ //# sourceMappingURL=hosted-repos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-repos.js","sourceRoot":"","sources":["../../src/dashboard-rpc/hosted-repos.ts"],"names":[],"mappings":"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"}