@aspectlylabs/mikka 0.0.117 → 0.0.119

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/cli.js CHANGED
@@ -4457,7 +4457,7 @@ import { join as join4 } from "node:path";
4457
4457
  // package.json
4458
4458
  var package_default = {
4459
4459
  name: "@mikka/daemon",
4460
- version: "0.0.117",
4460
+ version: "0.0.119",
4461
4461
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
4462
4462
  type: "module",
4463
4463
  private: true,
@@ -4517,7 +4517,7 @@ var package_default = {
4517
4517
  engines: {
4518
4518
  node: ">=24"
4519
4519
  },
4520
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
4520
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
4521
4521
  };
4522
4522
 
4523
4523
  // src/paths.ts
@@ -10867,8 +10867,8 @@ function createLocalSubscriptionRunner(host) {
10867
10867
  }
10868
10868
 
10869
10869
  // src/sandbox-tools.ts
10870
- import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync14, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, renameSync as renameSync3, rmSync as rmSync14, writeFileSync as writeFileSync8 } from "node:fs";
10871
- import { join as join25 } from "node:path";
10870
+ import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync14, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, readlinkSync as readlinkSync2, renameSync as renameSync3, rmSync as rmSync14, writeFileSync as writeFileSync8 } from "node:fs";
10871
+ import { dirname as dirname12, isAbsolute as isAbsolute7, join as join25 } from "node:path";
10872
10872
  import { execa as execa10 } from "execa";
10873
10873
 
10874
10874
  // src/path-search.ts
@@ -10944,11 +10944,20 @@ async function ensureSandboxTools(options) {
10944
10944
  if (missing.length < packages.length) log.info({ installed: packages.filter((name) => !missing.includes(name)) }, "sandbox tools installed");
10945
10945
  return missing;
10946
10946
  }
10947
+ function resolveUnpackedBinary(root, command) {
10948
+ let path = join25(root, "usr", "bin", command);
10949
+ for (let hops = 0; hops < 10; hops++) {
10950
+ if (!lstatSync8(path).isSymbolicLink()) return path;
10951
+ const target = readlinkSync2(path);
10952
+ path = isAbsolute7(target) ? join25(root, `.${target}`) : join25(dirname12(path), target);
10953
+ }
10954
+ throw new Error(`${command} resolves through too many symlinks`);
10955
+ }
10947
10956
  async function installTool(tool2, context) {
10948
10957
  const { work, dataDir, apt, run: run3 } = context;
10949
10958
  const root = join25(work, "root");
10950
10959
  await run3("dpkg-deb", ["-x", join25(work, debFile(work, tool2.package)), root], work);
10951
- const unpacked = join25(root, "usr", "bin", tool2.command);
10960
+ const unpacked = resolveUnpackedBinary(root, tool2.command);
10952
10961
  chmodSync2(unpacked, 493);
10953
10962
  const binDir = sandboxToolsDir(dataDir);
10954
10963
  try {
@@ -13216,7 +13225,7 @@ function fixedCandidateCheck(assignment) {
13216
13225
  // src/repositories.ts
13217
13226
  import { createHash as createHash7, randomUUID as randomUUID7 } from "node:crypto";
13218
13227
  import { existsSync as existsSync7, lstatSync as lstatSync9, mkdirSync as mkdirSync16, readdirSync as readdirSync8, realpathSync as realpathSync10, renameSync as renameSync4, rmSync as rmSync18 } from "node:fs";
13219
- import { dirname as dirname12, join as join29, resolve as resolve12 } from "node:path";
13228
+ import { dirname as dirname13, join as join29, resolve as resolve12 } from "node:path";
13220
13229
  import { setTimeout as delay2 } from "node:timers/promises";
13221
13230
  import { execa as execa14 } from "execa";
13222
13231
  import lockfile2 from "proper-lockfile";
@@ -13240,7 +13249,7 @@ var RepositoryCache = class {
13240
13249
  signal?.throwIfAborted();
13241
13250
  const { remoteUrl: remote } = normalizeRepository(remoteUrl, { allowFile: this.allowFile });
13242
13251
  const path = this.pathFor(remote);
13243
- this.ensureParents(dirname12(path));
13252
+ this.ensureParents(dirname13(path));
13244
13253
  const release = await this.lock(path, signal);
13245
13254
  try {
13246
13255
  return await withRepoConfig(path, () => this.update(path, remote, signal));
@@ -13338,7 +13347,7 @@ import {
13338
13347
  rmSync as rmSync19
13339
13348
  } from "node:fs";
13340
13349
  import { createRequire } from "node:module";
13341
- import { delimiter as delimiter3, dirname as dirname13, join as join30 } from "node:path";
13350
+ import { delimiter as delimiter3, dirname as dirname14, join as join30 } from "node:path";
13342
13351
  import { fileURLToPath as fileURLToPath3 } from "node:url";
13343
13352
  import { promisify as promisify6 } from "node:util";
13344
13353
  var exec3 = promisify6(execFile6);
@@ -13415,7 +13424,7 @@ async function createHostedBotRunner(host) {
13415
13424
  require2.resolve("@anthropic-ai/claude-agent-sdk")
13416
13425
  );
13417
13426
  claude ??= join30(
13418
- dirname13(
13427
+ dirname14(
13419
13428
  bundled.resolve(
13420
13429
  "@anthropic-ai/claude-agent-sdk-linux-x64/package.json"
13421
13430
  )
@@ -13706,7 +13715,7 @@ async function createHostedBotRunner(host) {
13706
13715
  const previous = readJson(ledger);
13707
13716
  if (existsSync8(ledger) && (!previous || JSON.stringify(previous.scope) !== JSON.stringify(scope) || typeof previous.sessionId !== "string"))
13708
13717
  throw unavailable3();
13709
- mkdirSync17(dirname13(ledger), { recursive: true, mode: 448 });
13718
+ mkdirSync17(dirname14(ledger), { recursive: true, mode: 448 });
13710
13719
  const record = async (sessionId) => {
13711
13720
  assertOpen();
13712
13721
  writeJsonAtomic(ledger, { scope, sessionId });
@@ -13810,7 +13819,7 @@ async function createHostedBotRunner(host) {
13810
13819
  `${MCP_SERVER_SCRIPT}:${MCP_SERVER_SCRIPT}:ro`,
13811
13820
  ...githubCli ? ["-v", `${githubCli}:/usr/local/bin/mikka-gh:ro`, "-v", `${GITHUB_CREDENTIAL_SCRIPT}:${GITHUB_CREDENTIAL_SCRIPT}:ro`] : [],
13812
13821
  "-v",
13813
- `${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
13822
+ `${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
13814
13823
  "-v",
13815
13824
  `${readyBroker.socket}:/run/mikka-native.sock:ro`,
13816
13825
  ...computerGrant ? [
package/client.js CHANGED
@@ -3719,7 +3719,7 @@ import { join } from "node:path";
3719
3719
  // package.json
3720
3720
  var package_default = {
3721
3721
  name: "@mikka/daemon",
3722
- version: "0.0.117",
3722
+ version: "0.0.119",
3723
3723
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
3724
3724
  type: "module",
3725
3725
  private: true,
@@ -3779,7 +3779,7 @@ var package_default = {
3779
3779
  engines: {
3780
3780
  node: ">=24"
3781
3781
  },
3782
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
3782
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
3783
3783
  };
3784
3784
 
3785
3785
  // src/paths.ts
package/http-link.js CHANGED
@@ -4118,7 +4118,7 @@ var InvalidIdError = class extends DaemonError {
4118
4118
  // package.json
4119
4119
  var package_default = {
4120
4120
  name: "@mikka/daemon",
4121
- version: "0.0.117",
4121
+ version: "0.0.119",
4122
4122
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
4123
4123
  type: "module",
4124
4124
  private: true,
@@ -4178,7 +4178,7 @@ var package_default = {
4178
4178
  engines: {
4179
4179
  node: ">=24"
4180
4180
  },
4181
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
4181
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
4182
4182
  };
4183
4183
 
4184
4184
  // src/paths.ts
package/login.js CHANGED
@@ -3726,7 +3726,7 @@ var ServerUnreachableError = class extends DaemonError {
3726
3726
  // package.json
3727
3727
  var package_default = {
3728
3728
  name: "@mikka/daemon",
3729
- version: "0.0.117",
3729
+ version: "0.0.119",
3730
3730
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
3731
3731
  type: "module",
3732
3732
  private: true,
@@ -3786,7 +3786,7 @@ var package_default = {
3786
3786
  engines: {
3787
3787
  node: ">=24"
3788
3788
  },
3789
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
3789
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
3790
3790
  };
3791
3791
 
3792
3792
  // src/paths.ts
package/main.js CHANGED
@@ -3773,7 +3773,7 @@ import { join as join5 } from "node:path";
3773
3773
  // package.json
3774
3774
  var package_default = {
3775
3775
  name: "@mikka/daemon",
3776
- version: "0.0.117",
3776
+ version: "0.0.119",
3777
3777
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
3778
3778
  type: "module",
3779
3779
  private: true,
@@ -3833,7 +3833,7 @@ var package_default = {
3833
3833
  engines: {
3834
3834
  node: ">=24"
3835
3835
  },
3836
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
3836
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
3837
3837
  };
3838
3838
 
3839
3839
  // src/paths.ts
@@ -9777,8 +9777,8 @@ function createLocalSubscriptionRunner(host) {
9777
9777
  }
9778
9778
 
9779
9779
  // src/sandbox-tools.ts
9780
- import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync13, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, renameSync as renameSync3, rmSync as rmSync13, writeFileSync as writeFileSync8 } from "node:fs";
9781
- import { join as join24 } from "node:path";
9780
+ import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync13, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, readlinkSync as readlinkSync2, renameSync as renameSync3, rmSync as rmSync13, writeFileSync as writeFileSync8 } from "node:fs";
9781
+ import { dirname as dirname12, isAbsolute as isAbsolute7, join as join24 } from "node:path";
9782
9782
  import { execa as execa10 } from "execa";
9783
9783
 
9784
9784
  // src/path-search.ts
@@ -9854,11 +9854,20 @@ async function ensureSandboxTools(options) {
9854
9854
  if (missing.length < packages.length) log.info({ installed: packages.filter((name) => !missing.includes(name)) }, "sandbox tools installed");
9855
9855
  return missing;
9856
9856
  }
9857
+ function resolveUnpackedBinary(root, command) {
9858
+ let path = join24(root, "usr", "bin", command);
9859
+ for (let hops = 0; hops < 10; hops++) {
9860
+ if (!lstatSync8(path).isSymbolicLink()) return path;
9861
+ const target = readlinkSync2(path);
9862
+ path = isAbsolute7(target) ? join24(root, `.${target}`) : join24(dirname12(path), target);
9863
+ }
9864
+ throw new Error(`${command} resolves through too many symlinks`);
9865
+ }
9857
9866
  async function installTool(tool2, context) {
9858
9867
  const { work, dataDir, apt, run: run3 } = context;
9859
9868
  const root = join24(work, "root");
9860
9869
  await run3("dpkg-deb", ["-x", join24(work, debFile(work, tool2.package)), root], work);
9861
- const unpacked = join24(root, "usr", "bin", tool2.command);
9870
+ const unpacked = resolveUnpackedBinary(root, tool2.command);
9862
9871
  chmodSync2(unpacked, 493);
9863
9872
  const binDir = sandboxToolsDir(dataDir);
9864
9873
  try {
@@ -12291,7 +12300,7 @@ var SessionRejectedError = class extends DaemonError {
12291
12300
  // src/repositories.ts
12292
12301
  import { createHash as createHash7, randomUUID as randomUUID6 } from "node:crypto";
12293
12302
  import { existsSync as existsSync7, lstatSync as lstatSync9, mkdirSync as mkdirSync16, readdirSync as readdirSync8, realpathSync as realpathSync10, renameSync as renameSync4, rmSync as rmSync18 } from "node:fs";
12294
- import { dirname as dirname12, join as join29, resolve as resolve12 } from "node:path";
12303
+ import { dirname as dirname13, join as join29, resolve as resolve12 } from "node:path";
12295
12304
  import { setTimeout as delay2 } from "node:timers/promises";
12296
12305
  import { execa as execa14 } from "execa";
12297
12306
  import lockfile2 from "proper-lockfile";
@@ -12315,7 +12324,7 @@ var RepositoryCache = class {
12315
12324
  signal?.throwIfAborted();
12316
12325
  const { remoteUrl: remote } = normalizeRepository(remoteUrl, { allowFile: this.allowFile });
12317
12326
  const path = this.pathFor(remote);
12318
- this.ensureParents(dirname12(path));
12327
+ this.ensureParents(dirname13(path));
12319
12328
  const release = await this.lock(path, signal);
12320
12329
  try {
12321
12330
  return await withRepoConfig(path, () => this.update(path, remote, signal));
@@ -12413,7 +12422,7 @@ import {
12413
12422
  rmSync as rmSync19
12414
12423
  } from "node:fs";
12415
12424
  import { createRequire } from "node:module";
12416
- import { delimiter as delimiter3, dirname as dirname13, join as join30 } from "node:path";
12425
+ import { delimiter as delimiter3, dirname as dirname14, join as join30 } from "node:path";
12417
12426
  import { fileURLToPath as fileURLToPath3 } from "node:url";
12418
12427
  import { promisify as promisify6 } from "node:util";
12419
12428
  var exec3 = promisify6(execFile6);
@@ -12490,7 +12499,7 @@ async function createHostedBotRunner(host) {
12490
12499
  require2.resolve("@anthropic-ai/claude-agent-sdk")
12491
12500
  );
12492
12501
  claude ??= join30(
12493
- dirname13(
12502
+ dirname14(
12494
12503
  bundled.resolve(
12495
12504
  "@anthropic-ai/claude-agent-sdk-linux-x64/package.json"
12496
12505
  )
@@ -12781,7 +12790,7 @@ async function createHostedBotRunner(host) {
12781
12790
  const previous = readJson(ledger);
12782
12791
  if (existsSync8(ledger) && (!previous || JSON.stringify(previous.scope) !== JSON.stringify(scope) || typeof previous.sessionId !== "string"))
12783
12792
  throw unavailable3();
12784
- mkdirSync17(dirname13(ledger), { recursive: true, mode: 448 });
12793
+ mkdirSync17(dirname14(ledger), { recursive: true, mode: 448 });
12785
12794
  const record = async (sessionId) => {
12786
12795
  assertOpen();
12787
12796
  writeJsonAtomic(ledger, { scope, sessionId });
@@ -12885,7 +12894,7 @@ async function createHostedBotRunner(host) {
12885
12894
  `${MCP_SERVER_SCRIPT}:${MCP_SERVER_SCRIPT}:ro`,
12886
12895
  ...githubCli ? ["-v", `${githubCli}:/usr/local/bin/mikka-gh:ro`, "-v", `${GITHUB_CREDENTIAL_SCRIPT}:${GITHUB_CREDENTIAL_SCRIPT}:ro`] : [],
12887
12896
  "-v",
12888
- `${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
12897
+ `${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
12889
12898
  "-v",
12890
12899
  `${readyBroker.socket}:/run/mikka-native.sock:ro`,
12891
12900
  ...computerGrant ? [
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "sourceSha": "6d4adf35a8c0254f3595dcfc4c49a185f012c379",
3
+ "sourceSha": "3692a730e643f67944d04d0548e43a5a3f98e243",
4
4
  "repository": "alexj11324/Mikka",
5
- "buildRunId": "41265538418",
5
+ "buildRunId": "41266025724",
6
6
  "buildKind": "github-actions-main",
7
7
  "sourceLockSha256": "c99f1e4f641d8e004cfe807653478e10f91e53fcf47102add5f4c154cdc1cb57",
8
- "createdAt": "2026-11-01T02:34:35.402Z",
8
+ "createdAt": "2026-11-01T02:49:18.924Z",
9
9
  "sbom": "sbom.cdx.json",
10
10
  "files": [
11
11
  {
@@ -40,13 +40,13 @@
40
40
  },
41
41
  {
42
42
  "path": "cli.js",
43
- "size": 631776,
44
- "sha256": "051102acf03dd76a3333012ac03aa38c2ea5e3c26ebf3b906ae230479efcfe79"
43
+ "size": 632263,
44
+ "sha256": "e73ef73d6be71ef7024523ab66b76e2f2d9980e10d479e10f11f5adff662673a"
45
45
  },
46
46
  {
47
47
  "path": "client.js",
48
48
  "size": 139865,
49
- "sha256": "84583578fadb5bb65ccc7681eeabe5d602cd24a12a01a936412c032ca96b5680"
49
+ "sha256": "df1b10cbfc91c933829f7c7a857865be26010bf368df023782c2c1245dd9bfe0"
50
50
  },
51
51
  {
52
52
  "path": "computer/driver.mjs",
@@ -171,7 +171,7 @@
171
171
  {
172
172
  "path": "http-link.js",
173
173
  "size": 180835,
174
- "sha256": "faab87572b3018c6ab19be7aea642900d29af0526b8c44daeb87035213d5bcc0"
174
+ "sha256": "bb3da5fffe03bdce7500b0031219be4b7a12467064b7c658e17c227485cde888"
175
175
  },
176
176
  {
177
177
  "path": "log.js",
@@ -181,12 +181,12 @@
181
181
  {
182
182
  "path": "login.js",
183
183
  "size": 144321,
184
- "sha256": "29e616b2aec3f8554e9075638d3a3cc6bf9e33e30c79186eab7f4e586d272a27"
184
+ "sha256": "c4237d0d1383b4ea330941b5f07ac749d5404f22ba469b3f1ff4e7d2b2a4b15f"
185
185
  },
186
186
  {
187
187
  "path": "main.js",
188
- "size": 577407,
189
- "sha256": "4b51c368d222a3e148b9fd583dca8dd370a4616b2f54af9d5634758be0e10d54"
188
+ "size": 577894,
189
+ "sha256": "a68124d1e69cb2f3fcae5919d32fe763edb1a7c08d277fe284a6e8fe2a00d1a3"
190
190
  },
191
191
  {
192
192
  "path": "mikka-mcp.mjs",
@@ -195,23 +195,23 @@
195
195
  },
196
196
  {
197
197
  "path": "mikka.js",
198
- "size": 631792,
199
- "sha256": "149bdb18db64b0c8df1e1f147f7422c5a6bb5480db624a6f5fbdb0fe0514e7f0"
198
+ "size": 632279,
199
+ "sha256": "3fc33a076c51450297d5f7f5a24a2707823bf9754ced17c2e3951a583c75d9b8"
200
200
  },
201
201
  {
202
202
  "path": "npm-shrinkwrap.json",
203
203
  "size": 78117,
204
- "sha256": "364752a4315949afe5d937cf4fd347c9e1f54bf04c0cb37bcc75561d657232bd"
204
+ "sha256": "8aadd7f5707ed7e997f23734e4e6ea23f9bcfe044d238d9e7087cc15cf1fccbb"
205
205
  },
206
206
  {
207
207
  "path": "package.json",
208
208
  "size": 1247,
209
- "sha256": "fb632ac7727f5fd4ff6d601a860d541a881d3c827cab203a01796bfd94ed7623"
209
+ "sha256": "301744448c0eef05a32967b2eff0043eacb3ec1215da01bd39aeff5355f0be49"
210
210
  },
211
211
  {
212
212
  "path": "paths.js",
213
213
  "size": 4138,
214
- "sha256": "3e474820d0eb036912a7450cea2c85738e523d02c75fd8cc1c279d7d7cf4ad44"
214
+ "sha256": "0e5fcd691eed68be8efe483438c585e97e84b7bb98c6a6eb56d093d741f77fec"
215
215
  },
216
216
  {
217
217
  "path": "sandbox.js",
@@ -221,7 +221,7 @@
221
221
  {
222
222
  "path": "sbom.cdx.json",
223
223
  "size": 144314,
224
- "sha256": "32932df4994cd8b39f283221f04298f996d4d0bed5fc6c9aead1179833c5cbeb"
224
+ "sha256": "90c511e1d01e4fa9e7ef6ee953857a218d8e6aaadaa3b7535474e8086496e4a6"
225
225
  }
226
226
  ]
227
227
  }
package/mikka.js CHANGED
@@ -4458,7 +4458,7 @@ import { join as join4 } from "node:path";
4458
4458
  // package.json
4459
4459
  var package_default = {
4460
4460
  name: "@mikka/daemon",
4461
- version: "0.0.117",
4461
+ version: "0.0.119",
4462
4462
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
4463
4463
  type: "module",
4464
4464
  private: true,
@@ -4518,7 +4518,7 @@ var package_default = {
4518
4518
  engines: {
4519
4519
  node: ">=24"
4520
4520
  },
4521
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
4521
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
4522
4522
  };
4523
4523
 
4524
4524
  // src/paths.ts
@@ -10868,8 +10868,8 @@ function createLocalSubscriptionRunner(host) {
10868
10868
  }
10869
10869
 
10870
10870
  // src/sandbox-tools.ts
10871
- import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync14, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, renameSync as renameSync3, rmSync as rmSync14, writeFileSync as writeFileSync8 } from "node:fs";
10872
- import { join as join25 } from "node:path";
10871
+ import { chmodSync as chmodSync2, existsSync as existsSync6, lstatSync as lstatSync8, mkdirSync as mkdirSync14, mkdtempSync as mkdtempSync6, readdirSync as readdirSync6, readlinkSync as readlinkSync2, renameSync as renameSync3, rmSync as rmSync14, writeFileSync as writeFileSync8 } from "node:fs";
10872
+ import { dirname as dirname12, isAbsolute as isAbsolute7, join as join25 } from "node:path";
10873
10873
  import { execa as execa10 } from "execa";
10874
10874
 
10875
10875
  // src/path-search.ts
@@ -10945,11 +10945,20 @@ async function ensureSandboxTools(options) {
10945
10945
  if (missing.length < packages.length) log.info({ installed: packages.filter((name) => !missing.includes(name)) }, "sandbox tools installed");
10946
10946
  return missing;
10947
10947
  }
10948
+ function resolveUnpackedBinary(root, command) {
10949
+ let path = join25(root, "usr", "bin", command);
10950
+ for (let hops = 0; hops < 10; hops++) {
10951
+ if (!lstatSync8(path).isSymbolicLink()) return path;
10952
+ const target = readlinkSync2(path);
10953
+ path = isAbsolute7(target) ? join25(root, `.${target}`) : join25(dirname12(path), target);
10954
+ }
10955
+ throw new Error(`${command} resolves through too many symlinks`);
10956
+ }
10948
10957
  async function installTool(tool2, context) {
10949
10958
  const { work, dataDir, apt, run: run3 } = context;
10950
10959
  const root = join25(work, "root");
10951
10960
  await run3("dpkg-deb", ["-x", join25(work, debFile(work, tool2.package)), root], work);
10952
- const unpacked = join25(root, "usr", "bin", tool2.command);
10961
+ const unpacked = resolveUnpackedBinary(root, tool2.command);
10953
10962
  chmodSync2(unpacked, 493);
10954
10963
  const binDir = sandboxToolsDir(dataDir);
10955
10964
  try {
@@ -13217,7 +13226,7 @@ function fixedCandidateCheck(assignment) {
13217
13226
  // src/repositories.ts
13218
13227
  import { createHash as createHash7, randomUUID as randomUUID7 } from "node:crypto";
13219
13228
  import { existsSync as existsSync7, lstatSync as lstatSync9, mkdirSync as mkdirSync16, readdirSync as readdirSync8, realpathSync as realpathSync10, renameSync as renameSync4, rmSync as rmSync18 } from "node:fs";
13220
- import { dirname as dirname12, join as join29, resolve as resolve12 } from "node:path";
13229
+ import { dirname as dirname13, join as join29, resolve as resolve12 } from "node:path";
13221
13230
  import { setTimeout as delay2 } from "node:timers/promises";
13222
13231
  import { execa as execa14 } from "execa";
13223
13232
  import lockfile2 from "proper-lockfile";
@@ -13241,7 +13250,7 @@ var RepositoryCache = class {
13241
13250
  signal?.throwIfAborted();
13242
13251
  const { remoteUrl: remote } = normalizeRepository(remoteUrl, { allowFile: this.allowFile });
13243
13252
  const path = this.pathFor(remote);
13244
- this.ensureParents(dirname12(path));
13253
+ this.ensureParents(dirname13(path));
13245
13254
  const release = await this.lock(path, signal);
13246
13255
  try {
13247
13256
  return await withRepoConfig(path, () => this.update(path, remote, signal));
@@ -13339,7 +13348,7 @@ import {
13339
13348
  rmSync as rmSync19
13340
13349
  } from "node:fs";
13341
13350
  import { createRequire } from "node:module";
13342
- import { delimiter as delimiter3, dirname as dirname13, join as join30 } from "node:path";
13351
+ import { delimiter as delimiter3, dirname as dirname14, join as join30 } from "node:path";
13343
13352
  import { fileURLToPath as fileURLToPath3 } from "node:url";
13344
13353
  import { promisify as promisify6 } from "node:util";
13345
13354
  var exec3 = promisify6(execFile6);
@@ -13416,7 +13425,7 @@ async function createHostedBotRunner(host) {
13416
13425
  require2.resolve("@anthropic-ai/claude-agent-sdk")
13417
13426
  );
13418
13427
  claude ??= join30(
13419
- dirname13(
13428
+ dirname14(
13420
13429
  bundled.resolve(
13421
13430
  "@anthropic-ai/claude-agent-sdk-linux-x64/package.json"
13422
13431
  )
@@ -13707,7 +13716,7 @@ async function createHostedBotRunner(host) {
13707
13716
  const previous = readJson(ledger);
13708
13717
  if (existsSync8(ledger) && (!previous || JSON.stringify(previous.scope) !== JSON.stringify(scope) || typeof previous.sessionId !== "string"))
13709
13718
  throw unavailable3();
13710
- mkdirSync17(dirname13(ledger), { recursive: true, mode: 448 });
13719
+ mkdirSync17(dirname14(ledger), { recursive: true, mode: 448 });
13711
13720
  const record = async (sessionId) => {
13712
13721
  assertOpen();
13713
13722
  writeJsonAtomic(ledger, { scope, sessionId });
@@ -13811,7 +13820,7 @@ async function createHostedBotRunner(host) {
13811
13820
  `${MCP_SERVER_SCRIPT}:${MCP_SERVER_SCRIPT}:ro`,
13812
13821
  ...githubCli ? ["-v", `${githubCli}:/usr/local/bin/mikka-gh:ro`, "-v", `${GITHUB_CREDENTIAL_SCRIPT}:${GITHUB_CREDENTIAL_SCRIPT}:ro`] : [],
13813
13822
  "-v",
13814
- `${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname13(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
13823
+ `${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:${join30(dirname14(MCP_SERVER_SCRIPT), "capture-copy.mjs")}:ro`,
13815
13824
  "-v",
13816
13825
  `${readyBroker.socket}:/run/mikka-native.sock:ro`,
13817
13826
  ...computerGrant ? [
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@aspectlylabs/mikka",
3
- "version": "0.0.117",
3
+ "version": "0.0.119",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@aspectlylabs/mikka",
9
- "version": "0.0.117",
9
+ "version": "0.0.119",
10
10
  "license": "AGPL-3.0-only",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "1.9.0",
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@aspectlylabs/mikka",
3
- "version": "0.0.117",
3
+ "version": "0.0.119",
4
4
  "description": "Local Mikka daemon: runs agents through the user's own CLIs",
5
- "gitHead": "6d4adf35a8c0254f3595dcfc4c49a185f012c379",
5
+ "gitHead": "3692a730e643f67944d04d0548e43a5a3f98e243",
6
6
  "type": "module",
7
7
  "private": false,
8
8
  "license": "AGPL-3.0-only",
package/paths.js CHANGED
@@ -6,7 +6,7 @@ import { join } from "node:path";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "@mikka/daemon",
9
- version: "0.0.117",
9
+ version: "0.0.119",
10
10
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
11
11
  type: "module",
12
12
  private: true,
@@ -66,7 +66,7 @@ var package_default = {
66
66
  engines: {
67
67
  node: ">=24"
68
68
  },
69
- gitHead: "6d4adf35a8c0254f3595dcfc4c49a185f012c379"
69
+ gitHead: "3692a730e643f67944d04d0548e43a5a3f98e243"
70
70
  };
71
71
 
72
72
  // src/paths.ts
package/sbom.cdx.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json",
3
3
  "bomFormat": "CycloneDX",
4
4
  "specVersion": "1.5",
5
- "serialNumber": "urn:uuid:4c66c6b0-7a3e-4fdb-aff0-ec6e51e52ffa",
5
+ "serialNumber": "urn:uuid:86569a0b-0727-4370-9edb-6bbf794f8b01",
6
6
  "version": 1,
7
7
  "metadata": {
8
- "timestamp": "2026-11-01T02:34:34.441Z",
8
+ "timestamp": "2026-11-01T02:49:18.210Z",
9
9
  "lifecycles": [
10
10
  {
11
11
  "phase": "pre-build"
@@ -19,13 +19,13 @@
19
19
  }
20
20
  ],
21
21
  "component": {
22
- "bom-ref": "@aspectlylabs/mikka@0.0.117",
22
+ "bom-ref": "@aspectlylabs/mikka@0.0.119",
23
23
  "type": "library",
24
- "name": ".retained-build-0geLcc",
25
- "version": "0.0.117",
24
+ "name": ".retained-build-otz6jF",
25
+ "version": "0.0.119",
26
26
  "scope": "required",
27
27
  "description": "Local Mikka daemon: runs agents through the user's own CLIs",
28
- "purl": "pkg:npm/%40aspectlylabs/mikka@0.0.117",
28
+ "purl": "pkg:npm/%40aspectlylabs/mikka@0.0.119",
29
29
  "properties": [],
30
30
  "externalReferences": [
31
31
  {
@@ -4627,7 +4627,7 @@
4627
4627
  ],
4628
4628
  "dependencies": [
4629
4629
  {
4630
- "ref": "@aspectlylabs/mikka@0.0.117",
4630
+ "ref": "@aspectlylabs/mikka@0.0.119",
4631
4631
  "dependsOn": [
4632
4632
  "@agentclientprotocol/sdk@1.9.0",
4633
4633
  "@anthropic-ai/claude-agent-sdk@0.3.305",