@mootup/moot-cli 0.1.0-rc.0 → 0.2.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 (66) hide show
  1. package/README.md +37 -30
  2. package/dist/auth/archetypes.d.ts +10 -0
  3. package/dist/auth/archetypes.d.ts.map +1 -0
  4. package/dist/auth/archetypes.js +39 -0
  5. package/dist/auth/archetypes.js.map +1 -0
  6. package/dist/auth/credentials.d.ts +21 -0
  7. package/dist/auth/credentials.d.ts.map +1 -0
  8. package/dist/auth/credentials.js +97 -0
  9. package/dist/auth/credentials.js.map +1 -0
  10. package/dist/auth/oauth.d.ts +42 -0
  11. package/dist/auth/oauth.d.ts.map +1 -0
  12. package/dist/auth/oauth.js +200 -0
  13. package/dist/auth/oauth.js.map +1 -0
  14. package/dist/auth/profile.d.ts +3 -0
  15. package/dist/auth/profile.d.ts.map +1 -0
  16. package/dist/auth/profile.js +7 -0
  17. package/dist/auth/profile.js.map +1 -0
  18. package/dist/bin.js +27 -3
  19. package/dist/bin.js.map +1 -1
  20. package/dist/commands/init.d.ts +7 -0
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +261 -69
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/login.d.ts +1 -0
  25. package/dist/commands/login.d.ts.map +1 -1
  26. package/dist/commands/login.js +5 -1
  27. package/dist/commands/login.js.map +1 -1
  28. package/dist/commands/logout.d.ts +7 -0
  29. package/dist/commands/logout.d.ts.map +1 -0
  30. package/dist/commands/logout.js +42 -0
  31. package/dist/commands/logout.js.map +1 -0
  32. package/dist/commands/refresh.d.ts +6 -0
  33. package/dist/commands/refresh.d.ts.map +1 -0
  34. package/dist/commands/refresh.js +53 -0
  35. package/dist/commands/refresh.js.map +1 -0
  36. package/dist/credential.d.ts +6 -0
  37. package/dist/credential.d.ts.map +1 -1
  38. package/dist/credential.js +30 -1
  39. package/dist/credential.js.map +1 -1
  40. package/dist/docker.js +1 -1
  41. package/dist/docker.js.map +1 -1
  42. package/dist/harness/claude-code.d.ts +37 -0
  43. package/dist/harness/claude-code.d.ts.map +1 -0
  44. package/dist/harness/claude-code.js +66 -0
  45. package/dist/harness/claude-code.js.map +1 -0
  46. package/dist/harness/cursor-agent.d.ts +3 -0
  47. package/dist/harness/cursor-agent.d.ts.map +1 -0
  48. package/dist/harness/cursor-agent.js +17 -0
  49. package/dist/harness/cursor-agent.js.map +1 -0
  50. package/dist/harness/cursor-ide.d.ts +10 -0
  51. package/dist/harness/cursor-ide.d.ts.map +1 -0
  52. package/dist/harness/cursor-ide.js +65 -0
  53. package/dist/harness/cursor-ide.js.map +1 -0
  54. package/dist/harness/index.d.ts +16 -0
  55. package/dist/harness/index.d.ts.map +1 -0
  56. package/dist/harness/index.js +65 -0
  57. package/dist/harness/index.js.map +1 -0
  58. package/dist/harness/sdk.d.ts +7 -0
  59. package/dist/harness/sdk.d.ts.map +1 -0
  60. package/dist/harness/sdk.js +18 -0
  61. package/dist/harness/sdk.js.map +1 -0
  62. package/dist/index.d.ts +12 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +12 -1
  65. package/dist/index.js.map +1 -1
  66. package/package.json +11 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,18 @@ export declare const CRED_DIR: string;
2
2
  export declare const CRED_FILE: string;
3
3
  export declare const PAT_PREFIX = "mootup_pat_";
4
4
  export declare const DEFAULT_API_URL = "https://mootup.io";
5
+ export type CredentialType = 'static_token' | 'oauth';
5
6
  export interface Credential {
6
7
  api_url: string;
7
8
  token: string;
8
9
  user_id: string;
10
+ credential_type?: CredentialType;
11
+ refresh_token_ref?: string;
12
+ access_token_expires_at?: number;
13
+ installation_id?: string;
9
14
  }
10
15
  export type CredentialsFile = Record<string, Credential>;
11
16
  export declare function loadCredential(profile?: string): Credential | null;
12
17
  export declare function storeCredential(cred: Credential, profile?: string): void;
18
+ export declare function deleteCredential(profile?: string): void;
13
19
  //# sourceMappingURL=credential.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,QAA6B,CAAC;AACnD,eAAO,MAAM,SAAS,QAAqC,CAAC;AAC5D,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEzD,wBAAgB,cAAc,CAAC,OAAO,SAAY,GAAG,UAAU,GAAG,IAAI,CAqBrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,OAAO,SAAY,GAClB,IAAI,CAqBN"}
1
+ {"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,QAA6B,CAAC;AACnD,eAAO,MAAM,SAAS,QAAqC,CAAC;AAC5D,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEzD,wBAAgB,cAAc,CAAC,OAAO,SAAY,GAAG,UAAU,GAAG,IAAI,CA8BrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,OAAO,SAAY,GAClB,IAAI,CAqBN;AAED,wBAAgB,gBAAgB,CAAC,OAAO,SAAY,GAAG,IAAI,CAe1D"}
@@ -27,7 +27,18 @@ export function loadCredential(profile = 'default') {
27
27
  typeof c.user_id !== 'string') {
28
28
  return null;
29
29
  }
30
- return { api_url: c.api_url, token: c.token, user_id: c.user_id };
30
+ const out = { api_url: c.api_url, token: c.token, user_id: c.user_id };
31
+ if (c.credential_type === 'oauth' || c.credential_type === 'static_token') {
32
+ out.credential_type = c.credential_type;
33
+ }
34
+ if (typeof c.refresh_token_ref === 'string')
35
+ out.refresh_token_ref = c.refresh_token_ref;
36
+ if (typeof c.access_token_expires_at === 'number') {
37
+ out.access_token_expires_at = c.access_token_expires_at;
38
+ }
39
+ if (typeof c.installation_id === 'string')
40
+ out.installation_id = c.installation_id;
41
+ return out;
31
42
  }
32
43
  export function storeCredential(cred, profile = 'default') {
33
44
  if (!existsSync(CRED_DIR)) {
@@ -53,4 +64,22 @@ export function storeCredential(cred, profile = 'default') {
53
64
  writeFileSync(CRED_FILE, JSON.stringify(existing, null, 2) + '\n');
54
65
  chmodSync(CRED_FILE, 0o600);
55
66
  }
67
+ export function deleteCredential(profile = 'default') {
68
+ if (!existsSync(CRED_FILE))
69
+ return;
70
+ let existing = {};
71
+ try {
72
+ const raw = readFileSync(CRED_FILE, 'utf8');
73
+ const parsed = JSON.parse(raw);
74
+ if (parsed && typeof parsed === 'object') {
75
+ existing = parsed;
76
+ }
77
+ }
78
+ catch {
79
+ return;
80
+ }
81
+ delete existing[profile];
82
+ writeFileSync(CRED_FILE, JSON.stringify(existing, null, 2) + '\n');
83
+ chmodSync(CRED_FILE, 0o600);
84
+ }
56
85
  //# sourceMappingURL=credential.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAUnD,MAAM,UAAU,cAAc,CAAC,OAAO,GAAG,SAAS;IAChD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAI,MAAkC,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IACE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAgB,EAChB,OAAO,GAAG,SAAS;IAEnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,QAAQ,GAAoB,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzC,QAAQ,GAAG,MAAyB,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"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"}
package/dist/docker.js CHANGED
@@ -92,7 +92,7 @@ export function requireContainerId(workspace, deps = {}) {
92
92
  const cid = containerIdOrNone(workspace, deps);
93
93
  if (!cid) {
94
94
  throw new Error(`No running devcontainer found for ${resolve(workspace)}.\n` +
95
- `Run 'mootup up' first.`);
95
+ `Run 'moot up' first.`);
96
96
  }
97
97
  return cid;
98
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface InstallResponse {
2
+ installation_id: string;
3
+ team_id: string;
4
+ space_id: string;
5
+ space_name?: string;
6
+ actors: Record<string, {
7
+ actor_id: string;
8
+ api_key: string;
9
+ display_name: string;
10
+ }>;
11
+ }
12
+ export interface GenerateArgs {
13
+ installResp: InstallResponse;
14
+ cwd: string;
15
+ force?: boolean;
16
+ yes?: boolean;
17
+ confirm?: (prompt: string) => Promise<boolean>;
18
+ apiUrl: string;
19
+ }
20
+ export declare function generateClaudeCode(args: GenerateArgs): Promise<void>;
21
+ export declare function writeActorsJson(args: {
22
+ cwd: string;
23
+ spaceId: string;
24
+ spaceName: string;
25
+ apiUrl: string;
26
+ adopted: Record<string, {
27
+ actor_id: string;
28
+ api_key: string;
29
+ display_name: string;
30
+ }>;
31
+ }): void;
32
+ export declare function installDevcontainer(args: {
33
+ cwd: string;
34
+ templateName: string;
35
+ overwrite: boolean;
36
+ }): void;
37
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/harness/claude-code.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,eAAe,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtF,GAAG,IAAI,CAgBP;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,IAAI,CAgBP"}
@@ -0,0 +1,66 @@
1
+ import { mkdirSync, existsSync, writeFileSync, chmodSync, copyFileSync, readdirSync, statSync, } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { getTemplatesDir } from '@mootup/moot-templates';
4
+ export async function generateClaudeCode(args) {
5
+ writeActorsJson({
6
+ cwd: args.cwd,
7
+ spaceId: args.installResp.space_id,
8
+ spaceName: args.installResp.space_name ?? args.installResp.space_id,
9
+ apiUrl: args.apiUrl,
10
+ adopted: args.installResp.actors,
11
+ });
12
+ console.log(`Wrote .moot/actors.json (${Object.keys(args.installResp.actors).length} agents, chmod 600)`);
13
+ installDevcontainer({ cwd: args.cwd, templateName: 'devcontainer', overwrite: false });
14
+ }
15
+ export function writeActorsJson(args) {
16
+ const mootDir = join(args.cwd, '.moot');
17
+ if (!existsSync(mootDir)) {
18
+ mkdirSync(mootDir, { recursive: true, mode: 0o700 });
19
+ }
20
+ else {
21
+ chmodSync(mootDir, 0o700);
22
+ }
23
+ const content = {
24
+ space_id: args.spaceId,
25
+ space_name: args.spaceName,
26
+ api_url: args.apiUrl,
27
+ actors: args.adopted,
28
+ };
29
+ const actorsPath = join(mootDir, 'actors.json');
30
+ writeFileSync(actorsPath, JSON.stringify(content, null, 2) + '\n');
31
+ chmodSync(actorsPath, 0o600);
32
+ }
33
+ export function installDevcontainer(args) {
34
+ const src = join(getTemplatesDir(), args.templateName);
35
+ const target = join(args.cwd, '.devcontainer');
36
+ const staged = join(args.cwd, '.moot', 'suggested-devcontainer');
37
+ const targetExists = existsSync(target);
38
+ if (targetExists && !args.overwrite) {
39
+ copyDirRecursive(src, staged);
40
+ console.log(`.devcontainer/ already exists — staged at .moot/suggested-devcontainer/`);
41
+ return;
42
+ }
43
+ copyDirRecursive(src, target);
44
+ const fileCount = readdirSync(target).length;
45
+ console.log(`Installed .devcontainer/ (${fileCount} files)`);
46
+ }
47
+ function copyDirRecursive(src, dest) {
48
+ if (!existsSync(dest)) {
49
+ mkdirSync(dest, { recursive: true });
50
+ }
51
+ for (const entry of readdirSync(src)) {
52
+ const s = join(src, entry);
53
+ const d = join(dest, entry);
54
+ const stats = statSync(s);
55
+ if (stats.isDirectory()) {
56
+ copyDirRecursive(s, d);
57
+ }
58
+ else {
59
+ copyFileSync(s, d);
60
+ if (entry.endsWith('.sh')) {
61
+ chmodSync(d, 0o755);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/harness/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type GenerateArgs } from './claude-code.js';
2
+ export declare function generateCursorAgent(args: GenerateArgs): Promise<void>;
3
+ //# sourceMappingURL=cursor-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/harness/cursor-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE3F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3E"}
@@ -0,0 +1,17 @@
1
+ import { writeActorsJson, installDevcontainer } from './claude-code.js';
2
+ export async function generateCursorAgent(args) {
3
+ writeActorsJson({
4
+ cwd: args.cwd,
5
+ spaceId: args.installResp.space_id,
6
+ spaceName: args.installResp.space_name ?? args.installResp.space_id,
7
+ apiUrl: args.apiUrl,
8
+ adopted: args.installResp.actors,
9
+ });
10
+ console.log(`Wrote .moot/actors.json (${Object.keys(args.installResp.actors).length} agents, chmod 600)`);
11
+ installDevcontainer({
12
+ cwd: args.cwd,
13
+ templateName: 'cursor-agent-devcontainer',
14
+ overwrite: false,
15
+ });
16
+ }
17
+ //# sourceMappingURL=cursor-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/harness/cursor-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAqB,MAAM,kBAAkB,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAkB;IAC1D,eAAe,CAAC;QACd,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;QAClC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ;QACnE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;KACjC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CACT,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,qBAAqB,CACpG,CAAC;IACF,mBAAmB,CAAC;QAClB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,YAAY,EAAE,2BAA2B;QACzC,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface GenerateCursorIdeArgs {
2
+ token: string;
3
+ apiUrl: string;
4
+ cwd: string;
5
+ force?: boolean;
6
+ yes?: boolean;
7
+ confirm?: (prompt: string) => Promise<boolean>;
8
+ }
9
+ export declare function generateCursorIde(args: GenerateCursorIdeArgs): Promise<void>;
10
+ //# sourceMappingURL=cursor-ide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-ide.d.ts","sourceRoot":"","sources":["../../src/harness/cursor-ide.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ClF"}
@@ -0,0 +1,65 @@
1
+ import { mkdirSync, existsSync, writeFileSync, readFileSync, chmodSync, } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const GITIGNORE_ENTRY = '.cursor/mcp.json';
4
+ export async function generateCursorIde(args) {
5
+ const cursorDir = join(args.cwd, '.cursor');
6
+ const mcpPath = join(cursorDir, 'mcp.json');
7
+ const force = args.force ?? false;
8
+ const yes = args.yes ?? false;
9
+ const confirm = args.confirm ?? defaultConfirm;
10
+ if (existsSync(mcpPath) && !force) {
11
+ const existing = readFileSync(mcpPath, 'utf8');
12
+ console.log(`.cursor/mcp.json already exists:\n${existing}`);
13
+ if (!yes) {
14
+ const ok = await confirm(`Overwrite .cursor/mcp.json with new PAT-backed config? [y/N] `);
15
+ if (!ok) {
16
+ console.log('Aborted.');
17
+ return;
18
+ }
19
+ }
20
+ }
21
+ if (!existsSync(cursorDir)) {
22
+ mkdirSync(cursorDir, { recursive: true, mode: 0o700 });
23
+ }
24
+ else {
25
+ chmodSync(cursorDir, 0o700);
26
+ }
27
+ const content = {
28
+ mcpServers: {
29
+ convo: {
30
+ url: `${args.apiUrl}/mcp`,
31
+ headers: {
32
+ Authorization: `Bearer ${args.token}`,
33
+ },
34
+ },
35
+ },
36
+ };
37
+ writeFileSync(mcpPath, JSON.stringify(content, null, 2) + '\n');
38
+ chmodSync(mcpPath, 0o600);
39
+ console.log(`Wrote .cursor/mcp.json (chmod 600)`);
40
+ appendGitignoreEntry(args.cwd);
41
+ }
42
+ function appendGitignoreEntry(cwd) {
43
+ const gitignorePath = join(cwd, '.gitignore');
44
+ if (existsSync(gitignorePath)) {
45
+ const existing = readFileSync(gitignorePath, 'utf8');
46
+ if (existing.includes(GITIGNORE_ENTRY)) {
47
+ return;
48
+ }
49
+ const sep = existing.endsWith('\n') ? '' : '\n';
50
+ writeFileSync(gitignorePath, `${existing}${sep}${GITIGNORE_ENTRY}\n`);
51
+ console.log(`Appended '${GITIGNORE_ENTRY}' to .gitignore`);
52
+ }
53
+ else {
54
+ writeFileSync(gitignorePath, `${GITIGNORE_ENTRY}\n`);
55
+ console.log(`Created .gitignore with '${GITIGNORE_ENTRY}' entry`);
56
+ }
57
+ }
58
+ async function defaultConfirm(prompt) {
59
+ const { createInterface } = await import('node:readline/promises');
60
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
61
+ const answer = (await rl.question(prompt)).trim().toLowerCase();
62
+ rl.close();
63
+ return answer === 'y' || answer === 'yes';
64
+ }
65
+ //# sourceMappingURL=cursor-ide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-ide.js","sourceRoot":"","sources":["../../src/harness/cursor-ide.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type HarnessName = 'claude-code' | 'cursor-agent' | 'cursor-ide' | 'sdk';
2
+ export type HarnessTopology = 'devcontainer-team' | 'host-side-solo';
3
+ export interface HarnessEntry {
4
+ name: HarnessName;
5
+ topology: HarnessTopology;
6
+ description: string;
7
+ paths_written: readonly string[];
8
+ }
9
+ export declare const HARNESS_REGISTRY: Readonly<Record<HarnessName, HarnessEntry>>;
10
+ export declare const DEFAULT_HARNESS: HarnessName;
11
+ export declare const RESERVED_BARE_NAMES: readonly string[];
12
+ export declare function classifyHarness(name: string): HarnessEntry;
13
+ export declare function validateFlagMatrix(harness: HarnessEntry, opts: {
14
+ archetype?: string;
15
+ }): void;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CA2C/D,CAAC;AAEX,eAAO,MAAM,eAAe,EAAE,WAA2B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAe,CAAC;AAEjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAa1D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,IAAI,CAON"}
@@ -0,0 +1,65 @@
1
+ export const HARNESS_REGISTRY = {
2
+ 'claude-code': {
3
+ name: 'claude-code',
4
+ topology: 'devcontainer-team',
5
+ description: 'Claude Code agents in devcontainer (default)',
6
+ paths_written: [
7
+ '.devcontainer/devcontainer.json',
8
+ '.moot/actors.json',
9
+ '.env.product',
10
+ '.env.leader',
11
+ '.env.spec',
12
+ '.env.implementation',
13
+ '.env.qa',
14
+ '.env.librarian',
15
+ ],
16
+ },
17
+ 'cursor-agent': {
18
+ name: 'cursor-agent',
19
+ topology: 'devcontainer-team',
20
+ description: 'Cursor Agent agents in devcontainer (Cursor-specific tweaks)',
21
+ paths_written: [
22
+ '.devcontainer/devcontainer.json',
23
+ '.moot/actors.json',
24
+ '.env.product',
25
+ '.env.leader',
26
+ '.env.spec',
27
+ '.env.implementation',
28
+ '.env.qa',
29
+ '.env.librarian',
30
+ ],
31
+ },
32
+ 'cursor-ide': {
33
+ name: 'cursor-ide',
34
+ topology: 'host-side-solo',
35
+ description: 'Cursor IDE project-local MCP config (host, solo)',
36
+ paths_written: ['.cursor/mcp.json'],
37
+ },
38
+ sdk: {
39
+ name: 'sdk',
40
+ topology: 'host-side-solo',
41
+ description: 'SDK token for custom harness integration (stdout)',
42
+ paths_written: [],
43
+ },
44
+ };
45
+ export const DEFAULT_HARNESS = 'claude-code';
46
+ export const RESERVED_BARE_NAMES = ['cursor'];
47
+ export function classifyHarness(name) {
48
+ if (RESERVED_BARE_NAMES.includes(name)) {
49
+ throw new Error(`'${name}' is ambiguous. Did you mean 'cursor-ide' (IDE integration) ` +
50
+ `or 'cursor-agent' (devcontainer agent)?`);
51
+ }
52
+ const entry = HARNESS_REGISTRY[name];
53
+ if (!entry) {
54
+ const known = Object.keys(HARNESS_REGISTRY).join(', ');
55
+ throw new Error(`Unknown harness '${name}'. Known: ${known}.`);
56
+ }
57
+ return entry;
58
+ }
59
+ export function validateFlagMatrix(harness, opts) {
60
+ if (harness.topology === 'host-side-solo' && opts.archetype) {
61
+ throw new Error(`--archetype is incompatible with --harness ${harness.name} ` +
62
+ `(host-side-solo; no team to archetype).`);
63
+ }
64
+ }
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAgD;IAC3E,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,8CAA8C;QAC3D,aAAa,EAAE;YACb,iCAAiC;YACjC,mBAAmB;YACnB,cAAc;YACd,aAAa;YACb,WAAW;YACX,qBAAqB;YACrB,SAAS;YACT,gBAAgB;SACjB;KACF;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,mBAAmB;QAC7B,WAAW,EAAE,8DAA8D;QAC3E,aAAa,EAAE;YACb,iCAAiC;YACjC,mBAAmB;YACnB,cAAc;YACd,aAAa;YACb,WAAW;YACX,qBAAqB;YACrB,SAAS;YACT,gBAAgB;SACjB;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,gBAAgB;QAC1B,WAAW,EAAE,kDAAkD;QAC/D,aAAa,EAAE,CAAC,kBAAkB,CAAC;KACpC;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,gBAAgB;QAC1B,WAAW,EAAE,mDAAmD;QAChE,aAAa,EAAE,EAAE;KAClB;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAgB,aAAa,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,QAAQ,CAAC,CAAC;AAEjE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,8DAA8D;YACpE,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAI,gBAA6D,CAAC,IAAI,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,aAAa,KAAK,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAqB,EACrB,IAA4B;IAE5B,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,8CAA8C,OAAO,CAAC,IAAI,GAAG;YAC3D,yCAAyC,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface GenerateSdkArgs {
2
+ token: string;
3
+ apiUrl: string;
4
+ showToken?: boolean;
5
+ }
6
+ export declare function generateSdk(args: GenerateSdkArgs): Promise<void>;
7
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/harness/sdk.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtE"}
@@ -0,0 +1,18 @@
1
+ const CONFIG_PATH_HINT = '~/.config/moot/sdk-credentials.toml';
2
+ export async function generateSdk(args) {
3
+ const showToken = args.showToken ?? false;
4
+ if (showToken) {
5
+ console.log(args.token);
6
+ }
7
+ else {
8
+ const suffix = args.token.slice(-4);
9
+ console.log(`Token suffix: ...${suffix} (4 chars)`);
10
+ }
11
+ console.log(`Config path hint: ${CONFIG_PATH_HINT} (or set MOOTUP_PAT env)`);
12
+ console.log(`Revoke at: ${args.apiUrl}/settings/access`);
13
+ if (showToken) {
14
+ console.log(`Warning: --show-token printed the full token to stdout; ` +
15
+ `it may be captured in shell history.`);
16
+ }
17
+ }
18
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/harness/sdk.ts"],"names":[],"mappings":"AAMA,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,YAAY,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,gBAAgB,0BAA0B,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,0DAA0D;YACxD,sCAAsC,CACzC,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,17 @@ export { cmdDown } from './commands/down.js';
5
5
  export { cmdStatus } from './commands/status.js';
6
6
  export { cmdAttach } from './commands/attach.js';
7
7
  export { cmdCompact } from './commands/compact.js';
8
+ export { cmdLogout } from './commands/logout.js';
9
+ export { cmdRefresh } from './commands/refresh.js';
8
10
  export { containerIdOrNone, execInContainer, devcontainerUp, type ExecFn, type SpawnFn, } from './docker.js';
9
- export { loadCredential, storeCredential, CRED_DIR, CRED_FILE, type Credential, } from './credential.js';
11
+ export { loadCredential, storeCredential, deleteCredential, CRED_DIR, CRED_FILE, type Credential, type CredentialType, } from './credential.js';
12
+ export { ARCHETYPE_CATALOG, DEFAULT_ARCHETYPE, findArchetype, type ArchetypeEntry, } from './auth/archetypes.js';
13
+ export { storeOAuthCredential, loadRefreshToken, deleteOAuthCredential, KEYTAR_SERVICE, __setKeytarForTest, __clearSessionMemoryForTest, type OAuthCredentialBundle, } from './auth/credentials.js';
14
+ export { runBrowserFlow, refreshAccessToken, revokeRefreshToken, generateIdempotencyKey, shouldUseBrowser, mintPkcePair, mintState, } from './auth/oauth.js';
15
+ export { PROFILE_RE, validateProfile } from './auth/profile.js';
16
+ export { HARNESS_REGISTRY, DEFAULT_HARNESS, RESERVED_BARE_NAMES, classifyHarness, validateFlagMatrix, type HarnessName, type HarnessTopology, type HarnessEntry, } from './harness/index.js';
17
+ export { generateClaudeCode } from './harness/claude-code.js';
18
+ export { generateCursorAgent } from './harness/cursor-agent.js';
19
+ export { generateCursorIde } from './harness/cursor-ide.js';
20
+ export { generateSdk } from './harness/sdk.js';
10
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,KAAK,MAAM,EACX,KAAK,OAAO,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,SAAS,EACT,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,KAAK,MAAM,EACX,KAAK,OAAO,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,17 @@ export { cmdDown } from './commands/down.js';
5
5
  export { cmdStatus } from './commands/status.js';
6
6
  export { cmdAttach } from './commands/attach.js';
7
7
  export { cmdCompact } from './commands/compact.js';
8
+ export { cmdLogout } from './commands/logout.js';
9
+ export { cmdRefresh } from './commands/refresh.js';
8
10
  export { containerIdOrNone, execInContainer, devcontainerUp, } from './docker.js';
9
- export { loadCredential, storeCredential, CRED_DIR, CRED_FILE, } from './credential.js';
11
+ export { loadCredential, storeCredential, deleteCredential, CRED_DIR, CRED_FILE, } from './credential.js';
12
+ export { ARCHETYPE_CATALOG, DEFAULT_ARCHETYPE, findArchetype, } from './auth/archetypes.js';
13
+ export { storeOAuthCredential, loadRefreshToken, deleteOAuthCredential, KEYTAR_SERVICE, __setKeytarForTest, __clearSessionMemoryForTest, } from './auth/credentials.js';
14
+ export { runBrowserFlow, refreshAccessToken, revokeRefreshToken, generateIdempotencyKey, shouldUseBrowser, mintPkcePair, mintState, } from './auth/oauth.js';
15
+ export { PROFILE_RE, validateProfile } from './auth/profile.js';
16
+ export { HARNESS_REGISTRY, DEFAULT_HARNESS, RESERVED_BARE_NAMES, classifyHarness, validateFlagMatrix, } from './harness/index.js';
17
+ export { generateClaudeCode } from './harness/claude-code.js';
18
+ export { generateCursorAgent } from './harness/cursor-agent.js';
19
+ export { generateCursorIde } from './harness/cursor-ide.js';
20
+ export { generateSdk } from './harness/sdk.js';
10
21
  //# 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,SAAS,GAEV,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,SAAS,GAGV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,2BAA2B,GAE5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "name": "@mootup/moot-cli",
3
- "version": "0.1.0-rc.0",
3
+ "version": "0.2.1",
4
4
  "description": "Host-side operator CLI for the Moot agent team workflow. Wraps devcontainer launch and delegates in-container work to the Python moot CLI via docker exec.",
5
5
  "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/mootup-io/moot-cli-js.git",
9
+ "directory": "packages/moot-cli"
10
+ },
6
11
  "type": "module",
7
12
  "main": "./dist/index.js",
8
13
  "types": "./dist/index.d.ts",
9
14
  "bin": {
10
- "mootup": "./dist/bin.js"
15
+ "moot": "./dist/bin.js"
11
16
  },
12
17
  "exports": {
13
18
  ".": {
@@ -20,7 +25,7 @@
20
25
  "README.md"
21
26
  ],
22
27
  "engines": {
23
- "node": ">=20.0.0"
28
+ "node": ">=18.0.0"
24
29
  },
25
30
  "scripts": {
26
31
  "build": "tsc -p tsconfig.build.json && chmod +x dist/bin.js",
@@ -34,6 +39,9 @@
34
39
  "@mootup/moot-templates": "*",
35
40
  "commander": "^12.1.0"
36
41
  },
42
+ "optionalDependencies": {
43
+ "keytar": "^7.9.0"
44
+ },
37
45
  "devDependencies": {
38
46
  "@types/node": "^20.14.0",
39
47
  "msw": "^2.4.0",