@cat-factory/agents 0.60.0 → 0.61.1

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 (31) hide show
  1. package/dist/fragmentLibrary/FragmentSourceService.d.ts.map +1 -1
  2. package/dist/fragmentLibrary/FragmentSourceService.js +49 -66
  3. package/dist/fragmentLibrary/FragmentSourceService.js.map +1 -1
  4. package/dist/fragmentLibrary/fragment-source.logic.d.ts.map +1 -1
  5. package/dist/fragmentLibrary/fragment-source.logic.js +4 -69
  6. package/dist/fragmentLibrary/fragment-source.logic.js.map +1 -1
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/repoSourceSync/frontmatter.d.ts +12 -0
  12. package/dist/repoSourceSync/frontmatter.d.ts.map +1 -0
  13. package/dist/repoSourceSync/frontmatter.js +70 -0
  14. package/dist/repoSourceSync/frontmatter.js.map +1 -0
  15. package/dist/repoSourceSync/repo-source-sync.d.ts +88 -0
  16. package/dist/repoSourceSync/repo-source-sync.d.ts.map +1 -0
  17. package/dist/repoSourceSync/repo-source-sync.js +50 -0
  18. package/dist/repoSourceSync/repo-source-sync.js.map +1 -0
  19. package/dist/skillLibrary/SkillCatalogService.d.ts +35 -0
  20. package/dist/skillLibrary/SkillCatalogService.d.ts.map +1 -0
  21. package/dist/skillLibrary/SkillCatalogService.js +52 -0
  22. package/dist/skillLibrary/SkillCatalogService.js.map +1 -0
  23. package/dist/skillLibrary/SkillSourceService.d.ts +67 -0
  24. package/dist/skillLibrary/SkillSourceService.d.ts.map +1 -0
  25. package/dist/skillLibrary/SkillSourceService.js +237 -0
  26. package/dist/skillLibrary/SkillSourceService.js.map +1 -0
  27. package/dist/skillLibrary/skill-source.logic.d.ts +21 -0
  28. package/dist/skillLibrary/skill-source.logic.d.ts.map +1 -0
  29. package/dist/skillLibrary/skill-source.logic.js +43 -0
  30. package/dist/skillLibrary/skill-source.logic.js.map +1 -0
  31. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"FragmentSourceService.d.ts","sourceRoot":"","sources":["../../src/fragmentLibrary/FragmentSourceService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAA;AACzE,OAAO,KAAK,EAEV,wBAAwB,EAExB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAG5B;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAC1C,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE3B,MAAM,WAAW,iCAAiC;IAChD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,YAAY,EAAE,YAAY,CAAA;IAC1B,qBAAqB,EAAE,6BAA6B,CAAA;IACpD,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,iCAAiC,EAAI;IAExE,2DAA2D;IACrD,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAGnF;IAED,qFAAqF;IAC/E,IAAI,CACR,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiBzB;IAED,gEAAgE;IAC1D,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;IAED;;;;;OAKG;IACG,IAAI,CACR,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CA+E7B;IAED;;;;;;OAMG;IACG,MAAM,CACV,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAc/B;YAIa,OAAO;IAmBrB,uFAAuF;YACzE,mBAAmB;IAUjC;;;OAGG;YACW,YAAY;IAc1B;;;;OAIG;YACW,SAAS;CAmDxB"}
1
+ {"version":3,"file":"FragmentSourceService.d.ts","sourceRoot":"","sources":["../../src/fragmentLibrary/FragmentSourceService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAA;AACzE,OAAO,KAAK,EAEV,wBAAwB,EAExB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAQ5B;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAC1C,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE3B,MAAM,WAAW,iCAAiC;IAChD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,YAAY,EAAE,YAAY,CAAA;IAC1B,qBAAqB,EAAE,6BAA6B,CAAA;IACpD,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrF;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,iCAAiC,EAAI;IAExE,2DAA2D;IACrD,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAGnF;IAED,qFAAqF;IAC/E,IAAI,CACR,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiBzB;IAED,gEAAgE;IAC1D,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;IAED;;;;;OAKG;IACG,IAAI,CACR,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CA0D7B;IAED;;;;;;OAMG;IACG,MAAM,CACV,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAI/B;YAIa,OAAO;IAmBrB,uFAAuF;YACzE,mBAAmB;IAUjC;;;OAGG;YACW,YAAY;IAc1B;;;;OAIG;YACW,SAAS;CAmDxB"}
@@ -1,5 +1,6 @@
1
1
  import { NotFoundError, ValidationError, assertFound } from '@cat-factory/kernel';
2
2
  import { isMarkdownFile, parseFragmentMarkdown, slugFromPath } from './fragment-source.logic.js';
3
+ import { normalizeDirPath, probeRepoSourceStatus, syncRepoSource, } from '../repoSourceSync/repo-source-sync.js';
3
4
  /**
4
5
  * Repo-sourced fragments (ADR 0006 §3, §6): link a repo directory of Markdown
5
6
  * guidelines to a tier, resync it (read the tree, upsert changed files, tombstone
@@ -33,7 +34,7 @@ export class FragmentSourceService {
33
34
  repoOwner: input.repoOwner.trim(),
34
35
  repoName: input.repoName.trim(),
35
36
  gitRef: input.gitRef?.trim() || 'HEAD',
36
- dirPath: normalizeDir(input.dirPath),
37
+ dirPath: normalizeDirPath(input.dirPath),
37
38
  lastSyncedCommit: null,
38
39
  lastSyncedAt: null,
39
40
  createdAt: now,
@@ -63,63 +64,53 @@ export class FragmentSourceService {
63
64
  async sync(ownerKind, ownerId, sourceId) {
64
65
  const source = await this.require(ownerKind, ownerId, sourceId);
65
66
  // The installation is invariant across the whole sync — resolve it ONCE here,
66
- // never per file (the per-entry reads below share it).
67
+ // never per file (the per-entry reads share it via the shared helper).
67
68
  const installationId = await this.requireInstallation(source);
68
- // Pin the dir's head commit BEFORE reading so we never record a newer commit than
69
- // the content we actually pulled: if a commit lands mid-sync we read at (and stamp)
70
- // the pinned sha, and the next status flags it as changed rather than silently
71
- // treating stale content as current. Read the tree at that exact commit when known.
72
- const headCommit = await this.deps.githubClient.latestCommitSha(installationId, { owner: source.repoOwner, repo: source.repoName }, source.dirPath, source.gitRef);
73
- const readRef = headCommit ?? source.gitRef;
74
- const entries = await this.readMarkdown(source, installationId, readRef);
75
- const existing = await this.deps.promptFragmentRepository.listBySource(sourceId);
76
- const existingByPath = new Map(existing.map((f) => [f.sourcePath ?? '', f]));
77
- // Keyed by fragment id too, so `syncEntry` can inherit an existing fragment's
78
- // version/createdAt when a RENAME reaches it under a new path (path lookup misses,
79
- // id lookup hits) rather than silently resetting them to defaults.
80
- const existingById = new Map(existing.map((f) => [f.fragmentId, f]));
81
- const now = this.deps.clock.now();
82
- let upserted = 0;
83
- let unchanged = 0;
84
- // The fragment ids the CURRENT tree produces the survivors. Keyed by id, not
85
- // path: a rename of a file that pins an explicit frontmatter `id` keeps the same
86
- // fragment id under a new path, and a path-keyed sweep would tombstone the row
87
- // the rename just updated. Conversely a file whose explicit `id` changed leaves
88
- // its OLD id unproduced, which an id-keyed sweep correctly retires.
89
- const liveIds = new Set();
90
- for (const entry of entries) {
91
- const prior = existingByPath.get(entry.path);
92
- if (prior && prior.sourceSha === entry.sha) {
93
- unchanged++;
94
- liveIds.add(prior.fragmentId);
95
- continue;
96
- }
97
- const syncedId = await this.syncEntry(source, entry, existingById, now, installationId, readRef);
98
- if (syncedId) {
99
- liveIds.add(syncedId);
100
- upserted++;
101
- }
102
- else if (prior) {
103
- // Unreadable/unparseable this round: keep the prior fragment alive rather
104
- // than retiring guidance over a transient read or an in-progress edit.
105
- liveIds.add(prior.fragmentId);
106
- }
107
- }
108
- // Tombstone fragments the current tree no longer produces (file removed upstream,
109
- // or its explicit frontmatter `id` changed).
110
- let tombstoned = 0;
111
- for (const f of existing) {
112
- if (!liveIds.has(f.fragmentId)) {
113
- await this.deps.promptFragmentRepository.softDelete(f.ownerKind, f.ownerId, f.fragmentId, now);
114
- tombstoned++;
115
- }
116
- }
117
- await this.deps.fragmentSourceRepository.updateSyncState(source.id, headCommit, now);
118
- // Invalidate AFTER the sync state commits, and only when fragments actually
119
- // changed — a no-op resync must not churn every peer's cached catalog.
120
- if (upserted > 0 || tombstoned > 0)
121
- await this.deps.invalidateCatalog?.(ownerKind, ownerId);
122
- return { upserted, tombstoned, unchanged, lastSyncedCommit: headCommit };
69
+ // The shared repo-source engine (repoSourceSync) owns the mechanics pin the head
70
+ // commit before reading, sweep tombstones by produced id, stamp the sync state,
71
+ // invalidate only when a row changed. The fragment differentiator is the reconcile:
72
+ // one Markdown file per fragment, change-detected by blob sha.
73
+ return syncRepoSource({
74
+ source,
75
+ installationId,
76
+ githubClient: this.deps.githubClient,
77
+ now: this.deps.clock.now(),
78
+ listExisting: () => this.deps.promptFragmentRepository.listBySource(sourceId),
79
+ existingId: (f) => f.fragmentId,
80
+ reconcile: async ({ readRef, now }, existing) => {
81
+ const entries = await this.readMarkdown(source, installationId, readRef);
82
+ const existingByPath = new Map(existing.map((f) => [f.sourcePath ?? '', f]));
83
+ // Keyed by fragment id too, so `syncEntry` can inherit an existing fragment's
84
+ // version/createdAt when a RENAME reaches it under a new path (path lookup misses,
85
+ // id lookup hits) rather than silently resetting them to defaults.
86
+ const existingById = new Map(existing.map((f) => [f.fragmentId, f]));
87
+ const liveIds = new Set();
88
+ let upserted = 0;
89
+ let unchanged = 0;
90
+ for (const entry of entries) {
91
+ const prior = existingByPath.get(entry.path);
92
+ if (prior && prior.sourceSha === entry.sha) {
93
+ unchanged++;
94
+ liveIds.add(prior.fragmentId);
95
+ continue;
96
+ }
97
+ const syncedId = await this.syncEntry(source, entry, existingById, now, installationId, readRef);
98
+ if (syncedId) {
99
+ liveIds.add(syncedId);
100
+ upserted++;
101
+ }
102
+ else if (prior) {
103
+ // Unreadable/unparseable this round: keep the prior fragment alive rather
104
+ // than retiring guidance over a transient read or an in-progress edit.
105
+ liveIds.add(prior.fragmentId);
106
+ }
107
+ }
108
+ return { liveIds, upserted, unchanged };
109
+ },
110
+ tombstone: (f, now) => this.deps.promptFragmentRepository.softDelete(f.ownerKind, f.ownerId, f.fragmentId, now),
111
+ updateSyncState: (commit, now) => this.deps.fragmentSourceRepository.updateSyncState(source.id, commit, now),
112
+ invalidate: () => this.deps.invalidateCatalog?.(ownerKind, ownerId) ?? Promise.resolve(),
113
+ });
123
114
  }
124
115
  /**
125
116
  * Lightweight "check for changes": read only the source dir's current head commit sha
@@ -131,12 +122,7 @@ export class FragmentSourceService {
131
122
  async status(ownerKind, ownerId, sourceId) {
132
123
  const source = await this.require(ownerKind, ownerId, sourceId);
133
124
  const installationId = await this.requireInstallation(source);
134
- const remoteCommit = await this.deps.githubClient.latestCommitSha(installationId, { owner: source.repoOwner, repo: source.repoName }, source.dirPath, source.gitRef);
135
- return {
136
- changed: remoteCommit !== source.lastSyncedCommit,
137
- lastSyncedCommit: source.lastSyncedCommit,
138
- remoteCommit,
139
- };
125
+ return probeRepoSourceStatus({ source, installationId, githubClient: this.deps.githubClient });
140
126
  }
141
127
  // --- internals ----------------------------------------------------------
142
128
  async require(ownerKind, ownerId, sourceId) {
@@ -212,9 +198,6 @@ export class FragmentSourceService {
212
198
  return fragmentId;
213
199
  }
214
200
  }
215
- function normalizeDir(dirPath) {
216
- return (dirPath ?? '').replace(/^\/+|\/+$/g, '');
217
- }
218
201
  function toWire(record) {
219
202
  return {
220
203
  id: record.id,
@@ -1 +1 @@
1
- {"version":3,"file":"FragmentSourceService.js","sourceRoot":"","sources":["../../src/fragmentLibrary/FragmentSourceService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FragmentSourceService.js","sourceRoot":"","sources":["../../src/fragmentLibrary/FragmentSourceService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-source.logic.d.ts","sourceRoot":"","sources":["../../src/fragmentLibrary/fragment-source.logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAmB5D,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAwB9F"}
1
+ {"version":3,"file":"fragment-source.logic.d.ts","sourceRoot":"","sources":["../../src/fragmentLibrary/fragment-source.logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAoB5D,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAwB9F"}
@@ -1,8 +1,9 @@
1
+ import { parseSimpleYaml, splitFrontmatter, str, strArray } from '../repoSourceSync/frontmatter.js';
1
2
  // Pure logic for repo-sourced fragments (ADR 0006 §4): parse one Markdown file
2
3
  // with YAML frontmatter into a fragment, plus the small helpers the sync flow
3
- // needs (slugging an id from a path, recognising Markdown files). No I/O lives here
4
- // so it is unit-testable. Staleness is a commit-sha probe (see FragmentSourceService),
5
- // so no directory-digest helper lives here any more.
4
+ // needs (slugging an id from a path, recognising Markdown files). The generic
5
+ // frontmatter split + small-YAML parse are shared with the skill library
6
+ // (repoSourceSync/frontmatter). No I/O lives here so it is unit-testable.
6
7
  const BLOCK_TYPES = [
7
8
  'frontend',
8
9
  'service',
@@ -61,72 +62,6 @@ export function parseFragmentMarkdown(path, content) {
61
62
  return parsed;
62
63
  }
63
64
  // --- internals ------------------------------------------------------------
64
- function splitFrontmatter(content) {
65
- // Tolerate a leading BOM/whitespace before the opening fence.
66
- const match = content.match(/^?\s*---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
67
- if (!match)
68
- return { frontmatter: '', body: content };
69
- return { frontmatter: match[1] ?? '', body: match[2] ?? '' };
70
- }
71
- /** A deliberately small YAML subset: top-level `key: value` and one nested map. */
72
- function parseSimpleYaml(text) {
73
- const out = {};
74
- const lines = text.split(/\r?\n/);
75
- let nestedKey = null;
76
- let nested = null;
77
- for (const raw of lines) {
78
- if (!raw.trim() || raw.trim().startsWith('#'))
79
- continue;
80
- const indented = /^\s+/.test(raw);
81
- const colon = raw.indexOf(':');
82
- if (colon === -1)
83
- continue;
84
- const key = raw.slice(0, colon).trim();
85
- const value = raw.slice(colon + 1).trim();
86
- if (indented && nested) {
87
- nested[key] = parseScalarOrArray(value);
88
- continue;
89
- }
90
- if (value === '') {
91
- // Opens a nested map (e.g. `appliesTo:`).
92
- nestedKey = key;
93
- nested = {};
94
- out[key] = nested;
95
- }
96
- else {
97
- nestedKey = null;
98
- nested = null;
99
- out[key] = parseScalarOrArray(value);
100
- }
101
- }
102
- void nestedKey;
103
- return out;
104
- }
105
- function parseScalarOrArray(value) {
106
- const inline = value.match(/^\[(.*)\]$/);
107
- if (inline) {
108
- return inline[1]
109
- .split(',')
110
- .map((s) => unquote(s.trim()))
111
- .filter((s) => s.length > 0);
112
- }
113
- return unquote(value);
114
- }
115
- function unquote(s) {
116
- if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
117
- return s.slice(1, -1);
118
- }
119
- return s;
120
- }
121
- function str(value) {
122
- return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
123
- }
124
- function strArray(value) {
125
- if (Array.isArray(value))
126
- return value.map((v) => String(v).trim()).filter(Boolean);
127
- const single = str(value);
128
- return single ? [single] : [];
129
- }
130
65
  function parseAppliesTo(value) {
131
66
  if (!value || typeof value !== 'object')
132
67
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-source.logic.js","sourceRoot":"","sources":["../../src/fragmentLibrary/fragment-source.logic.ts"],"names":[],"mappings":"AAGA,+EAA+E;AAC/E,8EAA8E;AAC9E,oFAAoF;AACpF,uFAAuF;AACvF,qDAAqD;AAErD,MAAM,WAAW,GAAsB;IACrC,UAAU;IACV,SAAS;IACT,KAAK;IACL,UAAU;IACV,OAAO;IACP,aAAa;IACb,UAAU;IACV,aAAa;CACd,CAAA;AAcD,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,CACL,IAAI;SACD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,CACzC,CAAA;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe;IACjE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACvD,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAE/B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,aAAa,CAAA;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,CAAA;IAClE,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzC,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAuB;QACjC,KAAK;QACL,OAAO;QACP,IAAI,EAAE,WAAW,IAAI,OAAO;KAC7B,CAAA;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACrB,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;IACnC,IAAI,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;IAC3C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,6EAA6E;AAE7E,SAAS,gBAAgB,CAAC,OAAe;IACvC,8DAA8D;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;IAC/E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACrD,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;AAC9D,CAAC;AAED,mFAAmF;AACnF,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,MAAM,GAAmC,IAAI,CAAA;IACjD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAQ;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACzC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;YACvC,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,0CAA0C;YAC1C,SAAS,GAAG,GAAG,CAAA;YACf,MAAM,GAAG,EAAE,CAAA;YACX,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAA;YAChB,MAAM,GAAG,IAAI,CAAA;YACb,GAAG,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IACD,KAAK,SAAS,CAAA;IACd,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,CAAC,CAAE;aACd,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAChC,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACpF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACzD,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAClG,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAgB,CAAA;IAC1D,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,IAAI,UAAU,CAAC,MAAM;QAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAClD,IAAI,UAAU,CAAC,MAAM;QAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAClD,OAAO,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI;SACd,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACrE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"fragment-source.logic.js","sourceRoot":"","sources":["../../src/fragmentLibrary/fragment-source.logic.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -53,4 +53,8 @@ export { DeterministicFragmentSelector } from './fragmentLibrary/DeterministicFr
53
53
  export { LlmFragmentSelector, type LlmFragmentSelectorDependencies, } from './fragmentLibrary/LlmFragmentSelector.js';
54
54
  export { type ResolvedCatalogEntry, mergeCatalog, toSelectable, entryToFragment, selectDeterministic, } from './fragmentLibrary/fragment-catalog.js';
55
55
  export * as fragmentSourceLogic from './fragmentLibrary/fragment-source.logic.js';
56
+ export { SkillSourceService, type SkillSourceServiceDependencies, type ResolveSkillInstallationId, } from './skillLibrary/SkillSourceService.js';
57
+ export { SkillCatalogService, type SkillCatalogServiceDependencies, } from './skillLibrary/SkillCatalogService.js';
58
+ export * as skillSourceLogic from './skillLibrary/skill-source.logic.js';
59
+ export { syncRepoSource, probeRepoSourceStatus, normalizeDirPath, type RepoSourceCoords, type RepoSourceSyncOutcome, type RepoSourceStatus, type ReconcileContext, type ReconcileResult, type SyncRepoSourceParams, } from './repoSourceSync/repo-source-sync.js';
56
60
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -126,4 +126,9 @@ export { DeterministicFragmentSelector } from './fragmentLibrary/DeterministicFr
126
126
  export { LlmFragmentSelector, } from './fragmentLibrary/LlmFragmentSelector.js';
127
127
  export { mergeCatalog, toSelectable, entryToFragment, selectDeterministic, } from './fragmentLibrary/fragment-catalog.js';
128
128
  export * as fragmentSourceLogic from './fragmentLibrary/fragment-source.logic.js';
129
+ // ---- repo-sourced Claude Skills library (docs/initiatives/repo-skills.md) ----
130
+ export { SkillSourceService, } from './skillLibrary/SkillSourceService.js';
131
+ export { SkillCatalogService, } from './skillLibrary/SkillCatalogService.js';
132
+ export * as skillSourceLogic from './skillLibrary/skill-source.logic.js';
133
+ export { syncRepoSource, probeRepoSourceStatus, normalizeDirPath, } from './repoSourceSync/repo-source-sync.js';
129
134
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Split a `--- … ---` frontmatter block off the front of a Markdown file. */
2
+ export declare function splitFrontmatter(content: string): {
3
+ frontmatter: string;
4
+ body: string;
5
+ };
6
+ /** A deliberately small YAML subset: top-level `key: value` and one nested map. */
7
+ export declare function parseSimpleYaml(text: string): Record<string, unknown>;
8
+ /** A trimmed non-empty string, or undefined. */
9
+ export declare function str(value: unknown): string | undefined;
10
+ /** Coerce a scalar-or-array frontmatter value into a trimmed string array. */
11
+ export declare function strArray(value: unknown): string[];
12
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/repoSourceSync/frontmatter.ts"],"names":[],"mappings":"AAKA,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKvF;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBrE;AAoBD,gDAAgD;AAChD,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEtD;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAIjD"}
@@ -0,0 +1,70 @@
1
+ // Shared YAML-frontmatter parsing for repo-sourced content (prompt fragments and
2
+ // Claude skills). Both consume a Markdown file whose leading `--- … ---` block is a
3
+ // deliberately small YAML subset — top-level `key: value`, inline `[a, b]` arrays,
4
+ // and one level of nested map (fragments' `appliesTo`). No I/O, so unit-testable.
5
+ /** Split a `--- … ---` frontmatter block off the front of a Markdown file. */
6
+ export function splitFrontmatter(content) {
7
+ // Tolerate a leading BOM/whitespace before the opening fence.
8
+ const match = content.match(/^?\s*---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
9
+ if (!match)
10
+ return { frontmatter: '', body: content };
11
+ return { frontmatter: match[1] ?? '', body: match[2] ?? '' };
12
+ }
13
+ /** A deliberately small YAML subset: top-level `key: value` and one nested map. */
14
+ export function parseSimpleYaml(text) {
15
+ const out = {};
16
+ const lines = text.split(/\r?\n/);
17
+ let nested = null;
18
+ for (const raw of lines) {
19
+ if (!raw.trim() || raw.trim().startsWith('#'))
20
+ continue;
21
+ const indented = /^\s+/.test(raw);
22
+ const colon = raw.indexOf(':');
23
+ if (colon === -1)
24
+ continue;
25
+ const key = raw.slice(0, colon).trim();
26
+ const value = raw.slice(colon + 1).trim();
27
+ if (indented && nested) {
28
+ nested[key] = parseScalarOrArray(value);
29
+ continue;
30
+ }
31
+ if (value === '') {
32
+ // Opens a nested map (e.g. `appliesTo:`).
33
+ nested = {};
34
+ out[key] = nested;
35
+ }
36
+ else {
37
+ nested = null;
38
+ out[key] = parseScalarOrArray(value);
39
+ }
40
+ }
41
+ return out;
42
+ }
43
+ function parseScalarOrArray(value) {
44
+ const inline = value.match(/^\[(.*)\]$/);
45
+ if (inline) {
46
+ return inline[1]
47
+ .split(',')
48
+ .map((s) => unquote(s.trim()))
49
+ .filter((s) => s.length > 0);
50
+ }
51
+ return unquote(value);
52
+ }
53
+ function unquote(s) {
54
+ if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
55
+ return s.slice(1, -1);
56
+ }
57
+ return s;
58
+ }
59
+ /** A trimmed non-empty string, or undefined. */
60
+ export function str(value) {
61
+ return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
62
+ }
63
+ /** Coerce a scalar-or-array frontmatter value into a trimmed string array. */
64
+ export function strArray(value) {
65
+ if (Array.isArray(value))
66
+ return value.map((v) => String(v).trim()).filter(Boolean);
67
+ const single = str(value);
68
+ return single ? [single] : [];
69
+ }
70
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/repoSourceSync/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { GitHubClient } from '@cat-factory/kernel';
2
+ /** The linked-source coordinates the sync reads from. */
3
+ export interface RepoSourceCoords {
4
+ repoOwner: string;
5
+ repoName: string;
6
+ gitRef: string;
7
+ dirPath: string;
8
+ /** Head commit sha the dir was pinned to at the last sync; null before the first. */
9
+ lastSyncedCommit: string | null;
10
+ }
11
+ /** Counts returned to the caller (and its wire result). */
12
+ export interface RepoSourceSyncOutcome {
13
+ upserted: number;
14
+ tombstoned: number;
15
+ unchanged: number;
16
+ /** Head commit sha the source dir was synced to (the freshly pinned commit). */
17
+ lastSyncedCommit: string | null;
18
+ }
19
+ /** The read context handed to a caller's {@link SyncRepoSourceParams.reconcile}. */
20
+ export interface ReconcileContext {
21
+ /** The ref to read repo content at — the pinned head commit sha, else the source's gitRef. */
22
+ readRef: string;
23
+ /**
24
+ * Whether the pinned commit advanced since the last sync. Lets a reconcile re-list
25
+ * a unit's sub-parts even when the unit's own blob sha is unchanged — a
26
+ * resource-only edit advances the dir head without touching `SKILL.md`'s sha.
27
+ */
28
+ commitMoved: boolean;
29
+ /** Epoch ms to stamp on every row written this pass. */
30
+ now: number;
31
+ }
32
+ /** What a reconcile reports back after upserting the changed units. */
33
+ export interface ReconcileResult {
34
+ /** The produced ids the CURRENT tree yields — the survivors the tombstone sweep keeps. */
35
+ liveIds: Set<string>;
36
+ upserted: number;
37
+ unchanged: number;
38
+ /**
39
+ * A changed unit was detected but could NOT be applied this round (e.g. its
40
+ * manifest read back as a 404/non-file, or parsed empty) and the prior row was kept
41
+ * alive instead of retiring it. When set, the engine does NOT advance the pinned
42
+ * commit to the new head — otherwise the source would look "caught up" while a stale
43
+ * row is served indefinitely, since a later status probe (head unchanged) would
44
+ * report no change and the next resync would short-circuit. Leaving the pin behind
45
+ * makes the next sync re-read that unit (self-healing once the transient clears).
46
+ */
47
+ incomplete?: boolean;
48
+ }
49
+ export interface SyncRepoSourceParams<Existing> {
50
+ source: RepoSourceCoords;
51
+ /** Resolved ONCE by the caller (never per unit) and passed through to reads. */
52
+ installationId: number;
53
+ githubClient: Pick<GitHubClient, 'latestCommitSha' | 'listDirectory' | 'getFileContent'>;
54
+ now: number;
55
+ /** The rows the source currently produces, for diffing + the tombstone sweep. */
56
+ listExisting: () => Promise<Existing[]>;
57
+ existingId: (e: Existing) => string;
58
+ /** Upsert the changed units at `ctx.readRef`; report the survivors + counts. */
59
+ reconcile: (ctx: ReconcileContext, existing: Existing[]) => Promise<ReconcileResult>;
60
+ tombstone: (e: Existing, now: number) => Promise<void>;
61
+ updateSyncState: (commit: string | null, now: number) => Promise<void>;
62
+ /** Called AFTER the sync state commits, only when a row actually changed. */
63
+ invalidate?: () => Promise<void>;
64
+ }
65
+ /**
66
+ * Run one resync of a repo source. Idempotent: re-running with no upstream change
67
+ * touches nothing and skips the cache invalidation.
68
+ */
69
+ export declare function syncRepoSource<Existing>(params: SyncRepoSourceParams<Existing>): Promise<RepoSourceSyncOutcome>;
70
+ export interface RepoSourceStatus {
71
+ changed: boolean;
72
+ lastSyncedCommit: string | null;
73
+ remoteCommit: string | null;
74
+ }
75
+ /**
76
+ * The lightweight "check for changes": one cheap head-commit read compared against
77
+ * the last-synced commit — no directory listing, no file bodies (already persisted
78
+ * on our side). Exact at commit granularity: any commit touching the dir advances
79
+ * the head sha.
80
+ */
81
+ export declare function probeRepoSourceStatus(params: {
82
+ source: RepoSourceCoords;
83
+ installationId: number;
84
+ githubClient: Pick<GitHubClient, 'latestCommitSha'>;
85
+ }): Promise<RepoSourceStatus>;
86
+ /** Strip leading/trailing slashes so a linked dir path is stored canonically. */
87
+ export declare function normalizeDirPath(dirPath: string | undefined): string;
88
+ //# sourceMappingURL=repo-source-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-source-sync.d.ts","sourceRoot":"","sources":["../../src/repoSourceSync/repo-source-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAgBvD,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,2DAA2D;AAC3D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,oBAAoB,CAAC,QAAQ;IAC5C,MAAM,EAAE,gBAAgB,CAAA;IACxB,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,CAAC,CAAA;IACxF,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,YAAY,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACvC,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAA;IACnC,gFAAgF;IAChF,SAAS,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IACpF,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAC3C,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACrC,OAAO,CAAC,qBAAqB,CAAC,CAkChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,gBAAgB,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;CACpD,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAa5B;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Run one resync of a repo source. Idempotent: re-running with no upstream change
3
+ * touches nothing and skips the cache invalidation.
4
+ */
5
+ export async function syncRepoSource(params) {
6
+ const { source, installationId, githubClient, now } = params;
7
+ const headCommit = await githubClient.latestCommitSha(installationId, { owner: source.repoOwner, repo: source.repoName }, source.dirPath, source.gitRef);
8
+ const readRef = headCommit ?? source.gitRef;
9
+ const commitMoved = headCommit !== source.lastSyncedCommit;
10
+ const existing = await params.listExisting();
11
+ const { liveIds, upserted, unchanged, incomplete } = await params.reconcile({ readRef, commitMoved, now }, existing);
12
+ // Tombstone the rows the current tree no longer produces (removed upstream, or an
13
+ // id-defining rename), keyed by produced id so a rename doesn't retire the row it
14
+ // just updated under a new path.
15
+ let tombstoned = 0;
16
+ for (const e of existing) {
17
+ if (!liveIds.has(params.existingId(e))) {
18
+ await params.tombstone(e, now);
19
+ tombstoned++;
20
+ }
21
+ }
22
+ // Only advance the pin when the tree was fully reconciled: an incomplete pass (a
23
+ // changed unit kept stale over an unreadable/empty manifest) leaves the pin behind so
24
+ // the next sync re-reads it rather than silently serving stale content forever.
25
+ const syncedCommit = incomplete ? source.lastSyncedCommit : headCommit;
26
+ await params.updateSyncState(syncedCommit, now);
27
+ if (upserted > 0 || tombstoned > 0)
28
+ await params.invalidate?.();
29
+ return { upserted, tombstoned, unchanged, lastSyncedCommit: syncedCommit };
30
+ }
31
+ /**
32
+ * The lightweight "check for changes": one cheap head-commit read compared against
33
+ * the last-synced commit — no directory listing, no file bodies (already persisted
34
+ * on our side). Exact at commit granularity: any commit touching the dir advances
35
+ * the head sha.
36
+ */
37
+ export async function probeRepoSourceStatus(params) {
38
+ const { source, installationId, githubClient } = params;
39
+ const remoteCommit = await githubClient.latestCommitSha(installationId, { owner: source.repoOwner, repo: source.repoName }, source.dirPath, source.gitRef);
40
+ return {
41
+ changed: remoteCommit !== source.lastSyncedCommit,
42
+ lastSyncedCommit: source.lastSyncedCommit,
43
+ remoteCommit,
44
+ };
45
+ }
46
+ /** Strip leading/trailing slashes so a linked dir path is stored canonically. */
47
+ export function normalizeDirPath(dirPath) {
48
+ return (dirPath ?? '').replace(/^\/+|\/+$/g, '');
49
+ }
50
+ //# sourceMappingURL=repo-source-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-source-sync.js","sourceRoot":"","sources":["../../src/repoSourceSync/repo-source-sync.ts"],"names":[],"mappings":"AAoFA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsC;IAEtC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;IAC5D,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,eAAe,CACnD,cAAc,EACd,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAClD,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CACd,CAAA;IACD,MAAM,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC,MAAM,CAAA;IAC3C,MAAM,WAAW,GAAG,UAAU,KAAK,MAAM,CAAC,gBAAgB,CAAA;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAA;IAC5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CACzE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,EAC7B,QAAQ,CACT,CAAA;IAED,kFAAkF;IAClF,kFAAkF;IAClF,iCAAiC;IACjC,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAC9B,UAAU,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAED,iFAAiF;IACjF,sFAAsF;IACtF,gFAAgF;IAChF,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAA;IACtE,MAAM,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IAC/C,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAA;AAC5E,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAI3C;IACC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IACvD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,eAAe,CACrD,cAAc,EACd,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAClD,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CACd,CAAA;IACD,OAAO;QACL,OAAO,EAAE,YAAY,KAAK,MAAM,CAAC,gBAAgB;QACjD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,YAAY;KACb,CAAA;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,OAA2B;IAC1D,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAClD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { AccountSkillRecord, AccountSkillRepository, GroupCacheHandle } from '@cat-factory/kernel';
2
+ import type { AccountSkill } from '@cat-factory/contracts';
3
+ export interface SkillCatalogServiceDependencies {
4
+ accountSkillRepository: AccountSkillRepository;
5
+ /**
6
+ * Read-through cache for an account's resolved skill catalog
7
+ * (`AppCaches.skillCatalog`), grouped AND keyed by account id. This service owns its
8
+ * coherence: {@link SkillSourceService} invalidates through {@link invalidate} on
9
+ * every sync/unlink that changes a skill. Absent (direct test construction) ⇒ every
10
+ * resolve loads from the repository.
11
+ */
12
+ catalogCache?: GroupCacheHandle<AccountSkillRecord[]>;
13
+ }
14
+ /**
15
+ * Reads an account's repo-sourced skill catalog (docs/initiatives/repo-skills.md).
16
+ * Skills live in ONE tier (the account), so there is no cross-tier merge — the catalog
17
+ * is simply the account's live `account_skills` rows, served through the skill-catalog
18
+ * cache when wired (a hit skips the DB read the execution path would otherwise run on
19
+ * every skill-step dispatch). The management surface reads the same catalog as wire
20
+ * {@link AccountSkill}s.
21
+ */
22
+ export declare class SkillCatalogService {
23
+ private readonly repo;
24
+ private readonly cache?;
25
+ constructor(deps: SkillCatalogServiceDependencies);
26
+ /** The account's live skills as records (the execution/read path), cached when wired. */
27
+ resolveCatalog(accountId: string): Promise<AccountSkillRecord[]>;
28
+ /** A single skill by id, or null when absent/tombstoned. */
29
+ get(accountId: string, skillId: string): Promise<AccountSkillRecord | null>;
30
+ /** The account's skills as wire {@link AccountSkill}s for the management surface. */
31
+ list(accountId: string): Promise<AccountSkill[]>;
32
+ /** Drop an account's cached catalog after a skill write. Peers drop via the bus. */
33
+ invalidate(accountId: string): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=SkillCatalogService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillCatalogService.d.ts","sourceRoot":"","sources":["../../src/skillLibrary/SkillCatalogService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,WAAW,+BAA+B;IAC9C,sBAAsB,EAAE,sBAAsB,CAAA;IAC9C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAA;CACtD;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAwC;IAE/D,YAAY,IAAI,EAAE,+BAA+B,EAGhD;IAED,yFAAyF;IACnF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAGrE;IAED,4DAA4D;IACtD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAGhF;IAED,qFAAqF;IAC/E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGrD;IAED,oFAAoF;IAC9E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjD;CACF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Reads an account's repo-sourced skill catalog (docs/initiatives/repo-skills.md).
3
+ * Skills live in ONE tier (the account), so there is no cross-tier merge — the catalog
4
+ * is simply the account's live `account_skills` rows, served through the skill-catalog
5
+ * cache when wired (a hit skips the DB read the execution path would otherwise run on
6
+ * every skill-step dispatch). The management surface reads the same catalog as wire
7
+ * {@link AccountSkill}s.
8
+ */
9
+ export class SkillCatalogService {
10
+ repo;
11
+ cache;
12
+ constructor(deps) {
13
+ this.repo = deps.accountSkillRepository;
14
+ this.cache = deps.catalogCache;
15
+ }
16
+ /** The account's live skills as records (the execution/read path), cached when wired. */
17
+ async resolveCatalog(accountId) {
18
+ if (!this.cache)
19
+ return this.repo.listByAccount(accountId);
20
+ return this.cache.get(accountId, accountId, () => this.repo.listByAccount(accountId));
21
+ }
22
+ /** A single skill by id, or null when absent/tombstoned. */
23
+ async get(accountId, skillId) {
24
+ const catalog = await this.resolveCatalog(accountId);
25
+ return catalog.find((s) => s.skillId === skillId) ?? null;
26
+ }
27
+ /** The account's skills as wire {@link AccountSkill}s for the management surface. */
28
+ async list(accountId) {
29
+ const rows = await this.resolveCatalog(accountId);
30
+ return [...rows].sort((a, b) => b.updatedAt - a.updatedAt).map(recordToWire);
31
+ }
32
+ /** Drop an account's cached catalog after a skill write. Peers drop via the bus. */
33
+ async invalidate(accountId) {
34
+ if (!this.cache)
35
+ return;
36
+ await this.cache.invalidateGroup(accountId);
37
+ }
38
+ }
39
+ function recordToWire(record) {
40
+ return {
41
+ id: record.skillId,
42
+ name: record.name,
43
+ description: record.description,
44
+ instructions: record.instructions,
45
+ resources: record.resources,
46
+ source: { sourceId: record.sourceId, path: record.sourcePath, sha: record.sourceSha },
47
+ pinnedCommit: record.pinnedCommit,
48
+ createdAt: record.createdAt,
49
+ updatedAt: record.updatedAt,
50
+ };
51
+ }
52
+ //# sourceMappingURL=SkillCatalogService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillCatalogService.js","sourceRoot":"","sources":["../../src/skillLibrary/SkillCatalogService.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IACb,IAAI,CAAwB;IAC5B,KAAK,CAAyC;IAE/D,YAAY,IAAqC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;IAChC,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;IACvF,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,OAAe;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACpD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,IAAI,CAAA;IAC3D,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC9E,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC;CACF;AAED,SAAS,YAAY,CAAC,MAA0B;IAC9C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,OAAO;QAClB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE;QACrF,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAA;AACH,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { AccountSkillRepository, Clock, GitHubClient, IdGenerator, SkillSourceRepository } from '@cat-factory/kernel';
2
+ import type { LinkSkillSourceInput, SkillSource, SkillSourceStatus, SkillSyncResult } from '@cat-factory/contracts';
3
+ /**
4
+ * Resolve the GitHub App installation id that can read an account's repos. Returns
5
+ * null when no installation is available, so a sync fails with a clear error rather
6
+ * than a silent empty pull.
7
+ */
8
+ export type ResolveSkillInstallationId = (accountId: string) => Promise<number | null>;
9
+ export interface SkillSourceServiceDependencies {
10
+ skillSourceRepository: SkillSourceRepository;
11
+ accountSkillRepository: AccountSkillRepository;
12
+ githubClient: GitHubClient;
13
+ resolveInstallationId: ResolveSkillInstallationId;
14
+ idGenerator: IdGenerator;
15
+ clock: Clock;
16
+ /**
17
+ * Drops the cached skill catalog for an account after this service mutates its
18
+ * skills (sync/unlink) — wired to {@link SkillCatalogService.invalidate} by the
19
+ * composition root. Absent (tests) ⇒ no cache to keep coherent.
20
+ */
21
+ invalidateCatalog?: (accountId: string) => Promise<void>;
22
+ }
23
+ /**
24
+ * Repo-sourced Claude skills (docs/initiatives/repo-skills.md): link a repo
25
+ * directory of skill folders to an account, resync it (read each `<skill>/SKILL.md`
26
+ * directory, upsert changed skills, tombstone removed ones), and answer the cheap
27
+ * "check for changes" without writing. Reads go through the account's existing
28
+ * GitHub installation — no new credential store. The shared repo-source engine
29
+ * (repoSourceSync) owns the sync mechanics; this service supplies the skill
30
+ * differentiator: the sync unit is a DIRECTORY (`<skill>/SKILL.md` + its sibling
31
+ * resources), and a resource-only edit (which advances the dir head commit without
32
+ * touching `SKILL.md`'s blob sha) is caught by re-reading whenever the pinned commit
33
+ * moved.
34
+ */
35
+ export declare class SkillSourceService {
36
+ private readonly deps;
37
+ constructor(deps: SkillSourceServiceDependencies);
38
+ /** Linked sources for an account + their last-synced state. */
39
+ list(accountId: string): Promise<SkillSource[]>;
40
+ /** Link a repo directory as a skill source. Does not sync (call {@link sync}). */
41
+ link(accountId: string, input: LinkSkillSourceInput): Promise<SkillSource>;
42
+ /** Unlink a source and tombstone every skill it produced. */
43
+ unlink(accountId: string, sourceId: string): Promise<void>;
44
+ /**
45
+ * Resync a source: read each `<skill>/SKILL.md` directory, upsert every skill whose
46
+ * manifest or resource manifest changed, tombstone skills no longer produced, and
47
+ * stamp the source dir's head commit. Idempotent — re-running with no upstream change
48
+ * touches nothing.
49
+ */
50
+ sync(accountId: string, sourceId: string): Promise<SkillSyncResult>;
51
+ /** Lightweight "check for changes": one head-commit read compared to the last sync. */
52
+ status(accountId: string, sourceId: string): Promise<SkillSourceStatus>;
53
+ private require;
54
+ private requireInstallation;
55
+ private listDir;
56
+ /**
57
+ * Reconcile one `<skill>/` directory:
58
+ * - 'skip' — not a skill (no `SKILL.md`), or unreadable/unparseable with NO prior row.
59
+ * - 'kept' — nothing changed; the prior row is current and untouched.
60
+ * - 'stale' — a change WAS detected but couldn't be applied this round (manifest read
61
+ * back as a 404/non-file, or parsed empty) so the prior row is kept alive rather than
62
+ * retired. Signals the caller to leave the source pin behind and retry next sync.
63
+ * - 'upserted' — the manifest or its resource manifest moved and was written.
64
+ */
65
+ private syncSkillDir;
66
+ }
67
+ //# sourceMappingURL=SkillSourceService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillSourceService.d.ts","sourceRoot":"","sources":["../../src/skillLibrary/SkillSourceService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EACtB,KAAK,EACL,YAAY,EACZ,WAAW,EAGX,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,MAAM,wBAAwB,CAAA;AAQ/B;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAEtF,MAAM,WAAW,8BAA8B;IAC7C,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,sBAAsB,EAAE,sBAAsB,CAAA;IAC9C,YAAY,EAAE,YAAY,CAAA;IAC1B,qBAAqB,EAAE,0BAA0B,CAAA;IACjD,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,8BAA8B,EAAI;IAErE,+DAA+D;IACzD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGpD;IAED,kFAAkF;IAC5E,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAgB/E;IAED,6DAA6D;IACvD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/D;IAED;;;;;OAKG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmExE;IAED,uFAAuF;IACjF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAI5E;YAIa,OAAO;YAaP,mBAAmB;IAUjC,OAAO,CAAC,OAAO;IAcf;;;;;;;;OAQG;YACW,YAAY;CAqE3B"}
@@ -0,0 +1,237 @@
1
+ import { NotFoundError, ValidationError, assertFound } from '@cat-factory/kernel';
2
+ import { normalizeDirPath, probeRepoSourceStatus, syncRepoSource, } from '../repoSourceSync/repo-source-sync.js';
3
+ import { isSkillManifest, parseSkillManifest, slugFromDirName } from './skill-source.logic.js';
4
+ /**
5
+ * Repo-sourced Claude skills (docs/initiatives/repo-skills.md): link a repo
6
+ * directory of skill folders to an account, resync it (read each `<skill>/SKILL.md`
7
+ * directory, upsert changed skills, tombstone removed ones), and answer the cheap
8
+ * "check for changes" without writing. Reads go through the account's existing
9
+ * GitHub installation — no new credential store. The shared repo-source engine
10
+ * (repoSourceSync) owns the sync mechanics; this service supplies the skill
11
+ * differentiator: the sync unit is a DIRECTORY (`<skill>/SKILL.md` + its sibling
12
+ * resources), and a resource-only edit (which advances the dir head commit without
13
+ * touching `SKILL.md`'s blob sha) is caught by re-reading whenever the pinned commit
14
+ * moved.
15
+ */
16
+ export class SkillSourceService {
17
+ deps;
18
+ constructor(deps) {
19
+ this.deps = deps;
20
+ }
21
+ /** Linked sources for an account + their last-synced state. */
22
+ async list(accountId) {
23
+ const rows = await this.deps.skillSourceRepository.listByAccount(accountId);
24
+ return rows.map(toWire);
25
+ }
26
+ /** Link a repo directory as a skill source. Does not sync (call {@link sync}). */
27
+ async link(accountId, input) {
28
+ const now = this.deps.clock.now();
29
+ const record = {
30
+ id: this.deps.idGenerator.next('sklsrc'),
31
+ accountId,
32
+ repoOwner: input.repoOwner.trim(),
33
+ repoName: input.repoName.trim(),
34
+ gitRef: input.gitRef?.trim() || 'HEAD',
35
+ dirPath: normalizeDirPath(input.dirPath),
36
+ lastSyncedCommit: null,
37
+ lastSyncedAt: null,
38
+ createdAt: now,
39
+ deletedAt: null,
40
+ };
41
+ await this.deps.skillSourceRepository.upsert(record);
42
+ return toWire(record);
43
+ }
44
+ /** Unlink a source and tombstone every skill it produced. */
45
+ async unlink(accountId, sourceId) {
46
+ const source = await this.require(accountId, sourceId);
47
+ const now = this.deps.clock.now();
48
+ const skills = await this.deps.accountSkillRepository.listBySource(sourceId);
49
+ if (skills.length > 0) {
50
+ await this.deps.accountSkillRepository.softDeleteBySource(sourceId, now);
51
+ }
52
+ await this.deps.skillSourceRepository.softDelete(source.id, now);
53
+ if (skills.length > 0)
54
+ await this.deps.invalidateCatalog?.(accountId);
55
+ }
56
+ /**
57
+ * Resync a source: read each `<skill>/SKILL.md` directory, upsert every skill whose
58
+ * manifest or resource manifest changed, tombstone skills no longer produced, and
59
+ * stamp the source dir's head commit. Idempotent — re-running with no upstream change
60
+ * touches nothing.
61
+ */
62
+ async sync(accountId, sourceId) {
63
+ const source = await this.require(accountId, sourceId);
64
+ const installationId = await this.requireInstallation(source);
65
+ return syncRepoSource({
66
+ source,
67
+ installationId,
68
+ githubClient: this.deps.githubClient,
69
+ now: this.deps.clock.now(),
70
+ listExisting: () => this.deps.accountSkillRepository.listBySource(sourceId),
71
+ existingId: (s) => s.skillId,
72
+ reconcile: async ({ readRef, commitMoved, now }, existing) => {
73
+ const existingById = new Map(existing.map((s) => [s.skillId, s]));
74
+ // The head commit for the whole source dir is the exact staleness signal: if it
75
+ // has not advanced since the last sync, NOTHING under it changed (manifest OR
76
+ // resource), so every skill is unchanged and we skip all per-directory reads.
77
+ if (!commitMoved) {
78
+ return {
79
+ liveIds: new Set(existing.map((s) => s.skillId)),
80
+ upserted: 0,
81
+ unchanged: existing.length,
82
+ };
83
+ }
84
+ // Sort dirs by name (code-unit order, locale-independent) so slug-collision
85
+ // resolution is deterministic — first wins — regardless of ICU collation.
86
+ const dirs = (await this.listDir(source, installationId, source.dirPath, readRef))
87
+ .filter((e) => e.type === 'dir')
88
+ .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
89
+ const liveIds = new Set();
90
+ const seenSlugs = new Set();
91
+ let upserted = 0;
92
+ let unchanged = 0;
93
+ let incomplete = false;
94
+ for (const dir of dirs) {
95
+ const slug = slugFromDirName(dir.name);
96
+ // Two sibling dirs can slug to the same id (e.g. `release_notes` + `release-notes`,
97
+ // both → `release-notes`). Keep the first (sorted order) deterministically and skip
98
+ // the rest rather than silently overwriting one skill's row with another's.
99
+ if (seenSlugs.has(slug))
100
+ continue;
101
+ seenSlugs.add(slug);
102
+ const skillId = `src:${source.id}:${slug}`;
103
+ const synced = await this.syncSkillDir(source, dir.name, dir.path, skillId, existingById.get(skillId), installationId, readRef, now);
104
+ if (synced === 'skip')
105
+ continue;
106
+ // 'kept'/'stale' (both keep a prior row) and 'upserted' all survive the tombstone
107
+ // sweep — a transient failure must never retire an existing skill.
108
+ liveIds.add(skillId);
109
+ if (synced === 'upserted')
110
+ upserted++;
111
+ else
112
+ unchanged++;
113
+ // A detected-but-unapplied change leaves us not caught up to the head commit.
114
+ if (synced === 'stale')
115
+ incomplete = true;
116
+ }
117
+ return { liveIds, upserted, unchanged, incomplete };
118
+ },
119
+ tombstone: (s, now) => this.deps.accountSkillRepository.softDelete(s.accountId, s.skillId, now),
120
+ updateSyncState: (commit, now) => this.deps.skillSourceRepository.updateSyncState(source.id, commit, now),
121
+ invalidate: () => this.deps.invalidateCatalog?.(accountId) ?? Promise.resolve(),
122
+ });
123
+ }
124
+ /** Lightweight "check for changes": one head-commit read compared to the last sync. */
125
+ async status(accountId, sourceId) {
126
+ const source = await this.require(accountId, sourceId);
127
+ const installationId = await this.requireInstallation(source);
128
+ return probeRepoSourceStatus({ source, installationId, githubClient: this.deps.githubClient });
129
+ }
130
+ // --- internals ----------------------------------------------------------
131
+ async require(accountId, sourceId) {
132
+ const source = assertFound(await this.deps.skillSourceRepository.get(sourceId), 'SkillSource', sourceId);
133
+ // The route gate only authorizes the addressed account, so the record must belong
134
+ // to it; 404 hides other accounts' sources entirely.
135
+ if (source.accountId !== accountId)
136
+ throw new NotFoundError('SkillSource', sourceId);
137
+ if (source.deletedAt !== null)
138
+ throw new NotFoundError('SkillSource', sourceId);
139
+ return source;
140
+ }
141
+ async requireInstallation(source) {
142
+ const installationId = await this.deps.resolveInstallationId(source.accountId);
143
+ if (installationId === null) {
144
+ throw new ValidationError('No GitHub installation is available for this account; connect GitHub before syncing a skill source');
145
+ }
146
+ return installationId;
147
+ }
148
+ listDir(source, installationId, path, readRef) {
149
+ return this.deps.githubClient.listDirectory(installationId, { owner: source.repoOwner, repo: source.repoName }, path, readRef);
150
+ }
151
+ /**
152
+ * Reconcile one `<skill>/` directory:
153
+ * - 'skip' — not a skill (no `SKILL.md`), or unreadable/unparseable with NO prior row.
154
+ * - 'kept' — nothing changed; the prior row is current and untouched.
155
+ * - 'stale' — a change WAS detected but couldn't be applied this round (manifest read
156
+ * back as a 404/non-file, or parsed empty) so the prior row is kept alive rather than
157
+ * retired. Signals the caller to leave the source pin behind and retry next sync.
158
+ * - 'upserted' — the manifest or its resource manifest moved and was written.
159
+ */
160
+ async syncSkillDir(source, dirName, dirPath, skillId, prior, installationId, readRef, now) {
161
+ const entries = await this.listDir(source, installationId, dirPath, readRef);
162
+ const manifest = entries.find((e) => e.type === 'file' && isSkillManifest(e.name));
163
+ if (!manifest)
164
+ return 'skip'; // not a skill directory (SKILL.md removed → prior tombstoned)
165
+ const resources = entries
166
+ .filter((e) => e.type === 'file' && !isSkillManifest(e.name))
167
+ .map((e) => ({ path: e.path, sha: e.sha, size: e.size ?? 0 }))
168
+ .sort((a, b) => a.path.localeCompare(b.path));
169
+ // Fast path: the SKILL.md blob sha is unchanged AND the resource manifest matches,
170
+ // so nothing in this skill changed — keep the prior row untouched.
171
+ if (prior && prior.sourceSha === manifest.sha && sameResources(prior.resources, resources)) {
172
+ return 'kept';
173
+ }
174
+ // Resource-only change: SKILL.md is unchanged but a sibling resource moved. The
175
+ // manifest content (name/description/instructions) is identical, so refresh only the
176
+ // resource manifest + pinned commit without re-fetching the body.
177
+ if (prior && prior.sourceSha === manifest.sha) {
178
+ await this.deps.accountSkillRepository.upsert({
179
+ ...prior,
180
+ resources,
181
+ pinnedCommit: readRef,
182
+ updatedAt: now,
183
+ deletedAt: null,
184
+ });
185
+ return 'upserted';
186
+ }
187
+ const file = await this.deps.githubClient.getFileContent(installationId, { owner: source.repoOwner, repo: source.repoName }, manifest.path, readRef);
188
+ // Unreadable / unparseable this round: keep a prior skill alive rather than retiring
189
+ // it over a transient read or an in-progress edit; with no prior there's nothing to keep.
190
+ // Either way a change was detected (the manifest sha moved) but not applied, so report
191
+ // 'stale' so the source pin is NOT advanced and the next sync re-reads.
192
+ if (!file)
193
+ return prior ? 'stale' : 'skip';
194
+ const parsed = parseSkillManifest(dirName, file.content);
195
+ if (!parsed)
196
+ return prior ? 'stale' : 'skip';
197
+ await this.deps.accountSkillRepository.upsert({
198
+ skillId,
199
+ accountId: source.accountId,
200
+ name: parsed.name,
201
+ description: parsed.description,
202
+ instructions: parsed.instructions,
203
+ resources,
204
+ sourceId: source.id,
205
+ sourcePath: manifest.path,
206
+ sourceSha: file.sha,
207
+ pinnedCommit: readRef,
208
+ createdAt: prior?.createdAt ?? now,
209
+ updatedAt: now,
210
+ deletedAt: null,
211
+ });
212
+ return 'upserted';
213
+ }
214
+ }
215
+ function sameResources(a, b) {
216
+ if (a.length !== b.length)
217
+ return false;
218
+ for (let i = 0; i < a.length; i++) {
219
+ if (a[i].path !== b[i].path || a[i].sha !== b[i].sha)
220
+ return false;
221
+ }
222
+ return true;
223
+ }
224
+ function toWire(record) {
225
+ return {
226
+ id: record.id,
227
+ accountId: record.accountId,
228
+ repoOwner: record.repoOwner,
229
+ repoName: record.repoName,
230
+ gitRef: record.gitRef,
231
+ dirPath: record.dirPath,
232
+ lastSyncedCommit: record.lastSyncedCommit,
233
+ lastSyncedAt: record.lastSyncedAt,
234
+ createdAt: record.createdAt,
235
+ };
236
+ }
237
+ //# sourceMappingURL=SkillSourceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillSourceService.js","sourceRoot":"","sources":["../../src/skillLibrary/SkillSourceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** A skill parsed from a `SKILL.md` manifest's frontmatter + body. */
2
+ export interface ParsedSkillManifest {
3
+ name: string;
4
+ description: string;
5
+ /** The procedural instructions (the markdown body). */
6
+ instructions: string;
7
+ }
8
+ /** Slug a skill DIRECTORY name into a stable, id-safe token (`Bug Triage` → `bug-triage`). */
9
+ export declare function slugFromDirName(dirName: string): string;
10
+ /** Whether a directory listing entry is a `SKILL.md` manifest (case-insensitive). */
11
+ export declare function isSkillManifest(name: string): boolean;
12
+ /**
13
+ * Parse a `SKILL.md` file. Frontmatter carries `name` + `description`; the markdown
14
+ * body is the instructions. Tolerant, mirroring the fragment parser: a missing name
15
+ * defaults to a humanised directory name and a missing description to the first body
16
+ * line, so a sparse manifest still imports. Returns null only when there is no usable
17
+ * body at all — an empty `SKILL.md` is not a skill, and returning null keeps the prior
18
+ * synced row alive rather than retiring a skill over an in-progress edit.
19
+ */
20
+ export declare function parseSkillManifest(dirName: string, content: string): ParsedSkillManifest | null;
21
+ //# sourceMappingURL=skill-source.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-source.logic.d.ts","sourceRoot":"","sources":["../../src/skillLibrary/skill-source.logic.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAQ/F"}
@@ -0,0 +1,43 @@
1
+ import { parseSimpleYaml, splitFrontmatter, str } from '../repoSourceSync/frontmatter.js';
2
+ /** Slug a skill DIRECTORY name into a stable, id-safe token (`Bug Triage` → `bug-triage`). */
3
+ export function slugFromDirName(dirName) {
4
+ return (dirName
5
+ .toLowerCase()
6
+ .replace(/[^a-z0-9]+/g, '-')
7
+ .replace(/^-+|-+$/g, '') || 'skill');
8
+ }
9
+ /** Whether a directory listing entry is a `SKILL.md` manifest (case-insensitive). */
10
+ export function isSkillManifest(name) {
11
+ return /^skill\.md$/i.test(name);
12
+ }
13
+ /**
14
+ * Parse a `SKILL.md` file. Frontmatter carries `name` + `description`; the markdown
15
+ * body is the instructions. Tolerant, mirroring the fragment parser: a missing name
16
+ * defaults to a humanised directory name and a missing description to the first body
17
+ * line, so a sparse manifest still imports. Returns null only when there is no usable
18
+ * body at all — an empty `SKILL.md` is not a skill, and returning null keeps the prior
19
+ * synced row alive rather than retiring a skill over an in-progress edit.
20
+ */
21
+ export function parseSkillManifest(dirName, content) {
22
+ const { frontmatter, body } = splitFrontmatter(content);
23
+ const fm = parseSimpleYaml(frontmatter);
24
+ const instructions = body.trim();
25
+ if (!instructions)
26
+ return null;
27
+ const name = str(fm.name) ?? humanise(dirName);
28
+ const description = str(fm.description) ?? firstLine(instructions) ?? name;
29
+ return { name, description, instructions };
30
+ }
31
+ // --- internals ------------------------------------------------------------
32
+ function firstLine(body) {
33
+ const line = body
34
+ .split(/\r?\n/)
35
+ .map((l) => l.replace(/^[#>\-*\s]+/, '').trim())
36
+ .find((l) => l.length > 0);
37
+ return line ? line.slice(0, 200) : undefined;
38
+ }
39
+ function humanise(dirName) {
40
+ const stem = dirName.replace(/[-_]+/g, ' ').trim();
41
+ return stem ? stem.charAt(0).toUpperCase() + stem.slice(1) : 'Skill';
42
+ }
43
+ //# sourceMappingURL=skill-source.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-source.logic.js","sourceRoot":"","sources":["../../src/skillLibrary/skill-source.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAA;AAgBzF,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,CACL,OAAO;SACJ,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CACtC,CAAA;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACjE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACvD,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAA;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC,IAAI,IAAI,CAAA;IAC1E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AAC5C,CAAC;AAED,6EAA6E;AAE7E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI;SACd,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAClD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AACtE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/agents",
3
- "version": "0.60.0",
3
+ "version": "0.61.1",
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.224",
32
32
  "handlebars": "^4.7.9",
33
33
  "valibot": "^1.4.2",
34
- "@cat-factory/contracts": "0.136.0",
35
- "@cat-factory/kernel": "0.130.0",
36
- "@cat-factory/prompt-fragments": "0.13.25"
34
+ "@cat-factory/contracts": "0.138.0",
35
+ "@cat-factory/kernel": "0.132.0",
36
+ "@cat-factory/prompt-fragments": "0.13.27"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.2",
40
40
  "vitest": "^4.1.10",
41
- "@cat-factory/caching": "0.8.8"
41
+ "@cat-factory/caching": "0.9.1"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -b tsconfig.build.json",