@rooaak/cli 0.1.0-beta.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 (82) hide show
  1. package/README.md +121 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +4 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +1 -0
  8. package/dist/src/commands/auth-login.d.ts +3 -0
  9. package/dist/src/commands/auth-login.d.ts.map +1 -0
  10. package/dist/src/commands/auth-login.js +97 -0
  11. package/dist/src/commands/config-profile-use.d.ts +3 -0
  12. package/dist/src/commands/config-profile-use.d.ts.map +1 -0
  13. package/dist/src/commands/config-profile-use.js +88 -0
  14. package/dist/src/commands/config-whoami.d.ts +3 -0
  15. package/dist/src/commands/config-whoami.d.ts.map +1 -0
  16. package/dist/src/commands/config-whoami.js +101 -0
  17. package/dist/src/commands/help.d.ts +3 -0
  18. package/dist/src/commands/help.d.ts.map +1 -0
  19. package/dist/src/commands/help.js +61 -0
  20. package/dist/src/commands/init/index.d.ts +3 -0
  21. package/dist/src/commands/init/index.d.ts.map +1 -0
  22. package/dist/src/commands/init/index.js +756 -0
  23. package/dist/src/commands/init/prompting.d.ts +16 -0
  24. package/dist/src/commands/init/prompting.d.ts.map +1 -0
  25. package/dist/src/commands/init/prompting.js +63 -0
  26. package/dist/src/commands/init/wait-for-message.d.ts +45 -0
  27. package/dist/src/commands/init/wait-for-message.d.ts.map +1 -0
  28. package/dist/src/commands/init/wait-for-message.js +27 -0
  29. package/dist/src/commands/version.d.ts +3 -0
  30. package/dist/src/commands/version.d.ts.map +1 -0
  31. package/dist/src/commands/version.js +14 -0
  32. package/dist/src/generated/handlers.d.ts +5 -0
  33. package/dist/src/generated/handlers.d.ts.map +1 -0
  34. package/dist/src/generated/handlers.js +17 -0
  35. package/dist/src/generated/manifest.d.ts +3 -0
  36. package/dist/src/generated/manifest.d.ts.map +1 -0
  37. package/dist/src/generated/manifest.js +56 -0
  38. package/dist/src/lib/argv.d.ts +16 -0
  39. package/dist/src/lib/argv.d.ts.map +1 -0
  40. package/dist/src/lib/argv.js +68 -0
  41. package/dist/src/lib/base-url.d.ts +7 -0
  42. package/dist/src/lib/base-url.d.ts.map +1 -0
  43. package/dist/src/lib/base-url.js +6 -0
  44. package/dist/src/lib/exit-codes.d.ts +11 -0
  45. package/dist/src/lib/exit-codes.d.ts.map +1 -0
  46. package/dist/src/lib/exit-codes.js +29 -0
  47. package/dist/src/lib/generated-command.d.ts +25 -0
  48. package/dist/src/lib/generated-command.d.ts.map +1 -0
  49. package/dist/src/lib/generated-command.js +357 -0
  50. package/dist/src/lib/normalize-error.d.ts +45 -0
  51. package/dist/src/lib/normalize-error.d.ts.map +1 -0
  52. package/dist/src/lib/normalize-error.js +128 -0
  53. package/dist/src/lib/options.d.ts +12 -0
  54. package/dist/src/lib/options.d.ts.map +1 -0
  55. package/dist/src/lib/options.js +49 -0
  56. package/dist/src/lib/package-version.d.ts +2 -0
  57. package/dist/src/lib/package-version.d.ts.map +1 -0
  58. package/dist/src/lib/package-version.js +22 -0
  59. package/dist/src/lib/paths.d.ts +2 -0
  60. package/dist/src/lib/paths.d.ts.map +1 -0
  61. package/dist/src/lib/paths.js +21 -0
  62. package/dist/src/lib/profile-name.d.ts +2 -0
  63. package/dist/src/lib/profile-name.d.ts.map +1 -0
  64. package/dist/src/lib/profile-name.js +4 -0
  65. package/dist/src/lib/profile-store.d.ts +31 -0
  66. package/dist/src/lib/profile-store.d.ts.map +1 -0
  67. package/dist/src/lib/profile-store.js +179 -0
  68. package/dist/src/lib/renderer.d.ts +10 -0
  69. package/dist/src/lib/renderer.d.ts.map +1 -0
  70. package/dist/src/lib/renderer.js +25 -0
  71. package/dist/src/lib/run.d.ts +12 -0
  72. package/dist/src/lib/run.d.ts.map +1 -0
  73. package/dist/src/lib/run.js +108 -0
  74. package/dist/src/lib/transport.d.ts +37 -0
  75. package/dist/src/lib/transport.d.ts.map +1 -0
  76. package/dist/src/lib/transport.js +65 -0
  77. package/dist/src/lib/types.d.ts +22 -0
  78. package/dist/src/lib/types.d.ts.map +1 -0
  79. package/dist/src/lib/types.js +1 -0
  80. package/package.json +46 -0
  81. package/rooaak.js +39 -0
  82. package/schemas/openapi.v1.json +6013 -0
@@ -0,0 +1,16 @@
1
+ export type PromptIO = {
2
+ stderr: NodeJS.WritableStream;
3
+ stdin: NodeJS.ReadableStream;
4
+ stdinIsTTY: boolean;
5
+ };
6
+ export declare function promptText(io: PromptIO, question: string, options?: {
7
+ defaultValue?: string;
8
+ allowEmpty?: boolean;
9
+ }): Promise<string>;
10
+ export declare function promptConfirm(io: PromptIO, question: string, options?: {
11
+ defaultYes?: boolean;
12
+ }): Promise<boolean>;
13
+ export declare function promptSecret(io: PromptIO, question: string, options?: {
14
+ allowEmpty?: boolean;
15
+ }): Promise<string>;
16
+ //# sourceMappingURL=prompting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompting.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/prompting.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IAErB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBxH;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,63 @@
1
+ import readline from "node:readline/promises";
2
+ export async function promptText(io, question, options) {
3
+ const rl = readline.createInterface({
4
+ input: io.stdin,
5
+ output: io.stderr,
6
+ terminal: io.stdinIsTTY,
7
+ });
8
+ try {
9
+ const suffix = options?.defaultValue ? ` [${options.defaultValue}]` : "";
10
+ const answer = (await rl.question(`${question}${suffix}: `)).trim();
11
+ if (answer.length === 0) {
12
+ if (options?.defaultValue)
13
+ return options.defaultValue;
14
+ if (options?.allowEmpty)
15
+ return "";
16
+ }
17
+ return answer;
18
+ }
19
+ finally {
20
+ rl.close();
21
+ }
22
+ }
23
+ export async function promptConfirm(io, question, options) {
24
+ const defaultYes = options?.defaultYes ?? true;
25
+ const hint = defaultYes ? "Y/n" : "y/N";
26
+ const rl = readline.createInterface({
27
+ input: io.stdin,
28
+ output: io.stderr,
29
+ terminal: io.stdinIsTTY,
30
+ });
31
+ try {
32
+ const answer = (await rl.question(`${question} (${hint}): `)).trim().toLowerCase();
33
+ if (answer === "")
34
+ return defaultYes;
35
+ if (answer === "y" || answer === "yes")
36
+ return true;
37
+ if (answer === "n" || answer === "no")
38
+ return false;
39
+ return defaultYes;
40
+ }
41
+ finally {
42
+ rl.close();
43
+ }
44
+ }
45
+ export async function promptSecret(io, question, options) {
46
+ const rl = readline.createInterface({
47
+ input: io.stdin,
48
+ output: io.stderr,
49
+ // Disable terminal echo for secrets.
50
+ terminal: false,
51
+ });
52
+ try {
53
+ io.stderr.write(`${question}: `);
54
+ const answer = (await rl.question("")).trim();
55
+ if (!options?.allowEmpty && answer.length === 0)
56
+ return "";
57
+ return answer;
58
+ }
59
+ finally {
60
+ io.stderr.write("\n");
61
+ rl.close();
62
+ }
63
+ }
@@ -0,0 +1,45 @@
1
+ import { ExitCode } from "../../lib/exit-codes.js";
2
+ import type { Transport } from "../../lib/transport.js";
3
+ export type MessageRecord = {
4
+ id: string;
5
+ agentId: string;
6
+ sessionId: string;
7
+ message: string;
8
+ response: string | null;
9
+ status: string;
10
+ createdAt: string;
11
+ deliveredAt: string | null;
12
+ };
13
+ export type WaitForMessageResult = {
14
+ ok: true;
15
+ kind: "responded";
16
+ message: MessageRecord;
17
+ meta: {
18
+ status: number;
19
+ requestId?: string;
20
+ };
21
+ } | {
22
+ ok: true;
23
+ kind: "timeout";
24
+ messageId: string;
25
+ last?: MessageRecord;
26
+ waitedMs: number;
27
+ } | {
28
+ ok: false;
29
+ exit: ExitCode;
30
+ error: {
31
+ code: string;
32
+ message: string;
33
+ details: Record<string, unknown>;
34
+ meta: {
35
+ status?: number;
36
+ requestId?: string;
37
+ };
38
+ };
39
+ };
40
+ export declare function waitForMessageResponse(input: {
41
+ transport: Transport;
42
+ messageId: string;
43
+ timeoutMs: number;
44
+ }): Promise<WaitForMessageResult>;
45
+ //# sourceMappingURL=wait-for-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait-for-message.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/wait-for-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACrG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAM7J,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2BhC"}
@@ -0,0 +1,27 @@
1
+ import { exitCodeForError } from "../../lib/normalize-error.js";
2
+ function sleep(ms) {
3
+ return new Promise((resolve) => setTimeout(resolve, ms));
4
+ }
5
+ export async function waitForMessageResponse(input) {
6
+ const startedAt = Date.now();
7
+ let delayMs = 250;
8
+ let last;
9
+ while (true) {
10
+ const httpRes = await input.transport.getJson(`/api/v1/messages/${input.messageId}`);
11
+ if (!httpRes.ok) {
12
+ const err = httpRes.error;
13
+ return { ok: false, exit: exitCodeForError(err), error: err };
14
+ }
15
+ last = httpRes.data;
16
+ if (last.status === "responded" && typeof last.response === "string") {
17
+ return { ok: true, kind: "responded", message: last, meta: { status: httpRes.status, requestId: httpRes.requestId } };
18
+ }
19
+ const waitedMs = Date.now() - startedAt;
20
+ if (waitedMs >= input.timeoutMs) {
21
+ return { ok: true, kind: "timeout", messageId: input.messageId, last, waitedMs };
22
+ }
23
+ // Backoff up to 2s; no delay before the first poll is achieved by starting at 250ms and checking time after fetch.
24
+ await sleep(delayMs);
25
+ delayMs = Math.min(Math.floor(delayMs * 1.4), 2000);
26
+ }
27
+ }
@@ -0,0 +1,3 @@
1
+ import type { CommandContext } from "../lib/types.js";
2
+ export declare function versionCommand(ctx: CommandContext): number;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/commands/version.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAU1D"}
@@ -0,0 +1,14 @@
1
+ import { ExitCode } from "../lib/exit-codes.js";
2
+ import { getPackageVersion } from "../lib/package-version.js";
3
+ import { toJsonOkEnvelope } from "../lib/normalize-error.js";
4
+ import { createRenderer } from "../lib/renderer.js";
5
+ export function versionCommand(ctx) {
6
+ const r = createRenderer(ctx);
7
+ const version = getPackageVersion();
8
+ if (ctx.flags.json) {
9
+ r.json(toJsonOkEnvelope({ name: "rooaak", version }));
10
+ return ExitCode.Success;
11
+ }
12
+ ctx.stdout.write(`rooaak ${version}\n`);
13
+ return ExitCode.Success;
14
+ }
@@ -0,0 +1,5 @@
1
+ import type { CommandContext } from "../lib/types.js";
2
+ import { type GeneratedCommandSpec } from "../lib/generated-command.js";
3
+ export declare function findGeneratedCommand(group: string, action?: string): GeneratedCommandSpec | null;
4
+ export declare function dispatchGeneratedCommand(ctx: CommandContext, group: string, action: string, argv: string[]): Promise<number>;
5
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/generated/handlers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAQ7F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAGhG;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlI"}
@@ -0,0 +1,17 @@
1
+ import { runGeneratedCommand } from "../lib/generated-command.js";
2
+ import { generatedCommandManifest } from "./manifest.js";
3
+ const index = new Map();
4
+ for (const spec of generatedCommandManifest) {
5
+ index.set(`${spec.group} ${spec.action}`, spec);
6
+ }
7
+ export function findGeneratedCommand(group, action) {
8
+ if (!action)
9
+ return null;
10
+ return index.get(`${group} ${action}`) ?? null;
11
+ }
12
+ export async function dispatchGeneratedCommand(ctx, group, action, argv) {
13
+ const spec = findGeneratedCommand(group, action);
14
+ if (!spec)
15
+ return 2;
16
+ return runGeneratedCommand(ctx, spec, argv);
17
+ }
@@ -0,0 +1,3 @@
1
+ import type { GeneratedCommandSpec } from "../lib/generated-command.js";
2
+ export declare const generatedCommandManifest: GeneratedCommandSpec[];
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/generated/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EAuD1D,CAAC"}
@@ -0,0 +1,56 @@
1
+ export const generatedCommandManifest = [
2
+ { operationId: "v1.agents.composio.linkedAccounts.callback", group: "agents", action: "composio-linked-accounts-callback", method: "GET", pathTemplate: "/api/v1/agents/{id}/composio/linked-accounts/{provider}/callback", summary: "Linked-account OAuth callback", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--state", wireName: "state", required: true, takesValue: true, description: undefined, source: "query", valueType: "string" }] },
3
+ { operationId: "v1.agents.composio.linkedAccounts.initiate", group: "agents", action: "composio-linked-accounts-initiate", method: "POST", pathTemplate: "/api/v1/agents/{id}/composio/linked-accounts/{provider}/initiate", summary: "Initiate linked-account flow", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--principal", wireName: "principal", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--return-url", wireName: "returnUrl", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
4
+ { operationId: "v1.agents.composio.linkedAccounts.list", group: "agents", action: "composio-linked-accounts-list", method: "GET", pathTemplate: "/api/v1/agents/{id}/composio/linked-accounts", summary: "List agent linked accounts", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--end-user-id", wireName: "endUserId", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }, { name: "--principal-type", wireName: "principalType", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }, { name: "--provider", wireName: "provider", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }] },
5
+ { operationId: "v1.agents.composio.linkedAccounts.unlink", group: "agents", action: "composio-linked-accounts-unlink", method: "DELETE", pathTemplate: "/api/v1/agents/{id}/composio/linked-accounts/{provider}", summary: "Unlink account", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--principal", wireName: "principal", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
6
+ { operationId: "v1.agents.create", group: "agents", action: "create", method: "POST", pathTemplate: "/api/v1/agents", summary: "Create agent", description: undefined, flags: [{ name: "--name", wireName: "name", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--always-on", wireName: "alwaysOn", required: false, takesValue: true, description: undefined, source: "body", valueType: "boolean" }, { name: "--avatar-url", wireName: "avatarUrl", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--capabilities", wireName: "capabilities", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--composio", wireName: "composio", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--context-url", wireName: "contextUrl", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--external-id", wireName: "externalId", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--personality", wireName: "personality", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--user-id", wireName: "userId", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--voice-style", wireName: "voiceStyle", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
7
+ { operationId: "v1.agents.delete", group: "agents", action: "delete", method: "DELETE", pathTemplate: "/api/v1/agents/{id}", summary: "Delete agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
8
+ { operationId: "v1.agents.docs.getEffective", group: "agents", action: "docs-get-effective", method: "GET", pathTemplate: "/api/v1/agents/{id}/docs", summary: "Get agent effective docs", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
9
+ { operationId: "v1.agents.docs.setOverrides", group: "agents", action: "docs-set-overrides", method: "PUT", pathTemplate: "/api/v1/agents/{id}/docs", summary: "Set agent doc overrides", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--overrides", wireName: "overrides", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--mode", wireName: "mode", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
10
+ { operationId: "v1.agents.get", group: "agents", action: "get", method: "GET", pathTemplate: "/api/v1/agents/{id}", summary: "Get agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
11
+ { operationId: "v1.agents.list", group: "agents", action: "list", method: "GET", pathTemplate: "/api/v1/agents", summary: "List agents", description: undefined, flags: [{ name: "--cursor", wireName: "cursor", required: false, takesValue: true, description: "Pagination cursor (ISO timestamp).", source: "query", valueType: "string" }, { name: "--limit", wireName: "limit", required: false, takesValue: true, description: "Max number of items to return (default 50, max 100).", source: "query", valueType: "number" }] },
12
+ { operationId: "v1.agents.reload", group: "agents", action: "reload", method: "POST", pathTemplate: "/api/v1/agents/{id}/reload", summary: "Queue agent reload (apply pending config)", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
13
+ { operationId: "v1.agents.restart", group: "agents", action: "restart", method: "POST", pathTemplate: "/api/v1/agents/{id}/restart", summary: "Restart agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
14
+ { operationId: "v1.agents.skills.setAssignments", group: "agents", action: "skills-set-assignments", method: "PUT", pathTemplate: "/api/v1/agents/{id}/skills", summary: "Set agent pinned skill assignments", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--assignments", wireName: "assignments", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--mode", wireName: "mode", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
15
+ { operationId: "v1.agents.start", group: "agents", action: "start", method: "POST", pathTemplate: "/api/v1/agents/{id}/start", summary: "Start agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
16
+ { operationId: "v1.agents.stop", group: "agents", action: "stop", method: "POST", pathTemplate: "/api/v1/agents/{id}/stop", summary: "Stop agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
17
+ { operationId: "v1.agents.update", group: "agents", action: "update", method: "PATCH", pathTemplate: "/api/v1/agents/{id}", summary: "Update agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--apply", wireName: "apply", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }, { name: "--always-on", wireName: "alwaysOn", required: false, takesValue: true, description: undefined, source: "body", valueType: "boolean" }, { name: "--avatar-url", wireName: "avatarUrl", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--capabilities", wireName: "capabilities", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--composio-default-principal-type", wireName: "composioDefaultPrincipalType", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--context-url", wireName: "contextUrl", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--external-id", wireName: "externalId", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--name", wireName: "name", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--personality", wireName: "personality", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--voice-style", wireName: "voiceStyle", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
18
+ { operationId: "v1.conversations.get", group: "conversations", action: "get", method: "GET", pathTemplate: "/api/v1/conversations/{id}", summary: "Get conversation history (sessionId)", description: undefined, flags: [{ name: "--conversation-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--agent-id", wireName: "agentId", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }, { name: "--cursor", wireName: "cursor", required: false, takesValue: true, description: "Pagination cursor (ISO timestamp).", source: "query", valueType: "string" }, { name: "--limit", wireName: "limit", required: false, takesValue: true, description: "Max number of items to return (default 100, max 500).", source: "query", valueType: "number" }] },
19
+ { operationId: "v1.conversations.listForAgent", group: "conversations", action: "list-for-agent", method: "GET", pathTemplate: "/api/v1/agents/{id}/conversations", summary: "List conversations for agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--cursor", wireName: "cursor", required: false, takesValue: true, description: "Pagination cursor (ISO timestamp).", source: "query", valueType: "string" }, { name: "--limit", wireName: "limit", required: false, takesValue: true, description: "Max number of items to return (default 50, max 100).", source: "query", valueType: "number" }] },
20
+ { operationId: "v1.events.ingest", group: "events", action: "ingest", method: "POST", pathTemplate: "/api/v1/events", summary: "Ingest event", description: undefined, flags: [{ name: "--id", wireName: "id", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--type", wireName: "type", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--created-at", wireName: "createdAt", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--data", wireName: "data", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }] },
21
+ { operationId: "v1.memory.batch", group: "memory", action: "batch", method: "POST", pathTemplate: "/api/v1/agents/{id}/memory/batch", summary: "Batch upsert/delete agent memory", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--delete", wireName: "delete", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--upsert", wireName: "upsert", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }] },
22
+ { operationId: "v1.memory.delete", group: "memory", action: "delete", method: "DELETE", pathTemplate: "/api/v1/agents/{id}/memory/{key}", summary: "Delete agent memory entry", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--key", wireName: "key", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
23
+ { operationId: "v1.memory.get", group: "memory", action: "get", method: "GET", pathTemplate: "/api/v1/agents/{id}/memory/{key}", summary: "Get agent memory entry", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--key", wireName: "key", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
24
+ { operationId: "v1.memory.list", group: "memory", action: "list", method: "GET", pathTemplate: "/api/v1/agents/{id}/memory", summary: "List agent memory", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--cursor", wireName: "cursor", required: false, takesValue: true, description: "Pagination cursor (ISO timestamp).", source: "query", valueType: "string" }, { name: "--limit", wireName: "limit", required: false, takesValue: true, description: "Max number of items to return (default 100, max 500).", source: "query", valueType: "number" }] },
25
+ { operationId: "v1.memory.put", group: "memory", action: "put", method: "PUT", pathTemplate: "/api/v1/agents/{id}/memory/{key}", summary: "Upsert agent memory entry", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--key", wireName: "key", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--value", wireName: "value", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
26
+ { operationId: "v1.messages.get", group: "messages", action: "get", method: "GET", pathTemplate: "/api/v1/messages/{id}", summary: "Get message", description: undefined, flags: [{ name: "--message-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
27
+ { operationId: "v1.messages.send", group: "messages", action: "send", method: "POST", pathTemplate: "/api/v1/agents/{id}/messages", summary: "Send message to agent", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--message", wireName: "message", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--session-id", wireName: "sessionId", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--execution-principal", wireName: "executionPrincipal", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--metadata", wireName: "metadata", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }] },
28
+ { operationId: "v1.projects.apiKeys.create", group: "projects", action: "api-keys-create", method: "POST", pathTemplate: "/api/v1/projects/{id}/api-keys", summary: "Create project API key", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--name", wireName: "name", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--scopes", wireName: "scopes", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }] },
29
+ { operationId: "v1.projects.apiKeys.delete", group: "projects", action: "api-keys-delete", method: "DELETE", pathTemplate: "/api/v1/projects/{id}/api-keys/{keyId}", summary: "Delete project API key", description: undefined, flags: [{ name: "--key-id", wireName: "keyId", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
30
+ { operationId: "v1.projects.apiKeys.list", group: "projects", action: "api-keys-list", method: "GET", pathTemplate: "/api/v1/projects/{id}/api-keys", summary: "List project API keys", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
31
+ { operationId: "v1.projects.composio.oauthCallback", group: "projects", action: "composio-oauth-callback", method: "GET", pathTemplate: "/api/v1/projects/{id}/composio/oauth/callback", summary: "Composio OAuth callback (project)", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--state", wireName: "state", required: true, takesValue: true, description: undefined, source: "query", valueType: "string" }] },
32
+ { operationId: "v1.projects.composio.providers.list", group: "projects", action: "composio-providers-list", method: "GET", pathTemplate: "/api/v1/projects/{id}/composio/providers", summary: "List project Composio provider config", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
33
+ { operationId: "v1.projects.composio.providers.upsert", group: "projects", action: "composio-providers-upsert", method: "POST", pathTemplate: "/api/v1/projects/{id}/composio/providers", summary: "Upsert project Composio provider config", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--is-enabled", wireName: "isEnabled", required: true, takesValue: true, description: undefined, source: "body", valueType: "boolean" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--auth-config-id", wireName: "authConfigId", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--composio-api-key", wireName: "composioApiKey", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--default-disabled-tools", wireName: "defaultDisabledTools", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--default-enabled-tools", wireName: "defaultEnabledTools", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--provider-overrides", wireName: "providerOverrides", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }] },
34
+ { operationId: "v1.projects.create", group: "projects", action: "create", method: "POST", pathTemplate: "/api/v1/projects", summary: "Create project (admin)", description: undefined, flags: [{ name: "--name", wireName: "name", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--owner-user-id", wireName: "ownerUserId", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }] },
35
+ { operationId: "v1.projects.docs.list", group: "projects", action: "docs-list", method: "GET", pathTemplate: "/api/v1/projects/{id}/docs", summary: "List project docs summary", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
36
+ { operationId: "v1.projects.docs.listVersions", group: "projects", action: "docs-list-versions", method: "GET", pathTemplate: "/api/v1/projects/{id}/docs/{docType}/versions", summary: "List project doc versions", description: undefined, flags: [{ name: "--doc-type", wireName: "docType", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
37
+ { operationId: "v1.projects.docs.publishVersion", group: "projects", action: "docs-publish-version", method: "POST", pathTemplate: "/api/v1/projects/{id}/docs/{docType}/versions", summary: "Publish project doc version", description: undefined, flags: [{ name: "--doc-type", wireName: "docType", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--source", wireName: "source", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--version", wireName: "version", required: false, takesValue: true, description: undefined, source: "body", valueType: "number" }] },
38
+ { operationId: "v1.projects.docs.setDefaults", group: "projects", action: "docs-set-defaults", method: "PUT", pathTemplate: "/api/v1/projects/{id}/docs/defaults", summary: "Set project doc defaults", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--defaults", wireName: "defaults", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
39
+ { operationId: "v1.projects.docs.uploadInit", group: "projects", action: "docs-upload-init", method: "POST", pathTemplate: "/api/v1/projects/{id}/docs/uploads", summary: "Initialize project docs upload", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--content-type", wireName: "contentType", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--size-bytes", wireName: "sizeBytes", required: false, takesValue: true, description: undefined, source: "body", valueType: "number" }] },
40
+ { operationId: "v1.projects.get", group: "projects", action: "get", method: "GET", pathTemplate: "/api/v1/projects/{id}", summary: "Get project", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
41
+ { operationId: "v1.projects.list", group: "projects", action: "list", method: "GET", pathTemplate: "/api/v1/projects", summary: "List projects (admin)", description: undefined, flags: [{ name: "--cursor", wireName: "cursor", required: false, takesValue: true, description: "Pagination cursor (ISO timestamp).", source: "query", valueType: "string" }, { name: "--limit", wireName: "limit", required: false, takesValue: true, description: "Max number of items to return (default 100, max 500).", source: "query", valueType: "number" }, { name: "--owner-user-id", wireName: "ownerUserId", required: false, takesValue: true, description: undefined, source: "query", valueType: "string" }] },
42
+ { operationId: "v1.projects.skills.list", group: "projects", action: "skills-list", method: "GET", pathTemplate: "/api/v1/projects/{id}/skills", summary: "List project skills", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
43
+ { operationId: "v1.projects.skills.listVersions", group: "projects", action: "skills-list-versions", method: "GET", pathTemplate: "/api/v1/projects/{id}/skills/{skillKey}/versions", summary: "List project skill versions", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--skill-key", wireName: "skillKey", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
44
+ { operationId: "v1.projects.skills.promote", group: "projects", action: "skills-promote", method: "POST", pathTemplate: "/api/v1/projects/{id}/skills/{skillKey}/promote", summary: "Promote published skill version to agents", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--skill-key", wireName: "skillKey", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--to-version", wireName: "toVersion", required: true, takesValue: true, description: undefined, source: "body", valueType: "number" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--agent-ids", wireName: "agentIds", required: false, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
45
+ { operationId: "v1.projects.skills.publishVersion", group: "projects", action: "skills-publish-version", method: "POST", pathTemplate: "/api/v1/projects/{id}/skills", summary: "Publish project skill version", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--skill-key", wireName: "skillKey", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--source", wireName: "source", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--idempotency-key", wireName: "Idempotency-Key", required: false, takesValue: true, description: "Optional idempotency key (4-200 chars) for safe retries.", source: "header", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--changelog", wireName: "changelog", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--description", wireName: "description", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--display-name", wireName: "displayName", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--version", wireName: "version", required: false, takesValue: true, description: undefined, source: "body", valueType: "number" }] },
46
+ { operationId: "v1.projects.skills.uploadInit", group: "projects", action: "skills-upload-init", method: "POST", pathTemplate: "/api/v1/projects/{id}/skills/uploads", summary: "Initialize project skills upload", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }, { name: "--content-type", wireName: "contentType", required: false, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--size-bytes", wireName: "sizeBytes", required: false, takesValue: true, description: undefined, source: "body", valueType: "number" }] },
47
+ { operationId: "v1.agents.providerKeys.delete", group: "provider-keys", action: "delete-agents", method: "DELETE", pathTemplate: "/api/v1/agents/{id}/provider-keys/{provider}", summary: "Delete agent provider key override", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
48
+ { operationId: "v1.projects.providerKeys.delete", group: "provider-keys", action: "delete-projects", method: "DELETE", pathTemplate: "/api/v1/projects/{id}/provider-keys/{provider}", summary: "Delete project provider key", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
49
+ { operationId: "v1.agents.providerKeys.list", group: "provider-keys", action: "list-agents", method: "GET", pathTemplate: "/api/v1/agents/{id}/provider-keys", summary: "List agent provider keys (merged project + agent overrides)", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
50
+ { operationId: "v1.projects.providerKeys.list", group: "provider-keys", action: "list-projects", method: "GET", pathTemplate: "/api/v1/projects/{id}/provider-keys", summary: "List project provider keys", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
51
+ { operationId: "v1.agents.providerKeys.upsert", group: "provider-keys", action: "upsert-agents", method: "POST", pathTemplate: "/api/v1/agents/{id}/provider-keys", summary: "Upsert agent provider key", description: undefined, flags: [{ name: "--agent-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--key", wireName: "key", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
52
+ { operationId: "v1.projects.providerKeys.upsert", group: "provider-keys", action: "upsert-projects", method: "POST", pathTemplate: "/api/v1/projects/{id}/provider-keys", summary: "Upsert project provider key", description: undefined, flags: [{ name: "--project-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }, { name: "--key", wireName: "key", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--provider", wireName: "provider", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
53
+ { operationId: "v1.webhooks.create", group: "webhooks", action: "create", method: "POST", pathTemplate: "/api/v1/webhooks", summary: "Create webhook", description: undefined, flags: [{ name: "--events", wireName: "events", required: true, takesValue: true, description: undefined, source: "body", valueType: "json" }, { name: "--url", wireName: "url", required: true, takesValue: true, description: undefined, source: "body", valueType: "string" }, { name: "--body", wireName: "body", required: false, takesValue: true, description: "Raw JSON request body (overrides individual body flags)", source: "body", valueType: "json" }] },
54
+ { operationId: "v1.webhooks.delete", group: "webhooks", action: "delete", method: "DELETE", pathTemplate: "/api/v1/webhooks/{id}", summary: "Delete webhook", description: undefined, flags: [{ name: "--webhook-id", wireName: "id", required: true, takesValue: true, description: undefined, source: "path", valueType: "string" }] },
55
+ { operationId: "v1.webhooks.list", group: "webhooks", action: "list", method: "GET", pathTemplate: "/api/v1/webhooks", summary: "List webhooks", description: undefined, flags: [] },
56
+ ];
@@ -0,0 +1,16 @@
1
+ export type ParsedArgv = {
2
+ positionals: string[];
3
+ flags: {
4
+ help: boolean;
5
+ version: boolean;
6
+ json: boolean;
7
+ nonInteractive: boolean;
8
+ quiet: boolean;
9
+ verbose: boolean;
10
+ baseUrl?: string;
11
+ };
12
+ unknownOption?: string;
13
+ missingValueOption?: string;
14
+ };
15
+ export declare function parseArgv(argv: string[]): ParsedArgv;
16
+ //# sourceMappingURL=argv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../../src/lib/argv.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA8EpD"}
@@ -0,0 +1,68 @@
1
+ export function parseArgv(argv) {
2
+ const positionals = [];
3
+ let help = false;
4
+ let version = false;
5
+ let json = false;
6
+ let nonInteractive = false;
7
+ let quiet = false;
8
+ let verbose = false;
9
+ let baseUrl;
10
+ let seenCommand = false;
11
+ for (let i = 0; i < argv.length; i++) {
12
+ const arg = argv[i];
13
+ if (arg === "--") {
14
+ positionals.push(...argv.slice(i + 1));
15
+ break;
16
+ }
17
+ // Global flags are valid anywhere; strip them out so subcommands can parse their own flags.
18
+ if (arg === "--help" || arg === "-h") {
19
+ help = true;
20
+ continue;
21
+ }
22
+ if (arg === "--version" || arg === "-v") {
23
+ version = true;
24
+ continue;
25
+ }
26
+ if (arg === "--json") {
27
+ json = true;
28
+ continue;
29
+ }
30
+ if (arg === "--non-interactive") {
31
+ nonInteractive = true;
32
+ continue;
33
+ }
34
+ if (arg === "--quiet") {
35
+ quiet = true;
36
+ continue;
37
+ }
38
+ if (arg === "--verbose") {
39
+ verbose = true;
40
+ continue;
41
+ }
42
+ if (arg === "--base-url" || arg.startsWith("--base-url=")) {
43
+ const value = arg.includes("=") ? arg.slice("--base-url=".length) : argv[i + 1];
44
+ if (!value || value.startsWith("-")) {
45
+ return {
46
+ positionals: [],
47
+ flags: { help, version, json, nonInteractive, quiet, verbose, baseUrl },
48
+ missingValueOption: "--base-url",
49
+ };
50
+ }
51
+ baseUrl = value;
52
+ if (!arg.includes("="))
53
+ i++;
54
+ continue;
55
+ }
56
+ if (arg.startsWith("-") && !seenCommand) {
57
+ return {
58
+ positionals: [],
59
+ flags: { help, version, json, nonInteractive, quiet, verbose, baseUrl },
60
+ unknownOption: arg,
61
+ };
62
+ }
63
+ if (!arg.startsWith("-"))
64
+ seenCommand = true;
65
+ positionals.push(arg);
66
+ }
67
+ return { positionals, flags: { help, version, json, nonInteractive, quiet, verbose, baseUrl } };
68
+ }
@@ -0,0 +1,7 @@
1
+ export declare const DEFAULT_BASE_URL = "https://www.rooaak.com";
2
+ export declare function resolveBaseUrl(input: {
3
+ cliFlag?: string;
4
+ env?: string;
5
+ profile?: string;
6
+ }): string;
7
+ //# sourceMappingURL=base-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-url.d.ts","sourceRoot":"","sources":["../../../src/lib/base-url.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AAEzD,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAIT"}
@@ -0,0 +1,6 @@
1
+ export const DEFAULT_BASE_URL = "https://www.rooaak.com";
2
+ export function resolveBaseUrl(input) {
3
+ const base = input.cliFlag || input.env || input.profile || DEFAULT_BASE_URL;
4
+ // Normalize: no trailing slash.
5
+ return base.endsWith("/") ? base.slice(0, -1) : base;
6
+ }
@@ -0,0 +1,11 @@
1
+ export declare enum ExitCode {
2
+ Success = 0,
3
+ Usage = 2,
4
+ Auth = 3,
5
+ Permission = 4,
6
+ NotFound = 5,
7
+ Conflict = 6,
8
+ Transient = 7
9
+ }
10
+ export declare function exitCodeForHttpStatus(status: number): ExitCode;
11
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../../src/lib/exit-codes.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;IACR,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,SAAS,IAAI;CACd;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAkB9D"}
@@ -0,0 +1,29 @@
1
+ export var ExitCode;
2
+ (function (ExitCode) {
3
+ ExitCode[ExitCode["Success"] = 0] = "Success";
4
+ ExitCode[ExitCode["Usage"] = 2] = "Usage";
5
+ ExitCode[ExitCode["Auth"] = 3] = "Auth";
6
+ ExitCode[ExitCode["Permission"] = 4] = "Permission";
7
+ ExitCode[ExitCode["NotFound"] = 5] = "NotFound";
8
+ ExitCode[ExitCode["Conflict"] = 6] = "Conflict";
9
+ ExitCode[ExitCode["Transient"] = 7] = "Transient";
10
+ })(ExitCode || (ExitCode = {}));
11
+ export function exitCodeForHttpStatus(status) {
12
+ if (status >= 200 && status <= 299)
13
+ return ExitCode.Success;
14
+ switch (status) {
15
+ case 400:
16
+ case 422:
17
+ return ExitCode.Usage;
18
+ case 401:
19
+ return ExitCode.Auth;
20
+ case 403:
21
+ return ExitCode.Permission;
22
+ case 404:
23
+ return ExitCode.NotFound;
24
+ case 409:
25
+ return ExitCode.Conflict;
26
+ default:
27
+ return ExitCode.Transient;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ import type { CommandContext } from "./types.js";
2
+ export type GeneratedFlagSource = "path" | "query" | "header" | "body";
3
+ export type GeneratedFlagType = "string" | "number" | "boolean" | "json";
4
+ export type GeneratedFlag = {
5
+ name: string;
6
+ wireName: string;
7
+ required: boolean;
8
+ takesValue: boolean;
9
+ description?: string;
10
+ source: GeneratedFlagSource;
11
+ valueType: GeneratedFlagType;
12
+ };
13
+ export type GeneratedCommandSpec = {
14
+ operationId: string;
15
+ group: string;
16
+ action: string;
17
+ method: "GET" | "POST" | "PATCH" | "PUT" | "DELETE";
18
+ pathTemplate: string;
19
+ summary?: string;
20
+ description?: string;
21
+ flags: GeneratedFlag[];
22
+ };
23
+ export declare function renderGeneratedCommandHelp(ctx: CommandContext, spec: GeneratedCommandSpec): number;
24
+ export declare function runGeneratedCommand(ctx: CommandContext, spec: GeneratedCommandSpec, argv: string[]): Promise<number>;
25
+ //# sourceMappingURL=generated-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-command.d.ts","sourceRoot":"","sources":["../../../src/lib/generated-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AA2FF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,GAAG,MAAM,CA2DlG;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmL1H"}