@clawops/cli 2.1.1 → 2.1.3
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/README.md +23 -1
- package/dist/{apply-HJ5GAKHW.js → apply-JARPVA5Y.js} +8 -8
- package/dist/{automation-MKCJ46I6.js → automation-NBYQ6MFZ.js} +1 -1
- package/dist/{bootstrap-NN647RCY.js → bootstrap-3PBVY7MA.js} +2 -2
- package/dist/{chunk-X56CQ6GB.js → chunk-4MHDW2NB.js} +1 -1
- package/dist/{chunk-3Z5TDXCJ.js → chunk-55UMO37O.js} +1 -1
- package/dist/chunk-755X5OGS.js +213 -0
- package/dist/{chunk-R3DTA35B.js → chunk-7T4CIT7C.js} +6 -6
- package/dist/{chunk-QDNFADJI.js → chunk-AVERNLUY.js} +6 -6
- package/dist/{chunk-GFUK6KDR.js → chunk-CPCO6UJK.js} +9 -9
- package/dist/{chunk-64PONSA5.js → chunk-GFIR2IIJ.js} +3 -1
- package/dist/{chunk-YEBFVLOE.js → chunk-PTCVFLZ3.js} +4 -4
- package/dist/{chunk-ELU3XQEA.js → chunk-RDUKRIRC.js} +1 -1
- package/dist/{chunk-OFTAXLOY.js → chunk-TYHTISI5.js} +239 -159
- package/dist/cli.js +127 -274
- package/dist/{context-7VI3R6EK.js → context-WOKSKAIA.js} +5 -5
- package/dist/{flows-RI7FGHAM.js → flows-HGJIA6EL.js} +7 -7
- package/dist/{generate-JNJ63ZYZ.js → generate-NE54BATS.js} +6 -6
- package/dist/{harden-3KKCR7BL.js → harden-RUOUA5BV.js} +2 -2
- package/dist/init-HOPXDNWY.js +13 -0
- package/dist/{mcp-wire-B57DUNOD.js → mcp-wire-FIO5DFBY.js} +11 -11
- package/dist/{package-SAUDFQLG.js → package-MF5LPITL.js} +1 -1
- package/dist/{server-RHON6QMN.js → server-OXWHBTXK.js} +11 -11
- package/dist/{stack-config-LUTS2XAD.js → stack-config-ICQ5YHUL.js} +2 -2
- package/dist/{state-AOAYLYY5.js → state-AKZP2S4T.js} +2 -2
- package/dist/{store-OVB3DAJR.js → store-YOLQYXMB.js} +1 -1
- package/dist/{tailscale-cutover-6YP2QKFM.js → tailscale-cutover-EKAQSDXP.js} +2 -2
- package/package.json +1 -1
- package/spec/mcp-tools.yaml +69 -28
- package/dist/{chunk-BELTQGHT.js → chunk-CHNSL3TC.js} +3 -3
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
buildContext,
|
|
4
4
|
loadAdapterModule
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-AVERNLUY.js";
|
|
6
|
+
import "./chunk-CHNSL3TC.js";
|
|
7
|
+
import "./chunk-VUFMZEIM.js";
|
|
7
8
|
import "./chunk-GIEVAGEK.js";
|
|
8
9
|
import "./chunk-VOEJYRIK.js";
|
|
9
10
|
import "./chunk-EI7CQQ7D.js";
|
|
10
11
|
import "./chunk-FEK7VJAY.js";
|
|
11
12
|
import "./chunk-RHOWYIWT.js";
|
|
12
13
|
import "./chunk-N4WZLWJ4.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-RDUKRIRC.js";
|
|
15
|
+
import "./chunk-GFIR2IIJ.js";
|
|
15
16
|
import "./chunk-KGXPLI7W.js";
|
|
16
|
-
import "./chunk-VUFMZEIM.js";
|
|
17
17
|
export {
|
|
18
18
|
buildContext,
|
|
19
19
|
loadAdapterModule
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
// src/harden/flows.ts
|
|
4
4
|
async function cutOverToTailnet(ctx, conn, config) {
|
|
5
|
-
const { withRemoteExec } = await import("./harden-
|
|
6
|
-
const { verifyTailnetAddress, probeSsh } = await import("./tailscale-cutover-
|
|
7
|
-
const { setConfig } = await import("./store-
|
|
5
|
+
const { withRemoteExec } = await import("./harden-RUOUA5BV.js");
|
|
6
|
+
const { verifyTailnetAddress, probeSsh } = await import("./tailscale-cutover-EKAQSDXP.js");
|
|
7
|
+
const { setConfig } = await import("./store-YOLQYXMB.js");
|
|
8
8
|
const result = await withRemoteExec(
|
|
9
9
|
conn,
|
|
10
10
|
void 0,
|
|
@@ -49,11 +49,11 @@ async function revertTailnet(ctx, config) {
|
|
|
49
49
|
message: `Stack "${ctx.stackName}" is not using a tailnet address; nothing to revert.`
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
const { buildContext } = await import("./context-
|
|
52
|
+
const { buildContext } = await import("./context-WOKSKAIA.js");
|
|
53
53
|
const { extractBaseOutputs } = await import("./outputs-DJHBY7EE.js");
|
|
54
|
-
const { probeSsh, leaveTailnet } = await import("./tailscale-cutover-
|
|
55
|
-
const { withRemoteExec } = await import("./harden-
|
|
56
|
-
const { getConfig, setConfig } = await import("./store-
|
|
54
|
+
const { probeSsh, leaveTailnet } = await import("./tailscale-cutover-EKAQSDXP.js");
|
|
55
|
+
const { withRemoteExec } = await import("./harden-RUOUA5BV.js");
|
|
56
|
+
const { getConfig, setConfig } = await import("./store-YOLQYXMB.js");
|
|
57
57
|
const { forgetHost } = await import("./known-hosts-file-I3Q3NBYQ.js");
|
|
58
58
|
const direct = buildContext({ stack: ctx.stackName, ignoreTailnet: true });
|
|
59
59
|
const outputMap = await (await direct.getStack()).outputs();
|
|
@@ -5,21 +5,21 @@ import {
|
|
|
5
5
|
isInstanceAlias,
|
|
6
6
|
parseDiffForTest,
|
|
7
7
|
planId
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PTCVFLZ3.js";
|
|
9
9
|
import "./chunk-XFN3YDZE.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-AVERNLUY.js";
|
|
11
|
+
import "./chunk-CHNSL3TC.js";
|
|
11
12
|
import "./chunk-JW5A7E3X.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-VUFMZEIM.js";
|
|
13
14
|
import "./chunk-GIEVAGEK.js";
|
|
14
15
|
import "./chunk-VOEJYRIK.js";
|
|
15
16
|
import "./chunk-EI7CQQ7D.js";
|
|
16
17
|
import "./chunk-FEK7VJAY.js";
|
|
17
18
|
import "./chunk-RHOWYIWT.js";
|
|
18
19
|
import "./chunk-N4WZLWJ4.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-RDUKRIRC.js";
|
|
21
|
+
import "./chunk-GFIR2IIJ.js";
|
|
21
22
|
import "./chunk-KGXPLI7W.js";
|
|
22
|
-
import "./chunk-VUFMZEIM.js";
|
|
23
23
|
export {
|
|
24
24
|
INSTANCE_ALIASES,
|
|
25
25
|
generatePlan,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
makeTailscaleModule,
|
|
4
4
|
tailscaleModule
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4MHDW2NB.js";
|
|
6
6
|
import {
|
|
7
7
|
acquireSession,
|
|
8
8
|
drainPool
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
import {
|
|
29
29
|
resolveProjectId
|
|
30
30
|
} from "./chunk-TC2VYPLH.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-GFIR2IIJ.js";
|
|
32
32
|
import "./chunk-KGXPLI7W.js";
|
|
33
33
|
|
|
34
34
|
// src/harden/types.ts
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
PROVIDER_DEFAULTS,
|
|
4
|
+
SUPPORTED_PROVIDERS,
|
|
5
|
+
initStack
|
|
6
|
+
} from "./chunk-755X5OGS.js";
|
|
7
|
+
import "./chunk-GFIR2IIJ.js";
|
|
8
|
+
import "./chunk-KGXPLI7W.js";
|
|
9
|
+
export {
|
|
10
|
+
PROVIDER_DEFAULTS,
|
|
11
|
+
SUPPORTED_PROVIDERS,
|
|
12
|
+
initStack
|
|
13
|
+
};
|
|
@@ -1,29 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
MCP_HTTP_PORT
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-TYHTISI5.js";
|
|
5
|
+
import "./chunk-7T4CIT7C.js";
|
|
6
|
+
import "./chunk-PTCVFLZ3.js";
|
|
6
7
|
import "./chunk-BOPSG2LI.js";
|
|
7
8
|
import "./chunk-6ZFIFDBJ.js";
|
|
8
9
|
import "./chunk-3QJBNAHW.js";
|
|
9
10
|
import "./chunk-2I7KCMXZ.js";
|
|
10
|
-
import "./chunk-3Z5TDXCJ.js";
|
|
11
|
-
import "./chunk-AEEMRFZV.js";
|
|
12
|
-
import "./chunk-YEBFVLOE.js";
|
|
13
11
|
import "./chunk-XFN3YDZE.js";
|
|
12
|
+
import "./chunk-55UMO37O.js";
|
|
13
|
+
import "./chunk-AEEMRFZV.js";
|
|
14
|
+
import "./chunk-AVERNLUY.js";
|
|
14
15
|
import "./chunk-2Z7J3ERQ.js";
|
|
15
16
|
import "./chunk-E4NJSJ54.js";
|
|
16
17
|
import "./chunk-MC5ATCXS.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-GFUK6KDR.js";
|
|
18
|
+
import "./chunk-CPCO6UJK.js";
|
|
19
19
|
import "./chunk-NUL5F6YV.js";
|
|
20
20
|
import "./chunk-3OLUJPCB.js";
|
|
21
21
|
import {
|
|
22
22
|
execPrivileged
|
|
23
23
|
} from "./chunk-NUDIHZEH.js";
|
|
24
|
+
import "./chunk-CHNSL3TC.js";
|
|
24
25
|
import "./chunk-JW5A7E3X.js";
|
|
25
26
|
import "./chunk-LT4XMO5D.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-VUFMZEIM.js";
|
|
27
28
|
import "./chunk-GIEVAGEK.js";
|
|
28
29
|
import "./chunk-VOEJYRIK.js";
|
|
29
30
|
import "./chunk-EI7CQQ7D.js";
|
|
@@ -31,10 +32,9 @@ import "./chunk-FEK7VJAY.js";
|
|
|
31
32
|
import "./chunk-RHOWYIWT.js";
|
|
32
33
|
import "./chunk-Q7NQY5HV.js";
|
|
33
34
|
import "./chunk-N4WZLWJ4.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-RDUKRIRC.js";
|
|
36
|
+
import "./chunk-GFIR2IIJ.js";
|
|
36
37
|
import "./chunk-KGXPLI7W.js";
|
|
37
|
-
import "./chunk-VUFMZEIM.js";
|
|
38
38
|
|
|
39
39
|
// src/cli/mcp-wire.ts
|
|
40
40
|
var GATEWAY_MCP_NAME = "clawops";
|
|
@@ -5,27 +5,28 @@ import {
|
|
|
5
5
|
bearerFrom,
|
|
6
6
|
isLoopbackBind,
|
|
7
7
|
serveMcp
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-TYHTISI5.js";
|
|
9
|
+
import "./chunk-7T4CIT7C.js";
|
|
10
|
+
import "./chunk-PTCVFLZ3.js";
|
|
10
11
|
import "./chunk-BOPSG2LI.js";
|
|
11
12
|
import "./chunk-6ZFIFDBJ.js";
|
|
12
13
|
import "./chunk-3QJBNAHW.js";
|
|
13
14
|
import "./chunk-2I7KCMXZ.js";
|
|
14
|
-
import "./chunk-3Z5TDXCJ.js";
|
|
15
|
-
import "./chunk-AEEMRFZV.js";
|
|
16
|
-
import "./chunk-YEBFVLOE.js";
|
|
17
15
|
import "./chunk-XFN3YDZE.js";
|
|
16
|
+
import "./chunk-55UMO37O.js";
|
|
17
|
+
import "./chunk-AEEMRFZV.js";
|
|
18
|
+
import "./chunk-AVERNLUY.js";
|
|
18
19
|
import "./chunk-2Z7J3ERQ.js";
|
|
19
20
|
import "./chunk-E4NJSJ54.js";
|
|
20
21
|
import "./chunk-MC5ATCXS.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-GFUK6KDR.js";
|
|
22
|
+
import "./chunk-CPCO6UJK.js";
|
|
23
23
|
import "./chunk-NUL5F6YV.js";
|
|
24
24
|
import "./chunk-3OLUJPCB.js";
|
|
25
25
|
import "./chunk-NUDIHZEH.js";
|
|
26
|
+
import "./chunk-CHNSL3TC.js";
|
|
26
27
|
import "./chunk-JW5A7E3X.js";
|
|
27
28
|
import "./chunk-LT4XMO5D.js";
|
|
28
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-VUFMZEIM.js";
|
|
29
30
|
import "./chunk-GIEVAGEK.js";
|
|
30
31
|
import "./chunk-VOEJYRIK.js";
|
|
31
32
|
import "./chunk-EI7CQQ7D.js";
|
|
@@ -33,10 +34,9 @@ import "./chunk-FEK7VJAY.js";
|
|
|
33
34
|
import "./chunk-RHOWYIWT.js";
|
|
34
35
|
import "./chunk-Q7NQY5HV.js";
|
|
35
36
|
import "./chunk-N4WZLWJ4.js";
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
37
|
+
import "./chunk-RDUKRIRC.js";
|
|
38
|
+
import "./chunk-GFIR2IIJ.js";
|
|
38
39
|
import "./chunk-KGXPLI7W.js";
|
|
39
|
-
import "./chunk-VUFMZEIM.js";
|
|
40
40
|
export {
|
|
41
41
|
MCP_HTTP_PORT,
|
|
42
42
|
authRequirement,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeStackConfig
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-55UMO37O.js";
|
|
5
5
|
import "./chunk-AEEMRFZV.js";
|
|
6
6
|
import "./chunk-VOEJYRIK.js";
|
|
7
7
|
import "./chunk-EI7CQQ7D.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-GFIR2IIJ.js";
|
|
9
9
|
import "./chunk-KGXPLI7W.js";
|
|
10
10
|
export {
|
|
11
11
|
writeStackConfig
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
isTailscaleIpv4,
|
|
4
4
|
parseStatus,
|
|
5
5
|
rootPrefix
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4MHDW2NB.js";
|
|
7
7
|
import {
|
|
8
8
|
formatKnownHostsLine,
|
|
9
9
|
keyTypeFromBlob,
|
|
10
10
|
verifyAgainstKnownHosts
|
|
11
11
|
} from "./chunk-MC5ATCXS.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-GFIR2IIJ.js";
|
|
13
13
|
import "./chunk-KGXPLI7W.js";
|
|
14
14
|
|
|
15
15
|
// src/harden/tailscale-cutover.ts
|
package/package.json
CHANGED
package/spec/mcp-tools.yaml
CHANGED
|
@@ -136,8 +136,8 @@ tools:
|
|
|
136
136
|
idempotentHint: true
|
|
137
137
|
openWorldHint: true
|
|
138
138
|
input:
|
|
139
|
-
stackName: { type: string, optional: true }
|
|
140
|
-
tailLines: { type: integer, optional: true, default: 100, max: 1000 }
|
|
139
|
+
stackName: { type: string, optional: true, description: "Which stack's gateway to read. Omitted = the default stack in ~/.clawops/config.json" }
|
|
140
|
+
tailLines: { type: integer, optional: true, default: 100, max: 1000, description: "How many of the most recent lines to return. Keep it small; output is trimmed to 8KB regardless" }
|
|
141
141
|
sinceMin: { type: integer, optional: true, description: "Lines since N minutes ago" }
|
|
142
142
|
output:
|
|
143
143
|
lines: { type: array, items: { type: string }, description: "Trimmed log lines (R14: hard cap 8KB)" }
|
|
@@ -227,7 +227,7 @@ tools:
|
|
|
227
227
|
idempotentHint: true
|
|
228
228
|
openWorldHint: true
|
|
229
229
|
input:
|
|
230
|
-
stackName: { type: string, optional: true }
|
|
230
|
+
stackName: { type: string, optional: true, description: "Which stack's gateway config to read. Omitted = the default stack in ~/.clawops/config.json" }
|
|
231
231
|
key: { type: string, optional: true, description: "Dot-path config key, e.g., gateway.auth.mode. Omit to dump the full config." }
|
|
232
232
|
output:
|
|
233
233
|
value: { type: string, description: "Stringified value; complex objects are JSON-encoded" }
|
|
@@ -249,7 +249,7 @@ tools:
|
|
|
249
249
|
idempotentHint: true
|
|
250
250
|
openWorldHint: true
|
|
251
251
|
input:
|
|
252
|
-
stackName: { type: string, optional: true }
|
|
252
|
+
stackName: { type: string, optional: true, description: "Which stack's agents to list. Omitted = the default stack in ~/.clawops/config.json" }
|
|
253
253
|
output:
|
|
254
254
|
agents:
|
|
255
255
|
type: array
|
|
@@ -286,13 +286,13 @@ tools:
|
|
|
286
286
|
idempotentHint: true
|
|
287
287
|
openWorldHint: true
|
|
288
288
|
input:
|
|
289
|
-
stackName: { type: string, optional: true }
|
|
289
|
+
stackName: { type: string, optional: true, description: "Name for the stack to provision, and the name every later command refers to it by. Omitted = the default stack in ~/.clawops/config.json" }
|
|
290
290
|
provider:
|
|
291
291
|
type: enum
|
|
292
292
|
values: [aws, gcp, azure, local]
|
|
293
293
|
optional: true
|
|
294
294
|
description: Defaults to provider configured for this stack
|
|
295
|
-
region: { type: string, optional: true }
|
|
295
|
+
region: { type: string, optional: true, description: "Cloud region to deploy into, in the provider's own spelling (us-east-1, us-central1, eastus). Omitted = the region recorded for the stack" }
|
|
296
296
|
instanceType:
|
|
297
297
|
type: string
|
|
298
298
|
optional: true
|
|
@@ -318,10 +318,10 @@ tools:
|
|
|
318
318
|
optional: true
|
|
319
319
|
description: Which interface the gateway binds. 'all' serves plaintext HTTP.
|
|
320
320
|
openclawVersion: { type: string, optional: true, description: "semver or 'stable'/'dev'" }
|
|
321
|
-
dryRun: { type: boolean, optional: true, default: false }
|
|
321
|
+
dryRun: { type: boolean, optional: true, default: false, description: "Show what would be created and change nothing. Use this first when the user has not yet approved a spend" }
|
|
322
322
|
output:
|
|
323
323
|
taskId: { type: string, description: "For >60s ops; poll clawops_task_status" }
|
|
324
|
-
stackName: { type: string }
|
|
324
|
+
stackName: { type: string, description: "Name for the stack to provision, and the name every later command refers to it by. Omitted = the default stack in ~/.clawops/config.json" }
|
|
325
325
|
gatewayUrl: { type: string, format: uri }
|
|
326
326
|
resourceCount: { type: integer }
|
|
327
327
|
|
|
@@ -346,7 +346,7 @@ tools:
|
|
|
346
346
|
idempotentHint: true
|
|
347
347
|
openWorldHint: true
|
|
348
348
|
input:
|
|
349
|
-
stackName: { type: string }
|
|
349
|
+
stackName: { type: string, description: "The stack to destroy. Required, and worth repeating back to the user before calling: this deletes every resource it provisioned" }
|
|
350
350
|
yes: { type: boolean, optional: true, default: false, description: "Skip elicitation; CI/scripted use only" }
|
|
351
351
|
output:
|
|
352
352
|
taskId: { type: string }
|
|
@@ -371,7 +371,7 @@ tools:
|
|
|
371
371
|
openWorldHint: true
|
|
372
372
|
input:
|
|
373
373
|
planPath: { type: string, description: "Absolute path to plan JSON (R7)" }
|
|
374
|
-
yes: { type: boolean, optional: true, default: false }
|
|
374
|
+
yes: { type: boolean, optional: true, default: false, description: "Skip the confirmation and apply immediately. Only when the user has already approved this specific plan" }
|
|
375
375
|
output:
|
|
376
376
|
taskId: { type: string }
|
|
377
377
|
summary: { type: string, description: "Trimmed; full output as resource (R14)" }
|
|
@@ -394,9 +394,9 @@ tools:
|
|
|
394
394
|
idempotentHint: true
|
|
395
395
|
openWorldHint: true
|
|
396
396
|
input:
|
|
397
|
-
stackName: { type: string, optional: true }
|
|
398
|
-
provider: { type: enum, values: [aws, gcp, azure, local], optional: true }
|
|
399
|
-
region: { type: string, optional: true }
|
|
397
|
+
stackName: { type: string, optional: true, description: "Which stack the plan is for. Omitted = the default stack in ~/.clawops/config.json" }
|
|
398
|
+
provider: { type: enum, values: [aws, gcp, azure, local], optional: true, description: "Cloud to plan against. Omitted = the provider recorded for the stack. 'local' has no plan/apply path and is refused" }
|
|
399
|
+
region: { type: string, optional: true, description: "Cloud region, in the provider's own spelling (us-east-1, us-central1, eastus). Omitted = the region recorded for the stack" }
|
|
400
400
|
instanceType: { type: string, optional: true, description: "A clawops alias (micro|small|medium|large|gpu) or a machine type the cloud names itself, e.g. t3.small" }
|
|
401
401
|
openclawVersion: { type: string, optional: true, description: "semver, or 'stable'/'dev'" }
|
|
402
402
|
sshCidr: { type: string, optional: true, description: "CIDR(s) allowed to reach SSH, comma-separated, or 'auto' for this machine. Omitted = none, and nothing will be able to connect" }
|
|
@@ -428,10 +428,10 @@ tools:
|
|
|
428
428
|
idempotentHint: true
|
|
429
429
|
openWorldHint: true
|
|
430
430
|
input:
|
|
431
|
-
stackName: { type: string, optional: true }
|
|
432
|
-
key: { type: string }
|
|
431
|
+
stackName: { type: string, optional: true, description: "Which stack's gateway config to write. Omitted = the default stack in ~/.clawops/config.json" }
|
|
432
|
+
key: { type: string, description: "Dotted path into the gateway config, e.g. models.provider or channels.slack.enabled" }
|
|
433
433
|
value: { type: string, description: "Stringified; JSON for complex values" }
|
|
434
|
-
restart: { type: boolean, optional: true, default: false }
|
|
434
|
+
restart: { type: boolean, optional: true, default: false, description: "Restart the gateway so the change takes effect. Without it the value is written and the running gateway keeps the old one" }
|
|
435
435
|
output:
|
|
436
436
|
message: { type: string, description: "Confirmation of the change applied" }
|
|
437
437
|
|
|
@@ -453,9 +453,9 @@ tools:
|
|
|
453
453
|
idempotentHint: true
|
|
454
454
|
openWorldHint: true
|
|
455
455
|
input:
|
|
456
|
-
stackName: { type: string, optional: true }
|
|
456
|
+
stackName: { type: string, optional: true, description: "Which stack's gateway config to write. Omitted = the default stack in ~/.clawops/config.json" }
|
|
457
457
|
key: { type: string, description: "Dot-path config key to remove" }
|
|
458
|
-
restart: { type: boolean, optional: true, default: false }
|
|
458
|
+
restart: { type: boolean, optional: true, default: false, description: "Restart the gateway so the removal takes effect. Without it the key is removed and the running gateway keeps the old value" }
|
|
459
459
|
output:
|
|
460
460
|
message: { type: string, description: "Confirmation of the key removed" }
|
|
461
461
|
|
|
@@ -477,7 +477,7 @@ tools:
|
|
|
477
477
|
idempotentHint: true
|
|
478
478
|
openWorldHint: true
|
|
479
479
|
input:
|
|
480
|
-
stackName: { type: string, optional: true }
|
|
480
|
+
stackName: { type: string, optional: true, description: "Which stack's deployed config to validate. Omitted = the default stack in ~/.clawops/config.json" }
|
|
481
481
|
output:
|
|
482
482
|
valid: { type: boolean }
|
|
483
483
|
issues: { type: array, items: { type: string } }
|
|
@@ -499,7 +499,7 @@ tools:
|
|
|
499
499
|
idempotentHint: true
|
|
500
500
|
openWorldHint: true
|
|
501
501
|
input:
|
|
502
|
-
stackName: { type: string, optional: true }
|
|
502
|
+
stackName: { type: string, optional: true, description: "Which stack's gateway to restart. Omitted = the default stack in ~/.clawops/config.json" }
|
|
503
503
|
output:
|
|
504
504
|
restartedAt: { type: string, format: date-time }
|
|
505
505
|
previousUptimeSec: { type: integer }
|
|
@@ -508,6 +508,47 @@ tools:
|
|
|
508
508
|
# COMPOSITE WORKFLOW TOOLS (R2: encode user intent, not API sequences)
|
|
509
509
|
# ────────────────────────────────────────────────────────────────────────────
|
|
510
510
|
|
|
511
|
+
- name: clawops_init
|
|
512
|
+
toolset: [cli]
|
|
513
|
+
description: |
|
|
514
|
+
Register a stack and write ~/.clawops/config.json: the provider, the state backend, the
|
|
515
|
+
region, and an SSH key pair generated if one is not already there. Nothing is provisioned
|
|
516
|
+
and nothing is charged; this only creates local configuration.
|
|
517
|
+
|
|
518
|
+
Use when: any other clawops tool reports that there is no config, or the user wants to add
|
|
519
|
+
a second stack alongside the ones they have. This is the first call on a machine that has
|
|
520
|
+
never run clawops — a fresh container, a new laptop, a sandbox.
|
|
521
|
+
|
|
522
|
+
Adding a stack is additive and safe: existing stacks are kept. Overwriting one needs
|
|
523
|
+
force: true, because changing a state backend orphans the Pulumi state it points at — the
|
|
524
|
+
infrastructure stays up and clawops can no longer see or destroy it.
|
|
525
|
+
|
|
526
|
+
For aws, gcp and azure, stateUrl can be omitted and clawops names a bucket from the
|
|
527
|
+
account it can see; that needs cloud credentials in the environment, so in a sandbox pass
|
|
528
|
+
stateUrl explicitly. The local provider needs host instead, and no cloud account at all.
|
|
529
|
+
|
|
530
|
+
Do NOT use when: the user wants to deploy — that is clawops_up, after this. Credentials
|
|
531
|
+
are never passed here: clawops reads them from the environment (R6).
|
|
532
|
+
annotations:
|
|
533
|
+
title: Initialise clawops Config
|
|
534
|
+
readOnlyHint: false
|
|
535
|
+
destructiveHint: false
|
|
536
|
+
idempotentHint: false
|
|
537
|
+
openWorldHint: false
|
|
538
|
+
input:
|
|
539
|
+
provider: { type: enum, values: [aws, gcp, azure, local], description: "Which cloud this stack deploys to, or 'local' for a machine you already have" }
|
|
540
|
+
stackName: { type: string, optional: true, description: "Name for the stack, used by every later call. Omitted = \"default\"" }
|
|
541
|
+
stateUrl: { type: string, optional: true, description: "Where Pulumi state lives, e.g. s3://bucket/clawops, gs://bucket/clawops, azblob://container. Omitted = clawops names one from the cloud account it can see, which needs credentials" }
|
|
542
|
+
region: { type: string, optional: true, description: "Cloud region in the provider's own spelling. Omitted = us-east-1 (aws), us-central1 (gcp), eastus (azure)" }
|
|
543
|
+
host: { type: string, optional: true, description: "[local only] Hostname or IP of the machine to manage. Required when provider is local" }
|
|
544
|
+
sshUser: { type: string, optional: true, description: "[local only] SSH login user. Omitted = root" }
|
|
545
|
+
sshPort: { type: integer, optional: true, description: "[local only] SSH port. Omitted = 22" }
|
|
546
|
+
force: { type: boolean, optional: true, description: "Overwrite a stack that already exists. Refused without it, because replacing a state backend orphans the state it points at" }
|
|
547
|
+
output:
|
|
548
|
+
configPath: { type: string }
|
|
549
|
+
stackName: { type: string }
|
|
550
|
+
stateUrl: { type: string }
|
|
551
|
+
|
|
511
552
|
- name: clawops_harden
|
|
512
553
|
toolset: [cli]
|
|
513
554
|
description: |
|
|
@@ -543,7 +584,7 @@ tools:
|
|
|
543
584
|
idempotentHint: true
|
|
544
585
|
openWorldHint: true
|
|
545
586
|
input:
|
|
546
|
-
stackName: { type: string, optional: true }
|
|
587
|
+
stackName: { type: string, optional: true, description: "Which stack to harden. Omitted = the default stack in ~/.clawops/config.json" }
|
|
547
588
|
options: { type: string, optional: true, description: "Comma-separated module IDs; default is every defaultOn module for the provider" }
|
|
548
589
|
dryRun: { type: boolean, optional: true, default: false, description: "Report the current state, change nothing" }
|
|
549
590
|
tailscale: { type: boolean, optional: true, default: false, description: "Join the tailnet, verify this machine reaches the host there, then use that address" }
|
|
@@ -577,14 +618,14 @@ tools:
|
|
|
577
618
|
idempotentHint: true
|
|
578
619
|
openWorldHint: true
|
|
579
620
|
input:
|
|
580
|
-
provider: { type: enum, values: [aws, gcp, azure, local] }
|
|
581
|
-
region: { type: string, optional: true }
|
|
582
|
-
stackName: { type: string, optional: true, default: "default" }
|
|
583
|
-
instanceType: { type: enum, values: [micro, small, medium, large, gpu], optional: true, default: small }
|
|
621
|
+
provider: { type: enum, values: [aws, gcp, azure, local], description: "Cloud to deploy to. Omitted = the default provider in ~/.clawops/config.json" }
|
|
622
|
+
region: { type: string, optional: true, description: "Cloud region, in the provider's own spelling (us-east-1, us-central1, eastus). Omitted = the provider's default" }
|
|
623
|
+
stackName: { type: string, optional: true, default: "default", description: "Name for the new stack. Omitted = the default stack name in ~/.clawops/config.json" }
|
|
624
|
+
instanceType: { type: enum, values: [micro, small, medium, large, gpu], optional: true, default: small, description: "Machine size: a clawops alias (micro|small|medium|large|gpu) or a type the cloud names itself, e.g. t3.small" }
|
|
584
625
|
output:
|
|
585
626
|
taskId: { type: string }
|
|
586
627
|
gatewayUrl: { type: string, format: uri }
|
|
587
|
-
stackName: { type: string }
|
|
628
|
+
stackName: { type: string, description: "Name for the new stack. Omitted = the default stack name in ~/.clawops/config.json" }
|
|
588
629
|
|
|
589
630
|
- name: clawops_workflow_recover
|
|
590
631
|
toolset: [workflow, read]
|
|
@@ -605,7 +646,7 @@ tools:
|
|
|
605
646
|
idempotentHint: true
|
|
606
647
|
openWorldHint: true
|
|
607
648
|
input:
|
|
608
|
-
stackName: { type: string, optional: true }
|
|
649
|
+
stackName: { type: string, optional: true, description: "Which stack to diagnose. Omitted = the default stack in ~/.clawops/config.json" }
|
|
609
650
|
output:
|
|
610
651
|
report:
|
|
611
652
|
type: object
|
|
@@ -633,7 +674,7 @@ tools:
|
|
|
633
674
|
idempotentHint: true
|
|
634
675
|
openWorldHint: false
|
|
635
676
|
input:
|
|
636
|
-
taskId: { type: string }
|
|
677
|
+
taskId: { type: string, description: "The taskId returned by a long-running tool such as clawops_up, clawops_apply or clawops_destroy" }
|
|
637
678
|
output:
|
|
638
679
|
status: { type: enum, values: [working, input_required, completed, failed, cancelled] }
|
|
639
680
|
progress: { type: number, minimum: 0, maximum: 1 }
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
registerProvider
|
|
4
|
+
} from "./chunk-VUFMZEIM.js";
|
|
2
5
|
import {
|
|
3
6
|
CONFIG_FILENAME,
|
|
4
7
|
CONTAINER_UID,
|
|
@@ -17,9 +20,6 @@ import {
|
|
|
17
20
|
import {
|
|
18
21
|
INSTANCE_TYPE_MAP
|
|
19
22
|
} from "./chunk-N4WZLWJ4.js";
|
|
20
|
-
import {
|
|
21
|
-
registerProvider
|
|
22
|
-
} from "./chunk-VUFMZEIM.js";
|
|
23
23
|
|
|
24
24
|
// src/providers/aws/index.ts
|
|
25
25
|
import process2 from "process";
|