@ccpocket/bridge 1.67.4 → 1.68.1
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 +4 -0
- package/dist/codex-process.js +111 -89
- 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/sdk-process.d.ts +1 -0
- package/dist/sdk-process.js +4 -1
- package/dist/sdk-process.js.map +1 -1
- package/dist/session.d.ts +3 -2
- package/dist/session.js +16 -13
- package/dist/session.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 +21 -5
- 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":"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"}
|
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
|
@@ -102,12 +102,15 @@ export declare class CodexProcess extends EventEmitter<CodexProcessEvents> {
|
|
|
102
102
|
private _skills;
|
|
103
103
|
/** Full app metadata from the last `app/list` response. */
|
|
104
104
|
private _apps;
|
|
105
|
+
/** Full plugin metadata from the last `plugin/list` response. */
|
|
106
|
+
private _plugins;
|
|
105
107
|
/** Project path stored for re-fetching skills on `skills/changed`. */
|
|
106
108
|
private _projectPath;
|
|
107
109
|
/** Prevent redundant completion fetch storms from repeated change notifications. */
|
|
108
110
|
private _completionFetchInFlight;
|
|
109
111
|
private _lastCompletionEntitiesSignature;
|
|
110
112
|
private _completionFetchCooldownUntil;
|
|
113
|
+
private _launchStartedAt;
|
|
111
114
|
/** Expose skill metadata so session/websocket can access it. */
|
|
112
115
|
get skills(): CodexSkillMetadata[];
|
|
113
116
|
get apps(): CodexAppMetadata[];
|
|
@@ -300,6 +303,7 @@ export declare class CodexProcess extends EventEmitter<CodexProcessEvents> {
|
|
|
300
303
|
private fetchCompletionEntities;
|
|
301
304
|
private scheduleCompletionFetchFromNotification;
|
|
302
305
|
private _fetchCompletionEntitiesInternal;
|
|
306
|
+
private emitCompletionEntitiesSnapshot;
|
|
303
307
|
private runInputLoop;
|
|
304
308
|
private handleStdoutChunk;
|
|
305
309
|
private handleRpcEnvelope;
|
package/dist/codex-process.js
CHANGED
|
@@ -48,12 +48,15 @@ export class CodexProcess extends EventEmitter {
|
|
|
48
48
|
_skills = [];
|
|
49
49
|
/** Full app metadata from the last `app/list` response. */
|
|
50
50
|
_apps = [];
|
|
51
|
+
/** Full plugin metadata from the last `plugin/list` response. */
|
|
52
|
+
_plugins = [];
|
|
51
53
|
/** Project path stored for re-fetching skills on `skills/changed`. */
|
|
52
54
|
_projectPath = null;
|
|
53
55
|
/** Prevent redundant completion fetch storms from repeated change notifications. */
|
|
54
56
|
_completionFetchInFlight = null;
|
|
55
57
|
_lastCompletionEntitiesSignature = null;
|
|
56
58
|
_completionFetchCooldownUntil = 0;
|
|
59
|
+
_launchStartedAt = 0;
|
|
57
60
|
/** Expose skill metadata so session/websocket can access it. */
|
|
58
61
|
get skills() {
|
|
59
62
|
return this._skills;
|
|
@@ -425,6 +428,11 @@ export class CodexProcess extends EventEmitter {
|
|
|
425
428
|
this._collaborationMode = options?.collaborationMode ?? "default";
|
|
426
429
|
this.lastPlanItemText = null;
|
|
427
430
|
this.lastResultText = null;
|
|
431
|
+
this._skills = [];
|
|
432
|
+
this._apps = [];
|
|
433
|
+
this._plugins = [];
|
|
434
|
+
this._lastCompletionEntitiesSignature = null;
|
|
435
|
+
this._launchStartedAt = Date.now();
|
|
428
436
|
this.pendingAgentTextByItemId.clear();
|
|
429
437
|
this.syntheticAgentTextByItemId.clear();
|
|
430
438
|
this.pendingPlanCompletion = null;
|
|
@@ -1019,7 +1027,7 @@ export class CodexProcess extends EventEmitter {
|
|
|
1019
1027
|
...(cliJoin ? { codexCliJoin: cliJoin } : {}),
|
|
1020
1028
|
});
|
|
1021
1029
|
this.setStatus("idle");
|
|
1022
|
-
// Fetch
|
|
1030
|
+
// Fetch completion entities in background (non-blocking).
|
|
1023
1031
|
this._projectPath = projectPath;
|
|
1024
1032
|
setTimeout(() => {
|
|
1025
1033
|
if (!this.stopped) {
|
|
@@ -1116,20 +1124,6 @@ export class CodexProcess extends EventEmitter {
|
|
|
1116
1124
|
}),
|
|
1117
1125
|
new Promise((resolve) => setTimeout(() => resolve(null), TIMEOUT_MS)),
|
|
1118
1126
|
]);
|
|
1119
|
-
const skillsResult = (await Promise.race([
|
|
1120
|
-
this.request("skills/list", { cwds: [projectPath] }),
|
|
1121
|
-
new Promise((resolve) => setTimeout(() => resolve(null), TIMEOUT_MS)),
|
|
1122
|
-
]));
|
|
1123
|
-
const appsResult = (await Promise.race([
|
|
1124
|
-
this.request("app/list", {
|
|
1125
|
-
cursor: null,
|
|
1126
|
-
limit: 100,
|
|
1127
|
-
threadId: this._threadId ?? undefined,
|
|
1128
|
-
forceRefetch: false,
|
|
1129
|
-
}),
|
|
1130
|
-
new Promise((resolve) => setTimeout(() => resolve(null), TIMEOUT_MS)),
|
|
1131
|
-
]));
|
|
1132
|
-
const pluginsResult = await requestOrNull("plugin/list", { cwds: [projectPath] });
|
|
1133
1127
|
const optionalString = (value) => typeof value === "string" ? value : undefined;
|
|
1134
1128
|
const optionalFirstString = (value) => {
|
|
1135
1129
|
if (typeof value === "string")
|
|
@@ -1138,13 +1132,24 @@ export class CodexProcess extends EventEmitter {
|
|
|
1138
1132
|
return undefined;
|
|
1139
1133
|
return value.find((entry) => typeof entry === "string");
|
|
1140
1134
|
};
|
|
1141
|
-
const
|
|
1142
|
-
const
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1135
|
+
const skillsRequest = requestOrNull("skills/list", { cwds: [projectPath] });
|
|
1136
|
+
const appsRequest = requestOrNull("app/list", {
|
|
1137
|
+
cursor: null,
|
|
1138
|
+
limit: 100,
|
|
1139
|
+
threadId: this._threadId ?? undefined,
|
|
1140
|
+
forceRefetch: false,
|
|
1141
|
+
});
|
|
1142
|
+
const pluginsRequest = requestOrNull("plugin/list", { cwds: [projectPath] });
|
|
1143
|
+
let skillsReady = false;
|
|
1144
|
+
await Promise.all([
|
|
1145
|
+
skillsRequest.then((skillsResult) => {
|
|
1146
|
+
if (this.stopped || skillsResult === null)
|
|
1147
|
+
return;
|
|
1148
|
+
const skillMetadata = [];
|
|
1149
|
+
for (const entry of skillsResult.data ?? []) {
|
|
1150
|
+
for (const skill of entry.skills) {
|
|
1151
|
+
if (!skill.enabled)
|
|
1152
|
+
continue;
|
|
1148
1153
|
skillMetadata.push({
|
|
1149
1154
|
name: skill.name,
|
|
1150
1155
|
path: skill.path,
|
|
@@ -1160,78 +1165,95 @@ export class CodexProcess extends EventEmitter {
|
|
|
1160
1165
|
});
|
|
1161
1166
|
}
|
|
1162
1167
|
}
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
console.log(`[codex-process] completion entities loaded: ${skills.length} skills, ${appMetadata.length} apps, ${pluginMetadata.length} plugins`);
|
|
1219
|
-
this.emitMessage({
|
|
1220
|
-
type: "system",
|
|
1221
|
-
subtype: "supported_commands",
|
|
1222
|
-
skills,
|
|
1223
|
-
skillMetadata,
|
|
1224
|
-
apps: appMetadata.map((app) => app.id),
|
|
1225
|
-
appMetadata,
|
|
1226
|
-
plugins,
|
|
1227
|
-
pluginMetadata,
|
|
1228
|
-
});
|
|
1229
|
-
}
|
|
1168
|
+
this._skills = skillMetadata;
|
|
1169
|
+
skillsReady = true;
|
|
1170
|
+
const elapsedMs = this._launchStartedAt > 0
|
|
1171
|
+
? Date.now() - this._launchStartedAt
|
|
1172
|
+
: undefined;
|
|
1173
|
+
console.log(`[codex-process] completion skills ready: ${skillMetadata.length} skills${elapsedMs === undefined ? "" : ` (${elapsedMs}ms since start)`}`);
|
|
1174
|
+
this.emitCompletionEntitiesSnapshot("skills");
|
|
1175
|
+
}),
|
|
1176
|
+
appsRequest.then((appsResult) => {
|
|
1177
|
+
if (this.stopped || appsResult === null)
|
|
1178
|
+
return;
|
|
1179
|
+
this._apps = (appsResult.data ?? [])
|
|
1180
|
+
.filter((app) => (app.isAccessible ?? true) && (app.isEnabled ?? true))
|
|
1181
|
+
.map((app) => ({
|
|
1182
|
+
id: app.id,
|
|
1183
|
+
name: app.name,
|
|
1184
|
+
description: app.description,
|
|
1185
|
+
installUrl: app.installUrl ?? undefined,
|
|
1186
|
+
isAccessible: app.isAccessible ?? true,
|
|
1187
|
+
isEnabled: app.isEnabled ?? true,
|
|
1188
|
+
}));
|
|
1189
|
+
if (skillsReady)
|
|
1190
|
+
this.emitCompletionEntitiesSnapshot("apps");
|
|
1191
|
+
}),
|
|
1192
|
+
pluginsRequest.then((pluginsResult) => {
|
|
1193
|
+
if (this.stopped || pluginsResult === null)
|
|
1194
|
+
return;
|
|
1195
|
+
const pluginMetadata = [];
|
|
1196
|
+
for (const marketplace of pluginsResult.marketplaces ?? []) {
|
|
1197
|
+
for (const plugin of marketplace.plugins ?? []) {
|
|
1198
|
+
if (!plugin.installed || !plugin.enabled)
|
|
1199
|
+
continue;
|
|
1200
|
+
pluginMetadata.push({
|
|
1201
|
+
id: plugin.id,
|
|
1202
|
+
name: plugin.name,
|
|
1203
|
+
path: `plugin://${plugin.id}`,
|
|
1204
|
+
marketplaceName: marketplace.name,
|
|
1205
|
+
marketplacePath: marketplace.path ?? undefined,
|
|
1206
|
+
installed: plugin.installed,
|
|
1207
|
+
enabled: plugin.enabled,
|
|
1208
|
+
displayName: optionalString(plugin.interface?.displayName),
|
|
1209
|
+
shortDescription: optionalString(plugin.interface?.shortDescription),
|
|
1210
|
+
longDescription: optionalString(plugin.interface?.longDescription),
|
|
1211
|
+
defaultPrompt: optionalFirstString(plugin.interface?.defaultPrompt),
|
|
1212
|
+
brandColor: optionalString(plugin.interface?.brandColor),
|
|
1213
|
+
composerIcon: optionalString(plugin.interface?.composerIcon),
|
|
1214
|
+
composerIconUrl: optionalString(plugin.interface?.composerIconUrl),
|
|
1215
|
+
});
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
this._plugins = pluginMetadata;
|
|
1219
|
+
if (skillsReady)
|
|
1220
|
+
this.emitCompletionEntitiesSnapshot("plugins");
|
|
1221
|
+
}),
|
|
1222
|
+
]);
|
|
1230
1223
|
}
|
|
1231
1224
|
catch (err) {
|
|
1232
1225
|
console.log(`[codex-process] completion entity fetch failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
1233
1226
|
}
|
|
1234
1227
|
}
|
|
1228
|
+
emitCompletionEntitiesSnapshot(source) {
|
|
1229
|
+
if (this.stopped)
|
|
1230
|
+
return;
|
|
1231
|
+
const skills = this._skills.map((skill) => skill.name);
|
|
1232
|
+
const apps = this._apps.map((app) => app.id);
|
|
1233
|
+
const plugins = this._plugins.map((plugin) => plugin.name);
|
|
1234
|
+
const signature = JSON.stringify({
|
|
1235
|
+
skills,
|
|
1236
|
+
skillMetadata: this._skills,
|
|
1237
|
+
apps,
|
|
1238
|
+
appMetadata: this._apps,
|
|
1239
|
+
plugins,
|
|
1240
|
+
pluginMetadata: this._plugins,
|
|
1241
|
+
});
|
|
1242
|
+
if (signature === this._lastCompletionEntitiesSignature)
|
|
1243
|
+
return;
|
|
1244
|
+
this._lastCompletionEntitiesSignature = signature;
|
|
1245
|
+
console.log(`[codex-process] completion entities updated (${source}): ${skills.length} skills, ${apps.length} apps, ${plugins.length} plugins`);
|
|
1246
|
+
this.emitMessage({
|
|
1247
|
+
type: "system",
|
|
1248
|
+
subtype: "supported_commands",
|
|
1249
|
+
skills,
|
|
1250
|
+
skillMetadata: this._skills,
|
|
1251
|
+
apps,
|
|
1252
|
+
appMetadata: this._apps,
|
|
1253
|
+
plugins,
|
|
1254
|
+
pluginMetadata: this._plugins,
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1235
1257
|
async runInputLoop(options) {
|
|
1236
1258
|
while (!this.stopped) {
|
|
1237
1259
|
const pendingInput = await new Promise((resolve) => {
|