ai-task-board-bridge 1.0.0 → 1.1.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.
- package/README.md +59 -20
- package/dist/antigravity-runtime/agy-client.d.ts +117 -0
- package/dist/antigravity-runtime/agy-client.d.ts.map +1 -0
- package/dist/antigravity-runtime/agy-client.js +437 -0
- package/dist/antigravity-runtime/agy-client.js.map +1 -0
- package/dist/antigravity-runtime/board-client.d.ts +88 -0
- package/dist/antigravity-runtime/board-client.d.ts.map +1 -0
- package/dist/antigravity-runtime/board-client.js +274 -0
- package/dist/antigravity-runtime/board-client.js.map +1 -0
- package/dist/antigravity-runtime/bridge.d.ts +63 -0
- package/dist/antigravity-runtime/bridge.d.ts.map +1 -0
- package/dist/antigravity-runtime/bridge.js +739 -0
- package/dist/antigravity-runtime/bridge.js.map +1 -0
- package/dist/antigravity-runtime/cli.d.ts +3 -0
- package/dist/antigravity-runtime/cli.d.ts.map +1 -0
- package/dist/antigravity-runtime/cli.js +84 -0
- package/dist/antigravity-runtime/cli.js.map +1 -0
- package/dist/antigravity-runtime/config.d.ts +33 -0
- package/dist/antigravity-runtime/config.d.ts.map +1 -0
- package/dist/antigravity-runtime/config.js +155 -0
- package/dist/antigravity-runtime/config.js.map +1 -0
- package/dist/antigravity-runtime/index.d.ts +8 -0
- package/dist/antigravity-runtime/index.d.ts.map +1 -0
- package/dist/antigravity-runtime/index.js +8 -0
- package/dist/antigravity-runtime/index.js.map +1 -0
- package/dist/antigravity-runtime/registry.d.ts +27 -0
- package/dist/antigravity-runtime/registry.d.ts.map +1 -0
- package/dist/antigravity-runtime/registry.js +115 -0
- package/dist/antigravity-runtime/registry.js.map +1 -0
- package/dist/antigravity-runtime/setup.d.ts +23 -0
- package/dist/antigravity-runtime/setup.d.ts.map +1 -0
- package/dist/antigravity-runtime/setup.js +493 -0
- package/dist/antigravity-runtime/setup.js.map +1 -0
- package/dist/antigravity-runtime/utils.d.ts +14 -0
- package/dist/antigravity-runtime/utils.d.ts.map +1 -0
- package/dist/antigravity-runtime/utils.js +118 -0
- package/dist/antigravity-runtime/utils.js.map +1 -0
- package/dist/app-server-client.d.ts +42 -0
- package/dist/app-server-client.d.ts.map +1 -1
- package/dist/app-server-client.js +10 -1
- package/dist/app-server-client.js.map +1 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +13 -1
- package/dist/bridge.js.map +1 -1
- package/dist/cli.js +17 -3
- package/dist/cli.js.map +1 -1
- package/dist/installer.d.ts +2 -2
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +40 -8
- package/dist/installer.js.map +1 -1
- package/dist/kimi-runtime/board-client.d.ts +1 -0
- package/dist/kimi-runtime/board-client.d.ts.map +1 -1
- package/dist/kimi-runtime/board-client.js.map +1 -1
- package/dist/kimi-runtime/bridge.d.ts.map +1 -1
- package/dist/kimi-runtime/bridge.js +43 -2
- package/dist/kimi-runtime/bridge.js.map +1 -1
- package/dist/kimi-runtime/config.d.ts +2 -0
- package/dist/kimi-runtime/config.d.ts.map +1 -1
- package/dist/kimi-runtime/config.js +2 -0
- package/dist/kimi-runtime/config.js.map +1 -1
- package/dist/kimi-runtime/setup.d.ts.map +1 -1
- package/dist/kimi-runtime/setup.js +5 -7
- package/dist/kimi-runtime/setup.js.map +1 -1
- package/dist/kimi-runtime/web-goal-client.d.ts +32 -0
- package/dist/kimi-runtime/web-goal-client.d.ts.map +1 -0
- package/dist/kimi-runtime/web-goal-client.js +142 -0
- package/dist/kimi-runtime/web-goal-client.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +5 -7
- package/dist/setup.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
`ai-task-board-bridge` is the single public npm package for AI Task Board's
|
|
4
4
|
device companions. Its interactive installer asks whether to install Codex
|
|
5
|
-
Bridge, Kimi Bridge, or
|
|
6
|
-
separate Board Connections, tokens,
|
|
7
|
-
services.
|
|
5
|
+
Bridge, Kimi Bridge, Antigravity Bridge, or a combination. The three runtimes
|
|
6
|
+
remain separate processes with separate Board Connections, tokens,
|
|
7
|
+
working-directory allowlists, and systemd services.
|
|
8
8
|
|
|
9
9
|
Codex Bridge starts the local `codex app-server` over stdio, discovers
|
|
10
10
|
non-archived top-level Codex threads, maps each thread to a Board Session,
|
|
11
11
|
receives reserved work, and streams supported progress back to the Board. Kimi
|
|
12
12
|
Bridge starts the logged-in Kimi Code ACP server and manages real Kimi Sessions;
|
|
13
|
-
it does not expose Kimi as a fake Codex model.
|
|
13
|
+
it does not expose Kimi as a fake Codex model. Antigravity Bridge drives the
|
|
14
|
+
logged-in Google Antigravity CLI (`agy`) through its official headless
|
|
15
|
+
`stream-json` interface and keeps per-Thread conversation continuity; it never
|
|
16
|
+
reads Google's private conversation databases.
|
|
14
17
|
|
|
15
18
|
The Bridge uses the Board REST API and authenticated SSE directly. The Board
|
|
16
19
|
MCP server is optional and is not required for Bridge operation.
|
|
@@ -21,22 +24,25 @@ Node.js 18 or newer is required. Run setup as the same OS user that owns the
|
|
|
21
24
|
selected agent login and workspaces:
|
|
22
25
|
|
|
23
26
|
```bash
|
|
24
|
-
npx --yes ai-task-board-bridge@1.
|
|
27
|
+
npx --yes ai-task-board-bridge@1.1.0 setup
|
|
25
28
|
```
|
|
26
29
|
|
|
27
|
-
The first prompt offers `Codex Bridge`, `Kimi Bridge`,
|
|
28
|
-
repeat installs can bypass that first prompt:
|
|
30
|
+
The first prompt offers `Codex Bridge`, `Kimi Bridge`, `Antigravity Bridge`,
|
|
31
|
+
`both`, and `all`. Automation or repeat installs can bypass that first prompt:
|
|
29
32
|
|
|
30
33
|
```bash
|
|
31
|
-
npx --yes ai-task-board-bridge@1.
|
|
32
|
-
npx --yes ai-task-board-bridge@1.
|
|
33
|
-
npx --yes ai-task-board-bridge@1.
|
|
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
39
|
```
|
|
35
40
|
|
|
36
|
-
Installing
|
|
37
|
-
Connection with the matching platform for each runtime; a
|
|
38
|
-
be reused for
|
|
39
|
-
|
|
41
|
+
Installing a combination runs the selected setup flows in sequence. Create a
|
|
42
|
+
separate Board Connection with the matching platform for each runtime; a token
|
|
43
|
+
for one runtime must not be reused for another. The public tarball embeds the
|
|
44
|
+
private Kimi and Antigravity runtimes, so no second npm package needs to be
|
|
45
|
+
published or installed.
|
|
40
46
|
|
|
41
47
|
### Codex setup
|
|
42
48
|
|
|
@@ -75,7 +81,7 @@ install a service:
|
|
|
75
81
|
AI_TASK_BOARD_URL='https://board.example.com' \
|
|
76
82
|
AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
|
|
77
83
|
CODEX_WORKING_DIRECTORY='/path/to/a/safe/start-directory' \
|
|
78
|
-
npx --yes ai-task-board-bridge@1.
|
|
84
|
+
npx --yes ai-task-board-bridge@1.1.0 run codex
|
|
79
85
|
```
|
|
80
86
|
|
|
81
87
|
> **High-risk foreground defaults:** when these values are omitted, the Bridge uses
|
|
@@ -93,7 +99,7 @@ scope with one exact existing-thread compatibility filter:
|
|
|
93
99
|
|
|
94
100
|
```bash
|
|
95
101
|
CODEX_THREAD_ID='REPLACE_WITH_LOCAL_THREAD_ID' \
|
|
96
|
-
npx --yes ai-task-board-bridge@1.
|
|
102
|
+
npx --yes ai-task-board-bridge@1.1.0
|
|
97
103
|
```
|
|
98
104
|
|
|
99
105
|
Bridge 0.7 and later can manage several exact working directories in one process:
|
|
@@ -101,7 +107,7 @@ Bridge 0.7 and later can manage several exact working directories in one process
|
|
|
101
107
|
```bash
|
|
102
108
|
CODEX_WORKING_DIRECTORIES='[{"key":"main","name":"Main App","path":"/srv/main"},{"key":"docs","name":"Docs","path":"/srv/docs"}]' \
|
|
103
109
|
CODEX_THREAD_SCOPE='cwd' \
|
|
104
|
-
npx --yes ai-task-board-bridge@1.
|
|
110
|
+
npx --yes ai-task-board-bridge@1.1.0
|
|
105
111
|
```
|
|
106
112
|
|
|
107
113
|
The JSON array accepts 1 to 100 unique `{key,name?,path}` entries. Its first
|
|
@@ -266,12 +272,12 @@ strong token-isolation boundary. Use a separate UID and/or a token proxy when
|
|
|
266
272
|
strong isolation is required. Board schema and `/api/ai/sessions/sync` must be
|
|
267
273
|
upgraded before starting 0.8; there is no 404 fallback to the old registration
|
|
268
274
|
API. On Linux, use `setup` for a pinned local runtime and systemd user service.
|
|
269
|
-
On other platforms, pin version `1.0.
|
|
275
|
+
On other platforms, pin version `1.0.1` in launchd or another process manager.
|
|
270
276
|
Run only one Bridge for the same device/Connection, and
|
|
271
277
|
do not let another TUI, IDE, or automation writer submit turns to a managed
|
|
272
278
|
thread at the same time.
|
|
273
279
|
|
|
274
|
-
Use `npx --yes ai-task-board-bridge@1.
|
|
280
|
+
Use `npx --yes ai-task-board-bridge@1.1.0 --help` for the complete
|
|
275
281
|
environment-variable list.
|
|
276
282
|
|
|
277
283
|
## Kimi Bridge
|
|
@@ -290,7 +296,7 @@ AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
|
|
|
290
296
|
KIMI_WORKING_DIRECTORY='/absolute/path/to/project' \
|
|
291
297
|
KIMI_BRIDGE_MODE='auto' \
|
|
292
298
|
KIMI_BRIDGE_APPROVAL_MODE='accept' \
|
|
293
|
-
npx --yes ai-task-board-bridge@1.
|
|
299
|
+
npx --yes ai-task-board-bridge@1.1.0 run kimi
|
|
294
300
|
```
|
|
295
301
|
|
|
296
302
|
`KIMI_WORKING_DIRECTORIES` accepts 1 to 100 unique exact
|
|
@@ -302,3 +308,36 @@ environment, and only final replies plus bounded completion metadata are
|
|
|
302
308
|
uploaded. Interactive setup defaults to declining extra ACP permissions;
|
|
303
309
|
`KIMI_BRIDGE_MODE=yolo` and `KIMI_BRIDGE_APPROVAL_MODE=accept` are explicit
|
|
304
310
|
high-risk opt-ins.
|
|
311
|
+
|
|
312
|
+
## Antigravity Bridge
|
|
313
|
+
|
|
314
|
+
Antigravity Bridge requires Google Antigravity CLI 1.1.8 or newer with an active
|
|
315
|
+
login (`agy update` upgrades; the interactive installer verifies the version) and
|
|
316
|
+
a dedicated Board Connection whose platform is `Antigravity`. Interactive setup
|
|
317
|
+
installs the separate `ai-task-board-antigravity-bridge.service`, stores its
|
|
318
|
+
token in a `0600` environment file, and stages the embedded Antigravity runtime
|
|
319
|
+
under the current user's XDG data directory.
|
|
320
|
+
|
|
321
|
+
Foreground or non-systemd operation uses the same public npm package:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
AI_TASK_BOARD_URL='https://board.example.com' \
|
|
325
|
+
AI_TASK_BOARD_CONNECTION_TOKEN='atb_REPLACE_ME' \
|
|
326
|
+
ANTIGRAVITY_WORKING_DIRECTORY='/absolute/path/to/project' \
|
|
327
|
+
ANTIGRAVITY_BRIDGE_MODE='auto' \
|
|
328
|
+
ANTIGRAVITY_BRIDGE_APPROVAL_MODE='accept' \
|
|
329
|
+
npx --yes ai-task-board-bridge@1.1.0 run antigravity
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
`ANTIGRAVITY_WORKING_DIRECTORIES` accepts 1 to 100 unique exact
|
|
333
|
+
`{key,name?,path}` entries. The Bridge dynamically reports the `agy models`
|
|
334
|
+
catalog with `low`/`medium`/`high` reasoning efforts. Each Web Thread is a
|
|
335
|
+
stable local binding; the first claimed task creates the real agy conversation
|
|
336
|
+
and later turns resume it with `--conversation`. Web creation and deletion are
|
|
337
|
+
supported, rename stays hidden (no public headless rename API), and deleting a
|
|
338
|
+
Thread removes only the Bridge binding so local history is preserved. The Board
|
|
339
|
+
token is removed from the `agy` child environment, and only final replies plus
|
|
340
|
+
bounded completion metadata are uploaded.
|
|
341
|
+
`ANTIGRAVITY_BRIDGE_APPROVAL_MODE=accept` adds
|
|
342
|
+
`--dangerously-skip-permissions` and is a high-risk opt-in;
|
|
343
|
+
`ANTIGRAVITY_BRIDGE_SANDBOX=true` enables agy's terminal sandbox.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { AntigravityBridgeConfiguration } from "./config.js";
|
|
2
|
+
export declare const ANTIGRAVITY_MINIMUM_VERSION = "1.1.8";
|
|
3
|
+
export declare const AGY_STREAM_PROTOCOL = "agy-stream-json/v1";
|
|
4
|
+
export type InventoryModel = {
|
|
5
|
+
id: string;
|
|
6
|
+
model: string;
|
|
7
|
+
display_name: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
default_reasoning_effort: string | null;
|
|
10
|
+
supported_reasoning_efforts: Array<{
|
|
11
|
+
reasoning_effort: string;
|
|
12
|
+
description: string | null;
|
|
13
|
+
}>;
|
|
14
|
+
input_modalities: string[];
|
|
15
|
+
is_default: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare const ANTIGRAVITY_FALLBACK_MODEL_CATALOG: readonly InventoryModel[];
|
|
18
|
+
export type AgyUsage = {
|
|
19
|
+
input_tokens?: number;
|
|
20
|
+
output_tokens?: number;
|
|
21
|
+
thinking_tokens?: number;
|
|
22
|
+
cache_read_tokens?: number;
|
|
23
|
+
total_tokens?: number;
|
|
24
|
+
};
|
|
25
|
+
export type AgyInitEvent = {
|
|
26
|
+
conversation_id?: string;
|
|
27
|
+
cwd?: string;
|
|
28
|
+
tools?: string[];
|
|
29
|
+
permission_mode?: string;
|
|
30
|
+
model?: string;
|
|
31
|
+
agent?: string;
|
|
32
|
+
};
|
|
33
|
+
export type AgyStepUpdateEvent = {
|
|
34
|
+
conversation_id?: string;
|
|
35
|
+
step_index?: number;
|
|
36
|
+
state?: string;
|
|
37
|
+
step_type?: string;
|
|
38
|
+
text_delta?: string;
|
|
39
|
+
tool_name?: string;
|
|
40
|
+
duration_seconds?: number;
|
|
41
|
+
usage?: AgyUsage;
|
|
42
|
+
tool_info?: {
|
|
43
|
+
name?: string;
|
|
44
|
+
error?: unknown;
|
|
45
|
+
} | null;
|
|
46
|
+
};
|
|
47
|
+
export type AgyResultEvent = {
|
|
48
|
+
conversation_id?: string;
|
|
49
|
+
status?: string;
|
|
50
|
+
response?: string;
|
|
51
|
+
error?: string;
|
|
52
|
+
duration_seconds?: number;
|
|
53
|
+
num_turns?: number;
|
|
54
|
+
usage?: AgyUsage;
|
|
55
|
+
};
|
|
56
|
+
export type AgyPromptResult = {
|
|
57
|
+
conversationId: string | null;
|
|
58
|
+
response: string;
|
|
59
|
+
status: string;
|
|
60
|
+
model: string | null;
|
|
61
|
+
usage: AgyUsage | null;
|
|
62
|
+
durationSeconds: number | null;
|
|
63
|
+
numTurns: number | null;
|
|
64
|
+
toolCallCount: number;
|
|
65
|
+
failedToolCallCount: number;
|
|
66
|
+
checkpointCount: number;
|
|
67
|
+
};
|
|
68
|
+
export type AgyPromptOptions = {
|
|
69
|
+
cwd: string;
|
|
70
|
+
prompt: string;
|
|
71
|
+
conversationId?: string | null;
|
|
72
|
+
model?: string | null;
|
|
73
|
+
reasoningEffort?: string | null;
|
|
74
|
+
signal: AbortSignal;
|
|
75
|
+
onTextDelta?: (text: string) => void;
|
|
76
|
+
onConversationId?: (conversationId: string) => void;
|
|
77
|
+
};
|
|
78
|
+
export type AgyStreamState = {
|
|
79
|
+
conversationId: string | null;
|
|
80
|
+
initModel: string | null;
|
|
81
|
+
response: string;
|
|
82
|
+
status: string;
|
|
83
|
+
usage: AgyUsage | null;
|
|
84
|
+
durationSeconds: number | null;
|
|
85
|
+
numTurns: number | null;
|
|
86
|
+
toolCallCount: number;
|
|
87
|
+
failedToolCallCount: number;
|
|
88
|
+
checkpointCount: number;
|
|
89
|
+
sawResult: boolean;
|
|
90
|
+
};
|
|
91
|
+
export declare function initialAgyStreamState(conversationId: string | null): AgyStreamState;
|
|
92
|
+
/**
|
|
93
|
+
* Pure NDJSON event reducer for agy's documented stream-json output. Kept
|
|
94
|
+
* separate from the spawn plumbing so parsing stays unit-testable.
|
|
95
|
+
*/
|
|
96
|
+
export declare function reduceAgyStreamEvent(state: AgyStreamState, event: Record<string, unknown>, hooks?: {
|
|
97
|
+
onTextDelta?: (text: string) => void;
|
|
98
|
+
onConversationId?: (conversationId: string) => void;
|
|
99
|
+
}): void;
|
|
100
|
+
type ModelListItem = {
|
|
101
|
+
id: string;
|
|
102
|
+
name: string;
|
|
103
|
+
isDefault?: boolean;
|
|
104
|
+
};
|
|
105
|
+
export declare function parseModelListText(raw: string): ModelListItem[];
|
|
106
|
+
export declare function inventoryModelFromListItem(item: ModelListItem, index: number): InventoryModel;
|
|
107
|
+
export declare class AgyClient {
|
|
108
|
+
private readonly configuration;
|
|
109
|
+
private versionValue;
|
|
110
|
+
constructor(configuration: Pick<AntigravityBridgeConfiguration, "agyBinary" | "agentMode" | "approvalMode" | "sandbox" | "printTimeoutMs">);
|
|
111
|
+
version(): Promise<string>;
|
|
112
|
+
ensureSupportedVersion(): Promise<void>;
|
|
113
|
+
modelCatalog(): Promise<InventoryModel[]>;
|
|
114
|
+
prompt(options: AgyPromptOptions): Promise<AgyPromptResult>;
|
|
115
|
+
}
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=agy-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agy-client.d.ts","sourceRoot":"","sources":["../src/agy-client.ts"],"names":[],"mappings":"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"}
|