@agentarea/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/app.d.ts +7 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +32 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/cli-commands.d.ts +9 -0
  6. package/dist/cli-commands.d.ts.map +1 -0
  7. package/dist/cli-commands.js +62 -0
  8. package/dist/cli-commands.js.map +1 -0
  9. package/dist/cli.d.ts +3 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +66 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/agentsList.d.ts +2 -0
  14. package/dist/commands/agentsList.d.ts.map +1 -0
  15. package/dist/commands/agentsList.js +67 -0
  16. package/dist/commands/agentsList.js.map +1 -0
  17. package/dist/commands/authToken.d.ts +6 -0
  18. package/dist/commands/authToken.d.ts.map +1 -0
  19. package/dist/commands/authToken.js +67 -0
  20. package/dist/commands/authToken.js.map +1 -0
  21. package/dist/commands/connect.d.ts +10 -0
  22. package/dist/commands/connect.d.ts.map +1 -0
  23. package/dist/commands/connect.js +204 -0
  24. package/dist/commands/connect.js.map +1 -0
  25. package/dist/commands/interactiveTUI.d.ts +7 -0
  26. package/dist/commands/interactiveTUI.d.ts.map +1 -0
  27. package/dist/commands/interactiveTUI.js +186 -0
  28. package/dist/commands/interactiveTUI.js.map +1 -0
  29. package/dist/components/ErrorBoundary.d.ts +18 -0
  30. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  31. package/dist/components/ErrorBoundary.js +32 -0
  32. package/dist/components/ErrorBoundary.js.map +1 -0
  33. package/dist/components/InteractiveCLI.d.ts +7 -0
  34. package/dist/components/InteractiveCLI.d.ts.map +1 -0
  35. package/dist/components/InteractiveCLI.js +129 -0
  36. package/dist/components/InteractiveCLI.js.map +1 -0
  37. package/dist/components/REPL.d.ts +7 -0
  38. package/dist/components/REPL.d.ts.map +1 -0
  39. package/dist/components/REPL.js +153 -0
  40. package/dist/components/REPL.js.map +1 -0
  41. package/dist/context/AuthContext.d.ts +28 -0
  42. package/dist/context/AuthContext.d.ts.map +1 -0
  43. package/dist/context/AuthContext.js +14 -0
  44. package/dist/context/AuthContext.js.map +1 -0
  45. package/dist/hooks/useAgent.d.ts +39 -0
  46. package/dist/hooks/useAgent.d.ts.map +1 -0
  47. package/dist/hooks/useAgent.js +125 -0
  48. package/dist/hooks/useAgent.js.map +1 -0
  49. package/dist/hooks/useAuth.d.ts +45 -0
  50. package/dist/hooks/useAuth.d.ts.map +1 -0
  51. package/dist/hooks/useAuth.js +177 -0
  52. package/dist/hooks/useAuth.js.map +1 -0
  53. package/dist/hooks/useSSE.d.ts +32 -0
  54. package/dist/hooks/useSSE.d.ts.map +1 -0
  55. package/dist/hooks/useSSE.js +113 -0
  56. package/dist/hooks/useSSE.js.map +1 -0
  57. package/dist/services/agent.d.ts +13 -0
  58. package/dist/services/agent.d.ts.map +1 -0
  59. package/dist/services/agent.js +114 -0
  60. package/dist/services/agent.js.map +1 -0
  61. package/dist/services/apiClient.d.ts +25 -0
  62. package/dist/services/apiClient.d.ts.map +1 -0
  63. package/dist/services/apiClient.js +258 -0
  64. package/dist/services/apiClient.js.map +1 -0
  65. package/dist/services/auth.d.ts +20 -0
  66. package/dist/services/auth.d.ts.map +1 -0
  67. package/dist/services/auth.js +147 -0
  68. package/dist/services/auth.js.map +1 -0
  69. package/dist/services/sse.d.ts +18 -0
  70. package/dist/services/sse.d.ts.map +1 -0
  71. package/dist/services/sse.js +153 -0
  72. package/dist/services/sse.js.map +1 -0
  73. package/dist/services/task.d.ts +15 -0
  74. package/dist/services/task.d.ts.map +1 -0
  75. package/dist/services/task.js +110 -0
  76. package/dist/services/task.js.map +1 -0
  77. package/dist/tui.d.ts +6 -0
  78. package/dist/tui.d.ts.map +1 -0
  79. package/dist/tui.js +94 -0
  80. package/dist/tui.js.map +1 -0
  81. package/dist/types/index.d.ts +119 -0
  82. package/dist/types/index.d.ts.map +1 -0
  83. package/dist/types/index.js +2 -0
  84. package/dist/types/index.js.map +1 -0
  85. package/dist/utils/config.d.ts +14 -0
  86. package/dist/utils/config.d.ts.map +1 -0
  87. package/dist/utils/config.js +146 -0
  88. package/dist/utils/config.js.map +1 -0
  89. package/dist/utils/error.d.ts +33 -0
  90. package/dist/utils/error.d.ts.map +1 -0
  91. package/dist/utils/error.js +83 -0
  92. package/dist/utils/error.js.map +1 -0
  93. package/dist/utils/formatting.d.ts +18 -0
  94. package/dist/utils/formatting.d.ts.map +1 -0
  95. package/dist/utils/formatting.js +62 -0
  96. package/dist/utils/formatting.js.map +1 -0
  97. package/dist/utils/logger.d.ts +14 -0
  98. package/dist/utils/logger.d.ts.map +1 -0
  99. package/dist/utils/logger.js +49 -0
  100. package/dist/utils/logger.js.map +1 -0
  101. package/dist/utils/signals.d.ts +10 -0
  102. package/dist/utils/signals.d.ts.map +1 -0
  103. package/dist/utils/signals.js +71 -0
  104. package/dist/utils/signals.js.map +1 -0
  105. package/dist/utils/storage.d.ts +11 -0
  106. package/dist/utils/storage.d.ts.map +1 -0
  107. package/dist/utils/storage.js +73 -0
  108. package/dist/utils/storage.js.map +1 -0
  109. package/package.json +103 -0
  110. package/readme.md +229 -0
package/dist/app.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ interface AppProps {
2
+ token?: string;
3
+ apiUrl?: string;
4
+ }
5
+ export default function App({ token: cliToken, apiUrl }: AppProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAQA,UAAU,QAAQ;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAE,QAAQ,2CA8B9D"}
package/dist/app.js ADDED
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { signalHandler } from './utils/signals.js';
4
+ import { logger } from './utils/logger.js';
5
+ import { configManager } from './utils/config.js';
6
+ import { apiClient } from './services/apiClient.js';
7
+ import { ErrorBoundary } from './components/ErrorBoundary.js';
8
+ import TUI from './tui.js';
9
+ export default function App({ token: cliToken, apiUrl }) {
10
+ // Initialize config with provided API URL if specified
11
+ if (apiUrl) {
12
+ process.env['API_URL'] = apiUrl;
13
+ configManager.reinitialize();
14
+ apiClient.reinitialize();
15
+ }
16
+ // Setup 401 error handler for API client
17
+ useEffect(() => {
18
+ apiClient.set401Callback(async (error) => {
19
+ logger.warn('401 Unauthorized received, prompting for new token');
20
+ });
21
+ }, []);
22
+ // Initialize signal handlers for graceful shutdown
23
+ useEffect(() => {
24
+ signalHandler.initialize();
25
+ logger.info('Application started');
26
+ return () => {
27
+ logger.info('Application shutting down');
28
+ };
29
+ }, []);
30
+ return (_jsx(ErrorBoundary, { children: _jsx(TUI, { token: cliToken }) }));
31
+ }
32
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAC5D,OAAO,GAAG,MAAM,UAAU,CAAC;AAO3B,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAW;IAC9D,uDAAuD;IACvD,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAChC,aAAa,CAAC,YAAY,EAAE,CAAC;QAC7B,SAAS,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,cAAc,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;YACtC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACd,aAAa,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEnC,OAAO,GAAG,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACN,KAAC,aAAa,cACb,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,GAAI,GACT,CAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface CliOptions {
2
+ token?: string;
3
+ apiUrl?: string;
4
+ scope?: string;
5
+ name?: string;
6
+ }
7
+ export declare function handleCliCommand(command: string | undefined, subcommand: string | undefined, options: CliOptions): Promise<boolean>;
8
+ export {};
9
+ //# sourceMappingURL=cli-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../source/cli-commands.tsx"],"names":[],"mappings":"AASA,UAAU,UAAU;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,OAAO,CAAC,CA0DlB"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render } from 'ink';
3
+ import { apiClient } from './services/apiClient.js';
4
+ import { tokenStorage } from './utils/storage.js';
5
+ import { configManager } from './utils/config.js';
6
+ import { logger } from './utils/logger.js';
7
+ import { AgentsList } from './commands/agentsList.js';
8
+ import { connectClient } from './commands/connect.js';
9
+ export async function handleCliCommand(command, subcommand, options) {
10
+ // Initialize config with provided API URL if specified
11
+ if (options.apiUrl) {
12
+ process.env['API_URL'] = options.apiUrl;
13
+ configManager.reinitialize();
14
+ apiClient.reinitialize();
15
+ }
16
+ // Load token from CLI flag or environment
17
+ const token = options.token || process.env['AGENTAREA_TOKEN'];
18
+ let loadedToken = token;
19
+ // If no token provided, try to load from keychain
20
+ if (!loadedToken) {
21
+ try {
22
+ const storedToken = await tokenStorage.getToken();
23
+ if (storedToken) {
24
+ loadedToken = storedToken.accessToken;
25
+ }
26
+ }
27
+ catch (error) {
28
+ logger.warn('Failed to load stored token');
29
+ }
30
+ }
31
+ // If still no token, show error
32
+ if (!loadedToken) {
33
+ console.error('❌ Error: No authentication token provided');
34
+ console.error('Provide a JWT token via:');
35
+ console.error(' agentarea-cli --token=YOUR_JWT_TOKEN agents list');
36
+ console.error(' AGENTAREA_TOKEN=YOUR_JWT_TOKEN agentarea-cli agents list');
37
+ process.exit(1);
38
+ }
39
+ // Set token for API client
40
+ const authToken = {
41
+ accessToken: loadedToken,
42
+ tokenType: 'Bearer',
43
+ expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
44
+ };
45
+ apiClient.setToken(authToken);
46
+ // Handle specific commands
47
+ if (command === 'agents' && subcommand === 'list') {
48
+ render(_jsx(AgentsList, {}));
49
+ return true;
50
+ }
51
+ if (command === 'connect') {
52
+ return connectClient(subcommand, {
53
+ apiUrl: options.apiUrl || 'http://localhost:8000',
54
+ token: authToken,
55
+ scope: options.scope,
56
+ name: options.name,
57
+ });
58
+ }
59
+ // No command matched
60
+ return false;
61
+ }
62
+ //# sourceMappingURL=cli-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-commands.js","sourceRoot":"","sources":["../source/cli-commands.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AASpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,OAA2B,EAC3B,UAA8B,EAC9B,OAAmB;IAEnB,uDAAuD;IACvD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACxC,aAAa,CAAC,YAAY,EAAE,CAAC;QAC7B,SAAS,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,kDAAkD;IAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACvC,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,MAAM,SAAS,GAAG;QACjB,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;KACrD,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE9B,2BAA2B;IAC3B,IAAI,OAAO,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACnD,MAAM,CAAC,KAAC,UAAU,KAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,UAAU,EAAE;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,uBAAuB;YACjD,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB,CAAC,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,OAAO,KAAK,CAAC;AACd,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { render } from 'ink';
4
+ import meow from 'meow';
5
+ import { handleCliCommand } from './cli-commands.js';
6
+ import App from './app.js';
7
+ const cli = meow(`
8
+ Usage
9
+ $ agentarea-cli [command]
10
+
11
+ Commands
12
+ (no command) Interactive TUI mode
13
+ agents list List all agents
14
+ connect codex Connect Codex to Agentarea MCP
15
+ connect claude Connect Claude Code to Agentarea MCP
16
+
17
+ Options
18
+ --token JWT authentication token (or use AGENTAREA_TOKEN env var)
19
+ --api-url API server URL (default: http://localhost:8000)
20
+ --name Local Agentarea target name (default: default)
21
+ --scope Connection scope: project or user (default: project)
22
+
23
+ Examples
24
+ $ agentarea-cli --token=eyJ...
25
+ $ AGENTAREA_TOKEN=eyJ... agentarea-cli
26
+ $ agentarea-cli agents list --token=eyJ...
27
+ `, {
28
+ importMeta: import.meta,
29
+ flags: {
30
+ token: {
31
+ type: 'string',
32
+ },
33
+ apiUrl: {
34
+ type: 'string',
35
+ default: 'http://localhost:8000',
36
+ },
37
+ scope: {
38
+ type: 'string',
39
+ default: 'project',
40
+ },
41
+ name: {
42
+ type: 'string',
43
+ default: 'default',
44
+ },
45
+ },
46
+ });
47
+ const token = cli.flags.token || process.env['AGENTAREA_TOKEN'];
48
+ const command = cli.input[0];
49
+ const subcommand = cli.input[1];
50
+ // If a command is provided, handle it directly
51
+ if (command) {
52
+ handleCliCommand(command, subcommand, {
53
+ token,
54
+ apiUrl: cli.flags.apiUrl,
55
+ scope: cli.flags.scope,
56
+ name: cli.flags.name,
57
+ }).catch(error => {
58
+ console.error('CLI command failed:', error);
59
+ process.exit(1);
60
+ });
61
+ }
62
+ else {
63
+ // No command provided - launch TUI mode
64
+ render(_jsx(App, { token: token, apiUrl: cli.flags.apiUrl }));
65
+ }
66
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":";;AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,MAAM,GAAG,GAAG,IAAI,CACf;;;;;;;;;;;;;;;;;;;;CAoBA,EACA;IACC,UAAU,EAAE,MAAM,CAAC,IAAI;IACvB,KAAK,EAAE;QACN,KAAK,EAAE;YACN,IAAI,EAAE,QAAQ;SACd;QACD,MAAM,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;SAChC;QACD,KAAK,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,SAAS;SAClB;QACD,IAAI,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,SAAS;SAClB;KACD;CACD,CACD,CAAC;AAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAChE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhC,+CAA+C;AAC/C,IAAI,OAAO,EAAE,CAAC;IACb,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE;QACrC,KAAK;QACL,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;QACtB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI;KACpB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,wCAAwC;IACxC,MAAM,CAAC,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAI,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function AgentsList(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=agentsList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentsList.d.ts","sourceRoot":"","sources":["../../source/commands/agentsList.tsx"],"names":[],"mappings":"AAcA,wBAAgB,UAAU,4CAiHzB"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { apiClient } from '../services/apiClient.js';
5
+ import { logger } from '../utils/logger.js';
6
+ export function AgentsList() {
7
+ const [agents, setAgents] = useState([]);
8
+ const [loading, setLoading] = useState(true);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ const fetchAgents = async () => {
12
+ try {
13
+ setLoading(true);
14
+ const response = await apiClient.getClient().get('/v1/agents', {
15
+ headers: {
16
+ 'X-Workspace-ID': 'default',
17
+ },
18
+ });
19
+ setAgents(response.data.data || response.data || []);
20
+ logger.info(`Loaded ${(response.data.data || response.data).length} agents`);
21
+ }
22
+ catch (err) {
23
+ let message = 'Failed to load agents';
24
+ const axiosError = err;
25
+ if (axiosError?.response?.status === 401) {
26
+ message =
27
+ 'Authentication failed. Your token may have expired. Please provide a new token.';
28
+ }
29
+ else if (axiosError?.response?.status === 403) {
30
+ message = 'Access denied. You do not have permission to list agents.';
31
+ }
32
+ else if (axiosError?.code === 'ECONNREFUSED') {
33
+ message =
34
+ 'Could not connect to API server at http://localhost:8000. Is it running?';
35
+ }
36
+ else if (axiosError?.code === 'ETIMEDOUT') {
37
+ message =
38
+ 'API request timed out. The server may be slow or unreachable.';
39
+ }
40
+ else if (axiosError?.code === 'EPERM') {
41
+ message =
42
+ 'Could not connect to API server. Check that it is running on http://localhost:8000';
43
+ }
44
+ else if (err instanceof Error) {
45
+ message = err.message;
46
+ }
47
+ setError(message);
48
+ logger.warn('Failed to load agents');
49
+ }
50
+ finally {
51
+ setLoading(false);
52
+ }
53
+ };
54
+ fetchAgents();
55
+ }, []);
56
+ if (loading) {
57
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { color: "yellow", children: "\u23F3 Loading agents..." }) }));
58
+ }
59
+ if (error) {
60
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "red", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "red", children: "\u274C Failed to load agents" }) }), _jsx(Box, { children: _jsx(Text, { color: "red", children: error }) })] }));
61
+ }
62
+ if (agents.length === 0) {
63
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { color: "yellow", children: "\u2139\uFE0F No agents found" }) }));
64
+ }
65
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "green", children: ["\u2713 Agents (", agents.length, ")"] }) }), agents.map(agent => (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: agent.name }), _jsxs(Text, { dimColor: true, children: [" (", agent.id.substring(0, 8), "...)"] })] }), agent.description && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, children: agent.description }) })), agent.status && (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Status: ", agent.status] }) }))] }, agent.id)))] }));
66
+ }
67
+ //# sourceMappingURL=agentsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentsList.js","sourceRoot":"","sources":["../../source/commands/agentsList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface AuthTokenProps {
2
+ onTokenSet: (token: string) => void;
3
+ }
4
+ export declare function AuthToken({ onTokenSet }: AuthTokenProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=authToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authToken.d.ts","sourceRoot":"","sources":["../../source/commands/authToken.tsx"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACvB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,EAAC,UAAU,EAAC,EAAE,cAAc,2CAsGrD"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { tokenStorage } from '../utils/storage.js';
5
+ import { logger } from '../utils/logger.js';
6
+ import readline from 'readline';
7
+ export function AuthToken({ onTokenSet }) {
8
+ const [submitted, setSubmitted] = useState(false);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ const promptForToken = async () => {
12
+ try {
13
+ const rl = readline.createInterface({
14
+ input: process.stdin,
15
+ output: process.stdout,
16
+ });
17
+ const token = await new Promise(resolve => {
18
+ rl.question('Paste your JWT token: ', answer => {
19
+ rl.close();
20
+ resolve(answer);
21
+ });
22
+ });
23
+ if (!token.trim()) {
24
+ setError('Token cannot be empty');
25
+ return;
26
+ }
27
+ logger.debug('Token submitted, validating...');
28
+ // Parse JWT to validate basic structure
29
+ const parts = token.trim().split('.');
30
+ if (parts.length !== 3) {
31
+ setError('Invalid token format. JWT must have 3 parts separated by dots.');
32
+ return;
33
+ }
34
+ // Try to decode payload to validate it's valid base64
35
+ try {
36
+ JSON.parse(Buffer.from(parts[1], 'base64').toString());
37
+ }
38
+ catch {
39
+ setError('Invalid token payload. Token does not appear to be a valid JWT.');
40
+ return;
41
+ }
42
+ // Save token
43
+ const authToken = {
44
+ accessToken: token.trim(),
45
+ tokenType: 'Bearer',
46
+ expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
47
+ };
48
+ await tokenStorage.saveToken(authToken);
49
+ logger.info('Token saved successfully');
50
+ setSubmitted(true);
51
+ // Call callback
52
+ onTokenSet(token.trim());
53
+ }
54
+ catch (err) {
55
+ const message = err instanceof Error ? err.message : 'Failed to save token';
56
+ setError(message);
57
+ logger.error('Failed to save token:', err);
58
+ }
59
+ };
60
+ promptForToken();
61
+ }, [onTokenSet]);
62
+ if (submitted) {
63
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { color: "green", children: "\u2713 Token saved successfully!" }) }));
64
+ }
65
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "cyan", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "\uD83D\uDD10 JWT Token Configuration" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Paste your JWT token below. It will be saved securely in your system keychain." }) }), error && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "red", children: ["\u274C ", error] }) }))] }));
66
+ }
67
+ //# sourceMappingURL=authToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authToken.js","sourceRoot":"","sources":["../../source/commands/authToken.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type AuthToken } from '../types/index.js';
2
+ interface ConnectOptions {
3
+ apiUrl: string;
4
+ token: AuthToken;
5
+ scope?: string;
6
+ name?: string;
7
+ }
8
+ export declare function connectClient(client: string | undefined, options: ConnectOptions): Promise<boolean>;
9
+ export {};
10
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../source/commands/connect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAKjD,UAAU,cAAc;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAmQD,wBAAsB,aAAa,CAClC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
@@ -0,0 +1,204 @@
1
+ import fs from 'fs/promises';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ function normalizedScope(scope) {
5
+ if (scope === 'user' || scope === 'project') {
6
+ return scope;
7
+ }
8
+ return 'project';
9
+ }
10
+ function normalizedName(name) {
11
+ const value = name?.trim();
12
+ return value || 'default';
13
+ }
14
+ function mcpServerName(name) {
15
+ if (name === 'default') {
16
+ return 'agentarea';
17
+ }
18
+ const suffix = name
19
+ .toLowerCase()
20
+ .replace(/[^a-z0-9]+/g, '_')
21
+ .replace(/^_+|_+$/g, '');
22
+ return `agentarea_${suffix || 'default'}`;
23
+ }
24
+ function targetSuffix(name) {
25
+ return (name
26
+ .toUpperCase()
27
+ .replace(/[^A-Z0-9]+/g, '_')
28
+ .replace(/^_+|_+$/g, '') || 'DEFAULT');
29
+ }
30
+ function tokenEnvVar(name) {
31
+ return name === 'default'
32
+ ? 'AGENTAREA_TOKEN'
33
+ : `AGENTAREA_${targetSuffix(name)}_TOKEN`;
34
+ }
35
+ function mcpUrl(apiUrl) {
36
+ return `${apiUrl.replace(/\/$/, '')}/mcp`;
37
+ }
38
+ function agentareaDir() {
39
+ return path.join(os.homedir(), '.agentarea');
40
+ }
41
+ function connectionsPath() {
42
+ return path.join(agentareaDir(), 'connections.json');
43
+ }
44
+ function codexConfigPath(scope) {
45
+ return scope === 'user'
46
+ ? path.join(os.homedir(), '.codex', 'config.toml')
47
+ : path.join(process.cwd(), '.codex', 'config.toml');
48
+ }
49
+ function tokenPrefix(token) {
50
+ return token.accessToken ? token.accessToken.slice(0, 12) : '';
51
+ }
52
+ async function loadConnectionState() {
53
+ try {
54
+ const raw = await fs.readFile(connectionsPath(), 'utf8');
55
+ return JSON.parse(raw);
56
+ }
57
+ catch (error) {
58
+ if (error.code !== 'ENOENT') {
59
+ throw error;
60
+ }
61
+ return {
62
+ version: 1,
63
+ updatedAt: new Date(0).toISOString(),
64
+ connections: {},
65
+ };
66
+ }
67
+ }
68
+ async function saveConnectionState(client, scope, options) {
69
+ const now = new Date().toISOString();
70
+ const state = await loadConnectionState();
71
+ const name = normalizedName(options.name);
72
+ const previous = state.connections[client]?.[name];
73
+ const record = {
74
+ client,
75
+ name,
76
+ scope,
77
+ apiUrl: options.apiUrl.replace(/\/$/, ''),
78
+ mcpUrl: mcpUrl(options.apiUrl),
79
+ tokenEnvVar: tokenEnvVar(name),
80
+ tokenPrefix: tokenPrefix(options.token),
81
+ connectedAt: previous?.connectedAt ?? now,
82
+ updatedAt: now,
83
+ };
84
+ state.connections[client] = {
85
+ ...(state.connections[client] ?? {}),
86
+ [name]: record,
87
+ };
88
+ state.updatedAt = now;
89
+ await fs.mkdir(agentareaDir(), { recursive: true, mode: 0o700 });
90
+ await fs.writeFile(connectionsPath(), `${JSON.stringify(state, null, 2)}\n`, {
91
+ mode: 0o600,
92
+ });
93
+ return connectionsPath();
94
+ }
95
+ function codexBlockStart(name) {
96
+ return `# >>> agentarea-cli managed: ${mcpServerName(name)} MCP`;
97
+ }
98
+ function codexBlockEnd(name) {
99
+ return `# <<< agentarea-cli managed: ${mcpServerName(name)} MCP`;
100
+ }
101
+ function codexManagedBlock(apiUrl, name) {
102
+ return [
103
+ codexBlockStart(name),
104
+ `[mcp_servers.${mcpServerName(name)}]`,
105
+ `url = "${mcpUrl(apiUrl)}"`,
106
+ `bearer_token_env_var = "${tokenEnvVar(name)}"`,
107
+ 'startup_timeout_sec = 10',
108
+ 'tool_timeout_sec = 60',
109
+ codexBlockEnd(name),
110
+ ].join('\n');
111
+ }
112
+ async function writeCodexConfig(apiUrl, scope, name) {
113
+ const configPath = codexConfigPath(scope);
114
+ let existing = '';
115
+ try {
116
+ existing = await fs.readFile(configPath, 'utf8');
117
+ }
118
+ catch (error) {
119
+ if (error.code !== 'ENOENT') {
120
+ throw error;
121
+ }
122
+ }
123
+ const managedPattern = new RegExp(`${codexBlockStart(name)}[\\s\\S]*?${codexBlockEnd(name)}`, 'm');
124
+ const nextBlock = codexManagedBlock(apiUrl, name);
125
+ let nextConfig;
126
+ if (managedPattern.test(existing)) {
127
+ nextConfig = existing.replace(managedPattern, nextBlock);
128
+ }
129
+ else {
130
+ const tablePattern = new RegExp(`^\\[mcp_servers\\.${mcpServerName(name)}\\]`, 'm');
131
+ if (tablePattern.test(existing)) {
132
+ throw new Error(`Refusing to overwrite existing unmanaged Codex MCP config ${mcpServerName(name)} at ${configPath}`);
133
+ }
134
+ nextConfig = `${existing.trimEnd()}${existing ? '\n\n' : ''}${nextBlock}\n`;
135
+ }
136
+ await fs.mkdir(path.dirname(configPath), { recursive: true });
137
+ await fs.writeFile(configPath, nextConfig, 'utf8');
138
+ return configPath;
139
+ }
140
+ function codexInstructions(apiUrl, configPath, name) {
141
+ return [
142
+ 'Codex connection',
143
+ `- target: ${name}`,
144
+ `- MCP server: ${mcpServerName(name)}`,
145
+ `- config written: ${configPath}`,
146
+ `- token source: ${tokenEnvVar(name)} environment variable`,
147
+ '- local client gets one MCP for this Agentarea target',
148
+ '',
149
+ 'Run Codex with:',
150
+ ` export ${tokenEnvVar(name)}="<agentarea-token>"`,
151
+ '',
152
+ 'No per-tool sync is needed. Hosted third-party MCP access changes in Agentarea policy.',
153
+ ].join('\n');
154
+ }
155
+ function claudeInstructions(apiUrl, scope, token, name) {
156
+ const tokenPlaceholder = token.accessToken
157
+ ? '<stored-agentarea-token>'
158
+ : '<agentarea-token>';
159
+ return [
160
+ 'Claude Code connection',
161
+ `- target: ${name}`,
162
+ `- MCP server: ${mcpServerName(name)}`,
163
+ `- scope: ${scope}`,
164
+ '- local client gets one MCP for this Agentarea target',
165
+ '- token source: stored Agentarea CLI token',
166
+ '',
167
+ 'Run:',
168
+ ` claude mcp add --transport http ${mcpServerName(name)} --scope ${scope} ${mcpUrl(apiUrl)} --header "Authorization: Bearer ${tokenPlaceholder}"`,
169
+ '',
170
+ 'No per-tool sync is needed. Hosted third-party MCP access changes in Agentarea policy.',
171
+ ].join('\n');
172
+ }
173
+ function connectionModel() {
174
+ return [
175
+ 'Model:',
176
+ ' Claude/Codex -> agentarea MCP -> Agentarea policy/router -> hosted MCP instances',
177
+ '',
178
+ 'Connect once. Local config stays stable; Agentarea handles grant, revoke, audit, and routing centrally.',
179
+ ].join('\n');
180
+ }
181
+ export async function connectClient(client, options) {
182
+ if (client !== 'codex' && client !== 'claude') {
183
+ console.error('Usage: agentarea-cli connect <codex|claude> [--scope=project|user]');
184
+ return false;
185
+ }
186
+ const scope = normalizedScope(options.scope);
187
+ const name = normalizedName(options.name);
188
+ const statePath = await saveConnectionState(client, scope, options);
189
+ const codexConfig = client === 'codex'
190
+ ? await writeCodexConfig(options.apiUrl, scope, name)
191
+ : '';
192
+ const output = client === 'codex'
193
+ ? codexInstructions(options.apiUrl, codexConfig, name)
194
+ : claudeInstructions(options.apiUrl, scope, options.token, name);
195
+ console.log(output);
196
+ console.log('');
197
+ console.log(connectionModel());
198
+ console.log('');
199
+ console.log(`Saved non-secret connection state: ${statePath}`);
200
+ console.log('');
201
+ console.log('Do not paste real tokens into project files.');
202
+ return true;
203
+ }
204
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../source/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface InteractiveTUIProps {
2
+ userEmail: string;
3
+ token: string;
4
+ }
5
+ export declare function InteractiveTUI({ userEmail, token }: InteractiveTUIProps): any;
6
+ export {};
7
+ //# sourceMappingURL=interactiveTUI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactiveTUI.d.ts","sourceRoot":"","sources":["../../source/commands/interactiveTUI.tsx"],"names":[],"mappings":"AAeA,UAAU,mBAAmB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd;AAgBD,wBAAgB,cAAc,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,EAAE,mBAAmB,OA6FrE"}