@exellix/ai-skills 6.5.4 → 6.8.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/README.md +15 -0
- package/dist/catalog-manager/createAiSkillsCatalogApi.d.ts +8 -0
- package/dist/catalog-manager/createAiSkillsCatalogApi.d.ts.map +1 -0
- package/dist/catalog-manager/createAiSkillsCatalogApi.js +144 -0
- package/dist/catalog-manager/createAiSkillsCatalogApi.js.map +1 -0
- package/dist/catalog-manager/index.d.ts +3 -0
- package/dist/catalog-manager/index.d.ts.map +1 -0
- package/dist/catalog-manager/index.js +2 -0
- package/dist/catalog-manager/index.js.map +1 -0
- package/dist/catalog-manager/types.d.ts +71 -0
- package/dist/catalog-manager/types.d.ts.map +1 -0
- package/dist/catalog-manager/types.js +2 -0
- package/dist/catalog-manager/types.js.map +1 -0
- package/dist/catalox/ai-skills-catalog.d.ts +12 -15
- package/dist/catalox/ai-skills-catalog.d.ts.map +1 -1
- package/dist/catalox/ai-skills-catalog.js +23 -143
- package/dist/catalox/ai-skills-catalog.js.map +1 -1
- package/dist/catalox/ai-sub-skills-catalog.d.ts +7 -0
- package/dist/catalox/ai-sub-skills-catalog.d.ts.map +1 -0
- package/dist/catalox/ai-sub-skills-catalog.js +72 -0
- package/dist/catalox/ai-sub-skills-catalog.js.map +1 -0
- package/dist/catalox/catalog-guards.d.ts +14 -0
- package/dist/catalox/catalog-guards.d.ts.map +1 -0
- package/dist/catalox/catalog-guards.js +86 -0
- package/dist/catalox/catalog-guards.js.map +1 -0
- package/dist/catalox/catalog-native-store.d.ts +21 -0
- package/dist/catalox/catalog-native-store.d.ts.map +1 -0
- package/dist/catalox/catalog-native-store.js +101 -0
- package/dist/catalox/catalog-native-store.js.map +1 -0
- package/dist/catalox/catalog-normalization.d.ts +70 -0
- package/dist/catalox/catalog-normalization.d.ts.map +1 -0
- package/dist/catalox/catalog-normalization.js +281 -0
- package/dist/catalox/catalog-normalization.js.map +1 -0
- package/dist/catalox/index.d.ts +5 -4
- package/dist/catalox/index.d.ts.map +1 -1
- package/dist/catalox/index.js +5 -4
- package/dist/catalox/index.js.map +1 -1
- package/dist/catalox/list-ai-skills-catalog.d.ts +12 -6
- package/dist/catalox/list-ai-skills-catalog.d.ts.map +1 -1
- package/dist/catalox/list-ai-skills-catalog.js +72 -19
- package/dist/catalox/list-ai-skills-catalog.js.map +1 -1
- package/dist/catalox/skill-optimixer-catalog.d.ts +16 -15
- package/dist/catalox/skill-optimixer-catalog.d.ts.map +1 -1
- package/dist/catalox/skill-optimixer-catalog.js +67 -70
- package/dist/catalox/skill-optimixer-catalog.js.map +1 -1
- package/dist/catalox/skill-template-catalog-mutations.d.ts +12 -52
- package/dist/catalox/skill-template-catalog-mutations.d.ts.map +1 -1
- package/dist/catalox/skill-template-catalog-mutations.js +288 -329
- package/dist/catalox/skill-template-catalog-mutations.js.map +1 -1
- package/dist/catalox/skill-templates.d.ts +32 -43
- package/dist/catalox/skill-templates.d.ts.map +1 -1
- package/dist/catalox/skill-templates.js +66 -50
- package/dist/catalox/skill-templates.js.map +1 -1
- package/dist/client/registry-manager.d.ts +2 -2
- package/dist/client/registry-manager.d.ts.map +1 -1
- package/dist/client/registry-manager.js +5 -5
- package/dist/client/registry-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** Catalox `catalogId` for sub-skill override rows. */
|
|
2
|
+
export const AI_SUB_SKILLS_CATALOG_ID = "ai-sub-skills";
|
|
3
|
+
/** Descriptor version written by provision / migration scripts. */
|
|
4
|
+
export const AI_SUB_SKILLS_DESCRIPTOR_VERSION = "1";
|
|
5
|
+
export function buildAiSubSkillsCatalogDescriptor() {
|
|
6
|
+
return {
|
|
7
|
+
catalogId: AI_SUB_SKILLS_CATALOG_ID,
|
|
8
|
+
label: "AI Sub-Skills",
|
|
9
|
+
description: "Sub-skill override rows for @exellix/ai-skills (parent skill + data.overrides).",
|
|
10
|
+
itemLabel: "Sub-skill",
|
|
11
|
+
sourceMode: "native",
|
|
12
|
+
status: "active",
|
|
13
|
+
visibility: "visible",
|
|
14
|
+
defaultSort: { field: "subSkillKey", direction: "asc" },
|
|
15
|
+
capabilities: {
|
|
16
|
+
canList: true,
|
|
17
|
+
canGet: true,
|
|
18
|
+
canCreate: true,
|
|
19
|
+
canEdit: true,
|
|
20
|
+
canDelete: true,
|
|
21
|
+
canImport: true,
|
|
22
|
+
canExport: true,
|
|
23
|
+
canValidate: true,
|
|
24
|
+
canViewReferences: true,
|
|
25
|
+
},
|
|
26
|
+
queryableFields: [
|
|
27
|
+
{
|
|
28
|
+
key: "subSkillKey",
|
|
29
|
+
label: "Sub-skill key",
|
|
30
|
+
type: "string",
|
|
31
|
+
path: "subSkillKey",
|
|
32
|
+
indexed: true,
|
|
33
|
+
filterable: true,
|
|
34
|
+
sortable: true,
|
|
35
|
+
listVisible: true,
|
|
36
|
+
detailVisible: true,
|
|
37
|
+
required: true,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "parentSkillKey",
|
|
41
|
+
label: "Parent skill key",
|
|
42
|
+
type: "string",
|
|
43
|
+
path: "parentSkillKey",
|
|
44
|
+
indexed: true,
|
|
45
|
+
filterable: true,
|
|
46
|
+
sortable: true,
|
|
47
|
+
listVisible: true,
|
|
48
|
+
detailVisible: true,
|
|
49
|
+
required: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
key: "overrides",
|
|
53
|
+
label: "Overrides",
|
|
54
|
+
type: "object",
|
|
55
|
+
path: "overrides",
|
|
56
|
+
indexed: false,
|
|
57
|
+
filterable: false,
|
|
58
|
+
sortable: false,
|
|
59
|
+
listVisible: false,
|
|
60
|
+
detailVisible: true,
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
identity: {
|
|
65
|
+
itemIdStrategy: "natural",
|
|
66
|
+
itemIdField: "subSkillKey",
|
|
67
|
+
titleField: "overrides.title",
|
|
68
|
+
statusField: "status",
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ai-sub-skills-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sub-skills-catalog.js","sourceRoot":"","sources":["../../src/catalox/ai-sub-skills-catalog.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAwB,CAAC;AAEjE,mEAAmE;AACnE,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAY,CAAC;AAE7D,MAAM,UAAU,iCAAiC;IAC7C,OAAO;QACH,SAAS,EAAE,wBAAwB;QACnC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iFAAiF;QAC9F,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE;QACvD,YAAY,EAAE;YACV,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,IAAI;SAC1B;QACD,eAAe,EAAE;YACb;gBACI,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;aACjB;YACD;gBACI,GAAG,EAAE,gBAAgB;gBACrB,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;aACjB;YACD;gBACI,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;aACjB;SACJ;QACD,QAAQ,EAAE;YACN,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,QAAQ;SACxB;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Flat optimixer keys rejected on normalized catalog rows (use `data.optimixer` instead). */
|
|
2
|
+
export declare const DEPRECATED_FLAT_OPTIMIXER_DATA_KEYS: readonly ["optimixerReasoningEffort", "optimixerOutputIntentMode", "optimixerExpectedVisibleTokens", "optimixerOutputToInputRatio", "optimixerAcceptableRisk", "optimixerTaskType", "optimixerOutputMode", "optimixerSchemaComplexity"];
|
|
3
|
+
export type CatalogGuardIssue = {
|
|
4
|
+
scope: string;
|
|
5
|
+
severity: "error" | "warn";
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
/** Guard against forbidden model fields and deprecated row shapes on normalized catalogs. */
|
|
9
|
+
export declare function validateNormalizedCatalogDataGuards(scope: string, data: Record<string, unknown>): CatalogGuardIssue[];
|
|
10
|
+
export declare function collectCatalogGuardIssues(rows: Array<{
|
|
11
|
+
scope: string;
|
|
12
|
+
data: Record<string, unknown>;
|
|
13
|
+
}>): CatalogGuardIssue[];
|
|
14
|
+
//# sourceMappingURL=catalog-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-guards.d.ts","sourceRoot":"","sources":["../../src/catalox/catalog-guards.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,eAAO,MAAM,mCAAmC,yOAStC,CAAC;AASX,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAwBF,6FAA6F;AAC7F,wBAAgB,mCAAmC,CAC/C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,iBAAiB,EAAE,CA4CrB;AAED,wBAAgB,yBAAyB,CACrC,IAAI,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC9D,iBAAiB,EAAE,CAMrB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Flat optimixer keys rejected on normalized catalog rows (use `data.optimixer` instead). */
|
|
2
|
+
export const DEPRECATED_FLAT_OPTIMIXER_DATA_KEYS = [
|
|
3
|
+
"optimixerReasoningEffort",
|
|
4
|
+
"optimixerOutputIntentMode",
|
|
5
|
+
"optimixerExpectedVisibleTokens",
|
|
6
|
+
"optimixerOutputToInputRatio",
|
|
7
|
+
"optimixerAcceptableRisk",
|
|
8
|
+
"optimixerTaskType",
|
|
9
|
+
"optimixerOutputMode",
|
|
10
|
+
"optimixerSchemaComplexity",
|
|
11
|
+
];
|
|
12
|
+
const FORBIDDEN_MODEL_DATA_KEYS = ["model", "modelId", "mainModel", "defaultModel", "skillModel"];
|
|
13
|
+
const DEPRECATED_BASE_DATA_KEYS = ["skillKey", "status", "isLocal", "parentSkillKey"];
|
|
14
|
+
const CONCRETE_MODEL_PATTERN = /^(?:openrouter\/)?(?:google|anthropic|openai|x-ai|meta-llama|mistralai|deepseek|cohere)\/[\w.-]+$/i;
|
|
15
|
+
function asString(v) {
|
|
16
|
+
return typeof v === "string" ? v.trim() : "";
|
|
17
|
+
}
|
|
18
|
+
function checkModelValue(scope, field, value, issues) {
|
|
19
|
+
if (value === undefined || value === null)
|
|
20
|
+
return;
|
|
21
|
+
const s = asString(value);
|
|
22
|
+
if (!s)
|
|
23
|
+
return;
|
|
24
|
+
issues.push({
|
|
25
|
+
scope,
|
|
26
|
+
severity: "error",
|
|
27
|
+
message: `Forbidden catalog model field ${field}=${s} (use ai-profiles at invoke time).`,
|
|
28
|
+
});
|
|
29
|
+
if (CONCRETE_MODEL_PATTERN.test(s) || s.includes("/")) {
|
|
30
|
+
issues.push({
|
|
31
|
+
scope,
|
|
32
|
+
severity: "error",
|
|
33
|
+
message: `Concrete wire model slug in catalog ${field}: ${s}`,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Guard against forbidden model fields and deprecated row shapes on normalized catalogs. */
|
|
38
|
+
export function validateNormalizedCatalogDataGuards(scope, data) {
|
|
39
|
+
const issues = [];
|
|
40
|
+
for (const key of FORBIDDEN_MODEL_DATA_KEYS) {
|
|
41
|
+
checkModelValue(scope, `data.${key}`, data[key], issues);
|
|
42
|
+
}
|
|
43
|
+
for (const key of DEPRECATED_BASE_DATA_KEYS) {
|
|
44
|
+
if (data[key] !== undefined) {
|
|
45
|
+
issues.push({
|
|
46
|
+
scope,
|
|
47
|
+
severity: "warn",
|
|
48
|
+
message: `Deprecated catalog data field data.${key} — remove from normalized row.`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const key of DEPRECATED_FLAT_OPTIMIXER_DATA_KEYS) {
|
|
53
|
+
if (data[key] !== undefined) {
|
|
54
|
+
issues.push({
|
|
55
|
+
scope,
|
|
56
|
+
severity: "warn",
|
|
57
|
+
message: `Deprecated flat optimixer field data.${key} — use data.optimixer.`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const overrides = data.overrides;
|
|
62
|
+
if (overrides != null && typeof overrides === "object" && !Array.isArray(overrides)) {
|
|
63
|
+
const ov = overrides;
|
|
64
|
+
for (const key of FORBIDDEN_MODEL_DATA_KEYS) {
|
|
65
|
+
checkModelValue(scope, `data.overrides.${key}`, ov[key], issues);
|
|
66
|
+
}
|
|
67
|
+
for (const key of DEPRECATED_FLAT_OPTIMIXER_DATA_KEYS) {
|
|
68
|
+
if (ov[key] !== undefined) {
|
|
69
|
+
issues.push({
|
|
70
|
+
scope,
|
|
71
|
+
severity: "warn",
|
|
72
|
+
message: `Deprecated flat optimixer in overrides: ${key}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return issues;
|
|
78
|
+
}
|
|
79
|
+
export function collectCatalogGuardIssues(rows) {
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const row of rows) {
|
|
82
|
+
out.push(...validateNormalizedCatalogDataGuards(row.scope, row.data));
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=catalog-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-guards.js","sourceRoot":"","sources":["../../src/catalox/catalog-guards.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,mCAAmC,GAAG;IAC/C,0BAA0B;IAC1B,2BAA2B;IAC3B,gCAAgC;IAChC,6BAA6B;IAC7B,yBAAyB;IACzB,mBAAmB;IACnB,qBAAqB;IACrB,2BAA2B;CACrB,CAAC;AAEX,MAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAU,CAAC;AAE3G,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAU,CAAC;AAE/F,MAAM,sBAAsB,GACxB,oGAAoG,CAAC;AAQzG,SAAS,QAAQ,CAAC,CAAU;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,KAAc,EAAE,MAA2B;IAC9F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAClD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC;QAAE,OAAO;IACf,MAAM,CAAC,IAAI,CAAC;QACR,KAAK;QACL,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,iCAAiC,KAAK,IAAI,CAAC,oCAAoC;KAC3F,CAAC,CAAC;IACH,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACR,KAAK;YACL,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,uCAAuC,KAAK,KAAK,CAAC,EAAE;SAChE,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mCAAmC,CAC/C,KAAa,EACb,IAA6B;IAE7B,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC1C,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK;gBACL,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sCAAsC,GAAG,gCAAgC;aACrF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,mCAAmC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK;gBACL,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,wCAAwC,GAAG,wBAAwB;aAC/E,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE,GAAG,SAAoC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;YAC1C,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,mCAAmC,EAAE,CAAC;YACpD,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC;oBACR,KAAK;oBACL,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,2CAA2C,GAAG,EAAE;iBAC5D,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,IAA6D;IAE7D,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,GAAG,mCAAmC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NativeCatalogItemRecord } from "@x12i/catalox";
|
|
2
|
+
import type { Firestore } from "firebase-admin/firestore";
|
|
3
|
+
import type { NativeItemStore } from "@x12i/catalox/firebase";
|
|
4
|
+
import { storageDocIdForNativeRecord } from "@x12i/catalox/firebase";
|
|
5
|
+
export type CatalogNativeStore = {
|
|
6
|
+
/** Full document replace (no Firestore merge — required to drop deprecated fields). */
|
|
7
|
+
replace(catalogId: string, record: NativeCatalogItemRecord): Promise<void>;
|
|
8
|
+
delete(catalogId: string, storageDocId: string): Promise<void>;
|
|
9
|
+
get(catalogId: string, storageDocId: string): Promise<NativeCatalogItemRecord | null>;
|
|
10
|
+
findByLogicalItemId(catalogId: string, itemId: string): Promise<NativeCatalogItemRecord[]>;
|
|
11
|
+
};
|
|
12
|
+
/** Test hook — replaces Firestore-backed store in unit tests. */
|
|
13
|
+
export declare function setCatalogNativeStoreForTests(store: CatalogNativeStore | null): void;
|
|
14
|
+
export declare function createInMemoryCatalogNativeStore(initial?: Record<string, NativeCatalogItemRecord[]>): CatalogNativeStore;
|
|
15
|
+
export declare function createCatalogNativeStore(firestore: Firestore, nativeStore: NativeItemStore): CatalogNativeStore;
|
|
16
|
+
export declare function getNativeCatalogRecord(catalogId: string, itemId: string): Promise<NativeCatalogItemRecord | null>;
|
|
17
|
+
export declare function replaceNativeCatalogRecord(catalogId: string, record: NativeCatalogItemRecord): Promise<void>;
|
|
18
|
+
export declare function replaceNativeCatalogRecords(catalogId: string, records: NativeCatalogItemRecord[]): Promise<void>;
|
|
19
|
+
export declare function deleteNativeCatalogRecordByItemId(catalogId: string, itemId: string, existing?: NativeCatalogItemRecord | null): Promise<void>;
|
|
20
|
+
export { storageDocIdForNativeRecord };
|
|
21
|
+
//# sourceMappingURL=catalog-native-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-native-store.d.ts","sourceRoot":"","sources":["../../src/catalox/catalog-native-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAGH,2BAA2B,EAC9B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,kBAAkB,GAAG;IAC7B,uFAAuF;IACvF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACtF,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CAC9F,CAAC;AAIF,iEAAiE;AACjE,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAEpF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAM,GAAG,kBAAkB,CA0B5H;AAWD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,GAAG,kBAAkB,CAiB/G;AAmBD,wBAAsB,sBAAsB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAIzC;AAED,wBAAsB,0BAA0B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,2BAA2B,CAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,iCAAiC,CACnD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI,GAC1C,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { flatNativeItemsCollectionRef, resolveNativeItemsLayout, storageDocIdForNativeRecord, } from "@x12i/catalox/firebase";
|
|
2
|
+
let testStoreOverride = null;
|
|
3
|
+
/** Test hook — replaces Firestore-backed store in unit tests. */
|
|
4
|
+
export function setCatalogNativeStoreForTests(store) {
|
|
5
|
+
testStoreOverride = store;
|
|
6
|
+
}
|
|
7
|
+
export function createInMemoryCatalogNativeStore(initial = {}) {
|
|
8
|
+
const byCatalog = new Map();
|
|
9
|
+
for (const [catalogId, rows] of Object.entries(initial)) {
|
|
10
|
+
byCatalog.set(catalogId, new Map(rows.map((r) => [String(r.itemId), { ...r, catalogId }])));
|
|
11
|
+
}
|
|
12
|
+
const ensure = (catalogId) => {
|
|
13
|
+
if (!byCatalog.has(catalogId))
|
|
14
|
+
byCatalog.set(catalogId, new Map());
|
|
15
|
+
return byCatalog.get(catalogId);
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
async replace(catalogId, record) {
|
|
19
|
+
ensure(catalogId).set(String(record.itemId), { ...record, catalogId });
|
|
20
|
+
},
|
|
21
|
+
async delete(_catalogId, storageDocId) {
|
|
22
|
+
for (const m of byCatalog.values()) {
|
|
23
|
+
m.delete(storageDocId);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
async get(catalogId, storageDocId) {
|
|
27
|
+
return ensure(catalogId).get(storageDocId) ?? null;
|
|
28
|
+
},
|
|
29
|
+
async findByLogicalItemId(catalogId, itemId) {
|
|
30
|
+
const row = ensure(catalogId).get(itemId);
|
|
31
|
+
return row ? [row] : [];
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async function collectionForCatalog(firestore, catalogId) {
|
|
36
|
+
const layout = await resolveNativeItemsLayout(firestore, catalogId);
|
|
37
|
+
if (layout === "legacy") {
|
|
38
|
+
const { legacyNativeItemsCollectionRef } = await import("@x12i/catalox/firebase");
|
|
39
|
+
return legacyNativeItemsCollectionRef(firestore, catalogId);
|
|
40
|
+
}
|
|
41
|
+
return flatNativeItemsCollectionRef(firestore, catalogId);
|
|
42
|
+
}
|
|
43
|
+
export function createCatalogNativeStore(firestore, nativeStore) {
|
|
44
|
+
return {
|
|
45
|
+
async replace(catalogId, record) {
|
|
46
|
+
const col = await collectionForCatalog(firestore, catalogId);
|
|
47
|
+
const docId = storageDocIdForNativeRecord(record);
|
|
48
|
+
await col.doc(docId).set(record);
|
|
49
|
+
},
|
|
50
|
+
async delete(catalogId, storageDocId) {
|
|
51
|
+
await nativeStore.delete(catalogId, storageDocId);
|
|
52
|
+
},
|
|
53
|
+
async get(catalogId, storageDocId) {
|
|
54
|
+
return nativeStore.get(catalogId, storageDocId);
|
|
55
|
+
},
|
|
56
|
+
async findByLogicalItemId(catalogId, itemId) {
|
|
57
|
+
return nativeStore.findByLogicalItemId(catalogId, itemId);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
let cachedStore = null;
|
|
62
|
+
async function resolveCatalogNativeStore() {
|
|
63
|
+
if (testStoreOverride)
|
|
64
|
+
return testStoreOverride;
|
|
65
|
+
if (cachedStore)
|
|
66
|
+
return cachedStore;
|
|
67
|
+
const { getFirestore } = await import("firebase-admin/firestore");
|
|
68
|
+
const { getApp } = await import("firebase-admin/app");
|
|
69
|
+
const { FirestoreStore, NativeItemStore } = await import("@x12i/catalox/firebase");
|
|
70
|
+
const { initFirebaseAdminFromEnv } = await import("./init-firebase-and-catalox.js");
|
|
71
|
+
initFirebaseAdminFromEnv();
|
|
72
|
+
const dbId = process.env.FIRESTORE_DATABASE_ID?.trim();
|
|
73
|
+
const firestore = dbId ? getFirestore(dbId) : getFirestore();
|
|
74
|
+
const fsStore = new FirestoreStore({ firestore, app: getApp() });
|
|
75
|
+
cachedStore = createCatalogNativeStore(firestore, new NativeItemStore(fsStore));
|
|
76
|
+
return cachedStore;
|
|
77
|
+
}
|
|
78
|
+
export async function getNativeCatalogRecord(catalogId, itemId) {
|
|
79
|
+
const store = await resolveCatalogNativeStore();
|
|
80
|
+
const rows = await store.findByLogicalItemId(catalogId, itemId);
|
|
81
|
+
return rows[0] ?? null;
|
|
82
|
+
}
|
|
83
|
+
export async function replaceNativeCatalogRecord(catalogId, record) {
|
|
84
|
+
const store = await resolveCatalogNativeStore();
|
|
85
|
+
await store.replace(catalogId, record);
|
|
86
|
+
}
|
|
87
|
+
export async function replaceNativeCatalogRecords(catalogId, records) {
|
|
88
|
+
for (const record of records) {
|
|
89
|
+
await replaceNativeCatalogRecord(catalogId, record);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function deleteNativeCatalogRecordByItemId(catalogId, itemId, existing) {
|
|
93
|
+
const store = await resolveCatalogNativeStore();
|
|
94
|
+
const rec = existing ?? (await getNativeCatalogRecord(catalogId, itemId));
|
|
95
|
+
if (!rec)
|
|
96
|
+
return;
|
|
97
|
+
const docId = storageDocIdForNativeRecord(rec);
|
|
98
|
+
await store.delete(catalogId, docId);
|
|
99
|
+
}
|
|
100
|
+
export { storageDocIdForNativeRecord };
|
|
101
|
+
//# sourceMappingURL=catalog-native-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-native-store.js","sourceRoot":"","sources":["../../src/catalox/catalog-native-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { NativeCatalogItemRecord } from "@x12i/catalox";
|
|
2
|
+
import type { SkillOptimixerCatalogSpec } from "./skill-optimixer-catalog.js";
|
|
3
|
+
import type { SkillCatalogStatus } from "./skill-templates.js";
|
|
4
|
+
/** Fields compared when computing sub-skill overrides against a parent row. */
|
|
5
|
+
export declare const SUB_SKILL_OVERRIDE_FIELDS: readonly ["title", "description", "instructionsText", "promptText", "auditInstructionsText", "auditPromptText", "optimixer"];
|
|
6
|
+
export type SubSkillOverrideField = (typeof SUB_SKILL_OVERRIDE_FIELDS)[number];
|
|
7
|
+
export type SubSkillOverrides = Partial<Record<Exclude<SubSkillOverrideField, "optimixer">, string> & {
|
|
8
|
+
optimixer?: SkillOptimixerCatalogSpec;
|
|
9
|
+
}>;
|
|
10
|
+
export type ResolvedBaseSkillData = {
|
|
11
|
+
skillKey: string;
|
|
12
|
+
status: SkillCatalogStatus;
|
|
13
|
+
title: string;
|
|
14
|
+
description: string;
|
|
15
|
+
instructionsText?: string;
|
|
16
|
+
promptText?: string;
|
|
17
|
+
auditInstructionsText?: string;
|
|
18
|
+
auditPromptText?: string;
|
|
19
|
+
optimixer: SkillOptimixerCatalogSpec;
|
|
20
|
+
};
|
|
21
|
+
export type ResolvedSubSkillData = {
|
|
22
|
+
subSkillKey: string;
|
|
23
|
+
parentSkillKey: string;
|
|
24
|
+
status: SkillCatalogStatus;
|
|
25
|
+
overrides: SubSkillOverrides;
|
|
26
|
+
};
|
|
27
|
+
export type ResolvedRuntimeSkillData = ResolvedBaseSkillData & {
|
|
28
|
+
parentSkillKey?: string;
|
|
29
|
+
subSkillKey?: string;
|
|
30
|
+
};
|
|
31
|
+
/** Read `indexed.skillKey`, falling back to `itemId` when list API omits indexed fields. */
|
|
32
|
+
export declare function readIndexedSkillKey(record: NativeCatalogItemRecord): string;
|
|
33
|
+
/** Read `indexed.subSkillKey`, falling back to `itemId` when list API omits indexed fields. */
|
|
34
|
+
export declare function readIndexedSubSkillKey(record: NativeCatalogItemRecord): string;
|
|
35
|
+
export declare function readIndexedParentSkillKey(record: NativeCatalogItemRecord): string;
|
|
36
|
+
/** Whether an ai-skills base row matches normalized invariants. */
|
|
37
|
+
export declare function isNormalizedAiSkillsBaseRecord(record: NativeCatalogItemRecord): boolean;
|
|
38
|
+
/** Whether an ai-sub-skills row matches normalized invariants. */
|
|
39
|
+
export declare function isNormalizedAiSubSkillsRecord(record: NativeCatalogItemRecord): boolean;
|
|
40
|
+
/** Resolve a normalized ai-skills base row into runtime skill data. */
|
|
41
|
+
export declare function resolveBaseSkillFromRecord(record: NativeCatalogItemRecord, skillKeyForErrors: string): ResolvedBaseSkillData;
|
|
42
|
+
/** Resolve a normalized ai-sub-skills row into runtime sub-skill data. */
|
|
43
|
+
export declare function resolveSubSkillFromRecord(record: NativeCatalogItemRecord): ResolvedSubSkillData;
|
|
44
|
+
export declare function mergeSubSkillWithParent(parent: ResolvedBaseSkillData, sub: ResolvedSubSkillData): ResolvedRuntimeSkillData;
|
|
45
|
+
/** Build overrides by diffing child runtime fields against a resolved parent row. */
|
|
46
|
+
export declare function computeSubSkillOverrides(parent: ResolvedBaseSkillData, child: ResolvedRuntimeSkillData): SubSkillOverrides;
|
|
47
|
+
/** Build normalized ai-skills base write payload from runtime fields. */
|
|
48
|
+
export declare function buildAiSkillsBaseWriteRecord(input: {
|
|
49
|
+
itemId: string;
|
|
50
|
+
catalogId: string;
|
|
51
|
+
status: SkillCatalogStatus;
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
instructionsText: string;
|
|
55
|
+
promptText: string;
|
|
56
|
+
auditInstructionsText?: string;
|
|
57
|
+
auditPromptText?: string;
|
|
58
|
+
optimixer: SkillOptimixerCatalogSpec;
|
|
59
|
+
existing?: NativeCatalogItemRecord | null;
|
|
60
|
+
}): NativeCatalogItemRecord;
|
|
61
|
+
/** Build normalized ai-sub-skills write payload. */
|
|
62
|
+
export declare function buildAiSubSkillsWriteRecord(input: {
|
|
63
|
+
itemId: string;
|
|
64
|
+
catalogId: string;
|
|
65
|
+
parentSkillKey: string;
|
|
66
|
+
status: SkillCatalogStatus;
|
|
67
|
+
overrides: SubSkillOverrides;
|
|
68
|
+
existing?: NativeCatalogItemRecord | null;
|
|
69
|
+
}): NativeCatalogItemRecord;
|
|
70
|
+
//# sourceMappingURL=catalog-normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-normalization.d.ts","sourceRoot":"","sources":["../../src/catalox/catalog-normalization.ts"],"names":[],"mappings":"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"}
|