@clawops/cli 1.7.9 → 2.0.1

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.
Files changed (98) hide show
  1. package/README.md +504 -76
  2. package/dist/apply-KYFPWI5U.js +27 -0
  3. package/dist/automation-RMAIBNVC.js +44 -0
  4. package/dist/bedrock-XVASJX2K.js +61 -0
  5. package/dist/{bootstrap-HL4DNUNG.js → bootstrap-HNGKY6WW.js} +31 -19
  6. package/dist/bootstrap.sh.tmpl +51 -31
  7. package/dist/channels-KBUR42IU.js +53 -0
  8. package/dist/chunk-2I7KCMXZ.js +142 -0
  9. package/dist/{chunk-DQDAWNGB.js → chunk-2Z7J3ERQ.js} +1 -1
  10. package/dist/chunk-3OLUJPCB.js +36 -0
  11. package/dist/chunk-5XT5IAJK.js +69 -0
  12. package/dist/chunk-AEEMRFZV.js +24 -0
  13. package/dist/chunk-BSLIYB5Q.js +106 -0
  14. package/dist/{chunk-3XK66DKK.js → chunk-E4NJSJ54.js} +57 -93
  15. package/dist/chunk-FEK7VJAY.js +16 -0
  16. package/dist/{chunk-UKTP332Z.js → chunk-GAZPPSKU.js} +6 -7
  17. package/dist/chunk-GIEVAGEK.js +126 -0
  18. package/dist/chunk-HSPHXG6W.js +67 -0
  19. package/dist/chunk-IVWP4QUJ.js +901 -0
  20. package/dist/{chunk-PVUVI35Y.js → chunk-JW5A7E3X.js} +5 -1
  21. package/dist/{chunk-GZN7PKP4.js → chunk-KC3GC3PE.js} +328 -121
  22. package/dist/chunk-LBE6COC4.js +244 -0
  23. package/dist/chunk-LEVIW2PV.js +890 -0
  24. package/dist/chunk-LT4XMO5D.js +50 -0
  25. package/dist/chunk-MC5ATCXS.js +108 -0
  26. package/dist/chunk-N4WZLWJ4.js +16 -0
  27. package/dist/chunk-NUDIHZEH.js +55 -0
  28. package/dist/chunk-NUL5F6YV.js +56 -0
  29. package/dist/chunk-RHOWYIWT.js +52 -0
  30. package/dist/chunk-STLRHLLV.js +193 -0
  31. package/dist/chunk-V25QRZRB.js +45 -0
  32. package/dist/chunk-VOEJYRIK.js +33 -0
  33. package/dist/{providers-2OABPW2E.js → chunk-VUFMZEIM.js} +3 -2
  34. package/dist/chunk-W3OLNNJW.js +51 -0
  35. package/dist/cli-WLD3EBEM.js +11 -0
  36. package/dist/cli-auth-GD5SK7JU.js +13 -0
  37. package/dist/cli.js +1296 -695
  38. package/dist/config-validate-K2N6XLDX.js +76 -0
  39. package/dist/context-7EVC6W45.js +20 -0
  40. package/dist/docker-3PDO4TS7.js +12 -0
  41. package/dist/{firewall-XQGO7HWK.js → firewall-5VKZ4WBH.js} +32 -1
  42. package/dist/generate-I6YQ5V2T.js +29 -0
  43. package/dist/{harden-URPXLSVF.js → harden-72JMRT4E.js} +51 -11
  44. package/dist/health-5CCOXYGG.js +11 -0
  45. package/dist/index.d.ts +56 -0
  46. package/dist/known-hosts-file-I3Q3NBYQ.js +22 -0
  47. package/dist/logs-5A7YYA53.js +15 -0
  48. package/dist/{mcp-wire-7E5JQY47.js → mcp-wire-3SWBM7D6.js} +32 -16
  49. package/dist/models-AGTQWYDL.js +32 -0
  50. package/dist/network-args-PYJRJBYO.js +64 -0
  51. package/dist/{package-5AR4ZPK4.js → package-5BCMEBTE.js} +11 -4
  52. package/dist/passphrase-MJBE45N7.js +15 -0
  53. package/dist/plugins-DTST3OER.js +49 -0
  54. package/dist/{pool-QGFQRMGU.js → pool-PIIKJ4L2.js} +3 -2
  55. package/dist/preflight-EF52S3WW.js +162 -0
  56. package/dist/preflight-MWWM5JT3.js +181 -0
  57. package/dist/preflight-TFD4N5ZU.js +141 -0
  58. package/dist/privileged-JFA6LLTV.js +17 -0
  59. package/dist/providers-FW6H6OPF.js +11 -0
  60. package/dist/ready-KDNRBNSU.js +95 -0
  61. package/dist/{remote-config-QDLN4UMG.js → remote-config-3HZLUWEA.js} +4 -3
  62. package/dist/runtime-X3KW5TCP.js +44 -0
  63. package/dist/server-GBA7BJGK.js +46 -0
  64. package/dist/spec-path-KQOOIQCA.js +9 -0
  65. package/dist/ssh-VAI5DU5M.js +11 -0
  66. package/dist/ssh-key-DUO6OKOI.js +7 -0
  67. package/dist/stack-config-R4SPSUQZ.js +12 -0
  68. package/dist/upgrade-ULD4KFYC.js +88 -0
  69. package/dist/validate-YVI3BJ55.js +14 -0
  70. package/dist/{version-guard-VUCNZXQS.js → version-guard-XVYW5WFJ.js} +2 -2
  71. package/dist/{versions-2UVAT6PQ.js → versions-W5LRQCAJ.js} +2 -2
  72. package/dist/wait-WO72TRRQ.js +79 -0
  73. package/package.json +11 -4
  74. package/spec/deploy-plan.schema.json +114 -25
  75. package/spec/integrations.yaml +135 -28
  76. package/spec/mcp-tools.yaml +89 -37
  77. package/spec/models.yaml +23 -3
  78. package/spec/openclaw-2.0.config.schema.json +1 -0
  79. package/spec/openclaw-versions.yaml +116 -27
  80. package/spec/providers.schema.json +163 -28
  81. package/dist/apply-F3KY2HTB.js +0 -17
  82. package/dist/automation-RULUSJBW.js +0 -30
  83. package/dist/aws-L4RR2LSE.js +0 -254
  84. package/dist/azure-7OXQENQL.js +0 -262
  85. package/dist/chunk-35WVQY3X.js +0 -122
  86. package/dist/chunk-6X45DDGH.js +0 -42
  87. package/dist/chunk-A4QR4TXW.js +0 -120
  88. package/dist/chunk-C5X375RO.js +0 -85
  89. package/dist/chunk-FNS56UQY.js +0 -741
  90. package/dist/chunk-P5LKWRPL.js +0 -114
  91. package/dist/chunk-SEZMVVAS.js +0 -156
  92. package/dist/context-5LCUG2QR.js +0 -10
  93. package/dist/gcp-UG6AWPIZ.js +0 -193
  94. package/dist/generate-OAGYT3VH.js +0 -15
  95. package/dist/local-DXBEVZ5C.js +0 -47
  96. package/dist/server-FIZCOLHL.js +0 -32
  97. package/dist/ssh-CNJNLM3E.js +0 -8
  98. package/dist/validate-CFQ4FH2T.js +0 -10
@@ -1,37 +1,117 @@
1
1
  # OpenClaw Version Compatibility Matrix
2
2
  # Enforced by src/openclaw/versions.ts — `doctor`, `plan`, `up` and `apply` refuse
3
- # an OpenClaw version outside this range. Update via /openclaw-config skill.
3
+ # an OpenClaw version outside `support`. Update via /openclaw-config skill.
4
4
  #
5
- # This is the clawops 1.x line: it supports the pre-2.0 OpenClaw runtime contract only.
6
- # OpenClaw 2026.8.1 ("OpenClaw 2.0") changed that contract — state moved into SQLite,
7
- # config moved to a writable path, and provider plugins became install-gated. Deploying
8
- # it from this line produces a crash-looping gateway (exit 78). Use clawops 2.x instead.
5
+ # `support.min`, `support.max` and `support.recommended` are LIVE. Nothing reads
6
+ # `runtime`, `quirks`, `incompatible` or `tested`; they are documentation and the
7
+ # machine-readable source WO-38 will build the runtime contract from.
9
8
 
10
9
  version: 1
11
10
 
12
- # Minimum and maximum versions clawops supports
11
+ # Which release line this checkout is. Flipping this to "2.x" is gated by a test
12
+ # (tests/openclaw/line-interlock.test.ts) that fails until the runtime actually
13
+ # implements the 2.0 contract — see `runtime` below.
14
+ line: "2.x"
15
+
16
+ # Minimum and maximum versions clawops supports.
17
+ #
18
+ # Flipped to the 2.x range by WO-40, once the runtime could actually honour it: the
19
+ # config directory is mounted writable, provisioning writes gateway.mode, and
20
+ # --allow-unconfigured is gone. tests/openclaw/line-interlock.test.ts holds those
21
+ # together — setting `line: "2.x"` fails until each is true.
22
+ #
23
+ # The floor is 2026.9.2 rather than 2026.9.1 because the official Bedrock provider
24
+ # plugin declares "requires plugin API >=2026.9.2" and refuses to install on 9.1.
13
25
  support:
14
- min: "2026.4.5"
15
- max: "2026.7.1-2" # last release before the 2.0 runtime contract
16
- recommended: "2026.7.1-2"
26
+ min: "2026.9.2"
27
+ max: "" # no upper bound: this line tracks the 2.x runtime contract
28
+ recommended: "2026.9.2"
29
+
30
+ # The 2.0 runtime contract, measured against ghcr.io/openclaw/openclaw:2026.9.1.
31
+ # See docs/spikes/SP-10-openclaw-2.0-startup-contract.md for how each was observed.
32
+ # WO-38 consumes this; today nothing reads it.
33
+ runtime:
34
+ # 2026.9.2, not 2026.9.1: the official Bedrock provider plugin declares
35
+ # "requires plugin API >=2026.9.2" and refuses to install on 9.1. SP-10b §3.
36
+ targetMin: "2026.9.2"
37
+ image: "ghcr.io/openclaw/openclaw"
38
+ variants: [standard, slim, browser] # `-slim`, `-browser` tag suffixes
39
+ # Mount the config DIRECTORY, never the file. OpenClaw writes config by atomic
40
+ # rename, and renaming over a bind-mounted file fails EBUSY regardless of :ro.
41
+ # Verified — `plugins install` cannot record a plugin against a file mount. SP-10b §4.
42
+ configDir: "/cfg"
43
+ configPath: "/cfg/config.json" # via OPENCLAW_CONFIG_PATH
44
+ # The OpenClaw release spec/openclaw-2.0.config.schema.json was captured from.
45
+ # Validation compares the deployed version against this: a config key the schema
46
+ # does not know is an ERROR on an older-or-equal runtime and a WARNING on a newer
47
+ # one, because there it more likely means the schema is stale than the config wrong.
48
+ configSchemaCapturedFrom: "2026.9.2"
49
+ configMount: directory
50
+ gatewayPort: 18789
51
+ env:
52
+ configPath: OPENCLAW_CONFIG_PATH
53
+ token: OPENCLAW_GATEWAY_TOKEN
54
+ stateDir: OPENCLAW_STATE_DIR
55
+ startup:
56
+ # Verified: without gateway.mode the gateway exits 78 unless --allow-unconfigured
57
+ # is passed. Setting the mode is the supported answer; the flag exists to bypass a
58
+ # check for "suspicious or clobbered config", so clawops should not rely on it.
59
+ requiresGatewayMode: true
60
+ gatewayMode: "local" # schema accepts local|remote
61
+ allowUnconfigured: false # what 2.x should pass — i.e. do not pass it
62
+ exitCodeOnBlockedStart: 78
63
+ # Provider plugins are not all bundled. A configured-but-missing plugin is
64
+ # auto-installed from ClawHub on first boot, after which the gateway refuses to
65
+ # report ready and exits 1 ("startup convergence"); the next boot succeeds.
66
+ # The install lands in the container's writable layer, so it is lost — and refetched —
67
+ # on every container replacement, which is what clawops's restart path does.
68
+ plugins:
69
+ bundledSourceRoot: "/app/dist/extensions"
70
+ # Two different paths, and the difference matters. An explicit
71
+ # `openclaw plugins install` lands beside the config, so it persists with the
72
+ # config directory clawops already keeps as host state — no extra volume. The
73
+ # startup auto-install instead writes to the container's writable layer, which is
74
+ # lost on every container replacement. Pre-install; do not rely on auto-install.
75
+ installedPath: "<configDir>/extensions"
76
+ autoInstallPath: "/app/npm/projects" # ephemeral — container layer
77
+ convergenceRestartRequired: true # only when auto-installing at startup
78
+ # Reconcile configured providers against loaded plugins. `plugins doctor` is NOT
79
+ # usable for this: it never names a missing provider and exits 1 on duplicate-id
80
+ # warnings during normal operation. SP-10b §1-2.
81
+ verifyCommand: "openclaw plugins list --json"
82
+ verifyField: providerIds
83
+ providers:
84
+ amazon-bedrock:
85
+ bundled: false
86
+ package: "@openclaw/amazon-bedrock-provider"
87
+ install: "openclaw plugins install clawhub:@openclaw/amazon-bedrock-provider"
88
+ requiresEgress: true
89
+ # With no egress the gateway starts cleanly WITHOUT the provider — a healthy
90
+ # deployment missing the model backend it was configured for. clawops defaults
91
+ # to deny-all egress, so this is the default outcome, not an edge case.
92
+ silentlyAbsentWithoutEgress: true
93
+ ollama: { bundled: true }
94
+ anthropic: { bundled: true }
95
+ openai: { bundled: true }
17
96
 
18
- # Provider-specific quirks discovered through testing
19
97
  quirks:
20
- - id: aws-bedrock-aws-profile
98
+ - id: openclaw-2-provider-plugin-install
21
99
  description: |
22
- OpenClaw 2026.4.5+ ignores `auth: "aws-sdk"` in openclaw.json's Bedrock
23
- provider config. Instead, AWS_PROFILE must be set in the systemd
24
- EnvironmentFile so the AWS SDK resolves credentials via IMDS.
100
+ OpenClaw 2.0 does not bundle every model provider. A provider named in
101
+ models.providers whose plugin is missing is installed from ClawHub during
102
+ startup convergence; the gateway then exits 1 and requires one restart. With no
103
+ network egress the gateway starts successfully but without the provider.
25
104
  affected:
26
- versions: ">=2026.4.5"
105
+ versions: ">=2026.8.1"
27
106
  providers: [aws]
28
107
  configs: [openclaw.models.providers.amazon-bedrock]
29
108
  workaround: |
30
- AWS adapter MUST emit BOTH:
31
- 1. openclaw.json with `auth: "aws-sdk"` (for older versions, ignored by newer)
32
- 2. systemd EnvironmentFile with `AWS_PROFILE=default` (or the profile name)
33
- Adapter should test the rendered systemd unit includes the EnvironmentFile.
34
- discoveredFrom: aws-samples/sample-OpenClaw-on-AWS-with-Bedrock troubleshooting docs
109
+ Install the plugin at provisioning time, before the first gateway start:
110
+ openclaw plugins install clawhub:@openclaw/amazon-bedrock-provider
111
+ and/or persist /app/npm/projects so a container replacement does not refetch it.
112
+ Verify after deploy rather than trusting a healthy gateway: a missing provider
113
+ does not fail the health check.
114
+ discoveredFrom: docs/spikes/SP-10-openclaw-2.0-startup-contract.md
35
115
 
36
116
  - id: pnpm-pulumi-hoisting
37
117
  description: |
@@ -43,25 +123,34 @@ quirks:
43
123
  providers: ["*"]
44
124
  workaround: See docs/decisions/0003-pulumi-pnpm.md
45
125
 
46
- # Tested combinations — populated by CI matrix
126
+ # Retired: `aws-bedrock-aws-profile` (AWS_PROFILE in the systemd EnvironmentFile).
127
+ # It described a native/systemd install; clawops is Docker-only per ADR 0013, and on
128
+ # 2.0 the Bedrock question is plugin installation, not credential resolution.
129
+
47
130
  tested:
48
131
  - openclawVersion: "2026.4.5"
49
132
  providers: [aws, gcp, local]
50
133
  nodeVersions: ["20.x", "22.x"]
51
134
  lastTestedAt: "2026-04-15"
135
+ - openclawVersion: "2026.9.1"
136
+ providers: [] # runtime contract characterised only; no deploy path yet
137
+ nodeVersions: ["24.x"]
138
+ lastTestedAt: "2026-09-06"
139
+ notes: "SP-10 — startup contract, plugin install behaviour, config schema capture."
52
140
 
53
- # Known incompatible combinations
54
141
  incompatible:
55
142
  - openclawVersionRange: "<2026.4.5"
56
143
  reason: "Below clawops's declared minimum support. Earlier OpenClaw versions used different config paths and channel registration semantics."
57
144
  - openclawVersionRange: ">=2026.8.1"
58
145
  reason: |
59
- OpenClaw 2.0 changed the container runtime contract. Verified against 2026.8.1:
60
- - No gateway token on first boot => "Refusing to bind gateway to auto without
61
- auth", exit 78, crash-loop under --restart unless-stopped.
146
+ OpenClaw 2.0 changed the container runtime contract. Verified on 2026.8.1 and
147
+ re-verified on 2026.9.1:
148
+ - Without gateway.mode the gateway exits 78 unless --allow-unconfigured is
149
+ passed; clawops writes no mode.
62
150
  - Sessions, transcripts and credentials moved into SQLite under the state
63
151
  directory, which this line does not mount => total state loss on restart.
64
- - Provider plugins (Bedrock included) are install-gated; a configured but
65
- uninstalled provider prevents startup entirely.
152
+ - Provider plugins are not all bundled. A configured provider whose plugin is
153
+ missing is fetched at startup, costing a convergence restart — or is silently
154
+ absent when egress is denied, which is clawops's default.
66
155
  Use clawops 2.x, which targets OpenClaw >= 2026.9.1.
67
156
  useInstead: "@clawops/cli@2"
@@ -4,25 +4,46 @@
4
4
  "title": "ProviderAdapter",
5
5
  "description": "Contract every cloud provider adapter must satisfy. Source of truth for src/providers/types.ts (generated). Per R-meta-1.",
6
6
  "type": "object",
7
- "required": ["name", "credentials", "regions", "instanceTypes", "stateBackend", "operations"],
7
+ "required": [
8
+ "name",
9
+ "credentials",
10
+ "regions",
11
+ "instanceTypes",
12
+ "stateBackend",
13
+ "operations"
14
+ ],
8
15
  "properties": {
9
16
  "name": {
10
17
  "type": "string",
11
- "enum": ["aws", "gcp", "azure", "local"],
18
+ "enum": [
19
+ "aws",
20
+ "gcp",
21
+ "azure",
22
+ "local"
23
+ ],
12
24
  "description": "Lowercase provider id"
13
25
  },
14
26
  "credentials": {
15
27
  "type": "object",
16
28
  "description": "How this provider's credentials are sourced (R6: never in tool args)",
17
- "required": ["source"],
29
+ "required": [
30
+ "source"
31
+ ],
18
32
  "properties": {
19
33
  "source": {
20
- "enum": ["env", "cli-profile", "file", "instance-metadata"],
34
+ "enum": [
35
+ "env",
36
+ "cli-profile",
37
+ "file",
38
+ "instance-metadata"
39
+ ],
21
40
  "description": "Credential resolution mechanism"
22
41
  },
23
42
  "envVars": {
24
43
  "type": "array",
25
- "items": { "type": "string" },
44
+ "items": {
45
+ "type": "string"
46
+ },
26
47
  "description": "Environment variables checked at startup (e.g., AWS_PROFILE)"
27
48
  },
28
49
  "profileName": {
@@ -37,7 +58,9 @@
37
58
  },
38
59
  "regions": {
39
60
  "type": "array",
40
- "items": { "type": "string" },
61
+ "items": {
62
+ "type": "string"
63
+ },
41
64
  "minItems": 1,
42
65
  "description": "Region IDs supported by this adapter (e.g., us-east-1, us-central1, eastus)"
43
66
  },
@@ -47,28 +70,59 @@
47
70
  "description": "Mapping from clawops aliases to provider-native instance types",
48
71
  "items": {
49
72
  "type": "object",
50
- "required": ["alias", "nativeId", "vcpu", "memoryGB", "arch"],
73
+ "required": [
74
+ "alias",
75
+ "nativeId",
76
+ "vcpu",
77
+ "memoryGB",
78
+ "arch"
79
+ ],
51
80
  "properties": {
52
81
  "alias": {
53
- "enum": ["micro", "small", "medium", "large", "gpu"],
82
+ "enum": [
83
+ "micro",
84
+ "small",
85
+ "medium",
86
+ "large",
87
+ "gpu"
88
+ ],
54
89
  "description": "Normalized clawops alias"
55
90
  },
56
91
  "nativeId": {
57
92
  "type": "string",
58
93
  "description": "Provider-native instance type (e.g., t3.small, e2-small, Standard_B2s)"
59
94
  },
60
- "vcpu": { "type": "number", "minimum": 1 },
61
- "memoryGB": { "type": "number", "minimum": 0.5 },
62
- "arch": { "enum": ["x86_64", "arm64"] }
95
+ "vcpu": {
96
+ "type": "number",
97
+ "minimum": 1
98
+ },
99
+ "memoryGB": {
100
+ "type": "number",
101
+ "minimum": 0.5
102
+ },
103
+ "arch": {
104
+ "enum": [
105
+ "x86_64",
106
+ "arm64"
107
+ ]
108
+ }
63
109
  }
64
110
  }
65
111
  },
66
112
  "stateBackend": {
67
113
  "type": "object",
68
- "required": ["scheme", "urlPattern"],
114
+ "required": [
115
+ "scheme",
116
+ "urlPattern"
117
+ ],
69
118
  "properties": {
70
119
  "scheme": {
71
- "enum": ["s3", "gs", "azblob", "file"],
120
+ "enum": [
121
+ "s3",
122
+ "gs",
123
+ "azblob",
124
+ "file"
125
+ ],
72
126
  "description": "Pulumi state backend URL scheme"
73
127
  },
74
128
  "urlPattern": {
@@ -79,41 +133,122 @@
79
133
  },
80
134
  "operations": {
81
135
  "type": "object",
82
- "required": ["provision", "destroy", "describe"],
136
+ "required": [
137
+ "provision",
138
+ "destroy",
139
+ "describe"
140
+ ],
83
141
  "description": "Lifecycle operations every adapter must implement",
84
142
  "properties": {
85
- "provision": { "$ref": "#/$defs/Operation" },
86
- "destroy": { "$ref": "#/$defs/Operation" },
87
- "describe": { "$ref": "#/$defs/Operation" },
88
- "refresh": { "$ref": "#/$defs/Operation" }
143
+ "provision": {
144
+ "$ref": "#/$defs/Operation"
145
+ },
146
+ "destroy": {
147
+ "$ref": "#/$defs/Operation"
148
+ },
149
+ "describe": {
150
+ "$ref": "#/$defs/Operation"
151
+ },
152
+ "refresh": {
153
+ "$ref": "#/$defs/Operation"
154
+ }
89
155
  }
90
156
  },
91
157
  "supportedOpenclawVersions": {
92
158
  "type": "object",
93
159
  "properties": {
94
- "min": { "type": "string", "description": "semver, e.g., 2026.4.5" },
95
- "max": { "type": "string" },
96
- "tested": { "type": "array", "items": { "type": "string" } }
160
+ "min": {
161
+ "type": "string",
162
+ "description": "semver, e.g., 2026.4.5"
163
+ },
164
+ "max": {
165
+ "type": "string"
166
+ },
167
+ "tested": {
168
+ "type": "array",
169
+ "items": {
170
+ "type": "string"
171
+ }
172
+ }
173
+ }
174
+ },
175
+ "preflight": {
176
+ "type": "object",
177
+ "description": "Account-level setup a provider needs before anything can be provisioned, and which clawops can detect and offer to fix. These are not infrastructure \u2014 enabling an API or creating a state bucket happens outside the Pulumi program, because the state backend must exist before Pulumi can run at all. Detected in `doctor`; the setup wizard PROMPTS before changing anything in someone's cloud account.",
178
+ "required": [
179
+ "checks"
180
+ ],
181
+ "properties": {
182
+ "checks": {
183
+ "type": "array",
184
+ "description": "What must be true before a first deploy.",
185
+ "items": {
186
+ "$ref": "#/$defs/PreflightCheck"
187
+ }
188
+ }
97
189
  }
98
190
  }
99
191
  },
100
192
  "$defs": {
101
193
  "Operation": {
102
194
  "type": "object",
103
- "required": ["estimatedDurationSec", "idempotent", "destructive"],
195
+ "required": [
196
+ "estimatedDurationSec",
197
+ "idempotent",
198
+ "destructive"
199
+ ],
104
200
  "properties": {
105
201
  "estimatedDurationSec": {
106
202
  "type": "object",
107
203
  "properties": {
108
- "min": { "type": "number" },
109
- "max": { "type": "number" },
110
- "median": { "type": "number" }
204
+ "min": {
205
+ "type": "number"
206
+ },
207
+ "max": {
208
+ "type": "number"
209
+ },
210
+ "median": {
211
+ "type": "number"
212
+ }
111
213
  },
112
214
  "description": "Used by R12 to pick streaming tier (sync / progress / Tasks)"
113
215
  },
114
- "idempotent": { "type": "boolean" },
115
- "destructive": { "type": "boolean" },
116
- "supportsCancellation": { "type": "boolean", "default": true }
216
+ "idempotent": {
217
+ "type": "boolean"
218
+ },
219
+ "destructive": {
220
+ "type": "boolean"
221
+ },
222
+ "supportsCancellation": {
223
+ "type": "boolean",
224
+ "default": true
225
+ }
226
+ }
227
+ },
228
+ "PreflightCheck": {
229
+ "type": "object",
230
+ "required": [
231
+ "id",
232
+ "label",
233
+ "remediable"
234
+ ],
235
+ "properties": {
236
+ "id": {
237
+ "type": "string",
238
+ "description": "Stable kebab-case id, e.g. `compute-api-enabled`"
239
+ },
240
+ "label": {
241
+ "type": "string",
242
+ "description": "What is being checked, in the operator's terms"
243
+ },
244
+ "remediable": {
245
+ "type": "boolean",
246
+ "description": "Whether clawops can fix it after asking. False means it can only be reported \u2014 a missing permission or an unpaid billing account is not clawops's to resolve."
247
+ },
248
+ "mutates": {
249
+ "type": "string",
250
+ "description": "What the fix changes in the operator's account, shown in the prompt. Required when remediable is true: consent to 'fix it' is not consent to something unnamed."
251
+ }
117
252
  }
118
253
  }
119
254
  }
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- applyPlan
4
- } from "./chunk-35WVQY3X.js";
5
- import "./chunk-6ZFIFDBJ.js";
6
- import "./chunk-BOPSG2LI.js";
7
- import "./chunk-6X45DDGH.js";
8
- import "./chunk-SEZMVVAS.js";
9
- import "./chunk-P5LKWRPL.js";
10
- import "./chunk-EI7CQQ7D.js";
11
- import "./chunk-PVUVI35Y.js";
12
- import "./chunk-A2I76FTA.js";
13
- import "./chunk-CX5SL5HP.js";
14
- import "./chunk-KGXPLI7W.js";
15
- export {
16
- applyPlan
17
- };
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- getConfigDir
4
- } from "./chunk-CX5SL5HP.js";
5
- import "./chunk-KGXPLI7W.js";
6
-
7
- // src/pulumi/automation.ts
8
- import path from "path";
9
- import { LocalWorkspace } from "@pulumi/pulumi/automation";
10
- async function getOrCreateStack(opts) {
11
- const configDir = opts.configDir ?? getConfigDir();
12
- return await LocalWorkspace.createOrSelectStack(
13
- {
14
- stackName: opts.stack,
15
- projectName: "clawops",
16
- program: opts.program
17
- },
18
- {
19
- pulumiHome: path.join(configDir, ".pulumi"),
20
- envVars: {
21
- PULUMI_BACKEND_URL: opts.stateUrl,
22
- PULUMI_SKIP_UPDATE_CHECK: "1"
23
- // R6: cloud credentials inherited from process.env, never set here
24
- }
25
- }
26
- );
27
- }
28
- export {
29
- getOrCreateStack
30
- };