@songsid/agend 2.3.2-beta.1 → 2.3.2-beta.11

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 (298) hide show
  1. package/THIRD_PARTY_NOTICES.md +40 -0
  2. package/dist/agent-cli.js +69 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.js +11 -0
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/agent-whats-new.js +3 -0
  7. package/dist/agent-whats-new.js.map +1 -1
  8. package/dist/antigravity-usage-scan.d.ts +58 -0
  9. package/dist/antigravity-usage-scan.js +257 -0
  10. package/dist/antigravity-usage-scan.js.map +1 -0
  11. package/dist/antigravity-usage-worker.d.ts +1 -0
  12. package/dist/antigravity-usage-worker.js +10 -0
  13. package/dist/antigravity-usage-worker.js.map +1 -0
  14. package/dist/auth-api.js +4 -0
  15. package/dist/auth-api.js.map +1 -1
  16. package/dist/backend/kiro-classic-archive.d.ts +52 -0
  17. package/dist/backend/kiro-classic-archive.js +444 -0
  18. package/dist/backend/kiro-classic-archive.js.map +1 -0
  19. package/dist/backend/kiro-identity.d.ts +83 -0
  20. package/dist/backend/kiro-identity.js +144 -0
  21. package/dist/backend/kiro-identity.js.map +1 -1
  22. package/dist/backend/kiro-migration-verify.d.ts +10 -0
  23. package/dist/backend/kiro-migration-verify.js +52 -0
  24. package/dist/backend/kiro-migration-verify.js.map +1 -0
  25. package/dist/backend/kiro-retired-model.d.ts +62 -0
  26. package/dist/backend/kiro-retired-model.js +160 -0
  27. package/dist/backend/kiro-retired-model.js.map +1 -0
  28. package/dist/backend/kiro-v2-store-worker.js +21 -1
  29. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  30. package/dist/backend/kiro-v2-store.d.ts +8 -0
  31. package/dist/backend/kiro-v2-store.js.map +1 -1
  32. package/dist/backend/kiro.d.ts +169 -2
  33. package/dist/backend/kiro.js +703 -28
  34. package/dist/backend/kiro.js.map +1 -1
  35. package/dist/backend/types.d.ts +108 -0
  36. package/dist/backend/types.js +9 -0
  37. package/dist/backend/types.js.map +1 -1
  38. package/dist/backend-signin-guide.d.ts +1 -0
  39. package/dist/backend-signin-guide.js +9 -0
  40. package/dist/backend-signin-guide.js.map +1 -0
  41. package/dist/backend-signin-pending.d.ts +10 -0
  42. package/dist/backend-signin-pending.js +44 -0
  43. package/dist/backend-signin-pending.js.map +1 -0
  44. package/dist/browser-backend-signins.d.ts +56 -0
  45. package/dist/browser-backend-signins.js +189 -0
  46. package/dist/browser-backend-signins.js.map +1 -0
  47. package/dist/cache-ledger.d.ts +38 -2
  48. package/dist/cache-ledger.js +133 -8
  49. package/dist/cache-ledger.js.map +1 -1
  50. package/dist/cache-prices.d.ts +2 -1
  51. package/dist/cache-prices.js +5 -2
  52. package/dist/cache-prices.js.map +1 -1
  53. package/dist/cache-service.d.ts +68 -0
  54. package/dist/cache-service.js +355 -13
  55. package/dist/cache-service.js.map +1 -1
  56. package/dist/channel/adapters/discord.d.ts +11 -0
  57. package/dist/channel/adapters/discord.js +71 -14
  58. package/dist/channel/adapters/discord.js.map +1 -1
  59. package/dist/channel/ipc-timeouts.js +3 -0
  60. package/dist/channel/ipc-timeouts.js.map +1 -1
  61. package/dist/channel/mcp-tools.js +41 -2
  62. package/dist/channel/mcp-tools.js.map +1 -1
  63. package/dist/channel/tool-router.js +2 -1
  64. package/dist/channel/tool-router.js.map +1 -1
  65. package/dist/classic-channel-manager.d.ts +11 -0
  66. package/dist/classic-channel-manager.js +39 -1
  67. package/dist/classic-channel-manager.js.map +1 -1
  68. package/dist/cli.js +54 -2
  69. package/dist/cli.js.map +1 -1
  70. package/dist/config-validator.d.ts +7 -1
  71. package/dist/config-validator.js +55 -10
  72. package/dist/config-validator.js.map +1 -1
  73. package/dist/config.d.ts +19 -0
  74. package/dist/config.js +33 -1
  75. package/dist/config.js.map +1 -1
  76. package/dist/cpu-quota.d.ts +23 -0
  77. package/dist/cpu-quota.js +86 -0
  78. package/dist/cpu-quota.js.map +1 -0
  79. package/dist/daemon.d.ts +68 -0
  80. package/dist/daemon.js +448 -26
  81. package/dist/daemon.js.map +1 -1
  82. package/dist/dashboard-permissions.d.ts +31 -6
  83. package/dist/dashboard-permissions.js +84 -9
  84. package/dist/dashboard-permissions.js.map +1 -1
  85. package/dist/doctor.js +2 -1
  86. package/dist/doctor.js.map +1 -1
  87. package/dist/fleet-control-audit.d.ts +1 -1
  88. package/dist/fleet-control-audit.js +3 -0
  89. package/dist/fleet-control-audit.js.map +1 -1
  90. package/dist/fleet-manager.d.ts +133 -2
  91. package/dist/fleet-manager.js +905 -94
  92. package/dist/fleet-manager.js.map +1 -1
  93. package/dist/forged-envelope-scan.d.ts +9 -0
  94. package/dist/forged-envelope-scan.js +30 -5
  95. package/dist/forged-envelope-scan.js.map +1 -1
  96. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +5 -2
  97. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +24 -1
  98. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +49 -1
  99. package/dist/general-knowledge/skills/web-appearance/SKILL.md +49 -1
  100. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +47 -9
  101. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +54 -11
  102. package/dist/instance-config-impact.js +10 -5
  103. package/dist/instance-config-impact.js.map +1 -1
  104. package/dist/instance-lifecycle.d.ts +23 -0
  105. package/dist/instance-lifecycle.js +62 -12
  106. package/dist/instance-lifecycle.js.map +1 -1
  107. package/dist/kiro-db-reader.d.ts +5 -0
  108. package/dist/kiro-db-reader.js +18 -0
  109. package/dist/kiro-db-reader.js.map +1 -1
  110. package/dist/kiro-engine-status.d.ts +2 -0
  111. package/dist/kiro-engine-status.js +9 -0
  112. package/dist/kiro-engine-status.js.map +1 -1
  113. package/dist/kiro-migrate.d.ts +60 -0
  114. package/dist/kiro-migrate.js +160 -0
  115. package/dist/kiro-migrate.js.map +1 -0
  116. package/dist/kiro-session-proof.d.ts +41 -0
  117. package/dist/kiro-session-proof.js +89 -0
  118. package/dist/kiro-session-proof.js.map +1 -0
  119. package/dist/kiro-transcript-lane.d.ts +2 -0
  120. package/dist/kiro-transcript-lane.js.map +1 -1
  121. package/dist/kiro-transcript-worker.js +1 -0
  122. package/dist/kiro-transcript-worker.js.map +1 -1
  123. package/dist/kiro-tui-forensic.d.ts +12 -0
  124. package/dist/kiro-tui-forensic.js +110 -0
  125. package/dist/kiro-tui-forensic.js.map +1 -0
  126. package/dist/kiro-usage-run.d.ts +7 -0
  127. package/dist/kiro-usage-run.js +39 -0
  128. package/dist/kiro-usage-run.js.map +1 -0
  129. package/dist/kiro-usage-scan.d.ts +49 -0
  130. package/dist/kiro-usage-scan.js +223 -0
  131. package/dist/kiro-usage-scan.js.map +1 -0
  132. package/dist/kiro-usage-worker.d.ts +1 -0
  133. package/dist/kiro-usage-worker.js +10 -0
  134. package/dist/kiro-usage-worker.js.map +1 -0
  135. package/dist/kiro-usage.d.ts +58 -0
  136. package/dist/kiro-usage.js +310 -0
  137. package/dist/kiro-usage.js.map +1 -0
  138. package/dist/locale.js +230 -8
  139. package/dist/locale.js.map +1 -1
  140. package/dist/log-service.js +1 -1
  141. package/dist/log-service.js.map +1 -1
  142. package/dist/login-url.d.ts +4 -0
  143. package/dist/login-url.js +22 -0
  144. package/dist/login-url.js.map +1 -0
  145. package/dist/needs-you-hub.d.ts +2 -1
  146. package/dist/needs-you-hub.js +1 -1
  147. package/dist/needs-you-hub.js.map +1 -1
  148. package/dist/needs-you.d.ts +10 -2
  149. package/dist/needs-you.js +10 -2
  150. package/dist/needs-you.js.map +1 -1
  151. package/dist/notice-delivery.d.ts +16 -0
  152. package/dist/notice-delivery.js +35 -0
  153. package/dist/notice-delivery.js.map +1 -0
  154. package/dist/office-share-page.d.ts +16 -0
  155. package/dist/office-share-page.js +85 -0
  156. package/dist/office-share-page.js.map +1 -0
  157. package/dist/office-share-service.d.ts +91 -0
  158. package/dist/office-share-service.js +176 -0
  159. package/dist/office-share-service.js.map +1 -0
  160. package/dist/office-share.d.ts +268 -0
  161. package/dist/office-share.js +574 -0
  162. package/dist/office-share.js.map +1 -0
  163. package/dist/opencode-usage-scan.d.ts +28 -0
  164. package/dist/opencode-usage-scan.js +92 -0
  165. package/dist/opencode-usage-scan.js.map +1 -0
  166. package/dist/opencode-usage-worker.d.ts +1 -0
  167. package/dist/opencode-usage-worker.js +10 -0
  168. package/dist/opencode-usage-worker.js.map +1 -0
  169. package/dist/outbound-handlers.js +22 -2
  170. package/dist/outbound-handlers.js.map +1 -1
  171. package/dist/outbound-schemas.d.ts +65 -2
  172. package/dist/outbound-schemas.js +56 -2
  173. package/dist/outbound-schemas.js.map +1 -1
  174. package/dist/public-web-gateway.js +7 -1
  175. package/dist/public-web-gateway.js.map +1 -1
  176. package/dist/quickstart-api.js +13 -2
  177. package/dist/quickstart-api.js.map +1 -1
  178. package/dist/quickstart.js +2 -1
  179. package/dist/quickstart.js.map +1 -1
  180. package/dist/remote-card-answer.d.ts +83 -0
  181. package/dist/remote-card-answer.js +208 -0
  182. package/dist/remote-card-answer.js.map +1 -0
  183. package/dist/remote-card-prompt.d.ts +38 -0
  184. package/dist/remote-card-prompt.js +86 -0
  185. package/dist/remote-card-prompt.js.map +1 -0
  186. package/dist/reply-triggers.d.ts +2 -0
  187. package/dist/reply-triggers.js +3 -0
  188. package/dist/reply-triggers.js.map +1 -0
  189. package/dist/settings-api.d.ts +2 -0
  190. package/dist/settings-api.js +41 -16
  191. package/dist/settings-api.js.map +1 -1
  192. package/dist/settings-change.js +20 -14
  193. package/dist/settings-change.js.map +1 -1
  194. package/dist/settings-effect.js +7 -1
  195. package/dist/settings-effect.js.map +1 -1
  196. package/dist/settings-instance-patch.js +4 -1
  197. package/dist/settings-instance-patch.js.map +1 -1
  198. package/dist/setup-form.d.ts +1 -1
  199. package/dist/setup-form.js +55 -6
  200. package/dist/setup-form.js.map +1 -1
  201. package/dist/setup-host.d.ts +9 -0
  202. package/dist/setup-host.js +127 -6
  203. package/dist/setup-host.js.map +1 -1
  204. package/dist/setup-signin-assets.d.ts +2 -0
  205. package/dist/setup-signin-assets.js +6 -0
  206. package/dist/setup-signin-assets.js.map +1 -0
  207. package/dist/setup-wizard.js +2 -0
  208. package/dist/setup-wizard.js.map +1 -1
  209. package/dist/structured-signin-transport.d.ts +8 -0
  210. package/dist/structured-signin-transport.js +79 -0
  211. package/dist/structured-signin-transport.js.map +1 -0
  212. package/dist/structured-signin.d.ts +131 -0
  213. package/dist/structured-signin.js +388 -0
  214. package/dist/structured-signin.js.map +1 -0
  215. package/dist/tool-permissions.js +29 -0
  216. package/dist/tool-permissions.js.map +1 -1
  217. package/dist/topic-commands.js +6 -2
  218. package/dist/topic-commands.js.map +1 -1
  219. package/dist/transcript-sources.d.ts +27 -2
  220. package/dist/transcript-sources.js +104 -40
  221. package/dist/transcript-sources.js.map +1 -1
  222. package/dist/turn-reply-guard.d.ts +1 -1
  223. package/dist/turn-reply-guard.js +1 -1
  224. package/dist/turn-reply-guard.js.map +1 -1
  225. package/dist/types.d.ts +33 -8
  226. package/dist/ui/backend-signin.js +63 -10
  227. package/dist/ui/chat-store.js +3 -2
  228. package/dist/ui/chat-strings.js +4 -4
  229. package/dist/ui/fleet-office-editor.js +68 -11
  230. package/dist/ui/fleet-office-layout.js +110 -35
  231. package/dist/ui/fleet-office-model.js +6 -3
  232. package/dist/ui/fleet-office-overview.js +167 -0
  233. package/dist/ui/fleet-office-pack.d.ts +13 -3
  234. package/dist/ui/fleet-office-pack.js +214 -24
  235. package/dist/ui/fleet-office-skin.js +98 -23
  236. package/dist/ui/fleet-office-store.js +82 -5
  237. package/dist/ui/fleet-office-view.js +5 -4
  238. package/dist/ui/fleet-office-zones.js +232 -21
  239. package/dist/ui/fleet-office.js +549 -186
  240. package/dist/ui/fleet-usage.js +19 -15
  241. package/dist/ui/office-share-dialog.js +145 -0
  242. package/dist/ui/office-share-page.js +164 -0
  243. package/dist/ui/panel-chat.js +22 -3
  244. package/dist/ui/panel-log.js +4 -4
  245. package/dist/ui/panel-needs.js +5 -5
  246. package/dist/ui/panel-settings.js +38 -12
  247. package/dist/ui/settings-dialogs.js +8 -1
  248. package/dist/ui/settings-guests.js +17 -7
  249. package/dist/ui/settings-model.js +22 -6
  250. package/dist/ui/settings-registry.js +4 -0
  251. package/dist/ui/settings-strings.js +18 -2
  252. package/dist/ui/shared/app-i18n.js +4 -2
  253. package/dist/ui/shared/app-shell.js +14 -6
  254. package/dist/ui/shared/app-stream.js +2 -1
  255. package/dist/ui/shared/app.css +85 -4
  256. package/dist/ui/shared/office/cozy.png +0 -0
  257. package/dist/ui/shared/side-panel.js +95 -0
  258. package/dist/ui/structured-signin.js +115 -0
  259. package/dist/usage-report.d.ts +20 -0
  260. package/dist/usage-report.js +54 -17
  261. package/dist/usage-report.js.map +1 -1
  262. package/dist/usage-rollup.d.ts +9 -1
  263. package/dist/usage-rollup.js +20 -4
  264. package/dist/usage-rollup.js.map +1 -1
  265. package/dist/web-api.d.ts +23 -1
  266. package/dist/web-api.js +292 -3
  267. package/dist/web-api.js.map +1 -1
  268. package/dist/web-auth.js +1 -1
  269. package/dist/web-auth.js.map +1 -1
  270. package/dist/web-backend-login.d.ts +1 -7
  271. package/dist/web-backend-login.js +2 -24
  272. package/dist/web-backend-login.js.map +1 -1
  273. package/dist/web-office-acts.d.ts +173 -0
  274. package/dist/web-office-acts.js +285 -0
  275. package/dist/web-office-acts.js.map +1 -0
  276. package/dist/web-office-pack-read.d.ts +35 -0
  277. package/dist/web-office-pack-read.js +252 -0
  278. package/dist/web-office-pack-read.js.map +1 -0
  279. package/dist/web-office-pack-tools.d.ts +232 -0
  280. package/dist/web-office-pack-tools.js +754 -0
  281. package/dist/web-office-pack-tools.js.map +1 -0
  282. package/dist/web-office-skins.d.ts +71 -6
  283. package/dist/web-office-skins.js +321 -35
  284. package/dist/web-office-skins.js.map +1 -1
  285. package/dist/web-office-store.d.ts +5 -2
  286. package/dist/web-office-store.js +69 -10
  287. package/dist/web-office-store.js.map +1 -1
  288. package/dist/web-settings-patch.d.ts +2 -1
  289. package/dist/web-settings-patch.js +4 -1
  290. package/dist/web-settings-patch.js.map +1 -1
  291. package/dist/working-recovery.d.ts +2 -2
  292. package/dist/working-recovery.js +43 -8
  293. package/dist/working-recovery.js.map +1 -1
  294. package/dist/working-state-journal.d.ts +2 -0
  295. package/dist/working-state-journal.js +16 -1
  296. package/dist/working-state-journal.js.map +1 -1
  297. package/package.json +3 -2
  298. package/templates/windows-shortcuts.ps1 +155 -140
@@ -0,0 +1,131 @@
1
+ import { type AuthCheckResult } from "./login-flows.js";
2
+ import { LoginWindowLock } from "./login-window-lock.js";
3
+ export declare const STRUCTURED_SIGNIN_BACKENDS: readonly ["kiro-cli", "claude-code", "codex"];
4
+ export type StructuredBackend = typeof STRUCTURED_SIGNIN_BACKENDS[number];
5
+ export declare function structuredSignInSupported(backend: string): backend is StructuredBackend;
6
+ export type SignInFailure = "busy" | "cancelled" | "expired" | "revoked" | "unsupported_prompt" | "provider_rejected" | "relogin_required" | "auth_unconfirmed" | "transport_failed" | "cleanup_failed";
7
+ export type SignInPrompt = {
8
+ phase: "waiting";
9
+ } | {
10
+ phase: "method";
11
+ choices: string[];
12
+ selected: number;
13
+ } | {
14
+ phase: "start_url";
15
+ } | {
16
+ phase: "region";
17
+ } | {
18
+ phase: "authorization";
19
+ url: string;
20
+ code: string | null;
21
+ } | {
22
+ phase: "code";
23
+ url: string | null;
24
+ } | {
25
+ phase: "success";
26
+ } | {
27
+ phase: "failed";
28
+ reason: SignInFailure;
29
+ };
30
+ export type SignInAction = {
31
+ kind: "method";
32
+ choice: string;
33
+ } | {
34
+ kind: "start_url" | "region" | "code";
35
+ value: string;
36
+ };
37
+ /** Plain joined pane only, bounded; raw output never becomes a browser view or an error. */
38
+ export declare function structuredSignInPrompt(backend: StructuredBackend, input: string): SignInPrompt;
39
+ export interface StructuredSignInLaunch {
40
+ argv: readonly string[];
41
+ /** Fixed command, only after an explicit re-login choice. Never an implicit logout. */
42
+ logoutArgv?: readonly string[];
43
+ }
44
+ export interface StructuredSignInTransport {
45
+ /** Must be bounded, disable automatic browser opening and use a dedicated process/PTY.
46
+ * No interactive shell after exit. Abort/close must reap late-created resources. */
47
+ start(spec: StructuredSignInLaunch, signal: AbortSignal): Promise<void>;
48
+ capture(): Promise<string>;
49
+ status(): Promise<{
50
+ alive: boolean;
51
+ exitCode?: number;
52
+ }>;
53
+ /** Literal PTY input to this attempt's fixed login command, never shell interpolation. */
54
+ write(input: string, signal: AbortSignal): Promise<void>;
55
+ /** Confirm all this attempt's native resources are gone; reject if that cannot be proven. */
56
+ close(): Promise<void>;
57
+ }
58
+ export interface StructuredSignInDeps {
59
+ transport: StructuredSignInTransport;
60
+ lock: LoginWindowLock;
61
+ /** Current setup owner / local-admin session. Rechecked after every await. */
62
+ current(): boolean;
63
+ /** Independently probe the backend's auth status; bounded and token-free (LOGIN_FLOWS.authCheck). */
64
+ checkAuth(): Promise<AuthCheckResult>;
65
+ /** Monotonic elapsed milliseconds; wall-clock corrections must not extend an attempt. */
66
+ now?(): number;
67
+ /** Safe event only. Never receives panes, URLs, codes or supplied input. */
68
+ changed?(event: {
69
+ backend: StructuredBackend;
70
+ phase: string;
71
+ reason?: SignInFailure;
72
+ }): void;
73
+ }
74
+ export interface StructuredSignInView {
75
+ id: string;
76
+ backend: StructuredBackend;
77
+ revision: number;
78
+ phase: "checking" | "starting" | "done" | "failed" | SignInPrompt["phase"];
79
+ reason?: SignInFailure;
80
+ mine: boolean;
81
+ choices?: string[];
82
+ url?: string | null;
83
+ code?: string | null;
84
+ canAct?: boolean;
85
+ }
86
+ export type SignInActionResult = "accepted" | "stale" | "invalid" | "ended" | "busy";
87
+ export declare class StructuredSignIn {
88
+ readonly backend: StructuredBackend;
89
+ private readonly owner;
90
+ private readonly deps;
91
+ readonly id: string;
92
+ private claim;
93
+ private readonly abort;
94
+ private phase;
95
+ private reason;
96
+ private prompt;
97
+ private revision;
98
+ private closed;
99
+ private begun;
100
+ private startInFlight;
101
+ private transportTouched;
102
+ private finishing;
103
+ private queue;
104
+ private pollTimer;
105
+ private deadline;
106
+ private unknownAt;
107
+ private readonly answered;
108
+ private get promptUsed();
109
+ private expiresAt;
110
+ private pendingActions;
111
+ constructor(backend: StructuredBackend, owner: object, deps: StructuredSignInDeps);
112
+ /** A reused valid login changes no credentials and needs no running-agent restart. */
113
+ get launched(): boolean;
114
+ private now;
115
+ private authorized;
116
+ private lostReason;
117
+ private current;
118
+ private emit;
119
+ private setPhase;
120
+ /** Duplicate begin/refresh joins this attempt; it never starts another child. */
121
+ start(confirmedRelogin?: boolean): Promise<void>;
122
+ view(who: object): StructuredSignInView;
123
+ private serial;
124
+ private observe;
125
+ private schedule;
126
+ /** Also used by inert harnesses; overlapping captures/actions share one FIFO. */
127
+ poll(): Promise<void>;
128
+ action(who: object, id: string, revision: number, action: SignInAction): Promise<SignInActionResult>;
129
+ cancel(): Promise<void>;
130
+ private finish;
131
+ }
@@ -0,0 +1,388 @@
1
+ /**
2
+ * #2599 stage 1: browser controls for a login command, never a browser terminal.
3
+ * Transport/authority are supplied by the host; this module starts no processes
4
+ * by itself and imports no fleet lifecycle. Agy remains console-only.
5
+ */
6
+ import { randomBytes } from "node:crypto";
7
+ import { performance } from "node:perf_hooks";
8
+ import { LOGIN_FLOWS, extractLoginHint } from "./login-flows.js";
9
+ import { linkableLoginUrl } from "./login-url.js";
10
+ export const STRUCTURED_SIGNIN_BACKENDS = ["kiro-cli", "claude-code", "codex"];
11
+ export function structuredSignInSupported(backend) {
12
+ return STRUCTURED_SIGNIN_BACKENDS.includes(backend);
13
+ }
14
+ const ARGV = {
15
+ "kiro-cli": ["kiro-cli", "login"],
16
+ "claude-code": ["claude", "auth", "login"],
17
+ "codex": ["codex", "login", "--device-auth"],
18
+ };
19
+ const TTL_MS = 10 * 60_000;
20
+ const UNKNOWN_GRACE_MS = 5_000;
21
+ const MAX_PANE = 64 * 1024;
22
+ const MAX_VALUE = 4_096;
23
+ /** Only the portion below the last menu title may be interpreted as controls. */
24
+ function menu(pane, backend) {
25
+ const rows = pane.split("\n").map(row => row.trimEnd()).filter(row => row.trim());
26
+ let title = -1;
27
+ for (let i = 0; i < rows.length; i++)
28
+ if (/^\s*\??\s*Select login method\s*[:›]?\s*$/.test(rows[i]))
29
+ title = i;
30
+ if (title < 0)
31
+ return null;
32
+ const options = rows.slice(title + 1);
33
+ const labels = backend === "kiro-cli"
34
+ ? ["Use with Builder ID", "Use with Google", "Use with GitHub", "Use with Your Organization"]
35
+ : backend === "claude-code" ? [
36
+ "Claude account with subscription · Pro, Max, Team, or Enterprise",
37
+ "Anthropic Console account · API usage billing",
38
+ "3rd-party platform · Amazon Bedrock, Microsoft Foundry, Google Vertex AI",
39
+ ] : [];
40
+ if (!labels.length || options.length !== labels.length)
41
+ return { phase: "failed", reason: "unsupported_prompt" };
42
+ let selected = -1;
43
+ for (let i = 0; i < labels.length; i++) {
44
+ const row = options[i].trimStart();
45
+ const marked = /^[❯›>]\s/.test(row);
46
+ const text = row.replace(/^[❯›>]\s*/, "").replace(/^\d+\.\s*/, "");
47
+ if (text !== labels[i] || (marked && selected !== -1))
48
+ return { phase: "failed", reason: "unsupported_prompt" };
49
+ if (marked)
50
+ selected = i;
51
+ }
52
+ if (selected < 0)
53
+ return { phase: "failed", reason: "unsupported_prompt" };
54
+ return { phase: "method", selected, choices: backend === "kiro-cli"
55
+ ? ["builder_id", "google", "github", "organization"] : ["subscription", "console", "third_party"] };
56
+ }
57
+ /** Plain joined pane only, bounded; raw output never becomes a browser view or an error. */
58
+ export function structuredSignInPrompt(backend, input) {
59
+ if (Buffer.byteLength(input, "utf8") > MAX_PANE || /\x1b|\x00/.test(input))
60
+ return { phase: "failed", reason: "unsupported_prompt" };
61
+ const pane = input.replace(/\r/g, "").trimEnd();
62
+ const flow = LOGIN_FLOWS[backend];
63
+ if (flow.failures?.some(failure => failure.pattern.test(pane))) {
64
+ return { phase: "failed", reason: /Already logged in, please logout/.test(pane) ? "relogin_required" : "provider_rejected" };
65
+ }
66
+ if (/Invalid code\b|expired (?:device )?code|authorization (?:denied|expired)/i.test(pane)) {
67
+ return { phase: "failed", reason: "provider_rejected" };
68
+ }
69
+ if (flow.successPattern.test(pane))
70
+ return { phase: "success" };
71
+ const selection = menu(pane, backend);
72
+ if (selection)
73
+ return selection;
74
+ if (backend === "kiro-cli") {
75
+ if (/(?:^|\n)\s*\??\s*Enter Start URL\s*[›>:]?\s*[^\n]*$/.test(pane))
76
+ return { phase: "start_url" };
77
+ if (/(?:^|\n)\s*\??\s*Enter Region\s*[›>:]?\s*[^\n]*$/.test(pane))
78
+ return { phase: "region" };
79
+ }
80
+ const hint = extractLoginHint(pane, flow);
81
+ const url = hint.url && linkableLoginUrl(backend, hint.url) && hint.url.length <= MAX_VALUE ? hint.url : null;
82
+ if (backend === "claude-code" && /(?:^|\n)\s*Paste code here if prompted >\s*$/.test(pane))
83
+ return { phase: "code", url };
84
+ if (url && (backend !== "codex" || hint.code))
85
+ return { phase: "authorization", url, code: hint.code };
86
+ // Unknown interactive screens are not answered. The session gives partial
87
+ // redraws a short grace, then offers the explicit console fallback.
88
+ return { phase: "waiting" };
89
+ }
90
+ export class StructuredSignIn {
91
+ backend;
92
+ owner;
93
+ deps;
94
+ id = randomBytes(16).toString("hex");
95
+ claim = null;
96
+ abort = new AbortController();
97
+ phase = "checking";
98
+ reason;
99
+ prompt = { phase: "waiting" };
100
+ revision = 0;
101
+ closed = false;
102
+ begun = false;
103
+ startInFlight = null;
104
+ transportTouched = false;
105
+ finishing = null;
106
+ queue = Promise.resolve();
107
+ pollTimer = null;
108
+ deadline = null;
109
+ unknownAt = null;
110
+ answered = new Set();
111
+ get promptUsed() { return this.answered.has(this.prompt.phase); }
112
+ expiresAt = Infinity;
113
+ pendingActions = 0;
114
+ constructor(backend, owner, deps) {
115
+ this.backend = backend;
116
+ this.owner = owner;
117
+ this.deps = deps;
118
+ if (!structuredSignInSupported(backend))
119
+ throw new Error("structured_signin_unsupported");
120
+ }
121
+ /** A reused valid login changes no credentials and needs no running-agent restart. */
122
+ get launched() { return this.transportTouched; }
123
+ now() { return (this.deps.now ?? (() => performance.now()))(); }
124
+ authorized() { try {
125
+ return this.now() < this.expiresAt && this.deps.current();
126
+ }
127
+ catch {
128
+ return false;
129
+ } }
130
+ lostReason() { return this.now() >= this.expiresAt ? "expired" : "revoked"; }
131
+ current() { return !this.closed && this.authorized() && this.deps.lock.isCurrent(this.claim); }
132
+ emit() {
133
+ try {
134
+ this.deps.changed?.({ backend: this.backend, phase: this.phase, ...(this.reason ? { reason: this.reason } : {}) });
135
+ }
136
+ catch { /* observer is not authority */ }
137
+ }
138
+ setPhase(phase, reason) {
139
+ if (this.phase === phase && this.reason === reason)
140
+ return;
141
+ this.phase = phase;
142
+ this.reason = reason;
143
+ this.revision++;
144
+ this.emit();
145
+ }
146
+ /** Duplicate begin/refresh joins this attempt; it never starts another child. */
147
+ async start(confirmedRelogin = false) {
148
+ if (this.begun || this.closed)
149
+ return;
150
+ this.begun = true;
151
+ this.claim = this.deps.lock.tryClaim("web", this.backend);
152
+ if (!this.claim) {
153
+ await this.finish("busy");
154
+ return;
155
+ }
156
+ this.expiresAt = this.now() + TTL_MS;
157
+ this.deadline = setTimeout(() => { void this.finish("expired"); }, TTL_MS);
158
+ this.deadline.unref?.();
159
+ try {
160
+ if (!this.current()) {
161
+ await this.finish(this.lostReason());
162
+ return;
163
+ }
164
+ const auth = await this.deps.checkAuth();
165
+ if (!this.current()) {
166
+ await this.finish(this.lostReason());
167
+ return;
168
+ }
169
+ if (auth === "valid" && !confirmedRelogin) {
170
+ await this.finish();
171
+ return;
172
+ }
173
+ this.setPhase("starting");
174
+ if (!this.current()) {
175
+ await this.finish(this.lostReason());
176
+ return;
177
+ }
178
+ this.transportTouched = true;
179
+ this.startInFlight = this.deps.transport.start({ argv: [...ARGV[this.backend]],
180
+ ...(confirmedRelogin && this.backend === "kiro-cli" ? { logoutArgv: ["kiro-cli", "logout"] } : {}) }, this.abort.signal);
181
+ await this.startInFlight;
182
+ if (!this.current()) {
183
+ await this.finish(this.lostReason());
184
+ return;
185
+ }
186
+ await this.poll();
187
+ }
188
+ catch {
189
+ await this.finish("transport_failed");
190
+ }
191
+ }
192
+ view(who) {
193
+ const mine = who === this.owner && this.authorized();
194
+ const basic = { id: this.id, backend: this.backend, phase: this.phase, mine, revision: this.revision,
195
+ ...(this.reason ? { reason: this.reason } : {}) };
196
+ if (!mine || this.closed)
197
+ return basic;
198
+ basic.canAct = !this.promptUsed && ["method", "code", "start_url", "region"].includes(this.prompt.phase);
199
+ if (this.prompt.phase === "method")
200
+ basic.choices = this.prompt.choices.filter(choice => choice !== "third_party");
201
+ if (this.prompt.phase === "authorization") {
202
+ basic.url = this.prompt.url;
203
+ basic.code = this.prompt.code;
204
+ }
205
+ if (this.prompt.phase === "code")
206
+ basic.url = this.prompt.url;
207
+ return basic;
208
+ }
209
+ serial(work) {
210
+ const run = this.queue.then(work);
211
+ this.queue = run.catch(() => { });
212
+ return run;
213
+ }
214
+ observe(pane) {
215
+ const next = structuredSignInPrompt(this.backend, pane);
216
+ if (JSON.stringify(next) !== JSON.stringify(this.prompt)) {
217
+ this.prompt = next;
218
+ this.revision++;
219
+ }
220
+ this.setPhase(next.phase === "success" ? "checking" : next.phase);
221
+ return next;
222
+ }
223
+ schedule() {
224
+ if (this.closed)
225
+ return;
226
+ this.pollTimer = setTimeout(() => { void this.poll(); }, 500);
227
+ this.pollTimer.unref?.();
228
+ }
229
+ /** Also used by inert harnesses; overlapping captures/actions share one FIFO. */
230
+ poll() {
231
+ return this.serial(async () => {
232
+ if (this.closed)
233
+ return;
234
+ if (this.pollTimer) {
235
+ clearTimeout(this.pollTimer);
236
+ this.pollTimer = null;
237
+ }
238
+ if (!this.current()) {
239
+ await this.finish(this.lostReason());
240
+ return;
241
+ }
242
+ try {
243
+ const pane = await this.deps.transport.capture();
244
+ if (!this.current()) {
245
+ await this.finish(this.lostReason());
246
+ return;
247
+ }
248
+ const prompt = this.observe(pane);
249
+ if (prompt.phase === "failed") {
250
+ await this.finish(prompt.reason);
251
+ return;
252
+ }
253
+ const status = await this.deps.transport.status();
254
+ if (!this.current()) {
255
+ await this.finish(this.lostReason());
256
+ return;
257
+ }
258
+ if (prompt.phase === "success" || !status.alive) {
259
+ const auth = await this.deps.checkAuth();
260
+ if (!this.current()) {
261
+ await this.finish(this.lostReason());
262
+ return;
263
+ }
264
+ await this.finish(auth === "valid" ? undefined : "auth_unconfirmed");
265
+ return;
266
+ }
267
+ if (prompt.phase === "waiting" && pane.trim()) {
268
+ this.unknownAt ??= this.now();
269
+ if (this.now() - this.unknownAt >= UNKNOWN_GRACE_MS) {
270
+ await this.finish("unsupported_prompt");
271
+ return;
272
+ }
273
+ }
274
+ else
275
+ this.unknownAt = null;
276
+ this.schedule();
277
+ }
278
+ catch {
279
+ await this.finish("transport_failed");
280
+ }
281
+ });
282
+ }
283
+ action(who, id, revision, action) {
284
+ if (this.pendingActions >= 8)
285
+ return Promise.resolve("busy");
286
+ this.pendingActions++;
287
+ return this.serial(async () => {
288
+ if (this.closed)
289
+ return "ended";
290
+ if (who !== this.owner || id !== this.id || !this.current())
291
+ return "stale";
292
+ if (revision !== this.revision || this.promptUsed)
293
+ return "stale";
294
+ if (!action || typeof action !== "object"
295
+ || (action.kind === "method" ? typeof action.choice !== "string"
296
+ : !["code", "start_url", "region"].includes(action.kind) || typeof action.value !== "string"))
297
+ return "invalid";
298
+ try {
299
+ // Re-observe immediately before input: an old browser page cannot
300
+ // answer a later prompt just because its cached revision still matches.
301
+ const pane = await this.deps.transport.capture();
302
+ if (!this.current()) {
303
+ await this.finish(this.lostReason());
304
+ return "stale";
305
+ }
306
+ this.observe(pane);
307
+ if (revision !== this.revision || this.promptUsed)
308
+ return "stale";
309
+ const prompt = this.prompt;
310
+ let text = null;
311
+ if (action.kind === "method" && prompt.phase === "method") {
312
+ const target = prompt.choices.indexOf(action.choice);
313
+ if (target < 0 || action.choice === "third_party")
314
+ return "invalid";
315
+ const delta = target - prompt.selected;
316
+ text = (delta > 0 ? "\x1b[B" : "\x1b[A").repeat(Math.abs(delta)) + "\r";
317
+ }
318
+ else if ((action.kind === "code" && prompt.phase === "code")
319
+ || (action.kind === "start_url" && prompt.phase === "start_url") || (action.kind === "region" && prompt.phase === "region")) {
320
+ const value = action.value.trim();
321
+ if (!value || value.length > MAX_VALUE || /[^\x21-\x7e]/.test(value))
322
+ return "invalid";
323
+ if (action.kind === "start_url" && !validStartUrl(value))
324
+ return "invalid";
325
+ if (action.kind === "region" && !/^[a-z]{2}(?:-[a-z]+){1,3}-\d$/.test(value))
326
+ return "invalid";
327
+ if (action.kind === "code" && !/^[A-Za-z0-9._~+/#=-]+$/.test(value))
328
+ return "invalid";
329
+ text = "\x15" + value + "\r"; // replace a prefilled prompt; literal bytes only
330
+ }
331
+ if (text === null)
332
+ return "invalid";
333
+ this.answered.add(prompt.phase); // before the async write; redraws never re-arm an answered phase
334
+ this.revision++;
335
+ await this.deps.transport.write(text, this.abort.signal);
336
+ if (!this.current()) {
337
+ await this.finish(this.lostReason());
338
+ return "ended";
339
+ }
340
+ return "accepted";
341
+ }
342
+ catch {
343
+ await this.finish("transport_failed");
344
+ return "ended";
345
+ }
346
+ }).finally(() => { this.pendingActions--; });
347
+ }
348
+ cancel() { return this.finish("cancelled"); }
349
+ finish(reason) {
350
+ if (this.finishing)
351
+ return this.finishing;
352
+ this.closed = true;
353
+ this.abort.abort();
354
+ if (this.deadline)
355
+ clearTimeout(this.deadline);
356
+ if (this.pollTimer)
357
+ clearTimeout(this.pollTimer);
358
+ this.finishing = Promise.resolve().then(async () => {
359
+ if (this.startInFlight)
360
+ await this.startInFlight.catch(() => { });
361
+ let cleanupFailed = false;
362
+ try {
363
+ if (this.transportTouched)
364
+ await this.deps.transport.close();
365
+ }
366
+ catch {
367
+ cleanupFailed = true;
368
+ }
369
+ // A possibly live credential writer keeps the shared slot reserved.
370
+ if (!cleanupFailed)
371
+ this.deps.lock.release(this.claim);
372
+ this.prompt = { phase: "waiting" };
373
+ this.setPhase(cleanupFailed || reason ? "failed" : "done", cleanupFailed ? "cleanup_failed" : reason);
374
+ });
375
+ return this.finishing;
376
+ }
377
+ }
378
+ function validStartUrl(value) {
379
+ try {
380
+ const url = new URL(value);
381
+ return url.protocol === "https:" && !url.username && !url.password && !url.search && !url.hash && !url.port
382
+ && (url.hostname === "awsapps.com" || url.hostname.endsWith(".awsapps.com")) && /^\/start\/?$/.test(url.pathname);
383
+ }
384
+ catch {
385
+ return false;
386
+ }
387
+ }
388
+ //# sourceMappingURL=structured-signin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-signin.js","sourceRoot":"","sources":["../src/structured-signin.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,10 @@ const WORKER = [
58
58
  "set_web_ambient", "clear_web_ambient",
59
59
  // Mods (#1629 r4-5b): its own look as a file, and proposing one for a person — never importing.
60
60
  "export_web_mod", "propose_web_mod",
61
+ // Its own character in the Office view (#2578): no target; off until a person switches office_access on.
62
+ "office_view", "office_set",
63
+ // The Office view's skin packs (#2692): everyone's, so off until a person switches office_pack_access on for it.
64
+ "office_pack_check", "office_pack_upload", "office_pack_delete", "office_pack_restore", "office_pack_list", "office_set_style",
61
65
  "upload_web_effect", "list_web_effects", "preview_web_effect", "profile_web_effect", "apply_web_effect", "remove_web_effect", "delete_web_effect",
62
66
  // Its own schedules. Present here, but not a free hand: scheduleOpRefusal
63
67
  // limits a non-coordinator to schedules that target itself and that it
@@ -78,6 +82,8 @@ const ORCHESTRATION = [
78
82
  "deploy_template", "teardown_deployment",
79
83
  "create_team", "delete_team", "update_team",
80
84
  "update_fleet_defaults", "update_instance_config",
85
+ // #2598 B2: asks only; a fleet admin's Confirm in General makes the move.
86
+ "migrate_kiro_instance",
81
87
  // Changing a decision somebody else recorded; `post_decision` adds, and stays.
82
88
  "update_decision",
83
89
  // #2056: Settings → Web appearance for the user (General has these too; a worker changes only its own theme).
@@ -119,6 +125,10 @@ export const TOOL_PROFILES = {
119
125
  "set_web_ambient", "clear_web_ambient",
120
126
  "export_web_mod", "propose_web_mod",
121
127
  "upload_web_effect", "list_web_effects", "preview_web_effect", "profile_web_effect", "apply_web_effect", "remove_web_effect", "delete_web_effect",
128
+ // Its own character in the Office view (#2578), as a worker's.
129
+ "office_view", "office_set",
130
+ // The Office view's skin packs (#2692), as a worker's: off until a person switches office_pack_access on.
131
+ "office_pack_check", "office_pack_upload", "office_pack_delete", "office_pack_restore", "office_pack_list", "office_set_style",
122
132
  // #2056: Settings → Web appearance for the user (the page's own checks; a worker's are its own theme only).
123
133
  "get_web_settings", "set_web_settings",
124
134
  ],
@@ -130,6 +140,8 @@ export const TOOL_PROFILES = {
130
140
  "get_web_theme", "set_web_theme", "set_web_theme_asset", "reset_web_theme",
131
141
  "get_web_appearance", "preview_web_appearance", "set_web_widget", "remove_web_widget", "set_web_ambient", "clear_web_ambient", "export_web_mod", "propose_web_mod",
132
142
  "upload_web_effect", "list_web_effects", "preview_web_effect", "profile_web_effect", "apply_web_effect", "remove_web_effect", "delete_web_effect",
143
+ "office_view", "office_set",
144
+ "office_pack_check", "office_pack_upload", "office_pack_delete", "office_pack_restore", "office_pack_list", "office_set_style",
133
145
  "validate_config", "get_fleet_status", "get_usage", "get_effort", "get_instance_logs", "get_fleet_config", "kiro_engine_status", "get_cache_report", "get_usage_report",
134
146
  // Self-scheduling, same scope as worker (#895).
135
147
  "create_schedule", "list_schedules", "update_schedule", "delete_schedule",
@@ -254,6 +266,14 @@ export const IPC_TYPE_TOOLS = {
254
266
  fleet_apply_web_effect: "apply_web_effect",
255
267
  fleet_remove_web_effect: "remove_web_effect",
256
268
  fleet_delete_web_effect: "delete_web_effect",
269
+ fleet_office_view: "office_view",
270
+ fleet_office_set: "office_set",
271
+ fleet_office_pack_check: "office_pack_check",
272
+ fleet_office_pack_upload: "office_pack_upload",
273
+ fleet_office_pack_delete: "office_pack_delete",
274
+ fleet_office_pack_restore: "office_pack_restore",
275
+ fleet_office_pack_list: "office_pack_list",
276
+ fleet_office_set_style: "office_set_style",
257
277
  };
258
278
  /**
259
279
  * Agent-endpoint ops that never reach its `OP_MAP`.
@@ -302,6 +322,14 @@ export const EARLY_AGENT_OP_TOOLS = {
302
322
  "effect-apply": "apply_web_effect",
303
323
  "effect-remove": "remove_web_effect",
304
324
  "effect-delete": "delete_web_effect",
325
+ "office-view": "office_view",
326
+ "office-set": "office_set",
327
+ "office-pack-check": "office_pack_check",
328
+ "office-pack-upload": "office_pack_upload",
329
+ "office-pack-delete": "office_pack_delete",
330
+ "office-pack-restore": "office_pack_restore",
331
+ "office-packs": "office_pack_list",
332
+ "office-style": "office_set_style",
305
333
  };
306
334
  /**
307
335
  * What to say to an agent that was refused.
@@ -322,6 +350,7 @@ const OWN_APPEARANCE_TOOLS = new Set([
322
350
  "export_web_mod", "propose_web_mod",
323
351
  "upload_web_effect", "list_web_effects", "preview_web_effect", "profile_web_effect",
324
352
  "apply_web_effect", "remove_web_effect", "delete_web_effect",
353
+ "office_view", "office_set",
325
354
  ]);
326
355
  export function toolRefusedMessage(profile, tool) {
327
356
  if (OWN_APPEARANCE_TOOLS.has(tool)) {