@polpo-ai/cli 0.15.72 → 0.15.74

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.
@@ -0,0 +1,280 @@
1
+ import { createHash } from "node:crypto";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { parseSkillFrontmatter, validateSkillName, } from "@polpo-ai/core";
5
+ import { detectAgentLayout, readProjectAgents, writeProjectAgent, } from "@polpo-ai/file-stores";
6
+ import { collectLocalSkillBundle, replaceLocalSkillBundle, } from "./runtime-skill-bundle.js";
7
+ export const RUNTIME_SKILLS_LOCK_VERSION = 1;
8
+ const IGNORED_DIRECTORIES = new Set([".git", "node_modules"]);
9
+ const MAX_DISCOVERY_DEPTH = 8;
10
+ function atomicWriteJson(filePath, value) {
11
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
12
+ const temporary = `${filePath}.${process.pid}.${Date.now()}.tmp`;
13
+ try {
14
+ fs.writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
15
+ fs.renameSync(temporary, filePath);
16
+ }
17
+ finally {
18
+ fs.rmSync(temporary, { force: true });
19
+ }
20
+ }
21
+ function normalizeSkillMarkdown(content) {
22
+ return content.replace(/\r\n/g, "\n");
23
+ }
24
+ export function runtimeSkillsLockPath(projectDir) {
25
+ return path.join(path.resolve(projectDir), ".polpo", "skills.lock.json");
26
+ }
27
+ export function readRuntimeSkillsLock(projectDir) {
28
+ const filePath = runtimeSkillsLockPath(projectDir);
29
+ if (!fs.existsSync(filePath)) {
30
+ return { version: RUNTIME_SKILLS_LOCK_VERSION, skills: {} };
31
+ }
32
+ let parsed;
33
+ try {
34
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Could not parse ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
38
+ }
39
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
40
+ throw new Error(`${filePath} must contain an object`);
41
+ }
42
+ const record = parsed;
43
+ if (record.version !== RUNTIME_SKILLS_LOCK_VERSION || !record.skills || typeof record.skills !== "object") {
44
+ throw new Error(`${filePath} uses an unsupported lock format`);
45
+ }
46
+ for (const [name, entry] of Object.entries(record.skills)) {
47
+ if (validateSkillName(name)
48
+ || !entry
49
+ || typeof entry !== "object"
50
+ || typeof entry.source !== "string"
51
+ || typeof entry.sourceSkill !== "string"
52
+ || typeof entry.digest !== "string"
53
+ || typeof entry.installedAt !== "string"
54
+ || (entry.revision !== undefined && typeof entry.revision !== "string")) {
55
+ throw new Error(`${filePath} contains an invalid entry for ${name}`);
56
+ }
57
+ }
58
+ return record;
59
+ }
60
+ export function writeRuntimeSkillsLock(projectDir, lock) {
61
+ const filePath = runtimeSkillsLockPath(projectDir);
62
+ if (Object.keys(lock.skills).length === 0) {
63
+ fs.rmSync(filePath, { force: true });
64
+ return;
65
+ }
66
+ atomicWriteJson(filePath, lock);
67
+ }
68
+ export function skillBundleDigest(bundle) {
69
+ const hash = createHash("sha256");
70
+ for (const file of [...bundle.files].sort((a, b) => a.path.localeCompare(b.path))) {
71
+ hash.update(file.path);
72
+ hash.update("\0");
73
+ hash.update(file.content);
74
+ hash.update("\0");
75
+ }
76
+ return `sha256:${hash.digest("hex")}`;
77
+ }
78
+ /** Discover valid Agent Skills bundles without following symlinks. */
79
+ export function discoverRuntimeSkills(sourceRoot) {
80
+ const root = path.resolve(sourceRoot);
81
+ if (!fs.existsSync(root) || !fs.statSync(root).isDirectory()) {
82
+ throw new Error(`Skill source directory not found: ${root}`);
83
+ }
84
+ const found = new Map();
85
+ const walk = (directory, depth) => {
86
+ if (depth > MAX_DISCOVERY_DEPTH)
87
+ return;
88
+ const skillFile = path.join(directory, "SKILL.md");
89
+ if (fs.existsSync(skillFile)) {
90
+ const stat = fs.lstatSync(skillFile);
91
+ if (stat.isSymbolicLink() || !stat.isFile()) {
92
+ throw new Error(`SKILL.md must be a regular file: ${skillFile}`);
93
+ }
94
+ const raw = normalizeSkillMarkdown(fs.readFileSync(skillFile, "utf-8"));
95
+ const metadata = parseSkillFrontmatter(raw);
96
+ if (!metadata?.name || !metadata.description) {
97
+ throw new Error(`SKILL.md must define name and description: ${skillFile}`);
98
+ }
99
+ const nameError = validateSkillName(metadata.name);
100
+ if (nameError)
101
+ throw new Error(`${nameError}: ${metadata.name}`);
102
+ if (found.has(metadata.name)) {
103
+ throw new Error(`Duplicate skill name "${metadata.name}" found in ${directory}`);
104
+ }
105
+ found.set(metadata.name, {
106
+ name: metadata.name,
107
+ description: metadata.description,
108
+ directory,
109
+ bundle: collectLocalSkillBundle(directory, metadata.name),
110
+ });
111
+ return;
112
+ }
113
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
114
+ if (!entry.isDirectory() || IGNORED_DIRECTORIES.has(entry.name))
115
+ continue;
116
+ const child = path.join(directory, entry.name);
117
+ if (fs.lstatSync(child).isSymbolicLink())
118
+ continue;
119
+ walk(child, depth + 1);
120
+ }
121
+ };
122
+ walk(root, 0);
123
+ return [...found.values()].sort((a, b) => a.name.localeCompare(b.name));
124
+ }
125
+ function projectPolpoDir(projectDir) {
126
+ const polpoDir = path.join(path.resolve(projectDir), ".polpo");
127
+ if (!fs.existsSync(polpoDir)) {
128
+ throw new Error(`No .polpo directory found in ${path.resolve(projectDir)}`);
129
+ }
130
+ return polpoDir;
131
+ }
132
+ function requireDirectoryAgents(polpoDir) {
133
+ if (detectAgentLayout(polpoDir) === "legacy") {
134
+ throw new Error("Runtime skill assignment requires the directory-based agent layout. Run `polpo migrate` first.");
135
+ }
136
+ }
137
+ function updateAgentSkillAssignments(polpoDir, agentNames, skillNames, operation) {
138
+ if (agentNames.length === 0 || skillNames.length === 0)
139
+ return [];
140
+ requireDirectoryAgents(polpoDir);
141
+ const entries = readProjectAgents(polpoDir);
142
+ const byName = new Map(entries.map((entry) => [entry.agent.name, entry]));
143
+ const missing = [...new Set(agentNames)].filter((name) => !byName.has(name));
144
+ if (missing.length > 0)
145
+ throw new Error(`Unknown agent${missing.length === 1 ? "" : "s"}: ${missing.join(", ")}`);
146
+ const changes = [];
147
+ for (const agentName of [...new Set(agentNames)]) {
148
+ const entry = byName.get(agentName);
149
+ const current = new Set(entry.agent.skills ?? []);
150
+ for (const skillName of skillNames) {
151
+ const had = current.has(skillName);
152
+ if (operation === "assign")
153
+ current.add(skillName);
154
+ else
155
+ current.delete(skillName);
156
+ if (had !== current.has(skillName))
157
+ changes.push({ agent: agentName, skill: skillName });
158
+ }
159
+ writeProjectAgent(polpoDir, { ...entry.agent, skills: [...current].sort() }, entry.teamName);
160
+ }
161
+ return changes;
162
+ }
163
+ export function assignRuntimeSkills(projectDir, skillNames, agentNames) {
164
+ const polpoDir = projectPolpoDir(projectDir);
165
+ for (const skillName of skillNames) {
166
+ if (!fs.existsSync(path.join(polpoDir, "skills", skillName, "SKILL.md"))) {
167
+ throw new Error(`Unknown local runtime skill: ${skillName}`);
168
+ }
169
+ }
170
+ return updateAgentSkillAssignments(polpoDir, agentNames, skillNames, "assign");
171
+ }
172
+ export function unassignRuntimeSkills(projectDir, skillNames, agentNames) {
173
+ return updateAgentSkillAssignments(projectPolpoDir(projectDir), agentNames, skillNames, "unassign");
174
+ }
175
+ export function installRuntimeSkills(options) {
176
+ const polpoDir = projectPolpoDir(options.projectDir);
177
+ const selected = [...options.skills];
178
+ if (selected.length === 0)
179
+ throw new Error("No runtime skills selected");
180
+ const duplicate = selected.find((skill, index) => selected.findIndex((candidate) => candidate.name === skill.name) !== index);
181
+ if (duplicate)
182
+ throw new Error(`Duplicate selected skill: ${duplicate.name}`);
183
+ // Validate every requested mutation before writing the first bundle.
184
+ if (options.agents?.length) {
185
+ requireDirectoryAgents(polpoDir);
186
+ const knownAgents = new Set(readProjectAgents(polpoDir).map(({ agent }) => agent.name));
187
+ const missing = [...new Set(options.agents)].filter((name) => !knownAgents.has(name));
188
+ if (missing.length > 0)
189
+ throw new Error(`Unknown agent${missing.length === 1 ? "" : "s"}: ${missing.join(", ")}`);
190
+ }
191
+ const lock = readRuntimeSkillsLock(options.projectDir);
192
+ const result = {
193
+ installed: [], updated: [], unchanged: [], skipped: [], assigned: [],
194
+ };
195
+ const now = (options.now ?? (() => new Date()))().toISOString();
196
+ for (const skill of selected) {
197
+ const target = path.join(polpoDir, "skills", skill.name);
198
+ const digest = skillBundleDigest(skill.bundle);
199
+ let write = true;
200
+ if (fs.existsSync(target)) {
201
+ const current = collectLocalSkillBundle(target, skill.name);
202
+ if (skillBundleDigest(current) === digest) {
203
+ result.unchanged.push(skill.name);
204
+ write = false;
205
+ }
206
+ else if (!options.force) {
207
+ result.skipped.push(skill.name);
208
+ write = false;
209
+ }
210
+ else {
211
+ result.updated.push(skill.name);
212
+ }
213
+ }
214
+ else {
215
+ result.installed.push(skill.name);
216
+ }
217
+ if (write)
218
+ replaceLocalSkillBundle(target, skill.bundle);
219
+ if (write || result.unchanged.includes(skill.name)) {
220
+ lock.skills[skill.name] = {
221
+ source: options.source,
222
+ sourceSkill: skill.name,
223
+ ...(options.revision ? { revision: options.revision } : {}),
224
+ digest,
225
+ installedAt: now,
226
+ };
227
+ }
228
+ }
229
+ if (options.agents?.length) {
230
+ result.assigned = assignRuntimeSkills(options.projectDir, selected.map((skill) => skill.name), options.agents);
231
+ }
232
+ writeRuntimeSkillsLock(options.projectDir, lock);
233
+ return result;
234
+ }
235
+ export function removeRuntimeSkill(projectDir, skillName) {
236
+ const polpoDir = projectPolpoDir(projectDir);
237
+ const nameError = validateSkillName(skillName);
238
+ if (nameError)
239
+ throw new Error(nameError);
240
+ const target = path.join(polpoDir, "skills", skillName);
241
+ if (!fs.existsSync(target))
242
+ return false;
243
+ requireDirectoryAgents(polpoDir);
244
+ const assignedAgents = readProjectAgents(polpoDir)
245
+ .filter(({ agent }) => agent.skills?.includes(skillName))
246
+ .map(({ agent }) => agent.name);
247
+ updateAgentSkillAssignments(polpoDir, assignedAgents, [skillName], "unassign");
248
+ fs.rmSync(target, { recursive: true, force: true });
249
+ const lock = readRuntimeSkillsLock(projectDir);
250
+ delete lock.skills[skillName];
251
+ writeRuntimeSkillsLock(projectDir, lock);
252
+ return true;
253
+ }
254
+ export function listLocalRuntimeSkills(projectDir) {
255
+ const polpoDir = projectPolpoDir(projectDir);
256
+ const skillsDir = path.join(polpoDir, "skills");
257
+ if (!fs.existsSync(skillsDir))
258
+ return [];
259
+ const assignments = new Map();
260
+ for (const { agent } of readProjectAgents(polpoDir)) {
261
+ for (const skill of agent.skills ?? []) {
262
+ const names = assignments.get(skill) ?? [];
263
+ names.push(agent.name);
264
+ assignments.set(skill, names);
265
+ }
266
+ }
267
+ const lock = readRuntimeSkillsLock(projectDir);
268
+ return discoverRuntimeSkills(skillsDir).map((skill) => {
269
+ if (path.dirname(skill.directory) !== skillsDir || path.basename(skill.directory) !== skill.name) {
270
+ throw new Error(`Local runtime skill directory must match SKILL.md name: ${skill.name}`);
271
+ }
272
+ return {
273
+ name: skill.name,
274
+ description: skill.description,
275
+ assignedTo: (assignments.get(skill.name) ?? []).sort(),
276
+ locked: Boolean(lock.skills[skill.name]),
277
+ };
278
+ });
279
+ }
280
+ //# sourceMappingURL=runtime-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-skills.js","sourceRoot":"","sources":["../../src/util/runtime-skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/cli",
3
- "version": "0.15.72",
3
+ "version": "0.15.74",
4
4
  "description": "Command-line client for Polpo — create/link/deploy cloud projects from your terminal.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -25,11 +25,11 @@
25
25
  "es-module-lexer": "^2.3.1",
26
26
  "esbuild": "^0.25.12",
27
27
  "picocolors": "^1.1.1",
28
- "@polpo-ai/core": "0.15.72",
29
- "@polpo-ai/server": "0.15.72",
30
- "@polpo-ai/file-stores": "0.15.72",
31
- "@polpo-ai/tools": "0.15.72",
32
- "@polpo-ai/vault-crypto": "0.15.72"
28
+ "@polpo-ai/core": "0.15.74",
29
+ "@polpo-ai/server": "0.15.74",
30
+ "@polpo-ai/file-stores": "0.15.74",
31
+ "@polpo-ai/tools": "0.15.74",
32
+ "@polpo-ai/vault-crypto": "0.15.74"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.10.2",