@bluelibs/runner-dev 4.1.0 → 4.2.0

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 (154) hide show
  1. package/AI.md +40 -43
  2. package/README.md +70 -0
  3. package/dist/architect/core/errors.d.ts +39 -0
  4. package/dist/architect/core/errors.js +143 -0
  5. package/dist/architect/core/errors.js.map +1 -0
  6. package/dist/architect/core/index.d.ts +3 -0
  7. package/dist/architect/core/index.js +21 -0
  8. package/dist/architect/core/index.js.map +1 -0
  9. package/dist/architect/core/interfaces.d.ts +158 -0
  10. package/dist/architect/core/interfaces.js +3 -0
  11. package/dist/architect/core/interfaces.js.map +1 -0
  12. package/dist/architect/core/types.d.ts +544 -0
  13. package/dist/architect/core/types.js +49 -0
  14. package/dist/architect/core/types.js.map +1 -0
  15. package/dist/architect/execution/executor.d.ts +23 -0
  16. package/dist/architect/execution/executor.js +476 -0
  17. package/dist/architect/execution/executor.js.map +1 -0
  18. package/dist/architect/execution/index.d.ts +1 -0
  19. package/dist/architect/execution/index.js +19 -0
  20. package/dist/architect/execution/index.js.map +1 -0
  21. package/dist/architect/executor.d.ts +7 -0
  22. package/dist/architect/executor.js +150 -0
  23. package/dist/architect/executor.js.map +1 -0
  24. package/dist/architect/index.d.ts +45 -0
  25. package/dist/architect/index.js +76 -0
  26. package/dist/architect/index.js.map +1 -0
  27. package/dist/architect/llmClient.d.ts +10 -0
  28. package/dist/architect/llmClient.js +33 -0
  29. package/dist/architect/llmClient.js.map +1 -0
  30. package/dist/architect/models/base.d.ts +16 -0
  31. package/dist/architect/models/base.js +68 -0
  32. package/dist/architect/models/base.js.map +1 -0
  33. package/dist/architect/models/factory.d.ts +16 -0
  34. package/dist/architect/models/factory.js +73 -0
  35. package/dist/architect/models/factory.js.map +1 -0
  36. package/dist/architect/models/index.d.ts +3 -0
  37. package/dist/architect/models/index.js +21 -0
  38. package/dist/architect/models/index.js.map +1 -0
  39. package/dist/architect/models/openai.d.ts +7 -0
  40. package/dist/architect/models/openai.js +71 -0
  41. package/dist/architect/models/openai.js.map +1 -0
  42. package/dist/architect/planner.d.ts +9 -0
  43. package/dist/architect/planner.js +42 -0
  44. package/dist/architect/planner.js.map +1 -0
  45. package/dist/architect/planning/index.d.ts +4 -0
  46. package/dist/architect/planning/index.js +22 -0
  47. package/dist/architect/planning/index.js.map +1 -0
  48. package/dist/architect/planning/optimizer.d.ts +14 -0
  49. package/dist/architect/planning/optimizer.js +275 -0
  50. package/dist/architect/planning/optimizer.js.map +1 -0
  51. package/dist/architect/planning/planner.d.ts +15 -0
  52. package/dist/architect/planning/planner.js +124 -0
  53. package/dist/architect/planning/planner.js.map +1 -0
  54. package/dist/architect/planning/prompts.d.ts +6 -0
  55. package/dist/architect/planning/prompts.js +111 -0
  56. package/dist/architect/planning/prompts.js.map +1 -0
  57. package/dist/architect/planning/validator.d.ts +16 -0
  58. package/dist/architect/planning/validator.js +331 -0
  59. package/dist/architect/planning/validator.js.map +1 -0
  60. package/dist/architect/prompt.d.ts +1 -0
  61. package/dist/architect/prompt.js +13 -0
  62. package/dist/architect/prompt.js.map +1 -0
  63. package/dist/architect/types.d.ts +4 -0
  64. package/dist/architect/types.js +24 -0
  65. package/dist/architect/types.js.map +1 -0
  66. package/dist/cli/format.d.ts +19 -0
  67. package/dist/cli/format.js +62 -0
  68. package/dist/cli/format.js.map +1 -0
  69. package/dist/cli/init.d.ts +1 -0
  70. package/dist/cli/init.js +279 -0
  71. package/dist/cli/init.js.map +1 -0
  72. package/dist/cli/query.js +69 -0
  73. package/dist/cli/query.js.map +1 -1
  74. package/dist/cli.js +48 -21
  75. package/dist/cli.js.map +1 -1
  76. package/dist/code.d.ts +50 -0
  77. package/dist/code.js +357 -0
  78. package/dist/code.js.map +1 -0
  79. package/dist/generated/resolvers-types.d.ts +150 -29
  80. package/dist/index.d.ts +6 -0
  81. package/dist/index.js +2 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/resources/cli.config.resource.d.ts +7 -0
  84. package/dist/resources/cli.config.resource.js +11 -0
  85. package/dist/resources/cli.config.resource.js.map +1 -0
  86. package/dist/resources/coverage.resource.d.ts +19 -0
  87. package/dist/resources/coverage.resource.js +213 -0
  88. package/dist/resources/coverage.resource.js.map +1 -0
  89. package/dist/resources/dev.resource.js +0 -2
  90. package/dist/resources/dev.resource.js.map +1 -1
  91. package/dist/resources/graphql.cli.resource.d.ts +4 -0
  92. package/dist/resources/graphql.cli.resource.js +27 -0
  93. package/dist/resources/graphql.cli.resource.js.map +1 -0
  94. package/dist/resources/graphql.query.cli.task.d.ts +47 -0
  95. package/dist/resources/graphql.query.cli.task.js +54 -0
  96. package/dist/resources/graphql.query.cli.task.js.map +1 -0
  97. package/dist/resources/introspector.cli.resource.d.ts +6 -0
  98. package/dist/resources/introspector.cli.resource.js +17 -0
  99. package/dist/resources/introspector.cli.resource.js.map +1 -0
  100. package/dist/resources/live.resource.d.ts +2 -1
  101. package/dist/resources/live.resource.js +4 -2
  102. package/dist/resources/live.resource.js.map +1 -1
  103. package/dist/resources/models/Introspector.d.ts +1 -1
  104. package/dist/resources/models/Introspector.js +5 -34
  105. package/dist/resources/models/Introspector.js.map +1 -1
  106. package/dist/resources/models/initializeFromStore.js +26 -34
  107. package/dist/resources/models/initializeFromStore.js.map +1 -1
  108. package/dist/resources/models/initializeFromStore.utils.js +25 -6
  109. package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
  110. package/dist/resources/models/introspector.tools.js +2 -2
  111. package/dist/resources/models/introspector.tools.js.map +1 -1
  112. package/dist/resources/routeHandlers/getDocsData.d.ts +6 -0
  113. package/dist/resources/routeHandlers/getDocsData.js +106 -0
  114. package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
  115. package/dist/resources/routeHandlers/registerHttpRoutes.hook.d.ts +4 -0
  116. package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +9 -7
  117. package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -1
  118. package/dist/resources/server.resource.d.ts +3 -0
  119. package/dist/resources/server.resource.js +8 -1
  120. package/dist/resources/server.resource.js.map +1 -1
  121. package/dist/resources/swap.cli.resource.d.ts +11 -0
  122. package/dist/resources/swap.cli.resource.js +54 -0
  123. package/dist/resources/swap.cli.resource.js.map +1 -0
  124. package/dist/schema/context.d.ts +2 -0
  125. package/dist/schema/model.d.ts +4 -1
  126. package/dist/schema/model.js.map +1 -1
  127. package/dist/schema/mutation.js +38 -0
  128. package/dist/schema/mutation.js.map +1 -1
  129. package/dist/schema/query.js +22 -18
  130. package/dist/schema/query.js.map +1 -1
  131. package/dist/schema/types/BaseElementCommon.d.ts +2 -4
  132. package/dist/schema/types/BaseElementCommon.js +28 -0
  133. package/dist/schema/types/BaseElementCommon.js.map +1 -1
  134. package/dist/schema/types/CoverageType.d.ts +7 -0
  135. package/dist/schema/types/CoverageType.js +54 -0
  136. package/dist/schema/types/CoverageType.js.map +1 -0
  137. package/dist/schema/types/LiveType.js +4 -0
  138. package/dist/schema/types/LiveType.js.map +1 -1
  139. package/dist/schema/types/ResourceType.js +6 -0
  140. package/dist/schema/types/ResourceType.js.map +1 -1
  141. package/dist/schema/types/TagType.js +4 -3
  142. package/dist/schema/types/TagType.js.map +1 -1
  143. package/dist/schema/types/index.d.ts +1 -0
  144. package/dist/schema/types/index.js +3 -1
  145. package/dist/schema/types/index.js.map +1 -1
  146. package/dist/ui/.vite/manifest.json +2 -2
  147. package/dist/ui/assets/docs-DR80KoAA.js +416 -0
  148. package/dist/ui/assets/docs-DR80KoAA.js.map +1 -0
  149. package/dist/ui/assets/docs-WKK9Zcu5.css +1 -0
  150. package/dist/utils/path.js +10 -0
  151. package/dist/utils/path.js.map +1 -1
  152. package/package.json +12 -8
  153. package/dist/ui/assets/docs-DVEzFAJo.css +0 -1
  154. package/dist/ui/assets/docs-l9XdmrRL.js +0 -174
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ // Legacy executor - deprecated in favor of the new execution system
3
+ // This file is kept for backward compatibility
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.executePlan = executePlan;
9
+ const path_1 = __importDefault(require("path"));
10
+ const promises_1 = __importDefault(require("fs/promises"));
11
+ // Helper to resolve a path relative to the project root.
12
+ function resolveProjectPath(relativePath) {
13
+ // __dirname points to /.../src/architect, so go up two levels to project root.
14
+ const projectRoot = path_1.default.resolve(__dirname, "../..", ".."); // src/architect -> src -> project root
15
+ return path_1.default.resolve(projectRoot, relativePath);
16
+ }
17
+ /**
18
+ * Writes a file, ensuring the directory exists.
19
+ * Returns a log message.
20
+ */
21
+ async function writeFileAction(action) {
22
+ const absolute = resolveProjectPath(action.path);
23
+ await promises_1.default.mkdir(path_1.default.dirname(absolute), { recursive: true });
24
+ const content = action.type === "createFile" ? action.content : action.patch; // update uses patch as new content for simplicity
25
+ await promises_1.default.writeFile(absolute, content, "utf8");
26
+ return `[OK] ${action.type === "createFile" ? "Created" : "Updated"} ${action.path}`;
27
+ }
28
+ /** Delete a file safely (only test files). */
29
+ async function deleteFileAction(action) {
30
+ const absolute = resolveProjectPath(action.path);
31
+ // Safety: only allow deletion of *.test.ts or *.spec.ts files.
32
+ if (!action.path.match(/\.(test|spec)\.ts$/)) {
33
+ return `WARNING: Skipped deletion of ${action.path}: only test files may be removed`; // no error, just log
34
+ }
35
+ await promises_1.default.unlink(absolute).catch(() => { }); // ignore if missing
36
+ return ` Deleted ${action.path}`;
37
+ }
38
+ /** Register a task by importing the file – ensures the task exists in the runtime. */
39
+ async function registerTaskAction(action) {
40
+ const absolute = resolveProjectPath(action.file);
41
+ try {
42
+ const mod = await import(absolute);
43
+ const task = mod[Object.keys(mod)[0]]; // naive: first export is the task
44
+ if (!task || typeof task !== "function" || !task.id) {
45
+ return `WARNING: Task not found in ${action.file}`;
46
+ }
47
+ // No explicit registration needed – importing registers via Runner's side‑effects.
48
+ return `[OK] Registered task ${action.taskId} from ${action.file}`;
49
+ }
50
+ catch (e) {
51
+ return `[ERROR] Failed to register task ${action.taskId}: ${e.message}`;
52
+ }
53
+ }
54
+ async function registerTestAction(action) {
55
+ // Jest automatically picks up *.test.ts files, so just ensure the file exists.
56
+ const absolute = resolveProjectPath(action.file);
57
+ const exists = await promises_1.default.access(absolute).then(() => true).catch(() => false);
58
+ return exists
59
+ ? `[OK] Test file ${action.file} ready for Jest`
60
+ : `[ERROR] Test file ${action.file} not found after creation`;
61
+ }
62
+ async function runDebuggerAction(action) {
63
+ // In dev mode we can emit an event that a custom hook can listen to.
64
+ // For simplicity we just log.
65
+ return ` Debugger requested for task ${action.taskId} (breakpoint: ${action.breakpoint ?? "none"})`;
66
+ }
67
+ async function logAction(action) {
68
+ return ` ${action.message}`;
69
+ }
70
+ /**
71
+ * @deprecated Use ArchitectExecutor class instead
72
+ *
73
+ * Main executor function - legacy implementation
74
+ */
75
+ async function executePlan(plan) {
76
+ const result = {
77
+ planId: plan.id,
78
+ success: true,
79
+ executionTime: 0,
80
+ actionsPerformed: 0,
81
+ actionsSkipped: 0,
82
+ logs: []
83
+ };
84
+ const allowWrite = process.env.ARCHITECT_ALLOW_WRITES === "true";
85
+ const startTime = Date.now();
86
+ for (let i = 0; i < plan.actions.length; i++) {
87
+ const action = plan.actions[i];
88
+ try {
89
+ let logMsg;
90
+ if (!allowWrite && action.type !== "log") {
91
+ logMsg = `WARNING: Write blocked (ARCHITECT_ALLOW_WRITES not true) for action ${action.type}`;
92
+ result.success = false;
93
+ result.actionsSkipped++;
94
+ }
95
+ else {
96
+ switch (action.type) {
97
+ case "createFile":
98
+ case "updateFile":
99
+ logMsg = await writeFileAction(action);
100
+ break;
101
+ case "deleteFile":
102
+ logMsg = await deleteFileAction(action);
103
+ break;
104
+ case "registerTask":
105
+ logMsg = await registerTaskAction(action);
106
+ break;
107
+ case "registerTest":
108
+ logMsg = await registerTestAction(action);
109
+ break;
110
+ case "runDebugger":
111
+ logMsg = await runDebuggerAction(action);
112
+ break;
113
+ case "log":
114
+ logMsg = await logAction(action);
115
+ break;
116
+ default:
117
+ logMsg = ` Unknown action type ${action.type}`;
118
+ result.success = false;
119
+ }
120
+ }
121
+ result.logs.push({
122
+ timestamp: Date.now(),
123
+ level: 'info',
124
+ message: logMsg,
125
+ actionIndex: i
126
+ });
127
+ result.actionsPerformed++;
128
+ }
129
+ catch (e) {
130
+ result.success = false;
131
+ const errMsg = `[ERROR] Error executing action ${i} (${action.type}): ${e.message}`;
132
+ result.logs.push({
133
+ timestamp: Date.now(),
134
+ level: 'error',
135
+ message: errMsg,
136
+ actionIndex: i
137
+ });
138
+ result.errors = result.errors ?? [];
139
+ result.errors.push({
140
+ actionIndex: i,
141
+ action,
142
+ error: e.message,
143
+ recoverable: false
144
+ });
145
+ }
146
+ }
147
+ result.executionTime = Date.now() - startTime;
148
+ return result;
149
+ }
150
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/architect/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export * from './core';
2
+ export * from './models';
3
+ export * from './planning';
4
+ export * from './execution';
5
+ import { IAIModel, IArchitectLogger, PlanningContext, ExecutionOptions, ArchitectPlan, ArchitectResult } from './core';
6
+ import { ArchitectPlanner } from './planning';
7
+ import { ArchitectExecutor } from './execution';
8
+ export interface ArchitectConfig {
9
+ model: IAIModel;
10
+ logger: IArchitectLogger;
11
+ defaultContext?: PlanningContext;
12
+ defaultExecutionOptions?: Partial<ExecutionOptions>;
13
+ }
14
+ /**
15
+ * Main Architect class that combines planning and execution
16
+ */
17
+ export declare class Architect {
18
+ private config;
19
+ private planner;
20
+ private executor;
21
+ constructor(config: ArchitectConfig);
22
+ /**
23
+ * Generate a plan from a user prompt
24
+ */
25
+ plan(prompt: string, context?: PlanningContext): Promise<ArchitectPlan>;
26
+ /**
27
+ * Execute a plan
28
+ */
29
+ execute(plan: ArchitectPlan, options?: ExecutionOptions): Promise<ArchitectResult>;
30
+ /**
31
+ * Plan and execute in one step
32
+ */
33
+ run(prompt: string, context?: PlanningContext, options?: ExecutionOptions): Promise<{
34
+ plan: ArchitectPlan;
35
+ result: ArchitectResult;
36
+ }>;
37
+ /**
38
+ * Get the underlying planner
39
+ */
40
+ get planner(): ArchitectPlanner;
41
+ /**
42
+ * Get the underlying executor
43
+ */
44
+ get executor(): ArchitectExecutor;
45
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Architect = void 0;
18
+ // Main architect module exports
19
+ __exportStar(require("./core"), exports);
20
+ __exportStar(require("./models"), exports);
21
+ __exportStar(require("./planning"), exports);
22
+ __exportStar(require("./execution"), exports);
23
+ const planning_1 = require("./planning");
24
+ const execution_1 = require("./execution");
25
+ /**
26
+ * Main Architect class that combines planning and execution
27
+ */
28
+ class Architect {
29
+ config;
30
+ planner;
31
+ executor;
32
+ constructor(config) {
33
+ this.config = config;
34
+ this.planner = new planning_1.ArchitectPlanner(config.model, config.logger, config.defaultContext);
35
+ this.executor = new execution_1.ArchitectExecutor(config.logger, config.defaultExecutionOptions);
36
+ }
37
+ /**
38
+ * Generate a plan from a user prompt
39
+ */
40
+ async plan(prompt, context) {
41
+ return this.planner.plan(prompt, context);
42
+ }
43
+ /**
44
+ * Execute a plan
45
+ */
46
+ async execute(plan, options) {
47
+ return this.executor.execute(plan, options);
48
+ }
49
+ /**
50
+ * Plan and execute in one step
51
+ */
52
+ async run(prompt, context, options) {
53
+ const plan = await this.plan(prompt, context);
54
+ // Validate plan before execution
55
+ const validation = await this.planner.validate(plan);
56
+ if (!validation.valid) {
57
+ throw new Error(`Plan validation failed: ${validation.errors.map(e => e.message).join(', ')}`);
58
+ }
59
+ const result = await this.execute(plan, options);
60
+ return { plan, result };
61
+ }
62
+ /**
63
+ * Get the underlying planner
64
+ */
65
+ get planner() {
66
+ return this.planner;
67
+ }
68
+ /**
69
+ * Get the underlying executor
70
+ */
71
+ get executor() {
72
+ return this.executor;
73
+ }
74
+ }
75
+ exports.Architect = Architect;
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/architect/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gCAAgC;AAChC,yCAAuB;AACvB,2CAAyB;AACzB,6CAA2B;AAC3B,8CAA4B;AAW5B,yCAA8C;AAC9C,2CAAgD;AAShD;;GAEG;AACH,MAAa,SAAS;IAIA;IAHZ,OAAO,CAAmB;IAC1B,QAAQ,CAAoB;IAEpC,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,2BAAgB,CACjC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,cAAc,CACtB,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,6BAAiB,CACnC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,uBAAuB,CAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAyB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAmB,EAAE,OAA0B;QAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,MAAc,EACd,OAAyB,EACzB,OAA0B;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AA/DD,8BA+DC"}
@@ -0,0 +1,10 @@
1
+ export interface LlmMessage {
2
+ role: "system" | "user" | "assistant";
3
+ content: string;
4
+ }
5
+ /**
6
+ * @deprecated Use AIModelFactory.createFromEnv() instead
7
+ *
8
+ * Legacy function that either returns a fake response or uses the new model system
9
+ */
10
+ export declare function queryLlm(userPrompt: string): Promise<string>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // Legacy LLM client - deprecated in favor of the new models system
3
+ // This file is kept for backward compatibility
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.queryLlm = queryLlm;
6
+ const models_1 = require("./models");
7
+ /**
8
+ * @deprecated Use AIModelFactory.createFromEnv() instead
9
+ *
10
+ * Legacy function that either returns a fake response or uses the new model system
11
+ */
12
+ async function queryLlm(userPrompt) {
13
+ const fake = process.env.ARCHITECT_FAKE_RESPONSE;
14
+ if (fake) {
15
+ // The fake response is expected to be a JSON string that matches the
16
+ // ArchitectPlan schema. We simply return it unchanged.
17
+ return fake;
18
+ }
19
+ // Use new model system for real queries
20
+ try {
21
+ const model = models_1.AIModelFactory.createFromEnv();
22
+ const messages = [
23
+ { role: 'system', content: 'You are an AI architect that generates JSON plans.' },
24
+ { role: 'user', content: userPrompt }
25
+ ];
26
+ return await model.complete(messages);
27
+ }
28
+ catch (error) {
29
+ throw new Error(`LLM query failed: ${error instanceof Error ? error.message : String(error)}. ` +
30
+ 'Consider setting ARCHITECT_FAKE_RESPONSE for testing or configure proper API credentials.');
31
+ }
32
+ }
33
+ //# sourceMappingURL=llmClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmClient.js","sourceRoot":"","sources":["../../src/architect/llmClient.ts"],"names":[],"mappings":";AAAA,mEAAmE;AACnE,+CAA+C;;AAc/C,4BAsBC;AAlCD,qCAA0C;AAO1C;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,UAAkB;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,qEAAqE;QACrE,uDAAuD;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,uBAAc,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAiB;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oDAAoD,EAAE;YACjF,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;SACtC,CAAC;QACF,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YAC/E,2FAA2F,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { IAIModel, AIModelConfig, ChatMessage, ChatCompletionRequest, ChatCompletionResponse } from '../core';
2
+ export declare abstract class BaseAIModel implements IAIModel {
3
+ readonly config: AIModelConfig;
4
+ constructor(config: AIModelConfig);
5
+ abstract chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
6
+ complete(messages: ChatMessage[]): Promise<string>;
7
+ abstract supports(feature: 'tools' | 'vision' | 'json_mode'): boolean;
8
+ abstract getInfo(): Promise<{
9
+ id: string;
10
+ contextWindow: number;
11
+ maxOutputTokens: number;
12
+ supportedFeatures: string[];
13
+ }>;
14
+ protected validateConfig(config: AIModelConfig): void;
15
+ protected makeRequest<T = any>(endpoint: string, data: any, options?: RequestInit): Promise<T>;
16
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseAIModel = void 0;
4
+ const errors_1 = require("../core/errors");
5
+ class BaseAIModel {
6
+ config;
7
+ constructor(config) {
8
+ this.config = config;
9
+ this.validateConfig(config);
10
+ }
11
+ async complete(messages) {
12
+ const response = await this.chat({
13
+ model: this.config.model,
14
+ messages,
15
+ temperature: this.config.temperature ?? 0.7,
16
+ max_tokens: this.config.maxTokens
17
+ });
18
+ const content = response.choices[0]?.message?.content;
19
+ if (!content) {
20
+ throw new errors_1.AIModelError('No content in response', this.config.model);
21
+ }
22
+ return content;
23
+ }
24
+ validateConfig(config) {
25
+ if (!config.apiKey) {
26
+ throw new errors_1.AIModelError('API key is required', config.model);
27
+ }
28
+ if (!config.model) {
29
+ throw new errors_1.AIModelError('Model name is required');
30
+ }
31
+ }
32
+ async makeRequest(endpoint, data, options) {
33
+ const url = `${this.config.baseUrl || 'https://api.openai.com/v1'}${endpoint}`;
34
+ const controller = new AbortController();
35
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout || 30000);
36
+ try {
37
+ const response = await fetch(url, {
38
+ method: 'POST',
39
+ headers: {
40
+ 'Content-Type': 'application/json',
41
+ 'Authorization': `Bearer ${this.config.apiKey}`,
42
+ ...options?.headers
43
+ },
44
+ body: JSON.stringify(data),
45
+ signal: controller.signal,
46
+ ...options
47
+ });
48
+ clearTimeout(timeoutId);
49
+ if (!response.ok) {
50
+ const errorData = await response.json().catch(() => ({}));
51
+ throw (0, errors_1.createErrorFromResponse)(errorData);
52
+ }
53
+ return await response.json();
54
+ }
55
+ catch (error) {
56
+ clearTimeout(timeoutId);
57
+ if (error instanceof Error && error.name === 'AbortError') {
58
+ throw new errors_1.AIModelError('Request timeout', this.config.model, { timeout: this.config.timeout });
59
+ }
60
+ if (error instanceof errors_1.AIModelError) {
61
+ throw error;
62
+ }
63
+ throw new errors_1.AIModelError(`Request failed: ${error instanceof Error ? error.message : String(error)}`, this.config.model, { originalError: error });
64
+ }
65
+ }
66
+ }
67
+ exports.BaseAIModel = BaseAIModel;
68
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/architect/models/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { IAIModel, AIModelConfig } from '../core';
2
+ export type SupportedProvider = 'openai' | 'openai-compatible';
3
+ export interface ModelFactoryConfig extends AIModelConfig {
4
+ provider: SupportedProvider;
5
+ }
6
+ export declare class AIModelFactory {
7
+ static create(config: ModelFactoryConfig): IAIModel;
8
+ static createFromEnv(): IAIModel;
9
+ static getSupportedProviders(): SupportedProvider[];
10
+ static getProviderInfo(provider: SupportedProvider): {
11
+ name: string;
12
+ description: string;
13
+ requiredEnvVars: string[];
14
+ defaultModels: string[];
15
+ };
16
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AIModelFactory = void 0;
4
+ const openai_1 = require("./openai");
5
+ const errors_1 = require("../core/errors");
6
+ class AIModelFactory {
7
+ static create(config) {
8
+ switch (config.provider) {
9
+ case 'openai':
10
+ return new openai_1.OpenAIModel({
11
+ ...config,
12
+ baseUrl: config.baseUrl || 'https://api.openai.com/v1'
13
+ });
14
+ case 'openai-compatible':
15
+ if (!config.baseUrl) {
16
+ throw new errors_1.ConfigurationError('baseUrl is required for OpenAI-compatible providers', 'baseUrl');
17
+ }
18
+ return new openai_1.OpenAIModel(config);
19
+ default:
20
+ throw new errors_1.ConfigurationError(`Unsupported AI provider: ${config.provider}`, 'provider');
21
+ }
22
+ }
23
+ static createFromEnv() {
24
+ const provider = process.env.ARCHITECT_AI_PROVIDER || 'openai';
25
+ const apiKey = process.env.ARCHITECT_API_KEY ||
26
+ process.env.OPENAI_API_KEY;
27
+ if (!apiKey) {
28
+ throw new errors_1.ConfigurationError('No API key found. Set ARCHITECT_API_KEY or OPENAI_API_KEY', 'apiKey');
29
+ }
30
+ const model = process.env.ARCHITECT_MODEL || 'gpt-4o-mini';
31
+ const config = {
32
+ provider,
33
+ apiKey,
34
+ model,
35
+ baseUrl: process.env.ARCHITECT_BASE_URL,
36
+ temperature: process.env.ARCHITECT_TEMPERATURE
37
+ ? parseFloat(process.env.ARCHITECT_TEMPERATURE)
38
+ : undefined,
39
+ maxTokens: process.env.ARCHITECT_MAX_TOKENS
40
+ ? parseInt(process.env.ARCHITECT_MAX_TOKENS, 10)
41
+ : undefined,
42
+ timeout: process.env.ARCHITECT_TIMEOUT
43
+ ? parseInt(process.env.ARCHITECT_TIMEOUT, 10)
44
+ : undefined
45
+ };
46
+ return this.create(config);
47
+ }
48
+ static getSupportedProviders() {
49
+ return ['openai', 'openai-compatible'];
50
+ }
51
+ static getProviderInfo(provider) {
52
+ switch (provider) {
53
+ case 'openai':
54
+ return {
55
+ name: 'OpenAI',
56
+ description: 'Official OpenAI API',
57
+ requiredEnvVars: ['OPENAI_API_KEY'],
58
+ defaultModels: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo']
59
+ };
60
+ case 'openai-compatible':
61
+ return {
62
+ name: 'OpenAI Compatible',
63
+ description: 'Any OpenAI-compatible API (e.g., Together AI, Anyscale, local models)',
64
+ requiredEnvVars: ['ARCHITECT_API_KEY', 'ARCHITECT_BASE_URL'],
65
+ defaultModels: ['mixtral-8x7b', 'llama-2-70b-chat', 'code-llama-34b']
66
+ };
67
+ default:
68
+ throw new errors_1.ConfigurationError(`Unknown provider: ${provider}`, 'provider');
69
+ }
70
+ }
71
+ }
72
+ exports.AIModelFactory = AIModelFactory;
73
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/architect/models/factory.ts"],"names":[],"mappings":";;;AACA,qCAAuC;AACvC,2CAAoD;AAQpD,MAAa,cAAc;IACzB,MAAM,CAAC,MAAM,CAAC,MAA0B;QACtC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,QAAQ;gBACX,OAAO,IAAI,oBAAW,CAAC;oBACrB,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;iBACvD,CAAC,CAAC;YAEL,KAAK,mBAAmB;gBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,2BAAkB,CAC1B,qDAAqD,EACrD,SAAS,CACV,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,oBAAW,CAAC,MAAM,CAAC,CAAC;YAEjC;gBACE,MAAM,IAAI,2BAAkB,CAC1B,4BAA4B,MAAM,CAAC,QAAQ,EAAE,EAC7C,UAAU,CACX,CAAC;QACN,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,MAAM,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,qBAA2C,IAAI,QAAQ,CAAC;QACtF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,2BAAkB,CAC1B,2DAA2D,EAC3D,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;QAE3D,MAAM,MAAM,GAAuB;YACjC,QAAQ;YACR,MAAM;YACN,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;gBAC5C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;gBAC/C,CAAC,CAAC,SAAS;YACb,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBACzC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBACpC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBAC7C,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,qBAAqB;QAC1B,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAA2B;QAMhD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;oBAClC,eAAe,EAAE,CAAC,gBAAgB,CAAC;oBACnC,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;iBACzE,CAAC;YAEJ,KAAK,mBAAmB;gBACtB,OAAO;oBACL,IAAI,EAAE,mBAAmB;oBACzB,WAAW,EAAE,uEAAuE;oBACpF,eAAe,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;oBAC5D,aAAa,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;iBACtE,CAAC;YAEJ;gBACE,MAAM,IAAI,2BAAkB,CAAC,qBAAqB,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF;AA1FD,wCA0FC"}
@@ -0,0 +1,3 @@
1
+ export * from './base';
2
+ export * from './openai';
3
+ export * from './factory';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // AI Model implementations and factory
18
+ __exportStar(require("./base"), exports);
19
+ __exportStar(require("./openai"), exports);
20
+ __exportStar(require("./factory"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/architect/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B"}
@@ -0,0 +1,7 @@
1
+ import { ChatCompletionRequest, ChatCompletionResponse } from '../core';
2
+ import { BaseAIModel } from './base';
3
+ export declare class OpenAIModel extends BaseAIModel {
4
+ chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
5
+ supports(feature: 'tools' | 'vision' | 'json_mode'): boolean;
6
+ getInfo(): Promise<any>;
7
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAIModel = void 0;
4
+ const base_1 = require("./base");
5
+ class OpenAIModel extends base_1.BaseAIModel {
6
+ async chat(request) {
7
+ return this.makeRequest('/chat/completions', request);
8
+ }
9
+ supports(feature) {
10
+ const model = this.config.model.toLowerCase();
11
+ switch (feature) {
12
+ case 'tools':
13
+ return model.includes('gpt-4') || model.includes('gpt-3.5-turbo');
14
+ case 'vision':
15
+ return model.includes('gpt-4') && model.includes('vision');
16
+ case 'json_mode':
17
+ return model.includes('gpt-4') || model.includes('gpt-3.5-turbo');
18
+ default:
19
+ return false;
20
+ }
21
+ }
22
+ async getInfo() {
23
+ const model = this.config.model.toLowerCase();
24
+ // Model-specific configurations
25
+ const modelConfigs = {
26
+ 'gpt-4': {
27
+ contextWindow: 8192,
28
+ maxOutputTokens: 4096,
29
+ supportedFeatures: ['tools', 'json_mode']
30
+ },
31
+ 'gpt-4-32k': {
32
+ contextWindow: 32768,
33
+ maxOutputTokens: 4096,
34
+ supportedFeatures: ['tools', 'json_mode']
35
+ },
36
+ 'gpt-4-turbo': {
37
+ contextWindow: 128000,
38
+ maxOutputTokens: 4096,
39
+ supportedFeatures: ['tools', 'vision', 'json_mode']
40
+ },
41
+ 'gpt-4o': {
42
+ contextWindow: 128000,
43
+ maxOutputTokens: 4096,
44
+ supportedFeatures: ['tools', 'vision', 'json_mode']
45
+ },
46
+ 'gpt-4o-mini': {
47
+ contextWindow: 128000,
48
+ maxOutputTokens: 16384,
49
+ supportedFeatures: ['tools', 'vision', 'json_mode']
50
+ },
51
+ 'gpt-3.5-turbo': {
52
+ contextWindow: 16385,
53
+ maxOutputTokens: 4096,
54
+ supportedFeatures: ['tools', 'json_mode']
55
+ }
56
+ };
57
+ // Find the best match for the model
58
+ const configKey = Object.keys(modelConfigs).find(key => model.includes(key));
59
+ const config = configKey ? modelConfigs[configKey] : {
60
+ contextWindow: 4096,
61
+ maxOutputTokens: 2048,
62
+ supportedFeatures: []
63
+ };
64
+ return {
65
+ id: this.config.model,
66
+ ...config
67
+ };
68
+ }
69
+ }
70
+ exports.OpenAIModel = OpenAIModel;
71
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/architect/models/openai.ts"],"names":[],"mappings":";;;AACA,iCAAqC;AAErC,MAAa,WAAY,SAAQ,kBAAW;IAC1C,KAAK,CAAC,IAAI,CAAC,OAA8B;QACvC,OAAO,IAAI,CAAC,WAAW,CAAyB,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,QAAQ,CAAC,OAAyC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAE9C,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACpE,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7D,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACpE;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAE9C,gCAAgC;QAChC,MAAM,YAAY,GAAwB;YACxC,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;YACD,WAAW,EAAE;gBACX,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;YACD,aAAa,EAAE;gBACb,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,QAAQ,EAAE;gBACR,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,aAAa,EAAE;gBACb,aAAa,EAAE,MAAM;gBACrB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;aACpD;YACD,eAAe,EAAE;gBACf,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,IAAI;gBACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1C;SACF,CAAC;QAEF,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnD,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,EAAE;SACtB,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACrB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;CACF;AAtED,kCAsEC"}
@@ -0,0 +1,9 @@
1
+ import type { ArchitectPlan } from "./core/types";
2
+ /**
3
+ * @deprecated Use ArchitectPlanner class instead
4
+ *
5
+ * Sends the user prompt to the LLM and returns a validated ArchitectPlan.
6
+ * If the LLM response cannot be parsed/validated, the function returns a plan
7
+ * containing a single log action that explains the problem.
8
+ */
9
+ export declare function planFromPrompt(userPrompt: string): Promise<ArchitectPlan>;