agentic-domain-document 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.tbls.yml +201 -0
- package/CHANGELOG.md +68 -0
- package/README.md +313 -0
- package/agent/agent.manifest.json +8 -0
- package/agent/capabilities/document-authoring.json +21 -0
- package/agent/capabilities/document-block.json +22 -0
- package/agent/capabilities/document-toc.json +21 -0
- package/agent/capabilities/document-validation.json +21 -0
- package/agent/examples/document-quality-examples.md +153 -0
- package/agent/examples/examples.md +172 -0
- package/agent/guides/10-document-authoring-guide.md +28 -0
- package/agent/guides/20-domain-boundary-guide.md +41 -0
- package/agent/guides/30-authoring-policy-guide.md +40 -0
- package/agent/guides/40-toc-authoring-guide.md +73 -0
- package/agent/guides/50-content-block-guide.md +57 -0
- package/agent/guides/51-paragraph-authoring-guide.md +68 -0
- package/agent/guides/52-table-authoring-guide.md +73 -0
- package/agent/guides/53-diagram-figure-authoring-guide.md +75 -0
- package/agent/guides/70-korean-writing-style-guide.md +65 -0
- package/agent/instructions/00-runtime-behavior.md +17 -0
- package/agent/instructions/10-scope-and-boundary.md +27 -0
- package/agent/instructions/20-task-procedures.md +69 -0
- package/agent/instructions/30-must-and-must-not.md +34 -0
- package/agent/resource-index.json +185 -0
- package/agent/resource-selection.json +205 -0
- package/agent/routing.json +34 -0
- package/agent/sources/reference-mapping.md +53 -0
- package/agent/validation/document-validation-rules.md +73 -0
- package/dist/agent/document-agent-contribution.d.ts +15 -0
- package/dist/agent/document-agent-contribution.d.ts.map +1 -0
- package/dist/agent/document-agent-contribution.js +39 -0
- package/dist/agent/document-agent-contribution.js.map +1 -0
- package/dist/agent/index.d.ts +2 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +2 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/database.d.ts +8 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +76 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown-importer.d.ts +14 -0
- package/dist/markdown-importer.d.ts.map +1 -0
- package/dist/markdown-importer.js +386 -0
- package/dist/markdown-importer.js.map +1 -0
- package/dist/reader.d.ts +17 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +332 -0
- package/dist/reader.js.map +1 -0
- package/dist/repositories.d.ts +118 -0
- package/dist/repositories.d.ts.map +1 -0
- package/dist/repositories.js +388 -0
- package/dist/repositories.js.map +1 -0
- package/dist/service.d.ts +35 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +327 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +276 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +4 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +255 -0
- package/dist/validators.js.map +1 -0
- package/docs/build.md +55 -0
- package/docs/configuration.md +34 -0
- package/docs/delivery.md +50 -0
- package/docs/operations.md +50 -0
- package/docs/publishing.md +69 -0
- package/docs/schema/generated/README.md +30 -0
- package/docs/schema/generated/document_annotations.md +119 -0
- package/docs/schema/generated/document_annotations.svg +60 -0
- package/docs/schema/generated/document_blocks.md +97 -0
- package/docs/schema/generated/document_blocks.svg +60 -0
- package/docs/schema/generated/document_change_events.md +135 -0
- package/docs/schema/generated/document_change_events.svg +88 -0
- package/docs/schema/generated/document_code_groups.md +70 -0
- package/docs/schema/generated/document_code_groups.svg +52 -0
- package/docs/schema/generated/document_codes.md +88 -0
- package/docs/schema/generated/document_codes.svg +52 -0
- package/docs/schema/generated/document_contents.md +87 -0
- package/docs/schema/generated/document_contents.svg +116 -0
- package/docs/schema/generated/document_documents.md +126 -0
- package/docs/schema/generated/document_documents.svg +222 -0
- package/docs/schema/generated/document_node_taxonomies.md +84 -0
- package/docs/schema/generated/document_node_taxonomies.svg +80 -0
- package/docs/schema/generated/document_node_taxonomy_levels.md +91 -0
- package/docs/schema/generated/document_node_taxonomy_levels.svg +52 -0
- package/docs/schema/generated/document_nodes.md +120 -0
- package/docs/schema/generated/document_nodes.svg +98 -0
- package/docs/schema/generated/document_revisions.md +107 -0
- package/docs/schema/generated/document_revisions.svg +116 -0
- package/docs/schema/generated/document_versions.md +126 -0
- package/docs/schema/generated/document_versions.svg +88 -0
- package/docs/schema/generated/schema.json +2534 -0
- package/docs/schema/generated/schema.mmd +170 -0
- package/docs/schema/generated/schema.svg +331 -0
- package/docs/schema/migrations.md +40 -0
- package/docs/usage.md +332 -0
- package/docs/validation-rules.md +69 -0
- package/package.json +30 -0
- package/src/database/migrations/0001_document_base.sql +753 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
const TEXT_BLOCK_TYPES = new Set(["paragraph", "quote", "code", "callout"]);
|
|
2
|
+
const JSON_BLOCK_TYPES = new Set(["table", "figure", "diagram", "list"]);
|
|
3
|
+
const DIAGRAM_NOTATIONS = new Set(["mermaid", "plantuml", "drawio", "svg"]);
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function nonEmptyString(value) {
|
|
8
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
9
|
+
}
|
|
10
|
+
function issue(input) {
|
|
11
|
+
return {
|
|
12
|
+
severity: input.severity ?? "error",
|
|
13
|
+
ruleId: input.ruleId,
|
|
14
|
+
targetType: input.targetType,
|
|
15
|
+
targetId: input.targetId,
|
|
16
|
+
message: input.message,
|
|
17
|
+
details: input.details
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function parseJson(value) {
|
|
21
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return JSON.parse(value);
|
|
25
|
+
}
|
|
26
|
+
function getDocument(db, documentId) {
|
|
27
|
+
return db.prepare(`SELECT * FROM document_documents WHERE document_id = ?`).get(documentId);
|
|
28
|
+
}
|
|
29
|
+
function listNodes(db, documentId) {
|
|
30
|
+
return db.prepare(`SELECT * FROM document_nodes WHERE document_id = ? ORDER BY node_level, sort_order`).all(documentId).map((row) => ({
|
|
31
|
+
nodeId: row.node_id,
|
|
32
|
+
documentId: row.document_id,
|
|
33
|
+
parentNodeId: typeof row.parent_node_id === "string" ? row.parent_node_id : undefined,
|
|
34
|
+
nodeLevel: row.node_level,
|
|
35
|
+
nodeRoleCode: row.node_role_code,
|
|
36
|
+
title: row.title,
|
|
37
|
+
tocVisibility: row.toc_visibility,
|
|
38
|
+
numberingPolicyCode: row.numbering_policy_code,
|
|
39
|
+
numberingOverride: typeof row.numbering_override === "string" ? row.numbering_override : undefined,
|
|
40
|
+
sortOrder: row.sort_order,
|
|
41
|
+
createdAt: row.created_at,
|
|
42
|
+
updatedAt: row.updated_at,
|
|
43
|
+
metadata: parseJson(row.metadata_json)
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
function listBlocks(db, documentId) {
|
|
47
|
+
return db
|
|
48
|
+
.prepare(`SELECT b.*
|
|
49
|
+
FROM document_blocks b
|
|
50
|
+
JOIN document_contents c ON c.content_id = b.content_id
|
|
51
|
+
WHERE c.document_id = ?
|
|
52
|
+
ORDER BY c.node_id, b.sort_order`)
|
|
53
|
+
.all(documentId).map((row) => ({
|
|
54
|
+
blockId: row.block_id,
|
|
55
|
+
contentId: row.content_id,
|
|
56
|
+
blockTypeCode: row.block_type_code,
|
|
57
|
+
sortOrder: row.sort_order,
|
|
58
|
+
contentText: typeof row.content_text === "string" ? row.content_text : undefined,
|
|
59
|
+
contentJson: parseJson(row.content_json),
|
|
60
|
+
createdAt: row.created_at,
|
|
61
|
+
updatedAt: row.updated_at,
|
|
62
|
+
metadata: parseJson(row.metadata_json)
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
function hasTaxonomyLevel(db, taxonomyId, level) {
|
|
66
|
+
const row = db
|
|
67
|
+
.prepare(`SELECT taxonomy_level_id FROM document_node_taxonomy_levels WHERE taxonomy_id = ? AND node_level = ?`)
|
|
68
|
+
.get(taxonomyId, level);
|
|
69
|
+
return row !== undefined;
|
|
70
|
+
}
|
|
71
|
+
function listDepth(value, depth = 1) {
|
|
72
|
+
if (value === null || typeof value !== "object") {
|
|
73
|
+
return depth;
|
|
74
|
+
}
|
|
75
|
+
const record = value;
|
|
76
|
+
const children = Array.isArray(record.children) ? record.children : Array.isArray(record.items) ? record.items : [];
|
|
77
|
+
if (children.length === 0) {
|
|
78
|
+
return depth;
|
|
79
|
+
}
|
|
80
|
+
return Math.max(...children.map((child) => listDepth(child, depth + 1)));
|
|
81
|
+
}
|
|
82
|
+
function validateBlockPayload(block) {
|
|
83
|
+
const issues = [];
|
|
84
|
+
if (TEXT_BLOCK_TYPES.has(block.blockTypeCode) && (block.contentText === undefined || block.contentText.trim() === "")) {
|
|
85
|
+
issues.push(issue({
|
|
86
|
+
ruleId: "DOCUMENT.BLOCK.TEXT_REQUIRED",
|
|
87
|
+
targetType: "block",
|
|
88
|
+
targetId: block.blockId,
|
|
89
|
+
message: `${block.blockTypeCode} block은 contentText가 필요합니다.`
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
if (JSON_BLOCK_TYPES.has(block.blockTypeCode) && block.contentJson === undefined) {
|
|
93
|
+
issues.push(issue({
|
|
94
|
+
ruleId: "DOCUMENT.BLOCK.JSON_REQUIRED",
|
|
95
|
+
targetType: "block",
|
|
96
|
+
targetId: block.blockId,
|
|
97
|
+
message: `${block.blockTypeCode} block은 contentJson이 필요합니다.`
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
if (block.blockTypeCode === "diagram" && block.contentJson !== undefined) {
|
|
101
|
+
const notation = isRecord(block.contentJson) ? block.contentJson.notation : undefined;
|
|
102
|
+
if (typeof notation !== "string" || !DIAGRAM_NOTATIONS.has(notation)) {
|
|
103
|
+
issues.push(issue({
|
|
104
|
+
ruleId: "DOCUMENT.BLOCK.DIAGRAM_NOTATION",
|
|
105
|
+
targetType: "block",
|
|
106
|
+
targetId: block.blockId,
|
|
107
|
+
message: "diagram block은 mermaid, plantuml, drawio, svg 중 하나의 notation이 필요합니다.",
|
|
108
|
+
details: { notation }
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
if (isRecord(block.contentJson) && !nonEmptyString(block.contentJson.sourceText) && !nonEmptyString(block.contentJson.sourcePath) && !nonEmptyString(block.contentJson.path)) {
|
|
112
|
+
issues.push(issue({
|
|
113
|
+
ruleId: "DOCUMENT.BLOCK.DIAGRAM_SOURCE",
|
|
114
|
+
targetType: "block",
|
|
115
|
+
targetId: block.blockId,
|
|
116
|
+
message: "diagram block은 sourceText, sourcePath, path 중 하나가 필요합니다."
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (block.blockTypeCode === "table" && block.contentJson !== undefined) {
|
|
121
|
+
const columns = isRecord(block.contentJson) ? block.contentJson.columns : undefined;
|
|
122
|
+
const rows = isRecord(block.contentJson) ? block.contentJson.rows : undefined;
|
|
123
|
+
if (!Array.isArray(columns) || columns.length === 0) {
|
|
124
|
+
issues.push(issue({
|
|
125
|
+
ruleId: "DOCUMENT.BLOCK.TABLE_COLUMNS",
|
|
126
|
+
targetType: "block",
|
|
127
|
+
targetId: block.blockId,
|
|
128
|
+
message: "table block은 하나 이상의 column이 필요합니다."
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
if (!Array.isArray(rows)) {
|
|
132
|
+
issues.push(issue({
|
|
133
|
+
ruleId: "DOCUMENT.BLOCK.TABLE_ROWS",
|
|
134
|
+
targetType: "block",
|
|
135
|
+
targetId: block.blockId,
|
|
136
|
+
message: "table block은 rows 배열이 필요합니다."
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
if (isRecord(block.contentJson) && !nonEmptyString(block.contentJson.caption) && !nonEmptyString(block.contentJson.rawCaption)) {
|
|
140
|
+
issues.push(issue({
|
|
141
|
+
ruleId: "DOCUMENT.BLOCK.TABLE_CAPTION",
|
|
142
|
+
severity: "warning",
|
|
143
|
+
targetType: "block",
|
|
144
|
+
targetId: block.blockId,
|
|
145
|
+
message: "table block에 caption이 없습니다."
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (block.blockTypeCode === "figure" && block.contentJson !== undefined && isRecord(block.contentJson)) {
|
|
150
|
+
if (!nonEmptyString(block.contentJson.sourcePath) && !nonEmptyString(block.contentJson.path)) {
|
|
151
|
+
issues.push(issue({
|
|
152
|
+
ruleId: "DOCUMENT.BLOCK.FIGURE_SOURCE",
|
|
153
|
+
targetType: "block",
|
|
154
|
+
targetId: block.blockId,
|
|
155
|
+
message: "figure block은 sourcePath 또는 path가 필요합니다."
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
if (!nonEmptyString(block.contentJson.caption) && !nonEmptyString(block.contentJson.rawCaption) && !nonEmptyString(block.contentJson.altText)) {
|
|
159
|
+
issues.push(issue({
|
|
160
|
+
ruleId: "DOCUMENT.BLOCK.FIGURE_CAPTION",
|
|
161
|
+
severity: "warning",
|
|
162
|
+
targetType: "block",
|
|
163
|
+
targetId: block.blockId,
|
|
164
|
+
message: "figure block에 caption 또는 altText가 없습니다."
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (block.blockTypeCode === "list" && block.contentJson !== undefined) {
|
|
169
|
+
const depth = listDepth(block.contentJson);
|
|
170
|
+
if (depth > 3) {
|
|
171
|
+
issues.push(issue({
|
|
172
|
+
ruleId: "DOCUMENT.BLOCK.LIST_DEPTH",
|
|
173
|
+
targetType: "block",
|
|
174
|
+
targetId: block.blockId,
|
|
175
|
+
message: "list block의 중첩 깊이는 3을 넘을 수 없습니다.",
|
|
176
|
+
details: { depth }
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return issues;
|
|
181
|
+
}
|
|
182
|
+
export function validateDocument(db, documentId) {
|
|
183
|
+
const document = getDocument(db, documentId);
|
|
184
|
+
if (document === undefined) {
|
|
185
|
+
return {
|
|
186
|
+
valid: false,
|
|
187
|
+
issues: [
|
|
188
|
+
issue({
|
|
189
|
+
ruleId: "DOCUMENT.EXISTS",
|
|
190
|
+
targetType: "document",
|
|
191
|
+
targetId: documentId,
|
|
192
|
+
message: "문서를 찾을 수 없습니다."
|
|
193
|
+
})
|
|
194
|
+
]
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const taxonomyId = document.taxonomy_id;
|
|
198
|
+
const issues = [];
|
|
199
|
+
const nodes = listNodes(db, documentId);
|
|
200
|
+
const nodeById = new Map(nodes.map((node) => [node.nodeId, node]));
|
|
201
|
+
for (const node of nodes) {
|
|
202
|
+
if (!hasTaxonomyLevel(db, taxonomyId, node.nodeLevel)) {
|
|
203
|
+
issues.push(issue({
|
|
204
|
+
ruleId: "DOCUMENT.NODE.TAXONOMY_LEVEL",
|
|
205
|
+
targetType: "node",
|
|
206
|
+
targetId: node.nodeId,
|
|
207
|
+
message: `taxonomy에 정의되지 않은 node level입니다: ${node.nodeLevel}`,
|
|
208
|
+
details: { nodeLevel: node.nodeLevel, taxonomyId }
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
if (node.parentNodeId !== undefined) {
|
|
212
|
+
const parent = nodeById.get(node.parentNodeId);
|
|
213
|
+
if (parent === undefined) {
|
|
214
|
+
issues.push(issue({
|
|
215
|
+
ruleId: "DOCUMENT.NODE.PARENT_EXISTS",
|
|
216
|
+
targetType: "node",
|
|
217
|
+
targetId: node.nodeId,
|
|
218
|
+
message: "상위 node를 찾을 수 없습니다.",
|
|
219
|
+
details: { parentNodeId: node.parentNodeId }
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
else if (node.nodeLevel <= parent.nodeLevel) {
|
|
223
|
+
issues.push(issue({
|
|
224
|
+
ruleId: "DOCUMENT.NODE.PARENT_LEVEL",
|
|
225
|
+
targetType: "node",
|
|
226
|
+
targetId: node.nodeId,
|
|
227
|
+
message: "하위 node level은 상위 node level보다 커야 합니다.",
|
|
228
|
+
details: { parentLevel: parent.nodeLevel, nodeLevel: node.nodeLevel }
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
let ancestor = parent;
|
|
232
|
+
while (ancestor !== undefined) {
|
|
233
|
+
if (ancestor.tocVisibility === "exclude" && node.tocVisibility === "include") {
|
|
234
|
+
issues.push(issue({
|
|
235
|
+
ruleId: "DOCUMENT.TOC.EXCLUDED_ANCESTOR",
|
|
236
|
+
targetType: "node",
|
|
237
|
+
targetId: node.nodeId,
|
|
238
|
+
message: "상위 node가 TOC에서 제외된 경우 하위 node만 TOC에 포함할 수 없습니다.",
|
|
239
|
+
details: { ancestorNodeId: ancestor.nodeId }
|
|
240
|
+
}));
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
ancestor = ancestor.parentNodeId === undefined ? undefined : nodeById.get(ancestor.parentNodeId);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
for (const block of listBlocks(db, documentId)) {
|
|
248
|
+
issues.push(...validateBlockPayload(block));
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
valid: issues.every((validationIssue) => validationIssue.severity !== "error"),
|
|
252
|
+
issues
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/docs/build.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# agentic-domain-document 개발 및 빌드 매뉴얼
|
|
2
|
+
|
|
3
|
+
## 1. 목적
|
|
4
|
+
|
|
5
|
+
본 문서는 구축 담당자가 `agentic-domain-document` 패키지를 개발, 빌드, 로컬 검증하기 위해 알아야 하는 내용을 정리합니다.
|
|
6
|
+
|
|
7
|
+
## 2. 패키지 정보
|
|
8
|
+
|
|
9
|
+
| 항목 | 값 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| package | `agentic-domain-document` |
|
|
12
|
+
| current version | `0.1.0` |
|
|
13
|
+
| layer | Domain |
|
|
14
|
+
| workspace | `packages/agentic-domain-document` |
|
|
15
|
+
|
|
16
|
+
## 3. 소스 구조
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
packages/agentic-domain-document/
|
|
20
|
+
package.json
|
|
21
|
+
README.md
|
|
22
|
+
CHANGELOG.md
|
|
23
|
+
tsconfig.json
|
|
24
|
+
src/
|
|
25
|
+
index.ts
|
|
26
|
+
docs/
|
|
27
|
+
usage.md
|
|
28
|
+
configuration.md
|
|
29
|
+
build.md
|
|
30
|
+
publishing.md
|
|
31
|
+
delivery.md
|
|
32
|
+
operations.md
|
|
33
|
+
schema/
|
|
34
|
+
generated/
|
|
35
|
+
migrations.md
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 4. 개발 검증
|
|
39
|
+
|
|
40
|
+
repository root에서 실행합니다.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm run build --workspace agentic-domain-document
|
|
44
|
+
npm run typecheck --workspace agentic-domain-document
|
|
45
|
+
npm pack --workspace agentic-domain-document --dry-run --cache /private/tmp/agentic-npm-cache
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 5. Iteration 1 예정 검증
|
|
49
|
+
|
|
50
|
+
Document DB migration이 추가되면 다음 검증을 추가합니다.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run schema:doc:agentic-domain-document
|
|
54
|
+
npm run dev:test:agentic-domain-document
|
|
55
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# agentic-domain-document 설정 원칙
|
|
2
|
+
|
|
3
|
+
## 1. 목적
|
|
4
|
+
|
|
5
|
+
본 문서는 `agentic-domain-document`가 직접 소유하는 설정과 consumer project가 소유해야 하는 설정을 구분합니다.
|
|
6
|
+
|
|
7
|
+
## 2. 원칙
|
|
8
|
+
|
|
9
|
+
`agentic-domain-document`는 환경별 runtime 값을 직접 소유하지 않습니다.
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
agentic-domain-document
|
|
13
|
+
- document domain schema
|
|
14
|
+
- migration
|
|
15
|
+
- repository/service/validator
|
|
16
|
+
- fixture
|
|
17
|
+
- docs
|
|
18
|
+
|
|
19
|
+
consumer project
|
|
20
|
+
- runtime database path
|
|
21
|
+
- registry URL
|
|
22
|
+
- authentication
|
|
23
|
+
- environment variables
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 3. DB 기준
|
|
27
|
+
|
|
28
|
+
| 구분 | 기준 |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| logical schema | `document` |
|
|
31
|
+
| SQLite table prefix | `document_` |
|
|
32
|
+
| PostgreSQL mapping | 향후 별도 프로세스에서 적용 |
|
|
33
|
+
|
|
34
|
+
SQLite table prefix는 로컬 SQLite에 schema namespace가 없기 때문에 사용합니다.
|
package/docs/delivery.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# agentic-domain-document Delivery 매뉴얼
|
|
2
|
+
|
|
3
|
+
## 1. 목적
|
|
4
|
+
|
|
5
|
+
본 문서는 `agentic-domain-document` 패키지를 구축 환경에서 운영환경으로 전달할 때 필요한 package-specific delivery 기준을 정의합니다.
|
|
6
|
+
|
|
7
|
+
## 2. Delivery 범위
|
|
8
|
+
|
|
9
|
+
| 구분 | 포함 여부 | 설명 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| npm package publish | 포함 | hosted registry에 배포 |
|
|
12
|
+
| 운영환경 install 검증 | 포함 | group/proxy registry 기준 설치 확인 |
|
|
13
|
+
| source repository 전체 전달 | 제외 | npm package 기준 전달 |
|
|
14
|
+
| 인증 정보 전달 | 제외 | 환경별 `.npmrc` 또는 보안 정책으로 관리 |
|
|
15
|
+
| registry URL 하드코딩 | 제외 | 환경 설정으로 제공 |
|
|
16
|
+
|
|
17
|
+
## 3. Package에 포함되는 파일
|
|
18
|
+
|
|
19
|
+
Iteration 0 배포 패키지는 다음 파일을 포함해야 합니다.
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
package/
|
|
23
|
+
package.json
|
|
24
|
+
README.md
|
|
25
|
+
CHANGELOG.md
|
|
26
|
+
dist/
|
|
27
|
+
index.js
|
|
28
|
+
index.d.ts
|
|
29
|
+
docs/
|
|
30
|
+
usage.md
|
|
31
|
+
configuration.md
|
|
32
|
+
build.md
|
|
33
|
+
publishing.md
|
|
34
|
+
delivery.md
|
|
35
|
+
operations.md
|
|
36
|
+
schema/
|
|
37
|
+
migrations.md
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 4. 운영환경 전달 기준
|
|
41
|
+
|
|
42
|
+
운영환경에는 다음 정보만 전달합니다.
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
- package name: agentic-domain-document
|
|
46
|
+
- install version: 0.1.0
|
|
47
|
+
- 운영환경 NPM group/proxy registry 설정 방법
|
|
48
|
+
- 설치 및 import 확인 절차
|
|
49
|
+
- 문제 발생 시 확인 항목
|
|
50
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# agentic-domain-document 운영환경 매뉴얼
|
|
2
|
+
|
|
3
|
+
## 1. 목적
|
|
4
|
+
|
|
5
|
+
본 문서는 운영환경 담당자 또는 사용자가 `agentic-domain-document`를 설치하고 기본 import 상태를 확인하는 절차를 정의합니다.
|
|
6
|
+
|
|
7
|
+
## 2. 운영환경 전제
|
|
8
|
+
|
|
9
|
+
| 항목 | 기준 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| 네트워크 | Private Network / VDI |
|
|
12
|
+
| 외부 인터넷 | 사용 불가 |
|
|
13
|
+
| NPM Registry | 내부 NPM Registry proxy/group 사용 |
|
|
14
|
+
| package | `agentic-domain-document` |
|
|
15
|
+
|
|
16
|
+
## 3. Registry 확인
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm config get registry
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
운영환경에서는 내부 group/proxy registry가 출력되어야 합니다.
|
|
23
|
+
|
|
24
|
+
## 4. 설치
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install agentic-domain-document@0.6.0
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 5. 실행 확인
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
node -e "import('agentic-domain-document').then(m => console.log(m.agenticDomainDocumentPackage.logicalSchema))"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
기대 결과:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
document
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 6. 장애 확인
|
|
43
|
+
|
|
44
|
+
| 증상 | 확인 |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| package not found | 운영환경 group/proxy registry에 package가 노출되었는지 확인 |
|
|
47
|
+
| authentication required | 사용자 홈 `.npmrc` 인증 정보 확인 |
|
|
48
|
+
| public npm 접근 시도 | `npm config get registry` 결과 확인 |
|
|
49
|
+
| import 실패 | `node_modules/agentic-domain-document/dist/index.js` 존재 여부 확인 |
|
|
50
|
+
| 버전 불일치 | `npm view agentic-domain-document version` 결과 확인 |
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# agentic-domain-document Publishing 매뉴얼
|
|
2
|
+
|
|
3
|
+
## 1. 목적
|
|
4
|
+
|
|
5
|
+
본 문서는 `agentic-domain-document` 패키지를 NPM Registry에 publish하는 절차를 정의합니다.
|
|
6
|
+
|
|
7
|
+
## 2. 전제
|
|
8
|
+
|
|
9
|
+
| 항목 | 기준 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| package | `agentic-domain-document` |
|
|
12
|
+
| current version | `0.1.0` |
|
|
13
|
+
| workspace | `packages/agentic-domain-document` |
|
|
14
|
+
| publish registry | 구축 환경에서 제공 |
|
|
15
|
+
| install registry | 운영환경 또는 검증 환경에서 제공 |
|
|
16
|
+
|
|
17
|
+
## 3. Publish 전 검증
|
|
18
|
+
|
|
19
|
+
repository root에서 실행합니다.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run build --workspace agentic-domain-document
|
|
23
|
+
npm run typecheck --workspace agentic-domain-document
|
|
24
|
+
npm pack --workspace agentic-domain-document --dry-run --cache /private/tmp/agentic-npm-cache
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 4. Publish
|
|
28
|
+
|
|
29
|
+
`package.json`에는 registry URL을 고정하지 않습니다.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm publish --workspace agentic-domain-document --registry="${NPM_PUBLISH_REGISTRY_URL}"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Windows PowerShell:
|
|
36
|
+
|
|
37
|
+
```powershell
|
|
38
|
+
npm publish --workspace agentic-domain-document --registry="$env:NPM_PUBLISH_REGISTRY_URL"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 5. Publish 검증
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm view agentic-domain-document version --registry="${NPM_INSTALL_REGISTRY_URL}"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
기대 결과:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
0.1.0
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 6. 사용자 프로젝트 설치 검증
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
TEST_DIR=/private/tmp/agentic-domain-document-consumer-test
|
|
57
|
+
rm -rf "$TEST_DIR"
|
|
58
|
+
mkdir -p "$TEST_DIR"
|
|
59
|
+
cd "$TEST_DIR"
|
|
60
|
+
npm init -y
|
|
61
|
+
npm install agentic-domain-document@0.6.0 --registry="${NPM_INSTALL_REGISTRY_URL}" --prefer-online
|
|
62
|
+
node -e "import('agentic-domain-document').then(m => console.log(m.agenticDomainDocumentPackage.logicalSchema))"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
기대 결과:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
document
|
|
69
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# agentic-domain-document
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
Agentic Platform document domain database.
|
|
6
|
+
|
|
7
|
+
## Tables
|
|
8
|
+
|
|
9
|
+
| Name | Columns | Comment | Type |
|
|
10
|
+
| ----------------------------------------------------------------- | ------- | ---------------------------------------------------------------- | ----- |
|
|
11
|
+
| [document_code_groups](document_code_groups.md) | 7 | 코드 그룹을 정의한다. | table |
|
|
12
|
+
| [document_codes](document_codes.md) | 9 | 코드 그룹별 코드 값을 정의한다. | table |
|
|
13
|
+
| [document_node_taxonomies](document_node_taxonomies.md) | 9 | 문서 유형별 node level 해석 정책을 정의한다. | table |
|
|
14
|
+
| [document_node_taxonomy_levels](document_node_taxonomy_levels.md) | 9 | taxonomy별 node level 라벨, 번호 정책, counter scope를 정의한다. | table |
|
|
15
|
+
| [document_documents](document_documents.md) | 15 | 문서 단위 메타데이터, 작성자, taxonomy, 상태를 관리한다. | table |
|
|
16
|
+
| [document_nodes](document_nodes.md) | 13 | 문서의 계층 node tree를 관리한다. | table |
|
|
17
|
+
| [document_contents](document_contents.md) | 6 | 특정 document node에 붙는 block collection을 관리한다. | table |
|
|
18
|
+
| [document_blocks](document_blocks.md) | 9 | 문서 본문 표현 block을 관리한다. | table |
|
|
19
|
+
| [document_annotations](document_annotations.md) | 14 | 문서 본문 밖의 note annotation을 관리한다. | table |
|
|
20
|
+
| [document_revisions](document_revisions.md) | 11 | 하나 이상의 변경 이벤트를 묶는 의미 있는 변경 단위를 관리한다. | table |
|
|
21
|
+
| [document_change_events](document_change_events.md) | 13 | revision에 속하는 로그성 변경 이벤트를 관리한다. | table |
|
|
22
|
+
| [document_versions](document_versions.md) | 13 | 검토/승인/배포 기준본 snapshot을 관리한다. | table |
|
|
23
|
+
|
|
24
|
+
## Relations
|
|
25
|
+
|
|
26
|
+

|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
> Generated by [tbls](https://github.com/k1LoW/tbls)
|