@aspectlylabs/mikka 0.0.155 → 0.0.156
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 +19 -10
- package/client.js +2 -2
- package/http-link.js +2 -2
- package/login.js +2 -2
- package/main.js +19 -10
- package/mikka-release-manifest.json +16 -16
- package/mikka.js +19 -10
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
- package/paths.js +2 -2
- package/sbom.cdx.json +7 -7
package/cli.js
CHANGED
|
@@ -4480,7 +4480,7 @@ import { join as join4 } from "node:path";
|
|
|
4480
4480
|
// package.json
|
|
4481
4481
|
var package_default = {
|
|
4482
4482
|
name: "@mikka/daemon",
|
|
4483
|
-
version: "0.0.
|
|
4483
|
+
version: "0.0.156",
|
|
4484
4484
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
4485
4485
|
type: "module",
|
|
4486
4486
|
private: true,
|
|
@@ -4540,7 +4540,7 @@ var package_default = {
|
|
|
4540
4540
|
engines: {
|
|
4541
4541
|
node: ">=24"
|
|
4542
4542
|
},
|
|
4543
|
-
gitHead: "
|
|
4543
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
4544
4544
|
};
|
|
4545
4545
|
|
|
4546
4546
|
// src/paths.ts
|
|
@@ -4815,7 +4815,7 @@ function classifySegment(segment, depth) {
|
|
|
4815
4815
|
if (entry && verb && entry[1].includes(verb)) return "install_dependency";
|
|
4816
4816
|
return null;
|
|
4817
4817
|
}
|
|
4818
|
-
function claudePermissionRules(policy) {
|
|
4818
|
+
function claudePermissionRules(policy, agentDelivers = false) {
|
|
4819
4819
|
const install2 = INSTALL_COMMANDS.flatMap(
|
|
4820
4820
|
([tool2, verbs]) => verbs.map((verb) => `Bash(${tool2} ${verb}:*)`)
|
|
4821
4821
|
);
|
|
@@ -4825,7 +4825,7 @@ function claudePermissionRules(policy) {
|
|
|
4825
4825
|
ask: decision === "ask" ? install2 : [],
|
|
4826
4826
|
deny: [
|
|
4827
4827
|
...!rawCliShellAvailable(policy) ? ["Bash", "PowerShell", "Monitor"] : [],
|
|
4828
|
-
"Bash(git push:*)",
|
|
4828
|
+
...agentDelivers && !policy.readOnly ? [] : ["Bash(git push:*)"],
|
|
4829
4829
|
...policy.readOnly ? READ_ONLY_TOOLS : [],
|
|
4830
4830
|
...decision === "deny" ? install2 : []
|
|
4831
4831
|
]
|
|
@@ -7230,6 +7230,14 @@ var RunContext = class {
|
|
|
7230
7230
|
tempEnv() {
|
|
7231
7231
|
return { TMPDIR: this.tmpDir, TMPPREFIX: join11(this.tmpDir, "zsh"), ...withGitConfig(this.githubEnv, RUN_GIT_CONFIG), ...this.options.policyHash ? { MIKKA_POLICY_HASH: this.options.policyHash } : {} };
|
|
7232
7232
|
}
|
|
7233
|
+
/**
|
|
7234
|
+
* The agent delivers this run itself: it commits, pushes to the issue
|
|
7235
|
+
* branch and opens the pull request with run-scoped GitHub credentials. The
|
|
7236
|
+
* server sends GitHub delivery only for a run whose push is allowed.
|
|
7237
|
+
*/
|
|
7238
|
+
get agentDelivers() {
|
|
7239
|
+
return Object.keys(this.githubEnv).length > 0;
|
|
7240
|
+
}
|
|
7233
7241
|
/** A hand-in from an earlier session would end this one at once. */
|
|
7234
7242
|
clearHandoff() {
|
|
7235
7243
|
rmSync8(this.handoffFile, { force: true });
|
|
@@ -8252,10 +8260,10 @@ function claudeSandboxSettings(policy) {
|
|
|
8252
8260
|
}
|
|
8253
8261
|
};
|
|
8254
8262
|
}
|
|
8255
|
-
function claudeSettings(policy, workspace) {
|
|
8263
|
+
function claudeSettings(policy, workspace, agentDelivers = false) {
|
|
8256
8264
|
return {
|
|
8257
8265
|
sandbox: claudeSandboxSettings(policy),
|
|
8258
|
-
permissions: claudePermissionRules(runPolicy(workspace))
|
|
8266
|
+
permissions: claudePermissionRules(runPolicy(workspace), agentDelivers)
|
|
8259
8267
|
};
|
|
8260
8268
|
}
|
|
8261
8269
|
function claudeChunks(message) {
|
|
@@ -8595,7 +8603,7 @@ var ClaudeAdapter = class {
|
|
|
8595
8603
|
},
|
|
8596
8604
|
settingSources: [],
|
|
8597
8605
|
settings: {
|
|
8598
|
-
...claudeSettings(ctx.policy(), options.policy),
|
|
8606
|
+
...claudeSettings(ctx.policy(), options.policy, ctx.agentDelivers),
|
|
8599
8607
|
// The official runtime launcher encloses the entire CLI. Nesting
|
|
8600
8608
|
// the CLI's Bash-only sandbox is unsupported on macOS.
|
|
8601
8609
|
...outerLocal ? { sandbox: { enabled: false, allowUnsandboxedCommands: true, autoAllowBashIfSandboxed: false } } : {},
|
|
@@ -9450,7 +9458,7 @@ var CodexAdapter = class {
|
|
|
9450
9458
|
import { Readable, Writable } from "node:stream";
|
|
9451
9459
|
import * as acp from "@agentclientprotocol/sdk";
|
|
9452
9460
|
import { join as join16 } from "node:path";
|
|
9453
|
-
function acpPermissionResponse(params, policy) {
|
|
9461
|
+
function acpPermissionResponse(params, policy, agentDelivers = false) {
|
|
9454
9462
|
const pick = (kinds) => {
|
|
9455
9463
|
for (const kind of kinds) {
|
|
9456
9464
|
const option = params.options.find((o) => o.kind === kind);
|
|
@@ -9462,7 +9470,7 @@ function acpPermissionResponse(params, policy) {
|
|
|
9462
9470
|
const raw = params.toolCall.rawInput;
|
|
9463
9471
|
const command = Array.isArray(raw?.command) ? raw.command.join(" ") : typeof raw?.command === "string" ? raw.command : params.toolCall.title ?? "";
|
|
9464
9472
|
const action = classifyCommand(command);
|
|
9465
|
-
const refused = action === "git_push" || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
9473
|
+
const refused = action === "git_push" && !agentDelivers || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
9466
9474
|
if (refused)
|
|
9467
9475
|
return { response: pick(["reject_once", "reject_always"]), refused };
|
|
9468
9476
|
const allowed = pick(["allow_always", "allow_once"]);
|
|
@@ -9645,7 +9653,8 @@ var CursorAdapter = class {
|
|
|
9645
9653
|
async requestPermission(params) {
|
|
9646
9654
|
const { response, refused } = acpPermissionResponse(
|
|
9647
9655
|
params,
|
|
9648
|
-
options.policy
|
|
9656
|
+
options.policy,
|
|
9657
|
+
ctx.agentDelivers
|
|
9649
9658
|
);
|
|
9650
9659
|
if (refused)
|
|
9651
9660
|
log.info(
|
package/client.js
CHANGED
|
@@ -3741,7 +3741,7 @@ import { join } from "node:path";
|
|
|
3741
3741
|
// package.json
|
|
3742
3742
|
var package_default = {
|
|
3743
3743
|
name: "@mikka/daemon",
|
|
3744
|
-
version: "0.0.
|
|
3744
|
+
version: "0.0.156",
|
|
3745
3745
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
3746
3746
|
type: "module",
|
|
3747
3747
|
private: true,
|
|
@@ -3801,7 +3801,7 @@ var package_default = {
|
|
|
3801
3801
|
engines: {
|
|
3802
3802
|
node: ">=24"
|
|
3803
3803
|
},
|
|
3804
|
-
gitHead: "
|
|
3804
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
3805
3805
|
};
|
|
3806
3806
|
|
|
3807
3807
|
// src/paths.ts
|
package/http-link.js
CHANGED
|
@@ -4144,7 +4144,7 @@ var InvalidIdError = class extends DaemonError {
|
|
|
4144
4144
|
// package.json
|
|
4145
4145
|
var package_default = {
|
|
4146
4146
|
name: "@mikka/daemon",
|
|
4147
|
-
version: "0.0.
|
|
4147
|
+
version: "0.0.156",
|
|
4148
4148
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
4149
4149
|
type: "module",
|
|
4150
4150
|
private: true,
|
|
@@ -4204,7 +4204,7 @@ var package_default = {
|
|
|
4204
4204
|
engines: {
|
|
4205
4205
|
node: ">=24"
|
|
4206
4206
|
},
|
|
4207
|
-
gitHead: "
|
|
4207
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
4208
4208
|
};
|
|
4209
4209
|
|
|
4210
4210
|
// src/paths.ts
|
package/login.js
CHANGED
|
@@ -3748,7 +3748,7 @@ var ServerUnreachableError = class extends DaemonError {
|
|
|
3748
3748
|
// package.json
|
|
3749
3749
|
var package_default = {
|
|
3750
3750
|
name: "@mikka/daemon",
|
|
3751
|
-
version: "0.0.
|
|
3751
|
+
version: "0.0.156",
|
|
3752
3752
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
3753
3753
|
type: "module",
|
|
3754
3754
|
private: true,
|
|
@@ -3808,7 +3808,7 @@ var package_default = {
|
|
|
3808
3808
|
engines: {
|
|
3809
3809
|
node: ">=24"
|
|
3810
3810
|
},
|
|
3811
|
-
gitHead: "
|
|
3811
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
3812
3812
|
};
|
|
3813
3813
|
|
|
3814
3814
|
// src/paths.ts
|
package/main.js
CHANGED
|
@@ -3785,7 +3785,7 @@ import { join as join5 } from "node:path";
|
|
|
3785
3785
|
// package.json
|
|
3786
3786
|
var package_default = {
|
|
3787
3787
|
name: "@mikka/daemon",
|
|
3788
|
-
version: "0.0.
|
|
3788
|
+
version: "0.0.156",
|
|
3789
3789
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
3790
3790
|
type: "module",
|
|
3791
3791
|
private: true,
|
|
@@ -3845,7 +3845,7 @@ var package_default = {
|
|
|
3845
3845
|
engines: {
|
|
3846
3846
|
node: ">=24"
|
|
3847
3847
|
},
|
|
3848
|
-
gitHead: "
|
|
3848
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
3849
3849
|
};
|
|
3850
3850
|
|
|
3851
3851
|
// src/paths.ts
|
|
@@ -3985,7 +3985,7 @@ function classifySegment(segment, depth) {
|
|
|
3985
3985
|
if (entry && verb && entry[1].includes(verb)) return "install_dependency";
|
|
3986
3986
|
return null;
|
|
3987
3987
|
}
|
|
3988
|
-
function claudePermissionRules(policy) {
|
|
3988
|
+
function claudePermissionRules(policy, agentDelivers = false) {
|
|
3989
3989
|
const install2 = INSTALL_COMMANDS.flatMap(
|
|
3990
3990
|
([tool2, verbs]) => verbs.map((verb) => `Bash(${tool2} ${verb}:*)`)
|
|
3991
3991
|
);
|
|
@@ -3995,7 +3995,7 @@ function claudePermissionRules(policy) {
|
|
|
3995
3995
|
ask: decision === "ask" ? install2 : [],
|
|
3996
3996
|
deny: [
|
|
3997
3997
|
...!rawCliShellAvailable(policy) ? ["Bash", "PowerShell", "Monitor"] : [],
|
|
3998
|
-
"Bash(git push:*)",
|
|
3998
|
+
...agentDelivers && !policy.readOnly ? [] : ["Bash(git push:*)"],
|
|
3999
3999
|
...policy.readOnly ? READ_ONLY_TOOLS : [],
|
|
4000
4000
|
...decision === "deny" ? install2 : []
|
|
4001
4001
|
]
|
|
@@ -6015,6 +6015,14 @@ var RunContext = class {
|
|
|
6015
6015
|
tempEnv() {
|
|
6016
6016
|
return { TMPDIR: this.tmpDir, TMPPREFIX: join8(this.tmpDir, "zsh"), ...withGitConfig(this.githubEnv, RUN_GIT_CONFIG), ...this.options.policyHash ? { MIKKA_POLICY_HASH: this.options.policyHash } : {} };
|
|
6017
6017
|
}
|
|
6018
|
+
/**
|
|
6019
|
+
* The agent delivers this run itself: it commits, pushes to the issue
|
|
6020
|
+
* branch and opens the pull request with run-scoped GitHub credentials. The
|
|
6021
|
+
* server sends GitHub delivery only for a run whose push is allowed.
|
|
6022
|
+
*/
|
|
6023
|
+
get agentDelivers() {
|
|
6024
|
+
return Object.keys(this.githubEnv).length > 0;
|
|
6025
|
+
}
|
|
6018
6026
|
/** A hand-in from an earlier session would end this one at once. */
|
|
6019
6027
|
clearHandoff() {
|
|
6020
6028
|
rmSync7(this.handoffFile, { force: true });
|
|
@@ -7072,10 +7080,10 @@ function claudeSandboxSettings(policy) {
|
|
|
7072
7080
|
}
|
|
7073
7081
|
};
|
|
7074
7082
|
}
|
|
7075
|
-
function claudeSettings(policy, workspace) {
|
|
7083
|
+
function claudeSettings(policy, workspace, agentDelivers = false) {
|
|
7076
7084
|
return {
|
|
7077
7085
|
sandbox: claudeSandboxSettings(policy),
|
|
7078
|
-
permissions: claudePermissionRules(runPolicy(workspace))
|
|
7086
|
+
permissions: claudePermissionRules(runPolicy(workspace), agentDelivers)
|
|
7079
7087
|
};
|
|
7080
7088
|
}
|
|
7081
7089
|
function claudeChunks(message) {
|
|
@@ -7415,7 +7423,7 @@ var ClaudeAdapter = class {
|
|
|
7415
7423
|
},
|
|
7416
7424
|
settingSources: [],
|
|
7417
7425
|
settings: {
|
|
7418
|
-
...claudeSettings(ctx.policy(), options.policy),
|
|
7426
|
+
...claudeSettings(ctx.policy(), options.policy, ctx.agentDelivers),
|
|
7419
7427
|
// The official runtime launcher encloses the entire CLI. Nesting
|
|
7420
7428
|
// the CLI's Bash-only sandbox is unsupported on macOS.
|
|
7421
7429
|
...outerLocal ? { sandbox: { enabled: false, allowUnsandboxedCommands: true, autoAllowBashIfSandboxed: false } } : {},
|
|
@@ -8270,7 +8278,7 @@ var CodexAdapter = class {
|
|
|
8270
8278
|
import { Readable, Writable } from "node:stream";
|
|
8271
8279
|
import * as acp from "@agentclientprotocol/sdk";
|
|
8272
8280
|
import { join as join13 } from "node:path";
|
|
8273
|
-
function acpPermissionResponse(params, policy) {
|
|
8281
|
+
function acpPermissionResponse(params, policy, agentDelivers = false) {
|
|
8274
8282
|
const pick = (kinds) => {
|
|
8275
8283
|
for (const kind of kinds) {
|
|
8276
8284
|
const option = params.options.find((o) => o.kind === kind);
|
|
@@ -8282,7 +8290,7 @@ function acpPermissionResponse(params, policy) {
|
|
|
8282
8290
|
const raw = params.toolCall.rawInput;
|
|
8283
8291
|
const command = Array.isArray(raw?.command) ? raw.command.join(" ") : typeof raw?.command === "string" ? raw.command : params.toolCall.title ?? "";
|
|
8284
8292
|
const action = classifyCommand(command);
|
|
8285
|
-
const refused = action === "git_push" || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
8293
|
+
const refused = action === "git_push" && !agentDelivers || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
8286
8294
|
if (refused)
|
|
8287
8295
|
return { response: pick(["reject_once", "reject_always"]), refused };
|
|
8288
8296
|
const allowed = pick(["allow_always", "allow_once"]);
|
|
@@ -8465,7 +8473,8 @@ var CursorAdapter = class {
|
|
|
8465
8473
|
async requestPermission(params) {
|
|
8466
8474
|
const { response, refused } = acpPermissionResponse(
|
|
8467
8475
|
params,
|
|
8468
|
-
options.policy
|
|
8476
|
+
options.policy,
|
|
8477
|
+
ctx.agentDelivers
|
|
8469
8478
|
);
|
|
8470
8479
|
if (refused)
|
|
8471
8480
|
log.info(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"sourceSha": "
|
|
3
|
+
"sourceSha": "3fe02256b52ef29ce2581173987f01d3b2054448",
|
|
4
4
|
"repository": "alexj11324/Mikka",
|
|
5
|
-
"buildRunId": "
|
|
5
|
+
"buildRunId": "41301873626",
|
|
6
6
|
"buildKind": "github-actions-main",
|
|
7
7
|
"sourceLockSha256": "c99f1e4f641d8e004cfe807653478e10f91e53fcf47102add5f4c154cdc1cb57",
|
|
8
|
-
"createdAt": "2026-11-01T11:
|
|
8
|
+
"createdAt": "2026-11-01T11:34:59.039Z",
|
|
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":
|
|
44
|
-
"sha256": "
|
|
43
|
+
"size": 649906,
|
|
44
|
+
"sha256": "ea0a5d8f7d1729d9a7febf4a1474182ea867594b08bba034046ce9e1660ea88a"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"path": "client.js",
|
|
48
48
|
"size": 141206,
|
|
49
|
-
"sha256": "
|
|
49
|
+
"sha256": "186de19be0c69837ec16496844d3fce1054404df99236b0c632751ae004a6d9f"
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"path": "computer/driver.mjs",
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
{
|
|
177
177
|
"path": "http-link.js",
|
|
178
178
|
"size": 182550,
|
|
179
|
-
"sha256": "
|
|
179
|
+
"sha256": "b16fcb4cc7efaeb1d01b7737d7d398736c080e99b77510f42539c00cde8865a7"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"path": "log.js",
|
|
@@ -186,12 +186,12 @@
|
|
|
186
186
|
{
|
|
187
187
|
"path": "login.js",
|
|
188
188
|
"size": 145941,
|
|
189
|
-
"sha256": "
|
|
189
|
+
"sha256": "fc3edd9d7e5c7d59028e288c6f18c1f53380da713b49a63476d0742e2aabf1d0"
|
|
190
190
|
},
|
|
191
191
|
{
|
|
192
192
|
"path": "main.js",
|
|
193
|
-
"size":
|
|
194
|
-
"sha256": "
|
|
193
|
+
"size": 595432,
|
|
194
|
+
"sha256": "056bb0f88e08eacfdc643f775a2d101593e0f722d076006515358c05f99f8b90"
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
"path": "mikka-mcp.mjs",
|
|
@@ -200,23 +200,23 @@
|
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
202
|
"path": "mikka.js",
|
|
203
|
-
"size":
|
|
204
|
-
"sha256": "
|
|
203
|
+
"size": 649922,
|
|
204
|
+
"sha256": "8e03efbabb2d9a8ff443ebfbab63fd859e4b05fff4340f8543d3003eb0731053"
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"path": "npm-shrinkwrap.json",
|
|
208
208
|
"size": 78117,
|
|
209
|
-
"sha256": "
|
|
209
|
+
"sha256": "7a9077f4872f82c1b74dab4c0d5abe22862bcc4cf0b349560439bd51df7f1c11"
|
|
210
210
|
},
|
|
211
211
|
{
|
|
212
212
|
"path": "package.json",
|
|
213
213
|
"size": 1247,
|
|
214
|
-
"sha256": "
|
|
214
|
+
"sha256": "10cd534abaa4aedba3968f2000a3dfe0738ef5af654a76567b15edfbdb9a1db4"
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"path": "paths.js",
|
|
218
218
|
"size": 4138,
|
|
219
|
-
"sha256": "
|
|
219
|
+
"sha256": "3f687c02d1b5442dd6243b682e8d2db4902bdf4354e4fe9b9507ff3966b9e27d"
|
|
220
220
|
},
|
|
221
221
|
{
|
|
222
222
|
"path": "sandbox.js",
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
{
|
|
227
227
|
"path": "sbom.cdx.json",
|
|
228
228
|
"size": 144314,
|
|
229
|
-
"sha256": "
|
|
229
|
+
"sha256": "93003336a8e6c7f2520b064b5250af5188aad04e25550daee8d6fdf89164ff17"
|
|
230
230
|
}
|
|
231
231
|
]
|
|
232
232
|
}
|
package/mikka.js
CHANGED
|
@@ -4481,7 +4481,7 @@ import { join as join4 } from "node:path";
|
|
|
4481
4481
|
// package.json
|
|
4482
4482
|
var package_default = {
|
|
4483
4483
|
name: "@mikka/daemon",
|
|
4484
|
-
version: "0.0.
|
|
4484
|
+
version: "0.0.156",
|
|
4485
4485
|
description: "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
4486
4486
|
type: "module",
|
|
4487
4487
|
private: true,
|
|
@@ -4541,7 +4541,7 @@ var package_default = {
|
|
|
4541
4541
|
engines: {
|
|
4542
4542
|
node: ">=24"
|
|
4543
4543
|
},
|
|
4544
|
-
gitHead: "
|
|
4544
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
4545
4545
|
};
|
|
4546
4546
|
|
|
4547
4547
|
// src/paths.ts
|
|
@@ -4816,7 +4816,7 @@ function classifySegment(segment, depth) {
|
|
|
4816
4816
|
if (entry && verb && entry[1].includes(verb)) return "install_dependency";
|
|
4817
4817
|
return null;
|
|
4818
4818
|
}
|
|
4819
|
-
function claudePermissionRules(policy) {
|
|
4819
|
+
function claudePermissionRules(policy, agentDelivers = false) {
|
|
4820
4820
|
const install2 = INSTALL_COMMANDS.flatMap(
|
|
4821
4821
|
([tool2, verbs]) => verbs.map((verb) => `Bash(${tool2} ${verb}:*)`)
|
|
4822
4822
|
);
|
|
@@ -4826,7 +4826,7 @@ function claudePermissionRules(policy) {
|
|
|
4826
4826
|
ask: decision === "ask" ? install2 : [],
|
|
4827
4827
|
deny: [
|
|
4828
4828
|
...!rawCliShellAvailable(policy) ? ["Bash", "PowerShell", "Monitor"] : [],
|
|
4829
|
-
"Bash(git push:*)",
|
|
4829
|
+
...agentDelivers && !policy.readOnly ? [] : ["Bash(git push:*)"],
|
|
4830
4830
|
...policy.readOnly ? READ_ONLY_TOOLS : [],
|
|
4831
4831
|
...decision === "deny" ? install2 : []
|
|
4832
4832
|
]
|
|
@@ -7231,6 +7231,14 @@ var RunContext = class {
|
|
|
7231
7231
|
tempEnv() {
|
|
7232
7232
|
return { TMPDIR: this.tmpDir, TMPPREFIX: join11(this.tmpDir, "zsh"), ...withGitConfig(this.githubEnv, RUN_GIT_CONFIG), ...this.options.policyHash ? { MIKKA_POLICY_HASH: this.options.policyHash } : {} };
|
|
7233
7233
|
}
|
|
7234
|
+
/**
|
|
7235
|
+
* The agent delivers this run itself: it commits, pushes to the issue
|
|
7236
|
+
* branch and opens the pull request with run-scoped GitHub credentials. The
|
|
7237
|
+
* server sends GitHub delivery only for a run whose push is allowed.
|
|
7238
|
+
*/
|
|
7239
|
+
get agentDelivers() {
|
|
7240
|
+
return Object.keys(this.githubEnv).length > 0;
|
|
7241
|
+
}
|
|
7234
7242
|
/** A hand-in from an earlier session would end this one at once. */
|
|
7235
7243
|
clearHandoff() {
|
|
7236
7244
|
rmSync8(this.handoffFile, { force: true });
|
|
@@ -8253,10 +8261,10 @@ function claudeSandboxSettings(policy) {
|
|
|
8253
8261
|
}
|
|
8254
8262
|
};
|
|
8255
8263
|
}
|
|
8256
|
-
function claudeSettings(policy, workspace) {
|
|
8264
|
+
function claudeSettings(policy, workspace, agentDelivers = false) {
|
|
8257
8265
|
return {
|
|
8258
8266
|
sandbox: claudeSandboxSettings(policy),
|
|
8259
|
-
permissions: claudePermissionRules(runPolicy(workspace))
|
|
8267
|
+
permissions: claudePermissionRules(runPolicy(workspace), agentDelivers)
|
|
8260
8268
|
};
|
|
8261
8269
|
}
|
|
8262
8270
|
function claudeChunks(message) {
|
|
@@ -8596,7 +8604,7 @@ var ClaudeAdapter = class {
|
|
|
8596
8604
|
},
|
|
8597
8605
|
settingSources: [],
|
|
8598
8606
|
settings: {
|
|
8599
|
-
...claudeSettings(ctx.policy(), options.policy),
|
|
8607
|
+
...claudeSettings(ctx.policy(), options.policy, ctx.agentDelivers),
|
|
8600
8608
|
// The official runtime launcher encloses the entire CLI. Nesting
|
|
8601
8609
|
// the CLI's Bash-only sandbox is unsupported on macOS.
|
|
8602
8610
|
...outerLocal ? { sandbox: { enabled: false, allowUnsandboxedCommands: true, autoAllowBashIfSandboxed: false } } : {},
|
|
@@ -9451,7 +9459,7 @@ var CodexAdapter = class {
|
|
|
9451
9459
|
import { Readable, Writable } from "node:stream";
|
|
9452
9460
|
import * as acp from "@agentclientprotocol/sdk";
|
|
9453
9461
|
import { join as join16 } from "node:path";
|
|
9454
|
-
function acpPermissionResponse(params, policy) {
|
|
9462
|
+
function acpPermissionResponse(params, policy, agentDelivers = false) {
|
|
9455
9463
|
const pick = (kinds) => {
|
|
9456
9464
|
for (const kind of kinds) {
|
|
9457
9465
|
const option = params.options.find((o) => o.kind === kind);
|
|
@@ -9463,7 +9471,7 @@ function acpPermissionResponse(params, policy) {
|
|
|
9463
9471
|
const raw = params.toolCall.rawInput;
|
|
9464
9472
|
const command = Array.isArray(raw?.command) ? raw.command.join(" ") : typeof raw?.command === "string" ? raw.command : params.toolCall.title ?? "";
|
|
9465
9473
|
const action = classifyCommand(command);
|
|
9466
|
-
const refused = action === "git_push" || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
9474
|
+
const refused = action === "git_push" && !agentDelivers || action !== null && decide(action, { policy: runPolicy(policy) }) !== "allow";
|
|
9467
9475
|
if (refused)
|
|
9468
9476
|
return { response: pick(["reject_once", "reject_always"]), refused };
|
|
9469
9477
|
const allowed = pick(["allow_always", "allow_once"]);
|
|
@@ -9646,7 +9654,8 @@ var CursorAdapter = class {
|
|
|
9646
9654
|
async requestPermission(params) {
|
|
9647
9655
|
const { response, refused } = acpPermissionResponse(
|
|
9648
9656
|
params,
|
|
9649
|
-
options.policy
|
|
9657
|
+
options.policy,
|
|
9658
|
+
ctx.agentDelivers
|
|
9650
9659
|
);
|
|
9651
9660
|
if (refused)
|
|
9652
9661
|
log.info(
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aspectlylabs/mikka",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.156",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@aspectlylabs/mikka",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.156",
|
|
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.
|
|
3
|
+
"version": "0.0.156",
|
|
4
4
|
"description": "Local Mikka daemon: runs agents through the user's own CLIs",
|
|
5
|
-
"gitHead": "
|
|
5
|
+
"gitHead": "3fe02256b52ef29ce2581173987f01d3b2054448",
|
|
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.
|
|
9
|
+
version: "0.0.156",
|
|
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: "
|
|
69
|
+
gitHead: "3fe02256b52ef29ce2581173987f01d3b2054448"
|
|
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:
|
|
5
|
+
"serialNumber": "urn:uuid:8d063e4c-21da-49c9-a7fa-c1346a8fad06",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-11-01T11:
|
|
8
|
+
"timestamp": "2026-11-01T11:34:58.062Z",
|
|
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.
|
|
22
|
+
"bom-ref": "@aspectlylabs/mikka@0.0.156",
|
|
23
23
|
"type": "library",
|
|
24
|
-
"name": ".retained-build-
|
|
25
|
-
"version": "0.0.
|
|
24
|
+
"name": ".retained-build-SsBNoF",
|
|
25
|
+
"version": "0.0.156",
|
|
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.
|
|
28
|
+
"purl": "pkg:npm/%40aspectlylabs/mikka@0.0.156",
|
|
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.
|
|
4630
|
+
"ref": "@aspectlylabs/mikka@0.0.156",
|
|
4631
4631
|
"dependsOn": [
|
|
4632
4632
|
"@agentclientprotocol/sdk@1.9.0",
|
|
4633
4633
|
"@anthropic-ai/claude-agent-sdk@0.3.305",
|