@cat-factory/agents 0.40.13 → 0.41.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.
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The narrow slice of the checkout-free repo API the detector needs — a `RepoFiles`
3
+ * satisfies it structurally, and a test supplies an in-memory fake. A MISSING path yields
4
+ * `null` / `[]`, so the heuristics degrade gracefully on partial repos. A genuine read
5
+ * fault (auth/permission revoked, rate limit, transport error) may THROW — the real
6
+ * GitHub/GitLab reader throws on any non-404 status. The detector NEVER propagates it: the
7
+ * shared {@link BudgetedRepoScanner} swallows the fault (records it, keeps scanning
8
+ * best-effort) and this probe simply ignores `readFault`, so it can only ever return
9
+ * defaults, never reject — a prefill must never block create.
10
+ */
11
+ export interface DocsRepoReader {
12
+ getFile(path: string, gitRef?: string): Promise<{
13
+ content: string;
14
+ } | null>;
15
+ listDirectory(path: string, gitRef?: string): Promise<{
16
+ name: string;
17
+ type: string;
18
+ path: string;
19
+ }[]>;
20
+ }
21
+ /**
22
+ * The detected documentation layout — the docs-refresh preset's placement DEFAULTS plus two
23
+ * intel facts for the analyst. All fields are always present (a partial/unreadable repo
24
+ * yields the conventional defaults), so the caller never has to null-check.
25
+ */
26
+ export interface DocsLayoutDetection {
27
+ /**
28
+ * How docs are placed: `root` (one top-level docs tree) vs `per-service` (each package
29
+ * carries its own docs — the monorepo shape). Drives the `placementMode` form default.
30
+ */
31
+ placementMode: 'root' | 'per-service';
32
+ /** The repo-relative docs root directory (no trailing slash), e.g. `docs`. */
33
+ docsRoot: string;
34
+ /** The repo-relative diagrams directory (no trailing slash), e.g. `docs/diagrams`. */
35
+ diagramsDir: string;
36
+ /** The repo-relative business-rules directory (no trailing slash), e.g. `docs/business-logic`. */
37
+ businessRulesDir: string;
38
+ /**
39
+ * Whether the repo already carries mermaid diagram SOURCES — a standalone `.mmd`/`.mermaid`
40
+ * file or a `mermaid` directory in a scanned location. A hint for the analyst; it is NOT
41
+ * authoritative (embedded ```mermaid fences inside `.md` files aren't detected — reading
42
+ * doc bodies is out of the probe's checkout-free budget; the analyst finds those after clone).
43
+ */
44
+ hasExistingMermaid: boolean;
45
+ /**
46
+ * Whether the repo looks like a monorepo (a workspace manifest, a `workspaces` package.json
47
+ * field, or a conventional `packages`/`apps`/`services`/`libs` directory). Distinct from
48
+ * `placementMode`: a monorepo can still keep one root docs tree.
49
+ */
50
+ monorepo: boolean;
51
+ }
52
+ /**
53
+ * Detect the documentation layout of a repo for the docs-refresh preset's form prefill.
54
+ *
55
+ * Deterministic, bounded (a hard read budget), and TOTAL — it never throws and never rejects,
56
+ * so an unwired GitHub / a partial or unreadable repo simply yields the conventional defaults
57
+ * (`root` placement, `docs`, `docs/diagrams`, `docs/business-logic`). The result is a set of
58
+ * non-binding FORM DEFAULTS; the user's edits win and the analyst confirms placement at
59
+ * planning time.
60
+ */
61
+ export declare function detectDocsLayout(reader: DocsRepoReader): Promise<DocsLayoutDetection>;
62
+ //# sourceMappingURL=docs-detect.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-detect.logic.d.ts","sourceRoot":"","sources":["../../../src/presets/docs-refresh/docs-detect.logic.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC3E,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CAC3D;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,aAAa,EAAE,MAAM,GAAG,aAAa,CAAA;IACrC,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB;AAyGD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiD3F"}
@@ -0,0 +1,170 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Documentation-refresh preset — repo LAYOUT AUTODETECTION (slice 6).
3
+ //
4
+ // A deterministic, bounded, checkout-free heuristic that proposes the docs-refresh
5
+ // preset's placement DEFAULTS (where docs live, whether the repo documents per-service,
6
+ // which subfolders hold diagrams / business rules) by reading a targeted, tiny slice of
7
+ // the repo over a {@link DocsRepoReader}-shaped reader. No LLM, no clone — just a handful
8
+ // of directory listings plus the root workspace manifests. Mirrors the spirit of
9
+ // `provision-detect.logic.ts` (integrations): high-confidence facts are inferred
10
+ // deterministically; everything is a NON-BINDING prefill the user (and later the analyst
11
+ // during planning) confirms or overrides.
12
+ //
13
+ // This is the pure logic behind the preset's `detect` hook (slice 8), which maps the
14
+ // result onto the form's `InitiativePresetInputs`. Detected values are FORM DEFAULTS: a
15
+ // user edit wins, and both freeze on `presetInputs` at create. The analyst confirms /
16
+ // refines placement at planning time and records deviations as `decisions` — it never
17
+ // silently rewrites the frozen inputs. See
18
+ // `docs/initiatives/initiative-presets-and-docs-refresh.md` (slice 6).
19
+ // ---------------------------------------------------------------------------
20
+ import { BudgetedRepoScanner, joinRepoPath } from '@cat-factory/kernel';
21
+ const DEFAULT_DOCS_ROOT = 'docs';
22
+ // Root directory names that hold documentation, most-conventional first (first present wins).
23
+ const DOCS_ROOT_NAMES = ['docs', 'doc', 'documentation'];
24
+ // Subfolder names (under the docs root) that hold diagrams, most-conventional first.
25
+ const DIAGRAMS_DIR_NAMES = ['diagrams', 'diagram', 'architecture', 'arch'];
26
+ // Subfolder names (under the docs root) that hold business rules / domain docs. `business-logic`
27
+ // first — it matches the `business-documenter` agent's default placement.
28
+ const BUSINESS_RULES_DIR_NAMES = ['business-logic', 'business', 'domain', 'rules'];
29
+ // Conventional monorepo package roots — listed to sample per-service docs placement.
30
+ const WORKSPACE_DIRS = ['packages', 'apps', 'services', 'libs'];
31
+ // Root files that declare a workspace/monorepo (presence alone is the signal — never parsed).
32
+ const MONOREPO_MANIFESTS = [
33
+ 'pnpm-workspace.yaml',
34
+ 'lerna.json',
35
+ 'turbo.json',
36
+ 'nx.json',
37
+ 'rush.json',
38
+ ];
39
+ // Standalone mermaid source extensions (directory-listing signal for `hasExistingMermaid`).
40
+ const MERMAID_FILE_RE = /\.(mmd|mermaid)$/i;
41
+ // The most packages we sample when deciding per-service placement — bounds the read fan-out.
42
+ const MAX_SAMPLED_PACKAGES = 6;
43
+ // Hard ceiling on reads so a pathological repo can't fan out without bound. A typical repo
44
+ // resolves in ~10 reads (root + a root manifest + the docs tree + a few sampled packages); the
45
+ // cap only bites on a decoy-heavy tree, where the scan simply stops and returns what it has.
46
+ const READ_BUDGET = 32;
47
+ /** Immediate child directory names of a listing. */
48
+ function dirNames(entries) {
49
+ return new Set(entries.filter((e) => e.type === 'dir').map((e) => e.name));
50
+ }
51
+ /** Immediate child file names of a listing. */
52
+ function fileNames(entries) {
53
+ return new Set(entries.filter((e) => e.type !== 'dir').map((e) => e.name));
54
+ }
55
+ /** The first of `candidates` present as a child dir of `dirs`, else undefined. */
56
+ function firstPresent(dirs, candidates) {
57
+ return candidates.find((c) => dirs.has(c));
58
+ }
59
+ /** True when any listed entry is a standalone mermaid source file or a `mermaid` directory. */
60
+ function listingHasMermaid(entries) {
61
+ return entries.some((e) => (e.type === 'dir' && e.name === 'mermaid') ||
62
+ (e.type !== 'dir' && MERMAID_FILE_RE.test(e.name)));
63
+ }
64
+ /**
65
+ * Read the root `package.json` and report whether it declares a `workspaces` field (the
66
+ * npm/yarn/bun monorepo marker). Best-effort: an absent/unparseable manifest ⇒ false. This is
67
+ * the only file the probe reads beyond directory listings, and it is a root workspace manifest.
68
+ */
69
+ async function hasNpmWorkspaces(scanner) {
70
+ const content = await scanner.getFile('package.json');
71
+ if (!content)
72
+ return false;
73
+ try {
74
+ const pkg = JSON.parse(content);
75
+ const ws = pkg.workspaces;
76
+ // Array form (`["packages/*"]`) OR yarn's object form (`{ packages: ["packages/*"] }`) — a
77
+ // monorepo marker only when it actually declares globs. An empty `[]`/`{}` (or `{ nohoist }`
78
+ // with no `packages`) declares no workspaces, so it's not a monorepo signal.
79
+ if (Array.isArray(ws))
80
+ return ws.length > 0;
81
+ if (ws !== null && typeof ws === 'object') {
82
+ const packages = ws.packages;
83
+ return Array.isArray(packages) && packages.length > 0;
84
+ }
85
+ return false;
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ /**
92
+ * Sample up to {@link MAX_SAMPLED_PACKAGES} packages across the present workspace dirs and count
93
+ * how many carry their own docs directory. Returns the vote (`sampled`/`withDocs`) plus whether
94
+ * any sampled package held a mermaid source. Bounded by the sample cap + the global read budget.
95
+ */
96
+ async function samplePackageDocs(scanner, workspaceDirs) {
97
+ let sampled = 0;
98
+ let withDocs = 0;
99
+ let mermaid = false;
100
+ for (const wsDir of workspaceDirs) {
101
+ if (sampled >= MAX_SAMPLED_PACKAGES)
102
+ break;
103
+ const children = (await scanner.listDir(wsDir)).filter((e) => e.type === 'dir');
104
+ for (const child of children) {
105
+ if (sampled >= MAX_SAMPLED_PACKAGES)
106
+ break;
107
+ sampled++;
108
+ const entries = await scanner.listDir(joinRepoPath(wsDir, child.name));
109
+ if (firstPresent(dirNames(entries), DOCS_ROOT_NAMES))
110
+ withDocs++;
111
+ if (listingHasMermaid(entries))
112
+ mermaid = true;
113
+ }
114
+ }
115
+ return { sampled, withDocs, mermaid };
116
+ }
117
+ /**
118
+ * Detect the documentation layout of a repo for the docs-refresh preset's form prefill.
119
+ *
120
+ * Deterministic, bounded (a hard read budget), and TOTAL — it never throws and never rejects,
121
+ * so an unwired GitHub / a partial or unreadable repo simply yields the conventional defaults
122
+ * (`root` placement, `docs`, `docs/diagrams`, `docs/business-logic`). The result is a set of
123
+ * non-binding FORM DEFAULTS; the user's edits win and the analyst confirms placement at
124
+ * planning time.
125
+ */
126
+ export async function detectDocsLayout(reader) {
127
+ const scanner = new BudgetedRepoScanner(reader, READ_BUDGET);
128
+ const rootEntries = await scanner.listDir('');
129
+ const rootDirs = dirNames(rootEntries);
130
+ const rootFiles = fileNames(rootEntries);
131
+ // --- docs root -------------------------------------------------------------------------------
132
+ const docsRoot = firstPresent(rootDirs, DOCS_ROOT_NAMES) ?? DEFAULT_DOCS_ROOT;
133
+ let diagramsDir = joinRepoPath(docsRoot, 'diagrams');
134
+ let businessRulesDir = joinRepoPath(docsRoot, 'business-logic');
135
+ // Root listing signal: a standalone `.mmd`/`.mermaid` file OR a `mermaid` directory (the root
136
+ // is a scanned location, so both halves of the signal count here — not just the file half).
137
+ let hasExistingMermaid = listingHasMermaid(rootEntries);
138
+ // --- known subfolders under the docs root ----------------------------------------------------
139
+ if (rootDirs.has(docsRoot)) {
140
+ const docsEntries = await scanner.listDir(docsRoot);
141
+ const docsDirs = dirNames(docsEntries);
142
+ const diagramsChild = firstPresent(docsDirs, DIAGRAMS_DIR_NAMES);
143
+ if (diagramsChild)
144
+ diagramsDir = joinRepoPath(docsRoot, diagramsChild);
145
+ const businessChild = firstPresent(docsDirs, BUSINESS_RULES_DIR_NAMES);
146
+ if (businessChild)
147
+ businessRulesDir = joinRepoPath(docsRoot, businessChild);
148
+ hasExistingMermaid = hasExistingMermaid || listingHasMermaid(docsEntries);
149
+ // Peek inside the diagrams dir once for standalone mermaid sources (budget permitting).
150
+ if (diagramsChild && !hasExistingMermaid) {
151
+ hasExistingMermaid = listingHasMermaid(await scanner.listDir(joinRepoPath(docsRoot, diagramsChild)));
152
+ }
153
+ }
154
+ // --- monorepo shape + per-service placement --------------------------------------------------
155
+ const workspaceDirs = WORKSPACE_DIRS.filter((d) => rootDirs.has(d));
156
+ const monorepoManifest = MONOREPO_MANIFESTS.some((m) => rootFiles.has(m)) || (await hasNpmWorkspaces(scanner));
157
+ const monorepo = monorepoManifest || workspaceDirs.length > 0;
158
+ let placementMode = 'root';
159
+ if (monorepo && workspaceDirs.length > 0) {
160
+ const { sampled, withDocs, mermaid } = await samplePackageDocs(scanner, workspaceDirs);
161
+ hasExistingMermaid = hasExistingMermaid || mermaid;
162
+ // Per-service when MOST sampled packages document themselves (a strict majority — an even
163
+ // split stays on the safe `root` default). A monorepo we can't sample (manifest-only, no
164
+ // conventional package dir) stays `root` too — the safe, common default.
165
+ if (sampled > 0 && withDocs * 2 > sampled)
166
+ placementMode = 'per-service';
167
+ }
168
+ return { placementMode, docsRoot, diagramsDir, businessRulesDir, hasExistingMermaid, monorepo };
169
+ }
170
+ //# sourceMappingURL=docs-detect.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-detect.logic.js","sourceRoot":"","sources":["../../../src/presets/docs-refresh/docs-detect.logic.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,EAAE;AACF,mFAAmF;AACnF,wFAAwF;AACxF,wFAAwF;AACxF,0FAA0F;AAC1F,iFAAiF;AACjF,iFAAiF;AACjF,yFAAyF;AACzF,0CAA0C;AAC1C,EAAE;AACF,qFAAqF;AACrF,wFAAwF;AACxF,sFAAsF;AACtF,sFAAsF;AACtF,2CAA2C;AAC3C,uEAAuE;AACvE,8EAA8E;AAE9E,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAoDvE,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAChC,8FAA8F;AAC9F,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA;AACxD,qFAAqF;AACrF,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;AAC1E,iGAAiG;AACjG,0EAA0E;AAC1E,MAAM,wBAAwB,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AAClF,qFAAqF;AACrF,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AAC/D,8FAA8F;AAC9F,MAAM,kBAAkB,GAAG;IACzB,qBAAqB;IACrB,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,WAAW;CACZ,CAAA;AACD,4FAA4F;AAC5F,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAE3C,6FAA6F;AAC7F,MAAM,oBAAoB,GAAG,CAAC,CAAA;AAC9B,2FAA2F;AAC3F,+FAA+F;AAC/F,6FAA6F;AAC7F,MAAM,WAAW,GAAG,EAAE,CAAA;AAEtB,oDAAoD;AACpD,SAAS,QAAQ,CAAC,OAAyC;IACzD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,+CAA+C;AAC/C,SAAS,SAAS,CAAC,OAAyC;IAC1D,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,IAAiB,EAAE,UAAoB;IAC3D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,+FAA+F;AAC/F,SAAS,iBAAiB,CAAC,OAAyC;IAClE,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QAC1C,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACrD,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IACrD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAA;QAC3D,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAA;QACzB,2FAA2F;QAC3F,6FAA6F;QAC7F,6EAA6E;QAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;QAC3C,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAI,EAA6B,CAAC,QAAQ,CAAA;YACxD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAC9B,OAA4B,EAC5B,aAAuB;IAEvB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,OAAO,IAAI,oBAAoB;YAAE,MAAK;QAC1C,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;QAC/E,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,IAAI,oBAAoB;gBAAE,MAAK;YAC1C,OAAO,EAAE,CAAA;YACT,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YACtE,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;gBAAE,QAAQ,EAAE,CAAA;YAChE,IAAI,iBAAiB,CAAC,OAAO,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAA;QAChD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAsB;IAC3D,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAE5D,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;IAExC,gGAAgG;IAChG,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,iBAAiB,CAAA;IAC7E,IAAI,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACpD,IAAI,gBAAgB,GAAG,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IAC/D,8FAA8F;IAC9F,4FAA4F;IAC5F,IAAI,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAEvD,gGAAgG;IAChG,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;QAChE,IAAI,aAAa;YAAE,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QACtE,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAA;QACtE,IAAI,aAAa;YAAE,gBAAgB,GAAG,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAC3E,kBAAkB,GAAG,kBAAkB,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAA;QACzE,wFAAwF;QACxF,IAAI,aAAa,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzC,kBAAkB,GAAG,iBAAiB,CACpC,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAC7D,CAAA;QACH,CAAC;IACH,CAAC;IAED,gGAAgG;IAChG,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,gBAAgB,GACpB,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IACvF,MAAM,QAAQ,GAAG,gBAAgB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7D,IAAI,aAAa,GAA2B,MAAM,CAAA;IAClD,IAAI,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QACtF,kBAAkB,GAAG,kBAAkB,IAAI,OAAO,CAAA;QAClD,0FAA0F;QAC1F,yFAAyF;QACzF,yEAAyE;QACzE,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,OAAO;YAAE,aAAa,GAAG,aAAa,CAAA;IAC1E,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;AACjG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/agents",
3
- "version": "0.40.13",
3
+ "version": "0.41.0",
4
4
  "description": "Agent catalog, routing, prompts and fragment library for the Agent Architecture Board.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,14 +31,14 @@
31
31
  "ai": "^6.0.219",
32
32
  "handlebars": "^4.7.9",
33
33
  "valibot": "^1.4.2",
34
- "@cat-factory/contracts": "0.117.0",
35
- "@cat-factory/kernel": "0.104.4",
36
- "@cat-factory/prompt-fragments": "0.10.26"
34
+ "@cat-factory/contracts": "0.118.0",
35
+ "@cat-factory/kernel": "0.105.0",
36
+ "@cat-factory/prompt-fragments": "0.10.27"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.1-rc",
40
40
  "vitest": "^4.1.9",
41
- "@cat-factory/caching": "0.6.4"
41
+ "@cat-factory/caching": "0.6.5"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -b tsconfig.build.json",