@miosa/cli 1.0.95 → 1.1.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 (51) hide show
  1. package/README.md +83 -17
  2. package/dist/bin/miosa.js +5 -1
  3. package/dist/bin/miosa.js.map +1 -1
  4. package/dist/client.d.ts +1 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +6 -5
  7. package/dist/client.js.map +1 -1
  8. package/dist/commands/cloud.d.ts +3 -0
  9. package/dist/commands/cloud.d.ts.map +1 -0
  10. package/dist/commands/cloud.js +192 -0
  11. package/dist/commands/cloud.js.map +1 -0
  12. package/dist/commands/connect.d.ts +4 -1
  13. package/dist/commands/connect.d.ts.map +1 -1
  14. package/dist/commands/connect.js +46 -15
  15. package/dist/commands/connect.js.map +1 -1
  16. package/dist/commands/databases.d.ts.map +1 -1
  17. package/dist/commands/databases.js +3 -2
  18. package/dist/commands/databases.js.map +1 -1
  19. package/dist/commands/db.js +1 -1
  20. package/dist/commands/desktop.d.ts.map +1 -1
  21. package/dist/commands/desktop.js +2 -1
  22. package/dist/commands/desktop.js.map +1 -1
  23. package/dist/commands/hosts.d.ts +5 -1
  24. package/dist/commands/hosts.d.ts.map +1 -1
  25. package/dist/commands/hosts.js +5 -4
  26. package/dist/commands/hosts.js.map +1 -1
  27. package/dist/commands/mcp.d.ts +25 -0
  28. package/dist/commands/mcp.d.ts.map +1 -1
  29. package/dist/commands/mcp.js +26 -11
  30. package/dist/commands/mcp.js.map +1 -1
  31. package/dist/commands/opencomputers.d.ts +10 -0
  32. package/dist/commands/opencomputers.d.ts.map +1 -0
  33. package/dist/commands/opencomputers.js +25 -0
  34. package/dist/commands/opencomputers.js.map +1 -0
  35. package/dist/commands/sandbox.d.ts.map +1 -1
  36. package/dist/commands/sandbox.js +84 -22
  37. package/dist/commands/sandbox.js.map +1 -1
  38. package/dist/commands/shell.d.ts.map +1 -1
  39. package/dist/commands/shell.js +3 -2
  40. package/dist/commands/shell.js.map +1 -1
  41. package/dist/commands/storage.d.ts.map +1 -1
  42. package/dist/commands/storage.js +3 -2
  43. package/dist/commands/storage.js.map +1 -1
  44. package/dist/commands/templates.d.ts.map +1 -1
  45. package/dist/commands/templates.js +94 -0
  46. package/dist/commands/templates.js.map +1 -1
  47. package/dist/version.d.ts +3 -0
  48. package/dist/version.d.ts.map +1 -0
  49. package/dist/version.js +5 -0
  50. package/dist/version.js.map +1 -0
  51. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/commands/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoD/C"}
1
+ {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/commands/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCzC,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,IAAI,CAyDN"}
@@ -36,10 +36,10 @@ function relativeTime(iso) {
36
36
  return `${h}h ago`;
37
37
  return `${Math.floor(h / 24)}d ago`;
38
38
  }
39
- export function register(program) {
39
+ export function register(program, options = {}) {
40
40
  program
41
- .command("hosts")
42
- .description("List all OpenComputers hosts")
41
+ .command(options.command ?? "hosts")
42
+ .description(options.description ?? "List all OpenComputers hosts")
43
43
  .option("--json", "Output as JSON")
44
44
  .action(async (opts) => {
45
45
  try {
@@ -51,7 +51,8 @@ export function register(program) {
51
51
  return;
52
52
  }
53
53
  if (hosts.length === 0) {
54
- console.log(chalk.dim("No hosts found. Add one with: miosa connect"));
54
+ console.log(chalk.dim(options.emptyHint ??
55
+ "No hosts found. Add one with: miosa opencomputers connect <name>"));
55
56
  return;
56
57
  }
57
58
  renderTable(hosts, [
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/commands/hosts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/commands/hosts.ts"],"names":[],"mappings":"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"}
@@ -17,5 +17,30 @@
17
17
  * }
18
18
  */
19
19
  import type { Command } from "commander";
20
+ import { MiosaClient } from "../client.js";
21
+ interface McpTool {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: {
25
+ type: "object";
26
+ properties: Record<string, unknown>;
27
+ required?: string[];
28
+ };
29
+ }
30
+ type McpContent = {
31
+ type: "text";
32
+ text: string;
33
+ } | {
34
+ type: "image";
35
+ data: string;
36
+ mimeType: string;
37
+ };
38
+ interface McpToolResult {
39
+ content: McpContent[];
40
+ isError?: boolean;
41
+ }
42
+ export declare const MCP_TOOLS: McpTool[];
43
+ export declare function dispatchMcpTool(client: MiosaClient, name: string, args: Record<string, unknown>): Promise<McpToolResult>;
20
44
  export declare function register(program: Command): void;
45
+ export {};
21
46
  //# sourceMappingURL=mcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAorHzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD/C"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAoB3C,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,KAAK,UAAU,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,UAAU,aAAa;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,eAAO,MAAM,SAAS,EAAE,OAAO,EA8oD9B,CAAC;AA4CF,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC,CA4lDxB;AAsYD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD/C"}
@@ -22,8 +22,9 @@ import { request } from "undici";
22
22
  import chalk from "chalk";
23
23
  import { loadConfig } from "../config.js";
24
24
  import { MiosaClient } from "../client.js";
25
+ const SANDBOX_SIZES = ["xs", "small", "medium", "large", "xl"];
25
26
  // ── Tool definitions — mirror the Python MCP server exactly ─────────────────
26
- const TOOL_LIST = [
27
+ export const MCP_TOOLS = [
27
28
  // Lifecycle
28
29
  {
29
30
  name: "computer_create",
@@ -995,8 +996,12 @@ const TOOL_LIST = [
995
996
  type: "string",
996
997
  description: "Template / image ID (default: miosa-sandbox)",
997
998
  },
998
- cpu_count: { type: "integer", description: "vCPU count" },
999
- memory_mb: { type: "integer", description: "Memory in MB" },
999
+ size: {
1000
+ type: "string",
1001
+ enum: [...SANDBOX_SIZES],
1002
+ description: "Canonical sandbox size (default: small)",
1003
+ default: "small",
1004
+ },
1000
1005
  timeout_sec: {
1001
1006
  type: "integer",
1002
1007
  description: "Idle timeout in seconds",
@@ -1702,7 +1707,7 @@ function send(response) {
1702
1707
  process.stdout.write(JSON.stringify(response) + "\n");
1703
1708
  }
1704
1709
  // ── Tool dispatch ────────────────────────────────────────────────────────────
1705
- async function dispatchTool(client, name, args) {
1710
+ export async function dispatchMcpTool(client, name, args) {
1706
1711
  const cid = typeof args["computer_id"] === "string" ? args["computer_id"] : undefined;
1707
1712
  try {
1708
1713
  // ── Lifecycle ──────────────────────────────────────────────────────────
@@ -2425,15 +2430,16 @@ async function dispatchTool(client, name, args) {
2425
2430
  }
2426
2431
  // ── Sandboxes ─────────────────────────────────────────────────────────
2427
2432
  if (name === "sandbox_create") {
2433
+ const rawResourceKeys = ["cpu_count", "memory_mb", "disk_size_mb"].filter((key) => args[key] !== undefined);
2434
+ if (rawResourceKeys.length > 0) {
2435
+ return err(`sandbox_create accepts named size only; remove ${rawResourceKeys.join(", ")} and use size=xs|small|medium|large|xl`);
2436
+ }
2428
2437
  const body = {};
2429
2438
  if (args["name"])
2430
2439
  body["name"] = args["name"];
2431
2440
  if (args["template_id"])
2432
2441
  body["template_id"] = args["template_id"];
2433
- if (args["cpu_count"] !== undefined)
2434
- body["cpu_count"] = args["cpu_count"];
2435
- if (args["memory_mb"] !== undefined)
2436
- body["memory_mb"] = args["memory_mb"];
2442
+ body["size"] = resolveSandboxSize(args["size"]);
2437
2443
  if (args["timeout_sec"] !== undefined)
2438
2444
  body["timeout_sec"] = args["timeout_sec"];
2439
2445
  const result = await client.apiPost("/api/v1/sandboxes", body);
@@ -2976,7 +2982,7 @@ async function dispatchTool(client, name, args) {
2976
2982
  const engine = normalizeDatabaseEngine(args["engine"]);
2977
2983
  const body = { name: args["name"], engine };
2978
2984
  if (engine === "postgresql" && !args["version"])
2979
- body["engine_version"] = "15";
2985
+ body["engine_version"] = "16";
2980
2986
  for (const key of ["size", "region"]) {
2981
2987
  if (args[key])
2982
2988
  body[key] = args[key];
@@ -3102,6 +3108,15 @@ async function dispatchTool(client, name, args) {
3102
3108
  }
3103
3109
  }
3104
3110
  // ── Payload helpers ───────────────────────────────────────────────────────────
3111
+ function resolveSandboxSize(value) {
3112
+ if (value === undefined || value === null || value === "")
3113
+ return "small";
3114
+ if (typeof value === "string" &&
3115
+ SANDBOX_SIZES.includes(value)) {
3116
+ return value;
3117
+ }
3118
+ throw new Error(`Invalid sandbox size '${String(value)}'; expected xs, small, medium, large, or xl`);
3119
+ }
3105
3120
  function unwrapData(payload) {
3106
3121
  if (payload !== null &&
3107
3122
  typeof payload === "object" &&
@@ -3170,7 +3185,7 @@ async function runServer() {
3170
3185
  send({
3171
3186
  jsonrpc: "2.0",
3172
3187
  id,
3173
- result: { tools: TOOL_LIST },
3188
+ result: { tools: MCP_TOOLS },
3174
3189
  });
3175
3190
  break;
3176
3191
  }
@@ -3178,7 +3193,7 @@ async function runServer() {
3178
3193
  const params = req.params;
3179
3194
  const toolName = String(params?.["name"] ?? "");
3180
3195
  const toolArgs = (params?.["arguments"] ?? {});
3181
- const toolResult = await dispatchTool(client, toolName, toolArgs);
3196
+ const toolResult = await dispatchMcpTool(client, toolName, toolArgs);
3182
3197
  send({ jsonrpc: "2.0", id, result: toolResult });
3183
3198
  break;
3184
3199
  }