@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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/dist/api.d.ts +81 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +261 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/bindings/claude-code/transformer.d.ts +55 -0
  8. package/dist/bindings/claude-code/transformer.d.ts.map +1 -0
  9. package/dist/bindings/claude-code/transformer.js +271 -0
  10. package/dist/bindings/claude-code/transformer.js.map +1 -0
  11. package/dist/bindings/index.d.ts +21 -0
  12. package/dist/bindings/index.d.ts.map +1 -0
  13. package/dist/bindings/index.js +43 -0
  14. package/dist/bindings/index.js.map +1 -0
  15. package/dist/core/concepts/base.d.ts +89 -0
  16. package/dist/core/concepts/base.d.ts.map +1 -0
  17. package/dist/core/concepts/base.js +230 -0
  18. package/dist/core/concepts/base.js.map +1 -0
  19. package/dist/core/concepts/eval.d.ts +90 -0
  20. package/dist/core/concepts/eval.d.ts.map +1 -0
  21. package/dist/core/concepts/eval.js +118 -0
  22. package/dist/core/concepts/eval.js.map +1 -0
  23. package/dist/core/concepts/index.d.ts +9 -0
  24. package/dist/core/concepts/index.d.ts.map +1 -0
  25. package/dist/core/concepts/index.js +36 -0
  26. package/dist/core/concepts/index.js.map +1 -0
  27. package/dist/core/concepts/role.d.ts +19 -0
  28. package/dist/core/concepts/role.d.ts.map +1 -0
  29. package/dist/core/concepts/role.js +227 -0
  30. package/dist/core/concepts/role.js.map +1 -0
  31. package/dist/core/concepts/team.d.ts +57 -0
  32. package/dist/core/concepts/team.d.ts.map +1 -0
  33. package/dist/core/concepts/team.js +106 -0
  34. package/dist/core/concepts/team.js.map +1 -0
  35. package/dist/core/concepts/tool.d.ts +43 -0
  36. package/dist/core/concepts/tool.d.ts.map +1 -0
  37. package/dist/core/concepts/tool.js +104 -0
  38. package/dist/core/concepts/tool.js.map +1 -0
  39. package/dist/core/concepts/workflow.d.ts +87 -0
  40. package/dist/core/concepts/workflow.d.ts.map +1 -0
  41. package/dist/core/concepts/workflow.js +114 -0
  42. package/dist/core/concepts/workflow.js.map +1 -0
  43. package/dist/core/config/index.d.ts +34 -0
  44. package/dist/core/config/index.d.ts.map +1 -0
  45. package/dist/core/config/index.js +80 -0
  46. package/dist/core/config/index.js.map +1 -0
  47. package/dist/core/config/loader.d.ts +53 -0
  48. package/dist/core/config/loader.d.ts.map +1 -0
  49. package/dist/core/config/loader.js +234 -0
  50. package/dist/core/config/loader.js.map +1 -0
  51. package/dist/core/contexts/index.d.ts +36 -0
  52. package/dist/core/contexts/index.d.ts.map +1 -0
  53. package/dist/core/contexts/index.js +75 -0
  54. package/dist/core/contexts/index.js.map +1 -0
  55. package/dist/core/contexts/loader.d.ts +66 -0
  56. package/dist/core/contexts/loader.d.ts.map +1 -0
  57. package/dist/core/contexts/loader.js +261 -0
  58. package/dist/core/contexts/loader.js.map +1 -0
  59. package/dist/core/overlays/index.d.ts +31 -0
  60. package/dist/core/overlays/index.d.ts.map +1 -0
  61. package/dist/core/overlays/index.js +82 -0
  62. package/dist/core/overlays/index.js.map +1 -0
  63. package/dist/core/overlays/resolver.d.ts +65 -0
  64. package/dist/core/overlays/resolver.d.ts.map +1 -0
  65. package/dist/core/overlays/resolver.js +249 -0
  66. package/dist/core/overlays/resolver.js.map +1 -0
  67. package/dist/index.d.ts +20 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +56 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/types/bindings.d.ts +59 -0
  72. package/dist/types/bindings.d.ts.map +1 -0
  73. package/dist/types/bindings.js +6 -0
  74. package/dist/types/bindings.js.map +1 -0
  75. package/dist/types/concepts.d.ts +131 -0
  76. package/dist/types/concepts.d.ts.map +1 -0
  77. package/dist/types/concepts.js +29 -0
  78. package/dist/types/concepts.js.map +1 -0
  79. package/dist/types/config.d.ts +42 -0
  80. package/dist/types/config.d.ts.map +1 -0
  81. package/dist/types/config.js +6 -0
  82. package/dist/types/config.js.map +1 -0
  83. package/dist/types/contexts.d.ts +59 -0
  84. package/dist/types/contexts.d.ts.map +1 -0
  85. package/dist/types/contexts.js +17 -0
  86. package/dist/types/contexts.js.map +1 -0
  87. package/dist/types/index.d.ts +17 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +30 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/overlays.d.ts +28 -0
  92. package/dist/types/overlays.d.ts.map +1 -0
  93. package/dist/types/overlays.js +15 -0
  94. package/dist/types/overlays.js.map +1 -0
  95. package/dist/utils/file-system.d.ts +40 -0
  96. package/dist/utils/file-system.d.ts.map +1 -0
  97. package/dist/utils/file-system.js +105 -0
  98. package/dist/utils/file-system.js.map +1 -0
  99. package/dist/utils/template.d.ts +28 -0
  100. package/dist/utils/template.d.ts.map +1 -0
  101. package/dist/utils/template.js +107 -0
  102. package/dist/utils/template.js.map +1 -0
  103. package/dist/utils/validation.d.ts +42 -0
  104. package/dist/utils/validation.d.ts.map +1 -0
  105. package/dist/utils/validation.js +94 -0
  106. package/dist/utils/validation.js.map +1 -0
  107. 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"}