@botconnector/bccli 0.4.0-beta.39 → 0.4.0-beta.40
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/dist/{acp-4XE2KOIJ.js → acp-5A7EXLCG.js} +2 -2
- package/dist/{args-BD2PHEKG.js → args-4SMOHFN5.js} +2 -2
- package/dist/{chunk-ZG7HCXYA.js → chunk-AS7VV7D3.js} +1 -1
- package/dist/{chunk-EONFDWBE.js → chunk-DSFHN5CH.js} +1 -1
- package/dist/{chunk-R3ND76LW.js → chunk-GAFJEQTJ.js} +16 -0
- package/dist/{chunk-PDZPPSLU.js → chunk-PDVS4UWM.js} +1 -1
- package/dist/{chunk-QETGQXPL.js → chunk-WH7XLDGZ.js} +1 -1
- package/dist/cli.js +12 -12
- package/dist/{login-IWBRUNT4.js → login-T5S6SPZA.js} +1 -1
- package/dist/sdk.js +16 -0
- package/dist/{serve-7BP5BVX3.js → serve-JNQUP7CZ.js} +4 -4
- package/dist/{setup-FGCFKC7Z.js → setup-I7UY7X7C.js} +2 -2
- package/dist/{ui-MLOXPAHT.js → ui-GVIMUZNS.js} +1 -1
- package/dist/{update-73WI27VM.js → update-SZUG3YSB.js} +1 -1
- package/package.json +1 -1
|
@@ -97,8 +97,8 @@ function runAcp(input, output, opts) {
|
|
|
97
97
|
function runtimeAgent(cwd) {
|
|
98
98
|
return {
|
|
99
99
|
async run(text, onChunk, signal) {
|
|
100
|
-
const { parseCliArgs } = await import("./args-
|
|
101
|
-
const { createRuntime } = await import("./setup-
|
|
100
|
+
const { parseCliArgs } = await import("./args-4SMOHFN5.js");
|
|
101
|
+
const { createRuntime } = await import("./setup-I7UY7X7C.js");
|
|
102
102
|
const rt = createRuntime({ cwd, args: { ...parseCliArgs([]), allowAll: true } });
|
|
103
103
|
rt.agent.onEvent = (event) => {
|
|
104
104
|
if (event.type === "text") onChunk(event.delta);
|
|
@@ -36,7 +36,7 @@ function readSecret(prompt) {
|
|
|
36
36
|
}
|
|
37
37
|
async function runLogin(providerId, cwd) {
|
|
38
38
|
const { runProviderCommand } = await import("./providerCli-DDH4ZZUY.js");
|
|
39
|
-
const { parseCliArgs } = await import("./args-
|
|
39
|
+
const { parseCliArgs } = await import("./args-4SMOHFN5.js");
|
|
40
40
|
return runProviderCommand(parseCliArgs(["provider", "add", providerId]), {
|
|
41
41
|
env: process.env,
|
|
42
42
|
cwd,
|
|
@@ -24,6 +24,19 @@ function commandKey(segment) {
|
|
|
24
24
|
const words = segment.trim().split(/\s+/);
|
|
25
25
|
return words[1] ? `${words[0]} ${words[1]}` : words[0];
|
|
26
26
|
}
|
|
27
|
+
function requiresSensitiveToolApproval(req) {
|
|
28
|
+
const target = req.target.trim();
|
|
29
|
+
if (req.kind === "read" || req.kind === "edit") {
|
|
30
|
+
return /(?:^|[/\\])(?:\.env(?:\..*)?|\.ssh|\.aws|\.config\/gcloud|secrets?|credentials?)(?:[/\\]|$)/i.test(target) || /(?:id_rsa|id_ed25519|\.pem|\.p12|\.key)$/i.test(target);
|
|
31
|
+
}
|
|
32
|
+
if (req.kind === "bash") {
|
|
33
|
+
return /\b(?:rm\s+-[a-z]*r[a-z]*f[a-z]*\s|rm\s+-[a-z]*f[a-z]*r[a-z]*\s|mkfs(?:\.|\s)|wipefs\b|shred\s|git\s+push\s+(?:--force|-f)\b|docker\s+(?:system\s+prune|volume\s+rm)|kubectl\s+delete\b|drop\s+(?:database|table)|npm\s+publish\b)/i.test(target) || /\b(?:deploy-service\.sh|aws\s+secretsmanager|cat\s+[^;&|]*\.env\b)/i.test(target);
|
|
34
|
+
}
|
|
35
|
+
if (req.kind === "mcp") {
|
|
36
|
+
return /(?:delete|remove|revoke|transfer|send_email|publish|deploy|execute_command|run_command|read_secret)/i.test(req.tool);
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
27
40
|
var Permissions = class {
|
|
28
41
|
constructor(mode, rules = [], cwd = process.cwd()) {
|
|
29
42
|
this.mode = mode;
|
|
@@ -43,6 +56,7 @@ var Permissions = class {
|
|
|
43
56
|
}
|
|
44
57
|
/** Rules that "[a] allow for this session" would add; undefined when it must always be asked. */
|
|
45
58
|
rulesFor(req) {
|
|
59
|
+
if (process.env.BC_TOOL_POLICY_ENFORCE === "true" && requiresSensitiveToolApproval(req)) return void 0;
|
|
46
60
|
if (req.kind === "edit") return this.editInProject(req.target) ? ["edit(project)"] : void 0;
|
|
47
61
|
if (req.kind === "fetch") {
|
|
48
62
|
try {
|
|
@@ -62,6 +76,8 @@ var Permissions = class {
|
|
|
62
76
|
return [];
|
|
63
77
|
}
|
|
64
78
|
check(req) {
|
|
79
|
+
if (this.mode === "plan" && req.kind !== "read") return "deny";
|
|
80
|
+
if (process.env.BC_TOOL_POLICY_ENFORCE === "true" && requiresSensitiveToolApproval(req)) return "ask";
|
|
65
81
|
if (req.kind === "read") return "allow";
|
|
66
82
|
if (this.mode === "allowAll") return "allow";
|
|
67
83
|
if (this.mode === "plan") return "deny";
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
VERSION
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PDVS4UWM.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveWorktree,
|
|
7
7
|
runPrint
|
|
@@ -9,16 +9,16 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
helpText,
|
|
11
11
|
parseCliArgs
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-AS7VV7D3.js";
|
|
13
13
|
import {
|
|
14
14
|
runLogin
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-DSFHN5CH.js";
|
|
16
16
|
import {
|
|
17
17
|
createRuntime
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-WH7XLDGZ.js";
|
|
19
19
|
import "./chunk-3HCOAJEQ.js";
|
|
20
20
|
import "./chunk-ZMU7MXCH.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-GAFJEQTJ.js";
|
|
22
22
|
import "./chunk-JROUQ5YS.js";
|
|
23
23
|
import "./chunk-LN32JIZR.js";
|
|
24
24
|
import {
|
|
@@ -67,12 +67,12 @@ async function main() {
|
|
|
67
67
|
if (args.command === "login") return runLogin(args.loginProvider ?? "bc-cloud", cwd);
|
|
68
68
|
if (args.command === "mcp") {
|
|
69
69
|
const { runMcpCommand } = await import("./mcpCli-5QTXH7XJ.js");
|
|
70
|
-
const { readSecret } = await import("./login-
|
|
70
|
+
const { readSecret } = await import("./login-T5S6SPZA.js");
|
|
71
71
|
return runMcpCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), readSecret });
|
|
72
72
|
}
|
|
73
73
|
if (args.command === "provider") {
|
|
74
74
|
const { runProviderCommand } = await import("./providerCli-DDH4ZZUY.js");
|
|
75
|
-
const { readSecret } = await import("./login-
|
|
75
|
+
const { readSecret } = await import("./login-T5S6SPZA.js");
|
|
76
76
|
return runProviderCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), readSecret });
|
|
77
77
|
}
|
|
78
78
|
if (args.command === "connect" || args.command === "disconnect" || args.command === "integrations") {
|
|
@@ -90,16 +90,16 @@ async function main() {
|
|
|
90
90
|
return runModelsCommand(args, { env: process.env, cwd, out: (s) => console.log(s), err: (s) => console.error(s), fetch: globalThis.fetch });
|
|
91
91
|
}
|
|
92
92
|
if (args.command === "update") {
|
|
93
|
-
const { runUpdateCommand } = await import("./update-
|
|
93
|
+
const { runUpdateCommand } = await import("./update-SZUG3YSB.js");
|
|
94
94
|
return runUpdateCommand({ env: process.env });
|
|
95
95
|
}
|
|
96
96
|
if (args.command === "acp") {
|
|
97
|
-
const { runtimeAgent, runAcp } = await import("./acp-
|
|
97
|
+
const { runtimeAgent, runAcp } = await import("./acp-5A7EXLCG.js");
|
|
98
98
|
await runAcp(process.stdin, process.stdout, { cwd, newAgent: (c) => runtimeAgent(c) });
|
|
99
99
|
return 0;
|
|
100
100
|
}
|
|
101
101
|
if (args.command === "serve") {
|
|
102
|
-
const { startServe } = await import("./serve-
|
|
102
|
+
const { startServe } = await import("./serve-JNQUP7CZ.js");
|
|
103
103
|
const handle = await startServe({ port: args.port, host: args.host, token: args.token, cwd, env: process.env });
|
|
104
104
|
process.stderr.write(`bccli serve ${handle.url} \u2014 Authorization: Bearer ${handle.token}
|
|
105
105
|
`);
|
|
@@ -135,13 +135,13 @@ async function main() {
|
|
|
135
135
|
if (!process.stdin.isTTY) throw new ConfigError(t('Interactive mode needs a terminal. For scripts/CI use: bccli -p "task"'));
|
|
136
136
|
if (rt.config.updateCheck !== "off" && !process.env.BCCLI_NO_UPDATE_CHECK) {
|
|
137
137
|
try {
|
|
138
|
-
const { checkForUpdate } = await import("./update-
|
|
138
|
+
const { checkForUpdate } = await import("./update-SZUG3YSB.js");
|
|
139
139
|
const update = await checkForUpdate({ home: rt.home, fetch: globalThis.fetch, now: /* @__PURE__ */ new Date() });
|
|
140
140
|
if (update) console.error(update);
|
|
141
141
|
} catch {
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
-
const { startInteractive } = await import("./ui-
|
|
144
|
+
const { startInteractive } = await import("./ui-GVIMUZNS.js");
|
|
145
145
|
return startInteractive(rt, { initialPrompt: args.prompt, resume: args.resume, version: VERSION });
|
|
146
146
|
}
|
|
147
147
|
main().then(
|
package/dist/sdk.js
CHANGED
|
@@ -677,6 +677,19 @@ function commandKey(segment) {
|
|
|
677
677
|
const words2 = segment.trim().split(/\s+/);
|
|
678
678
|
return words2[1] ? `${words2[0]} ${words2[1]}` : words2[0];
|
|
679
679
|
}
|
|
680
|
+
function requiresSensitiveToolApproval(req) {
|
|
681
|
+
const target = req.target.trim();
|
|
682
|
+
if (req.kind === "read" || req.kind === "edit") {
|
|
683
|
+
return /(?:^|[/\\])(?:\.env(?:\..*)?|\.ssh|\.aws|\.config\/gcloud|secrets?|credentials?)(?:[/\\]|$)/i.test(target) || /(?:id_rsa|id_ed25519|\.pem|\.p12|\.key)$/i.test(target);
|
|
684
|
+
}
|
|
685
|
+
if (req.kind === "bash") {
|
|
686
|
+
return /\b(?:rm\s+-[a-z]*r[a-z]*f[a-z]*\s|rm\s+-[a-z]*f[a-z]*r[a-z]*\s|mkfs(?:\.|\s)|wipefs\b|shred\s|git\s+push\s+(?:--force|-f)\b|docker\s+(?:system\s+prune|volume\s+rm)|kubectl\s+delete\b|drop\s+(?:database|table)|npm\s+publish\b)/i.test(target) || /\b(?:deploy-service\.sh|aws\s+secretsmanager|cat\s+[^;&|]*\.env\b)/i.test(target);
|
|
687
|
+
}
|
|
688
|
+
if (req.kind === "mcp") {
|
|
689
|
+
return /(?:delete|remove|revoke|transfer|send_email|publish|deploy|execute_command|run_command|read_secret)/i.test(req.tool);
|
|
690
|
+
}
|
|
691
|
+
return false;
|
|
692
|
+
}
|
|
680
693
|
var Permissions = class {
|
|
681
694
|
constructor(mode, rules = [], cwd = process.cwd()) {
|
|
682
695
|
this.mode = mode;
|
|
@@ -696,6 +709,7 @@ var Permissions = class {
|
|
|
696
709
|
}
|
|
697
710
|
/** Rules that "[a] allow for this session" would add; undefined when it must always be asked. */
|
|
698
711
|
rulesFor(req) {
|
|
712
|
+
if (process.env.BC_TOOL_POLICY_ENFORCE === "true" && requiresSensitiveToolApproval(req)) return void 0;
|
|
699
713
|
if (req.kind === "edit") return this.editInProject(req.target) ? ["edit(project)"] : void 0;
|
|
700
714
|
if (req.kind === "fetch") {
|
|
701
715
|
try {
|
|
@@ -715,6 +729,8 @@ var Permissions = class {
|
|
|
715
729
|
return [];
|
|
716
730
|
}
|
|
717
731
|
check(req) {
|
|
732
|
+
if (this.mode === "plan" && req.kind !== "read") return "deny";
|
|
733
|
+
if (process.env.BC_TOOL_POLICY_ENFORCE === "true" && requiresSensitiveToolApproval(req)) return "ask";
|
|
718
734
|
if (req.kind === "read") return "allow";
|
|
719
735
|
if (this.mode === "allowAll") return "allow";
|
|
720
736
|
if (this.mode === "plan") return "deny";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
VERSION
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PDVS4UWM.js";
|
|
5
5
|
import {
|
|
6
6
|
LOOPBACK_BIND,
|
|
7
7
|
MAX_FRAME_BYTES,
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
parseClientFrame,
|
|
11
11
|
randomToken,
|
|
12
12
|
trustFence
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AS7VV7D3.js";
|
|
14
14
|
import {
|
|
15
15
|
createRuntime
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-WH7XLDGZ.js";
|
|
17
17
|
import "./chunk-3HCOAJEQ.js";
|
|
18
18
|
import "./chunk-ZMU7MXCH.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-GAFJEQTJ.js";
|
|
20
20
|
import "./chunk-JROUQ5YS.js";
|
|
21
21
|
import {
|
|
22
22
|
listAllModels
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createRuntime,
|
|
4
4
|
lunaPtcAutoEnabled
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-WH7XLDGZ.js";
|
|
6
6
|
import "./chunk-3HCOAJEQ.js";
|
|
7
7
|
import "./chunk-ZMU7MXCH.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-GAFJEQTJ.js";
|
|
9
9
|
import "./chunk-JROUQ5YS.js";
|
|
10
10
|
import "./chunk-LN32JIZR.js";
|
|
11
11
|
import "./chunk-SESBH44L.js";
|