@red-hat-developer-hub/backstage-plugin-ai-skills-common 0.2.0 → 0.3.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/CHANGELOG.md +19 -0
- package/README.md +8 -0
- package/dist/fixtures.cjs.js +4 -4
- package/dist/fixtures.cjs.js.map +1 -1
- package/dist/fixtures.esm.js +4 -4
- package/dist/fixtures.esm.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @red-hat-developer-hub/backstage-plugin-ai-skills-common
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 910c3a6: Discover all active tags in public Quay repositories when `quayDiscovery.tag` is
|
|
8
|
+
omitted or blank. Set `tag: latest` explicitly to retain the previous default;
|
|
9
|
+
other supplied tags remain exact filters. Bound repository and tag pagination
|
|
10
|
+
together, and preserve distinct tagged references even when they share a digest.
|
|
11
|
+
Update shared contract fixtures and documentation for a separate catalog identity
|
|
12
|
+
per valid OCI skill-image tag.
|
|
13
|
+
|
|
14
|
+
OCI record producers adopting this contract must construct keys as
|
|
15
|
+
`<registry>/<repository>:<tag>` instead of `<registry>/<repository>`, preserving
|
|
16
|
+
the exact tag case. Consumers with persisted repository-only identities must
|
|
17
|
+
plan for replacement catalog identities and update references when adopting
|
|
18
|
+
tagged keys. The shared hashing algorithm and validators are unchanged: the same
|
|
19
|
+
identity tuple still yields the same catalog name. Upgrading the common library
|
|
20
|
+
alone does not rewrite caller-supplied keys or migrate existing entities.
|
|
21
|
+
|
|
3
22
|
## 0.2.0
|
|
4
23
|
|
|
5
24
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -24,6 +24,14 @@ consumes these snapshots to produce `AiResource` entities.
|
|
|
24
24
|
| `SnapshotSource` | Source identity (`id` and `type`) |
|
|
25
25
|
| `SnapshotStatus` | `'loading' \| 'ready' \| 'partial' \| 'failed'` |
|
|
26
26
|
|
|
27
|
+
OCI discovery records use `<registry>/<repository>:<tag>` as their stable key;
|
|
28
|
+
the registry host is lowercase and the tag retains its exact case. Two tags may
|
|
29
|
+
share the same manifest digest and `sourceUri` while retaining distinct keys and
|
|
30
|
+
catalog identities. A tag moving to different content keeps the same identity.
|
|
31
|
+
The connector constructs these keys; the shared helpers consume them as opaque
|
|
32
|
+
strings and continue to reject duplicate snapshot keys. Digest-addressed OCI
|
|
33
|
+
reference construction and declared-version mapping are unchanged.
|
|
34
|
+
|
|
27
35
|
## Constants
|
|
28
36
|
|
|
29
37
|
| Constant | Value | Description |
|
package/dist/fixtures.cjs.js
CHANGED
|
@@ -9,7 +9,7 @@ const npxSource = {
|
|
|
9
9
|
type: "npx"
|
|
10
10
|
};
|
|
11
11
|
const validOciRecordFull = {
|
|
12
|
-
key: "quay.io/octo/hello-world-skill",
|
|
12
|
+
key: "quay.io/octo/hello-world-skill:1.0.0-draft",
|
|
13
13
|
name: "Hello World Skill",
|
|
14
14
|
description: "A demo OCI skill image",
|
|
15
15
|
version: "1.0.0",
|
|
@@ -29,13 +29,13 @@ const validOciRecordFull = {
|
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
const validOciRecordMinimal = {
|
|
32
|
-
key: "quay.io/octo/minimal-skill",
|
|
32
|
+
key: "quay.io/octo/minimal-skill:latest",
|
|
33
33
|
name: "Minimal Skill",
|
|
34
34
|
sourceUri: "oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111",
|
|
35
35
|
digest: "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
36
36
|
};
|
|
37
37
|
const validOciRecordEmptyExtensions = {
|
|
38
|
-
key: "quay.io/octo/no-ext-skill",
|
|
38
|
+
key: "quay.io/octo/no-ext-skill:v1",
|
|
39
39
|
name: "No Extensions Skill",
|
|
40
40
|
sourceUri: "oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
41
41
|
digest: "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
@@ -105,7 +105,7 @@ const validPartialSnapshot = {
|
|
|
105
105
|
status: "partial",
|
|
106
106
|
observedAt: "2026-09-01T12:05:00Z",
|
|
107
107
|
skills: [validOciRecordMinimal],
|
|
108
|
-
failedSkillKeys: ["quay.io/octo/broken-skill"]
|
|
108
|
+
failedSkillKeys: ["quay.io/octo/broken-skill:v1"]
|
|
109
109
|
};
|
|
110
110
|
const validFailedSnapshot = {
|
|
111
111
|
schemaVersion: "1",
|
package/dist/fixtures.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.cjs.js","sources":["../src/fixtures.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Reusable OCI and npx contract fixtures for connector and provider tests.\n *\n * @packageDocumentation\n */\n\nimport type {\n NpxSkillRecord,\n OciSkillRecord,\n SkillSnapshot,\n SnapshotSource,\n} from './types';\n\n// ─── Sources ──────────────────────────────────────────────────────────\n\n/**\n * OCI source fixture for contract tests.\n *\n * @public\n */\nexport const ociSource: SnapshotSource = {\n id: 'quay-public',\n type: 'oci',\n};\n\n/**\n * npx source fixture for contract tests.\n *\n * @public\n */\nexport const npxSource: SnapshotSource = {\n id: 'rhess-index',\n type: 'npx',\n};\n\n// ─── Valid OCI records ────────────────────────────────────────────────\n\n/**\n * A valid OCI skill record with full metadata.\n *\n * @public\n */\nexport const validOciRecordFull: OciSkillRecord = {\n key: 'quay.io/octo/hello-world-skill',\n name: 'Hello World Skill',\n description: 'A demo OCI skill image',\n version: '1.0.0',\n license: 'Apache-2.0',\n authors: [{ name: 'OCTO Team', email: 'octo@example.com' }],\n tags: ['demo', 'hello-world'],\n compatibility: 'rhdh-2.2',\n owner: 'team-octo',\n lifecycle: 'production',\n sourceUri:\n 'oci://quay.io/octo/hello-world-skill@sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n digest:\n 'sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n extensions: {\n oci: {\n namespace: 'octo-skills',\n prompt: 'You are a helpful assistant.',\n },\n },\n};\n\n/**\n * A valid OCI record with only required fields.\n *\n * @public\n */\nexport const validOciRecordMinimal: OciSkillRecord = {\n key: 'quay.io/octo/minimal-skill',\n name: 'Minimal Skill',\n sourceUri:\n 'oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111',\n digest:\n 'sha256:1111111111111111111111111111111111111111111111111111111111111111',\n};\n\n/**\n * A valid OCI record with empty extensions object.\n *\n * @public\n */\nexport const validOciRecordEmptyExtensions: OciSkillRecord = {\n key: 'quay.io/octo/no-ext-skill',\n name: 'No Extensions Skill',\n sourceUri:\n 'oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222',\n digest:\n 'sha256:2222222222222222222222222222222222222222222222222222222222222222',\n extensions: {},\n};\n\n// ─── Valid npx records ────────────────────────────────────────────────\n\n/**\n * A valid npx skill record with full metadata.\n *\n * @public\n */\nexport const validNpxRecordFull: NpxSkillRecord = {\n key: 'summarize-text',\n name: 'Summarize Text',\n description: 'Summarizes input text using an LLM',\n version: '0.2.0',\n license: 'MIT',\n authors: [{ name: 'Agent Team' }],\n tags: ['summarization', 'text'],\n compatibility: 'agent-skills-v0.2',\n sourceUri: 'https://registry.example.com/skills/summarize-text/SKILL.md',\n digest:\n 'sha256:fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n/**\n * A valid npx record with only required fields.\n *\n * @public\n */\nexport const validNpxRecordMinimal: NpxSkillRecord = {\n key: 'basic-skill',\n name: 'Basic Skill',\n sourceUri: 'https://registry.example.com/skills/basic-skill/SKILL.md',\n digest:\n 'sha256:3333333333333333333333333333333333333333333333333333333333333333',\n};\n\n/**\n * A valid npx record with a query-string-bearing source URI.\n *\n * @public\n */\nexport const validNpxRecordWithQuery: NpxSkillRecord = {\n key: 'query-skill',\n name: 'Query Skill',\n sourceUri:\n 'https://registry.example.com/skills/query-skill/SKILL.md?version=2&format=raw',\n digest:\n 'sha256:4444444444444444444444444444444444444444444444444444444444444444',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n// ─── Valid snapshots ──────────────────────────────────────────────────\n\n/**\n * A valid ready OCI snapshot.\n *\n * @public\n */\nexport const validOciSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, validOciRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready npx snapshot.\n *\n * @public\n */\nexport const validNpxSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validNpxRecordMinimal, validNpxRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid loading snapshot.\n *\n * @public\n */\nexport const validLoadingSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with failed keys.\n *\n * @public\n */\nexport const validPartialSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:05:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/broken-skill'],\n};\n\n/**\n * A valid failed snapshot.\n *\n * @public\n */\nexport const validFailedSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:10:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with no records and no failed keys.\n *\n * @public\n */\nexport const validPartialEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'partial',\n observedAt: '2026-09-01T12:15:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready snapshot with zero records (successful empty discovery).\n *\n * @public\n */\nexport const validReadyEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:20:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n// ─── Invalid records ──────────────────────────────────────────────────\n\n/**\n * Record with empty key.\n *\n * @public\n */\nexport const invalidRecordEmptyKey: OciSkillRecord = {\n key: '',\n name: 'Bad Skill',\n sourceUri:\n 'oci://quay.io/octo/bad@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n digest:\n 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n};\n\n/**\n * Record with malformed digest (uppercase).\n *\n * @public\n */\nexport const invalidRecordBadDigest: OciSkillRecord = {\n key: 'quay.io/octo/bad-digest',\n name: 'Bad Digest Skill',\n sourceUri:\n 'oci://quay.io/octo/bad-digest@sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n digest:\n 'sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n};\n\n/**\n * Record with truncated digest.\n *\n * @public\n */\nexport const invalidRecordShortDigest: OciSkillRecord = {\n key: 'quay.io/octo/short-digest',\n name: 'Short Digest Skill',\n sourceUri: 'oci://quay.io/octo/short-digest@sha256:abcdef',\n digest: 'sha256:abcdef',\n};\n\n/**\n * npx record with OCI extension (source mismatch).\n *\n * @public\n */\nexport const invalidNpxRecordWithOciExtension: NpxSkillRecord = {\n key: 'mismatched-skill',\n name: 'Mismatched Skill',\n sourceUri: 'https://registry.example.com/skills/mismatch/SKILL.md',\n digest:\n 'sha256:5555555555555555555555555555555555555555555555555555555555555555',\n extensions: { oci: { namespace: 'bad' } } as unknown as {\n npx?: { type?: 'skill-md' };\n },\n};\n\n/**\n * OCI record with npx extension (source mismatch).\n *\n * @public\n */\nexport const invalidOciRecordWithNpxExtension: OciSkillRecord = {\n key: 'quay.io/octo/npx-ext-mismatch',\n name: 'Mismatch Skill',\n sourceUri:\n 'oci://quay.io/octo/mismatch@sha256:6666666666666666666666666666666666666666666666666666666666666666',\n digest:\n 'sha256:6666666666666666666666666666666666666666666666666666666666666666',\n extensions: { npx: { type: 'skill-md' } } as unknown as {\n oci?: { namespace?: string; prompt?: string };\n },\n};\n\n/**\n * OCI record with unknown extension key.\n *\n * @public\n */\nexport const invalidOciRecordUnknownExtKey: OciSkillRecord = {\n key: 'quay.io/octo/unknown-ext',\n name: 'Unknown Ext Skill',\n sourceUri:\n 'oci://quay.io/octo/unknown-ext@sha256:7777777777777777777777777777777777777777777777777777777777777777',\n digest:\n 'sha256:7777777777777777777777777777777777777777777777777777777777777777',\n extensions: {\n oci: { namespace: 'ok', secretKey: 'bad' } as unknown as {\n namespace?: string;\n prompt?: string;\n },\n },\n};\n\n// ─── Invalid snapshots ────────────────────────────────────────────────\n\n/**\n * Snapshot with unsupported schema version.\n *\n * @public\n */\nexport const invalidSnapshotBadVersion: unknown = {\n schemaVersion: '2',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot claiming ready with failed keys.\n *\n * @public\n */\nexport const invalidSnapshotReadyWithFailedKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/failed-one'],\n};\n\n/**\n * Snapshot with duplicate skill keys.\n *\n * @public\n */\nexport const invalidSnapshotDuplicateKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, { ...validOciRecordMinimal }],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with overlapping skill and failed keys.\n *\n * @public\n */\nexport const invalidSnapshotOverlappingKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [validOciRecordMinimal.key],\n};\n\n/**\n * Loading snapshot with non-null observedAt.\n *\n * @public\n */\nexport const invalidLoadingWithObservedAt: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Loading snapshot with skills.\n *\n * @public\n */\nexport const invalidLoadingWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Failed snapshot with skills.\n *\n * @public\n */\nexport const invalidFailedWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with non-UTC timestamp.\n *\n * @public\n */\nexport const invalidSnapshotNonUtcTimestamp: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00-05:00',\n skills: [],\n failedSkillKeys: [],\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.cjs.js","sources":["../src/fixtures.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Reusable OCI and npx contract fixtures for connector and provider tests.\n *\n * @packageDocumentation\n */\n\nimport type {\n NpxSkillRecord,\n OciSkillRecord,\n SkillSnapshot,\n SnapshotSource,\n} from './types';\n\n// ─── Sources ──────────────────────────────────────────────────────────\n\n/**\n * OCI source fixture for contract tests.\n *\n * @public\n */\nexport const ociSource: SnapshotSource = {\n id: 'quay-public',\n type: 'oci',\n};\n\n/**\n * npx source fixture for contract tests.\n *\n * @public\n */\nexport const npxSource: SnapshotSource = {\n id: 'rhess-index',\n type: 'npx',\n};\n\n// ─── Valid OCI records ────────────────────────────────────────────────\n\n/**\n * A valid OCI skill record with full metadata.\n *\n * @public\n */\nexport const validOciRecordFull: OciSkillRecord = {\n key: 'quay.io/octo/hello-world-skill:1.0.0-draft',\n name: 'Hello World Skill',\n description: 'A demo OCI skill image',\n version: '1.0.0',\n license: 'Apache-2.0',\n authors: [{ name: 'OCTO Team', email: 'octo@example.com' }],\n tags: ['demo', 'hello-world'],\n compatibility: 'rhdh-2.2',\n owner: 'team-octo',\n lifecycle: 'production',\n sourceUri:\n 'oci://quay.io/octo/hello-world-skill@sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n digest:\n 'sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n extensions: {\n oci: {\n namespace: 'octo-skills',\n prompt: 'You are a helpful assistant.',\n },\n },\n};\n\n/**\n * A valid OCI record with only required fields.\n *\n * @public\n */\nexport const validOciRecordMinimal: OciSkillRecord = {\n key: 'quay.io/octo/minimal-skill:latest',\n name: 'Minimal Skill',\n sourceUri:\n 'oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111',\n digest:\n 'sha256:1111111111111111111111111111111111111111111111111111111111111111',\n};\n\n/**\n * A valid OCI record with empty extensions object.\n *\n * @public\n */\nexport const validOciRecordEmptyExtensions: OciSkillRecord = {\n key: 'quay.io/octo/no-ext-skill:v1',\n name: 'No Extensions Skill',\n sourceUri:\n 'oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222',\n digest:\n 'sha256:2222222222222222222222222222222222222222222222222222222222222222',\n extensions: {},\n};\n\n// ─── Valid npx records ────────────────────────────────────────────────\n\n/**\n * A valid npx skill record with full metadata.\n *\n * @public\n */\nexport const validNpxRecordFull: NpxSkillRecord = {\n key: 'summarize-text',\n name: 'Summarize Text',\n description: 'Summarizes input text using an LLM',\n version: '0.2.0',\n license: 'MIT',\n authors: [{ name: 'Agent Team' }],\n tags: ['summarization', 'text'],\n compatibility: 'agent-skills-v0.2',\n sourceUri: 'https://registry.example.com/skills/summarize-text/SKILL.md',\n digest:\n 'sha256:fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n/**\n * A valid npx record with only required fields.\n *\n * @public\n */\nexport const validNpxRecordMinimal: NpxSkillRecord = {\n key: 'basic-skill',\n name: 'Basic Skill',\n sourceUri: 'https://registry.example.com/skills/basic-skill/SKILL.md',\n digest:\n 'sha256:3333333333333333333333333333333333333333333333333333333333333333',\n};\n\n/**\n * A valid npx record with a query-string-bearing source URI.\n *\n * @public\n */\nexport const validNpxRecordWithQuery: NpxSkillRecord = {\n key: 'query-skill',\n name: 'Query Skill',\n sourceUri:\n 'https://registry.example.com/skills/query-skill/SKILL.md?version=2&format=raw',\n digest:\n 'sha256:4444444444444444444444444444444444444444444444444444444444444444',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n// ─── Valid snapshots ──────────────────────────────────────────────────\n\n/**\n * A valid ready OCI snapshot.\n *\n * @public\n */\nexport const validOciSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, validOciRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready npx snapshot.\n *\n * @public\n */\nexport const validNpxSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validNpxRecordMinimal, validNpxRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid loading snapshot.\n *\n * @public\n */\nexport const validLoadingSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with failed keys.\n *\n * @public\n */\nexport const validPartialSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:05:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/broken-skill:v1'],\n};\n\n/**\n * A valid failed snapshot.\n *\n * @public\n */\nexport const validFailedSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:10:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with no records and no failed keys.\n *\n * @public\n */\nexport const validPartialEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'partial',\n observedAt: '2026-09-01T12:15:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready snapshot with zero records (successful empty discovery).\n *\n * @public\n */\nexport const validReadyEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:20:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n// ─── Invalid records ──────────────────────────────────────────────────\n\n/**\n * Record with empty key.\n *\n * @public\n */\nexport const invalidRecordEmptyKey: OciSkillRecord = {\n key: '',\n name: 'Bad Skill',\n sourceUri:\n 'oci://quay.io/octo/bad@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n digest:\n 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n};\n\n/**\n * Record with malformed digest (uppercase).\n *\n * @public\n */\nexport const invalidRecordBadDigest: OciSkillRecord = {\n key: 'quay.io/octo/bad-digest',\n name: 'Bad Digest Skill',\n sourceUri:\n 'oci://quay.io/octo/bad-digest@sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n digest:\n 'sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n};\n\n/**\n * Record with truncated digest.\n *\n * @public\n */\nexport const invalidRecordShortDigest: OciSkillRecord = {\n key: 'quay.io/octo/short-digest',\n name: 'Short Digest Skill',\n sourceUri: 'oci://quay.io/octo/short-digest@sha256:abcdef',\n digest: 'sha256:abcdef',\n};\n\n/**\n * npx record with OCI extension (source mismatch).\n *\n * @public\n */\nexport const invalidNpxRecordWithOciExtension: NpxSkillRecord = {\n key: 'mismatched-skill',\n name: 'Mismatched Skill',\n sourceUri: 'https://registry.example.com/skills/mismatch/SKILL.md',\n digest:\n 'sha256:5555555555555555555555555555555555555555555555555555555555555555',\n extensions: { oci: { namespace: 'bad' } } as unknown as {\n npx?: { type?: 'skill-md' };\n },\n};\n\n/**\n * OCI record with npx extension (source mismatch).\n *\n * @public\n */\nexport const invalidOciRecordWithNpxExtension: OciSkillRecord = {\n key: 'quay.io/octo/npx-ext-mismatch',\n name: 'Mismatch Skill',\n sourceUri:\n 'oci://quay.io/octo/mismatch@sha256:6666666666666666666666666666666666666666666666666666666666666666',\n digest:\n 'sha256:6666666666666666666666666666666666666666666666666666666666666666',\n extensions: { npx: { type: 'skill-md' } } as unknown as {\n oci?: { namespace?: string; prompt?: string };\n },\n};\n\n/**\n * OCI record with unknown extension key.\n *\n * @public\n */\nexport const invalidOciRecordUnknownExtKey: OciSkillRecord = {\n key: 'quay.io/octo/unknown-ext',\n name: 'Unknown Ext Skill',\n sourceUri:\n 'oci://quay.io/octo/unknown-ext@sha256:7777777777777777777777777777777777777777777777777777777777777777',\n digest:\n 'sha256:7777777777777777777777777777777777777777777777777777777777777777',\n extensions: {\n oci: { namespace: 'ok', secretKey: 'bad' } as unknown as {\n namespace?: string;\n prompt?: string;\n },\n },\n};\n\n// ─── Invalid snapshots ────────────────────────────────────────────────\n\n/**\n * Snapshot with unsupported schema version.\n *\n * @public\n */\nexport const invalidSnapshotBadVersion: unknown = {\n schemaVersion: '2',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot claiming ready with failed keys.\n *\n * @public\n */\nexport const invalidSnapshotReadyWithFailedKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/failed-one'],\n};\n\n/**\n * Snapshot with duplicate skill keys.\n *\n * @public\n */\nexport const invalidSnapshotDuplicateKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, { ...validOciRecordMinimal }],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with overlapping skill and failed keys.\n *\n * @public\n */\nexport const invalidSnapshotOverlappingKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [validOciRecordMinimal.key],\n};\n\n/**\n * Loading snapshot with non-null observedAt.\n *\n * @public\n */\nexport const invalidLoadingWithObservedAt: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Loading snapshot with skills.\n *\n * @public\n */\nexport const invalidLoadingWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Failed snapshot with skills.\n *\n * @public\n */\nexport const invalidFailedWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with non-UTC timestamp.\n *\n * @public\n */\nexport const invalidSnapshotNonUtcTimestamp: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00-05:00',\n skills: [],\n failedSkillKeys: [],\n};\n"],"names":[],"mappings":"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"}
|
package/dist/fixtures.esm.js
CHANGED
|
@@ -7,7 +7,7 @@ const npxSource = {
|
|
|
7
7
|
type: "npx"
|
|
8
8
|
};
|
|
9
9
|
const validOciRecordFull = {
|
|
10
|
-
key: "quay.io/octo/hello-world-skill",
|
|
10
|
+
key: "quay.io/octo/hello-world-skill:1.0.0-draft",
|
|
11
11
|
name: "Hello World Skill",
|
|
12
12
|
description: "A demo OCI skill image",
|
|
13
13
|
version: "1.0.0",
|
|
@@ -27,13 +27,13 @@ const validOciRecordFull = {
|
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
const validOciRecordMinimal = {
|
|
30
|
-
key: "quay.io/octo/minimal-skill",
|
|
30
|
+
key: "quay.io/octo/minimal-skill:latest",
|
|
31
31
|
name: "Minimal Skill",
|
|
32
32
|
sourceUri: "oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111",
|
|
33
33
|
digest: "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
34
34
|
};
|
|
35
35
|
const validOciRecordEmptyExtensions = {
|
|
36
|
-
key: "quay.io/octo/no-ext-skill",
|
|
36
|
+
key: "quay.io/octo/no-ext-skill:v1",
|
|
37
37
|
name: "No Extensions Skill",
|
|
38
38
|
sourceUri: "oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
39
39
|
digest: "sha256:2222222222222222222222222222222222222222222222222222222222222222",
|
|
@@ -103,7 +103,7 @@ const validPartialSnapshot = {
|
|
|
103
103
|
status: "partial",
|
|
104
104
|
observedAt: "2026-09-01T12:05:00Z",
|
|
105
105
|
skills: [validOciRecordMinimal],
|
|
106
|
-
failedSkillKeys: ["quay.io/octo/broken-skill"]
|
|
106
|
+
failedSkillKeys: ["quay.io/octo/broken-skill:v1"]
|
|
107
107
|
};
|
|
108
108
|
const validFailedSnapshot = {
|
|
109
109
|
schemaVersion: "1",
|
package/dist/fixtures.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.esm.js","sources":["../src/fixtures.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Reusable OCI and npx contract fixtures for connector and provider tests.\n *\n * @packageDocumentation\n */\n\nimport type {\n NpxSkillRecord,\n OciSkillRecord,\n SkillSnapshot,\n SnapshotSource,\n} from './types';\n\n// ─── Sources ──────────────────────────────────────────────────────────\n\n/**\n * OCI source fixture for contract tests.\n *\n * @public\n */\nexport const ociSource: SnapshotSource = {\n id: 'quay-public',\n type: 'oci',\n};\n\n/**\n * npx source fixture for contract tests.\n *\n * @public\n */\nexport const npxSource: SnapshotSource = {\n id: 'rhess-index',\n type: 'npx',\n};\n\n// ─── Valid OCI records ────────────────────────────────────────────────\n\n/**\n * A valid OCI skill record with full metadata.\n *\n * @public\n */\nexport const validOciRecordFull: OciSkillRecord = {\n key: 'quay.io/octo/hello-world-skill',\n name: 'Hello World Skill',\n description: 'A demo OCI skill image',\n version: '1.0.0',\n license: 'Apache-2.0',\n authors: [{ name: 'OCTO Team', email: 'octo@example.com' }],\n tags: ['demo', 'hello-world'],\n compatibility: 'rhdh-2.2',\n owner: 'team-octo',\n lifecycle: 'production',\n sourceUri:\n 'oci://quay.io/octo/hello-world-skill@sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n digest:\n 'sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n extensions: {\n oci: {\n namespace: 'octo-skills',\n prompt: 'You are a helpful assistant.',\n },\n },\n};\n\n/**\n * A valid OCI record with only required fields.\n *\n * @public\n */\nexport const validOciRecordMinimal: OciSkillRecord = {\n key: 'quay.io/octo/minimal-skill',\n name: 'Minimal Skill',\n sourceUri:\n 'oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111',\n digest:\n 'sha256:1111111111111111111111111111111111111111111111111111111111111111',\n};\n\n/**\n * A valid OCI record with empty extensions object.\n *\n * @public\n */\nexport const validOciRecordEmptyExtensions: OciSkillRecord = {\n key: 'quay.io/octo/no-ext-skill',\n name: 'No Extensions Skill',\n sourceUri:\n 'oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222',\n digest:\n 'sha256:2222222222222222222222222222222222222222222222222222222222222222',\n extensions: {},\n};\n\n// ─── Valid npx records ────────────────────────────────────────────────\n\n/**\n * A valid npx skill record with full metadata.\n *\n * @public\n */\nexport const validNpxRecordFull: NpxSkillRecord = {\n key: 'summarize-text',\n name: 'Summarize Text',\n description: 'Summarizes input text using an LLM',\n version: '0.2.0',\n license: 'MIT',\n authors: [{ name: 'Agent Team' }],\n tags: ['summarization', 'text'],\n compatibility: 'agent-skills-v0.2',\n sourceUri: 'https://registry.example.com/skills/summarize-text/SKILL.md',\n digest:\n 'sha256:fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n/**\n * A valid npx record with only required fields.\n *\n * @public\n */\nexport const validNpxRecordMinimal: NpxSkillRecord = {\n key: 'basic-skill',\n name: 'Basic Skill',\n sourceUri: 'https://registry.example.com/skills/basic-skill/SKILL.md',\n digest:\n 'sha256:3333333333333333333333333333333333333333333333333333333333333333',\n};\n\n/**\n * A valid npx record with a query-string-bearing source URI.\n *\n * @public\n */\nexport const validNpxRecordWithQuery: NpxSkillRecord = {\n key: 'query-skill',\n name: 'Query Skill',\n sourceUri:\n 'https://registry.example.com/skills/query-skill/SKILL.md?version=2&format=raw',\n digest:\n 'sha256:4444444444444444444444444444444444444444444444444444444444444444',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n// ─── Valid snapshots ──────────────────────────────────────────────────\n\n/**\n * A valid ready OCI snapshot.\n *\n * @public\n */\nexport const validOciSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, validOciRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready npx snapshot.\n *\n * @public\n */\nexport const validNpxSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validNpxRecordMinimal, validNpxRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid loading snapshot.\n *\n * @public\n */\nexport const validLoadingSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with failed keys.\n *\n * @public\n */\nexport const validPartialSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:05:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/broken-skill'],\n};\n\n/**\n * A valid failed snapshot.\n *\n * @public\n */\nexport const validFailedSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:10:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with no records and no failed keys.\n *\n * @public\n */\nexport const validPartialEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'partial',\n observedAt: '2026-09-01T12:15:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready snapshot with zero records (successful empty discovery).\n *\n * @public\n */\nexport const validReadyEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:20:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n// ─── Invalid records ──────────────────────────────────────────────────\n\n/**\n * Record with empty key.\n *\n * @public\n */\nexport const invalidRecordEmptyKey: OciSkillRecord = {\n key: '',\n name: 'Bad Skill',\n sourceUri:\n 'oci://quay.io/octo/bad@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n digest:\n 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n};\n\n/**\n * Record with malformed digest (uppercase).\n *\n * @public\n */\nexport const invalidRecordBadDigest: OciSkillRecord = {\n key: 'quay.io/octo/bad-digest',\n name: 'Bad Digest Skill',\n sourceUri:\n 'oci://quay.io/octo/bad-digest@sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n digest:\n 'sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n};\n\n/**\n * Record with truncated digest.\n *\n * @public\n */\nexport const invalidRecordShortDigest: OciSkillRecord = {\n key: 'quay.io/octo/short-digest',\n name: 'Short Digest Skill',\n sourceUri: 'oci://quay.io/octo/short-digest@sha256:abcdef',\n digest: 'sha256:abcdef',\n};\n\n/**\n * npx record with OCI extension (source mismatch).\n *\n * @public\n */\nexport const invalidNpxRecordWithOciExtension: NpxSkillRecord = {\n key: 'mismatched-skill',\n name: 'Mismatched Skill',\n sourceUri: 'https://registry.example.com/skills/mismatch/SKILL.md',\n digest:\n 'sha256:5555555555555555555555555555555555555555555555555555555555555555',\n extensions: { oci: { namespace: 'bad' } } as unknown as {\n npx?: { type?: 'skill-md' };\n },\n};\n\n/**\n * OCI record with npx extension (source mismatch).\n *\n * @public\n */\nexport const invalidOciRecordWithNpxExtension: OciSkillRecord = {\n key: 'quay.io/octo/npx-ext-mismatch',\n name: 'Mismatch Skill',\n sourceUri:\n 'oci://quay.io/octo/mismatch@sha256:6666666666666666666666666666666666666666666666666666666666666666',\n digest:\n 'sha256:6666666666666666666666666666666666666666666666666666666666666666',\n extensions: { npx: { type: 'skill-md' } } as unknown as {\n oci?: { namespace?: string; prompt?: string };\n },\n};\n\n/**\n * OCI record with unknown extension key.\n *\n * @public\n */\nexport const invalidOciRecordUnknownExtKey: OciSkillRecord = {\n key: 'quay.io/octo/unknown-ext',\n name: 'Unknown Ext Skill',\n sourceUri:\n 'oci://quay.io/octo/unknown-ext@sha256:7777777777777777777777777777777777777777777777777777777777777777',\n digest:\n 'sha256:7777777777777777777777777777777777777777777777777777777777777777',\n extensions: {\n oci: { namespace: 'ok', secretKey: 'bad' } as unknown as {\n namespace?: string;\n prompt?: string;\n },\n },\n};\n\n// ─── Invalid snapshots ────────────────────────────────────────────────\n\n/**\n * Snapshot with unsupported schema version.\n *\n * @public\n */\nexport const invalidSnapshotBadVersion: unknown = {\n schemaVersion: '2',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot claiming ready with failed keys.\n *\n * @public\n */\nexport const invalidSnapshotReadyWithFailedKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/failed-one'],\n};\n\n/**\n * Snapshot with duplicate skill keys.\n *\n * @public\n */\nexport const invalidSnapshotDuplicateKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, { ...validOciRecordMinimal }],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with overlapping skill and failed keys.\n *\n * @public\n */\nexport const invalidSnapshotOverlappingKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [validOciRecordMinimal.key],\n};\n\n/**\n * Loading snapshot with non-null observedAt.\n *\n * @public\n */\nexport const invalidLoadingWithObservedAt: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Loading snapshot with skills.\n *\n * @public\n */\nexport const invalidLoadingWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Failed snapshot with skills.\n *\n * @public\n */\nexport const invalidFailedWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with non-UTC timestamp.\n *\n * @public\n */\nexport const invalidSnapshotNonUtcTimestamp: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00-05:00',\n skills: [],\n failedSkillKeys: [],\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.esm.js","sources":["../src/fixtures.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Reusable OCI and npx contract fixtures for connector and provider tests.\n *\n * @packageDocumentation\n */\n\nimport type {\n NpxSkillRecord,\n OciSkillRecord,\n SkillSnapshot,\n SnapshotSource,\n} from './types';\n\n// ─── Sources ──────────────────────────────────────────────────────────\n\n/**\n * OCI source fixture for contract tests.\n *\n * @public\n */\nexport const ociSource: SnapshotSource = {\n id: 'quay-public',\n type: 'oci',\n};\n\n/**\n * npx source fixture for contract tests.\n *\n * @public\n */\nexport const npxSource: SnapshotSource = {\n id: 'rhess-index',\n type: 'npx',\n};\n\n// ─── Valid OCI records ────────────────────────────────────────────────\n\n/**\n * A valid OCI skill record with full metadata.\n *\n * @public\n */\nexport const validOciRecordFull: OciSkillRecord = {\n key: 'quay.io/octo/hello-world-skill:1.0.0-draft',\n name: 'Hello World Skill',\n description: 'A demo OCI skill image',\n version: '1.0.0',\n license: 'Apache-2.0',\n authors: [{ name: 'OCTO Team', email: 'octo@example.com' }],\n tags: ['demo', 'hello-world'],\n compatibility: 'rhdh-2.2',\n owner: 'team-octo',\n lifecycle: 'production',\n sourceUri:\n 'oci://quay.io/octo/hello-world-skill@sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n digest:\n 'sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',\n extensions: {\n oci: {\n namespace: 'octo-skills',\n prompt: 'You are a helpful assistant.',\n },\n },\n};\n\n/**\n * A valid OCI record with only required fields.\n *\n * @public\n */\nexport const validOciRecordMinimal: OciSkillRecord = {\n key: 'quay.io/octo/minimal-skill:latest',\n name: 'Minimal Skill',\n sourceUri:\n 'oci://quay.io/octo/minimal-skill@sha256:1111111111111111111111111111111111111111111111111111111111111111',\n digest:\n 'sha256:1111111111111111111111111111111111111111111111111111111111111111',\n};\n\n/**\n * A valid OCI record with empty extensions object.\n *\n * @public\n */\nexport const validOciRecordEmptyExtensions: OciSkillRecord = {\n key: 'quay.io/octo/no-ext-skill:v1',\n name: 'No Extensions Skill',\n sourceUri:\n 'oci://quay.io/octo/no-ext-skill@sha256:2222222222222222222222222222222222222222222222222222222222222222',\n digest:\n 'sha256:2222222222222222222222222222222222222222222222222222222222222222',\n extensions: {},\n};\n\n// ─── Valid npx records ────────────────────────────────────────────────\n\n/**\n * A valid npx skill record with full metadata.\n *\n * @public\n */\nexport const validNpxRecordFull: NpxSkillRecord = {\n key: 'summarize-text',\n name: 'Summarize Text',\n description: 'Summarizes input text using an LLM',\n version: '0.2.0',\n license: 'MIT',\n authors: [{ name: 'Agent Team' }],\n tags: ['summarization', 'text'],\n compatibility: 'agent-skills-v0.2',\n sourceUri: 'https://registry.example.com/skills/summarize-text/SKILL.md',\n digest:\n 'sha256:fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n/**\n * A valid npx record with only required fields.\n *\n * @public\n */\nexport const validNpxRecordMinimal: NpxSkillRecord = {\n key: 'basic-skill',\n name: 'Basic Skill',\n sourceUri: 'https://registry.example.com/skills/basic-skill/SKILL.md',\n digest:\n 'sha256:3333333333333333333333333333333333333333333333333333333333333333',\n};\n\n/**\n * A valid npx record with a query-string-bearing source URI.\n *\n * @public\n */\nexport const validNpxRecordWithQuery: NpxSkillRecord = {\n key: 'query-skill',\n name: 'Query Skill',\n sourceUri:\n 'https://registry.example.com/skills/query-skill/SKILL.md?version=2&format=raw',\n digest:\n 'sha256:4444444444444444444444444444444444444444444444444444444444444444',\n extensions: {\n npx: {\n type: 'skill-md',\n },\n },\n};\n\n// ─── Valid snapshots ──────────────────────────────────────────────────\n\n/**\n * A valid ready OCI snapshot.\n *\n * @public\n */\nexport const validOciSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, validOciRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready npx snapshot.\n *\n * @public\n */\nexport const validNpxSnapshotReady: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validNpxRecordMinimal, validNpxRecordFull],\n failedSkillKeys: [],\n};\n\n/**\n * A valid loading snapshot.\n *\n * @public\n */\nexport const validLoadingSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with failed keys.\n *\n * @public\n */\nexport const validPartialSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:05:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/broken-skill:v1'],\n};\n\n/**\n * A valid failed snapshot.\n *\n * @public\n */\nexport const validFailedSnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:10:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid partial snapshot with no records and no failed keys.\n *\n * @public\n */\nexport const validPartialEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: npxSource,\n status: 'partial',\n observedAt: '2026-09-01T12:15:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * A valid ready snapshot with zero records (successful empty discovery).\n *\n * @public\n */\nexport const validReadyEmptySnapshot: SkillSnapshot = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:20:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n// ─── Invalid records ──────────────────────────────────────────────────\n\n/**\n * Record with empty key.\n *\n * @public\n */\nexport const invalidRecordEmptyKey: OciSkillRecord = {\n key: '',\n name: 'Bad Skill',\n sourceUri:\n 'oci://quay.io/octo/bad@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n digest:\n 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n};\n\n/**\n * Record with malformed digest (uppercase).\n *\n * @public\n */\nexport const invalidRecordBadDigest: OciSkillRecord = {\n key: 'quay.io/octo/bad-digest',\n name: 'Bad Digest Skill',\n sourceUri:\n 'oci://quay.io/octo/bad-digest@sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n digest:\n 'sha256:ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789',\n};\n\n/**\n * Record with truncated digest.\n *\n * @public\n */\nexport const invalidRecordShortDigest: OciSkillRecord = {\n key: 'quay.io/octo/short-digest',\n name: 'Short Digest Skill',\n sourceUri: 'oci://quay.io/octo/short-digest@sha256:abcdef',\n digest: 'sha256:abcdef',\n};\n\n/**\n * npx record with OCI extension (source mismatch).\n *\n * @public\n */\nexport const invalidNpxRecordWithOciExtension: NpxSkillRecord = {\n key: 'mismatched-skill',\n name: 'Mismatched Skill',\n sourceUri: 'https://registry.example.com/skills/mismatch/SKILL.md',\n digest:\n 'sha256:5555555555555555555555555555555555555555555555555555555555555555',\n extensions: { oci: { namespace: 'bad' } } as unknown as {\n npx?: { type?: 'skill-md' };\n },\n};\n\n/**\n * OCI record with npx extension (source mismatch).\n *\n * @public\n */\nexport const invalidOciRecordWithNpxExtension: OciSkillRecord = {\n key: 'quay.io/octo/npx-ext-mismatch',\n name: 'Mismatch Skill',\n sourceUri:\n 'oci://quay.io/octo/mismatch@sha256:6666666666666666666666666666666666666666666666666666666666666666',\n digest:\n 'sha256:6666666666666666666666666666666666666666666666666666666666666666',\n extensions: { npx: { type: 'skill-md' } } as unknown as {\n oci?: { namespace?: string; prompt?: string };\n },\n};\n\n/**\n * OCI record with unknown extension key.\n *\n * @public\n */\nexport const invalidOciRecordUnknownExtKey: OciSkillRecord = {\n key: 'quay.io/octo/unknown-ext',\n name: 'Unknown Ext Skill',\n sourceUri:\n 'oci://quay.io/octo/unknown-ext@sha256:7777777777777777777777777777777777777777777777777777777777777777',\n digest:\n 'sha256:7777777777777777777777777777777777777777777777777777777777777777',\n extensions: {\n oci: { namespace: 'ok', secretKey: 'bad' } as unknown as {\n namespace?: string;\n prompt?: string;\n },\n },\n};\n\n// ─── Invalid snapshots ────────────────────────────────────────────────\n\n/**\n * Snapshot with unsupported schema version.\n *\n * @public\n */\nexport const invalidSnapshotBadVersion: unknown = {\n schemaVersion: '2',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot claiming ready with failed keys.\n *\n * @public\n */\nexport const invalidSnapshotReadyWithFailedKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: ['quay.io/octo/failed-one'],\n};\n\n/**\n * Snapshot with duplicate skill keys.\n *\n * @public\n */\nexport const invalidSnapshotDuplicateKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal, { ...validOciRecordMinimal }],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with overlapping skill and failed keys.\n *\n * @public\n */\nexport const invalidSnapshotOverlappingKeys: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'partial',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [validOciRecordMinimal.key],\n};\n\n/**\n * Loading snapshot with non-null observedAt.\n *\n * @public\n */\nexport const invalidLoadingWithObservedAt: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [],\n failedSkillKeys: [],\n};\n\n/**\n * Loading snapshot with skills.\n *\n * @public\n */\nexport const invalidLoadingWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'loading',\n observedAt: null,\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Failed snapshot with skills.\n *\n * @public\n */\nexport const invalidFailedWithSkills: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'failed',\n observedAt: '2026-09-01T12:00:00Z',\n skills: [validOciRecordMinimal],\n failedSkillKeys: [],\n};\n\n/**\n * Snapshot with non-UTC timestamp.\n *\n * @public\n */\nexport const invalidSnapshotNonUtcTimestamp: unknown = {\n schemaVersion: '1',\n source: ociSource,\n status: 'ready',\n observedAt: '2026-09-01T12:00:00-05:00',\n skills: [],\n failedSkillKeys: [],\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-ai-skills-common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Shared v1 skill record and snapshot contract for RHDH skill connectors and the common catalog provider",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/index.cjs.js",
|