@workflow-code/cli 0.2.4-20261013005.codex-studio-integration → 0.2.4-20261013006.codex-studio-integration

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/dist/index.js CHANGED
@@ -24,7 +24,7 @@ async function main(argv = process.argv.slice(2)) {
24
24
  const prepared = prepareCliInvocation(argv);
25
25
  argv = prepared.argv;
26
26
  if (argv[0] === "web") {
27
- const webCli = await import("./web-H4CP4OQC.js");
27
+ const webCli = await import("./web-HG5S3AUN.js");
28
28
  return webCli.main(argv.slice(1));
29
29
  }
30
30
  if (argv[0] === "workspace") {
@@ -1702,6 +1702,7 @@ textarea::placeholder {
1702
1702
  }
1703
1703
  .param-action:has(.param-action-summary:not([hidden])) .param-action-label {
1704
1704
  flex-shrink: 0;
1705
+ max-width: 50%;
1705
1706
  font-weight: 500;
1706
1707
  }
1707
1708
  .param-action-ai {
@@ -12608,6 +12608,7 @@
12608
12608
  "{1} in {0}": "{0} \u4E2D {1}",
12609
12609
  "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
12610
12610
  "Account balance": "\u8D26\u6237\u4F59\u989D",
12611
+ "Account changed. Refresh usage.": "\u8D26\u53F7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u7528\u91CF\u3002",
12611
12612
  "AI usage": "AI \u7528\u91CF",
12612
12613
  All: "\u5168\u90E8",
12613
12614
  "Basic information": "\u57FA\u672C\u4FE1\u606F",
@@ -16826,6 +16827,7 @@ ${state2.user?.avatarUrl ?? ""}`;
16826
16827
  body = document.createElement("div");
16827
16828
  title = document.createElement("h2");
16828
16829
  usageOpen = false;
16830
+ usageRequestId;
16829
16831
  refresh;
16830
16832
  constructor() {
16831
16833
  this.dialog.className = "conversation-dialog";
@@ -16852,9 +16854,15 @@ ${state2.user?.avatarUrl ?? ""}`;
16852
16854
  close() {
16853
16855
  this.dialog.close();
16854
16856
  this.usageOpen = false;
16857
+ this.usageRequestId = void 0;
16855
16858
  this.refresh?.remove();
16856
16859
  this.refresh = void 0;
16857
16860
  }
16861
+ closeUsage() {
16862
+ if (this.usageOpen) {
16863
+ this.close();
16864
+ }
16865
+ }
16858
16866
  show(title) {
16859
16867
  this.close();
16860
16868
  this.title.textContent = title;
@@ -16961,10 +16969,11 @@ ${state2.user?.avatarUrl ?? ""}`;
16961
16969
  if (this.refresh) {
16962
16970
  this.refresh.disabled = true;
16963
16971
  }
16964
- load();
16972
+ this.usageRequestId = crypto.randomUUID();
16973
+ load(this.usageRequestId);
16965
16974
  }
16966
- usageResult(data, error) {
16967
- if (!this.usageOpen) {
16975
+ usageResult(requestId, data, error) {
16976
+ if (!this.usageOpen || requestId !== this.usageRequestId) {
16968
16977
  return;
16969
16978
  }
16970
16979
  this.body.replaceChildren();
@@ -17848,7 +17857,7 @@ ${state2.user?.avatarUrl ?? ""}`;
17848
17857
  controls();
17849
17858
  }
17850
17859
  };
17851
- element("usage").onclick = () => dialogs.usage(() => host.postMessage({ type: "usage" }));
17860
+ element("usage").onclick = () => dialogs.usage((requestId) => host.postMessage({ type: "usage", requestId }));
17852
17861
  element("project-info").onclick = () => {
17853
17862
  if (project) {
17854
17863
  dialogs.projectInfo(project);
@@ -17933,6 +17942,7 @@ ${state2.user?.avatarUrl ?? ""}`;
17933
17942
  saveTimer = setTimeout(() => void save().catch(showError), 250);
17934
17943
  }
17935
17944
  } else {
17945
+ dialogs.closeUsage();
17936
17946
  for (const waiting of pending.values()) {
17937
17947
  clearTimeout(waiting.timer);
17938
17948
  waiting.reject(new Error(t2("Connection interrupted.")));
@@ -17949,15 +17959,16 @@ ${state2.user?.avatarUrl ?? ""}`;
17949
17959
  if (authRevision !== message.authenticationRevision) {
17950
17960
  authRevision = message.authenticationRevision;
17951
17961
  previewKey = "";
17962
+ dialogs.closeUsage();
17952
17963
  }
17953
17964
  element("usage").hidden = message.account.status !== "authenticated";
17954
17965
  update(message.kanban);
17955
17966
  }
17956
17967
  if (message.type === "usage") {
17957
- dialogs.usageResult(message.usage);
17968
+ dialogs.usageResult(message.requestId, message.usage);
17958
17969
  }
17959
17970
  if (message.type === "error" && message.requestType === "usage") {
17960
- dialogs.usageResult(void 0, message.message);
17971
+ dialogs.usageResult(message.requestId, void 0, message.message);
17961
17972
  return;
17962
17973
  }
17963
17974
  if (message.type === "error" && !message.silent && !message.requestId) {
@@ -1702,6 +1702,7 @@ textarea::placeholder {
1702
1702
  }
1703
1703
  .param-action:has(.param-action-summary:not([hidden])) .param-action-label {
1704
1704
  flex-shrink: 0;
1705
+ max-width: 50%;
1705
1706
  font-weight: 500;
1706
1707
  }
1707
1708
  .param-action-ai {
@@ -12608,6 +12608,7 @@
12608
12608
  "{1} in {0}": "{0} \u4E2D {1}",
12609
12609
  "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
12610
12610
  "Account balance": "\u8D26\u6237\u4F59\u989D",
12611
+ "Account changed. Refresh usage.": "\u8D26\u53F7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u7528\u91CF\u3002",
12611
12612
  "AI usage": "AI \u7528\u91CF",
12612
12613
  All: "\u5168\u90E8",
12613
12614
  "Basic information": "\u57FA\u672C\u4FE1\u606F",
@@ -1702,6 +1702,7 @@ textarea::placeholder {
1702
1702
  }
1703
1703
  .param-action:has(.param-action-summary:not([hidden])) .param-action-label {
1704
1704
  flex-shrink: 0;
1705
+ max-width: 50%;
1705
1706
  font-weight: 500;
1706
1707
  }
1707
1708
  .param-action-ai {
@@ -12608,6 +12608,7 @@
12608
12608
  "{1} in {0}": "{0} \u4E2D {1}",
12609
12609
  "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
12610
12610
  "Account balance": "\u8D26\u6237\u4F59\u989D",
12611
+ "Account changed. Refresh usage.": "\u8D26\u53F7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u7528\u91CF\u3002",
12611
12612
  "AI usage": "AI \u7528\u91CF",
12612
12613
  All: "\u5168\u90E8",
12613
12614
  "Basic information": "\u57FA\u672C\u4FE1\u606F",
@@ -16058,6 +16059,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
16058
16059
  body = document.createElement("div");
16059
16060
  title = document.createElement("h2");
16060
16061
  usageOpen = false;
16062
+ usageRequestId;
16061
16063
  refresh;
16062
16064
  constructor() {
16063
16065
  this.dialog.className = "conversation-dialog";
@@ -16084,9 +16086,15 @@ Please report this to https://github.com/markedjs/marked.`, e) {
16084
16086
  close() {
16085
16087
  this.dialog.close();
16086
16088
  this.usageOpen = false;
16089
+ this.usageRequestId = void 0;
16087
16090
  this.refresh?.remove();
16088
16091
  this.refresh = void 0;
16089
16092
  }
16093
+ closeUsage() {
16094
+ if (this.usageOpen) {
16095
+ this.close();
16096
+ }
16097
+ }
16090
16098
  show(title) {
16091
16099
  this.close();
16092
16100
  this.title.textContent = title;
@@ -16193,10 +16201,11 @@ Please report this to https://github.com/markedjs/marked.`, e) {
16193
16201
  if (this.refresh) {
16194
16202
  this.refresh.disabled = true;
16195
16203
  }
16196
- load();
16204
+ this.usageRequestId = crypto.randomUUID();
16205
+ load(this.usageRequestId);
16197
16206
  }
16198
- usageResult(data, error) {
16199
- if (!this.usageOpen) {
16207
+ usageResult(requestId, data, error) {
16208
+ if (!this.usageOpen || requestId !== this.usageRequestId) {
16200
16209
  return;
16201
16210
  }
16202
16211
  this.body.replaceChildren();
@@ -18879,6 +18888,9 @@ ${state.user?.avatarUrl ?? ""}`;
18879
18888
  folder.title = next.project.assistant?.workdir ?? "";
18880
18889
  const switching = projectChanged || renderedSession !== next.activeId;
18881
18890
  const authenticationChanged = previous && (previous.authenticationRevision !== next.authenticationRevision || previous.parameterRevision !== next.parameterRevision);
18891
+ if (previous && previous.authenticationRevision !== next.authenticationRevision) {
18892
+ dialogs.closeUsage();
18893
+ }
18882
18894
  if (authenticationChanged) {
18883
18895
  ++requestId;
18884
18896
  resolving = false;
@@ -19063,7 +19075,7 @@ ${state.user?.avatarUrl ?? ""}`;
19063
19075
  document.querySelector("#attach").addEventListener("click", () => post({ type: "attach" }));
19064
19076
  document.querySelector("#cancel-queue-edit").addEventListener("click", () => post({ type: "queue-cancel-edit" }));
19065
19077
  document.querySelector("#tools").addEventListener("click", () => dialogs.permissions(currentParameters(), currentSession()?.toolPermissionPolicies ?? {}, (policies) => post({ type: "tool-policy", entrypointId: entrypoint.value, policies })));
19066
- document.querySelector("#usage").addEventListener("click", () => dialogs.usage(() => post({ type: "usage" })));
19078
+ document.querySelector("#usage").addEventListener("click", () => dialogs.usage((requestId2) => post({ type: "usage", requestId: requestId2 })));
19067
19079
  document.querySelector("#parameter-login").addEventListener("click", () => vscode.postMessage({ type: "login" }));
19068
19080
  document.querySelector("#menu-toggle").addEventListener("click", () => showMenu(true));
19069
19081
  document.querySelector("#hide-menu").addEventListener("click", () => showMenu(false));
@@ -19205,6 +19217,7 @@ ${state.user?.avatarUrl ?? ""}`;
19205
19217
  if (!connectionAvailable) {
19206
19218
  resolving = false;
19207
19219
  requestId++;
19220
+ dialogs.closeUsage();
19208
19221
  }
19209
19222
  sendButton.disabled = !connectionAvailable || sendButton.disabled;
19210
19223
  updateControls();
@@ -19294,7 +19307,7 @@ ${state.user?.avatarUrl ?? ""}`;
19294
19307
  updateControls();
19295
19308
  textarea.focus();
19296
19309
  } else if (message.type === "usage" && message.sessionId === state?.activeId) {
19297
- dialogs.usageResult(message.usage);
19310
+ dialogs.usageResult(message.requestId, message.usage);
19298
19311
  } else if (message.type === "exported" && message.sessionId === state?.activeId) {
19299
19312
  const button = messages.get(message.messageId)?.root.querySelector(".export-message");
19300
19313
  if (button) {
@@ -19302,14 +19315,15 @@ ${state.user?.avatarUrl ?? ""}`;
19302
19315
  button.innerHTML = iconHtml("export");
19303
19316
  }
19304
19317
  } else if (message.type === "error" && (!message.sessionId || message.sessionId === state?.activeId)) {
19318
+ if (message.requestType === "usage") {
19319
+ dialogs.usageResult(message.requestId, void 0, message.message);
19320
+ return;
19321
+ }
19305
19322
  if (message.requestType === "resume" && messages.get(message.messageId)?.prompt?.request.requestId !== message.requestId) {
19306
19323
  return;
19307
19324
  }
19308
19325
  submitting = false;
19309
19326
  uploading = Math.max(0, uploading - 1);
19310
- if (message.requestType === "usage") {
19311
- dialogs.usageResult(void 0, message.message);
19312
- }
19313
19327
  if (message.requestType === "resume") {
19314
19328
  messages.get(message.messageId)?.prompt?.setBusy(false, message.message);
19315
19329
  }
@@ -1702,6 +1702,7 @@ textarea::placeholder {
1702
1702
  }
1703
1703
  .param-action:has(.param-action-summary:not([hidden])) .param-action-label {
1704
1704
  flex-shrink: 0;
1705
+ max-width: 50%;
1705
1706
  font-weight: 500;
1706
1707
  }
1707
1708
  .param-action-ai {
@@ -16137,6 +16137,7 @@
16137
16137
  "{1} in {0}": "{0} \u4E2D {1}",
16138
16138
  "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
16139
16139
  "Account balance": "\u8D26\u6237\u4F59\u989D",
16140
+ "Account changed. Refresh usage.": "\u8D26\u53F7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u7528\u91CF\u3002",
16140
16141
  "AI usage": "AI \u7528\u91CF",
16141
16142
  All: "\u5168\u90E8",
16142
16143
  "Basic information": "\u57FA\u672C\u4FE1\u606F",
@@ -21483,6 +21484,7 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
21483
21484
  body = document.createElement("div");
21484
21485
  title = document.createElement("h2");
21485
21486
  usageOpen = false;
21487
+ usageRequestId;
21486
21488
  refresh;
21487
21489
  constructor() {
21488
21490
  this.dialog.className = "conversation-dialog";
@@ -21509,9 +21511,15 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
21509
21511
  close() {
21510
21512
  this.dialog.close();
21511
21513
  this.usageOpen = false;
21514
+ this.usageRequestId = void 0;
21512
21515
  this.refresh?.remove();
21513
21516
  this.refresh = void 0;
21514
21517
  }
21518
+ closeUsage() {
21519
+ if (this.usageOpen) {
21520
+ this.close();
21521
+ }
21522
+ }
21515
21523
  show(title) {
21516
21524
  this.close();
21517
21525
  this.title.textContent = title;
@@ -21618,10 +21626,11 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
21618
21626
  if (this.refresh) {
21619
21627
  this.refresh.disabled = true;
21620
21628
  }
21621
- load();
21629
+ this.usageRequestId = crypto.randomUUID();
21630
+ load(this.usageRequestId);
21622
21631
  }
21623
- usageResult(data, error) {
21624
- if (!this.usageOpen) {
21632
+ usageResult(requestId2, data, error) {
21633
+ if (!this.usageOpen || requestId2 !== this.usageRequestId) {
21625
21634
  return;
21626
21635
  }
21627
21636
  this.body.replaceChildren();
@@ -22127,7 +22136,9 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22127
22136
  element("entrypoints").hidden = !!run;
22128
22137
  element("run-detail").hidden = !run;
22129
22138
  if (!run) {
22130
- fields.close();
22139
+ if (renderedRun) {
22140
+ fields.close();
22141
+ }
22131
22142
  renderedRun = "";
22132
22143
  controls();
22133
22144
  return;
@@ -22200,6 +22211,9 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22200
22211
  const authChanged = revision !== next.authenticationRevision;
22201
22212
  revision = next.authenticationRevision;
22202
22213
  state = next;
22214
+ if (authChanged) {
22215
+ dialogs.closeUsage();
22216
+ }
22203
22217
  if (!draftsLoaded) {
22204
22218
  for (const key of Object.keys(drafts)) {
22205
22219
  delete drafts[key];
@@ -22293,7 +22307,7 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22293
22307
  draft().policies = structuredClone(policies);
22294
22308
  post({ type: "tool-policy", policies });
22295
22309
  });
22296
- element("usage").onclick = () => dialogs.usage(() => post({ type: "usage" }));
22310
+ element("usage").onclick = () => dialogs.usage((requestId2) => post({ type: "usage", requestId: requestId2 }));
22297
22311
  element("project-info").onclick = () => {
22298
22312
  if (state) {
22299
22313
  fields.close();
@@ -22311,6 +22325,9 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22311
22325
  if (restored) {
22312
22326
  resolve();
22313
22327
  }
22328
+ if (!connected) {
22329
+ dialogs.closeUsage();
22330
+ }
22314
22331
  } else if (message?.type === "params" && message.requestId === requestId && message.entrypointId === entrypointId) {
22315
22332
  resolving = false;
22316
22333
  if (message.error) {
@@ -22335,8 +22352,12 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22335
22352
  }
22336
22353
  }
22337
22354
  } else if (message?.type === "usage") {
22338
- dialogs.usageResult(message.usage);
22355
+ dialogs.usageResult(message.requestId, message.usage);
22339
22356
  } else if (message?.type === "error") {
22357
+ if (message.requestType === "usage") {
22358
+ dialogs.usageResult(message.requestId, void 0, message.message);
22359
+ return;
22360
+ }
22340
22361
  submitting = false;
22341
22362
  resolving = false;
22342
22363
  controls();
@@ -22347,9 +22368,6 @@ ${JSON.stringify(output2.details, null, 2)}` : "");
22347
22368
  if (message.requestType === "workflow-resume") {
22348
22369
  prompt?.setBusy(false, message.message);
22349
22370
  }
22350
- if (message.requestType === "usage") {
22351
- dialogs.usageResult(void 0, message.message);
22352
- }
22353
22371
  }
22354
22372
  });
22355
22373
  host.postMessage({ type: "ready" });
@@ -65,6 +65,7 @@ var messages_zh_cn_default = {
65
65
  "{1} in {0}": "{0} \u4E2D {1}",
66
66
  "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
67
67
  "Account balance": "\u8D26\u6237\u4F59\u989D",
68
+ "Account changed. Refresh usage.": "\u8D26\u53F7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u7528\u91CF\u3002",
68
69
  "AI usage": "AI \u7528\u91CF",
69
70
  All: "\u5168\u90E8",
70
71
  "Basic information": "\u57FA\u672C\u4FE1\u606F",
@@ -3589,12 +3590,16 @@ ${token}`;
3589
3590
  if (!connection) {
3590
3591
  throw new Error("Workflow Server login is not configured.");
3591
3592
  }
3593
+ const revision = authRevision;
3592
3594
  const response = await fetch(`${connection.serverUrl}/api/auth/sub2api/catalog`, { headers: { Authorization: `Bearer ${connection.accessToken}` }, signal: AbortSignal.timeout(15e3), redirect: "error" });
3593
3595
  const result = await response.json();
3596
+ if (revision !== authRevision) {
3597
+ throw new Error(t("Account changed. Refresh usage."));
3598
+ }
3594
3599
  if (!response.ok || result.errCode !== 0) {
3595
3600
  throw new Error(result.errMessage || "Cannot load usage.");
3596
3601
  }
3597
- replies.push({ type: "usage", sessionId: current?.id, usage: result.data });
3602
+ replies.push({ type: "usage", requestId: message.requestId, sessionId: current?.id, usage: result.data });
3598
3603
  break;
3599
3604
  }
3600
3605
  case "login": {
@@ -3748,7 +3753,7 @@ ${token}`;
3748
3753
  const operation = () => handleMessage(message).then((value2) => {
3749
3754
  messages = value2;
3750
3755
  });
3751
- const concurrent = ["resolve", "ready", "resource", "resource-data", "resource-refresh", "resource-select", "resource-bridge", "kanban-bridge", "kanban-method-state", "kanban-method-reply", "kanban-methods"].includes(message.type);
3756
+ const concurrent = ["resolve", "ready", "usage", "resource", "resource-data", "resource-refresh", "resource-select", "resource-bridge", "kanban-bridge", "kanban-method-state", "kanban-method-reply", "kanban-methods"].includes(message.type);
3752
3757
  const task = concurrent ? operation() : mutations.catch(() => void 0).then(operation);
3753
3758
  if (!concurrent) {
3754
3759
  mutations = task;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow-code/cli",
3
- "version": "0.2.4-20261013005.codex-studio-integration",
3
+ "version": "0.2.4-20261013006.codex-studio-integration",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "workflow-code": "./dist/index.js"
@@ -40,8 +40,8 @@
40
40
  "@workflow-code/execution-targets": "0.1.0",
41
41
  "@workflow-code/i18n": "0.1.0",
42
42
  "@workflow-code/kanban-project": "0.1.0",
43
- "@workflow-code/openai-responses": "0.1.0",
44
43
  "@workflow-code/project-dependencies": "0.1.0",
44
+ "@workflow-code/openai-responses": "0.1.0",
45
45
  "@workflow-code/project-info": "0.1.0",
46
46
  "@workflow-code/project-upload": "0.1.0",
47
47
  "@workflow-code/runtime-compatibility": "0.1.0",