@specverse/engines 6.11.2 → 6.17.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/ai/behavior-ai-service.js +2 -2
- package/dist/ai/behavior-ai-service.js.map +1 -1
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/library-whitelist.d.ts +81 -0
- package/dist/ai/library-whitelist.d.ts.map +1 -0
- package/dist/ai/library-whitelist.js +251 -0
- package/dist/ai/library-whitelist.js.map +1 -0
- package/dist/libs/instance-factories/applications/templates/generic/backend-package-json-generator.js +42 -5
- package/dist/libs/instance-factories/services/postgres-native-services.yaml +90 -0
- package/dist/libs/instance-factories/services/templates/_shared/step-matching.js +44 -0
- package/dist/libs/instance-factories/services/templates/mongodb-native/controller-generator.js +18 -6
- package/dist/libs/instance-factories/services/templates/mongodb-native/step-conventions.js +230 -34
- package/dist/libs/instance-factories/services/templates/postgres-native/client-generator.js +165 -0
- package/dist/libs/instance-factories/services/templates/postgres-native/controller-generator.js +300 -0
- package/dist/libs/instance-factories/services/templates/postgres-native/ddl-generator.js +169 -0
- package/dist/libs/instance-factories/services/templates/postgres-native/service-generator.js +65 -0
- package/dist/libs/instance-factories/services/templates/postgres-native/step-conventions.js +433 -0
- package/dist/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.js +24 -9
- package/dist/libs/instance-factories/services/templates/prisma/step-conventions.js +7 -34
- package/dist/realize/index.d.ts.map +1 -1
- package/dist/realize/index.js +8 -0
- package/dist/realize/index.js.map +1 -1
- package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +82 -24
- package/libs/instance-factories/services/postgres-native-services.yaml +90 -0
- package/libs/instance-factories/services/templates/_shared/step-matching.ts +103 -0
- package/libs/instance-factories/services/templates/mongodb-native/controller-generator.ts +25 -5
- package/libs/instance-factories/services/templates/mongodb-native/step-conventions.ts +336 -68
- package/libs/instance-factories/services/templates/postgres-native/__tests__/controller-generator.test.ts +193 -0
- package/libs/instance-factories/services/templates/postgres-native/client-generator.ts +178 -0
- package/libs/instance-factories/services/templates/postgres-native/controller-generator.ts +372 -0
- package/libs/instance-factories/services/templates/postgres-native/ddl-generator.ts +236 -0
- package/libs/instance-factories/services/templates/postgres-native/service-generator.ts +84 -0
- package/libs/instance-factories/services/templates/postgres-native/step-conventions.ts +539 -0
- package/libs/instance-factories/services/templates/prisma/ai-behaviors-generator.ts +38 -7
- package/libs/instance-factories/services/templates/prisma/step-conventions.ts +21 -68
- package/package.json +3 -3
|
@@ -39,7 +39,7 @@ function loadBehaviorPrompt() {
|
|
|
39
39
|
// 1. Try @specverse/assets first.
|
|
40
40
|
try {
|
|
41
41
|
const pkg = require.resolve('@specverse/assets/package.json');
|
|
42
|
-
candidates.push(join(dirname(pkg), 'prompts', 'core', 'standard', '
|
|
42
|
+
candidates.push(join(dirname(pkg), 'prompts', 'core', 'standard', 'default', 'behavior.prompt.yaml'));
|
|
43
43
|
}
|
|
44
44
|
catch {
|
|
45
45
|
/* not installed — fall through */
|
|
@@ -47,7 +47,7 @@ function loadBehaviorPrompt() {
|
|
|
47
47
|
// 2. Legacy engines-bundled fallback.
|
|
48
48
|
const __filename = fileURLToPath(import.meta.url);
|
|
49
49
|
const __dirname = dirname(__filename);
|
|
50
|
-
candidates.push(join(__dirname, '..', '..', 'assets', 'prompts', 'core', 'standard', '
|
|
50
|
+
candidates.push(join(__dirname, '..', '..', 'assets', 'prompts', 'core', 'standard', 'default', 'behavior.prompt.yaml'), join(__dirname, '..', '..', '..', 'assets', 'prompts', 'core', 'standard', 'default', 'behavior.prompt.yaml'));
|
|
51
51
|
for (const path of candidates) {
|
|
52
52
|
if (existsSync(path)) {
|
|
53
53
|
const doc = yaml.load(readFileSync(path, 'utf8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior-ai-service.js","sourceRoot":"","sources":["../../src/ai/behavior-ai-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AA4B/C;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;YAC9D,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"behavior-ai-service.js","sourceRoot":"","sources":["../../src/ai/behavior-ai-service.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export { regenerateBehavior } from './behavior-regenerate.js';
|
|
|
28
28
|
export type { RegenerateBehaviorOptions, RegenerateBehaviorResult } from './behavior-regenerate.js';
|
|
29
29
|
export { resolveModel, resolveProviderId, describeActiveProvider } from './model-resolver.js';
|
|
30
30
|
export type { ProviderId, ResolveModelOptions } from './model-resolver.js';
|
|
31
|
+
export { AI_BEHAVIOR_LIBRARY_WHITELIST, AI_BEHAVIOR_LIBRARY_TRIGGERS, isWhitelistedLibrary, predictAiBehaviorLibraries, extractDynamicImports, validateImportWhitelist, } from './library-whitelist.js';
|
|
32
|
+
export type { AiBehaviorLibrary } from './library-whitelist.js';
|
|
31
33
|
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
|
32
34
|
export type { ClaudeCliOptions } from './providers/claude-cli.js';
|
|
33
35
|
export { stubModel } from './providers/stub.js';
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,cAAc,qBAAqB,CAAC;AAIpC,cAAc,oCAAoC,CAAC;AAGnD,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAIlG,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.js
CHANGED
|
@@ -34,6 +34,10 @@ export { BehaviorAIService } from './behavior-ai-service.js';
|
|
|
34
34
|
export { regenerateBehavior } from './behavior-regenerate.js';
|
|
35
35
|
// Model resolver — pick a LanguageModelV3 from SPECVERSE_AI_PROVIDER env.
|
|
36
36
|
export { resolveModel, resolveProviderId, describeActiveProvider } from './model-resolver.js';
|
|
37
|
+
// AI-behavior library whitelist — single source of truth for which
|
|
38
|
+
// libraries the realized backend is allowed to dynamic-import from
|
|
39
|
+
// generated *.ai.ts pure-function bodies. See library-whitelist.ts header.
|
|
40
|
+
export { AI_BEHAVIOR_LIBRARY_WHITELIST, AI_BEHAVIOR_LIBRARY_TRIGGERS, isWhitelistedLibrary, predictAiBehaviorLibraries, extractDynamicImports, validateImportWhitelist, } from './library-whitelist.js';
|
|
37
41
|
// Custom providers — thin wrappers around claude CLI and no-op stub. Most
|
|
38
42
|
// consumers should use resolveModel() rather than calling these directly.
|
|
39
43
|
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
package/dist/ai/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-behavior library whitelist — single source of truth for which
|
|
3
|
+
* external libraries AI-generated `behaviors/*.ai.ts` pure-function
|
|
4
|
+
* bodies are allowed to dynamic-import.
|
|
5
|
+
*
|
|
6
|
+
* Three things keyed off this module:
|
|
7
|
+
*
|
|
8
|
+
* 1. The validator in `ai-behaviors-generator.ts` rejects any
|
|
9
|
+
* generated body whose `await import('LITERAL')` calls reference
|
|
10
|
+
* a literal not in `AI_BEHAVIOR_LIBRARY_WHITELIST`. Closes the
|
|
11
|
+
* gap where the validator previously failed equally on whitelisted
|
|
12
|
+
* and unwhitelisted imports (because the engines workspace lacks
|
|
13
|
+
* both), so non-whitelisted libs slipped through to AI-INVALID
|
|
14
|
+
* and only crashed at runtime in the realized backend.
|
|
15
|
+
*
|
|
16
|
+
* 2. `backend-package-json-generator.ts` calls
|
|
17
|
+
* `predictAiBehaviorLibraries(spec)` and only emits deps for libs
|
|
18
|
+
* whose triggers fire in the spec's step text. Avoids the dep
|
|
19
|
+
* bloat where every realized backend installed all 5 libs even
|
|
20
|
+
* when 97% of bodies needed none.
|
|
21
|
+
*
|
|
22
|
+
* 3. The behavior prompt YAML's "LIBRARY WHITELIST" section is the
|
|
23
|
+
* author-facing description — the trigger phrases here MUST stay
|
|
24
|
+
* in sync with the prompt. If you add or rename a trigger here,
|
|
25
|
+
* update `assets/prompts/core/standard/default/behavior.prompt.yaml`
|
|
26
|
+
* and bump `PROMPT_VERSION` in `ai-behaviors-generator.ts`.
|
|
27
|
+
*
|
|
28
|
+
* Triage status (2026-05-02 audit, #43K-B-review):
|
|
29
|
+
* jsonwebtoken — used in 2 of 49 cached bodies. KEEP.
|
|
30
|
+
* expr-eval — used in 1 of 49 cached bodies. MONITORED.
|
|
31
|
+
* bcryptjs — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
32
|
+
* crypto — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
33
|
+
* uuid — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
34
|
+
*/
|
|
35
|
+
export declare const AI_BEHAVIOR_LIBRARY_WHITELIST: readonly ["jsonwebtoken", "bcryptjs", "uuid", "crypto", "expr-eval"];
|
|
36
|
+
export type AiBehaviorLibrary = typeof AI_BEHAVIOR_LIBRARY_WHITELIST[number];
|
|
37
|
+
/** Is `name` a member of the whitelist? */
|
|
38
|
+
export declare function isWhitelistedLibrary(name: string): name is AiBehaviorLibrary;
|
|
39
|
+
/**
|
|
40
|
+
* Trigger phrases per library — when any regex matches a step's text,
|
|
41
|
+
* the corresponding library is predicted to be needed by the AI body
|
|
42
|
+
* the realize engine will generate for that step.
|
|
43
|
+
*
|
|
44
|
+
* Kept in sync with `behavior.prompt.yaml`'s LIBRARY WHITELIST section.
|
|
45
|
+
* If you change the prompt's triggers, update both places + bump
|
|
46
|
+
* PROMPT_VERSION.
|
|
47
|
+
*/
|
|
48
|
+
export declare const AI_BEHAVIOR_LIBRARY_TRIGGERS: Record<AiBehaviorLibrary, RegExp[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Walk every step text in a SpecVerse spec and predict which whitelist
|
|
51
|
+
* libraries the AI body generator will need. The set is the basis for
|
|
52
|
+
* the realized backend's `package.json` deps — only libs predicted as
|
|
53
|
+
* needed get added.
|
|
54
|
+
*
|
|
55
|
+
* Walks: spec.components[].(controllers / services).operations[].steps[]
|
|
56
|
+
* + spec.components[].models[].behaviors[].steps[]
|
|
57
|
+
*/
|
|
58
|
+
export declare function predictAiBehaviorLibraries(spec: any): Set<AiBehaviorLibrary>;
|
|
59
|
+
/**
|
|
60
|
+
* Extract the literal module specifiers from every `await import('X')`
|
|
61
|
+
* (or bare `import('X')`) call in a TS source string. Used by the AI
|
|
62
|
+
* body validator to enforce whitelist compliance — any returned name
|
|
63
|
+
* not in `AI_BEHAVIOR_LIBRARY_WHITELIST` rejects the body.
|
|
64
|
+
*
|
|
65
|
+
* Walks char-by-char tracking string + comment context — ignores any
|
|
66
|
+
* `import(...)` syntax that appears inside a comment or string literal,
|
|
67
|
+
* so commented-out examples and string content can't false-positive.
|
|
68
|
+
*
|
|
69
|
+
* Computed specifiers (`import(varName)`) and template-string
|
|
70
|
+
* specifiers (`` import(`name`) ``) are intentionally NOT extracted:
|
|
71
|
+
* they're rejected by the validator anyway (only allow string-literal
|
|
72
|
+
* specifiers) and the safe answer when we can't statically resolve a
|
|
73
|
+
* specifier is "don't try."
|
|
74
|
+
*/
|
|
75
|
+
export declare function extractDynamicImports(code: string): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Validate that every dynamic import in `code` references a whitelisted
|
|
78
|
+
* library. Returns a list of violating specifiers (empty list = clean).
|
|
79
|
+
*/
|
|
80
|
+
export declare function validateImportWhitelist(code: string): string[];
|
|
81
|
+
//# sourceMappingURL=library-whitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-whitelist.d.ts","sourceRoot":"","sources":["../../src/ai/library-whitelist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,eAAO,MAAM,6BAA6B,sEAMhC,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AAI7E,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAE5E;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAkC5E,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,CA6D5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiE5D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-behavior library whitelist — single source of truth for which
|
|
3
|
+
* external libraries AI-generated `behaviors/*.ai.ts` pure-function
|
|
4
|
+
* bodies are allowed to dynamic-import.
|
|
5
|
+
*
|
|
6
|
+
* Three things keyed off this module:
|
|
7
|
+
*
|
|
8
|
+
* 1. The validator in `ai-behaviors-generator.ts` rejects any
|
|
9
|
+
* generated body whose `await import('LITERAL')` calls reference
|
|
10
|
+
* a literal not in `AI_BEHAVIOR_LIBRARY_WHITELIST`. Closes the
|
|
11
|
+
* gap where the validator previously failed equally on whitelisted
|
|
12
|
+
* and unwhitelisted imports (because the engines workspace lacks
|
|
13
|
+
* both), so non-whitelisted libs slipped through to AI-INVALID
|
|
14
|
+
* and only crashed at runtime in the realized backend.
|
|
15
|
+
*
|
|
16
|
+
* 2. `backend-package-json-generator.ts` calls
|
|
17
|
+
* `predictAiBehaviorLibraries(spec)` and only emits deps for libs
|
|
18
|
+
* whose triggers fire in the spec's step text. Avoids the dep
|
|
19
|
+
* bloat where every realized backend installed all 5 libs even
|
|
20
|
+
* when 97% of bodies needed none.
|
|
21
|
+
*
|
|
22
|
+
* 3. The behavior prompt YAML's "LIBRARY WHITELIST" section is the
|
|
23
|
+
* author-facing description — the trigger phrases here MUST stay
|
|
24
|
+
* in sync with the prompt. If you add or rename a trigger here,
|
|
25
|
+
* update `assets/prompts/core/standard/default/behavior.prompt.yaml`
|
|
26
|
+
* and bump `PROMPT_VERSION` in `ai-behaviors-generator.ts`.
|
|
27
|
+
*
|
|
28
|
+
* Triage status (2026-05-02 audit, #43K-B-review):
|
|
29
|
+
* jsonwebtoken — used in 2 of 49 cached bodies. KEEP.
|
|
30
|
+
* expr-eval — used in 1 of 49 cached bodies. MONITORED.
|
|
31
|
+
* bcryptjs — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
32
|
+
* crypto — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
33
|
+
* uuid — 0 of 49. MONITORED — drop after 2026-11 if no real spec uses it.
|
|
34
|
+
*/
|
|
35
|
+
export const AI_BEHAVIOR_LIBRARY_WHITELIST = [
|
|
36
|
+
'jsonwebtoken',
|
|
37
|
+
'bcryptjs',
|
|
38
|
+
'uuid',
|
|
39
|
+
'crypto',
|
|
40
|
+
'expr-eval',
|
|
41
|
+
];
|
|
42
|
+
const WHITELIST_SET = new Set(AI_BEHAVIOR_LIBRARY_WHITELIST);
|
|
43
|
+
/** Is `name` a member of the whitelist? */
|
|
44
|
+
export function isWhitelistedLibrary(name) {
|
|
45
|
+
return WHITELIST_SET.has(name);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Trigger phrases per library — when any regex matches a step's text,
|
|
49
|
+
* the corresponding library is predicted to be needed by the AI body
|
|
50
|
+
* the realize engine will generate for that step.
|
|
51
|
+
*
|
|
52
|
+
* Kept in sync with `behavior.prompt.yaml`'s LIBRARY WHITELIST section.
|
|
53
|
+
* If you change the prompt's triggers, update both places + bump
|
|
54
|
+
* PROMPT_VERSION.
|
|
55
|
+
*/
|
|
56
|
+
export const AI_BEHAVIOR_LIBRARY_TRIGGERS = {
|
|
57
|
+
// JWT: explicit lib name OR the abbrev OR signing/verifying intent.
|
|
58
|
+
// \bJWT\b avoids matching "JWTRevoked" or "BJWT" — only the standalone token.
|
|
59
|
+
jsonwebtoken: [
|
|
60
|
+
/jsonwebtoken/i,
|
|
61
|
+
/\bJWT\b/,
|
|
62
|
+
/\bsign\s+tokens?\b/i,
|
|
63
|
+
/\bverify\s+token\s+signature\b/i,
|
|
64
|
+
/\bdecode\s+token\b/i,
|
|
65
|
+
],
|
|
66
|
+
// bcryptjs (or just "bcrypt") + the hash/compare-password pattern.
|
|
67
|
+
bcryptjs: [
|
|
68
|
+
/\bbcryptjs?\b/i,
|
|
69
|
+
/\bhash\s+password\b/i,
|
|
70
|
+
/\bcompare\s+password\b/i,
|
|
71
|
+
],
|
|
72
|
+
// Note: these triggers are deliberately specific. "uuid" alone would
|
|
73
|
+
// match too aggressively (e.g. "userId: UUID required" in an attribute
|
|
74
|
+
// declaration). Anchor on action-y phrasing instead.
|
|
75
|
+
uuid: [
|
|
76
|
+
/\bvia\s+uuid\b/i,
|
|
77
|
+
/\bgenerate\s+uuid\b/i,
|
|
78
|
+
],
|
|
79
|
+
// node:crypto built-in — only the explicit "via crypto" or hash-action
|
|
80
|
+
// phrasings, since "crypto" alone would match "crypto-currency", "crypto
|
|
81
|
+
// wallet", etc.
|
|
82
|
+
crypto: [
|
|
83
|
+
/\bvia\s+crypto\b/i,
|
|
84
|
+
/\bcompute\s+(?:hash|checksum)\b/i,
|
|
85
|
+
],
|
|
86
|
+
'expr-eval': [
|
|
87
|
+
/\bexpr-eval\b/i,
|
|
88
|
+
/\bevaluate\s+formula\b/i,
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Walk every step text in a SpecVerse spec and predict which whitelist
|
|
93
|
+
* libraries the AI body generator will need. The set is the basis for
|
|
94
|
+
* the realized backend's `package.json` deps — only libs predicted as
|
|
95
|
+
* needed get added.
|
|
96
|
+
*
|
|
97
|
+
* Walks: spec.components[].(controllers / services).operations[].steps[]
|
|
98
|
+
* + spec.components[].models[].behaviors[].steps[]
|
|
99
|
+
*/
|
|
100
|
+
export function predictAiBehaviorLibraries(spec) {
|
|
101
|
+
const found = new Set();
|
|
102
|
+
if (!spec)
|
|
103
|
+
return found;
|
|
104
|
+
const allSteps = [];
|
|
105
|
+
const collectFromOps = (ops) => {
|
|
106
|
+
if (!ops)
|
|
107
|
+
return;
|
|
108
|
+
const entries = Array.isArray(ops) ? ops : Object.values(ops);
|
|
109
|
+
for (const op of entries) {
|
|
110
|
+
const steps = Array.isArray(op?.steps) ? op.steps : [];
|
|
111
|
+
for (const step of steps) {
|
|
112
|
+
const text = typeof step === 'string' ? step : (step?.step || step?.action);
|
|
113
|
+
if (typeof text === 'string')
|
|
114
|
+
allSteps.push(text);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const collectFromModels = (models) => {
|
|
119
|
+
if (!models)
|
|
120
|
+
return;
|
|
121
|
+
const entries = Array.isArray(models) ? models : Object.values(models);
|
|
122
|
+
for (const m of entries) {
|
|
123
|
+
collectFromOps(m?.behaviors);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const components = Array.isArray(spec.components)
|
|
127
|
+
? spec.components
|
|
128
|
+
: (spec.components ? Object.values(spec.components) : []);
|
|
129
|
+
for (const comp of components) {
|
|
130
|
+
if (!comp)
|
|
131
|
+
continue;
|
|
132
|
+
// Controllers may declare actions or behaviors-derived ops.
|
|
133
|
+
const ctrls = comp.controllers;
|
|
134
|
+
if (ctrls) {
|
|
135
|
+
const ctrlEntries = Array.isArray(ctrls) ? ctrls : Object.values(ctrls);
|
|
136
|
+
for (const c of ctrlEntries) {
|
|
137
|
+
collectFromOps(c?.actions);
|
|
138
|
+
collectFromOps(c?.behaviors);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Services have operations.
|
|
142
|
+
const services = comp.services;
|
|
143
|
+
if (services) {
|
|
144
|
+
const svcEntries = Array.isArray(services) ? services : Object.values(services);
|
|
145
|
+
for (const s of svcEntries) {
|
|
146
|
+
collectFromOps(s?.operations);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
collectFromModels(comp.models);
|
|
150
|
+
}
|
|
151
|
+
// Run each lib's triggers against the collected step text.
|
|
152
|
+
for (const lib of AI_BEHAVIOR_LIBRARY_WHITELIST) {
|
|
153
|
+
const triggers = AI_BEHAVIOR_LIBRARY_TRIGGERS[lib];
|
|
154
|
+
if (allSteps.some((step) => triggers.some((re) => re.test(step)))) {
|
|
155
|
+
found.add(lib);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return found;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Extract the literal module specifiers from every `await import('X')`
|
|
162
|
+
* (or bare `import('X')`) call in a TS source string. Used by the AI
|
|
163
|
+
* body validator to enforce whitelist compliance — any returned name
|
|
164
|
+
* not in `AI_BEHAVIOR_LIBRARY_WHITELIST` rejects the body.
|
|
165
|
+
*
|
|
166
|
+
* Walks char-by-char tracking string + comment context — ignores any
|
|
167
|
+
* `import(...)` syntax that appears inside a comment or string literal,
|
|
168
|
+
* so commented-out examples and string content can't false-positive.
|
|
169
|
+
*
|
|
170
|
+
* Computed specifiers (`import(varName)`) and template-string
|
|
171
|
+
* specifiers (`` import(`name`) ``) are intentionally NOT extracted:
|
|
172
|
+
* they're rejected by the validator anyway (only allow string-literal
|
|
173
|
+
* specifiers) and the safe answer when we can't statically resolve a
|
|
174
|
+
* specifier is "don't try."
|
|
175
|
+
*/
|
|
176
|
+
export function extractDynamicImports(code) {
|
|
177
|
+
const out = [];
|
|
178
|
+
let i = 0;
|
|
179
|
+
let stringChar = null; // null when not in a string
|
|
180
|
+
const len = code.length;
|
|
181
|
+
while (i < len) {
|
|
182
|
+
const c = code[i];
|
|
183
|
+
// Inside a string — consume until matching closer (handle escapes).
|
|
184
|
+
if (stringChar !== null) {
|
|
185
|
+
if (c === '\\' && i + 1 < len) {
|
|
186
|
+
i += 2;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (c === stringChar) {
|
|
190
|
+
stringChar = null;
|
|
191
|
+
}
|
|
192
|
+
i++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
// Block comment
|
|
196
|
+
if (c === '/' && code[i + 1] === '*') {
|
|
197
|
+
const end = code.indexOf('*/', i + 2);
|
|
198
|
+
i = end < 0 ? len : end + 2;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
// Line comment
|
|
202
|
+
if (c === '/' && code[i + 1] === '/') {
|
|
203
|
+
const end = code.indexOf('\n', i + 2);
|
|
204
|
+
i = end < 0 ? len : end;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
// String start
|
|
208
|
+
if (c === '"' || c === "'" || c === '`') {
|
|
209
|
+
stringChar = c;
|
|
210
|
+
i++;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
// `import(` pattern — must be preceded by a non-identifier char so
|
|
214
|
+
// we don't match `myimport(` or similar. Then skip whitespace,
|
|
215
|
+
// capture the literal between matching quotes, verify it's followed
|
|
216
|
+
// by `)` (modulo whitespace).
|
|
217
|
+
if (c === 'i' && code.slice(i, i + 7) === 'import(') {
|
|
218
|
+
const prev = i > 0 ? code[i - 1] : '\0';
|
|
219
|
+
if (!/[a-zA-Z0-9_$]/.test(prev)) {
|
|
220
|
+
let j = i + 7;
|
|
221
|
+
while (j < len && /\s/.test(code[j]))
|
|
222
|
+
j++;
|
|
223
|
+
const quote = code[j];
|
|
224
|
+
if (quote === '"' || quote === "'") {
|
|
225
|
+
const endQuote = code.indexOf(quote, j + 1);
|
|
226
|
+
if (endQuote > 0) {
|
|
227
|
+
const lit = code.slice(j + 1, endQuote);
|
|
228
|
+
let k = endQuote + 1;
|
|
229
|
+
while (k < len && /\s/.test(code[k]))
|
|
230
|
+
k++;
|
|
231
|
+
if (code[k] === ')') {
|
|
232
|
+
out.push(lit);
|
|
233
|
+
i = k + 1;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
i++;
|
|
241
|
+
}
|
|
242
|
+
return out;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Validate that every dynamic import in `code` references a whitelisted
|
|
246
|
+
* library. Returns a list of violating specifiers (empty list = clean).
|
|
247
|
+
*/
|
|
248
|
+
export function validateImportWhitelist(code) {
|
|
249
|
+
return extractDynamicImports(code).filter((n) => !isWhitelistedLibrary(n));
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=library-whitelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-whitelist.js","sourceRoot":"","sources":["../../src/ai/library-whitelist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import { predictAiBehaviorLibraries } from "@specverse/engines/ai";
|
|
2
|
+
const AI_LIBRARY_VERSIONS = {
|
|
3
|
+
"jsonwebtoken": { runtime: "^9.0.0", types: "^9.0.0" },
|
|
4
|
+
"bcryptjs": { runtime: "^2.4.3", types: "^2.4.0" },
|
|
5
|
+
"uuid": { runtime: "^9.0.0", types: "^9.0.0" },
|
|
6
|
+
"crypto": {
|
|
7
|
+
runtime: "*"
|
|
8
|
+
/* Node built-in */
|
|
9
|
+
},
|
|
10
|
+
"expr-eval": { runtime: "^2.0.2" }
|
|
11
|
+
};
|
|
1
12
|
function resolveOrmName(manifest) {
|
|
2
13
|
if (!manifest) return "PrismaORM";
|
|
3
14
|
const inner = manifest.manifests ? Object.values(manifest.manifests)[0] : manifest;
|
|
@@ -12,7 +23,10 @@ function generateBackendPackageJson(context) {
|
|
|
12
23
|
const appName = (spec.metadata?.component || "app").toLowerCase().replace(/\s+/g, "-");
|
|
13
24
|
const orm = resolveOrmName(manifest);
|
|
14
25
|
const isMongoNative = orm === "MongoDBNativeDriver";
|
|
15
|
-
const
|
|
26
|
+
const isPgNative = orm === "PostgresNativeDriver";
|
|
27
|
+
const dbScripts = isMongoNative ? {} : isPgNative ? {
|
|
28
|
+
"db:setup": 'psql "$POSTGRES_URL" -f src/db/schema.sql'
|
|
29
|
+
} : {
|
|
16
30
|
"db:setup": "prisma generate && prisma db push",
|
|
17
31
|
"db:generate": "prisma generate",
|
|
18
32
|
"db:push": "prisma db push",
|
|
@@ -20,8 +34,8 @@ function generateBackendPackageJson(context) {
|
|
|
20
34
|
"db:studio": "prisma studio",
|
|
21
35
|
"db:seed": "tsx prisma/seed.ts"
|
|
22
36
|
};
|
|
23
|
-
const ormDeps = isMongoNative ? { "mongodb": "^6.3.0" } : { "@prisma/client": "^5.7.0" };
|
|
24
|
-
const ormDevDeps = isMongoNative ? {} : { "prisma": "^5.7.0" };
|
|
37
|
+
const ormDeps = isMongoNative ? { "mongodb": "^6.3.0" } : isPgNative ? { "pg": "^8.11.0" } : { "@prisma/client": "^5.7.0" };
|
|
38
|
+
const ormDevDeps = isMongoNative ? {} : isPgNative ? { "@types/pg": "^8.11.0" } : { "prisma": "^5.7.0" };
|
|
25
39
|
const pkg = {
|
|
26
40
|
name: `${appName}-backend`,
|
|
27
41
|
version: spec.metadata?.version || "1.0.0",
|
|
@@ -61,7 +75,12 @@ function generateBackendPackageJson(context) {
|
|
|
61
75
|
"eventemitter3": "^5.0.0",
|
|
62
76
|
"zod": "^3.22.0",
|
|
63
77
|
"dotenv": "^16.3.0",
|
|
64
|
-
"commander": "^13.0.0"
|
|
78
|
+
"commander": "^13.0.0",
|
|
79
|
+
// AI-behavior whitelist deps — only included when the spec's step
|
|
80
|
+
// text actually triggers them (predicted via predictAiBehaviorLibraries).
|
|
81
|
+
// Pre-fix every backend installed all 5 libs unconditionally even
|
|
82
|
+
// though 97% of generated bodies imported nothing. (#43K-B-review)
|
|
83
|
+
...buildAiLibraryDeps(spec, "runtime")
|
|
65
84
|
},
|
|
66
85
|
devDependencies: {
|
|
67
86
|
"typescript": "^5.3.0",
|
|
@@ -72,7 +91,10 @@ function generateBackendPackageJson(context) {
|
|
|
72
91
|
"@vitest/coverage-v8": "^3.0.0",
|
|
73
92
|
"eslint": "^9.0.0",
|
|
74
93
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
75
|
-
"@typescript-eslint/parser": "^8.0.0"
|
|
94
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
95
|
+
// Type definitions for whichever AI-behavior whitelist libs are
|
|
96
|
+
// included as runtime deps above. Same per-spec gating.
|
|
97
|
+
...buildAiLibraryDeps(spec, "types")
|
|
76
98
|
},
|
|
77
99
|
engines: {
|
|
78
100
|
node: ">=20.0.0"
|
|
@@ -80,6 +102,21 @@ function generateBackendPackageJson(context) {
|
|
|
80
102
|
};
|
|
81
103
|
return JSON.stringify(pkg, null, 2);
|
|
82
104
|
}
|
|
105
|
+
function buildAiLibraryDeps(spec, kind) {
|
|
106
|
+
const out = {};
|
|
107
|
+
const predicted = predictAiBehaviorLibraries(spec);
|
|
108
|
+
for (const lib of predicted) {
|
|
109
|
+
const versions = AI_LIBRARY_VERSIONS[lib];
|
|
110
|
+
if (!versions) continue;
|
|
111
|
+
if (kind === "runtime") {
|
|
112
|
+
if (versions.runtime === "*") continue;
|
|
113
|
+
out[lib] = versions.runtime;
|
|
114
|
+
} else if (kind === "types" && versions.types) {
|
|
115
|
+
out[`@types/${lib}`] = versions.types;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
83
120
|
export {
|
|
84
121
|
generateBackendPackageJson as default
|
|
85
122
|
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
name: PostgresNativeDriver
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
category: service
|
|
4
|
+
description: "Business logic services using the native node-postgres (pg) driver — raw SQL, no ORM layer"
|
|
5
|
+
|
|
6
|
+
metadata:
|
|
7
|
+
author: "SpecVerse Team"
|
|
8
|
+
license: "MIT"
|
|
9
|
+
tags: [services, business-logic, postgres, pg, native-driver, controllers]
|
|
10
|
+
|
|
11
|
+
compatibility:
|
|
12
|
+
specverse: ">=5.0.0"
|
|
13
|
+
node: ">=18.0.0"
|
|
14
|
+
|
|
15
|
+
# Same shape as MongoDBNativeDriver — the pg pool IS the data layer; no ORM
|
|
16
|
+
# layer to swap in independently. This single factory therefore provides
|
|
17
|
+
# both the orm.* capabilities and the service-layer capabilities.
|
|
18
|
+
capabilities:
|
|
19
|
+
provides:
|
|
20
|
+
- "orm.schema" # Emits the pg pool client + DDL (the connection IS the schema layer)
|
|
21
|
+
- "orm.client"
|
|
22
|
+
- "orm.postgres.native"
|
|
23
|
+
- "service.controller"
|
|
24
|
+
- "service.business"
|
|
25
|
+
- "service.crud"
|
|
26
|
+
requires:
|
|
27
|
+
- "storage.database.relational"
|
|
28
|
+
|
|
29
|
+
technology:
|
|
30
|
+
runtime: "node"
|
|
31
|
+
language: "typescript"
|
|
32
|
+
orm: "postgres-native"
|
|
33
|
+
version: "^8.11.0"
|
|
34
|
+
|
|
35
|
+
dependencies:
|
|
36
|
+
runtime:
|
|
37
|
+
- name: "pg"
|
|
38
|
+
version: "^8.11.0"
|
|
39
|
+
|
|
40
|
+
dev:
|
|
41
|
+
- name: "@types/pg"
|
|
42
|
+
version: "^8.11.0"
|
|
43
|
+
- name: "@types/node"
|
|
44
|
+
version: "^20.8.0"
|
|
45
|
+
- name: "typescript"
|
|
46
|
+
version: "^5.2.0"
|
|
47
|
+
|
|
48
|
+
codeTemplates:
|
|
49
|
+
# `schema` slot emits the pg pool singleton + a co-located CREATE TABLE
|
|
50
|
+
# script (schema.sql) so users can bootstrap a database without pulling
|
|
51
|
+
# in an external migrator. The pool generator owns the runtime
|
|
52
|
+
# connection; the DDL generator owns the static SQL.
|
|
53
|
+
schema:
|
|
54
|
+
engine: typescript
|
|
55
|
+
generator: "libs/instance-factories/services/templates/postgres-native/client-generator.ts"
|
|
56
|
+
outputPattern: "{backendDir}/src/db/pgClient.ts"
|
|
57
|
+
|
|
58
|
+
ddl:
|
|
59
|
+
engine: typescript
|
|
60
|
+
generator: "libs/instance-factories/services/templates/postgres-native/ddl-generator.ts"
|
|
61
|
+
outputPattern: "{backendDir}/src/db/schema.sql"
|
|
62
|
+
|
|
63
|
+
controllers:
|
|
64
|
+
engine: typescript
|
|
65
|
+
generator: "libs/instance-factories/services/templates/postgres-native/controller-generator.ts"
|
|
66
|
+
outputPattern: "{backendDir}/src/controllers/{model}Controller.ts"
|
|
67
|
+
|
|
68
|
+
services:
|
|
69
|
+
engine: typescript
|
|
70
|
+
generator: "libs/instance-factories/services/templates/postgres-native/service-generator.ts"
|
|
71
|
+
outputPattern: "{backendDir}/src/services/{service}.ts"
|
|
72
|
+
|
|
73
|
+
configuration:
|
|
74
|
+
outputStructure: "monorepo"
|
|
75
|
+
backendDir: "backend"
|
|
76
|
+
tableNaming: "lowercase-pluralized" # User → users, OrderItem → orderitems
|
|
77
|
+
validation: true
|
|
78
|
+
eventPublishing: true
|
|
79
|
+
errorHandling: "throw"
|
|
80
|
+
|
|
81
|
+
requirements:
|
|
82
|
+
dependencies:
|
|
83
|
+
npm:
|
|
84
|
+
dependencies:
|
|
85
|
+
"pg": "^8.11.0"
|
|
86
|
+
environment:
|
|
87
|
+
- name: "POSTGRES_URL"
|
|
88
|
+
description: "PostgreSQL connection string (e.g. postgres://user:pass@localhost:5432/myapp)"
|
|
89
|
+
required: true
|
|
90
|
+
configuration: {}
|