@aid-framework/generator-ts-vercel 0.0.0 → 0.1.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +123 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/emit/agents.d.ts +62 -0
- package/dist/emit/agents.d.ts.map +1 -0
- package/dist/emit/agents.js +256 -0
- package/dist/emit/agents.js.map +1 -0
- package/dist/emit/business.d.ts +23 -0
- package/dist/emit/business.d.ts.map +1 -0
- package/dist/emit/business.js +414 -0
- package/dist/emit/business.js.map +1 -0
- package/dist/emit/control.d.ts +40 -0
- package/dist/emit/control.d.ts.map +1 -0
- package/dist/emit/control.js +108 -0
- package/dist/emit/control.js.map +1 -0
- package/dist/emit/file.d.ts +64 -0
- package/dist/emit/file.d.ts.map +1 -0
- package/dist/emit/file.js +80 -0
- package/dist/emit/file.js.map +1 -0
- package/dist/emit/guardrails.d.ts +45 -0
- package/dist/emit/guardrails.d.ts.map +1 -0
- package/dist/emit/guardrails.js +192 -0
- package/dist/emit/guardrails.js.map +1 -0
- package/dist/emit/infrastructure.d.ts +15 -0
- package/dist/emit/infrastructure.d.ts.map +1 -0
- package/dist/emit/infrastructure.js +238 -0
- package/dist/emit/infrastructure.js.map +1 -0
- package/dist/emit/pipelines.d.ts +46 -0
- package/dist/emit/pipelines.d.ts.map +1 -0
- package/dist/emit/pipelines.js +1015 -0
- package/dist/emit/pipelines.js.map +1 -0
- package/dist/emit/prompts.d.ts +14 -0
- package/dist/emit/prompts.d.ts.map +1 -0
- package/dist/emit/prompts.js +61 -0
- package/dist/emit/prompts.js.map +1 -0
- package/dist/emit/retrieval.d.ts +19 -0
- package/dist/emit/retrieval.d.ts.map +1 -0
- package/dist/emit/retrieval.js +206 -0
- package/dist/emit/retrieval.js.map +1 -0
- package/dist/emit/schemas.d.ts +22 -0
- package/dist/emit/schemas.d.ts.map +1 -0
- package/dist/emit/schemas.js +145 -0
- package/dist/emit/schemas.js.map +1 -0
- package/dist/emit/text.d.ts +86 -0
- package/dist/emit/text.d.ts.map +1 -0
- package/dist/emit/text.js +242 -0
- package/dist/emit/text.js.map +1 -0
- package/dist/emit/tools.d.ts +15 -0
- package/dist/emit/tools.d.ts.map +1 -0
- package/dist/emit/tools.js +225 -0
- package/dist/emit/tools.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +48 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +88 -0
- package/dist/manifest.js.map +1 -0
- package/dist/names.d.ts +57 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +294 -0
- package/dist/names.js.map +1 -0
- package/dist/placeholders.d.ts +48 -0
- package/dist/placeholders.d.ts.map +1 -0
- package/dist/placeholders.js +114 -0
- package/dist/placeholders.js.map +1 -0
- package/dist/plan.d.ts +18 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +81 -0
- package/dist/plan.js.map +1 -0
- package/dist/validate.d.ts +88 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +790 -0
- package/dist/validate.js.map +1 -0
- package/package.json +43 -14
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The IR's `{{ name }}` placeholder mini-language, and its conversion to the
|
|
3
|
+
* `str.format` fields the runtime renders with.
|
|
4
|
+
*
|
|
5
|
+
* One scanner, two consumers: `checkPlan` rejects templates the runtime cannot render,
|
|
6
|
+
* and the prompt emitter stores the runtime-syntax template. Two independent scanners
|
|
7
|
+
* would be free to disagree, and the disagreement would only show up at request time.
|
|
8
|
+
*
|
|
9
|
+
* The two conventions are not the same language. The IR interpolates mustache
|
|
10
|
+
* placeholders, so `{{ name }}` is a substitution site and a lone brace is literal
|
|
11
|
+
* text; the runtime's `PromptTemplate` parses with `str.format`, where `{{ name }}` is
|
|
12
|
+
* an *escaped* literal and `{name}` is the substitution site. Emitting the IR's text
|
|
13
|
+
* unchanged therefore produces a template with no variables at all -- exactly the
|
|
14
|
+
* defect this module exists to prevent.
|
|
15
|
+
*/
|
|
16
|
+
export type TemplatePart = {
|
|
17
|
+
readonly kind: 'text';
|
|
18
|
+
readonly value: string;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'placeholder';
|
|
21
|
+
readonly name: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Whether `spec` is a dotted identifier -- the only shape a placeholder may take.
|
|
25
|
+
*
|
|
26
|
+
* `a:>4`, `a-b` and `a[0]` are not nameable, and the runtime supplies values as
|
|
27
|
+
* keywords, so accepting one would either drop the format spec or fail at render time.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isNameLike(spec: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Split a template into literal text and placeholders.
|
|
32
|
+
*
|
|
33
|
+
* A placeholder is `{{` a dotted identifier `}}`; everything else is literal text,
|
|
34
|
+
* including a single brace or a run that never closes. That is the IR's convention,
|
|
35
|
+
* and it differs from what the runtime renders with -- {@link runtimeTemplate} is the
|
|
36
|
+
* single place the conversion happens.
|
|
37
|
+
*/
|
|
38
|
+
export declare function scanTemplate(template: string): TemplatePart[];
|
|
39
|
+
/** Every placeholder name in first-seen order. */
|
|
40
|
+
export declare function templatePlaceholders(template: string): string[];
|
|
41
|
+
/**
|
|
42
|
+
* The IR's template as the `str.format` body the runtime renders.
|
|
43
|
+
*
|
|
44
|
+
* `{{ name }}` becomes `{name}` and every literal brace is doubled, so the model sees
|
|
45
|
+
* the text the spec asked for and the runtime sees the fields it can bind.
|
|
46
|
+
*/
|
|
47
|
+
export declare function runtimeTemplate(template: string): string;
|
|
48
|
+
//# sourceMappingURL=placeholders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholders.d.ts","sourceRoot":"","sources":["../src/placeholders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBhD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA4B7D;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/D;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxD"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The IR's `{{ name }}` placeholder mini-language, and its conversion to the
|
|
3
|
+
* `str.format` fields the runtime renders with.
|
|
4
|
+
*
|
|
5
|
+
* One scanner, two consumers: `checkPlan` rejects templates the runtime cannot render,
|
|
6
|
+
* and the prompt emitter stores the runtime-syntax template. Two independent scanners
|
|
7
|
+
* would be free to disagree, and the disagreement would only show up at request time.
|
|
8
|
+
*
|
|
9
|
+
* The two conventions are not the same language. The IR interpolates mustache
|
|
10
|
+
* placeholders, so `{{ name }}` is a substitution site and a lone brace is literal
|
|
11
|
+
* text; the runtime's `PromptTemplate` parses with `str.format`, where `{{ name }}` is
|
|
12
|
+
* an *escaped* literal and `{name}` is the substitution site. Emitting the IR's text
|
|
13
|
+
* unchanged therefore produces a template with no variables at all -- exactly the
|
|
14
|
+
* defect this module exists to prevent.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Whether `spec` is a dotted identifier -- the only shape a placeholder may take.
|
|
18
|
+
*
|
|
19
|
+
* `a:>4`, `a-b` and `a[0]` are not nameable, and the runtime supplies values as
|
|
20
|
+
* keywords, so accepting one would either drop the format spec or fail at render time.
|
|
21
|
+
*/
|
|
22
|
+
export function isNameLike(spec) {
|
|
23
|
+
if (spec.length === 0)
|
|
24
|
+
return false;
|
|
25
|
+
let atSegmentStart = true;
|
|
26
|
+
for (const character of spec) {
|
|
27
|
+
if (character === '.') {
|
|
28
|
+
if (atSegmentStart)
|
|
29
|
+
return false;
|
|
30
|
+
atSegmentStart = true;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const isLetter = (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z');
|
|
34
|
+
const isDigit = character >= '0' && character <= '9';
|
|
35
|
+
const isUnderscore = character === '_';
|
|
36
|
+
if (atSegmentStart) {
|
|
37
|
+
if (!isLetter && !isUnderscore)
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
else if (!isLetter && !isDigit && !isUnderscore) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
atSegmentStart = false;
|
|
44
|
+
}
|
|
45
|
+
return !atSegmentStart;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Split a template into literal text and placeholders.
|
|
49
|
+
*
|
|
50
|
+
* A placeholder is `{{` a dotted identifier `}}`; everything else is literal text,
|
|
51
|
+
* including a single brace or a run that never closes. That is the IR's convention,
|
|
52
|
+
* and it differs from what the runtime renders with -- {@link runtimeTemplate} is the
|
|
53
|
+
* single place the conversion happens.
|
|
54
|
+
*/
|
|
55
|
+
export function scanTemplate(template) {
|
|
56
|
+
const parts = [];
|
|
57
|
+
let text = '';
|
|
58
|
+
let index = 0;
|
|
59
|
+
const flush = () => {
|
|
60
|
+
if (text.length > 0) {
|
|
61
|
+
parts.push({ kind: 'text', value: text });
|
|
62
|
+
text = '';
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
while (index < template.length) {
|
|
66
|
+
if (template[index] === '{' && template[index + 1] === '{') {
|
|
67
|
+
const close = template.indexOf('}}', index + 2);
|
|
68
|
+
if (close !== -1) {
|
|
69
|
+
const name = template.slice(index + 2, close).trim();
|
|
70
|
+
if (isNameLike(name)) {
|
|
71
|
+
flush();
|
|
72
|
+
parts.push({ kind: 'placeholder', name });
|
|
73
|
+
index = close + 2;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
text += template[index] ?? '';
|
|
79
|
+
index += 1;
|
|
80
|
+
}
|
|
81
|
+
flush();
|
|
82
|
+
return parts;
|
|
83
|
+
}
|
|
84
|
+
/** Every placeholder name in first-seen order. */
|
|
85
|
+
export function templatePlaceholders(template) {
|
|
86
|
+
const names = [];
|
|
87
|
+
for (const part of scanTemplate(template)) {
|
|
88
|
+
if (part.kind === 'placeholder' && !names.includes(part.name))
|
|
89
|
+
names.push(part.name);
|
|
90
|
+
}
|
|
91
|
+
return names;
|
|
92
|
+
}
|
|
93
|
+
/** Literal braces doubled, so a text part cannot introduce a field. */
|
|
94
|
+
function escapeBraces(text) {
|
|
95
|
+
let result = '';
|
|
96
|
+
for (const character of text) {
|
|
97
|
+
result += character === '{' || character === '}' ? character + character : character;
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The IR's template as the `str.format` body the runtime renders.
|
|
103
|
+
*
|
|
104
|
+
* `{{ name }}` becomes `{name}` and every literal brace is doubled, so the model sees
|
|
105
|
+
* the text the spec asked for and the runtime sees the fields it can bind.
|
|
106
|
+
*/
|
|
107
|
+
export function runtimeTemplate(template) {
|
|
108
|
+
let body = '';
|
|
109
|
+
for (const part of scanTemplate(template)) {
|
|
110
|
+
body += part.kind === 'text' ? escapeBraces(part.value) : `{${part.name}}`;
|
|
111
|
+
}
|
|
112
|
+
return body;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=placeholders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholders.js","sourceRoot":"","sources":["../src/placeholders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,cAAc;gBAAE,OAAO,KAAK,CAAC;YACjC,cAAc,GAAG,IAAI,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GACZ,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC;QACrD,MAAM,YAAY,GAAG,SAAS,KAAK,GAAG,CAAC;QACvC,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY;gBAAE,OAAO,KAAK,CAAC;QAC/C,CAAC;aAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,cAAc,CAAC;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IACF,OAAO,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,KAAK,EAAE,CAAC;oBACR,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1C,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;oBAClB,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/plan.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The plan: IR in, bytes out.
|
|
3
|
+
*
|
|
4
|
+
* `planTsVercel` is a pure function of the IR. It does not read the spec, the
|
|
5
|
+
* filesystem, the clock or the environment, which is what makes "generate twice and
|
|
6
|
+
* diff" a meaningful test rather than a smoke test. Anything the IR cannot express is
|
|
7
|
+
* reported as a `PlanProblem` and refused, never approximated: a generated app that
|
|
8
|
+
* silently drops a declared capability is worse than one that will not generate.
|
|
9
|
+
*/
|
|
10
|
+
import type { GeneratedFile, Plan } from '@aid-framework/generator-sdk';
|
|
11
|
+
import type { IR } from '@aid-framework/ir';
|
|
12
|
+
/** The plan's files, sorted by path so two runs cannot differ by traversal order. */
|
|
13
|
+
export declare function filesFor(ir: IR): GeneratedFile[];
|
|
14
|
+
/** The plan, or a `TsVercelPlanError` naming every reason it cannot be emitted. */
|
|
15
|
+
export declare function planTsVercel(ir: IR): Plan;
|
|
16
|
+
/** The plan as a path-to-bytes map, for callers that only want the tree. */
|
|
17
|
+
export declare function fileMap(plan: Plan): Map<string, string>;
|
|
18
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AA+F5C,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,aAAa,EAAE,CAEhD;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAIzC;AAED,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvD"}
|
package/dist/plan.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The plan: IR in, bytes out.
|
|
3
|
+
*
|
|
4
|
+
* `planTsVercel` is a pure function of the IR. It does not read the spec, the
|
|
5
|
+
* filesystem, the clock or the environment, which is what makes "generate twice and
|
|
6
|
+
* diff" a meaningful test rather than a smoke test. Anything the IR cannot express is
|
|
7
|
+
* reported as a `PlanProblem` and refused, never approximated: a generated app that
|
|
8
|
+
* silently drops a declared capability is worse than one that will not generate.
|
|
9
|
+
*/
|
|
10
|
+
import { sortByPath } from '@aid-framework/generator-sdk';
|
|
11
|
+
import { emitAgents } from './emit/agents.js';
|
|
12
|
+
import { emitBusinessIndex, emitBusinessPromptsIndex, emitBusinessToolSeeds, emitBusinessToolsIndex, emitEvalModules, emitEvalsIndex, emitGeneratedIndex, } from './emit/business.js';
|
|
13
|
+
import { emitControl } from './emit/control.js';
|
|
14
|
+
import { emitGuardrails } from './emit/guardrails.js';
|
|
15
|
+
import { emitDeps, emitGatewayIndex, emitGatewayModels, emitObservability, } from './emit/infrastructure.js';
|
|
16
|
+
import { emitPipelineModule, emitPipelinesIndex, emitRouteModule, emitRoutesIndex, } from './emit/pipelines.js';
|
|
17
|
+
import { emitPromptModules, emitPromptsIndex } from './emit/prompts.js';
|
|
18
|
+
import { emitRetrievalBindings, emitRetrievalIndex, emitRetrievalIngestIndex, emitRetrievalIngestModules, } from './emit/retrieval.js';
|
|
19
|
+
import { emitRequests, emitSchemas } from './emit/schemas.js';
|
|
20
|
+
import { emitContractModule, emitContractsIndex, emitToolAdapter, emitToolsIndex, } from './emit/tools.js';
|
|
21
|
+
import { TsVercelPlanError } from './errors.js';
|
|
22
|
+
import { checkPlan } from './validate.js';
|
|
23
|
+
/** Every file the IR implies, in a fixed order, unsorted. */
|
|
24
|
+
function collect(ir) {
|
|
25
|
+
const files = [];
|
|
26
|
+
files.push(emitSchemas(ir));
|
|
27
|
+
const requests = emitRequests(ir);
|
|
28
|
+
if (requests !== undefined)
|
|
29
|
+
files.push(requests);
|
|
30
|
+
files.push(emitObservability(ir));
|
|
31
|
+
files.push(emitDeps(ir));
|
|
32
|
+
files.push(emitControl(ir));
|
|
33
|
+
files.push(emitGuardrails(ir));
|
|
34
|
+
const agents = emitAgents(ir);
|
|
35
|
+
if (agents !== undefined)
|
|
36
|
+
files.push(agents);
|
|
37
|
+
files.push(emitGatewayModels(ir));
|
|
38
|
+
files.push(emitGatewayIndex(ir));
|
|
39
|
+
files.push(emitContractsIndex(ir));
|
|
40
|
+
for (const tool of ir.tools) {
|
|
41
|
+
files.push(emitContractModule(ir, tool));
|
|
42
|
+
files.push(emitToolAdapter(ir, tool));
|
|
43
|
+
}
|
|
44
|
+
files.push(emitToolsIndex(ir));
|
|
45
|
+
files.push(...emitPromptModules(ir));
|
|
46
|
+
files.push(emitPromptsIndex(ir));
|
|
47
|
+
for (const pipeline of ir.pipelines) {
|
|
48
|
+
files.push(emitPipelineModule(ir, pipeline));
|
|
49
|
+
files.push(emitRouteModule(ir, pipeline));
|
|
50
|
+
}
|
|
51
|
+
files.push(emitPipelinesIndex(ir));
|
|
52
|
+
files.push(emitRoutesIndex(ir));
|
|
53
|
+
files.push(emitRetrievalBindings(ir));
|
|
54
|
+
files.push(emitRetrievalIndex(ir));
|
|
55
|
+
files.push(...emitRetrievalIngestModules(ir));
|
|
56
|
+
files.push(emitRetrievalIngestIndex(ir));
|
|
57
|
+
files.push(...emitEvalModules(ir));
|
|
58
|
+
files.push(emitEvalsIndex(ir));
|
|
59
|
+
files.push(...emitBusinessToolSeeds(ir));
|
|
60
|
+
files.push(emitBusinessToolsIndex(ir));
|
|
61
|
+
files.push(emitBusinessPromptsIndex(ir));
|
|
62
|
+
files.push(emitBusinessIndex(ir));
|
|
63
|
+
files.push(emitGeneratedIndex(ir));
|
|
64
|
+
return files;
|
|
65
|
+
}
|
|
66
|
+
/** The plan's files, sorted by path so two runs cannot differ by traversal order. */
|
|
67
|
+
export function filesFor(ir) {
|
|
68
|
+
return sortByPath(collect(ir));
|
|
69
|
+
}
|
|
70
|
+
/** The plan, or a `TsVercelPlanError` naming every reason it cannot be emitted. */
|
|
71
|
+
export function planTsVercel(ir) {
|
|
72
|
+
const problems = checkPlan(ir);
|
|
73
|
+
if (problems.length > 0)
|
|
74
|
+
throw new TsVercelPlanError(problems);
|
|
75
|
+
return { files: filesFor(ir) };
|
|
76
|
+
}
|
|
77
|
+
/** The plan as a path-to-bytes map, for callers that only want the tree. */
|
|
78
|
+
export function fileMap(plan) {
|
|
79
|
+
return new Map(plan.files.map((file) => [file.path, file.content]));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=plan.js.map
|
package/dist/plan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What this target refuses to emit, and why.
|
|
3
|
+
*
|
|
4
|
+
* The generator consumes the IR and nothing else: no spec re-reading, no reach into
|
|
5
|
+
* `packages/spec`. Everything it needs to decide feasibility is already in the IR, so
|
|
6
|
+
* these checks are total over the IR and run before a single byte is rendered.
|
|
7
|
+
*
|
|
8
|
+
* The rule is fail-closed. A construct with no emitter is a problem, not a comment in
|
|
9
|
+
* the output: a generated app that boots while silently skipping a step is worse than
|
|
10
|
+
* one that was never written.
|
|
11
|
+
*/
|
|
12
|
+
import { type IR, type ModelCapability } from '@aid-framework/ir';
|
|
13
|
+
import { type Capability } from './names.js';
|
|
14
|
+
export type PlanProblemCode = 'ir-version-unsupported' | 'target-unsupported' | 'collection-unsupported' | 'observability-redact-unsupported' | 'runtime-unsupported' | 'type-unsupported' | 'named-type-unresolved' | 'field-unsupported' | 'model-provider-unsupported' | 'model-capability-unsupported' | 'model-missing-capability' | 'prompt-output-unsupported' | 'prompt-variable-unsupported' | 'prompt-model-unresolved' | 'unsupported-placeholder' | 'tool-handler-unsupported' | 'tool-auth-unsupported' | 'tool-confirmation-unsupported' | 'step-unsupported' | 'step-invalid' | 'guardrail-unsupported' | 'agent-unsupported' | 'memory-unsupported' | 'reference-unresolved' | 'trigger-unsupported' | 'retriever-store-unsupported' | 'retriever-source-unsupported' | 'retriever-embedding-unresolved' | 'retriever-filters-unsupported' | 'eval-target-unresolved' | 'eval-metric-unsupported' | 'eval-dataset-unsupported' | 'deployment-unsupported';
|
|
15
|
+
export interface PlanProblem {
|
|
16
|
+
readonly code: PlanProblemCode;
|
|
17
|
+
readonly path: string;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
}
|
|
20
|
+
/** Names a pipeline step may not bind, because the runtime already owns them. */
|
|
21
|
+
export declare const RESERVED_BINDINGS: readonly ['context', 'deps', 'event', 'response', 'steps'];
|
|
22
|
+
export declare function problem(code: PlanProblemCode, path: string, message: string): PlanProblem;
|
|
23
|
+
export declare function checkIrVersion(ir: IR): PlanProblem[];
|
|
24
|
+
export declare function checkTarget(ir: IR): PlanProblem[];
|
|
25
|
+
/**
|
|
26
|
+
* `deployments`: only the concurrency cap is emitted, and only what the host can honour.
|
|
27
|
+
*
|
|
28
|
+
* The route handler this target emits answers with one buffered body, so a deployment
|
|
29
|
+
* asking for streaming is refused rather than emitted as something that only looks
|
|
30
|
+
* streamed. `secrets` needs no check: the adapters read a declared secret by name from
|
|
31
|
+
* the environment, so the declaration is documentation, not an artifact to emit.
|
|
32
|
+
*/
|
|
33
|
+
export declare function checkDeployments(ir: IR): PlanProblem[];
|
|
34
|
+
export declare function checkObservability(ir: IR): PlanProblem[];
|
|
35
|
+
export declare function checkRuntime(ir: IR): PlanProblem[];
|
|
36
|
+
export declare function checkTypes(ir: IR): PlanProblem[];
|
|
37
|
+
export declare function checkModels(ir: IR): PlanProblem[];
|
|
38
|
+
export declare function checkPrompts(ir: IR): PlanProblem[];
|
|
39
|
+
export declare function checkTools(ir: IR): PlanProblem[];
|
|
40
|
+
export declare function checkRetrievers(ir: IR): PlanProblem[];
|
|
41
|
+
export declare function checkPipelines(ir: IR): PlanProblem[];
|
|
42
|
+
/**
|
|
43
|
+
* One reason for every kind this target cannot emit, so the gap is named in one place.
|
|
44
|
+
*
|
|
45
|
+
* Exported because the emitter raises the identical diagnostic when it is reached without
|
|
46
|
+
* the validator having run -- see D-4. The message names the target rather than a layer,
|
|
47
|
+
* so a CLI can print it without the reader knowing the roadmap.
|
|
48
|
+
*/
|
|
49
|
+
export declare function stepUnsupported(kind: string, at: string): PlanProblem;
|
|
50
|
+
export declare function checkEvals(ir: IR): PlanProblem[];
|
|
51
|
+
/**
|
|
52
|
+
* The guardrail declarations this target cannot honour.
|
|
53
|
+
*
|
|
54
|
+
* The IR layer has already refused an unknown policy, an empty stage list and a `tools`
|
|
55
|
+
* entry that names nothing, so what is left is the part only a *target* knows: which
|
|
56
|
+
* policies its engine can evaluate, which actions its routes can carry out, and which
|
|
57
|
+
* fields its stages actually see.
|
|
58
|
+
*/
|
|
59
|
+
export declare function checkGuardrails(ir: IR): PlanProblem[];
|
|
60
|
+
/**
|
|
61
|
+
* The agent declarations this target cannot honour.
|
|
62
|
+
*
|
|
63
|
+
* The emitted `agents.ts` turns the whole collection into one `AgentRuntime` document, so
|
|
64
|
+
* every agent a pipeline step can name has to be one the runtime can build. Most of these
|
|
65
|
+
* are the runtime's own `fromIr` refusals moved to plan time; the rest are the two things
|
|
66
|
+
* an emitted app cannot offer an agent -- a pause a route could resume, and a harness
|
|
67
|
+
* dependency it does not install.
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkAgents(ir: IR): PlanProblem[];
|
|
70
|
+
/**
|
|
71
|
+
* The memory declarations this target cannot honour, refused rather than approximated.
|
|
72
|
+
*
|
|
73
|
+
* This mirrors the runtime's `checkMemorySupported` plus the two fields its
|
|
74
|
+
* `memoryDefinition` and `#storeFor` refuse. The runtime raises on all of them, so a plan
|
|
75
|
+
* that emitted one would produce an app that fails on the first request; catching them here
|
|
76
|
+
* turns that into a generation failure that names the declaration.
|
|
77
|
+
*/
|
|
78
|
+
export declare function checkMemory(ir: IR): PlanProblem[];
|
|
79
|
+
/** Every check, in a fixed order so a failing run reports the same problems twice. */
|
|
80
|
+
export declare function checkPlan(ir: IR): PlanProblem[];
|
|
81
|
+
/**
|
|
82
|
+
* The capabilities the IR actually requires, by name. Kept here because the generator
|
|
83
|
+
* is the side that knows what it will honour; the CLI's gate is fed the manifest's
|
|
84
|
+
* declaration and the two are compared in a test.
|
|
85
|
+
*/
|
|
86
|
+
export declare function declaredCapabilities(): readonly string[];
|
|
87
|
+
export type { Capability, ModelCapability };
|
|
88
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|