@gkorepanov/ccodex 0.4.6 → 0.4.8

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 (87) hide show
  1. package/README.md +35 -4
  2. package/config/compatibility.json +3 -3
  3. package/dist/claude/inputMapper.js +13 -3
  4. package/dist/claude/inputMapper.js.map +1 -1
  5. package/dist/claude/modelCatalog.d.ts +1 -0
  6. package/dist/claude/modelCatalog.js +18 -2
  7. package/dist/claude/modelCatalog.js.map +1 -1
  8. package/dist/claude/resultClassifier.d.ts +1 -0
  9. package/dist/claude/resultClassifier.js +10 -1
  10. package/dist/claude/resultClassifier.js.map +1 -1
  11. package/dist/claude/service.d.ts +2 -1
  12. package/dist/claude/service.js +5 -35
  13. package/dist/claude/service.js.map +1 -1
  14. package/dist/claude/session/commands.d.ts +8 -0
  15. package/dist/claude/session/providerFacts.d.ts +2 -0
  16. package/dist/claude/session/providerFacts.js +27 -1
  17. package/dist/claude/session/providerFacts.js.map +1 -1
  18. package/dist/claude/session/session.d.ts +2 -0
  19. package/dist/claude/session/session.js +39 -5
  20. package/dist/claude/session/session.js.map +1 -1
  21. package/dist/claude/skillCatalog.d.ts +18 -0
  22. package/dist/claude/skillCatalog.js +125 -0
  23. package/dist/claude/skillCatalog.js.map +1 -0
  24. package/dist/claude/skillCodec.d.ts +4 -0
  25. package/dist/claude/skillCodec.js +10 -0
  26. package/dist/claude/skillCodec.js.map +1 -0
  27. package/dist/claude/threadSettings.d.ts +4 -0
  28. package/dist/claude/threadSettings.js +35 -0
  29. package/dist/claude/threadSettings.js.map +1 -0
  30. package/dist/claude/toolMapper.d.ts +2 -2
  31. package/dist/claude/toolMapper.js +13 -5
  32. package/dist/claude/toolMapper.js.map +1 -1
  33. package/dist/cli/args.d.ts +3 -0
  34. package/dist/cli/args.js +4 -1
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/delegate.js +1 -0
  37. package/dist/cli/delegate.js.map +1 -1
  38. package/dist/cli/main.js +21 -22
  39. package/dist/cli/main.js.map +1 -1
  40. package/dist/config/config.d.ts +1 -0
  41. package/dist/config/config.js +4 -1
  42. package/dist/config/config.js.map +1 -1
  43. package/dist/daemon/daemon.js +5 -4
  44. package/dist/daemon/daemon.js.map +1 -1
  45. package/dist/daemon/supervisor.d.ts +1 -0
  46. package/dist/daemon/supervisor.js +13 -3
  47. package/dist/daemon/supervisor.js.map +1 -1
  48. package/dist/desktop/launchAgent.d.ts +26 -0
  49. package/dist/desktop/launchAgent.js +122 -0
  50. package/dist/desktop/launchAgent.js.map +1 -0
  51. package/dist/desktop/stdioFrontend.d.ts +9 -0
  52. package/dist/desktop/stdioFrontend.js +305 -0
  53. package/dist/desktop/stdioFrontend.js.map +1 -0
  54. package/dist/gateway/clientConnection.d.ts +2 -1
  55. package/dist/gateway/clientConnection.js +13 -2
  56. package/dist/gateway/clientConnection.js.map +1 -1
  57. package/dist/gateway/server.js +10 -3
  58. package/dist/gateway/server.js.map +1 -1
  59. package/dist/gateway/skillList.d.ts +9 -0
  60. package/dist/gateway/skillList.js +24 -0
  61. package/dist/gateway/skillList.js.map +1 -0
  62. package/dist/gateway/subscriptions.d.ts +1 -0
  63. package/dist/gateway/subscriptions.js +4 -0
  64. package/dist/gateway/subscriptions.js.map +1 -1
  65. package/dist/handoff/service.d.ts +1 -1
  66. package/dist/handoff/service.js +109 -47
  67. package/dist/handoff/service.js.map +1 -1
  68. package/dist/handoff/store.d.ts +1 -0
  69. package/dist/handoff/store.js +13 -1
  70. package/dist/handoff/store.js.map +1 -1
  71. package/dist/management/doctor.js +31 -2
  72. package/dist/management/doctor.js.map +1 -1
  73. package/dist/management/lifecycle.js +80 -26
  74. package/dist/management/lifecycle.js.map +1 -1
  75. package/dist/management/setup.d.ts +3 -0
  76. package/dist/management/setup.js +75 -94
  77. package/dist/management/setup.js.map +1 -1
  78. package/dist/management/shellRouting.d.ts +14 -0
  79. package/dist/management/shellRouting.js +64 -0
  80. package/dist/management/shellRouting.js.map +1 -0
  81. package/dist/management/shims.d.ts +16 -3
  82. package/dist/management/shims.js +67 -12
  83. package/dist/management/shims.js.map +1 -1
  84. package/examples/config.toml +3 -0
  85. package/legal/LICENSES.md +1 -1
  86. package/legal/THIRD_PARTY_NOTICES.md +9 -9
  87. 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.
@@ -117,16 +119,44 @@ commands to your global Codex installation:
117
119
 
118
120
  Setup is deliberately **fail-closed and transactional**: it validates the platform,
119
121
  exact runtimes, and provider availability before atomically activating a new version.
120
- A failed install or update leaves your previous version and daemon running, and a
121
- failed readiness check after switching rolls back automatically.
122
+ A failed install or update leaves your previous version running. Setup never interrupts
123
+ an active App session; the new version takes over on the next reconnect.
124
+
125
+ ### Local Codex App (same-Mac)
126
+
127
+ Over SSH the App resolves `codex` through your `PATH`, so the shim engages. The **local
128
+ Codex App**, however, launches its bundled `codex app-server` directly and ignores
129
+ `PATH`, so ccodex never sees it and no `claude:*` models appear. On macOS `ccodex setup`
130
+ closes that gap without ever touching the signed `.app` bundle (so Sparkle auto-updates
131
+ keep working):
132
+
133
+ - `ccodex setup` points the App at ccodex automatically via
134
+ `CODEX_CLI_PATH=~/.ccodex/bin/codex` — it runs `launchctl setenv` for the live
135
+ session, installs a one-shot login LaunchAgent (`dev.ccodex.codex-cli-path`) so the GUI
136
+ session re-publishes it on every login/reboot, and exports it in the managed shell
137
+ blocks for terminal-launched instances. The same managed `codex` entrypoint is used
138
+ locally and over SSH. **Fully quit the Codex App (`Cmd+Q`) and relaunch it**
139
+ (or log out and back in) so it picks up the variable.
140
+ - A bare `app-server` launch runs a thin **stdio frontend**: it forwards the App's
141
+ newline-delimited JSON to the existing app-server-control socket, lazily starts the
142
+ gateway when cold, and reconnects after gateway restarts. Provider state and lifecycle
143
+ remain exclusively inside the existing gateway.
144
+ - There is **no extra macOS gateway service**. The same PID-managed gateway used over SSH
145
+ starts lazily when the App connects and stops through the existing daemon contract.
146
+ Setup/update/rollback only switch files and ask you to reconnect; they never restart a
147
+ live gateway underneath a task.
148
+ - `ccodex uninstall` removes the login hook, restores any previous `CODEX_CLI_PATH`,
149
+ strips the managed shell export, and stops only CCodex's own PID-managed gateway.
150
+ Modified files are preserved. `ccodex doctor --deep` reports the entrypoint and login
151
+ hook separately from gateway health.
122
152
 
123
153
  ## Technical details
124
154
 
125
155
  | | |
126
156
  |---|---|
127
- | **CCodex** | `0.4.0` |
157
+ | **CCodex** | `0.4.8` |
128
158
  | **Embedded Codex CLI** | `0.144.6` (pinned; a newer global Codex never replaces it) |
129
- | **Claude Agent SDK / Claude Code** | `0.3.215` / `2.1.215` |
159
+ | **Claude Agent SDK / Claude Code** | `0.3.219` / `2.1.219` |
130
160
  | **Runtime** | Node.js `>=22.13 <27`, npm `>=10` |
131
161
  | **Platforms** | macOS 11+ (arm64) · Linux arm64 & x64, glibc ≥2.31 (Ubuntu 22.04+, Debian 11+, Fedora/RHEL equivalents). Alpine/musl not supported |
132
162
  | **Shells** | Bash, Zsh, Fish |
@@ -146,6 +176,7 @@ Return only the title.
146
176
  [features]
147
177
  status_command = false # forward /ccstatus and /ccstate to the provider as plain messages
148
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
149
180
  ```
150
181
 
151
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.6",
3
+ "productVersion": "0.4.8",
4
4
  "node": ">=22.13 <27",
5
5
  "codexCli": "0.144.6",
6
6
  "codexGitRevision": "1e66aaa95b5ab39d3ef3057cd50bdecd576a8356",
7
- "claudeAgentSdk": "0.3.215",
8
- "claudeCode": "2.1.215",
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
- content.push({ type: "text", text: item.text });
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: { role: "user", content },
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":"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"}
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,6 +4,7 @@ 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;
8
9
  export declare class ClaudeModelCatalog {
9
10
  private readonly config;
@@ -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,22 @@ function defaultEffort(levels) {
24
24
  return "medium";
25
25
  return levels[0] ?? "medium";
26
26
  }
27
+ export function claudeModelDisplayName(model) {
28
+ const resolved = model.resolvedModel && normalizeClaudeModelIdentifier(model.resolvedModel);
29
+ const version = resolved && /^claude-([a-z][a-z0-9]*?)-(\d+)(?:-(\d{1,2})(?=-|$))?/u.exec(resolved);
30
+ if (!version)
31
+ return model.displayName;
32
+ const [, family, major, minor] = version;
33
+ const label = `${family[0].toUpperCase()}${family.slice(1)} ${major}${minor ? `.${minor}` : ""}`;
34
+ if (model.displayName.toLocaleLowerCase().includes(label.toLocaleLowerCase()))
35
+ return model.displayName;
36
+ if (model.displayName.toLocaleLowerCase().startsWith(family)) {
37
+ return `${model.displayName.slice(0, family.length)} ${major}${minor ? `.${minor}` : ""}${model.displayName.slice(family.length)}`;
38
+ }
39
+ return model.displayName.startsWith("Default")
40
+ ? `Default (recommended · ${label})`
41
+ : `${model.displayName} · ${label}`;
42
+ }
27
43
  export function mapClaudeModel(model, prefix) {
28
44
  const efforts = model.supportsEffort ? (model.supportedEffortLevels ?? []) : [];
29
45
  const serviceTiers = model.supportsFastMode
@@ -39,7 +55,7 @@ export function mapClaudeModel(model, prefix) {
39
55
  upgrade: null,
40
56
  upgradeInfo: null,
41
57
  availabilityNux: null,
42
- displayName: model.displayName,
58
+ displayName: claudeModelDisplayName(model),
43
59
  description: model.description,
44
60
  hidden: false,
45
61
  supportedReasoningEfforts: efforts.map((reasoningEffort) => ({
@@ -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;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,kBAAkB,GAA2B;IACjD,GAAG,EAAE,uCAAuC;IAC5C,MAAM,EAAE,4BAA4B;IACpC,IAAI,EAAE,kCAAkC;IACxC,KAAK,EAAE,8BAA8B;IACrC,GAAG,EAAE,qCAAqC;CAC3C,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAEhI,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC9G,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAQ,KAAiC,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;IACtH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB;IAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,MAAc;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB;QACzC,CAAC,CAAC;YACE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4BAA4B,EAAE;YAC7E,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE;SAC/D;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IAClD,OAAO;QACL,EAAE;QACF,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK;QACb,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAC3D,eAAe;YACf,WAAW,EAAE,kBAAkB,CAAC,eAAe,CAAC,IAAI,GAAG,eAAe,oBAAoB;SAC3F,CAAC,CAAC;QACH,sBAAsB,EAAE,aAAa,CAAC,OAAO,CAAC;QAC9C,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QAClC,mBAAmB,EAAE,IAAI;QACzB,oBAAoB,EAAE,EAAE;QACxB,YAAY;QACZ,kBAAkB,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QAC9D,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,MAAmB;IAC5C,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO;IAC3B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,OAAO,kBAAkB;IAKV;IACA;IACA;IANX,KAAK,CAA6F;IAClG,OAAO,CAA+B;IAE9C,YACmB,MAAoB,EACpB,MAAc,EACd,UAA2B,IAAI,eAAe,EAAE;QAFhD,WAAM,GAAN,MAAM,CAAc;QACpB,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAyC;IAChE,CAAC;IAEG,KAAK,CAAC,IAAI;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACxG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG;YAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACpD,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE;gBACP,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gBACpD,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,KAAK;gBACtB,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;gBAC5C,GAAG,EAAE,iBAAiB,EAAE;gBACxB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACnF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC1E,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAC7E;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,KAAK;gBAC7D,MAAM,EAAE,MAAM;aACf,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC/F,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QACxH,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,yBAAyB;YAC5E,wBAAwB,EAAE,yBAAyB;SACpD,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI,EAAE,WAAW;SACtF,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;CACF;AACD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,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 ? undefined : providerErrorInfo(providerError, error);
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":"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"}
1
+ {"version":3,"file":"resultClassifier.js","sourceRoot":"","sources":["../../src/claude/resultClassifier.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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,