@scalequality/cli 0.4.27 → 0.4.28

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "sdkVersion": "0.3.281",
3
- "sha256": "17180f5819c1bc15eb3673f2b233c0ed2bfec058b6e5c61f664c1e31a814d8a5",
4
- "sourceCommit": "2d39889d75ad2d495e1d185212f15d0113581f52"
3
+ "sha256": "3e6a52e75696798e80d0997d0c77e28182408dbd253b029ceddf481f9f165bc3",
4
+ "sourceCommit": "a06fd589e2aa6fc795369553fd700fc4da0d3c72"
5
5
  }
package/dist/connect.cjs CHANGED
@@ -5429,7 +5429,7 @@ function limitInEngineText(text3) {
5429
5429
  // src/application/services/workspaceSandbox/scalequalityTools.ts
5430
5430
  var import_crypto5 = require("crypto");
5431
5431
 
5432
- // node_modules/zod/v3/external.js
5432
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/external.js
5433
5433
  var external_exports = {};
5434
5434
  __export(external_exports, {
5435
5435
  BRAND: () => BRAND,
@@ -5541,7 +5541,7 @@ __export(external_exports, {
5541
5541
  void: () => voidType
5542
5542
  });
5543
5543
 
5544
- // node_modules/zod/v3/helpers/util.js
5544
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/helpers/util.js
5545
5545
  var util;
5546
5546
  (function(util2) {
5547
5547
  util2.assertEqual = (_) => {
@@ -5675,7 +5675,7 @@ var getParsedType = (data) => {
5675
5675
  }
5676
5676
  };
5677
5677
 
5678
- // node_modules/zod/v3/ZodError.js
5678
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/ZodError.js
5679
5679
  var ZodIssueCode = util.arrayToEnum([
5680
5680
  "invalid_type",
5681
5681
  "invalid_literal",
@@ -5793,7 +5793,7 @@ ZodError.create = (issues) => {
5793
5793
  return error;
5794
5794
  };
5795
5795
 
5796
- // node_modules/zod/v3/locales/en.js
5796
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/locales/en.js
5797
5797
  var errorMap = (issue, _ctx) => {
5798
5798
  let message;
5799
5799
  switch (issue.code) {
@@ -5896,7 +5896,7 @@ var errorMap = (issue, _ctx) => {
5896
5896
  };
5897
5897
  var en_default = errorMap;
5898
5898
 
5899
- // node_modules/zod/v3/errors.js
5899
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/errors.js
5900
5900
  var overrideErrorMap = en_default;
5901
5901
  function setErrorMap(map) {
5902
5902
  overrideErrorMap = map;
@@ -5905,7 +5905,7 @@ function getErrorMap() {
5905
5905
  return overrideErrorMap;
5906
5906
  }
5907
5907
 
5908
- // node_modules/zod/v3/helpers/parseUtil.js
5908
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/helpers/parseUtil.js
5909
5909
  var makeIssue = (params) => {
5910
5910
  const { data, path, errorMaps, issueData } = params;
5911
5911
  const fullPath = [...path, ...issueData.path || []];
@@ -6015,14 +6015,14 @@ var isDirty = (x) => x.status === "dirty";
6015
6015
  var isValid = (x) => x.status === "valid";
6016
6016
  var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
6017
6017
 
6018
- // node_modules/zod/v3/helpers/errorUtil.js
6018
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/helpers/errorUtil.js
6019
6019
  var errorUtil;
6020
6020
  (function(errorUtil2) {
6021
6021
  errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
6022
6022
  errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message;
6023
6023
  })(errorUtil || (errorUtil = {}));
6024
6024
 
6025
- // node_modules/zod/v3/types.js
6025
+ // ../../scalequality-ai-governance-service/node_modules/zod/v3/types.js
6026
6026
  var ParseInputLazyPath = class {
6027
6027
  constructor(parent, value, path, key) {
6028
6028
  this._cachedPath = [];
@@ -12361,6 +12361,14 @@ ${String(item.content)}` : String(item.content);
12361
12361
  await this.sink.flush();
12362
12362
  }
12363
12363
  }
12364
+ /** A file the person attached, saved whole in the engine's own folder (the file tools read there, nothing writes there). */
12365
+ async saveAttachment(name, bytes) {
12366
+ const dir = (0, import_path16.join)(this.deps.configDir, "attachments", (0, import_crypto8.randomUUID)());
12367
+ await (0, import_promises15.mkdir)(dir, { recursive: true });
12368
+ const path = (0, import_path16.join)(dir, (0, import_path16.basename)(name ?? "").replace(/[\u0000-\u001f\\/:]/g, "_").replace(/^\.+/, "") || "attachment");
12369
+ await (0, import_promises15.writeFile)(path, bytes);
12370
+ return path;
12371
+ }
12364
12372
  /**
12365
12373
  * v4: what the person attached to the message, for the model: the images
12366
12374
  * (the API read them from the Runtime), the files they mentioned (text,
@@ -12437,9 +12445,24 @@ ${lines2.join("\n")}
12437
12445
  if (cut) text3 = Buffer.from(text3, "utf8").subarray(0, room).toString("utf8").replace(/\uFFFD$/, "");
12438
12446
  filesBytes += Buffer.byteLength(text3);
12439
12447
  const name = typeof d.name === "string" ? d.name.replace(/["<>]/g, "").slice(0, 200) : null;
12440
- blocks.push(`<attached_document${name ? ` name="${name}"` : ""} type="${String(d.mediaType ?? "text/plain").replace(/"/g, "")}"${cut ? ' truncated="true"' : ""}>
12448
+ const whole = cut ? await this.saveAttachment(name, Buffer.from(d.text, "utf8")).catch(() => null) : null;
12449
+ blocks.push(`<attached_document${name ? ` name="${name}"` : ""} type="${String(d.mediaType ?? "text/plain").replace(/"/g, "")}"${cut ? ' truncated="true"' : ""}${whole ? ` path="${whole.replace(/"/g, "")}"` : ""}>
12441
12450
  ${text3}
12442
12451
  </attached_document>`);
12452
+ }
12453
+ for (const raw of (Array.isArray(payload.files) ? payload.files : []).slice(0, TURN_CAPS.images)) {
12454
+ const f = raw;
12455
+ if (typeof f.data !== "string" || !f.data) continue;
12456
+ const bytes = Buffer.from(f.data, "base64");
12457
+ const name = typeof f.name === "string" ? f.name.replace(/["<>]/g, "").slice(0, 200) : null;
12458
+ const path = await this.saveAttachment(name, bytes).catch(() => null);
12459
+ if (!path) {
12460
+ this.error("ATTACHMENT_SKIPPED");
12461
+ continue;
12462
+ }
12463
+ blocks.push(`<attached_file${name ? ` name="${name}"` : ""} type="${String(f.mediaType ?? "application/octet-stream").replace(/"/g, "")}" bytes="${bytes.length}" path="${path.replace(/"/g, "")}">
12464
+ The user attached this file; it is saved at this path, outside the repository. Open it with your tools (Read reads PDFs and images; use Bash for archives, spreadsheets and other formats). Copy it into the repository only if the user asks.
12465
+ </attached_file>`);
12443
12466
  }
12444
12467
  for (const raw of (Array.isArray(payload.sessionContext) ? payload.sessionContext : []).slice(0, 8)) {
12445
12468
  const c = raw;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scalequality/cli",
3
- "version": "0.4.27",
3
+ "version": "0.4.28",
4
4
  "description": "ScaleQuality CLI. Connect your computer to the ScaleQuality AI Workspace (`scalequality login`), run its coding engine in any folder of your computer, and import your Claude Code and Codex conversations.",
5
5
  "type": "module",
6
6
  "bin": {