@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.
- package/dist/fragmentLibrary/FragmentSourceService.d.ts.map +1 -1
- package/dist/fragmentLibrary/FragmentSourceService.js +49 -66
- package/dist/fragmentLibrary/FragmentSourceService.js.map +1 -1
- package/dist/fragmentLibrary/fragment-source.logic.d.ts.map +1 -1
- package/dist/fragmentLibrary/fragment-source.logic.js +4 -69
- package/dist/fragmentLibrary/fragment-source.logic.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/repoSourceSync/frontmatter.d.ts +12 -0
- package/dist/repoSourceSync/frontmatter.d.ts.map +1 -0
- package/dist/repoSourceSync/frontmatter.js +70 -0
- package/dist/repoSourceSync/frontmatter.js.map +1 -0
- package/dist/repoSourceSync/repo-source-sync.d.ts +88 -0
- package/dist/repoSourceSync/repo-source-sync.d.ts.map +1 -0
- package/dist/repoSourceSync/repo-source-sync.js +50 -0
- package/dist/repoSourceSync/repo-source-sync.js.map +1 -0
- package/dist/skillLibrary/SkillCatalogService.d.ts +35 -0
- package/dist/skillLibrary/SkillCatalogService.d.ts.map +1 -0
- package/dist/skillLibrary/SkillCatalogService.js +52 -0
- package/dist/skillLibrary/SkillCatalogService.js.map +1 -0
- package/dist/skillLibrary/SkillSourceService.d.ts +67 -0
- package/dist/skillLibrary/SkillSourceService.d.ts.map +1 -0
- package/dist/skillLibrary/SkillSourceService.js +237 -0
- package/dist/skillLibrary/SkillSourceService.js.map +1 -0
- package/dist/skillLibrary/skill-source.logic.d.ts +21 -0
- package/dist/skillLibrary/skill-source.logic.d.ts.map +1 -0
- package/dist/skillLibrary/skill-source.logic.js +43 -0
- package/dist/skillLibrary/skill-source.logic.js.map +1 -0
- 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;
|
|
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:
|
|
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
|
|
67
|
+
// never per file (the per-entry reads share it via the shared helper).
|
|
67
68
|
const installationId = await this.requireInstallation(source);
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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":"AAOA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AASjF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;
|
|
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;
|
|
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).
|
|
4
|
-
//
|
|
5
|
-
//
|
|
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":"
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAChG,OAAO,EACL,KAAK,sBAAsB,EAC3B,+BAA+B,EAC/B,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAMrE,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,sBAAsB,GACvB,MAAM,qCAAqC,CAAA;AAI5C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACT,QAAQ,EACR,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGlG,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,qCAAqC,EACrC,qCAAqC,EACrC,4CAA4C,EAC5C,4CAA4C,GAC7C,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,KAAK,aAAa,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,WAAW,GACZ,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,mBAAmB,EACxB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAKrE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAA;AAKnC,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,kCAAkC,CAAA;AAMzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAMvE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,GAChB,MAAM,kCAAkC,CAAA;AAOzC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oCAAoC,CAAA;AAK3C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAClG,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAQ1E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EAId,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,4BAA4B,GAC7B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,KAAK,aAAa,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,YAAY,EACZ,KAAK,kBAAkB,EACvB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,QAAQ,EACR,KAAK,cAAc,EACnB,uBAAuB,GACxB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,+BAA+B,GAChC,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AACxF,OAAO,EACL,KAAK,sBAAsB,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EACL,KAAK,YAAY,EACjB,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAKnE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AAKjC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,0BAA0B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,+BAA+B,EAC/B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,EAC9B,gCAAgC,EAChC,KAAK,WAAW,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,sBAAsB,EACtB,KAAK,kCAAkC,GACxC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EACL,qBAAqB,EACrB,KAAK,iCAAiC,EACtC,KAAK,6BAA6B,GACnC,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAClG,OAAO,EACL,mBAAmB,EACnB,KAAK,+BAA+B,GACrC,MAAM,0CAA0C,CAAA;AACjD,OAAO,EACL,KAAK,oBAAoB,EACzB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,mBAAmB,MAAM,4CAA4C,CAAA"}
|
|
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":"AAAA,OAAO,EAAE,eAAe,EAAoC,MAAM,8BAA8B,CAAA;AAChG,OAAO,EAEL,+BAA+B,EAC/B,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAKL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,wFAAwF;AACxF,sEAAsE;AACtE,yFAAyF;AACzF,oFAAoF;AACpF,0DAA0D;AAC1D,OAAO,EAEL,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,gCAAgC,CAAA;AACvC,6FAA6F;AAC7F,mFAAmF;AACnF,OAAO,EAGL,sBAAsB,GACvB,MAAM,qCAAqC,CAAA;AAC5C,uFAAuF;AACvF,wFAAwF;AACxF,gFAAgF;AAChF,OAAO,EAGL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACT,QAAQ,EACR,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AACjC,wFAAwF;AACxF,0FAA0F;AAC1F,OAAO,EAA2C,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAClG,6EAA6E;AAC7E,iEAAiE;AACjE,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAClC,0CAA0C;AAC1C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,6BAA6B,CAAA;AACpC,mEAAmE;AACnE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,kDAAkD;AAClD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,6BAA6B,CAAA;AACpC,gDAAgD;AAChD,OAAO,EACL,qCAAqC,EACrC,qCAAqC,EACrC,4CAA4C,EAC5C,4CAA4C,GAC7C,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAGL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GAEzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAEL,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,WAAW,GACZ,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAEL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,mFAAmF;AACnF,mFAAmF;AACnF,sFAAsF;AACtF,8DAA8D;AAC9D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,4BAA4B,CAAA;AACnC,kGAAkG;AAClG,mGAAmG;AACnG,8FAA8F;AAC9F,gGAAgG;AAChG,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,kCAAkC,CAAA;AACzC,oGAAoG;AACpG,iGAAiG;AACjG,+FAA+F;AAC/F,mGAAmG;AACnG,sFAAsF;AACtF,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AACvE,yFAAyF;AACzF,mGAAmG;AACnG,qFAAqF;AACrF,4FAA4F;AAC5F,gFAAgF;AAChF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,GAChB,MAAM,kCAAkC,CAAA;AACzC,wFAAwF;AACxF,gGAAgG;AAChG,iGAAiG;AACjG,0FAA0F;AAC1F,2FAA2F;AAC3F,oEAAoE;AACpE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oCAAoC,CAAA;AAC3C,+FAA+F;AAC/F,iGAAiG;AACjG,iGAAiG;AACjG,kFAAkF;AAClF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAElG,4FAA4F;AAC5F,uFAAuF;AACvF,+FAA+F;AAC/F,+FAA+F;AAC/F,0FAA0F;AAC1F,wFAAwF;AACxF,gGAAgG;AAChG,OAAO,EAGL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc;AACd,iGAAiG;AACjG,4FAA4F;AAC5F,8FAA8F;AAC9F,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAEhB,4BAA4B,GAC7B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEb,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,YAAY,EAEZ,yBAAyB,GAC1B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,QAAQ,EAER,uBAAuB,GACxB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EAEvB,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EAEtB,+BAA+B,GAChC,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAEhB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAEL,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,4BAA4B,CAAA;AAEnC,4EAA4E;AAC5E,sFAAsF;AACtF,qFAAqF;AACrF,4DAA4D;AAC5D,OAAO,EAEL,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,eAAe,EACf,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,oFAAoF;AACpF,qFAAqF;AACrF,gDAAgD;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,yFAAyF;AACzF,0FAA0F;AAC1F,kEAAkE;AAClE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnE,yFAAyF;AACzF,0FAA0F;AAC1F,0FAA0F;AAC1F,uEAAuE;AACvE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AAEjC,8EAA8E;AAC9E,kFAAkF;AAClF,oFAAoF;AACpF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EAItB,yBAAyB,EACzB,uBAAuB,EAEvB,wBAAwB,EACxB,kBAAkB,EAClB,+BAA+B,EAG/B,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,EAC9B,gCAAgC,EAEhC,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,sBAAsB,GAEvB,MAAM,6CAA6C,CAAA;AACpD,OAAO,EACL,qBAAqB,GAGtB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAClG,OAAO,EACL,mBAAmB,GAEpB,MAAM,0CAA0C,CAAA;AACjD,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,mBAAmB,MAAM,4CAA4C,CAAA"}
|
|
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.
|
|
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.
|
|
35
|
-
"@cat-factory/kernel": "0.
|
|
36
|
-
"@cat-factory/prompt-fragments": "0.13.
|
|
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.
|
|
41
|
+
"@cat-factory/caching": "0.9.1"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "tsc -b tsconfig.build.json",
|