@caelo-cms/shared 0.10.21 → 0.10.23
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-tools.d.ts +291 -231
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai-tools.js +349 -281
- package/dist/ai-tools.js.map +1 -1
- package/dist/auth-forms.d.ts.map +1 -1
- package/dist/auth-forms.js +4 -1
- package/dist/auth-forms.js.map +1 -1
- package/dist/base-css.d.ts +24 -0
- package/dist/base-css.d.ts.map +1 -0
- package/dist/base-css.js +28 -0
- package/dist/base-css.js.map +1 -0
- package/dist/build-page.d.ts +330 -0
- package/dist/build-page.d.ts.map +1 -0
- package/dist/build-page.js +282 -0
- package/dist/build-page.js.map +1 -0
- package/dist/content.d.ts +322 -9
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +354 -11
- package/dist/content.js.map +1 -1
- package/dist/css-gradient-scan.d.ts +14 -0
- package/dist/css-gradient-scan.d.ts.map +1 -0
- package/dist/css-gradient-scan.js +81 -0
- package/dist/css-gradient-scan.js.map +1 -0
- package/dist/css-var-scan.d.ts +56 -0
- package/dist/css-var-scan.d.ts.map +1 -0
- package/dist/css-var-scan.js +97 -0
- package/dist/css-var-scan.js.map +1 -0
- package/dist/design-manifest.d.ts +36 -0
- package/dist/design-manifest.d.ts.map +1 -0
- package/dist/design-manifest.js +90 -0
- package/dist/design-manifest.js.map +1 -0
- package/dist/fonts.d.ts +89 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +241 -0
- package/dist/fonts.js.map +1 -0
- package/dist/genesis-inventory.d.ts +32 -0
- package/dist/genesis-inventory.d.ts.map +1 -0
- package/dist/genesis-inventory.js +186 -0
- package/dist/genesis-inventory.js.map +1 -0
- package/dist/genesis.d.ts +62 -0
- package/dist/genesis.d.ts.map +1 -0
- package/dist/genesis.js +78 -0
- package/dist/genesis.js.map +1 -0
- package/dist/i18n.d.ts +44 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +72 -6
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +23 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +44 -0
- package/dist/interactions.js.map +1 -0
- package/dist/media.d.ts +101 -16
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +126 -15
- package/dist/media.js.map +1 -1
- package/dist/page-log.d.ts +94 -0
- package/dist/page-log.d.ts.map +1 -0
- package/dist/page-log.js +111 -0
- package/dist/page-log.js.map +1 -0
- package/dist/preview-compose.d.ts +79 -0
- package/dist/preview-compose.d.ts.map +1 -1
- package/dist/preview-compose.js +155 -25
- package/dist/preview-compose.js.map +1 -1
- package/dist/proposal-status.d.ts +40 -0
- package/dist/proposal-status.d.ts.map +1 -0
- package/dist/proposal-status.js +34 -0
- package/dist/proposal-status.js.map +1 -0
- package/dist/responsive-images.d.ts +64 -0
- package/dist/responsive-images.d.ts.map +1 -0
- package/dist/responsive-images.js +98 -0
- package/dist/responsive-images.js.map +1 -0
- package/dist/safe-keys.d.ts +9 -0
- package/dist/safe-keys.d.ts.map +1 -0
- package/dist/safe-keys.js +20 -0
- package/dist/safe-keys.js.map +1 -0
- package/dist/seo.d.ts +8 -0
- package/dist/seo.d.ts.map +1 -1
- package/dist/seo.js +3 -1
- package/dist/seo.js.map +1 -1
- package/dist/skills.d.ts +14 -68
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +19 -113
- package/dist/skills.js.map +1 -1
- package/dist/strip-cdata.d.ts +7 -0
- package/dist/strip-cdata.d.ts.map +1 -0
- package/dist/strip-cdata.js +48 -0
- package/dist/strip-cdata.js.map +1 -0
- package/dist/structured-sets.d.ts +6 -16
- package/dist/structured-sets.d.ts.map +1 -1
- package/dist/structured-sets.js +5 -16
- package/dist/structured-sets.js.map +1 -1
- package/dist/subagents.d.ts +105 -3
- package/dist/subagents.d.ts.map +1 -1
- package/dist/subagents.js +224 -41
- package/dist/subagents.js.map +1 -1
- package/dist/template-engine.d.ts +85 -0
- package/dist/template-engine.d.ts.map +1 -0
- package/dist/template-engine.js +403 -0
- package/dist/template-engine.js.map +1 -0
- package/dist/theme-importers/auto-detect.d.ts +26 -0
- package/dist/theme-importers/auto-detect.d.ts.map +1 -0
- package/dist/theme-importers/auto-detect.js +42 -0
- package/dist/theme-importers/auto-detect.js.map +1 -0
- package/dist/theme-importers/css-comments.d.ts +12 -0
- package/dist/theme-importers/css-comments.d.ts.map +1 -0
- package/dist/theme-importers/css-comments.js +15 -0
- package/dist/theme-importers/css-comments.js.map +1 -0
- package/dist/theme-importers/dtcg.d.ts +46 -0
- package/dist/theme-importers/dtcg.d.ts.map +1 -0
- package/dist/theme-importers/dtcg.js +111 -0
- package/dist/theme-importers/dtcg.js.map +1 -0
- package/dist/theme-importers/loose.d.ts +3 -0
- package/dist/theme-importers/loose.d.ts.map +1 -0
- package/dist/theme-importers/loose.js +76 -0
- package/dist/theme-importers/loose.js.map +1 -0
- package/dist/theme-importers/shadcn.d.ts +24 -0
- package/dist/theme-importers/shadcn.d.ts.map +1 -0
- package/dist/theme-importers/shadcn.js +135 -0
- package/dist/theme-importers/shadcn.js.map +1 -0
- package/dist/theme-importers/style-dictionary.d.ts +17 -0
- package/dist/theme-importers/style-dictionary.d.ts.map +1 -0
- package/dist/theme-importers/style-dictionary.js +125 -0
- package/dist/theme-importers/style-dictionary.js.map +1 -0
- package/dist/theme-importers/tailwind.d.ts +3 -0
- package/dist/theme-importers/tailwind.d.ts.map +1 -0
- package/dist/theme-importers/tailwind.js +218 -0
- package/dist/theme-importers/tailwind.js.map +1 -0
- package/dist/theme-literal-binding.d.ts +37 -0
- package/dist/theme-literal-binding.d.ts.map +1 -0
- package/dist/theme-literal-binding.js +138 -0
- package/dist/theme-literal-binding.js.map +1 -0
- package/dist/theme-normalize.d.ts +31 -0
- package/dist/theme-normalize.d.ts.map +1 -0
- package/dist/theme-normalize.js +587 -0
- package/dist/theme-normalize.js.map +1 -0
- package/dist/theme-ramp.d.ts +55 -0
- package/dist/theme-ramp.d.ts.map +1 -0
- package/dist/theme-ramp.js +149 -0
- package/dist/theme-ramp.js.map +1 -0
- package/dist/theme-render.d.ts +105 -0
- package/dist/theme-render.d.ts.map +1 -0
- package/dist/theme-render.js +441 -0
- package/dist/theme-render.js.map +1 -0
- package/dist/themes-errors.d.ts +109 -0
- package/dist/themes-errors.d.ts.map +1 -0
- package/dist/themes-errors.js +170 -0
- package/dist/themes-errors.js.map +1 -0
- package/dist/themes.d.ts +343 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +697 -0
- package/dist/themes.js.map +1 -0
- package/dist/version.d.ts +7 -4
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +6 -3
- package/dist/version.js.map +1 -1
- package/package.json +10 -2
- package/src/__tests__/redos-hardening.test.ts +160 -0
- package/src/ai-tools-add-module-modes.test.ts +106 -0
- package/src/ai-tools-position.test.ts +134 -0
- package/src/ai-tools.test.ts +81 -0
- package/src/ai-tools.ts +1179 -0
- package/src/auth-forms.ts +36 -0
- package/src/base-css.ts +30 -0
- package/src/build-page.test.ts +228 -0
- package/src/build-page.ts +319 -0
- package/src/cap-failures.ts +67 -0
- package/src/content.test.ts +170 -0
- package/src/content.ts +620 -0
- package/src/context.ts +43 -0
- package/src/css-gradient-scan.ts +88 -0
- package/src/css-var-scan.test.ts +96 -0
- package/src/css-var-scan.ts +144 -0
- package/src/derive-module-type.test.ts +80 -0
- package/src/design-manifest.ts +93 -0
- package/src/fonts.test.ts +157 -0
- package/src/fonts.ts +296 -0
- package/src/genesis-inventory.test.ts +86 -0
- package/src/genesis-inventory.ts +215 -0
- package/src/genesis-sanitize.test.ts +35 -0
- package/src/genesis.ts +87 -0
- package/src/i18n.test.ts +274 -0
- package/src/i18n.ts +269 -0
- package/src/index.test.ts +10 -0
- package/src/index.ts +59 -0
- package/src/interactions.ts +48 -0
- package/src/logger.ts +147 -0
- package/src/media.test.ts +160 -0
- package/src/media.ts +355 -0
- package/src/page-log.test.ts +163 -0
- package/src/page-log.ts +124 -0
- package/src/preview-compose.test.ts +602 -0
- package/src/preview-compose.ts +709 -0
- package/src/preview-scanner.test.ts +96 -0
- package/src/preview-scanner.ts +214 -0
- package/src/proposal-status.test.ts +69 -0
- package/src/proposal-status.ts +40 -0
- package/src/responsive-images.test.ts +104 -0
- package/src/responsive-images.ts +151 -0
- package/src/result.ts +29 -0
- package/src/safe-keys.ts +21 -0
- package/src/seo.test.ts +234 -0
- package/src/seo.ts +261 -0
- package/src/skills.ts +48 -0
- package/src/snapshots.test.ts +80 -0
- package/src/snapshots.ts +81 -0
- package/src/strip-cdata.test.ts +41 -0
- package/src/strip-cdata.ts +50 -0
- package/src/structured-sets.ts +180 -0
- package/src/subagents.test.ts +262 -0
- package/src/subagents.ts +432 -0
- package/src/template-engine.test.ts +379 -0
- package/src/template-engine.ts +520 -0
- package/src/theme-gradient.test.ts +92 -0
- package/src/theme-importers/__tests__/proto-pollution.test.ts +54 -0
- package/src/theme-importers/auto-detect.ts +84 -0
- package/src/theme-importers/css-comments.ts +15 -0
- package/src/theme-importers/dtcg.ts +106 -0
- package/src/theme-importers/loose.ts +76 -0
- package/src/theme-importers/shadcn.ts +133 -0
- package/src/theme-importers/style-dictionary.ts +125 -0
- package/src/theme-importers/tailwind.ts +217 -0
- package/src/theme-literal-binding.test.ts +71 -0
- package/src/theme-literal-binding.ts +159 -0
- package/src/theme-motion.test.ts +115 -0
- package/src/theme-normalize-envelope.test.ts +43 -0
- package/src/theme-normalize-gradient.test.ts +135 -0
- package/src/theme-normalize.ts +661 -0
- package/src/theme-ramp.ts +187 -0
- package/src/theme-render-sanitize.test.ts +45 -0
- package/src/theme-render.test.ts +119 -0
- package/src/theme-render.ts +487 -0
- package/src/theme-shadow.test.ts +56 -0
- package/src/themes-errors.ts +199 -0
- package/src/themes.ts +842 -0
- package/src/translation.test.ts +160 -0
- package/src/translation.ts +295 -0
- package/src/version.ts +66 -0
package/dist/skills.js
CHANGED
|
@@ -1,127 +1,33 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MPL-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Skill metadata shapes shared across the Query API + chat-runner.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Skills use PROGRESSIVE DISCLOSURE (the Anthropic Agent Skills shape): a
|
|
6
|
+
* static `## Skills` index (slug + description) sits in the cached system
|
|
7
|
+
* prompt, and the model pulls a skill's full body into the conversation on
|
|
8
|
+
* demand via the `load_skill` tool (its body then lives in the append-only
|
|
9
|
+
* message history for the rest of the chat).
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* `skillAutoEngagementHints` no longer drives SELECTION — the model
|
|
12
|
+
* self-selects from the descriptions. The hints now only shape how prominently
|
|
13
|
+
* a skill is presented in the index: `alwaysOn` skills get an "always applies"
|
|
14
|
+
* callout, `chipTrigger` skills a "when element chips are attached" callout.
|
|
15
|
+
* (The old keyword/chip/always-on MATCHER + engagement resolver were removed
|
|
16
|
+
* once progressive disclosure replaced them.)
|
|
13
17
|
*/
|
|
14
18
|
import { z } from "zod";
|
|
15
19
|
export const skillAutoEngagementHints = z
|
|
16
20
|
.object({
|
|
17
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Lowercase substrings that once boosted the auto-matcher. The matcher is
|
|
23
|
+
* gone (progressive disclosure); retained in the schema so seeded rows that
|
|
24
|
+
* still carry keywords parse under `.strict()`. No runtime effect today.
|
|
25
|
+
*/
|
|
18
26
|
keywords: z.array(z.string().min(1).max(80)).default([]),
|
|
19
|
-
/**
|
|
27
|
+
/** Listed under the index's "when element chips are attached" callout. */
|
|
20
28
|
chipTrigger: z.boolean().default(false),
|
|
21
|
-
/**
|
|
29
|
+
/** Listed under the index's "always applies" callout (e.g. brand-voice-guard). */
|
|
22
30
|
alwaysOn: z.boolean().default(false),
|
|
23
31
|
})
|
|
24
32
|
.strict();
|
|
25
|
-
/**
|
|
26
|
-
* Score every candidate skill against the turn context. Returns the
|
|
27
|
-
* top-K matches sorted by score (descending). `alwaysOn` skills always
|
|
28
|
-
* score at least 1; `chipTrigger` skills score 100 when chips present;
|
|
29
|
-
* keywords add 1 per matching keyword (case-insensitive substring).
|
|
30
|
-
*
|
|
31
|
-
* Skills with score 0 are dropped — they never engage automatically.
|
|
32
|
-
*/
|
|
33
|
-
export function matchSkills(input) {
|
|
34
|
-
const topK = input.topK ?? 5;
|
|
35
|
-
const lowered = input.userMessage.toLowerCase();
|
|
36
|
-
const matches = [];
|
|
37
|
-
for (const s of input.skills) {
|
|
38
|
-
let score = 0;
|
|
39
|
-
const reasons = [];
|
|
40
|
-
if (s.hints.alwaysOn) {
|
|
41
|
-
score += 1;
|
|
42
|
-
reasons.push("always-on");
|
|
43
|
-
}
|
|
44
|
-
if (s.hints.chipTrigger && input.chipCount > 0) {
|
|
45
|
-
score += 100;
|
|
46
|
-
reasons.push(`element chips (${input.chipCount})`);
|
|
47
|
-
}
|
|
48
|
-
const matchedKeywords = [];
|
|
49
|
-
for (const k of s.hints.keywords) {
|
|
50
|
-
const needle = k.toLowerCase();
|
|
51
|
-
if (needle.length > 0 && lowered.includes(needle)) {
|
|
52
|
-
matchedKeywords.push(k);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (matchedKeywords.length > 0) {
|
|
56
|
-
score += matchedKeywords.length;
|
|
57
|
-
const sample = matchedKeywords.slice(0, 3).join(", ");
|
|
58
|
-
reasons.push(matchedKeywords.length > 3
|
|
59
|
-
? `keywords: ${sample}, +${matchedKeywords.length - 3}`
|
|
60
|
-
: `keywords: ${sample}`);
|
|
61
|
-
}
|
|
62
|
-
if (score > 0) {
|
|
63
|
-
matches.push({
|
|
64
|
-
skillId: s.id,
|
|
65
|
-
slug: s.slug,
|
|
66
|
-
displayName: s.displayName,
|
|
67
|
-
score,
|
|
68
|
-
rationale: reasons.join("; "),
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
matches.sort((a, b) => b.score - a.score || a.slug.localeCompare(b.slug));
|
|
73
|
-
return matches.slice(0, topK);
|
|
74
|
-
}
|
|
75
|
-
export function resolveEngagements(input) {
|
|
76
|
-
const disengaged = new Set();
|
|
77
|
-
const engagedManual = new Map();
|
|
78
|
-
if (input.manualOverrides) {
|
|
79
|
-
for (const m of input.manualOverrides) {
|
|
80
|
-
if (m.intent === "disengage") {
|
|
81
|
-
disengaged.add(m.skillId);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
engagedManual.set(m.skillId, {
|
|
85
|
-
skillId: m.skillId,
|
|
86
|
-
slug: m.slug,
|
|
87
|
-
displayName: m.displayName,
|
|
88
|
-
source: "manual",
|
|
89
|
-
rationale: "manually engaged",
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
const out = new Map();
|
|
95
|
-
// Pinned defaults first (lowest priority among engaged).
|
|
96
|
-
for (const p of input.pinnedSkills) {
|
|
97
|
-
if (disengaged.has(p.skillId))
|
|
98
|
-
continue;
|
|
99
|
-
out.set(p.skillId, {
|
|
100
|
-
skillId: p.skillId,
|
|
101
|
-
slug: p.slug,
|
|
102
|
-
displayName: p.displayName,
|
|
103
|
-
source: "pinned",
|
|
104
|
-
rationale: "pinned default",
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
// Auto matches — overwrite pinned label only if not already in out.
|
|
108
|
-
for (const a of input.autoMatches) {
|
|
109
|
-
if (disengaged.has(a.skillId))
|
|
110
|
-
continue;
|
|
111
|
-
if (out.has(a.skillId))
|
|
112
|
-
continue;
|
|
113
|
-
out.set(a.skillId, {
|
|
114
|
-
skillId: a.skillId,
|
|
115
|
-
slug: a.slug,
|
|
116
|
-
displayName: a.displayName,
|
|
117
|
-
source: "auto",
|
|
118
|
-
rationale: a.rationale,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
// Manual engages always win — always overwrite.
|
|
122
|
-
for (const m of engagedManual.values()) {
|
|
123
|
-
out.set(m.skillId, m);
|
|
124
|
-
}
|
|
125
|
-
return [...out.values()];
|
|
126
|
-
}
|
|
127
33
|
//# sourceMappingURL=skills.js.map
|
package/dist/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN;;;;OAIG;IACH,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,0EAA0E;IAC1E,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACvC,kFAAkF;IAClF,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACrC,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip XHTML-style CDATA-section guard delimiters from module HTML,
|
|
3
|
+
* preserving the content they wrapped. Returns the input unchanged when
|
|
4
|
+
* no guard is present (fast path for the overwhelming clean-HTML case).
|
|
5
|
+
*/
|
|
6
|
+
export declare function stripCdataGuards(html: string): string;
|
|
7
|
+
//# sourceMappingURL=strip-cdata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-cdata.d.ts","sourceRoot":"","sources":["../src/strip-cdata.ts"],"names":[],"mappings":"AAyCA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* CDATA-guard normalization for module HTML.
|
|
4
|
+
*
|
|
5
|
+
* The AI sometimes authors chrome/layout module HTML with XHTML-style
|
|
6
|
+
* CDATA guards wrapping inline `<style>`/`<script>` content — e.g.
|
|
7
|
+
*
|
|
8
|
+
* <script>
|
|
9
|
+
* //<![CDATA[
|
|
10
|
+
* doStuff();
|
|
11
|
+
* //]]>
|
|
12
|
+
* </script>
|
|
13
|
+
*
|
|
14
|
+
* or the block-comment / bare forms (`/*<![CDATA[* /`, `<![CDATA[`).
|
|
15
|
+
* These are legal in XHTML but MEANINGLESS in HTML5: the compose
|
|
16
|
+
* pipeline is byte-preserving by design (see `preview-scanner.ts`), so
|
|
17
|
+
* the guards survive verbatim into the rendered page. Chrome/layout
|
|
18
|
+
* modules render straight from their stored HTML (no content_instance
|
|
19
|
+
* indirection), so a bare `<![CDATA[` in the body is parsed by the
|
|
20
|
+
* browser as a bogus comment up to the first `>`, leaving a stray,
|
|
21
|
+
* visible `]]>` in the header/footer/nav.
|
|
22
|
+
*
|
|
23
|
+
* We normalize at the module-HTML write boundary (canonical) and again
|
|
24
|
+
* defensively at render, so both freshly-authored and already-stored
|
|
25
|
+
* modules stay clean. Only the DELIMITERS are removed — the wrapped
|
|
26
|
+
* CSS/JS/markup content is preserved.
|
|
27
|
+
*
|
|
28
|
+
* This is normalization of malformed authored markup, not a data
|
|
29
|
+
* fallback (CLAUDE.md §2): there is no "missing" data to point at, and
|
|
30
|
+
* the inner content is kept intact.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Matches every CDATA-guard delimiter form the model emits. The
|
|
34
|
+
* comment-wrapped variants come first so they're consumed as a unit
|
|
35
|
+
* before the bare `<![CDATA[` / `]]>` alternatives can match a subset.
|
|
36
|
+
*/
|
|
37
|
+
const CDATA_GUARDS = /\/\*\s*<!\[CDATA\[\s*\*\/|\/\*\s*\]\]>\s*\*\/|\/\/[ \t]*<!\[CDATA\[|\/\/[ \t]*\]\]>|<!\[CDATA\[|\]\]>/g;
|
|
38
|
+
/**
|
|
39
|
+
* Strip XHTML-style CDATA-section guard delimiters from module HTML,
|
|
40
|
+
* preserving the content they wrapped. Returns the input unchanged when
|
|
41
|
+
* no guard is present (fast path for the overwhelming clean-HTML case).
|
|
42
|
+
*/
|
|
43
|
+
export function stripCdataGuards(html) {
|
|
44
|
+
if (!html.includes("CDATA") && !html.includes("]]>"))
|
|
45
|
+
return html;
|
|
46
|
+
return html.replace(CDATA_GUARDS, "");
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=strip-cdata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-cdata.js","sourceRoot":"","sources":["../src/strip-cdata.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;GAIG;AACH,MAAM,YAAY,GAChB,wGAAwG,CAAC;AAE3G;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -35,18 +35,6 @@ export declare const taxonomyItem: z.ZodObject<{
|
|
|
35
35
|
parentSlug: z.ZodOptional<z.ZodString>;
|
|
36
36
|
description: z.ZodOptional<z.ZodString>;
|
|
37
37
|
}, z.core.$strict>;
|
|
38
|
-
/** One CSS variable. Renderer emits `<style>:root{--<token>: <value>;…}</style>`. */
|
|
39
|
-
export declare const themeToken: z.ZodObject<{
|
|
40
|
-
token: z.ZodString;
|
|
41
|
-
value: z.ZodString;
|
|
42
|
-
scope: z.ZodOptional<z.ZodEnum<{
|
|
43
|
-
color: "color";
|
|
44
|
-
font: "font";
|
|
45
|
-
space: "space";
|
|
46
|
-
radius: "radius";
|
|
47
|
-
shadow: "shadow";
|
|
48
|
-
}>>;
|
|
49
|
-
}, z.core.$strict>;
|
|
50
38
|
/** Flat tag — used by post taxonomies, content filtering. */
|
|
51
39
|
export declare const tagItem: z.ZodObject<{
|
|
52
40
|
slug: z.ZodString;
|
|
@@ -73,13 +61,16 @@ export declare const languageSelectorOverride: z.ZodObject<{
|
|
|
73
61
|
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
74
62
|
}, z.core.$strict>;
|
|
75
63
|
/** Discriminated kind → items array. The Query API op picks the
|
|
76
|
-
* validator at runtime by reading `kind` first.
|
|
64
|
+
* validator at runtime by reading `kind` first.
|
|
65
|
+
*
|
|
66
|
+
* v0.11.0 (#45) — `theme` is no longer a structured-set kind. The
|
|
67
|
+
* theme primitive moved to its own `themes` table with DTCG-shaped
|
|
68
|
+
* jsonb tokens; see `themes.ts` + `theme-render.ts`. */
|
|
77
69
|
export declare const structuredSetKind: z.ZodEnum<{
|
|
70
|
+
"link-list": "link-list";
|
|
78
71
|
"nav-menu": "nav-menu";
|
|
79
72
|
taxonomy: "taxonomy";
|
|
80
|
-
theme: "theme";
|
|
81
73
|
tags: "tags";
|
|
82
|
-
"link-list": "link-list";
|
|
83
74
|
"language-selector": "language-selector";
|
|
84
75
|
}>;
|
|
85
76
|
export type StructuredSetKind = z.infer<typeof structuredSetKind>;
|
|
@@ -88,7 +79,6 @@ export type StructuredSetKind = z.infer<typeof structuredSetKind>;
|
|
|
88
79
|
export declare function validateStructuredSetItems(kind: StructuredSetKind, items: unknown): unknown[];
|
|
89
80
|
export type NavMenuItem = z.infer<typeof navMenuItem>;
|
|
90
81
|
export type TaxonomyItem = z.infer<typeof taxonomyItem>;
|
|
91
|
-
export type ThemeToken = z.infer<typeof themeToken>;
|
|
92
82
|
export type TagItem = z.infer<typeof tagItem>;
|
|
93
83
|
export type LinkListItem = z.infer<typeof linkListItem>;
|
|
94
84
|
export type LanguageSelectorOverride = z.infer<typeof languageSelectorOverride>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-sets.d.ts","sourceRoot":"","sources":["../src/structured-sets.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAUA,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,YAAY;;;;;kBAOd,CAAC;AAEZ,
|
|
1
|
+
{"version":3,"file":"structured-sets.d.ts","sourceRoot":"","sources":["../src/structured-sets.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAUA,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,YAAY;;;;;kBAOd,CAAC;AAEZ,6DAA6D;AAC7D,eAAO,MAAM,OAAO;;;;kBAaT,CAAC;AAEZ,gDAAgD;AAChD,eAAO,MAAM,YAAY;;;;kBAMd,CAAC;AAEZ;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;kBAS1B,CAAC;AAEZ;;;;;yDAKyD;AACzD,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE;8EAC8E;AAC9E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAsB7F;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAC9C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,oEAAoE;IACpE,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;CAC9D,GAAG,MAAM,CAgBT"}
|
package/dist/structured-sets.js
CHANGED
|
@@ -36,18 +36,6 @@ export const taxonomyItem = z
|
|
|
36
36
|
description: z.string().max(2000).optional(),
|
|
37
37
|
})
|
|
38
38
|
.strict();
|
|
39
|
-
/** One CSS variable. Renderer emits `<style>:root{--<token>: <value>;…}</style>`. */
|
|
40
|
-
export const themeToken = z
|
|
41
|
-
.object({
|
|
42
|
-
token: z
|
|
43
|
-
.string()
|
|
44
|
-
.min(1)
|
|
45
|
-
.max(80)
|
|
46
|
-
.regex(/^[a-z][a-z0-9-]*$/, "lowercase kebab-case"),
|
|
47
|
-
value: z.string().min(1).max(500),
|
|
48
|
-
scope: z.enum(["color", "font", "space", "radius", "shadow"]).optional(),
|
|
49
|
-
})
|
|
50
|
-
.strict();
|
|
51
39
|
/** Flat tag — used by post taxonomies, content filtering. */
|
|
52
40
|
export const tagItem = z
|
|
53
41
|
.object({
|
|
@@ -90,11 +78,14 @@ export const languageSelectorOverride = z
|
|
|
90
78
|
})
|
|
91
79
|
.strict();
|
|
92
80
|
/** Discriminated kind → items array. The Query API op picks the
|
|
93
|
-
* validator at runtime by reading `kind` first.
|
|
81
|
+
* validator at runtime by reading `kind` first.
|
|
82
|
+
*
|
|
83
|
+
* v0.11.0 (#45) — `theme` is no longer a structured-set kind. The
|
|
84
|
+
* theme primitive moved to its own `themes` table with DTCG-shaped
|
|
85
|
+
* jsonb tokens; see `themes.ts` + `theme-render.ts`. */
|
|
94
86
|
export const structuredSetKind = z.enum([
|
|
95
87
|
"nav-menu",
|
|
96
88
|
"taxonomy",
|
|
97
|
-
"theme",
|
|
98
89
|
"tags",
|
|
99
90
|
"link-list",
|
|
100
91
|
"language-selector",
|
|
@@ -116,8 +107,6 @@ export function validateStructuredSetItems(kind, items) {
|
|
|
116
107
|
return items.map((it) => navMenuItem.parse(it));
|
|
117
108
|
case "taxonomy":
|
|
118
109
|
return items.map((it) => taxonomyItem.parse(it));
|
|
119
|
-
case "theme":
|
|
120
|
-
return items.map((it) => themeToken.parse(it));
|
|
121
110
|
case "tags":
|
|
122
111
|
return items.map((it) => tagItem.parse(it));
|
|
123
112
|
case "link-list":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-sets.js","sourceRoot":"","sources":["../src/structured-sets.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAOnB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACf,CAAC;KACE,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC;KACD,MAAM,EAAE,CACZ,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,
|
|
1
|
+
{"version":3,"file":"structured-sets.js","sourceRoot":"","sources":["../src/structured-sets.ts"],"names":[],"mappings":"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"}
|
package/dist/subagents.d.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* verdict ({pass, issues[], suggestions[]})
|
|
16
16
|
* tree ({tree: [...], rationale})
|
|
17
17
|
* freeform ({text})
|
|
18
|
+
* rebuild ({pages[], contentNotes[], skipped[], summary})
|
|
18
19
|
* - parseSubagentResult — pulls JSON out of the subagent's final
|
|
19
20
|
* assistant message (handles ```json fences) and validates against
|
|
20
21
|
* the requested shape.
|
|
@@ -24,8 +25,41 @@ declare const expectedReturnShape: z.ZodEnum<{
|
|
|
24
25
|
verdict: "verdict";
|
|
25
26
|
tree: "tree";
|
|
26
27
|
freeform: "freeform";
|
|
28
|
+
rebuild: "rebuild";
|
|
27
29
|
}>;
|
|
28
30
|
export type ExpectedReturnShape = z.infer<typeof expectedReturnShape>;
|
|
31
|
+
/**
|
|
32
|
+
* Run #8 R2a — the SINGLE source of truth for the return-shape enum.
|
|
33
|
+
*
|
|
34
|
+
* The spawn tools' hand-written provider `inputSchema` (JSON Schema) must
|
|
35
|
+
* carry the same enum values as this Zod schema; in run #8 the live
|
|
36
|
+
* validator rejected `"rebuild"` because the runtime resolved a stale
|
|
37
|
+
* pre-#266 build of this module while the provider schema advertised the
|
|
38
|
+
* new value (issue #251 drift class, resolution flavour). Tool files
|
|
39
|
+
* derive their JSON-Schema enums from this array instead of re-typing the
|
|
40
|
+
* literals, and a unit test asserts the tool schema accepts every shape
|
|
41
|
+
* this parser knows.
|
|
42
|
+
*/
|
|
43
|
+
export declare const EXPECTED_RETURN_SHAPES: readonly ExpectedReturnShape[];
|
|
44
|
+
/**
|
|
45
|
+
* issue #306 — model tier a subagent runs at. `inherit` (the default) is
|
|
46
|
+
* today's behaviour: the child reuses the parent chat's provider+model.
|
|
47
|
+
* `mid` / `small` route the child onto a cheaper model the Owner mapped
|
|
48
|
+
* in the active provider's config (`ai_providers.config.modelTiers`).
|
|
49
|
+
* The tier VOCABULARY is deliberately abstract — tool results and
|
|
50
|
+
* editor-facing text never name the underlying model (CLAUDE.md §2:
|
|
51
|
+
* provider brand never surfaces in the editor chat UI); concrete model
|
|
52
|
+
* ids appear only on Owner surfaces (security panel, cost dashboard).
|
|
53
|
+
*/
|
|
54
|
+
export declare const subagentModelTier: z.ZodEnum<{
|
|
55
|
+
small: "small";
|
|
56
|
+
inherit: "inherit";
|
|
57
|
+
mid: "mid";
|
|
58
|
+
}>;
|
|
59
|
+
export type SubagentModelTier = z.infer<typeof subagentModelTier>;
|
|
60
|
+
/** Single source of truth for the tier enum (same #251 drift-guard pattern
|
|
61
|
+
* as EXPECTED_RETURN_SHAPES — tool JSON schemas derive from this array). */
|
|
62
|
+
export declare const SUBAGENT_MODEL_TIERS: readonly SubagentModelTier[];
|
|
29
63
|
/**
|
|
30
64
|
* One subagent spec. The parent supplies role + task + optional
|
|
31
65
|
* narrowing. The handler creates the ephemeral chat session, appends
|
|
@@ -41,9 +75,15 @@ export declare const subagentSpec: z.ZodObject<{
|
|
|
41
75
|
verdict: "verdict";
|
|
42
76
|
tree: "tree";
|
|
43
77
|
freeform: "freeform";
|
|
78
|
+
rebuild: "rebuild";
|
|
44
79
|
}>>;
|
|
45
|
-
maxCostMicrocents: z.
|
|
80
|
+
maxCostMicrocents: z.ZodOptional<z.ZodNumber>;
|
|
46
81
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
82
|
+
tier: z.ZodDefault<z.ZodEnum<{
|
|
83
|
+
small: "small";
|
|
84
|
+
inherit: "inherit";
|
|
85
|
+
mid: "mid";
|
|
86
|
+
}>>;
|
|
47
87
|
activePageId: z.ZodOptional<z.ZodString>;
|
|
48
88
|
}, z.core.$strict>;
|
|
49
89
|
export type SubagentSpec = z.infer<typeof subagentSpec>;
|
|
@@ -55,9 +95,15 @@ export declare const spawnSubagentToolInput: z.ZodObject<{
|
|
|
55
95
|
verdict: "verdict";
|
|
56
96
|
tree: "tree";
|
|
57
97
|
freeform: "freeform";
|
|
98
|
+
rebuild: "rebuild";
|
|
58
99
|
}>>;
|
|
59
|
-
maxCostMicrocents: z.
|
|
100
|
+
maxCostMicrocents: z.ZodOptional<z.ZodNumber>;
|
|
60
101
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
102
|
+
tier: z.ZodDefault<z.ZodEnum<{
|
|
103
|
+
small: "small";
|
|
104
|
+
inherit: "inherit";
|
|
105
|
+
mid: "mid";
|
|
106
|
+
}>>;
|
|
61
107
|
activePageId: z.ZodOptional<z.ZodString>;
|
|
62
108
|
}, z.core.$strict>;
|
|
63
109
|
export type SpawnSubagentToolInput = SubagentSpec;
|
|
@@ -70,9 +116,15 @@ export declare const spawnSubagentsToolInput: z.ZodObject<{
|
|
|
70
116
|
verdict: "verdict";
|
|
71
117
|
tree: "tree";
|
|
72
118
|
freeform: "freeform";
|
|
119
|
+
rebuild: "rebuild";
|
|
73
120
|
}>>;
|
|
74
|
-
maxCostMicrocents: z.
|
|
121
|
+
maxCostMicrocents: z.ZodOptional<z.ZodNumber>;
|
|
75
122
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
123
|
+
tier: z.ZodDefault<z.ZodEnum<{
|
|
124
|
+
small: "small";
|
|
125
|
+
inherit: "inherit";
|
|
126
|
+
mid: "mid";
|
|
127
|
+
}>>;
|
|
76
128
|
activePageId: z.ZodOptional<z.ZodString>;
|
|
77
129
|
}, z.core.$strict>>;
|
|
78
130
|
}, z.core.$strict>;
|
|
@@ -92,6 +144,35 @@ export declare const freeformReturnShape: z.ZodObject<{
|
|
|
92
144
|
text: z.ZodString;
|
|
93
145
|
}, z.core.$strict>;
|
|
94
146
|
export type FreeformReturn = z.infer<typeof freeformReturnShape>;
|
|
147
|
+
/**
|
|
148
|
+
* issue #264 — compact per-page rebuild summary for migration fan-out
|
|
149
|
+
* subagents. The orchestrator chat's context grows by THIS shape only
|
|
150
|
+
* (never by the subagent's full transcript), so it is deliberately
|
|
151
|
+
* bounded: per-page status + short notes, deliberate omissions with a
|
|
152
|
+
* reason, and a one-paragraph summary. `pageId`/`slug` are both
|
|
153
|
+
* optional because a subagent that failed before resolving a page can
|
|
154
|
+
* still report the slug it was briefed with (or vice versa).
|
|
155
|
+
*/
|
|
156
|
+
export declare const rebuildReturnShape: z.ZodObject<{
|
|
157
|
+
pages: z.ZodArray<z.ZodObject<{
|
|
158
|
+
pageId: z.ZodOptional<z.ZodString>;
|
|
159
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
160
|
+
status: z.ZodEnum<{
|
|
161
|
+
rebuilt: "rebuilt";
|
|
162
|
+
skipped: "skipped";
|
|
163
|
+
failed: "failed";
|
|
164
|
+
needs_escalation: "needs_escalation";
|
|
165
|
+
}>;
|
|
166
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
167
|
+
}, z.core.$strict>>;
|
|
168
|
+
contentNotes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
169
|
+
skipped: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
170
|
+
item: z.ZodString;
|
|
171
|
+
reason: z.ZodString;
|
|
172
|
+
}, z.core.$strict>>>;
|
|
173
|
+
summary: z.ZodDefault<z.ZodString>;
|
|
174
|
+
}, z.core.$strict>;
|
|
175
|
+
export type RebuildReturn = z.infer<typeof rebuildReturnShape>;
|
|
95
176
|
export type ParseSuccess = {
|
|
96
177
|
ok: true;
|
|
97
178
|
shape: "verdict";
|
|
@@ -104,11 +185,28 @@ export type ParseSuccess = {
|
|
|
104
185
|
ok: true;
|
|
105
186
|
shape: "freeform";
|
|
106
187
|
value: FreeformReturn;
|
|
188
|
+
} | {
|
|
189
|
+
ok: true;
|
|
190
|
+
shape: "rebuild";
|
|
191
|
+
value: RebuildReturn;
|
|
107
192
|
};
|
|
108
193
|
export type ParseResult = ParseSuccess | {
|
|
109
194
|
ok: false;
|
|
110
195
|
error: string;
|
|
111
196
|
};
|
|
197
|
+
/**
|
|
198
|
+
* Run #10 D2 — validate an ALREADY-PARSED value against the requested
|
|
199
|
+
* return shape. This is the structured half of the result channel: the
|
|
200
|
+
* `submit_result` tool hands the payload straight from the tool-call
|
|
201
|
+
* arguments (already JSON — no fence-stripping, no brace-balancing),
|
|
202
|
+
* so the "response is not valid JSON" failure class cannot occur.
|
|
203
|
+
* `parseSubagentResult` (final-text fallback) delegates here after its
|
|
204
|
+
* JSON extraction.
|
|
205
|
+
*
|
|
206
|
+
* For `freeform`, accepts `{text: "..."}` OR a bare string (wrapped as
|
|
207
|
+
* `{text}`) so the model can pass its prose directly.
|
|
208
|
+
*/
|
|
209
|
+
export declare function validateSubagentResultValue(value: unknown, shape: ExpectedReturnShape): ParseResult;
|
|
112
210
|
/**
|
|
113
211
|
* Pull JSON out of the subagent's final assistant text and validate
|
|
114
212
|
* against the requested shape. On schema mismatch, returns
|
|
@@ -117,6 +215,10 @@ export type ParseResult = ParseSuccess | {
|
|
|
117
215
|
* For `freeform`, accepts EITHER `{text: "..."}` JSON or raw text;
|
|
118
216
|
* raw text is wrapped as `{text: rawText}` so the caller always gets
|
|
119
217
|
* the same shape.
|
|
218
|
+
*
|
|
219
|
+
* Run #10 D2 — this is now the FALLBACK channel; the canonical path is
|
|
220
|
+
* the child calling `submit_result`, whose payload is validated by
|
|
221
|
+
* `validateSubagentResultValue` without any text extraction.
|
|
120
222
|
*/
|
|
121
223
|
export declare function parseSubagentResult(text: string, shape: ExpectedReturnShape): ParseResult;
|
|
122
224
|
export {};
|
package/dist/subagents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,mBAAmB;;;;;EAAqD,CAAC;AAC/E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAAgC,CAAC;AAElG;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;EAAsC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE;6EAC6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EAA8B,CAAC;AAE5F;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;kBAwDd,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;kBAAe,CAAC;AACnD,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAElD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;kBAUzB,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAM9E,eAAO,MAAM,kBAAkB;;;;kBAQpB,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE/D,eAAO,MAAM,eAAe;;;kBAKjB,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAEzD,eAAO,MAAM,mBAAmB;;kBAIrB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;kBAuDpB,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAiD/D,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACpD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACtD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,mBAAmB,GACzB,WAAW,CAiFb;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,WAAW,CA0BzF"}
|