id3-cli 0.9.1

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 (114) hide show
  1. package/README.ja-JP.md +769 -0
  2. package/README.ko-KR.md +769 -0
  3. package/README.md +769 -0
  4. package/README.tr-TR.md +769 -0
  5. package/README.zh-CN.md +769 -0
  6. package/dist/bin/cli.d.ts +2 -0
  7. package/dist/bin/cli.js +40 -0
  8. package/dist/bin/cli.js.map +1 -0
  9. package/dist/scripts/build-hooks.d.ts +1 -0
  10. package/dist/scripts/build-hooks.js +58 -0
  11. package/dist/scripts/build-hooks.js.map +1 -0
  12. package/dist/src/hooks/auto-audit.d.ts +4 -0
  13. package/dist/src/hooks/auto-audit.js +47 -0
  14. package/dist/src/hooks/auto-audit.js.map +1 -0
  15. package/dist/src/hooks/claude-pretool-entry.d.ts +1 -0
  16. package/dist/src/hooks/claude-pretool-entry.js +36 -0
  17. package/dist/src/hooks/claude-pretool-entry.js.map +1 -0
  18. package/dist/src/hooks/claude-stop-entry.d.ts +1 -0
  19. package/dist/src/hooks/claude-stop-entry.js +7 -0
  20. package/dist/src/hooks/claude-stop-entry.js.map +1 -0
  21. package/dist/src/hooks/post-commit-entry.d.ts +1 -0
  22. package/dist/src/hooks/post-commit-entry.js +7 -0
  23. package/dist/src/hooks/post-commit-entry.js.map +1 -0
  24. package/dist/src/hooks/pre-commit-entry.d.ts +1 -0
  25. package/dist/src/hooks/pre-commit-entry.js +16 -0
  26. package/dist/src/hooks/pre-commit-entry.js.map +1 -0
  27. package/dist/src/hooks/rule-check.d.ts +8 -0
  28. package/dist/src/hooks/rule-check.js +101 -0
  29. package/dist/src/hooks/rule-check.js.map +1 -0
  30. package/dist/src/hooks/schema-drift.d.ts +17 -0
  31. package/dist/src/hooks/schema-drift.js +151 -0
  32. package/dist/src/hooks/schema-drift.js.map +1 -0
  33. package/dist/src/hooks/shared.d.ts +43 -0
  34. package/dist/src/hooks/shared.js +98 -0
  35. package/dist/src/hooks/shared.js.map +1 -0
  36. package/dist/src/init.d.ts +20 -0
  37. package/dist/src/init.js +193 -0
  38. package/dist/src/init.js.map +1 -0
  39. package/dist/src/preview/mockup-generator.d.ts +56 -0
  40. package/dist/src/preview/mockup-generator.js +402 -0
  41. package/dist/src/preview/mockup-generator.js.map +1 -0
  42. package/dist/src/preview/renderer.d.ts +30 -0
  43. package/dist/src/preview/renderer.js +145 -0
  44. package/dist/src/preview/renderer.js.map +1 -0
  45. package/dist/src/preview/server.d.ts +9 -0
  46. package/dist/src/preview/server.js +55 -0
  47. package/dist/src/preview/server.js.map +1 -0
  48. package/dist/src/preview/ui-auditor.d.ts +27 -0
  49. package/dist/src/preview/ui-auditor.js +141 -0
  50. package/dist/src/preview/ui-auditor.js.map +1 -0
  51. package/dist/src/preview/ui-gate.d.ts +66 -0
  52. package/dist/src/preview/ui-gate.js +210 -0
  53. package/dist/src/preview/ui-gate.js.map +1 -0
  54. package/dist/src/utils/ascii.d.ts +7 -0
  55. package/dist/src/utils/ascii.js +41 -0
  56. package/dist/src/utils/ascii.js.map +1 -0
  57. package/dist/src/utils/fs.d.ts +6 -0
  58. package/dist/src/utils/fs.js +39 -0
  59. package/dist/src/utils/fs.js.map +1 -0
  60. package/dist/templates/hooks/iddd-auto-audit.js +121 -0
  61. package/dist/templates/hooks/iddd-schema-drift.js +279 -0
  62. package/dist/templates/hooks/post-commit +121 -0
  63. package/dist/templates/hooks/pre-commit +348 -0
  64. package/package.json +37 -0
  65. package/templates/.agents/skills/.gitkeep +0 -0
  66. package/templates/.claude/hooks/.gitkeep +0 -0
  67. package/templates/.claude/hooks/hook-config.json +34 -0
  68. package/templates/.claude/skills/.gitkeep +0 -0
  69. package/templates/.codex/.gitkeep +0 -0
  70. package/templates/.codex/hooks.json +40 -0
  71. package/templates/.iddd/commit-count +1 -0
  72. package/templates/.iddd/preview/.gitkeep +0 -0
  73. package/templates/AGENTS.md +204 -0
  74. package/templates/CLAUDE.md +215 -0
  75. package/templates/README.md +476 -0
  76. package/templates/docs/.gitkeep +0 -0
  77. package/templates/docs/business-rules.md +14 -0
  78. package/templates/docs/domain-glossary.md +8 -0
  79. package/templates/docs/info-debt.md +17 -0
  80. package/templates/docs/model-changelog.md +12 -0
  81. package/templates/hooks/.gitkeep +0 -0
  82. package/templates/hooks/iddd-auto-audit.js +121 -0
  83. package/templates/hooks/iddd-schema-drift.js +279 -0
  84. package/templates/hooks/post-commit +121 -0
  85. package/templates/hooks/pre-commit +348 -0
  86. package/templates/skills/id3-design-information/SKILL.md +170 -0
  87. package/templates/skills/id3-design-information/references/phase2-procedure.md +241 -0
  88. package/templates/skills/id3-design-ui/.gitkeep +0 -0
  89. package/templates/skills/id3-design-ui/SKILL.md +200 -0
  90. package/templates/skills/id3-design-ui/references/.gitkeep +0 -0
  91. package/templates/skills/id3-design-ui/references/step1-structure-derivation.md +177 -0
  92. package/templates/skills/id3-design-ui/references/step2-visual-contract.md +257 -0
  93. package/templates/skills/id3-design-ui/references/step3-gate-and-mockup.md +177 -0
  94. package/templates/skills/id3-design-ui/references/step4-implementation.md +244 -0
  95. package/templates/skills/id3-identify-entities/SKILL.md +239 -0
  96. package/templates/skills/id3-identify-entities/references/.gitkeep +0 -0
  97. package/templates/skills/id3-identify-entities/references/phase0-brownfield.md +377 -0
  98. package/templates/skills/id3-identify-entities/references/phase1-greenfield.md +319 -0
  99. package/templates/skills/id3-info-audit/.gitkeep +0 -0
  100. package/templates/skills/id3-info-audit/SKILL.md +191 -0
  101. package/templates/skills/id3-preview/.gitkeep +0 -0
  102. package/templates/skills/id3-preview/SKILL.md +168 -0
  103. package/templates/skills/id3-spawn-team/.gitkeep +0 -0
  104. package/templates/skills/id3-spawn-team/SKILL.md +213 -0
  105. package/templates/specs/.gitkeep +0 -0
  106. package/templates/specs/data-model.md +26 -0
  107. package/templates/specs/entity-catalog.md +22 -0
  108. package/templates/specs/ui-design-contract.md +54 -0
  109. package/templates/specs/ui-inventory.md +24 -0
  110. package/templates/specs/ui-structure.md +32 -0
  111. package/templates/src/.gitkeep +0 -0
  112. package/templates/steering/.gitkeep +0 -0
  113. package/templates/steering/data-conventions.md +42 -0
  114. package/templates/steering/product.md +38 -0
@@ -0,0 +1,98 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { box } from '../utils/ascii.js';
5
+ export function parseGitDiff(output) {
6
+ if (!output.trim())
7
+ return [];
8
+ return output
9
+ .trim()
10
+ .split('\n')
11
+ .map((line) => {
12
+ const [status, path] = line.split('\t');
13
+ return { status, path };
14
+ })
15
+ .filter((e) => e.path);
16
+ }
17
+ export function parseHookInput(stdinData) {
18
+ try {
19
+ const parsed = JSON.parse(stdinData);
20
+ if (!parsed.tool_name || !parsed.tool_input?.file_path) {
21
+ return null;
22
+ }
23
+ return {
24
+ toolName: parsed.tool_name,
25
+ filePath: parsed.tool_input.file_path,
26
+ };
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ export function getCachedDiff() {
33
+ try {
34
+ const output = execSync('git diff --cached --name-status', {
35
+ encoding: 'utf-8',
36
+ });
37
+ return parseGitDiff(output);
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ export function getCachedFileContent(filePath) {
44
+ try {
45
+ return execSync(`git show :${filePath}`, { encoding: 'utf-8' });
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ export function isSchemaFile(filePath, patterns) {
52
+ return patterns.some((pattern) => matchGlob(filePath, pattern));
53
+ }
54
+ export function isValidationFile(filePath, patterns) {
55
+ return patterns.some((pattern) => matchGlob(filePath, pattern));
56
+ }
57
+ export function matchGlob(filePath, pattern) {
58
+ const regex = pattern
59
+ .replace(/\./g, '\\.')
60
+ .replace(/\*\*/g, '{{GLOBSTAR}}')
61
+ .replace(/\*/g, '[^/]*')
62
+ .replace(/\{\{GLOBSTAR\}\}/g, '.*');
63
+ return (new RegExp(`^${regex}$`).test(filePath) ||
64
+ new RegExp(`(^|/)${regex}$`).test(filePath));
65
+ }
66
+ export async function loadHookConfig(projectRoot) {
67
+ try {
68
+ const configPath = join(projectRoot, '.claude', 'hooks', 'hook-config.json');
69
+ const content = await readFile(configPath, 'utf-8');
70
+ return JSON.parse(content);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ export function isSkipHooks() {
77
+ return process.env['IDDD_SKIP_HOOKS'] === '1';
78
+ }
79
+ export async function logSkip(projectRoot) {
80
+ const { appendFile, mkdir } = await import('node:fs/promises');
81
+ const logDir = join(projectRoot, '.iddd');
82
+ await mkdir(logDir, { recursive: true });
83
+ const logPath = join(logDir, 'skip-history.log');
84
+ const timestamp = new Date().toISOString();
85
+ let commitHash = 'unknown';
86
+ try {
87
+ commitHash = execSync('git rev-parse HEAD', { encoding: 'utf-8' }).trim();
88
+ }
89
+ catch { }
90
+ await appendFile(logPath, `${timestamp}\t${commitHash}\tHook skipped\n`);
91
+ }
92
+ export function printBlock(title, message) {
93
+ console.error(box(message, { title }));
94
+ }
95
+ export function printWarn(title, message) {
96
+ console.error(box(message, { title }));
97
+ }
98
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/hooks/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAOxC,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO,MAAM;SACV,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;YACzD,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,aAAa,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAkB;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,QAAkB;IAElB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,CACL,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC5C,CAAC;AACJ,CAAC;AA0BD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CACrB,WAAW,EACX,SAAS,EACT,OAAO,EACP,kBAAkB,CACnB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,WAAmB;IAC/C,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,UAAU,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,SAAS,KAAK,UAAU,kBAAkB,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAe;IACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAe;IACtD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface InitOptions {
2
+ templatesDir?: string;
3
+ overwrite?: boolean;
4
+ skipGitHooks?: boolean;
5
+ noSymlink?: boolean;
6
+ }
7
+ export interface InitResult {
8
+ alreadyInstalled: boolean;
9
+ targetDir: string;
10
+ gitHooksInstalled: boolean;
11
+ claudeHooksInjected: boolean;
12
+ platforms: {
13
+ claude: boolean;
14
+ codex: boolean;
15
+ };
16
+ }
17
+ export declare function initProject(targetDir: string, options?: InitOptions): Promise<InitResult>;
18
+ export declare function injectClaudeHooks(targetDir: string): Promise<void>;
19
+ export declare function printBanner(): void;
20
+ export declare function printSuccess(result: InitResult): void;
@@ -0,0 +1,193 @@
1
+ import { join, resolve } from 'node:path';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
+ import { copyDir, createSymlink, fileExists } from './utils/fs.js';
4
+ import { banner, box } from './utils/ascii.js';
5
+ import { execSync } from 'node:child_process';
6
+ export async function initProject(targetDir, options = {}) {
7
+ const { templatesDir: tplDir, overwrite = false, skipGitHooks = false, noSymlink = false, } = options;
8
+ const absTarget = resolve(targetDir);
9
+ // When compiled, runs from dist/src/, so go up 2 levels to project root
10
+ const templatesDir = tplDir ?? join(import.meta.dirname, '..', '..', 'templates');
11
+ // Check existing installation
12
+ const claudeMdExists = await fileExists(join(absTarget, 'CLAUDE.md'));
13
+ if (claudeMdExists && !overwrite) {
14
+ return {
15
+ alreadyInstalled: true,
16
+ targetDir: absTarget,
17
+ gitHooksInstalled: false,
18
+ claudeHooksInjected: false,
19
+ platforms: { claude: false, codex: false },
20
+ };
21
+ }
22
+ // Copy templates
23
+ await copyDir(templatesDir, absTarget, { overwrite });
24
+ // Create skill symlinks
25
+ if (!noSymlink) {
26
+ await createSkillSymlinks(absTarget);
27
+ }
28
+ else {
29
+ // Windows fallback: copy instead of symlink
30
+ await copySkillFiles(absTarget);
31
+ }
32
+ // Detect platforms
33
+ const platforms = detectPlatforms();
34
+ // Inject Claude Code Hooks into settings.local.json
35
+ let claudeHooksInjected = false;
36
+ if (platforms.claude) {
37
+ await injectClaudeHooks(absTarget);
38
+ claudeHooksInjected = true;
39
+ }
40
+ // Set up Codex hooks.json if Codex detected
41
+ if (platforms.codex) {
42
+ // hooks.json is already in templates/.codex/hooks.json
43
+ // Symlinks to .agents/skills/ are handled by createSkillSymlinks
44
+ }
45
+ // Install Git hooks
46
+ let gitHooksInstalled = false;
47
+ if (!skipGitHooks) {
48
+ gitHooksInstalled = await installGitHooks(absTarget);
49
+ }
50
+ return {
51
+ alreadyInstalled: false,
52
+ targetDir: absTarget,
53
+ gitHooksInstalled,
54
+ claudeHooksInjected,
55
+ platforms,
56
+ };
57
+ }
58
+ async function createSkillSymlinks(targetDir) {
59
+ const skills = [
60
+ 'id3-identify-entities',
61
+ 'id3-design-information',
62
+ 'id3-design-ui',
63
+ 'id3-spawn-team',
64
+ 'id3-info-audit',
65
+ 'id3-preview',
66
+ ];
67
+ const platforms = ['.claude', '.agents'];
68
+ for (const skill of skills) {
69
+ const original = join(targetDir, 'skills', skill, 'SKILL.md');
70
+ for (const platform of platforms) {
71
+ const link = join(targetDir, platform, 'skills', skill, 'SKILL.md');
72
+ await createSymlink(original, link);
73
+ }
74
+ }
75
+ }
76
+ async function copySkillFiles(targetDir) {
77
+ // Windows fallback: copy files instead of creating symlinks
78
+ const { copyFile, mkdir } = await import('node:fs/promises');
79
+ const skills = [
80
+ 'id3-identify-entities',
81
+ 'id3-design-information',
82
+ 'id3-design-ui',
83
+ 'id3-spawn-team',
84
+ 'id3-info-audit',
85
+ 'id3-preview',
86
+ ];
87
+ const platformDirs = ['.claude', '.agents'];
88
+ for (const skill of skills) {
89
+ const original = join(targetDir, 'skills', skill, 'SKILL.md');
90
+ for (const platform of platformDirs) {
91
+ const dest = join(targetDir, platform, 'skills', skill, 'SKILL.md');
92
+ await mkdir(join(targetDir, platform, 'skills', skill), { recursive: true });
93
+ if (await fileExists(original)) {
94
+ await copyFile(original, dest);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ export async function injectClaudeHooks(targetDir) {
100
+ const settingsPath = join(targetDir, '.claude', 'settings.local.json');
101
+ let settings = {};
102
+ try {
103
+ const existing = await readFile(settingsPath, 'utf-8');
104
+ settings = JSON.parse(existing);
105
+ }
106
+ catch {
107
+ // No existing settings — start fresh
108
+ }
109
+ // Inject Hook configuration
110
+ const hooks = settings['hooks'] ?? {};
111
+ hooks['PreToolUse'] = [
112
+ ...(hooks['PreToolUse'] ?? []),
113
+ {
114
+ matcher: 'Write|Edit',
115
+ command: `node "${join(targetDir, 'hooks', 'iddd-schema-drift.js')}"`,
116
+ },
117
+ ];
118
+ hooks['Stop'] = [
119
+ ...(hooks['Stop'] ?? []),
120
+ {
121
+ command: `node "${join(targetDir, 'hooks', 'iddd-auto-audit.js')}"`,
122
+ },
123
+ ];
124
+ settings['hooks'] = hooks;
125
+ const { mkdir } = await import('node:fs/promises');
126
+ await mkdir(join(targetDir, '.claude'), { recursive: true });
127
+ await writeFile(settingsPath, JSON.stringify(settings, null, 2));
128
+ }
129
+ function detectPlatforms() {
130
+ const claude = commandExists('claude');
131
+ const codex = commandExists('codex');
132
+ return { claude, codex };
133
+ }
134
+ function commandExists(cmd) {
135
+ try {
136
+ execSync(`which ${cmd}`, { stdio: 'ignore' });
137
+ return true;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ async function installGitHooks(targetDir) {
144
+ const gitDir = join(targetDir, '.git');
145
+ if (!(await fileExists(gitDir))) {
146
+ return false;
147
+ }
148
+ const hooksDir = join(gitDir, 'hooks');
149
+ const hooks = ['pre-commit', 'post-commit'];
150
+ for (const hook of hooks) {
151
+ const target = join(targetDir, 'hooks', hook);
152
+ const link = join(hooksDir, hook);
153
+ if (await fileExists(link)) {
154
+ continue; // don't overwrite existing hooks
155
+ }
156
+ await createSymlink(target, link);
157
+ }
158
+ return true;
159
+ }
160
+ export function printBanner() {
161
+ const pkg = { version: '0.9.1' };
162
+ console.log(banner(pkg.version));
163
+ }
164
+ export function printSuccess(result) {
165
+ const platformLine = [
166
+ result.platforms.claude ? 'Claude Code \u2713' : 'Claude Code \u2717',
167
+ result.platforms.codex ? 'Codex \u2713' : 'Codex \u2717',
168
+ ].join(' ');
169
+ const hookLine = [
170
+ result.gitHooksInstalled ? 'Git Hooks \u2713' : 'Git Hooks \u2717',
171
+ result.claudeHooksInjected ? 'Claude Code Hooks \u2713' : 'Claude Code Hooks \u2717',
172
+ ].join(' ');
173
+ const content = [
174
+ 'Next steps:',
175
+ '',
176
+ '1. Fill in steering/product.md',
177
+ '2. Use "identify entities" to start',
178
+ '3. Customize steering/data-conventions.md',
179
+ '',
180
+ 'Skills:',
181
+ '\u251c\u2500\u2500 id3-identify-entities (Phase 0/1)',
182
+ '\u251c\u2500\u2500 id3-design-information (Phase 2)',
183
+ '\u251c\u2500\u2500 id3-design-ui (Phase 2.5)',
184
+ '\u251c\u2500\u2500 id3-spawn-team (Phase 3-5)',
185
+ '\u251c\u2500\u2500 id3-info-audit (Audit)',
186
+ '\u2514\u2500\u2500 id3-preview (Visual Preview)',
187
+ '',
188
+ `Platforms: ${platformLine}`,
189
+ `Hooks: ${hookLine}`,
190
+ ].join('\n');
191
+ console.log(box(content, { title: '\u2713 IDDD installed' }));
192
+ }
193
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export interface AttributeDef {
2
+ name: string;
3
+ type: string;
4
+ constraints: string[];
5
+ maxLength?: number;
6
+ enumValues?: string[];
7
+ refEntity?: string;
8
+ subtype?: string;
9
+ min?: number;
10
+ max?: number;
11
+ }
12
+ export interface RelationshipDef {
13
+ target: string;
14
+ type: '1:N' | 'N:1' | 'N:M' | '1:1';
15
+ fk: string;
16
+ }
17
+ export interface StateTransition {
18
+ from: string;
19
+ to: string;
20
+ }
21
+ export interface EntityDef {
22
+ name: string;
23
+ attributes: AttributeDef[];
24
+ relationships: RelationshipDef[];
25
+ stateTransitions: StateTransition[];
26
+ }
27
+ export interface ScreenDerivation {
28
+ name: string;
29
+ url: string;
30
+ entity: string;
31
+ pattern: string;
32
+ priority: string;
33
+ source: string;
34
+ relatedEntity?: string;
35
+ }
36
+ export interface DesignTokens {
37
+ spacing: {
38
+ base: number;
39
+ };
40
+ colors: {
41
+ accent: string;
42
+ surface: string;
43
+ secondary: string;
44
+ };
45
+ typography: {
46
+ body: {
47
+ size: string;
48
+ weight: string;
49
+ };
50
+ };
51
+ }
52
+ export declare function deriveScreensFromEntities(entities: EntityDef[]): ScreenDerivation[];
53
+ export declare function mapAttributeToWidget(attr: AttributeDef): string;
54
+ export declare function generateSampleData(attr: AttributeDef, count: number): (string | number | boolean)[];
55
+ export declare function renderMockupIndexHtml(screens: ScreenDerivation[], title: string): string;
56
+ export declare function renderEntityMockupHtml(entity: EntityDef, tokens: DesignTokens): string;