@agentage/cli 0.1.18 → 0.2.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 (232) hide show
  1. package/README.md +107 -190
  2. package/dist/cli.js +20 -244
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/agents.d.ts +3 -0
  5. package/dist/commands/agents.d.ts.map +1 -0
  6. package/dist/commands/agents.js +45 -0
  7. package/dist/commands/agents.js.map +1 -0
  8. package/dist/commands/daemon-cmd.d.ts +3 -0
  9. package/dist/commands/daemon-cmd.d.ts.map +1 -0
  10. package/dist/commands/daemon-cmd.js +26 -0
  11. package/dist/commands/daemon-cmd.js.map +1 -0
  12. package/dist/commands/login.d.ts +2 -1
  13. package/dist/commands/login.d.ts.map +1 -1
  14. package/dist/commands/login.js +8 -65
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.d.ts +2 -1
  17. package/dist/commands/logout.d.ts.map +1 -1
  18. package/dist/commands/logout.js +7 -26
  19. package/dist/commands/logout.js.map +1 -1
  20. package/dist/commands/logs.d.ts +3 -0
  21. package/dist/commands/logs.d.ts.map +1 -0
  22. package/dist/commands/logs.js +45 -0
  23. package/dist/commands/logs.js.map +1 -0
  24. package/dist/commands/machines.d.ts +3 -0
  25. package/dist/commands/machines.d.ts.map +1 -0
  26. package/dist/commands/machines.js +14 -0
  27. package/dist/commands/machines.js.map +1 -0
  28. package/dist/commands/run.d.ts +2 -1
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +71 -27
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/runs.d.ts +3 -0
  33. package/dist/commands/runs.d.ts.map +1 -0
  34. package/dist/commands/runs.js +73 -0
  35. package/dist/commands/runs.js.map +1 -0
  36. package/dist/commands/status.d.ts +3 -0
  37. package/dist/commands/status.d.ts.map +1 -0
  38. package/dist/commands/status.js +34 -0
  39. package/dist/commands/status.js.map +1 -0
  40. package/dist/daemon/config.d.ts +32 -0
  41. package/dist/daemon/config.d.ts.map +1 -0
  42. package/dist/daemon/config.js +57 -0
  43. package/dist/daemon/config.js.map +1 -0
  44. package/dist/daemon/daemon.d.ts +8 -0
  45. package/dist/daemon/daemon.d.ts.map +1 -0
  46. package/dist/daemon/daemon.js +106 -0
  47. package/dist/daemon/daemon.js.map +1 -0
  48. package/dist/daemon/logger.d.ts +10 -0
  49. package/dist/daemon/logger.d.ts.map +1 -0
  50. package/dist/daemon/logger.js +41 -0
  51. package/dist/daemon/logger.js.map +1 -0
  52. package/dist/daemon/routes.d.ts +7 -0
  53. package/dist/daemon/routes.d.ts.map +1 -0
  54. package/dist/daemon/routes.js +102 -0
  55. package/dist/daemon/routes.js.map +1 -0
  56. package/dist/daemon/run-manager.d.ts +13 -0
  57. package/dist/daemon/run-manager.d.ts.map +1 -0
  58. package/dist/daemon/run-manager.js +119 -0
  59. package/dist/daemon/run-manager.js.map +1 -0
  60. package/dist/daemon/server.d.ts +11 -0
  61. package/dist/daemon/server.d.ts.map +1 -0
  62. package/dist/daemon/server.js +59 -0
  63. package/dist/daemon/server.js.map +1 -0
  64. package/dist/daemon/websocket.d.ts +4 -0
  65. package/dist/daemon/websocket.d.ts.map +1 -0
  66. package/dist/daemon/websocket.js +88 -0
  67. package/dist/daemon/websocket.js.map +1 -0
  68. package/dist/daemon-entry.d.ts +2 -0
  69. package/dist/daemon-entry.d.ts.map +1 -0
  70. package/dist/daemon-entry.js +45 -0
  71. package/dist/daemon-entry.js.map +1 -0
  72. package/dist/discovery/code-factory.d.ts +3 -0
  73. package/dist/discovery/code-factory.d.ts.map +1 -0
  74. package/dist/discovery/code-factory.js +32 -0
  75. package/dist/discovery/code-factory.js.map +1 -0
  76. package/dist/discovery/markdown-factory.d.ts +3 -0
  77. package/dist/discovery/markdown-factory.d.ts.map +1 -0
  78. package/dist/discovery/markdown-factory.js +63 -0
  79. package/dist/discovery/markdown-factory.js.map +1 -0
  80. package/dist/discovery/scanner.d.ts +3 -0
  81. package/dist/discovery/scanner.d.ts.map +1 -0
  82. package/dist/discovery/scanner.js +50 -0
  83. package/dist/discovery/scanner.js.map +1 -0
  84. package/dist/index.d.ts +2 -2
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -8
  87. package/dist/index.js.map +1 -1
  88. package/dist/utils/daemon-client.d.ts +5 -0
  89. package/dist/utils/daemon-client.d.ts.map +1 -0
  90. package/dist/utils/daemon-client.js +44 -0
  91. package/dist/utils/daemon-client.js.map +1 -0
  92. package/dist/utils/ensure-daemon.d.ts +2 -0
  93. package/dist/utils/ensure-daemon.d.ts.map +1 -0
  94. package/dist/utils/ensure-daemon.js +7 -0
  95. package/dist/utils/ensure-daemon.js.map +1 -0
  96. package/dist/utils/render.d.ts +3 -0
  97. package/dist/utils/render.d.ts.map +1 -0
  98. package/dist/utils/render.js +84 -0
  99. package/dist/utils/render.js.map +1 -0
  100. package/package.json +45 -58
  101. package/dist/cli.test.d.ts +0 -2
  102. package/dist/cli.test.d.ts.map +0 -1
  103. package/dist/cli.test.js +0 -67
  104. package/dist/cli.test.js.map +0 -1
  105. package/dist/commands/init.d.ts +0 -8
  106. package/dist/commands/init.d.ts.map +0 -1
  107. package/dist/commands/init.js +0 -39
  108. package/dist/commands/init.js.map +0 -1
  109. package/dist/commands/init.test.d.ts +0 -2
  110. package/dist/commands/init.test.d.ts.map +0 -1
  111. package/dist/commands/init.test.js +0 -79
  112. package/dist/commands/init.test.js.map +0 -1
  113. package/dist/commands/install.d.ts +0 -8
  114. package/dist/commands/install.d.ts.map +0 -1
  115. package/dist/commands/install.js +0 -90
  116. package/dist/commands/install.js.map +0 -1
  117. package/dist/commands/install.test.d.ts +0 -2
  118. package/dist/commands/install.test.d.ts.map +0 -1
  119. package/dist/commands/install.test.js +0 -172
  120. package/dist/commands/install.test.js.map +0 -1
  121. package/dist/commands/list.d.ts +0 -2
  122. package/dist/commands/list.d.ts.map +0 -1
  123. package/dist/commands/list.js +0 -145
  124. package/dist/commands/list.js.map +0 -1
  125. package/dist/commands/list.test.d.ts +0 -2
  126. package/dist/commands/list.test.d.ts.map +0 -1
  127. package/dist/commands/list.test.js +0 -120
  128. package/dist/commands/list.test.js.map +0 -1
  129. package/dist/commands/login.test.d.ts +0 -2
  130. package/dist/commands/login.test.d.ts.map +0 -1
  131. package/dist/commands/login.test.js +0 -157
  132. package/dist/commands/login.test.js.map +0 -1
  133. package/dist/commands/logout.test.d.ts +0 -2
  134. package/dist/commands/logout.test.d.ts.map +0 -1
  135. package/dist/commands/logout.test.js +0 -49
  136. package/dist/commands/logout.test.js.map +0 -1
  137. package/dist/commands/publish.d.ts +0 -10
  138. package/dist/commands/publish.d.ts.map +0 -1
  139. package/dist/commands/publish.js +0 -138
  140. package/dist/commands/publish.js.map +0 -1
  141. package/dist/commands/publish.test.d.ts +0 -2
  142. package/dist/commands/publish.test.d.ts.map +0 -1
  143. package/dist/commands/publish.test.js +0 -307
  144. package/dist/commands/publish.test.js.map +0 -1
  145. package/dist/commands/run.test.d.ts +0 -2
  146. package/dist/commands/run.test.d.ts.map +0 -1
  147. package/dist/commands/run.test.js +0 -105
  148. package/dist/commands/run.test.js.map +0 -1
  149. package/dist/commands/search.d.ts +0 -8
  150. package/dist/commands/search.d.ts.map +0 -1
  151. package/dist/commands/search.js +0 -41
  152. package/dist/commands/search.js.map +0 -1
  153. package/dist/commands/search.test.d.ts +0 -2
  154. package/dist/commands/search.test.d.ts.map +0 -1
  155. package/dist/commands/search.test.js +0 -138
  156. package/dist/commands/search.test.js.map +0 -1
  157. package/dist/commands/update.d.ts +0 -8
  158. package/dist/commands/update.d.ts.map +0 -1
  159. package/dist/commands/update.js +0 -28
  160. package/dist/commands/update.js.map +0 -1
  161. package/dist/commands/update.test.d.ts +0 -2
  162. package/dist/commands/update.test.d.ts.map +0 -1
  163. package/dist/commands/update.test.js +0 -134
  164. package/dist/commands/update.test.js.map +0 -1
  165. package/dist/commands/whoami.d.ts +0 -2
  166. package/dist/commands/whoami.d.ts.map +0 -1
  167. package/dist/commands/whoami.js +0 -55
  168. package/dist/commands/whoami.js.map +0 -1
  169. package/dist/commands/whoami.test.d.ts +0 -2
  170. package/dist/commands/whoami.test.d.ts.map +0 -1
  171. package/dist/commands/whoami.test.js +0 -119
  172. package/dist/commands/whoami.test.js.map +0 -1
  173. package/dist/index.test.d.ts +0 -2
  174. package/dist/index.test.d.ts.map +0 -1
  175. package/dist/index.test.js +0 -17
  176. package/dist/index.test.js.map +0 -1
  177. package/dist/schemas/agent.schema.d.ts +0 -22
  178. package/dist/schemas/agent.schema.d.ts.map +0 -1
  179. package/dist/schemas/agent.schema.js +0 -9
  180. package/dist/schemas/agent.schema.js.map +0 -1
  181. package/dist/schemas/agent.schema.test.d.ts +0 -2
  182. package/dist/schemas/agent.schema.test.d.ts.map +0 -1
  183. package/dist/schemas/agent.schema.test.js +0 -80
  184. package/dist/schemas/agent.schema.test.js.map +0 -1
  185. package/dist/services/auth.service.d.ts +0 -10
  186. package/dist/services/auth.service.d.ts.map +0 -1
  187. package/dist/services/auth.service.js +0 -99
  188. package/dist/services/auth.service.js.map +0 -1
  189. package/dist/services/auth.service.test.d.ts +0 -2
  190. package/dist/services/auth.service.test.d.ts.map +0 -1
  191. package/dist/services/auth.service.test.js +0 -218
  192. package/dist/services/auth.service.test.js.map +0 -1
  193. package/dist/services/registry.service.d.ts +0 -13
  194. package/dist/services/registry.service.d.ts.map +0 -1
  195. package/dist/services/registry.service.js +0 -74
  196. package/dist/services/registry.service.js.map +0 -1
  197. package/dist/services/registry.service.test.d.ts +0 -2
  198. package/dist/services/registry.service.test.d.ts.map +0 -1
  199. package/dist/services/registry.service.test.js +0 -222
  200. package/dist/services/registry.service.test.js.map +0 -1
  201. package/dist/types/config.types.d.ts +0 -177
  202. package/dist/types/config.types.d.ts.map +0 -1
  203. package/dist/types/config.types.js +0 -22
  204. package/dist/types/config.types.js.map +0 -1
  205. package/dist/types/registry.types.d.ts +0 -65
  206. package/dist/types/registry.types.d.ts.map +0 -1
  207. package/dist/types/registry.types.js +0 -2
  208. package/dist/types/registry.types.js.map +0 -1
  209. package/dist/utils/agent-parser.d.ts +0 -26
  210. package/dist/utils/agent-parser.d.ts.map +0 -1
  211. package/dist/utils/agent-parser.js +0 -45
  212. package/dist/utils/agent-parser.js.map +0 -1
  213. package/dist/utils/agent-parser.test.d.ts +0 -2
  214. package/dist/utils/agent-parser.test.d.ts.map +0 -1
  215. package/dist/utils/agent-parser.test.js +0 -102
  216. package/dist/utils/agent-parser.test.js.map +0 -1
  217. package/dist/utils/config.d.ts +0 -21
  218. package/dist/utils/config.d.ts.map +0 -1
  219. package/dist/utils/config.js +0 -99
  220. package/dist/utils/config.js.map +0 -1
  221. package/dist/utils/config.test.d.ts +0 -2
  222. package/dist/utils/config.test.d.ts.map +0 -1
  223. package/dist/utils/config.test.js +0 -214
  224. package/dist/utils/config.test.js.map +0 -1
  225. package/dist/utils/version.d.ts +0 -10
  226. package/dist/utils/version.d.ts.map +0 -1
  227. package/dist/utils/version.js +0 -33
  228. package/dist/utils/version.js.map +0 -1
  229. package/dist/utils/version.test.d.ts +0 -2
  230. package/dist/utils/version.test.d.ts.map +0 -1
  231. package/dist/utils/version.test.js +0 -30
  232. package/dist/utils/version.test.js.map +0 -1
@@ -1,119 +0,0 @@
1
- import * as authService from '../services/auth.service.js';
2
- import { AuthError } from '../services/auth.service.js';
3
- import * as configUtils from '../utils/config.js';
4
- import { whoamiCommand } from './whoami.js';
5
- jest.mock('../services/auth.service.js', () => {
6
- const original = jest.requireActual('../services/auth.service.js');
7
- return {
8
- ...original,
9
- getMe: jest.fn(),
10
- };
11
- });
12
- jest.mock('../utils/config.js');
13
- const mockGetMe = authService.getMe;
14
- const mockLoadConfig = configUtils.loadConfig;
15
- const mockGetRegistryUrl = configUtils.getRegistryUrl;
16
- const mockIsTokenExpired = configUtils.isTokenExpired;
17
- describe('whoamiCommand', () => {
18
- let consoleSpy;
19
- let consoleErrorSpy;
20
- let processExitSpy;
21
- beforeEach(() => {
22
- jest.clearAllMocks();
23
- consoleSpy = jest.spyOn(console, 'log').mockImplementation();
24
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
25
- processExitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {
26
- throw new Error('process.exit called');
27
- });
28
- mockGetRegistryUrl.mockResolvedValue('https://dev.agentage.io');
29
- mockIsTokenExpired.mockReturnValue(false);
30
- });
31
- afterEach(() => {
32
- consoleSpy.mockRestore();
33
- consoleErrorSpy.mockRestore();
34
- processExitSpy.mockRestore();
35
- });
36
- it('shows not logged in when no token', async () => {
37
- mockLoadConfig.mockResolvedValue({});
38
- await whoamiCommand();
39
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Not logged in'));
40
- });
41
- it('shows expired session when token is locally expired', async () => {
42
- mockLoadConfig.mockResolvedValue({
43
- auth: { token: 'expired-token', expiresAt: '2020-01-01T00:00:00Z' },
44
- });
45
- mockIsTokenExpired.mockReturnValue(true);
46
- await expect(whoamiCommand()).rejects.toThrow('process.exit called');
47
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Session expired'));
48
- });
49
- it('displays user info when authenticated', async () => {
50
- mockLoadConfig.mockResolvedValue({
51
- auth: { token: 'test-token' },
52
- });
53
- mockGetMe.mockResolvedValue({
54
- id: '123',
55
- email: 'test@example.com',
56
- name: 'Test User',
57
- });
58
- await whoamiCommand();
59
- expect(mockGetMe).toHaveBeenCalled();
60
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Logged in to'), expect.any(String));
61
- });
62
- it('handles session expired error', async () => {
63
- mockLoadConfig.mockResolvedValue({
64
- auth: { token: 'expired-token' },
65
- });
66
- mockGetMe.mockRejectedValue(new AuthError('Session expired', 'session_expired'));
67
- await expect(whoamiCommand()).rejects.toThrow('process.exit called');
68
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Session expired'));
69
- });
70
- it('handles not_authenticated error', async () => {
71
- mockLoadConfig.mockResolvedValue({
72
- auth: { token: 'test-token' },
73
- });
74
- mockGetMe.mockRejectedValue(new AuthError('Not authenticated', 'not_authenticated'));
75
- await expect(whoamiCommand()).rejects.toThrow('process.exit called');
76
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Not logged in'));
77
- });
78
- it('handles other AuthError errors', async () => {
79
- mockLoadConfig.mockResolvedValue({
80
- auth: { token: 'test-token' },
81
- });
82
- mockGetMe.mockRejectedValue(new AuthError('Server error', 'server_error'));
83
- await expect(whoamiCommand()).rejects.toThrow('process.exit called');
84
- expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Error'), 'Server error');
85
- });
86
- it('handles non-AuthError errors', async () => {
87
- mockLoadConfig.mockResolvedValue({
88
- auth: { token: 'test-token' },
89
- });
90
- mockGetMe.mockRejectedValue(new Error('Network error'));
91
- await expect(whoamiCommand()).rejects.toThrow('process.exit called');
92
- expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Error'), 'Network error');
93
- });
94
- it('displays user without name', async () => {
95
- mockLoadConfig.mockResolvedValue({
96
- auth: { token: 'test-token' },
97
- });
98
- mockGetMe.mockResolvedValue({
99
- id: '123',
100
- email: 'test@example.com',
101
- });
102
- await whoamiCommand();
103
- expect(consoleSpy).toHaveBeenCalledWith(' Email:', expect.stringContaining('test@example.com'));
104
- });
105
- it('displays user with verifiedAlias', async () => {
106
- mockLoadConfig.mockResolvedValue({
107
- auth: { token: 'test-token' },
108
- });
109
- mockGetMe.mockResolvedValue({
110
- id: '123',
111
- email: 'test@example.com',
112
- name: 'Test User',
113
- verifiedAlias: 'testuser',
114
- });
115
- await whoamiCommand();
116
- expect(consoleSpy).toHaveBeenCalledWith(' Alias:', expect.stringContaining('testuser'));
117
- });
118
- });
119
- //# sourceMappingURL=whoami.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.test.js","sourceRoot":"","sources":["../../src/commands/whoami.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -1,17 +0,0 @@
1
- import { readFileSync } from 'fs';
2
- import { join } from 'path';
3
- const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
4
- jest.mock('./index.js', () => ({
5
- version: packageJson.version,
6
- greet: () => 'Hello from AgentKit CLI!',
7
- }));
8
- import { greet, version } from './index.js';
9
- describe('CLI Package', () => {
10
- test('version matches package.json', () => {
11
- expect(version).toBe(packageJson.version);
12
- });
13
- test('greet returns correct message', () => {
14
- expect(greet()).toBe('Hello from AgentKit CLI!');
15
- });
16
- });
17
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACtC,CAAC;AAGzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,KAAK,EAAE,GAAG,EAAE,CAAC,0BAA0B;CACxC,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const agentYamlSchema: z.ZodObject<{
3
- name: z.ZodString;
4
- model: z.ZodDefault<z.ZodString>;
5
- instructions: z.ZodString;
6
- tools: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
7
- variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
8
- }, "strip", z.ZodTypeAny, {
9
- name: string;
10
- tools: string[];
11
- model: string;
12
- instructions: string;
13
- variables: Record<string, string>;
14
- }, {
15
- name: string;
16
- instructions: string;
17
- tools?: string[] | undefined;
18
- model?: string | undefined;
19
- variables?: Record<string, string> | undefined;
20
- }>;
21
- export type AgentYaml = z.infer<typeof agentYamlSchema>;
22
- //# sourceMappingURL=agent.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/agent.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- import { z } from 'zod';
2
- export const agentYamlSchema = z.object({
3
- name: z.string().min(1),
4
- model: z.string().default('gpt-4'),
5
- instructions: z.string().min(1),
6
- tools: z.array(z.string()).optional().default([]),
7
- variables: z.record(z.string()).optional().default({}),
8
- });
9
- //# sourceMappingURL=agent.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.schema.js","sourceRoot":"","sources":["../../src/schemas/agent.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=agent.schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.schema.test.d.ts","sourceRoot":"","sources":["../../src/schemas/agent.schema.test.ts"],"names":[],"mappings":""}
@@ -1,80 +0,0 @@
1
- import { agentYamlSchema } from './agent.schema.js';
2
- describe('agentYamlSchema', () => {
3
- test('validates correct agent configuration', () => {
4
- const validConfig = {
5
- name: 'test-agent',
6
- model: 'gpt-4',
7
- instructions: 'You are helpful',
8
- tools: ['tool1', 'tool2'],
9
- variables: { key1: 'value1', key2: 'value2' },
10
- };
11
- const result = agentYamlSchema.parse(validConfig);
12
- expect(result).toEqual(validConfig);
13
- });
14
- test('applies default values', () => {
15
- const minimalConfig = {
16
- name: 'test-agent',
17
- instructions: 'You are helpful',
18
- };
19
- const result = agentYamlSchema.parse(minimalConfig);
20
- expect(result.model).toBe('gpt-4');
21
- expect(result.tools).toEqual([]);
22
- expect(result.variables).toEqual({});
23
- });
24
- test('rejects empty name', () => {
25
- const invalidConfig = {
26
- name: '',
27
- instructions: 'You are helpful',
28
- };
29
- expect(() => agentYamlSchema.parse(invalidConfig)).toThrow();
30
- });
31
- test('rejects missing name', () => {
32
- const invalidConfig = {
33
- instructions: 'You are helpful',
34
- };
35
- expect(() => agentYamlSchema.parse(invalidConfig)).toThrow();
36
- });
37
- test('rejects empty instructions', () => {
38
- const invalidConfig = {
39
- name: 'test-agent',
40
- instructions: '',
41
- };
42
- expect(() => agentYamlSchema.parse(invalidConfig)).toThrow();
43
- });
44
- test('rejects missing instructions', () => {
45
- const invalidConfig = {
46
- name: 'test-agent',
47
- };
48
- expect(() => agentYamlSchema.parse(invalidConfig)).toThrow();
49
- });
50
- test('accepts optional tools array', () => {
51
- const config = {
52
- name: 'test-agent',
53
- instructions: 'You are helpful',
54
- tools: ['tool1'],
55
- };
56
- const result = agentYamlSchema.parse(config);
57
- expect(result.tools).toEqual(['tool1']);
58
- });
59
- test('accepts optional variables object', () => {
60
- const config = {
61
- name: 'test-agent',
62
- instructions: 'You are helpful',
63
- variables: { foo: 'bar' },
64
- };
65
- const result = agentYamlSchema.parse(config);
66
- expect(result.variables).toEqual({ foo: 'bar' });
67
- });
68
- test('type inference works correctly', () => {
69
- const config = {
70
- name: 'test-agent',
71
- model: 'gpt-4',
72
- instructions: 'You are helpful',
73
- tools: [],
74
- variables: {},
75
- };
76
- expect(config.name).toBe('test-agent');
77
- expect(config.model).toBe('gpt-4');
78
- });
79
- });
80
- //# sourceMappingURL=agent.schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.schema.test.js","sourceRoot":"","sources":["../../src/schemas/agent.schema.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { DeviceCodeResponse, TokenResponse, User } from '../types/config.types.js';
2
- export declare class AuthError extends Error {
3
- code: string;
4
- constructor(message: string, code: string);
5
- }
6
- export declare const requestDeviceCode: () => Promise<DeviceCodeResponse>;
7
- export declare const pollForToken: (deviceCode: string, interval: number, expiresIn: number) => Promise<TokenResponse>;
8
- export declare const getMe: () => Promise<User>;
9
- export declare const logout: () => Promise<void>;
10
- //# sourceMappingURL=auth.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,aAAa,EACb,IAAI,EACL,MAAM,0BAA0B,CAAC;AAMlC,qBAAa,SAAU,SAAQ,KAAK;IACE,IAAI,EAAE,MAAM;gBAApC,OAAO,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAIjD;AAKD,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,kBAAkB,CAqBpE,CAAC;AAKF,eAAO,MAAM,YAAY,GACvB,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,aAAa,CA6CvB,CAAC;AAYF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CA8B1C,CAAC;AAKF,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,IAAI,CAkB3C,CAAC"}
@@ -1,99 +0,0 @@
1
- import { getAuthToken, getDeviceId, getRegistryUrl } from '../utils/config.js';
2
- export class AuthError extends Error {
3
- code;
4
- constructor(message, code) {
5
- super(message);
6
- this.code = code;
7
- this.name = 'AuthError';
8
- }
9
- }
10
- export const requestDeviceCode = async () => {
11
- const registryUrl = await getRegistryUrl();
12
- const deviceId = await getDeviceId();
13
- const response = await fetch(`${registryUrl}/api/auth/device/code`, {
14
- method: 'POST',
15
- headers: {
16
- 'Content-Type': 'application/json',
17
- },
18
- body: JSON.stringify({ device_id: deviceId }),
19
- });
20
- if (!response.ok) {
21
- const error = (await response.json());
22
- throw new AuthError(error.error_description || 'Failed to request device code', error.error || 'request_failed');
23
- }
24
- return response.json();
25
- };
26
- export const pollForToken = async (deviceCode, interval, expiresIn) => {
27
- const registryUrl = await getRegistryUrl();
28
- const startTime = Date.now();
29
- const expiryTime = startTime + expiresIn * 1000;
30
- let currentInterval = interval;
31
- while (Date.now() < expiryTime) {
32
- await sleep(currentInterval * 1000);
33
- const response = await fetch(`${registryUrl}/api/auth/device/token`, {
34
- method: 'POST',
35
- headers: {
36
- 'Content-Type': 'application/json',
37
- },
38
- body: JSON.stringify({ device_code: deviceCode }),
39
- });
40
- if (response.ok) {
41
- return response.json();
42
- }
43
- const error = (await response.json());
44
- switch (error.error) {
45
- case 'authorization_pending':
46
- continue;
47
- case 'slow_down':
48
- currentInterval += 5;
49
- continue;
50
- case 'expired_token':
51
- throw new AuthError('Login timed out. Please try again.', error.error);
52
- case 'access_denied':
53
- throw new AuthError('Authorization was denied.', error.error);
54
- default:
55
- throw new AuthError(error.error_description || 'Authentication failed', error.error || 'unknown_error');
56
- }
57
- }
58
- throw new AuthError('Login timed out. Please try again.', 'expired_token');
59
- };
60
- export const getMe = async () => {
61
- const registryUrl = await getRegistryUrl();
62
- const token = await getAuthToken();
63
- if (!token) {
64
- throw new AuthError('Not authenticated', 'not_authenticated');
65
- }
66
- const response = await fetch(`${registryUrl}/api/auth/me`, {
67
- headers: {
68
- Authorization: `Bearer ${token}`,
69
- },
70
- });
71
- if (!response.ok) {
72
- if (response.status === 401) {
73
- throw new AuthError('Session expired. Please login again.', 'session_expired');
74
- }
75
- const error = (await response.json());
76
- throw new AuthError(error.error_description || 'Failed to get user info', error.error || 'request_failed');
77
- }
78
- const data = (await response.json());
79
- return data.user;
80
- };
81
- export const logout = async () => {
82
- const registryUrl = await getRegistryUrl();
83
- const token = await getAuthToken();
84
- if (!token) {
85
- return;
86
- }
87
- try {
88
- await fetch(`${registryUrl}/api/auth/logout`, {
89
- method: 'POST',
90
- headers: {
91
- Authorization: `Bearer ${token}`,
92
- },
93
- });
94
- }
95
- catch {
96
- }
97
- };
98
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
99
- //# sourceMappingURL=auth.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=auth.service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.service.test.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.test.ts"],"names":[],"mappings":""}
@@ -1,218 +0,0 @@
1
- import * as configUtils from '../utils/config.js';
2
- import { AuthError, getMe, logout, pollForToken, requestDeviceCode, } from './auth.service.js';
3
- jest.mock('../utils/config.js');
4
- const mockGetRegistryUrl = configUtils.getRegistryUrl;
5
- const mockGetAuthToken = configUtils.getAuthToken;
6
- const mockGetDeviceId = configUtils.getDeviceId;
7
- const mockFetch = jest.fn();
8
- global.fetch = mockFetch;
9
- describe('auth.service', () => {
10
- beforeEach(() => {
11
- jest.clearAllMocks();
12
- mockGetRegistryUrl.mockResolvedValue('https://dev.agentage.io');
13
- mockGetDeviceId.mockResolvedValue('test-device-id-12345678');
14
- });
15
- describe('requestDeviceCode', () => {
16
- it('returns device code response on success', async () => {
17
- const deviceCodeResponse = {
18
- device_code: 'abc123',
19
- user_code: 'ABCD-1234',
20
- verification_uri: 'https://dev.agentage.io/device',
21
- expires_in: 900,
22
- interval: 5,
23
- };
24
- mockFetch.mockResolvedValue({
25
- ok: true,
26
- json: () => Promise.resolve(deviceCodeResponse),
27
- });
28
- const result = await requestDeviceCode();
29
- expect(result).toEqual(deviceCodeResponse);
30
- expect(mockFetch).toHaveBeenCalledWith('https://dev.agentage.io/api/auth/device/code', {
31
- method: 'POST',
32
- headers: { 'Content-Type': 'application/json' },
33
- body: JSON.stringify({ device_id: 'test-device-id-12345678' }),
34
- });
35
- });
36
- it('throws AuthError on failure', async () => {
37
- mockFetch.mockResolvedValue({
38
- ok: false,
39
- json: () => Promise.resolve({
40
- error: 'server_error',
41
- error_description: 'Something went wrong',
42
- }),
43
- });
44
- await expect(requestDeviceCode()).rejects.toThrow(AuthError);
45
- await expect(requestDeviceCode()).rejects.toThrow('Something went wrong');
46
- });
47
- });
48
- describe('pollForToken', () => {
49
- it('returns token on successful authentication', async () => {
50
- const tokenResponse = {
51
- access_token: 'token123',
52
- token_type: 'Bearer',
53
- user: { id: '1', email: 'test@example.com' },
54
- };
55
- mockFetch.mockResolvedValue({
56
- ok: true,
57
- json: () => Promise.resolve(tokenResponse),
58
- });
59
- const result = await pollForToken('device123', 0.01, 60);
60
- expect(result).toEqual(tokenResponse);
61
- expect(mockFetch).toHaveBeenCalledWith('https://dev.agentage.io/api/auth/device/token', expect.objectContaining({
62
- method: 'POST',
63
- body: JSON.stringify({ device_code: 'device123' }),
64
- }));
65
- });
66
- it('throws on access_denied', async () => {
67
- mockFetch.mockResolvedValue({
68
- ok: false,
69
- json: () => Promise.resolve({ error: 'access_denied' }),
70
- });
71
- await expect(pollForToken('device123', 0.01, 60)).rejects.toThrow('Authorization was denied');
72
- });
73
- it('throws on expired_token', async () => {
74
- mockFetch.mockResolvedValue({
75
- ok: false,
76
- json: () => Promise.resolve({ error: 'expired_token' }),
77
- });
78
- await expect(pollForToken('device123', 0.01, 60)).rejects.toThrow('Login timed out');
79
- });
80
- it('continues polling on authorization_pending then succeeds', async () => {
81
- const tokenResponse = {
82
- access_token: 'token123',
83
- token_type: 'Bearer',
84
- };
85
- mockFetch
86
- .mockResolvedValueOnce({
87
- ok: false,
88
- json: () => Promise.resolve({ error: 'authorization_pending' }),
89
- })
90
- .mockResolvedValueOnce({
91
- ok: true,
92
- json: () => Promise.resolve(tokenResponse),
93
- });
94
- const result = await pollForToken('device123', 0.01, 60);
95
- expect(result).toEqual(tokenResponse);
96
- expect(mockFetch).toHaveBeenCalledTimes(2);
97
- });
98
- it('slows down polling on slow_down error', async () => {
99
- const tokenResponse = {
100
- access_token: 'token123',
101
- token_type: 'Bearer',
102
- };
103
- mockFetch
104
- .mockResolvedValueOnce({
105
- ok: false,
106
- json: () => Promise.resolve({ error: 'slow_down' }),
107
- })
108
- .mockResolvedValueOnce({
109
- ok: true,
110
- json: () => Promise.resolve(tokenResponse),
111
- });
112
- const result = await pollForToken('device123', 0.001, 60);
113
- expect(result).toEqual(tokenResponse);
114
- expect(mockFetch).toHaveBeenCalledTimes(2);
115
- }, 10000);
116
- it('throws on unknown error with description', async () => {
117
- mockFetch.mockReset();
118
- mockFetch.mockResolvedValue({
119
- ok: false,
120
- json: () => Promise.resolve({
121
- error: 'unknown_error',
122
- error_description: 'Something unexpected happened',
123
- }),
124
- });
125
- await expect(pollForToken('device123', 0.01, 60)).rejects.toThrow('Something unexpected happened');
126
- });
127
- it('throws on unknown error without description', async () => {
128
- mockFetch.mockReset();
129
- mockFetch.mockResolvedValue({
130
- ok: false,
131
- json: () => Promise.resolve({ error: 'some_error' }),
132
- });
133
- await expect(pollForToken('device123', 0.01, 60)).rejects.toThrow('Authentication failed');
134
- });
135
- });
136
- describe('getMe', () => {
137
- beforeEach(() => {
138
- mockFetch.mockReset();
139
- });
140
- it('returns user on success', async () => {
141
- const user = { id: '1', email: 'test@example.com', name: 'Test User' };
142
- mockGetAuthToken.mockResolvedValue('token123');
143
- mockFetch.mockResolvedValue({
144
- ok: true,
145
- json: () => Promise.resolve({ user }),
146
- });
147
- const result = await getMe();
148
- expect(result).toEqual(user);
149
- expect(mockFetch).toHaveBeenCalledWith('https://dev.agentage.io/api/auth/me', {
150
- headers: { Authorization: 'Bearer token123' },
151
- });
152
- });
153
- it('throws when not authenticated', async () => {
154
- mockGetAuthToken.mockResolvedValue(undefined);
155
- await expect(getMe()).rejects.toThrow('Not authenticated');
156
- });
157
- it('throws on session expired (401)', async () => {
158
- mockGetAuthToken.mockResolvedValue('expired-token');
159
- mockFetch.mockResolvedValue({
160
- ok: false,
161
- status: 401,
162
- json: () => Promise.resolve({}),
163
- });
164
- await expect(getMe()).rejects.toThrow('Session expired');
165
- });
166
- it('throws on other API errors with description', async () => {
167
- mockGetAuthToken.mockResolvedValue('token123');
168
- mockFetch.mockResolvedValue({
169
- ok: false,
170
- status: 500,
171
- json: () => Promise.resolve({
172
- error: 'server_error',
173
- error_description: 'Internal server error',
174
- }),
175
- });
176
- await expect(getMe()).rejects.toThrow('Internal server error');
177
- });
178
- it('throws on other API errors without description', async () => {
179
- mockGetAuthToken.mockResolvedValue('token123');
180
- mockFetch.mockResolvedValue({
181
- ok: false,
182
- status: 500,
183
- json: () => Promise.resolve({ error: 'server_error' }),
184
- });
185
- await expect(getMe()).rejects.toThrow('Failed to get user info');
186
- });
187
- });
188
- describe('logout', () => {
189
- it('calls logout endpoint when authenticated', async () => {
190
- mockGetAuthToken.mockResolvedValue('token123');
191
- mockFetch.mockResolvedValue({ ok: true });
192
- await logout();
193
- expect(mockFetch).toHaveBeenCalledWith('https://dev.agentage.io/api/auth/logout', {
194
- method: 'POST',
195
- headers: { Authorization: 'Bearer token123' },
196
- });
197
- });
198
- it('does nothing when not authenticated', async () => {
199
- mockGetAuthToken.mockResolvedValue(undefined);
200
- await logout();
201
- expect(mockFetch).not.toHaveBeenCalled();
202
- });
203
- it('ignores fetch errors', async () => {
204
- mockGetAuthToken.mockResolvedValue('token123');
205
- mockFetch.mockRejectedValue(new Error('Network error'));
206
- await expect(logout()).resolves.not.toThrow();
207
- });
208
- });
209
- describe('AuthError', () => {
210
- it('has correct name and code', () => {
211
- const error = new AuthError('Test message', 'test_code');
212
- expect(error.name).toBe('AuthError');
213
- expect(error.message).toBe('Test message');
214
- expect(error.code).toBe('test_code');
215
- });
216
- });
217
- });
218
- //# sourceMappingURL=auth.service.test.js.map