@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/THIRD_PARTY_NOTICES.md +71 -0
- package/cli.js +101 -22
- package/client.js +13 -5
- package/computer/driver.mjs +3 -1
- package/http-link.js +15 -5
- package/login.js +13 -5
- package/main.js +99 -22
- package/mikka-release-manifest.json +202 -0
- package/mikka.js +101 -22
- package/npm-shrinkwrap.json +2187 -0
- package/package.json +3 -3
- package/paths.js +2 -2
- package/sbom.cdx.json +5613 -0
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.
|
|
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.
|
|
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: "
|
|
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.
|
|
3724
|
-
permissions: z5.
|
|
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
|
-
|
|
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
|
|
8913
|
+
return { models: [...new Set(models)].slice(0, 500) };
|
|
8859
8914
|
}
|
|
8860
|
-
if (harness !== "codex") return
|
|
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
|
|
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
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
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
|
|
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
|
|
8947
|
-
return { harness, installed: true, version, ...
|
|
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
|
-
} :
|
|
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.
|
|
2454
|
-
permissions: z2.
|
|
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.
|
|
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.
|
|
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: "
|
|
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
|
-
|
|
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
|
|
9918
|
+
return { models: [...new Set(models)].slice(0, 500) };
|
|
9862
9919
|
}
|
|
9863
|
-
if (harness !== "codex") return
|
|
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
|
|
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
|
|
9903
|
-
|
|
9904
|
-
|
|
9905
|
-
|
|
9906
|
-
|
|
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
|
|
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
|
|
9950
|
-
return { harness, installed: true, version, ...
|
|
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
|
-
} :
|
|
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) {
|