spi-agent-gui 0.1.1 → 0.1.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ - macOS Apple Silicon/Intel candidates remain separate from public Linux releases. Developer ID signing and notarization are not configured.
6
+
7
+ ## 0.1.2
8
+
9
+ - Linux x64/arm64 release containing the actual new editable buffer UI (not only Pi's native queue-count status).
10
+ - User-resizable persisted sidebar split, active directory/recent session highlighting and display-only home-path abbreviation.
11
+ - Main-process editable/cancellable outbox with fixed composer overlay, images, follow-up tail appends / newest-steer head insertion, Stop pause/resume and single-use submission/revision protection.
12
+ - Replace sPi permission modes/rule editor with a session-local YOLO checkbox: on automatically replies Allow once to compatible Pi tool approvals; off delegates to Pi without another sPi prompt. Legacy sPi permission files are preserved but no longer applied. Generic dialogs/direct blocks and Stop/close guards remain effective.
13
+ - Secondary processes exit before readiness; owning-window app quit uses the same confirmation/cleanup controller. Runtime sanitization preserves native helper modes and safe relative framework links.
14
+ - Published 0.1.0/0.1.1 assets remain unchanged. This public release is Linux-only; macOS/Windows public distribution remains deferred.
15
+
3
16
  ## 0.1.1
4
17
 
5
18
  - Original female-spy silhouette icon for the application window, favicon and platform packages.
package/dist/spi.cjs CHANGED
@@ -11,7 +11,7 @@ var __commonJS = (cb, mod) => function __require() {
11
11
  var define_SPI_RELEASE_default;
12
12
  var init_define_SPI_RELEASE = __esm({
13
13
  "<define:__SPI_RELEASE__>"() {
14
- define_SPI_RELEASE_default = { version: "0.1.1", repository: "DiamondGo/spi", packageName: "spi-agent-gui" };
14
+ define_SPI_RELEASE_default = { version: "0.1.2", repository: "DiamondGo/spi", packageName: "spi-agent-gui" };
15
15
  }
16
16
  });
17
17
 
@@ -4682,7 +4682,7 @@ var require_package = __commonJS({
4682
4682
  "package.json"(exports2, module2) {
4683
4683
  module2.exports = {
4684
4684
  name: "spi",
4685
- version: "0.1.1",
4685
+ version: "0.1.2",
4686
4686
  description: "sPi - Simple Pi Agent GUI",
4687
4687
  private: true,
4688
4688
  license: "UNLICENSED",
@@ -4697,6 +4697,7 @@ var require_package = __commonJS({
4697
4697
  build: "electron-vite build",
4698
4698
  "build:icons": "node scripts/icons.cjs",
4699
4699
  "test:icons": "node scripts/icons.test.cjs",
4700
+ "test:native-build": "node scripts/native-build.test.cjs && node scripts/macos-integrity.test.cjs",
4700
4701
  start: "electron-vite preview",
4701
4702
  dist: "node scripts/build-portable.cjs",
4702
4703
  "dist:linux": "node scripts/build-portable.cjs",
@@ -4714,8 +4715,12 @@ var require_package = __commonJS({
4714
4715
  "test:terminal-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --terminal",
4715
4716
  "test:settings": "node scripts/settings.test.cjs",
4716
4717
  "test:settings-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --settings",
4717
- "test:permissions": "node scripts/permissions.test.cjs",
4718
- "test:permission-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --permissions",
4718
+ "test:yolo": "node scripts/yolo.test.cjs && node scripts/session-bridge.test.cjs",
4719
+ "test:extension-ui": "node scripts/extension-ui.test.cjs",
4720
+ "test:workspace-ui": "node scripts/workspace-ui.test.cjs",
4721
+ "test:workspace-ui-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --workspace-ui",
4722
+ "test:extension-ui-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --extension-ui",
4723
+ "test:yolo-smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --yolo",
4719
4724
  "test:smoke": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs",
4720
4725
  "test:advanced": "electron-vite build && node scripts/with-display.cjs scripts/smoke.cjs --advanced"
4721
4726
  },
@@ -4782,7 +4787,7 @@ function version(v) {
4782
4787
  }
4783
4788
  function target() {
4784
4789
  const t = process.platform + "-" + process.arch;
4785
- if (!["linux-x64", "linux-arm64", "win32-x64", "darwin-arm64"].includes(t)) fail("Unsupported platform: " + t);
4790
+ if (!["linux-x64", "linux-arm64", "win32-x64", "darwin-arm64", "darwin-x64"].includes(t)) fail("Unsupported platform: " + t);
4786
4791
  if (process.platform === "linux" && !process.report.getReport().header.glibcVersionRuntime) fail("Linux requires glibc; musl is not supported");
4787
4792
  return t;
4788
4793
  }
@@ -4847,6 +4852,10 @@ function validateEntries(entries) {
4847
4852
  }
4848
4853
  }
4849
4854
  }
4855
+ function checkExtractedLinks(entries, dest) {
4856
+ const base = fs.realpathSync(dest) + path.sep;
4857
+ for (const e of entries) if (e.link && !fs.realpathSync(path.join(dest, e.name)).startsWith(base)) fail("Extracted link escapes destination");
4858
+ }
4850
4859
  async function extractTar(file, dest) {
4851
4860
  const entries = [];
4852
4861
  await tar.t({ file, onReadEntry: (e) => entries.push({ name: e.path, size: e.size, type: { File: "file", Directory: "directory", SymbolicLink: "symlink", Link: "hardlink" }[e.type] || "unsupported", link: e.linkpath }) });
@@ -4856,10 +4865,7 @@ async function extractTar(file, dest) {
4856
4865
  const f = path.join(dest, e.name);
4857
4866
  fs.chmodSync(f, fs.statSync(f).mode & 511);
4858
4867
  }
4859
- for (const e of entries) if (e.link) {
4860
- const resolved = fs.realpathSync(path.join(dest, e.name));
4861
- if (!resolved.startsWith(path.resolve(dest) + path.sep)) fail("Extracted link escapes destination");
4862
- }
4868
+ checkExtractedLinks(entries, dest);
4863
4869
  }
4864
4870
  async function zipEntries(file) {
4865
4871
  return new Promise((resolve, reject) => yauzl.open(file, { lazyEntries: true, strictFileNames: true, validateEntrySizes: true }, (error, zip) => {
@@ -4931,7 +4937,7 @@ async function extractZip(file, dest) {
4931
4937
  fs.mkdirSync(path.dirname(out), { recursive: true });
4932
4938
  fs.symlinkSync(e.link, out);
4933
4939
  }
4934
- for (const e of entries) if (e.type === "symlink" && !fs.realpathSync(path.join(dest, e.name)).startsWith(path.resolve(dest) + path.sep)) fail("Extracted link escapes destination");
4940
+ checkExtractedLinks(entries, dest);
4935
4941
  }
4936
4942
  function trustedURL(value) {
4937
4943
  const u = new URL(value);
@@ -5029,7 +5035,7 @@ function readCurrent(root) {
5029
5035
  if (readJSON(path.join(root, ".spi-owned.json")).owner !== OWNER) fail("Not an sPi install");
5030
5036
  const current = readJSON(path.join(root, "current.json"));
5031
5037
  version(current.version);
5032
- if (!["linux-x64", "linux-arm64", "win32-x64", "darwin-arm64"].includes(current.target)) fail("Invalid install target");
5038
+ if (!["linux-x64", "linux-arm64", "win32-x64", "darwin-arm64", "darwin-x64"].includes(current.target)) fail("Invalid install target");
5033
5039
  if (current.directory !== "releases/" + current.version + "/" + current.target) fail("Invalid install record");
5034
5040
  safeName(current.entry);
5035
5041
  safeName(current.permissionExtension);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spi-agent-gui",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "sPi - Simple Pi Agent GUI installer and Pi launcher",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",