@bitkyc08/opencodex 2.7.42 → 2.7.43

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 (143) hide show
  1. package/README.md +8 -1
  2. package/bin/ocx.mjs +13 -14
  3. package/gui/dist/assets/index-Czw-jpTU.css +1 -0
  4. package/gui/dist/assets/index-cmds12BG.js +67 -0
  5. package/gui/dist/index.html +2 -2
  6. package/package.json +1 -1
  7. package/src/AGENTS.md +28 -0
  8. package/src/adapters/anthropic.ts +15 -6
  9. package/src/adapters/cursor/native-exec-shell.ts +18 -6
  10. package/src/adapters/cursor/protobuf-events.ts +24 -2
  11. package/src/adapters/cursor/protobuf-request.ts +1 -2
  12. package/src/adapters/cursor/tool-definitions.ts +68 -29
  13. package/src/adapters/google-wire-compiler.ts +4 -0
  14. package/src/adapters/google.ts +128 -2
  15. package/src/adapters/identity.ts +12 -2
  16. package/src/adapters/kiro.ts +49 -6
  17. package/src/adapters/mimo-free.ts +2 -0
  18. package/src/adapters/openai-responses.ts +246 -59
  19. package/src/claude/agents-inject.ts +5 -0
  20. package/src/claude/inbound.ts +26 -9
  21. package/src/cli/account-auth.ts +1 -1
  22. package/src/cli/agent-driven.ts +37 -0
  23. package/src/cli/claude.ts +3 -3
  24. package/src/cli/doctor.ts +23 -18
  25. package/src/cli/help.ts +42 -6
  26. package/src/cli/index.ts +88 -19
  27. package/src/cli/interactive-confirm.ts +129 -0
  28. package/src/cli/opencode.ts +701 -0
  29. package/src/cli/provider-runtime.ts +3 -0
  30. package/src/cli/provider.ts +31 -10
  31. package/src/cli/star-prompt.ts +55 -16
  32. package/src/cli/status.ts +47 -13
  33. package/src/codex/account-id.ts +34 -0
  34. package/src/codex/account-lifecycle.ts +4 -1
  35. package/src/codex/account-namespace-match.ts +63 -0
  36. package/src/codex/account-namespaces.ts +149 -0
  37. package/src/codex/account-pause.ts +20 -0
  38. package/src/codex/account-usability.ts +6 -1
  39. package/src/codex/app-server-processes.ts +511 -0
  40. package/src/codex/auth-api.ts +293 -34
  41. package/src/codex/auth-collision.ts +2 -1
  42. package/src/codex/auth-context.ts +60 -17
  43. package/src/codex/catalog/parsing.ts +16 -1
  44. package/src/codex/catalog/provider-fetch.ts +48 -12
  45. package/src/codex/catalog/sync.ts +18 -3
  46. package/src/codex/catalog.ts +1 -1
  47. package/src/codex/history-provider.ts +145 -1
  48. package/src/codex/inject.ts +114 -14
  49. package/src/codex/main-account.ts +2 -8
  50. package/src/codex/pool-rotation.ts +186 -0
  51. package/src/codex/quota.ts +15 -0
  52. package/src/codex/routing.ts +695 -106
  53. package/src/codex/shim.ts +4 -1
  54. package/src/codex/subagent-defaults.ts +550 -0
  55. package/src/codex/subagent-model-fallback.ts +2 -0
  56. package/src/codex/sync.ts +3 -0
  57. package/src/config.ts +566 -25
  58. package/src/images/artifacts.ts +516 -0
  59. package/src/images/fulfill-video.ts +163 -0
  60. package/src/images/fulfill.ts +111 -0
  61. package/src/images/index.ts +4 -0
  62. package/src/images/loop.ts +789 -0
  63. package/src/images/plan.ts +133 -0
  64. package/src/images/synthetic-tool.ts +133 -0
  65. package/src/images/types.ts +41 -0
  66. package/src/images/xai-client.ts +141 -0
  67. package/src/images/xai-video-client.ts +163 -0
  68. package/src/lib/admin-secrets.ts +25 -0
  69. package/src/lib/config-ownership.ts +327 -0
  70. package/src/lib/crash-guard.ts +2 -0
  71. package/src/lib/destination-policy.ts +122 -4
  72. package/src/lib/pinned-http.ts +151 -0
  73. package/src/lib/process-control.ts +2 -2
  74. package/src/lib/provider-outbound.ts +164 -0
  75. package/src/lib/provider-url.ts +14 -0
  76. package/src/lib/proxy-env.ts +18 -0
  77. package/src/lib/windows-elevation.ts +81 -3
  78. package/src/lib/windows-secret-acl.ts +189 -12
  79. package/src/lib/winsw.ts +2 -0
  80. package/src/oauth/anthropic-routing.ts +570 -0
  81. package/src/oauth/health.ts +6 -0
  82. package/src/oauth/index.ts +283 -72
  83. package/src/oauth/key-providers.ts +17 -6
  84. package/src/oauth/kimi.ts +2 -0
  85. package/src/oauth/kiro-credentials.ts +322 -10
  86. package/src/oauth/kiro.ts +423 -43
  87. package/src/oauth/login-cli.ts +32 -5
  88. package/src/oauth/store.ts +54 -4
  89. package/src/oauth/types.ts +11 -0
  90. package/src/providers/alibaba-region-migration.ts +16 -3
  91. package/src/providers/antigravity-models.ts +3 -0
  92. package/src/providers/api-keys.ts +13 -6
  93. package/src/providers/derive.ts +6 -0
  94. package/src/providers/key-failover.ts +24 -4
  95. package/src/providers/quota.ts +233 -29
  96. package/src/providers/registry.ts +11 -3
  97. package/src/responses/parser.ts +11 -0
  98. package/src/responses/state.ts +22 -8
  99. package/src/responses/tool-groups.ts +19 -0
  100. package/src/router.ts +14 -4
  101. package/src/server/auth-cors.ts +110 -22
  102. package/src/server/claude-messages.ts +8 -1
  103. package/src/server/gui-static.ts +30 -6
  104. package/src/server/images.ts +303 -9
  105. package/src/server/index.ts +77 -9
  106. package/src/server/lifecycle.ts +25 -1
  107. package/src/server/management/agent-settings-routes.ts +28 -4
  108. package/src/server/management/combo-routes.ts +7 -0
  109. package/src/server/management/config-routes.ts +5 -2
  110. package/src/server/management/logs-usage-routes.ts +167 -3
  111. package/src/server/management/oauth-account-routes.ts +163 -17
  112. package/src/server/management/provider-routes.ts +35 -7
  113. package/src/server/management/system-restart.ts +172 -0
  114. package/src/server/management/system-routes.ts +33 -10
  115. package/src/server/management-api.ts +2 -2
  116. package/src/server/management-auth.ts +216 -0
  117. package/src/server/proxy-liveness.ts +14 -3
  118. package/src/server/responses/compact.ts +21 -13
  119. package/src/server/responses/core.ts +583 -152
  120. package/src/server/responses-image-gen-repair.ts +118 -0
  121. package/src/server/responses-item-id-repair.ts +10 -85
  122. package/src/server/sse-payload-rewrite.ts +116 -0
  123. package/src/server/system-env.ts +28 -10
  124. package/src/service.ts +49 -2
  125. package/src/storage/cleanup-job.ts +57 -0
  126. package/src/storage/cleanup.ts +1504 -28
  127. package/src/storage/policy-job.ts +366 -0
  128. package/src/storage/policy-scheduler.ts +40 -0
  129. package/src/storage/policy-worker.ts +53 -0
  130. package/src/storage/policy.ts +522 -0
  131. package/src/storage/restore-job.ts +242 -0
  132. package/src/storage/restore-worker.ts +52 -0
  133. package/src/storage/storage-mutation-coordinator.ts +109 -0
  134. package/src/tray/windows.ts +2 -0
  135. package/src/types.ts +96 -1
  136. package/src/update/index.ts +36 -18
  137. package/src/update/job.ts +103 -12
  138. package/src/update/npm-invocation.d.mts +23 -0
  139. package/src/update/npm-invocation.mjs +94 -0
  140. package/src/usage/debug.ts +2 -0
  141. package/src/usage/log.ts +4 -0
  142. package/gui/dist/assets/index-Bl_VBGoI.js +0 -65
  143. package/gui/dist/assets/index-DfVGuN88.css +0 -1
@@ -0,0 +1,111 @@
1
+ import { existsSync } from "node:fs";
2
+ import { pathToFileURL } from "node:url";
3
+ import type { ImageBridgePlan, ImageCallResult } from "./types";
4
+ import { callXaiImages } from "./xai-client";
5
+ import {
6
+ materializeInlineImage,
7
+ downloadImageToArtifact,
8
+ pruneArtifacts,
9
+ type ImageBudget,
10
+ } from "./artifacts";
11
+
12
+ /** Serialize write→prune→retain across concurrent fulfillments sharing artifacts/. */
13
+ let retentionTail: Promise<void> = Promise.resolve();
14
+
15
+ async function retainAfterBatch(paths: string[], keepCount?: number): Promise<string[]> {
16
+ const run = retentionTail.then(() => {
17
+ pruneArtifacts(keepCount);
18
+ return paths.filter((p) => existsSync(p));
19
+ });
20
+ retentionTail = run.then(
21
+ () => undefined,
22
+ () => undefined,
23
+ );
24
+ return run;
25
+ }
26
+
27
+ /**
28
+ * Fulfill ONE image-generation tool call end-to-end: parse args, call xAI, materialize the returned
29
+ * images to disk, and return a structured result. NEVER throws — all errors become `{ ok: false }`
30
+ * so the caller can inject the error as a tool result and let the model respond gracefully.
31
+ */
32
+ export async function fulfillImageCall(
33
+ call: { id: string; name: string; arguments: string },
34
+ plan: ImageBridgePlan,
35
+ budget: ImageBudget,
36
+ signal?: AbortSignal,
37
+ ): Promise<ImageCallResult> {
38
+ let args: unknown;
39
+ try {
40
+ args = JSON.parse(call.arguments || "{}");
41
+ } catch {
42
+ return { ok: false, model: plan.model, prompt: "", files: [], count: 0, error: "invalid arguments JSON" };
43
+ }
44
+ if (typeof args !== "object" || args === null) {
45
+ return { ok: false, model: plan.model, prompt: "", files: [], count: 0, error: "invalid arguments JSON" };
46
+ }
47
+ const obj = args as Record<string, unknown>;
48
+
49
+ const prompt =
50
+ typeof obj.prompt === "string" ? obj.prompt : typeof obj.input === "string" ? obj.input : "";
51
+ if (!prompt) {
52
+ return { ok: false, model: plan.model, prompt: "", files: [], count: 0, error: "missing prompt" };
53
+ }
54
+
55
+ const n = typeof obj.n === "number" ? Math.max(1, Math.min(4, Math.floor(obj.n))) : 1;
56
+ const imageUrl =
57
+ typeof obj.image_url === "string" ? obj.image_url : typeof obj.image === "string" ? obj.image : undefined;
58
+ const size = typeof obj.size === "string" ? obj.size : plan.defaultSize;
59
+ const quality = typeof obj.quality === "string" ? obj.quality : plan.defaultQuality;
60
+
61
+ let result;
62
+ try {
63
+ result = await callXaiImages(
64
+ { prompt, model: plan.model, n, imageUrl, size, quality },
65
+ plan.auth,
66
+ signal,
67
+ plan.timeoutMs,
68
+ );
69
+ } catch (e) {
70
+ const error = e instanceof Error ? e.message : String(e);
71
+ return { ok: false, model: plan.model, prompt, files: [], count: 0, error };
72
+ }
73
+
74
+ const files: string[] = [];
75
+ for (const img of result.images ?? []) {
76
+ try {
77
+ if (img.b64_json) {
78
+ files.push(await materializeInlineImage(img.b64_json, budget));
79
+ } else if (img.url) {
80
+ files.push(await downloadImageToArtifact(img.url, budget, signal));
81
+ }
82
+ } catch {
83
+ // Keep warnings URL-free — error messages may embed provider CDN URLs.
84
+ // Partial success is OK — silently skip this image and continue.
85
+ console.warn("[images] failed to materialize image");
86
+ }
87
+ }
88
+
89
+ // Prune only after the full batch is on disk so a tight keepCount cannot delete
90
+ // an earlier image from this same call before we return its path. Concurrent
91
+ // fulfillments share one retention chain so they cannot prune each other's
92
+ // just-written paths mid-filter.
93
+ const retained = await retainAfterBatch(files, plan.artifactsKeepCount);
94
+
95
+ if (retained.length === 0) {
96
+ return { ok: false, model: plan.model, prompt, files: [], count: 0, error: "image generation returned no usable images" };
97
+ }
98
+
99
+ const primary = retained[0]!;
100
+ return {
101
+ ok: true,
102
+ model: plan.model,
103
+ prompt,
104
+ path: primary,
105
+ files: retained,
106
+ count: retained.length,
107
+ // Keep path/files as native FS paths; Markdown needs a file: URI so Windows
108
+ // backslashes are not treated as escapes by renderers.
109
+ markdown: `![image](${pathToFileURL(primary).href})`,
110
+ };
111
+ }
@@ -0,0 +1,4 @@
1
+ export { planImageBridge, planVideoBridge, findXaiProvider, resolveXaiImageApiKey } from "./plan";
2
+ export { runWithImageBridge, clampImageMaxRounds, DEFAULT_MAX_ROUNDS, MAX_ROUNDS_HARD_LIMIT } from "./loop";
3
+ export type { ImageBridgePlan, ImageCallResult, VideoBridgePlan, VideoCallResult } from "./types";
4
+ export { buildImageTool, buildVideoTool, extractHostedImageGeneration, IMAGE_GEN_TOOL_NAME, VIDEO_GEN_TOOL_NAME, isImageGenName, isVideoGenName } from "./synthetic-tool";