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 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE Error Classes
|
|
3
|
+
*/
|
|
4
|
+
export declare class ForgeError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
constructor(message: string, code: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class ConfigError extends ForgeError {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class StateError extends ForgeError {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class ValidationError extends ForgeError {
|
|
15
|
+
readonly validationErrors: string[];
|
|
16
|
+
constructor(message: string, validationErrors: string[]);
|
|
17
|
+
}
|
|
18
|
+
export declare class ProjectNotFoundError extends ForgeError {
|
|
19
|
+
constructor(projectRoot: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format error for user-friendly display
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatError(error: Error): string;
|
|
25
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,UAAW,SAAQ,KAAK;aACU,IAAI,EAAE,MAAM;gBAA7C,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,MAAM;CAK1D;AAED,qBAAa,WAAY,SAAQ,UAAU;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,UAAW,SAAQ,UAAU;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,UAAU;aACA,gBAAgB,EAAE,MAAM,EAAE;gBAA3D,OAAO,EAAE,MAAM,EAAkB,gBAAgB,EAAE,MAAM,EAAE;CAIxE;AAED,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,WAAW,EAAE,MAAM;CAIhC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAKhD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE Error Classes
|
|
3
|
+
*/
|
|
4
|
+
export class ForgeError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(message, code) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = 'ForgeError';
|
|
10
|
+
Error.captureStackTrace(this, this.constructor);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ConfigError extends ForgeError {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message, 'CONFIG_ERROR');
|
|
16
|
+
this.name = 'ConfigError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class StateError extends ForgeError {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message, 'STATE_ERROR');
|
|
22
|
+
this.name = 'StateError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ValidationError extends ForgeError {
|
|
26
|
+
validationErrors;
|
|
27
|
+
constructor(message, validationErrors) {
|
|
28
|
+
super(message, 'VALIDATION_ERROR');
|
|
29
|
+
this.validationErrors = validationErrors;
|
|
30
|
+
this.name = 'ValidationError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ProjectNotFoundError extends ForgeError {
|
|
34
|
+
constructor(projectRoot) {
|
|
35
|
+
super(`No FORGE project found at ${projectRoot}`, 'PROJECT_NOT_FOUND');
|
|
36
|
+
this.name = 'ProjectNotFoundError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format error for user-friendly display
|
|
41
|
+
*/
|
|
42
|
+
export function formatError(error) {
|
|
43
|
+
if (error instanceof ForgeError) {
|
|
44
|
+
return `${error.name}: ${error.message}`;
|
|
45
|
+
}
|
|
46
|
+
return `Error: ${error.message}`;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACU;IAA7C,YAAY,OAAe,EAAkB,IAAY;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,SAAI,GAAJ,IAAI,CAAQ;QAEvD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,UAAU;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IACA;IAA7C,YAAY,OAAe,EAAkB,gBAA0B;QACrE,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QADQ,qBAAgB,GAAhB,gBAAgB,CAAU;QAErE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClD,YAAY,WAAmB;QAC7B,KAAK,CAAC,6BAA6B,WAAW,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE Utility Exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './config';
|
|
5
|
+
export * from './errors';
|
|
6
|
+
export * from './logger';
|
|
7
|
+
export * from './state-api';
|
|
8
|
+
export * from './template-client';
|
|
9
|
+
export type { ForgeConfig, ForgeMode, ForgeDepth, GitStrategy, AgentProfile } from '../types/config.js';
|
|
10
|
+
export type { ForgeState, Task, TaskStatus, Contract, EventPayload, EventType } from '../types/state.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAGlC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxG,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE Logger - User-friendly output formatting
|
|
3
|
+
*/
|
|
4
|
+
export declare class Logger {
|
|
5
|
+
private quiet;
|
|
6
|
+
constructor(quiet?: boolean);
|
|
7
|
+
info(message: string): void;
|
|
8
|
+
success(message: string): void;
|
|
9
|
+
warning(message: string): void;
|
|
10
|
+
error(message: string): void;
|
|
11
|
+
debug(message: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Display a section header
|
|
14
|
+
*/
|
|
15
|
+
header(title: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Display a bullet point
|
|
18
|
+
*/
|
|
19
|
+
bullet(message: string, indent?: number): void;
|
|
20
|
+
/**
|
|
21
|
+
* Display a list item with number
|
|
22
|
+
*/
|
|
23
|
+
numbered(message: string, index: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Display a code block or path
|
|
26
|
+
*/
|
|
27
|
+
code(text: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Empty line for spacing
|
|
30
|
+
*/
|
|
31
|
+
newline(): void;
|
|
32
|
+
}
|
|
33
|
+
export declare const logger: Logger;
|
|
34
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAU;gBAEX,KAAK,GAAE,OAAe;IAIlC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO3B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAOjD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9C;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMxB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* FORGE Logger - User-friendly output formatting
|
|
4
|
+
*/
|
|
5
|
+
export class Logger {
|
|
6
|
+
quiet;
|
|
7
|
+
constructor(quiet = false) {
|
|
8
|
+
this.quiet = quiet;
|
|
9
|
+
}
|
|
10
|
+
info(message) {
|
|
11
|
+
if (!this.quiet)
|
|
12
|
+
console.log(chalk.blue('ℹ'), message);
|
|
13
|
+
}
|
|
14
|
+
success(message) {
|
|
15
|
+
if (!this.quiet)
|
|
16
|
+
console.log(chalk.green('✓'), message);
|
|
17
|
+
}
|
|
18
|
+
warning(message) {
|
|
19
|
+
if (!this.quiet)
|
|
20
|
+
console.log(chalk.yellow('⚠'), message);
|
|
21
|
+
}
|
|
22
|
+
error(message) {
|
|
23
|
+
console.error(chalk.red('✗'), message);
|
|
24
|
+
}
|
|
25
|
+
debug(message) {
|
|
26
|
+
if (process.env.DEBUG && !this.quiet) {
|
|
27
|
+
console.log(chalk.gray('[debug]'), message);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Display a section header
|
|
32
|
+
*/
|
|
33
|
+
header(title) {
|
|
34
|
+
if (!this.quiet) {
|
|
35
|
+
console.log('\n' + chalk.bold.cyan(title));
|
|
36
|
+
console.log(chalk.cyan('─'.repeat(title.length)));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Display a bullet point
|
|
41
|
+
*/
|
|
42
|
+
bullet(message, indent = 0) {
|
|
43
|
+
if (!this.quiet) {
|
|
44
|
+
const prefix = ' '.repeat(indent);
|
|
45
|
+
console.log(prefix + chalk.gray('•'), message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Display a list item with number
|
|
50
|
+
*/
|
|
51
|
+
numbered(message, index) {
|
|
52
|
+
if (!this.quiet) {
|
|
53
|
+
console.log(chalk.gray(`${index}.`), message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Display a code block or path
|
|
58
|
+
*/
|
|
59
|
+
code(text) {
|
|
60
|
+
if (!this.quiet) {
|
|
61
|
+
console.log(chalk.gray(text));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Empty line for spacing
|
|
66
|
+
*/
|
|
67
|
+
newline() {
|
|
68
|
+
if (!this.quiet)
|
|
69
|
+
console.log();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export const logger = new Logger();
|
|
73
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AAEH,MAAM,OAAO,MAAM;IACT,KAAK,CAAU;IAEvB,YAAY,QAAiB,KAAK;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAe,EAAE,SAAiB,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe,EAAE,KAAa;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE State Access API
|
|
3
|
+
* Interface between CLI-ENGINE and STATE-ENGINE
|
|
4
|
+
*
|
|
5
|
+
* This provides the API contract specified in state/STATE_API_SPEC.md
|
|
6
|
+
*/
|
|
7
|
+
export interface Task {
|
|
8
|
+
id: string;
|
|
9
|
+
title: string;
|
|
10
|
+
ownerRole: string;
|
|
11
|
+
status: string;
|
|
12
|
+
deps: string[];
|
|
13
|
+
allowedPaths: string[];
|
|
14
|
+
acceptance: string[];
|
|
15
|
+
verify: string[];
|
|
16
|
+
commit: string | null;
|
|
17
|
+
requests: string[];
|
|
18
|
+
priority: number;
|
|
19
|
+
blockedBy: string[];
|
|
20
|
+
blocks: string[];
|
|
21
|
+
assignedTo: string | null;
|
|
22
|
+
createdAt?: string;
|
|
23
|
+
startedAt?: string | null;
|
|
24
|
+
completedAt?: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface Contract {
|
|
27
|
+
id: string;
|
|
28
|
+
path: string;
|
|
29
|
+
version: string;
|
|
30
|
+
publishedBy: string;
|
|
31
|
+
consumers: string[];
|
|
32
|
+
publishedAt?: string;
|
|
33
|
+
status: 'draft' | 'published' | 'deprecated';
|
|
34
|
+
}
|
|
35
|
+
export interface ProjectMetadata {
|
|
36
|
+
name: string;
|
|
37
|
+
status: string;
|
|
38
|
+
currentMilestone: string;
|
|
39
|
+
currentPhase: number;
|
|
40
|
+
createdAt?: string;
|
|
41
|
+
updatedAt?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface StateMetadata {
|
|
44
|
+
schemaVersion: string;
|
|
45
|
+
lastEventId: string;
|
|
46
|
+
eventCount: number;
|
|
47
|
+
}
|
|
48
|
+
export interface State {
|
|
49
|
+
project: ProjectMetadata;
|
|
50
|
+
tasks: Task[];
|
|
51
|
+
contracts: Contract[];
|
|
52
|
+
eventsPointer: string;
|
|
53
|
+
metadata?: StateMetadata;
|
|
54
|
+
}
|
|
55
|
+
export interface EventPayload {
|
|
56
|
+
commitHash?: string;
|
|
57
|
+
filesChanged?: string[];
|
|
58
|
+
testsRun?: number;
|
|
59
|
+
testsPassed?: number;
|
|
60
|
+
blockingTasks?: string[];
|
|
61
|
+
reason?: string;
|
|
62
|
+
contractId?: string;
|
|
63
|
+
contractPath?: string;
|
|
64
|
+
requestedBy?: string;
|
|
65
|
+
requestedFor?: string;
|
|
66
|
+
version?: string;
|
|
67
|
+
severity?: 'P0' | 'P1' | 'P2';
|
|
68
|
+
finding?: string;
|
|
69
|
+
requirementRef?: string;
|
|
70
|
+
resolvedBy?: string;
|
|
71
|
+
resolution?: string;
|
|
72
|
+
publishedBy?: string;
|
|
73
|
+
consumers?: string[];
|
|
74
|
+
[key: string]: unknown;
|
|
75
|
+
}
|
|
76
|
+
export type EventType = 'TASK_STARTED' | 'TASK_COMPLETED' | 'TASK_BLOCKED' | 'TASK_FAILED' | 'TASK_CANCELLED' | 'REQUEST_CONTRACT' | 'CONTRACT_PUBLISHED' | 'REVIEW_FINDING' | 'REVIEW_RESOLVED';
|
|
77
|
+
export interface Event {
|
|
78
|
+
eventId: string;
|
|
79
|
+
timestamp: string;
|
|
80
|
+
taskId: string | null;
|
|
81
|
+
actor: string;
|
|
82
|
+
type: EventType;
|
|
83
|
+
payload: EventPayload;
|
|
84
|
+
}
|
|
85
|
+
export interface MergeResult {
|
|
86
|
+
eventCount: number;
|
|
87
|
+
errors: string[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Load canonical STATE.json
|
|
91
|
+
*/
|
|
92
|
+
export declare function getState(projectRoot?: string): State | null;
|
|
93
|
+
/**
|
|
94
|
+
* Get a specific task by ID
|
|
95
|
+
*/
|
|
96
|
+
export declare function getTask(taskId: string, projectRoot?: string): Task | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Get all tasks owned by a specific role
|
|
99
|
+
*/
|
|
100
|
+
export declare function getTasksByOwner(ownerRole: string, projectRoot?: string): Task[];
|
|
101
|
+
/**
|
|
102
|
+
* Get all contracts, optionally filtered by consumer
|
|
103
|
+
*/
|
|
104
|
+
export declare function getContracts(consumerRole?: string | undefined, projectRoot?: string): Contract[];
|
|
105
|
+
/**
|
|
106
|
+
* Generate a unique event ID
|
|
107
|
+
* Format: evt-{ISO8601_timestamp}-{agent_name}-{sequence_number}
|
|
108
|
+
*/
|
|
109
|
+
export declare function generateEventId(actor: string): string;
|
|
110
|
+
/**
|
|
111
|
+
* Submit an event to the event log
|
|
112
|
+
* This is append-only and concurrency-safe
|
|
113
|
+
*/
|
|
114
|
+
export declare function submitEvent(event: Event, projectRoot?: string): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Trigger State Steward to merge events into STATE.json
|
|
117
|
+
* This runs state/merge.ts
|
|
118
|
+
*/
|
|
119
|
+
export declare function mergeState(projectRoot?: string): Promise<MergeResult>;
|
|
120
|
+
/**
|
|
121
|
+
* Check if we're in a FORGE project
|
|
122
|
+
*/
|
|
123
|
+
export declare function isForgeProject(projectRoot?: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Initialize a new FORGE project state
|
|
126
|
+
*/
|
|
127
|
+
export declare function initializeState(projectName: string, projectRoot?: string): State;
|
|
128
|
+
//# sourceMappingURL=state-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-api.d.ts","sourceRoot":"","sources":["../../src/utils/state-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE State Access API
|
|
3
|
+
* Interface between CLI-ENGINE and STATE-ENGINE
|
|
4
|
+
*
|
|
5
|
+
* This provides the API contract specified in state/STATE_API_SPEC.md
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { execSync } from 'child_process';
|
|
10
|
+
const STATE_PATH = 'state/STATE.json';
|
|
11
|
+
const EVENTS_DIR = 'state/events';
|
|
12
|
+
const MERGE_SCRIPT = 'state/merge.ts';
|
|
13
|
+
/**
|
|
14
|
+
* Load canonical STATE.json
|
|
15
|
+
*/
|
|
16
|
+
export function getState(projectRoot = process.cwd()) {
|
|
17
|
+
const statePath = path.join(projectRoot, STATE_PATH);
|
|
18
|
+
if (!fs.existsSync(statePath)) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const content = fs.readFileSync(statePath, 'utf-8');
|
|
23
|
+
return JSON.parse(content);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new Error(`Failed to load state from ${statePath}: ${error}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get a specific task by ID
|
|
31
|
+
*/
|
|
32
|
+
export function getTask(taskId, projectRoot = process.cwd()) {
|
|
33
|
+
const state = getState(projectRoot);
|
|
34
|
+
if (!state) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return state.tasks.find((t) => t.id === taskId);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get all tasks owned by a specific role
|
|
41
|
+
*/
|
|
42
|
+
export function getTasksByOwner(ownerRole, projectRoot = process.cwd()) {
|
|
43
|
+
const state = getState(projectRoot);
|
|
44
|
+
if (!state) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
return state.tasks.filter((t) => t.ownerRole === ownerRole);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all contracts, optionally filtered by consumer
|
|
51
|
+
*/
|
|
52
|
+
export function getContracts(consumerRole = undefined, projectRoot = process.cwd()) {
|
|
53
|
+
const state = getState(projectRoot);
|
|
54
|
+
if (!state) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
if (!consumerRole) {
|
|
58
|
+
return state.contracts;
|
|
59
|
+
}
|
|
60
|
+
return state.contracts.filter((c) => c.consumers.includes(consumerRole));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate a unique event ID
|
|
64
|
+
* Format: evt-{ISO8601_timestamp}-{agent_name}-{sequence_number}
|
|
65
|
+
*/
|
|
66
|
+
export function generateEventId(actor) {
|
|
67
|
+
const timestamp = new Date().toISOString();
|
|
68
|
+
const sequence = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
|
|
69
|
+
return `evt-${timestamp}-${actor}-${sequence}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Submit an event to the event log
|
|
73
|
+
* This is append-only and concurrency-safe
|
|
74
|
+
*/
|
|
75
|
+
export async function submitEvent(event, projectRoot = process.cwd()) {
|
|
76
|
+
const eventsDir = path.join(projectRoot, EVENTS_DIR);
|
|
77
|
+
// Ensure events directory exists
|
|
78
|
+
if (!fs.existsSync(eventsDir)) {
|
|
79
|
+
fs.mkdirSync(eventsDir, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
// Validate event structure
|
|
82
|
+
if (!event.eventId || !event.timestamp || !event.actor || !event.type) {
|
|
83
|
+
throw new Error('Invalid event: missing required fields');
|
|
84
|
+
}
|
|
85
|
+
// Write event file
|
|
86
|
+
const filename = `${event.eventId}.json`;
|
|
87
|
+
const eventPath = path.join(eventsDir, filename);
|
|
88
|
+
try {
|
|
89
|
+
fs.writeFileSync(eventPath, JSON.stringify(event, null, 2), 'utf-8');
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new Error(`Failed to write event to ${eventPath}: ${error}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Trigger State Steward to merge events into STATE.json
|
|
97
|
+
* This runs state/merge.ts
|
|
98
|
+
*/
|
|
99
|
+
export async function mergeState(projectRoot = process.cwd()) {
|
|
100
|
+
const mergeScriptPath = path.join(projectRoot, MERGE_SCRIPT);
|
|
101
|
+
if (!fs.existsSync(mergeScriptPath)) {
|
|
102
|
+
throw new Error(`Merge script not found at ${mergeScriptPath}`);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
// Run merge script using bun (as specified in state/README.md)
|
|
106
|
+
const output = execSync(`bun run ${mergeScriptPath}`, {
|
|
107
|
+
cwd: projectRoot,
|
|
108
|
+
encoding: 'utf-8',
|
|
109
|
+
});
|
|
110
|
+
// Parse output to extract event count and errors
|
|
111
|
+
// The merge script should output JSON or structured text
|
|
112
|
+
return {
|
|
113
|
+
eventCount: 0,
|
|
114
|
+
errors: [],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// If merge fails, return errors
|
|
119
|
+
return {
|
|
120
|
+
eventCount: 0,
|
|
121
|
+
errors: [String(error)],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if we're in a FORGE project
|
|
127
|
+
*/
|
|
128
|
+
export function isForgeProject(projectRoot = process.cwd()) {
|
|
129
|
+
const statePath = path.join(projectRoot, STATE_PATH);
|
|
130
|
+
return fs.existsSync(statePath);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Initialize a new FORGE project state
|
|
134
|
+
*/
|
|
135
|
+
export function initializeState(projectName, projectRoot = process.cwd()) {
|
|
136
|
+
const now = new Date().toISOString();
|
|
137
|
+
const state = {
|
|
138
|
+
project: {
|
|
139
|
+
name: projectName,
|
|
140
|
+
status: 'initialized',
|
|
141
|
+
currentMilestone: 'v1.0',
|
|
142
|
+
currentPhase: 0,
|
|
143
|
+
createdAt: now,
|
|
144
|
+
updatedAt: now,
|
|
145
|
+
},
|
|
146
|
+
tasks: [],
|
|
147
|
+
contracts: [],
|
|
148
|
+
eventsPointer: 'state/events/',
|
|
149
|
+
metadata: {
|
|
150
|
+
schemaVersion: '1.0.0',
|
|
151
|
+
lastEventId: '',
|
|
152
|
+
eventCount: 0,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
// Ensure state directory exists
|
|
156
|
+
const stateDir = path.join(projectRoot, 'state');
|
|
157
|
+
if (!fs.existsSync(stateDir)) {
|
|
158
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
159
|
+
}
|
|
160
|
+
// Write STATE.json
|
|
161
|
+
const statePath = path.join(projectRoot, STATE_PATH);
|
|
162
|
+
fs.writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
163
|
+
// Ensure events directory exists
|
|
164
|
+
const eventsDir = path.join(projectRoot, EVENTS_DIR);
|
|
165
|
+
if (!fs.existsSync(eventsDir)) {
|
|
166
|
+
fs.mkdirSync(eventsDir, { recursive: true });
|
|
167
|
+
}
|
|
168
|
+
return state;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=state-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-api.js","sourceRoot":"","sources":["../../src/utils/state-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FORGE Template Client
|
|
3
|
+
* Wrapper for TEMPLATES integration with CLI-ENGINE
|
|
4
|
+
*/
|
|
5
|
+
import { type TemplateContext, type RenderResult, type XmlTaskSpec } from '../generators/index.js';
|
|
6
|
+
import { type RequiredFieldSet } from '../generators/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Template Client Configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface TemplateClientConfig {
|
|
11
|
+
projectRoot: string;
|
|
12
|
+
templatesDir?: string;
|
|
13
|
+
outputDir?: string;
|
|
14
|
+
interactive?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Template Client for FORGE CLI
|
|
18
|
+
*/
|
|
19
|
+
export declare class TemplateClient {
|
|
20
|
+
private engine;
|
|
21
|
+
private projectRoot;
|
|
22
|
+
private interactive;
|
|
23
|
+
private outputDir;
|
|
24
|
+
constructor(config: TemplateClientConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Validate that context has all required fields for a template
|
|
27
|
+
*/
|
|
28
|
+
validateContext(context: Partial<TemplateContext>, fieldSet: RequiredFieldSet): {
|
|
29
|
+
valid: boolean;
|
|
30
|
+
missing: string[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Get required fields for a specific template
|
|
34
|
+
*/
|
|
35
|
+
getRequiredFields(fieldSet: RequiredFieldSet): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Render a template with the given context
|
|
38
|
+
*/
|
|
39
|
+
renderTemplate(templateName: string, context: Partial<TemplateContext>): Promise<RenderResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Render and write a template to disk
|
|
42
|
+
*/
|
|
43
|
+
generateArtifact(templateName: string, context: Partial<TemplateContext>, outputFilename: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Generate XML task specs
|
|
46
|
+
*/
|
|
47
|
+
generateXmlTasks(tasks: XmlTaskSpec[]): string;
|
|
48
|
+
/**
|
|
49
|
+
* Handle token limit warnings
|
|
50
|
+
*/
|
|
51
|
+
private handleTokenLimitWarning;
|
|
52
|
+
/**
|
|
53
|
+
* Get token limit for a template
|
|
54
|
+
*/
|
|
55
|
+
private getTemplateLimit;
|
|
56
|
+
/**
|
|
57
|
+
* Check if file exists
|
|
58
|
+
*/
|
|
59
|
+
private fileExists;
|
|
60
|
+
/**
|
|
61
|
+
* Backup existing file
|
|
62
|
+
*/
|
|
63
|
+
private backupFile;
|
|
64
|
+
/**
|
|
65
|
+
* Prompt user to proceed despite warnings
|
|
66
|
+
*/
|
|
67
|
+
private shouldProceed;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a template client instance
|
|
71
|
+
*/
|
|
72
|
+
export declare function createTemplateClient(config: TemplateClientConfig): TemplateClient;
|
|
73
|
+
//# sourceMappingURL=template-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-client.d.ts","sourceRoot":"","sources":["../../src/utils/template-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAA6C,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE9I,OAAO,EAA2C,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGxG;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,oBAAoB;IAkBxC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,gBAAgB,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAIrH;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAIvD;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBpG;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtH;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;IAM9C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;YACW,UAAU;IASxB;;OAEG;YACW,UAAU;IAMxB;;OAEG;YACW,aAAa;CAS5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAEjF"}
|