@soddong/agentic-application-methodology-workbench 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +115 -0
  3. package/dist/artifact-standard-document-loader.d.ts +35 -0
  4. package/dist/artifact-standard-document-loader.d.ts.map +1 -0
  5. package/dist/artifact-standard-document-loader.js +363 -0
  6. package/dist/artifact-standard-document-loader.js.map +1 -0
  7. package/dist/authoring-draft-store.d.ts +8 -0
  8. package/dist/authoring-draft-store.d.ts.map +1 -0
  9. package/dist/authoring-draft-store.js +232 -0
  10. package/dist/authoring-draft-store.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +54 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/index.d.ts +17 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +12 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/seed-view-model-loader.d.ts +9 -0
  20. package/dist/seed-view-model-loader.d.ts.map +1 -0
  21. package/dist/seed-view-model-loader.js +359 -0
  22. package/dist/seed-view-model-loader.js.map +1 -0
  23. package/dist/server/workbench-server.d.ts +22 -0
  24. package/dist/server/workbench-server.d.ts.map +1 -0
  25. package/dist/server/workbench-server.js +1553 -0
  26. package/dist/server/workbench-server.js.map +1 -0
  27. package/dist/task-authoring-source.d.ts +9 -0
  28. package/dist/task-authoring-source.d.ts.map +1 -0
  29. package/dist/task-authoring-source.js +163 -0
  30. package/dist/task-authoring-source.js.map +1 -0
  31. package/dist/view-models.d.ts +211 -0
  32. package/dist/view-models.d.ts.map +1 -0
  33. package/dist/view-models.js +2 -0
  34. package/dist/view-models.js.map +1 -0
  35. package/dist/workbench-config.d.ts +37 -0
  36. package/dist/workbench-config.d.ts.map +1 -0
  37. package/dist/workbench-config.js +110 -0
  38. package/dist/workbench-config.js.map +1 -0
  39. package/docs/build.md +14 -0
  40. package/docs/configuration.md +65 -0
  41. package/docs/delivery.md +15 -0
  42. package/docs/operations.md +28 -0
  43. package/docs/publishing.md +19 -0
  44. package/docs/usage.md +113 -0
  45. package/package.json +26 -0
  46. package/schemas/workbench-config.schema.json +112 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ - Add reusable methodology authoring Workbench application package skeleton.
6
+ - Add local HTTP Workbench server and static UI shell.
7
+ - Add `ui/workbench.config.json` contract support for methodology seed bundle projects.
8
+ - Add authoring draft store for task/step draft validation without mutating seed JSON.
9
+ - Add Step draft editor UI and authoring draft API endpoints.
10
+ - Add Step draft apply-plan and explicit apply workflow for seed `steps.json`.
11
+ - Add Task Step authoring source scaffold command and `authoringSources.tasksRoot` config.
12
+ - Refine Workbench tree header, hierarchy badge, Authoring/Tutorial mode, and artifact viewer spacing styles.
13
+ - Move Task/Step sequence numbers into right-side hierarchy badges such as `작업 01` and `절차 01`.
14
+ - Add lifecycle model landing page and Phase tab navigation for the methodology tree panel.
15
+ - Add seed-project smoke test for Workbench API, shell, and UI asset contracts.
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # @soddong/agentic-application-methodology-workbench
2
+
3
+ `@soddong/agentic-application-methodology-workbench`는 methodology seed bundle project가 사용하는 reusable authoring workbench application package다.
4
+
5
+ Platform은 Workbench server, UI shell, config contract를 제공한다. 개별 Bundle/Seed project는 `ui/workbench.config.json`, seed files, UI planning docs, scenario/step asset/sample directories를 제공한다.
6
+
7
+ ## Run
8
+
9
+ ```bash
10
+ npm run build -w @soddong/agentic-application-methodology-workbench
11
+ npx --no-install agentic-methodology-workbench --project /path/to/methodology-seed-project
12
+ ```
13
+
14
+ 기본 URL은 다음과 같다.
15
+
16
+ ```text
17
+ http://127.0.0.1:4783
18
+ ```
19
+
20
+ `--project`는 `ui/workbench.config.json`을 가진 Bundle/Seed project root여야 한다. Platform repository root에서 실행하면 package fallback config가 적용되어 실제 방법론 tree와 산출물 표준이 비어 보일 수 있다.
21
+
22
+ ## Config
23
+
24
+ Workbench는 대상 project의 다음 파일을 읽는다.
25
+
26
+ ```text
27
+ ui/workbench.config.json
28
+ ```
29
+
30
+ schema는 `schemas/workbench-config.schema.json`에 둔다.
31
+
32
+ ## Methodology Hierarchy
33
+
34
+ Workbench가 표시하고 authoring하는 방법론 표준 계층은 다음과 같다.
35
+
36
+ ```text
37
+ Lifecycle 생애주기
38
+ -> Phase 페이즈
39
+ -> Process 프로세스
40
+ -> Stage 단계
41
+ -> Activity 활동
42
+ -> Task 작업
43
+ -> Step 절차
44
+ ```
45
+
46
+ `Phase`는 `페이즈`, `Stage`는 `단계`로 표기해 두 계층의 의미를 분리한다.
47
+
48
+ ## Landing And Phase Tabs
49
+
50
+ Workbench의 첫 화면은 대상 Bundle/Seed project의 `lifecycle.json`, `phases.json`, `processes.json`를 기준으로 lifecycle model overview를 표시한다. 사용자가 lifecycle model을 선택하면 Workbench shell로 진입한다.
51
+
52
+ Workbench shell의 좌측 tree 패널 상단은 고정 `Process` 제목이 아니라 Phase tab으로 표시한다. Phase tab 선택 시 `/api/workbench/phases/:phaseCode`를 다시 로딩하고 해당 Phase의 Stage, Activity, Task, Step tree를 표시한다.
53
+
54
+ ## Workbench Modes
55
+
56
+ Authoring과 Tutorial은 별도 UI가 아니라 하나의 Workbench shell에서 전환되는 모드다.
57
+
58
+ | Mode | 대상 | 동작 |
59
+ | --- | --- | --- |
60
+ | `Authoring` | Bundle/Seed 작성자 | Task/Step 구조, 산출물 표준, 선택 Step editor detail을 함께 표시한다. |
61
+ | `Tutorial` | Execution 또는 조회 사용자 | 동일한 tree와 산출물 표준을 read-only로 표시하고 Step editor detail은 숨긴다. |
62
+
63
+ Execution project에서 사용하는 경우 `experienceMode`를 `execution`으로 설정해 Tutorial read-only 경험을 기본값으로 둔다. Bundle/Seed authoring config는 `authoring`을 사용한다.
64
+
65
+ ## Task Step Authoring Source
66
+
67
+ Task의 Step 정의 원천은 `methodology-authoring/tasks/{taskCode}/steps/{stepCode}` 아래에 둔다. seed `steps.json`은 배포용 materialized 결과로 보고, Workbench draft/apply workflow를 통해 반영한다.
68
+
69
+ ```bash
70
+ npx --no-install agentic-methodology-workbench scaffold-task-source \
71
+ --project /path/to/methodology-seed-project \
72
+ --task <task-code>
73
+ ```
74
+
75
+ ## ViewModels And Authoring Drafts
76
+
77
+ Workbench는 대상 project의 seed JSON을 읽어 ViewModel API를 제공한다. Authoring 변경은 먼저 `methodology-authoring/drafts` 또는 config의 `authoringSources.draftsRoot` 아래에 draft JSON으로 저장한다. 원본 seed 반영은 검증된 draft에 대해 명시적인 apply action으로만 수행한다.
78
+
79
+ | Endpoint | ViewModel |
80
+ | --- | --- |
81
+ | `/api/workbench/lifecycle` | `LifecycleOverviewVM` |
82
+ | `/api/workbench/phases` | `PhaseDetailVM` |
83
+ | `/api/workbench/activities` | `ActivityWorkbenchVM` |
84
+ | `/api/workbench/activities/:activityCode/authoring` | `ActivityAuthoringVM` |
85
+ | `/api/workbench/artifacts` | `ArtifactStandardVM` |
86
+ | `/api/workbench/governance` | `GovernanceVM` |
87
+
88
+ | Endpoint | Method | 목적 |
89
+ | --- | --- | --- |
90
+ | `/api/workbench/authoring/steps/:stepCode/draft` | `PUT` | Step title, execution mode, instruction, script path draft 저장 |
91
+ | `/api/workbench/authoring/steps/:stepCode/apply-plan` | `GET` | Step draft를 seed에 반영할 때의 변경 필드 preview |
92
+ | `/api/workbench/authoring/steps/:stepCode/apply` | `POST` | 검증된 Step draft를 seed `steps.json`에 반영 |
93
+ | `/api/workbench/authoring/tasks/:taskCode/draft` | `PUT` | Task-level authoring draft 저장 |
94
+
95
+ ## Verification
96
+
97
+ 개발 중에는 실제 Bundle/Seed project를 대상으로 build, typecheck, smoke test를 함께 수행한다.
98
+
99
+ ```bash
100
+ npm run build -w @soddong/agentic-application-methodology-workbench
101
+ npm run typecheck -w @soddong/agentic-application-methodology-workbench
102
+ npm run smoke -w @soddong/agentic-application-methodology-workbench -- --project /path/to/methodology-seed-project
103
+ ```
104
+
105
+ smoke test는 API/ViewModel, HTML shell, CSS/JS 계약을 확인한다. 브라우저 시각 품질은 별도 화면 검수로 확인한다.
106
+
107
+ ## Responsibility Boundary
108
+
109
+ | 구분 | 담당 |
110
+ | --- | --- |
111
+ | reusable workbench UI/server/config contract | 본 패키지 |
112
+ | methodology-specific seed/config/scenario/sample | methodology bundle project |
113
+ | runtime DB, run, log, output | `@soddong/agentic-runtime` |
114
+ | methodology definition DB/API | `@soddong/agentic-domain-methodology` |
115
+ | artifact standard DB/API | `@soddong/agentic-domain-artifact-standard` |
@@ -0,0 +1,35 @@
1
+ import type { WorkbenchProject } from "./workbench-config.js";
2
+ export interface ArtifactStandardDocumentsVM {
3
+ readonly artifactCode: string;
4
+ readonly docsRoot: string;
5
+ readonly metrics: ArtifactStandardDocumentMetricsVM;
6
+ readonly documents: ArtifactStandardDocumentSetVM;
7
+ }
8
+ export interface ArtifactStandardDocumentMetricsVM {
9
+ readonly sectionCount: number;
10
+ readonly blueprintNodeCount: number;
11
+ readonly tableSchemaCount: number;
12
+ readonly validationRuleCount: number;
13
+ }
14
+ export interface ArtifactStandardDocumentSetVM {
15
+ readonly conceptTechnique: ArtifactStandardDocumentVM;
16
+ readonly template: ArtifactStandardDocumentVM;
17
+ readonly sample: ArtifactStandardDocumentVM;
18
+ readonly formatMetadata: ArtifactStandardDocumentVM;
19
+ readonly commonConceptFormat: ArtifactStandardDocumentVM;
20
+ readonly commonConceptTemplate: ArtifactStandardDocumentVM;
21
+ readonly commonConceptSample: ArtifactStandardDocumentVM;
22
+ }
23
+ export interface ArtifactStandardDocumentVM {
24
+ readonly documentId: string;
25
+ readonly title: string;
26
+ readonly sourceKind: "generated" | "file" | "missing";
27
+ readonly relativePath?: string;
28
+ readonly sourcePath?: string;
29
+ readonly exists: boolean;
30
+ readonly markdown?: string;
31
+ readonly html: string;
32
+ }
33
+ export declare function markdownToHtml(markdown: string): string;
34
+ export declare function loadArtifactStandardDocuments(project: WorkbenchProject, artifactCode: string): ArtifactStandardDocumentsVM;
35
+ //# sourceMappingURL=artifact-standard-document-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-standard-document-loader.d.ts","sourceRoot":"","sources":["../src/artifact-standard-document-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAW9D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;CACnD;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,0BAA0B,CAAC;IACpD,QAAQ,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;IACzD,QAAQ,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;CAC1D;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAqFD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6HvD;AAoJD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,GACnB,2BAA2B,CA+D7B"}
@@ -0,0 +1,363 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { relative, resolve } from "node:path";
3
+ const artifactStandardProjectionDocumentLabels = {
4
+ CONCEPT_TECHNIQUE: "개념 및 기법서",
5
+ TEMPLATE: "서식 및 가이드",
6
+ SAMPLE: "예시"
7
+ };
8
+ function isRecord(value) {
9
+ return typeof value === "object" && value !== null;
10
+ }
11
+ function readJsonArray(path) {
12
+ if (!existsSync(path)) {
13
+ return [];
14
+ }
15
+ const value = JSON.parse(readFileSync(path, "utf8"));
16
+ return Array.isArray(value) ? value.filter(isRecord) : [];
17
+ }
18
+ function stringValue(record, key) {
19
+ const value = record?.[key];
20
+ return typeof value === "string" && value.length > 0 ? value : undefined;
21
+ }
22
+ function numberValue(record, key) {
23
+ const value = record?.[key];
24
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
25
+ }
26
+ function booleanValue(record, key) {
27
+ const value = record?.[key];
28
+ return typeof value === "boolean" ? value : false;
29
+ }
30
+ function recordArray(value) {
31
+ return Array.isArray(value) ? value.filter(isRecord) : [];
32
+ }
33
+ function markdownList(items, emptyText = "등록된 항목 없음") {
34
+ const values = items.map((item) => String(item ?? "").trim()).filter((item) => item.length > 0);
35
+ if (values.length === 0) {
36
+ return `- ${emptyText}`;
37
+ }
38
+ return values.map((item) => `- ${item}`).join("\n");
39
+ }
40
+ function markdownCell(value) {
41
+ return String(value ?? "")
42
+ .replaceAll("|", "\\|")
43
+ .replaceAll("\n", "<br>");
44
+ }
45
+ function markdownTable(headers, rows) {
46
+ return [
47
+ `| ${headers.map(markdownCell).join(" | ")} |`,
48
+ `| ${headers.map(() => "---").join(" | ")} |`,
49
+ ...rows.map((row) => `| ${row.map(markdownCell).join(" | ")} |`)
50
+ ].join("\n");
51
+ }
52
+ function html(value) {
53
+ return String(value ?? "")
54
+ .replaceAll("&", "&amp;")
55
+ .replaceAll("<", "&lt;")
56
+ .replaceAll(">", "&gt;")
57
+ .replaceAll('"', "&quot;")
58
+ .replaceAll("'", "&#39;");
59
+ }
60
+ function inlineMarkdownToHtml(value) {
61
+ return html(value)
62
+ .replace(/`([^`]+)`/g, "<code>$1</code>")
63
+ .replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
64
+ }
65
+ function markdownTableToHtml(lines) {
66
+ if (lines.length < 2) {
67
+ return "";
68
+ }
69
+ const parseRow = (line) => line
70
+ .trim()
71
+ .replace(/^\|/, "")
72
+ .replace(/\|$/, "")
73
+ .split("|")
74
+ .map((cell) => cell.trim().replaceAll("\\|", "|"));
75
+ const headers = parseRow(lines[0]);
76
+ const rows = lines.slice(2).map(parseRow);
77
+ return `<div class="document-table-wrap"><table class="document-table"><thead><tr>${headers.map((header) => `<th>${inlineMarkdownToHtml(header)}</th>`).join("")}</tr></thead><tbody>${rows.map((row) => `<tr>${headers.map((_, index) => `<td>${inlineMarkdownToHtml(row[index] ?? "")}</td>`).join("")}</tr>`).join("")}</tbody></table></div>`;
78
+ }
79
+ export function markdownToHtml(markdown) {
80
+ const lines = String(markdown ?? "").split(/\r?\n/);
81
+ const output = [];
82
+ let index = 0;
83
+ let inList = false;
84
+ let blockquoteLines = [];
85
+ let inCode = false;
86
+ let codeLines = [];
87
+ const closeList = () => {
88
+ if (inList) {
89
+ output.push("</ul>");
90
+ inList = false;
91
+ }
92
+ };
93
+ const closeBlockquote = () => {
94
+ if (blockquoteLines.length === 0) {
95
+ return;
96
+ }
97
+ const normalizedLines = blockquoteLines
98
+ .map((line) => line.replace(/^-\s+/, "").trim())
99
+ .filter((line) => line.length > 0);
100
+ const isGuidanceCallout = normalizedLines.some((line) => line === "작성 가이드" || line.startsWith("작성 가이드:"));
101
+ if (isGuidanceCallout) {
102
+ const bodyLines = normalizedLines
103
+ .filter((line) => line !== "작성 가이드")
104
+ .map((line) => line.replace(/^작성 가이드:\s*/, "").trim())
105
+ .filter((line) => line.length > 0);
106
+ output.push(`<aside class="document-callout guidance-callout"><div class="document-callout-title">작성 가이드</div>${bodyLines.map((line) => `<p>${inlineMarkdownToHtml(line)}</p>`).join("")}</aside>`);
107
+ }
108
+ else {
109
+ output.push(`<blockquote>${normalizedLines.map((line) => `<p>${inlineMarkdownToHtml(line)}</p>`).join("")}</blockquote>`);
110
+ }
111
+ blockquoteLines = [];
112
+ };
113
+ while (index < lines.length) {
114
+ const line = lines[index] ?? "";
115
+ const trimmed = line.trim();
116
+ if (trimmed.startsWith("```")) {
117
+ closeList();
118
+ closeBlockquote();
119
+ if (inCode) {
120
+ output.push(`<pre><code>${html(codeLines.join("\n"))}</code></pre>`);
121
+ codeLines = [];
122
+ inCode = false;
123
+ }
124
+ else {
125
+ inCode = true;
126
+ }
127
+ index += 1;
128
+ continue;
129
+ }
130
+ if (inCode) {
131
+ codeLines.push(line);
132
+ index += 1;
133
+ continue;
134
+ }
135
+ if (trimmed.startsWith("|") && lines[index + 1]?.trim().startsWith("|") && /^[-|\s:]+$/.test(lines[index + 1]?.trim() ?? "")) {
136
+ closeList();
137
+ closeBlockquote();
138
+ const tableLines = [line, lines[index + 1] ?? ""];
139
+ index += 2;
140
+ while (index < lines.length && lines[index]?.trim().startsWith("|")) {
141
+ tableLines.push(lines[index] ?? "");
142
+ index += 1;
143
+ }
144
+ output.push(markdownTableToHtml(tableLines));
145
+ continue;
146
+ }
147
+ if (trimmed.length === 0) {
148
+ closeList();
149
+ closeBlockquote();
150
+ index += 1;
151
+ continue;
152
+ }
153
+ const headingMatch = trimmed.match(/^(#{1,6})\s+(.+)$/);
154
+ if (headingMatch) {
155
+ closeList();
156
+ closeBlockquote();
157
+ const level = Math.min((headingMatch[1]?.length ?? 1) + 1, 6);
158
+ output.push(`<h${level}>${inlineMarkdownToHtml(headingMatch[2] ?? "")}</h${level}>`);
159
+ index += 1;
160
+ continue;
161
+ }
162
+ if (trimmed.startsWith(">")) {
163
+ closeList();
164
+ const quote = trimmed.replace(/^>\s?/, "");
165
+ blockquoteLines.push(quote);
166
+ index += 1;
167
+ continue;
168
+ }
169
+ if (trimmed.startsWith("- ")) {
170
+ closeBlockquote();
171
+ if (!inList) {
172
+ output.push("<ul>");
173
+ inList = true;
174
+ }
175
+ output.push(`<li>${inlineMarkdownToHtml(trimmed.slice(2))}</li>`);
176
+ index += 1;
177
+ continue;
178
+ }
179
+ closeList();
180
+ closeBlockquote();
181
+ output.push(`<p>${inlineMarkdownToHtml(trimmed)}</p>`);
182
+ index += 1;
183
+ }
184
+ closeList();
185
+ closeBlockquote();
186
+ if (inCode) {
187
+ output.push(`<pre><code>${html(codeLines.join("\n"))}</code></pre>`);
188
+ }
189
+ return output.join("\n");
190
+ }
191
+ function generatedDocsRoot(project) {
192
+ return resolve(project.projectRoot, project.config.authoringSources?.generatedDocsRoot ?? `docs/generated/${project.config.bundleCode}`);
193
+ }
194
+ function seedRoot(project) {
195
+ return resolve(project.projectRoot, project.config.seedRoot);
196
+ }
197
+ function readDocument(project, docsRoot, documentId, title, relativePath, options = {}) {
198
+ const sourcePath = resolve(docsRoot, relativePath);
199
+ if (!existsSync(sourcePath)) {
200
+ return {
201
+ documentId,
202
+ title,
203
+ sourceKind: "missing",
204
+ relativePath,
205
+ sourcePath,
206
+ exists: false,
207
+ html: `<p class="artifact-empty">Generated document is missing: ${html(relative(project.projectRoot, sourcePath))}</p>`
208
+ };
209
+ }
210
+ const sourceMarkdown = readFileSync(sourcePath, "utf8");
211
+ const markdown = options.projectionTitle
212
+ ? replaceFirstMarkdownHeading(sourceMarkdown, options.projectionTitle)
213
+ : sourceMarkdown;
214
+ return {
215
+ documentId,
216
+ title,
217
+ sourceKind: "file",
218
+ relativePath,
219
+ sourcePath,
220
+ exists: true,
221
+ markdown,
222
+ html: markdownToHtml(markdown)
223
+ };
224
+ }
225
+ function projectionTitle(documentKind, artifactStandardName) {
226
+ return `(${artifactStandardProjectionDocumentLabels[documentKind]}) ${artifactStandardName}`;
227
+ }
228
+ function replaceFirstMarkdownHeading(markdown, title) {
229
+ const normalizedTitle = `# ${title}`;
230
+ const lines = markdown.split(/\r?\n/);
231
+ const headingIndex = lines.findIndex((line) => /^#\s+/.test(line.trim()));
232
+ if (headingIndex < 0) {
233
+ return `${normalizedTitle}\n\n${markdown}`;
234
+ }
235
+ lines[headingIndex] = normalizedTitle;
236
+ return lines.join("\n");
237
+ }
238
+ function sortByOrder(items, key) {
239
+ return [...items].sort((left, right) => numberValue(left, key) - numberValue(right, key));
240
+ }
241
+ function renderTutorialConceptTechniqueDocument(context) {
242
+ const standard = context.standard ?? {};
243
+ const concept = isRecord(standard.concept) ? standard.concept : {};
244
+ const artifactTitle = stringValue(context.output, "artifactStandardName")
245
+ ?? stringValue(standard, "artifactStandardName")
246
+ ?? stringValue(context.activity, "activityName")
247
+ ?? "산출물";
248
+ const principles = Array.isArray(concept.principles) ? concept.principles : [];
249
+ const techniques = [
250
+ ...principles,
251
+ ...context.steps.slice(0, 5).map((step) => stringValue(step, "stepTitle") ?? stringValue(step, "stepInstruction") ?? stringValue(step, "stepName"))
252
+ ].filter((item) => typeof item === "string" && item.length > 0);
253
+ const scope = Array.isArray(concept.scope) && concept.scope.length > 0
254
+ ? concept.scope
255
+ : [
256
+ `${artifactTitle} 작성 범위와 목적`,
257
+ "입력 Context, 작성 절차, 검증 기준 간 trace 관계",
258
+ "후속 Activity가 재사용할 기준선, 제약, 판단 근거"
259
+ ];
260
+ const reviewQuestions = Array.isArray(context.activity?.reviewQuestions) ? context.activity.reviewQuestions : [];
261
+ return `# ${projectionTitle("CONCEPT_TECHNIQUE", artifactTitle)}
262
+
263
+ ## 1. 개요
264
+
265
+ ${stringValue(standard, "summary") ?? stringValue(standard, "description") ?? stringValue(context.activity, "description") ?? ""}
266
+
267
+ ## 2. 적용 Activity
268
+
269
+ ${markdownTable(["항목", "값"], [
270
+ ["Stage", stringValue(context.stage, "stageName") ?? stringValue(context.activity, "stageCode") ?? ""],
271
+ ["Activity", stringValue(context.activity, "activityName") ?? ""],
272
+ ["Primary Output", stringValue(context.output, "artifactStandardName") ?? ""]
273
+ ])}
274
+
275
+ ## 3. 핵심 개념
276
+
277
+ ${markdownList(scope)}
278
+
279
+ ## 4. 수행 기법
280
+
281
+ ${markdownList(techniques)}
282
+
283
+ ## 5. 작성 시 유의사항
284
+
285
+ ${markdownList(reviewQuestions)}`;
286
+ }
287
+ function validationRuleCount(standard) {
288
+ const validationStandard = isRecord(standard?.validationStandard) ? standard.validationStandard : {};
289
+ const ruleSets = recordArray(validationStandard.validationRuleSets);
290
+ return ruleSets.flatMap((ruleSet) => recordArray(ruleSet.rules)).length;
291
+ }
292
+ function documentMetrics(standard) {
293
+ const format = isRecord(standard?.format) ? standard.format : {};
294
+ const templateSections = recordArray(format.templateSections);
295
+ const documentBlueprint = isRecord(format.documentBlueprint) ? format.documentBlueprint : {};
296
+ return {
297
+ sectionCount: templateSections.length,
298
+ blueprintNodeCount: recordArray(documentBlueprint.nodes).length,
299
+ tableSchemaCount: recordArray(format.tableSchemas).length,
300
+ validationRuleCount: validationRuleCount(standard)
301
+ };
302
+ }
303
+ export function loadArtifactStandardDocuments(project, artifactCode) {
304
+ const docsRoot = generatedDocsRoot(project);
305
+ const root = seedRoot(project);
306
+ const standards = readJsonArray(resolve(root, "artifact-standards.json"));
307
+ const requirements = readJsonArray(resolve(root, "activity-artifact-requirements.json"));
308
+ const activities = readJsonArray(resolve(root, "activities.json"));
309
+ const stages = readJsonArray(resolve(root, "stages.json"));
310
+ const steps = readJsonArray(resolve(root, "steps.json"));
311
+ const standard = standards.find((item) => stringValue(item, "artifactStandardCode") === artifactCode);
312
+ const output = requirements.find((item) => {
313
+ return stringValue(item, "artifactStandardCode") === artifactCode
314
+ && stringValue(item, "requirementRoleCode") === "output"
315
+ && booleanValue(item, "isPrimary");
316
+ }) ?? requirements.find((item) => stringValue(item, "artifactStandardCode") === artifactCode);
317
+ const activityCode = stringValue(output, "activityCode");
318
+ const activity = activities.find((item) => stringValue(item, "activityCode") === activityCode);
319
+ const stage = stages.find((item) => stringValue(item, "stageCode") === stringValue(activity, "stageCode"));
320
+ const activitySteps = sortByOrder(steps.filter((item) => stringValue(item, "activityCode") === activityCode), "sortOrder");
321
+ const conceptMarkdown = renderTutorialConceptTechniqueDocument({
322
+ standard,
323
+ stage,
324
+ activity,
325
+ output,
326
+ steps: activitySteps
327
+ });
328
+ const standardRoot = `artifact-standards/${artifactCode}`;
329
+ const commonConceptRoot = "artifact-standard-common/concept-technique";
330
+ const artifactTitle = stringValue(output, "artifactStandardName")
331
+ ?? stringValue(standard, "artifactStandardName")
332
+ ?? stringValue(activity, "activityName")
333
+ ?? artifactCode;
334
+ const conceptTitle = projectionTitle("CONCEPT_TECHNIQUE", artifactTitle);
335
+ const templateTitle = projectionTitle("TEMPLATE", artifactTitle);
336
+ const sampleTitle = projectionTitle("SAMPLE", artifactTitle);
337
+ return {
338
+ artifactCode,
339
+ docsRoot,
340
+ metrics: documentMetrics(standard),
341
+ documents: {
342
+ conceptTechnique: {
343
+ documentId: "concept-technique",
344
+ title: conceptTitle,
345
+ sourceKind: "generated",
346
+ exists: true,
347
+ markdown: conceptMarkdown,
348
+ html: markdownToHtml(conceptMarkdown)
349
+ },
350
+ template: readDocument(project, docsRoot, "template", templateTitle, `${standardRoot}/template.document.md`, {
351
+ projectionTitle: templateTitle
352
+ }),
353
+ sample: readDocument(project, docsRoot, "sample", sampleTitle, `${standardRoot}/sample.document.md`, {
354
+ projectionTitle: sampleTitle
355
+ }),
356
+ formatMetadata: readDocument(project, docsRoot, "format-metadata", "산출물 서식 메타데이터", `${standardRoot}/format.metadata.md`),
357
+ commonConceptFormat: readDocument(project, docsRoot, "common-concept-format", "공통 개념 서식 메타데이터", `${commonConceptRoot}/format.metadata.md`),
358
+ commonConceptTemplate: readDocument(project, docsRoot, "common-concept-template", "공통 개념 서식 및 가이드", `${commonConceptRoot}/template.document.md`),
359
+ commonConceptSample: readDocument(project, docsRoot, "common-concept-sample", "공통 개념 예시", `${commonConceptRoot}/sample.document.md`)
360
+ }
361
+ };
362
+ }
363
+ //# sourceMappingURL=artifact-standard-document-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-standard-document-loader.js","sourceRoot":"","sources":["../src/artifact-standard-document-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { WorkbenchProject } from "./workbench-config.js";
2
+ import type { ActivityAuthoringVM, AuthoringApplyPlanVM, AuthoringApplyResultVM, AuthoringDraftSummaryVM, AuthoringDraftTargetKind } from "./view-models.js";
3
+ export declare function loadAuthoringDraft(project: WorkbenchProject, targetKind: AuthoringDraftTargetKind, targetCode: string): AuthoringDraftSummaryVM | undefined;
4
+ export declare function saveAuthoringDraft(project: WorkbenchProject, targetKind: AuthoringDraftTargetKind, targetCode: string, value: unknown): AuthoringDraftSummaryVM;
5
+ export declare function loadActivityAuthoring(project: WorkbenchProject, activityCode?: string): ActivityAuthoringVM;
6
+ export declare function planStepDraftApply(project: WorkbenchProject, stepCode: string): AuthoringApplyPlanVM;
7
+ export declare function applyStepDraftToSeed(project: WorkbenchProject, stepCode: string): AuthoringApplyResultVM;
8
+ //# sourceMappingURL=authoring-draft-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-draft-store.d.ts","sourceRoot":"","sources":["../src/authoring-draft-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EACV,mBAAmB,EAEnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EAGzB,MAAM,kBAAkB,CAAC;AA6H1B,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,wBAAwB,EACpC,UAAU,EAAE,MAAM,GACjB,uBAAuB,GAAG,SAAS,CAErC;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,wBAAwB,EACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,uBAAuB,CAgCzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAc3G;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAwDpG;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAuCxG"}