ai-task-board-bridge 1.1.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +119 -26
  2. package/dist/account-quota.d.ts +68 -0
  3. package/dist/account-quota.d.ts.map +1 -0
  4. package/dist/account-quota.js +147 -0
  5. package/dist/account-quota.js.map +1 -0
  6. package/dist/antigravity-runtime/board-client.d.ts +36 -3
  7. package/dist/antigravity-runtime/board-client.d.ts.map +1 -1
  8. package/dist/antigravity-runtime/board-client.js +72 -12
  9. package/dist/antigravity-runtime/board-client.js.map +1 -1
  10. package/dist/antigravity-runtime/bridge.d.ts +26 -2
  11. package/dist/antigravity-runtime/bridge.d.ts.map +1 -1
  12. package/dist/antigravity-runtime/bridge.js +292 -18
  13. package/dist/antigravity-runtime/bridge.js.map +1 -1
  14. package/dist/antigravity-runtime/cli.js +3 -2
  15. package/dist/antigravity-runtime/cli.js.map +1 -1
  16. package/dist/antigravity-runtime/config.d.ts +24 -0
  17. package/dist/antigravity-runtime/config.d.ts.map +1 -1
  18. package/dist/antigravity-runtime/config.js +112 -2
  19. package/dist/antigravity-runtime/config.js.map +1 -1
  20. package/dist/antigravity-runtime/device-file-access.d.ts +54 -0
  21. package/dist/antigravity-runtime/device-file-access.d.ts.map +1 -0
  22. package/dist/antigravity-runtime/device-file-access.js +389 -0
  23. package/dist/antigravity-runtime/device-file-access.js.map +1 -0
  24. package/dist/antigravity-runtime/device-identity.d.ts +16 -0
  25. package/dist/antigravity-runtime/device-identity.d.ts.map +1 -0
  26. package/dist/antigravity-runtime/device-identity.js +67 -0
  27. package/dist/antigravity-runtime/device-identity.js.map +1 -0
  28. package/dist/antigravity-runtime/index.d.ts +5 -4
  29. package/dist/antigravity-runtime/index.d.ts.map +1 -1
  30. package/dist/antigravity-runtime/index.js +4 -3
  31. package/dist/antigravity-runtime/index.js.map +1 -1
  32. package/dist/antigravity-runtime/quota.d.ts +39 -0
  33. package/dist/antigravity-runtime/quota.d.ts.map +1 -0
  34. package/dist/antigravity-runtime/quota.js +282 -0
  35. package/dist/antigravity-runtime/quota.js.map +1 -0
  36. package/dist/antigravity-runtime/setup.d.ts +4 -0
  37. package/dist/antigravity-runtime/setup.d.ts.map +1 -1
  38. package/dist/antigravity-runtime/setup.js +126 -19
  39. package/dist/antigravity-runtime/setup.js.map +1 -1
  40. package/dist/antigravity-runtime/update-manager.d.ts +21 -0
  41. package/dist/antigravity-runtime/update-manager.d.ts.map +1 -0
  42. package/dist/antigravity-runtime/update-manager.js +323 -0
  43. package/dist/antigravity-runtime/update-manager.js.map +1 -0
  44. package/dist/app-server-client.d.ts +8 -0
  45. package/dist/app-server-client.d.ts.map +1 -1
  46. package/dist/app-server-client.js +4 -1
  47. package/dist/app-server-client.js.map +1 -1
  48. package/dist/bridge.d.ts +1 -0
  49. package/dist/bridge.d.ts.map +1 -1
  50. package/dist/bridge.js +134 -7
  51. package/dist/bridge.js.map +1 -1
  52. package/dist/cli.js +17 -3
  53. package/dist/cli.js.map +1 -1
  54. package/dist/device-file-access.d.ts +54 -0
  55. package/dist/device-file-access.d.ts.map +1 -0
  56. package/dist/device-file-access.js +389 -0
  57. package/dist/device-file-access.js.map +1 -0
  58. package/dist/device-identity.d.ts +16 -0
  59. package/dist/device-identity.d.ts.map +1 -0
  60. package/dist/device-identity.js +67 -0
  61. package/dist/device-identity.js.map +1 -0
  62. package/dist/history-sync.d.ts.map +1 -1
  63. package/dist/history-sync.js +28 -1
  64. package/dist/history-sync.js.map +1 -1
  65. package/dist/index.d.ts +1 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/installer.d.ts +2 -1
  70. package/dist/installer.d.ts.map +1 -1
  71. package/dist/installer.js +31 -16
  72. package/dist/installer.js.map +1 -1
  73. package/dist/kimi-runtime/board-client.d.ts +36 -3
  74. package/dist/kimi-runtime/board-client.d.ts.map +1 -1
  75. package/dist/kimi-runtime/board-client.js +72 -12
  76. package/dist/kimi-runtime/board-client.js.map +1 -1
  77. package/dist/kimi-runtime/bridge.d.ts +26 -2
  78. package/dist/kimi-runtime/bridge.d.ts.map +1 -1
  79. package/dist/kimi-runtime/bridge.js +291 -16
  80. package/dist/kimi-runtime/bridge.js.map +1 -1
  81. package/dist/kimi-runtime/cli.js +4 -2
  82. package/dist/kimi-runtime/cli.js.map +1 -1
  83. package/dist/kimi-runtime/config.d.ts +25 -0
  84. package/dist/kimi-runtime/config.d.ts.map +1 -1
  85. package/dist/kimi-runtime/config.js +117 -3
  86. package/dist/kimi-runtime/config.js.map +1 -1
  87. package/dist/kimi-runtime/device-file-access.d.ts +54 -0
  88. package/dist/kimi-runtime/device-file-access.d.ts.map +1 -0
  89. package/dist/kimi-runtime/device-file-access.js +389 -0
  90. package/dist/kimi-runtime/device-file-access.js.map +1 -0
  91. package/dist/kimi-runtime/device-identity.d.ts +16 -0
  92. package/dist/kimi-runtime/device-identity.d.ts.map +1 -0
  93. package/dist/kimi-runtime/device-identity.js +67 -0
  94. package/dist/kimi-runtime/device-identity.js.map +1 -0
  95. package/dist/kimi-runtime/index.d.ts +5 -4
  96. package/dist/kimi-runtime/index.d.ts.map +1 -1
  97. package/dist/kimi-runtime/index.js +4 -3
  98. package/dist/kimi-runtime/index.js.map +1 -1
  99. package/dist/kimi-runtime/quota.d.ts +39 -0
  100. package/dist/kimi-runtime/quota.d.ts.map +1 -0
  101. package/dist/kimi-runtime/quota.js +252 -0
  102. package/dist/kimi-runtime/quota.js.map +1 -0
  103. package/dist/kimi-runtime/setup.d.ts +4 -0
  104. package/dist/kimi-runtime/setup.d.ts.map +1 -1
  105. package/dist/kimi-runtime/setup.js +102 -19
  106. package/dist/kimi-runtime/setup.js.map +1 -1
  107. package/dist/kimi-runtime/update-manager.d.ts +21 -0
  108. package/dist/kimi-runtime/update-manager.d.ts.map +1 -0
  109. package/dist/kimi-runtime/update-manager.js +323 -0
  110. package/dist/kimi-runtime/update-manager.js.map +1 -0
  111. package/dist/setup.d.ts +28 -0
  112. package/dist/setup.d.ts.map +1 -1
  113. package/dist/setup.js +328 -117
  114. package/dist/setup.js.map +1 -1
  115. package/dist/update-manager.d.ts +21 -0
  116. package/dist/update-manager.d.ts.map +1 -0
  117. package/dist/update-manager.js +329 -0
  118. package/dist/update-manager.js.map +1 -0
  119. package/dist/working-directories.d.ts.map +1 -1
  120. package/dist/working-directories.js +22 -2
  121. package/dist/working-directories.js.map +1 -1
  122. package/package.json +1 -1
package/README.md CHANGED
@@ -18,24 +18,24 @@ reads Google's private conversation databases.
18
18
  The Bridge uses the Board REST API and authenticated SSE directly. The Board
19
19
  MCP server is optional and is not required for Bridge operation.
20
20
 
21
- ## Unified interactive Linux setup
21
+ ## Unified Linux setup
22
22
 
23
23
  Node.js 18 or newer is required. Run setup as the same OS user that owns the
24
24
  selected agent login and workspaces:
25
25
 
26
26
  ```bash
27
- npx --yes ai-task-board-bridge@1.1.0 setup
27
+ npx --yes ai-task-board-bridge@1.4.0 setup
28
28
  ```
29
29
 
30
30
  The first prompt offers `Codex Bridge`, `Kimi Bridge`, `Antigravity Bridge`,
31
31
  `both`, and `all`. Automation or repeat installs can bypass that first prompt:
32
32
 
33
33
  ```bash
34
- npx --yes ai-task-board-bridge@1.1.0 setup codex
35
- npx --yes ai-task-board-bridge@1.1.0 setup kimi
36
- npx --yes ai-task-board-bridge@1.1.0 setup antigravity
37
- npx --yes ai-task-board-bridge@1.1.0 setup both
38
- npx --yes ai-task-board-bridge@1.1.0 setup all
34
+ npx --yes ai-task-board-bridge@1.4.0 setup codex
35
+ npx --yes ai-task-board-bridge@1.4.0 setup kimi
36
+ npx --yes ai-task-board-bridge@1.4.0 setup antigravity
37
+ npx --yes ai-task-board-bridge@1.4.0 setup both
38
+ npx --yes ai-task-board-bridge@1.4.0 setup all
39
39
  ```
40
40
 
41
41
  Installing a combination runs the selected setup flows in sequence. Create a
@@ -44,15 +44,47 @@ for one runtime must not be reused for another. The public tarball embeds the
44
44
  private Kimi and Antigravity runtimes, so no second npm package needs to be
45
45
  published or installed.
46
46
 
47
+ `setup` always finishes by installing and starting a systemd user service; it
48
+ never leaves a Bridge running inside the `npx` process. When stdin/stdout is
49
+ not a TTY (for example an SSH command or CI script), `setup codex`,
50
+ `setup kimi`, and `setup antigravity` install the same services from
51
+ environment variables without prompting. The `both`/`all` targets remain
52
+ interactive because each runtime needs its own Connection Token.
53
+
47
54
  ### Codex setup
48
55
 
49
- The Codex setup wizard asks for the Board URL, hidden Connection Token, working
50
- directory, Codex home and executable, custom-provider credential environment
51
- variables, thread limits, permission/approval modes, and the Web configuration
52
- gate. It then installs and starts
53
- `ai-task-board-bridge.service` in the effective user's systemd user
54
- manager. Running with no command also enters setup in a TTY when either required
55
- Board setting is missing.
56
+ The Codex setup wizard asks for the Board URL and hidden Connection Token.
57
+ Working directories are optional: new installs default to Web-side management,
58
+ so project directories are added later in the Board's "AI 连接 → Bridge
59
+ 设置 / 新建项目" instead of being typed during setup. Choosing the local mode
60
+ instead fixes a device allowlist at install time. The wizard also collects the
61
+ Codex home and executable, custom-provider credential environment variables,
62
+ thread limits, and permission/approval modes. It then installs and starts
63
+ `ai-task-board-bridge.service` in the effective user's systemd user manager.
64
+ Running with no command also enters setup in a TTY when either required Board
65
+ setting is missing.
66
+
67
+ Choosing Web-side directory management enables both
68
+ `CODEX_BRIDGE_WEB_CONFIG=true` and
69
+ `CODEX_BRIDGE_ALLOW_REMOTE_WORKING_DIRECTORIES=true` in the installed
70
+ environment file. The generated unit still needs an existing
71
+ `WorkingDirectory=` for the App Server startup fallback, so setup uses the
72
+ user's home directory for that unit field only; it is not registered as a
73
+ managed project directory and no `CODEX_WORKING_DIRECTORY` or
74
+ `CODEX_WORKING_DIRECTORIES` is written.
75
+
76
+ Non-interactive Codex service install uses the same safe defaults as the
77
+ wizard:
78
+
79
+ ```bash
80
+ AI_TASK_BOARD_URL='https://board.example.com' \
81
+ AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
82
+ npx --yes ai-task-board-bridge@1.4.0 setup codex
83
+ ```
84
+
85
+ Without `CODEX_WORKING_DIRECTORY` or `CODEX_WORKING_DIRECTORIES` the
86
+ non-interactive install also defaults to Web-side directory management. Pass
87
+ either variable to fix a local allowlist instead.
56
88
 
57
89
  The generated unit has no `User=` directive: a systemd user manager already
58
90
  runs as its owning UID. Setup explicitly binds that user's `HOME` and
@@ -72,16 +104,17 @@ updates the configuration and restarts the service. Upgrades disable the legacy
72
104
  `ai-task-board-codex-bridge.service` before starting
73
105
  `ai-task-board-bridge.service`, with rollback if the new service fails to start.
74
106
 
75
- ## Foreground and automation mode
107
+ ## Foreground run mode
76
108
 
77
- The original environment-variable interface remains available and does not
78
- install a service:
109
+ The original environment-variable interface remains available for other
110
+ process managers and temporary runs. Unlike `setup`, it does not install a
111
+ service, so a terminated `npx` process takes the Bridge down with it:
79
112
 
80
113
  ```bash
81
114
  AI_TASK_BOARD_URL='https://board.example.com' \
82
115
  AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
83
116
  CODEX_WORKING_DIRECTORY='/path/to/a/safe/start-directory' \
84
- npx --yes ai-task-board-bridge@1.1.0 run codex
117
+ npx --yes ai-task-board-bridge@1.4.0 run codex
85
118
  ```
86
119
 
87
120
  > **High-risk foreground defaults:** when these values are omitted, the Bridge uses
@@ -99,7 +132,7 @@ scope with one exact existing-thread compatibility filter:
99
132
 
100
133
  ```bash
101
134
  CODEX_THREAD_ID='REPLACE_WITH_LOCAL_THREAD_ID' \
102
- npx --yes ai-task-board-bridge@1.1.0
135
+ npx --yes ai-task-board-bridge@1.4.0
103
136
  ```
104
137
 
105
138
  Bridge 0.7 and later can manage several exact working directories in one process:
@@ -107,7 +140,7 @@ Bridge 0.7 and later can manage several exact working directories in one process
107
140
  ```bash
108
141
  CODEX_WORKING_DIRECTORIES='[{"key":"main","name":"Main App","path":"/srv/main"},{"key":"docs","name":"Docs","path":"/srv/docs"}]' \
109
142
  CODEX_THREAD_SCOPE='cwd' \
110
- npx --yes ai-task-board-bridge@1.1.0
143
+ npx --yes ai-task-board-bridge@1.4.0
111
144
  ```
112
145
 
113
146
  The JSON array accepts 1 to 100 unique `{key,name?,path}` entries. Its first
@@ -157,8 +190,11 @@ The device environment remains the immutable security boundary:
157
190
  - Web working-directory configuration is denied unless the device explicitly
158
191
  sets `CODEX_BRIDGE_ALLOW_REMOTE_WORKING_DIRECTORIES=true`. A remote list must
159
192
  contain 1 to 100 unique entries with absolute paths that already exist and are
160
- directories. Missing, null, or locally denied remote values retain the
161
- immutable `CODEX_WORKING_DIRECTORIES` / `CODEX_WORKING_DIRECTORY` startup list.
193
+ directories. An entry may carry `create_if_missing: true`, which authorizes
194
+ the device to create the path with `mkdir -p` before validating it; without
195
+ the flag the check stays fail-closed. Missing, null, or locally denied
196
+ remote values retain the immutable `CODEX_WORKING_DIRECTORIES` /
197
+ `CODEX_WORKING_DIRECTORY` startup list.
162
198
  - The Board cannot change the URL/token, Codex executable, thread scope/fixed
163
199
  thread, permission mode, approval mode, or the immutable local fallback list.
164
200
 
@@ -178,6 +214,63 @@ at least every 10 seconds, and a local safety deadline stops workers before a
178
214
  lease can expire during a prolonged Board outage. The deprecated-Board 404
179
215
  fallback cannot provide this single-runtime fence.
180
216
 
217
+ ## Web-triggered Bridge upgrades
218
+
219
+ The Board can ask a device to move its Bridge to a newer npm release: each
220
+ configuration exchange response may carry `desired_bridge_version`, and a
221
+ Bridge that sees a newer, valid semver target upgrades itself. The Board only
222
+ transports the version string; the code is always downloaded from the npm
223
+ registry with `npm pack`, which verifies the registry integrity metadata
224
+ before anything is installed.
225
+
226
+ Remote upgrades are disabled by default and require two local gates:
227
+
228
+ - `AI_TASK_BOARD_ALLOW_REMOTE_UPDATE=true` in the Bridge environment (for a
229
+ systemd install, add it to the `0600` environment file and restart the
230
+ service), and
231
+ - the Bridge process must run under systemd (`INVOCATION_ID` is set). A
232
+ foreground Bridge logs a one-time stderr hint per target version and keeps
233
+ running the old code; upgrade it manually by rerunning
234
+ `npx --yes ai-task-board-bridge@1.4.0 setup` for the same runtime.
235
+
236
+ With both gates satisfied, the Bridge downloads
237
+ `ai-task-board-bridge@<version>` (120-second timeout), extracts the tarball
238
+ into a staging directory, installs this runtime's `dist` subtree into
239
+ `versions/<version>/` next to the current one, smoke-tests
240
+ `node versions/<version>/dist/cli.js --version` (10-second timeout; the output
241
+ must contain the target version), rewrites the systemd unit `ExecStart` to the
242
+ new runtime while preserving the existing `HOME`, `CODEX_HOME`,
243
+ `WorkingDirectory`, and `EnvironmentFile` settings, runs
244
+ `systemctl --user daemon-reload`, and exits with code 75 so
245
+ `Restart=on-failure` starts the new version about five seconds later.
246
+
247
+ A failed attempt cleans up staging, keeps the old version running, and reports
248
+ the error in the next configuration exchange's `error` field, which the Board
249
+ surfaces in the Bridge settings dialog. The same target version is not retried
250
+ until the Board changes it or the Bridge process restarts, so a broken release
251
+ cannot cause a retry storm.
252
+
253
+ Old version directories are kept for manual rollback. To roll back, point the
254
+ unit's `ExecStart` back at the previous runtime and restart the service:
255
+
256
+ ```bash
257
+ $EDITOR ~/.config/systemd/user/ai-task-board-bridge.service
258
+ # ExecStart="…/node" "…/.local/share/ai-task-board/codex-bridge/versions/<previous>/dist/cli.js" "run"
259
+ systemctl --user daemon-reload
260
+ systemctl --user restart ai-task-board-bridge.service
261
+ ```
262
+
263
+ ## Device identity
264
+
265
+ Every session-inventory sync (`POST /api/ai/sessions/sync`) carries two flat
266
+ fields: `device_id` and `device_label` (the OS hostname). The device ID is a
267
+ UUID generated on first Bridge start and persisted to
268
+ `$XDG_CONFIG_HOME/ai-task-board/device-id` (default
269
+ `~/.config/ai-task-board/device-id`) with `0600` permissions. All AI Task
270
+ Board bridges on the same host share that file, so the Board can group the
271
+ Codex, Kimi, and Antigravity runtimes of one device. If the file cannot be
272
+ written, the Bridge logs a warning and runs with an ephemeral ID.
273
+
181
274
  ## Web Thread management
182
275
 
183
276
  Bridge 0.5 lets a Workspace owner create, rename, and delete Codex Threads from
@@ -272,12 +365,12 @@ strong token-isolation boundary. Use a separate UID and/or a token proxy when
272
365
  strong isolation is required. Board schema and `/api/ai/sessions/sync` must be
273
366
  upgraded before starting 0.8; there is no 404 fallback to the old registration
274
367
  API. On Linux, use `setup` for a pinned local runtime and systemd user service.
275
- On other platforms, pin version `1.0.1` in launchd or another process manager.
368
+ On other platforms, pin version `1.2.0` in launchd or another process manager.
276
369
  Run only one Bridge for the same device/Connection, and
277
370
  do not let another TUI, IDE, or automation writer submit turns to a managed
278
371
  thread at the same time.
279
372
 
280
- Use `npx --yes ai-task-board-bridge@1.1.0 --help` for the complete
373
+ Use `npx --yes ai-task-board-bridge@1.4.0 --help` for the complete
281
374
  environment-variable list.
282
375
 
283
376
  ## Kimi Bridge
@@ -296,7 +389,7 @@ AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
296
389
  KIMI_WORKING_DIRECTORY='/absolute/path/to/project' \
297
390
  KIMI_BRIDGE_MODE='auto' \
298
391
  KIMI_BRIDGE_APPROVAL_MODE='accept' \
299
- npx --yes ai-task-board-bridge@1.1.0 run kimi
392
+ npx --yes ai-task-board-bridge@1.4.0 run kimi
300
393
  ```
301
394
 
302
395
  `KIMI_WORKING_DIRECTORIES` accepts 1 to 100 unique exact
@@ -326,7 +419,7 @@ AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
326
419
  ANTIGRAVITY_WORKING_DIRECTORY='/absolute/path/to/project' \
327
420
  ANTIGRAVITY_BRIDGE_MODE='auto' \
328
421
  ANTIGRAVITY_BRIDGE_APPROVAL_MODE='accept' \
329
- npx --yes ai-task-board-bridge@1.1.0 run antigravity
422
+ npx --yes ai-task-board-bridge@1.4.0 run antigravity
330
423
  ```
331
424
 
332
425
  `ANTIGRAVITY_WORKING_DIRECTORIES` accepts 1 to 100 unique exact
@@ -0,0 +1,68 @@
1
+ /** Provider-neutral quota snapshot understood by the Board sync API. */
2
+ export type SyncedQuota = {
3
+ provider: "codex" | "kimi" | "antigravity";
4
+ status: "ok" | "unavailable" | "error";
5
+ message: string | null;
6
+ account: string | null;
7
+ plan: string | null;
8
+ fetched_at: string;
9
+ buckets: SyncedQuotaBucket[];
10
+ credits: SyncedQuotaCredits | null;
11
+ };
12
+ export type SyncedQuotaBucket = {
13
+ id: string;
14
+ label: string;
15
+ remaining_percent: number | null;
16
+ used_percent: number | null;
17
+ limit: number | null;
18
+ used: number | null;
19
+ remaining: number | null;
20
+ resets_at: string | null;
21
+ unlimited: boolean;
22
+ description: string | null;
23
+ };
24
+ export type SyncedQuotaCredits = {
25
+ balance: string | null;
26
+ has_credits: boolean;
27
+ unlimited: boolean;
28
+ available_resets: number | null;
29
+ description: string | null;
30
+ };
31
+ type RateLimitSnapshot = {
32
+ limitId?: string | null;
33
+ limitName?: string | null;
34
+ planType?: string | null;
35
+ primary?: {
36
+ resetsAt?: number | null;
37
+ usedPercent?: number | null;
38
+ windowDurationMins?: number | null;
39
+ } | null;
40
+ secondary?: {
41
+ resetsAt?: number | null;
42
+ usedPercent?: number | null;
43
+ windowDurationMins?: number | null;
44
+ } | null;
45
+ credits?: {
46
+ balance?: string | null;
47
+ hasCredits?: boolean;
48
+ unlimited?: boolean;
49
+ } | null;
50
+ individualLimit?: {
51
+ limit?: string | null;
52
+ remainingPercent?: number | null;
53
+ resetsAt?: number | null;
54
+ used?: string | null;
55
+ } | null;
56
+ };
57
+ export type CodexAccountRateLimits = {
58
+ rateLimits: RateLimitSnapshot;
59
+ rateLimitsByLimitId?: Record<string, RateLimitSnapshot> | null;
60
+ rateLimitResetCredits?: {
61
+ availableCount?: number | null;
62
+ } | null;
63
+ };
64
+ export declare function normalizeCodexQuota(value: unknown, now?: Date): SyncedQuota;
65
+ export declare function unavailableQuota(now: Date, message: string): SyncedQuota;
66
+ export declare function quotaError(now: Date, message: string): SyncedQuota;
67
+ export {};
68
+ //# sourceMappingURL=account-quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-quota.d.ts","sourceRoot":"","sources":["../src/account-quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ function isRecord(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ function finiteNumber(value) {
5
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
6
+ }
7
+ function percent(value) {
8
+ const number = finiteNumber(value);
9
+ if (number === null || number < 0 || number > 100)
10
+ return null;
11
+ return number;
12
+ }
13
+ function epochToIso(value) {
14
+ const seconds = finiteNumber(value);
15
+ if (seconds === null || !Number.isFinite(seconds * 1_000))
16
+ return null;
17
+ const date = new Date(seconds * 1_000);
18
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
19
+ }
20
+ function windowLabel(minutes, fallback) {
21
+ const value = finiteNumber(minutes);
22
+ if (value === null || value < 1)
23
+ return fallback;
24
+ if (value >= 1_440 && value % 1_440 === 0) {
25
+ return `${Math.round(value / 1_440)} 天`;
26
+ }
27
+ if (value >= 60 && value % 60 === 0) {
28
+ return `${Math.round(value / 60)} 小时`;
29
+ }
30
+ return `${Math.round(value)} 分钟`;
31
+ }
32
+ function windowBucket(window, id, fallbackLabel) {
33
+ const usedPercent = percent(window?.usedPercent);
34
+ return {
35
+ id,
36
+ label: windowLabel(window?.windowDurationMins, fallbackLabel),
37
+ remaining_percent: usedPercent === null ? null : Math.round((100 - usedPercent) * 10) / 10,
38
+ used_percent: usedPercent,
39
+ limit: null,
40
+ used: null,
41
+ remaining: null,
42
+ resets_at: epochToIso(window?.resetsAt),
43
+ unlimited: false,
44
+ description: null,
45
+ };
46
+ }
47
+ function snapshotToBuckets(snapshot, key) {
48
+ const buckets = [];
49
+ if (snapshot.primary) {
50
+ buckets.push(windowBucket(snapshot.primary, `${key}:primary`, "短周期额度"));
51
+ }
52
+ if (snapshot.secondary) {
53
+ buckets.push(windowBucket(snapshot.secondary, `${key}:secondary`, "长周期额度"));
54
+ }
55
+ if (snapshot.individualLimit) {
56
+ buckets.push({
57
+ id: `${key}:individual`,
58
+ label: "个人消费限额",
59
+ remaining_percent: percent(snapshot.individualLimit.remainingPercent),
60
+ used_percent: null,
61
+ limit: null,
62
+ used: null,
63
+ remaining: null,
64
+ resets_at: epochToIso(snapshot.individualLimit.resetsAt),
65
+ unlimited: false,
66
+ description: typeof snapshot.individualLimit.limit === "string"
67
+ ? snapshot.individualLimit.limit
68
+ : null,
69
+ });
70
+ }
71
+ return buckets;
72
+ }
73
+ export function normalizeCodexQuota(value, now = new Date()) {
74
+ if (!isRecord(value)) {
75
+ return unavailableQuota(now, "Codex 未返回额度数据");
76
+ }
77
+ const rateLimits = isRecord(value.rateLimits)
78
+ ? value.rateLimits
79
+ : null;
80
+ if (!rateLimits) {
81
+ return unavailableQuota(now, "Codex 未返回额度数据");
82
+ }
83
+ const byLimitId = isRecord(value.rateLimitsByLimitId)
84
+ ? value.rateLimitsByLimitId
85
+ : null;
86
+ const buckets = snapshotToBuckets(rateLimits, "account");
87
+ for (const [limitId, snapshot] of Object.entries(byLimitId ?? {})) {
88
+ if (!isRecord(snapshot))
89
+ continue;
90
+ const typed = snapshot;
91
+ if (limitId && limitId === rateLimits.limitId)
92
+ continue;
93
+ buckets.push(...snapshotToBuckets(typed, limitId || "account"));
94
+ }
95
+ const credits = isRecord(rateLimits.credits)
96
+ ? rateLimits.credits
97
+ : null;
98
+ const resetCredits = isRecord(value.rateLimitResetCredits)
99
+ ? value.rateLimitResetCredits
100
+ : null;
101
+ const availableResets = finiteNumber(resetCredits?.availableCount);
102
+ return {
103
+ provider: "codex",
104
+ status: "ok",
105
+ message: null,
106
+ account: null,
107
+ plan: typeof rateLimits.planType === "string" ? rateLimits.planType : null,
108
+ fetched_at: now.toISOString(),
109
+ buckets,
110
+ credits: {
111
+ balance: typeof credits?.balance === "string" ? credits.balance : null,
112
+ has_credits: credits?.hasCredits === true,
113
+ unlimited: credits?.unlimited === true,
114
+ available_resets: availableResets !== null &&
115
+ Number.isInteger(availableResets) &&
116
+ availableResets >= 0
117
+ ? availableResets
118
+ : null,
119
+ description: null,
120
+ },
121
+ };
122
+ }
123
+ export function unavailableQuota(now, message) {
124
+ return {
125
+ provider: "codex",
126
+ status: "unavailable",
127
+ message,
128
+ account: null,
129
+ plan: null,
130
+ fetched_at: now.toISOString(),
131
+ buckets: [],
132
+ credits: null,
133
+ };
134
+ }
135
+ export function quotaError(now, message) {
136
+ return {
137
+ provider: "codex",
138
+ status: "error",
139
+ message,
140
+ account: null,
141
+ plan: null,
142
+ fetched_at: now.toISOString(),
143
+ buckets: [],
144
+ credits: null,
145
+ };
146
+ }
147
+ //# sourceMappingURL=account-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-quota.js","sourceRoot":"","sources":["../src/account-quota.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import type { InventoryModel } from "./agy-client.js";
2
2
  import type { AntigravityBridgeConfiguration, ManagedWorkingDirectory } from "./config.js";
3
- export declare const ANTIGRAVITY_BRIDGE_CAPABILITY_VERSION = "1.0.0-antigravity.1";
3
+ import type { DeviceFileListResult, DeviceFilePreviewResult } from "./device-file-access.js";
4
+ import { type DeviceIdentity } from "./device-identity.js";
5
+ import type { SyncedQuota } from "./quota.js";
6
+ export declare const ANTIGRAVITY_BRIDGE_CAPABILITY_VERSION = "1.5.0-antigravity.1";
4
7
  export type BoardSession = {
5
8
  id: string;
6
9
  external_conversation_ref?: string | null;
@@ -32,6 +35,12 @@ export type ThreadCommand = {
32
35
  external_thread_id: string | null;
33
36
  attempt_count?: number;
34
37
  };
38
+ export type FileCommand = {
39
+ id: string;
40
+ action: "list" | "read";
41
+ path: string;
42
+ attempt_count?: number;
43
+ };
35
44
  export type InventoryThread = {
36
45
  external_conversation_ref: string;
37
46
  name: string;
@@ -42,9 +51,24 @@ export type InventoryThread = {
42
51
  capabilities: string[];
43
52
  archived: false;
44
53
  };
54
+ export type RemoteDesiredConfiguration = {
55
+ enabled: boolean;
56
+ include_thread_titles: boolean;
57
+ max_threads: number;
58
+ max_concurrent_turns: number;
59
+ sync_history: boolean;
60
+ history_turn_limit: number;
61
+ working_directories: unknown;
62
+ };
45
63
  export type RemoteConfigurationResponse = {
46
64
  configuration: {
65
+ connection_id: string;
47
66
  version: number;
67
+ desired: RemoteDesiredConfiguration;
68
+ /** Board-requested npm package version; null when absent or not a string. */
69
+ desired_bridge_version?: string | null;
70
+ applied?: unknown;
71
+ updated_at: string;
48
72
  };
49
73
  };
50
74
  type BoardRequestOptions = {
@@ -59,9 +83,10 @@ type BoardRequestOptions = {
59
83
  export declare class BoardClient {
60
84
  private readonly configuration;
61
85
  private readonly isStopping;
62
- constructor(configuration: AntigravityBridgeConfiguration, isStopping: () => boolean);
86
+ private readonly deviceIdentity;
87
+ constructor(configuration: AntigravityBridgeConfiguration, isStopping: () => boolean, deviceIdentity?: DeviceIdentity);
63
88
  request<T>(pathname: string, options?: BoardRequestOptions): Promise<T>;
64
- syncSessions(threads: readonly InventoryThread[], directories: readonly ManagedWorkingDirectory[], modelCatalog: readonly InventoryModel[], signal?: AbortSignal): Promise<Map<string, BoardSession>>;
89
+ syncSessions(threads: readonly InventoryThread[], directories: readonly ManagedWorkingDirectory[], modelCatalog: readonly InventoryModel[], quota: SyncedQuota | undefined, signal?: AbortSignal): Promise<Map<string, BoardSession>>;
65
90
  exchangeConfiguration(body: Record<string, unknown>, signal?: AbortSignal, timeoutMs?: number): Promise<RemoteConfigurationResponse>;
66
91
  claimThreadCommand(runtimeInstanceId: string, signal?: AbortSignal): Promise<ThreadCommand | null>;
67
92
  completeThreadCommand(runtimeInstanceId: string, commandId: string, result: {
@@ -71,6 +96,14 @@ export declare class BoardClient {
71
96
  succeeded: false;
72
97
  error: string;
73
98
  }, signal?: AbortSignal): Promise<void>;
99
+ claimFileCommand(runtimeInstanceId: string, signal?: AbortSignal): Promise<FileCommand | null>;
100
+ completeFileCommand(runtimeInstanceId: string, commandId: string, result: {
101
+ succeeded: true;
102
+ result: DeviceFileListResult | DeviceFilePreviewResult;
103
+ } | {
104
+ succeeded: false;
105
+ error: string;
106
+ }, signal?: AbortSignal): Promise<void>;
74
107
  claimTask(sessionId: string, leaseSeconds: number, signal: AbortSignal): Promise<ClaimedTask | null>;
75
108
  taskArtifacts(sessionId: string, taskId: string, signal: AbortSignal): Promise<TaskImageArtifact[]>;
76
109
  reportProgress(sessionId: string, task: ClaimedTask, signal: AbortSignal): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"board-client.d.ts","sourceRoot":"","sources":["../src/board-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-client.d.ts","sourceRoot":"","sources":["../src/board-client.ts"],"names":[],"mappings":"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"}