@cat-factory/agents 0.59.2 → 0.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/kinds/ralph.d.ts +18 -0
- package/dist/agents/kinds/ralph.d.ts.map +1 -0
- package/dist/agents/kinds/ralph.js +114 -0
- package/dist/agents/kinds/ralph.js.map +1 -0
- package/dist/agents/kinds/registry.d.ts.map +1 -1
- package/dist/agents/kinds/registry.js +2 -0
- package/dist/agents/kinds/registry.js.map +1 -1
- 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 +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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
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":"AAAA,iFAAiF;AACjF,oFAAoF;AACpF,mFAAmF;AACnF,kFAAkF;AAElF,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,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,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACjC,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,MAAM,GAAG,EAAE,CAAA;YACX,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAA;YACb,GAAG,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;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,gDAAgD;AAChD,MAAM,UAAU,GAAG,CAAC,KAAc;IAChC,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,8EAA8E;AAC9E,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,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"}
|
|
@@ -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"}
|