@auto-engineer/app-assembler 1.112.2 → 1.114.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.
- package/dist/src/agents/assembler-agent.d.ts +4 -0
- package/dist/src/agents/assembler-agent.d.ts.map +1 -0
- package/dist/src/agents/assembler-agent.js +11 -0
- package/dist/src/agents/assembler-agent.js.map +1 -0
- package/dist/src/agents/pipeline-agent.d.ts +27 -0
- package/dist/src/agents/pipeline-agent.d.ts.map +1 -0
- package/dist/src/agents/pipeline-agent.js +91 -0
- package/dist/src/agents/pipeline-agent.js.map +1 -0
- package/dist/src/agents/refinement-agent.d.ts +4 -0
- package/dist/src/agents/refinement-agent.d.ts.map +1 -0
- package/dist/src/agents/refinement-agent.js +11 -0
- package/dist/src/agents/refinement-agent.js.map +1 -0
- package/dist/src/assemble.d.ts +4 -4
- package/dist/src/assemble.d.ts.map +1 -1
- package/dist/src/assemble.js +16 -59
- package/dist/src/assemble.js.map +1 -1
- package/dist/src/commands/assemble-app.d.ts +1 -2
- package/dist/src/commands/assemble-app.d.ts.map +1 -1
- package/dist/src/commands/assemble-app.js +3 -25
- package/dist/src/commands/assemble-app.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/model/create-model.d.ts +2 -0
- package/dist/src/model/create-model.d.ts.map +1 -0
- package/dist/src/model/create-model.js +8 -0
- package/dist/src/model/create-model.js.map +1 -0
- package/dist/src/prompt.d.ts +2 -2
- package/dist/src/prompt.d.ts.map +1 -1
- package/dist/src/prompt.js +8 -9
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/types.d.ts +9 -13
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assembler-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/assembler-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAO7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LlmAgent } from '@google/adk';
|
|
2
|
+
import { buildSystemPrompt } from '../prompt.js';
|
|
3
|
+
export function createAssemblerAgent(model) {
|
|
4
|
+
return new LlmAgent({
|
|
5
|
+
name: 'app_assembler_agent',
|
|
6
|
+
model,
|
|
7
|
+
instruction: buildSystemPrompt(),
|
|
8
|
+
outputKey: 'assembler_output',
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=assembler-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assembler-agent.js","sourceRoot":"","sources":["../../../src/agents/assembler-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,IAAI,QAAQ,CAAC;QAClB,IAAI,EAAE,qBAAqB;QAC3B,KAAK;QACL,WAAW,EAAE,iBAAiB,EAAE;QAChC,SAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseAgent, type Event, type InvocationContext } from '@google/adk';
|
|
2
|
+
import type { BaseLlm } from 'adk-llm-bridge';
|
|
3
|
+
import type { AssembleAppPayload } from '../types.js';
|
|
4
|
+
export interface AppAssemblerPipelineInput {
|
|
5
|
+
payload: AssembleAppPayload;
|
|
6
|
+
targetDir: string;
|
|
7
|
+
maxRefinements: number;
|
|
8
|
+
}
|
|
9
|
+
export interface AppAssemblerPipelineResult {
|
|
10
|
+
files: {
|
|
11
|
+
path: string;
|
|
12
|
+
content: string;
|
|
13
|
+
}[];
|
|
14
|
+
refinements: number;
|
|
15
|
+
llmCalls: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class AppAssemblerPipelineAgent extends BaseAgent {
|
|
18
|
+
private readonly input;
|
|
19
|
+
private readonly assemblerAgent;
|
|
20
|
+
private readonly refinementAgent;
|
|
21
|
+
private _result;
|
|
22
|
+
constructor(model: BaseLlm, input: AppAssemblerPipelineInput);
|
|
23
|
+
get result(): AppAssemblerPipelineResult;
|
|
24
|
+
protected runAsyncImpl(ctx: InvocationContext): AsyncGenerator<Event, void, void>;
|
|
25
|
+
protected runLiveImpl(_ctx: InvocationContext): AsyncGenerator<Event, void, void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=pipeline-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/pipeline-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAe,KAAK,KAAK,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,yBAA0B,SAAQ,SAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,OAAO,CAA0E;gBAE7E,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB;IAc5D,IAAI,MAAM,IAAI,0BAA0B,CAEvC;cAEgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;cA4EvE,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;CAIzF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { BaseAgent, createEvent } from '@google/adk';
|
|
4
|
+
import { parseFiles } from '../file-parser.js';
|
|
5
|
+
import { buildRefinementPrompt, buildUserPrompt } from '../prompt.js';
|
|
6
|
+
import { runTypeCheck } from '../type-checker.js';
|
|
7
|
+
import { createAssemblerAgent } from './assembler-agent.js';
|
|
8
|
+
import { createRefinementAgent } from './refinement-agent.js';
|
|
9
|
+
export class AppAssemblerPipelineAgent extends BaseAgent {
|
|
10
|
+
constructor(model, input) {
|
|
11
|
+
const assemblerAgent = createAssemblerAgent(model);
|
|
12
|
+
const refinementAgent = createRefinementAgent(model);
|
|
13
|
+
super({
|
|
14
|
+
name: 'app_assembler_pipeline',
|
|
15
|
+
subAgents: [assemblerAgent, refinementAgent],
|
|
16
|
+
});
|
|
17
|
+
this._result = { files: [], refinements: 0, llmCalls: 0 };
|
|
18
|
+
this.input = input;
|
|
19
|
+
this.assemblerAgent = assemblerAgent;
|
|
20
|
+
this.refinementAgent = refinementAgent;
|
|
21
|
+
}
|
|
22
|
+
get result() {
|
|
23
|
+
return this._result;
|
|
24
|
+
}
|
|
25
|
+
async *runAsyncImpl(ctx) {
|
|
26
|
+
const { payload, targetDir, maxRefinements } = this.input;
|
|
27
|
+
// Initial generation
|
|
28
|
+
const userPrompt = buildUserPrompt(payload);
|
|
29
|
+
const userEvent = createEvent({
|
|
30
|
+
author: 'user',
|
|
31
|
+
invocationId: ctx.invocationId,
|
|
32
|
+
content: { role: 'user', parts: [{ text: userPrompt }] },
|
|
33
|
+
});
|
|
34
|
+
ctx.session.events.push(userEvent);
|
|
35
|
+
for await (const event of this.assemblerAgent.runAsync(ctx)) {
|
|
36
|
+
yield event;
|
|
37
|
+
}
|
|
38
|
+
this._result.llmCalls++;
|
|
39
|
+
const assemblerOutput = String(ctx.session.state.assembler_output ?? '');
|
|
40
|
+
let files = parseFiles(assemblerOutput);
|
|
41
|
+
writeFiles(targetDir, files);
|
|
42
|
+
this._result.files = files;
|
|
43
|
+
// Type-check refinement loop
|
|
44
|
+
for (let i = 0; i < maxRefinements; i++) {
|
|
45
|
+
const generatedPaths = files.map((f) => f.path);
|
|
46
|
+
const result = runTypeCheck(targetDir, generatedPaths);
|
|
47
|
+
console.log(`[app-assembler] type-check iteration ${i + 1}/${maxRefinements} — passed=${result.passed}, errors=${result.errors.length}`);
|
|
48
|
+
if (result.errors.length > 0) {
|
|
49
|
+
console.log(`[app-assembler] errors:\n${result.errors.join('\n')}`);
|
|
50
|
+
}
|
|
51
|
+
console.log(`[app-assembler] generated files: ${generatedPaths.join(', ')}`);
|
|
52
|
+
if (result.passed)
|
|
53
|
+
break;
|
|
54
|
+
this._result.refinements++;
|
|
55
|
+
console.log(` refinement ${this._result.refinements}/${maxRefinements} — ${result.errors.length} errors`);
|
|
56
|
+
const refinementPrompt = buildRefinementPrompt(result.errors, files);
|
|
57
|
+
const refinementEvent = createEvent({
|
|
58
|
+
author: 'user',
|
|
59
|
+
invocationId: ctx.invocationId,
|
|
60
|
+
content: { role: 'user', parts: [{ text: refinementPrompt }] },
|
|
61
|
+
});
|
|
62
|
+
ctx.session.events.push(refinementEvent);
|
|
63
|
+
for await (const event of this.refinementAgent.runAsync(ctx)) {
|
|
64
|
+
yield event;
|
|
65
|
+
}
|
|
66
|
+
this._result.llmCalls++;
|
|
67
|
+
const refinementOutput = String(ctx.session.state.refinement_output ?? '');
|
|
68
|
+
const previousFiles = files.map((f) => f.path).join(', ');
|
|
69
|
+
files = parseFiles(refinementOutput);
|
|
70
|
+
console.log(`[app-assembler] refinement ${this._result.refinements} — files before: [${previousFiles}], files after: [${files.map((f) => f.path).join(', ')}]`);
|
|
71
|
+
writeFiles(targetDir, files);
|
|
72
|
+
this._result.files = files;
|
|
73
|
+
}
|
|
74
|
+
const lastCheck = runTypeCheck(targetDir, files.map((f) => f.path));
|
|
75
|
+
if (!lastCheck.passed) {
|
|
76
|
+
console.warn(`[app-assembler] WARNING: type-check still failing after ${maxRefinements} refinements. Remaining errors:\n${lastCheck.errors.join('\n')}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async *runLiveImpl(_ctx) {
|
|
80
|
+
yield* [];
|
|
81
|
+
throw new Error('Live mode not supported');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function writeFiles(targetDir, files) {
|
|
85
|
+
for (const file of files) {
|
|
86
|
+
const fullPath = resolve(targetDir, file.path);
|
|
87
|
+
mkdirSync(dirname(fullPath), { recursive: true });
|
|
88
|
+
writeFileSync(fullPath, file.content, 'utf-8');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=pipeline-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-agent.js","sourceRoot":"","sources":["../../../src/agents/pipeline-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refinement-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/refinement-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAO9D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LlmAgent } from '@google/adk';
|
|
2
|
+
import { buildSystemPrompt } from '../prompt.js';
|
|
3
|
+
export function createRefinementAgent(model) {
|
|
4
|
+
return new LlmAgent({
|
|
5
|
+
name: 'app_refinement_agent',
|
|
6
|
+
model,
|
|
7
|
+
instruction: buildSystemPrompt(),
|
|
8
|
+
outputKey: 'refinement_output',
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=refinement-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refinement-agent.js","sourceRoot":"","sources":["../../../src/agents/refinement-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,IAAI,QAAQ,CAAC;QAClB,IAAI,EAAE,sBAAsB;QAC5B,KAAK;QACL,WAAW,EAAE,iBAAiB,EAAE;QAChC,SAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/assemble.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { AssembleAppPayload, AssembleAppResult
|
|
3
|
-
export declare function assembleApp(payload: AssembleAppPayload,
|
|
4
|
-
model:
|
|
1
|
+
import type { BaseLlm } from 'adk-llm-bridge';
|
|
2
|
+
import type { AssembleAppPayload, AssembleAppResult } from './types.js';
|
|
3
|
+
export declare function assembleApp(payload: AssembleAppPayload, options: {
|
|
4
|
+
model: BaseLlm;
|
|
5
5
|
targetDir: string;
|
|
6
6
|
maxRefinements?: number;
|
|
7
7
|
}): Promise<AssembleAppResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../src/assemble.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../src/assemble.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,iBAAiB,CAAC,CA0B5B"}
|
package/dist/src/assemble.js
CHANGED
|
@@ -1,68 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { parseFiles } from './file-parser.js';
|
|
5
|
-
import { buildRefinementPrompt, buildSystemPrompt, buildUserPrompt } from './prompt.js';
|
|
6
|
-
import { runTypeCheck } from './type-checker.js';
|
|
7
|
-
export async function assembleApp(payload, implementedComponents, options) {
|
|
1
|
+
import { InMemorySessionService, Runner } from '@google/adk';
|
|
2
|
+
import { AppAssemblerPipelineAgent } from './agents/pipeline-agent.js';
|
|
3
|
+
export async function assembleApp(payload, options) {
|
|
8
4
|
const { model, targetDir, maxRefinements = 3 } = options;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const userPrompt = buildUserPrompt(payload, implementedComponents);
|
|
14
|
-
const initial = await generateText({
|
|
15
|
-
model,
|
|
16
|
-
system: systemPrompt,
|
|
17
|
-
prompt: userPrompt,
|
|
5
|
+
const pipelineAgent = new AppAssemblerPipelineAgent(model, {
|
|
6
|
+
payload,
|
|
7
|
+
targetDir,
|
|
8
|
+
maxRefinements,
|
|
18
9
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
for (let i = 0; i < maxRefinements; i++) {
|
|
27
|
-
const generatedPaths = files.map((f) => f.path);
|
|
28
|
-
const result = runTypeCheck(targetDir, generatedPaths);
|
|
29
|
-
lastTypeCheckResult = result;
|
|
30
|
-
console.log(`[app-assembler] type-check iteration ${i + 1}/${maxRefinements} — passed=${result.passed}, errors=${result.errors.length}`);
|
|
31
|
-
if (result.errors.length > 0) {
|
|
32
|
-
console.log(`[app-assembler] errors:\n${result.errors.join('\n')}`);
|
|
33
|
-
}
|
|
34
|
-
console.log(`[app-assembler] generated files: ${generatedPaths.join(', ')}`);
|
|
35
|
-
if (result.passed)
|
|
36
|
-
break;
|
|
37
|
-
refinements++;
|
|
38
|
-
console.log(` refinement ${refinements}/${maxRefinements} — ${result.errors.length} errors`);
|
|
39
|
-
const refinementPrompt = buildRefinementPrompt(result.errors, files);
|
|
40
|
-
const refined = await generateText({
|
|
41
|
-
model,
|
|
42
|
-
system: systemPrompt,
|
|
43
|
-
prompt: refinementPrompt,
|
|
44
|
-
});
|
|
45
|
-
totalInputTokens += refined.usage.inputTokens ?? 0;
|
|
46
|
-
totalOutputTokens += refined.usage.outputTokens ?? 0;
|
|
47
|
-
const previousFiles = files.map((f) => f.path).join(', ');
|
|
48
|
-
files = parseFiles(refined.text);
|
|
49
|
-
console.log(`[app-assembler] refinement ${refinements} — files before: [${previousFiles}], files after: [${files.map((f) => f.path).join(', ')}]`);
|
|
50
|
-
writeFiles(targetDir, files);
|
|
51
|
-
}
|
|
52
|
-
if (lastTypeCheckResult && !lastTypeCheckResult.passed) {
|
|
53
|
-
console.warn(`[app-assembler] WARNING: type-check still failing after ${maxRefinements} refinements. Remaining errors:\n${lastTypeCheckResult.errors.join('\n')}`);
|
|
10
|
+
const sessionService = new InMemorySessionService();
|
|
11
|
+
const runner = new Runner({ appName: 'app-assembler', agent: pipelineAgent, sessionService });
|
|
12
|
+
for await (const _event of runner.runEphemeral({
|
|
13
|
+
userId: 'pipeline',
|
|
14
|
+
newMessage: { role: 'user', parts: [{ text: `Assemble app ${payload.appName}` }] },
|
|
15
|
+
})) {
|
|
16
|
+
// consume events
|
|
54
17
|
}
|
|
18
|
+
const { files, refinements, llmCalls } = pipelineAgent.result;
|
|
55
19
|
return {
|
|
56
20
|
files,
|
|
57
|
-
|
|
21
|
+
llmCalls,
|
|
58
22
|
refinements,
|
|
59
23
|
};
|
|
60
24
|
}
|
|
61
|
-
function writeFiles(targetDir, files) {
|
|
62
|
-
for (const file of files) {
|
|
63
|
-
const fullPath = resolve(targetDir, file.path);
|
|
64
|
-
mkdirSync(dirname(fullPath), { recursive: true });
|
|
65
|
-
writeFileSync(fullPath, file.content, 'utf-8');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
25
|
//# sourceMappingURL=assemble.js.map
|
package/dist/src/assemble.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B,EAC3B,OAAuE;IAEvE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAEzD,MAAM,aAAa,GAAG,IAAI,yBAAyB,CAAC,KAAK,EAAE;QACzD,OAAO;QACP,SAAS;QACT,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;IAE9F,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;QAC7C,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;KACnF,CAAC,EAAE,CAAC;QACH,iBAAiB;IACnB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC;IAE9D,OAAO;QACL,KAAK;QACL,QAAQ;QACR,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -6,8 +6,7 @@ export type AssembleAppCommand = Command<'AssembleApp', {
|
|
|
6
6
|
export type AppAssembledEvent = Event<'AppAssembled', {
|
|
7
7
|
filesWritten: string[];
|
|
8
8
|
refinements: number;
|
|
9
|
-
|
|
10
|
-
outputTokens: number;
|
|
9
|
+
llmCalls: number;
|
|
11
10
|
}>;
|
|
12
11
|
export type AppAssemblyFailedEvent = Event<'AppAssemblyFailed', {
|
|
13
12
|
error: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble-app.d.ts","sourceRoot":"","sources":["../../../src/commands/assemble-app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assemble-app.d.ts","sourceRoot":"","sources":["../../../src/commands/assemble-app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAI5F,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AAItE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,aAAa,EACb;IACE,GAAG,EAAE,cAAc,CAAC;CACrB,CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,KAAK,CACnC,cAAc,EACd;IACE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,KAAK,CACxC,mBAAmB,EACnB;IACE,KAAK,EAAE,MAAM,CAAC;CACf,CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AAE3E,eAAO,MAAM,cAAc;;;aAtBlB,cAAc;;;;;GAyFrB,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -1,28 +1,9 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
1
|
import path from 'node:path';
|
|
3
2
|
import { defineCommandHandler } from '@auto-engineer/message-bus';
|
|
4
|
-
import { createModelFromEnv } from '@auto-engineer/model-factory';
|
|
5
3
|
import createDebug from 'debug';
|
|
6
4
|
import { assembleApp } from '../assemble.js';
|
|
5
|
+
import { createModelFromEnv } from '../model/create-model.js';
|
|
7
6
|
const debug = createDebug('auto:app-assembler:command');
|
|
8
|
-
async function readComponentsDb(clientDir) {
|
|
9
|
-
try {
|
|
10
|
-
const raw = await readFile(path.join(clientDir, '.context', 'components-db.json'), 'utf-8');
|
|
11
|
-
const entries = JSON.parse(raw);
|
|
12
|
-
return entries
|
|
13
|
-
.filter((e) => !!e.componentPath && !!e.name)
|
|
14
|
-
.map((e) => ({
|
|
15
|
-
componentId: e.id ?? e.name,
|
|
16
|
-
componentName: e.name,
|
|
17
|
-
filePath: e.componentPath,
|
|
18
|
-
atomicType: e.atomicType ?? 'molecule',
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
debug('No components-db.json found, proceeding with empty components list');
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
7
|
export const commandHandler = defineCommandHandler({
|
|
27
8
|
name: 'AssembleApp',
|
|
28
9
|
displayName: 'Assemble App',
|
|
@@ -50,10 +31,8 @@ export const commandHandler = defineCommandHandler({
|
|
|
50
31
|
try {
|
|
51
32
|
const clientDir = path.resolve('client');
|
|
52
33
|
debug('Client directory: %s', clientDir);
|
|
53
|
-
const implementedComponents = await readComponentsDb(clientDir);
|
|
54
|
-
debug('Found %d implemented components', implementedComponents.length);
|
|
55
34
|
const model = createModelFromEnv();
|
|
56
|
-
const result = await assembleApp(payload,
|
|
35
|
+
const result = await assembleApp(payload, {
|
|
57
36
|
model,
|
|
58
37
|
targetDir: clientDir,
|
|
59
38
|
});
|
|
@@ -64,8 +43,7 @@ export const commandHandler = defineCommandHandler({
|
|
|
64
43
|
data: {
|
|
65
44
|
filesWritten,
|
|
66
45
|
refinements: result.refinements,
|
|
67
|
-
|
|
68
|
-
outputTokens: result.usage.outputTokens,
|
|
46
|
+
llmCalls: result.llmCalls,
|
|
69
47
|
},
|
|
70
48
|
timestamp: new Date(),
|
|
71
49
|
requestId: command.requestId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble-app.js","sourceRoot":"","sources":["../../../src/commands/assemble-app.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"assemble-app.js","sourceRoot":"","sources":["../../../src/commands/assemble-app.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAgB,oBAAoB,EAAc,MAAM,4BAA4B,CAAC;AAC5F,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,KAAK,GAAG,WAAW,CAAC,4BAA4B,CAAC,CAAC;AA2BxD,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAGhD;IACA,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,wGAAwG;IACrH,QAAQ,EAAE,WAAW;IACrB,IAAI,EAAE,KAAK;IACX,MAAM,EAAE;QACN,GAAG,EAAE;YACH,WAAW,EAAE,qFAAqF;YAClG,QAAQ,EAAE,IAAI;SACf;KACF;IACD,QAAQ,EAAE;QACR,+GAA+G;KAChH;IACD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE;QACtD,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE;KAClE;IACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,MAAM,OAAO,GAAuB,GAAG,CAAC,OAAO,CAAC;QAEhD,KAAK,CAAC,uCAAuC,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,KAAK,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;YAEzC,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;YAEnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE;gBACxC,KAAK;gBACL,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,yCAAyC,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAE1F,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE;oBACJ,YAAY;oBACZ,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B;gBACD,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;YAE3C,OAAO;gBACL,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC7B,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -9,9 +9,11 @@ export declare const COMMANDS: import("@auto-engineer/message-bus").UnifiedComma
|
|
|
9
9
|
correlationId?: string;
|
|
10
10
|
}>>[];
|
|
11
11
|
export { assembleAppHandler };
|
|
12
|
+
export type { AppAssemblerPipelineInput, AppAssemblerPipelineResult } from './agents/pipeline-agent.js';
|
|
13
|
+
export { AppAssemblerPipelineAgent } from './agents/pipeline-agent.js';
|
|
12
14
|
export { assembleApp } from './assemble.js';
|
|
13
15
|
export type { AppAssembledEvent, AppAssemblyFailedEvent, AssembleAppCommand, AssembleAppEvents, } from './commands/assemble-app.js';
|
|
14
16
|
export { parseFiles } from './file-parser.js';
|
|
15
17
|
export { runTypeCheck } from './type-checker.js';
|
|
16
|
-
export type { AssembleAppJob, AssembleAppPayload, AssembleAppResult, CrossCuttingRule,
|
|
18
|
+
export type { AssembleAppJob, AssembleAppPayload, AssembleAppResult, CrossCuttingRule, LayoutInfo, NavigationEdge, RouteDefinition, } from './types.js';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,eAAO,MAAM,QAAQ;;;;;;;;KAAuB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,eAAO,MAAM,QAAQ;;;;;;;;KAAuB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { commandHandler as assembleAppHandler } from './commands/assemble-app.js';
|
|
2
2
|
export const COMMANDS = [assembleAppHandler];
|
|
3
3
|
export { assembleAppHandler };
|
|
4
|
+
export { AppAssemblerPipelineAgent } from './agents/pipeline-agent.js';
|
|
4
5
|
export { assembleApp } from './assemble.js';
|
|
5
6
|
export { parseFiles } from './file-parser.js';
|
|
6
7
|
export { runTypeCheck } from './type-checker.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-model.d.ts","sourceRoot":"","sources":["../../../src/model/create-model.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,uCAKjC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Custom } from 'adk-llm-bridge';
|
|
2
|
+
export function createModelFromEnv() {
|
|
3
|
+
return Custom(process.env.CUSTOM_PROVIDER_DEFAULT_MODEL || 'gemini/gemini-3.1-pro-preview', {
|
|
4
|
+
baseURL: process.env.CUSTOM_PROVIDER_BASE_URL,
|
|
5
|
+
apiKey: process.env.CUSTOM_PROVIDER_API_KEY,
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=create-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-model.js","sourceRoot":"","sources":["../../../src/model/create-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,+BAA+B,EAAE;QAC1F,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAyB;QAC9C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAwB;KAC7C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/prompt.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { AssembleAppPayload
|
|
1
|
+
import type { AssembleAppPayload } from './types.js';
|
|
2
2
|
export declare function buildSystemPrompt(): string;
|
|
3
|
-
export declare function buildUserPrompt(payload: AssembleAppPayload
|
|
3
|
+
export declare function buildUserPrompt(payload: AssembleAppPayload): string;
|
|
4
4
|
export declare function buildRefinementPrompt(errors: string[], currentFiles: {
|
|
5
5
|
path: string;
|
|
6
6
|
content: string;
|
package/dist/src/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,iBAAiB,IAAI,MAAM,CAoC1C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4BnE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAYjH"}
|
package/dist/src/prompt.js
CHANGED
|
@@ -17,7 +17,7 @@ export function buildSystemPrompt() {
|
|
|
17
17
|
- Always import the global CSS as the first import in App.tsx: \`import '@/index.css';\`
|
|
18
18
|
- **Named exports ONLY** — NEVER use \`export default\`. Every export must be a named export (e.g. \`export function App()\`, \`export function MainLayout()\`). Every import must use named imports (e.g. \`import { App } from './App'\`, \`import { LogWorkoutPage } from '@/components/LogWorkoutPage'\`).
|
|
19
19
|
- \`@/\` import alias maps to \`src/\`
|
|
20
|
-
- All page components are in \`src/components/\` — use the exact file paths provided
|
|
20
|
+
- All page components are in \`src/components/\` — use the exact file paths provided in the route definitions
|
|
21
21
|
|
|
22
22
|
## Output format
|
|
23
23
|
For each file you generate, output:
|
|
@@ -35,9 +35,11 @@ You may ONLY generate these files:
|
|
|
35
35
|
|
|
36
36
|
Never generate or modify files in \`src/components/\`.`;
|
|
37
37
|
}
|
|
38
|
-
export function buildUserPrompt(payload
|
|
39
|
-
const
|
|
40
|
-
|
|
38
|
+
export function buildUserPrompt(payload) {
|
|
39
|
+
const routeComponents = payload.routes.map((r) => {
|
|
40
|
+
const importPath = `@/${r.componentPath.replace(/^src\//, '').replace(/\.tsx$/, '')}`;
|
|
41
|
+
return `- ${r.componentName} → import from "${importPath}" (route: ${r.path})`;
|
|
42
|
+
});
|
|
41
43
|
return `## App: ${payload.appName}
|
|
42
44
|
|
|
43
45
|
## Route Definitions
|
|
@@ -55,12 +57,9 @@ ${JSON.stringify(payload.layout, null, 2)}
|
|
|
55
57
|
## Entry Route
|
|
56
58
|
The default route ("/") should render: ${payload.entryRoute}
|
|
57
59
|
|
|
58
|
-
##
|
|
60
|
+
## Page Components
|
|
59
61
|
These are fully built page components. Import and wire them into routes:
|
|
60
|
-
${
|
|
61
|
-
|
|
62
|
-
## Other Implemented Components (for reference only — do NOT import these in App.tsx)
|
|
63
|
-
${nonPages.length > 0 ? nonPages.map((c) => `- ${c.componentName} (${c.atomicType}) at ${c.filePath}`).join('\n') : 'None'}
|
|
62
|
+
${routeComponents.join('\n')}
|
|
64
63
|
|
|
65
64
|
Generate the app shell files now.`;
|
|
66
65
|
}
|
package/dist/src/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAkC8C,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA2B
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAkC8C,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC,CAAC,aAAa,mBAAmB,UAAU,aAAa,CAAC,CAAC,IAAI,GAAG,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,OAAO,CAAC,OAAO;;;EAGjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAGvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAGhD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;;;EAGlD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;;;yCAGA,OAAO,CAAC,UAAU;;;;EAIzD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;kCAEM,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAgB,EAAE,YAAiD;IACvG,OAAO;;;;EAIP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAIjB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;oHAEiB,CAAC;AACrH,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -4,12 +4,17 @@ export type RouteDefinition = {
|
|
|
4
4
|
routeType: 'dedicated' | 'nested';
|
|
5
5
|
deepLinkable: boolean;
|
|
6
6
|
parentPath?: string;
|
|
7
|
-
|
|
7
|
+
componentId: string;
|
|
8
|
+
componentName: string;
|
|
9
|
+
componentPath: string;
|
|
8
10
|
interactionPattern: string;
|
|
9
11
|
};
|
|
10
12
|
export type NavigationEdge = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
fromComponentId: string;
|
|
14
|
+
fromComponentName: string;
|
|
15
|
+
toComponentId: string;
|
|
16
|
+
toComponentName: string;
|
|
17
|
+
toPath: string;
|
|
13
18
|
trigger: string;
|
|
14
19
|
triggerLabel: string;
|
|
15
20
|
triggerEmphasis?: 'primary' | 'secondary' | 'destructive' | 'ghost';
|
|
@@ -41,21 +46,12 @@ export type AssembleAppJob = {
|
|
|
41
46
|
target: 'AssembleApp';
|
|
42
47
|
payload: AssembleAppPayload;
|
|
43
48
|
};
|
|
44
|
-
export type ImplementedComponent = {
|
|
45
|
-
componentId: string;
|
|
46
|
-
componentName: string;
|
|
47
|
-
filePath: string;
|
|
48
|
-
atomicType: string;
|
|
49
|
-
};
|
|
50
49
|
export type AssembleAppResult = {
|
|
51
50
|
files: {
|
|
52
51
|
path: string;
|
|
53
52
|
content: string;
|
|
54
53
|
}[];
|
|
55
|
-
|
|
56
|
-
inputTokens: number;
|
|
57
|
-
outputTokens: number;
|
|
58
|
-
};
|
|
54
|
+
llmCalls: number;
|
|
59
55
|
refinements: number;
|
|
60
56
|
};
|
|
61
57
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,WAAW,GAAG,MAAM,EAAE,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,kBAAkB,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|