@jini-ai/agentic 0.4.4 → 0.6.10
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 +98 -1
- package/README.md +13 -1
- package/dist/core/a2ui/agent-to-renderer.d.ts.map +1 -0
- package/dist/core/a2ui/agent-to-renderer.js.map +1 -0
- package/dist/core/a2ui/catalog.d.ts.map +1 -0
- package/dist/core/a2ui/catalog.js.map +1 -0
- package/dist/core/a2ui/common-types.d.ts.map +1 -0
- package/dist/core/a2ui/common-types.js.map +1 -0
- package/dist/core/a2ui/index.d.ts.map +1 -0
- package/dist/core/a2ui/index.js.map +1 -0
- package/dist/core/a2ui/interpreter.d.ts.map +1 -0
- package/dist/core/a2ui/interpreter.js.map +1 -0
- package/dist/core/a2ui/json-pointer.d.ts.map +1 -0
- package/dist/core/a2ui/json-pointer.js +94 -73
- package/dist/core/a2ui/json-pointer.js.map +1 -0
- package/dist/core/a2ui/renderer-to-agent.d.ts.map +1 -0
- package/dist/core/a2ui/renderer-to-agent.js.map +1 -0
- package/dist/core/a2ui/resolve.d.ts.map +1 -0
- package/dist/core/a2ui/resolve.js +45 -23
- package/dist/core/a2ui/resolve.js.map +1 -0
- package/dist/core/a2ui/surface-properties.d.ts.map +1 -0
- package/dist/core/a2ui/surface-properties.js.map +1 -0
- package/dist/core/a2ui/tree.d.ts.map +1 -0
- package/dist/core/a2ui/tree.js +8 -5
- package/dist/core/a2ui/tree.js.map +1 -0
- package/dist/core/ag-ui.d.ts.map +1 -0
- package/dist/core/ag-ui.js.map +1 -0
- package/dist/core/annotated-actions-script.d.ts.map +1 -0
- package/dist/core/annotated-actions-script.js.map +1 -0
- package/dist/core/capability.d.ts.map +1 -0
- package/dist/core/capability.js +21 -12
- package/dist/core/capability.js.map +1 -0
- package/dist/core/dom/dom-page-driver.d.ts.map +1 -0
- package/dist/core/dom/dom-page-driver.js +89 -74
- package/dist/core/dom/dom-page-driver.js.map +1 -0
- package/dist/core/dom/index.d.ts.map +1 -0
- package/dist/core/dom/index.js.map +1 -0
- package/dist/core/dom/model-context.d.ts.map +1 -0
- package/dist/core/dom/model-context.js.map +1 -0
- package/dist/core/dom/native-model-context.d.ts.map +1 -0
- package/dist/core/dom/native-model-context.js.map +1 -0
- package/dist/core/element-handles.d.ts.map +1 -0
- package/dist/core/element-handles.js.map +1 -0
- package/dist/core/gen-ui/encoder.d.ts.map +1 -0
- package/dist/core/gen-ui/encoder.js +31 -31
- package/dist/core/gen-ui/encoder.js.map +1 -0
- package/dist/core/gen-ui/events.d.ts.map +1 -0
- package/dist/core/gen-ui/events.js.map +1 -0
- package/dist/core/gen-ui/index.d.ts.map +1 -0
- package/dist/core/gen-ui/index.js.map +1 -0
- package/dist/core/guards.d.ts.map +1 -0
- package/dist/core/guards.js +13 -6
- package/dist/core/guards.js.map +1 -0
- package/dist/core/handle.d.ts.map +1 -0
- package/dist/core/handle.js.map +1 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/list-handles.d.ts.map +1 -0
- package/dist/core/list-handles.js.map +1 -0
- package/dist/core/mcp-ui-apps.d.ts.map +1 -0
- package/dist/core/mcp-ui-apps.js +12 -6
- package/dist/core/mcp-ui-apps.js.map +1 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/page-capabilities.d.ts.map +1 -0
- package/dist/core/page-capabilities.js.map +1 -0
- package/dist/core/page-driver.d.ts.map +1 -0
- package/dist/core/page-driver.js.map +1 -0
- package/dist/core/page-executor.d.ts.map +1 -0
- package/dist/core/page-executor.js +131 -111
- package/dist/core/page-executor.js.map +1 -0
- package/dist/core/site-guide/index.d.ts.map +1 -0
- package/dist/core/site-guide/index.js.map +1 -0
- package/dist/core/site-guide/site-guide.d.ts.map +1 -0
- package/dist/core/site-guide/site-guide.js +89 -71
- package/dist/core/site-guide/site-guide.js.map +1 -0
- package/dist/core/site-guide/topic-schema.d.ts.map +1 -0
- package/dist/core/site-guide/topic-schema.js.map +1 -0
- package/dist/core/site-guide/types.d.ts.map +1 -0
- package/dist/core/site-guide/types.js.map +1 -0
- package/dist/core/webmcp.d.ts.map +1 -0
- package/dist/core/webmcp.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/skills/install/archive.d.ts.map +1 -0
- package/dist/skills/install/archive.js +42 -31
- package/dist/skills/install/archive.js.map +1 -0
- package/dist/skills/install/fetch-adapter.d.ts.map +1 -0
- package/dist/skills/install/fetch-adapter.js.map +1 -0
- package/dist/skills/install/github.d.ts +8 -0
- package/dist/skills/install/github.d.ts.map +1 -0
- package/dist/skills/install/github.js +111 -63
- package/dist/skills/install/github.js.map +1 -0
- package/dist/skills/install/index.d.ts.map +1 -0
- package/dist/skills/install/index.js.map +1 -0
- package/dist/skills/install/install-service.d.ts +17 -15
- package/dist/skills/install/install-service.d.ts.map +1 -0
- package/dist/skills/install/install-service.js +23 -4
- package/dist/skills/install/install-service.js.map +1 -0
- package/dist/skills/install/layout.d.ts.map +1 -0
- package/dist/skills/install/layout.js +3 -3
- package/dist/skills/install/layout.js.map +1 -0
- package/dist/skills/install/live-registration.d.ts.map +1 -0
- package/dist/skills/install/live-registration.js.map +1 -0
- package/dist/skills/install/node-filesystem.d.ts.map +1 -0
- package/dist/skills/install/node-filesystem.js +3 -1
- package/dist/skills/install/node-filesystem.js.map +1 -0
- package/dist/skills/install/ports.d.ts +20 -2
- package/dist/skills/install/ports.d.ts.map +1 -0
- package/dist/skills/install/ports.js.map +1 -0
- package/dist/skills/install/state.d.ts +7 -6
- package/dist/skills/install/state.d.ts.map +1 -0
- package/dist/skills/install/state.js +25 -9
- package/dist/skills/install/state.js.map +1 -0
- package/dist/skills/install/validation.d.ts.map +1 -0
- package/dist/skills/install/validation.js +83 -50
- package/dist/skills/install/validation.js.map +1 -0
- package/dist/skills/install/yauzl-archive-reader.d.ts.map +1 -0
- package/dist/skills/install/yauzl-archive-reader.js.map +1 -0
- package/package.json +5 -5
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { validateSkillFiles, type SkillUploadFile } from "./validation.js";
|
|
2
2
|
import { type GitHubSkillSource } from "./github.js";
|
|
3
3
|
import type { SkillInstallDeps } from "./ports.js";
|
|
4
|
-
export interface ManagedSkill {
|
|
4
|
+
export interface ManagedSkill<Source extends object = GitHubSkillSource> {
|
|
5
5
|
readonly toolId: string;
|
|
6
6
|
readonly name: string;
|
|
7
7
|
readonly description: string;
|
|
8
8
|
readonly enabled: boolean;
|
|
9
|
-
readonly source: "uploaded" | GitHubSkillSource;
|
|
9
|
+
readonly source: "uploaded" | GitHubSkillSource | Source;
|
|
10
10
|
}
|
|
11
11
|
export type SkillInstallInput = {
|
|
12
12
|
readonly workspaceId: string;
|
|
13
13
|
} & ({
|
|
14
|
+
readonly url: string;
|
|
15
|
+
} | {
|
|
14
16
|
readonly githubUrl: string;
|
|
15
17
|
} | {
|
|
16
18
|
readonly files: readonly SkillUploadFile[];
|
|
@@ -19,28 +21,28 @@ export type SkillInstallInput = {
|
|
|
19
21
|
});
|
|
20
22
|
/** A fetched and fully validated skill package, not yet written. Holding the validated bytes (not
|
|
21
23
|
* the source) means commitSkillInstall writes exactly what was validated, with no second fetch. */
|
|
22
|
-
export interface PreparedSkillInstall {
|
|
24
|
+
export interface PreparedSkillInstall<Source extends object = GitHubSkillSource> {
|
|
23
25
|
readonly toolId: string;
|
|
24
26
|
readonly name: string;
|
|
25
27
|
readonly description: string;
|
|
26
|
-
readonly source: ManagedSkill["source"];
|
|
28
|
+
readonly source: ManagedSkill<Source>["source"];
|
|
27
29
|
readonly files: ReturnType<typeof validateSkillFiles>["files"];
|
|
28
30
|
}
|
|
29
31
|
/** Fetch/decode and validate before asking for mutation approval. No filesystem writes. */
|
|
30
|
-
export declare function prepareSkillInstall(required: {
|
|
32
|
+
export declare function prepareSkillInstall<Source extends object = GitHubSkillSource>(required: {
|
|
31
33
|
input: SkillInstallInput;
|
|
32
|
-
deps: Pick<SkillInstallDeps
|
|
33
|
-
}, _optional?: {}): Promise<PreparedSkillInstall
|
|
34
|
-
export interface SkillInstaller {
|
|
35
|
-
prepareSkillInstall(required: SkillInstallInput): Promise<PreparedSkillInstall
|
|
34
|
+
deps: Pick<SkillInstallDeps<Source>, "fetch" | "fetchSource" | "validateSource" | "archiveReader" | "yamlReader" | "toolId">;
|
|
35
|
+
}, _optional?: {}): Promise<PreparedSkillInstall<Source>>;
|
|
36
|
+
export interface SkillInstaller<Source extends object = GitHubSkillSource> {
|
|
37
|
+
prepareSkillInstall(required: SkillInstallInput): Promise<PreparedSkillInstall<Source>>;
|
|
36
38
|
commitSkillInstall(required: {
|
|
37
39
|
workspaceId: string;
|
|
38
|
-
prepared: PreparedSkillInstall
|
|
39
|
-
}): Promise<ManagedSkill
|
|
40
|
-
installSkill(required: SkillInstallInput): Promise<ManagedSkill
|
|
40
|
+
prepared: PreparedSkillInstall<Source>;
|
|
41
|
+
}): Promise<ManagedSkill<Source>>;
|
|
42
|
+
installSkill(required: SkillInstallInput): Promise<ManagedSkill<Source>>;
|
|
41
43
|
listManagedSkills(required: {
|
|
42
44
|
workspaceId: string;
|
|
43
|
-
}): Promise<ManagedSkill[]>;
|
|
45
|
+
}): Promise<ManagedSkill<Source>[]>;
|
|
44
46
|
setSkillEnabled(required: {
|
|
45
47
|
workspaceId: string;
|
|
46
48
|
toolId: string;
|
|
@@ -54,10 +56,10 @@ export interface SkillInstaller {
|
|
|
54
56
|
/** Validate before writes; publish via rename, with instance-local queues keyed by resolved root.
|
|
55
57
|
* Cross-process exclusivity remains the host filesystem/layout adapter's responsibility.
|
|
56
58
|
*/
|
|
57
|
-
export declare function createSkillInstaller(deps: SkillInstallDeps
|
|
59
|
+
export declare function createSkillInstaller<Source extends object = GitHubSkillSource>(deps: SkillInstallDeps<Source>, optional?: {
|
|
58
60
|
onChanged?: (required: {
|
|
59
61
|
workspaceId: string;
|
|
60
62
|
toolId: string;
|
|
61
63
|
}) => void | Promise<void>;
|
|
62
|
-
}): SkillInstaller
|
|
64
|
+
}): SkillInstaller<Source>;
|
|
63
65
|
//# sourceMappingURL=install-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-service.d.ts","sourceRoot":"","sources":["../../../src/skills/install/install-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ export async function prepareSkillInstall(required, _optional = {}) {
|
|
|
8
8
|
const { input, deps } = required;
|
|
9
9
|
let upload;
|
|
10
10
|
let source = "uploaded";
|
|
11
|
-
if ("githubUrl" in input)
|
|
12
|
-
({ files: upload, source } = await
|
|
11
|
+
if ("url" in input || "githubUrl" in input)
|
|
12
|
+
({ files: upload, source } = await fetchRemoteSkill({ input, deps }));
|
|
13
13
|
else if ("archiveBase64" in input)
|
|
14
14
|
upload = await readSkillArchive({ base64: input.archiveBase64, archiveReader: deps.archiveReader });
|
|
15
15
|
else
|
|
@@ -17,6 +17,25 @@ export async function prepareSkillInstall(required, _optional = {}) {
|
|
|
17
17
|
const validated = validateSkillFiles({ files: upload, yamlReader: deps.yamlReader });
|
|
18
18
|
return { ...validated, toolId: deps.toolId({ name: validated.name }), source };
|
|
19
19
|
}
|
|
20
|
+
/** Source selection only; installation validation and mutation stay in the existing lifecycle.
|
|
21
|
+
* Normalized URLs never fall back to GitHub. An injected provider owns legacy aliases too.
|
|
22
|
+
* @throws SkillInputError for missing provider configuration or refused provenance.
|
|
23
|
+
*/
|
|
24
|
+
async function fetchRemoteSkill({ input, deps }, _optional = {}) {
|
|
25
|
+
if (deps.fetchSource) {
|
|
26
|
+
if (!deps.validateSource)
|
|
27
|
+
throw new SkillInputError({ message: "Skill source provenance validation is required." });
|
|
28
|
+
const result = await deps.fetchSource({ url: "url" in input ? input.url : input.githubUrl }, {});
|
|
29
|
+
if (!result.source || typeof result.source !== "object" || Array.isArray(result.source) || !deps.validateSource({ source: result.source }, {}))
|
|
30
|
+
throw new SkillInputError({ message: "Invalid skill source provenance." });
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
if ("url" in input)
|
|
34
|
+
throw new SkillInputError({ message: "A skill source provider is required for URL installation." });
|
|
35
|
+
if (!deps.fetch)
|
|
36
|
+
throw new SkillInputError({ message: "A legacy GitHub fetch transport is required." });
|
|
37
|
+
return fetchGitHubSkill({ githubUrl: input.githubUrl, fetch: deps.fetch });
|
|
38
|
+
}
|
|
20
39
|
/** Validate before writes; publish via rename, with instance-local queues keyed by resolved root.
|
|
21
40
|
* Cross-process exclusivity remains the host filesystem/layout adapter's responsibility.
|
|
22
41
|
*/
|
|
@@ -49,7 +68,7 @@ export function createSkillInstaller(deps, optional = {}) {
|
|
|
49
68
|
return Promise.all(sources.map(async (skill) => {
|
|
50
69
|
const directory = containedDirectory(layout.workspaceRoot, skill.directory);
|
|
51
70
|
return { toolId: skill.id, name: skill.skillName, description: skill.description,
|
|
52
|
-
...await readSkillState({ directory, stateFileName: layout.stateFileName, filesystem: deps.filesystem }) };
|
|
71
|
+
...await readSkillState({ directory, stateFileName: layout.stateFileName, filesystem: deps.filesystem, validateSource: deps.validateSource }) };
|
|
53
72
|
}));
|
|
54
73
|
}
|
|
55
74
|
async function managedDirectory(required) {
|
|
@@ -100,7 +119,7 @@ export function createSkillInstaller(deps, optional = {}) {
|
|
|
100
119
|
await locked(input.workspaceId, async () => {
|
|
101
120
|
const directory = await managedDirectory(input);
|
|
102
121
|
const layout = layoutFor(input.workspaceId);
|
|
103
|
-
const state = await readSkillState({ directory, stateFileName: layout.stateFileName, filesystem: deps.filesystem });
|
|
122
|
+
const state = await readSkillState({ directory, stateFileName: layout.stateFileName, filesystem: deps.filesystem, validateSource: deps.validateSource });
|
|
104
123
|
const id = deps.ids.next({});
|
|
105
124
|
if (!id || /[/\\\x00]/.test(id))
|
|
106
125
|
throw new SkillInputError({ message: "Invalid skill temporary id." });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-service.js","sourceRoot":"","sources":["../../../src/skills/install/install-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/skills/install/layout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAelD;;;;;;;GAOG;AAIH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,eAAe,CAa5L"}
|
|
@@ -9,8 +9,8 @@ import path from 'node:path';
|
|
|
9
9
|
const SAFE_ID_SEGMENT_PATTERN = /^[a-z0-9]+(?:[-.][a-z0-9]+)*$/;
|
|
10
10
|
/** Bounds the segment so a caller cannot drive a pathological path length. */
|
|
11
11
|
const MAX_ID_SEGMENT_LENGTH = 64;
|
|
12
|
-
// The segment grammar above moved from
|
|
13
|
-
// historical rationale refers to
|
|
12
|
+
// The segment grammar above moved from host features/skills/layout.ts; the sibling path in its
|
|
13
|
+
// historical rationale refers to host features/agent-plugins/layout.ts.
|
|
14
14
|
/**
|
|
15
15
|
* Deliberately does NOT import anything from `src/features/agent-plugins/` — Agent Skills and Agent
|
|
16
16
|
* Plugins are different things with their own directories (owner decision, above), and this file's
|
|
@@ -19,7 +19,7 @@ const MAX_ID_SEGMENT_LENGTH = 64;
|
|
|
19
19
|
* between themselves: a private guard belonging to one small module, not a promise to keep two
|
|
20
20
|
* independent features' internals in sync.
|
|
21
21
|
*/
|
|
22
|
-
// This paragraph records the original
|
|
22
|
+
// This paragraph records the original host module boundary; the private segment guard now
|
|
23
23
|
// belongs to this Jini layout owner, and the host keeps only the site-directory adapter.
|
|
24
24
|
/** Every storage location is host-owned; this adapter has no product or cwd defaults.
|
|
25
25
|
* Layout resolves the same required root/stagingRoot/workspaceDirectory/stateFileName
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/skills/install/layout.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAChE,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,+FAA+F;AAC/F,wEAAwE;AAExE;;;;;;;GAOG;AACH,0FAA0F;AAC1F,yFAAyF;AAEzF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAkG,EAAE,YAAmC,EAAE;IACzK,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;IAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACpH,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACvH,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvN,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,EAA2B;YACrE,8FAA8F;YAC9F,8FAA8F;YAC9F,6FAA6F;YAC7F,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,MAAM,GAAG,qBAAqB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,+BAA+B,CAAC,CAAC;YACrK,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;QACnI,CAAC,EAAE,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-registration.d.ts","sourceRoot":"","sources":["../../../src/skills/install/live-registration.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB,CAAC,UAAU,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,GAAG,OAAO;IACtG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,QAAQ,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC;CAC/D;AACD,MAAM,WAAW,iBAAiB,CAAC,UAAU,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,GAAG,OAAO;IACtG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC;IACpD,GAAG,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5E;AACD,MAAM,WAAW,qBAAqB;IAAG,sBAAsB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE;AAErH,iGAAiG;AACjG,wBAAgB,2BAA2B,CAAC,UAAU,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;IAChG,QAAQ,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC;CACpD,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,IAQ9B,WAAW;IAAE,KAAK,EAAE,SAAS,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAA;CAAE,KAAG,OAAO,CAyB1F;AAED,iGAAiG;AACjG,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE;IAChD,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC;CACzD,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG;IAAE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAMvH;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE;IAAE,QAAQ,EAAE,qBAAqB,CAAA;CAAE,EAAE,QAAQ,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAA;CAAO,IACpJ,UAAU;IAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAM5H"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-registration.js","sourceRoot":"","sources":["../../../src/skills/install/live-registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filesystem.d.ts","sourceRoot":"","sources":["../../../src/skills/install/node-filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wEAAwE;AACxE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,cAAc,CAgCjI"}
|
|
@@ -33,7 +33,9 @@ export function createNodeSkillFilesystem(_required, _optional = {}) {
|
|
|
33
33
|
await handle.close();
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
|
-
|
|
36
|
+
// The port types `exclusive` as the literal `true`: skill files and state temporaries are only
|
|
37
|
+
// ever created, never overwritten in place, so the flag is always exclusive-create.
|
|
38
|
+
writeFile: ({ path, bytes, mode }) => writeFile(path, bytes, { flag: 'wx', mode }),
|
|
37
39
|
rename: ({ from, to }) => rename(from, to),
|
|
38
40
|
remove: ({ path }, options = {}) => rm(path, options),
|
|
39
41
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-filesystem.js","sourceRoot":"","sources":["../../../src/skills/install/node-filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { GitHubSkillSource } from "./github.js";
|
|
2
|
+
import type { SkillUploadFile } from "./validation.js";
|
|
1
3
|
/** The adapter uses failsafe YAML and rejects duplicate keys; the installer never parses YAML itself. */
|
|
2
4
|
export interface YamlReaderPort {
|
|
3
5
|
read(required: {
|
|
@@ -84,12 +86,28 @@ export interface ArchiveReaderPort {
|
|
|
84
86
|
export type SkillFetchPort = (required: {
|
|
85
87
|
url: string;
|
|
86
88
|
}, optional?: RequestInit) => Promise<Response>;
|
|
87
|
-
|
|
89
|
+
/** Provider-owned remote fetching. Hosts enforce deadlines, byte caps and source-origin policy.
|
|
90
|
+
* Returned files still pass through the installer's shared validator before any filesystem writes.
|
|
91
|
+
*/
|
|
92
|
+
export type SkillSourceFetchPort<Source extends object = object> = (required: {
|
|
93
|
+
url: string;
|
|
94
|
+
}, optional?: Record<string, never>) => Promise<{
|
|
95
|
+
readonly files: readonly SkillUploadFile[];
|
|
96
|
+
readonly source: Source;
|
|
97
|
+
}>;
|
|
98
|
+
/** Pure, fail-closed check of provider-owned JSON provenance; never authorizes an installation. */
|
|
99
|
+
export type SkillSourceValidatorPort = (required: {
|
|
100
|
+
source: unknown;
|
|
101
|
+
}, optional?: Record<string, never>) => boolean;
|
|
102
|
+
export interface SkillInstallDeps<Source extends object = GitHubSkillSource> {
|
|
88
103
|
layout: SkillLayoutPort;
|
|
89
104
|
filesystem: SkillFilesystemPort;
|
|
90
105
|
archiveReader: ArchiveReaderPort;
|
|
91
106
|
yamlReader: YamlReaderPort;
|
|
92
|
-
|
|
107
|
+
/** @deprecated Supply fetchSource and validateSource instead. Used only for legacy githubUrl input. */
|
|
108
|
+
fetch?: SkillFetchPort;
|
|
109
|
+
fetchSource?: SkillSourceFetchPort<Source>;
|
|
110
|
+
validateSource?: SkillSourceValidatorPort;
|
|
93
111
|
ids: {
|
|
94
112
|
next(required: Record<string, never>): string;
|
|
95
113
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/skills/install/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/skills/install/ports.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { SkillFilesystemPort } from "./ports.js";
|
|
3
|
-
export interface SkillState {
|
|
1
|
+
import { type GitHubSkillSource } from "./github.js";
|
|
2
|
+
import type { SkillFilesystemPort, SkillSourceValidatorPort } from "./ports.js";
|
|
3
|
+
export interface SkillState<Source extends object = GitHubSkillSource> {
|
|
4
4
|
readonly enabled: boolean;
|
|
5
|
-
readonly source: "uploaded" | GitHubSkillSource;
|
|
5
|
+
readonly source: "uploaded" | GitHubSkillSource | Source;
|
|
6
6
|
}
|
|
7
7
|
/** Missing legacy records default to enabled; malformed records and symlinks fail closed. */
|
|
8
|
-
export declare function readSkillState(required: {
|
|
8
|
+
export declare function readSkillState<Source extends object = GitHubSkillSource>(required: {
|
|
9
9
|
directory: string;
|
|
10
10
|
stateFileName: string;
|
|
11
11
|
filesystem: SkillFilesystemPort;
|
|
12
|
-
|
|
12
|
+
validateSource?: SkillSourceValidatorPort | undefined;
|
|
13
|
+
}, _optional?: Record<string, never>): Promise<SkillState<Source>>;
|
|
13
14
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/skills/install/state.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,WAAW,UAAU,CAAC,MAAM,SAAS,MAAM,GAAG,iBAAiB;IAAI,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAAA;CAAE;AAK9J,6FAA6F;AAC7F,wBAAsB,cAAc,CAAC,MAAM,SAAS,MAAM,GAAG,iBAAiB,EAAE,QAAQ,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,mBAAmB,CAAC;IAAC,cAAc,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAgBlS"}
|
|
@@ -1,23 +1,39 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import { validateGitHubSkillSource } from "./github.js";
|
|
3
|
+
const MAX_STATE_BYTES = 8192;
|
|
4
|
+
const INVALID_STATE = "Invalid skill installation record.";
|
|
2
5
|
/** Missing legacy records default to enabled; malformed records and symlinks fail closed. */
|
|
3
6
|
export async function readSkillState(required, _optional = {}) {
|
|
4
7
|
const statePath = path.join(required.directory, required.stateFileName);
|
|
8
|
+
let bytes;
|
|
5
9
|
try {
|
|
6
10
|
const info = await required.filesystem.lstat({ path: statePath });
|
|
7
|
-
if (info.kind !== "file" || info.size >
|
|
8
|
-
throw new Error(
|
|
9
|
-
|
|
10
|
-
if (bytes.length >
|
|
11
|
-
throw new Error(
|
|
12
|
-
const state = JSON.parse(Buffer.from(bytes).toString("utf8"));
|
|
13
|
-
if (!state || typeof state.enabled !== "boolean" || (state.source !== "uploaded" && (!state.source || typeof state.source.githubUrl !== "string" || !/^[a-f0-9]{40}$/.test(state.source.commit))))
|
|
14
|
-
throw new Error("Invalid skill installation record.");
|
|
15
|
-
return state;
|
|
11
|
+
if (info.kind !== "file" || info.size > MAX_STATE_BYTES)
|
|
12
|
+
throw new Error(INVALID_STATE);
|
|
13
|
+
bytes = await required.filesystem.readFile({ path: statePath, maxBytes: MAX_STATE_BYTES });
|
|
14
|
+
if (bytes.length > MAX_STATE_BYTES)
|
|
15
|
+
throw new Error(INVALID_STATE);
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
18
18
|
if (error.code === "ENOENT")
|
|
19
19
|
return { enabled: true, source: "uploaded" };
|
|
20
20
|
throw error;
|
|
21
21
|
}
|
|
22
|
+
// Only missing filesystem records get legacy defaults; provider validation errors must fail closed.
|
|
23
|
+
const state = JSON.parse(Buffer.from(bytes).toString("utf8"));
|
|
24
|
+
if (!isSkillState({ value: state, validateSource: required.validateSource ?? validateGitHubSkillSource }))
|
|
25
|
+
throw new Error(INVALID_STATE);
|
|
26
|
+
return state;
|
|
27
|
+
}
|
|
28
|
+
/** A boolean enabled plus uploaded or provenance accepted by the owning provider. */
|
|
29
|
+
function isSkillState({ value, validateSource }, _optional = {}) {
|
|
30
|
+
const state = value;
|
|
31
|
+
if (!state || typeof state.enabled !== "boolean")
|
|
32
|
+
return false;
|
|
33
|
+
if (state.source === "uploaded")
|
|
34
|
+
return true;
|
|
35
|
+
if (!state.source || typeof state.source !== "object" || Array.isArray(state.source))
|
|
36
|
+
return false;
|
|
37
|
+
return validateSource({ source: state.source }, {});
|
|
22
38
|
}
|
|
23
39
|
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/skills/install/state.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAA0B,MAAM,aAAa,CAAC;AAKhF,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAE3D,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,cAAc,CAA4C,QAA8I,EAAE,YAAmC,EAAE;IACnQ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACxF,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QAC3F,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACrG,MAAM,KAAK,CAAC;IACd,CAAC;IACD,oGAAoG;IACpG,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,yBAAyB,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1I,OAAO,KAA2B,CAAC;AACrC,CAAC;AAED,qFAAqF;AACrF,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,cAAc,EAAgE,EAAE,YAAmC,EAAE;IAClJ,MAAM,KAAK,GAAG,KAAuD,CAAC;IACtE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACnG,OAAO,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/skills/install/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAC3C,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;IACzE,0FAA0F;gBAC9E,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI5D;AACD,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE;AAC1F,eAAO,MAAM,eAAe,QAAkB,CAAC;AAC/C,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAQhD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,QAA0B,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAMlI;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,IAAI,CAEjH;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAM9L;AAYD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM;;UArBR,MAAM;iBAAe,MAAM;EAgC5L"}
|
|
@@ -10,6 +10,10 @@ export const MAX_SKILL_FILES = 256;
|
|
|
10
10
|
export const MAX_SKILL_FILE_BYTES = 1024 * 1024;
|
|
11
11
|
const TEXT_EXTENSIONS = new Set([".md", ".txt", ".json", ".yaml", ".yml", ".csv", ".svg", ".sh", ".py", ".js", ".ts", ".mjs"]);
|
|
12
12
|
const ASSET_EXTENSIONS = new Set([".png", ".jpg", ".jpeg", ".webp"]);
|
|
13
|
+
const ROOT_FILES = new Set(["SKILL.md", "README.md", "LICENSE"]);
|
|
14
|
+
const SKILL_FOLDERS = new Set(["references", "scripts", "assets"]);
|
|
15
|
+
const PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
16
|
+
const MISSING_FRONTMATTER = "SKILL.md must have YAML frontmatter with a name and description.";
|
|
13
17
|
/** Decodes bounded canonical base64; malformed encodings never silently turn into empty files. */
|
|
14
18
|
export function decodeSkillBase64({ value }, { maxBytes = MAX_SKILL_BYTES } = {}) {
|
|
15
19
|
if (typeof value !== "string" || value.length > Math.ceil(maxBytes / 3) * 4)
|
|
@@ -27,24 +31,28 @@ export function validateSkillPath({ filePath }, _optional = {}) {
|
|
|
27
31
|
}
|
|
28
32
|
/** Strict frontmatter for new installs; the legacy disk loader remains backwards compatible. */
|
|
29
33
|
export function validateSkillMarkdown({ markdown, yamlReader }, _optional = {}) {
|
|
34
|
+
const { name, description } = readFrontmatterFields({ markdown, yamlReader });
|
|
35
|
+
if (typeof name !== "string" || typeof description !== "string" || !description.trim())
|
|
36
|
+
throw new SkillInputError({ message: MISSING_FRONTMATTER });
|
|
37
|
+
if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name))
|
|
38
|
+
throw new SkillInputError({ message: "Skill name must use lowercase letters, digits and single hyphens (1–64 characters)." });
|
|
39
|
+
if (description.length > 1024)
|
|
40
|
+
throw new SkillInputError({ message: "Skill description exceeds 1024 characters." });
|
|
41
|
+
return { name, description: description.replace(/\s+/g, " ").trim() };
|
|
42
|
+
}
|
|
43
|
+
/** Parses the leading `---` block through the host YAML port; a non-object result has no fields. */
|
|
44
|
+
function readFrontmatterFields({ markdown, yamlReader }) {
|
|
30
45
|
const frontmatter = markdown.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
|
|
31
46
|
if (!frontmatter)
|
|
32
|
-
throw new SkillInputError({ message:
|
|
47
|
+
throw new SkillInputError({ message: MISSING_FRONTMATTER });
|
|
33
48
|
let fields;
|
|
34
49
|
try {
|
|
35
50
|
fields = yamlReader.read({ yaml: frontmatter[1] });
|
|
36
51
|
}
|
|
37
|
-
catch {
|
|
38
|
-
throw new SkillInputError({ message: "SKILL.md must have valid YAML frontmatter." });
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new SkillInputError({ message: "SKILL.md must have valid YAML frontmatter." }, { cause: error });
|
|
39
54
|
}
|
|
40
|
-
|
|
41
|
-
if (typeof name !== "string" || typeof description !== "string" || !description.trim())
|
|
42
|
-
throw new SkillInputError({ message: "SKILL.md must have YAML frontmatter with a name and description." });
|
|
43
|
-
if (name.length > 64 || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name))
|
|
44
|
-
throw new SkillInputError({ message: "Skill name must use lowercase letters, digits and single hyphens (1–64 characters)." });
|
|
45
|
-
if (description.length > 1024)
|
|
46
|
-
throw new SkillInputError({ message: "Skill description exceeds 1024 characters." });
|
|
47
|
-
return { name, description: description.replace(/\s+/g, " ").trim() };
|
|
55
|
+
return (fields && typeof fields === "object" ? fields : {});
|
|
48
56
|
}
|
|
49
57
|
/** Validates the whole package before writes, including cross-file collisions and combined limits.
|
|
50
58
|
* @complexity O(total bytes + files × path length), bounded to 8 MiB / 256 files.
|
|
@@ -54,51 +62,76 @@ export function validateSkillFiles({ files: upload, yamlReader }, _optional = {}
|
|
|
54
62
|
throw new SkillInputError({ message: "A skill must contain 1–256 files." });
|
|
55
63
|
for (const file of upload)
|
|
56
64
|
validateSkillPath({ filePath: file.path });
|
|
65
|
+
const prefix = selectSkillFolder({ upload });
|
|
66
|
+
const files = new Map();
|
|
67
|
+
const budget = { total: 0 };
|
|
68
|
+
for (const file of upload) {
|
|
69
|
+
const { relative, bytes } = validateBundleFile({ file, prefix, seen: files, budget });
|
|
70
|
+
files.set(relative, bytes);
|
|
71
|
+
}
|
|
72
|
+
return { ...validateSkillMarkdown({ markdown: files.get("SKILL.md").toString("utf8"), yamlReader }), files };
|
|
73
|
+
}
|
|
74
|
+
/** The folder holding the bundle's only SKILL.md (empty string at the root). */
|
|
75
|
+
function selectSkillFolder({ upload }) {
|
|
57
76
|
const skillFiles = upload.filter(f => f.path === "SKILL.md" || f.path.endsWith("/SKILL.md"));
|
|
58
77
|
if (skillFiles.length !== 1) {
|
|
59
78
|
if (skillFiles.length > 1 && new Set(skillFiles.map(f => f.path)).size === 1)
|
|
60
79
|
throw new SkillInputError({ message: `Duplicate skill file path: ${skillFiles[0].path}` });
|
|
61
80
|
throw new SkillInputError({ message: "Choose one skill folder containing a single SKILL.md." });
|
|
62
81
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
82
|
+
return skillFiles[0].path.slice(0, -"SKILL.md".length);
|
|
83
|
+
}
|
|
84
|
+
/** Checks one upload's folder, path, location, type, sizes and content; returns its folder-relative key. */
|
|
85
|
+
function validateBundleFile({ file, prefix, seen, budget }) {
|
|
86
|
+
if (!file.path.startsWith(prefix))
|
|
87
|
+
throw new SkillInputError({ message: "All files must belong to the selected skill folder." });
|
|
88
|
+
const relative = file.path.slice(prefix.length);
|
|
89
|
+
validateSkillPath({ filePath: relative });
|
|
90
|
+
if (seen.has(relative))
|
|
91
|
+
throw new SkillInputError({ message: `Duplicate skill file path: ${relative}` });
|
|
92
|
+
const { extension, isText } = classifySkillFile({ relative });
|
|
93
|
+
const bytes = decodeSkillBase64({ value: file.contentBase64 }, { maxBytes: MAX_SKILL_FILE_BYTES });
|
|
94
|
+
if (relative === "SKILL.md" && bytes.length > 128 * 1024)
|
|
95
|
+
throw new SkillInputError({ message: "SKILL.md exceeds 128 KiB." });
|
|
96
|
+
budget.total += bytes.length;
|
|
97
|
+
if (budget.total > MAX_SKILL_BYTES)
|
|
98
|
+
throw new SkillInputError({ message: "Skill files exceed 8 MiB combined." });
|
|
99
|
+
if (isText)
|
|
100
|
+
assertTextContent({ relative, bytes });
|
|
101
|
+
else if (!matchesAssetSignature({ extension, bytes }))
|
|
102
|
+
throw new SkillInputError({ message: `Skill asset content does not match its file type: ${relative}` });
|
|
103
|
+
return { relative, bytes };
|
|
104
|
+
}
|
|
105
|
+
/** Allowed locations are SKILL.md, README.md, LICENSE and the references/scripts/assets folders;
|
|
106
|
+
* text extensions anywhere there, image extensions only under assets/. */
|
|
107
|
+
function classifySkillFile({ relative }) {
|
|
108
|
+
const extension = path.posix.extname(relative).toLowerCase();
|
|
109
|
+
const top = relative.split("/")[0];
|
|
110
|
+
if (!ROOT_FILES.has(relative) && !SKILL_FOLDERS.has(top))
|
|
111
|
+
throw new SkillInputError({ message: `Unsupported skill file location: ${relative}` });
|
|
112
|
+
const isText = relative === "LICENSE" || TEXT_EXTENSIONS.has(extension);
|
|
113
|
+
if (!isText && !(top === "assets" && ASSET_EXTENSIONS.has(extension)))
|
|
114
|
+
throw new SkillInputError({ message: `Unsupported skill file type: ${relative}` });
|
|
115
|
+
return { extension, isText };
|
|
116
|
+
}
|
|
117
|
+
/** Text files must be strict UTF-8 with no NUL bytes. */
|
|
118
|
+
function assertTextContent({ relative, bytes }) {
|
|
119
|
+
const message = `Skill text file must be valid UTF-8 without null bytes: ${relative}`;
|
|
120
|
+
try {
|
|
121
|
+
new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
101
122
|
}
|
|
102
|
-
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new SkillInputError({ message }, { cause: error });
|
|
125
|
+
}
|
|
126
|
+
if (bytes.includes(0))
|
|
127
|
+
throw new SkillInputError({ message });
|
|
128
|
+
}
|
|
129
|
+
/** Magic-byte sniffing for the allowed image types (.png, .webp, otherwise JPEG). */
|
|
130
|
+
function matchesAssetSignature({ extension, bytes }) {
|
|
131
|
+
if (extension === ".png")
|
|
132
|
+
return bytes.subarray(0, 8).equals(PNG_SIGNATURE);
|
|
133
|
+
if (extension === ".webp")
|
|
134
|
+
return bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP";
|
|
135
|
+
return bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;
|
|
103
136
|
}
|
|
104
137
|
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/skills/install/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yauzl-archive-reader.d.ts","sourceRoot":"","sources":["../../../src/skills/install/yauzl-archive-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,UAAU,QAAQ;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAA;CAAE;AACjG,UAAU,OAAO;IAAG,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAC,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE;AAC3K,MAAM,WAAW,eAAe;IAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE;AACjL;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,EAAE,SAAS,KAAK,GAAG,iBAAiB,CAoBtH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yauzl-archive-reader.js","sourceRoot":"","sources":["../../../src/skills/install/yauzl-archive-reader.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,EAAE,KAAK,EAA8B,EAAE,SAAS,GAAG,EAAE;IACjG,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;YAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtI,OAAO;gBACL,OAAO,EAAE,CAAC,KAAK,SAAS,CAAC;oBACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;wBAC1C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;wBAC5D,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;wBACxH,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,IAAI;4BAC9D,KAAK,CAAC,CAAC,IAAI;gCACT,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gCACtD,IAAI,CAAC;oCAAC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM;wCAAE,MAAM,KAAK,CAAC;gCAAC,CAAC;wCAC9C,CAAC;oCAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gCAAC,CAAC;4BAC/B,CAAC;yBACF,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,EAAE;gBACJ,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;aACzB,CAAC;QACJ,CAAC,EAAE,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jini-ai/agentic",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.10",
|
|
4
4
|
"description": "Framework-free agent-control layer: page-capability vocabulary and manifests, the data-agent-* markup convention, AG-UI projection, generative-UI streams, and A2UI.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -76,13 +76,13 @@
|
|
|
76
76
|
"@vitest/coverage-v8": "^2.1.9",
|
|
77
77
|
"jsdom": "^25.0.1",
|
|
78
78
|
"zod": "^3.25.76",
|
|
79
|
-
"@jini-ai/core": "^0.
|
|
80
|
-
"@jini-ai/protocol": "^0.
|
|
79
|
+
"@jini-ai/core": "^0.6.10",
|
|
80
|
+
"@jini-ai/protocol": "^0.6.10"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@jini-ai/protocol": "^0.
|
|
83
|
+
"@jini-ai/protocol": "^0.6.10",
|
|
84
84
|
"zod": "^3.25.76",
|
|
85
|
-
"@jini-ai/core": "^0.
|
|
85
|
+
"@jini-ai/core": "^0.6.10"
|
|
86
86
|
},
|
|
87
87
|
"peerDependenciesMeta": {
|
|
88
88
|
"@jini-ai/protocol": {
|