@aspectlylabs/mikka 0.0.27 → 0.0.46

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/main.js CHANGED
@@ -3379,7 +3379,7 @@ import { z as z4 } from "zod";
3379
3379
  import { z as z3 } from "zod";
3380
3380
  var skillArtifactRefSchema = z3.object({
3381
3381
  schemaVersion: z3.literal(1),
3382
- registryId: z3.literal("mikka-builtin"),
3382
+ registryId: z3.enum(["mikka-builtin", "mikka-team"]),
3383
3383
  skillId: z3.uuid(),
3384
3384
  versionId: z3.uuid(),
3385
3385
  format: z3.literal("single-skill-md-v1"),
@@ -3501,7 +3501,7 @@ import { join as join5 } from "node:path";
3501
3501
  // package.json
3502
3502
  var package_default = {
3503
3503
  name: "@mikka/daemon",
3504
- version: "0.0.27",
3504
+ version: "0.0.46",
3505
3505
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
3506
3506
  type: "module",
3507
3507
  private: true,
@@ -3560,7 +3560,7 @@ var package_default = {
3560
3560
  engines: {
3561
3561
  node: ">=24"
3562
3562
  },
3563
- gitHead: "a703b0efc59761627d740012d1c2f762bf218b25"
3563
+ gitHead: "f8a9004cc92c7cec4e822e0463123212b9b53025"
3564
3564
  };
3565
3565
 
3566
3566
  // src/paths.ts
@@ -3720,8 +3720,8 @@ var READ_ONLY_DENIED = [
3720
3720
  "git_push",
3721
3721
  "computer_use"
3722
3722
  ];
3723
- var runPolicySchema = z5.object({
3724
- permissions: z5.object({
3723
+ var runPolicySchema = z5.strictObject({
3724
+ permissions: z5.strictObject({
3725
3725
  install_dependency: z5.enum(PERMISSION_DECISIONS),
3726
3726
  write_outside_repo: z5.enum(PERMISSION_DECISIONS),
3727
3727
  git_push: z5.enum(PERMISSION_DECISIONS),
@@ -4264,6 +4264,14 @@ var harnessInfoSchema = z11.object({
4264
4264
  harness: harnessSchema,
4265
4265
  installed: z11.boolean(),
4266
4266
  models: z11.array(z11.string().trim().min(1).max(128)).max(500).optional(),
4267
+ modelSlots: z11.array(
4268
+ z11.object({
4269
+ slot: z11.string().trim().min(1).max(128).refine((v2) => v2 !== "auto"),
4270
+ model: z11.string().trim().min(1).max(128),
4271
+ name: z11.string().trim().min(1).max(200)
4272
+ })
4273
+ ).max(500).optional(),
4274
+ defaultModelSlot: z11.string().trim().min(1).max(128).optional(),
4267
4275
  /** Deprecated (#312, 2026-10-27): could host the native Coordinator. The server keeps that runtime switched off. */
4268
4276
  coordinator: z11.boolean().optional(),
4269
4277
  /** Set only by a runner with an isolated, owner-bound subscription broker. */
@@ -8839,7 +8847,54 @@ import { execa as execa9 } from "execa";
8839
8847
 
8840
8848
  // src/harness-models.ts
8841
8849
  import { execa as execa8 } from "execa";
8842
- async function detectHarnessModels(harness, binary) {
8850
+ function claudeDiscoveryEnv(host = process.env) {
8851
+ const env = buildChildEnv({ host });
8852
+ for (const slot of ["OPUS", "SONNET", "HAIKU"]) {
8853
+ const key2 = `ANTHROPIC_DEFAULT_${slot}_MODEL`;
8854
+ const value = host[key2];
8855
+ if (value && /^[a-zA-Z0-9._:/-]{1,128}$/.test(value)) env[key2] = value;
8856
+ }
8857
+ return env;
8858
+ }
8859
+ function claudeModelCatalogue(rows) {
8860
+ const modelSlots = rows.filter((r) => r.resolvedModel && r.value !== "auto").map((r) => ({
8861
+ slot: r.value,
8862
+ model: r.resolvedModel,
8863
+ name: r.resolvedModel
8864
+ }));
8865
+ return {
8866
+ models: modelSlots.map((r) => r.slot),
8867
+ modelSlots,
8868
+ ...modelSlots.some((r) => r.slot === "opus") ? { defaultModelSlot: "opus" } : {}
8869
+ };
8870
+ }
8871
+ async function detectHarnessCatalogue(harness, binary) {
8872
+ if (harness === "claude_code") {
8873
+ const { query: query3 } = await import("@anthropic-ai/claude-agent-sdk");
8874
+ const controller = new AbortController();
8875
+ const timer = setTimeout(() => controller.abort(), 5e3);
8876
+ const session = query3({
8877
+ prompt: (async function* () {
8878
+ })(),
8879
+ options: {
8880
+ pathToClaudeCodeExecutable: binary,
8881
+ env: claudeDiscoveryEnv(),
8882
+ abortController: controller,
8883
+ settingSources: ["user", "project", "local"]
8884
+ }
8885
+ });
8886
+ try {
8887
+ return claudeModelCatalogue(await session.supportedModels());
8888
+ } catch {
8889
+ return {};
8890
+ } finally {
8891
+ clearTimeout(timer);
8892
+ session.close();
8893
+ }
8894
+ }
8895
+ return await discover(harness, binary);
8896
+ }
8897
+ async function discover(harness, binary) {
8843
8898
  const options = {
8844
8899
  env: buildChildEnv(),
8845
8900
  extendEnv: false,
@@ -8855,9 +8910,9 @@ async function detectHarnessModels(harness, binary) {
8855
8910
  );
8856
8911
  return match ? [match[1]] : [];
8857
8912
  });
8858
- return models.length ? [...new Set(models)].slice(0, 500) : void 0;
8913
+ return { models: [...new Set(models)].slice(0, 500) };
8859
8914
  }
8860
- if (harness !== "codex") return void 0;
8915
+ if (harness !== "codex") return {};
8861
8916
  const child = execa8(binary, ["app-server"], { ...options, stdin: "pipe" });
8862
8917
  const completion = child.catch(() => void 0);
8863
8918
  child.stdin.write(
@@ -8871,7 +8926,7 @@ async function detectHarnessModels(harness, binary) {
8871
8926
  try {
8872
8927
  for await (const chunk of child.stdout) {
8873
8928
  pending += chunk.toString();
8874
- if (pending.length > 1e6) return void 0;
8929
+ if (pending.length > 1e6) return {};
8875
8930
  let newline;
8876
8931
  while ((newline = pending.indexOf("\n")) >= 0) {
8877
8932
  const line = pending.slice(0, newline);
@@ -8896,14 +8951,31 @@ async function detectHarnessModels(harness, binary) {
8896
8951
  }
8897
8952
  if (reply.id === 2) {
8898
8953
  const rows = reply.result?.data;
8899
- if (!Array.isArray(rows)) return void 0;
8900
- return [
8901
- ...new Set(
8902
- rows.flatMap(
8903
- (row) => typeof row.model === "string" && row.model.length <= 128 ? [row.model] : []
8904
- )
8905
- )
8906
- ];
8954
+ if (!Array.isArray(rows)) return {};
8955
+ const models = rows.filter(
8956
+ (r) => typeof r.model === "string" && r.model.length <= 128
8957
+ );
8958
+ const modelSlots = models.map(
8959
+ (r) => ({
8960
+ slot: r.model,
8961
+ model: r.model,
8962
+ name: r.displayName ?? r.model
8963
+ })
8964
+ );
8965
+ const selected = models.find(
8966
+ (r) => r.isDefault
8967
+ );
8968
+ if (selected)
8969
+ modelSlots.push({
8970
+ slot: "default",
8971
+ model: selected.model,
8972
+ name: selected.displayName ?? selected.model
8973
+ });
8974
+ return {
8975
+ models: models.map((r) => r.model),
8976
+ modelSlots,
8977
+ ...selected ? { defaultModelSlot: "default" } : {}
8978
+ };
8907
8979
  }
8908
8980
  }
8909
8981
  }
@@ -8913,7 +8985,7 @@ async function detectHarnessModels(harness, binary) {
8913
8985
  }
8914
8986
  } catch {
8915
8987
  }
8916
- return void 0;
8988
+ return {};
8917
8989
  }
8918
8990
 
8919
8991
  // src/harnesses.ts
@@ -8943,8 +9015,8 @@ async function detectHarnesses() {
8943
9015
  for (const binary of HARNESS_BINARIES[harness]) {
8944
9016
  const version = await versionOf(binary);
8945
9017
  if (version) {
8946
- const models = await detectHarnessModels(harness, binary);
8947
- return { harness, installed: true, version, ...models?.length ? { models } : {} };
9018
+ const catalogue = await detectHarnessCatalogue(harness, binary);
9019
+ return { harness, installed: true, version, ...catalogue };
8948
9020
  }
8949
9021
  }
8950
9022
  return { harness, installed: false, version: null };
@@ -11622,6 +11694,11 @@ var RunSupervisor = class {
11622
11694
  verifySkillAssignment(assignment);
11623
11695
  if (assignment.skillReceipt && (this.leases.get(runId) ?? 0) <= Date.now())
11624
11696
  throw new Error("Receipted Skill assignment requires a current server lease");
11697
+ if (assignment.skillReceipt?.artifact.registryId === "mikka-team") {
11698
+ if (!this.deps.revalidateSkillAssignment) throw new Error("Current team Skill authorization unavailable");
11699
+ const current = await this.deps.revalidateSkillAssignment(assignment);
11700
+ this.leases.set(runId, Date.parse(verifySkillResume(assignment, current)));
11701
+ }
11625
11702
  const adapter = this.adapterFor(runId);
11626
11703
  if (assignment.requireSessionResume && entry.questionResumeState === "starting")
11627
11704
  throw new Error(
@@ -12111,7 +12188,7 @@ var RepositoryCache = class {
12111
12188
  "-c",
12112
12189
  `protocol.file.allow=${this.allowFile ? "always" : "never"}`,
12113
12190
  ...args
12114
- ], { cwd, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, stdin: "ignore", timeout: FETCH_TIMEOUT_MS, cancelSignal: signal });
12191
+ ], { cwd, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, stdin: "ignore", timeout: FETCH_TIMEOUT_MS, cancelSignal: signal, killDescendants: true });
12115
12192
  if (!existsSync5(path)) {
12116
12193
  const temporary = `${path}.clone-${randomUUID6()}`;
12117
12194
  try {
@@ -13154,7 +13231,7 @@ function driverArguments(input, platform3 = process.platform) {
13154
13231
  scope: "desktop",
13155
13232
  ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" },
13156
13233
  delivery_mode: "foreground"
13157
- } : call.name === "press_key" ? { ...call.arguments, scope: "desktop", delivery_mode: "foreground" } : call.name === "scroll" ? { ...call.arguments, scope: "desktop", ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" }, delivery_mode: "foreground" } : call.arguments;
13234
+ } : ["type_text", "press_key"].includes(call.name) ? { ...call.arguments, scope: "desktop", delivery_mode: "foreground" } : call.name === "scroll" ? { ...call.arguments, scope: "desktop", ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" }, delivery_mode: "foreground" } : call.arguments;
13158
13235
  }
13159
13236
  async function executeDriver(driver, input, display, leaseGuard, assertLive = () => {
13160
13237
  }, beforeAction) {
@@ -0,0 +1,202 @@
1
+ {
2
+ "version": 1,
3
+ "sourceSha": "f8a9004cc92c7cec4e822e0463123212b9b53025",
4
+ "repository": "alexj11324/Mikka",
5
+ "buildRunId": "41201591812",
6
+ "buildKind": "github-actions-main",
7
+ "sourceLockSha256": "333de14ab33e455ec8a3a699f59b49d7a125caebb37d557cc6cfa5024f0c15f7",
8
+ "createdAt": "2026-10-31T12:34:48.273Z",
9
+ "sbom": "sbom.cdx.json",
10
+ "files": [
11
+ {
12
+ "path": "LICENSE",
13
+ "size": 34524,
14
+ "sha256": "8d56b405468aad11f87ab5763f901e276e08d9646ff5c8481b1762b6b789e9ed"
15
+ },
16
+ {
17
+ "path": "README.md",
18
+ "size": 3995,
19
+ "sha256": "f6446feca4615bd13440b1a8886bf2e05701690d9b2bc519f829447b2a318090"
20
+ },
21
+ {
22
+ "path": "THIRD_PARTY_NOTICES.md",
23
+ "size": 3272,
24
+ "sha256": "acd67409898d00636332e5d9cdf394cd9de89a54a7179d9b419c099050261423"
25
+ },
26
+ {
27
+ "path": "agents/native-container.mjs",
28
+ "size": 7256,
29
+ "sha256": "fcf0f4a3f14d13c9444cdb63b62d42c96321b77a7991593cbdfffcb41b91352a"
30
+ },
31
+ {
32
+ "path": "agents/native-egress.mjs",
33
+ "size": 2452,
34
+ "sha256": "a69945a93207a06d4f639d42526cfe7da12a55f744f2d739525ef9ad9614ee4a"
35
+ },
36
+ {
37
+ "path": "cli.js",
38
+ "size": 607857,
39
+ "sha256": "393ec8425028a41a5d4cd8841ee2ceb120d7f4cbb2b7f59a7e233f2acebae471"
40
+ },
41
+ {
42
+ "path": "client.js",
43
+ "size": 136857,
44
+ "sha256": "980edbcb824d45689cbb220bfc8b3b2de3d5261ed774e651bb82ac68b78f84cd"
45
+ },
46
+ {
47
+ "path": "computer/driver.mjs",
48
+ "size": 12788,
49
+ "sha256": "ce40e50779ef36e3f5f333b1315e7c53c4746f5ac60c0ffa4aae16a03bcf39ad"
50
+ },
51
+ {
52
+ "path": "computer/proxy.mjs",
53
+ "size": 5818,
54
+ "sha256": "0cd26f3ba714defc2cc768f640f763db2fdc6dafca9ff48c8cd6e7bae7aed268"
55
+ },
56
+ {
57
+ "path": "coordinator.js",
58
+ "size": 14485,
59
+ "sha256": "3d3faf7f3e4447a14153870a20ff65993f45d1d0f84950fae171f905e7fa3bcc"
60
+ },
61
+ {
62
+ "path": "env.js",
63
+ "size": 998,
64
+ "sha256": "199394a5509538b90e44304ffa1a3b7f6bd5899632d95446160648affdeff014"
65
+ },
66
+ {
67
+ "path": "fixtures/ask.jsonl",
68
+ "size": 548,
69
+ "sha256": "d6f8ee41929b1ddb40f0f8c4c291605f0002985022d84eaf9d4ffdd3475ba603"
70
+ },
71
+ {
72
+ "path": "fixtures/blocked-question.jsonl",
73
+ "size": 357,
74
+ "sha256": "1a359b47e2721f2150fb2600a0df0074a8e5d27c84c90680f8de35ec878cc931"
75
+ },
76
+ {
77
+ "path": "fixtures/check-pass.jsonl",
78
+ "size": 369,
79
+ "sha256": "634e4bc2daf17b9530c41710e35ceb71d65abe4e0b39a3d68c018e49887774c8"
80
+ },
81
+ {
82
+ "path": "fixtures/crash.jsonl",
83
+ "size": 460,
84
+ "sha256": "78c534722c94e1703415253aa32a9d83e894821cf2cdc21b5d9b123a0becb893"
85
+ },
86
+ {
87
+ "path": "fixtures/failure.jsonl",
88
+ "size": 668,
89
+ "sha256": "93db4d580666e23830532d867424ad04ee0b7c86a6851a67af29de7a7f96bfd6"
90
+ },
91
+ {
92
+ "path": "fixtures/long-running.jsonl",
93
+ "size": 4953,
94
+ "sha256": "e3a21c98402dc78fb73e5b44b51b9df7f169d12aeddf9f77e2baf40528a27c42"
95
+ },
96
+ {
97
+ "path": "fixtures/plan.jsonl",
98
+ "size": 2361,
99
+ "sha256": "86e5681f2aad82629db9e8a4dd7bb6dcee11c008118277d47dcf0d94c8483110"
100
+ },
101
+ {
102
+ "path": "fixtures/quota.jsonl",
103
+ "size": 594,
104
+ "sha256": "ed8e1f7e0f67f5691552925f22d76ce3a4f0f806167fc21b2ee944e2679e68ba"
105
+ },
106
+ {
107
+ "path": "fixtures/run-tests.jsonl",
108
+ "size": 491,
109
+ "sha256": "864b7a98ba4db9362cfb1e9c63f668bd11d6a92a04151236a546a8f84241be14"
110
+ },
111
+ {
112
+ "path": "fixtures/secret-output.jsonl",
113
+ "size": 905,
114
+ "sha256": "c1f7f2f4662de535c6fccf651a04de6fbcc5747b736a33050b2461a7cd15e608"
115
+ },
116
+ {
117
+ "path": "fixtures/self-verify.jsonl",
118
+ "size": 469,
119
+ "sha256": "9a0753d56d8ac86ec13a2952a0e061364fb0ed52164c02e121e115de461fccb0"
120
+ },
121
+ {
122
+ "path": "fixtures/stall.jsonl",
123
+ "size": 460,
124
+ "sha256": "c15a9748dfa2be624a8f7f923a2ff552ee54fa2ae6ee7b48dd761a7eb28c5c89"
125
+ },
126
+ {
127
+ "path": "fixtures/success-edit.jsonl",
128
+ "size": 1604,
129
+ "sha256": "8e28f1fd5dcb221b73bffe7f037b448b930b06bedf3aad07fe9727f38d02a4c6"
130
+ },
131
+ {
132
+ "path": "fixtures/turn-ended.jsonl",
133
+ "size": 1509,
134
+ "sha256": "160ec211936c7ce162f36c40cfdca8cb5627770b9a46f5c2c74ed20534e84d2d"
135
+ },
136
+ {
137
+ "path": "fixtures/verify-fails.jsonl",
138
+ "size": 602,
139
+ "sha256": "6539c10e3656136422ed00d30373510c37cf0a2a841782edbc0878c7488e6941"
140
+ },
141
+ {
142
+ "path": "github-credentials.mjs",
143
+ "size": 4802,
144
+ "sha256": "de57416ff8ce85d97b82b0c0fc17523bd2e787928d14a601dfd07e7caa1d9ce3"
145
+ },
146
+ {
147
+ "path": "http-link.js",
148
+ "size": 169364,
149
+ "sha256": "e929e3070d9bee811701a4ed0f69f45200681d3df33b96f9801792c50514adb5"
150
+ },
151
+ {
152
+ "path": "log.js",
153
+ "size": 1516,
154
+ "sha256": "057dd8b2003f6ad93baee8a9ced689b31e0678a1ffe1282af094818f48ef5124"
155
+ },
156
+ {
157
+ "path": "login.js",
158
+ "size": 141426,
159
+ "sha256": "c45e58b03039011c0bbbbc800159595230817db4d3836a2174bf5314e8276055"
160
+ },
161
+ {
162
+ "path": "main.js",
163
+ "size": 560365,
164
+ "sha256": "3a77a2c8c0404ec16b55e13df48ffa97a4a59085d2c2e2944fe84174b03fa72a"
165
+ },
166
+ {
167
+ "path": "mikka-mcp.mjs",
168
+ "size": 15824,
169
+ "sha256": "c554f8c2318580e93c4009ecd1f68e0e18e5a13755a255986fc0504377e0f967"
170
+ },
171
+ {
172
+ "path": "mikka.js",
173
+ "size": 607873,
174
+ "sha256": "c9c87e17cc97f5d92753a2a043562007fde38551f61f0cf617ea5fcb4028ac77"
175
+ },
176
+ {
177
+ "path": "npm-shrinkwrap.json",
178
+ "size": 78115,
179
+ "sha256": "12710eabfddcbd17a7a14aed5cabd1625ffab72f0e36d6b483e8739ff4ae7f3b"
180
+ },
181
+ {
182
+ "path": "package.json",
183
+ "size": 1246,
184
+ "sha256": "4205a6af973271f8d8cab2a63fd4166fa8f29c3e954f375a7aa051ab35ea9a2e"
185
+ },
186
+ {
187
+ "path": "paths.js",
188
+ "size": 3914,
189
+ "sha256": "99f426b9521e6844af90be7b36959cdfa9db672f1b1700618b08e709b9d63619"
190
+ },
191
+ {
192
+ "path": "sandbox.js",
193
+ "size": 4081,
194
+ "sha256": "e14482719a1fd2c84debfe73c08c23048b3946add8dd5d1b83c13be1271755b3"
195
+ },
196
+ {
197
+ "path": "sbom.cdx.json",
198
+ "size": 144310,
199
+ "sha256": "0bd5b3c1c3deecfddafd360be14cb319b080b252472cce52d1a09f9586800e47"
200
+ }
201
+ ]
202
+ }
package/mikka.js CHANGED
@@ -2450,8 +2450,8 @@ var READ_ONLY_DENIED = [
2450
2450
  "git_push",
2451
2451
  "computer_use"
2452
2452
  ];
2453
- var runPolicySchema = z2.object({
2454
- permissions: z2.object({
2453
+ var runPolicySchema = z2.strictObject({
2454
+ permissions: z2.strictObject({
2455
2455
  install_dependency: z2.enum(PERMISSION_DECISIONS),
2456
2456
  write_outside_repo: z2.enum(PERMISSION_DECISIONS),
2457
2457
  git_push: z2.enum(PERMISSION_DECISIONS),
@@ -2729,6 +2729,14 @@ var harnessInfoSchema = z6.object({
2729
2729
  harness: harnessSchema,
2730
2730
  installed: z6.boolean(),
2731
2731
  models: z6.array(z6.string().trim().min(1).max(128)).max(500).optional(),
2732
+ modelSlots: z6.array(
2733
+ z6.object({
2734
+ slot: z6.string().trim().min(1).max(128).refine((v2) => v2 !== "auto"),
2735
+ model: z6.string().trim().min(1).max(128),
2736
+ name: z6.string().trim().min(1).max(200)
2737
+ })
2738
+ ).max(500).optional(),
2739
+ defaultModelSlot: z6.string().trim().min(1).max(128).optional(),
2732
2740
  /** Deprecated (#312, 2026-10-27): could host the native Coordinator. The server keeps that runtime switched off. */
2733
2741
  coordinator: z6.boolean().optional(),
2734
2742
  /** Set only by a runner with an isolated, owner-bound subscription broker. */
@@ -3210,9 +3218,10 @@ import { z as z12 } from "zod";
3210
3218
  // ../protocol/src/skill-artifact.ts
3211
3219
  import { z as z11 } from "zod";
3212
3220
  var SKILL_ARTIFACT_HEADER = "x-mikka-skill-artifacts";
3221
+ var TEAM_SKILL_HEADER = "x-mikka-team-skills";
3213
3222
  var skillArtifactRefSchema = z11.object({
3214
3223
  schemaVersion: z11.literal(1),
3215
- registryId: z11.literal("mikka-builtin"),
3224
+ registryId: z11.enum(["mikka-builtin", "mikka-team"]),
3216
3225
  skillId: z11.uuid(),
3217
3226
  versionId: z11.uuid(),
3218
3227
  format: z11.literal("single-skill-md-v1"),
@@ -4300,7 +4309,7 @@ import { join as join3 } from "node:path";
4300
4309
  // package.json
4301
4310
  var package_default = {
4302
4311
  name: "@mikka/daemon",
4303
- version: "0.0.27",
4312
+ version: "0.0.46",
4304
4313
  description: "Local Mikka daemon: runs agents through the user's own CLIs",
4305
4314
  type: "module",
4306
4315
  private: true,
@@ -4359,7 +4368,7 @@ var package_default = {
4359
4368
  engines: {
4360
4369
  node: ">=24"
4361
4370
  },
4362
- gitHead: "a703b0efc59761627d740012d1c2f762bf218b25"
4371
+ gitHead: "f8a9004cc92c7cec4e822e0463123212b9b53025"
4363
4372
  };
4364
4373
 
4365
4374
  // src/paths.ts
@@ -5120,6 +5129,7 @@ var HttpServerLink = class {
5120
5129
  "content-type": "application/json",
5121
5130
  [CLIENT_VERSION_HEADER]: this.clientVersion,
5122
5131
  [SKILL_ARTIFACT_HEADER]: "1",
5132
+ [TEAM_SKILL_HEADER]: "1",
5123
5133
  [REPO_ORIGIN_HEADER]: "1",
5124
5134
  [RECOVERY_WORKTREE_HEADER]: "1",
5125
5135
  ...token ? { authorization: `Bearer ${token}` } : {},
@@ -9842,7 +9852,54 @@ import { execa as execa9 } from "execa";
9842
9852
 
9843
9853
  // src/harness-models.ts
9844
9854
  import { execa as execa8 } from "execa";
9845
- async function detectHarnessModels(harness, binary) {
9855
+ function claudeDiscoveryEnv(host = process.env) {
9856
+ const env = buildChildEnv({ host });
9857
+ for (const slot of ["OPUS", "SONNET", "HAIKU"]) {
9858
+ const key2 = `ANTHROPIC_DEFAULT_${slot}_MODEL`;
9859
+ const value = host[key2];
9860
+ if (value && /^[a-zA-Z0-9._:/-]{1,128}$/.test(value)) env[key2] = value;
9861
+ }
9862
+ return env;
9863
+ }
9864
+ function claudeModelCatalogue(rows) {
9865
+ const modelSlots = rows.filter((r) => r.resolvedModel && r.value !== "auto").map((r) => ({
9866
+ slot: r.value,
9867
+ model: r.resolvedModel,
9868
+ name: r.resolvedModel
9869
+ }));
9870
+ return {
9871
+ models: modelSlots.map((r) => r.slot),
9872
+ modelSlots,
9873
+ ...modelSlots.some((r) => r.slot === "opus") ? { defaultModelSlot: "opus" } : {}
9874
+ };
9875
+ }
9876
+ async function detectHarnessCatalogue(harness, binary) {
9877
+ if (harness === "claude_code") {
9878
+ const { query: query3 } = await import("@anthropic-ai/claude-agent-sdk");
9879
+ const controller = new AbortController();
9880
+ const timer = setTimeout(() => controller.abort(), 5e3);
9881
+ const session = query3({
9882
+ prompt: (async function* () {
9883
+ })(),
9884
+ options: {
9885
+ pathToClaudeCodeExecutable: binary,
9886
+ env: claudeDiscoveryEnv(),
9887
+ abortController: controller,
9888
+ settingSources: ["user", "project", "local"]
9889
+ }
9890
+ });
9891
+ try {
9892
+ return claudeModelCatalogue(await session.supportedModels());
9893
+ } catch {
9894
+ return {};
9895
+ } finally {
9896
+ clearTimeout(timer);
9897
+ session.close();
9898
+ }
9899
+ }
9900
+ return await discover(harness, binary);
9901
+ }
9902
+ async function discover(harness, binary) {
9846
9903
  const options = {
9847
9904
  env: buildChildEnv(),
9848
9905
  extendEnv: false,
@@ -9858,9 +9915,9 @@ async function detectHarnessModels(harness, binary) {
9858
9915
  );
9859
9916
  return match ? [match[1]] : [];
9860
9917
  });
9861
- return models.length ? [...new Set(models)].slice(0, 500) : void 0;
9918
+ return { models: [...new Set(models)].slice(0, 500) };
9862
9919
  }
9863
- if (harness !== "codex") return void 0;
9920
+ if (harness !== "codex") return {};
9864
9921
  const child = execa8(binary, ["app-server"], { ...options, stdin: "pipe" });
9865
9922
  const completion = child.catch(() => void 0);
9866
9923
  child.stdin.write(
@@ -9874,7 +9931,7 @@ async function detectHarnessModels(harness, binary) {
9874
9931
  try {
9875
9932
  for await (const chunk of child.stdout) {
9876
9933
  pending += chunk.toString();
9877
- if (pending.length > 1e6) return void 0;
9934
+ if (pending.length > 1e6) return {};
9878
9935
  let newline;
9879
9936
  while ((newline = pending.indexOf("\n")) >= 0) {
9880
9937
  const line = pending.slice(0, newline);
@@ -9899,14 +9956,31 @@ async function detectHarnessModels(harness, binary) {
9899
9956
  }
9900
9957
  if (reply.id === 2) {
9901
9958
  const rows = reply.result?.data;
9902
- if (!Array.isArray(rows)) return void 0;
9903
- return [
9904
- ...new Set(
9905
- rows.flatMap(
9906
- (row) => typeof row.model === "string" && row.model.length <= 128 ? [row.model] : []
9907
- )
9908
- )
9909
- ];
9959
+ if (!Array.isArray(rows)) return {};
9960
+ const models = rows.filter(
9961
+ (r) => typeof r.model === "string" && r.model.length <= 128
9962
+ );
9963
+ const modelSlots = models.map(
9964
+ (r) => ({
9965
+ slot: r.model,
9966
+ model: r.model,
9967
+ name: r.displayName ?? r.model
9968
+ })
9969
+ );
9970
+ const selected = models.find(
9971
+ (r) => r.isDefault
9972
+ );
9973
+ if (selected)
9974
+ modelSlots.push({
9975
+ slot: "default",
9976
+ model: selected.model,
9977
+ name: selected.displayName ?? selected.model
9978
+ });
9979
+ return {
9980
+ models: models.map((r) => r.model),
9981
+ modelSlots,
9982
+ ...selected ? { defaultModelSlot: "default" } : {}
9983
+ };
9910
9984
  }
9911
9985
  }
9912
9986
  }
@@ -9916,7 +9990,7 @@ async function detectHarnessModels(harness, binary) {
9916
9990
  }
9917
9991
  } catch {
9918
9992
  }
9919
- return void 0;
9993
+ return {};
9920
9994
  }
9921
9995
 
9922
9996
  // src/harnesses.ts
@@ -9946,8 +10020,8 @@ async function detectHarnesses() {
9946
10020
  for (const binary of HARNESS_BINARIES[harness]) {
9947
10021
  const version = await versionOf(binary);
9948
10022
  if (version) {
9949
- const models = await detectHarnessModels(harness, binary);
9950
- return { harness, installed: true, version, ...models?.length ? { models } : {} };
10023
+ const catalogue = await detectHarnessCatalogue(harness, binary);
10024
+ return { harness, installed: true, version, ...catalogue };
9951
10025
  }
9952
10026
  }
9953
10027
  return { harness, installed: false, version: null };
@@ -12472,6 +12546,11 @@ var RunSupervisor = class {
12472
12546
  verifySkillAssignment(assignment);
12473
12547
  if (assignment.skillReceipt && (this.leases.get(runId) ?? 0) <= Date.now())
12474
12548
  throw new Error("Receipted Skill assignment requires a current server lease");
12549
+ if (assignment.skillReceipt?.artifact.registryId === "mikka-team") {
12550
+ if (!this.deps.revalidateSkillAssignment) throw new Error("Current team Skill authorization unavailable");
12551
+ const current = await this.deps.revalidateSkillAssignment(assignment);
12552
+ this.leases.set(runId, Date.parse(verifySkillResume(assignment, current)));
12553
+ }
12475
12554
  const adapter = this.adapterFor(runId);
12476
12555
  if (assignment.requireSessionResume && entry.questionResumeState === "starting")
12477
12556
  throw new Error(
@@ -12949,7 +13028,7 @@ var RepositoryCache = class {
12949
13028
  "-c",
12950
13029
  `protocol.file.allow=${this.allowFile ? "always" : "never"}`,
12951
13030
  ...args
12952
- ], { cwd, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, stdin: "ignore", timeout: FETCH_TIMEOUT_MS, cancelSignal: signal });
13031
+ ], { cwd, env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }, stdin: "ignore", timeout: FETCH_TIMEOUT_MS, cancelSignal: signal, killDescendants: true });
12953
13032
  if (!existsSync5(path)) {
12954
13033
  const temporary = `${path}.clone-${randomUUID7()}`;
12955
13034
  try {
@@ -13992,7 +14071,7 @@ function driverArguments(input, platform3 = process.platform) {
13992
14071
  scope: "desktop",
13993
14072
  ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" },
13994
14073
  delivery_mode: "foreground"
13995
- } : call.name === "press_key" ? { ...call.arguments, scope: "desktop", delivery_mode: "foreground" } : call.name === "scroll" ? { ...call.arguments, scope: "desktop", ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" }, delivery_mode: "foreground" } : call.arguments;
14074
+ } : ["type_text", "press_key"].includes(call.name) ? { ...call.arguments, scope: "desktop", delivery_mode: "foreground" } : call.name === "scroll" ? { ...call.arguments, scope: "desktop", ...platform3 === "darwin" ? {} : { coordinate_frame: "desktop" }, delivery_mode: "foreground" } : call.arguments;
13996
14075
  }
13997
14076
  async function executeDriver(driver, input, display, leaseGuard, assertLive = () => {
13998
14077
  }, beforeAction) {