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.
- package/.claude/rules/api-patterns.md +98 -0
- package/.claude/rules/security-baseline.md +204 -0
- package/.claude/rules/testing-standards.md +177 -0
- package/.claude/rules/ui-conventions.md +142 -0
- package/README.md +261 -0
- package/bin/forge.js +14 -0
- package/dist/bin/forge.js +14 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +116 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/base.d.ts +31 -0
- package/dist/commands/base.d.ts.map +1 -0
- package/dist/commands/base.js +31 -0
- package/dist/commands/base.js.map +1 -0
- package/dist/commands/config.d.ts +14 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +175 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +159 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/help.d.ts +11 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +65 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +22 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/status.d.ts +13 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +101 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stubs.d.ts +14 -0
- package/dist/commands/stubs.d.ts.map +1 -0
- package/dist/commands/stubs.js +30 -0
- package/dist/commands/stubs.js.map +1 -0
- package/dist/generators/index.d.ts +11 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +10 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/required-fields.d.ts +74 -0
- package/dist/generators/required-fields.d.ts.map +1 -0
- package/dist/generators/required-fields.js +179 -0
- package/dist/generators/required-fields.js.map +1 -0
- package/dist/generators/template-engine.d.ts +65 -0
- package/dist/generators/template-engine.d.ts.map +1 -0
- package/dist/generators/template-engine.js +209 -0
- package/dist/generators/template-engine.js.map +1 -0
- package/dist/generators/token-validator.d.ts +51 -0
- package/dist/generators/token-validator.d.ts.map +1 -0
- package/dist/generators/token-validator.js +141 -0
- package/dist/generators/token-validator.js.map +1 -0
- package/dist/generators/types.d.ts +433 -0
- package/dist/generators/types.d.ts.map +1 -0
- package/dist/generators/types.js +5 -0
- package/dist/generators/types.js.map +1 -0
- package/dist/generators/xml-task-generator.d.ts +67 -0
- package/dist/generators/xml-task-generator.d.ts.map +1 -0
- package/dist/generators/xml-task-generator.js +297 -0
- package/dist/generators/xml-task-generator.js.map +1 -0
- package/dist/git/__tests__/worktree.test.d.ts +5 -0
- package/dist/git/__tests__/worktree.test.d.ts.map +1 -0
- package/dist/git/__tests__/worktree.test.js +121 -0
- package/dist/git/__tests__/worktree.test.js.map +1 -0
- package/dist/git/codeowners.d.ts +101 -0
- package/dist/git/codeowners.d.ts.map +1 -0
- package/dist/git/codeowners.js +216 -0
- package/dist/git/codeowners.js.map +1 -0
- package/dist/git/commit.d.ts +135 -0
- package/dist/git/commit.d.ts.map +1 -0
- package/dist/git/commit.js +223 -0
- package/dist/git/commit.js.map +1 -0
- package/dist/git/hooks/commit-msg.d.ts +8 -0
- package/dist/git/hooks/commit-msg.d.ts.map +1 -0
- package/dist/git/hooks/commit-msg.js +34 -0
- package/dist/git/hooks/commit-msg.js.map +1 -0
- package/dist/git/hooks/pre-commit.d.ts +8 -0
- package/dist/git/hooks/pre-commit.d.ts.map +1 -0
- package/dist/git/hooks/pre-commit.js +34 -0
- package/dist/git/hooks/pre-commit.js.map +1 -0
- package/dist/git/pre-commit-hooks.d.ts +117 -0
- package/dist/git/pre-commit-hooks.d.ts.map +1 -0
- package/dist/git/pre-commit-hooks.js +270 -0
- package/dist/git/pre-commit-hooks.js.map +1 -0
- package/dist/git/wipe-protocol.d.ts +281 -0
- package/dist/git/wipe-protocol.d.ts.map +1 -0
- package/dist/git/wipe-protocol.js +237 -0
- package/dist/git/wipe-protocol.js.map +1 -0
- package/dist/git/worktree.d.ts +69 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +202 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/scripts/install.d.ts +8 -0
- package/dist/scripts/install.d.ts.map +1 -0
- package/dist/scripts/install.js +161 -0
- package/dist/scripts/install.js.map +1 -0
- package/dist/types/config.d.ts +30 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +23 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/state.d.ts +56 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +6 -0
- package/dist/types/state.js.map +1 -0
- package/dist/utils/config.d.ts +15 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +80 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/errors.d.ts +25 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +48 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/state-api.d.ts +128 -0
- package/dist/utils/state-api.d.ts.map +1 -0
- package/dist/utils/state-api.js +170 -0
- package/dist/utils/state-api.js.map +1 -0
- package/dist/utils/template-client.d.ts +73 -0
- package/dist/utils/template-client.d.ts.map +1 -0
- package/dist/utils/template-client.js +151 -0
- package/dist/utils/template-client.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,aAAa;IACb,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;IACX,UAAU;IACV,OAAO;IACP,kBAAkB;CACV,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,oBAAoB;IACvB,mBAAmB;IACnB,UAAU;IACV,OAAO;CACC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,oBAAoB;IACvB,kBAAkB;IAClB,UAAU;IACV,qBAAqB;IACrB,gBAAgB;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,GAAG,oBAAoB;IACvB,UAAU;IACV,MAAM;CACE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,oBAAoB;IACvB,YAAY;IACZ,QAAQ;IACR,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,oBAAoB;IACvB,cAAc;IACd,WAAW;IACX,kBAAkB;IAClB,OAAO;IACP,cAAc;IACd,iBAAiB;CACT,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,WAAW;CACH,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,aAAa;IACb,SAAS;IACT,MAAM;IACN,OAAO;IACP,cAAc;IACd,WAAW;IACX,cAAc;IACd,UAAU;IACV,KAAK;CACG,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,uBAAuB;IAChC,YAAY,EAAE,4BAA4B;IAC1C,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,qBAAqB;IAC5B,MAAM,EAAE,sBAAsB;CACtB,CAAC;AAOX;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAgC,EAChC,QAA0B;IAE1B,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,GAAY,OAAO,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC9D,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,GAAG,SAAS,CAAC;gBACpB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,cAAc;QACd,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,0CAA0C;QACnD,SAAS,EAAE,8CAA8C;QACzD,MAAM,EAAE,kDAAkD;QAC1D,SAAS,EAAE,kEAAkE;QAC7E,QAAQ,EAAE,iDAAiD;QAC3D,KAAK,EAAE,4CAA4C;QACnD,gBAAgB,EAAE,mDAAmD;QAErE,kBAAkB;QAClB,gBAAgB,EAAE,uCAAuC;QACzD,QAAQ,EAAE,4CAA4C;QACtD,mBAAmB,EAAE,gDAAgD;QACrE,cAAc,EAAE,gDAAgD;QAChE,QAAQ,EAAE,4DAA4D;QACtE,IAAI,EAAE,wEAAwE;QAC9E,UAAU,EAAE,qDAAqD;QACjE,MAAM,EAAE,gDAAgD;QACxD,eAAe,EAAE,4CAA4C;QAC7D,YAAY,EAAE,sCAAsC;QACpD,SAAS,EAAE,sCAAsC;QACjD,gBAAgB,EAAE,6CAA6C;QAC/D,KAAK,EAAE,kEAAkE;QACzE,YAAY,EAAE,kDAAkD;QAChE,eAAe,EAAE,kDAAkD;QAEnE,gBAAgB;QAChB,IAAI,EAAE,wDAAwD;QAC9D,KAAK,EAAE,yDAAyD;QAChE,YAAY,EAAE,yCAAyC;QACvD,SAAS,EAAE,kCAAkC;QAC7C,YAAY,EAAE,kDAAkD;QAChE,QAAQ,EAAE,yEAAyE;QACnF,GAAG,EAAE,gEAAgE;KACtE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA0B;IAC3D,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE3C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,EAAE;QACpD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -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"}
|