@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.
Files changed (241) hide show
  1. package/dist/ai-tools.d.ts +291 -231
  2. package/dist/ai-tools.d.ts.map +1 -1
  3. package/dist/ai-tools.js +349 -281
  4. package/dist/ai-tools.js.map +1 -1
  5. package/dist/auth-forms.d.ts.map +1 -1
  6. package/dist/auth-forms.js +4 -1
  7. package/dist/auth-forms.js.map +1 -1
  8. package/dist/base-css.d.ts +24 -0
  9. package/dist/base-css.d.ts.map +1 -0
  10. package/dist/base-css.js +28 -0
  11. package/dist/base-css.js.map +1 -0
  12. package/dist/build-page.d.ts +330 -0
  13. package/dist/build-page.d.ts.map +1 -0
  14. package/dist/build-page.js +282 -0
  15. package/dist/build-page.js.map +1 -0
  16. package/dist/content.d.ts +322 -9
  17. package/dist/content.d.ts.map +1 -1
  18. package/dist/content.js +354 -11
  19. package/dist/content.js.map +1 -1
  20. package/dist/css-gradient-scan.d.ts +14 -0
  21. package/dist/css-gradient-scan.d.ts.map +1 -0
  22. package/dist/css-gradient-scan.js +81 -0
  23. package/dist/css-gradient-scan.js.map +1 -0
  24. package/dist/css-var-scan.d.ts +56 -0
  25. package/dist/css-var-scan.d.ts.map +1 -0
  26. package/dist/css-var-scan.js +97 -0
  27. package/dist/css-var-scan.js.map +1 -0
  28. package/dist/design-manifest.d.ts +36 -0
  29. package/dist/design-manifest.d.ts.map +1 -0
  30. package/dist/design-manifest.js +90 -0
  31. package/dist/design-manifest.js.map +1 -0
  32. package/dist/fonts.d.ts +89 -0
  33. package/dist/fonts.d.ts.map +1 -0
  34. package/dist/fonts.js +241 -0
  35. package/dist/fonts.js.map +1 -0
  36. package/dist/genesis-inventory.d.ts +32 -0
  37. package/dist/genesis-inventory.d.ts.map +1 -0
  38. package/dist/genesis-inventory.js +186 -0
  39. package/dist/genesis-inventory.js.map +1 -0
  40. package/dist/genesis.d.ts +62 -0
  41. package/dist/genesis.d.ts.map +1 -0
  42. package/dist/genesis.js +78 -0
  43. package/dist/genesis.js.map +1 -0
  44. package/dist/i18n.d.ts +44 -1
  45. package/dist/i18n.d.ts.map +1 -1
  46. package/dist/i18n.js +72 -6
  47. package/dist/i18n.js.map +1 -1
  48. package/dist/index.d.ts +27 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +27 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/interactions.d.ts +23 -0
  53. package/dist/interactions.d.ts.map +1 -0
  54. package/dist/interactions.js +44 -0
  55. package/dist/interactions.js.map +1 -0
  56. package/dist/media.d.ts +101 -16
  57. package/dist/media.d.ts.map +1 -1
  58. package/dist/media.js +126 -15
  59. package/dist/media.js.map +1 -1
  60. package/dist/page-log.d.ts +94 -0
  61. package/dist/page-log.d.ts.map +1 -0
  62. package/dist/page-log.js +111 -0
  63. package/dist/page-log.js.map +1 -0
  64. package/dist/preview-compose.d.ts +79 -0
  65. package/dist/preview-compose.d.ts.map +1 -1
  66. package/dist/preview-compose.js +155 -25
  67. package/dist/preview-compose.js.map +1 -1
  68. package/dist/proposal-status.d.ts +40 -0
  69. package/dist/proposal-status.d.ts.map +1 -0
  70. package/dist/proposal-status.js +34 -0
  71. package/dist/proposal-status.js.map +1 -0
  72. package/dist/responsive-images.d.ts +64 -0
  73. package/dist/responsive-images.d.ts.map +1 -0
  74. package/dist/responsive-images.js +98 -0
  75. package/dist/responsive-images.js.map +1 -0
  76. package/dist/safe-keys.d.ts +9 -0
  77. package/dist/safe-keys.d.ts.map +1 -0
  78. package/dist/safe-keys.js +20 -0
  79. package/dist/safe-keys.js.map +1 -0
  80. package/dist/seo.d.ts +8 -0
  81. package/dist/seo.d.ts.map +1 -1
  82. package/dist/seo.js +3 -1
  83. package/dist/seo.js.map +1 -1
  84. package/dist/skills.d.ts +14 -68
  85. package/dist/skills.d.ts.map +1 -1
  86. package/dist/skills.js +19 -113
  87. package/dist/skills.js.map +1 -1
  88. package/dist/strip-cdata.d.ts +7 -0
  89. package/dist/strip-cdata.d.ts.map +1 -0
  90. package/dist/strip-cdata.js +48 -0
  91. package/dist/strip-cdata.js.map +1 -0
  92. package/dist/structured-sets.d.ts +6 -16
  93. package/dist/structured-sets.d.ts.map +1 -1
  94. package/dist/structured-sets.js +5 -16
  95. package/dist/structured-sets.js.map +1 -1
  96. package/dist/subagents.d.ts +105 -3
  97. package/dist/subagents.d.ts.map +1 -1
  98. package/dist/subagents.js +224 -41
  99. package/dist/subagents.js.map +1 -1
  100. package/dist/template-engine.d.ts +85 -0
  101. package/dist/template-engine.d.ts.map +1 -0
  102. package/dist/template-engine.js +403 -0
  103. package/dist/template-engine.js.map +1 -0
  104. package/dist/theme-importers/auto-detect.d.ts +26 -0
  105. package/dist/theme-importers/auto-detect.d.ts.map +1 -0
  106. package/dist/theme-importers/auto-detect.js +42 -0
  107. package/dist/theme-importers/auto-detect.js.map +1 -0
  108. package/dist/theme-importers/css-comments.d.ts +12 -0
  109. package/dist/theme-importers/css-comments.d.ts.map +1 -0
  110. package/dist/theme-importers/css-comments.js +15 -0
  111. package/dist/theme-importers/css-comments.js.map +1 -0
  112. package/dist/theme-importers/dtcg.d.ts +46 -0
  113. package/dist/theme-importers/dtcg.d.ts.map +1 -0
  114. package/dist/theme-importers/dtcg.js +111 -0
  115. package/dist/theme-importers/dtcg.js.map +1 -0
  116. package/dist/theme-importers/loose.d.ts +3 -0
  117. package/dist/theme-importers/loose.d.ts.map +1 -0
  118. package/dist/theme-importers/loose.js +76 -0
  119. package/dist/theme-importers/loose.js.map +1 -0
  120. package/dist/theme-importers/shadcn.d.ts +24 -0
  121. package/dist/theme-importers/shadcn.d.ts.map +1 -0
  122. package/dist/theme-importers/shadcn.js +135 -0
  123. package/dist/theme-importers/shadcn.js.map +1 -0
  124. package/dist/theme-importers/style-dictionary.d.ts +17 -0
  125. package/dist/theme-importers/style-dictionary.d.ts.map +1 -0
  126. package/dist/theme-importers/style-dictionary.js +125 -0
  127. package/dist/theme-importers/style-dictionary.js.map +1 -0
  128. package/dist/theme-importers/tailwind.d.ts +3 -0
  129. package/dist/theme-importers/tailwind.d.ts.map +1 -0
  130. package/dist/theme-importers/tailwind.js +218 -0
  131. package/dist/theme-importers/tailwind.js.map +1 -0
  132. package/dist/theme-literal-binding.d.ts +37 -0
  133. package/dist/theme-literal-binding.d.ts.map +1 -0
  134. package/dist/theme-literal-binding.js +138 -0
  135. package/dist/theme-literal-binding.js.map +1 -0
  136. package/dist/theme-normalize.d.ts +31 -0
  137. package/dist/theme-normalize.d.ts.map +1 -0
  138. package/dist/theme-normalize.js +587 -0
  139. package/dist/theme-normalize.js.map +1 -0
  140. package/dist/theme-ramp.d.ts +55 -0
  141. package/dist/theme-ramp.d.ts.map +1 -0
  142. package/dist/theme-ramp.js +149 -0
  143. package/dist/theme-ramp.js.map +1 -0
  144. package/dist/theme-render.d.ts +105 -0
  145. package/dist/theme-render.d.ts.map +1 -0
  146. package/dist/theme-render.js +441 -0
  147. package/dist/theme-render.js.map +1 -0
  148. package/dist/themes-errors.d.ts +109 -0
  149. package/dist/themes-errors.d.ts.map +1 -0
  150. package/dist/themes-errors.js +170 -0
  151. package/dist/themes-errors.js.map +1 -0
  152. package/dist/themes.d.ts +343 -0
  153. package/dist/themes.d.ts.map +1 -0
  154. package/dist/themes.js +697 -0
  155. package/dist/themes.js.map +1 -0
  156. package/dist/version.d.ts +7 -4
  157. package/dist/version.d.ts.map +1 -1
  158. package/dist/version.js +6 -3
  159. package/dist/version.js.map +1 -1
  160. package/package.json +10 -2
  161. package/src/__tests__/redos-hardening.test.ts +160 -0
  162. package/src/ai-tools-add-module-modes.test.ts +106 -0
  163. package/src/ai-tools-position.test.ts +134 -0
  164. package/src/ai-tools.test.ts +81 -0
  165. package/src/ai-tools.ts +1179 -0
  166. package/src/auth-forms.ts +36 -0
  167. package/src/base-css.ts +30 -0
  168. package/src/build-page.test.ts +228 -0
  169. package/src/build-page.ts +319 -0
  170. package/src/cap-failures.ts +67 -0
  171. package/src/content.test.ts +170 -0
  172. package/src/content.ts +620 -0
  173. package/src/context.ts +43 -0
  174. package/src/css-gradient-scan.ts +88 -0
  175. package/src/css-var-scan.test.ts +96 -0
  176. package/src/css-var-scan.ts +144 -0
  177. package/src/derive-module-type.test.ts +80 -0
  178. package/src/design-manifest.ts +93 -0
  179. package/src/fonts.test.ts +157 -0
  180. package/src/fonts.ts +296 -0
  181. package/src/genesis-inventory.test.ts +86 -0
  182. package/src/genesis-inventory.ts +215 -0
  183. package/src/genesis-sanitize.test.ts +35 -0
  184. package/src/genesis.ts +87 -0
  185. package/src/i18n.test.ts +274 -0
  186. package/src/i18n.ts +269 -0
  187. package/src/index.test.ts +10 -0
  188. package/src/index.ts +59 -0
  189. package/src/interactions.ts +48 -0
  190. package/src/logger.ts +147 -0
  191. package/src/media.test.ts +160 -0
  192. package/src/media.ts +355 -0
  193. package/src/page-log.test.ts +163 -0
  194. package/src/page-log.ts +124 -0
  195. package/src/preview-compose.test.ts +602 -0
  196. package/src/preview-compose.ts +709 -0
  197. package/src/preview-scanner.test.ts +96 -0
  198. package/src/preview-scanner.ts +214 -0
  199. package/src/proposal-status.test.ts +69 -0
  200. package/src/proposal-status.ts +40 -0
  201. package/src/responsive-images.test.ts +104 -0
  202. package/src/responsive-images.ts +151 -0
  203. package/src/result.ts +29 -0
  204. package/src/safe-keys.ts +21 -0
  205. package/src/seo.test.ts +234 -0
  206. package/src/seo.ts +261 -0
  207. package/src/skills.ts +48 -0
  208. package/src/snapshots.test.ts +80 -0
  209. package/src/snapshots.ts +81 -0
  210. package/src/strip-cdata.test.ts +41 -0
  211. package/src/strip-cdata.ts +50 -0
  212. package/src/structured-sets.ts +180 -0
  213. package/src/subagents.test.ts +262 -0
  214. package/src/subagents.ts +432 -0
  215. package/src/template-engine.test.ts +379 -0
  216. package/src/template-engine.ts +520 -0
  217. package/src/theme-gradient.test.ts +92 -0
  218. package/src/theme-importers/__tests__/proto-pollution.test.ts +54 -0
  219. package/src/theme-importers/auto-detect.ts +84 -0
  220. package/src/theme-importers/css-comments.ts +15 -0
  221. package/src/theme-importers/dtcg.ts +106 -0
  222. package/src/theme-importers/loose.ts +76 -0
  223. package/src/theme-importers/shadcn.ts +133 -0
  224. package/src/theme-importers/style-dictionary.ts +125 -0
  225. package/src/theme-importers/tailwind.ts +217 -0
  226. package/src/theme-literal-binding.test.ts +71 -0
  227. package/src/theme-literal-binding.ts +159 -0
  228. package/src/theme-motion.test.ts +115 -0
  229. package/src/theme-normalize-envelope.test.ts +43 -0
  230. package/src/theme-normalize-gradient.test.ts +135 -0
  231. package/src/theme-normalize.ts +661 -0
  232. package/src/theme-ramp.ts +187 -0
  233. package/src/theme-render-sanitize.test.ts +45 -0
  234. package/src/theme-render.test.ts +119 -0
  235. package/src/theme-render.ts +487 -0
  236. package/src/theme-shadow.test.ts +56 -0
  237. package/src/themes-errors.ts +199 -0
  238. package/src/themes.ts +842 -0
  239. package/src/translation.test.ts +160 -0
  240. package/src/translation.ts +295 -0
  241. 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
- * P10A — skill auto-matcher (pure function).
3
+ * Skill metadata shapes shared across the Query API + chat-runner.
4
4
  *
5
- * Scores site-active skills against the current chat turn's user
6
- * message + element-reference chips. Top-K matches go into
7
- * `auto`-source engagements; pinned defaults + manual overrides
8
- * compose with the matcher output in the chat-runner.
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
- * Scoring is intentionally simple — keyword + chip-trigger + always-on
11
- * — to keep this layer LLM-free. The matcher runs every turn; an
12
- * LLM-based matcher would double provider cost without obvious gain.
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
- /** Lowercase substrings that boost the score when present in the user message. */
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
- /** When true, engage automatically whenever element-ref chips are attached. */
27
+ /** Listed under the index's "when element chips are attached" callout. */
20
28
  chipTrigger: z.boolean().default(false),
21
- /** When true, always engage on every call (e.g. brand-voice-guard). */
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
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
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,qFAAqF;AACrF,eAAO,MAAM,UAAU;;;;;;;;;;kBAUZ,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;oDACoD;AACpD,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,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,CAwB7F;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,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,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"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"structured-sets.js","sourceRoot":"","sources":["../src/structured-sets.ts"],"names":[],"mappings":"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"}
@@ -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.ZodDefault<z.ZodNumber>;
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.ZodDefault<z.ZodNumber>;
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.ZodDefault<z.ZodNumber>;
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 {};
@@ -1 +1 @@
1
- {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,mBAAmB;;;;EAA0C,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;kBA4Bd,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;;;;;;;;;;;;;;kBAIzB,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;AAiDjE,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,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,WAAW,CA8DzF"}
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"}