@agentteams/cli 0.1.85 → 0.1.87
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.
- package/.eslintcache +1 -1
- package/dist/api/comment.d.ts +23 -8
- package/dist/api/comment.d.ts.map +1 -1
- package/dist/api/comment.js +19 -8
- package/dist/api/comment.js.map +1 -1
- package/dist/api/document.d.ts +16 -2
- package/dist/api/document.d.ts.map +1 -1
- package/dist/api/document.js +7 -2
- package/dist/api/document.js.map +1 -1
- package/dist/commands/comment.d.ts.map +1 -1
- package/dist/commands/comment.js +32 -6
- package/dist/commands/comment.js.map +1 -1
- package/dist/commands/convention.d.ts.map +1 -1
- package/dist/commands/convention.js +60 -5
- package/dist/commands/convention.js.map +1 -1
- package/dist/commands/document.d.ts +3 -0
- package/dist/commands/document.d.ts.map +1 -1
- package/dist/commands/document.js +25 -2
- package/dist/commands/document.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/context.d.ts +9 -0
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/context.js +5 -1
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/guides.d.ts +50 -0
- package/dist/mcp/guides.d.ts.map +1 -0
- package/dist/mcp/guides.js +142 -0
- package/dist/mcp/guides.js.map +1 -0
- package/dist/mcp/resources.d.ts +4 -3
- package/dist/mcp/resources.d.ts.map +1 -1
- package/dist/mcp/resources.js +1 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +20 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +3 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/writeTools.d.ts +25 -0
- package/dist/mcp/writeTools.d.ts.map +1 -0
- package/dist/mcp/writeTools.js +391 -0
- package/dist/mcp/writeTools.js.map +1 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +20 -1
- package/dist/utils/errors.js.map +1 -1
- package/package.json +2 -2
package/dist/api/comment.d.ts
CHANGED
|
@@ -1,29 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 에이전트 쓰기 계약 필드(전부 선택). 서버 `writeContractProperties`와 짝을 이룬다.
|
|
3
|
+
* 생략하면 요청은 예전과 바이트 단위로 동일하다 — 기존 호출자를 바꾸지 않는다.
|
|
4
|
+
*/
|
|
5
|
+
export type CommentWriteContract = {
|
|
6
|
+
guideHash?: string;
|
|
7
|
+
idempotencyKey?: string;
|
|
8
|
+
};
|
|
9
|
+
/** update/delete 전용 낙관적 잠금 값까지 포함한 형태. */
|
|
10
|
+
export type CommentMutationParams = CommentWriteContract & {
|
|
11
|
+
expectedUpdatedAt?: string;
|
|
12
|
+
};
|
|
1
13
|
export declare function listComments(apiUrl: string, projectId: string, headers: any, planId: string, params?: Record<string, string | number>): Promise<any>;
|
|
2
14
|
export declare function getComment(apiUrl: string, projectId: string, headers: any, commentId: string): Promise<any>;
|
|
3
15
|
export declare function createComment(apiUrl: string, projectId: string, headers: any, planId: string, body: {
|
|
4
16
|
type: string;
|
|
5
17
|
content: string;
|
|
6
18
|
affectedFiles?: string[];
|
|
7
|
-
}): Promise<any>;
|
|
19
|
+
} & CommentWriteContract): Promise<any>;
|
|
8
20
|
export declare function listFindingComments(apiUrl: string, projectId: string, headers: any, findingId: string, params?: Record<string, string | number>): Promise<any>;
|
|
9
21
|
export declare function createFindingComment(apiUrl: string, projectId: string, headers: any, findingId: string, body: {
|
|
10
22
|
content: string;
|
|
11
|
-
}): Promise<any>;
|
|
23
|
+
} & CommentWriteContract): Promise<any>;
|
|
12
24
|
export declare function listTaskComments(apiUrl: string, projectId: string, headers: any, taskId: string, params?: Record<string, string | number>): Promise<any>;
|
|
13
25
|
export declare function createTaskComment(apiUrl: string, projectId: string, headers: any, taskId: string, body: {
|
|
14
26
|
content: string;
|
|
15
|
-
}, planId?: string): Promise<any>;
|
|
27
|
+
} & CommentWriteContract, planId?: string): Promise<any>;
|
|
16
28
|
export declare function updateComment(apiUrl: string, projectId: string, headers: any, commentId: string, body: {
|
|
17
29
|
content: string;
|
|
18
30
|
affectedFiles?: string[];
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
expectedUpdatedAt?: string;
|
|
32
|
+
} & CommentWriteContract): Promise<any>;
|
|
33
|
+
export declare function deleteComment(apiUrl: string, projectId: string, headers: any, commentId: string, params?: CommentMutationParams): Promise<any>;
|
|
21
34
|
export declare function listReplies(apiUrl: string, projectId: string, headers: any, commentId: string, params?: Record<string, string | number>): Promise<any>;
|
|
35
|
+
export declare function getReply(apiUrl: string, projectId: string, headers: any, replyId: string): Promise<any>;
|
|
22
36
|
export declare function createReply(apiUrl: string, projectId: string, headers: any, commentId: string, body: {
|
|
23
37
|
content: string;
|
|
24
|
-
}): Promise<any>;
|
|
38
|
+
} & CommentWriteContract): Promise<any>;
|
|
25
39
|
export declare function updateReply(apiUrl: string, projectId: string, headers: any, replyId: string, body: {
|
|
26
40
|
content: string;
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
expectedUpdatedAt?: string;
|
|
42
|
+
} & CommentWriteContract): Promise<any>;
|
|
43
|
+
export declare function deleteReply(apiUrl: string, projectId: string, headers: any, replyId: string, params?: CommentMutationParams): Promise<any>;
|
|
29
44
|
//# sourceMappingURL=comment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../src/api/comment.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACvC,OAAO,CAAC,GAAG,CAAC,CAMd;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAIjH;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,
|
|
1
|
+
{"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../src/api/comment.ts"],"names":[],"mappings":"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"}
|
package/dist/api/comment.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import httpClient from '../utils/httpClient.js';
|
|
2
2
|
import { withoutJsonContentType } from '../utils/httpHeaders.js';
|
|
3
|
+
/** 빈 문자열·undefined 를 떨어뜨린다. 서버로 빈 값이 가면 그 자체가 "낡은 해시"로 거절된다. */
|
|
4
|
+
const definedContract = (params) => Object.fromEntries(Object.entries(params ?? {}).filter(([, value]) => typeof value === 'string' && value.length > 0));
|
|
5
|
+
/** DELETE 는 본문 없이 호출하는 클라이언트가 많아 계약 필드를 쿼리로 싣는다(서버 스키마와 동일). */
|
|
6
|
+
const deleteConfig = (headers, params) => {
|
|
7
|
+
const definedParams = definedContract(params);
|
|
8
|
+
return {
|
|
9
|
+
headers: withoutJsonContentType(headers),
|
|
10
|
+
...(Object.keys(definedParams).length > 0 ? { params: definedParams } : {}),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
3
13
|
export async function listComments(apiUrl, projectId, headers, planId, params) {
|
|
4
14
|
const baseUrl = `${apiUrl}/api/projects/${projectId}/plans/${planId}/comments`;
|
|
5
15
|
const requestConfig = params && Object.keys(params).length > 0 ? { headers, params } : { headers };
|
|
@@ -44,11 +54,9 @@ export async function updateComment(apiUrl, projectId, headers, commentId, body)
|
|
|
44
54
|
const response = await httpClient.put(baseUrl, body, { headers });
|
|
45
55
|
return response.data;
|
|
46
56
|
}
|
|
47
|
-
export async function deleteComment(apiUrl, projectId, headers, commentId) {
|
|
57
|
+
export async function deleteComment(apiUrl, projectId, headers, commentId, params) {
|
|
48
58
|
const baseUrl = `${apiUrl}/api/projects/${projectId}/comments/${commentId}`;
|
|
49
|
-
const response = await httpClient.delete(baseUrl,
|
|
50
|
-
headers: withoutJsonContentType(headers),
|
|
51
|
-
});
|
|
59
|
+
const response = await httpClient.delete(baseUrl, deleteConfig(headers, params));
|
|
52
60
|
return response.data;
|
|
53
61
|
}
|
|
54
62
|
// ---------------------------------------------------------------------------
|
|
@@ -60,6 +68,11 @@ export async function listReplies(apiUrl, projectId, headers, commentId, params)
|
|
|
60
68
|
const response = await httpClient.get(baseUrl, requestConfig);
|
|
61
69
|
return response.data;
|
|
62
70
|
}
|
|
71
|
+
export async function getReply(apiUrl, projectId, headers, replyId) {
|
|
72
|
+
const baseUrl = `${apiUrl}/api/projects/${projectId}/comment-replies/${replyId}`;
|
|
73
|
+
const response = await httpClient.get(baseUrl, { headers });
|
|
74
|
+
return response.data;
|
|
75
|
+
}
|
|
63
76
|
export async function createReply(apiUrl, projectId, headers, commentId, body) {
|
|
64
77
|
const baseUrl = `${apiUrl}/api/projects/${projectId}/comments/${commentId}/replies`;
|
|
65
78
|
const response = await httpClient.post(baseUrl, body, { headers });
|
|
@@ -70,11 +83,9 @@ export async function updateReply(apiUrl, projectId, headers, replyId, body) {
|
|
|
70
83
|
const response = await httpClient.put(baseUrl, body, { headers });
|
|
71
84
|
return response.data;
|
|
72
85
|
}
|
|
73
|
-
export async function deleteReply(apiUrl, projectId, headers, replyId) {
|
|
86
|
+
export async function deleteReply(apiUrl, projectId, headers, replyId, params) {
|
|
74
87
|
const baseUrl = `${apiUrl}/api/projects/${projectId}/comment-replies/${replyId}`;
|
|
75
|
-
const response = await httpClient.delete(baseUrl,
|
|
76
|
-
headers: withoutJsonContentType(headers),
|
|
77
|
-
});
|
|
88
|
+
const response = await httpClient.delete(baseUrl, deleteConfig(headers, params));
|
|
78
89
|
return response.data;
|
|
79
90
|
}
|
|
80
91
|
//# sourceMappingURL=comment.js.map
|
package/dist/api/comment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/api/comment.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/api/comment.ts"],"names":[],"mappings":"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"}
|
package/dist/api/document.d.ts
CHANGED
|
@@ -4,7 +4,16 @@ export declare function getDocument(apiUrl: string, projectId: string, headers:
|
|
|
4
4
|
export declare function downloadDocumentBody(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string): Promise<string>;
|
|
5
5
|
export declare function listDocuments(apiUrl: string, projectId: string, headers: Record<string, string>, params?: Record<string, string | number | boolean>): Promise<any>;
|
|
6
6
|
export declare function listDocumentTags(apiUrl: string, projectId: string, headers: Record<string, string>, params?: Record<string, string | number>): Promise<any>;
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* DELETE 쓰기 계약 필드. 이 라우트는 본문을 쓰지 않으므로 쿼리로 전달한다
|
|
9
|
+
* (서버 `deleteDocumentQuerySchema`와 짝).
|
|
10
|
+
*/
|
|
11
|
+
export type DeleteDocumentParams = {
|
|
12
|
+
guideHash?: string;
|
|
13
|
+
idempotencyKey?: string;
|
|
14
|
+
expectedUpdatedAt?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function deleteDocument(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, params?: DeleteDocumentParams): Promise<any>;
|
|
8
17
|
export declare function archiveDocument(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string): Promise<any>;
|
|
9
18
|
export declare function unarchiveDocument(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string): Promise<any>;
|
|
10
19
|
export declare function listDocumentRevisions(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, params?: Record<string, string | number>): Promise<any>;
|
|
@@ -13,9 +22,14 @@ export declare function restoreDocumentRevision(apiUrl: string, projectId: strin
|
|
|
13
22
|
export declare function listDocumentComments(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, params?: Record<string, string | number>): Promise<any>;
|
|
14
23
|
export declare function createDocumentComment(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, body: {
|
|
15
24
|
content: string;
|
|
25
|
+
guideHash?: string;
|
|
26
|
+
idempotencyKey?: string;
|
|
16
27
|
}): Promise<any>;
|
|
17
28
|
export declare function updateDocumentComment(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, commentId: string, body: {
|
|
18
29
|
content: string;
|
|
30
|
+
guideHash?: string;
|
|
31
|
+
idempotencyKey?: string;
|
|
32
|
+
expectedUpdatedAt?: string;
|
|
19
33
|
}): Promise<any>;
|
|
20
|
-
export declare function deleteDocumentComment(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, commentId: string): Promise<any>;
|
|
34
|
+
export declare function deleteDocumentComment(apiUrl: string, projectId: string, headers: Record<string, string>, documentId: string, commentId: string, params?: DeleteDocumentParams): Promise<any>;
|
|
21
35
|
//# sourceMappingURL=document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/api/document.ts"],"names":[],"mappings":"AAYA,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAI9B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAI9B;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,gBAInB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,mBAInB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,gBAInD;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,gBAIzC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/api/document.ts"],"names":[],"mappings":"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"}
|
package/dist/api/document.js
CHANGED
|
@@ -31,9 +31,11 @@ export async function listDocumentTags(apiUrl, projectId, headers, params) {
|
|
|
31
31
|
const response = await httpClient.get(`${getBaseUrl(apiUrl, projectId)}/tags`, withParams(headers, params));
|
|
32
32
|
return response.data;
|
|
33
33
|
}
|
|
34
|
-
export async function deleteDocument(apiUrl, projectId, headers, documentId) {
|
|
34
|
+
export async function deleteDocument(apiUrl, projectId, headers, documentId, params) {
|
|
35
|
+
const definedParams = Object.fromEntries(Object.entries(params ?? {}).filter(([, value]) => value !== undefined && value !== ''));
|
|
35
36
|
const response = await httpClient.delete(`${getBaseUrl(apiUrl, projectId)}/${documentId}`, {
|
|
36
37
|
headers: withoutJsonContentType(headers),
|
|
38
|
+
...(Object.keys(definedParams).length > 0 ? { params: definedParams } : {}),
|
|
37
39
|
});
|
|
38
40
|
return response.data;
|
|
39
41
|
}
|
|
@@ -73,9 +75,12 @@ export async function updateDocumentComment(apiUrl, projectId, headers, document
|
|
|
73
75
|
});
|
|
74
76
|
return response.data;
|
|
75
77
|
}
|
|
76
|
-
export async function deleteDocumentComment(apiUrl, projectId, headers, documentId, commentId) {
|
|
78
|
+
export async function deleteDocumentComment(apiUrl, projectId, headers, documentId, commentId, params) {
|
|
79
|
+
// 문서 코멘트 삭제도 문서 삭제와 같은 쿼리 계약을 쓴다(서버 deleteDocumentCommentQuerySchema).
|
|
80
|
+
const definedParams = Object.fromEntries(Object.entries(params ?? {}).filter(([, value]) => typeof value === 'string' && value.length > 0));
|
|
77
81
|
const response = await httpClient.delete(`${getBaseUrl(apiUrl, projectId)}/${documentId}/comments/${commentId}`, {
|
|
78
82
|
headers: withoutJsonContentType(headers),
|
|
83
|
+
...(Object.keys(definedParams).length > 0 ? { params: definedParams } : {}),
|
|
79
84
|
});
|
|
80
85
|
return response.data;
|
|
81
86
|
}
|
package/dist/api/document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/api/document.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/api/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"AAkCA,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,GAAG,CAAC,CA4Id"}
|
package/dist/commands/comment.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
import { createComment, createFindingComment, createReply, createTaskComment, deleteComment, deleteReply, getComment, listComments, listFindingComments, listReplies, listTaskComments, updateComment, updateReply, } from '../api/comment.js';
|
|
1
|
+
import { createComment, createFindingComment, createReply, createTaskComment, deleteComment, deleteReply, getComment, getReply, listComments, listFindingComments, listReplies, listTaskComments, updateComment, updateReply, } from '../api/comment.js';
|
|
2
2
|
import { toPositiveInteger } from '../utils/parsers.js';
|
|
3
|
+
/**
|
|
4
|
+
* 계약 필드를 요청 본문/쿼리에 실을 형태로 모은다. 값이 없는 필드는 아예 넣지 않는다 —
|
|
5
|
+
* 빈 문자열을 보내면 서버가 그것을 "낡은 가이드 해시"로 읽어 정상 요청이 409 로 거절된다.
|
|
6
|
+
*/
|
|
7
|
+
const writeContract = (options) => ({
|
|
8
|
+
...(options.guideHash ? { guideHash: options.guideHash } : {}),
|
|
9
|
+
...(options.idempotencyKey ? { idempotencyKey: options.idempotencyKey } : {}),
|
|
10
|
+
});
|
|
11
|
+
const mutationContract = (options) => ({
|
|
12
|
+
...writeContract(options),
|
|
13
|
+
...(options.expectedUpdatedAt ? { expectedUpdatedAt: options.expectedUpdatedAt } : {}),
|
|
14
|
+
});
|
|
3
15
|
export async function executeCommentCommand(apiUrl, projectId, headers, action, options) {
|
|
4
16
|
const targetKinds = [
|
|
5
17
|
options.findingId && 'finding',
|
|
@@ -54,17 +66,19 @@ export async function executeCommentCommand(apiUrl, projectId, headers, action,
|
|
|
54
66
|
}
|
|
55
67
|
return createFindingComment(apiUrl, projectId, headers, options.findingId, {
|
|
56
68
|
content: options.content,
|
|
69
|
+
...writeContract(options),
|
|
57
70
|
});
|
|
58
71
|
}
|
|
59
72
|
if (options.taskId) {
|
|
60
73
|
if (options.type || options.affectedFiles) {
|
|
61
74
|
throw new Error('--type and --affected-files are only supported with a plan comment target');
|
|
62
75
|
}
|
|
63
|
-
return createTaskComment(apiUrl, projectId, headers, options.taskId, { content: options.content }, options.planId);
|
|
76
|
+
return createTaskComment(apiUrl, projectId, headers, options.taskId, { content: options.content, ...writeContract(options) }, options.planId);
|
|
64
77
|
}
|
|
65
78
|
const body = {
|
|
66
79
|
type: options.type,
|
|
67
80
|
content: options.content,
|
|
81
|
+
...writeContract(options),
|
|
68
82
|
};
|
|
69
83
|
if (options.affectedFiles) {
|
|
70
84
|
body.affectedFiles = options.affectedFiles.split(',').map((f) => f.trim());
|
|
@@ -78,6 +92,7 @@ export async function executeCommentCommand(apiUrl, projectId, headers, action,
|
|
|
78
92
|
throw new Error('--content is required for comment update');
|
|
79
93
|
const body = {
|
|
80
94
|
content: options.content,
|
|
95
|
+
...mutationContract(options),
|
|
81
96
|
};
|
|
82
97
|
if (options.affectedFiles) {
|
|
83
98
|
body.affectedFiles = options.affectedFiles.split(',').map((f) => f.trim());
|
|
@@ -87,7 +102,7 @@ export async function executeCommentCommand(apiUrl, projectId, headers, action,
|
|
|
87
102
|
case 'delete': {
|
|
88
103
|
if (!options.id)
|
|
89
104
|
throw new Error('--id is required for comment delete');
|
|
90
|
-
await deleteComment(apiUrl, projectId, headers, options.id);
|
|
105
|
+
await deleteComment(apiUrl, projectId, headers, options.id, mutationContract(options));
|
|
91
106
|
return { message: `Comment ${options.id} deleted successfully` };
|
|
92
107
|
}
|
|
93
108
|
case 'reply-list': {
|
|
@@ -102,24 +117,35 @@ export async function executeCommentCommand(apiUrl, projectId, headers, action,
|
|
|
102
117
|
params.pageSize = pageSize;
|
|
103
118
|
return listReplies(apiUrl, projectId, headers, options.id, params);
|
|
104
119
|
}
|
|
120
|
+
case 'reply-get': {
|
|
121
|
+
if (!options.replyId)
|
|
122
|
+
throw new Error('--reply-id is required for comment reply-get');
|
|
123
|
+
return getReply(apiUrl, projectId, headers, options.replyId);
|
|
124
|
+
}
|
|
105
125
|
case 'reply-create': {
|
|
106
126
|
if (!options.id)
|
|
107
127
|
throw new Error('--id is required for comment reply-create');
|
|
108
128
|
if (!options.content)
|
|
109
129
|
throw new Error('--content is required for comment reply-create');
|
|
110
|
-
return createReply(apiUrl, projectId, headers, options.id, {
|
|
130
|
+
return createReply(apiUrl, projectId, headers, options.id, {
|
|
131
|
+
content: options.content,
|
|
132
|
+
...writeContract(options),
|
|
133
|
+
});
|
|
111
134
|
}
|
|
112
135
|
case 'reply-update': {
|
|
113
136
|
if (!options.replyId)
|
|
114
137
|
throw new Error('--reply-id is required for comment reply-update');
|
|
115
138
|
if (!options.content)
|
|
116
139
|
throw new Error('--content is required for comment reply-update');
|
|
117
|
-
return updateReply(apiUrl, projectId, headers, options.replyId, {
|
|
140
|
+
return updateReply(apiUrl, projectId, headers, options.replyId, {
|
|
141
|
+
content: options.content,
|
|
142
|
+
...mutationContract(options),
|
|
143
|
+
});
|
|
118
144
|
}
|
|
119
145
|
case 'reply-delete': {
|
|
120
146
|
if (!options.replyId)
|
|
121
147
|
throw new Error('--reply-id is required for comment reply-delete');
|
|
122
|
-
await deleteReply(apiUrl, projectId, headers, options.replyId);
|
|
148
|
+
await deleteReply(apiUrl, projectId, headers, options.replyId, mutationContract(options));
|
|
123
149
|
return { message: `Reply ${options.replyId} deleted successfully` };
|
|
124
150
|
}
|
|
125
151
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,WAAW,
|
|
1
|
+
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,WAAW,GAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,OAAY,EAAwB,EAAE,CAAC,CAAC;IAC7D,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,OAAY,EAAyB,EAAE,CAAC,CAAC;IACjE,GAAG,aAAa,CAAC,OAAO,CAAC;IACzB,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,SAAiB,EACjB,OAAY,EACZ,MAAc,EACd,OAAY;IAEZ,MAAM,WAAW,GAAG;QAClB,OAAO,CAAC,SAAS,IAAI,SAAS;QAC9B,OAAO,CAAC,MAAM,IAAI,MAAM;QACxB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM;KAC5C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,EAAE;QAC3C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iEAAiE,UAAU,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,MAAM,GAAoC,EAAE,CAAC;YACnD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAClF,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAErE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAC3C,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEvD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrE,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAElF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE;oBACzE,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,GAAG,aAAa,CAAC,OAAO,CAAC;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC/F,CAAC;gBACD,OAAO,iBAAiB,CACtB,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,CAAC,MAAM,EACd,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,EACvD,OAAO,CAAC,MAAM,CACf,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAuF;gBAC/F,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,aAAa,CAAC,OAAO,CAAC;aAC1B,CAAC;YACF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAElF,MAAM,IAAI,GAAqG;gBAC7G,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,gBAAgB,CAAC,OAAO,CAAC;aAC7B,CAAC;YACF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,OAAO,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACxE,MAAM,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YACvF,OAAO,EAAE,OAAO,EAAE,WAAW,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAC;QACnE,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAoC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAC3C,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEvD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACtF,OAAO,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC9E,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAExF,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE;gBACzD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,aAAa,CAAC,OAAO,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzF,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAExF,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC9D,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,gBAAgB,CAAC,OAAO,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzF,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1F,OAAO,EAAE,OAAO,EAAE,SAAS,OAAO,CAAC,OAAO,uBAAuB,EAAE,CAAC;QACtE,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention.d.ts","sourceRoot":"","sources":["../../src/commands/convention.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAWhD,KAAK,wBAAwB,GAAG;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"convention.d.ts","sourceRoot":"","sources":["../../src/commands/convention.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,6 +186,21 @@ async function fetchPlatformGuidesHash(apiUrl, headers) {
|
|
|
186
186
|
}
|
|
187
187
|
return hash;
|
|
188
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* 다운로드 경로 전용: 이 엔드포인트가 없는 구버전 서버(404)면 "해시 없음"으로 계속한다.
|
|
191
|
+
* 그 외 실패는 그대로 던진다 — 조용히 넘기면 파일과 해시가 어긋난 manifest가 남는다.
|
|
192
|
+
*/
|
|
193
|
+
async function fetchPlatformGuidesHashIfAvailable(apiUrl, headers) {
|
|
194
|
+
try {
|
|
195
|
+
return await fetchPlatformGuidesHash(apiUrl, headers);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (isAxiosError(error) && error.response?.status === 404) {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
189
204
|
function toConventionName(convention) {
|
|
190
205
|
const title = typeof convention.title === 'string' ? convention.title.trim() : '';
|
|
191
206
|
if (title.length > 0)
|
|
@@ -478,12 +493,13 @@ async function downloadPlatformGuides(projectRoot, apiUrl, headers) {
|
|
|
478
493
|
const response = await httpClient.get(`${apiUrl}/api/platform/guides`, { headers });
|
|
479
494
|
const guides = response.data?.data;
|
|
480
495
|
if (!Array.isArray(guides) || guides.length === 0) {
|
|
481
|
-
return 0;
|
|
496
|
+
return { written: 0, hashes: {} };
|
|
482
497
|
}
|
|
483
498
|
const baseDir = join(projectRoot, CONVENTION_DIR, 'platform');
|
|
484
499
|
rmSync(baseDir, { recursive: true, force: true });
|
|
485
500
|
mkdirSync(baseDir, { recursive: true });
|
|
486
501
|
const fileNameCount = new Map();
|
|
502
|
+
const hashes = {};
|
|
487
503
|
let written = 0;
|
|
488
504
|
for (const guide of guides) {
|
|
489
505
|
if (!guide || typeof guide.content !== 'string') {
|
|
@@ -495,17 +511,49 @@ async function downloadPlatformGuides(projectRoot, apiUrl, headers) {
|
|
|
495
511
|
const fileName = seenCount === 0 ? baseFileName : baseFileName.replace(/\.md$/, `-${seenCount + 1}.md`);
|
|
496
512
|
const filePath = join(baseDir, fileName);
|
|
497
513
|
atomicWriteFileSync(filePath, guide.content, 'utf-8');
|
|
514
|
+
if (typeof guide.hash === 'string' && guide.hash.trim().length > 0) {
|
|
515
|
+
hashes[fileName] = guide.hash.trim();
|
|
516
|
+
}
|
|
498
517
|
written += 1;
|
|
499
518
|
}
|
|
500
|
-
return written;
|
|
519
|
+
return { written, hashes };
|
|
501
520
|
}
|
|
502
521
|
catch (error) {
|
|
503
522
|
if (isAxiosError(error) && error.response?.status === 404) {
|
|
504
|
-
return 0;
|
|
523
|
+
return { written: 0, hashes: {} };
|
|
505
524
|
}
|
|
506
525
|
throw error;
|
|
507
526
|
}
|
|
508
527
|
}
|
|
528
|
+
/**
|
|
529
|
+
* 이번 다운로드의 플랫폼 가이드 해시를 manifest에 보존한다.
|
|
530
|
+
*
|
|
531
|
+
* 컨벤션 다운로드 블록은 프로젝트 컨벤션이 하나도 없으면 manifest를 쓰지 않고 빠져나가므로,
|
|
532
|
+
* 그 경로에서도 해시가 남도록 별도로 load-or-create 해서 병합한다.
|
|
533
|
+
*
|
|
534
|
+
* 두 해시를 **항상 함께** 기록한다. 집계 해시(`platformGuidesHash`)가 비면
|
|
535
|
+
* `checkConventionFreshness`가 가이드 변경을 영원히 감지하지 못하고(문자열일 때만 비교한다),
|
|
536
|
+
* 가이드별 해시(`platformGuideHashes`)가 낡으면 방금 덮어쓴 본문과 짝이 맞지 않는 해시를
|
|
537
|
+
* `guideHash`로 보내 원인 파악이 어려운 GUIDE_OUTDATED가 난다.
|
|
538
|
+
* 그래서 해시를 못 받은 경우(구버전 서버)는 조기 반환이 아니라 키 삭제로 처리한다 —
|
|
539
|
+
* 파일 내용과 해시는 언제나 같은 다운로드에서 나와야 한다.
|
|
540
|
+
*/
|
|
541
|
+
function persistPlatformGuideHashes(projectRoot, hashes, platformGuidesHash) {
|
|
542
|
+
const manifest = loadManifestOrCreate(projectRoot);
|
|
543
|
+
if (platformGuidesHash) {
|
|
544
|
+
manifest.platformGuidesHash = platformGuidesHash;
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
delete manifest.platformGuidesHash;
|
|
548
|
+
}
|
|
549
|
+
if (Object.keys(hashes).length > 0) {
|
|
550
|
+
manifest.platformGuideHashes = hashes;
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
delete manifest.platformGuideHashes;
|
|
554
|
+
}
|
|
555
|
+
writeManifest(projectRoot, manifest);
|
|
556
|
+
}
|
|
509
557
|
async function downloadReportingTemplate(projectRoot, config, apiUrl, headers) {
|
|
510
558
|
const agentConfigResponse = await httpClient.get(`${apiUrl}/api/projects/${config.projectId}/agent-configs`, {
|
|
511
559
|
headers,
|
|
@@ -538,7 +586,12 @@ export async function conventionDownload(options) {
|
|
|
538
586
|
throw new Error(`Convention directory not found: ${conventionRoot}\nRun 'agentteams init' first.`);
|
|
539
587
|
}
|
|
540
588
|
const hasReportingTemplate = await withSpinner('Downloading reporting template...', () => downloadReportingTemplate(projectRoot, config, apiUrl, headers));
|
|
541
|
-
const
|
|
589
|
+
const platformGuides = await withSpinner('Downloading platform guides...', () => downloadPlatformGuides(projectRoot, apiUrl, headers));
|
|
590
|
+
const platformGuideCount = platformGuides.written;
|
|
591
|
+
// 컨벤션 유무와 무관하게 가이드 해시를 확보한다. 컨벤션 블록 안에서만 가져오면
|
|
592
|
+
// 컨벤션이 없는 프로젝트의 manifest에는 집계 해시가 영원히 비고,
|
|
593
|
+
// `convention status`가 플랫폼 가이드 변경을 절대 감지하지 못한다.
|
|
594
|
+
const platformGuidesHash = await fetchPlatformGuidesHashIfAvailable(apiUrl, headers);
|
|
542
595
|
const conventions = await withSpinner('Downloading conventions...', async () => {
|
|
543
596
|
const conventionList = await fetchConventionsWithContent(apiUrl, config.projectId, headers);
|
|
544
597
|
if (!conventionList || conventionList.length === 0) {
|
|
@@ -556,11 +609,11 @@ export async function conventionDownload(options) {
|
|
|
556
609
|
mkdirSync(join(projectRoot, CONVENTION_DIR, categoryDir), { recursive: true });
|
|
557
610
|
}
|
|
558
611
|
const fileNameCount = new Map();
|
|
559
|
-
const platformGuidesHash = await fetchPlatformGuidesHash(apiUrl, headers);
|
|
560
612
|
const manifest = {
|
|
561
613
|
version: 1,
|
|
562
614
|
generatedAt: new Date().toISOString(),
|
|
563
615
|
platformGuidesHash,
|
|
616
|
+
...(Object.keys(platformGuides.hashes).length > 0 ? { platformGuideHashes: platformGuides.hashes } : {}),
|
|
564
617
|
entries: [],
|
|
565
618
|
};
|
|
566
619
|
for (const convention of conventionList) {
|
|
@@ -589,6 +642,8 @@ export async function conventionDownload(options) {
|
|
|
589
642
|
writeManifest(projectRoot, manifest);
|
|
590
643
|
return conventionList;
|
|
591
644
|
});
|
|
645
|
+
// 컨벤션이 없어 위 블록이 manifest를 쓰지 않고 빠져나간 경우에도 가이드 해시는 남겨야 한다.
|
|
646
|
+
persistPlatformGuideHashes(projectRoot, platformGuides.hashes, platformGuidesHash);
|
|
592
647
|
if (!conventions || conventions.length === 0) {
|
|
593
648
|
if (hasReportingTemplate) {
|
|
594
649
|
const platformLine = platformGuideCount > 0
|