@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
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@aid-framework/generator-ts-vercel`: the Phase 1 TypeScript target.
|
|
3
|
+
*
|
|
4
|
+
* The single input is the IR. Nothing here reads a spec file, a template directory or
|
|
5
|
+
* the filesystem: `plan` is a pure function of the IR, and `@aid-framework/runtime` holds the
|
|
6
|
+
* behaviour. Generated code is declarative wiring -- zod schemas, model aliases, prompt
|
|
7
|
+
* templates, tool adapters and their contracts, pipelines, routes, retriever bindings
|
|
8
|
+
* with their ingest entry points -- and everything it calls into already exists in the
|
|
9
|
+
* runtime.
|
|
10
|
+
*
|
|
11
|
+
* Two deliberate deviations from the plan's wording are documented in the README and
|
|
12
|
+
* repeated here because a reader will otherwise assume a bug:
|
|
13
|
+
*
|
|
14
|
+
* 1. `emitsAgainst` carries `structuredOutput` and `tracing` only. The manifest
|
|
15
|
+
* vocabulary has no `vectorStore` key, so `vectorStore: 'pgvector'` reaches the
|
|
16
|
+
* runtime as the spec's `stores[].kind` instead of as a declaration.
|
|
17
|
+
* 2. `app/api/<path>/route.ts` is hand-written in the example, not emitted. A path
|
|
18
|
+
* outside the managed roots has no owner, so emitting it would fail `validatePlan`
|
|
19
|
+
* and break the next `aid gen`. The generator emits the handler; the example's
|
|
20
|
+
* one-line Next shim delegates to it.
|
|
21
|
+
*/
|
|
22
|
+
import type { Generator } from '@aid-framework/generator-sdk';
|
|
23
|
+
import { APP_ROOT, BUSINESS_ROOT, evalModulePath, GENERATED_ROOT, MANIFEST_PATH, paths, retrievalIngestModulePath } from './emit/file.js';
|
|
24
|
+
export { TsVercelPlanError } from './errors.js';
|
|
25
|
+
export { GENERATOR_NAME, GENERATOR_VERSION, supportsIrVersion, TS_VERCEL_CAPABILITIES, TS_VERCEL_MANIFEST, TS_VERCEL_MANIFEST_INPUT, TS_VERCEL_TARGET, } from './manifest.js';
|
|
26
|
+
export { fileMap, filesFor, planTsVercel } from './plan.js';
|
|
27
|
+
export type { PlanProblem, PlanProblemCode } from './validate.js';
|
|
28
|
+
export { checkPlan, declaredCapabilities, RESERVED_BINDINGS, } from './validate.js';
|
|
29
|
+
export { APP_ROOT, BUSINESS_ROOT, evalModulePath, GENERATED_ROOT, MANIFEST_PATH, paths, retrievalIngestModulePath, };
|
|
30
|
+
/**
|
|
31
|
+
* The generator a loader or the CLI drives. Every identity field comes off the
|
|
32
|
+
* manifest, so a manifest a loader validated and the generator it then ran cannot
|
|
33
|
+
* disagree about which target, version or IR range they describe.
|
|
34
|
+
*/
|
|
35
|
+
export declare const tsVercelGenerator: Generator;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,KAAK,EACL,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,KAAK,EACL,yBAAyB,GAC1B,CAAC;AAOF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAO/B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@aid-framework/generator-ts-vercel`: the Phase 1 TypeScript target.
|
|
3
|
+
*
|
|
4
|
+
* The single input is the IR. Nothing here reads a spec file, a template directory or
|
|
5
|
+
* the filesystem: `plan` is a pure function of the IR, and `@aid-framework/runtime` holds the
|
|
6
|
+
* behaviour. Generated code is declarative wiring -- zod schemas, model aliases, prompt
|
|
7
|
+
* templates, tool adapters and their contracts, pipelines, routes, retriever bindings
|
|
8
|
+
* with their ingest entry points -- and everything it calls into already exists in the
|
|
9
|
+
* runtime.
|
|
10
|
+
*
|
|
11
|
+
* Two deliberate deviations from the plan's wording are documented in the README and
|
|
12
|
+
* repeated here because a reader will otherwise assume a bug:
|
|
13
|
+
*
|
|
14
|
+
* 1. `emitsAgainst` carries `structuredOutput` and `tracing` only. The manifest
|
|
15
|
+
* vocabulary has no `vectorStore` key, so `vectorStore: 'pgvector'` reaches the
|
|
16
|
+
* runtime as the spec's `stores[].kind` instead of as a declaration.
|
|
17
|
+
* 2. `app/api/<path>/route.ts` is hand-written in the example, not emitted. A path
|
|
18
|
+
* outside the managed roots has no owner, so emitting it would fail `validatePlan`
|
|
19
|
+
* and break the next `aid gen`. The generator emits the handler; the example's
|
|
20
|
+
* one-line Next shim delegates to it.
|
|
21
|
+
*/
|
|
22
|
+
import { APP_ROOT, BUSINESS_ROOT, evalModulePath, GENERATED_ROOT, MANIFEST_PATH, paths, retrievalIngestModulePath, } from './emit/file.js';
|
|
23
|
+
import { TS_VERCEL_MANIFEST } from './manifest.js';
|
|
24
|
+
import { planTsVercel } from './plan.js';
|
|
25
|
+
export { TsVercelPlanError } from './errors.js';
|
|
26
|
+
export { GENERATOR_NAME, GENERATOR_VERSION, supportsIrVersion, TS_VERCEL_CAPABILITIES, TS_VERCEL_MANIFEST, TS_VERCEL_MANIFEST_INPUT, TS_VERCEL_TARGET, } from './manifest.js';
|
|
27
|
+
export { fileMap, filesFor, planTsVercel } from './plan.js';
|
|
28
|
+
export { checkPlan, declaredCapabilities, RESERVED_BINDINGS, } from './validate.js';
|
|
29
|
+
export { APP_ROOT, BUSINESS_ROOT, evalModulePath, GENERATED_ROOT, MANIFEST_PATH, paths, retrievalIngestModulePath, };
|
|
30
|
+
/** The plan, unchanged. `plan` already holds the bytes; `emit` only hands them over. */
|
|
31
|
+
function emit(plan) {
|
|
32
|
+
return plan.files;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The generator a loader or the CLI drives. Every identity field comes off the
|
|
36
|
+
* manifest, so a manifest a loader validated and the generator it then ran cannot
|
|
37
|
+
* disagree about which target, version or IR range they describe.
|
|
38
|
+
*/
|
|
39
|
+
export const tsVercelGenerator = {
|
|
40
|
+
name: TS_VERCEL_MANIFEST.name,
|
|
41
|
+
target: TS_VERCEL_MANIFEST.target,
|
|
42
|
+
version: TS_VERCEL_MANIFEST.version,
|
|
43
|
+
irRange: TS_VERCEL_MANIFEST.irRange,
|
|
44
|
+
plan: (ir) => planTsVercel(ir),
|
|
45
|
+
emit,
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,KAAK,EACL,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,KAAK,EACL,yBAAyB,GAC1B,CAAC;AAEF,wFAAwF;AACxF,SAAS,IAAI,CAAC,IAAU;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAc;IAC1C,IAAI,EAAE,kBAAkB,CAAC,IAAI;IAC7B,MAAM,EAAE,kBAAkB,CAAC,MAAM;IACjC,OAAO,EAAE,kBAAkB,CAAC,OAAO;IACnC,OAAO,EAAE,kBAAkB,CAAC,OAAO;IACnC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,IAAI;CACL,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This generator's own manifest declaration.
|
|
3
|
+
*
|
|
4
|
+
* Written out here rather than aliased from `@aid-framework/generator-sdk` for the same reason
|
|
5
|
+
* `py-fastapi` does it: the SDK's declaration is what the IR's capability gate
|
|
6
|
+
* consumes, this one is what the package emits from, and a test compares them. An
|
|
7
|
+
* alias would make that comparison vacuous.
|
|
8
|
+
*
|
|
9
|
+
* Two deliberate omissions, both recorded in the README:
|
|
10
|
+
*
|
|
11
|
+
* - `emitsAgainst.vectorStore` does not exist in the SDK's vocabulary. Declaring an
|
|
12
|
+
* unknown `emitsAgainst` key is a hard manifest error (`manifestEmitsAgainstUnknown`),
|
|
13
|
+
* so `pgvector` is expressed as the emitted vector-store kind instead: the IR's
|
|
14
|
+
* `stores.<id>.kind` selects the runtime store, and this target supports `pgvector`.
|
|
15
|
+
* - `streaming` is not declared, because the emitted code does not honour it. Calling
|
|
16
|
+
* `ModelGateway.stream` raises `FeatureDeferredError`, so declaring the capability
|
|
17
|
+
* would be exactly the fail-open the capability discipline forbids.
|
|
18
|
+
*/
|
|
19
|
+
import { type GeneratorManifest, type GeneratorManifestInput } from '@aid-framework/generator-sdk';
|
|
20
|
+
export declare const TS_VERCEL_TARGET = "ts-vercel";
|
|
21
|
+
/**
|
|
22
|
+
* The capabilities this generator honours end to end. Each one has an emitter that
|
|
23
|
+
* binds it to a runtime surface: HTTP triggers become route handlers, `json-schema`
|
|
24
|
+
* becomes zod schemas, `tool-calling` becomes `Tool`/`ToolExecutor`, `otel` becomes
|
|
25
|
+
* traced gateway calls, `embeddings`/`rerank` become retriever bindings, `guardrails`
|
|
26
|
+
* becomes `GuardrailEngine` calls on the stages a route can reach, and `agents`/
|
|
27
|
+
* `cursor-memory` become the `AgentRuntime` loop and its memory tiers.
|
|
28
|
+
*
|
|
29
|
+
* `guardrails`, `agents` and `cursor-memory` are declared since L6d, and the
|
|
30
|
+
* declaration carries the same promise as the rows above: there is an emitter
|
|
31
|
+
* (`./emit/guardrails.ts`, `./emit/agents.ts`), the TypeScript runtime implements the
|
|
32
|
+
* engine and the loop, and the committed example exercises all three end to end.
|
|
33
|
+
* `cursor-memory` is the IR's capability for a declared memory tier -- there is no
|
|
34
|
+
* `memory` capability -- so a spec that declares memory derives `cursor-memory`.
|
|
35
|
+
*
|
|
36
|
+
* Before L6d this list stopped at `rerank` and `./validate.ts` rejected any spec that
|
|
37
|
+
* mentioned the three collections. It still rejects the parts of each collection the
|
|
38
|
+
* runtime cannot honour (four memory kinds, `ttl`, `redact`, a non-`in-process`
|
|
39
|
+
* backend, three guardrail policies with no detector, a non-native engine), so a
|
|
40
|
+
* declaration here is not a claim that every field is expressible.
|
|
41
|
+
*/
|
|
42
|
+
export declare const TS_VERCEL_CAPABILITIES: readonly ['http-trigger', 'json-schema', 'tool-calling', 'otel', 'embeddings', 'rerank', 'guardrails', 'agents', 'cursor-memory'];
|
|
43
|
+
export declare const TS_VERCEL_MANIFEST_INPUT: GeneratorManifestInput;
|
|
44
|
+
export declare const TS_VERCEL_MANIFEST: GeneratorManifest;
|
|
45
|
+
export declare const GENERATOR_NAME: string;
|
|
46
|
+
export declare const GENERATOR_VERSION: string;
|
|
47
|
+
export declare function supportsIrVersion(irVersion: string): boolean;
|
|
48
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAG5B,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,sBAAsB,YACjC,cAAc,EACd,aAAa,EACb,cAAc,EACd,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,eAAe,CACP,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,sBAmBtC,CAAC;AAWF,eAAO,MAAM,kBAAkB,EAAE,iBAAkE,CAAC;AAEpG,eAAO,MAAM,cAAc,QAA0B,CAAC;AACtD,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAE5D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This generator's own manifest declaration.
|
|
3
|
+
*
|
|
4
|
+
* Written out here rather than aliased from `@aid-framework/generator-sdk` for the same reason
|
|
5
|
+
* `py-fastapi` does it: the SDK's declaration is what the IR's capability gate
|
|
6
|
+
* consumes, this one is what the package emits from, and a test compares them. An
|
|
7
|
+
* alias would make that comparison vacuous.
|
|
8
|
+
*
|
|
9
|
+
* Two deliberate omissions, both recorded in the README:
|
|
10
|
+
*
|
|
11
|
+
* - `emitsAgainst.vectorStore` does not exist in the SDK's vocabulary. Declaring an
|
|
12
|
+
* unknown `emitsAgainst` key is a hard manifest error (`manifestEmitsAgainstUnknown`),
|
|
13
|
+
* so `pgvector` is expressed as the emitted vector-store kind instead: the IR's
|
|
14
|
+
* `stores.<id>.kind` selects the runtime store, and this target supports `pgvector`.
|
|
15
|
+
* - `streaming` is not declared, because the emitted code does not honour it. Calling
|
|
16
|
+
* `ModelGateway.stream` raises `FeatureDeferredError`, so declaring the capability
|
|
17
|
+
* would be exactly the fail-open the capability discipline forbids.
|
|
18
|
+
*/
|
|
19
|
+
import { parseManifest, supportsIR, } from '@aid-framework/generator-sdk';
|
|
20
|
+
import { IR_VERSION } from '@aid-framework/ir';
|
|
21
|
+
export const TS_VERCEL_TARGET = 'ts-vercel';
|
|
22
|
+
/**
|
|
23
|
+
* The capabilities this generator honours end to end. Each one has an emitter that
|
|
24
|
+
* binds it to a runtime surface: HTTP triggers become route handlers, `json-schema`
|
|
25
|
+
* becomes zod schemas, `tool-calling` becomes `Tool`/`ToolExecutor`, `otel` becomes
|
|
26
|
+
* traced gateway calls, `embeddings`/`rerank` become retriever bindings, `guardrails`
|
|
27
|
+
* becomes `GuardrailEngine` calls on the stages a route can reach, and `agents`/
|
|
28
|
+
* `cursor-memory` become the `AgentRuntime` loop and its memory tiers.
|
|
29
|
+
*
|
|
30
|
+
* `guardrails`, `agents` and `cursor-memory` are declared since L6d, and the
|
|
31
|
+
* declaration carries the same promise as the rows above: there is an emitter
|
|
32
|
+
* (`./emit/guardrails.ts`, `./emit/agents.ts`), the TypeScript runtime implements the
|
|
33
|
+
* engine and the loop, and the committed example exercises all three end to end.
|
|
34
|
+
* `cursor-memory` is the IR's capability for a declared memory tier -- there is no
|
|
35
|
+
* `memory` capability -- so a spec that declares memory derives `cursor-memory`.
|
|
36
|
+
*
|
|
37
|
+
* Before L6d this list stopped at `rerank` and `./validate.ts` rejected any spec that
|
|
38
|
+
* mentioned the three collections. It still rejects the parts of each collection the
|
|
39
|
+
* runtime cannot honour (four memory kinds, `ttl`, `redact`, a non-`in-process`
|
|
40
|
+
* backend, three guardrail policies with no detector, a non-native engine), so a
|
|
41
|
+
* declaration here is not a claim that every field is expressible.
|
|
42
|
+
*/
|
|
43
|
+
export const TS_VERCEL_CAPABILITIES = [
|
|
44
|
+
'http-trigger',
|
|
45
|
+
'json-schema',
|
|
46
|
+
'tool-calling',
|
|
47
|
+
'otel',
|
|
48
|
+
'embeddings',
|
|
49
|
+
'rerank',
|
|
50
|
+
'guardrails',
|
|
51
|
+
'agents',
|
|
52
|
+
'cursor-memory',
|
|
53
|
+
];
|
|
54
|
+
export const TS_VERCEL_MANIFEST_INPUT = {
|
|
55
|
+
manifestVersion: 1,
|
|
56
|
+
name: '@aid-framework/generator-ts-vercel',
|
|
57
|
+
target: TS_VERCEL_TARGET,
|
|
58
|
+
version: '0.1.0',
|
|
59
|
+
irRange: `^${IR_VERSION}`,
|
|
60
|
+
capabilities: [...TS_VERCEL_CAPABILITIES],
|
|
61
|
+
emitsAgainst: {
|
|
62
|
+
structuredOutput: 'zod',
|
|
63
|
+
tracing: 'otel-genai',
|
|
64
|
+
},
|
|
65
|
+
output: {
|
|
66
|
+
// A7: `app` collides with Next's own `app/` convention. The plan accepts the
|
|
67
|
+
// collision for parity with the SDK's `managedRoots` and flags it for review;
|
|
68
|
+
// it is accepted here and stated in the README rather than worked around.
|
|
69
|
+
root: 'app',
|
|
70
|
+
generatedDir: 'generated',
|
|
71
|
+
businessDir: 'business',
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
function requireValidManifest(input) {
|
|
75
|
+
const { manifest, diagnostics } = parseManifest(input);
|
|
76
|
+
if (manifest === undefined) {
|
|
77
|
+
const rendered = diagnostics.map((d) => ` - ${d.code} at ${d.path}: ${d.message}`).join('\n');
|
|
78
|
+
throw new Error(`${input.name} is not a valid generator manifest:\n${rendered}`);
|
|
79
|
+
}
|
|
80
|
+
return manifest;
|
|
81
|
+
}
|
|
82
|
+
export const TS_VERCEL_MANIFEST = requireValidManifest(TS_VERCEL_MANIFEST_INPUT);
|
|
83
|
+
export const GENERATOR_NAME = TS_VERCEL_MANIFEST.name;
|
|
84
|
+
export const GENERATOR_VERSION = TS_VERCEL_MANIFEST.version;
|
|
85
|
+
export function supportsIrVersion(irVersion) {
|
|
86
|
+
return supportsIR(TS_VERCEL_MANIFEST, irVersion);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAGL,aAAa,EACb,UAAU,GACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,cAAc;IACd,aAAa;IACb,cAAc;IACd,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,eAAe;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,eAAe,EAAE,CAAC;IAClB,IAAI,EAAE,oCAAoC;IAC1C,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,IAAI,UAAU,EAAE;IACzB,YAAY,EAAE,CAAC,GAAG,sBAAsB,CAAC;IACzC,YAAY,EAAE;QACZ,gBAAgB,EAAE,KAAK;QACvB,OAAO,EAAE,YAAY;KACtB;IACD,MAAM,EAAE;QACN,6EAA6E;QAC7E,8EAA8E;QAC9E,0EAA0E;QAC1E,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;KACxB;CACF,CAAC;AAEF,SAAS,oBAAoB,CAAC,KAA6B;IACzD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAsB,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAE5D,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
|
package/dist/names.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier and vocabulary renderings for the TypeScript target.
|
|
3
|
+
*
|
|
4
|
+
* Every function here is total and deterministic: given the same string it returns the
|
|
5
|
+
* same string, with no locale-sensitive calls and no regex with a backtracking risk.
|
|
6
|
+
* `splitWords` is a single codepoint loop for that reason — the analogous Python helper
|
|
7
|
+
* carries the same note, because a regex over user-controlled spec text is a
|
|
8
|
+
* CodeQL `js/polynomial-redos` finding waiting to happen.
|
|
9
|
+
*/
|
|
10
|
+
import type { ModelCapability, PrimitiveType } from '@aid-framework/ir';
|
|
11
|
+
/**
|
|
12
|
+
* The runtime's `Capability` union, restated locally. The generator depends on
|
|
13
|
+
* `@aid-framework/generator-sdk` and `@aid-framework/ir` only, and a type import from the runtime would
|
|
14
|
+
* add a dependency edge to the emitted-code package for no behavioural gain.
|
|
15
|
+
*/
|
|
16
|
+
export type Capability = 'tool-calling' | 'structured-output' | 'streaming' | 'long-context' | 'embeddings' | 'rerank';
|
|
17
|
+
/** Split on any run of non-alphanumeric characters and on lower-to-upper boundaries. */
|
|
18
|
+
export declare function splitWords(value: string): string[];
|
|
19
|
+
export declare function toSnakeCase(value: string): string;
|
|
20
|
+
export declare function toCamelCase(value: string): string;
|
|
21
|
+
export declare function toPascalCase(value: string): string;
|
|
22
|
+
/** A module identifier that is not a reserved word. */
|
|
23
|
+
export declare function moduleName(value: string): string;
|
|
24
|
+
/** A class or type identifier. A digit-leading name is prefixed rather than dropped. */
|
|
25
|
+
export declare function className(value: string): string;
|
|
26
|
+
/** A property name safe to write unquoted in an object literal or interface. */
|
|
27
|
+
export declare function fieldName(value: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* A single-quoted string literal, which is the house style.
|
|
30
|
+
*
|
|
31
|
+
* The quote character follows the same rule the formatter applies: prefer single
|
|
32
|
+
* quotes, and switch to double quotes when that needs fewer escapes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function stringLiteral(value: string): string;
|
|
35
|
+
/** An object key, quoted only when it is not a bare identifier. */
|
|
36
|
+
export declare function propertyKey(value: string): string;
|
|
37
|
+
/** A member access that is a bare `.name` whenever the key allows it. */
|
|
38
|
+
export declare function memberAccess(value: string): string;
|
|
39
|
+
/** Render a literal value as TypeScript source. */
|
|
40
|
+
export declare function literal(value: unknown): string;
|
|
41
|
+
/** The zod expression for one primitive type. */
|
|
42
|
+
export declare function zodPrimitive(name: PrimitiveType): string;
|
|
43
|
+
/** The TypeScript type for one primitive, used by hand-written signatures. */
|
|
44
|
+
export declare function tsPrimitive(name: PrimitiveType): string;
|
|
45
|
+
export declare function modelCapabilityMember(name: ModelCapability): Capability | undefined;
|
|
46
|
+
/** Split a model's declared capabilities into what the runtime can be told and what it cannot. */
|
|
47
|
+
export declare function modelCapabilities(declared: readonly ModelCapability[]): {
|
|
48
|
+
advertised: Capability[];
|
|
49
|
+
dropped: ModelCapability[];
|
|
50
|
+
};
|
|
51
|
+
/** The provider adapter class a provider spelling maps onto, or `undefined`. */
|
|
52
|
+
export declare function providerAdapter(provider: string): 'FakeProvider' | 'OpenAICompatibleProvider' | undefined;
|
|
53
|
+
/** Capabilities this target wires to a runtime surface. Kept beside the emitters. */
|
|
54
|
+
export declare const TARGET_WIRED_CAPABILITIES: readonly ['http-trigger', 'json-schema', 'tool-calling', 'otel', 'embeddings', 'rerank'];
|
|
55
|
+
/** Every alias a pipeline step or prompt can name. */
|
|
56
|
+
export declare function sortStrings(values: Iterable<string>): string[];
|
|
57
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,cAAc,GACd,YAAY,GACZ,QAAQ,CAAC;AAsDb,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBlD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAOD,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAehD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAInD;AAwBD,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,mDAAmD;AACnD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB9C;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAaxD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAYvD;AAoBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,SAAS,CAEnF;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG;IACvE,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAYA;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,0BAA0B,GAAG,SAAS,CAIzD;AAED,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,YACpC,cAAc,EACd,aAAa,EACb,cAAc,EACd,MAAM,EACN,YAAY,EACZ,QAAQ,CACA,CAAC;AAEX,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAE9D"}
|
package/dist/names.js
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier and vocabulary renderings for the TypeScript target.
|
|
3
|
+
*
|
|
4
|
+
* Every function here is total and deterministic: given the same string it returns the
|
|
5
|
+
* same string, with no locale-sensitive calls and no regex with a backtracking risk.
|
|
6
|
+
* `splitWords` is a single codepoint loop for that reason — the analogous Python helper
|
|
7
|
+
* carries the same note, because a regex over user-controlled spec text is a
|
|
8
|
+
* CodeQL `js/polynomial-redos` finding waiting to happen.
|
|
9
|
+
*/
|
|
10
|
+
/** TypeScript keywords, plus the ones a module name must not collide with. */
|
|
11
|
+
const RESERVED = new Set([
|
|
12
|
+
'await',
|
|
13
|
+
'break',
|
|
14
|
+
'case',
|
|
15
|
+
'catch',
|
|
16
|
+
'class',
|
|
17
|
+
'const',
|
|
18
|
+
'continue',
|
|
19
|
+
'debugger',
|
|
20
|
+
'default',
|
|
21
|
+
'delete',
|
|
22
|
+
'do',
|
|
23
|
+
'else',
|
|
24
|
+
'enum',
|
|
25
|
+
'export',
|
|
26
|
+
'extends',
|
|
27
|
+
'false',
|
|
28
|
+
'finally',
|
|
29
|
+
'for',
|
|
30
|
+
'function',
|
|
31
|
+
'if',
|
|
32
|
+
'implements',
|
|
33
|
+
'import',
|
|
34
|
+
'in',
|
|
35
|
+
'instanceof',
|
|
36
|
+
'interface',
|
|
37
|
+
'let',
|
|
38
|
+
'new',
|
|
39
|
+
'null',
|
|
40
|
+
'package',
|
|
41
|
+
'private',
|
|
42
|
+
'protected',
|
|
43
|
+
'public',
|
|
44
|
+
'return',
|
|
45
|
+
'static',
|
|
46
|
+
'super',
|
|
47
|
+
'switch',
|
|
48
|
+
'this',
|
|
49
|
+
'throw',
|
|
50
|
+
'true',
|
|
51
|
+
'try',
|
|
52
|
+
'typeof',
|
|
53
|
+
'var',
|
|
54
|
+
'void',
|
|
55
|
+
'while',
|
|
56
|
+
'with',
|
|
57
|
+
'yield',
|
|
58
|
+
]);
|
|
59
|
+
const ACRONYMS = new Set(['http', 'url', 'id', 'api', 'json', 'llm', 'mcp']);
|
|
60
|
+
/** Split on any run of non-alphanumeric characters and on lower-to-upper boundaries. */
|
|
61
|
+
export function splitWords(value) {
|
|
62
|
+
const words = [];
|
|
63
|
+
let current = '';
|
|
64
|
+
let previous = '';
|
|
65
|
+
for (const character of value) {
|
|
66
|
+
const isUpper = character >= 'A' && character <= 'Z';
|
|
67
|
+
const previousIsLower = previous >= 'a' && previous <= 'z';
|
|
68
|
+
const alphanumeric = (character >= 'a' && character <= 'z') || isUpper || (character >= '0' && character <= '9');
|
|
69
|
+
if (!alphanumeric) {
|
|
70
|
+
if (current.length > 0)
|
|
71
|
+
words.push(current);
|
|
72
|
+
current = '';
|
|
73
|
+
previous = character;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (isUpper && previousIsLower && current.length > 0) {
|
|
77
|
+
words.push(current);
|
|
78
|
+
current = character;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
current += character;
|
|
82
|
+
}
|
|
83
|
+
previous = character;
|
|
84
|
+
}
|
|
85
|
+
if (current.length > 0)
|
|
86
|
+
words.push(current);
|
|
87
|
+
return words.map((word) => word.toLowerCase());
|
|
88
|
+
}
|
|
89
|
+
export function toSnakeCase(value) {
|
|
90
|
+
return splitWords(value).join('_');
|
|
91
|
+
}
|
|
92
|
+
export function toCamelCase(value) {
|
|
93
|
+
const words = splitWords(value);
|
|
94
|
+
return words.map((word, index) => (index === 0 ? word : capitalise(word))).join('');
|
|
95
|
+
}
|
|
96
|
+
export function toPascalCase(value) {
|
|
97
|
+
return splitWords(value).map(capitalise).join('');
|
|
98
|
+
}
|
|
99
|
+
function capitalise(word) {
|
|
100
|
+
if (ACRONYMS.has(word))
|
|
101
|
+
return word.toUpperCase();
|
|
102
|
+
return `${word.charAt(0).toUpperCase()}${word.slice(1)}`;
|
|
103
|
+
}
|
|
104
|
+
/** A module identifier that is not a reserved word. */
|
|
105
|
+
export function moduleName(value) {
|
|
106
|
+
const snake = toSnakeCase(value);
|
|
107
|
+
const safe = snake.length === 0 ? 'generated_module' : snake;
|
|
108
|
+
if (safe.length > 0 && safe.charAt(0) >= '0' && safe.charAt(0) <= '9')
|
|
109
|
+
return `m_${safe}`;
|
|
110
|
+
return RESERVED.has(safe) ? `${safe}_module` : safe;
|
|
111
|
+
}
|
|
112
|
+
/** A class or type identifier. A digit-leading name is prefixed rather than dropped. */
|
|
113
|
+
export function className(value) {
|
|
114
|
+
const pascal = toPascalCase(value);
|
|
115
|
+
const safe = pascal.length === 0 ? 'GeneratedType' : pascal;
|
|
116
|
+
if (safe.length > 0 && safe.charAt(0) >= '0' && safe.charAt(0) <= '9')
|
|
117
|
+
return `T${safe}`;
|
|
118
|
+
return RESERVED.has(safe) ? `${safe}Type` : safe;
|
|
119
|
+
}
|
|
120
|
+
/** A property name safe to write unquoted in an object literal or interface. */
|
|
121
|
+
export function fieldName(value) {
|
|
122
|
+
if (value.length === 0)
|
|
123
|
+
return false;
|
|
124
|
+
const first = value.charAt(0);
|
|
125
|
+
if (!((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first === '_')) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
for (const character of value) {
|
|
129
|
+
const ok = (character >= 'a' && character <= 'z') ||
|
|
130
|
+
(character >= 'A' && character <= 'Z') ||
|
|
131
|
+
(character >= '0' && character <= '9') ||
|
|
132
|
+
character === '_';
|
|
133
|
+
if (!ok)
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return !RESERVED.has(value);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* A single-quoted string literal, which is the house style.
|
|
140
|
+
*
|
|
141
|
+
* The quote character follows the same rule the formatter applies: prefer single
|
|
142
|
+
* quotes, and switch to double quotes when that needs fewer escapes.
|
|
143
|
+
*/
|
|
144
|
+
export function stringLiteral(value) {
|
|
145
|
+
const single = count(value, "'");
|
|
146
|
+
const double = count(value, '"');
|
|
147
|
+
return single > double ? quote(value, '"') : quote(value, "'");
|
|
148
|
+
}
|
|
149
|
+
function count(value, character) {
|
|
150
|
+
let total = 0;
|
|
151
|
+
for (const candidate of value)
|
|
152
|
+
if (candidate === character)
|
|
153
|
+
total += 1;
|
|
154
|
+
return total;
|
|
155
|
+
}
|
|
156
|
+
function quote(value, delimiter) {
|
|
157
|
+
const parts = [delimiter];
|
|
158
|
+
for (const character of value) {
|
|
159
|
+
if (character === '\\')
|
|
160
|
+
parts.push('\\\\');
|
|
161
|
+
else if (character === delimiter)
|
|
162
|
+
parts.push(`\\${delimiter}`);
|
|
163
|
+
else if (character === '\n')
|
|
164
|
+
parts.push('\\n');
|
|
165
|
+
else if (character === '\r')
|
|
166
|
+
parts.push('\\r');
|
|
167
|
+
else if (character === '\t')
|
|
168
|
+
parts.push('\\t');
|
|
169
|
+
else if (character < ' ') {
|
|
170
|
+
parts.push(`\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`);
|
|
171
|
+
}
|
|
172
|
+
else
|
|
173
|
+
parts.push(character);
|
|
174
|
+
}
|
|
175
|
+
parts.push(delimiter);
|
|
176
|
+
return parts.join('');
|
|
177
|
+
}
|
|
178
|
+
/** An object key, quoted only when it is not a bare identifier. */
|
|
179
|
+
export function propertyKey(value) {
|
|
180
|
+
return fieldName(value) ? value : stringLiteral(value);
|
|
181
|
+
}
|
|
182
|
+
/** A member access that is a bare `.name` whenever the key allows it. */
|
|
183
|
+
export function memberAccess(value) {
|
|
184
|
+
return fieldName(value) ? `.${value}` : `[${stringLiteral(value)}]`;
|
|
185
|
+
}
|
|
186
|
+
/** Render a literal value as TypeScript source. */
|
|
187
|
+
export function literal(value) {
|
|
188
|
+
if (value === null)
|
|
189
|
+
return 'null';
|
|
190
|
+
if (typeof value === 'string')
|
|
191
|
+
return stringLiteral(value);
|
|
192
|
+
if (typeof value === 'number') {
|
|
193
|
+
if (!Number.isFinite(value))
|
|
194
|
+
return 'null';
|
|
195
|
+
return String(value);
|
|
196
|
+
}
|
|
197
|
+
if (typeof value === 'boolean')
|
|
198
|
+
return value ? 'true' : 'false';
|
|
199
|
+
if (Array.isArray(value))
|
|
200
|
+
return `[${value.map(literal).join(', ')}]`;
|
|
201
|
+
if (typeof value === 'object') {
|
|
202
|
+
const entries = Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
203
|
+
if (entries.length === 0)
|
|
204
|
+
return '{}';
|
|
205
|
+
return `{ ${entries.map(([key, item]) => `${propertyKey(key)}: ${literal(item)}`).join(', ')} }`;
|
|
206
|
+
}
|
|
207
|
+
return 'null';
|
|
208
|
+
}
|
|
209
|
+
/** The zod expression for one primitive type. */
|
|
210
|
+
export function zodPrimitive(name) {
|
|
211
|
+
switch (name) {
|
|
212
|
+
case 'string':
|
|
213
|
+
return 'z.string()';
|
|
214
|
+
case 'number':
|
|
215
|
+
return 'z.number()';
|
|
216
|
+
case 'integer':
|
|
217
|
+
return 'z.number().int()';
|
|
218
|
+
case 'boolean':
|
|
219
|
+
return 'z.boolean()';
|
|
220
|
+
default:
|
|
221
|
+
return 'z.unknown()';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** The TypeScript type for one primitive, used by hand-written signatures. */
|
|
225
|
+
export function tsPrimitive(name) {
|
|
226
|
+
switch (name) {
|
|
227
|
+
case 'string':
|
|
228
|
+
return 'string';
|
|
229
|
+
case 'number':
|
|
230
|
+
case 'integer':
|
|
231
|
+
return 'number';
|
|
232
|
+
case 'boolean':
|
|
233
|
+
return 'boolean';
|
|
234
|
+
default:
|
|
235
|
+
return 'unknown';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* The runtime `Capability` a model capability maps onto, or `undefined` when the
|
|
240
|
+
* runtime cannot express it. `json-schema` maps to `structured-output`, which is the
|
|
241
|
+
* runtime's spelling for the same guarantee.
|
|
242
|
+
*/
|
|
243
|
+
const MODEL_CAPABILITY_MEMBERS = {
|
|
244
|
+
'json-schema': 'structured-output',
|
|
245
|
+
'tool-calling': 'tool-calling',
|
|
246
|
+
streaming: 'streaming',
|
|
247
|
+
'long-context': 'long-context',
|
|
248
|
+
embeddings: 'embeddings',
|
|
249
|
+
rerank: 'rerank',
|
|
250
|
+
vision: undefined,
|
|
251
|
+
audio: undefined,
|
|
252
|
+
reasoning: undefined,
|
|
253
|
+
'prompt-cache': undefined,
|
|
254
|
+
};
|
|
255
|
+
export function modelCapabilityMember(name) {
|
|
256
|
+
return MODEL_CAPABILITY_MEMBERS[name];
|
|
257
|
+
}
|
|
258
|
+
/** Split a model's declared capabilities into what the runtime can be told and what it cannot. */
|
|
259
|
+
export function modelCapabilities(declared) {
|
|
260
|
+
const advertised = [];
|
|
261
|
+
const dropped = [];
|
|
262
|
+
for (const name of declared) {
|
|
263
|
+
const member = modelCapabilityMember(name);
|
|
264
|
+
if (member === undefined) {
|
|
265
|
+
dropped.push(name);
|
|
266
|
+
}
|
|
267
|
+
else if (!advertised.includes(member)) {
|
|
268
|
+
advertised.push(member);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return { advertised, dropped };
|
|
272
|
+
}
|
|
273
|
+
/** The provider adapter class a provider spelling maps onto, or `undefined`. */
|
|
274
|
+
export function providerAdapter(provider) {
|
|
275
|
+
if (provider === 'fake')
|
|
276
|
+
return 'FakeProvider';
|
|
277
|
+
if (provider === 'openai' || provider === 'openai-compatible')
|
|
278
|
+
return 'OpenAICompatibleProvider';
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
/** Capabilities this target wires to a runtime surface. Kept beside the emitters. */
|
|
282
|
+
export const TARGET_WIRED_CAPABILITIES = [
|
|
283
|
+
'http-trigger',
|
|
284
|
+
'json-schema',
|
|
285
|
+
'tool-calling',
|
|
286
|
+
'otel',
|
|
287
|
+
'embeddings',
|
|
288
|
+
'rerank',
|
|
289
|
+
];
|
|
290
|
+
/** Every alias a pipeline step or prompt can name. */
|
|
291
|
+
export function sortStrings(values) {
|
|
292
|
+
return [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"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"}
|