@agentteams/cli 0.1.83 → 0.1.85

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 (120) hide show
  1. package/.eslintcache +1 -1
  2. package/dist/api/plan.d.ts +2 -0
  3. package/dist/api/plan.d.ts.map +1 -1
  4. package/dist/api/plan.js.map +1 -1
  5. package/dist/auth/activeCredential.d.ts +22 -0
  6. package/dist/auth/activeCredential.d.ts.map +1 -0
  7. package/dist/auth/activeCredential.js +25 -0
  8. package/dist/auth/activeCredential.js.map +1 -0
  9. package/dist/auth/credentialStore.d.ts +118 -0
  10. package/dist/auth/credentialStore.d.ts.map +1 -0
  11. package/dist/auth/credentialStore.js +340 -0
  12. package/dist/auth/credentialStore.js.map +1 -0
  13. package/dist/auth/personalTokenClient.d.ts +189 -0
  14. package/dist/auth/personalTokenClient.d.ts.map +1 -0
  15. package/dist/auth/personalTokenClient.js +379 -0
  16. package/dist/auth/personalTokenClient.js.map +1 -0
  17. package/dist/auth/personalTokenStore.d.ts +17 -0
  18. package/dist/auth/personalTokenStore.d.ts.map +1 -0
  19. package/dist/auth/personalTokenStore.js +27 -0
  20. package/dist/auth/personalTokenStore.js.map +1 -0
  21. package/dist/auth/refreshLock.d.ts +74 -0
  22. package/dist/auth/refreshLock.d.ts.map +1 -0
  23. package/dist/auth/refreshLock.js +225 -0
  24. package/dist/auth/refreshLock.js.map +1 -0
  25. package/dist/commands/agentConfig.d.ts.map +1 -1
  26. package/dist/commands/agentConfig.js +8 -6
  27. package/dist/commands/agentConfig.js.map +1 -1
  28. package/dist/commands/attachment.d.ts.map +1 -1
  29. package/dist/commands/attachment.js +10 -2
  30. package/dist/commands/attachment.js.map +1 -1
  31. package/dist/commands/auth.d.ts +97 -0
  32. package/dist/commands/auth.d.ts.map +1 -0
  33. package/dist/commands/auth.js +245 -0
  34. package/dist/commands/auth.js.map +1 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +16 -2
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/convention.d.ts +11 -0
  39. package/dist/commands/convention.d.ts.map +1 -1
  40. package/dist/commands/convention.js +35 -11
  41. package/dist/commands/convention.js.map +1 -1
  42. package/dist/commands/dependency.d.ts.map +1 -1
  43. package/dist/commands/dependency.js +8 -6
  44. package/dist/commands/dependency.js.map +1 -1
  45. package/dist/commands/index.d.ts.map +1 -1
  46. package/dist/commands/index.js +19 -14
  47. package/dist/commands/index.js.map +1 -1
  48. package/dist/commands/init.d.ts +17 -0
  49. package/dist/commands/init.d.ts.map +1 -1
  50. package/dist/commands/init.js +90 -9
  51. package/dist/commands/init.js.map +1 -1
  52. package/dist/commands/plan.d.ts +15 -0
  53. package/dist/commands/plan.d.ts.map +1 -1
  54. package/dist/commands/plan.js +28 -0
  55. package/dist/commands/plan.js.map +1 -1
  56. package/dist/index.js +106 -16
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp/context.d.ts +15 -1
  59. package/dist/mcp/context.d.ts.map +1 -1
  60. package/dist/mcp/context.js +24 -5
  61. package/dist/mcp/context.js.map +1 -1
  62. package/dist/mcp/server.d.ts +1 -1
  63. package/dist/mcp/server.d.ts.map +1 -1
  64. package/dist/mcp/server.js +5 -2
  65. package/dist/mcp/server.js.map +1 -1
  66. package/dist/mcp/tools.d.ts.map +1 -1
  67. package/dist/mcp/tools.js +25 -22
  68. package/dist/mcp/tools.js.map +1 -1
  69. package/dist/mcp-registration/clients.d.ts.map +1 -1
  70. package/dist/mcp-registration/clients.js +1 -9
  71. package/dist/mcp-registration/clients.js.map +1 -1
  72. package/dist/mcp-registration/doctor.d.ts +38 -0
  73. package/dist/mcp-registration/doctor.d.ts.map +1 -0
  74. package/dist/mcp-registration/doctor.js +379 -0
  75. package/dist/mcp-registration/doctor.js.map +1 -0
  76. package/dist/mcp-registration/index.d.ts +7 -5
  77. package/dist/mcp-registration/index.d.ts.map +1 -1
  78. package/dist/mcp-registration/index.js +46 -21
  79. package/dist/mcp-registration/index.js.map +1 -1
  80. package/dist/mcp-registration/install.d.ts.map +1 -1
  81. package/dist/mcp-registration/install.js +12 -15
  82. package/dist/mcp-registration/install.js.map +1 -1
  83. package/dist/mcp-registration/render.d.ts +8 -6
  84. package/dist/mcp-registration/render.d.ts.map +1 -1
  85. package/dist/mcp-registration/render.js +15 -36
  86. package/dist/mcp-registration/render.js.map +1 -1
  87. package/dist/mcp-registration/serverSpec.d.ts +31 -18
  88. package/dist/mcp-registration/serverSpec.d.ts.map +1 -1
  89. package/dist/mcp-registration/serverSpec.js +36 -20
  90. package/dist/mcp-registration/serverSpec.js.map +1 -1
  91. package/dist/mcp-registration/types.d.ts +0 -3
  92. package/dist/mcp-registration/types.d.ts.map +1 -1
  93. package/dist/types/index.d.ts +10 -0
  94. package/dist/types/index.d.ts.map +1 -1
  95. package/dist/utils/apiKeyInput.d.ts +16 -0
  96. package/dist/utils/apiKeyInput.d.ts.map +1 -0
  97. package/dist/utils/apiKeyInput.js +47 -0
  98. package/dist/utils/apiKeyInput.js.map +1 -0
  99. package/dist/utils/authFormat.d.ts +18 -0
  100. package/dist/utils/authFormat.d.ts.map +1 -0
  101. package/dist/utils/authFormat.js +130 -0
  102. package/dist/utils/authFormat.js.map +1 -0
  103. package/dist/utils/authServer.d.ts +32 -3
  104. package/dist/utils/authServer.d.ts.map +1 -1
  105. package/dist/utils/authServer.js +46 -6
  106. package/dist/utils/authServer.js.map +1 -1
  107. package/dist/utils/config.d.ts +127 -15
  108. package/dist/utils/config.d.ts.map +1 -1
  109. package/dist/utils/config.js +201 -8
  110. package/dist/utils/config.js.map +1 -1
  111. package/dist/utils/errors.d.ts.map +1 -1
  112. package/dist/utils/errors.js +16 -0
  113. package/dist/utils/errors.js.map +1 -1
  114. package/dist/utils/httpClient.d.ts.map +1 -1
  115. package/dist/utils/httpClient.js +25 -0
  116. package/dist/utils/httpClient.js.map +1 -1
  117. package/dist/utils/initOutput.d.ts.map +1 -1
  118. package/dist/utils/initOutput.js +30 -0
  119. package/dist/utils/initOutput.js.map +1 -1
  120. package/package.json +1 -1
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Cross-process mutex for refresh-token rotation.
3
+ *
4
+ * Rotation is destructive on the server: presenting a refresh token that has
5
+ * already been rotated is reuse, and the server answers reuse by revoking the
6
+ * **entire token family** (`rotatePersonalRefreshToken` in
7
+ * `api/src/services/personalToken.ts`). Every `agentteams` invocation rotates,
8
+ * and several can run at once — one-shot commands next to a long-lived
9
+ * `agentteams mcp` server. Without serialization, two processes reading the same
10
+ * token and rotating it concurrently log the user out of every process at once,
11
+ * recoverable only by a fresh `agentteams auth login`.
12
+ *
13
+ * The lock is a file created with `wx`, which is atomic on every platform the
14
+ * CLI supports, so no native dependency is needed. Two failure modes are
15
+ * deliberately not treated as errors:
16
+ *
17
+ * - **No usable lock directory** (read-only home, sandbox) → run unlocked.
18
+ * The lock protects against a race; refusing to authenticate at all because
19
+ * the guard is unavailable would be the worse outcome.
20
+ * - **A lock left behind by a crashed process** → broken once it is older than
21
+ * {@link DEFAULT_STALE_AFTER_MS}, so a killed process cannot lock the user
22
+ * out permanently.
23
+ *
24
+ * Contention that outlives the timeout raises {@link RefreshLockTimeoutError}
25
+ * instead of rotating anyway: the caller treats it like a network failure and
26
+ * keeps the credential, which costs one retry. Rotating unlocked would risk the
27
+ * family revocation this module exists to prevent.
28
+ */
29
+ /**
30
+ * How long a held lock stays credible. A token request that has not finished by
31
+ * then is either hung or its process is gone; both justify taking over.
32
+ */
33
+ export declare const DEFAULT_STALE_AFTER_MS = 20000;
34
+ /** Long enough to outlast a slow-but-real rotation ahead of us in the queue. */
35
+ export declare const DEFAULT_TIMEOUT_MS = 30000;
36
+ export interface RefreshLock {
37
+ withLock<T>(run: () => Promise<T>): Promise<T>;
38
+ }
39
+ export declare class RefreshLockTimeoutError extends Error {
40
+ readonly lockPath: string;
41
+ readonly timeoutMs: number;
42
+ constructor(lockPath: string, timeoutMs: number);
43
+ }
44
+ /**
45
+ * The lock file itself could not be maintained — distinct from losing a race for
46
+ * it. Kept separate so the caller can say which one happened instead of
47
+ * reporting every lock problem as a network failure.
48
+ */
49
+ export declare class RefreshLockUnavailableError extends Error {
50
+ readonly lockPath: string;
51
+ readonly cause: unknown;
52
+ constructor(lockPath: string, cause: unknown);
53
+ }
54
+ /**
55
+ * A lock that never blocks. The default for {@link PersonalTokenClient} so unit
56
+ * tests touch no filesystem; production wiring passes a real lock.
57
+ */
58
+ export declare const noopRefreshLock: RefreshLock;
59
+ export interface CreateFileRefreshLockOptions {
60
+ /** Defaults to `~/.agentteams/locks`. */
61
+ directory?: string;
62
+ staleAfterMs?: number;
63
+ timeoutMs?: number;
64
+ retryDelayMs?: number;
65
+ now?: () => number;
66
+ sleep?: (ms: number) => Promise<void>;
67
+ }
68
+ /**
69
+ * One lock file per credential slot, named by hash: a slot embeds an API URL,
70
+ * whose `:` and `/` are not portable in a filename.
71
+ */
72
+ export declare function refreshLockFileName(slot: string): string;
73
+ export declare function createFileRefreshLock(slot: string, options?: CreateFileRefreshLockOptions): RefreshLock;
74
+ //# sourceMappingURL=refreshLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshLock.d.ts","sourceRoot":"","sources":["../../src/auth/refreshLock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAUH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAOzC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAE9C,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM;gBADjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;CAK7B;AAED;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IAElD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO;gBADd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO;CAS1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,WAE7B,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAOD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,4BAAiC,GAAG,WAAW,CA2I3G"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Cross-process mutex for refresh-token rotation.
3
+ *
4
+ * Rotation is destructive on the server: presenting a refresh token that has
5
+ * already been rotated is reuse, and the server answers reuse by revoking the
6
+ * **entire token family** (`rotatePersonalRefreshToken` in
7
+ * `api/src/services/personalToken.ts`). Every `agentteams` invocation rotates,
8
+ * and several can run at once — one-shot commands next to a long-lived
9
+ * `agentteams mcp` server. Without serialization, two processes reading the same
10
+ * token and rotating it concurrently log the user out of every process at once,
11
+ * recoverable only by a fresh `agentteams auth login`.
12
+ *
13
+ * The lock is a file created with `wx`, which is atomic on every platform the
14
+ * CLI supports, so no native dependency is needed. Two failure modes are
15
+ * deliberately not treated as errors:
16
+ *
17
+ * - **No usable lock directory** (read-only home, sandbox) → run unlocked.
18
+ * The lock protects against a race; refusing to authenticate at all because
19
+ * the guard is unavailable would be the worse outcome.
20
+ * - **A lock left behind by a crashed process** → broken once it is older than
21
+ * {@link DEFAULT_STALE_AFTER_MS}, so a killed process cannot lock the user
22
+ * out permanently.
23
+ *
24
+ * Contention that outlives the timeout raises {@link RefreshLockTimeoutError}
25
+ * instead of rotating anyway: the caller treats it like a network failure and
26
+ * keeps the credential, which costs one retry. Rotating unlocked would risk the
27
+ * family revocation this module exists to prevent.
28
+ */
29
+ import { createHash, randomUUID } from 'node:crypto';
30
+ import { linkSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
31
+ import { homedir } from 'node:os';
32
+ import { join } from 'node:path';
33
+ /** Same `.agentteams` directory the global config lives in. */
34
+ const LOCK_DIR = ['.agentteams', 'locks'];
35
+ /**
36
+ * How long a held lock stays credible. A token request that has not finished by
37
+ * then is either hung or its process is gone; both justify taking over.
38
+ */
39
+ export const DEFAULT_STALE_AFTER_MS = 20_000;
40
+ /** Long enough to outlast a slow-but-real rotation ahead of us in the queue. */
41
+ export const DEFAULT_TIMEOUT_MS = 30_000;
42
+ const DEFAULT_RETRY_DELAY_MS = 50;
43
+ const DIRECTORY_MODE = 0o700;
44
+ const FILE_MODE = 0o600;
45
+ export class RefreshLockTimeoutError extends Error {
46
+ lockPath;
47
+ timeoutMs;
48
+ constructor(lockPath, timeoutMs) {
49
+ super(`Timed out after ${timeoutMs}ms waiting for the credential rotation lock at ${lockPath}.`);
50
+ this.lockPath = lockPath;
51
+ this.timeoutMs = timeoutMs;
52
+ this.name = 'RefreshLockTimeoutError';
53
+ }
54
+ }
55
+ /**
56
+ * The lock file itself could not be maintained — distinct from losing a race for
57
+ * it. Kept separate so the caller can say which one happened instead of
58
+ * reporting every lock problem as a network failure.
59
+ */
60
+ export class RefreshLockUnavailableError extends Error {
61
+ lockPath;
62
+ cause;
63
+ constructor(lockPath, cause) {
64
+ super(`Could not maintain the credential rotation lock at ${lockPath}: ${cause instanceof Error ? cause.message : String(cause)}`);
65
+ this.lockPath = lockPath;
66
+ this.cause = cause;
67
+ this.name = 'RefreshLockUnavailableError';
68
+ }
69
+ }
70
+ /**
71
+ * A lock that never blocks. The default for {@link PersonalTokenClient} so unit
72
+ * tests touch no filesystem; production wiring passes a real lock.
73
+ */
74
+ export const noopRefreshLock = {
75
+ withLock: (run) => run(),
76
+ };
77
+ /**
78
+ * One lock file per credential slot, named by hash: a slot embeds an API URL,
79
+ * whose `:` and `/` are not portable in a filename.
80
+ */
81
+ export function refreshLockFileName(slot) {
82
+ return `personal-token-${createHash('sha256').update(slot).digest('hex').slice(0, 16)}.lock`;
83
+ }
84
+ function isAlreadyExists(error) {
85
+ return error?.code === 'EEXIST';
86
+ }
87
+ export function createFileRefreshLock(slot, options = {}) {
88
+ const directory = options.directory ?? join(homedir(), ...LOCK_DIR);
89
+ const lockPath = join(directory, refreshLockFileName(slot));
90
+ const staleAfterMs = options.staleAfterMs ?? DEFAULT_STALE_AFTER_MS;
91
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
92
+ const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
93
+ const now = options.now ?? Date.now;
94
+ const sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
95
+ /**
96
+ * When the lock was taken, or null if that cannot be established.
97
+ *
98
+ * The timestamp inside the file is preferred so the clock the caller injects is
99
+ * the one that decides. An unreadable or half-written file falls back to mtime
100
+ * rather than counting as "no holder": the file existing is itself evidence
101
+ * that someone created it, and treating it as free would delete a live lock.
102
+ */
103
+ const readHeldSince = () => {
104
+ try {
105
+ const record = JSON.parse(readFileSync(lockPath, 'utf-8'));
106
+ if (typeof record.startedAt === 'number')
107
+ return record.startedAt;
108
+ }
109
+ catch {
110
+ // Gone, or content we cannot interpret. mtime is the fallback below.
111
+ }
112
+ try {
113
+ return statSync(lockPath).mtimeMs;
114
+ }
115
+ catch {
116
+ // Really gone — the holder released between the two calls.
117
+ return null;
118
+ }
119
+ };
120
+ const breakIfStale = () => {
121
+ const heldSince = readHeldSince();
122
+ if (heldSince !== null && now() - heldSince < staleAfterMs) {
123
+ return;
124
+ }
125
+ try {
126
+ unlinkSync(lockPath);
127
+ }
128
+ catch {
129
+ // Another waiter won the race to break it. Either way it is gone.
130
+ }
131
+ };
132
+ /**
133
+ * Publish the lock file with its content already in place.
134
+ *
135
+ * `writeFileSync` with `wx` creates the file and writes afterwards, leaving a
136
+ * window in which the lock exists but is empty — long enough for a waiter to
137
+ * read nothing, conclude there is no holder, and delete a lock that was just
138
+ * taken. Writing to a private path and `link`ing it into place closes that
139
+ * window: `link` is atomic and fails with EEXIST when the target exists, which
140
+ * is the same mutual exclusion `wx` provides.
141
+ */
142
+ const publishLockFile = (owner, record) => {
143
+ const stagingPath = `${lockPath}.${process.pid}.${randomUUID()}`;
144
+ writeFileSync(stagingPath, JSON.stringify(record), { flag: 'wx', mode: FILE_MODE });
145
+ try {
146
+ linkSync(stagingPath, lockPath);
147
+ }
148
+ finally {
149
+ try {
150
+ unlinkSync(stagingPath);
151
+ }
152
+ catch {
153
+ // The link either succeeded (the content lives on at lockPath) or threw
154
+ // and is being propagated; either way the staging copy is disposable.
155
+ }
156
+ }
157
+ };
158
+ /** Returns the owner token, or null when this machine cannot host a lock. */
159
+ const acquire = async () => {
160
+ try {
161
+ // `recursive` makes an existing directory a no-op, so anything thrown here
162
+ // means no lock is possible at all (read-only home, no permission, a file
163
+ // sitting on the path). Proceed unguarded rather than block every command.
164
+ mkdirSync(directory, { recursive: true, mode: DIRECTORY_MODE });
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ const deadline = now() + timeoutMs;
170
+ let firstWriteError;
171
+ for (;;) {
172
+ const owner = `${process.pid}:${randomUUID()}`;
173
+ const record = { owner, startedAt: now() };
174
+ try {
175
+ publishLockFile(owner, record);
176
+ return owner;
177
+ }
178
+ catch (error) {
179
+ if (!isAlreadyExists(error)) {
180
+ // Not contention. A transient failure (ENOSPC, a permission change
181
+ // mid-run) must not silently downgrade to an unguarded rotation, so it
182
+ // is retried within the same deadline and only reported if it persists.
183
+ firstWriteError ??= error;
184
+ if (now() >= deadline) {
185
+ throw new RefreshLockUnavailableError(lockPath, firstWriteError);
186
+ }
187
+ await sleep(retryDelayMs);
188
+ continue;
189
+ }
190
+ }
191
+ breakIfStale();
192
+ if (now() >= deadline) {
193
+ throw new RefreshLockTimeoutError(lockPath, timeoutMs);
194
+ }
195
+ await sleep(retryDelayMs);
196
+ }
197
+ };
198
+ const release = (owner) => {
199
+ if (owner === null)
200
+ return;
201
+ try {
202
+ // Only remove a lock still recorded as ours: if it was broken as stale
203
+ // while we ran, the file now belongs to whoever took over.
204
+ const record = JSON.parse(readFileSync(lockPath, 'utf-8'));
205
+ if (record.owner !== owner)
206
+ return;
207
+ unlinkSync(lockPath);
208
+ }
209
+ catch {
210
+ // Already gone, or unreadable. Nothing left to release.
211
+ }
212
+ };
213
+ return {
214
+ async withLock(run) {
215
+ const owner = await acquire();
216
+ try {
217
+ return await run();
218
+ }
219
+ finally {
220
+ release(owner);
221
+ }
222
+ },
223
+ };
224
+ }
225
+ //# sourceMappingURL=refreshLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshLock.js","sourceRoot":"","sources":["../../src/auth/refreshLock.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agentConfig.d.ts","sourceRoot":"","sources":["../../src/commands/agentConfig.ts"],"names":[],"mappings":"AAwBA,wBAAsB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAOpD;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAO7D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAUhE"}
1
+ {"version":3,"file":"agentConfig.d.ts","sourceRoot":"","sources":["../../src/commands/agentConfig.ts"],"names":[],"mappings":"AA0BA,wBAAsB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAOpD;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAO7D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAUhE"}
@@ -1,9 +1,11 @@
1
1
  import httpClient from '../utils/httpClient.js';
2
- import { getConfigurationNotFoundMessage, loadConfig } from '../utils/config.js';
2
+ import { getConfigurationNotFoundMessage, loadConfigWithCredential } from '../utils/config.js';
3
3
  import { withoutJsonContentType } from '../utils/httpHeaders.js';
4
4
  import { buildAuthHeaders } from '../utils/apiContext.js';
5
- function getConfigOrThrow() {
6
- const config = loadConfig();
5
+ async function getConfigOrThrow() {
6
+ // Credential-aware: a personal-token project has no `apiKey` on disk, so the
7
+ // plain config loader would report it as "not initialized".
8
+ const config = await loadConfigWithCredential();
7
9
  if (!config) {
8
10
  throw new Error(getConfigurationNotFoundMessage());
9
11
  }
@@ -19,7 +21,7 @@ function getApiBaseUrl(apiUrl) {
19
21
  return apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;
20
22
  }
21
23
  export async function agentConfigList() {
22
- const config = getConfigOrThrow();
24
+ const config = await getConfigOrThrow();
23
25
  const apiBaseUrl = getApiBaseUrl(config.apiUrl);
24
26
  const response = await httpClient.get(`${apiBaseUrl}/api/projects/${config.projectId}/agent-configs`, {
25
27
  headers: getHeaders(config.apiKey),
@@ -27,7 +29,7 @@ export async function agentConfigList() {
27
29
  return response.data;
28
30
  }
29
31
  export async function agentConfigGet(id) {
30
- const config = getConfigOrThrow();
32
+ const config = await getConfigOrThrow();
31
33
  const apiBaseUrl = getApiBaseUrl(config.apiUrl);
32
34
  const response = await httpClient.get(`${apiBaseUrl}/api/projects/${config.projectId}/agent-configs/${id}`, {
33
35
  headers: getHeaders(config.apiKey),
@@ -35,7 +37,7 @@ export async function agentConfigGet(id) {
35
37
  return response.data;
36
38
  }
37
39
  export async function agentConfigDelete(id) {
38
- const config = getConfigOrThrow();
40
+ const config = await getConfigOrThrow();
39
41
  const apiBaseUrl = getApiBaseUrl(config.apiUrl);
40
42
  const response = await httpClient.delete(`${apiBaseUrl}/api/projects/${config.projectId}/agent-configs/${id}`, {
41
43
  headers: withoutJsonContentType(getHeaders(config.apiKey)),
@@ -1 +1 @@
1
- {"version":3,"file":"agentConfig.js","sourceRoot":"","sources":["../../src/commands/agentConfig.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO;QACL,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC3B,cAAc,EAAE,kBAAkB;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,gBAAgB,EAAE;QACpG,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE;QAC1G,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAU;IAChD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE;QAC7G,OAAO,EAAE,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"agentConfig.js","sourceRoot":"","sources":["../../src/commands/agentConfig.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,KAAK,UAAU,gBAAgB;IAC7B,6EAA6E;IAC7E,4DAA4D;IAC5D,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO;QACL,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC3B,cAAc,EAAE,kBAAkB;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,gBAAgB,EAAE;QACpG,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE;QAC1G,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;KACnC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAU;IAChD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,UAAU,iBAAiB,MAAM,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE;QAC7G,OAAO,EAAE,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AAmEA,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC,CA8DlB"}
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AA2EA,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC,CAiElB"}
@@ -27,9 +27,14 @@ const CONTENT_TYPE_BY_EXTENSION = {
27
27
  pdf: 'application/pdf',
28
28
  html: 'text/html',
29
29
  htm: 'text/html',
30
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
31
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
32
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
30
33
  };
34
+ const OFFICE_EXTENSIONS = new Set(['docx', 'pptx', 'xlsx']);
35
+ const resolveExtension = (fileName) => fileName.includes('.') ? (fileName.split('.').pop()?.toLowerCase() ?? '') : '';
31
36
  const resolveContentType = (fileName) => {
32
- const ext = fileName.includes('.') ? (fileName.split('.').pop()?.toLowerCase() ?? '') : '';
37
+ const ext = resolveExtension(fileName);
33
38
  const contentType = CONTENT_TYPE_BY_EXTENSION[ext];
34
39
  if (!contentType) {
35
40
  throw new Error(`Unsupported attachment type ".${ext}". Allowed: ${Object.keys(CONTENT_TYPE_BY_EXTENSION).join(', ')}`);
@@ -83,9 +88,12 @@ export async function executeAttachmentCommand(apiUrl, headers, action, options)
83
88
  }
84
89
  const fileName = basename(filePath);
85
90
  const contentType = resolveContentType(fileName);
91
+ if (OFFICE_EXTENSIONS.has(resolveExtension(fileName)) && targetType !== 'document') {
92
+ throw new Error('Office attachments are supported only with --document-id.');
93
+ }
86
94
  printFileSizeInfo(filePathOption, buffer.length);
87
95
  // 1) Presigned draft 업로드 URL 발급
88
- const draftResponse = await axios.post(`${apiUrl}/api/attachments/draft-upload-url`, { fileName, contentType, size: buffer.length }, { headers });
96
+ const draftResponse = await axios.post(`${apiUrl}/api/attachments/draft-upload-url`, { fileName, contentType, size: buffer.length, targetType }, { headers });
89
97
  const { uploadUrl, key } = draftResponse.data.data;
90
98
  // 2) R2에 파일 바이트 직접 PUT (API 서버를 경유하지 않음)
91
99
  await axios.put(uploadUrl, buffer, { headers: { 'Content-Type': contentType } });
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/commands/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,IAAY,EAAE,EAAE;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAA2B;IACxD,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,eAAe;IACnB,QAAQ,EAAE,eAAe;IACzB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,yEAAyE;IAC/E,IAAI,EAAE,2EAA2E;IACjF,IAAI,EAAE,mEAAmE;CAC1E,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE,CACpD,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEjF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACtD,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,eAAe,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,OAAgC,EACkD,EAAE;IACpF,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG;QACd,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAqB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;QACnF,kBAAkB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,kBAA2B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI;QACrG,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;KAC9E,CAAC,MAAM,CAAC,CAAC,MAAM,EAAwC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;AAC5G,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAc,EACd,OAA+B,EAC/B,MAAc,EACd,OAAgC;IAEhC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,IAAI,GAAG,UAAU;YACrB,CAAC,CAAC,kBAAkB,UAAU,cAAc;YAC5C,CAAC,CAAC,wBAAwB,SAAS,cAAc,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,cAAc,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjD,gCAAgC;QAChC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,IAAI,CACpC,GAAG,MAAM,mCAAmC,EAC5C,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAC1D,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,IAA0C,CAAC;QAEzF,yCAAyC;QACzC,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAEjF,sBAAsB;QACtB,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAI,CACrC,GAAG,MAAM,kBAAkB,EAC3B,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,EACrD,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,iCAAiC;YACpD,sFAAsF,CACzF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * `agentteams auth login | status | logout`.
3
+ *
4
+ * The default authentication path for new projects and the migration path for
5
+ * legacy configs. The stored credential is picked up by `resolveCredential()`
6
+ * when the config has no `key_`, or when a migrated legacy project carries
7
+ * `authMode: 'personal-token'`.
8
+ */
9
+ import type { CredentialBackendId, CredentialStoreReason } from '../auth/credentialStore.js';
10
+ import type { Config } from '../types/index.js';
11
+ import { type CredentialSource } from '../utils/config.js';
12
+ export type AuthLoginResult = {
13
+ success: true;
14
+ authUrl: string;
15
+ apiUrl: string;
16
+ identity: {
17
+ memberId: string;
18
+ email: string;
19
+ nickname: string;
20
+ };
21
+ /**
22
+ * Always true on success: a login that could not be persisted is rejected and
23
+ * revoked inside `exchangeAuthorizationCode` rather than reported as a
24
+ * half-login. The field stays in the payload because scripts read it.
25
+ */
26
+ persisted: boolean;
27
+ /** Which OS store holds the credential — the same vocabulary as `auth status`. */
28
+ storeBackend: CredentialBackendId;
29
+ storeReason: CredentialStoreReason;
30
+ configPath: string | null;
31
+ authMode: 'personal-token';
32
+ warning?: string;
33
+ };
34
+ export type AuthStatusResult = {
35
+ apiUrl: string;
36
+ configPath: string | null;
37
+ /** Which credential the next command would authenticate with. */
38
+ credentialSource: CredentialSource | null;
39
+ authMode: Config['authMode'] | null;
40
+ hasProjectApiKey: boolean;
41
+ personalToken: {
42
+ connected: boolean;
43
+ persisted: boolean;
44
+ storeBackend: CredentialBackendId;
45
+ storeReason: CredentialStoreReason;
46
+ reconnectRequired: boolean;
47
+ identity: {
48
+ memberId: string;
49
+ email: string;
50
+ nickname: string;
51
+ } | null;
52
+ expiresAt: string | null;
53
+ };
54
+ problem?: string;
55
+ };
56
+ export type AuthLogoutResult = {
57
+ success: true;
58
+ apiUrl: string;
59
+ configPath: string | null;
60
+ /** false → the token is still live server-side (`--local`, or nothing was stored). */
61
+ revokedOnServer: boolean;
62
+ /** true when the project reverted to an `agentteams init` API key that is still on disk. */
63
+ fellBackToApiKey: boolean;
64
+ warning?: string;
65
+ };
66
+ /**
67
+ * Where to log in. Unlike the legacy `init` path this honours the project's own
68
+ * `apiUrl`, because a refresh token issued by the dev API is worthless against
69
+ * production and storing it under the wrong server would silently fail later.
70
+ */
71
+ export declare function resolveAuthApiUrl(options?: {
72
+ apiUrl?: string;
73
+ }): string;
74
+ export declare function buildPersonalTokenAuthorizeUrl(input: {
75
+ port: number;
76
+ state: string;
77
+ codeChallenge: string;
78
+ projectName?: string;
79
+ }): string;
80
+ /**
81
+ * Run the browser round trip and exchange the resulting code for tokens.
82
+ *
83
+ * Exported so `init --auth personal-token` reuses the identical flow rather than
84
+ * growing a second copy of the PKCE handshake.
85
+ */
86
+ export declare function performPersonalTokenLogin(input: {
87
+ apiUrl: string;
88
+ projectName?: string;
89
+ }): Promise<{
90
+ authUrl: string;
91
+ identity: AuthLoginResult['identity'];
92
+ persisted: boolean;
93
+ storeBackend: CredentialBackendId;
94
+ storeReason: CredentialStoreReason;
95
+ }>;
96
+ export declare function executeAuthCommand(action: string, options?: Record<string, unknown>): Promise<unknown>;
97
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}