@gkorepanov/ccodex 0.4.7 → 0.4.9
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 +5 -2
- package/config/compatibility.json +3 -3
- package/dist/claude/inputMapper.js +13 -3
- package/dist/claude/inputMapper.js.map +1 -1
- package/dist/claude/modelCatalog.d.ts +2 -0
- package/dist/claude/modelCatalog.js +22 -3
- package/dist/claude/modelCatalog.js.map +1 -1
- package/dist/claude/resultClassifier.d.ts +1 -0
- package/dist/claude/resultClassifier.js +10 -1
- package/dist/claude/resultClassifier.js.map +1 -1
- package/dist/claude/service.d.ts +2 -1
- package/dist/claude/service.js +5 -35
- package/dist/claude/service.js.map +1 -1
- package/dist/claude/session/commands.d.ts +8 -0
- package/dist/claude/session/providerFacts.d.ts +2 -0
- package/dist/claude/session/providerFacts.js +27 -1
- package/dist/claude/session/providerFacts.js.map +1 -1
- package/dist/claude/session/session.d.ts +2 -0
- package/dist/claude/session/session.js +39 -5
- package/dist/claude/session/session.js.map +1 -1
- package/dist/claude/skillCatalog.d.ts +18 -0
- package/dist/claude/skillCatalog.js +125 -0
- package/dist/claude/skillCatalog.js.map +1 -0
- package/dist/claude/skillCodec.d.ts +4 -0
- package/dist/claude/skillCodec.js +10 -0
- package/dist/claude/skillCodec.js.map +1 -0
- package/dist/claude/threadSettings.d.ts +4 -0
- package/dist/claude/threadSettings.js +35 -0
- package/dist/claude/threadSettings.js.map +1 -0
- package/dist/claude/toolMapper.d.ts +2 -2
- package/dist/claude/toolMapper.js +13 -5
- package/dist/claude/toolMapper.js.map +1 -1
- package/dist/config/config.d.ts +1 -0
- package/dist/config/config.js +4 -1
- package/dist/config/config.js.map +1 -1
- package/dist/gateway/clientConnection.d.ts +2 -1
- package/dist/gateway/clientConnection.js +12 -1
- package/dist/gateway/clientConnection.js.map +1 -1
- package/dist/gateway/server.js +10 -3
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/skillList.d.ts +9 -0
- package/dist/gateway/skillList.js +24 -0
- package/dist/gateway/skillList.js.map +1 -0
- package/dist/gateway/subscriptions.d.ts +1 -0
- package/dist/gateway/subscriptions.js +4 -0
- package/dist/gateway/subscriptions.js.map +1 -1
- package/dist/handoff/service.js +97 -37
- package/dist/handoff/service.js.map +1 -1
- package/examples/config.toml +1 -0
- package/legal/LICENSES.md +1 -1
- package/legal/THIRD_PARTY_NOTICES.md +9 -9
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -43,6 +43,8 @@ missing bridge.
|
|
|
43
43
|
a compact context handoff, so your chat doesn't start from zero.
|
|
44
44
|
- ⚡ **Native-feeling Codex features** — threads, turns, tools, approvals, `/compact`,
|
|
45
45
|
Fork, effort and fast-mode settings all work with Claude models like they were built in.
|
|
46
|
+
- 🧩 **Claude skills in `$` autocomplete** — project and user skills appear beside Codex
|
|
47
|
+
skills and invoke Claude's native slash commands.
|
|
46
48
|
- 📊 **Status commands** — `/ccstatus` shows provider health and quotas for ❋ Claude
|
|
47
49
|
and ֎ Codex; `/ccstate` shows the current task's model, context, traffic, cost, and
|
|
48
50
|
session stats.
|
|
@@ -152,9 +154,9 @@ keep working):
|
|
|
152
154
|
|
|
153
155
|
| | |
|
|
154
156
|
|---|---|
|
|
155
|
-
| **CCodex** | `0.4.
|
|
157
|
+
| **CCodex** | `0.4.8` |
|
|
156
158
|
| **Embedded Codex CLI** | `0.144.6` (pinned; a newer global Codex never replaces it) |
|
|
157
|
-
| **Claude Agent SDK / Claude Code** | `0.3.
|
|
159
|
+
| **Claude Agent SDK / Claude Code** | `0.3.219` / `2.1.219` |
|
|
158
160
|
| **Runtime** | Node.js `>=22.13 <27`, npm `>=10` |
|
|
159
161
|
| **Platforms** | macOS 11+ (arm64) · Linux arm64 & x64, glibc ≥2.31 (Ubuntu 22.04+, Debian 11+, Fedora/RHEL equivalents). Alpine/musl not supported |
|
|
160
162
|
| **Shells** | Bash, Zsh, Fish |
|
|
@@ -174,6 +176,7 @@ Return only the title.
|
|
|
174
176
|
[features]
|
|
175
177
|
status_command = false # forward /ccstatus and /ccstate to the provider as plain messages
|
|
176
178
|
optimistic_side_startup = true # open `/side` immediately while provider context is prepared
|
|
179
|
+
claude_skills = true # expose Claude skills in the Codex App `$` autocomplete
|
|
177
180
|
```
|
|
178
181
|
|
|
179
182
|
Remove or comment out `rename_prompt` for byte-compatible stock Codex title generation.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"productVersion": "0.4.
|
|
3
|
+
"productVersion": "0.4.9",
|
|
4
4
|
"node": ">=22.13 <27",
|
|
5
5
|
"codexCli": "0.144.6",
|
|
6
6
|
"codexGitRevision": "1e66aaa95b5ab39d3ef3057cd50bdecd576a8356",
|
|
7
|
-
"claudeAgentSdk": "0.3.
|
|
8
|
-
"claudeCode": "2.1.
|
|
7
|
+
"claudeAgentSdk": "0.3.219",
|
|
8
|
+
"claudeCode": "2.1.219",
|
|
9
9
|
"protocolFixture": "codex-0.144.4",
|
|
10
10
|
"relayPackages": {
|
|
11
11
|
"darwin-arm64": "@gkorepanov/ccodex-relay-darwin-arm64",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readFile, realpath } from "node:fs/promises";
|
|
2
2
|
import { extname, isAbsolute, relative, resolve } from "node:path";
|
|
3
3
|
import { invalidParams } from "../protocol/errors.js";
|
|
4
|
+
import { decodeClaudeSkillChips } from "./skillCodec.js";
|
|
4
5
|
const mediaTypes = {
|
|
5
6
|
".gif": "image/gif",
|
|
6
7
|
".jpeg": "image/jpeg",
|
|
@@ -28,9 +29,13 @@ async function allowedImagePath(path, context) {
|
|
|
28
29
|
}
|
|
29
30
|
export async function mapUserInput(input, uuid, context) {
|
|
30
31
|
const content = [];
|
|
32
|
+
let decodedSkill = false;
|
|
31
33
|
for (const item of input) {
|
|
32
|
-
if (item.type === "text")
|
|
33
|
-
|
|
34
|
+
if (item.type === "text") {
|
|
35
|
+
const decoded = decodeClaudeSkillChips(item.text);
|
|
36
|
+
decodedSkill ||= decoded.decoded;
|
|
37
|
+
content.push({ type: "text", text: decoded.text });
|
|
38
|
+
}
|
|
34
39
|
else if (item.type === "mention") {
|
|
35
40
|
content.push({ type: "text", text: `@${item.name} (${item.path})` });
|
|
36
41
|
}
|
|
@@ -63,7 +68,12 @@ export async function mapUserInput(input, uuid, context) {
|
|
|
63
68
|
parent_tool_use_id: null,
|
|
64
69
|
...(uuid ? { uuid } : {}),
|
|
65
70
|
...(context?.origin === "human" ? { origin: { kind: "human" } } : {}),
|
|
66
|
-
message: {
|
|
71
|
+
message: {
|
|
72
|
+
role: "user",
|
|
73
|
+
content: decodedSkill && content.every((block) => block.type === "text")
|
|
74
|
+
? content.map((block) => block.text).join("")
|
|
75
|
+
: content,
|
|
76
|
+
},
|
|
67
77
|
};
|
|
68
78
|
}
|
|
69
79
|
//# sourceMappingURL=inputMapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputMapper.js","sourceRoot":"","sources":["../../src/claude/inputMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"inputMapper.js","sourceRoot":"","sources":["../../src/claude/inputMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,UAAU,GAA2B;IACzC,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CAAC;AAQF,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAqB;IACjE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,aAAa;QACnH,CAAC,CAAC,OAAO,CAAC,aAA2D;QACrE,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,OAAO,EAAE,IAAI,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChK,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,aAAa;YAAE,SAAS;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;IACxF,CAAC;IACD,MAAM,aAAa,CAAC,uBAAuB,IAAI,+CAA+C,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAA2B,EAAE,IAAa,EAAE,OAAsB;IACnG,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,aAAa,CAAC,mDAAmD,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;gBAAE,MAAM,aAAa,CAAC,wCAAwC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;YACzI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO;gBAAE,MAAM,aAAa,CAAC,mDAAmD,CAAC,CAAC;YACvF,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS;gBAAE,MAAM,aAAa,CAAC,sCAAsC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YACzF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aAClF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,EAAE;QACd,kBAAkB,EAAE,IAAI;QACxB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;gBACtE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,OAAO;SACZ;KAC2B,CAAC;AACjC,CAAC"}
|
|
@@ -4,7 +4,9 @@ import type { HybridConfig } from "../config/config.js";
|
|
|
4
4
|
import type { Logger } from "../observability/logger.js";
|
|
5
5
|
import { MetricsRegistry } from "../observability/metrics.js";
|
|
6
6
|
export declare function assertClaudeControlSurface(value: unknown): asserts value is Query;
|
|
7
|
+
export declare function claudeModelDisplayName(model: ModelInfo): string;
|
|
7
8
|
export declare function mapClaudeModel(model: ModelInfo, prefix: string): Model;
|
|
9
|
+
export declare function mapClaudeModels(models: readonly ModelInfo[], prefix: string): Model[];
|
|
8
10
|
export declare class ClaudeModelCatalog {
|
|
9
11
|
private readonly config;
|
|
10
12
|
private readonly logger;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
import { MetricsRegistry } from "../observability/metrics.js";
|
|
3
|
-
import { modelCatalogValue } from "./modelSelection.js";
|
|
3
|
+
import { modelCatalogValue, normalizeClaudeModelIdentifier } from "./modelSelection.js";
|
|
4
4
|
import { claudeEnvironment } from "./environment.js";
|
|
5
5
|
const effortDescriptions = {
|
|
6
6
|
low: "Faster responses with less reasoning.",
|
|
@@ -24,6 +24,21 @@ function defaultEffort(levels) {
|
|
|
24
24
|
return "medium";
|
|
25
25
|
return levels[0] ?? "medium";
|
|
26
26
|
}
|
|
27
|
+
export function claudeModelDisplayName(model) {
|
|
28
|
+
const displayName = model.displayName.replace(/\s*\(1M context\)\s*$/iu, "");
|
|
29
|
+
const resolved = model.resolvedModel && normalizeClaudeModelIdentifier(model.resolvedModel);
|
|
30
|
+
const version = resolved && /^claude-([a-z][a-z0-9]*?)-(\d+)(?:-(\d{1,2})(?=-|$))?/u.exec(resolved);
|
|
31
|
+
if (!version)
|
|
32
|
+
return displayName;
|
|
33
|
+
const [, family, major, minor] = version;
|
|
34
|
+
const label = `${family[0].toUpperCase()}${family.slice(1)} ${major}${minor ? `.${minor}` : ""}`;
|
|
35
|
+
if (displayName.toLocaleLowerCase().includes(label.toLocaleLowerCase()))
|
|
36
|
+
return displayName;
|
|
37
|
+
if (displayName.toLocaleLowerCase().startsWith(family)) {
|
|
38
|
+
return `${displayName.slice(0, family.length)} ${major}${minor ? `.${minor}` : ""}${displayName.slice(family.length)}`;
|
|
39
|
+
}
|
|
40
|
+
return `${displayName} · ${label}`;
|
|
41
|
+
}
|
|
27
42
|
export function mapClaudeModel(model, prefix) {
|
|
28
43
|
const efforts = model.supportsEffort ? (model.supportedEffortLevels ?? []) : [];
|
|
29
44
|
const serviceTiers = model.supportsFastMode
|
|
@@ -39,7 +54,7 @@ export function mapClaudeModel(model, prefix) {
|
|
|
39
54
|
upgrade: null,
|
|
40
55
|
upgradeInfo: null,
|
|
41
56
|
availabilityNux: null,
|
|
42
|
-
displayName: model
|
|
57
|
+
displayName: claudeModelDisplayName(model),
|
|
43
58
|
description: model.description,
|
|
44
59
|
hidden: false,
|
|
45
60
|
supportedReasoningEfforts: efforts.map((reasoningEffort) => ({
|
|
@@ -55,6 +70,10 @@ export function mapClaudeModel(model, prefix) {
|
|
|
55
70
|
isDefault: false,
|
|
56
71
|
};
|
|
57
72
|
}
|
|
73
|
+
export function mapClaudeModels(models, prefix) {
|
|
74
|
+
return models.filter((model) => model.value !== "default")
|
|
75
|
+
.map((model) => mapClaudeModel(model, prefix));
|
|
76
|
+
}
|
|
58
77
|
async function* idlePrompt(signal) {
|
|
59
78
|
if (signal.aborted)
|
|
60
79
|
return;
|
|
@@ -107,7 +126,7 @@ export class ClaudeModelCatalog {
|
|
|
107
126
|
]);
|
|
108
127
|
await sdkQuery.reinitialize();
|
|
109
128
|
await sdkQuery.interrupt();
|
|
110
|
-
const mapped = models
|
|
129
|
+
const mapped = mapClaudeModels(models, this.config.modelPrefix);
|
|
111
130
|
this.cache = {
|
|
112
131
|
key: this.cacheKey(),
|
|
113
132
|
expiresAt: Date.now() + this.config.modelCacheSeconds * 1_000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelCatalog.js","sourceRoot":"","sources":["../../src/claude/modelCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmD,MAAM,gCAAgC,CAAC;AAIxG,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"modelCatalog.js","sourceRoot":"","sources":["../../src/claude/modelCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface ClaudeResultInput {
|
|
|
10
10
|
readonly result?: string;
|
|
11
11
|
readonly errors?: readonly string[];
|
|
12
12
|
readonly terminal_reason?: string | null;
|
|
13
|
+
readonly api_error_status?: number | null;
|
|
13
14
|
}
|
|
14
15
|
export declare function classifyClaudeRuntimeError(message: string): CodexErrorInfo;
|
|
15
16
|
export declare function classifyClaudeResult(message: ClaudeResultInput, providerError?: string): ClaudeResultClassification;
|
|
@@ -30,6 +30,13 @@ function providerErrorInfo(providerError, message) {
|
|
|
30
30
|
return "badRequest";
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
|
+
function httpErrorInfo(status) {
|
|
34
|
+
if (status === 429)
|
|
35
|
+
return "usageLimitExceeded";
|
|
36
|
+
if (status === 529)
|
|
37
|
+
return "serverOverloaded";
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
33
40
|
export function classifyClaudeRuntimeError(message) {
|
|
34
41
|
if (/disconnect|stream.*closed|exited before|eof/i.test(message)) {
|
|
35
42
|
return { responseStreamDisconnected: { httpStatusCode: null } };
|
|
@@ -48,7 +55,9 @@ export function classifyClaudeResult(message, providerError) {
|
|
|
48
55
|
const interrupted = message.terminal_reason === "aborted_tools" || message.terminal_reason === "aborted_streaming" ||
|
|
49
56
|
errors.some((value) => value.toLocaleLowerCase().includes("interrupt") || value.toLocaleLowerCase().includes("abort"));
|
|
50
57
|
const error = errors[0];
|
|
51
|
-
const codexErrorInfo = interrupted
|
|
58
|
+
const codexErrorInfo = interrupted
|
|
59
|
+
? undefined
|
|
60
|
+
: providerErrorInfo(providerError, error) ?? httpErrorInfo(message.api_error_status);
|
|
52
61
|
return {
|
|
53
62
|
status: interrupted ? "interrupted" : "failed",
|
|
54
63
|
...(error ? { error } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resultClassifier.js","sourceRoot":"","sources":["../../src/claude/resultClassifier.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"resultClassifier.js","sourceRoot":"","sources":["../../src/claude/resultClassifier.ts"],"names":[],"mappings":"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"}
|
package/dist/claude/service.d.ts
CHANGED
|
@@ -78,6 +78,7 @@ export declare class ClaudeService {
|
|
|
78
78
|
private readonly transcripts;
|
|
79
79
|
private readonly threadAdminEffects;
|
|
80
80
|
private readonly availabilityProbe;
|
|
81
|
+
private readonly skillsChanged?;
|
|
81
82
|
private readonly ephemeralReleases;
|
|
82
83
|
private readonly ephemeralReleaseTimers;
|
|
83
84
|
private readonly removalRetries;
|
|
@@ -92,7 +93,7 @@ export declare class ClaudeService {
|
|
|
92
93
|
private closing;
|
|
93
94
|
private closePromise;
|
|
94
95
|
private standaloneStatusRead;
|
|
95
|
-
constructor(config: HybridConfig, hub: SubscriptionHub, logger: Logger, durableStore?: HybridStore, queryFactory?: ClaudeQueryFactory, modelCatalog?: ModelCatalog | undefined, metrics?: MetricsRegistry, transcripts?: TranscriptBrancher, threadAdminEffects?: ClaudeThreadAdminEffects, shellRunner?: ShellRunner, availabilityProbe?: ProviderAvailabilityProbe);
|
|
96
|
+
constructor(config: HybridConfig, hub: SubscriptionHub, logger: Logger, durableStore?: HybridStore, queryFactory?: ClaudeQueryFactory, modelCatalog?: ModelCatalog | undefined, metrics?: MetricsRegistry, transcripts?: TranscriptBrancher, threadAdminEffects?: ClaudeThreadAdminEffects, shellRunner?: ShellRunner, availabilityProbe?: ProviderAvailabilityProbe, skillsChanged?: ((cwd: string) => void) | undefined);
|
|
96
97
|
ownsThread(threadId: string): boolean;
|
|
97
98
|
ready(): Promise<void>;
|
|
98
99
|
ownsModel(modelId: string): boolean;
|
package/dist/claude/service.js
CHANGED
|
@@ -22,6 +22,7 @@ import { ClaudeSessionRegistry } from "./sessionRegistry.js";
|
|
|
22
22
|
import { validateResponseItems } from "./responseItemValidation.js";
|
|
23
23
|
import { providerUnavailableMessage, } from "../runtime/providerAvailability.js";
|
|
24
24
|
import { isCCodexStateCommand, stateModelName, } from "../state/stateCommand.js";
|
|
25
|
+
import { syncedCollaborationMode, threadSettings } from "./threadSettings.js";
|
|
25
26
|
async function* idleUsagePrompt(signal) {
|
|
26
27
|
if (signal.aborted)
|
|
27
28
|
return;
|
|
@@ -46,13 +47,6 @@ function existingThreadCwd(value) {
|
|
|
46
47
|
}
|
|
47
48
|
throw invalidParams(`Claude thread cwd '${cwd}' does not exist or is not a directory.`);
|
|
48
49
|
}
|
|
49
|
-
function syncedCollaborationMode(value, model, effort) {
|
|
50
|
-
const mode = (value ?? {
|
|
51
|
-
mode: "default",
|
|
52
|
-
settings: { model, reasoning_effort: effort, developer_instructions: null },
|
|
53
|
-
});
|
|
54
|
-
return { ...mode, settings: { ...mode.settings, model, reasoning_effort: effort } };
|
|
55
|
-
}
|
|
56
50
|
function turnReasoningEffort(params) {
|
|
57
51
|
return params.collaborationMode?.settings.reasoning_effort ?? params.effort ?? undefined;
|
|
58
52
|
}
|
|
@@ -78,36 +72,9 @@ function permissionProfileSandboxPolicy(profile, cwd) {
|
|
|
78
72
|
return sandboxPolicy("danger-full-access", cwd);
|
|
79
73
|
throw invalidParams(`Claude threads do not support Codex permission profile '${profile}'.`);
|
|
80
74
|
}
|
|
81
|
-
function activePermissionProfile(policy) {
|
|
82
|
-
if (policy.type === "readOnly")
|
|
83
|
-
return { id: ":read-only", extends: null };
|
|
84
|
-
if (policy.type === "workspaceWrite")
|
|
85
|
-
return { id: ":workspace", extends: null };
|
|
86
|
-
if (policy.type === "dangerFullAccess")
|
|
87
|
-
return { id: ":danger-full-access", extends: null };
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
75
|
function approvalsReviewer(value, fallback = "user") {
|
|
91
76
|
return value ?? fallback;
|
|
92
77
|
}
|
|
93
|
-
function threadSettings(record) {
|
|
94
|
-
const sandboxPolicy = record.sandboxPolicy;
|
|
95
|
-
return {
|
|
96
|
-
cwd: record.thread.cwd,
|
|
97
|
-
approvalPolicy: record.approvalPolicy,
|
|
98
|
-
approvalsReviewer: record.approvalsReviewer,
|
|
99
|
-
sandboxPolicy,
|
|
100
|
-
activePermissionProfile: activePermissionProfile(sandboxPolicy),
|
|
101
|
-
model: record.modelPickerId,
|
|
102
|
-
modelProvider: "claude",
|
|
103
|
-
serviceTier: record.serviceTier,
|
|
104
|
-
effort: record.reasoningEffort,
|
|
105
|
-
summary: record.reasoningSummary,
|
|
106
|
-
collaborationMode: syncedCollaborationMode(record.collaborationMode, record.modelPickerId, record.reasoningEffort),
|
|
107
|
-
multiAgentMode: "explicitRequestOnly",
|
|
108
|
-
personality: record.personality,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
78
|
function threadResponse(record, includeTurns) {
|
|
112
79
|
const { sandboxPolicy: sandbox, effort: reasoningEffort, summary: _summary, collaborationMode: _collaborationMode, personality: _personality, ...settings } = threadSettings(record);
|
|
113
80
|
return {
|
|
@@ -201,6 +168,7 @@ export class ClaudeService {
|
|
|
201
168
|
transcripts;
|
|
202
169
|
threadAdminEffects;
|
|
203
170
|
availabilityProbe;
|
|
171
|
+
skillsChanged;
|
|
204
172
|
ephemeralReleases = new Map();
|
|
205
173
|
ephemeralReleaseTimers = new Map();
|
|
206
174
|
removalRetries = new Map();
|
|
@@ -218,7 +186,7 @@ export class ClaudeService {
|
|
|
218
186
|
constructor(config, hub, logger, durableStore = new SqliteHybridStore(join(config.dataDir, "state.sqlite")), queryFactory = createClaudeQuery, modelCatalog, metrics = new MetricsRegistry(), transcripts = new SdkTranscriptBrancher(), threadAdminEffects = sdkThreadAdminEffects, shellRunner = new ShellRunner(), availabilityProbe = async () => ({
|
|
219
187
|
provider: "claude",
|
|
220
188
|
state: "ready",
|
|
221
|
-
})) {
|
|
189
|
+
}), skillsChanged) {
|
|
222
190
|
this.config = config;
|
|
223
191
|
this.hub = hub;
|
|
224
192
|
this.logger = logger;
|
|
@@ -228,6 +196,7 @@ export class ClaudeService {
|
|
|
228
196
|
this.transcripts = transcripts;
|
|
229
197
|
this.threadAdminEffects = threadAdminEffects;
|
|
230
198
|
this.availabilityProbe = availabilityProbe;
|
|
199
|
+
this.skillsChanged = skillsChanged;
|
|
231
200
|
this.store = new LayeredHybridStore(durableStore);
|
|
232
201
|
const sessionRepository = new ClaudeSessionRepository(this.store);
|
|
233
202
|
this.sessionOutput = new ClaudeOutputAdapter(hub);
|
|
@@ -239,6 +208,7 @@ export class ClaudeService {
|
|
|
239
208
|
transcripts: this.transcripts,
|
|
240
209
|
rateLimits: this.rateLimits,
|
|
241
210
|
invalidateModelCatalog: () => this.modelCatalog?.invalidate?.(),
|
|
211
|
+
...(this.skillsChanged ? { skillsChanged: this.skillsChanged } : {}),
|
|
242
212
|
isClosing: () => this.closing,
|
|
243
213
|
persistUserSideSessions: this.config.features?.sideChatPromotion ?? true,
|
|
244
214
|
interactiveQuestions: this.config.features?.interactiveQuestions ?? true,
|