timsquad 3.3.0 → 3.5.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 (196) hide show
  1. package/README.ko.md +288 -0
  2. package/README.md +158 -151
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.d.ts.map +1 -0
  5. package/dist/commands/compile.js +170 -0
  6. package/dist/commands/compile.js.map +1 -0
  7. package/dist/commands/daemon.d.ts.map +1 -1
  8. package/dist/commands/daemon.js +95 -5
  9. package/dist/commands/daemon.js.map +1 -1
  10. package/dist/commands/full.js +1 -0
  11. package/dist/commands/full.js.map +1 -1
  12. package/dist/commands/git/pr.js +6 -5
  13. package/dist/commands/git/pr.js.map +1 -1
  14. package/dist/commands/git/release.js +2 -7
  15. package/dist/commands/git/release.js.map +1 -1
  16. package/dist/commands/improve.js +2 -2
  17. package/dist/commands/improve.js.map +1 -1
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +12 -3
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/log.d.ts.map +1 -1
  22. package/dist/commands/log.js +2 -2
  23. package/dist/commands/log.js.map +1 -1
  24. package/dist/commands/metrics.d.ts.map +1 -1
  25. package/dist/commands/metrics.js +6 -2
  26. package/dist/commands/metrics.js.map +1 -1
  27. package/dist/commands/retro.js +8 -8
  28. package/dist/commands/retro.js.map +1 -1
  29. package/dist/commands/session.js +3 -3
  30. package/dist/commands/session.js.map +1 -1
  31. package/dist/commands/skills.d.ts +12 -0
  32. package/dist/commands/skills.d.ts.map +1 -0
  33. package/dist/commands/skills.js +228 -0
  34. package/dist/commands/skills.js.map +1 -0
  35. package/dist/commands/status.js +1 -1
  36. package/dist/commands/status.js.map +1 -1
  37. package/dist/commands/upgrade.d.ts.map +1 -1
  38. package/dist/commands/upgrade.js +23 -1
  39. package/dist/commands/upgrade.js.map +1 -1
  40. package/dist/daemon/entry.js +3 -3
  41. package/dist/daemon/entry.js.map +1 -1
  42. package/dist/daemon/event-queue.d.ts.map +1 -1
  43. package/dist/daemon/event-queue.js +2 -2
  44. package/dist/daemon/event-queue.js.map +1 -1
  45. package/dist/daemon/index.d.ts +4 -2
  46. package/dist/daemon/index.d.ts.map +1 -1
  47. package/dist/daemon/index.js +214 -52
  48. package/dist/daemon/index.js.map +1 -1
  49. package/dist/daemon/jsonl-watcher.d.ts +1 -0
  50. package/dist/daemon/jsonl-watcher.d.ts.map +1 -1
  51. package/dist/daemon/jsonl-watcher.js.map +1 -1
  52. package/dist/daemon/meta-cache.d.ts +1 -0
  53. package/dist/daemon/meta-cache.d.ts.map +1 -1
  54. package/dist/daemon/meta-cache.js +9 -0
  55. package/dist/daemon/meta-cache.js.map +1 -1
  56. package/dist/daemon/session-notes.d.ts +33 -0
  57. package/dist/daemon/session-notes.d.ts.map +1 -0
  58. package/dist/daemon/session-notes.js +74 -0
  59. package/dist/daemon/session-notes.js.map +1 -0
  60. package/dist/daemon/session-state.d.ts +27 -0
  61. package/dist/daemon/session-state.d.ts.map +1 -0
  62. package/dist/daemon/session-state.js +165 -0
  63. package/dist/daemon/session-state.js.map +1 -0
  64. package/dist/daemon/shutdown.d.ts.map +1 -1
  65. package/dist/daemon/shutdown.js +9 -1
  66. package/dist/daemon/shutdown.js.map +1 -1
  67. package/dist/index.js +4 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/lib/agent-generator.d.ts +4 -0
  70. package/dist/lib/agent-generator.d.ts.map +1 -1
  71. package/dist/lib/agent-generator.js +52 -3
  72. package/dist/lib/agent-generator.js.map +1 -1
  73. package/dist/lib/compile-rules.d.ts +66 -0
  74. package/dist/lib/compile-rules.d.ts.map +1 -0
  75. package/dist/lib/compile-rules.js +114 -0
  76. package/dist/lib/compile-rules.js.map +1 -0
  77. package/dist/lib/compiler.d.ts +105 -0
  78. package/dist/lib/compiler.d.ts.map +1 -0
  79. package/dist/lib/compiler.js +368 -0
  80. package/dist/lib/compiler.js.map +1 -0
  81. package/dist/lib/config.d.ts +1 -0
  82. package/dist/lib/config.d.ts.map +1 -1
  83. package/dist/lib/config.js +8 -1
  84. package/dist/lib/config.js.map +1 -1
  85. package/dist/lib/project.d.ts.map +1 -1
  86. package/dist/lib/project.js +8 -3
  87. package/dist/lib/project.js.map +1 -1
  88. package/dist/lib/skill-generator.d.ts.map +1 -1
  89. package/dist/lib/skill-generator.js +22 -1
  90. package/dist/lib/skill-generator.js.map +1 -1
  91. package/dist/lib/template.d.ts.map +1 -1
  92. package/dist/lib/template.js +6 -0
  93. package/dist/lib/template.js.map +1 -1
  94. package/dist/types/config.d.ts +1 -0
  95. package/dist/types/config.d.ts.map +1 -1
  96. package/dist/types/config.js +12 -1
  97. package/dist/types/config.js.map +1 -1
  98. package/dist/types/project.d.ts +1 -1
  99. package/dist/types/project.d.ts.map +1 -1
  100. package/dist/types/project.js +2 -0
  101. package/dist/types/project.js.map +1 -1
  102. package/package.json +4 -4
  103. package/templates/base/agents/base/tsq-architect.md +2 -2
  104. package/templates/base/agents/overlays/domain/mobile/_common.md +13 -0
  105. package/templates/base/knowledge/checklists/plan-quality.md +31 -0
  106. package/templates/base/knowledge/checklists/stability-verification.md +14 -0
  107. package/templates/base/skills/controller/SKILL.md +111 -0
  108. package/templates/base/skills/controller/references/README.md +35 -0
  109. package/templates/base/skills/controller/rules/README.md +18 -0
  110. package/templates/base/skills/mobile/dart/SKILL.md +69 -0
  111. package/templates/base/skills/mobile/dart/rules/async-patterns.md +112 -0
  112. package/templates/base/skills/mobile/dart/rules/code-style.md +96 -0
  113. package/templates/base/skills/mobile/dart/rules/null-safety.md +84 -0
  114. package/templates/base/skills/mobile/dart/rules/type-system.md +111 -0
  115. package/templates/base/skills/mobile/flutter/SKILL.md +89 -0
  116. package/templates/base/skills/mobile/flutter/ci-cd/SKILL.md +82 -0
  117. package/templates/base/skills/mobile/flutter/ci-cd/references/ci-cd-pipeline.md +314 -0
  118. package/templates/base/skills/mobile/flutter/ci-cd/rules/code-signing.md +106 -0
  119. package/templates/base/skills/mobile/flutter/ci-cd/rules/codemagic-setup.md +116 -0
  120. package/templates/base/skills/mobile/flutter/ci-cd/rules/fastlane-setup.md +105 -0
  121. package/templates/base/skills/mobile/flutter/ci-cd/rules/github-actions.md +112 -0
  122. package/templates/base/skills/mobile/flutter/ci-cd/rules/store-deployment.md +106 -0
  123. package/templates/base/skills/mobile/flutter/ci-cd/rules/versioning.md +107 -0
  124. package/templates/base/skills/mobile/flutter/i18n/SKILL.md +78 -0
  125. package/templates/base/skills/mobile/flutter/i18n/references/i18n-architecture.md +225 -0
  126. package/templates/base/skills/mobile/flutter/i18n/rules/arb-files.md +182 -0
  127. package/templates/base/skills/mobile/flutter/i18n/rules/locale-switching.md +226 -0
  128. package/templates/base/skills/mobile/flutter/i18n/rules/localization-setup.md +137 -0
  129. package/templates/base/skills/mobile/flutter/i18n/rules/plural-gender.md +159 -0
  130. package/templates/base/skills/mobile/flutter/i18n/rules/text-direction.md +199 -0
  131. package/templates/base/skills/mobile/flutter/monitoring/SKILL.md +81 -0
  132. package/templates/base/skills/mobile/flutter/monitoring/references/monitoring-architecture.md +269 -0
  133. package/templates/base/skills/mobile/flutter/monitoring/rules/analytics.md +227 -0
  134. package/templates/base/skills/mobile/flutter/monitoring/rules/crashlytics-setup.md +195 -0
  135. package/templates/base/skills/mobile/flutter/monitoring/rules/logging.md +258 -0
  136. package/templates/base/skills/mobile/flutter/monitoring/rules/performance-monitoring.md +248 -0
  137. package/templates/base/skills/mobile/flutter/monitoring/rules/sentry-integration.md +249 -0
  138. package/templates/base/skills/mobile/flutter/networking/SKILL.md +88 -0
  139. package/templates/base/skills/mobile/flutter/networking/references/api-client-architecture.md +305 -0
  140. package/templates/base/skills/mobile/flutter/networking/rules/caching.md +212 -0
  141. package/templates/base/skills/mobile/flutter/networking/rules/connectivity.md +213 -0
  142. package/templates/base/skills/mobile/flutter/networking/rules/dio-setup.md +159 -0
  143. package/templates/base/skills/mobile/flutter/networking/rules/error-handling.md +209 -0
  144. package/templates/base/skills/mobile/flutter/networking/rules/interceptors.md +205 -0
  145. package/templates/base/skills/mobile/flutter/networking/rules/retrofit-patterns.md +194 -0
  146. package/templates/base/skills/mobile/flutter/push-notifications/SKILL.md +87 -0
  147. package/templates/base/skills/mobile/flutter/push-notifications/references/notification-architecture.md +340 -0
  148. package/templates/base/skills/mobile/flutter/push-notifications/references/platform-setup.md +286 -0
  149. package/templates/base/skills/mobile/flutter/push-notifications/rules/background-processing.md +308 -0
  150. package/templates/base/skills/mobile/flutter/push-notifications/rules/deep-linking.md +217 -0
  151. package/templates/base/skills/mobile/flutter/push-notifications/rules/fcm-setup.md +164 -0
  152. package/templates/base/skills/mobile/flutter/push-notifications/rules/local-notifications.md +262 -0
  153. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-handling.md +210 -0
  154. package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-permissions.md +246 -0
  155. package/templates/base/skills/mobile/flutter/push-notifications/rules/rich-notifications.md +320 -0
  156. package/templates/base/skills/mobile/flutter/references/freezed-patterns.md +162 -0
  157. package/templates/base/skills/mobile/flutter/references/project-structure.md +170 -0
  158. package/templates/base/skills/mobile/flutter/rules/animations.md +112 -0
  159. package/templates/base/skills/mobile/flutter/rules/architecture.md +121 -0
  160. package/templates/base/skills/mobile/flutter/rules/navigation-routing.md +117 -0
  161. package/templates/base/skills/mobile/flutter/rules/performance.md +112 -0
  162. package/templates/base/skills/mobile/flutter/rules/platform-adaptive.md +126 -0
  163. package/templates/base/skills/mobile/flutter/rules/state-management.md +110 -0
  164. package/templates/base/skills/mobile/flutter/rules/testing.md +131 -0
  165. package/templates/base/skills/mobile/flutter/rules/widget-conventions.md +122 -0
  166. package/templates/base/skills/mobile/flutter/security/SKILL.md +86 -0
  167. package/templates/base/skills/mobile/flutter/security/references/mobile-security-checklist.md +168 -0
  168. package/templates/base/skills/mobile/flutter/security/rules/api-key-protection.md +206 -0
  169. package/templates/base/skills/mobile/flutter/security/rules/authentication.md +248 -0
  170. package/templates/base/skills/mobile/flutter/security/rules/data-protection.md +271 -0
  171. package/templates/base/skills/mobile/flutter/security/rules/obfuscation.md +213 -0
  172. package/templates/base/skills/mobile/flutter/security/rules/secure-storage.md +171 -0
  173. package/templates/base/skills/mobile/flutter/security/rules/ssl-pinning.md +197 -0
  174. package/templates/base/skills/stability-verification/SKILL.md +64 -0
  175. package/templates/base/skills/stability-verification/references/release-checklist.md +34 -0
  176. package/templates/base/skills/stability-verification/references/security-fix-patterns.md +112 -0
  177. package/templates/base/skills/stability-verification/rules/verification-layers.md +67 -0
  178. package/templates/base/skills/stability-verification/rules/verification-workflow.md +69 -0
  179. package/templates/base/skills/stability-verification/scripts/verify.sh +294 -0
  180. package/templates/platforms/claude-code/CLAUDE.md.template +25 -0
  181. package/templates/platforms/claude-code/rules/build-gate.md +28 -0
  182. package/templates/platforms/claude-code/rules/completion-verification.md +30 -0
  183. package/templates/platforms/claude-code/rules/context-monitor.md +23 -0
  184. package/templates/platforms/claude-code/rules/plan-review.md +45 -0
  185. package/templates/platforms/claude-code/rules/quality-guards.md +43 -0
  186. package/templates/platforms/claude-code/rules/session-notes.md +18 -0
  187. package/templates/platforms/claude-code/rules/skill-suggest.md +27 -0
  188. package/templates/platforms/claude-code/scripts/build-gate.sh +73 -0
  189. package/templates/platforms/claude-code/scripts/completion-guard.sh +93 -0
  190. package/templates/platforms/claude-code/scripts/phase-guard.sh +79 -0
  191. package/templates/platforms/claude-code/scripts/safe-guard.sh +83 -0
  192. package/templates/platforms/claude-code/scripts/skill-rules.json +85 -0
  193. package/templates/platforms/claude-code/scripts/skill-suggest.sh +105 -0
  194. package/templates/platforms/claude-code/settings.json +111 -3
  195. package/templates/project-types/mobile-app/config.yaml +123 -0
  196. package/templates/project-types/mobile-app/process/workflow.xml +191 -0
@@ -3,6 +3,7 @@ import fs from 'fs-extra';
3
3
  import { AGENT_PRESETS } from '../types/config.js';
4
4
  import { substituteVariables } from './template.js';
5
5
  import { composeAgent } from './agent-composer.js';
6
+ import { getActiveSkills } from './skill-generator.js';
6
7
  /**
7
8
  * Agent file name mapping
8
9
  */
@@ -14,6 +15,50 @@ const AGENT_FILE_MAP = {
14
15
  dba: 'tsq-dba.md',
15
16
  designer: 'tsq-designer.md',
16
17
  };
18
+ /**
19
+ * Stack skill categories each agent role should receive
20
+ */
21
+ const AGENT_SKILL_CATEGORIES = {
22
+ developer: ['frontend', 'backend', 'database', 'mobile'],
23
+ designer: ['frontend'],
24
+ dba: ['database'],
25
+ architect: [],
26
+ qa: [],
27
+ security: [],
28
+ };
29
+ /**
30
+ * Inject active stack skills into agent YAML frontmatter
31
+ */
32
+ export function injectSkillsIntoFrontmatter(content, agent, activeSkills) {
33
+ const categories = AGENT_SKILL_CATEGORIES[agent] || [];
34
+ if (categories.length === 0)
35
+ return content;
36
+ // Filter active skills matching this agent's categories
37
+ const agentSkills = activeSkills.filter(skill => {
38
+ const category = skill.split('/')[0];
39
+ return categories.includes(category);
40
+ });
41
+ if (agentSkills.length === 0)
42
+ return content;
43
+ // Parse YAML frontmatter
44
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
45
+ if (!fmMatch)
46
+ return content;
47
+ const frontmatter = fmMatch[1];
48
+ // Extract existing skills
49
+ const skillsMatch = frontmatter.match(/^skills:\s*\[([^\]]*)\]/m);
50
+ if (!skillsMatch)
51
+ return content;
52
+ const existingSkills = skillsMatch[1]
53
+ .split(',')
54
+ .map(s => s.trim())
55
+ .filter(Boolean);
56
+ // Merge and deduplicate
57
+ const mergedSkills = [...new Set([...existingSkills, ...agentSkills])];
58
+ // Replace skills line in frontmatter
59
+ const newFm = frontmatter.replace(/^skills:\s*\[([^\]]*)\]/m, `skills: [${mergedSkills.join(', ')}]`);
60
+ return content.replace(/^---\n[\s\S]*?\n---/, `---\n${newFm}\n---`);
61
+ }
17
62
  /**
18
63
  * Get active agents from config
19
64
  */
@@ -36,6 +81,7 @@ export async function generateAgentFiles(templatesDir, destAgentsDir, activeAgen
36
81
  const srcAgentsDir = path.join(templatesDir, 'base', 'agents');
37
82
  const baseDir = path.join(srcAgentsDir, 'base');
38
83
  const useComposition = await fs.pathExists(baseDir);
84
+ const activeSkills = config ? getActiveSkills(config) : [];
39
85
  // 1. 활성 에이전트 배포
40
86
  for (const agent of activeAgents) {
41
87
  const fileName = AGENT_FILE_MAP[agent];
@@ -58,9 +104,12 @@ export async function generateAgentFiles(templatesDir, destAgentsDir, activeAgen
58
104
  content = await fs.readFile(srcPath, 'utf-8');
59
105
  }
60
106
  const processed = substituteVariables(content, variables);
107
+ const withSkills = activeSkills.length > 0
108
+ ? injectSkillsIntoFrontmatter(processed, agent, activeSkills)
109
+ : processed;
61
110
  const destPath = path.join(destAgentsDir, fileName);
62
111
  await fs.ensureDir(path.dirname(destPath));
63
- await fs.writeFile(destPath, processed, 'utf-8');
112
+ await fs.writeFile(destPath, withSkills, 'utf-8');
64
113
  }
65
114
  // 2. 비활성 에이전트 파일이 있으면 제거
66
115
  if (await fs.pathExists(destAgentsDir)) {
@@ -82,9 +131,9 @@ export function generateDelegationRules(activeAgents) {
82
131
  // Architect rule (시퀀스 분석)
83
132
  if (activeAgents.includes('architect')) {
84
133
  rules.push(` <rule id="DEL-${String(ruleId).padStart(3, '0')}">
85
- <trigger>시퀀스 분석, 아키텍처 리뷰, 태스크 로그 분석, 구조 검토</trigger>
134
+ <trigger>시퀀스 분석, 아키텍처 리뷰, 태스크 로그 분석, 구조 검토, 계획 검증, plan review</trigger>
86
135
  <delegate-to>@tsq-architect</delegate-to>
87
- <context>시퀀스 완료 후 로그 분석 및 보고서 작성</context>
136
+ <context>시퀀스 완료 후 로그 분석 및 보고서 작성. 계획 단계에서는 3축 Plan Review 수행.</context>
88
137
  </rule>`);
89
138
  ruleId++;
90
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Compile rules for SSOT → agent-facing spec transformation.
3
+ *
4
+ * Rules are declarative: define source, split strategy, output location,
5
+ * and required fields for schema validation.
6
+ * No AI interpretation — deterministic structural extraction only.
7
+ */
8
+ /** How to split a source document into multiple spec files */
9
+ export type SplitStrategy = 'h2' | 'h3' | 'none';
10
+ /** Where compiled output goes within controller skill */
11
+ export type OutputTarget = 'references' | 'rules';
12
+ /** A single compile rule mapping SSOT source → spec output */
13
+ export interface CompileRule {
14
+ /** SSOT filename without extension (e.g., 'service-spec') */
15
+ source: string;
16
+ /** Output target directory within controller skill */
17
+ output: OutputTarget;
18
+ /** How to split the document */
19
+ splitBy: SplitStrategy;
20
+ /** Output filename pattern. Available vars: {section}, {method}, {path}, {entity} */
21
+ filenamePattern: string;
22
+ /** Required fields in each section for schema validation */
23
+ requiredFields: string[];
24
+ /** Human-readable description */
25
+ description: string;
26
+ }
27
+ /** Metadata embedded in compiled spec files */
28
+ export interface CompileMarker {
29
+ /** Original SSOT file path (relative to .timsquad/) */
30
+ source: string;
31
+ /** Section anchor in source (e.g., 'POST-auth-login') */
32
+ section: string;
33
+ /** MD5 hash of source section content */
34
+ ssotHash: string;
35
+ /** ISO 8601 compilation timestamp */
36
+ compiledAt: string;
37
+ }
38
+ /** Manifest entry for stale detection */
39
+ export interface ManifestEntry {
40
+ source: string;
41
+ ssotHash: string;
42
+ compiledAt: string;
43
+ outputFiles: string[];
44
+ }
45
+ /** Full compile manifest */
46
+ export interface CompileManifest {
47
+ version: string;
48
+ compiledAt: string;
49
+ entries: ManifestEntry[];
50
+ }
51
+ /**
52
+ * Default compile rules for all SSOT document types.
53
+ * Rules match SSOT template structure (H2=domain, H3=endpoint, H4=detail).
54
+ */
55
+ export declare const COMPILE_RULES: CompileRule[];
56
+ /**
57
+ * Get compile rules for a given set of SSOT documents.
58
+ * Filters rules to only include sources that exist.
59
+ */
60
+ export declare function getCompileRules(availableSsotDocs: string[]): CompileRule[];
61
+ /**
62
+ * Get the default compile rule for SSOT documents not in COMPILE_RULES.
63
+ * Falls back to a generic no-split rule.
64
+ */
65
+ export declare function getDefaultRule(source: string): CompileRule;
66
+ //# sourceMappingURL=compile-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-rules.d.ts","sourceRoot":"","sources":["../../src/lib/compile-rules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEjD,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;AAElD,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,YAAY,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,qFAAqF;IACrF,eAAe,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EAyEtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAQ1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAS1D"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Compile rules for SSOT → agent-facing spec transformation.
3
+ *
4
+ * Rules are declarative: define source, split strategy, output location,
5
+ * and required fields for schema validation.
6
+ * No AI interpretation — deterministic structural extraction only.
7
+ */
8
+ /**
9
+ * Default compile rules for all SSOT document types.
10
+ * Rules match SSOT template structure (H2=domain, H3=endpoint, H4=detail).
11
+ */
12
+ export const COMPILE_RULES = [
13
+ {
14
+ source: 'service-spec',
15
+ output: 'references',
16
+ splitBy: 'h3',
17
+ filenamePattern: '{section}.spec.md',
18
+ requiredFields: ['Endpoint', 'Request', 'Response'],
19
+ description: 'API 엔드포인트별 분할 (H3 = 개별 API)',
20
+ },
21
+ {
22
+ source: 'data-design',
23
+ output: 'references',
24
+ splitBy: 'h2',
25
+ filenamePattern: '{section}.spec.md',
26
+ requiredFields: ['Fields'],
27
+ description: '엔티티별 분할 (H2 = 테이블/모델)',
28
+ },
29
+ {
30
+ source: 'error-codes',
31
+ output: 'references',
32
+ splitBy: 'none',
33
+ filenamePattern: 'error-codes.spec.md',
34
+ requiredFields: ['Code', 'HTTP', 'Description'],
35
+ description: '에러 코드 전체 (분할 없음)',
36
+ },
37
+ {
38
+ source: 'requirements',
39
+ output: 'rules',
40
+ splitBy: 'none',
41
+ filenamePattern: 'completion-criteria.md',
42
+ requiredFields: ['ID', 'Priority'],
43
+ description: '요건 목록 → 완료 기준 규칙',
44
+ },
45
+ {
46
+ source: 'functional-spec',
47
+ output: 'references',
48
+ splitBy: 'h2',
49
+ filenamePattern: '{section}.spec.md',
50
+ requiredFields: [],
51
+ description: '기능 시나리오별 분할',
52
+ },
53
+ {
54
+ source: 'ui-ux-spec',
55
+ output: 'references',
56
+ splitBy: 'h2',
57
+ filenamePattern: '{section}.spec.md',
58
+ requiredFields: [],
59
+ description: 'UI/UX 화면별 분할',
60
+ },
61
+ {
62
+ source: 'security-spec',
63
+ output: 'rules',
64
+ splitBy: 'none',
65
+ filenamePattern: 'security-constraints.md',
66
+ requiredFields: [],
67
+ description: '보안 요건 → 제약 규칙',
68
+ },
69
+ {
70
+ source: 'test-spec',
71
+ output: 'references',
72
+ splitBy: 'none',
73
+ filenamePattern: 'test-spec.spec.md',
74
+ requiredFields: [],
75
+ description: '테스트 명세 (분할 없음)',
76
+ },
77
+ {
78
+ source: 'data-design',
79
+ output: 'references',
80
+ splitBy: 'h2',
81
+ filenamePattern: '{section}.spec.md',
82
+ requiredFields: ['Fields'],
83
+ description: '데이터 모델별 분할',
84
+ },
85
+ ];
86
+ /**
87
+ * Get compile rules for a given set of SSOT documents.
88
+ * Filters rules to only include sources that exist.
89
+ */
90
+ export function getCompileRules(availableSsotDocs) {
91
+ // Deduplicate rules by source (first rule wins)
92
+ const seen = new Set();
93
+ return COMPILE_RULES.filter((rule) => {
94
+ if (seen.has(rule.source))
95
+ return false;
96
+ seen.add(rule.source);
97
+ return availableSsotDocs.includes(rule.source);
98
+ });
99
+ }
100
+ /**
101
+ * Get the default compile rule for SSOT documents not in COMPILE_RULES.
102
+ * Falls back to a generic no-split rule.
103
+ */
104
+ export function getDefaultRule(source) {
105
+ return {
106
+ source,
107
+ output: 'references',
108
+ splitBy: 'none',
109
+ filenamePattern: `${source}.spec.md`,
110
+ requiredFields: [],
111
+ description: `${source} (기본 규칙, 분할 없음)`,
112
+ };
113
+ }
114
+ //# sourceMappingURL=compile-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-rules.js","sourceRoot":"","sources":["../../src/lib/compile-rules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmDH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C;QACE,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC;QACnD,WAAW,EAAE,6BAA6B;KAC3C;IACD;QACE,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,CAAC,QAAQ,CAAC;QAC1B,WAAW,EAAE,uBAAuB;KACrC;IACD;QACE,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,qBAAqB;QACtC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC;QAC/C,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,wBAAwB;QACzC,cAAc,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;QAClC,WAAW,EAAE,kBAAkB;KAChC;IACD;QACE,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,cAAc;KAC5B;IACD;QACE,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,yBAAyB;QAC1C,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,eAAe;KAC7B;IACD;QACE,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,CAAC,QAAQ,CAAC;QAC1B,WAAW,EAAE,YAAY;KAC1B;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,iBAA2B;IACzD,gDAAgD;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO;QACL,MAAM;QACN,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,MAAM;QACf,eAAe,EAAE,GAAG,MAAM,UAAU;QACpC,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,GAAG,MAAM,iBAAiB;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * SSOT Compiler: Transforms human-written SSOT documents into
3
+ * agent-facing spec files for the controller skill (Context DI).
4
+ *
5
+ * Design principles:
6
+ * - Deterministic extraction only (no AI interpretation)
7
+ * - Section markers for traceability (source, hash, timestamp)
8
+ * - Schema validation for completeness checking
9
+ * - Stale detection via compile manifest
10
+ */
11
+ import { type CompileRule, type CompileManifest, type CompileMarker } from './compile-rules.js';
12
+ /** A parsed section from an SSOT markdown document */
13
+ export interface ParsedSection {
14
+ /** Heading text (e.g., "2.1 로그인") */
15
+ heading: string;
16
+ /** Heading level (2 = H2, 3 = H3) */
17
+ level: number;
18
+ /** Full content including heading and body */
19
+ content: string;
20
+ /** Slugified anchor (e.g., "POST-auth-login") */
21
+ anchor: string;
22
+ /** Parent section heading (for H3 under H2) */
23
+ parent?: string;
24
+ }
25
+ /** Validation result for a compiled spec */
26
+ export interface ValidationResult {
27
+ source: string;
28
+ totalSections: number;
29
+ validSections: number;
30
+ missingFields: Array<{
31
+ section: string;
32
+ fields: string[];
33
+ }>;
34
+ score: number;
35
+ }
36
+ /** Overall compile result */
37
+ export interface CompileResult {
38
+ success: boolean;
39
+ compiled: Array<{
40
+ source: string;
41
+ outputFiles: string[];
42
+ }>;
43
+ validations: ValidationResult[];
44
+ skipped: string[];
45
+ errors: string[];
46
+ }
47
+ /**
48
+ * Parse a markdown document into sections by heading level.
49
+ */
50
+ export declare function parseMarkdownSections(content: string, splitBy: 'h2' | 'h3'): ParsedSection[];
51
+ /**
52
+ * Slugify a heading into a URL-safe anchor.
53
+ * "2.1 로그인" → "2-1-로그인"
54
+ * "POST /auth/login" → "POST-auth-login"
55
+ */
56
+ export declare function slugify(text: string): string;
57
+ /**
58
+ * Check if a section contains the required fields.
59
+ * Looks for field names in table headers or bold text.
60
+ */
61
+ export declare function validateSectionFields(content: string, requiredFields: string[]): string[];
62
+ /** Generate section markers as HTML comments */
63
+ export declare function generateMarkers(marker: CompileMarker): string;
64
+ /** Compute MD5 hash of content */
65
+ export declare function computeHash(content: string): string;
66
+ /**
67
+ * Compile a single SSOT document according to its rule.
68
+ * Returns list of output file paths (relative to controller skill dir).
69
+ */
70
+ export declare function compileSsotDocument(ssotPath: string, rule: CompileRule, controllerDir: string, sourceName: string): Promise<{
71
+ outputFiles: string[];
72
+ validation: ValidationResult;
73
+ }>;
74
+ /**
75
+ * Compile all SSOT documents in a project.
76
+ *
77
+ * @param projectRoot Project root directory
78
+ * @param controllerDir Path to controller skill dir (.claude/skills/controller)
79
+ * @returns CompileResult with all outputs and validation
80
+ */
81
+ export declare function compileAll(projectRoot: string, controllerDir: string): Promise<CompileResult>;
82
+ /**
83
+ * Load existing manifest. Returns null if not found.
84
+ */
85
+ export declare function loadManifest(controllerDir: string): Promise<CompileManifest | null>;
86
+ /**
87
+ * Check which SSOT documents are stale (changed since last compile).
88
+ */
89
+ export declare function checkStale(projectRoot: string, controllerDir: string): Promise<Array<{
90
+ source: string;
91
+ reason: string;
92
+ }>>;
93
+ /**
94
+ * Parse agent prerequisites from agent markdown files.
95
+ * Extracts from <prerequisites> XML tag.
96
+ */
97
+ export declare function parseAgentPrerequisites(content: string): string[];
98
+ /**
99
+ * Validate that all agent prerequisites can be resolved from compiled specs.
100
+ */
101
+ export declare function validateDependencyGraph(projectRoot: string, controllerDir: string): Promise<Array<{
102
+ agent: string;
103
+ missing: string[];
104
+ }>>;
105
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/lib/compiler.ts"],"names":[],"mappings":"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"}