@chucky.cloud/cli 0.2.1 → 0.2.2

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.
@@ -0,0 +1,23 @@
1
+ export interface PromptOptions {
2
+ project?: string;
3
+ token?: string;
4
+ outputFormat?: "text" | "json" | "stream-json";
5
+ jsonSchema?: string;
6
+ model?: string;
7
+ systemPrompt?: string;
8
+ allowedTools?: string;
9
+ disallowedTools?: string;
10
+ permissionMode?: string;
11
+ dangerouslySkipPermissions?: boolean;
12
+ maxTurns?: number;
13
+ maxBudgetUsd?: number;
14
+ mcpConfig?: string;
15
+ agents?: string;
16
+ betas?: string;
17
+ allowPossession?: boolean;
18
+ }
19
+ /**
20
+ * Main prompt command handler
21
+ */
22
+ export declare function promptCommand(promptText: string | undefined, options: PromptOptions): Promise<void>;
23
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA2Hf"}
@@ -0,0 +1,338 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { select } from "@inquirer/prompts";
4
+ import { requireApiKey, loadProjectConfig } from "../lib/config.js";
5
+ import { ChuckyApi } from "../lib/api.js";
6
+ import { ChuckyClient, createToken, createBudget, browserTool, createMcpServer, getAssistantText, isSuccessResult, } from "@chucky.cloud/sdk";
7
+ import { executeHostBash, executeHostRead, executeHostWrite, executeHostEdit, executeHostGlob, executeHostGrep, } from "../lib/host-tools.js";
8
+ /**
9
+ * Main prompt command handler
10
+ */
11
+ export async function promptCommand(promptText, options) {
12
+ // Read prompt from stdin if not provided
13
+ let message = promptText;
14
+ if (!message) {
15
+ if (!process.stdin.isTTY) {
16
+ message = await readStdin();
17
+ }
18
+ if (!message) {
19
+ console.log(chalk.red("Error: No prompt provided"));
20
+ console.log(chalk.dim("Usage: chucky prompt 'your prompt here'"));
21
+ console.log(chalk.dim(" or: echo 'prompt' | chucky prompt --project myproject"));
22
+ process.exit(1);
23
+ }
24
+ }
25
+ try {
26
+ // Get or use provided token
27
+ let token = options.token;
28
+ let projectName = "custom-token";
29
+ if (!token) {
30
+ const { project, hmacKey } = await resolveProject(options.project);
31
+ projectName = project.name;
32
+ token = await createToken({
33
+ userId: "cli-user",
34
+ projectId: project.id,
35
+ secret: hmacKey,
36
+ budget: createBudget({
37
+ aiDollars: 100,
38
+ computeHours: 10000,
39
+ window: "hour",
40
+ }),
41
+ });
42
+ }
43
+ // Build session options
44
+ const sessionOptions = buildSessionOptions(options);
45
+ // Add host tools if --allow-possession is set
46
+ if (options.allowPossession) {
47
+ const hostTools = getHostTools(options);
48
+ const hostServer = createMcpServer("host-tools", hostTools);
49
+ sessionOptions.mcpServers = [...(sessionOptions.mcpServers || []), hostServer];
50
+ console.log(chalk.yellow(`\n⚠️ Possession mode enabled - Claude can execute commands on your machine`));
51
+ console.log(chalk.dim(` Host tools: ${hostTools.map((t) => t.name).join(", ")}\n`));
52
+ }
53
+ const outputFormat = options.outputFormat || "text";
54
+ const jsonOutput = outputFormat === "json" || outputFormat === "stream-json";
55
+ const spinner = ora(`Connecting to ${chalk.cyan(projectName)}...`).start();
56
+ // Create client and session
57
+ const client = new ChuckyClient({ token });
58
+ const session = await client.createSession(sessionOptions);
59
+ spinner.text = `Sending prompt to ${chalk.cyan(projectName)}...`;
60
+ // Send the message
61
+ await session.send(message);
62
+ spinner.stop();
63
+ // Stream the response
64
+ let finalResult = null;
65
+ for await (const msg of session.stream()) {
66
+ if (jsonOutput) {
67
+ console.log(JSON.stringify(msg));
68
+ }
69
+ else {
70
+ if (msg.type === "assistant") {
71
+ // Use SDK helper to extract text
72
+ const text = getAssistantText(msg);
73
+ if (text) {
74
+ process.stdout.write(text);
75
+ }
76
+ // Also check for tool uses in the content
77
+ const content = msg.message?.content || [];
78
+ for (const block of content) {
79
+ if (typeof block === "object" && block.type === "tool_use") {
80
+ console.log(chalk.blue(`\n[Tool] ${block.name}`));
81
+ }
82
+ }
83
+ }
84
+ else if (msg.type === "user") {
85
+ // Tool results come back as user messages
86
+ const content = msg.message?.content;
87
+ if (Array.isArray(content)) {
88
+ for (const block of content) {
89
+ if (typeof block === "object" && block.type === "tool_result") {
90
+ const resultContent = typeof block.content === "string"
91
+ ? block.content
92
+ : JSON.stringify(block.content);
93
+ const preview = resultContent.length > 200
94
+ ? resultContent.slice(0, 200) + "..."
95
+ : resultContent;
96
+ console.log(chalk.green(`[Result] ${preview}`));
97
+ }
98
+ }
99
+ }
100
+ }
101
+ else if (msg.type === "result") {
102
+ finalResult = msg;
103
+ }
104
+ }
105
+ }
106
+ if (!jsonOutput) {
107
+ console.log(chalk.green("\n\n✓ Complete"));
108
+ }
109
+ else if (outputFormat === "json" && finalResult && isSuccessResult(finalResult)) {
110
+ // For pure JSON mode, also output the final result
111
+ const output = finalResult.structured_output ?? finalResult.result;
112
+ if (options.jsonSchema && output) {
113
+ console.log(JSON.stringify({ finalResult: output }, null, 2));
114
+ }
115
+ }
116
+ // Close the session
117
+ session.close();
118
+ }
119
+ catch (error) {
120
+ console.log(chalk.red(`\nError: ${error.message}`));
121
+ process.exit(1);
122
+ }
123
+ }
124
+ /**
125
+ * Read prompt from stdin
126
+ */
127
+ async function readStdin() {
128
+ return new Promise((resolve) => {
129
+ let data = "";
130
+ process.stdin.setEncoding("utf8");
131
+ process.stdin.on("data", (chunk) => {
132
+ data += chunk;
133
+ });
134
+ process.stdin.on("end", () => {
135
+ resolve(data.trim());
136
+ });
137
+ setTimeout(() => {
138
+ if (!data)
139
+ resolve("");
140
+ }, 100);
141
+ });
142
+ }
143
+ /**
144
+ * Resolve project by name, ID, or interactive selection
145
+ */
146
+ async function resolveProject(projectNameOrId) {
147
+ const apiKey = requireApiKey();
148
+ const api = new ChuckyApi(apiKey);
149
+ if (!projectNameOrId) {
150
+ const localConfig = loadProjectConfig();
151
+ if (localConfig) {
152
+ projectNameOrId = localConfig.projectId;
153
+ }
154
+ }
155
+ const projects = await api.listProjects();
156
+ if (projects.length === 0) {
157
+ throw new Error("No projects found. Create one with 'chucky init' first.");
158
+ }
159
+ let project;
160
+ if (projectNameOrId) {
161
+ project = projects.find((p) => p.id === projectNameOrId ||
162
+ p.name.toLowerCase() === projectNameOrId.toLowerCase());
163
+ if (!project) {
164
+ throw new Error(`Project not found: ${projectNameOrId}`);
165
+ }
166
+ }
167
+ else {
168
+ const choices = projects.map((p) => ({
169
+ name: `${p.name} ${p.isActive ? chalk.green("(active)") : chalk.dim("(inactive)")}`,
170
+ value: p.id,
171
+ }));
172
+ const selectedId = await select({
173
+ message: "Select a project:",
174
+ choices,
175
+ });
176
+ project = projects.find((p) => p.id === selectedId);
177
+ }
178
+ const hmacInfo = await api.getHmacKey(project.id);
179
+ return { project, hmacKey: hmacInfo.hmacKey };
180
+ }
181
+ /**
182
+ * Build session options from CLI options
183
+ */
184
+ function buildSessionOptions(options) {
185
+ const sessionOptions = {};
186
+ if (options.model) {
187
+ const modelMap = {
188
+ sonnet: "claude-sonnet-4-5-20250929",
189
+ opus: "claude-opus-4-5-20250929",
190
+ haiku: "claude-haiku-3-5-20250929",
191
+ };
192
+ sessionOptions.model = (modelMap[options.model] || options.model);
193
+ }
194
+ if (options.systemPrompt) {
195
+ sessionOptions.systemPrompt = options.systemPrompt;
196
+ }
197
+ if (options.allowedTools) {
198
+ sessionOptions.allowedTools = options.allowedTools.split(",").map((t) => t.trim());
199
+ }
200
+ if (options.disallowedTools) {
201
+ sessionOptions.disallowedTools = options.disallowedTools.split(",").map((t) => t.trim());
202
+ }
203
+ if (options.permissionMode) {
204
+ sessionOptions.permissionMode = options.permissionMode;
205
+ }
206
+ if (options.dangerouslySkipPermissions) {
207
+ sessionOptions.permissionMode = "bypassPermissions";
208
+ sessionOptions.allowDangerouslySkipPermissions = true;
209
+ }
210
+ if (options.maxTurns) {
211
+ sessionOptions.maxTurns = options.maxTurns;
212
+ }
213
+ if (options.jsonSchema) {
214
+ try {
215
+ const schema = JSON.parse(options.jsonSchema);
216
+ sessionOptions.outputFormat = {
217
+ type: "json_schema",
218
+ schema,
219
+ };
220
+ }
221
+ catch {
222
+ throw new Error("Invalid JSON in --json-schema");
223
+ }
224
+ }
225
+ return sessionOptions;
226
+ }
227
+ /**
228
+ * Get host tools based on allowed/disallowed lists
229
+ */
230
+ function getHostTools(options) {
231
+ const baseCwd = process.cwd();
232
+ const allHostTools = [
233
+ browserTool({
234
+ name: "HostBash",
235
+ description: "Execute a bash command on the user's local machine",
236
+ inputSchema: {
237
+ type: "object",
238
+ properties: {
239
+ command: { type: "string", description: "The bash command to execute" },
240
+ cwd: { type: "string", description: "Working directory (optional)" },
241
+ timeout: { type: "number", description: "Timeout in ms (optional, default 30000)" },
242
+ },
243
+ required: ["command"],
244
+ },
245
+ handler: async (input) => executeHostBash(input, baseCwd),
246
+ }),
247
+ browserTool({
248
+ name: "HostRead",
249
+ description: "Read a file from the user's local filesystem",
250
+ inputSchema: {
251
+ type: "object",
252
+ properties: {
253
+ path: { type: "string", description: "Path to the file" },
254
+ encoding: { type: "string", description: "File encoding (optional, default utf-8)" },
255
+ },
256
+ required: ["path"],
257
+ },
258
+ handler: async (input) => {
259
+ const { path, encoding } = input;
260
+ return executeHostRead({ path, encoding: encoding }, baseCwd);
261
+ },
262
+ }),
263
+ browserTool({
264
+ name: "HostWrite",
265
+ description: "Write content to a file on the user's local filesystem",
266
+ inputSchema: {
267
+ type: "object",
268
+ properties: {
269
+ path: { type: "string", description: "Path to the file" },
270
+ content: { type: "string", description: "Content to write" },
271
+ encoding: { type: "string", description: "File encoding (optional, default utf-8)" },
272
+ },
273
+ required: ["path", "content"],
274
+ },
275
+ handler: async (input) => {
276
+ const { path, content, encoding } = input;
277
+ return executeHostWrite({ path, content, encoding: encoding }, baseCwd);
278
+ },
279
+ }),
280
+ browserTool({
281
+ name: "HostEdit",
282
+ description: "Edit a file by replacing a specific string with another",
283
+ inputSchema: {
284
+ type: "object",
285
+ properties: {
286
+ path: { type: "string", description: "Path to the file" },
287
+ old_string: { type: "string", description: "String to find" },
288
+ new_string: { type: "string", description: "String to replace with" },
289
+ replace_all: { type: "boolean", description: "Replace all occurrences (optional)" },
290
+ },
291
+ required: ["path", "old_string", "new_string"],
292
+ },
293
+ handler: async (input) => executeHostEdit(input, baseCwd),
294
+ }),
295
+ browserTool({
296
+ name: "HostGlob",
297
+ description: "Find files matching a glob pattern on the user's local filesystem",
298
+ inputSchema: {
299
+ type: "object",
300
+ properties: {
301
+ pattern: { type: "string", description: 'Glob pattern (e.g., "**/*.ts")' },
302
+ cwd: { type: "string", description: "Base directory (optional)" },
303
+ ignore: { type: "array", items: { type: "string" }, description: "Patterns to ignore" },
304
+ },
305
+ required: ["pattern"],
306
+ },
307
+ handler: async (input) => executeHostGlob(input, baseCwd),
308
+ }),
309
+ browserTool({
310
+ name: "HostGrep",
311
+ description: "Search for a pattern in files on the user's local filesystem",
312
+ inputSchema: {
313
+ type: "object",
314
+ properties: {
315
+ pattern: { type: "string", description: "Regex pattern to search for" },
316
+ path: { type: "string", description: "Path to search in (optional)" },
317
+ glob: { type: "string", description: "File pattern filter (optional)" },
318
+ ignoreCase: { type: "boolean", description: "Case-insensitive (optional)" },
319
+ maxResults: { type: "number", description: "Max results (optional, default 100)" },
320
+ },
321
+ required: ["pattern"],
322
+ },
323
+ handler: async (input) => executeHostGrep(input, baseCwd),
324
+ }),
325
+ ];
326
+ // Filter based on allowed/disallowed
327
+ let tools = allHostTools;
328
+ if (options.allowedTools) {
329
+ const allowed = options.allowedTools.split(",").map((t) => t.trim());
330
+ tools = tools.filter((t) => allowed.includes(t.name));
331
+ }
332
+ if (options.disallowedTools) {
333
+ const disallowed = options.disallowedTools.split(",").map((t) => t.trim());
334
+ tools = tools.filter((t) => !disallowed.includes(t.name));
335
+ }
336
+ return tools;
337
+ }
338
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,11 +7,12 @@ import { deployCommand } from "./commands/deploy.js";
7
7
  import { keysCommand } from "./commands/keys.js";
8
8
  import { configAnthropicCommand } from "./commands/config.js";
9
9
  import { deleteCommand } from "./commands/delete.js";
10
+ import { promptCommand } from "./commands/prompt.js";
10
11
  const program = new Command();
11
12
  program
12
13
  .name("chucky")
13
14
  .description("CLI for deploying workspaces to Chucky cloud")
14
- .version("0.1.0");
15
+ .version("0.2.2");
15
16
  // Login command
16
17
  program
17
18
  .command("login")
@@ -55,6 +56,27 @@ program
55
56
  .command("delete [projectId]")
56
57
  .description("Delete a project")
57
58
  .action(deleteCommand);
59
+ // Prompt command
60
+ program
61
+ .command("prompt [prompt]")
62
+ .description("Send a prompt to a Chucky project")
63
+ .option("--project <name|id>", "Project to run against")
64
+ .option("--token <jwt>", "Use a pre-generated JWT token")
65
+ .option("--output-format <format>", "Output format: text, json, stream-json", "text")
66
+ .option("--json-schema <schema>", "JSON Schema for structured output")
67
+ .option("--model <model>", "Model: sonnet, opus, haiku, or full name")
68
+ .option("--system-prompt <prompt>", "System prompt for the session")
69
+ .option("--allowed-tools <tools>", "Comma-separated list of allowed tools")
70
+ .option("--disallowed-tools <tools>", "Comma-separated list of disallowed tools")
71
+ .option("--permission-mode <mode>", "Permission mode (bypassPermissions, default, etc.)")
72
+ .option("--dangerously-skip-permissions", "Bypass all permission checks")
73
+ .option("--max-turns <n>", "Maximum conversation turns", parseInt)
74
+ .option("--max-budget-usd <amount>", "Maximum spend limit", parseFloat)
75
+ .option("--mcp-config <json>", "MCP servers configuration (JSON)")
76
+ .option("--agents <json>", "Custom agents definition (JSON)")
77
+ .option("--betas <betas>", "Beta headers (comma-separated)")
78
+ .option("--allow-possession", "Enable host tools - Claude can execute commands on your machine")
79
+ .action(promptCommand);
58
80
  // Parse arguments
59
81
  program.parse();
60
82
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;KACpE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,kBAAkB;AAClB,MAAM,SAAS,GAAG,OAAO;KACtB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAE7C,SAAS;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAElC,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { ToolResult } from "@chucky.cloud/sdk";
2
+ /**
3
+ * Execute HostBash tool
4
+ */
5
+ export declare function executeHostBash(input: {
6
+ command: string;
7
+ cwd?: string;
8
+ timeout?: number;
9
+ }, baseCwd: string): Promise<ToolResult>;
10
+ /**
11
+ * Execute HostRead tool
12
+ */
13
+ export declare function executeHostRead(input: {
14
+ path: string;
15
+ encoding?: BufferEncoding;
16
+ }, baseCwd: string): Promise<ToolResult>;
17
+ /**
18
+ * Execute HostWrite tool
19
+ */
20
+ export declare function executeHostWrite(input: {
21
+ path: string;
22
+ content: string;
23
+ encoding?: BufferEncoding;
24
+ }, baseCwd: string): Promise<ToolResult>;
25
+ /**
26
+ * Execute HostEdit tool
27
+ */
28
+ export declare function executeHostEdit(input: {
29
+ path: string;
30
+ old_string: string;
31
+ new_string: string;
32
+ replace_all?: boolean;
33
+ }, baseCwd: string): Promise<ToolResult>;
34
+ /**
35
+ * Execute HostGlob tool
36
+ */
37
+ export declare function executeHostGlob(input: {
38
+ pattern: string;
39
+ cwd?: string;
40
+ ignore?: string[];
41
+ }, baseCwd: string): Promise<ToolResult>;
42
+ /**
43
+ * Execute HostGrep tool
44
+ */
45
+ export declare function executeHostGrep(input: {
46
+ pattern: string;
47
+ path?: string;
48
+ glob?: string;
49
+ ignoreCase?: boolean;
50
+ maxResults?: number;
51
+ }, baseCwd: string): Promise<ToolResult>;
52
+ //# sourceMappingURL=host-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-tools.d.ts","sourceRoot":"","sources":["../../src/lib/host-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBpD;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1D,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAmCrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,EAClD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,EACnE,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAUrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EACtF,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC3D,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAerB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAiDrB"}
@@ -0,0 +1,178 @@
1
+ import { spawn } from "node:child_process";
2
+ import { readFileSync, writeFileSync, existsSync, statSync } from "node:fs";
3
+ import { resolve, join } from "node:path";
4
+ import { glob } from "glob";
5
+ /**
6
+ * Helper to create a text result
7
+ */
8
+ function textResult(text) {
9
+ return { content: [{ type: "text", text }] };
10
+ }
11
+ /**
12
+ * Helper to create an error result
13
+ */
14
+ function errorResult(error) {
15
+ return { content: [{ type: "text", text: `Error: ${error}` }], isError: true };
16
+ }
17
+ /**
18
+ * Execute HostBash tool
19
+ */
20
+ export async function executeHostBash(input, baseCwd) {
21
+ const { command, cwd, timeout = 30000 } = input;
22
+ const workingDir = cwd ? resolve(baseCwd, cwd) : baseCwd;
23
+ return new Promise((resolve) => {
24
+ const proc = spawn("bash", ["-c", command], {
25
+ cwd: workingDir,
26
+ env: process.env,
27
+ timeout,
28
+ });
29
+ let stdout = "";
30
+ let stderr = "";
31
+ proc.stdout?.on("data", (data) => {
32
+ stdout += data.toString();
33
+ });
34
+ proc.stderr?.on("data", (data) => {
35
+ stderr += data.toString();
36
+ });
37
+ proc.on("close", (code) => {
38
+ const output = stdout + (stderr ? `\n[stderr]\n${stderr}` : "");
39
+ if (code !== 0) {
40
+ resolve(errorResult(output || `Process exited with code ${code}`));
41
+ }
42
+ else {
43
+ resolve(textResult(output || "(no output)"));
44
+ }
45
+ });
46
+ proc.on("error", (err) => {
47
+ resolve(errorResult(`Failed to execute command: ${err.message}`));
48
+ });
49
+ });
50
+ }
51
+ /**
52
+ * Execute HostRead tool
53
+ */
54
+ export async function executeHostRead(input, baseCwd) {
55
+ const { path: filePath, encoding = "utf-8" } = input;
56
+ const fullPath = resolve(baseCwd, filePath);
57
+ if (!existsSync(fullPath)) {
58
+ return errorResult(`File not found: ${fullPath}`);
59
+ }
60
+ const stat = statSync(fullPath);
61
+ if (stat.isDirectory()) {
62
+ return errorResult(`Path is a directory, not a file: ${fullPath}`);
63
+ }
64
+ try {
65
+ const content = readFileSync(fullPath, encoding);
66
+ return textResult(content);
67
+ }
68
+ catch (err) {
69
+ return errorResult(`Failed to read file: ${err.message}`);
70
+ }
71
+ }
72
+ /**
73
+ * Execute HostWrite tool
74
+ */
75
+ export async function executeHostWrite(input, baseCwd) {
76
+ const { path: filePath, content, encoding = "utf-8" } = input;
77
+ const fullPath = resolve(baseCwd, filePath);
78
+ try {
79
+ writeFileSync(fullPath, content, encoding);
80
+ return textResult(`Successfully wrote ${content.length} characters to ${fullPath}`);
81
+ }
82
+ catch (err) {
83
+ return errorResult(`Failed to write file: ${err.message}`);
84
+ }
85
+ }
86
+ /**
87
+ * Execute HostEdit tool
88
+ */
89
+ export async function executeHostEdit(input, baseCwd) {
90
+ const { path: filePath, old_string, new_string, replace_all = false } = input;
91
+ const fullPath = resolve(baseCwd, filePath);
92
+ if (!existsSync(fullPath)) {
93
+ return errorResult(`File not found: ${fullPath}`);
94
+ }
95
+ try {
96
+ let content = readFileSync(fullPath, "utf-8");
97
+ if (!content.includes(old_string)) {
98
+ return errorResult(`String not found in file: "${old_string.slice(0, 50)}${old_string.length > 50 ? "..." : ""}"`);
99
+ }
100
+ const occurrences = content.split(old_string).length - 1;
101
+ if (replace_all) {
102
+ content = content.split(old_string).join(new_string);
103
+ }
104
+ else {
105
+ if (occurrences > 1) {
106
+ return errorResult(`Found ${occurrences} occurrences of the string. Set replace_all=true or provide more context to make it unique.`);
107
+ }
108
+ content = content.replace(old_string, new_string);
109
+ }
110
+ writeFileSync(fullPath, content, "utf-8");
111
+ return textResult(`Successfully edited ${fullPath}${replace_all ? ` (${occurrences} replacements)` : ""}`);
112
+ }
113
+ catch (err) {
114
+ return errorResult(`Failed to edit file: ${err.message}`);
115
+ }
116
+ }
117
+ /**
118
+ * Execute HostGlob tool
119
+ */
120
+ export async function executeHostGlob(input, baseCwd) {
121
+ const { pattern, cwd, ignore = ["node_modules/**", ".git/**"] } = input;
122
+ const workingDir = cwd ? resolve(baseCwd, cwd) : baseCwd;
123
+ try {
124
+ const files = await glob(pattern, {
125
+ cwd: workingDir,
126
+ ignore,
127
+ nodir: true,
128
+ });
129
+ return textResult(files.length > 0 ? files.join("\n") : "(no files found)");
130
+ }
131
+ catch (err) {
132
+ return errorResult(`Glob search failed: ${err.message}`);
133
+ }
134
+ }
135
+ /**
136
+ * Execute HostGrep tool
137
+ */
138
+ export async function executeHostGrep(input, baseCwd) {
139
+ const { pattern, path: searchPath = ".", glob: fileGlob = "**/*", ignoreCase = false, maxResults = 100, } = input;
140
+ const workingDir = resolve(baseCwd, searchPath);
141
+ try {
142
+ const regex = new RegExp(pattern, ignoreCase ? "gi" : "g");
143
+ const files = await glob(fileGlob, {
144
+ cwd: workingDir,
145
+ ignore: ["node_modules/**", ".git/**"],
146
+ nodir: true,
147
+ });
148
+ const results = [];
149
+ for (const file of files) {
150
+ if (results.length >= maxResults)
151
+ break;
152
+ const fullPath = join(workingDir, file);
153
+ try {
154
+ const stat = statSync(fullPath);
155
+ if (stat.size > 1024 * 1024)
156
+ continue; // Skip files > 1MB
157
+ const content = readFileSync(fullPath, "utf-8");
158
+ const lines = content.split("\n");
159
+ for (let i = 0; i < lines.length; i++) {
160
+ if (results.length >= maxResults)
161
+ break;
162
+ if (regex.test(lines[i])) {
163
+ results.push(`${file}:${i + 1}: ${lines[i].trim()}`);
164
+ }
165
+ regex.lastIndex = 0;
166
+ }
167
+ }
168
+ catch {
169
+ // Skip files that can't be read
170
+ }
171
+ }
172
+ return textResult(results.length > 0 ? results.join("\n") : "(no matches found)");
173
+ }
174
+ catch (err) {
175
+ return errorResult(`Grep search failed: ${err.message}`);
176
+ }
177
+ }
178
+ //# sourceMappingURL=host-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-tools.js","sourceRoot":"","sources":["../../src/lib/host-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface TokenOptions {
2
+ projectId: string;
3
+ hmacSecret: string;
4
+ expiresInSeconds?: number;
5
+ }
6
+ /**
7
+ * Generate a JWT token for the prompt API
8
+ */
9
+ export declare function generateToken(options: TokenOptions): string;
10
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAwB3D"}
@@ -0,0 +1,39 @@
1
+ import crypto from "node:crypto";
2
+ /**
3
+ * CLI user ID - hardcoded for developer CLI usage
4
+ */
5
+ const CLI_USER_ID = "cli-user";
6
+ /**
7
+ * CLI budget - effectively unlimited for developer usage
8
+ */
9
+ const CLI_BUDGET = {
10
+ ai: 100_000_000, // $100 in microdollars
11
+ compute: 36_000_000, // 10,000 hours in seconds
12
+ window: "hour",
13
+ };
14
+ /**
15
+ * Generate a JWT token for the prompt API
16
+ */
17
+ export function generateToken(options) {
18
+ const { projectId, hmacSecret, expiresInSeconds = 3600 } = options;
19
+ const now = Math.floor(Date.now() / 1000);
20
+ const payload = {
21
+ sub: CLI_USER_ID,
22
+ iss: projectId,
23
+ exp: now + expiresInSeconds,
24
+ iat: now,
25
+ budget: {
26
+ ...CLI_BUDGET,
27
+ windowStart: new Date().toISOString().split("T")[0] + "T00:00:00Z",
28
+ },
29
+ };
30
+ const header = { alg: "HS256", typ: "JWT" };
31
+ const headerB64 = Buffer.from(JSON.stringify(header)).toString("base64url");
32
+ const payloadB64 = Buffer.from(JSON.stringify(payload)).toString("base64url");
33
+ const signature = crypto
34
+ .createHmac("sha256", hmacSecret)
35
+ .update(`${headerB64}.${payloadB64}`)
36
+ .digest("base64url");
37
+ return `${headerB64}.${payloadB64}.${signature}`;
38
+ }
39
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE,WAAW,EAAE,uBAAuB;IACxC,OAAO,EAAE,UAAU,EAAE,0BAA0B;IAC/C,MAAM,EAAE,MAAe;CACxB,CAAC;AAQF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IACjD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,WAAW;QAChB,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,GAAG,GAAG,gBAAgB;QAC3B,GAAG,EAAE,GAAG;QACR,MAAM,EAAE;YACN,GAAG,UAAU;YACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;SACnE;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,MAAM;SACrB,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;SAChC,MAAM,CAAC,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;SACpC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO,GAAG,SAAS,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;AACnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chucky.cloud/cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "CLI for deploying workspaces to Chucky cloud",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,9 +22,12 @@
22
22
  "author": "",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
+ "@chucky.cloud/sdk": "^0.2.4",
26
+ "@inquirer/prompts": "^7.0.0",
25
27
  "archiver": "^7.0.1",
26
28
  "chalk": "^5.3.0",
27
29
  "commander": "^12.1.0",
30
+ "glob": "^11.0.0",
28
31
  "inquirer": "^12.0.0",
29
32
  "ora": "^8.1.0"
30
33
  },