@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.
Files changed (52) hide show
  1. package/README.md +5 -2
  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 +2 -0
  6. package/dist/claude/modelCatalog.js +22 -3
  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/config/config.d.ts +1 -0
  34. package/dist/config/config.js +4 -1
  35. package/dist/config/config.js.map +1 -1
  36. package/dist/gateway/clientConnection.d.ts +2 -1
  37. package/dist/gateway/clientConnection.js +12 -1
  38. package/dist/gateway/clientConnection.js.map +1 -1
  39. package/dist/gateway/server.js +10 -3
  40. package/dist/gateway/server.js.map +1 -1
  41. package/dist/gateway/skillList.d.ts +9 -0
  42. package/dist/gateway/skillList.js +24 -0
  43. package/dist/gateway/skillList.js.map +1 -0
  44. package/dist/gateway/subscriptions.d.ts +1 -0
  45. package/dist/gateway/subscriptions.js +4 -0
  46. package/dist/gateway/subscriptions.js.map +1 -1
  47. package/dist/handoff/service.js +97 -37
  48. package/dist/handoff/service.js.map +1 -1
  49. package/examples/config.toml +1 -0
  50. package/legal/LICENSES.md +1 -1
  51. package/legal/THIRD_PARTY_NOTICES.md +9 -9
  52. 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.6` |
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.215` / `2.1.215` |
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.7",
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.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":"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"}
@@ -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.displayName,
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.map((model) => mapClaudeModel(model, this.config.modelPrefix));
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":"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"}
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,