@fractary/faber 0.1.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/LICENSE +21 -0
- package/README.md +146 -0
- package/dist/api.d.ts +81 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +261 -0
- package/dist/api.js.map +1 -0
- package/dist/bindings/claude-code/transformer.d.ts +55 -0
- package/dist/bindings/claude-code/transformer.d.ts.map +1 -0
- package/dist/bindings/claude-code/transformer.js +271 -0
- package/dist/bindings/claude-code/transformer.js.map +1 -0
- package/dist/bindings/index.d.ts +21 -0
- package/dist/bindings/index.d.ts.map +1 -0
- package/dist/bindings/index.js +43 -0
- package/dist/bindings/index.js.map +1 -0
- package/dist/core/concepts/base.d.ts +89 -0
- package/dist/core/concepts/base.d.ts.map +1 -0
- package/dist/core/concepts/base.js +230 -0
- package/dist/core/concepts/base.js.map +1 -0
- package/dist/core/concepts/eval.d.ts +90 -0
- package/dist/core/concepts/eval.d.ts.map +1 -0
- package/dist/core/concepts/eval.js +118 -0
- package/dist/core/concepts/eval.js.map +1 -0
- package/dist/core/concepts/index.d.ts +9 -0
- package/dist/core/concepts/index.d.ts.map +1 -0
- package/dist/core/concepts/index.js +36 -0
- package/dist/core/concepts/index.js.map +1 -0
- package/dist/core/concepts/role.d.ts +19 -0
- package/dist/core/concepts/role.d.ts.map +1 -0
- package/dist/core/concepts/role.js +227 -0
- package/dist/core/concepts/role.js.map +1 -0
- package/dist/core/concepts/team.d.ts +57 -0
- package/dist/core/concepts/team.d.ts.map +1 -0
- package/dist/core/concepts/team.js +106 -0
- package/dist/core/concepts/team.js.map +1 -0
- package/dist/core/concepts/tool.d.ts +43 -0
- package/dist/core/concepts/tool.d.ts.map +1 -0
- package/dist/core/concepts/tool.js +104 -0
- package/dist/core/concepts/tool.js.map +1 -0
- package/dist/core/concepts/workflow.d.ts +87 -0
- package/dist/core/concepts/workflow.d.ts.map +1 -0
- package/dist/core/concepts/workflow.js +114 -0
- package/dist/core/concepts/workflow.js.map +1 -0
- package/dist/core/config/index.d.ts +34 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +80 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/config/loader.d.ts +53 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +234 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/contexts/index.d.ts +36 -0
- package/dist/core/contexts/index.d.ts.map +1 -0
- package/dist/core/contexts/index.js +75 -0
- package/dist/core/contexts/index.js.map +1 -0
- package/dist/core/contexts/loader.d.ts +66 -0
- package/dist/core/contexts/loader.d.ts.map +1 -0
- package/dist/core/contexts/loader.js +261 -0
- package/dist/core/contexts/loader.js.map +1 -0
- package/dist/core/overlays/index.d.ts +31 -0
- package/dist/core/overlays/index.d.ts.map +1 -0
- package/dist/core/overlays/index.js +82 -0
- package/dist/core/overlays/index.js.map +1 -0
- package/dist/core/overlays/resolver.d.ts +65 -0
- package/dist/core/overlays/resolver.d.ts.map +1 -0
- package/dist/core/overlays/resolver.js +249 -0
- package/dist/core/overlays/resolver.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/types/bindings.d.ts +59 -0
- package/dist/types/bindings.d.ts.map +1 -0
- package/dist/types/bindings.js +6 -0
- package/dist/types/bindings.js.map +1 -0
- package/dist/types/concepts.d.ts +131 -0
- package/dist/types/concepts.d.ts.map +1 -0
- package/dist/types/concepts.js +29 -0
- package/dist/types/concepts.js.map +1 -0
- package/dist/types/config.d.ts +42 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/contexts.d.ts +59 -0
- package/dist/types/contexts.d.ts.map +1 -0
- package/dist/types/contexts.js +17 -0
- package/dist/types/contexts.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +30 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/overlays.d.ts +28 -0
- package/dist/types/overlays.d.ts.map +1 -0
- package/dist/types/overlays.js +15 -0
- package/dist/types/overlays.js.map +1 -0
- package/dist/utils/file-system.d.ts +40 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +105 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/template.d.ts +28 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +107 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/validation.d.ts +42 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +94 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Workflow concept loader
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.WorkflowLoader = void 0;
|
|
43
|
+
const zod_1 = require("zod");
|
|
44
|
+
const base_1 = require("./base");
|
|
45
|
+
const types_1 = require("../../types");
|
|
46
|
+
const yaml = __importStar(require("js-yaml"));
|
|
47
|
+
const fs_1 = require("fs");
|
|
48
|
+
const path_1 = __importDefault(require("path"));
|
|
49
|
+
const StageSchema = zod_1.z.object({
|
|
50
|
+
name: zod_1.z.string(),
|
|
51
|
+
team: zod_1.z.string(),
|
|
52
|
+
entry_criteria: zod_1.z.array(zod_1.z.string()).optional(),
|
|
53
|
+
tasks: zod_1.z.array(zod_1.z.string()),
|
|
54
|
+
exit_criteria: zod_1.z.array(zod_1.z.string()).optional(),
|
|
55
|
+
on_failure: zod_1.z.array(zod_1.z.string()).optional()
|
|
56
|
+
});
|
|
57
|
+
const TriggerSchema = zod_1.z.object({
|
|
58
|
+
type: zod_1.z.enum(['manual', 'scheduled', 'event']),
|
|
59
|
+
config: zod_1.z.record(zod_1.z.unknown()).optional()
|
|
60
|
+
});
|
|
61
|
+
const WorkflowMetadataSchema = zod_1.z.object({
|
|
62
|
+
name: zod_1.z.string(),
|
|
63
|
+
description: zod_1.z.string().optional(),
|
|
64
|
+
stages: zod_1.z.array(StageSchema),
|
|
65
|
+
teams: zod_1.z.array(zod_1.z.string()),
|
|
66
|
+
triggers: zod_1.z.array(TriggerSchema).optional(),
|
|
67
|
+
conditions: zod_1.z.record(zod_1.z.unknown()).optional()
|
|
68
|
+
});
|
|
69
|
+
class WorkflowLoader extends base_1.BaseConceptLoader {
|
|
70
|
+
constructor() {
|
|
71
|
+
super(types_1.ConceptType.WORKFLOW);
|
|
72
|
+
}
|
|
73
|
+
getMetadataSchema() {
|
|
74
|
+
return WorkflowMetadataSchema;
|
|
75
|
+
}
|
|
76
|
+
async loadConceptContent(conceptPath, metadata) {
|
|
77
|
+
const workflowMetadata = WorkflowMetadataSchema.parse(metadata);
|
|
78
|
+
return {
|
|
79
|
+
name: workflowMetadata.name,
|
|
80
|
+
type: types_1.ConceptType.WORKFLOW,
|
|
81
|
+
description: workflowMetadata.description,
|
|
82
|
+
stages: (workflowMetadata.stages || []),
|
|
83
|
+
teams: workflowMetadata.teams,
|
|
84
|
+
triggers: (workflowMetadata.triggers || []),
|
|
85
|
+
conditions: workflowMetadata.conditions || {}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async validateSpecific(concept) {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
async loadMetadata(conceptPath) {
|
|
92
|
+
const metadataPath = path_1.default.join(conceptPath, 'workflow.yml');
|
|
93
|
+
const content = await fs_1.promises.readFile(metadataPath, 'utf-8');
|
|
94
|
+
return yaml.load(content);
|
|
95
|
+
}
|
|
96
|
+
async validateConcept(workflow) {
|
|
97
|
+
// Validate workflow structure
|
|
98
|
+
if (workflow.stages.length === 0) {
|
|
99
|
+
throw new Error('Workflow must have at least one stage');
|
|
100
|
+
}
|
|
101
|
+
// Validate teams are referenced in stages
|
|
102
|
+
const stageTeams = new Set(workflow.stages.map(s => s.team));
|
|
103
|
+
for (const team of workflow.teams) {
|
|
104
|
+
if (!stageTeams.has(team)) {
|
|
105
|
+
console.warn(`Team ${team} declared but not used in any stage`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
getSchema() {
|
|
110
|
+
return WorkflowMetadataSchema;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.WorkflowLoader = WorkflowLoader;
|
|
114
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/core/concepts/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration system exports
|
|
3
|
+
*/
|
|
4
|
+
export { ConfigLoader } from './loader';
|
|
5
|
+
import { Config, MCPServerConfig } from '../../types';
|
|
6
|
+
/**
|
|
7
|
+
* Initialize global configuration
|
|
8
|
+
*/
|
|
9
|
+
export declare function initConfig(startPath?: string): Config;
|
|
10
|
+
/**
|
|
11
|
+
* Get global configuration
|
|
12
|
+
*/
|
|
13
|
+
export declare function getConfig(): Config;
|
|
14
|
+
/**
|
|
15
|
+
* Update global configuration
|
|
16
|
+
*/
|
|
17
|
+
export declare function updateConfig(updates: Partial<Config>): Config;
|
|
18
|
+
/**
|
|
19
|
+
* Get platform configuration for a role
|
|
20
|
+
*/
|
|
21
|
+
export declare function getPlatformForRole(roleName: string): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Get MCP server configuration
|
|
24
|
+
*/
|
|
25
|
+
export declare function getMCPServerConfig(serverName: string): MCPServerConfig | null;
|
|
26
|
+
/**
|
|
27
|
+
* Check if overlays are enabled
|
|
28
|
+
*/
|
|
29
|
+
export declare function overlaysEnabled(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get overlay paths
|
|
32
|
+
*/
|
|
33
|
+
export declare function getOverlayPaths(): string[];
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAStD;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAG7E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAG1C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration system exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConfigLoader = void 0;
|
|
7
|
+
exports.initConfig = initConfig;
|
|
8
|
+
exports.getConfig = getConfig;
|
|
9
|
+
exports.updateConfig = updateConfig;
|
|
10
|
+
exports.getPlatformForRole = getPlatformForRole;
|
|
11
|
+
exports.getMCPServerConfig = getMCPServerConfig;
|
|
12
|
+
exports.overlaysEnabled = overlaysEnabled;
|
|
13
|
+
exports.getOverlayPaths = getOverlayPaths;
|
|
14
|
+
var loader_1 = require("./loader");
|
|
15
|
+
Object.defineProperty(exports, "ConfigLoader", { enumerable: true, get: function () { return loader_1.ConfigLoader; } });
|
|
16
|
+
const loader_2 = require("./loader");
|
|
17
|
+
/**
|
|
18
|
+
* Global configuration instance
|
|
19
|
+
*/
|
|
20
|
+
let globalConfig = null;
|
|
21
|
+
let configLoader = null;
|
|
22
|
+
/**
|
|
23
|
+
* Initialize global configuration
|
|
24
|
+
*/
|
|
25
|
+
function initConfig(startPath) {
|
|
26
|
+
if (!configLoader) {
|
|
27
|
+
configLoader = new loader_2.ConfigLoader();
|
|
28
|
+
}
|
|
29
|
+
globalConfig = configLoader.load(startPath);
|
|
30
|
+
return globalConfig;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get global configuration
|
|
34
|
+
*/
|
|
35
|
+
function getConfig() {
|
|
36
|
+
if (!globalConfig) {
|
|
37
|
+
initConfig();
|
|
38
|
+
}
|
|
39
|
+
return globalConfig;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Update global configuration
|
|
43
|
+
*/
|
|
44
|
+
function updateConfig(updates) {
|
|
45
|
+
if (!configLoader) {
|
|
46
|
+
configLoader = new loader_2.ConfigLoader();
|
|
47
|
+
}
|
|
48
|
+
const current = getConfig();
|
|
49
|
+
globalConfig = configLoader.merge(current, updates);
|
|
50
|
+
return globalConfig;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get platform configuration for a role
|
|
54
|
+
*/
|
|
55
|
+
function getPlatformForRole(roleName) {
|
|
56
|
+
const config = getConfig();
|
|
57
|
+
return config.platforms?.[roleName] || null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get MCP server configuration
|
|
61
|
+
*/
|
|
62
|
+
function getMCPServerConfig(serverName) {
|
|
63
|
+
const config = getConfig();
|
|
64
|
+
return config.mcp_servers?.[serverName] || null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if overlays are enabled
|
|
68
|
+
*/
|
|
69
|
+
function overlaysEnabled() {
|
|
70
|
+
const config = getConfig();
|
|
71
|
+
return config.overlays?.enabled !== false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get overlay paths
|
|
75
|
+
*/
|
|
76
|
+
function getOverlayPaths() {
|
|
77
|
+
const config = getConfig();
|
|
78
|
+
return config.overlays?.paths || ['.faber/overlays'];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgBH,gCAOC;AAKD,8BAKC;AAKD,oCAQC;AAKD,gDAGC;AAKD,gDAGC;AAKD,0CAGC;AAKD,0CAGC;AA5ED,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAGrB,qCAAwC;AAExC;;GAEG;AACH,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C;;GAEG;AACH,SAAgB,UAAU,CAAC,SAAkB;IAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IACpC,CAAC;IAED,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;IACf,CAAC;IACD,OAAO,YAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAwB;IACnD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader using cosmiconfig
|
|
3
|
+
*/
|
|
4
|
+
import { Config } from '../../types';
|
|
5
|
+
export declare class ConfigLoader {
|
|
6
|
+
private moduleName;
|
|
7
|
+
private explorer;
|
|
8
|
+
/**
|
|
9
|
+
* Load configuration from project
|
|
10
|
+
*/
|
|
11
|
+
load(startPath?: string): Config;
|
|
12
|
+
/**
|
|
13
|
+
* Load configuration from specific file
|
|
14
|
+
*/
|
|
15
|
+
loadFromFile(filePath: string): Promise<Config>;
|
|
16
|
+
/**
|
|
17
|
+
* Save configuration to file
|
|
18
|
+
*/
|
|
19
|
+
save(config: Config, filePath: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Get configuration value by key path
|
|
22
|
+
*/
|
|
23
|
+
get(config: Config, keyPath: string): unknown;
|
|
24
|
+
/**
|
|
25
|
+
* Set configuration value by key path
|
|
26
|
+
*/
|
|
27
|
+
set(config: Config, keyPath: string, value: unknown): Config;
|
|
28
|
+
/**
|
|
29
|
+
* Validate configuration
|
|
30
|
+
*/
|
|
31
|
+
private validateConfig;
|
|
32
|
+
/**
|
|
33
|
+
* Validate MCP server configuration
|
|
34
|
+
*/
|
|
35
|
+
private validateMCPServer;
|
|
36
|
+
/**
|
|
37
|
+
* Get default configuration
|
|
38
|
+
*/
|
|
39
|
+
private getDefaultConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Merge multiple configurations
|
|
42
|
+
*/
|
|
43
|
+
merge(...configs: Partial<Config>[]): Config;
|
|
44
|
+
/**
|
|
45
|
+
* Deep merge two objects
|
|
46
|
+
*/
|
|
47
|
+
private deepMerge;
|
|
48
|
+
/**
|
|
49
|
+
* Expand environment variables in config
|
|
50
|
+
*/
|
|
51
|
+
expandEnvVars(config: Config): Config;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AAEtD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAgBb;IAEH;;OAEG;IACH,IAAI,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM;IAW/C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAe7C;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;IAiB5D;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM;IAU5C;;OAEG;IACH,OAAO,CAAC,SAAS;IA6BjB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAQtC"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration loader using cosmiconfig
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ConfigLoader = void 0;
|
|
40
|
+
const cosmiconfig_1 = require("cosmiconfig");
|
|
41
|
+
const yaml = __importStar(require("js-yaml"));
|
|
42
|
+
const fs = __importStar(require("fs/promises"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
class ConfigLoader {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.moduleName = 'faber';
|
|
47
|
+
this.explorer = (0, cosmiconfig_1.cosmiconfigSync)(this.moduleName, {
|
|
48
|
+
searchPlaces: [
|
|
49
|
+
'.faber/config.yml',
|
|
50
|
+
'.faber/config.yaml',
|
|
51
|
+
'.faber/config.json',
|
|
52
|
+
'.faberrc',
|
|
53
|
+
'.faberrc.yml',
|
|
54
|
+
'.faberrc.yaml',
|
|
55
|
+
'.faberrc.json',
|
|
56
|
+
'faber.config.js',
|
|
57
|
+
'package.json'
|
|
58
|
+
],
|
|
59
|
+
loaders: {
|
|
60
|
+
'.yml': (_filepath, content) => yaml.load(content),
|
|
61
|
+
'.yaml': (_filepath, content) => yaml.load(content)
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Load configuration from project
|
|
67
|
+
*/
|
|
68
|
+
load(startPath = process.cwd()) {
|
|
69
|
+
const result = this.explorer.search(startPath);
|
|
70
|
+
if (result && result.config) {
|
|
71
|
+
return this.validateConfig(result.config);
|
|
72
|
+
}
|
|
73
|
+
// Return default config if none found
|
|
74
|
+
return this.getDefaultConfig();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Load configuration from specific file
|
|
78
|
+
*/
|
|
79
|
+
async loadFromFile(filePath) {
|
|
80
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
81
|
+
const ext = path.extname(filePath);
|
|
82
|
+
let config;
|
|
83
|
+
if (ext === '.yml' || ext === '.yaml') {
|
|
84
|
+
config = yaml.load(content);
|
|
85
|
+
}
|
|
86
|
+
else if (ext === '.json') {
|
|
87
|
+
config = JSON.parse(content);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new Error(`Unsupported config file format: ${ext}`);
|
|
91
|
+
}
|
|
92
|
+
return this.validateConfig(config);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Save configuration to file
|
|
96
|
+
*/
|
|
97
|
+
async save(config, filePath) {
|
|
98
|
+
const ext = path.extname(filePath);
|
|
99
|
+
let content;
|
|
100
|
+
if (ext === '.yml' || ext === '.yaml') {
|
|
101
|
+
content = yaml.dump(config, { indent: 2 });
|
|
102
|
+
}
|
|
103
|
+
else if (ext === '.json') {
|
|
104
|
+
content = JSON.stringify(config, null, 2);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
throw new Error(`Unsupported config file format: ${ext}`);
|
|
108
|
+
}
|
|
109
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get configuration value by key path
|
|
113
|
+
*/
|
|
114
|
+
get(config, keyPath) {
|
|
115
|
+
const keys = keyPath.split('.');
|
|
116
|
+
let value = config;
|
|
117
|
+
for (const key of keys) {
|
|
118
|
+
if (value && typeof value === 'object' && key in value) {
|
|
119
|
+
value = value[key];
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Set configuration value by key path
|
|
129
|
+
*/
|
|
130
|
+
set(config, keyPath, value) {
|
|
131
|
+
const keys = keyPath.split('.');
|
|
132
|
+
const result = { ...config };
|
|
133
|
+
let current = result;
|
|
134
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
135
|
+
const key = keys[i];
|
|
136
|
+
if (!(key in current) || typeof current[key] !== 'object') {
|
|
137
|
+
current[key] = {};
|
|
138
|
+
}
|
|
139
|
+
current = current[key];
|
|
140
|
+
}
|
|
141
|
+
current[keys[keys.length - 1]] = value;
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validate configuration
|
|
146
|
+
*/
|
|
147
|
+
validateConfig(config) {
|
|
148
|
+
// Ensure required fields have proper structure
|
|
149
|
+
if (!config.platforms) {
|
|
150
|
+
config.platforms = {};
|
|
151
|
+
}
|
|
152
|
+
if (!config.mcp_servers) {
|
|
153
|
+
config.mcp_servers = {};
|
|
154
|
+
}
|
|
155
|
+
if (!config.overlays) {
|
|
156
|
+
config.overlays = { enabled: true };
|
|
157
|
+
}
|
|
158
|
+
if (!config.bindings) {
|
|
159
|
+
config.bindings = {};
|
|
160
|
+
}
|
|
161
|
+
// Validate MCP server configs
|
|
162
|
+
for (const [name, server] of Object.entries(config.mcp_servers || {})) {
|
|
163
|
+
this.validateMCPServer(name, server);
|
|
164
|
+
}
|
|
165
|
+
return config;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Validate MCP server configuration
|
|
169
|
+
*/
|
|
170
|
+
validateMCPServer(name, server) {
|
|
171
|
+
if (!server.command && !server.url) {
|
|
172
|
+
throw new Error(`MCP server '${name}' must have either 'command' or 'url'`);
|
|
173
|
+
}
|
|
174
|
+
if (server.command && server.url) {
|
|
175
|
+
throw new Error(`MCP server '${name}' cannot have both 'command' and 'url'`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get default configuration
|
|
180
|
+
*/
|
|
181
|
+
getDefaultConfig() {
|
|
182
|
+
return {
|
|
183
|
+
platforms: {},
|
|
184
|
+
mcp_servers: {},
|
|
185
|
+
overlays: {
|
|
186
|
+
enabled: true,
|
|
187
|
+
paths: ['.faber/overlays']
|
|
188
|
+
},
|
|
189
|
+
bindings: {}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Merge multiple configurations
|
|
194
|
+
*/
|
|
195
|
+
merge(...configs) {
|
|
196
|
+
let result = this.getDefaultConfig();
|
|
197
|
+
for (const config of configs) {
|
|
198
|
+
result = this.deepMerge(result, config);
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Deep merge two objects
|
|
204
|
+
*/
|
|
205
|
+
deepMerge(target, source) {
|
|
206
|
+
const result = { ...target };
|
|
207
|
+
for (const key in source) {
|
|
208
|
+
if (source.hasOwnProperty(key)) {
|
|
209
|
+
if (typeof source[key] === 'object' &&
|
|
210
|
+
source[key] !== null &&
|
|
211
|
+
!Array.isArray(source[key]) &&
|
|
212
|
+
typeof target[key] === 'object' &&
|
|
213
|
+
target[key] !== null &&
|
|
214
|
+
!Array.isArray(target[key])) {
|
|
215
|
+
result[key] = this.deepMerge(target[key], source[key]);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
result[key] = source[key];
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Expand environment variables in config
|
|
226
|
+
*/
|
|
227
|
+
expandEnvVars(config) {
|
|
228
|
+
const expanded = JSON.stringify(config, null, 2);
|
|
229
|
+
const withEnv = expanded.replace(/\$\{([^}]+)\}/g, (match, varName) => process.env[varName] || match);
|
|
230
|
+
return JSON.parse(withEnv);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.ConfigLoader = ConfigLoader;
|
|
234
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context system exports
|
|
3
|
+
*/
|
|
4
|
+
export { ContextLoader } from './loader';
|
|
5
|
+
export { ContextResolver } from './loader';
|
|
6
|
+
import { Context, ContextCategory } from '../../types';
|
|
7
|
+
/**
|
|
8
|
+
* Context utilities
|
|
9
|
+
*/
|
|
10
|
+
export declare class ContextUtils {
|
|
11
|
+
/**
|
|
12
|
+
* Merge multiple contexts with precedence
|
|
13
|
+
*/
|
|
14
|
+
static mergeContexts(contexts: Context[]): string;
|
|
15
|
+
/**
|
|
16
|
+
* Filter contexts by category
|
|
17
|
+
*/
|
|
18
|
+
static filterByCategory(contexts: Context[], category: ContextCategory): Context[];
|
|
19
|
+
/**
|
|
20
|
+
* Check if context is platform-specific
|
|
21
|
+
*/
|
|
22
|
+
static isPlatformContext(context: Context): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Check if context requires MCP server
|
|
25
|
+
*/
|
|
26
|
+
static requiresMCPServer(context: Context): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get required MCP tools from context
|
|
29
|
+
*/
|
|
30
|
+
static getRequiredTools(context: Context): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Sort contexts by priority (platform > standards > specialists > others)
|
|
33
|
+
*/
|
|
34
|
+
static sortByPriority(contexts: Context[]): Context[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/contexts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;IAajD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,eAAe,GACxB,OAAO,EAAE;IAIZ;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAInD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAOnD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAInD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;CAiBtD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context system exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ContextUtils = exports.ContextResolver = exports.ContextLoader = void 0;
|
|
7
|
+
var loader_1 = require("./loader");
|
|
8
|
+
Object.defineProperty(exports, "ContextLoader", { enumerable: true, get: function () { return loader_1.ContextLoader; } });
|
|
9
|
+
var loader_2 = require("./loader");
|
|
10
|
+
Object.defineProperty(exports, "ContextResolver", { enumerable: true, get: function () { return loader_2.ContextResolver; } });
|
|
11
|
+
const types_1 = require("../../types");
|
|
12
|
+
/**
|
|
13
|
+
* Context utilities
|
|
14
|
+
*/
|
|
15
|
+
class ContextUtils {
|
|
16
|
+
/**
|
|
17
|
+
* Merge multiple contexts with precedence
|
|
18
|
+
*/
|
|
19
|
+
static mergeContexts(contexts) {
|
|
20
|
+
// Later contexts override earlier ones
|
|
21
|
+
const merged = [];
|
|
22
|
+
for (const context of contexts) {
|
|
23
|
+
merged.push(`# Context: ${context.name} (${context.category})\n`);
|
|
24
|
+
merged.push(context.content);
|
|
25
|
+
merged.push('\n---\n');
|
|
26
|
+
}
|
|
27
|
+
return merged.join('\n');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Filter contexts by category
|
|
31
|
+
*/
|
|
32
|
+
static filterByCategory(contexts, category) {
|
|
33
|
+
return contexts.filter(ctx => ctx.category === category);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if context is platform-specific
|
|
37
|
+
*/
|
|
38
|
+
static isPlatformContext(context) {
|
|
39
|
+
return context.category === types_1.ContextCategory.PLATFORM;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if context requires MCP server
|
|
43
|
+
*/
|
|
44
|
+
static requiresMCPServer(context) {
|
|
45
|
+
return Boolean(context.metadata?.mcp_server &&
|
|
46
|
+
context.metadata.mcp_server !== 'null');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get required MCP tools from context
|
|
50
|
+
*/
|
|
51
|
+
static getRequiredTools(context) {
|
|
52
|
+
return context.metadata?.required_tools || [];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sort contexts by priority (platform > standards > specialists > others)
|
|
56
|
+
*/
|
|
57
|
+
static sortByPriority(contexts) {
|
|
58
|
+
const priority = {
|
|
59
|
+
[types_1.ContextCategory.PLATFORM]: 1,
|
|
60
|
+
[types_1.ContextCategory.STANDARD]: 2,
|
|
61
|
+
[types_1.ContextCategory.SPECIALIST]: 3,
|
|
62
|
+
[types_1.ContextCategory.PLAYBOOK]: 4,
|
|
63
|
+
[types_1.ContextCategory.PATTERN]: 5,
|
|
64
|
+
[types_1.ContextCategory.REFERENCE]: 6,
|
|
65
|
+
[types_1.ContextCategory.TROUBLESHOOTING]: 7
|
|
66
|
+
};
|
|
67
|
+
return contexts.sort((a, b) => {
|
|
68
|
+
const aPriority = priority[a.category] || 99;
|
|
69
|
+
const bPriority = priority[b.category] || 99;
|
|
70
|
+
return aPriority - bPriority;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.ContextUtils = ContextUtils;
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/contexts/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AAExB,uCAAuD;AAEvD;;GAEG;AACH,MAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAmB;QACtC,uCAAuC;QACvC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAmB,EACnB,QAAyB;QAEzB,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAgB;QACvC,OAAO,OAAO,CAAC,QAAQ,KAAK,uBAAe,CAAC,QAAQ,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAgB;QACvC,OAAO,OAAO,CACZ,OAAO,CAAC,QAAQ,EAAE,UAAU;YAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,MAAM,CACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAgB;QACtC,OAAO,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAmB;QACvC,MAAM,QAAQ,GAAoC;YAChD,CAAC,uBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,uBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,uBAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,CAAC,uBAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,CAAC,uBAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,CAAC,uBAAe,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,CAAC,uBAAe,CAAC,eAAe,CAAC,EAAE,CAAC;SACrC,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvED,oCAuEC"}
|