@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.
Files changed (120) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/README.md +13 -1
  3. package/dist/core/a2ui/agent-to-renderer.d.ts.map +1 -0
  4. package/dist/core/a2ui/agent-to-renderer.js.map +1 -0
  5. package/dist/core/a2ui/catalog.d.ts.map +1 -0
  6. package/dist/core/a2ui/catalog.js.map +1 -0
  7. package/dist/core/a2ui/common-types.d.ts.map +1 -0
  8. package/dist/core/a2ui/common-types.js.map +1 -0
  9. package/dist/core/a2ui/index.d.ts.map +1 -0
  10. package/dist/core/a2ui/index.js.map +1 -0
  11. package/dist/core/a2ui/interpreter.d.ts.map +1 -0
  12. package/dist/core/a2ui/interpreter.js.map +1 -0
  13. package/dist/core/a2ui/json-pointer.d.ts.map +1 -0
  14. package/dist/core/a2ui/json-pointer.js +94 -73
  15. package/dist/core/a2ui/json-pointer.js.map +1 -0
  16. package/dist/core/a2ui/renderer-to-agent.d.ts.map +1 -0
  17. package/dist/core/a2ui/renderer-to-agent.js.map +1 -0
  18. package/dist/core/a2ui/resolve.d.ts.map +1 -0
  19. package/dist/core/a2ui/resolve.js +45 -23
  20. package/dist/core/a2ui/resolve.js.map +1 -0
  21. package/dist/core/a2ui/surface-properties.d.ts.map +1 -0
  22. package/dist/core/a2ui/surface-properties.js.map +1 -0
  23. package/dist/core/a2ui/tree.d.ts.map +1 -0
  24. package/dist/core/a2ui/tree.js +8 -5
  25. package/dist/core/a2ui/tree.js.map +1 -0
  26. package/dist/core/ag-ui.d.ts.map +1 -0
  27. package/dist/core/ag-ui.js.map +1 -0
  28. package/dist/core/annotated-actions-script.d.ts.map +1 -0
  29. package/dist/core/annotated-actions-script.js.map +1 -0
  30. package/dist/core/capability.d.ts.map +1 -0
  31. package/dist/core/capability.js +21 -12
  32. package/dist/core/capability.js.map +1 -0
  33. package/dist/core/dom/dom-page-driver.d.ts.map +1 -0
  34. package/dist/core/dom/dom-page-driver.js +89 -74
  35. package/dist/core/dom/dom-page-driver.js.map +1 -0
  36. package/dist/core/dom/index.d.ts.map +1 -0
  37. package/dist/core/dom/index.js.map +1 -0
  38. package/dist/core/dom/model-context.d.ts.map +1 -0
  39. package/dist/core/dom/model-context.js.map +1 -0
  40. package/dist/core/dom/native-model-context.d.ts.map +1 -0
  41. package/dist/core/dom/native-model-context.js.map +1 -0
  42. package/dist/core/element-handles.d.ts.map +1 -0
  43. package/dist/core/element-handles.js.map +1 -0
  44. package/dist/core/gen-ui/encoder.d.ts.map +1 -0
  45. package/dist/core/gen-ui/encoder.js +31 -31
  46. package/dist/core/gen-ui/encoder.js.map +1 -0
  47. package/dist/core/gen-ui/events.d.ts.map +1 -0
  48. package/dist/core/gen-ui/events.js.map +1 -0
  49. package/dist/core/gen-ui/index.d.ts.map +1 -0
  50. package/dist/core/gen-ui/index.js.map +1 -0
  51. package/dist/core/guards.d.ts.map +1 -0
  52. package/dist/core/guards.js +13 -6
  53. package/dist/core/guards.js.map +1 -0
  54. package/dist/core/handle.d.ts.map +1 -0
  55. package/dist/core/handle.js.map +1 -0
  56. package/dist/core/index.d.ts.map +1 -0
  57. package/dist/core/index.js.map +1 -0
  58. package/dist/core/list-handles.d.ts.map +1 -0
  59. package/dist/core/list-handles.js.map +1 -0
  60. package/dist/core/mcp-ui-apps.d.ts.map +1 -0
  61. package/dist/core/mcp-ui-apps.js +12 -6
  62. package/dist/core/mcp-ui-apps.js.map +1 -0
  63. package/dist/core/messages.d.ts.map +1 -0
  64. package/dist/core/messages.js.map +1 -0
  65. package/dist/core/page-capabilities.d.ts.map +1 -0
  66. package/dist/core/page-capabilities.js.map +1 -0
  67. package/dist/core/page-driver.d.ts.map +1 -0
  68. package/dist/core/page-driver.js.map +1 -0
  69. package/dist/core/page-executor.d.ts.map +1 -0
  70. package/dist/core/page-executor.js +131 -111
  71. package/dist/core/page-executor.js.map +1 -0
  72. package/dist/core/site-guide/index.d.ts.map +1 -0
  73. package/dist/core/site-guide/index.js.map +1 -0
  74. package/dist/core/site-guide/site-guide.d.ts.map +1 -0
  75. package/dist/core/site-guide/site-guide.js +89 -71
  76. package/dist/core/site-guide/site-guide.js.map +1 -0
  77. package/dist/core/site-guide/topic-schema.d.ts.map +1 -0
  78. package/dist/core/site-guide/topic-schema.js.map +1 -0
  79. package/dist/core/site-guide/types.d.ts.map +1 -0
  80. package/dist/core/site-guide/types.js.map +1 -0
  81. package/dist/core/webmcp.d.ts.map +1 -0
  82. package/dist/core/webmcp.js.map +1 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/skills/install/archive.d.ts.map +1 -0
  86. package/dist/skills/install/archive.js +42 -31
  87. package/dist/skills/install/archive.js.map +1 -0
  88. package/dist/skills/install/fetch-adapter.d.ts.map +1 -0
  89. package/dist/skills/install/fetch-adapter.js.map +1 -0
  90. package/dist/skills/install/github.d.ts +8 -0
  91. package/dist/skills/install/github.d.ts.map +1 -0
  92. package/dist/skills/install/github.js +111 -63
  93. package/dist/skills/install/github.js.map +1 -0
  94. package/dist/skills/install/index.d.ts.map +1 -0
  95. package/dist/skills/install/index.js.map +1 -0
  96. package/dist/skills/install/install-service.d.ts +17 -15
  97. package/dist/skills/install/install-service.d.ts.map +1 -0
  98. package/dist/skills/install/install-service.js +23 -4
  99. package/dist/skills/install/install-service.js.map +1 -0
  100. package/dist/skills/install/layout.d.ts.map +1 -0
  101. package/dist/skills/install/layout.js +3 -3
  102. package/dist/skills/install/layout.js.map +1 -0
  103. package/dist/skills/install/live-registration.d.ts.map +1 -0
  104. package/dist/skills/install/live-registration.js.map +1 -0
  105. package/dist/skills/install/node-filesystem.d.ts.map +1 -0
  106. package/dist/skills/install/node-filesystem.js +3 -1
  107. package/dist/skills/install/node-filesystem.js.map +1 -0
  108. package/dist/skills/install/ports.d.ts +20 -2
  109. package/dist/skills/install/ports.d.ts.map +1 -0
  110. package/dist/skills/install/ports.js.map +1 -0
  111. package/dist/skills/install/state.d.ts +7 -6
  112. package/dist/skills/install/state.d.ts.map +1 -0
  113. package/dist/skills/install/state.js +25 -9
  114. package/dist/skills/install/state.js.map +1 -0
  115. package/dist/skills/install/validation.d.ts.map +1 -0
  116. package/dist/skills/install/validation.js +83 -50
  117. package/dist/skills/install/validation.js.map +1 -0
  118. package/dist/skills/install/yauzl-archive-reader.d.ts.map +1 -0
  119. package/dist/skills/install/yauzl-archive-reader.js.map +1 -0
  120. package/package.json +5 -5
@@ -62,83 +62,101 @@ export function createSiteGuide(ports, options = {}) {
62
62
  if (builtIns.length > 256 || new Set(builtIns.map(topic => topic.id)).size !== builtIns.length)
63
63
  throw new SiteGuideInputError({ message: 'Built-in topics must have unique ids and contain at most 256 cards' });
64
64
  return { async run(input, _options = {}) {
65
- if (input.operation !== 'overview' && input.operation !== 'explain')
66
- throw new SiteGuideInputError({ message: 'operation must be overview or explain' });
67
- if (input.operation === 'overview' && input.topic !== undefined)
68
- throw new SiteGuideInputError({ message: 'topic is only accepted with operation explain' });
69
- if (input.operation === 'explain' && (typeof input.topic !== 'string' || !/^[a-z][a-z0-9-]{0,63}$/.test(input.topic))) {
70
- throw new SiteGuideInputError({ message: 'explain requires a topic id from overview' });
71
- }
72
- let contributions = [];
73
- let enrichment = 'ok';
74
- if (ports.loadContributions) {
75
- try {
76
- const loaded = await boundedRead(() => ports.loadContributions({ caller: input.caller }), timeoutMs);
77
- if (loaded.items.reduce((count, item) => count + item.topics.length, 0) > 256)
78
- throw new SiteGuideInputError({ message: 'Too many contributed topics' });
79
- contributions = loaded.items;
80
- if (loaded.refusals.length)
81
- enrichment = 'partial';
82
- }
83
- catch {
84
- enrichment = 'unavailable';
85
- }
86
- }
87
- const combined = combineTopics(builtIns, contributions);
88
- if (combined.conflicts)
89
- enrichment = 'partial';
90
- const decisions = new Map();
91
- const allowed = (permission) => {
92
- let decision = decisions.get(permission);
93
- if (!decision) {
94
- // Failed authorization is denial, never an excuse to expose a card or run its read.
95
- decision = boundedRead(() => ports.authorize({ caller: input.caller, permission }), timeoutMs).catch(() => false);
96
- decisions.set(permission, decision);
97
- }
98
- return decision;
99
- };
100
- const permitted = async (permissions) => (await Promise.all(permissions.map(allowed))).every(Boolean);
101
- const views = [];
102
- for (const entry of combined.topics) {
103
- if (input.operation === 'explain' && entry.topic.id !== input.topic)
104
- continue;
105
- if (!await permitted(entry.topic.permissions))
106
- continue;
107
- const view = { id: entry.topic.id, title: entry.topic.title, summary: entry.topic.summary, source: entry.source };
108
- if (input.operation === 'explain') {
109
- const pointers = [];
110
- for (const { permissions, ...pointer } of entry.topic.pointers)
111
- if (await permitted(permissions))
112
- pointers.push(pointer);
113
- const workflows = [];
114
- for (const { permissions, ...workflow } of entry.topic.workflows)
115
- if (await permitted(permissions))
116
- workflows.push(workflow);
117
- views.push({ ...view, explanation: entry.topic.explanation, pointers, workflows });
118
- }
119
- else
120
- views.push(view);
121
- }
65
+ assertGuideInput(input);
66
+ const loaded = await loadContributions({ ports, caller: input.caller, timeoutMs });
67
+ const combined = combineTopics(builtIns, loaded.contributions);
68
+ const enrichment = combined.conflicts ? 'partial' : loaded.enrichment;
69
+ const gate = createPermissionGate({ ports, caller: input.caller, timeoutMs });
70
+ const views = await buildViews({ topics: combined.topics, input, permitted: gate.permitted });
122
71
  if (input.operation === 'explain' && views.length === 0)
123
72
  throw new SiteGuideInputError({ message: 'Topic unavailable. Call site_guide with operation overview for topics you may read.' });
124
- let facts = {};
125
- const topicIds = views.map(view => view.id);
126
73
  // Overview is discovery only; read fresh domain facts when a visible topic is explained.
127
- if (input.operation === 'explain') {
128
- try {
129
- const read = await boundedRead(() => ports.facts.read({ caller: input.caller, topics: topicIds }), timeoutMs);
130
- // A facts adapter returning an unrelated section cannot disclose it through this tool.
131
- facts = Object.fromEntries(topicIds.map(id => [id, read[id] ?? { status: 'unavailable' }]));
132
- }
133
- catch {
134
- facts = Object.fromEntries(topicIds.map(id => [id, { status: 'unavailable' }]));
135
- }
136
- }
74
+ const facts = input.operation === 'explain' ? await readFacts({ ports, caller: input.caller, topicIds: views.map(view => view.id), timeoutMs }) : {};
75
+ return { operation: input.operation, topics: views, facts, callerPermissions: await gate.granted(), enrichment };
76
+ } };
77
+ }
78
+ /** Refuses unknown operations, a topic on overview, and explain without a well-formed topic id. */
79
+ function assertGuideInput(input) {
80
+ if (input.operation !== 'overview' && input.operation !== 'explain')
81
+ throw new SiteGuideInputError({ message: 'operation must be overview or explain' });
82
+ if (input.operation === 'overview' && input.topic !== undefined)
83
+ throw new SiteGuideInputError({ message: 'topic is only accepted with operation explain' });
84
+ if (input.operation === 'explain' && (typeof input.topic !== 'string' || !/^[a-z][a-z0-9-]{0,63}$/.test(input.topic))) {
85
+ throw new SiteGuideInputError({ message: 'explain requires a topic id from overview' });
86
+ }
87
+ }
88
+ /** Reads plugin contributions within the deadline; any failure or over-limit result degrades to none. */
89
+ async function loadContributions({ ports, caller, timeoutMs }) {
90
+ if (!ports.loadContributions)
91
+ return { contributions: [], enrichment: 'ok' };
92
+ try {
93
+ const loaded = await boundedRead(() => ports.loadContributions({ caller }), timeoutMs);
94
+ if (loaded.items.reduce((count, item) => count + item.topics.length, 0) > 256)
95
+ throw new SiteGuideInputError({ message: 'Too many contributed topics' });
96
+ return { contributions: loaded.items, enrichment: loaded.refusals.length ? 'partial' : 'ok' };
97
+ }
98
+ catch {
99
+ return { contributions: [], enrichment: 'unavailable' };
100
+ }
101
+ }
102
+ /** Per-request authorization cache: each permission is asked at most once, in first-use order. */
103
+ function createPermissionGate({ ports, caller, timeoutMs }) {
104
+ const decisions = new Map();
105
+ const allowed = (permission) => {
106
+ let decision = decisions.get(permission);
107
+ if (!decision) {
108
+ // Failed authorization is denial, never an excuse to expose a card or run its read.
109
+ decision = boundedRead(() => ports.authorize({ caller, permission }), timeoutMs).catch(() => false);
110
+ decisions.set(permission, decision);
111
+ }
112
+ return decision;
113
+ };
114
+ return {
115
+ permitted: async (permissions) => (await Promise.all(permissions.map(allowed))).every(Boolean),
116
+ granted: async () => {
137
117
  const callerPermissions = [];
138
118
  for (const [permission, decision] of decisions)
139
119
  if (await decision)
140
120
  callerPermissions.push(permission);
141
- return { operation: input.operation, topics: views, facts, callerPermissions, enrichment };
142
- } };
121
+ return callerPermissions;
122
+ },
123
+ };
124
+ }
125
+ /** Visible cards in topic order; explain narrows to the requested id and adds its permitted details. */
126
+ async function buildViews({ topics, input, permitted }) {
127
+ const views = [];
128
+ for (const entry of topics) {
129
+ if (input.operation === 'explain' && entry.topic.id !== input.topic)
130
+ continue;
131
+ if (!await permitted(entry.topic.permissions))
132
+ continue;
133
+ const view = { id: entry.topic.id, title: entry.topic.title, summary: entry.topic.summary, source: entry.source };
134
+ views.push(input.operation === 'explain' ? await explainView({ view, topic: entry.topic, permitted }) : view);
135
+ }
136
+ return views;
137
+ }
138
+ async function explainView({ view, topic, permitted }) {
139
+ const pointers = await withoutForbidden({ items: topic.pointers, permitted });
140
+ const workflows = await withoutForbidden({ items: topic.workflows, permitted });
141
+ return { ...view, explanation: topic.explanation, pointers, workflows };
142
+ }
143
+ /** Keeps items whose permissions are all granted, asked one item at a time, minus their gates. */
144
+ async function withoutForbidden({ items, permitted }) {
145
+ const kept = [];
146
+ for (const { permissions, ...item } of items)
147
+ if (await permitted(permissions))
148
+ kept.push(item);
149
+ return kept;
150
+ }
151
+ /** One bulk facts read for the visible topics; failure marks each of them unavailable. */
152
+ async function readFacts({ ports, caller, topicIds, timeoutMs }) {
153
+ try {
154
+ const read = await boundedRead(() => ports.facts.read({ caller, topics: topicIds }), timeoutMs);
155
+ // A facts adapter returning an unrelated section cannot disclose it through this tool.
156
+ return Object.fromEntries(topicIds.map(id => [id, read[id] ?? { status: 'unavailable' }]));
157
+ }
158
+ catch {
159
+ return Object.fromEntries(topicIds.map(id => [id, { status: 'unavailable' }]));
160
+ }
143
161
  }
144
162
  //# sourceMappingURL=site-guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-guide.js","sourceRoot":"","sources":["../../../src/core/site-guide/site-guide.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic-schema.d.ts","sourceRoot":"","sources":["../../../src/core/site-guide/topic-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAiB,MAAM,YAAY,CAAC;AAwC1E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACtG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAWrH"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic-schema.js","sourceRoot":"","sources":["../../../src/core/site-guide/topic-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/site-guide/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/site-guide/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webmcp.d.ts","sourceRoot":"","sources":["../../src/core/webmcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webmcp.js","sourceRoot":"","sources":["../../src/core/webmcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;mGAEmG;AACnG,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;mGAEmG;AACnG,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/skills/install/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAiH,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtK,8FAA8F;AAC9F,wBAAsB,gBAAgB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,iBAAiB,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAWzL"}
@@ -3,46 +3,57 @@ import { decodeSkillBase64, MAX_SKILL_BYTES, MAX_SKILL_FILES, MAX_SKILL_FILE_BYT
3
3
  export async function readSkillArchive({ base64, archiveReader }, _optional = {}) {
4
4
  try {
5
5
  const reader = await archiveReader.open({ bytes: decodeSkillBase64({ value: base64 }) });
6
- const files = [];
7
- let total = 0;
8
- let count = 0;
9
6
  try {
10
- for await (const entry of reader.entries) {
11
- if (++count > MAX_SKILL_FILES)
12
- throw new SkillInputError({ message: "A skill archive may contain at most 256 entries." });
13
- validateSkillPath({ filePath: entry.path.replace(/\/$/, "") });
14
- if (entry.kind !== "file" && entry.kind !== "directory")
15
- throw new SkillInputError({ message: "Skill archives may contain only regular files and directories." });
16
- if (entry.kind === "directory")
17
- continue;
18
- if (!Number.isSafeInteger(entry.size) || entry.size < 0 || entry.size > MAX_SKILL_FILE_BYTES)
19
- throw new SkillInputError({ message: "Skill archive file exceeds 1 MiB." });
20
- const chunks = [];
21
- let size = 0;
22
- {
23
- for await (const chunk of entry.read({})) {
24
- size += chunk.length;
25
- total += chunk.length;
26
- if (size > MAX_SKILL_FILE_BYTES || total > MAX_SKILL_BYTES)
27
- throw new SkillInputError({ message: "Skill archive exceeds its decompressed size limit." });
28
- chunks.push(Buffer.from(chunk));
29
- }
30
- }
31
- if (size !== entry.size)
32
- throw new SkillInputError({ message: "Skill archive file size does not match its metadata." });
33
- files.push({ path: entry.path, contentBase64: Buffer.concat(chunks).toString("base64") });
34
- }
35
- return files;
7
+ return await collectArchiveFiles({ entries: reader.entries });
36
8
  }
37
9
  finally {
38
10
  reader.close({});
39
11
  }
40
- /** Converts malformed archive parser failures into a client-actionable validation refusal. */
41
12
  }
42
13
  catch (error) {
14
+ // Converts malformed archive parser failures into a client-actionable validation refusal.
43
15
  if (error instanceof SkillInputError)
44
16
  throw error;
45
- throw new SkillInputError({ message: "Could not read skill ZIP. Use a valid ZIP with regular files only." });
17
+ throw new SkillInputError({ message: "Could not read skill ZIP. Use a valid ZIP with regular files only." }, { cause: error });
46
18
  }
47
19
  }
20
+ /** Walks every entry (directories count toward the entry limit) and reads the regular files.
21
+ * @complexity O(entries + decompressed bytes), bounded to 256 entries and 8 MiB.
22
+ */
23
+ async function collectArchiveFiles({ entries }) {
24
+ const files = [];
25
+ const budget = { total: 0 };
26
+ let count = 0;
27
+ for await (const entry of entries) {
28
+ if (++count > MAX_SKILL_FILES)
29
+ throw new SkillInputError({ message: "A skill archive may contain at most 256 entries." });
30
+ if (isRegularFileEntry({ entry }))
31
+ files.push(await readArchiveFile({ entry, budget }));
32
+ }
33
+ return files;
34
+ }
35
+ /** Validates the entry path before its kind; refuses anything but files and directories. */
36
+ function isRegularFileEntry({ entry }) {
37
+ validateSkillPath({ filePath: entry.path.replace(/\/$/, "") });
38
+ if (entry.kind !== "file" && entry.kind !== "directory")
39
+ throw new SkillInputError({ message: "Skill archives may contain only regular files and directories." });
40
+ return entry.kind === "file";
41
+ }
42
+ /** Streams one file under its own 1 MiB cap and the archive-wide budget, then checks metadata. */
43
+ async function readArchiveFile({ entry, budget }) {
44
+ if (!Number.isSafeInteger(entry.size) || entry.size < 0 || entry.size > MAX_SKILL_FILE_BYTES)
45
+ throw new SkillInputError({ message: "Skill archive file exceeds 1 MiB." });
46
+ const chunks = [];
47
+ let size = 0;
48
+ for await (const chunk of entry.read({})) {
49
+ size += chunk.length;
50
+ budget.total += chunk.length;
51
+ if (size > MAX_SKILL_FILE_BYTES || budget.total > MAX_SKILL_BYTES)
52
+ throw new SkillInputError({ message: "Skill archive exceeds its decompressed size limit." });
53
+ chunks.push(Buffer.from(chunk));
54
+ }
55
+ if (size !== entry.size)
56
+ throw new SkillInputError({ message: "Skill archive file size does not match its metadata." });
57
+ return { path: entry.path, contentBase64: Buffer.concat(chunks).toString("base64") };
58
+ }
48
59
  //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/skills/install/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-adapter.d.ts","sourceRoot":"","sources":["../../../src/skills/install/fetch-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wGAAwG;AACxG,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAAE,EACjC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACpC,cAAc,CAGhB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-adapter.js","sourceRoot":"","sources":["../../../src/skills/install/fetch-adapter.ts"],"names":[],"mappings":"AAEA,wGAAwG;AACxG,MAAM,UAAU,uBAAuB,CACrC,QAAiC,EACjC,YAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC"}
@@ -5,7 +5,15 @@ export interface GitHubSkillSource {
5
5
  readonly githubUrl: string;
6
6
  readonly commit: string;
7
7
  }
8
+ /** Compatibility provenance check; preserves the original regex coercion of commit values.
9
+ * @deprecated Hosts using source injection must supply their provider's validateSource predicate.
10
+ * @complexity O(commit length), bounded by the state reader's 8 KiB record limit.
11
+ */
12
+ export declare function validateGitHubSkillSource({ source }: {
13
+ source: unknown;
14
+ }, _optional?: Record<string, never>): boolean;
8
15
  /** Restricts every request to api.github.com, disallows redirects, pins one immutable commit.
16
+ * @deprecated Inject fetchSource and use normalized url input instead.
9
17
  * @complexity O(files + downloaded bytes), at most 256 file requests and 8 MiB decoded content.
10
18
  */
11
19
  export declare function fetchGitHubSkill({ githubUrl, fetch: fetchImpl }: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/skills/install/github.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,OAAO,EAA8F,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnJ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAE1F;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAGzH;AASD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM;;;;;;GAW1J"}
@@ -1,92 +1,140 @@
1
1
  /** Commit-pinned public GitHub import with one request/body deadline, byte caps and refused redirects. */
2
2
  import { MAX_SKILL_BYTES, MAX_SKILL_FILES, MAX_SKILL_FILE_BYTES, decodeSkillBase64, SkillInputError } from "./validation.js";
3
+ /** Compatibility provenance check; preserves the original regex coercion of commit values.
4
+ * @deprecated Hosts using source injection must supply their provider's validateSource predicate.
5
+ * @complexity O(commit length), bounded by the state reader's 8 KiB record limit.
6
+ */
7
+ export function validateGitHubSkillSource({ source }, _optional = {}) {
8
+ const value = source;
9
+ return !!value && typeof value.githubUrl === "string" && /^[a-f0-9]{40}$/.test(value.commit);
10
+ }
11
+ const URL_HELP = "Use an HTTPS GitHub repository URL, optionally ending in /tree/ref/skill-folder.";
12
+ const SHA_PATTERN = /^[a-f0-9]{40}$/;
13
+ const SEGMENT_PATTERN = /^[a-zA-Z0-9_.-]+$/;
14
+ const SKILL_FILE_PATTERN = /^(SKILL\.md|README\.md|LICENSE|(?:references|scripts|assets)\/.*)$/;
15
+ const REGULAR_FILE_MODES = ["100644", "100755"];
3
16
  /** Restricts every request to api.github.com, disallows redirects, pins one immutable commit.
17
+ * @deprecated Inject fetchSource and use normalized url input instead.
4
18
  * @complexity O(files + downloaded bytes), at most 256 file requests and 8 MiB decoded content.
5
19
  */
6
20
  export async function fetchGitHubSkill({ githubUrl, fetch: fetchImpl }, _optional = {}) {
21
+ const { owner, repo, ref, prefix } = parseGitHubSkillUrl({ githubUrl });
22
+ const base = `https://api.github.com/repos/${owner}/${repo}`;
23
+ // One deadline for the whole fetch, including streaming response bodies.
24
+ const json = createGitHubJsonReader({ fetch: fetchImpl, signal: AbortSignal.timeout(30_000) });
25
+ const commit = (await json(`${base}/commits/${encodeURIComponent(ref)}`)).sha;
26
+ if (typeof commit !== "string" || !SHA_PATTERN.test(commit))
27
+ throw new SkillInputError({ message: "GitHub returned an invalid commit." });
28
+ const tree = await json(`${base}/git/trees/${commit}?recursive=1`);
29
+ if (tree.truncated || !Array.isArray(tree.tree))
30
+ throw new SkillInputError({ message: "GitHub repository tree is incomplete. Choose a smaller skill repository." });
31
+ const files = await downloadSkillFiles({ rows: tree.tree, prefix, base, json });
32
+ return { files, source: { githubUrl, commit } };
33
+ }
34
+ /** Accepts only https://github.com/owner/repo[/tree/ref[/folder…]] with plain segments; refuses before any request. */
35
+ function parseGitHubSkillUrl({ githubUrl }) {
7
36
  let url;
8
- try {
9
- url = new URL(githubUrl);
10
- }
11
- catch {
12
- throw new SkillInputError({ message: "Use an HTTPS GitHub repository URL, optionally ending in /tree/ref/skill-folder." });
13
- }
14
37
  let parts;
15
38
  try {
39
+ url = new URL(githubUrl);
16
40
  parts = url.pathname.replace(/\/$/, "").split("/").slice(1).map(p => decodeURIComponent(p));
17
41
  }
18
- catch {
19
- throw new SkillInputError({ message: "Use an HTTPS GitHub repository URL, optionally ending in /tree/ref/skill-folder." });
42
+ catch (error) {
43
+ throw new SkillInputError({ message: URL_HELP }, { cause: error });
20
44
  }
21
- if (url.protocol !== "https:" || url.hostname !== "github.com" || url.port || url.username || url.password || url.search || url.hash || parts.length < 2 || (parts.length > 2 && (parts[2] !== "tree" || parts.length < 4)) || parts.some(p => !/^[a-zA-Z0-9_.-]+$/.test(p) || p === "." || p === ".."))
22
- throw new SkillInputError({ message: "Use an HTTPS GitHub repository URL, optionally ending in /tree/ref/skill-folder." });
23
- const owner = parts[0];
45
+ if (!isGitHubOrigin({ url }) || !isSkillRepoPath({ parts }))
46
+ throw new SkillInputError({ message: URL_HELP });
24
47
  const repo = parts[1].replace(/\.git$/, "");
25
48
  if (!repo)
26
- throw new SkillInputError({ message: "Use an HTTPS GitHub repository URL, optionally ending in /tree/ref/skill-folder." });
27
- const base = `https://api.github.com/repos/${owner}/${repo}`;
28
- // One deadline for the whole fetch, including streaming response bodies.
29
- const signal = AbortSignal.timeout(30_000);
30
- async function json(endpoint) {
49
+ throw new SkillInputError({ message: URL_HELP });
50
+ return { owner: parts[0], repo, ref: parts[3] ?? "HEAD", prefix: parts.length > 4 ? parts.slice(4).join("/") + "/" : "" };
51
+ }
52
+ /** Plain https://github.com with no port, credentials, query or fragment. */
53
+ function isGitHubOrigin({ url }) {
54
+ return url.protocol === "https:" && url.hostname === "github.com" && !url.port && !url.username && !url.password && !url.search && !url.hash;
55
+ }
56
+ /** owner/repo, or owner/repo/tree/ref[/folder…]; every decoded segment is plain and never `.`/`..`. */
57
+ function isSkillRepoPath({ parts }) {
58
+ const shapeOk = parts.length === 2 || (parts.length >= 4 && parts[2] === "tree");
59
+ return shapeOk && parts.every(p => SEGMENT_PATTERN.test(p) && p !== "." && p !== "..");
60
+ }
61
+ /** One JSON endpoint reader sharing the redirect policy, accept header and deadline. */
62
+ function createGitHubJsonReader({ fetch: fetchImpl, signal }) {
63
+ return async (endpoint) => {
31
64
  const response = await fetchImpl({ url: endpoint }, { redirect: "error", signal, headers: { Accept: "application/vnd.github+json" } });
32
65
  if (!response.ok)
33
66
  throw new SkillInputError({ message: `GitHub could not fetch this skill (HTTP ${response.status}). Use a public repository URL.` });
34
67
  if (!response.body)
35
68
  throw new SkillInputError({ message: "GitHub returned an empty response." });
36
- const reader = response.body.getReader();
37
- let bytes = 0;
38
- const chunks = [];
39
- try {
40
- for (;;) {
41
- const part = await reader.read();
42
- if (part.done)
43
- break;
44
- bytes += part.value.length;
45
- if (bytes > MAX_SKILL_BYTES * 2)
46
- throw new SkillInputError({ message: "GitHub skill response exceeds its size limit." });
47
- chunks.push(part.value);
48
- }
49
- }
50
- finally {
51
- await reader.cancel();
52
- }
53
- const result = JSON.parse(Buffer.concat(chunks).toString("utf8"));
69
+ const result = JSON.parse((await readBoundedBody({ body: response.body })).toString("utf8"));
54
70
  if (!result || typeof result !== "object" || Array.isArray(result))
55
71
  throw new SkillInputError({ message: "GitHub returned an invalid skill response." });
56
72
  return result;
73
+ };
74
+ }
75
+ /** Streams a response body up to 16 MiB and always releases the reader. */
76
+ async function readBoundedBody({ body }) {
77
+ const reader = body.getReader();
78
+ let bytes = 0;
79
+ const chunks = [];
80
+ try {
81
+ for (;;) {
82
+ const part = await reader.read();
83
+ if (part.done)
84
+ break;
85
+ bytes += part.value.length;
86
+ if (bytes > MAX_SKILL_BYTES * 2)
87
+ throw new SkillInputError({ message: "GitHub skill response exceeds its size limit." });
88
+ chunks.push(part.value);
89
+ }
57
90
  }
58
- const commit = (await json(`${base}/commits/${encodeURIComponent(parts[3] ?? "HEAD")}`)).sha;
59
- if (typeof commit !== "string" || !/^[a-f0-9]{40}$/.test(commit))
60
- throw new SkillInputError({ message: "GitHub returned an invalid commit." });
61
- const tree = await json(`${base}/git/trees/${commit}?recursive=1`);
62
- if (tree.truncated || !Array.isArray(tree.tree))
63
- throw new SkillInputError({ message: "GitHub repository tree is incomplete. Choose a smaller skill repository." });
64
- const prefix = parts.length > 4 ? parts.slice(4).join("/") + "/" : "";
91
+ finally {
92
+ await reader.cancel();
93
+ }
94
+ return Buffer.concat(chunks);
95
+ }
96
+ /** Checks each selected row, then fetches its blob, in tree order, under declared and decoded budgets. */
97
+ async function downloadSkillFiles({ rows, prefix, base, json }) {
65
98
  const files = [];
66
- let total = 0;
67
- let actualBytes = 0;
68
- for (const row of tree.tree) {
69
- if (typeof row.path !== "string" || !row.path.startsWith(prefix))
99
+ const budget = { declared: 0, actual: 0 };
100
+ for (const row of rows) {
101
+ const relative = selectSkillRow({ row, prefix });
102
+ if (relative === undefined)
70
103
  continue;
71
- const relative = row.path.slice(prefix.length);
72
- if (!/^(SKILL\.md|README\.md|LICENSE|(?:references|scripts|assets)\/.*)$/.test(relative) || row.type === "tree")
73
- continue;
74
- if (row.type !== "blob" || !["100644", "100755"].includes(String(row.mode)))
75
- throw new SkillInputError({ message: "GitHub skills may contain only regular files." });
76
- if (typeof row.size !== "number" || row.size < 0 || row.size > MAX_SKILL_FILE_BYTES || typeof row.sha !== "string" || !/^[a-f0-9]{40}$/.test(row.sha))
77
- throw new SkillInputError({ message: "GitHub skill file exceeds its size limit or has invalid metadata." });
78
- total += row.size;
79
- if (total > MAX_SKILL_BYTES || files.length >= MAX_SKILL_FILES)
80
- throw new SkillInputError({ message: "GitHub skill exceeds 8 MiB or 256 files." });
81
- const blob = await json(`${base}/git/blobs/${row.sha}`);
82
- if (blob.encoding !== "base64" || typeof blob.content !== "string")
83
- throw new SkillInputError({ message: "GitHub returned an invalid skill file." });
84
- const contentBase64 = blob.content.replace(/\s/g, "");
85
- actualBytes += decodeSkillBase64({ value: contentBase64 }, { maxBytes: MAX_SKILL_FILE_BYTES }).length;
86
- if (actualBytes > MAX_SKILL_BYTES)
104
+ const { size, sha } = readRegularBlobRow({ row });
105
+ budget.declared += size;
106
+ if (budget.declared > MAX_SKILL_BYTES || files.length >= MAX_SKILL_FILES)
87
107
  throw new SkillInputError({ message: "GitHub skill exceeds 8 MiB or 256 files." });
88
- files.push({ path: relative, contentBase64 });
108
+ files.push({ path: relative, contentBase64: await downloadBlob({ url: `${base}/git/blobs/${sha}`, json, budget }) });
89
109
  }
90
- return { files, source: { githubUrl, commit } };
110
+ return files;
111
+ }
112
+ /** Path relative to the skill folder when the row is an allowed skill file, else undefined (skipped). */
113
+ function selectSkillRow({ row, prefix }) {
114
+ if (typeof row.path !== "string" || !row.path.startsWith(prefix))
115
+ return undefined;
116
+ const relative = row.path.slice(prefix.length);
117
+ if (!SKILL_FILE_PATTERN.test(relative) || row.type === "tree")
118
+ return undefined;
119
+ return relative;
120
+ }
121
+ /** Refuses non-regular entries (submodules, symlinks) and missing or oversized metadata. */
122
+ function readRegularBlobRow({ row }) {
123
+ if (row.type !== "blob" || !REGULAR_FILE_MODES.includes(String(row.mode)))
124
+ throw new SkillInputError({ message: "GitHub skills may contain only regular files." });
125
+ if (typeof row.size !== "number" || row.size < 0 || row.size > MAX_SKILL_FILE_BYTES || typeof row.sha !== "string" || !SHA_PATTERN.test(row.sha))
126
+ throw new SkillInputError({ message: "GitHub skill file exceeds its size limit or has invalid metadata." });
127
+ return { size: row.size, sha: row.sha };
128
+ }
129
+ /** Fetches one base64 blob, enforcing the 1 MiB file cap and 8 MiB decoded total. */
130
+ async function downloadBlob({ url, json, budget }) {
131
+ const blob = await json(url);
132
+ if (blob.encoding !== "base64" || typeof blob.content !== "string")
133
+ throw new SkillInputError({ message: "GitHub returned an invalid skill file." });
134
+ const contentBase64 = blob.content.replace(/\s/g, "");
135
+ budget.actual += decodeSkillBase64({ value: contentBase64 }, { maxBytes: MAX_SKILL_FILE_BYTES }).length;
136
+ if (budget.actual > MAX_SKILL_BYTES)
137
+ throw new SkillInputError({ message: "GitHub skill exceeds 8 MiB or 256 files." });
138
+ return contentBase64;
91
139
  }
92
140
  //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/install/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/skills/install/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/install/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}