@senior-skills/core 1.0.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/application/agent-selection.d.ts +42 -0
- package/dist/application/agent-selection.d.ts.map +1 -0
- package/dist/application/agent-selection.js +143 -0
- package/dist/application/agent-selection.js.map +1 -0
- package/dist/application/apply-skill-updates.d.ts +10 -0
- package/dist/application/apply-skill-updates.d.ts.map +1 -0
- package/dist/application/apply-skill-updates.js +75 -0
- package/dist/application/apply-skill-updates.js.map +1 -0
- package/dist/application/check-updates.d.ts +40 -0
- package/dist/application/check-updates.d.ts.map +1 -0
- package/dist/application/check-updates.js +130 -0
- package/dist/application/check-updates.js.map +1 -0
- package/dist/application/context.d.ts +28 -0
- package/dist/application/context.d.ts.map +1 -0
- package/dist/application/context.js +2 -0
- package/dist/application/context.js.map +1 -0
- package/dist/application/create-skill.d.ts +33 -0
- package/dist/application/create-skill.d.ts.map +1 -0
- package/dist/application/create-skill.js +58 -0
- package/dist/application/create-skill.js.map +1 -0
- package/dist/application/diagnose.d.ts +44 -0
- package/dist/application/diagnose.d.ts.map +1 -0
- package/dist/application/diagnose.js +228 -0
- package/dist/application/diagnose.js.map +1 -0
- package/dist/application/install-skills.d.ts +59 -0
- package/dist/application/install-skills.d.ts.map +1 -0
- package/dist/application/install-skills.js +191 -0
- package/dist/application/install-skills.js.map +1 -0
- package/dist/application/list-installed.d.ts +39 -0
- package/dist/application/list-installed.d.ts.map +1 -0
- package/dist/application/list-installed.js +68 -0
- package/dist/application/list-installed.js.map +1 -0
- package/dist/application/package-loader.d.ts +42 -0
- package/dist/application/package-loader.d.ts.map +1 -0
- package/dist/application/package-loader.js +320 -0
- package/dist/application/package-loader.js.map +1 -0
- package/dist/application/publish-skill.d.ts +41 -0
- package/dist/application/publish-skill.d.ts.map +1 -0
- package/dist/application/publish-skill.js +112 -0
- package/dist/application/publish-skill.js.map +1 -0
- package/dist/application/remove-skills.d.ts +34 -0
- package/dist/application/remove-skills.d.ts.map +1 -0
- package/dist/application/remove-skills.js +95 -0
- package/dist/application/remove-skills.js.map +1 -0
- package/dist/application/resolution-source.d.ts +25 -0
- package/dist/application/resolution-source.d.ts.map +1 -0
- package/dist/application/resolution-source.js +60 -0
- package/dist/application/resolution-source.js.map +1 -0
- package/dist/application/resolve-suggestions.d.ts +17 -0
- package/dist/application/resolve-suggestions.d.ts.map +1 -0
- package/dist/application/resolve-suggestions.js +77 -0
- package/dist/application/resolve-suggestions.js.map +1 -0
- package/dist/application/search-skills.d.ts +36 -0
- package/dist/application/search-skills.d.ts.map +1 -0
- package/dist/application/search-skills.js +78 -0
- package/dist/application/search-skills.js.map +1 -0
- package/dist/application/update-skills.d.ts +55 -0
- package/dist/application/update-skills.d.ts.map +1 -0
- package/dist/application/update-skills.js +115 -0
- package/dist/application/update-skills.js.map +1 -0
- package/dist/application/validate-package.d.ts +27 -0
- package/dist/application/validate-package.d.ts.map +1 -0
- package/dist/application/validate-package.js +165 -0
- package/dist/application/validate-package.js.map +1 -0
- package/dist/application/workspace.d.ts +22 -0
- package/dist/application/workspace.d.ts.map +1 -0
- package/dist/application/workspace.js +66 -0
- package/dist/application/workspace.js.map +1 -0
- package/dist/domain/agent.d.ts +89 -0
- package/dist/domain/agent.d.ts.map +1 -0
- package/dist/domain/agent.js +20 -0
- package/dist/domain/agent.js.map +1 -0
- package/dist/domain/errors.d.ts +91 -0
- package/dist/domain/errors.d.ts.map +1 -0
- package/dist/domain/errors.js +121 -0
- package/dist/domain/errors.js.map +1 -0
- package/dist/domain/integrity.d.ts +19 -0
- package/dist/domain/integrity.d.ts.map +1 -0
- package/dist/domain/integrity.js +0 -0
- package/dist/domain/integrity.js.map +1 -0
- package/dist/domain/js-literal.d.ts +22 -0
- package/dist/domain/js-literal.d.ts.map +1 -0
- package/dist/domain/js-literal.js +221 -0
- package/dist/domain/js-literal.js.map +1 -0
- package/dist/domain/lockfile.d.ts +36 -0
- package/dist/domain/lockfile.d.ts.map +1 -0
- package/dist/domain/lockfile.js +148 -0
- package/dist/domain/lockfile.js.map +1 -0
- package/dist/domain/manifest.d.ts +96 -0
- package/dist/domain/manifest.d.ts.map +1 -0
- package/dist/domain/manifest.js +448 -0
- package/dist/domain/manifest.js.map +1 -0
- package/dist/domain/path-safety.d.ts +19 -0
- package/dist/domain/path-safety.d.ts.map +1 -0
- package/dist/domain/path-safety.js +125 -0
- package/dist/domain/path-safety.js.map +1 -0
- package/dist/domain/posix-path.d.ts +28 -0
- package/dist/domain/posix-path.d.ts.map +1 -0
- package/dist/domain/posix-path.js +84 -0
- package/dist/domain/posix-path.js.map +1 -0
- package/dist/domain/receipt.d.ts +41 -0
- package/dist/domain/receipt.d.ts.map +1 -0
- package/dist/domain/receipt.js +93 -0
- package/dist/domain/receipt.js.map +1 -0
- package/dist/domain/registry-index.d.ts +41 -0
- package/dist/domain/registry-index.d.ts.map +1 -0
- package/dist/domain/registry-index.js +150 -0
- package/dist/domain/registry-index.js.map +1 -0
- package/dist/domain/resolver.d.ts +54 -0
- package/dist/domain/resolver.d.ts.map +1 -0
- package/dist/domain/resolver.js +238 -0
- package/dist/domain/resolver.js.map +1 -0
- package/dist/domain/skill-document.d.ts +16 -0
- package/dist/domain/skill-document.d.ts.map +1 -0
- package/dist/domain/skill-document.js +60 -0
- package/dist/domain/skill-document.js.map +1 -0
- package/dist/domain/skill-package.d.ts +43 -0
- package/dist/domain/skill-package.d.ts.map +1 -0
- package/dist/domain/skill-package.js +63 -0
- package/dist/domain/skill-package.js.map +1 -0
- package/dist/domain/skill-ref.d.ts +30 -0
- package/dist/domain/skill-ref.d.ts.map +1 -0
- package/dist/domain/skill-ref.js +119 -0
- package/dist/domain/skill-ref.js.map +1 -0
- package/dist/domain/validation.d.ts +30 -0
- package/dist/domain/validation.d.ts.map +1 -0
- package/dist/domain/validation.js +32 -0
- package/dist/domain/validation.js.map +1 -0
- package/dist/domain/version.d.ts +23 -0
- package/dist/domain/version.d.ts.map +1 -0
- package/dist/domain/version.js +81 -0
- package/dist/domain/version.js.map +1 -0
- package/dist/domain/workflow-document.d.ts +23 -0
- package/dist/domain/workflow-document.d.ts.map +1 -0
- package/dist/domain/workflow-document.js +56 -0
- package/dist/domain/workflow-document.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/agent-adapter.d.ts +65 -0
- package/dist/ports/agent-adapter.d.ts.map +1 -0
- package/dist/ports/agent-adapter.js +28 -0
- package/dist/ports/agent-adapter.js.map +1 -0
- package/dist/ports/config-store.d.ts +27 -0
- package/dist/ports/config-store.d.ts.map +1 -0
- package/dist/ports/config-store.js +2 -0
- package/dist/ports/config-store.js.map +1 -0
- package/dist/ports/infrastructure.d.ts +123 -0
- package/dist/ports/infrastructure.d.ts.map +1 -0
- package/dist/ports/infrastructure.js +9 -0
- package/dist/ports/infrastructure.js.map +1 -0
- package/dist/ports/installation.d.ts +86 -0
- package/dist/ports/installation.d.ts.map +1 -0
- package/dist/ports/installation.js +2 -0
- package/dist/ports/installation.js.map +1 -0
- package/dist/ports/skill-registry.d.ts +74 -0
- package/dist/ports/skill-registry.d.ts.map +1 -0
- package/dist/ports/skill-registry.js +2 -0
- package/dist/ports/skill-registry.js.map +1 -0
- package/dist/ports/updates.d.ts +31 -0
- package/dist/ports/updates.d.ts.map +1 -0
- package/dist/ports/updates.js +4 -0
- package/dist/ports/updates.js.map +1 -0
- package/dist/testing/doubles.d.ts +127 -0
- package/dist/testing/doubles.d.ts.map +1 -0
- package/dist/testing/doubles.js +299 -0
- package/dist/testing/doubles.js.map +1 -0
- package/dist/testing/in-memory-file-system.d.ts +61 -0
- package/dist/testing/in-memory-file-system.d.ts.map +1 -0
- package/dist/testing/in-memory-file-system.js +297 -0
- package/dist/testing/in-memory-file-system.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
2
|
+
import { AgentSkillsError, ErrorCode } from "./errors.js";
|
|
3
|
+
import { parseVersion } from "./version.js";
|
|
4
|
+
/**
|
|
5
|
+
* `skills.lock` makes a project install reproducible. It is written for project scope only:
|
|
6
|
+
* a user's global agent configuration is a mutable environment, not a build artefact.
|
|
7
|
+
*/
|
|
8
|
+
export const LOCKFILE_NAME = 'skills.lock';
|
|
9
|
+
export const CURRENT_LOCKFILE_VERSION = 1;
|
|
10
|
+
export function emptyLockfile(generatedWith) {
|
|
11
|
+
return {
|
|
12
|
+
lockfileVersion: CURRENT_LOCKFILE_VERSION,
|
|
13
|
+
...(generatedWith === undefined ? {} : { generatedWith }),
|
|
14
|
+
skills: {},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function parseLockfile(text, source = LOCKFILE_NAME) {
|
|
18
|
+
let raw;
|
|
19
|
+
try {
|
|
20
|
+
raw = parseYaml(text);
|
|
21
|
+
}
|
|
22
|
+
catch (cause) {
|
|
23
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_INVALID, `Could not parse ${source}`, {
|
|
24
|
+
details: [cause instanceof Error ? cause.message : String(cause)],
|
|
25
|
+
hints: [`Delete ${source} and re-run install to regenerate it`],
|
|
26
|
+
cause,
|
|
27
|
+
data: { source },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
31
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_INVALID, `${source} must be a mapping`, {
|
|
32
|
+
hints: [`Delete ${source} and re-run install to regenerate it`],
|
|
33
|
+
data: { source },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const doc = raw;
|
|
37
|
+
const lockfileVersion = typeof doc['lockfileVersion'] === 'number' ? doc['lockfileVersion'] : CURRENT_LOCKFILE_VERSION;
|
|
38
|
+
if (lockfileVersion > CURRENT_LOCKFILE_VERSION) {
|
|
39
|
+
throw new AgentSkillsError(ErrorCode.UNSUPPORTED_SCHEMA, `${source} uses lockfile v${lockfileVersion}; this CLI understands up to v${CURRENT_LOCKFILE_VERSION}`, {
|
|
40
|
+
hints: ['Upgrade the CLI: npm install -g @senior-skills/cli@latest'],
|
|
41
|
+
data: { source },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const rawSkills = doc['skills'];
|
|
45
|
+
if (rawSkills !== undefined &&
|
|
46
|
+
(typeof rawSkills !== 'object' || rawSkills === null || Array.isArray(rawSkills))) {
|
|
47
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_INVALID, `${source}: "skills" must be a mapping`, {
|
|
48
|
+
data: { source },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const skills = {};
|
|
52
|
+
for (const [name, value] of Object.entries((rawSkills ?? {}))) {
|
|
53
|
+
skills[name] = parseLockedSkill(name, value, source);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
lockfileVersion,
|
|
57
|
+
...(typeof doc['generatedWith'] === 'string' ? { generatedWith: doc['generatedWith'] } : {}),
|
|
58
|
+
skills,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function parseLockedSkill(name, value, source) {
|
|
62
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
63
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_INVALID, `${source}: entry "${name}" must be a mapping`, {
|
|
64
|
+
data: { source, name },
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const record = value;
|
|
68
|
+
const required = (key) => {
|
|
69
|
+
const item = record[key];
|
|
70
|
+
if (typeof item !== 'string' || item === '') {
|
|
71
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_INVALID, `${source}: entry "${name}" is missing "${key}"`, { hints: [`Delete ${source} and re-run install to regenerate it`], data: { source, name } });
|
|
72
|
+
}
|
|
73
|
+
return item;
|
|
74
|
+
};
|
|
75
|
+
const dependencies = {};
|
|
76
|
+
const rawDeps = record['dependencies'];
|
|
77
|
+
if (rawDeps !== undefined &&
|
|
78
|
+
typeof rawDeps === 'object' &&
|
|
79
|
+
rawDeps !== null &&
|
|
80
|
+
!Array.isArray(rawDeps)) {
|
|
81
|
+
for (const [depName, depVersion] of Object.entries(rawDeps)) {
|
|
82
|
+
if (typeof depVersion !== 'string')
|
|
83
|
+
continue;
|
|
84
|
+
dependencies[depName] = parseVersion(depVersion, `${source} ${name}.dependencies.${depName}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
version: parseVersion(required('version'), `${source} ${name}`),
|
|
89
|
+
registry: required('registry'),
|
|
90
|
+
resolved: required('resolved'),
|
|
91
|
+
integrity: required('integrity'),
|
|
92
|
+
agents: Array.isArray(record['agents'])
|
|
93
|
+
? record['agents'].filter((agent) => typeof agent === 'string')
|
|
94
|
+
: [],
|
|
95
|
+
dependencies,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function stringifyLockfile(lock) {
|
|
99
|
+
const names = Object.keys(lock.skills).sort();
|
|
100
|
+
const skills = {};
|
|
101
|
+
for (const name of names) {
|
|
102
|
+
const entry = lock.skills[name];
|
|
103
|
+
skills[name] = {
|
|
104
|
+
version: entry.version,
|
|
105
|
+
registry: entry.registry,
|
|
106
|
+
resolved: entry.resolved,
|
|
107
|
+
integrity: entry.integrity,
|
|
108
|
+
agents: [...entry.agents].sort(),
|
|
109
|
+
dependencies: Object.fromEntries(Object.entries(entry.dependencies).sort(([a], [b]) => a.localeCompare(b))),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return stringifyYaml({
|
|
113
|
+
lockfileVersion: lock.lockfileVersion,
|
|
114
|
+
...(lock.generatedWith === undefined ? {} : { generatedWith: lock.generatedWith }),
|
|
115
|
+
skills,
|
|
116
|
+
}, { lineWidth: 0, singleQuote: false });
|
|
117
|
+
}
|
|
118
|
+
export function withSkill(lock, name, entry) {
|
|
119
|
+
return { ...lock, skills: { ...lock.skills, [name]: entry } };
|
|
120
|
+
}
|
|
121
|
+
export function withoutSkill(lock, name) {
|
|
122
|
+
const skills = { ...lock.skills };
|
|
123
|
+
delete skills[name];
|
|
124
|
+
return { ...lock, skills };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Guards against a registry serving different bytes for a version we have already pinned.
|
|
128
|
+
* A mismatch is a security event, not a cache-miss: it aborts rather than re-resolving.
|
|
129
|
+
*/
|
|
130
|
+
export function assertIntegrityMatches(name, expected, actual, source = LOCKFILE_NAME) {
|
|
131
|
+
if (expected === actual)
|
|
132
|
+
return;
|
|
133
|
+
throw new AgentSkillsError(ErrorCode.LOCKFILE_MISMATCH, `Integrity mismatch for "${name}"`, {
|
|
134
|
+
details: [
|
|
135
|
+
`${source} expects: ${expected}`,
|
|
136
|
+
`registry served: ${actual}`,
|
|
137
|
+
'',
|
|
138
|
+
'The package contents differ from what was locked. This can mean the registry was',
|
|
139
|
+
'changed in place, or that the download was tampered with.',
|
|
140
|
+
],
|
|
141
|
+
hints: [
|
|
142
|
+
`senior-skills update ${name} if the change is expected`,
|
|
143
|
+
`senior-skills info ${name} to inspect the published versions`,
|
|
144
|
+
],
|
|
145
|
+
data: { name, expected, actual },
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=lockfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/domain/lockfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { type SemanticVersion } from './version.ts';
|
|
2
|
+
import { type ValidationIssue } from './validation.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The package format version. Bumped only for genuinely breaking changes; additive fields
|
|
5
|
+
* ship as optional under the current number.
|
|
6
|
+
*/
|
|
7
|
+
export declare const CURRENT_SCHEMA_VERSION = 1;
|
|
8
|
+
export declare const MANIFEST_FILENAME = "skill.yaml";
|
|
9
|
+
export declare const SKILL_ENTRYPOINT = "SKILL.md";
|
|
10
|
+
export declare const COMMAND_ENTRYPOINT = "COMMAND.md";
|
|
11
|
+
export declare const WORKFLOW_ENTRYPOINT = "WORKFLOW.js";
|
|
12
|
+
/**
|
|
13
|
+
* What the package *is*, which decides where an agent stores it and how it is invoked: a
|
|
14
|
+
* skill is model-selected, a command is user-invoked, a workflow is a script the agent runs
|
|
15
|
+
* by name. Everything else about the format — manifest, integrity, dependencies, receipts —
|
|
16
|
+
* is identical across kinds.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PACKAGE_KINDS: readonly ["skill", "command", "workflow"];
|
|
19
|
+
export type PackageKind = (typeof PACKAGE_KINDS)[number];
|
|
20
|
+
/** Packages published before `kind` existed are skills. */
|
|
21
|
+
export declare const DEFAULT_PACKAGE_KIND: PackageKind;
|
|
22
|
+
/** The agent-facing entrypoint document for a kind. */
|
|
23
|
+
export declare function entrypointFor(kind: PackageKind): string;
|
|
24
|
+
export interface SkillAuthor {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly email?: string;
|
|
27
|
+
readonly url?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SkillRepository {
|
|
30
|
+
readonly type: string;
|
|
31
|
+
readonly url: string;
|
|
32
|
+
/** Sub-directory inside the repository holding the package. */
|
|
33
|
+
readonly directory?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface AgentCompatibility {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
/** Semver range against the agent's own version, enforced when detection can supply one. */
|
|
38
|
+
readonly minVersion?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface SkillDependency {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly version: string;
|
|
43
|
+
}
|
|
44
|
+
export interface SkillManifest {
|
|
45
|
+
readonly schemaVersion: number;
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly kind: PackageKind;
|
|
48
|
+
readonly version: SemanticVersion;
|
|
49
|
+
readonly description: string;
|
|
50
|
+
readonly license?: string;
|
|
51
|
+
readonly keywords: readonly string[];
|
|
52
|
+
readonly authors: readonly SkillAuthor[];
|
|
53
|
+
readonly homepage?: string;
|
|
54
|
+
readonly repository?: SkillRepository;
|
|
55
|
+
/** Empty list means "compatible with every agent". */
|
|
56
|
+
readonly compatibility: readonly AgentCompatibility[];
|
|
57
|
+
readonly files: readonly string[];
|
|
58
|
+
readonly dependencies: readonly SkillDependency[];
|
|
59
|
+
readonly optionalDependencies: readonly SkillDependency[];
|
|
60
|
+
/**
|
|
61
|
+
* Skills this one hands the reader off to in its own prose, by name and without a range.
|
|
62
|
+
*
|
|
63
|
+
* Nothing resolves these and nothing installs them. They exist because a sentence like
|
|
64
|
+
* "`retries-and-backoff` owns the mechanism" is a routing promise the package cannot keep on
|
|
65
|
+
* its own, and declaring it as a dependency instead would drag most of the catalogue into
|
|
66
|
+
* every install. A range is deliberately absent: an unresolved range is a constraint nobody
|
|
67
|
+
* checks, and this file does not carry claims it cannot enforce.
|
|
68
|
+
*/
|
|
69
|
+
readonly suggests: readonly string[];
|
|
70
|
+
readonly capabilities: readonly string[];
|
|
71
|
+
readonly integrity?: string;
|
|
72
|
+
readonly signatures: readonly unknown[];
|
|
73
|
+
/** Presentation-only, per-agent metadata. Adapters allowlist the keys they accept. */
|
|
74
|
+
readonly agentOverrides: Readonly<Record<string, Record<string, unknown>>>;
|
|
75
|
+
}
|
|
76
|
+
export interface ParseManifestOptions {
|
|
77
|
+
/** Path shown in error messages. */
|
|
78
|
+
readonly source?: string;
|
|
79
|
+
/** Unknown keys become errors rather than warnings. Used by `validate --strict` and `publish`. */
|
|
80
|
+
readonly strict?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface ParsedManifest {
|
|
83
|
+
readonly manifest: SkillManifest;
|
|
84
|
+
readonly issues: readonly ValidationIssue[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parses and normalises a `skill.yaml`.
|
|
88
|
+
*
|
|
89
|
+
* Throws {@link AgentSkillsError} for anything that makes the document unusable, and
|
|
90
|
+
* returns non-fatal findings as issues so `validate` can show several problems at once
|
|
91
|
+
* instead of one per run.
|
|
92
|
+
*/
|
|
93
|
+
export declare function parseManifest(text: string, options?: ParseManifestOptions): ParsedManifest;
|
|
94
|
+
/** Serialises a manifest back to YAML, omitting empty optional fields to keep files tidy. */
|
|
95
|
+
export declare function stringifyManifest(manifest: SkillManifest): string;
|
|
96
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/domain/manifest.ts"],"names":[],"mappings":"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"}
|