clawup 1.0.0
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 +245 -0
- package/dist/adapters/api-adapter.d.ts +76 -0
- package/dist/adapters/api-adapter.js +250 -0
- package/dist/adapters/api-adapter.js.map +1 -0
- package/dist/adapters/cli-adapter.d.ts +15 -0
- package/dist/adapters/cli-adapter.js +208 -0
- package/dist/adapters/cli-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +22 -0
- package/dist/adapters/index.js +32 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +135 -0
- package/dist/adapters/types.js +14 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bin.d.ts +8 -0
- package/dist/bin.js +221 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/config.d.ts +21 -0
- package/dist/commands/config.js +323 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +7 -0
- package/dist/commands/deploy.js +13 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +7 -0
- package/dist/commands/destroy.js +13 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.js +698 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.js +42 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/push.d.ts +7 -0
- package/dist/commands/push.js +19 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/redeploy.d.ts +7 -0
- package/dist/commands/redeploy.js +13 -0
- package/dist/commands/redeploy.js.map +1 -0
- package/dist/commands/secrets.d.ts +16 -0
- package/dist/commands/secrets.js +169 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/ssh.d.ts +9 -0
- package/dist/commands/ssh.js +108 -0
- package/dist/commands/ssh.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +13 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +126 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.js +13 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/webhooks.d.ts +7 -0
- package/dist/commands/webhooks.js +13 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/lib/__tests__/identity.test.d.ts +1 -0
- package/dist/lib/__tests__/identity.test.js +186 -0
- package/dist/lib/__tests__/identity.test.js.map +1 -0
- package/dist/lib/__tests__/validate-agent.test.d.ts +1 -0
- package/dist/lib/__tests__/validate-agent.test.js +38 -0
- package/dist/lib/__tests__/validate-agent.test.js.map +1 -0
- package/dist/lib/config.d.ts +69 -0
- package/dist/lib/config.js +218 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +5 -0
- package/dist/lib/constants.js +29 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/exec.d.ts +24 -0
- package/dist/lib/exec.js +63 -0
- package/dist/lib/exec.js.map +1 -0
- package/dist/lib/prerequisites.d.ts +8 -0
- package/dist/lib/prerequisites.js +146 -0
- package/dist/lib/prerequisites.js.map +1 -0
- package/dist/lib/process.d.ts +18 -0
- package/dist/lib/process.js +37 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/pulumi.d.ts +37 -0
- package/dist/lib/pulumi.js +87 -0
- package/dist/lib/pulumi.js.map +1 -0
- package/dist/lib/tailscale.d.ts +75 -0
- package/dist/lib/tailscale.js +251 -0
- package/dist/lib/tailscale.js.map +1 -0
- package/dist/lib/tool-helpers.d.ts +15 -0
- package/dist/lib/tool-helpers.js +35 -0
- package/dist/lib/tool-helpers.js.map +1 -0
- package/dist/lib/ui.d.ts +26 -0
- package/dist/lib/ui.js +86 -0
- package/dist/lib/ui.js.map +1 -0
- package/dist/lib/update-check.d.ts +8 -0
- package/dist/lib/update-check.js +151 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/vendor.d.ts +34 -0
- package/dist/lib/vendor.js +128 -0
- package/dist/lib/vendor.js.map +1 -0
- package/dist/lib/workspace.d.ts +21 -0
- package/dist/lib/workspace.js +170 -0
- package/dist/lib/workspace.js.map +1 -0
- package/dist/tools/deploy.d.ts +16 -0
- package/dist/tools/deploy.js +181 -0
- package/dist/tools/deploy.js.map +1 -0
- package/dist/tools/destroy.d.ts +16 -0
- package/dist/tools/destroy.js +119 -0
- package/dist/tools/destroy.js.map +1 -0
- package/dist/tools/index.d.ts +20 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/push.d.ts +29 -0
- package/dist/tools/push.js +341 -0
- package/dist/tools/push.js.map +1 -0
- package/dist/tools/redeploy.d.ts +17 -0
- package/dist/tools/redeploy.js +181 -0
- package/dist/tools/redeploy.js.map +1 -0
- package/dist/tools/status.d.ts +16 -0
- package/dist/tools/status.js +205 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/validate.d.ts +16 -0
- package/dist/tools/validate.js +219 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/webhooks.d.ts +17 -0
- package/dist/tools/webhooks.js +181 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/infra/Pulumi.yaml +6 -0
- package/infra/dist/components/cloud-init.js +412 -0
- package/infra/dist/components/config-generator.js +254 -0
- package/infra/dist/components/hetzner-agent.js +162 -0
- package/infra/dist/components/index.js +18 -0
- package/infra/dist/components/openclaw-agent.js +287 -0
- package/infra/dist/components/shared.js +132 -0
- package/infra/dist/components/types.js +6 -0
- package/infra/dist/index.js +387 -0
- package/infra/dist/shared-vpc.js +167 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts +2 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js +124 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts +32 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js +56 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/constants.d.ts +137 -0
- package/infra/node_modules/@clawup/core/dist/constants.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/constants.js +314 -0
- package/infra/node_modules/@clawup/core/dist/constants.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts +25 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.js +46 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/deps.d.ts +18 -0
- package/infra/node_modules/@clawup/core/dist/deps.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/deps.js +39 -0
- package/infra/node_modules/@clawup/core/dist/deps.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/identity.d.ts +20 -0
- package/infra/node_modules/@clawup/core/dist/identity.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/identity.js +217 -0
- package/infra/node_modules/@clawup/core/dist/identity.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/index.d.ts +18 -0
- package/infra/node_modules/@clawup/core/dist/index.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/index.js +52 -0
- package/infra/node_modules/@clawup/core/dist/index.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts +13 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.js +24 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts +74 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.js +45 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts +6 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.js +13 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts +159 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.js +54 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/skills.d.ts +30 -0
- package/infra/node_modules/@clawup/core/dist/skills.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/skills.js +52 -0
- package/infra/node_modules/@clawup/core/dist/skills.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/types.d.ts +59 -0
- package/infra/node_modules/@clawup/core/dist/types.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/types.js +30 -0
- package/infra/node_modules/@clawup/core/dist/types.js.map +1 -0
- package/infra/node_modules/@clawup/core/package.json +46 -0
- package/infra/package.json +12 -0
- package/package.json +43 -0
- package/scripts/postinstall.mjs +395 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Load/save clawup manifests from ~/.clawup/configs/
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.configsDir = configsDir;
|
|
43
|
+
exports.ensureConfigsDir = ensureConfigsDir;
|
|
44
|
+
exports.configPath = configPath;
|
|
45
|
+
exports.syncManifestToProject = syncManifestToProject;
|
|
46
|
+
exports.manifestExists = manifestExists;
|
|
47
|
+
exports.loadManifest = loadManifest;
|
|
48
|
+
exports.saveManifest = saveManifest;
|
|
49
|
+
exports.listManifests = listManifests;
|
|
50
|
+
exports.deleteManifest = deleteManifest;
|
|
51
|
+
exports.resolveConfigName = resolveConfigName;
|
|
52
|
+
exports.pluginsDir = pluginsDir;
|
|
53
|
+
exports.ensurePluginsDir = ensurePluginsDir;
|
|
54
|
+
exports.loadPluginConfig = loadPluginConfig;
|
|
55
|
+
exports.savePluginConfig = savePluginConfig;
|
|
56
|
+
const fs = __importStar(require("fs"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const os = __importStar(require("os"));
|
|
59
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
60
|
+
const core_1 = require("@clawup/core");
|
|
61
|
+
/**
|
|
62
|
+
* Get the configs directory path (~/.clawup/configs/)
|
|
63
|
+
*/
|
|
64
|
+
function configsDir() {
|
|
65
|
+
return path.join(os.homedir(), core_1.CONFIG_DIR);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Ensure the configs directory exists
|
|
69
|
+
*/
|
|
70
|
+
function ensureConfigsDir() {
|
|
71
|
+
const dir = configsDir();
|
|
72
|
+
if (!fs.existsSync(dir)) {
|
|
73
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the path to a config file by name
|
|
78
|
+
*/
|
|
79
|
+
function configPath(name) {
|
|
80
|
+
return path.join(configsDir(), `${name}.yaml`);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Copy a named config to clawup.yaml so the Pulumi program can read it.
|
|
84
|
+
* When projectDir is provided, writes there instead of process.cwd().
|
|
85
|
+
*/
|
|
86
|
+
function syncManifestToProject(name, projectDir) {
|
|
87
|
+
const src = configPath(name);
|
|
88
|
+
const dest = path.join(projectDir ?? process.cwd(), core_1.MANIFEST_FILE);
|
|
89
|
+
fs.copyFileSync(src, dest);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a config exists by name
|
|
93
|
+
*/
|
|
94
|
+
function manifestExists(name) {
|
|
95
|
+
return fs.existsSync(configPath(name));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load a manifest by name. Returns null if not found or invalid.
|
|
99
|
+
*/
|
|
100
|
+
function loadManifest(name) {
|
|
101
|
+
const filePath = configPath(name);
|
|
102
|
+
if (!fs.existsSync(filePath))
|
|
103
|
+
return null;
|
|
104
|
+
try {
|
|
105
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
106
|
+
return yaml_1.default.parse(raw);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.warn(`[config] Failed to load manifest '${name}' at ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Save a manifest by name
|
|
115
|
+
*/
|
|
116
|
+
function saveManifest(name, manifest) {
|
|
117
|
+
ensureConfigsDir();
|
|
118
|
+
const filePath = configPath(name);
|
|
119
|
+
fs.writeFileSync(filePath, yaml_1.default.stringify(manifest), "utf-8");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* List all saved config names
|
|
123
|
+
*/
|
|
124
|
+
function listManifests() {
|
|
125
|
+
const dir = configsDir();
|
|
126
|
+
if (!fs.existsSync(dir))
|
|
127
|
+
return [];
|
|
128
|
+
return fs
|
|
129
|
+
.readdirSync(dir)
|
|
130
|
+
.filter((f) => f.endsWith(".yaml"))
|
|
131
|
+
.map((f) => f.replace(/\.yaml$/, ""))
|
|
132
|
+
.sort();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Delete a config by name. Returns true if deleted, false if not found.
|
|
136
|
+
*/
|
|
137
|
+
function deleteManifest(name) {
|
|
138
|
+
const filePath = configPath(name);
|
|
139
|
+
if (!fs.existsSync(filePath))
|
|
140
|
+
return false;
|
|
141
|
+
fs.unlinkSync(filePath);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolve a config name: auto-selects if only one config exists,
|
|
146
|
+
* errors with list if ambiguous or none found.
|
|
147
|
+
* @param name Optional explicit config name
|
|
148
|
+
* @returns The resolved config name
|
|
149
|
+
* @throws Error if no configs exist or multiple configs exist without explicit name
|
|
150
|
+
*/
|
|
151
|
+
function resolveConfigName(name) {
|
|
152
|
+
if (name) {
|
|
153
|
+
if (!manifestExists(name)) {
|
|
154
|
+
const available = listManifests();
|
|
155
|
+
if (available.length === 0) {
|
|
156
|
+
throw new Error(`Config '${name}' not found. No configs exist. Run 'clawup init' to create one.`);
|
|
157
|
+
}
|
|
158
|
+
throw new Error(`Config '${name}' not found. Available configs:\n ${available.join("\n ")}`);
|
|
159
|
+
}
|
|
160
|
+
return name;
|
|
161
|
+
}
|
|
162
|
+
const configs = listManifests();
|
|
163
|
+
if (configs.length === 0) {
|
|
164
|
+
throw new Error("No configs found. Run 'clawup init' to create one.");
|
|
165
|
+
}
|
|
166
|
+
if (configs.length === 1) {
|
|
167
|
+
return configs[0];
|
|
168
|
+
}
|
|
169
|
+
throw new Error(`Multiple configs found. Specify one with --config:\n ${configs.join("\n ")}`);
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Plugin config helpers (deprecated — plugin config is now inline in manifest)
|
|
173
|
+
// These remain for backward compat and the `config migrate` command.
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
/**
|
|
176
|
+
* Get the plugins directory for a stack (~/.clawup/configs/<stackName>/plugins/)
|
|
177
|
+
* @deprecated Plugin config is now inline in the manifest. Use `clawup config migrate` to upgrade.
|
|
178
|
+
*/
|
|
179
|
+
function pluginsDir(stackName) {
|
|
180
|
+
return path.join(configsDir(), stackName, core_1.PLUGINS_DIR);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Ensure the plugins directory exists for a stack
|
|
184
|
+
* @deprecated Plugin config is now inline in the manifest.
|
|
185
|
+
*/
|
|
186
|
+
function ensurePluginsDir(stackName) {
|
|
187
|
+
const dir = pluginsDir(stackName);
|
|
188
|
+
if (!fs.existsSync(dir)) {
|
|
189
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Load a plugin config file. Returns null if not found or invalid.
|
|
194
|
+
* @deprecated Plugin config is now inline in the manifest. Use `clawup config migrate` to upgrade.
|
|
195
|
+
*/
|
|
196
|
+
function loadPluginConfig(stackName, pluginName) {
|
|
197
|
+
const filePath = path.join(pluginsDir(stackName), `${pluginName}.yaml`);
|
|
198
|
+
if (!fs.existsSync(filePath))
|
|
199
|
+
return null;
|
|
200
|
+
try {
|
|
201
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
202
|
+
return yaml_1.default.parse(raw);
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.warn(`[config] Failed to load plugin config '${pluginName}' for stack '${stackName}': ${err instanceof Error ? err.message : String(err)}`);
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Save a plugin config file
|
|
211
|
+
* @deprecated Plugin config is now inline in the manifest. Use `clawup config migrate` to upgrade.
|
|
212
|
+
*/
|
|
213
|
+
function savePluginConfig(stackName, pluginName, data) {
|
|
214
|
+
ensurePluginsDir(stackName);
|
|
215
|
+
const filePath = path.join(pluginsDir(stackName), `${pluginName}.yaml`);
|
|
216
|
+
fs.writeFileSync(filePath, yaml_1.default.stringify(data), "utf-8");
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export all constants from @clawup/core for backward compatibility.
|
|
3
|
+
* External consumers importing "clawup/lib/constants" will get these.
|
|
4
|
+
*/
|
|
5
|
+
export { AGENT_ALIASES, AWS_REGIONS, BUILT_IN_IDENTITIES, CONFIG_DIR, COST_ESTIMATES, HETZNER_COST_ESTIMATES, HETZNER_LOCATIONS, HETZNER_SERVER_TYPES_EU, HETZNER_SERVER_TYPES_US, HETZNER_US_LOCATIONS, INSTANCE_TYPES, KEY_INSTRUCTIONS, MANIFEST_FILE, MODEL_PROVIDERS, PLUGINS_DIR, PROVIDERS, SSH_USER, hetznerServerTypes, slackAppManifest, tailscaleHostname, } from "@clawup/core";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tailscaleHostname = exports.slackAppManifest = exports.hetznerServerTypes = exports.SSH_USER = exports.PROVIDERS = exports.PLUGINS_DIR = exports.MODEL_PROVIDERS = exports.MANIFEST_FILE = exports.KEY_INSTRUCTIONS = exports.INSTANCE_TYPES = exports.HETZNER_US_LOCATIONS = exports.HETZNER_SERVER_TYPES_US = exports.HETZNER_SERVER_TYPES_EU = exports.HETZNER_LOCATIONS = exports.HETZNER_COST_ESTIMATES = exports.COST_ESTIMATES = exports.CONFIG_DIR = exports.BUILT_IN_IDENTITIES = exports.AWS_REGIONS = exports.AGENT_ALIASES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Re-export all constants from @clawup/core for backward compatibility.
|
|
6
|
+
* External consumers importing "clawup/lib/constants" will get these.
|
|
7
|
+
*/
|
|
8
|
+
var core_1 = require("@clawup/core");
|
|
9
|
+
Object.defineProperty(exports, "AGENT_ALIASES", { enumerable: true, get: function () { return core_1.AGENT_ALIASES; } });
|
|
10
|
+
Object.defineProperty(exports, "AWS_REGIONS", { enumerable: true, get: function () { return core_1.AWS_REGIONS; } });
|
|
11
|
+
Object.defineProperty(exports, "BUILT_IN_IDENTITIES", { enumerable: true, get: function () { return core_1.BUILT_IN_IDENTITIES; } });
|
|
12
|
+
Object.defineProperty(exports, "CONFIG_DIR", { enumerable: true, get: function () { return core_1.CONFIG_DIR; } });
|
|
13
|
+
Object.defineProperty(exports, "COST_ESTIMATES", { enumerable: true, get: function () { return core_1.COST_ESTIMATES; } });
|
|
14
|
+
Object.defineProperty(exports, "HETZNER_COST_ESTIMATES", { enumerable: true, get: function () { return core_1.HETZNER_COST_ESTIMATES; } });
|
|
15
|
+
Object.defineProperty(exports, "HETZNER_LOCATIONS", { enumerable: true, get: function () { return core_1.HETZNER_LOCATIONS; } });
|
|
16
|
+
Object.defineProperty(exports, "HETZNER_SERVER_TYPES_EU", { enumerable: true, get: function () { return core_1.HETZNER_SERVER_TYPES_EU; } });
|
|
17
|
+
Object.defineProperty(exports, "HETZNER_SERVER_TYPES_US", { enumerable: true, get: function () { return core_1.HETZNER_SERVER_TYPES_US; } });
|
|
18
|
+
Object.defineProperty(exports, "HETZNER_US_LOCATIONS", { enumerable: true, get: function () { return core_1.HETZNER_US_LOCATIONS; } });
|
|
19
|
+
Object.defineProperty(exports, "INSTANCE_TYPES", { enumerable: true, get: function () { return core_1.INSTANCE_TYPES; } });
|
|
20
|
+
Object.defineProperty(exports, "KEY_INSTRUCTIONS", { enumerable: true, get: function () { return core_1.KEY_INSTRUCTIONS; } });
|
|
21
|
+
Object.defineProperty(exports, "MANIFEST_FILE", { enumerable: true, get: function () { return core_1.MANIFEST_FILE; } });
|
|
22
|
+
Object.defineProperty(exports, "MODEL_PROVIDERS", { enumerable: true, get: function () { return core_1.MODEL_PROVIDERS; } });
|
|
23
|
+
Object.defineProperty(exports, "PLUGINS_DIR", { enumerable: true, get: function () { return core_1.PLUGINS_DIR; } });
|
|
24
|
+
Object.defineProperty(exports, "PROVIDERS", { enumerable: true, get: function () { return core_1.PROVIDERS; } });
|
|
25
|
+
Object.defineProperty(exports, "SSH_USER", { enumerable: true, get: function () { return core_1.SSH_USER; } });
|
|
26
|
+
Object.defineProperty(exports, "hetznerServerTypes", { enumerable: true, get: function () { return core_1.hetznerServerTypes; } });
|
|
27
|
+
Object.defineProperty(exports, "slackAppManifest", { enumerable: true, get: function () { return core_1.slackAppManifest; } });
|
|
28
|
+
Object.defineProperty(exports, "tailscaleHostname", { enumerable: true, get: function () { return core_1.tailscaleHostname; } });
|
|
29
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,qCAqBsB;AApBpB,qGAAA,aAAa,OAAA;AACb,mGAAA,WAAW,OAAA;AACX,2GAAA,mBAAmB,OAAA;AACnB,kGAAA,UAAU,OAAA;AACV,sGAAA,cAAc,OAAA;AACd,8GAAA,sBAAsB,OAAA;AACtB,yGAAA,iBAAiB,OAAA;AACjB,+GAAA,uBAAuB,OAAA;AACvB,+GAAA,uBAAuB,OAAA;AACvB,4GAAA,oBAAoB,OAAA;AACpB,sGAAA,cAAc,OAAA;AACd,wGAAA,gBAAgB,OAAA;AAChB,qGAAA,aAAa,OAAA;AACb,uGAAA,eAAe,OAAA;AACf,mGAAA,WAAW,OAAA;AACX,iGAAA,SAAS,OAAA;AACT,gGAAA,QAAQ,OAAA;AACR,0GAAA,kBAAkB,OAAA;AAClB,wGAAA,gBAAgB,OAAA;AAChB,yGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Child process helpers for CLI commands
|
|
3
|
+
*/
|
|
4
|
+
/** Result of a captured command execution */
|
|
5
|
+
export interface ExecResult {
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr: string;
|
|
8
|
+
exitCode: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Execute a command and capture output.
|
|
12
|
+
* Resolves vendored binaries before falling back to system PATH.
|
|
13
|
+
*/
|
|
14
|
+
export declare function capture(command: string, args?: string[], cwd?: string): ExecResult;
|
|
15
|
+
/**
|
|
16
|
+
* Execute a command with streaming output (stdout/stderr pass-through)
|
|
17
|
+
* Returns the exit code.
|
|
18
|
+
* Resolves vendored binaries before falling back to system PATH.
|
|
19
|
+
*/
|
|
20
|
+
export declare function stream(command: string, args?: string[], cwd?: string): Promise<number>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a command exists, checking vendor directory first, then system PATH.
|
|
23
|
+
*/
|
|
24
|
+
export declare function commandExists(command: string): boolean;
|
package/dist/lib/exec.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Child process helpers for CLI commands
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.capture = capture;
|
|
7
|
+
exports.stream = stream;
|
|
8
|
+
exports.commandExists = commandExists;
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const process_1 = require("./process");
|
|
11
|
+
const vendor_1 = require("./vendor");
|
|
12
|
+
/**
|
|
13
|
+
* Execute a command and capture output.
|
|
14
|
+
* Resolves vendored binaries before falling back to system PATH.
|
|
15
|
+
*/
|
|
16
|
+
function capture(command, args = [], cwd) {
|
|
17
|
+
const resolved = (0, vendor_1.resolveCommand)(command);
|
|
18
|
+
try {
|
|
19
|
+
const result = (0, child_process_1.execSync)([resolved, ...args].join(" "), {
|
|
20
|
+
cwd,
|
|
21
|
+
encoding: "utf-8",
|
|
22
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
23
|
+
});
|
|
24
|
+
return { stdout: result.trim(), stderr: "", exitCode: 0 };
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const e = err;
|
|
28
|
+
return {
|
|
29
|
+
stdout: (e.stdout ?? "").toString().trim(),
|
|
30
|
+
stderr: (e.stderr ?? "").toString().trim(),
|
|
31
|
+
exitCode: e.status ?? 1,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Execute a command with streaming output (stdout/stderr pass-through)
|
|
37
|
+
* Returns the exit code.
|
|
38
|
+
* Resolves vendored binaries before falling back to system PATH.
|
|
39
|
+
*/
|
|
40
|
+
function stream(command, args = [], cwd) {
|
|
41
|
+
const resolved = (0, vendor_1.resolveCommand)(command);
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
const opts = {
|
|
44
|
+
cwd,
|
|
45
|
+
stdio: "inherit",
|
|
46
|
+
shell: true,
|
|
47
|
+
};
|
|
48
|
+
const child = (0, child_process_1.spawn)(resolved, args, opts);
|
|
49
|
+
(0, process_1.trackChild)(child);
|
|
50
|
+
child.on("close", (code) => resolve(code ?? 1));
|
|
51
|
+
child.on("error", (err) => {
|
|
52
|
+
console.warn(`[exec] Child process error: ${err.message}`);
|
|
53
|
+
resolve(1);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a command exists, checking vendor directory first, then system PATH.
|
|
59
|
+
*/
|
|
60
|
+
function commandExists(command) {
|
|
61
|
+
return (0, vendor_1.commandExistsWithVendor)(command);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../lib/exec.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAiBH,0BAiBC;AAOD,wBAgBC;AAKD,sCAEC;AA9DD,iDAAmE;AACnE,uCAAuC;AACvC,qCAAmE;AASnE;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACxE,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAA4D,CAAC;QACvE,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;SACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACvE,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAiB;YACzB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAA,oBAAU,EAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAA,gCAAuB,EAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Prerequisite checking for CLI
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.checkPrerequisites = checkPrerequisites;
|
|
40
|
+
const p = __importStar(require("@clack/prompts"));
|
|
41
|
+
const exec_1 = require("./exec");
|
|
42
|
+
const vendor_1 = require("./vendor");
|
|
43
|
+
const workspace_1 = require("./workspace");
|
|
44
|
+
const tailscale_1 = require("./tailscale");
|
|
45
|
+
/**
|
|
46
|
+
* Run all prerequisite checks and display results.
|
|
47
|
+
* Returns true if all pass, false otherwise.
|
|
48
|
+
*/
|
|
49
|
+
async function checkPrerequisites() {
|
|
50
|
+
const results = [];
|
|
51
|
+
// Pulumi CLI
|
|
52
|
+
if ((0, exec_1.commandExists)("pulumi")) {
|
|
53
|
+
const ver = (0, exec_1.capture)("pulumi", ["version"]);
|
|
54
|
+
const source = (0, vendor_1.isVendored)("pulumi") ? "vendored" : "system";
|
|
55
|
+
results.push({ name: "Pulumi", ok: true, message: `found (${ver.stdout}, ${source})` });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
results.push({
|
|
59
|
+
name: "Pulumi",
|
|
60
|
+
ok: false,
|
|
61
|
+
message: "not found",
|
|
62
|
+
hint: "Install from https://www.pulumi.com/docs/iac/download-install/ or run `npm install` to vendor automatically",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Node.js 18+
|
|
66
|
+
if ((0, exec_1.commandExists)("node")) {
|
|
67
|
+
const ver = (0, exec_1.capture)("node", ["-v"]);
|
|
68
|
+
const major = parseInt(ver.stdout.replace("v", "").split(".")[0], 10);
|
|
69
|
+
if (major >= 18) {
|
|
70
|
+
results.push({ name: "Node.js", ok: true, message: `${ver.stdout} (>= 18 required)` });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
results.push({
|
|
74
|
+
name: "Node.js",
|
|
75
|
+
ok: false,
|
|
76
|
+
message: `${ver.stdout} is too old`,
|
|
77
|
+
hint: "Requires Node.js 18+. Install from https://nodejs.org/",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
results.push({
|
|
83
|
+
name: "Node.js",
|
|
84
|
+
ok: false,
|
|
85
|
+
message: "not found",
|
|
86
|
+
hint: "Install from https://nodejs.org/",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// AWS CLI
|
|
90
|
+
if ((0, exec_1.commandExists)("aws")) {
|
|
91
|
+
const source = (0, vendor_1.isVendored)("aws") ? "vendored" : "system";
|
|
92
|
+
results.push({ name: "AWS CLI", ok: true, message: `found (${source})` });
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
results.push({
|
|
96
|
+
name: "AWS CLI",
|
|
97
|
+
ok: false,
|
|
98
|
+
message: "not found",
|
|
99
|
+
hint: "Install from https://aws.amazon.com/cli/ or run `npm install` to vendor automatically",
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Tailscale
|
|
103
|
+
if ((0, tailscale_1.isTailscaleInstalled)()) {
|
|
104
|
+
results.push({ name: "Tailscale", ok: true, message: "found" });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const hint = process.platform === "darwin"
|
|
108
|
+
? "Install from the Mac App Store or https://tailscale.com/download"
|
|
109
|
+
: "Install from https://tailscale.com/download";
|
|
110
|
+
results.push({
|
|
111
|
+
name: "Tailscale",
|
|
112
|
+
ok: false,
|
|
113
|
+
message: "not found",
|
|
114
|
+
hint,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// pnpm (only required in dev mode — installed mode uses npm in the workspace)
|
|
118
|
+
if ((0, workspace_1.isDevMode)()) {
|
|
119
|
+
if ((0, exec_1.commandExists)("pnpm")) {
|
|
120
|
+
results.push({ name: "pnpm", ok: true, message: "found" });
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
results.push({
|
|
124
|
+
name: "pnpm",
|
|
125
|
+
ok: false,
|
|
126
|
+
message: "not found",
|
|
127
|
+
hint: "Install with: npm install -g pnpm",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Display results
|
|
132
|
+
const allOk = results.every((r) => r.ok);
|
|
133
|
+
for (const r of results) {
|
|
134
|
+
if (r.ok) {
|
|
135
|
+
p.log.success(`${r.name}: ${r.message}`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
p.log.error(`${r.name}: ${r.message}`);
|
|
139
|
+
if (r.hint) {
|
|
140
|
+
p.log.message(` ${r.hint}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return allOk;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=prerequisites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../lib/prerequisites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful shutdown and child process tracking.
|
|
3
|
+
*
|
|
4
|
+
* Spawn helpers in exec.ts and cli-adapter.ts register child processes here.
|
|
5
|
+
* bin.ts calls setupGracefulShutdown() at startup so that SIGINT / SIGTERM
|
|
6
|
+
* are forwarded to any running children before the CLI exits.
|
|
7
|
+
*/
|
|
8
|
+
import type { ChildProcess } from "child_process";
|
|
9
|
+
/**
|
|
10
|
+
* Register a child process for cleanup on exit.
|
|
11
|
+
* Automatically unregisters when the child closes or errors.
|
|
12
|
+
*/
|
|
13
|
+
export declare function trackChild(child: ChildProcess): void;
|
|
14
|
+
/**
|
|
15
|
+
* Install SIGINT and SIGTERM handlers that forward the signal
|
|
16
|
+
* to tracked child processes before exiting.
|
|
17
|
+
*/
|
|
18
|
+
export declare function setupGracefulShutdown(): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Graceful shutdown and child process tracking.
|
|
4
|
+
*
|
|
5
|
+
* Spawn helpers in exec.ts and cli-adapter.ts register child processes here.
|
|
6
|
+
* bin.ts calls setupGracefulShutdown() at startup so that SIGINT / SIGTERM
|
|
7
|
+
* are forwarded to any running children before the CLI exits.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.trackChild = trackChild;
|
|
11
|
+
exports.setupGracefulShutdown = setupGracefulShutdown;
|
|
12
|
+
const activeChildren = new Set();
|
|
13
|
+
/**
|
|
14
|
+
* Register a child process for cleanup on exit.
|
|
15
|
+
* Automatically unregisters when the child closes or errors.
|
|
16
|
+
*/
|
|
17
|
+
function trackChild(child) {
|
|
18
|
+
activeChildren.add(child);
|
|
19
|
+
const remove = () => activeChildren.delete(child);
|
|
20
|
+
child.on("close", remove);
|
|
21
|
+
child.on("error", remove);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Install SIGINT and SIGTERM handlers that forward the signal
|
|
25
|
+
* to tracked child processes before exiting.
|
|
26
|
+
*/
|
|
27
|
+
function setupGracefulShutdown() {
|
|
28
|
+
const cleanup = (signal, exitCode) => {
|
|
29
|
+
for (const child of activeChildren) {
|
|
30
|
+
child.kill(signal);
|
|
31
|
+
}
|
|
32
|
+
process.exit(exitCode);
|
|
33
|
+
};
|
|
34
|
+
process.on("SIGINT", () => cleanup("SIGINT", 130));
|
|
35
|
+
process.on("SIGTERM", () => cleanup("SIGTERM", 143));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../lib/process.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAUH,gCAKC;AAMD,sDAUC;AA3BD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAgB,CAAC;AAE/C;;;GAGG;AACH,SAAgB,UAAU,CAAC,KAAmB;IAC5C,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,MAAM,OAAO,GAAG,CAAC,MAAsB,EAAE,QAAgB,EAAE,EAAE;QAC3D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pulumi CLI wrappers
|
|
3
|
+
*/
|
|
4
|
+
import type { VoidResult } from "@clawup/core";
|
|
5
|
+
/**
|
|
6
|
+
* Get the current Pulumi stack name
|
|
7
|
+
*/
|
|
8
|
+
export declare function currentStack(cwd?: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Select a Pulumi stack (create if it doesn't exist).
|
|
11
|
+
* Returns { ok, error } so callers can display the error message.
|
|
12
|
+
*/
|
|
13
|
+
export declare function selectOrCreateStack(stackName: string, cwd?: string): VoidResult;
|
|
14
|
+
/**
|
|
15
|
+
* Set a Pulumi config value
|
|
16
|
+
*/
|
|
17
|
+
export declare function setConfig(key: string, value: string, secret?: boolean, cwd?: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Get a Pulumi config value
|
|
20
|
+
*/
|
|
21
|
+
export declare function getConfig(key: string, cwd?: string): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Get stack outputs as JSON
|
|
24
|
+
*/
|
|
25
|
+
export declare function getStackOutputs(showSecrets?: boolean, cwd?: string): Record<string, unknown> | null;
|
|
26
|
+
/**
|
|
27
|
+
* Run pulumi up with streaming output
|
|
28
|
+
*/
|
|
29
|
+
export declare function pulumiUp(cwd?: string): Promise<number>;
|
|
30
|
+
/**
|
|
31
|
+
* Run pulumi destroy with streaming output
|
|
32
|
+
*/
|
|
33
|
+
export declare function pulumiDestroy(cwd?: string): Promise<number>;
|
|
34
|
+
/**
|
|
35
|
+
* Run pulumi preview with streaming output
|
|
36
|
+
*/
|
|
37
|
+
export declare function pulumiPreview(cwd?: string): Promise<number>;
|