@plurnk/plurnk-service 1.8.0 → 1.9.1

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 (267) hide show
  1. package/.env.defaults +20 -0
  2. package/INSTALL.md +14 -16
  3. package/README.md +1 -1
  4. package/SPEC.md +635 -296
  5. package/digest-sql/channel-dispositions/dispositions.sql +2 -2
  6. package/digest-sql/entry-dispositions/dispositions.sql +2 -2
  7. package/dist/Paths.d.ts +1 -2
  8. package/dist/Paths.d.ts.map +1 -1
  9. package/dist/Paths.js +1 -9
  10. package/dist/Paths.js.map +1 -1
  11. package/dist/build-info.json +1 -1
  12. package/dist/core/ChannelWrite.d.ts +8 -3
  13. package/dist/core/ChannelWrite.d.ts.map +1 -1
  14. package/dist/core/ChannelWrite.js +40 -8
  15. package/dist/core/ChannelWrite.js.map +1 -1
  16. package/dist/core/ChannelWrite.sql +17 -4
  17. package/dist/core/CoreSchemeServices.d.ts +7 -3
  18. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  19. package/dist/core/CoreSchemeServices.js +8 -1
  20. package/dist/core/CoreSchemeServices.js.map +1 -1
  21. package/dist/core/Dispatcher.d.ts +9 -1
  22. package/dist/core/Dispatcher.d.ts.map +1 -1
  23. package/dist/core/Dispatcher.js +327 -221
  24. package/dist/core/Dispatcher.js.map +1 -1
  25. package/dist/core/Engine.d.ts +13 -4
  26. package/dist/core/Engine.d.ts.map +1 -1
  27. package/dist/core/Engine.js +44 -22
  28. package/dist/core/Engine.js.map +1 -1
  29. package/dist/core/Engine.sql +101 -81
  30. package/dist/core/EntryAddressBinding.d.ts +32 -0
  31. package/dist/core/EntryAddressBinding.d.ts.map +1 -0
  32. package/dist/core/EntryAddressBinding.js +93 -0
  33. package/dist/core/EntryAddressBinding.js.map +1 -0
  34. package/dist/core/ExecutorRegistry.d.ts +4 -4
  35. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  36. package/dist/core/ExecutorRegistry.js +28 -28
  37. package/dist/core/ExecutorRegistry.js.map +1 -1
  38. package/dist/core/LogBody.d.ts.map +1 -1
  39. package/dist/core/LogBody.js +19 -1
  40. package/dist/core/LogBody.js.map +1 -1
  41. package/dist/core/OperatorConfig.d.ts.map +1 -1
  42. package/dist/core/OperatorConfig.js +5 -2
  43. package/dist/core/OperatorConfig.js.map +1 -1
  44. package/dist/core/OverflowTurn.d.ts.map +1 -1
  45. package/dist/core/OverflowTurn.js +5 -1
  46. package/dist/core/OverflowTurn.js.map +1 -1
  47. package/dist/core/Owner.js +1 -1
  48. package/dist/core/Owner.js.map +1 -1
  49. package/dist/core/PacketBuilder.d.ts +5 -1
  50. package/dist/core/PacketBuilder.d.ts.map +1 -1
  51. package/dist/core/PacketBuilder.js +24 -12
  52. package/dist/core/PacketBuilder.js.map +1 -1
  53. package/dist/core/ProposalLifecycle.d.ts +4 -1
  54. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  55. package/dist/core/ProposalLifecycle.js +85 -26
  56. package/dist/core/ProposalLifecycle.js.map +1 -1
  57. package/dist/core/ReasoningEvent.d.ts +13 -0
  58. package/dist/core/ReasoningEvent.d.ts.map +1 -0
  59. package/dist/core/ReasoningEvent.js +6 -0
  60. package/dist/core/ReasoningEvent.js.map +1 -0
  61. package/dist/core/ResourceMutations.d.ts +15 -19
  62. package/dist/core/ResourceMutations.d.ts.map +1 -1
  63. package/dist/core/ResourceMutations.js +113 -38
  64. package/dist/core/ResourceMutations.js.map +1 -1
  65. package/dist/core/SchemeRegistry.d.ts +12 -11
  66. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  67. package/dist/core/SchemeRegistry.js +59 -47
  68. package/dist/core/SchemeRegistry.js.map +1 -1
  69. package/dist/core/ToolResources.d.ts.map +1 -1
  70. package/dist/core/ToolResources.js +20 -19
  71. package/dist/core/ToolResources.js.map +1 -1
  72. package/dist/core/Turn.d.ts +1 -1
  73. package/dist/core/Turn.d.ts.map +1 -1
  74. package/dist/core/TurnOps.d.ts +2 -2
  75. package/dist/core/TurnOps.d.ts.map +1 -1
  76. package/dist/core/TurnOps.js +14 -4
  77. package/dist/core/TurnOps.js.map +1 -1
  78. package/dist/core/TurnRunner.d.ts +46 -3
  79. package/dist/core/TurnRunner.d.ts.map +1 -1
  80. package/dist/core/TurnRunner.js +165 -78
  81. package/dist/core/TurnRunner.js.map +1 -1
  82. package/dist/core/WorkerName.d.ts +1 -0
  83. package/dist/core/WorkerName.d.ts.map +1 -1
  84. package/dist/core/WorkerName.js +2 -1
  85. package/dist/core/WorkerName.js.map +1 -1
  86. package/dist/core/WorkerName.sql +17 -2
  87. package/dist/core/WorkspaceGate.js +1 -1
  88. package/dist/core/WorkspaceGate.js.map +1 -1
  89. package/dist/core/caps/CapsResolve.d.ts +2 -2
  90. package/dist/core/caps/CapsResolve.d.ts.map +1 -1
  91. package/dist/core/caps/CapsResolve.js +5 -7
  92. package/dist/core/caps/CapsResolve.js.map +1 -1
  93. package/dist/core/caps/DbChannelCaps.d.ts +1 -1
  94. package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
  95. package/dist/core/caps/DbChannelCaps.js +13 -11
  96. package/dist/core/caps/DbChannelCaps.js.map +1 -1
  97. package/dist/core/caps/DbEntryCaps.d.ts +5 -5
  98. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
  99. package/dist/core/caps/DbEntryCaps.js +27 -30
  100. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  101. package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
  102. package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
  103. package/dist/core/caps/DbNotifyCaps.js +5 -3
  104. package/dist/core/caps/DbNotifyCaps.js.map +1 -1
  105. package/dist/core/caps/DbSubscriptionCaps.d.ts +3 -3
  106. package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
  107. package/dist/core/caps/DbSubscriptionCaps.js +16 -26
  108. package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
  109. package/dist/core/caps/SchemeCtxImpl.d.ts +6 -4
  110. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  111. package/dist/core/caps/SchemeCtxImpl.js +37 -5
  112. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  113. package/dist/core/file-creation-policy.d.ts +9 -0
  114. package/dist/core/file-creation-policy.d.ts.map +1 -0
  115. package/dist/core/file-creation-policy.js +25 -0
  116. package/dist/core/file-creation-policy.js.map +1 -0
  117. package/dist/core/fork.d.ts +4 -1
  118. package/dist/core/fork.d.ts.map +1 -1
  119. package/dist/core/fork.js +27 -15
  120. package/dist/core/fork.js.map +1 -1
  121. package/dist/core/fork.sql +35 -22
  122. package/dist/core/git-membership.d.ts +19 -1
  123. package/dist/core/git-membership.d.ts.map +1 -1
  124. package/dist/core/git-membership.js +225 -50
  125. package/dist/core/git-membership.js.map +1 -1
  126. package/dist/core/packet-wire.d.ts.map +1 -1
  127. package/dist/core/packet-wire.js +28 -19
  128. package/dist/core/packet-wire.js.map +1 -1
  129. package/dist/core/plurnk-uri.d.ts +13 -2
  130. package/dist/core/plurnk-uri.d.ts.map +1 -1
  131. package/dist/core/plurnk-uri.js +59 -21
  132. package/dist/core/plurnk-uri.js.map +1 -1
  133. package/dist/core/scheme-types.d.ts +1 -0
  134. package/dist/core/scheme-types.d.ts.map +1 -1
  135. package/dist/core/worker-ops.sql +10 -6
  136. package/dist/core/worker-settings.d.ts +1 -0
  137. package/dist/core/worker-settings.d.ts.map +1 -1
  138. package/dist/core/worker-settings.js +7 -0
  139. package/dist/core/worker-settings.js.map +1 -1
  140. package/dist/core/workspace-settings.d.ts +2 -0
  141. package/dist/core/workspace-settings.d.ts.map +1 -1
  142. package/dist/core/workspace-settings.js +5 -1
  143. package/dist/core/workspace-settings.js.map +1 -1
  144. package/dist/digest/Digest.d.ts.map +1 -1
  145. package/dist/digest/Digest.js +1 -1
  146. package/dist/digest/Digest.js.map +1 -1
  147. package/dist/digest/digest.sql +1 -1
  148. package/dist/schemes/Exec.d.ts +3 -2
  149. package/dist/schemes/Exec.d.ts.map +1 -1
  150. package/dist/schemes/Exec.js +55 -22
  151. package/dist/schemes/Exec.js.map +1 -1
  152. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  153. package/dist/schemes/ExecOutputScheme.js +5 -4
  154. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  155. package/dist/schemes/File.d.ts.map +1 -1
  156. package/dist/schemes/File.js +170 -80
  157. package/dist/schemes/File.js.map +1 -1
  158. package/dist/schemes/Prompt.d.ts +2 -3
  159. package/dist/schemes/Prompt.d.ts.map +1 -1
  160. package/dist/schemes/Prompt.js +4 -7
  161. package/dist/schemes/Prompt.js.map +1 -1
  162. package/dist/schemes/QuestionTool.d.ts +2 -0
  163. package/dist/schemes/QuestionTool.d.ts.map +1 -1
  164. package/dist/schemes/QuestionTool.js +5 -0
  165. package/dist/schemes/QuestionTool.js.map +1 -1
  166. package/dist/schemes/Skill.d.ts.map +1 -1
  167. package/dist/schemes/Skill.js +3 -1
  168. package/dist/schemes/Skill.js.map +1 -1
  169. package/dist/schemes/Worker.d.ts.map +1 -1
  170. package/dist/schemes/Worker.js +95 -49
  171. package/dist/schemes/Worker.js.map +1 -1
  172. package/dist/schemes/_entry-crud.d.ts +5 -5
  173. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  174. package/dist/schemes/_entry-crud.js +22 -17
  175. package/dist/schemes/_entry-crud.js.map +1 -1
  176. package/dist/schemes/_entry-crud.sql +58 -23
  177. package/dist/schemes/_entry-find.d.ts +3 -2
  178. package/dist/schemes/_entry-find.d.ts.map +1 -1
  179. package/dist/schemes/_entry-find.js +26 -25
  180. package/dist/schemes/_entry-find.js.map +1 -1
  181. package/dist/schemes/_entry-find.sql +10 -7
  182. package/dist/schemes/_entry-manifest.d.ts +2 -2
  183. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  184. package/dist/schemes/_entry-manifest.js +6 -5
  185. package/dist/schemes/_entry-manifest.js.map +1 -1
  186. package/dist/schemes/_entry-ops.d.ts +6 -5
  187. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  188. package/dist/schemes/_entry-ops.js +39 -46
  189. package/dist/schemes/_entry-ops.js.map +1 -1
  190. package/dist/schemes/_entry-ops.sql +9 -6
  191. package/dist/schemes/_entry-send.d.ts +2 -2
  192. package/dist/schemes/_entry-send.d.ts.map +1 -1
  193. package/dist/schemes/_entry-send.js +16 -14
  194. package/dist/schemes/_entry-send.js.map +1 -1
  195. package/dist/schemes/_search-index.d.ts.map +1 -1
  196. package/dist/schemes/_search-index.js +2 -0
  197. package/dist/schemes/_search-index.js.map +1 -1
  198. package/dist/server/Daemon.d.ts +42 -10
  199. package/dist/server/Daemon.d.ts.map +1 -1
  200. package/dist/server/Daemon.js +326 -248
  201. package/dist/server/Daemon.js.map +1 -1
  202. package/dist/server/DaemonModule.d.ts +84 -19
  203. package/dist/server/DaemonModule.d.ts.map +1 -1
  204. package/dist/server/DrainSupervisor.d.ts +3 -1
  205. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  206. package/dist/server/DrainSupervisor.js +11 -9
  207. package/dist/server/DrainSupervisor.js.map +1 -1
  208. package/dist/server/Functionality.d.ts +44 -0
  209. package/dist/server/Functionality.d.ts.map +1 -0
  210. package/dist/server/Functionality.js +422 -0
  211. package/dist/server/Functionality.js.map +1 -0
  212. package/dist/server/FunctionalityManager.d.ts +22 -0
  213. package/dist/server/FunctionalityManager.d.ts.map +1 -0
  214. package/dist/server/FunctionalityManager.js +121 -0
  215. package/dist/server/FunctionalityManager.js.map +1 -0
  216. package/dist/server/SkillsFunctionality.d.ts +61 -0
  217. package/dist/server/SkillsFunctionality.d.ts.map +1 -0
  218. package/dist/server/SkillsFunctionality.js +449 -0
  219. package/dist/server/SkillsFunctionality.js.map +1 -0
  220. package/dist/server/WorkerCapabilities.d.ts +21 -0
  221. package/dist/server/WorkerCapabilities.d.ts.map +1 -0
  222. package/dist/server/WorkerCapabilities.js +214 -0
  223. package/dist/server/WorkerCapabilities.js.map +1 -0
  224. package/dist/server/WorkerResidency.d.ts +40 -0
  225. package/dist/server/WorkerResidency.d.ts.map +1 -0
  226. package/dist/server/WorkerResidency.js +283 -0
  227. package/dist/server/WorkerResidency.js.map +1 -0
  228. package/dist/server/client-input.d.ts +1 -0
  229. package/dist/server/client-input.d.ts.map +1 -1
  230. package/dist/server/client-input.js +22 -1
  231. package/dist/server/client-input.js.map +1 -1
  232. package/dist/server/dispatch-as-plurnk.d.ts +2 -2
  233. package/dist/server/dispatch-as-plurnk.d.ts.map +1 -1
  234. package/dist/server/dispatch-as-plurnk.js +89 -25
  235. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  236. package/dist/server/drain.sql +11 -6
  237. package/dist/server/envelope.d.ts +6 -1
  238. package/dist/server/envelope.d.ts.map +1 -1
  239. package/dist/server/envelope.js +8 -2
  240. package/dist/server/envelope.js.map +1 -1
  241. package/dist/server/envelope.sql +11 -3
  242. package/dist/server/lifecycle-recovery.sql +13 -16
  243. package/dist/server/loopDocs.d.ts +2 -1
  244. package/dist/server/loopDocs.d.ts.map +1 -1
  245. package/dist/server/loopDocs.js +67 -51
  246. package/dist/server/loopDocs.js.map +1 -1
  247. package/dist/server/loopDocs.sql +14 -10
  248. package/dist/server/module-discovery.d.ts +2 -2
  249. package/dist/server/module-discovery.d.ts.map +1 -1
  250. package/dist/server/module-discovery.js +27 -2
  251. package/dist/server/module-discovery.js.map +1 -1
  252. package/dist/server/seam-entry-read.sql +9 -7
  253. package/dist/server/seam-log-read.sql +1 -1
  254. package/dist/server/seam-loop.sql +10 -1
  255. package/dist/server/seam-proposal-list.sql +4 -2
  256. package/dist/server/worker-capabilities.sql +19 -0
  257. package/dist/service.d.ts.map +1 -1
  258. package/dist/service.js +11 -1
  259. package/dist/service.js.map +1 -1
  260. package/migrations/001_schema.sql +486 -136
  261. package/package.json +34 -32
  262. package/dist/server/skillDocs.d.ts +0 -9
  263. package/dist/server/skillDocs.d.ts.map +0 -1
  264. package/dist/server/skillDocs.js +0 -212
  265. package/dist/server/skillDocs.js.map +0 -1
  266. package/dist/server/skillDocs.sql +0 -14
  267. package/dist/server/workspace-capabilities.sql +0 -19
@@ -0,0 +1,61 @@
1
+ import { type FunctionalityCandidate, type FunctionalityDiscoverQuery, type JsonSchema, type ProblemDetails } from "@plurnk/plurnk-contracts";
2
+ import type { Db } from "../core/Db.ts";
3
+ import HostPaths from "../core/HostPaths.ts";
4
+ import type { FunctionalityAdapter, FunctionalityDefinitionSource, FunctionalityFamilyHandle, FunctionalityPreparation, FunctionalityPrepared, FunctionalityServiceDefinition, WorkerCapabilityIdentity } from "./DaemonModule.ts";
5
+ export declare const SKILLS_FAMILY = "skills";
6
+ export declare const SKILLS_OWNER = "@plurnk/plurnk-core/skills";
7
+ interface SkillDoc {
8
+ readonly name: string;
9
+ readonly description: string;
10
+ readonly body: string;
11
+ }
12
+ export interface RegistrySkill {
13
+ readonly name: string;
14
+ readonly id: string;
15
+ readonly source: string;
16
+ readonly installs: number | null;
17
+ }
18
+ export interface SkillsToolchain {
19
+ run(args: readonly string[], cwd: string, home: string): Promise<string>;
20
+ search(query: string): Promise<readonly RegistrySkill[]>;
21
+ }
22
+ export declare class SkillsActionError extends Error {
23
+ readonly problem: ProblemDetails;
24
+ constructor(problem: ProblemDetails, cause?: unknown);
25
+ }
26
+ export declare const parseSkill: (file: string, folder: string, raw: string) => SkillDoc;
27
+ export declare const renderSkill: (doc: SkillDoc) => string;
28
+ export declare const renderIndex: (skills: readonly SkillDoc[]) => string;
29
+ export declare const parseListing: (output: string) => Array<{
30
+ name: string;
31
+ description: string;
32
+ }>;
33
+ export declare class StandardSkillsToolchain implements SkillsToolchain {
34
+ #private;
35
+ constructor(env?: NodeJS.ProcessEnv);
36
+ get registry(): string | null;
37
+ run(args: readonly string[], cwd: string, home: string): Promise<string>;
38
+ search(query: string): Promise<readonly RegistrySkill[]>;
39
+ }
40
+ export default class SkillsFunctionality implements FunctionalityAdapter {
41
+ #private;
42
+ readonly family = "skills";
43
+ readonly namespaceOwner = "@plurnk/plurnk-core/skills";
44
+ readonly summary = "Agent Skills: standard SKILL.md directories under the project and user roots, enabled per Worker.";
45
+ readonly definitionSchema: JsonSchema;
46
+ constructor({ db, hostPaths, toolchain }: {
47
+ readonly db: Db;
48
+ readonly hostPaths?: HostPaths;
49
+ readonly toolchain?: SkillsToolchain;
50
+ });
51
+ attach(handle: FunctionalityFamilyHandle): void;
52
+ refreshIfChanged(identity: WorkerCapabilityIdentity): Promise<void>;
53
+ available(identity: WorkerCapabilityIdentity): Promise<readonly FunctionalityServiceDefinition[]>;
54
+ discover(query: FunctionalityDiscoverQuery, identity: WorkerCapabilityIdentity): Promise<readonly FunctionalityCandidate[]>;
55
+ admit(input: unknown, identity: WorkerCapabilityIdentity): Promise<FunctionalityDefinitionSource>;
56
+ forget(source: FunctionalityDefinitionSource, identity: WorkerCapabilityIdentity): Promise<void>;
57
+ prepare(preparation: FunctionalityPreparation): Promise<FunctionalityPrepared>;
58
+ teardown(_snapshot: unknown, identity: WorkerCapabilityIdentity): Promise<void>;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=SkillsFunctionality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillsFunctionality.d.ts","sourceRoot":"","sources":["../../src/server/SkillsFunctionality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ // {§skills-functionality} — standard Agent Skills as one Worker Functionality
2
+ // family. The filesystem under the universal roots is the only truth about
3
+ // installation; the Worker's durable state owns enablement; the standard
4
+ // `skills` CLI is the deterministic installer beneath `add`/`remove` and the
5
+ // registry behind `discover`, and neither is the model's or a client's contract.
6
+ import { execFile } from "node:child_process";
7
+ import { createHash } from "node:crypto";
8
+ import { readdir, readFile, stat } from "node:fs/promises";
9
+ import { join } from "node:path";
10
+ import { promisify, stripVTControlCharacters } from "node:util";
11
+ import { parse as parseYaml } from "yaml";
12
+ import { Problems, Validator, } from "@plurnk/plurnk-contracts";
13
+ import HostPaths from "../core/HostPaths.js";
14
+ const execFileP = promisify(execFile);
15
+ export const SKILLS_FAMILY = "skills";
16
+ export const SKILLS_OWNER = "@plurnk/plurnk-core/skills";
17
+ const DEFINITION = { $ref: "https://schemas.plurnk.xyz/v0/SkillDefinition.json" };
18
+ const SKILL_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
19
+ const DEFAULT_CLI = "npx --yes skills";
20
+ const DEFAULT_REGISTRY = "https://skills.sh";
21
+ const REGISTRY_LIMIT = 20;
22
+ const CLI_TIMEOUT_MS = 120_000;
23
+ export class SkillsActionError extends Error {
24
+ problem;
25
+ constructor(problem, cause) {
26
+ super(problem.detail, cause === undefined ? undefined : { cause });
27
+ this.name = "SkillsActionError";
28
+ this.problem = problem;
29
+ }
30
+ }
31
+ const problem = (code, status, detail, extensions = {}) => Problems.create("skills:functionality", code, status, detail, {
32
+ stage: "skills-functionality",
33
+ retryable: status === 409 || status >= 500,
34
+ ...extensions,
35
+ });
36
+ const actionError = (code, status, detail, extensions = {}, cause) => new SkillsActionError(problem(code, status, detail, extensions), cause);
37
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
38
+ const messageOf = (cause) => cause instanceof Error ? cause.message : String(cause);
39
+ const isFile = (path) => stat(path).then((info) => info.isFile(), () => false);
40
+ const exists = (path) => stat(path).then(() => true, () => false);
41
+ // Agent Skills requires YAML frontmatter with name and description. Admission
42
+ // consumes those two discovery keys and preserves the instruction body.
43
+ export const parseSkill = (file, folder, raw) => {
44
+ const lines = raw.replace(/\r\n/gu, "\n").split("\n");
45
+ if (lines[0] !== "---")
46
+ throw new Error(`${file}: Agent Skill requires YAML frontmatter`);
47
+ const close = lines.indexOf("---", 1);
48
+ if (close === -1)
49
+ throw new Error(`${file}: Agent Skill frontmatter is not closed`);
50
+ let metadata;
51
+ try {
52
+ metadata = parseYaml(lines.slice(1, close).join("\n"), { maxAliasCount: 0, uniqueKeys: true });
53
+ }
54
+ catch (cause) {
55
+ throw new Error(`${file}: Agent Skill frontmatter is invalid YAML`, { cause });
56
+ }
57
+ if (!isRecord(metadata))
58
+ throw new Error(`${file}: Agent Skill frontmatter must be a mapping`);
59
+ const { name, description } = metadata;
60
+ if (typeof name !== "string" || name.length === 0)
61
+ throw new Error(`${file}: Agent Skill frontmatter requires name`);
62
+ if (!SKILL_NAME.test(name))
63
+ throw new Error(`${file}: Agent Skill name ${JSON.stringify(name)} is invalid`);
64
+ if (name.length > 64)
65
+ throw new Error(`${file}: Agent Skill name exceeds 64 characters`);
66
+ if (name !== folder)
67
+ throw new Error(`${file}: Agent Skill name ${JSON.stringify(name)} must match folder ${JSON.stringify(folder)}`);
68
+ if (typeof description !== "string" || description.length === 0)
69
+ throw new Error(`${file}: Agent Skill frontmatter requires description`);
70
+ if (description.length > 1024)
71
+ throw new Error(`${file}: Agent Skill description exceeds 1024 characters`);
72
+ return { name, description, body: lines.slice(close + 1).join("\n").trim() };
73
+ };
74
+ export const renderSkill = (doc) => [
75
+ `# ${doc.name}`,
76
+ "",
77
+ "## Summary",
78
+ "",
79
+ doc.description,
80
+ ...(doc.body.length === 0 ? [] : ["", doc.body]),
81
+ ].join("\n");
82
+ export const renderIndex = (skills) => [
83
+ "# Skills",
84
+ "",
85
+ "## Summary",
86
+ "",
87
+ "Agent Skills enabled for this worker.",
88
+ ...skills.flatMap((skill) => ["", `- **${skill.name}** — ${skill.description}`]),
89
+ ].join("\n");
90
+ // `skills add <source> --list` prints, after an "Available Skills" heading,
91
+ // each skill name at one indentation and its description at a deeper one,
92
+ // behind the CLI's box-drawing gutter. Only that structure is read.
93
+ export const parseListing = (output) => {
94
+ const lines = stripVTControlCharacters(output).split(/\r?\n/u);
95
+ const start = lines.findIndex((line) => /Available Skills\s*$/u.test(line));
96
+ if (start === -1)
97
+ return [];
98
+ const skills = [];
99
+ for (const line of lines.slice(start + 1)) {
100
+ const match = /^[^\s\p{L}\p{N}]*( +)(\S.*)$/u.exec(line);
101
+ if (match === null)
102
+ continue;
103
+ const indent = match[1].length;
104
+ const text = match[2].trim();
105
+ if (indent === 4) {
106
+ if (SKILL_NAME.test(text))
107
+ skills.push({ name: text, description: "" });
108
+ continue;
109
+ }
110
+ const last = skills.at(-1);
111
+ if (last === undefined || indent < 6)
112
+ continue;
113
+ skills[skills.length - 1] = { name: last.name, description: last.description.length === 0 ? text : `${last.description} ${text}` };
114
+ }
115
+ return skills;
116
+ };
117
+ export class StandardSkillsToolchain {
118
+ #command;
119
+ #registry;
120
+ constructor(env = process.env) {
121
+ const cli = env.PLURNK_SERVICE_SKILLS_CLI?.trim();
122
+ this.#command = (cli === undefined || cli.length === 0 ? DEFAULT_CLI : cli).split(/\s+/u);
123
+ const registry = env.PLURNK_SERVICE_SKILLS_REGISTRY_URL;
124
+ this.#registry = registry === undefined ? DEFAULT_REGISTRY : registry.trim().length === 0 ? null : registry.trim().replace(/\/+$/u, "");
125
+ }
126
+ get registry() {
127
+ return this.#registry;
128
+ }
129
+ async run(args, cwd, home) {
130
+ const [command, ...prefix] = this.#command;
131
+ const { stdout, stderr } = await execFileP(command, [...prefix, ...args], {
132
+ cwd,
133
+ env: { ...process.env, HOME: home, NO_COLOR: "1", CI: "1" },
134
+ timeout: CLI_TIMEOUT_MS,
135
+ maxBuffer: 8 * 1024 * 1024,
136
+ });
137
+ return `${stdout}\n${stderr}`;
138
+ }
139
+ async search(query) {
140
+ if (this.#registry === null) {
141
+ throw actionError("registry-not-configured", 501, "Skills registry search is disabled; PLURNK_SERVICE_SKILLS_REGISTRY_URL is empty.", { query, retryable: false });
142
+ }
143
+ const url = `${this.#registry}/api/search?${new URLSearchParams({ q: query, limit: String(REGISTRY_LIMIT) })}`;
144
+ let response;
145
+ try {
146
+ response = await fetch(url, { signal: AbortSignal.timeout(30_000) });
147
+ }
148
+ catch (cause) {
149
+ throw actionError("registry-unreachable", 502, `Skills registry ${this.#registry} could not be reached.`, { query, registry: this.#registry, retryable: true }, cause);
150
+ }
151
+ if (!response.ok)
152
+ throw actionError("registry-rejected", 502, `Skills registry ${this.#registry} answered ${response.status}.`, { query, registry: this.#registry, status: response.status, retryable: true });
153
+ const body = await response.json();
154
+ if (!Array.isArray(body.skills))
155
+ throw actionError("registry-invalid", 502, `Skills registry ${this.#registry} returned no skills array.`, { query, registry: this.#registry, retryable: true });
156
+ return body.skills.flatMap((skill) => {
157
+ if (!isRecord(skill) || typeof skill.name !== "string" || typeof skill.id !== "string")
158
+ return [];
159
+ return [{
160
+ name: skill.name,
161
+ id: skill.id,
162
+ source: typeof skill.source === "string" && skill.source.length > 0 ? skill.source : skill.id.split("/").slice(0, 2).join("/"),
163
+ installs: typeof skill.installs === "number" ? skill.installs : null,
164
+ }];
165
+ });
166
+ }
167
+ }
168
+ export default class SkillsFunctionality {
169
+ family = SKILLS_FAMILY;
170
+ namespaceOwner = SKILLS_OWNER;
171
+ summary = "Agent Skills: standard SKILL.md directories under the project and user roots, enabled per Worker.";
172
+ definitionSchema = DEFINITION;
173
+ #db;
174
+ #hostPaths;
175
+ #toolchain;
176
+ #signatures = new Map();
177
+ #handle = null;
178
+ constructor({ db, hostPaths = new HostPaths(), toolchain = new StandardSkillsToolchain() }) {
179
+ this.#db = db;
180
+ this.#hostPaths = hostPaths;
181
+ this.#toolchain = toolchain;
182
+ }
183
+ attach(handle) {
184
+ this.#handle = handle;
185
+ }
186
+ async #projectRoot(workspaceId) {
187
+ const workspace = await this.#db.envelope_get_workspace.get({ id: workspaceId });
188
+ return workspace?.project_root ?? null;
189
+ }
190
+ #rootFor(scope, projectRoot) {
191
+ if (scope === "global")
192
+ return this.#hostPaths.globalSkillsDir;
193
+ return projectRoot === null ? null : this.#hostPaths.projectSkillsDir(projectRoot);
194
+ }
195
+ #cwdFor(scope, projectRoot) {
196
+ return scope === "global" || projectRoot === null ? this.#hostPaths.home : projectRoot;
197
+ }
198
+ async #installedIn(scope, dir) {
199
+ let entries;
200
+ try {
201
+ entries = await readdir(dir, { withFileTypes: true });
202
+ }
203
+ catch (cause) {
204
+ if (cause.code === "ENOENT")
205
+ return [];
206
+ throw new Error(`read ${scope} Agent Skills directory ${dir} failed`, { cause });
207
+ }
208
+ const installed = [];
209
+ for (const entry of entries.filter((candidate) => candidate.isDirectory() || candidate.isSymbolicLink())) {
210
+ const file = join(dir, entry.name, "SKILL.md");
211
+ if (await isFile(file))
212
+ installed.push({ name: entry.name, scope, dir: join(dir, entry.name), file });
213
+ }
214
+ return installed.toSorted((left, right) => left.name.localeCompare(right.name));
215
+ }
216
+ // The effective installed union: project shadows global by name.
217
+ async #scan(projectRoot) {
218
+ const union = new Map();
219
+ for (const scope of ["project", "global"]) {
220
+ const dir = this.#rootFor(scope, projectRoot);
221
+ if (dir === null)
222
+ continue;
223
+ for (const installed of await this.#installedIn(scope, dir)) {
224
+ if (!union.has(installed.name))
225
+ union.set(installed.name, installed);
226
+ }
227
+ }
228
+ return union;
229
+ }
230
+ // The standard installer's lock files record each installed skill's source.
231
+ async #lockSources(projectRoot) {
232
+ const sources = new Map();
233
+ for (const dir of [projectRoot, this.#hostPaths.home]) {
234
+ if (dir === null)
235
+ continue;
236
+ let lock;
237
+ try {
238
+ lock = JSON.parse(await readFile(join(dir, "skills-lock.json"), "utf8"));
239
+ }
240
+ catch {
241
+ continue;
242
+ }
243
+ if (!isRecord(lock) || !isRecord(lock.skills))
244
+ continue;
245
+ for (const [name, entry] of Object.entries(lock.skills)) {
246
+ if (isRecord(entry) && typeof entry.source === "string" && !sources.has(name))
247
+ sources.set(name, entry.source);
248
+ }
249
+ }
250
+ return sources;
251
+ }
252
+ async #signature(projectRoot) {
253
+ const hash = createHash("sha256");
254
+ for (const installed of (await this.#scan(projectRoot)).values()) {
255
+ const content = await readFile(installed.file, "utf8").catch((cause) => `!${messageOf(cause)}`);
256
+ hash.update(`${installed.name}${installed.scope}${content}`);
257
+ }
258
+ return hash.digest("hex");
259
+ }
260
+ // {§skills-hotload} — filesystem installers operate out of band; before a
261
+ // turn assembles its packet the family republishes when the roots changed.
262
+ async refreshIfChanged(identity) {
263
+ const published = this.#signatures.get(identity.workerId);
264
+ if (published === undefined)
265
+ return;
266
+ const current = await this.#signature(await this.#projectRoot(identity.workspaceId));
267
+ if (current === published)
268
+ return;
269
+ if (this.#handle === null)
270
+ throw new Error("Skills Functionality is not attached to its coordinator handle.");
271
+ await this.#handle.refresh(identity, { gate: "none" });
272
+ }
273
+ async available(identity) {
274
+ const projectRoot = await this.#projectRoot(identity.workspaceId);
275
+ const sources = await this.#lockSources(projectRoot);
276
+ return [...(await this.#scan(projectRoot)).values()].map((installed) => {
277
+ const source = sources.get(installed.name);
278
+ const definition = { name: installed.name, scope: installed.scope, ...(source === undefined ? {} : { source }) };
279
+ return { alias: installed.name, definition, enabled: true };
280
+ });
281
+ }
282
+ async discover(query, identity) {
283
+ if (query.configuration !== undefined) {
284
+ throw actionError("configuration-unsupported", 400, "Agent Skills discovery takes a registry query or an explicit source; client configuration contributes nothing.", { retryable: false });
285
+ }
286
+ if (query.source !== undefined) {
287
+ const source = query.source;
288
+ const cwd = this.#cwdFor("project", await this.#projectRoot(identity.workspaceId));
289
+ let output;
290
+ try {
291
+ output = await this.#toolchain.run(["add", source, "--list"], cwd, this.#hostPaths.home);
292
+ }
293
+ catch (cause) {
294
+ throw actionError("discover-failed", 502, `Agent Skills source '${source}' could not be listed: ${messageOf(cause)}`, { source, retryable: true }, cause);
295
+ }
296
+ return parseListing(output).map((skill) => ({
297
+ alias: skill.name,
298
+ ...(skill.description.length === 0 ? {} : { summary: skill.description }),
299
+ definition: { name: skill.name, scope: "project", source },
300
+ provenance: { kind: "source", source },
301
+ }));
302
+ }
303
+ if (query.query === undefined)
304
+ return [];
305
+ const registry = await this.#toolchain.search(query.query);
306
+ return registry.flatMap((skill) => {
307
+ if (!SKILL_NAME.test(skill.name))
308
+ return [];
309
+ return [{
310
+ alias: skill.name,
311
+ ...(skill.installs === null ? {} : { summary: `${skill.installs} installs` }),
312
+ definition: { name: skill.name, scope: "project", source: skill.source },
313
+ provenance: { kind: "registry", source: skill.source, reference: `${DEFAULT_REGISTRY}/${skill.id}` },
314
+ }];
315
+ });
316
+ }
317
+ async admit(input, identity) {
318
+ const params = isRecord(input) ? input : {};
319
+ let definition;
320
+ try {
321
+ definition = structuredClone(Validator.assertSkillDefinition(structuredClone(params.definition)));
322
+ }
323
+ catch (cause) {
324
+ throw actionError("definition-invalid", 400, "The Agent Skill definition is invalid.", { retryable: false }, cause);
325
+ }
326
+ const alias = typeof params.alias === "string" ? params.alias : definition.name;
327
+ if (alias !== definition.name) {
328
+ throw actionError("alias-mismatch", 400, `Alias '${alias}' must equal the skill name '${definition.name}'.`, { alias, name: definition.name, retryable: false });
329
+ }
330
+ if (definition.source === undefined) {
331
+ throw actionError("source-required", 400, `Adding '${alias}' requires the standard installer source that provides it.`, { alias, retryable: false });
332
+ }
333
+ if (definition.scope === "project" && await this.#projectRoot(identity.workspaceId) === null) {
334
+ throw actionError("project-root-required", 400, `'${alias}' targets the project scope, but this workspace has no project root.`, { alias, recovery: "Add it with scope \"global\" or open a workspace rooted in a project.", retryable: false });
335
+ }
336
+ return { alias, definition };
337
+ }
338
+ async #install(definition, root, cwd) {
339
+ const args = ["add", definition.source, "--agent", "universal", "--skill", definition.name, "--yes", ...(definition.scope === "global" ? ["--global"] : [])];
340
+ let output;
341
+ try {
342
+ output = await this.#toolchain.run(args, cwd, this.#hostPaths.home);
343
+ }
344
+ catch (cause) {
345
+ throw actionError("install-failed", 502, `Agent Skill '${definition.name}' could not be installed from '${definition.source}': ${messageOf(cause)}`, { name: definition.name, source: definition.source, scope: definition.scope, retryable: true }, cause);
346
+ }
347
+ const file = join(root, definition.name, "SKILL.md");
348
+ if (!(await isFile(file))) {
349
+ throw actionError("install-failed", 502, `The installer reported '${definition.name}' from '${definition.source}' but ${file} does not exist.`, { name: definition.name, source: definition.source, scope: definition.scope, output: stripVTControlCharacters(output).trim().slice(-2000), retryable: true });
350
+ }
351
+ return { name: definition.name, scope: definition.scope, dir: join(root, definition.name), file };
352
+ }
353
+ // {§skills-remove} — the coordinator forgets the Worker's own definition;
354
+ // the adapter uninstalls what that definition installed at its scope.
355
+ async forget(source, identity) {
356
+ const definition = source.definition;
357
+ const projectRoot = await this.#projectRoot(identity.workspaceId);
358
+ const root = this.#rootFor(definition.scope, projectRoot);
359
+ if (root === null)
360
+ return;
361
+ const dir = join(root, definition.name);
362
+ if (!(await exists(dir)))
363
+ return;
364
+ try {
365
+ await this.#toolchain.run(["remove", definition.name, "--yes", ...(definition.scope === "global" ? ["--global"] : [])], this.#cwdFor(definition.scope, projectRoot), this.#hostPaths.home);
366
+ }
367
+ catch (cause) {
368
+ throw actionError("uninstall-failed", 502, `Agent Skill '${definition.name}' could not be removed from its ${definition.scope} root: ${messageOf(cause)}`, { name: definition.name, scope: definition.scope, retryable: true }, cause);
369
+ }
370
+ if (await exists(dir))
371
+ throw actionError("uninstall-failed", 502, `The installer reported removal of '${definition.name}' but ${dir} still exists.`, { name: definition.name, scope: definition.scope, retryable: true });
372
+ }
373
+ async #locate(alias, definition, installed, projectRoot) {
374
+ const shadowing = installed.get(alias);
375
+ if (shadowing === undefined || shadowing.scope === definition.scope)
376
+ return shadowing;
377
+ // The Worker's own definition names a root below the one currently
378
+ // shadowing that name; the definition's scope is truth.
379
+ const root = this.#rootFor(definition.scope, projectRoot);
380
+ if (root === null)
381
+ return undefined;
382
+ const file = join(root, alias, "SKILL.md");
383
+ return (await isFile(file)) ? { name: alias, scope: definition.scope, dir: join(root, alias), file } : undefined;
384
+ }
385
+ async prepare(preparation) {
386
+ const projectRoot = await this.#projectRoot(preparation.workspaceId);
387
+ const installed = await this.#scan(projectRoot);
388
+ const previous = preparation.previous;
389
+ const carried = new Set(previous?.unavailable ?? []);
390
+ const outcomes = new Map();
391
+ const docs = [];
392
+ for (const [alias, raw] of preparation.enabled) {
393
+ const definition = raw;
394
+ try {
395
+ let located = await this.#locate(alias, definition, installed, projectRoot);
396
+ if (located === undefined) {
397
+ const root = this.#rootFor(definition.scope, projectRoot);
398
+ if (root === null)
399
+ throw actionError("project-root-required", 409, `'${alias}' targets the project scope, but this workspace has no project root.`, { name: alias, retryable: false });
400
+ if (definition.source === undefined)
401
+ throw actionError("skill-missing", 404, `Agent Skill '${alias}' is not installed under its ${definition.scope} root.`, { name: alias, scope: definition.scope, root, retryable: false });
402
+ located = await this.#install(definition, root, this.#cwdFor(definition.scope, projectRoot));
403
+ }
404
+ let doc;
405
+ try {
406
+ doc = parseSkill(located.file, located.name, await readFile(located.file, "utf8"));
407
+ }
408
+ catch (cause) {
409
+ throw actionError("skill-invalid", 422, `Agent Skill '${alias}' is not a valid standard skill: ${messageOf(cause)}`, { name: alias, scope: located.scope, path: located.file, retryable: false }, cause);
410
+ }
411
+ docs.push(doc);
412
+ outcomes.set(alias, { state: "active", detail: { scope: located.scope, path: located.dir, description: doc.description } });
413
+ }
414
+ catch (cause) {
415
+ if (!(cause instanceof SkillsActionError))
416
+ throw cause;
417
+ const fresh = !carried.has(alias) || preparation.force === alias;
418
+ if (preparation.failure === "reject" && fresh)
419
+ throw cause;
420
+ if (fresh)
421
+ console.error(`Agent Skill '${alias}' unavailable: ${cause.problem.detail}`);
422
+ outcomes.set(alias, { state: "unavailable", problem: structuredClone(cause.problem) });
423
+ }
424
+ }
425
+ docs.sort((left, right) => left.name.localeCompare(right.name));
426
+ const documents = [
427
+ { pathname: "skills/index.md", content: renderIndex(docs) },
428
+ ...docs.map((doc) => ({ pathname: `skills/${encodeURIComponent(doc.name)}.md`, content: renderSkill(doc) })),
429
+ ];
430
+ const signature = await this.#signature(projectRoot);
431
+ const snapshot = {
432
+ signature,
433
+ unavailable: [...outcomes].filter(([, outcome]) => outcome.state === "unavailable").map(([alias]) => alias),
434
+ };
435
+ const { workerId } = preparation;
436
+ return {
437
+ runtimes: [],
438
+ documents,
439
+ outcomes,
440
+ snapshot,
441
+ commit: async () => { this.#signatures.set(workerId, signature); },
442
+ abort: async () => { },
443
+ };
444
+ }
445
+ async teardown(_snapshot, identity) {
446
+ this.#signatures.delete(identity.workerId);
447
+ }
448
+ }
449
+ //# sourceMappingURL=SkillsFunctionality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillsFunctionality.js","sourceRoot":"","sources":["../../src/server/SkillsFunctionality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type WorkerCapabilityRelease = () => void;
2
+ export interface WorkerCapabilityPolicy {
3
+ readonly warmMs: number;
4
+ readonly warmMax: number;
5
+ }
6
+ export interface WorkerCapabilityCallbacks {
7
+ readonly activate: (workerId: number) => Promise<void>;
8
+ readonly deactivate: (workerId: number) => Promise<boolean>;
9
+ readonly report: (workerId: number, error: unknown) => void;
10
+ }
11
+ export declare const workerCapabilityPolicy: (env?: NodeJS.ProcessEnv) => WorkerCapabilityPolicy;
12
+ export default class WorkerCapabilities {
13
+ #private;
14
+ constructor(policy: WorkerCapabilityPolicy, callbacks: WorkerCapabilityCallbacks);
15
+ acquire(workerId: number): Promise<WorkerCapabilityRelease>;
16
+ retain(workerId: number): WorkerCapabilityRelease;
17
+ activeWorkerIds(): number[];
18
+ isActive(workerId: number): boolean;
19
+ beginStop(): void;
20
+ }
21
+ //# sourceMappingURL=WorkerCapabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerCapabilities.d.ts","sourceRoot":"","sources":["../../src/server/WorkerCapabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/D;AAwBD,eAAO,MAAM,sBAAsB,SAC1B,MAAM,CAAC,UAAU,KACvB,sBAGD,CAAC;AAKH,MAAM,CAAC,OAAO,OAAO,kBAAkB;;IASnC,YACI,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,yBAAyB,EAMvC;IAEK,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA2BhE;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CAUhD;IAED,eAAe,IAAI,MAAM,EAAE,CAK1B;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElC;IAED,SAAS,IAAI,IAAI,CAIhB;CAgIJ"}