forge-dev-framework 1.0.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 (140) hide show
  1. package/.claude/rules/api-patterns.md +98 -0
  2. package/.claude/rules/security-baseline.md +204 -0
  3. package/.claude/rules/testing-standards.md +177 -0
  4. package/.claude/rules/ui-conventions.md +142 -0
  5. package/README.md +261 -0
  6. package/bin/forge.js +14 -0
  7. package/dist/bin/forge.js +14 -0
  8. package/dist/cli/index.d.ts +22 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +116 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/commands/base.d.ts +31 -0
  13. package/dist/commands/base.d.ts.map +1 -0
  14. package/dist/commands/base.js +31 -0
  15. package/dist/commands/base.js.map +1 -0
  16. package/dist/commands/config.d.ts +14 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js +175 -0
  19. package/dist/commands/config.js.map +1 -0
  20. package/dist/commands/generate.d.ts +17 -0
  21. package/dist/commands/generate.d.ts.map +1 -0
  22. package/dist/commands/generate.js +159 -0
  23. package/dist/commands/generate.js.map +1 -0
  24. package/dist/commands/help.d.ts +11 -0
  25. package/dist/commands/help.d.ts.map +1 -0
  26. package/dist/commands/help.js +65 -0
  27. package/dist/commands/help.js.map +1 -0
  28. package/dist/commands/index.d.ts +8 -0
  29. package/dist/commands/index.d.ts.map +1 -0
  30. package/dist/commands/index.js +8 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/init.d.ts +10 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +22 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/status.d.ts +13 -0
  37. package/dist/commands/status.d.ts.map +1 -0
  38. package/dist/commands/status.js +101 -0
  39. package/dist/commands/status.js.map +1 -0
  40. package/dist/commands/stubs.d.ts +14 -0
  41. package/dist/commands/stubs.d.ts.map +1 -0
  42. package/dist/commands/stubs.js +30 -0
  43. package/dist/commands/stubs.js.map +1 -0
  44. package/dist/generators/index.d.ts +11 -0
  45. package/dist/generators/index.d.ts.map +1 -0
  46. package/dist/generators/index.js +10 -0
  47. package/dist/generators/index.js.map +1 -0
  48. package/dist/generators/required-fields.d.ts +74 -0
  49. package/dist/generators/required-fields.d.ts.map +1 -0
  50. package/dist/generators/required-fields.js +179 -0
  51. package/dist/generators/required-fields.js.map +1 -0
  52. package/dist/generators/template-engine.d.ts +65 -0
  53. package/dist/generators/template-engine.d.ts.map +1 -0
  54. package/dist/generators/template-engine.js +209 -0
  55. package/dist/generators/template-engine.js.map +1 -0
  56. package/dist/generators/token-validator.d.ts +51 -0
  57. package/dist/generators/token-validator.d.ts.map +1 -0
  58. package/dist/generators/token-validator.js +141 -0
  59. package/dist/generators/token-validator.js.map +1 -0
  60. package/dist/generators/types.d.ts +433 -0
  61. package/dist/generators/types.d.ts.map +1 -0
  62. package/dist/generators/types.js +5 -0
  63. package/dist/generators/types.js.map +1 -0
  64. package/dist/generators/xml-task-generator.d.ts +67 -0
  65. package/dist/generators/xml-task-generator.d.ts.map +1 -0
  66. package/dist/generators/xml-task-generator.js +297 -0
  67. package/dist/generators/xml-task-generator.js.map +1 -0
  68. package/dist/git/__tests__/worktree.test.d.ts +5 -0
  69. package/dist/git/__tests__/worktree.test.d.ts.map +1 -0
  70. package/dist/git/__tests__/worktree.test.js +121 -0
  71. package/dist/git/__tests__/worktree.test.js.map +1 -0
  72. package/dist/git/codeowners.d.ts +101 -0
  73. package/dist/git/codeowners.d.ts.map +1 -0
  74. package/dist/git/codeowners.js +216 -0
  75. package/dist/git/codeowners.js.map +1 -0
  76. package/dist/git/commit.d.ts +135 -0
  77. package/dist/git/commit.d.ts.map +1 -0
  78. package/dist/git/commit.js +223 -0
  79. package/dist/git/commit.js.map +1 -0
  80. package/dist/git/hooks/commit-msg.d.ts +8 -0
  81. package/dist/git/hooks/commit-msg.d.ts.map +1 -0
  82. package/dist/git/hooks/commit-msg.js +34 -0
  83. package/dist/git/hooks/commit-msg.js.map +1 -0
  84. package/dist/git/hooks/pre-commit.d.ts +8 -0
  85. package/dist/git/hooks/pre-commit.d.ts.map +1 -0
  86. package/dist/git/hooks/pre-commit.js +34 -0
  87. package/dist/git/hooks/pre-commit.js.map +1 -0
  88. package/dist/git/pre-commit-hooks.d.ts +117 -0
  89. package/dist/git/pre-commit-hooks.d.ts.map +1 -0
  90. package/dist/git/pre-commit-hooks.js +270 -0
  91. package/dist/git/pre-commit-hooks.js.map +1 -0
  92. package/dist/git/wipe-protocol.d.ts +281 -0
  93. package/dist/git/wipe-protocol.d.ts.map +1 -0
  94. package/dist/git/wipe-protocol.js +237 -0
  95. package/dist/git/wipe-protocol.js.map +1 -0
  96. package/dist/git/worktree.d.ts +69 -0
  97. package/dist/git/worktree.d.ts.map +1 -0
  98. package/dist/git/worktree.js +202 -0
  99. package/dist/git/worktree.js.map +1 -0
  100. package/dist/scripts/install.d.ts +8 -0
  101. package/dist/scripts/install.d.ts.map +1 -0
  102. package/dist/scripts/install.js +161 -0
  103. package/dist/scripts/install.js.map +1 -0
  104. package/dist/types/config.d.ts +30 -0
  105. package/dist/types/config.d.ts.map +1 -0
  106. package/dist/types/config.js +23 -0
  107. package/dist/types/config.js.map +1 -0
  108. package/dist/types/index.d.ts +6 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/index.js +6 -0
  111. package/dist/types/index.js.map +1 -0
  112. package/dist/types/state.d.ts +56 -0
  113. package/dist/types/state.d.ts.map +1 -0
  114. package/dist/types/state.js +6 -0
  115. package/dist/types/state.js.map +1 -0
  116. package/dist/utils/config.d.ts +15 -0
  117. package/dist/utils/config.d.ts.map +1 -0
  118. package/dist/utils/config.js +80 -0
  119. package/dist/utils/config.js.map +1 -0
  120. package/dist/utils/errors.d.ts +25 -0
  121. package/dist/utils/errors.d.ts.map +1 -0
  122. package/dist/utils/errors.js +48 -0
  123. package/dist/utils/errors.js.map +1 -0
  124. package/dist/utils/index.d.ts +11 -0
  125. package/dist/utils/index.d.ts.map +1 -0
  126. package/dist/utils/index.js +9 -0
  127. package/dist/utils/index.js.map +1 -0
  128. package/dist/utils/logger.d.ts +34 -0
  129. package/dist/utils/logger.d.ts.map +1 -0
  130. package/dist/utils/logger.js +73 -0
  131. package/dist/utils/logger.js.map +1 -0
  132. package/dist/utils/state-api.d.ts +128 -0
  133. package/dist/utils/state-api.d.ts.map +1 -0
  134. package/dist/utils/state-api.js +170 -0
  135. package/dist/utils/state-api.js.map +1 -0
  136. package/dist/utils/template-client.d.ts +73 -0
  137. package/dist/utils/template-client.d.ts.map +1 -0
  138. package/dist/utils/template-client.js +151 -0
  139. package/dist/utils/template-client.js.map +1 -0
  140. package/package.json +72 -0
@@ -0,0 +1,101 @@
1
+ import { ForgeCommand } from './base.js';
2
+ import { loadConfig, getState, isForgeProject } from '../utils/index.js';
3
+ import { ProjectNotFoundError, formatError } from '../utils/index.js';
4
+ import chalk from 'chalk';
5
+ /**
6
+ * Status Command - Show current progress, active agents, task graph
7
+ */
8
+ export class StatusCommand extends ForgeCommand {
9
+ register() {
10
+ this.program
11
+ .command('status')
12
+ .description('Show current progress, active agents, task graph')
13
+ .option('-v, --verbose', 'Show detailed information')
14
+ .action((options) => this.execute(options));
15
+ }
16
+ async execute(options = {}) {
17
+ try {
18
+ const projectRoot = process.cwd();
19
+ // Check if we're in a FORGE project using State API
20
+ if (!isForgeProject(projectRoot)) {
21
+ throw new ProjectNotFoundError(projectRoot);
22
+ }
23
+ // Load configuration
24
+ this.config = loadConfig(projectRoot);
25
+ // Load state using State API
26
+ const state = getState(projectRoot);
27
+ // Display status
28
+ this.displayStatus(state, options.verbose);
29
+ }
30
+ catch (error) {
31
+ this.logger.error(formatError(error));
32
+ process.exit(1);
33
+ }
34
+ }
35
+ displayStatus(state, verbose) {
36
+ this.logger.header('FORGE Project Status');
37
+ if (state?.project) {
38
+ const p = state.project;
39
+ console.log(chalk.white('Project:'), chalk.bold(p.name));
40
+ console.log(chalk.white('Status:'), this.formatStatus(p.status));
41
+ console.log(chalk.white('Milestone:'), chalk.cyan(p.currentMilestone));
42
+ console.log(chalk.white('Phase:'), chalk.cyan(`Phase ${p.currentPhase}`));
43
+ }
44
+ else {
45
+ console.log(chalk.yellow('No project state found. Run ') + chalk.cyan('forge init') + chalk.yellow(' to initialize.'));
46
+ }
47
+ this.logger.newline();
48
+ if (state?.tasks) {
49
+ this.displayTaskSummary(state.tasks);
50
+ }
51
+ if (verbose && state?.contracts) {
52
+ this.displayContracts(state.contracts);
53
+ }
54
+ }
55
+ formatStatus(status) {
56
+ switch (status) {
57
+ case 'approved':
58
+ case 'completed':
59
+ return chalk.green(status);
60
+ case 'in-progress':
61
+ return chalk.yellow(status);
62
+ case 'blocked':
63
+ return chalk.red(status);
64
+ default:
65
+ return chalk.white(status);
66
+ }
67
+ }
68
+ displayTaskSummary(tasks) {
69
+ const summary = {
70
+ pending: tasks.filter((t) => t.status === 'pending').length,
71
+ in_progress: tasks.filter((t) => t.status === 'in_progress').length,
72
+ completed: tasks.filter((t) => t.status === 'completed').length,
73
+ blocked: tasks.filter((t) => t.status === 'blocked').length,
74
+ };
75
+ console.log(chalk.bold('Tasks:'));
76
+ console.log(chalk.gray(' ├─ Pending: '), chalk.yellow(String(summary.pending)));
77
+ console.log(chalk.gray(' ├─ In Progress: '), chalk.blue(String(summary.in_progress)));
78
+ console.log(chalk.gray(' ├─ Completed: '), chalk.green(String(summary.completed)));
79
+ console.log(chalk.gray(' └─ Blocked: '), chalk.red(String(summary.blocked)));
80
+ this.logger.newline();
81
+ // Show in-progress tasks
82
+ const inProgress = tasks.filter((t) => t.status === 'in_progress');
83
+ if (inProgress.length > 0) {
84
+ console.log(chalk.bold.white('Active Work:'));
85
+ inProgress.forEach((task) => {
86
+ console.log(chalk.cyan(` • ${task.id}:`), chalk.white(task.title));
87
+ console.log(chalk.gray(` Owner: ${task.ownerRole} | Priority: ${task.priority}`));
88
+ });
89
+ this.logger.newline();
90
+ }
91
+ }
92
+ displayContracts(contracts) {
93
+ console.log(chalk.bold.white('Contracts:'));
94
+ contracts.forEach((contract) => {
95
+ console.log(chalk.cyan(` • ${contract.id}:`), chalk.gray(contract.path));
96
+ console.log(chalk.gray(` Version: ${contract.version} | Consumers: ${contract.consumers.join(', ')}`));
97
+ });
98
+ this.logger.newline();
99
+ }
100
+ }
101
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Stub Commands - Placeholder implementations for Milestone 2-5 commands
3
+ * These will be fully implemented in their respective tasks
4
+ */
5
+ import { Command } from 'commander';
6
+ import { ForgeCommand } from './base.js';
7
+ export declare class StubCommand extends ForgeCommand {
8
+ private commandName;
9
+ constructor(program: Command, commandName: string);
10
+ register(): void;
11
+ execute(): Promise<void>;
12
+ }
13
+ export declare function createStubCommand(name: string, description: string): (program: Command) => StubCommand;
14
+ //# sourceMappingURL=stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/commands/stubs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,qBAAa,WAAY,SAAQ,YAAY;IACb,OAAO,CAAC,WAAW;gBAArC,OAAO,EAAE,OAAO,EAAU,WAAW,EAAE,MAAM;IAIzD,QAAQ,IAAI,IAAI;IAOV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,IACzD,SAAS,OAAO,iBAKzB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Stub Commands - Placeholder implementations for Milestone 2-5 commands
3
+ * These will be fully implemented in their respective tasks
4
+ */
5
+ import { ForgeCommand } from './base.js';
6
+ export class StubCommand extends ForgeCommand {
7
+ commandName;
8
+ constructor(program, commandName) {
9
+ super(program);
10
+ this.commandName = commandName;
11
+ }
12
+ register() {
13
+ this.program
14
+ .command(this.commandName)
15
+ .allowUnknownOption(true)
16
+ .action(() => this.execute());
17
+ }
18
+ async execute() {
19
+ this.logger.info(`Command '${this.commandName}' will be implemented in a future milestone.`);
20
+ }
21
+ }
22
+ // Factory function for creating stub commands
23
+ export function createStubCommand(name, description) {
24
+ return (program) => {
25
+ const cmd = new StubCommand(program, name);
26
+ cmd.register();
27
+ return cmd;
28
+ };
29
+ }
30
+ //# sourceMappingURL=stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../../src/commands/stubs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,OAAO,WAAY,SAAQ,YAAY;IACL;IAAtC,YAAY,OAAgB,EAAU,WAAmB;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,gBAAW,GAAX,WAAW,CAAQ;IAEzD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,OAAO;aACT,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;aACzB,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,8CAA8C,CAAC,CAAC;IAC/F,CAAC;CACF;AAED,8CAA8C;AAC9C,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAmB;IACjE,OAAO,CAAC,OAAgB,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,GAAG,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * FORGE Template & Artifact Generators
3
+ *
4
+ * Exports all template engines, generators, and validators
5
+ */
6
+ export { TemplateEngine, createTemplateEngine } from './template-engine.js';
7
+ export { countTokens, countCodeTokens, countTokensArray, validateTokenLimit, getTokenCountDetails, checkFileTokenLimit, suggestReduction, formatTokenCount, } from './token-validator.js';
8
+ export { XmlTaskGenerator } from './xml-task-generator.js';
9
+ export { REQUIRED_FIELDS, validateRequiredFields, getFieldDescriptions, getPromptQuestions, type RequiredFieldSet, } from './required-fields.js';
10
+ export type { TemplateContext, TemplateConfig, RenderResult, TokenLimits, XmlTaskSpec, TokenCountResult, } from './types.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * FORGE Template & Artifact Generators
3
+ *
4
+ * Exports all template engines, generators, and validators
5
+ */
6
+ export { TemplateEngine, createTemplateEngine } from './template-engine.js';
7
+ export { countTokens, countCodeTokens, countTokensArray, validateTokenLimit, getTokenCountDetails, checkFileTokenLimit, suggestReduction, formatTokenCount, } from './token-validator.js';
8
+ export { XmlTaskGenerator } from './xml-task-generator.js';
9
+ export { REQUIRED_FIELDS, validateRequiredFields, getFieldDescriptions, getPromptQuestions, } from './required-fields.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Required fields for TemplateContext validation
3
+ *
4
+ * CLI-ENGINE uses these to prompt users and validate collected data.
5
+ */
6
+ /**
7
+ * Minimum required fields for basic template rendering
8
+ */
9
+ export declare const CORE_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone"];
10
+ /**
11
+ * Required fields for CLAUDE.md generation
12
+ */
13
+ export declare const CLAUDE_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "techStack.backend", "patterns", "rules"];
14
+ /**
15
+ * Required fields for PROJECT.md generation
16
+ */
17
+ export declare const PROJECT_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "problemStatement", "solution", "architectureDiagram", "successMetrics"];
18
+ /**
19
+ * Required fields for REQUIREMENTS.md generation
20
+ */
21
+ export declare const REQUIREMENTS_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "features", "nfrs"];
22
+ /**
23
+ * Required fields for ROADMAP.md generation
24
+ */
25
+ export declare const ROADMAP_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "milestones", "phases", "dependencyGraph", "definitionOfDone"];
26
+ /**
27
+ * Required fields for PLAN.md generation
28
+ */
29
+ export declare const PLAN_REQUIRED_FIELDS: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "currentPhase", "phaseName", "phaseDescription", "tasks", "dependencies", "successCriteria"];
30
+ /**
31
+ * Required fields for .claude/rules/* generation
32
+ */
33
+ export declare const RULES_REQUIRED_FIELDS: readonly ["projectName", "techStack"];
34
+ /**
35
+ * Required fields for forge.config.json generation
36
+ */
37
+ export declare const CONFIG_REQUIRED_FIELDS: readonly ["projectName", "version", "mode", "depth", "maxTeammates", "taskLimit", "agentProfile", "workflow", "git"];
38
+ /**
39
+ * All required field sets
40
+ */
41
+ export declare const REQUIRED_FIELDS: {
42
+ readonly core: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone"];
43
+ readonly claude: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "techStack.backend", "patterns", "rules"];
44
+ readonly project: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "problemStatement", "solution", "architectureDiagram", "successMetrics"];
45
+ readonly requirements: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "features", "nfrs"];
46
+ readonly roadmap: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "milestones", "phases", "dependencyGraph", "definitionOfDone"];
47
+ readonly plan: readonly ["projectName", "version", "timestamp", "vision", "techStack", "patterns", "rules", "definitionOfDone", "currentPhase", "phaseName", "phaseDescription", "tasks", "dependencies", "successCriteria"];
48
+ readonly rules: readonly ["projectName", "techStack"];
49
+ readonly config: readonly ["projectName", "version", "mode", "depth", "maxTeammates", "taskLimit", "agentProfile", "workflow", "git"];
50
+ };
51
+ /**
52
+ * Type for required field sets
53
+ */
54
+ export type RequiredFieldSet = keyof typeof REQUIRED_FIELDS;
55
+ /**
56
+ * Validate that context has all required fields for a specific template
57
+ */
58
+ export declare function validateRequiredFields(context: Record<string, unknown>, fieldSet: RequiredFieldSet): {
59
+ valid: boolean;
60
+ missing: string[];
61
+ };
62
+ /**
63
+ * Get human-readable description of required fields
64
+ */
65
+ export declare function getFieldDescriptions(): Record<string, string>;
66
+ /**
67
+ * Prompt questions for CLI-ENGINE to use
68
+ */
69
+ export declare function getPromptQuestions(fieldSet: RequiredFieldSet): {
70
+ name: "mode" | "depth" | "maxTeammates" | "taskLimit" | "agentProfile" | "workflow" | "git" | "version" | "rules" | "projectName" | "timestamp" | "vision" | "techStack" | "patterns" | "definitionOfDone" | "techStack.backend" | "problemStatement" | "solution" | "architectureDiagram" | "successMetrics" | "features" | "nfrs" | "milestones" | "phases" | "dependencyGraph" | "currentPhase" | "phaseName" | "phaseDescription" | "tasks" | "dependencies" | "successCriteria";
71
+ description: string;
72
+ required: boolean;
73
+ }[];
74
+ //# sourceMappingURL=required-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required-fields.d.ts","sourceRoot":"","sources":["../../src/generators/required-fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,kHASvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB,4JAKzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB,2LAM1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,4BAA4B,sIAI/B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB,iLAM1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,+MAQvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,uCAGxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB,sHAUzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE5D;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,gBAAgB,GACzB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAuBvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsC7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB;;;;IAS5D"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Required fields for TemplateContext validation
3
+ *
4
+ * CLI-ENGINE uses these to prompt users and validate collected data.
5
+ */
6
+ /**
7
+ * Minimum required fields for basic template rendering
8
+ */
9
+ export const CORE_REQUIRED_FIELDS = [
10
+ 'projectName',
11
+ 'version',
12
+ 'timestamp',
13
+ 'vision',
14
+ 'techStack',
15
+ 'patterns',
16
+ 'rules',
17
+ 'definitionOfDone',
18
+ ];
19
+ /**
20
+ * Required fields for CLAUDE.md generation
21
+ */
22
+ export const CLAUDE_REQUIRED_FIELDS = [
23
+ ...CORE_REQUIRED_FIELDS,
24
+ 'techStack.backend',
25
+ 'patterns',
26
+ 'rules',
27
+ ];
28
+ /**
29
+ * Required fields for PROJECT.md generation
30
+ */
31
+ export const PROJECT_REQUIRED_FIELDS = [
32
+ ...CORE_REQUIRED_FIELDS,
33
+ 'problemStatement',
34
+ 'solution',
35
+ 'architectureDiagram',
36
+ 'successMetrics',
37
+ ];
38
+ /**
39
+ * Required fields for REQUIREMENTS.md generation
40
+ */
41
+ export const REQUIREMENTS_REQUIRED_FIELDS = [
42
+ ...CORE_REQUIRED_FIELDS,
43
+ 'features',
44
+ 'nfrs',
45
+ ];
46
+ /**
47
+ * Required fields for ROADMAP.md generation
48
+ */
49
+ export const ROADMAP_REQUIRED_FIELDS = [
50
+ ...CORE_REQUIRED_FIELDS,
51
+ 'milestones',
52
+ 'phases',
53
+ 'dependencyGraph',
54
+ 'definitionOfDone',
55
+ ];
56
+ /**
57
+ * Required fields for PLAN.md generation
58
+ */
59
+ export const PLAN_REQUIRED_FIELDS = [
60
+ ...CORE_REQUIRED_FIELDS,
61
+ 'currentPhase',
62
+ 'phaseName',
63
+ 'phaseDescription',
64
+ 'tasks',
65
+ 'dependencies',
66
+ 'successCriteria',
67
+ ];
68
+ /**
69
+ * Required fields for .claude/rules/* generation
70
+ */
71
+ export const RULES_REQUIRED_FIELDS = [
72
+ 'projectName',
73
+ 'techStack',
74
+ ];
75
+ /**
76
+ * Required fields for forge.config.json generation
77
+ */
78
+ export const CONFIG_REQUIRED_FIELDS = [
79
+ 'projectName',
80
+ 'version',
81
+ 'mode',
82
+ 'depth',
83
+ 'maxTeammates',
84
+ 'taskLimit',
85
+ 'agentProfile',
86
+ 'workflow',
87
+ 'git',
88
+ ];
89
+ /**
90
+ * All required field sets
91
+ */
92
+ export const REQUIRED_FIELDS = {
93
+ core: CORE_REQUIRED_FIELDS,
94
+ claude: CLAUDE_REQUIRED_FIELDS,
95
+ project: PROJECT_REQUIRED_FIELDS,
96
+ requirements: REQUIREMENTS_REQUIRED_FIELDS,
97
+ roadmap: ROADMAP_REQUIRED_FIELDS,
98
+ plan: PLAN_REQUIRED_FIELDS,
99
+ rules: RULES_REQUIRED_FIELDS,
100
+ config: CONFIG_REQUIRED_FIELDS,
101
+ };
102
+ /**
103
+ * Validate that context has all required fields for a specific template
104
+ */
105
+ export function validateRequiredFields(context, fieldSet) {
106
+ const required = REQUIRED_FIELDS[fieldSet];
107
+ const missing = [];
108
+ for (const field of required) {
109
+ const parts = field.split('.');
110
+ let current = context;
111
+ for (const part of parts) {
112
+ if (current && typeof current === 'object' && part in current) {
113
+ current = current[part];
114
+ }
115
+ else {
116
+ missing.push(field);
117
+ current = undefined;
118
+ break;
119
+ }
120
+ }
121
+ }
122
+ return {
123
+ valid: missing.length === 0,
124
+ missing,
125
+ };
126
+ }
127
+ /**
128
+ * Get human-readable description of required fields
129
+ */
130
+ export function getFieldDescriptions() {
131
+ return {
132
+ // Core fields
133
+ projectName: 'The name of your project',
134
+ version: 'Project version (e.g., "0.1.0", "1.0.0")',
135
+ timestamp: 'ISO timestamp of generation (auto-generated)',
136
+ vision: 'Brief statement of what the project will achieve',
137
+ techStack: 'Technology choices (backend, frontend, database, infrastructure)',
138
+ patterns: 'Core architectural patterns used in the project',
139
+ rules: 'Hard rules and constraints for the project',
140
+ definitionOfDone: 'Criteria that define when a milestone is complete',
141
+ // Extended fields
142
+ problemStatement: 'What problem does this project solve?',
143
+ solution: 'High-level approach to solving the problem',
144
+ architectureDiagram: 'Text-based diagram showing system architecture',
145
+ successMetrics: 'Measurable goals that indicate project success',
146
+ features: 'List of features with user stories and acceptance criteria',
147
+ nfrs: 'Non-functional requirements (performance, security, scalability, etc.)',
148
+ milestones: 'Major milestones with deliverables and dependencies',
149
+ phases: 'Development phases broken down from milestones',
150
+ dependencyGraph: 'Visual representation of task dependencies',
151
+ currentPhase: 'Current phase being planned/executed',
152
+ phaseName: 'Human-readable name of current phase',
153
+ phaseDescription: 'Detailed description of current phase goals',
154
+ tasks: 'List of tasks with owners, dependencies, and acceptance criteria',
155
+ dependencies: 'Task dependency information for graph generation',
156
+ successCriteria: 'Criteria that define successful phase completion',
157
+ // Config fields
158
+ mode: 'Execution mode: "yolo" (auto-approve) or "interactive"',
159
+ depth: 'Planning depth: "quick", "standard", or "comprehensive"',
160
+ maxTeammates: 'Maximum number of parallel agents (2-6)',
161
+ taskLimit: 'Maximum tasks per teammate (3-8)',
162
+ agentProfile: 'Quality tier: "quality", "balanced", or "budget"',
163
+ workflow: 'Workflow toggle settings (research, planCheck, tribunal, contractFirst)',
164
+ git: 'Git strategy settings (strategy, branchTemplate, squashOnShip)',
165
+ };
166
+ }
167
+ /**
168
+ * Prompt questions for CLI-ENGINE to use
169
+ */
170
+ export function getPromptQuestions(fieldSet) {
171
+ const descriptions = getFieldDescriptions();
172
+ const required = REQUIRED_FIELDS[fieldSet];
173
+ return required.map((field) => ({
174
+ name: field,
175
+ description: descriptions[field] || `Enter ${field}`,
176
+ required: true,
177
+ }));
178
+ }
179
+ //# sourceMappingURL=required-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required-fields.js","sourceRoot":"","sources":["../../src/generators/required-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Template Rendering Engine
3
+ *
4
+ * Uses Handlebars for template rendering with support for:
5
+ * - Variable interpolation ({{ variable }})
6
+ * - Conditional sections ({{#if}}...)
7
+ * - List iteration ({{#each}}...)
8
+ * - Custom helpers for formatting
9
+ */
10
+ import type { TemplateContext, TemplateConfig, RenderResult } from './types.js';
11
+ /**
12
+ * Template Engine class
13
+ */
14
+ export declare class TemplateEngine {
15
+ private config;
16
+ private handlebars;
17
+ constructor(config: TemplateConfig);
18
+ /**
19
+ * Register custom Handlebars helpers
20
+ */
21
+ private registerHelpers;
22
+ /**
23
+ * Load a template file
24
+ */
25
+ private loadTemplate;
26
+ /**
27
+ * Get token limit for a specific template
28
+ */
29
+ private getTokenLimit;
30
+ /**
31
+ * Render a template with the given context
32
+ */
33
+ render(templateName: string, context: TemplateContext): Promise<RenderResult>;
34
+ /**
35
+ * Render a template string directly (without loading from file)
36
+ */
37
+ renderString(templateString: string, context: TemplateContext): string;
38
+ /**
39
+ * Render multiple templates in batch
40
+ */
41
+ renderBatch(templates: Array<{
42
+ name: string;
43
+ context: TemplateContext;
44
+ }>): Promise<Map<string, RenderResult>>;
45
+ /**
46
+ * Validate context data structure
47
+ */
48
+ validateContext(context: TemplateContext): {
49
+ valid: boolean;
50
+ errors: string[];
51
+ };
52
+ /**
53
+ * Create a partial template that can be included in other templates
54
+ */
55
+ registerPartial(name: string, templateString: string): void;
56
+ /**
57
+ * Register a partial from a file
58
+ */
59
+ registerPartialFromFile(name: string, partialPath: string): Promise<void>;
60
+ }
61
+ /**
62
+ * Create a template engine instance with default configuration
63
+ */
64
+ export declare function createTemplateEngine(config?: Partial<TemplateConfig>): TemplateEngine;
65
+ //# sourceMappingURL=template-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/generators/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AAG7F;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAoB;gBAE1B,MAAM,EAAE,cAAc;IAMlC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;YACW,YAAY;IAK1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA+BnF;;OAEG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAStE;;OAEG;IACG,WAAW,CACf,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,GAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAWrC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAgC/E;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAI3D;;OAEG;IACG,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIhF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAcrF"}