@gkorepanov/ccodex 0.4.13 → 0.4.15

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 (73) hide show
  1. package/README.md +1 -1
  2. package/config/compatibility.json +3 -3
  3. package/dist/claude/service.d.ts +1 -0
  4. package/dist/claude/service.js +102 -22
  5. package/dist/claude/service.js.map +1 -1
  6. package/dist/claude/session/commands.d.ts +2 -0
  7. package/dist/claude/session/providerRuntimeFactory.d.ts +1 -0
  8. package/dist/claude/session/providerRuntimeFactory.js +5 -0
  9. package/dist/claude/session/providerRuntimeFactory.js.map +1 -1
  10. package/dist/claude/session/session.d.ts +2 -0
  11. package/dist/claude/session/session.js +51 -12
  12. package/dist/claude/session/session.js.map +1 -1
  13. package/dist/claude/streamingFilePreview.d.ts +16 -0
  14. package/dist/claude/streamingFilePreview.js +206 -0
  15. package/dist/claude/streamingFilePreview.js.map +1 -0
  16. package/dist/claude/toolMapper.d.ts +1 -0
  17. package/dist/claude/toolMapper.js +2 -2
  18. package/dist/claude/toolMapper.js.map +1 -1
  19. package/dist/codex/generated/ClientRequest.d.ts +5 -0
  20. package/dist/codex/generated/PathUri.d.ts +3 -2
  21. package/dist/codex/generated/PlanType.d.ts +1 -1
  22. package/dist/codex/generated/ResponseItemRuntimeSchema.js +1 -1
  23. package/dist/codex/generated/v2/AppMetadata.d.ts +0 -1
  24. package/dist/codex/generated/v2/AppToolSummary.d.ts +3 -0
  25. package/dist/codex/generated/v2/BrowserUseRequirements.d.ts +3 -0
  26. package/dist/codex/generated/v2/BrowserUseRequirements.js +3 -0
  27. package/dist/codex/generated/v2/BrowserUseRequirements.js.map +1 -0
  28. package/dist/codex/generated/v2/ConfigBatchWriteParams.d.ts +3 -1
  29. package/dist/codex/generated/v2/ConfigRequirements.d.ts +11 -0
  30. package/dist/codex/generated/v2/ExternalAgentConfigDetectParams.d.ts +8 -0
  31. package/dist/codex/generated/v2/ExternalAgentConfigImportHistory.d.ts +1 -0
  32. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.d.ts +11 -0
  33. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.js +3 -0
  34. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordParams.js.map +1 -0
  35. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordResponse.d.ts +3 -0
  36. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordResponse.js +3 -0
  37. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoryRecordResponse.js.map +1 -0
  38. package/dist/codex/generated/v2/ExternalAgentConfigImportParams.d.ts +5 -0
  39. package/dist/codex/generated/v2/FeedbackRequirements.d.ts +3 -0
  40. package/dist/codex/generated/v2/FeedbackRequirements.js +3 -0
  41. package/dist/codex/generated/v2/FeedbackRequirements.js.map +1 -0
  42. package/dist/codex/generated/v2/PluginListParams.d.ts +4 -0
  43. package/dist/codex/generated/v2/PluginShareContext.d.ts +1 -0
  44. package/dist/codex/generated/v2/PluginShareSaveResponse.d.ts +1 -0
  45. package/dist/codex/generated/v2/SkillInterface.d.ts +8 -0
  46. package/dist/codex/generated/v2/Thread.d.ts +4 -0
  47. package/dist/codex/generated/v2/ThreadItem.d.ts +8 -0
  48. package/dist/codex/generated/v2/ThreadListParams.d.ts +4 -0
  49. package/dist/codex/generated/v2/ThreadMetadataUpdateParams.d.ts +4 -0
  50. package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts +7 -0
  51. package/dist/codex/generated/v2/index.d.ts +4 -0
  52. package/dist/daemon/probe.js +1 -1
  53. package/dist/gateway/threadList.js +6 -2
  54. package/dist/gateway/threadList.js.map +1 -1
  55. package/dist/handoff/lineageStore.d.ts +9 -2
  56. package/dist/handoff/lineageStore.js +29 -10
  57. package/dist/handoff/lineageStore.js.map +1 -1
  58. package/dist/handoff/providerEpochs.js +5 -1
  59. package/dist/handoff/providerEpochs.js.map +1 -1
  60. package/dist/handoff/service.js +49 -12
  61. package/dist/handoff/service.js.map +1 -1
  62. package/dist/runtime/dependencies.js +1 -1
  63. package/dist/store/HybridStore.d.ts +2 -0
  64. package/dist/store/HybridStore.js +4 -0
  65. package/dist/store/HybridStore.js.map +1 -1
  66. package/dist/store/sqliteStore.js +11 -1
  67. package/dist/store/sqliteStore.js.map +1 -1
  68. package/dist/store/threadFilter.d.ts +1 -0
  69. package/dist/store/threadFilter.js +14 -2
  70. package/dist/store/threadFilter.js.map +1 -1
  71. package/legal/LICENSES.md +1 -1
  72. package/legal/THIRD_PARTY_NOTICES.md +97 -96
  73. package/package.json +5 -5
@@ -89,7 +89,7 @@ function explicitPermissionParams(params, permissions) {
89
89
  const { sandbox: _sandbox, sandboxPolicy: _sandboxPolicy, ...rest } = params;
90
90
  return { ...rest, ...permissions };
91
91
  }
92
- function permissionSandbox(permissions, cwd, fallback) {
92
+ function permissionSandbox(permissions, cwd, fallback, runtimeWorkspaceRoots = [cwd]) {
93
93
  if (permissions === ":danger-full-access")
94
94
  return { type: "dangerFullAccess" };
95
95
  if (permissions === ":read-only")
@@ -97,7 +97,7 @@ function permissionSandbox(permissions, cwd, fallback) {
97
97
  if (permissions === ":workspace") {
98
98
  return {
99
99
  type: "workspaceWrite",
100
- writableRoots: [cwd],
100
+ writableRoots: [...new Set([cwd, ...runtimeWorkspaceRoots])],
101
101
  networkAccess: false,
102
102
  excludeTmpdirEnvVar: false,
103
103
  excludeSlashTmp: false,
@@ -105,13 +105,15 @@ function permissionSandbox(permissions, cwd, fallback) {
105
105
  }
106
106
  return fallback;
107
107
  }
108
- function canonicalSettings(source, staged, turn, cwd) {
108
+ function canonicalSettings(source, staged, turn, cwd, runtimeWorkspaceRoots) {
109
109
  const permissions = explicitPermissions(source, staged, turn);
110
110
  const { threadId: _threadId, ...merged } = { ...source, ...staged };
111
- const sandbox = permissionSandbox(permissions.permissions, cwd, turn.sandboxPolicy ?? staged.sandboxPolicy ?? source.sandboxPolicy ?? source.sandbox);
111
+ const sandbox = permissionSandbox(permissions.permissions, cwd, turn.sandboxPolicy ?? staged.sandboxPolicy ?? source.sandboxPolicy ?? source.sandbox, runtimeWorkspaceRoots);
112
112
  return {
113
113
  ...merged,
114
114
  ...permissions,
115
+ cwd,
116
+ runtimeWorkspaceRoots,
115
117
  sandbox,
116
118
  sandboxPolicy: sandbox,
117
119
  activePermissionProfile: { id: permissions.permissions, extends: null },
@@ -400,6 +402,18 @@ export class CrossProviderForks {
400
402
  const result = await this.withAdminLock(publicThreadId, () => stock.request(method, params));
401
403
  return { provider: "stock", result: projectRpcToPublicThread({ result }, owner).result };
402
404
  }
405
+ if (method === "thread/metadata/update") {
406
+ const metadata = publicParams;
407
+ const result = await this.withAdminLock(publicThreadId, async () => {
408
+ const response = await stock.request(method, params);
409
+ if (metadata.isPinned !== undefined && metadata.isPinned !== null
410
+ && !this.lineage.updateTaskPinned(publicThreadId, metadata.isPinned)) {
411
+ throw new Error(`Unknown logical thread '${publicThreadId}'.`);
412
+ }
413
+ return response;
414
+ });
415
+ return { provider: "stock", result: projectRpcToPublicThread({ result }, owner).result };
416
+ }
403
417
  if (method === "thread/read" || method === "thread/resume") {
404
418
  const result = await stock.request(method, params);
405
419
  const resume = method === "thread/resume" ? params : undefined;
@@ -518,9 +532,17 @@ export class CrossProviderForks {
518
532
  }
519
533
  }
520
534
  if (method === "thread/metadata/update") {
535
+ const metadata = publicParams;
521
536
  return {
522
537
  provider: "claude",
523
- result: await this.claude.updateThreadMetadata(params),
538
+ result: await this.withAdminLock(publicThreadId, async () => {
539
+ const result = await this.claude.updateThreadMetadata(params);
540
+ if (metadata.isPinned !== undefined && metadata.isPinned !== null
541
+ && !this.lineage.updateTaskPinned(publicThreadId, metadata.isPinned)) {
542
+ throw new Error(`Unknown logical thread '${publicThreadId}'.`);
543
+ }
544
+ return result;
545
+ }),
524
546
  };
525
547
  }
526
548
  if (method === "thread/archive") {
@@ -992,7 +1014,7 @@ export class CrossProviderForks {
992
1014
  : connectionId;
993
1015
  const { source, summary, sourceTurns, developerInstructions, targetSettings, permissionSettings } = await this.providerSwitchMaterial(job, stock, workerConnectionId);
994
1016
  if (job.targetProvider === "claude") {
995
- const started = await this.claude.startHiddenThread(this.targetThreadStart(job, source.thread, developerInstructions, permissionSettings));
1017
+ const started = await this.claude.startHiddenThread(this.targetThreadStart(job, source.thread, developerInstructions, permissionSettings, targetSettings));
996
1018
  target = { provider: "claude", threadId: started.thread.id };
997
1019
  if (!this.store.checkpointProviderSwitchTarget(job.id, {
998
1020
  backendThreadId: started.thread.id,
@@ -1030,7 +1052,7 @@ export class CrossProviderForks {
1030
1052
  };
1031
1053
  this.stockTargetBuilds.set(workerConnectionId, build);
1032
1054
  const started = await stock.request("thread/start", {
1033
- ...this.targetThreadStart(job, source.thread, developerInstructions, permissionSettings),
1055
+ ...this.targetThreadStart(job, source.thread, developerInstructions, permissionSettings, targetSettings),
1034
1056
  threadSource: build.expectedThreadSource,
1035
1057
  });
1036
1058
  target = { provider: "stock", threadId: started.thread.id };
@@ -1223,7 +1245,7 @@ export class CrossProviderForks {
1223
1245
  model: params.model,
1224
1246
  modelProvider: params.modelProvider ?? "openai",
1225
1247
  cwd: params.cwd ?? source.thread.cwd,
1226
- ...(params.runtimeWorkspaceRoots !== undefined ? { runtimeWorkspaceRoots: params.runtimeWorkspaceRoots } : {}),
1248
+ runtimeWorkspaceRoots: [...(params.runtimeWorkspaceRoots ?? source.runtimeWorkspaceRoots)],
1227
1249
  ...(params.serviceTier !== undefined ? { serviceTier: params.serviceTier } : {}),
1228
1250
  ...(params.approvalPolicy !== undefined ? { approvalPolicy: params.approvalPolicy } : {}),
1229
1251
  ...(params.approvalsReviewer !== undefined ? { approvalsReviewer: params.approvalsReviewer } : {}),
@@ -1770,7 +1792,10 @@ export class CrossProviderForks {
1770
1792
  thread: source.thread,
1771
1793
  backendTurns: source.turns,
1772
1794
  turns: await this.visibleTurns(job.publicThreadId, source.turns, stock),
1773
- settings: source.settings,
1795
+ settings: {
1796
+ ...source.settings,
1797
+ runtimeWorkspaceRoots: source.runtimeWorkspaceRoots,
1798
+ },
1774
1799
  };
1775
1800
  }
1776
1801
  const [read, resume] = await Promise.all([
@@ -1795,6 +1820,13 @@ export class CrossProviderForks {
1795
1820
  const summary = job.summary
1796
1821
  ?? await this.providerSwitchSummary(job, source.turns, stock, connectionId);
1797
1822
  const cwd = job.turnParams.cwd ?? job.settings.cwd ?? source.thread.cwd;
1823
+ const sourceRoots = Array.isArray(source.settings.runtimeWorkspaceRoots)
1824
+ ? source.settings.runtimeWorkspaceRoots
1825
+ : [source.thread.cwd];
1826
+ const runtimeWorkspaceRoots = job.turnParams.runtimeWorkspaceRoots !== undefined
1827
+ && job.turnParams.runtimeWorkspaceRoots !== null
1828
+ ? [...new Set(job.turnParams.runtimeWorkspaceRoots)]
1829
+ : [...new Set(sourceRoots.map((root) => root === source.thread.cwd ? cwd : root))];
1798
1830
  const permissionSettings = explicitPermissions(source.settings, job.settings, job.turnParams);
1799
1831
  const completedAt = Math.floor(Date.now() / 1_000);
1800
1832
  const compactTurn = {
@@ -1814,7 +1846,7 @@ export class CrossProviderForks {
1814
1846
  ],
1815
1847
  developerInstructions: handoffInstructions(source.developerInstructions, summary),
1816
1848
  targetSettings: {
1817
- ...canonicalSettings(source.settings, job.settings, job.turnParams, cwd),
1849
+ ...canonicalSettings(source.settings, job.settings, job.turnParams, cwd, runtimeWorkspaceRoots),
1818
1850
  model: job.targetModel,
1819
1851
  modelProvider: job.targetProvider === "claude" ? "claude" : "openai",
1820
1852
  },
@@ -1849,13 +1881,18 @@ export class CrossProviderForks {
1849
1881
  }
1850
1882
  return (await this.summarizeStock({ threadId: resolved.epoch.backendThreadId }, turns, resolved.epoch.model, stock, connectionId)).summary;
1851
1883
  }
1852
- targetThreadStart(job, source, developerInstructions, permissionSettings) {
1884
+ targetThreadStart(job, source, developerInstructions, permissionSettings, targetSettings) {
1853
1885
  const turn = job.turnParams;
1854
1886
  const settings = job.settings;
1855
1887
  return {
1856
1888
  model: job.targetModel,
1857
1889
  modelProvider: job.targetProvider === "claude" ? "claude" : "openai",
1858
- cwd: turn.cwd ?? settings.cwd ?? source.cwd,
1890
+ cwd: typeof targetSettings.cwd === "string"
1891
+ ? targetSettings.cwd
1892
+ : turn.cwd ?? settings.cwd ?? source.cwd,
1893
+ runtimeWorkspaceRoots: Array.isArray(targetSettings.runtimeWorkspaceRoots)
1894
+ ? targetSettings.runtimeWorkspaceRoots
1895
+ : [source.cwd],
1859
1896
  developerInstructions,
1860
1897
  ...permissionSettings,
1861
1898
  ...(turn.serviceTier !== undefined