@agentteams/cli 0.1.22

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 (200) hide show
  1. package/.agentteams/config.json +8 -0
  2. package/.agentteams/convention.md +100 -0
  3. package/.agentteams/platform/co-action-guide.md +144 -0
  4. package/.agentteams/platform/completion-report-guide.md +146 -0
  5. package/.agentteams/platform/convention-authoring-guide.md +112 -0
  6. package/.agentteams/platform/convention-ud-guide.md +59 -0
  7. package/.agentteams/platform/plan-guide.md +180 -0
  8. package/.agentteams/platform/plan-template.md +201 -0
  9. package/.agentteams/platform/post-mortem-guide.md +92 -0
  10. package/CODE_OF_CONDUCT.md +36 -0
  11. package/CONTRIBUTING.md +39 -0
  12. package/LICENSE +201 -0
  13. package/README.md +405 -0
  14. package/SECURITY.md +27 -0
  15. package/dist/api/coaction.d.ts +17 -0
  16. package/dist/api/coaction.d.ts.map +1 -0
  17. package/dist/api/coaction.js +102 -0
  18. package/dist/api/coaction.js.map +1 -0
  19. package/dist/api/comment.d.ts +13 -0
  20. package/dist/api/comment.d.ts.map +1 -0
  21. package/dist/api/comment.js +33 -0
  22. package/dist/api/comment.js.map +1 -0
  23. package/dist/api/feedback.d.ts +7 -0
  24. package/dist/api/feedback.d.ts.map +1 -0
  25. package/dist/api/feedback.js +6 -0
  26. package/dist/api/feedback.js.map +1 -0
  27. package/dist/api/linear.d.ts +5 -0
  28. package/dist/api/linear.d.ts.map +1 -0
  29. package/dist/api/linear.js +27 -0
  30. package/dist/api/linear.js.map +1 -0
  31. package/dist/api/member.d.ts +16 -0
  32. package/dist/api/member.d.ts.map +1 -0
  33. package/dist/api/member.js +6 -0
  34. package/dist/api/member.js.map +1 -0
  35. package/dist/api/plan.d.ts +51 -0
  36. package/dist/api/plan.d.ts.map +1 -0
  37. package/dist/api/plan.js +80 -0
  38. package/dist/api/plan.js.map +1 -0
  39. package/dist/api/postmortem.d.ts +6 -0
  40. package/dist/api/postmortem.d.ts.map +1 -0
  41. package/dist/api/postmortem.js +33 -0
  42. package/dist/api/postmortem.js.map +1 -0
  43. package/dist/api/report.d.ts +6 -0
  44. package/dist/api/report.d.ts.map +1 -0
  45. package/dist/api/report.js +33 -0
  46. package/dist/api/report.js.map +1 -0
  47. package/dist/api/search.d.ts +2 -0
  48. package/dist/api/search.d.ts.map +1 -0
  49. package/dist/api/search.js +20 -0
  50. package/dist/api/search.js.map +1 -0
  51. package/dist/api/status.d.ts +12 -0
  52. package/dist/api/status.d.ts.map +1 -0
  53. package/dist/api/status.js +33 -0
  54. package/dist/api/status.js.map +1 -0
  55. package/dist/commands/agentConfig.d.ts +4 -0
  56. package/dist/commands/agentConfig.d.ts.map +1 -0
  57. package/dist/commands/agentConfig.js +41 -0
  58. package/dist/commands/agentConfig.js.map +1 -0
  59. package/dist/commands/agentConfigCommand.d.ts +2 -0
  60. package/dist/commands/agentConfigCommand.d.ts.map +1 -0
  61. package/dist/commands/agentConfigCommand.js +20 -0
  62. package/dist/commands/agentConfigCommand.js.map +1 -0
  63. package/dist/commands/coaction.d.ts +2 -0
  64. package/dist/commands/coaction.d.ts.map +1 -0
  65. package/dist/commands/coaction.js +405 -0
  66. package/dist/commands/coaction.js.map +1 -0
  67. package/dist/commands/comment.d.ts +2 -0
  68. package/dist/commands/comment.d.ts.map +1 -0
  69. package/dist/commands/comment.js +63 -0
  70. package/dist/commands/comment.js.map +1 -0
  71. package/dist/commands/config.d.ts +2 -0
  72. package/dist/commands/config.d.ts.map +1 -0
  73. package/dist/commands/config.js +30 -0
  74. package/dist/commands/config.js.map +1 -0
  75. package/dist/commands/convention.d.ts +35 -0
  76. package/dist/commands/convention.d.ts.map +1 -0
  77. package/dist/commands/convention.js +680 -0
  78. package/dist/commands/convention.js.map +1 -0
  79. package/dist/commands/conventionRouter.d.ts +3 -0
  80. package/dist/commands/conventionRouter.d.ts.map +1 -0
  81. package/dist/commands/conventionRouter.js +46 -0
  82. package/dist/commands/conventionRouter.js.map +1 -0
  83. package/dist/commands/dependency.d.ts +4 -0
  84. package/dist/commands/dependency.d.ts.map +1 -0
  85. package/dist/commands/dependency.js +41 -0
  86. package/dist/commands/dependency.js.map +1 -0
  87. package/dist/commands/dependencyCommand.d.ts +2 -0
  88. package/dist/commands/dependencyCommand.d.ts.map +1 -0
  89. package/dist/commands/dependencyCommand.js +27 -0
  90. package/dist/commands/dependencyCommand.js.map +1 -0
  91. package/dist/commands/feedback.d.ts +2 -0
  92. package/dist/commands/feedback.d.ts.map +1 -0
  93. package/dist/commands/feedback.js +38 -0
  94. package/dist/commands/feedback.js.map +1 -0
  95. package/dist/commands/index.d.ts +2 -0
  96. package/dist/commands/index.d.ts.map +1 -0
  97. package/dist/commands/index.js +128 -0
  98. package/dist/commands/index.js.map +1 -0
  99. package/dist/commands/init.d.ts +22 -0
  100. package/dist/commands/init.d.ts.map +1 -0
  101. package/dist/commands/init.js +293 -0
  102. package/dist/commands/init.js.map +1 -0
  103. package/dist/commands/linear.d.ts +2 -0
  104. package/dist/commands/linear.d.ts.map +1 -0
  105. package/dist/commands/linear.js +41 -0
  106. package/dist/commands/linear.js.map +1 -0
  107. package/dist/commands/plan.d.ts +12 -0
  108. package/dist/commands/plan.d.ts.map +1 -0
  109. package/dist/commands/plan.js +626 -0
  110. package/dist/commands/plan.js.map +1 -0
  111. package/dist/commands/postmortem.d.ts +2 -0
  112. package/dist/commands/postmortem.d.ts.map +1 -0
  113. package/dist/commands/postmortem.js +157 -0
  114. package/dist/commands/postmortem.js.map +1 -0
  115. package/dist/commands/report.d.ts +2 -0
  116. package/dist/commands/report.d.ts.map +1 -0
  117. package/dist/commands/report.js +213 -0
  118. package/dist/commands/report.js.map +1 -0
  119. package/dist/commands/search.d.ts +2 -0
  120. package/dist/commands/search.d.ts.map +1 -0
  121. package/dist/commands/search.js +29 -0
  122. package/dist/commands/search.js.map +1 -0
  123. package/dist/commands/status.d.ts +2 -0
  124. package/dist/commands/status.d.ts.map +1 -0
  125. package/dist/commands/status.js +60 -0
  126. package/dist/commands/status.js.map +1 -0
  127. package/dist/index.d.ts +3 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +750 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/types/index.d.ts +237 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +6 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/utils/atomicWrite.d.ts +2 -0
  136. package/dist/utils/atomicWrite.d.ts.map +1 -0
  137. package/dist/utils/atomicWrite.js +7 -0
  138. package/dist/utils/atomicWrite.js.map +1 -0
  139. package/dist/utils/authServer.d.ts +18 -0
  140. package/dist/utils/authServer.d.ts.map +1 -0
  141. package/dist/utils/authServer.js +215 -0
  142. package/dist/utils/authServer.js.map +1 -0
  143. package/dist/utils/config.d.ts +31 -0
  144. package/dist/utils/config.d.ts.map +1 -0
  145. package/dist/utils/config.js +113 -0
  146. package/dist/utils/config.js.map +1 -0
  147. package/dist/utils/env.d.ts +7 -0
  148. package/dist/utils/env.d.ts.map +1 -0
  149. package/dist/utils/env.js +19 -0
  150. package/dist/utils/env.js.map +1 -0
  151. package/dist/utils/errors.d.ts +6 -0
  152. package/dist/utils/errors.d.ts.map +1 -0
  153. package/dist/utils/errors.js +112 -0
  154. package/dist/utils/errors.js.map +1 -0
  155. package/dist/utils/formatter.d.ts +2 -0
  156. package/dist/utils/formatter.d.ts.map +1 -0
  157. package/dist/utils/formatter.js +55 -0
  158. package/dist/utils/formatter.js.map +1 -0
  159. package/dist/utils/git.d.ts +21 -0
  160. package/dist/utils/git.d.ts.map +1 -0
  161. package/dist/utils/git.js +44 -0
  162. package/dist/utils/git.js.map +1 -0
  163. package/dist/utils/httpClient.d.ts +3 -0
  164. package/dist/utils/httpClient.d.ts.map +1 -0
  165. package/dist/utils/httpClient.js +45 -0
  166. package/dist/utils/httpClient.js.map +1 -0
  167. package/dist/utils/httpHeaders.d.ts +3 -0
  168. package/dist/utils/httpHeaders.d.ts.map +1 -0
  169. package/dist/utils/httpHeaders.js +11 -0
  170. package/dist/utils/httpHeaders.js.map +1 -0
  171. package/dist/utils/initOutput.d.ts +3 -0
  172. package/dist/utils/initOutput.d.ts.map +1 -0
  173. package/dist/utils/initOutput.js +45 -0
  174. package/dist/utils/initOutput.js.map +1 -0
  175. package/dist/utils/legacyCompat.d.ts +3 -0
  176. package/dist/utils/legacyCompat.d.ts.map +1 -0
  177. package/dist/utils/legacyCompat.js +20 -0
  178. package/dist/utils/legacyCompat.js.map +1 -0
  179. package/dist/utils/outputPolicy.d.ts +12 -0
  180. package/dist/utils/outputPolicy.d.ts.map +1 -0
  181. package/dist/utils/outputPolicy.js +171 -0
  182. package/dist/utils/outputPolicy.js.map +1 -0
  183. package/dist/utils/parsers.d.ts +14 -0
  184. package/dist/utils/parsers.d.ts.map +1 -0
  185. package/dist/utils/parsers.js +78 -0
  186. package/dist/utils/parsers.js.map +1 -0
  187. package/dist/utils/planFormat.d.ts +17 -0
  188. package/dist/utils/planFormat.d.ts.map +1 -0
  189. package/dist/utils/planFormat.js +81 -0
  190. package/dist/utils/planFormat.js.map +1 -0
  191. package/dist/utils/spinner.d.ts +6 -0
  192. package/dist/utils/spinner.d.ts.map +1 -0
  193. package/dist/utils/spinner.js +34 -0
  194. package/dist/utils/spinner.js.map +1 -0
  195. package/dist/utils/updateCheck.d.ts +19 -0
  196. package/dist/utils/updateCheck.d.ts.map +1 -0
  197. package/dist/utils/updateCheck.js +103 -0
  198. package/dist/utils/updateCheck.js.map +1 -0
  199. package/package.json +55 -0
  200. package/rlarua-agentteams-cli-0.1.8.tgz +0 -0
@@ -0,0 +1,113 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
2
+ import { join, dirname, resolve } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const CONFIG_DIR = ".agentteams";
5
+ const CONFIG_FILE = "config.json";
6
+ function readConfigFile(filePath) {
7
+ try {
8
+ if (!existsSync(filePath))
9
+ return null;
10
+ const raw = readFileSync(filePath, "utf-8");
11
+ return JSON.parse(raw);
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ /**
18
+ * Load config values from environment variables.
19
+ * Only includes fields that have corresponding env vars set.
20
+ *
21
+ * Mapping:
22
+ * AGENTTEAMS_API_KEY → apiKey
23
+ * AGENTTEAMS_API_URL → apiUrl
24
+ * AGENTTEAMS_TEAM_ID → teamId
25
+ * AGENTTEAMS_PROJECT_ID → projectId
26
+ * AGENTTEAMS_AGENT_NAME → agentName
27
+ */
28
+ function loadEnvConfig() {
29
+ const env = {};
30
+ if (process.env.AGENTTEAMS_API_KEY)
31
+ env.apiKey = process.env.AGENTTEAMS_API_KEY;
32
+ if (process.env.AGENTTEAMS_API_URL)
33
+ env.apiUrl = process.env.AGENTTEAMS_API_URL;
34
+ if (process.env.AGENTTEAMS_TEAM_ID)
35
+ env.teamId = process.env.AGENTTEAMS_TEAM_ID;
36
+ if (process.env.AGENTTEAMS_PROJECT_ID)
37
+ env.projectId = process.env.AGENTTEAMS_PROJECT_ID;
38
+ if (process.env.AGENTTEAMS_AGENT_NAME)
39
+ env.agentName = process.env.AGENTTEAMS_AGENT_NAME;
40
+ return env;
41
+ }
42
+ /**
43
+ * Find the nearest .agentteams/config.json by walking up from startDir to root.
44
+ *
45
+ * @param startDir - Directory to start searching from
46
+ * @returns Absolute path to config.json, or null if not found
47
+ */
48
+ export function findProjectConfig(startDir) {
49
+ let current = resolve(startDir);
50
+ while (true) {
51
+ const candidate = join(current, CONFIG_DIR, CONFIG_FILE);
52
+ if (existsSync(candidate))
53
+ return candidate;
54
+ const parent = dirname(current);
55
+ if (parent === current)
56
+ break; // reached filesystem root
57
+ current = parent;
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Load configuration with priority-based merging.
63
+ *
64
+ * Priority (highest → lowest):
65
+ * 1. CLI options (passed as argument)
66
+ * 2. Environment variables (AGENTTEAMS_*)
67
+ * 3. Project config (.agentteams/config.json in nearest ancestor)
68
+ * 4. Global config (~/.agentteams/config.json)
69
+ *
70
+ * @param options - CLI argument overrides (highest priority)
71
+ * @returns Merged Config if all required fields are present, otherwise null
72
+ */
73
+ export function loadConfig(options) {
74
+ const globalPath = join(homedir(), CONFIG_DIR, CONFIG_FILE);
75
+ const globalConfig = readConfigFile(globalPath) ?? {};
76
+ const projectPath = findProjectConfig(process.cwd());
77
+ const projectConfig = projectPath ? (readConfigFile(projectPath) ?? {}) : {};
78
+ const envConfig = loadEnvConfig();
79
+ const cliOptions = options ?? {};
80
+ const merged = {
81
+ ...globalConfig,
82
+ ...projectConfig,
83
+ ...envConfig,
84
+ ...cliOptions,
85
+ };
86
+ const requiredFields = [
87
+ "teamId",
88
+ "projectId",
89
+ "agentName",
90
+ "apiKey",
91
+ "apiUrl",
92
+ ];
93
+ const hasAllFields = requiredFields.every((field) => typeof merged[field] === "string" && merged[field].length > 0);
94
+ if (!hasAllFields)
95
+ return null;
96
+ return merged;
97
+ }
98
+ /**
99
+ * Save configuration to a JSON file.
100
+ * Creates parent directories if they don't exist.
101
+ *
102
+ * @param configPath - Absolute path to write the config file
103
+ * @param config - Configuration object to persist
104
+ * @throws Error if write fails
105
+ */
106
+ export function saveConfig(configPath, config) {
107
+ const dir = dirname(configPath);
108
+ if (!existsSync(dir)) {
109
+ mkdirSync(dir, { recursive: true });
110
+ }
111
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
112
+ }
113
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function validateEnv(): void;
2
+ export declare function normalizeUrl(url: string): string;
3
+ export declare function getApiConfig(): {
4
+ apiKey: string;
5
+ apiUrl: string;
6
+ };
7
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY;;;EAO3B"}
@@ -0,0 +1,19 @@
1
+ export function validateEnv() {
2
+ if (!process.env.AGENTTEAMS_API_KEY) {
3
+ throw new Error('AGENTTEAMS_API_KEY environment variable is required');
4
+ }
5
+ if (!process.env.AGENTTEAMS_API_URL) {
6
+ throw new Error('AGENTTEAMS_API_URL environment variable is required');
7
+ }
8
+ }
9
+ export function normalizeUrl(url) {
10
+ return url.endsWith('/') ? url.slice(0, -1) : url;
11
+ }
12
+ export function getApiConfig() {
13
+ validateEnv();
14
+ return {
15
+ apiKey: process.env.AGENTTEAMS_API_KEY,
16
+ apiUrl: normalizeUrl(process.env.AGENTTEAMS_API_URL),
17
+ };
18
+ }
19
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,WAAW,EAAE,CAAC;IAEd,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAmB;QACvC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAmB,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type ErrorContext = {
2
+ apiUrl?: string;
3
+ };
4
+ export declare function attachErrorContext(error: unknown, context: ErrorContext): unknown;
5
+ export declare function handleError(error: unknown, context?: ErrorContext): string;
6
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAsCF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAYjF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CA8E1E"}
@@ -0,0 +1,112 @@
1
+ import { isAxiosError } from 'axios';
2
+ function translateServerMessage(message) {
3
+ const mapping = [
4
+ { match: '컨벤션 수정 권한이 없습니다', translated: "You don't have permission to modify conventions." },
5
+ { match: '프로젝트 접근 권한이 없습니다', translated: "You don't have permission to access this project." },
6
+ { match: '인증 토큰이 필요합니다', translated: 'Authentication token is required.' },
7
+ { match: 'projectId 파라미터가 필요합니다', translated: 'projectId parameter is required.' },
8
+ ];
9
+ for (const item of mapping) {
10
+ if (message.includes(item.match)) {
11
+ return item.translated;
12
+ }
13
+ }
14
+ return message;
15
+ }
16
+ function getErrorContext(error, context) {
17
+ if (context) {
18
+ return context;
19
+ }
20
+ if (error && typeof error === 'object' && 'agentteamsContext' in error) {
21
+ const candidate = error.agentteamsContext;
22
+ if (candidate && typeof candidate === 'object') {
23
+ return candidate;
24
+ }
25
+ }
26
+ return undefined;
27
+ }
28
+ export function attachErrorContext(error, context) {
29
+ if (!error || typeof error !== 'object') {
30
+ return error;
31
+ }
32
+ const nextContext = {
33
+ ...(error.agentteamsContext ?? {}),
34
+ ...context,
35
+ };
36
+ error.agentteamsContext = nextContext;
37
+ return error;
38
+ }
39
+ export function handleError(error, context) {
40
+ const resolvedContext = getErrorContext(error, context);
41
+ if (isAxiosError(error)) {
42
+ if (error.response) {
43
+ const status = error.response.status;
44
+ const data = error.response.data;
45
+ const rawMessage = typeof data?.message === 'string' ? data.message : error.message;
46
+ const message = typeof rawMessage === 'string' ? translateServerMessage(rawMessage) : String(rawMessage);
47
+ const errorCode = typeof data?.errorCode === 'string' ? data.errorCode : undefined;
48
+ switch (status) {
49
+ case 400:
50
+ if (errorCode === 'VALIDATION_ERROR') {
51
+ return `Bad request (validation).
52
+ Next: Verify required options (e.g., --id/--plan-id) and request parameters.
53
+ Details: ${message}`;
54
+ }
55
+ return `Bad request. Check your flags and payload.\nNext: Verify required options (e.g., --id/--plan-id) and try again.\nDetails: ${message}`;
56
+ case 401:
57
+ if (errorCode === 'AUTH_REQUIRED') {
58
+ return `Authentication required.
59
+ Next: Verify your AGENTTEAMS_API_KEY and ensure credentials are configured.
60
+ Details: ${message}`;
61
+ }
62
+ return `Invalid API key. Please check your AGENTTEAMS_API_KEY environment variable.\nNext: Re-run 'agentteams init' or set AGENTTEAMS_API_KEY.\nDetails: ${message}`;
63
+ case 403:
64
+ if (errorCode === 'CROSS_PROJECT_ACCESS_DENIED') {
65
+ return `Cross-project access denied. You don't have permission to access this resource.
66
+ Next: Confirm you're using an API key for the same project/team.
67
+ Details: ${message}`;
68
+ }
69
+ if (errorCode === 'CONVENTION_WRITE_FORBIDDEN') {
70
+ return `Forbidden.
71
+ Next: Convention write operations require proper project/team permissions.
72
+ Details: ${message}`;
73
+ }
74
+ if (errorCode === 'PROJECT_ACCESS_FORBIDDEN') {
75
+ return `Forbidden.
76
+ Next: Confirm your API key has access to the target project.
77
+ Details: ${message}`;
78
+ }
79
+ if (typeof message === 'string' && message.toLowerCase().includes('cross-project')) {
80
+ return `Cross-project access denied. You don't have permission to access this resource.\nNext: Confirm you're using an API key for the same project/team.\nDetails: ${message}`;
81
+ }
82
+ return `Forbidden.\nNext: Confirm your API key permissions for this project/team.\nDetails: ${message}`;
83
+ case 404:
84
+ return `Resource not found.\nNext: Check identifiers (e.g., --id) and the target project.\nDetails: ${message}`;
85
+ case 409:
86
+ if (errorCode === 'OPTIMISTIC_LOCK_CONFLICT') {
87
+ return `Conflict (stale update).
88
+ Next: Run 'agentteams convention download' and retry with the latest updatedAt.
89
+ Details: ${message}`;
90
+ }
91
+ return `Conflict.\nNext: If this is a convention update/delete, run 'agentteams convention download' and retry.\nDetails: ${message}`;
92
+ case 500:
93
+ return `Server error occurred. Please try again later.\nNext: Retry later. If it persists, check server status/logs.\nDetails: ${message}`;
94
+ default:
95
+ return `HTTP ${status} error: ${message}`;
96
+ }
97
+ }
98
+ if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
99
+ const apiUrl = resolvedContext?.apiUrl ?? process.env.AGENTTEAMS_API_URL;
100
+ if (typeof apiUrl === 'string' && apiUrl.length > 0) {
101
+ return `Cannot connect to server at ${apiUrl}.\nNext: Check network connectivity and firewall settings.`;
102
+ }
103
+ return "Cannot connect to server (API URL not configured).\nNext: Run 'agentteams init' or set AGENTTEAMS_API_URL.";
104
+ }
105
+ return `Network error: ${error.message}`;
106
+ }
107
+ if (error instanceof Error) {
108
+ return error.message;
109
+ }
110
+ return String(error);
111
+ }
112
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function formatOutput(data: any, format: 'json' | 'text'): string;
2
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAMvE"}
@@ -0,0 +1,55 @@
1
+ export function formatOutput(data, format) {
2
+ if (format === 'json') {
3
+ return JSON.stringify(data, null, 2);
4
+ }
5
+ return formatText(data);
6
+ }
7
+ function formatText(data) {
8
+ if (Array.isArray(data)) {
9
+ return data.map((item) => formatObject(item)).join('\n\n');
10
+ }
11
+ if (data.data) {
12
+ if (Array.isArray(data.data)) {
13
+ return data.data.map((item) => formatObject(item)).join('\n\n');
14
+ }
15
+ return formatObject(data.data);
16
+ }
17
+ return formatObject(data);
18
+ }
19
+ function formatObject(obj) {
20
+ if (typeof obj !== 'object' || obj === null) {
21
+ return String(obj);
22
+ }
23
+ const lines = [];
24
+ const preferredOrder = ['id', 'title', 'status', 'type', 'priority', 'updatedAt', 'createdAt'];
25
+ const entries = Object.entries(obj).sort(([a], [b]) => {
26
+ const leftPriority = preferredOrder.indexOf(a);
27
+ const rightPriority = preferredOrder.indexOf(b);
28
+ const leftRank = leftPriority === -1 ? Number.MAX_SAFE_INTEGER : leftPriority;
29
+ const rightRank = rightPriority === -1 ? Number.MAX_SAFE_INTEGER : rightPriority;
30
+ if (leftRank !== rightRank)
31
+ return leftRank - rightRank;
32
+ return a.localeCompare(b);
33
+ });
34
+ for (const [key, value] of entries) {
35
+ if (value === null || value === undefined) {
36
+ continue;
37
+ }
38
+ if (typeof value === 'object' && !Array.isArray(value)) {
39
+ lines.push(`${key}:`);
40
+ const nested = formatObject(value);
41
+ lines.push(nested
42
+ .split('\n')
43
+ .map((line) => ` ${line}`)
44
+ .join('\n'));
45
+ }
46
+ else if (Array.isArray(value)) {
47
+ lines.push(`${key}: ${value.join(', ')}`);
48
+ }
49
+ else {
50
+ lines.push(`${key}: ${value}`);
51
+ }
52
+ }
53
+ return lines.join('\n');
54
+ }
55
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface GitMetrics {
2
+ commitHash?: string;
3
+ commitStart?: string;
4
+ commitEnd?: string;
5
+ branchName?: string;
6
+ pullRequestId?: string;
7
+ durationSeconds?: number;
8
+ filesModified?: number;
9
+ linesAdded?: number;
10
+ linesDeleted?: number;
11
+ qualityScore?: number;
12
+ }
13
+ type ExecFileSyncFn = (file: string, args: readonly string[], options: {
14
+ encoding: 'utf8';
15
+ stdio: ['ignore', 'pipe', 'ignore'];
16
+ }) => string;
17
+ export declare function collectGitMetrics(execFileSyncImpl?: ExecFileSyncFn, options?: {
18
+ startCommit?: string;
19
+ }): GitMetrics;
20
+ export {};
21
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,cAAc,GAAG,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;CAAE,KAC/D,MAAM,CAAC;AAEZ,wBAAgB,iBAAiB,CAC/B,gBAAgB,GAAE,cAA0C,EAC5D,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,UAAU,CAkBZ"}
@@ -0,0 +1,44 @@
1
+ import * as childProcess from 'node:child_process';
2
+ export function collectGitMetrics(execFileSyncImpl = childProcess.execFileSync, options) {
3
+ const commitHash = runGit(execFileSyncImpl, ['rev-parse', 'HEAD']);
4
+ const branchRaw = runGit(execFileSyncImpl, ['branch', '--show-current']);
5
+ const diffRef = options?.startCommit
6
+ ? `${options.startCommit}..HEAD`
7
+ : 'HEAD~1';
8
+ const shortStat = runGit(execFileSyncImpl, ['diff', '--shortstat', diffRef]);
9
+ const parsed = parseShortStat(shortStat);
10
+ return {
11
+ commitHash,
12
+ branchName: branchRaw && branchRaw.length > 0 ? branchRaw : undefined,
13
+ filesModified: parsed.filesModified,
14
+ linesAdded: parsed.linesAdded,
15
+ linesDeleted: parsed.linesDeleted,
16
+ };
17
+ }
18
+ function runGit(execFileSyncImpl, args) {
19
+ try {
20
+ const output = execFileSyncImpl('git', args, {
21
+ encoding: 'utf8',
22
+ stdio: ['ignore', 'pipe', 'ignore'],
23
+ });
24
+ const trimmed = output.trim();
25
+ return trimmed.length > 0 ? trimmed : undefined;
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ function parseShortStat(shortStat) {
32
+ if (!shortStat) {
33
+ return {};
34
+ }
35
+ const filesMatch = shortStat.match(/(\d+)\s+files?\s+changed/);
36
+ const addedMatch = shortStat.match(/(\d+)\s+insertions?\(\+\)/);
37
+ const deletedMatch = shortStat.match(/(\d+)\s+deletions?\(-\)/);
38
+ return {
39
+ filesModified: filesMatch ? Number.parseInt(filesMatch[1], 10) : undefined,
40
+ linesAdded: addedMatch ? Number.parseInt(addedMatch[1], 10) : undefined,
41
+ linesDeleted: deletedMatch ? Number.parseInt(deletedMatch[1], 10) : undefined,
42
+ };
43
+ }
44
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAqBnD,MAAM,UAAU,iBAAiB,CAC/B,mBAAmC,YAAY,CAAC,YAAY,EAC5D,OAAkC;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW;QAClC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,QAAQ;QAChC,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEzC,OAAO;QACL,UAAU;QACV,UAAU,EAAE,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACrE,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,gBAAgC,EAAE,IAAc;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE;YAC3C,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,SAA6B;IAKnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEhE,OAAO;QACL,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1E,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import axios from "axios";
2
+ export default axios;
3
+ //# sourceMappingURL=httpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/utils/httpClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAiE1B,eAAe,KAAK,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { createRequire } from "node:module";
2
+ import axios from "axios";
3
+ import { writeCache } from "./updateCheck.js";
4
+ const require = createRequire(import.meta.url);
5
+ const pkg = require("../../package.json");
6
+ const MAX_RETRIES = 3;
7
+ const BASE_DELAY_MS = 1_000;
8
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
9
+ const getRetryDelay = (error, attempt) => {
10
+ const retryAfterHeader = error.response?.headers?.["retry-after"];
11
+ if (retryAfterHeader) {
12
+ const seconds = Number(retryAfterHeader);
13
+ if (!Number.isNaN(seconds) && seconds > 0) {
14
+ return seconds * 1_000;
15
+ }
16
+ }
17
+ const body = error.response?.data;
18
+ if (body?.retryAfter && body.retryAfter > 0) {
19
+ return body.retryAfter * 1_000;
20
+ }
21
+ return BASE_DELAY_MS * 2 ** attempt;
22
+ };
23
+ axios.defaults.headers.common["X-CLI-Version"] = pkg.version;
24
+ axios.interceptors.response.use((response) => {
25
+ const latestVersion = response.headers["x-cli-latest-version"];
26
+ if (latestVersion) {
27
+ writeCache({ lastCheck: Date.now(), latestVersion });
28
+ }
29
+ return response;
30
+ }, async (error) => {
31
+ const config = error.config;
32
+ if (!config || error.response?.status !== 429) {
33
+ throw error;
34
+ }
35
+ const retryCount = config._retryCount ?? 0;
36
+ if (retryCount >= MAX_RETRIES) {
37
+ throw error;
38
+ }
39
+ config._retryCount = retryCount + 1;
40
+ const delay = getRetryDelay(error, retryCount);
41
+ await sleep(delay);
42
+ return axios.request(config);
43
+ });
44
+ export default axios;
45
+ //# sourceMappingURL=httpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/utils/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,aAAa,GAAG,KAAK,CAAC;AAM5B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC1C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,OAAe,EAAU,EAAE;IACnE,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;IAClE,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAA2C,CAAC;IACzE,IAAI,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,OAAO,aAAa,GAAG,CAAC,IAAI,OAAO,CAAC;AACtC,CAAC,CAAC;AAEF,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;AAE7D,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC7B,CAAC,QAAuB,EAAE,EAAE;IAC1B,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAuB,CAAC;IACrF,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,EACD,KAAK,EAAE,KAAiB,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC,CAAC;IAEvD,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAE3C,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type HttpHeaders = Record<string, string>;
2
+ export declare function withoutJsonContentType(headers: HttpHeaders): HttpHeaders;
3
+ //# sourceMappingURL=httpHeaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHeaders.d.ts","sourceRoot":"","sources":["../../src/utils/httpHeaders.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAWxE"}
@@ -0,0 +1,11 @@
1
+ export function withoutJsonContentType(headers) {
2
+ const sanitized = {};
3
+ for (const [key, value] of Object.entries(headers)) {
4
+ if (key.toLowerCase() === 'content-type') {
5
+ continue;
6
+ }
7
+ sanitized[key] = value;
8
+ }
9
+ return sanitized;
10
+ }
11
+ //# sourceMappingURL=httpHeaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHeaders.js","sourceRoot":"","sources":["../../src/utils/httpHeaders.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,OAAoB;IACzD,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OutputFormat } from './outputPolicy.js';
2
+ export declare function printInitResult(result: unknown, format: OutputFormat): void;
3
+ //# sourceMappingURL=initOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initOutput.d.ts","sourceRoot":"","sources":["../../src/utils/initOutput.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsBtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAqC3E"}
@@ -0,0 +1,45 @@
1
+ import chalk from 'chalk';
2
+ import { formatOutput } from './formatter.js';
3
+ function isInitResult(result) {
4
+ if (!result || typeof result !== 'object')
5
+ return false;
6
+ const r = result;
7
+ return (r.success === true &&
8
+ typeof r.agentName === 'string' &&
9
+ typeof r.configPath === 'string' &&
10
+ typeof r.conventionPath === 'string');
11
+ }
12
+ export function printInitResult(result, format) {
13
+ if (format === 'json') {
14
+ const outputText = typeof result === 'string' ? result : formatOutput(result, format);
15
+ console.log(outputText);
16
+ return;
17
+ }
18
+ if (!isInitResult(result)) {
19
+ const outputText = typeof result === 'string' ? result : formatOutput(result, format);
20
+ console.log(outputText);
21
+ return;
22
+ }
23
+ console.log(`✓ Authenticated as ${result.agentName}`);
24
+ console.log(`✓ Config saved: ${result.configPath}`);
25
+ console.log(`✓ Convention saved: ${result.conventionPath}`);
26
+ console.log(`✓ Conventions synced to .agentteams/`);
27
+ if (result.agentFiles && result.agentFiles.length > 0) {
28
+ for (const file of result.agentFiles) {
29
+ if (file.type === 'created') {
30
+ console.log(`✓ Agent file created: ${file.relativePath}`);
31
+ }
32
+ else {
33
+ console.log(`✓ Example file created: ${file.relativePath}`);
34
+ }
35
+ }
36
+ }
37
+ console.log('');
38
+ console.log('Next steps:');
39
+ console.log(' 1. Check the generated agent files (CLAUDE.md, AGENTS.md, etc.)');
40
+ console.log(' If a -example file was created, merge it into your existing file.');
41
+ console.log(' 2. Try saying to your AI agent:');
42
+ console.log(chalk.cyan(' Analyze the codebase and create conventions.'));
43
+ console.log(chalk.cyan(' Create a plan to improve test coverage for this project.'));
44
+ }
45
+ //# sourceMappingURL=initOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initOutput.js","sourceRoot":"","sources":["../../src/utils/initOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C,SAAS,YAAY,CAAC,MAAe;IACnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,OAAO,CACL,CAAC,CAAC,OAAO,KAAK,IAAI;QAClB,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,MAAoB;IACnE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,UAAU,GACd,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GACd,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function isCreatedByRequiredValidationError(error: unknown): boolean;
2
+ export declare function resolveLegacyCreatedBy(options: any): string | undefined;
3
+ //# sourceMappingURL=legacyCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyCompat.d.ts","sourceRoot":"","sources":["../../src/utils/legacyCompat.ts"],"names":[],"mappings":"AAGA,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiB1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAIvE"}
@@ -0,0 +1,20 @@
1
+ import axios from 'axios';
2
+ import { toNonEmptyString } from './parsers.js';
3
+ export function isCreatedByRequiredValidationError(error) {
4
+ if (!axios.isAxiosError(error)) {
5
+ return false;
6
+ }
7
+ const data = error.response?.data;
8
+ const message = typeof data === 'string'
9
+ ? data
10
+ : [data?.message, data?.details, data?.error]
11
+ .filter((value) => typeof value === 'string')
12
+ .join(' ');
13
+ return /required property ['"]createdBy['"]|body\.createdBy/i.test(message);
14
+ }
15
+ export function resolveLegacyCreatedBy(options) {
16
+ return toNonEmptyString(options.createdBy)
17
+ ?? toNonEmptyString(options.defaultCreatedBy)
18
+ ?? undefined;
19
+ }
20
+ //# sourceMappingURL=legacyCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyCompat.js","sourceRoot":"","sources":["../../src/utils/legacyCompat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,kCAAkC,CAAC,KAAc;IAC/D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAGhB,CAAC;IAEd,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ;QACtC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;aAC1C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;aAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IAEf,OAAO,sDAAsD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAY;IACjD,OAAO,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;WACrC,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC;WAC1C,SAAS,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type OutputFormat = 'json' | 'text';
2
+ export interface OutputPolicyContext {
3
+ resource?: string;
4
+ action?: string;
5
+ format: OutputFormat;
6
+ formatExplicit?: boolean;
7
+ outputFile?: string;
8
+ verbose?: boolean;
9
+ }
10
+ export declare function shouldPrintSummary(context: OutputPolicyContext): boolean;
11
+ export declare function createSummaryLines(result: unknown, context: Pick<OutputPolicyContext, 'resource' | 'action'>): string[];
12
+ //# sourceMappingURL=outputPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputPolicy.d.ts","sourceRoot":"","sources":["../../src/utils/outputPolicy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAgBxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,QAAQ,CAAC,GAAG,MAAM,EAAE,CA0CvH"}