@ccpocket/bridge 1.67.3 → 1.68.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 +17 -0
- package/dist/auto-rename.js +8 -4
- package/dist/auto-rename.js.map +1 -1
- package/dist/cli.js +5 -2
- package/dist/cli.js.map +1 -1
- package/dist/codex-assist.d.ts +5 -2
- package/dist/codex-assist.js +17 -2
- package/dist/codex-assist.js.map +1 -1
- package/dist/codex-process.d.ts +5 -0
- package/dist/codex-process.js +61 -2
- package/dist/codex-process.js.map +1 -1
- package/dist/git-assist.js +3 -3
- package/dist/git-assist.js.map +1 -1
- package/dist/sessions-index.js +3 -4
- package/dist/sessions-index.js.map +1 -1
- package/dist/setup-launchd.js +12 -0
- package/dist/setup-launchd.js.map +1 -1
- package/dist/setup-systemd.js +8 -0
- package/dist/setup-systemd.js.map +1 -1
- package/dist/websocket.js +46 -1
- package/dist/websocket.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,6 +42,8 @@ ccpocket-bridge --version
|
|
|
42
42
|
| `BRIDGE_PUBLIC_WS_URL` | (none) | Public `ws://` / `wss://` URL used for startup deep link and QR code |
|
|
43
43
|
| `BRIDGE_CODEX_APP_SERVER_MODE` | `private` | Experimental Codex app-server mode: `private`, `managed`, or `external` |
|
|
44
44
|
| `BRIDGE_CODEX_SHARED_APP_SERVER_URL` | `ws://127.0.0.1:8767` in `managed` mode | Experimental shared Codex app-server URL for Codex CLI co-presence |
|
|
45
|
+
| `BRIDGE_CODEX_ASSIST_MODEL` | `gpt-5.4-mini` | Codex model used for auto-rename and commit-message assist calls |
|
|
46
|
+
| `BRIDGE_CODEX_ASSIST_REASONING_EFFORT` | `none` | Reasoning effort used for Codex assist calls |
|
|
45
47
|
| `BRIDGE_DEMO_MODE` | (none) | Demo mode: hide Tailscale IPs and API key from QR code / logs |
|
|
46
48
|
| `BRIDGE_RECORDING` | (none) | Enable session recording for debugging (enabled when set) |
|
|
47
49
|
| `BRIDGE_DISABLE_MDNS` | (none) | Disable mDNS auto-discovery advertisement (macOS disables it automatically) |
|
|
@@ -83,6 +85,11 @@ ccpocket-bridge --public-ws-url wss://example.ngrok-free.app
|
|
|
83
85
|
BRIDGE_DISABLE_MDNS=1 npx @ccpocket/bridge@latest
|
|
84
86
|
# or via CLI flag
|
|
85
87
|
ccpocket-bridge --no-mdns
|
|
88
|
+
|
|
89
|
+
# Example: use an assist model provided by a custom Codex gateway
|
|
90
|
+
BRIDGE_CODEX_ASSIST_MODEL=gpt-oss:20b-cloud \
|
|
91
|
+
BRIDGE_CODEX_ASSIST_REASONING_EFFORT=none \
|
|
92
|
+
npx @ccpocket/bridge@latest
|
|
86
93
|
```
|
|
87
94
|
|
|
88
95
|
When `BRIDGE_PUBLIC_WS_URL` is set, the startup deep link and terminal QR code
|
|
@@ -111,6 +118,8 @@ that affect startup:
|
|
|
111
118
|
- `BRIDGE_DISABLE_MDNS` / `--no-mdns`
|
|
112
119
|
- `BRIDGE_CODEX_APP_SERVER_MODE` / `--codex-app-server-mode`
|
|
113
120
|
- `BRIDGE_CODEX_SHARED_APP_SERVER_URL` / `--codex-shared-app-server-url`
|
|
121
|
+
- `BRIDGE_CODEX_ASSIST_MODEL`
|
|
122
|
+
- `BRIDGE_CODEX_ASSIST_REASONING_EFFORT`
|
|
114
123
|
|
|
115
124
|
Example:
|
|
116
125
|
|
|
@@ -120,6 +129,14 @@ BRIDGE_API_KEY=my-secret \
|
|
|
120
129
|
npx @ccpocket/bridge@latest setup
|
|
121
130
|
```
|
|
122
131
|
|
|
132
|
+
Custom gateway users can persist assist overrides in the same way:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
BRIDGE_CODEX_ASSIST_MODEL=gpt-oss:20b-cloud \
|
|
136
|
+
BRIDGE_CODEX_ASSIST_REASONING_EFFORT=none \
|
|
137
|
+
npx @ccpocket/bridge@latest setup
|
|
138
|
+
```
|
|
139
|
+
|
|
123
140
|
On Linux, setup gives standalone Codex installs priority by including
|
|
124
141
|
`$HOME/.local/bin` before npm-managed Node paths in the service `PATH`.
|
|
125
142
|
|
package/dist/auto-rename.js
CHANGED
|
@@ -2,7 +2,7 @@ import { execFileSync } from "node:child_process";
|
|
|
2
2
|
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { getCodexAssistModel, getCodexAssistReasoningConfig, } from "./codex-assist.js";
|
|
6
6
|
export const AUTO_RENAME_PROMPT_PREFIX = "Write a concise name for this coding-agent session.";
|
|
7
7
|
const AUTO_RENAME_PROMPT = `${AUTO_RENAME_PROMPT_PREFIX}
|
|
8
8
|
|
|
@@ -14,6 +14,10 @@ Rules:
|
|
|
14
14
|
- Keep it short: 2-8 English words or about 8-24 Japanese/Chinese/Korean characters.
|
|
15
15
|
- Avoid generic words such as Session, Chat, Task, Discussion.
|
|
16
16
|
- Avoid trailing punctuation.`;
|
|
17
|
+
const AUTO_RENAME_PROMPT_SIGNATURE = `${AUTO_RENAME_PROMPT_PREFIX}
|
|
18
|
+
|
|
19
|
+
Rules:
|
|
20
|
+
- Output only the name. No quotes, JSON, markdown, or explanation.`;
|
|
17
21
|
const MAX_TRANSCRIPT_CHARS = 2400;
|
|
18
22
|
const MAX_ASSISTANT_CHARS = 1200;
|
|
19
23
|
const MAX_NAME_CHARS = 60;
|
|
@@ -47,7 +51,7 @@ export function buildAutoRenamePrompt(transcript) {
|
|
|
47
51
|
return `${AUTO_RENAME_PROMPT}\n\nTranscript:\n${sections.join("\n\n")}`;
|
|
48
52
|
}
|
|
49
53
|
export function isAutoRenamePromptText(text) {
|
|
50
|
-
return text.trimStart().startsWith(
|
|
54
|
+
return text.trimStart().startsWith(AUTO_RENAME_PROMPT_SIGNATURE);
|
|
51
55
|
}
|
|
52
56
|
export function sanitizeAutoRenameName(output) {
|
|
53
57
|
const line = output
|
|
@@ -101,9 +105,9 @@ function runCodexAutoRename(cwd, prompt) {
|
|
|
101
105
|
execFileSync("codex", [
|
|
102
106
|
"exec",
|
|
103
107
|
"-m",
|
|
104
|
-
|
|
108
|
+
getCodexAssistModel(),
|
|
105
109
|
"-c",
|
|
106
|
-
|
|
110
|
+
getCodexAssistReasoningConfig(),
|
|
107
111
|
"-o",
|
|
108
112
|
outputPath,
|
|
109
113
|
"-",
|
package/dist/auto-rename.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-rename.js","sourceRoot":"","sources":["../src/auto-rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"auto-rename.js","sourceRoot":"","sources":["../src/auto-rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,yBAAyB,GACpC,qDAAqD,CAAC;AAExD,MAAM,kBAAkB,GAAG,GAAG,yBAAyB;;;;;;;;;8BASzB,CAAC;AAE/B,MAAM,4BAA4B,GAAG,GAAG,yBAAyB;;;mEAGE,CAAC;AAEpE,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,cAAc,GAAG,EAAE,CAAC;AAc1B,MAAM,UAAU,yBAAyB,CACvC,OAAiC;IAEjC,MAAM,QAAQ,GAAG,OAAO;SACrB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;SAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,aAAa,GAAG,OAAO;SAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;SACzC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,CAAC,OAAO,CAAC,OAAO;SAChB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;SAC5C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CACV;SACA,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,CAAC;QACnD,GAAG,CAAC,aAAa;YACf,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,UAAgC;IAEhC,MAAM,QAAQ,GAAG,CAAC,UAAU,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,GAAG,kBAAkB,oBAAoB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,IAAI,GAAG,MAAM;SAChB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,GAAG,IAAI;SACZ,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,IAAI,EAAE,CAAC;IACV,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,IAAI;SACR,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEV,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA0B;IAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;QACjC,CAAC,CAAC,YAAY,CACV,QAAQ,EACR,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EACpE;YACE,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CACF,CAAC;IACR,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAc;IACrD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,YAAY,CACV,OAAO,EACP;YACE,MAAM;YACN,IAAI;YACJ,mBAAmB,EAAE;YACrB,IAAI;YACJ,6BAA6B,EAAE;YAC/B,IAAI;YACJ,UAAU;YACV,GAAG;SACJ,EACD;YACE,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CACF,CAAC;QACF,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,QAAgB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IAChD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,IAAY,EACZ,QAAgB,IAAI;IAEpB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -39,12 +39,15 @@ Options:
|
|
|
39
39
|
Setup options:
|
|
40
40
|
--uninstall Remove the registered service
|
|
41
41
|
setup persists --port, --host, --api-key, --public-ws-url,
|
|
42
|
-
--no-mdns, Codex app-server options, and
|
|
42
|
+
--no-mdns, Codex app-server options, BRIDGE_ALLOWED_DIRS, and
|
|
43
|
+
BRIDGE_CODEX_ASSIST_MODEL / BRIDGE_CODEX_ASSIST_REASONING_EFFORT
|
|
43
44
|
|
|
44
45
|
Configuration can also be provided with BRIDGE_PORT, BRIDGE_HOST,
|
|
45
46
|
BRIDGE_API_KEY, BRIDGE_ALLOWED_DIRS, BRIDGE_PUBLIC_WS_URL, and
|
|
46
47
|
BRIDGE_DISABLE_MDNS. Codex app-server configuration can be provided with
|
|
47
|
-
BRIDGE_CODEX_APP_SERVER_MODE and BRIDGE_CODEX_SHARED_APP_SERVER_URL
|
|
48
|
+
BRIDGE_CODEX_APP_SERVER_MODE and BRIDGE_CODEX_SHARED_APP_SERVER_URL.
|
|
49
|
+
Codex assist calls can be configured with BRIDGE_CODEX_ASSIST_MODEL and
|
|
50
|
+
BRIDGE_CODEX_ASSIST_REASONING_EFFORT.`);
|
|
48
51
|
}
|
|
49
52
|
if (parsed.helpRequested) {
|
|
50
53
|
printHelp();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEjE,SAAS,mBAAmB,CAAC,GAAY;IACvC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAElC,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/codex-assist.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
1
|
+
export declare const DEFAULT_CODEX_ASSIST_MODEL = "gpt-5.4-mini";
|
|
2
|
+
export declare const DEFAULT_CODEX_ASSIST_REASONING_EFFORT = "none";
|
|
3
|
+
export declare function getCodexAssistModel(): string;
|
|
4
|
+
export declare function getCodexAssistReasoningEffort(): string;
|
|
5
|
+
export declare function getCodexAssistReasoningConfig(): string;
|
package/dist/codex-assist.js
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export const
|
|
1
|
+
export const DEFAULT_CODEX_ASSIST_MODEL = "gpt-5.4-mini";
|
|
2
|
+
export const DEFAULT_CODEX_ASSIST_REASONING_EFFORT = "none";
|
|
3
|
+
function readNonEmptyEnv(name) {
|
|
4
|
+
const value = process.env[name]?.trim();
|
|
5
|
+
return value || undefined;
|
|
6
|
+
}
|
|
7
|
+
export function getCodexAssistModel() {
|
|
8
|
+
return (readNonEmptyEnv("BRIDGE_CODEX_ASSIST_MODEL") ??
|
|
9
|
+
DEFAULT_CODEX_ASSIST_MODEL);
|
|
10
|
+
}
|
|
11
|
+
export function getCodexAssistReasoningEffort() {
|
|
12
|
+
return (readNonEmptyEnv("BRIDGE_CODEX_ASSIST_REASONING_EFFORT") ??
|
|
13
|
+
DEFAULT_CODEX_ASSIST_REASONING_EFFORT);
|
|
14
|
+
}
|
|
15
|
+
export function getCodexAssistReasoningConfig() {
|
|
16
|
+
return `model_reasoning_effort=${JSON.stringify(getCodexAssistReasoningEffort())}`;
|
|
17
|
+
}
|
|
3
18
|
//# sourceMappingURL=codex-assist.js.map
|
package/dist/codex-assist.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-assist.js","sourceRoot":"","sources":["../src/codex-assist.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"codex-assist.js","sourceRoot":"","sources":["../src/codex-assist.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC;AAE5D,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,CACL,eAAe,CAAC,2BAA2B,CAAC;QAC5C,0BAA0B,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,CACL,eAAe,CAAC,sCAAsC,CAAC;QACvD,qCAAqC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,0BAA0B,IAAI,CAAC,SAAS,CAAC,6BAA6B,EAAE,CAAC,EAAE,CAAC;AACrF,CAAC"}
|
package/dist/codex-process.d.ts
CHANGED
|
@@ -124,6 +124,10 @@ export declare class CodexProcess extends EventEmitter<CodexProcessEvents> {
|
|
|
124
124
|
private lastPlanItemText;
|
|
125
125
|
/** Last assistant text message — used as `result` in completion notification. */
|
|
126
126
|
private lastResultText;
|
|
127
|
+
/** Agent text received as deltas but not yet confirmed by item/completed. */
|
|
128
|
+
private readonly pendingAgentTextByItemId;
|
|
129
|
+
/** Suppresses late item/completed events after synthetic fallbacks. */
|
|
130
|
+
private readonly syntheticAgentTextByItemId;
|
|
127
131
|
private pendingPlanCompletion;
|
|
128
132
|
/** Queued plan execution text when inputResolve wasn't ready at approval time. */
|
|
129
133
|
private _pendingPlanInput;
|
|
@@ -304,6 +308,7 @@ export declare class CodexProcess extends EventEmitter<CodexProcessEvents> {
|
|
|
304
308
|
private handleNotification;
|
|
305
309
|
private isForeignThreadNotification;
|
|
306
310
|
private handleTurnCompleted;
|
|
311
|
+
private finalizePendingAgentText;
|
|
307
312
|
private cleanupSteerTempPaths;
|
|
308
313
|
private processItemStarted;
|
|
309
314
|
private processItemCompleted;
|
package/dist/codex-process.js
CHANGED
|
@@ -9,6 +9,7 @@ import { resolvePlatformPath } from "./path-utils.js";
|
|
|
9
9
|
export { buildCodexSpawnSpec };
|
|
10
10
|
const DEFAULT_CODEX_MODEL = "gpt-5.5";
|
|
11
11
|
const COMPLETION_FETCH_COOLDOWN_MS = 1000;
|
|
12
|
+
const UNKNOWN_AGENT_ITEM_ID = "__unknown_agent_message__";
|
|
12
13
|
const CODEX_CLI_NOT_FOUND_MESSAGE = "Codex CLI is not installed or not available on PATH on the Bridge machine. Install it with `curl -fsSL https://chatgpt.com/codex/install.sh | sh`, then restart Bridge.";
|
|
13
14
|
function isCodexCliNotFoundError(err) {
|
|
14
15
|
const code = err.code;
|
|
@@ -74,6 +75,10 @@ export class CodexProcess extends EventEmitter {
|
|
|
74
75
|
lastPlanItemText = null;
|
|
75
76
|
/** Last assistant text message — used as `result` in completion notification. */
|
|
76
77
|
lastResultText = null;
|
|
78
|
+
/** Agent text received as deltas but not yet confirmed by item/completed. */
|
|
79
|
+
pendingAgentTextByItemId = new Map();
|
|
80
|
+
/** Suppresses late item/completed events after synthetic fallbacks. */
|
|
81
|
+
syntheticAgentTextByItemId = new Map();
|
|
77
82
|
pendingPlanCompletion = null;
|
|
78
83
|
/** Queued plan execution text when inputResolve wasn't ready at approval time. */
|
|
79
84
|
_pendingPlanInput = null;
|
|
@@ -420,6 +425,8 @@ export class CodexProcess extends EventEmitter {
|
|
|
420
425
|
this._collaborationMode = options?.collaborationMode ?? "default";
|
|
421
426
|
this.lastPlanItemText = null;
|
|
422
427
|
this.lastResultText = null;
|
|
428
|
+
this.pendingAgentTextByItemId.clear();
|
|
429
|
+
this.syntheticAgentTextByItemId.clear();
|
|
423
430
|
this.pendingPlanCompletion = null;
|
|
424
431
|
this._pendingPlanInput = null;
|
|
425
432
|
this._projectPath = projectPath;
|
|
@@ -1575,6 +1582,9 @@ export class CodexProcess extends EventEmitter {
|
|
|
1575
1582
|
if (typeof turn?.id === "string") {
|
|
1576
1583
|
this.pendingTurnId = turn.id;
|
|
1577
1584
|
}
|
|
1585
|
+
this.lastResultText = null;
|
|
1586
|
+
this.pendingAgentTextByItemId.clear();
|
|
1587
|
+
this.syntheticAgentTextByItemId.clear();
|
|
1578
1588
|
this.setStatus("running");
|
|
1579
1589
|
break;
|
|
1580
1590
|
}
|
|
@@ -1628,6 +1638,8 @@ export class CodexProcess extends EventEmitter {
|
|
|
1628
1638
|
? params.textDelta
|
|
1629
1639
|
: "";
|
|
1630
1640
|
if (delta) {
|
|
1641
|
+
const itemId = stringOrNull(params.itemId) ?? UNKNOWN_AGENT_ITEM_ID;
|
|
1642
|
+
this.pendingAgentTextByItemId.set(itemId, (this.pendingAgentTextByItemId.get(itemId) ?? "") + delta);
|
|
1631
1643
|
this.emitMessage({ type: "stream_delta", text: delta });
|
|
1632
1644
|
}
|
|
1633
1645
|
break;
|
|
@@ -1757,6 +1769,7 @@ export class CodexProcess extends EventEmitter {
|
|
|
1757
1769
|
}
|
|
1758
1770
|
handleTurnCompleted(turn) {
|
|
1759
1771
|
const status = String(turn?.status ?? "completed");
|
|
1772
|
+
this.finalizePendingAgentText();
|
|
1760
1773
|
const usage = this.lastTokenUsage;
|
|
1761
1774
|
this.lastTokenUsage = null;
|
|
1762
1775
|
if (status === "failed") {
|
|
@@ -1822,6 +1835,26 @@ export class CodexProcess extends EventEmitter {
|
|
|
1822
1835
|
}
|
|
1823
1836
|
this.cleanupSteerTempPaths();
|
|
1824
1837
|
}
|
|
1838
|
+
finalizePendingAgentText() {
|
|
1839
|
+
const pendingItems = [...this.pendingAgentTextByItemId.entries()];
|
|
1840
|
+
this.pendingAgentTextByItemId.clear();
|
|
1841
|
+
for (const [pendingItemId, text] of pendingItems) {
|
|
1842
|
+
if (!text.trim())
|
|
1843
|
+
continue;
|
|
1844
|
+
const itemId = pendingItemId === UNKNOWN_AGENT_ITEM_ID ? randomUUID() : pendingItemId;
|
|
1845
|
+
this.lastResultText = text;
|
|
1846
|
+
this.syntheticAgentTextByItemId.set(itemId, text);
|
|
1847
|
+
this.emitMessage({
|
|
1848
|
+
type: "assistant",
|
|
1849
|
+
message: {
|
|
1850
|
+
id: itemId,
|
|
1851
|
+
role: "assistant",
|
|
1852
|
+
content: [{ type: "text", text }],
|
|
1853
|
+
model: this.getMessageModel(),
|
|
1854
|
+
},
|
|
1855
|
+
});
|
|
1856
|
+
}
|
|
1857
|
+
}
|
|
1825
1858
|
cleanupSteerTempPaths() {
|
|
1826
1859
|
const tempPaths = this.steerTempPaths.splice(0);
|
|
1827
1860
|
void Promise.all(tempPaths.map((path) => rm(path, { force: true }).catch(() => { })));
|
|
@@ -1963,9 +1996,35 @@ export class CodexProcess extends EventEmitter {
|
|
|
1963
1996
|
const itemType = normalizeItemType(item.type);
|
|
1964
1997
|
switch (itemType) {
|
|
1965
1998
|
case "agentmessage": {
|
|
1966
|
-
const
|
|
1967
|
-
|
|
1999
|
+
const completedText = extractAgentText(item);
|
|
2000
|
+
const hasCompletedText = completedText?.trim().length > 0;
|
|
2001
|
+
const directPendingText = this.pendingAgentTextByItemId.get(itemId);
|
|
2002
|
+
const usedUnknownPendingText = !hasCompletedText && directPendingText === undefined;
|
|
2003
|
+
const pendingText = usedUnknownPendingText
|
|
2004
|
+
? (this.pendingAgentTextByItemId.get(UNKNOWN_AGENT_ITEM_ID) ?? "")
|
|
2005
|
+
: (directPendingText ?? "");
|
|
2006
|
+
const text = hasCompletedText ? completedText : pendingText;
|
|
2007
|
+
this.pendingAgentTextByItemId.delete(itemId);
|
|
2008
|
+
if (usedUnknownPendingText) {
|
|
2009
|
+
this.pendingAgentTextByItemId.delete(UNKNOWN_AGENT_ITEM_ID);
|
|
2010
|
+
}
|
|
2011
|
+
if (!text.trim())
|
|
1968
2012
|
return;
|
|
2013
|
+
if (this.pendingTurnId === null) {
|
|
2014
|
+
const syntheticText = this.syntheticAgentTextByItemId.get(itemId);
|
|
2015
|
+
if (syntheticText === text) {
|
|
2016
|
+
this.syntheticAgentTextByItemId.delete(itemId);
|
|
2017
|
+
return;
|
|
2018
|
+
}
|
|
2019
|
+
const syntheticEntry = [
|
|
2020
|
+
...this.syntheticAgentTextByItemId.entries(),
|
|
2021
|
+
].find(([, candidate]) => candidate === text);
|
|
2022
|
+
if (syntheticEntry) {
|
|
2023
|
+
this.syntheticAgentTextByItemId.delete(syntheticEntry[0]);
|
|
2024
|
+
return;
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
2027
|
+
this.syntheticAgentTextByItemId.delete(itemId);
|
|
1969
2028
|
this.lastResultText = text;
|
|
1970
2029
|
this.emitMessage({
|
|
1971
2030
|
type: "assistant",
|