@rlarua/agentteams-cli 0.0.9 → 0.0.11

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 (118) hide show
  1. package/API-CLI-WORKFLOW.md +418 -0
  2. package/LICENSE +201 -0
  3. package/README.md +220 -128
  4. package/dist/api/comment.d.ts +11 -0
  5. package/dist/api/comment.d.ts.map +1 -0
  6. package/dist/api/comment.js +33 -0
  7. package/dist/api/comment.js.map +1 -0
  8. package/dist/api/plan.d.ts +13 -0
  9. package/dist/api/plan.d.ts.map +1 -0
  10. package/dist/api/plan.js +43 -0
  11. package/dist/api/plan.js.map +1 -0
  12. package/dist/api/postmortem.d.ts +6 -0
  13. package/dist/api/postmortem.d.ts.map +1 -0
  14. package/dist/api/postmortem.js +33 -0
  15. package/dist/api/postmortem.js.map +1 -0
  16. package/dist/api/report.d.ts +6 -0
  17. package/dist/api/report.d.ts.map +1 -0
  18. package/dist/api/report.js +33 -0
  19. package/dist/api/report.js.map +1 -0
  20. package/dist/api/status.d.ts +12 -0
  21. package/dist/api/status.d.ts.map +1 -0
  22. package/dist/api/status.js +33 -0
  23. package/dist/api/status.js.map +1 -0
  24. package/dist/commands/agentConfig.d.ts.map +1 -1
  25. package/dist/commands/agentConfig.js +10 -3
  26. package/dist/commands/agentConfig.js.map +1 -1
  27. package/dist/commands/agentConfigCommand.d.ts +2 -0
  28. package/dist/commands/agentConfigCommand.d.ts.map +1 -0
  29. package/dist/commands/agentConfigCommand.js +20 -0
  30. package/dist/commands/agentConfigCommand.js.map +1 -0
  31. package/dist/commands/comment.d.ts +2 -0
  32. package/dist/commands/comment.d.ts.map +1 -0
  33. package/dist/commands/comment.js +55 -0
  34. package/dist/commands/comment.js.map +1 -0
  35. package/dist/commands/config.d.ts +2 -0
  36. package/dist/commands/config.d.ts.map +1 -0
  37. package/dist/commands/config.js +30 -0
  38. package/dist/commands/config.js.map +1 -0
  39. package/dist/commands/convention.d.ts +25 -0
  40. package/dist/commands/convention.d.ts.map +1 -1
  41. package/dist/commands/convention.js +492 -43
  42. package/dist/commands/convention.js.map +1 -1
  43. package/dist/commands/conventionRouter.d.ts +3 -0
  44. package/dist/commands/conventionRouter.d.ts.map +1 -0
  45. package/dist/commands/conventionRouter.js +46 -0
  46. package/dist/commands/conventionRouter.js.map +1 -0
  47. package/dist/commands/dependency.d.ts.map +1 -1
  48. package/dist/commands/dependency.js +2 -1
  49. package/dist/commands/dependency.js.map +1 -1
  50. package/dist/commands/dependencyCommand.d.ts +2 -0
  51. package/dist/commands/dependencyCommand.d.ts.map +1 -0
  52. package/dist/commands/dependencyCommand.js +27 -0
  53. package/dist/commands/dependencyCommand.js.map +1 -0
  54. package/dist/commands/index.d.ts.map +1 -1
  55. package/dist/commands/index.js +13 -485
  56. package/dist/commands/index.js.map +1 -1
  57. package/dist/commands/init.d.ts.map +1 -1
  58. package/dist/commands/init.js +3 -2
  59. package/dist/commands/init.js.map +1 -1
  60. package/dist/commands/plan.d.ts +11 -0
  61. package/dist/commands/plan.d.ts.map +1 -0
  62. package/dist/commands/plan.js +370 -0
  63. package/dist/commands/plan.js.map +1 -0
  64. package/dist/commands/postmortem.d.ts +2 -0
  65. package/dist/commands/postmortem.d.ts.map +1 -0
  66. package/dist/commands/postmortem.js +114 -0
  67. package/dist/commands/postmortem.js.map +1 -0
  68. package/dist/commands/report.d.ts +2 -0
  69. package/dist/commands/report.d.ts.map +1 -0
  70. package/dist/commands/report.js +221 -0
  71. package/dist/commands/report.js.map +1 -0
  72. package/dist/commands/status.d.ts +2 -0
  73. package/dist/commands/status.d.ts.map +1 -0
  74. package/dist/commands/status.js +60 -0
  75. package/dist/commands/status.js.map +1 -0
  76. package/dist/index.js +214 -34
  77. package/dist/index.js.map +1 -1
  78. package/dist/types/index.d.ts +11 -6
  79. package/dist/types/index.d.ts.map +1 -1
  80. package/dist/utils/errors.d.ts.map +1 -1
  81. package/dist/utils/errors.js +60 -6
  82. package/dist/utils/errors.js.map +1 -1
  83. package/dist/utils/formatter.js +11 -1
  84. package/dist/utils/formatter.js.map +1 -1
  85. package/dist/utils/git.d.ts +19 -0
  86. package/dist/utils/git.d.ts.map +1 -0
  87. package/dist/utils/git.js +41 -0
  88. package/dist/utils/git.js.map +1 -0
  89. package/dist/utils/httpHeaders.d.ts +3 -0
  90. package/dist/utils/httpHeaders.d.ts.map +1 -0
  91. package/dist/utils/httpHeaders.js +11 -0
  92. package/dist/utils/httpHeaders.js.map +1 -0
  93. package/dist/utils/initOutput.d.ts +3 -0
  94. package/dist/utils/initOutput.d.ts.map +1 -0
  95. package/dist/utils/initOutput.js +34 -0
  96. package/dist/utils/initOutput.js.map +1 -0
  97. package/dist/utils/legacyCompat.d.ts +3 -0
  98. package/dist/utils/legacyCompat.d.ts.map +1 -0
  99. package/dist/utils/legacyCompat.js +20 -0
  100. package/dist/utils/legacyCompat.js.map +1 -0
  101. package/dist/utils/outputPolicy.d.ts +12 -0
  102. package/dist/utils/outputPolicy.d.ts.map +1 -0
  103. package/dist/utils/outputPolicy.js +132 -0
  104. package/dist/utils/outputPolicy.js.map +1 -0
  105. package/dist/utils/parsers.d.ts +7 -0
  106. package/dist/utils/parsers.d.ts.map +1 -0
  107. package/dist/utils/parsers.js +52 -0
  108. package/dist/utils/parsers.js.map +1 -0
  109. package/dist/utils/planFormat.d.ts +17 -0
  110. package/dist/utils/planFormat.d.ts.map +1 -0
  111. package/dist/utils/planFormat.js +80 -0
  112. package/dist/utils/planFormat.js.map +1 -0
  113. package/dist/utils/spinner.d.ts +6 -0
  114. package/dist/utils/spinner.d.ts.map +1 -0
  115. package/dist/utils/spinner.js +34 -0
  116. package/dist/utils/spinner.js.map +1 -0
  117. package/package.json +8 -3
  118. package/DEVELOPMENT.md +0 -234
@@ -1,24 +1,78 @@
1
+ function translateServerMessage(message) {
2
+ const mapping = [
3
+ { match: '컨벤션 수정 권한이 없습니다', translated: "You don't have permission to modify conventions." },
4
+ { match: '프로젝트 접근 권한이 없습니다', translated: "You don't have permission to access this project." },
5
+ { match: '인증 토큰이 필요합니다', translated: 'Authentication token is required.' },
6
+ { match: 'projectId 파라미터가 필요합니다', translated: 'projectId parameter is required.' },
7
+ ];
8
+ for (const item of mapping) {
9
+ if (message.includes(item.match)) {
10
+ return item.translated;
11
+ }
12
+ }
13
+ return message;
14
+ }
1
15
  export function handleError(error) {
2
16
  if (isAxiosError(error)) {
3
17
  if (error.response) {
4
18
  const status = error.response.status;
5
19
  const data = error.response.data;
6
- const message = data?.message || error.message;
20
+ const rawMessage = typeof data?.message === 'string' ? data.message : error.message;
21
+ const message = typeof rawMessage === 'string' ? translateServerMessage(rawMessage) : String(rawMessage);
22
+ const errorCode = typeof data?.errorCode === 'string' ? data.errorCode : undefined;
7
23
  switch (status) {
24
+ case 400:
25
+ if (errorCode === 'VALIDATION_ERROR') {
26
+ return `Bad request (validation).
27
+ Next: Verify required options (e.g., --id/--plan-id) and request parameters.
28
+ Details: ${message}`;
29
+ }
30
+ return `Bad request. Check your flags and payload.\nNext: Verify required options (e.g., --id/--plan-id) and try again.\nDetails: ${message}`;
8
31
  case 401:
9
- return `Invalid API key. Please check your AGENTTEAMS_API_KEY environment variable.\nDetails: ${message}`;
32
+ if (errorCode === 'AUTH_REQUIRED') {
33
+ return `Authentication required.
34
+ Next: Verify your AGENTTEAMS_API_KEY and ensure credentials are configured.
35
+ Details: ${message}`;
36
+ }
37
+ return `Invalid API key. Please check your AGENTTEAMS_API_KEY environment variable.\nNext: Re-run 'agentteams init' or set AGENTTEAMS_API_KEY.\nDetails: ${message}`;
10
38
  case 403:
11
- return `Cross-project access denied. You don't have permission to access this resource.\nDetails: ${message}`;
39
+ if (errorCode === 'CROSS_PROJECT_ACCESS_DENIED') {
40
+ return `Cross-project access denied. You don't have permission to access this resource.
41
+ Next: Confirm you're using an API key for the same project/team.
42
+ Details: ${message}`;
43
+ }
44
+ if (errorCode === 'CONVENTION_WRITE_FORBIDDEN') {
45
+ return `Forbidden.
46
+ Next: Convention write operations require proper project/team permissions.
47
+ Details: ${message}`;
48
+ }
49
+ if (errorCode === 'PROJECT_ACCESS_FORBIDDEN') {
50
+ return `Forbidden.
51
+ Next: Confirm your API key has access to the target project.
52
+ Details: ${message}`;
53
+ }
54
+ if (typeof message === 'string' && message.toLowerCase().includes('cross-project')) {
55
+ 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}`;
56
+ }
57
+ return `Forbidden.\nNext: Confirm your API key permissions for this project/team.\nDetails: ${message}`;
12
58
  case 404:
13
- return `Resource not found.\nDetails: ${message}`;
59
+ return `Resource not found.\nNext: Check identifiers (e.g., --id) and the target project.\nDetails: ${message}`;
60
+ case 409:
61
+ if (errorCode === 'OPTIMISTIC_LOCK_CONFLICT') {
62
+ return `Conflict (stale update).
63
+ Next: Run 'agentteams convention download' and retry with the latest updatedAt.
64
+ Details: ${message}`;
65
+ }
66
+ return `Conflict.\nNext: If this is a convention update/delete, run 'agentteams convention download' and retry.\nDetails: ${message}`;
14
67
  case 500:
15
- return `Server error occurred. Please try again later.\nDetails: ${message}`;
68
+ return `Server error occurred. Please try again later.\nNext: Retry later. If it persists, check server status/logs.\nDetails: ${message}`;
16
69
  default:
17
70
  return `HTTP ${status} error: ${message}`;
18
71
  }
19
72
  }
20
73
  if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
21
- return `Cannot connect to server at ${process.env.AGENTTEAMS_API_URL}. Please check if the server is running and the URL is correct.`;
74
+ const apiUrl = process.env.AGENTTEAMS_API_URL ?? '(not set)';
75
+ return `Cannot connect to server at ${apiUrl}.\nNext: Check AGENTTEAMS_API_URL and connectivity.`;
22
76
  }
23
77
  return `Network error: ${error.message}`;
24
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAwC,CAAC;YACrE,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YAE/C,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,GAAG;oBACN,OAAO,yFAAyF,OAAO,EAAE,CAAC;gBAC5G,KAAK,GAAG;oBACN,OAAO,6FAA6F,OAAO,EAAE,CAAC;gBAChH,KAAK,GAAG;oBACN,OAAO,iCAAiC,OAAO,EAAE,CAAC;gBACpD,KAAK,GAAG;oBACN,OAAO,4DAA4D,OAAO,EAAE,CAAC;gBAC/E;oBACE,OAAO,QAAQ,MAAM,WAAW,OAAO,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChE,OAAO,+BAA+B,OAAO,CAAC,GAAG,CAAC,kBAAkB,iEAAiE,CAAC;QACxI,CAAC;QAED,OAAO,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAQ,KAAoB,CAAC,YAAY,KAAK,IAAI,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,17 @@ function formatObject(obj) {
21
21
  return String(obj);
22
22
  }
23
23
  const lines = [];
24
- for (const [key, value] of Object.entries(obj)) {
24
+ const preferredOrder = ['id', 'title', 'status', '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) {
25
35
  if (value === null || value === undefined) {
26
36
  continue;
27
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAS,EAAE,MAAuB;IAC7D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,IAAS;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ;IAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CACR,MAAM;iBACH,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;iBAC1B,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
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): GitMetrics;
18
+ export {};
19
+ //# 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,CAAC,gBAAgB,GAAE,cAA0C,GAAG,UAAU,CAc1G"}
@@ -0,0 +1,41 @@
1
+ import * as childProcess from 'node:child_process';
2
+ export function collectGitMetrics(execFileSyncImpl = childProcess.execFileSync) {
3
+ const commitHash = runGit(execFileSyncImpl, ['rev-parse', 'HEAD']);
4
+ const branchRaw = runGit(execFileSyncImpl, ['branch', '--show-current']);
5
+ const shortStat = runGit(execFileSyncImpl, ['diff', '--shortstat', 'HEAD~1']);
6
+ const parsed = parseShortStat(shortStat);
7
+ return {
8
+ commitHash,
9
+ branchName: branchRaw && branchRaw.length > 0 ? branchRaw : undefined,
10
+ filesModified: parsed.filesModified,
11
+ linesAdded: parsed.linesAdded,
12
+ linesDeleted: parsed.linesDeleted,
13
+ };
14
+ }
15
+ function runGit(execFileSyncImpl, args) {
16
+ try {
17
+ const output = execFileSyncImpl('git', args, {
18
+ encoding: 'utf8',
19
+ stdio: ['ignore', 'pipe', 'ignore'],
20
+ });
21
+ const trimmed = output.trim();
22
+ return trimmed.length > 0 ? trimmed : undefined;
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ }
28
+ function parseShortStat(shortStat) {
29
+ if (!shortStat) {
30
+ return {};
31
+ }
32
+ const filesMatch = shortStat.match(/(\d+)\s+files?\s+changed/);
33
+ const addedMatch = shortStat.match(/(\d+)\s+insertions?\(\+\)/);
34
+ const deletedMatch = shortStat.match(/(\d+)\s+deletions?\(-\)/);
35
+ return {
36
+ filesModified: filesMatch ? Number.parseInt(filesMatch[1], 10) : undefined,
37
+ linesAdded: addedMatch ? Number.parseInt(addedMatch[1], 10) : undefined,
38
+ linesDeleted: deletedMatch ? Number.parseInt(deletedMatch[1], 10) : undefined,
39
+ };
40
+ }
41
+ //# 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,CAAC,mBAAmC,YAAY,CAAC,YAAY;IAC5F,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;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE9E,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
+ 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":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA0B3E"}
@@ -0,0 +1,34 @@
1
+ import { formatOutput } from './formatter.js';
2
+ function isInitResult(result) {
3
+ if (!result || typeof result !== 'object')
4
+ return false;
5
+ const r = result;
6
+ return (r.success === true &&
7
+ typeof r.agentName === 'string' &&
8
+ typeof r.configPath === 'string' &&
9
+ typeof r.conventionPath === 'string');
10
+ }
11
+ export function printInitResult(result, format) {
12
+ if (format === 'json') {
13
+ const outputText = typeof result === 'string' ? result : formatOutput(result, format);
14
+ console.log(outputText);
15
+ return;
16
+ }
17
+ if (!isInitResult(result)) {
18
+ const outputText = typeof result === 'string' ? result : formatOutput(result, format);
19
+ console.log(outputText);
20
+ return;
21
+ }
22
+ console.log(`✓ Authenticated as ${result.agentName}`);
23
+ console.log(`✓ Config saved: ${result.configPath}`);
24
+ console.log(`✓ Convention saved: ${result.conventionPath}`);
25
+ console.log(`✓ Conventions synced to .agentteams/`);
26
+ console.log('');
27
+ console.log('Next steps:');
28
+ console.log(' 1. Add .agentteams/ to .gitignore');
29
+ console.log(' 2. Link convention.md to your agent:');
30
+ console.log(' - Claude Code → CLAUDE.md');
31
+ console.log(' - opencode → AGENTS.md');
32
+ console.log(' 3. agentteams convention show');
33
+ }
34
+ //# sourceMappingURL=initOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initOutput.js","sourceRoot":"","sources":["../../src/utils/initOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C,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;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACjD,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;AAgBD,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,CAgCvH"}
@@ -0,0 +1,132 @@
1
+ const summaryDefaultActions = {
2
+ plan: new Set(['create', 'update', 'start', 'finish']),
3
+ report: new Set(['create']),
4
+ postmortem: new Set(['create']),
5
+ };
6
+ const nextActionHints = {
7
+ plan: {
8
+ create: 'Next: agentteams plan start --id <id>',
9
+ start: 'Next: agentteams plan download --id <id>',
10
+ finish: 'Next: agentteams report create --plan-id <id>',
11
+ },
12
+ };
13
+ export function shouldPrintSummary(context) {
14
+ if (context.verbose)
15
+ return false;
16
+ if (typeof context.outputFile === 'string' && context.outputFile.trim().length > 0) {
17
+ return true;
18
+ }
19
+ if (!context.resource || !context.action)
20
+ return false;
21
+ if (context.format === 'json' && context.formatExplicit) {
22
+ return false;
23
+ }
24
+ const actions = summaryDefaultActions[context.resource];
25
+ if (!actions)
26
+ return false;
27
+ return actions.has(context.action);
28
+ }
29
+ export function createSummaryLines(result, context) {
30
+ const lines = [];
31
+ const message = extractString(result, 'message');
32
+ if (message) {
33
+ lines.push(message);
34
+ }
35
+ else {
36
+ const resource = context.resource ?? 'command';
37
+ const action = context.action ?? 'run';
38
+ lines.push(`Success: ${resource} ${action}`);
39
+ }
40
+ const id = extractString(result, 'id');
41
+ const title = extractString(result, 'title');
42
+ const count = extractCount(result);
43
+ if (id && title) {
44
+ lines.push(`id: ${id}, title: ${title}`);
45
+ }
46
+ else if (id) {
47
+ lines.push(`id: ${id}`);
48
+ }
49
+ else if (title) {
50
+ lines.push(`title: ${title}`);
51
+ }
52
+ else if (typeof count === 'number') {
53
+ lines.push(`count: ${count}`);
54
+ }
55
+ const hint = resolveNextActionHint(id, result, context);
56
+ if (hint) {
57
+ lines.push(hint);
58
+ }
59
+ return lines;
60
+ }
61
+ function resolveNextActionHint(id, result, context) {
62
+ if (!context.resource || !context.action)
63
+ return undefined;
64
+ const actionMap = nextActionHints[context.resource];
65
+ if (!actionMap)
66
+ return undefined;
67
+ const template = actionMap[context.action];
68
+ if (!template)
69
+ return undefined;
70
+ const resolvedId = id ?? extractDeepId(result);
71
+ if (!resolvedId)
72
+ return undefined;
73
+ return template.replace('<id>', resolvedId);
74
+ }
75
+ function extractDeepId(result) {
76
+ if (!result || typeof result !== 'object')
77
+ return undefined;
78
+ const obj = result;
79
+ const data = obj.data;
80
+ if (!data || typeof data !== 'object' || Array.isArray(data))
81
+ return undefined;
82
+ const dataObj = data;
83
+ for (const value of Object.values(dataObj)) {
84
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
85
+ const nested = value;
86
+ const nestedData = nested.data;
87
+ if (nestedData && typeof nestedData === 'object' && !Array.isArray(nestedData)) {
88
+ const id = nestedData.id;
89
+ if (typeof id === 'string' && id.length > 0)
90
+ return id;
91
+ }
92
+ }
93
+ }
94
+ return undefined;
95
+ }
96
+ function extractCandidate(result) {
97
+ if (!result || typeof result !== 'object')
98
+ return undefined;
99
+ const obj = result;
100
+ const data = obj.data;
101
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
102
+ return data;
103
+ }
104
+ return obj;
105
+ }
106
+ function extractString(result, key) {
107
+ const candidate = extractCandidate(result);
108
+ if (!candidate)
109
+ return undefined;
110
+ const value = candidate[key];
111
+ if (typeof value === 'string' && value.length > 0) {
112
+ return value;
113
+ }
114
+ return undefined;
115
+ }
116
+ function extractCount(result) {
117
+ if (!result || typeof result !== 'object')
118
+ return undefined;
119
+ const obj = result;
120
+ if (Array.isArray(obj.data)) {
121
+ return obj.data.length;
122
+ }
123
+ const candidate = extractCandidate(result);
124
+ if (!candidate)
125
+ return undefined;
126
+ const nestedData = candidate.data;
127
+ if (Array.isArray(nestedData)) {
128
+ return nestedData.length;
129
+ }
130
+ return undefined;
131
+ }
132
+ //# sourceMappingURL=outputPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputPolicy.js","sourceRoot":"","sources":["../../src/utils/outputPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function splitCsv(value: string): string[];
2
+ export declare function toNonEmptyString(value: unknown): string | undefined;
3
+ export declare function toNonNegativeInteger(value: unknown): number | undefined;
4
+ export declare function toPositiveInteger(value: unknown): number | undefined;
5
+ export declare function interpretEscapes(content: string): string;
6
+ export declare function toSafeFileName(input: string): string;
7
+ //# sourceMappingURL=parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAchD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWpE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD"}
@@ -0,0 +1,52 @@
1
+ export function splitCsv(value) {
2
+ if (typeof value !== 'string') {
3
+ return [];
4
+ }
5
+ const trimmed = value.trim();
6
+ if (trimmed.length === 0) {
7
+ return [];
8
+ }
9
+ return trimmed
10
+ .split(',')
11
+ .map((item) => item.trim())
12
+ .filter((item) => item.length > 0);
13
+ }
14
+ export function toNonEmptyString(value) {
15
+ if (typeof value !== 'string') {
16
+ return undefined;
17
+ }
18
+ const trimmed = value.trim();
19
+ return trimmed.length > 0 ? trimmed : undefined;
20
+ }
21
+ export function toNonNegativeInteger(value) {
22
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {
23
+ return value;
24
+ }
25
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
26
+ return Number.parseInt(value, 10);
27
+ }
28
+ return undefined;
29
+ }
30
+ export function toPositiveInteger(value) {
31
+ if (typeof value === 'number' && Number.isInteger(value) && value > 0) {
32
+ return value;
33
+ }
34
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
35
+ const parsed = Number.parseInt(value, 10);
36
+ return parsed > 0 ? parsed : undefined;
37
+ }
38
+ return undefined;
39
+ }
40
+ export function interpretEscapes(content) {
41
+ return content
42
+ .replace(/\\r\\n/g, '\r\n')
43
+ .replace(/\\n/g, '\n');
44
+ }
45
+ export function toSafeFileName(input) {
46
+ return input
47
+ .toLowerCase()
48
+ .replace(/[^a-z0-9]+/g, '-')
49
+ .replace(/^-+|-+$/g, '')
50
+ .slice(0, 60);
51
+ }
52
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare function normalizeDependencies(raw: unknown): {
2
+ blocking: any[];
3
+ dependents: any[];
4
+ };
5
+ export declare function mergePlanWithDependencies(rawPlanResponse: unknown, dependencies: {
6
+ blocking: any[];
7
+ dependents: any[];
8
+ }): {
9
+ data: Record<string, unknown>;
10
+ };
11
+ export declare function formatPlanWithDependenciesText(planData: Record<string, unknown>, dependencies: {
12
+ blocking: any[];
13
+ dependents: any[];
14
+ }): string;
15
+ export declare function appendLineIfExists(lines: string[], key: string, value: unknown): void;
16
+ export declare function renderDependencyLine(label: 'BLOCKING' | 'DEPENDENT', plan: unknown): string;
17
+ //# sourceMappingURL=planFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planFormat.d.ts","sourceRoot":"","sources":["../../src/utils/planFormat.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,EAAE,CAAA;CAAE,CAc1F;AAED,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,OAAO,EACxB,YAAY,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,EAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAsBnC;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,EAAE,CAAA;CAAE,GACnD,MAAM,CAiCR;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAWrF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAW3F"}