@songsid/agend 2.1.6-beta.1 → 2.1.6-beta.2

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 (97) hide show
  1. package/dist/apply-job.d.ts +114 -0
  2. package/dist/apply-job.js +214 -0
  3. package/dist/apply-job.js.map +1 -0
  4. package/dist/backend/credential-profile.d.ts +114 -0
  5. package/dist/backend/credential-profile.js +242 -0
  6. package/dist/backend/credential-profile.js.map +1 -0
  7. package/dist/backend/kiro-auth-store.d.ts +25 -0
  8. package/dist/backend/kiro-auth-store.js +61 -0
  9. package/dist/backend/kiro-auth-store.js.map +1 -0
  10. package/dist/backend/kiro.d.ts +8 -0
  11. package/dist/backend/kiro.js +31 -2
  12. package/dist/backend/kiro.js.map +1 -1
  13. package/dist/cli.js +113 -0
  14. package/dist/cli.js.map +1 -1
  15. package/dist/config-validator.js +21 -0
  16. package/dist/config-validator.js.map +1 -1
  17. package/dist/daemon.d.ts +10 -0
  18. package/dist/daemon.js +27 -1
  19. package/dist/daemon.js.map +1 -1
  20. package/dist/fleet-level-config.d.ts +42 -0
  21. package/dist/fleet-level-config.js +78 -0
  22. package/dist/fleet-level-config.js.map +1 -0
  23. package/dist/fleet-lock.d.ts +21 -0
  24. package/dist/fleet-lock.js +42 -8
  25. package/dist/fleet-lock.js.map +1 -1
  26. package/dist/fleet-manager.d.ts +122 -1
  27. package/dist/fleet-manager.js +537 -83
  28. package/dist/fleet-manager.js.map +1 -1
  29. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +121 -0
  30. package/dist/instance-config-impact.d.ts +55 -0
  31. package/dist/instance-config-impact.js +152 -0
  32. package/dist/instance-config-impact.js.map +1 -0
  33. package/dist/locale.js +2 -0
  34. package/dist/locale.js.map +1 -1
  35. package/dist/outbound-handlers.d.ts +5 -1
  36. package/dist/outbound-handlers.js +179 -1
  37. package/dist/outbound-handlers.js.map +1 -1
  38. package/dist/outbound-schemas.d.ts +6 -5
  39. package/dist/outbound-schemas.js +1 -0
  40. package/dist/outbound-schemas.js.map +1 -1
  41. package/dist/provider-probe.d.ts +45 -0
  42. package/dist/provider-probe.js +111 -0
  43. package/dist/provider-probe.js.map +1 -0
  44. package/dist/quickstart-api.d.ts +161 -0
  45. package/dist/quickstart-api.js +340 -0
  46. package/dist/quickstart-api.js.map +1 -0
  47. package/dist/quickstart.js +23 -50
  48. package/dist/quickstart.js.map +1 -1
  49. package/dist/self-restart-limit.d.ts +21 -0
  50. package/dist/self-restart-limit.js +129 -0
  51. package/dist/self-restart-limit.js.map +1 -0
  52. package/dist/settings-api.d.ts +15 -0
  53. package/dist/settings-api.js +126 -1
  54. package/dist/settings-api.js.map +1 -1
  55. package/dist/setup-auth.d.ts +113 -0
  56. package/dist/setup-auth.js +181 -0
  57. package/dist/setup-auth.js.map +1 -0
  58. package/dist/setup-form.d.ts +18 -0
  59. package/dist/setup-form.js +315 -0
  60. package/dist/setup-form.js.map +1 -0
  61. package/dist/setup-host.d.ts +162 -0
  62. package/dist/setup-host.js +496 -0
  63. package/dist/setup-host.js.map +1 -0
  64. package/dist/setup-marker.d.ts +8 -0
  65. package/dist/setup-marker.js +39 -0
  66. package/dist/setup-marker.js.map +1 -0
  67. package/dist/setup-tunnel-consent.d.ts +53 -0
  68. package/dist/setup-tunnel-consent.js +82 -0
  69. package/dist/setup-tunnel-consent.js.map +1 -0
  70. package/dist/tips.js +1 -1
  71. package/dist/tips.js.map +1 -1
  72. package/dist/transcript-sources.d.ts +12 -1
  73. package/dist/transcript-sources.js +19 -3
  74. package/dist/transcript-sources.js.map +1 -1
  75. package/dist/tunnel/cloudflared.d.ts +71 -0
  76. package/dist/tunnel/cloudflared.js +447 -0
  77. package/dist/tunnel/cloudflared.js.map +1 -0
  78. package/dist/tunnel/lease.d.ts +75 -0
  79. package/dist/tunnel/lease.js +209 -0
  80. package/dist/tunnel/lease.js.map +1 -0
  81. package/dist/tunnel/manager.d.ts +56 -0
  82. package/dist/tunnel/manager.js +167 -0
  83. package/dist/tunnel/manager.js.map +1 -0
  84. package/dist/tunnel/types.d.ts +119 -0
  85. package/dist/tunnel/types.js +33 -0
  86. package/dist/tunnel/types.js.map +1 -0
  87. package/dist/ui/dashboard.html +4 -3
  88. package/dist/ui/settings.html +640 -153
  89. package/dist/usage/providers.d.ts +16 -13
  90. package/dist/usage/providers.js +79 -53
  91. package/dist/usage/providers.js.map +1 -1
  92. package/dist/web-api.js +6 -4
  93. package/dist/web-api.js.map +1 -1
  94. package/dist/web-auth.d.ts +75 -0
  95. package/dist/web-auth.js +208 -2
  96. package/dist/web-auth.js.map +1 -1
  97. package/package.json +1 -1
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Running one fleet against more than one subscription of the same backend.
3
+ *
4
+ * Every CLI backend keeps its login in one place on disk, and every instance
5
+ * shares it — so the whole fleet is one account. A `credential_profile` gives a
6
+ * named, separate copy of that place: instances with the same profile share a
7
+ * login, instances with different profiles have different ones, and instances
8
+ * with no profile keep using exactly what they use today.
9
+ *
10
+ * The mechanism is backend-agnostic by construction. What differs per backend
11
+ * is one record: the environment variable that relocates the credential home,
12
+ * where inside it the store sits, and which entries may be shared back. Adding
13
+ * Codex or Claude later is a new entry in `CREDENTIAL_HOMES`, not a new design.
14
+ *
15
+ * Two rules the layout has to respect, both learned the hard way:
16
+ *
17
+ * - **The store itself is never a symlink.** SQLite resolves a symlinked
18
+ * database to its target and writes its journal beside the target, so a
19
+ * linked store is not isolated at all — it is the shared store with extra
20
+ * steps. The Codex backend carries the same warning for the same reason.
21
+ * - **Sharing is an allow list, not an exclusion list.** Codex shares
22
+ * everything except its config because its home is small and well understood.
23
+ * A credential home is neither: this one holds an 8 GB runtime cache next to
24
+ * the login, a refresh lock, and a runtime socket directory. An entry nobody
25
+ * has classified stays private, which costs disk and never leaks a session.
26
+ */
27
+ import { existsSync, lstatSync, mkdirSync, readdirSync, symlinkSync, unlinkSync } from "node:fs";
28
+ import { homedir } from "node:os";
29
+ import { join, resolve } from "node:path";
30
+ import { kiroStoreHasLogin } from "./kiro-auth-store.js";
31
+ /** Profile names become a directory; keep them boring. */
32
+ const PROFILE_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
33
+ /**
34
+ * Kiro keeps its login in `$XDG_DATA_HOME/kiro-cli/data.sqlite3`, beside
35
+ * several gigabytes of downloaded runtimes. Measured on a real install: `kas`
36
+ * 8.2G, `node` 103M, `bun` 98M, `cli-checkouts` 56M — duplicating those per
37
+ * profile is what makes the naive "just move XDG_DATA_HOME" approach expensive.
38
+ */
39
+ const KIRO_HOME = {
40
+ env: "XDG_DATA_HOME",
41
+ sharedRoot: () => resolve(process.env.XDG_DATA_HOME?.trim() || join(homedir(), ".local", "share")),
42
+ storeSubdir: "kiro-cli",
43
+ isolate: [
44
+ "data.sqlite3",
45
+ // The refresh lock guards this store's token refresh; a shared lock would
46
+ // serialise two unrelated logins against each other.
47
+ ".refresh.lock",
48
+ // Per-login runtime sockets.
49
+ "run",
50
+ ],
51
+ share: [
52
+ "kas", "kas.sha256",
53
+ "node", "node.sha256",
54
+ "bun", "bun.sha256",
55
+ "cli-checkouts",
56
+ ],
57
+ hasLogin: kiroStoreHasLogin,
58
+ loginSubcommand: "login",
59
+ };
60
+ /** Backends that can hold more than one login. Codex and Claude come later. */
61
+ export const CREDENTIAL_HOMES = {
62
+ "kiro-cli": KIRO_HOME,
63
+ };
64
+ export function credentialHomeSpec(backendName) {
65
+ return CREDENTIAL_HOMES[backendName] ?? null;
66
+ }
67
+ /**
68
+ * The profile a backend was asked for, or null for "behave exactly as before".
69
+ *
70
+ * Null is the whole backward-compatibility story: no profile means no variable
71
+ * is prepended and no directory is created, so an instance that does not opt in
72
+ * cannot be affected by this feature at all.
73
+ */
74
+ export function resolveCredentialProfile(backendOptions) {
75
+ const raw = backendOptions?.credential_profile;
76
+ if (raw === undefined || raw === null || raw === "")
77
+ return null;
78
+ const name = String(raw).trim();
79
+ if (!PROFILE_NAME.test(name)) {
80
+ throw new Error(`credential_profile must match ${PROFILE_NAME} (got ${JSON.stringify(name)})`);
81
+ }
82
+ return name;
83
+ }
84
+ /**
85
+ * Where a profile lives: under the fleet's data directory, not an instance's.
86
+ *
87
+ * A subscription is shared by however many agents the user points at it, so the
88
+ * directory belongs to the fleet. Putting it under an instance would make
89
+ * "these three agents use the work account" impossible to express.
90
+ */
91
+ export function credentialProfileHome(dataDir, backendName, profile) {
92
+ return join(dataDir, "credential-profiles", backendName, profile);
93
+ }
94
+ /**
95
+ * Create the profile home and link the shareable parts back.
96
+ *
97
+ * Idempotent: it only ever adds links that are missing, and never replaces
98
+ * anything that already exists in the profile — a real directory there is
99
+ * someone's data, and this is not the code that decides to delete it.
100
+ */
101
+ export function prepareCredentialProfileHome(spec, profileHome) {
102
+ const profileStore = spec.storeSubdir ? join(profileHome, spec.storeSubdir) : profileHome;
103
+ const sharedStore = spec.storeSubdir ? join(spec.sharedRoot(), spec.storeSubdir) : spec.sharedRoot();
104
+ // The same trap one level up: if the profile directory — or the store
105
+ // directory inside it — is itself a link to the shared home, every file below
106
+ // is the shared login. `mkdir -p` follows the link and succeeds, and the
107
+ // store is a real file at the far end, so nothing else here would notice.
108
+ // Refuse rather than launch: starting would quietly bill the wrong account.
109
+ for (const level of new Set([profileHome, profileStore])) {
110
+ try {
111
+ if (!lstatSync(level).isSymbolicLink())
112
+ continue;
113
+ }
114
+ catch {
115
+ continue; // absent; mkdir will create it
116
+ }
117
+ throw new Error(`credential profile path is a symlink, so it is not isolated: ${level}. Remove the link and let AgEnD create a real directory.`);
118
+ }
119
+ mkdirSync(profileStore, { recursive: true, mode: 0o700 });
120
+ // A link where a private entry belongs means this profile is not isolated at
121
+ // all — it is the shared login wearing a different path. Remove the link and
122
+ // let the backend create its own; never touch a real file, which is somebody's
123
+ // actual login.
124
+ for (const name of spec.isolate) {
125
+ const target = join(profileStore, name);
126
+ try {
127
+ if (!lstatSync(target).isSymbolicLink())
128
+ continue;
129
+ unlinkSync(target);
130
+ console.warn(`[agend] removed a shared link where ${name} must be private: ${target}`);
131
+ }
132
+ catch {
133
+ // Absent, or removed by a concurrent start. Either way there is no link.
134
+ }
135
+ }
136
+ for (const name of spec.share) {
137
+ // Isolation wins over sharing, so a name in both lists is never linked.
138
+ if (spec.isolate.includes(name))
139
+ continue;
140
+ const source = join(sharedStore, name);
141
+ const target = join(profileStore, name);
142
+ if (!existsSync(source))
143
+ continue;
144
+ try {
145
+ symlinkSync(source, target, lstatSync(source).isDirectory() ? "dir" : "file");
146
+ }
147
+ catch {
148
+ // EEXIST is the ordinary case on every start after the first, and it is
149
+ // also what protects anything already in the profile from being replaced.
150
+ // A cache that could not be linked costs a re-download, not correctness.
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * The profiles a fleet is configured to use for one backend, in a stable order.
156
+ *
157
+ * Read from the configuration rather than from the directories on disk: the
158
+ * config is what the fleet will actually launch, a directory can linger after a
159
+ * profile is removed, and a profile configured but never started has no
160
+ * directory yet. Instances sharing a profile name collapse into one entry,
161
+ * because they share one login and one quota.
162
+ */
163
+ export function listConfiguredProfiles(config, backendName) {
164
+ const found = new Set();
165
+ const collect = (options) => {
166
+ try {
167
+ const profile = resolveCredentialProfile(options?.[backendName]);
168
+ if (profile)
169
+ found.add(profile);
170
+ }
171
+ catch {
172
+ // A malformed name is rejected where it is written; usage must not throw
173
+ // because a config it only reads has something wrong in it.
174
+ }
175
+ };
176
+ collect(config?.defaults?.backend_options);
177
+ for (const instance of Object.values(config?.instances ?? {})) {
178
+ collect(instance.backend_options);
179
+ }
180
+ return [...found].sort();
181
+ }
182
+ /**
183
+ * The directory the backend's own files sit in, for one profile.
184
+ *
185
+ * One level below the profile home whenever the relocating variable points at a
186
+ * directory of many programs' data — `XDG_DATA_HOME/kiro-cli`, not
187
+ * `XDG_DATA_HOME`. Everything that reads a profile's store (the usage panel,
188
+ * the transcript reader, the login check) must agree on this path, so it is
189
+ * computed here rather than reassembled at each call site.
190
+ */
191
+ export function credentialProfileStoreHome(dataDir, backendName, profile) {
192
+ const spec = credentialHomeSpec(backendName);
193
+ const home = credentialProfileHome(dataDir, backendName, profile);
194
+ return spec?.storeSubdir ? join(home, spec.storeSubdir) : home;
195
+ }
196
+ export function credentialProfileLogin(dataDir, backendName, profile) {
197
+ const spec = credentialHomeSpec(backendName);
198
+ if (!spec?.hasLogin)
199
+ return { state: "unknown" };
200
+ const storeHome = credentialProfileStoreHome(dataDir, backendName, profile);
201
+ if (spec.hasLogin(storeHome))
202
+ return { state: "logged-in" };
203
+ return {
204
+ state: "signed-out",
205
+ // The whole command, not a description of one: this is read by an agent
206
+ // relaying it to a person who has to run it, and a paraphrase of a shell
207
+ // line is how a person ends up logging the wrong profile in.
208
+ loginCommand: `${spec.env}=${JSON.stringify(credentialProfileHome(dataDir, backendName, profile))} ${backendName} ${spec.loginSubcommand}`,
209
+ };
210
+ }
211
+ /** The profile one instance runs under, or null for the shared login. */
212
+ export function instanceCredentialProfile(instance, defaults, backendName) {
213
+ for (const options of [instance?.backend_options, defaults?.backend_options]) {
214
+ try {
215
+ const profile = resolveCredentialProfile(options?.[backendName]);
216
+ if (profile)
217
+ return profile;
218
+ }
219
+ catch { /* reported by the validator, not here */ }
220
+ }
221
+ return null;
222
+ }
223
+ /** Entries that are real (not links) in a prepared profile — for tests and doctor. */
224
+ export function profilePrivateEntries(spec, profileHome) {
225
+ const profileStore = spec.storeSubdir ? join(profileHome, spec.storeSubdir) : profileHome;
226
+ let names;
227
+ try {
228
+ names = readdirSync(profileStore);
229
+ }
230
+ catch {
231
+ return [];
232
+ }
233
+ return names.filter(name => {
234
+ try {
235
+ return !lstatSync(join(profileStore, name)).isSymbolicLink();
236
+ }
237
+ catch {
238
+ return false;
239
+ }
240
+ }).sort();
241
+ }
242
+ //# sourceMappingURL=credential-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-profile.js","sourceRoot":"","sources":["../../src/backend/credential-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface KiroStoredToken {
2
+ access_token?: string;
3
+ expires_at?: string;
4
+ region?: string;
5
+ profile_arn?: string;
6
+ /** IAM Identity Center portal URL — present only for Q Developer Pro logins. */
7
+ start_url?: string;
8
+ /** Social login provider (google/github/…) — present only for free-tier logins. */
9
+ provider?: string;
10
+ }
11
+ /**
12
+ * `no-store` means the database is not there (or cannot be opened at all).
13
+ * Anything else returns the tokens it could parse, which may be none — a store
14
+ * that exists with nothing in it is "signed out", a different thing entirely.
15
+ */
16
+ export type KiroAuthRead = {
17
+ readonly kind: "no-store";
18
+ } | {
19
+ readonly kind: "tokens";
20
+ readonly tokens: KiroStoredToken[];
21
+ };
22
+ /** Every token-shaped row in a store's `auth_kv`. Never writes, never refreshes. */
23
+ export declare function readKiroAuthTokens(storeHome: string): KiroAuthRead;
24
+ /** True when this store holds a login. Used to refuse a switch that would wall. */
25
+ export declare function kiroStoreHasLogin(storeHome: string): boolean;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Reading a kiro-cli credential store, read-only.
3
+ *
4
+ * Verified against a real kiro-cli 2.22.0 install (2026-09-20): one
5
+ * `data.sqlite3` per store holds the login in `auth_kv` AND the conversations
6
+ * in `conversations_v2`, plus more auth state in `state` (`auth.idc.*`). That
7
+ * is why a credential profile cannot isolate the login while sharing the
8
+ * conversations — they are tables in one file, and a table cannot be a symlink.
9
+ *
10
+ * Two callers need "is there a login in this store?": the usage panel, which
11
+ * turns it into a row, and the profile switch, which refuses to restart an
12
+ * agent into a store nobody has logged into. They shared a copy of this query
13
+ * for exactly one commit before it was worth extracting — the schema detail
14
+ * (which key shapes are tokens) must live in one place.
15
+ */
16
+ import { join } from "node:path";
17
+ import Database from "better-sqlite3";
18
+ /** Every token-shaped row in a store's `auth_kv`. Never writes, never refreshes. */
19
+ export function readKiroAuthTokens(storeHome) {
20
+ let db;
21
+ try {
22
+ db = new Database(join(storeHome, "data.sqlite3"), { readonly: true, fileMustExist: true });
23
+ }
24
+ catch {
25
+ return { kind: "no-store" };
26
+ }
27
+ try {
28
+ // Read every token-shaped row rather than a fixed pair of keys: kiro names
29
+ // its auth rows per login type (`kirocli:social:token`,
30
+ // `codewhisperer:odic:token`, …), and an unlisted one used to read as
31
+ // "not logged in" — which then removed Kiro from the usage panel entirely.
32
+ const rows = db.prepare("SELECT value FROM auth_kv WHERE key LIKE '%:token'").all();
33
+ const tokens = [];
34
+ for (const row of rows) {
35
+ try {
36
+ const token = JSON.parse(row.value);
37
+ if (token.access_token)
38
+ tokens.push(token);
39
+ }
40
+ catch { /* not a token row after all */ }
41
+ }
42
+ return { kind: "tokens", tokens };
43
+ }
44
+ catch {
45
+ // A store whose schema we cannot read is not a store we can claim a login
46
+ // from. Same answer as an empty one: signed out, still visible.
47
+ return { kind: "tokens", tokens: [] };
48
+ }
49
+ finally {
50
+ try {
51
+ db.close();
52
+ }
53
+ catch { /* best-effort */ }
54
+ }
55
+ }
56
+ /** True when this store holds a login. Used to refuse a switch that would wall. */
57
+ export function kiroStoreHasLogin(storeHome) {
58
+ const read = readKiroAuthTokens(storeHome);
59
+ return read.kind === "tokens" && read.tokens.length > 0;
60
+ }
61
+ //# sourceMappingURL=kiro-auth-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-auth-store.js","sourceRoot":"","sources":["../../src/backend/kiro-auth-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAsBtC,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,IAAI,EAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,2EAA2E;QAC3E,wDAAwD;QACxD,sEAAsE;QACtE,2EAA2E;QAC3E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,EAAyB,CAAC;QAC3G,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAoB,CAAC;gBACvD,IAAI,KAAK,CAAC,YAAY;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,gEAAgE;QAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -52,6 +52,14 @@ export declare class KiroBackend implements CliBackend {
52
52
  retriesResumeOnStartupFailure(): boolean;
53
53
  getBottomReadyPattern(): RegExp | null;
54
54
  buildCommand(config: CliBackendConfig): string;
55
+ /**
56
+ * Point this instance at its own copy of the kiro credential store.
57
+ *
58
+ * Without `credential_profile` nothing is prepended and nothing is created,
59
+ * so an instance that has not opted in launches byte-for-byte the command it
60
+ * launched before this existed.
61
+ */
62
+ private withCredentialProfile;
55
63
  private shouldWarnUnsupportedEffort;
56
64
  writeConfig(config: CliBackendConfig): void;
57
65
  getReadyPattern(): RegExp;
@@ -1,4 +1,6 @@
1
1
  import { join } from "node:path";
2
+ import { getAgendHome } from "../paths.js";
3
+ import { credentialHomeSpec, credentialProfileHome, prepareCredentialProfileHome, resolveCredentialProfile, } from "./credential-profile.js";
2
4
  import { execFileSync } from "node:child_process";
3
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync, unlinkSync, statSync } from "node:fs";
4
6
  import { resolveBinary, shellQuote, validateEffort, validateModel, warnIfModelMismatch } from "./types.js";
@@ -215,7 +217,18 @@ export class KiroBackend {
215
217
  this.activeTrustAll = config.skipPermissions !== false;
216
218
  if (config.skipPermissions !== false)
217
219
  cmd += " --trust-all-tools";
218
- // --resume is boolean: Kiro auto-resumes latest conversation for this working directory
220
+ // --resume is boolean: Kiro auto-resumes latest conversation for this working directory.
221
+ //
222
+ // Deliberately NOT `--resume-id <SESSION_ID>`, which kiro-cli 2.22 also
223
+ // offers (alongside --resume-picker). Conversations live in the same
224
+ // data.sqlite3 as the login, keyed by working directory — so a credential
225
+ // profile has its own set of them, and a session id recorded under one
226
+ // profile does not exist under another. Holding an id would mean carrying a
227
+ // stale one across a subscription switch and resuming into nothing; the
228
+ // boolean form simply finds no conversation for this directory in a new
229
+ // store, which is the same thing every brand-new instance does on its first
230
+ // launch. Switching profiles also skips resume outright (crash-state
231
+ // resumeDisabled), so this never fires against a store that just changed.
219
232
  if (!config.skipResume)
220
233
  cmd += " --resume";
221
234
  if (config.model) {
@@ -237,7 +250,23 @@ export class KiroBackend {
237
250
  }
238
251
  if (this.compatibility.supportsRequireMcpStartup)
239
252
  cmd += " --require-mcp-startup";
240
- return cmd;
253
+ return this.withCredentialProfile(config, cmd);
254
+ }
255
+ /**
256
+ * Point this instance at its own copy of the kiro credential store.
257
+ *
258
+ * Without `credential_profile` nothing is prepended and nothing is created,
259
+ * so an instance that has not opted in launches byte-for-byte the command it
260
+ * launched before this existed.
261
+ */
262
+ withCredentialProfile(config, cmd) {
263
+ const profile = resolveCredentialProfile(config.backendOptions);
264
+ if (!profile)
265
+ return cmd;
266
+ const spec = credentialHomeSpec(this.binaryName);
267
+ const home = credentialProfileHome(getAgendHome(), this.binaryName, profile);
268
+ prepareCredentialProfileHome(spec, home);
269
+ return `${spec.env}=${shellQuote(home)} ${cmd}`;
241
270
  }
242
271
  shouldWarnUnsupportedEffort() {
243
272
  if (!this.compatibilityCacheKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../src/backend/kiro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../src/backend/kiro.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1659,6 +1659,101 @@ program
1659
1659
  console.log("Fleet not running. Start with: agend start");
1660
1660
  process.exitCode = 1;
1661
1661
  });
1662
+ program
1663
+ .command("setup")
1664
+ .description("Open the guided setup page in a browser (before a fleet exists)")
1665
+ .option("--reset", "Allow setup again after it has already been completed")
1666
+ .option("--port <port>", "Port for the setup page (default: the health port)")
1667
+ .option("--tunnel", "Expose the setup page through a Cloudflare quick tunnel so a phone can open it")
1668
+ .action(async (opts) => {
1669
+ const { clearSetupComplete, isSetupComplete } = await import("./setup-marker.js");
1670
+ if (opts.reset) {
1671
+ console.log(clearSetupComplete(DATA_DIR) ? "Setup marker cleared." : "No setup marker to clear.");
1672
+ }
1673
+ else if (isSetupComplete(DATA_DIR)) {
1674
+ // Not keyed on fleet.yaml existing: a deleted or truncated config must not
1675
+ // reopen a setup page that starts out reachable to whoever finds it.
1676
+ console.error("Setup has already been completed. Use `agend setup --reset` to run it again, or edit settings from the dashboard.");
1677
+ process.exit(1);
1678
+ }
1679
+ if (opts.tunnel && opts.port) {
1680
+ // Not "ignored": a fixed port behind a tunnel is the one arrangement this
1681
+ // whole design exists to prevent, and silently overriding the flag would
1682
+ // leave someone believing they got the port they asked for.
1683
+ console.error("--tunnel and --port cannot be combined: a tunnelled setup page always binds an ephemeral port.");
1684
+ process.exit(1);
1685
+ }
1686
+ const { loadFleetConfig } = await import("./config.js");
1687
+ const fleet = existsSync(FLEET_CONFIG_PATH) ? loadFleetConfig(FLEET_CONFIG_PATH) : { defaults: {}, instances: {} };
1688
+ const { SetupHost, resolvePort, SETUP_HOST_TTL_MS } = await import("./setup-host.js");
1689
+ // Asked before anything is created: no lock taken, no listener bound, no
1690
+ // cloudflared spawned. Every time, because there is no configuration that
1691
+ // makes the consequences smaller, and there is no chat channel yet to put a
1692
+ // confirmation button in.
1693
+ if (opts.tunnel) {
1694
+ const { confirmPublicTunnel } = await import("./setup-tunnel-consent.js");
1695
+ const { createInterface } = await import("node:readline/promises");
1696
+ const consent = await confirmPublicTunnel({
1697
+ isTTY: !!process.stdin.isTTY,
1698
+ say: line => console.log(line),
1699
+ ask: async (question) => {
1700
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
1701
+ try {
1702
+ return await rl.question(question);
1703
+ }
1704
+ finally {
1705
+ rl.close();
1706
+ }
1707
+ },
1708
+ }, Math.round(SETUP_HOST_TTL_MS / 60_000));
1709
+ if (!consent.granted) {
1710
+ process.exit(1);
1711
+ }
1712
+ }
1713
+ // In tunnel mode this ignores `--port`, `health_port` and the default
1714
+ // alike: the health port is what the fleet will bind later, and a tunnel
1715
+ // that outlived this process would then be pointed at its dashboard.
1716
+ const port = resolvePort({
1717
+ tunnel: opts.tunnel,
1718
+ port: opts.port === undefined ? undefined : Number(opts.port),
1719
+ healthPort: fleet.health_port,
1720
+ });
1721
+ const host = new SetupHost({ dataDir: DATA_DIR, configPath: FLEET_CONFIG_PATH, port, tunnel: opts.tunnel });
1722
+ let started;
1723
+ try {
1724
+ started = await host.start();
1725
+ }
1726
+ catch (err) {
1727
+ console.error(err.message);
1728
+ process.exit(1);
1729
+ }
1730
+ // Two things, and only the second one is a credential. The link is where
1731
+ // the page lives — a random path so nothing finds it by looking — and the
1732
+ // code is what proves you are the person who ran this command. Putting the
1733
+ // credential in the link would mean a preview fetch, a shell history or a
1734
+ // forwarded message carries the whole thing.
1735
+ const { formatSetupCode } = await import("./setup-auth.js");
1736
+ const pageUrl = started.publicUrl ?? `http://127.0.0.1:${started.port}${started.path}`;
1737
+ // A tunnel was asked for and there is no public URL: say why, and say what
1738
+ // that means, rather than printing a loopback link under a flag that
1739
+ // promised a phone could open it.
1740
+ if (opts.tunnel && !started.publicUrl) {
1741
+ const { noTunnelBinaryMessage } = await import("./setup-tunnel-consent.js");
1742
+ console.log("");
1743
+ for (const line of noTunnelBinaryMessage())
1744
+ console.log(line);
1745
+ }
1746
+ console.log(`\n Setup page: ${pageUrl}`);
1747
+ console.log(` Setup code: ${formatSetupCode(started.code)}`);
1748
+ console.log(" Open the page, type the code. Five wrong attempts closes it,");
1749
+ console.log(" and it closes itself after 15 minutes.\n");
1750
+ // Every way this command is asked to stop, not just Ctrl-C: a host that
1751
+ // exits without releasing the lock leaves the next `agend start` to prove
1752
+ // the pid is stale before it can run.
1753
+ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) {
1754
+ process.on(signal, () => { void host.shutdown(false, signal.toLowerCase()).then(() => process.exit(0)); });
1755
+ }
1756
+ });
1662
1757
  program
1663
1758
  .command("quickstart")
1664
1759
  .description("Guided setup for a Backend, chat channel, projects, and fleet service")
@@ -1702,6 +1797,24 @@ program
1702
1797
  const child = spawn(cmd, [htmlPath], { detached: true, stdio: "ignore" });
1703
1798
  child.unref();
1704
1799
  });
1800
+ program
1801
+ .command("web-token")
1802
+ .description("Rotate the web dashboard access token")
1803
+ .argument("<action>", "rotate")
1804
+ .action(async (action) => {
1805
+ if (action !== "rotate") {
1806
+ console.error(`Unknown action "${action}". Only "rotate" is supported.`);
1807
+ process.exit(1);
1808
+ }
1809
+ const { rotateWebToken } = await import("./web-auth.js");
1810
+ rotateWebToken(DATA_DIR);
1811
+ // The new token is deliberately not printed: it would land in shell history
1812
+ // and scrollback, which is what moving it out of URLs and logs was for.
1813
+ console.log("Web token rotated.");
1814
+ console.log("Every previously issued dashboard link and browser session is now rejected.");
1815
+ console.log("A running fleet picks this up immediately — no restart needed.");
1816
+ console.log("Get a new link with `agend web`, or /dashboard in your chat channel.");
1817
+ });
1705
1818
  program
1706
1819
  .command("view")
1707
1820
  .description("Open the read-only View dashboard in your browser")