@kaleidorg/mind 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/engine.d.ts +9 -0
  2. package/dist/engine.d.ts.map +1 -1
  3. package/dist/engine.js +18 -2
  4. package/dist/engine.js.map +1 -1
  5. package/dist/index.d.ts +7 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/skills/bundle.d.ts +30 -0
  10. package/dist/skills/bundle.d.ts.map +1 -0
  11. package/dist/skills/bundle.js +24 -0
  12. package/dist/skills/bundle.js.map +1 -0
  13. package/dist/skills/loader.d.ts +33 -0
  14. package/dist/skills/loader.d.ts.map +1 -0
  15. package/dist/skills/loader.js +59 -0
  16. package/dist/skills/loader.js.map +1 -0
  17. package/dist/skills/reference-source.d.ts +18 -0
  18. package/dist/skills/reference-source.d.ts.map +1 -0
  19. package/dist/skills/reference-source.js +53 -0
  20. package/dist/skills/reference-source.js.map +1 -0
  21. package/dist/skills/registry.d.ts +41 -0
  22. package/dist/skills/registry.d.ts.map +1 -0
  23. package/dist/skills/registry.js +167 -0
  24. package/dist/skills/registry.js.map +1 -0
  25. package/dist/skills/types.d.ts +53 -0
  26. package/dist/skills/types.d.ts.map +1 -0
  27. package/dist/skills/types.js +18 -0
  28. package/dist/skills/types.js.map +1 -0
  29. package/dist/tools/l402.d.ts +47 -0
  30. package/dist/tools/l402.d.ts.map +1 -0
  31. package/dist/tools/l402.js +84 -0
  32. package/dist/tools/l402.js.map +1 -0
  33. package/package.json +9 -2
  34. package/scripts/bundle-skills.mjs +84 -0
  35. package/skills/README.md +74 -0
  36. package/skills/bitrefill/SKILL.md +66 -0
  37. package/skills/bitrefill/references/api.md +99 -0
  38. package/skills/bitrefill/references/browse.md +71 -0
  39. package/skills/bitrefill/references/capability-matrix.md +115 -0
  40. package/skills/bitrefill/references/cli-headless-auth.md +133 -0
  41. package/skills/bitrefill/references/cli.md +237 -0
  42. package/skills/bitrefill/references/host-openclaw.md +167 -0
  43. package/skills/bitrefill/references/mcp.md +150 -0
  44. package/skills/bitrefill/references/safeguards.md +138 -0
  45. package/skills/bitrefill/references/troubleshooting.md +182 -0
  46. package/skills/kaleido-trading/SKILL.md +31 -0
  47. package/skills/kaleido-wallet/SKILL.md +28 -0
  48. package/src/engine.test.ts +204 -0
  49. package/src/engine.ts +27 -2
  50. package/src/index.ts +17 -0
  51. package/src/skills/bundle.ts +42 -0
  52. package/src/skills/loader.ts +63 -0
  53. package/src/skills/reference-source.ts +60 -0
  54. package/src/skills/registry.ts +183 -0
  55. package/src/skills/skills.test.ts +191 -0
  56. package/src/skills/types.ts +55 -0
  57. package/src/tools/l402.test.ts +113 -0
  58. package/src/tools/l402.ts +122 -0
  59. package/dist/providers/qvac.d.ts +0 -89
  60. package/dist/providers/qvac.d.ts.map +0 -1
  61. package/dist/providers/qvac.js +0 -150
  62. package/dist/providers/qvac.js.map +0 -1
package/dist/engine.d.ts CHANGED
@@ -40,6 +40,11 @@ export interface AgenticOptions {
40
40
  name: string;
41
41
  arguments: Record<string, unknown>;
42
42
  }) => Promise<ConfirmDecision>;
43
+ /**
44
+ * Restrict the tools exposed to the model this run (progressive disclosure).
45
+ * Typically the active skill's tool list — see SkillRegistry.compose().
46
+ */
47
+ allowedTools?: string[];
43
48
  signal?: AbortSignal;
44
49
  }
45
50
  export interface AgenticResult {
@@ -47,6 +52,10 @@ export interface AgenticResult {
47
52
  turns: number;
48
53
  toolCalls: ToolResult[];
49
54
  requestId?: string;
55
+ /** Full conversation incl. assistant/tool frames — for logging / datasets. */
56
+ messages: Message[];
57
+ /** Wall-clock duration of the whole agentic run, ms. */
58
+ latencyMs: number;
50
59
  }
51
60
  export declare class Engine {
52
61
  private readonly provider;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChG,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACrG,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,IAAI,EAAE,aAAa;IAOzB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmElF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,WAAW;CAO1B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChG,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACrG;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,IAAI,EAAE,aAAa;IAOzB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmFlF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,WAAW;CAO1B"}
package/dist/engine.js CHANGED
@@ -28,8 +28,13 @@ export class Engine {
28
28
  const maxTurns = opts.maxTurns ?? this.defaultMaxTurns;
29
29
  const hasSystem = messages.some((m) => m.role === 'system');
30
30
  const system = hasSystem ? undefined : this.defaultSystem;
31
+ const startedAt = Date.now();
31
32
  const history = [...messages];
32
- const allTools = await this.registry.listTools();
33
+ const registryTools = await this.registry.listTools();
34
+ // Progressive disclosure: expose only the active skill's tools when set.
35
+ const allTools = opts.allowedTools
36
+ ? registryTools.filter((t) => opts.allowedTools.includes(t.name))
37
+ : registryTools;
33
38
  const executed = [];
34
39
  let lastRequestId;
35
40
  let finalText = '';
@@ -82,7 +87,18 @@ export class Engine {
82
87
  finalText = 'I had to stop after several steps — please try a more specific request.';
83
88
  }
84
89
  }
85
- return { text: finalText, turns, toolCalls: executed, requestId: lastRequestId };
90
+ // Append the final answer so the returned conversation is complete (the
91
+ // loop breaks before pushing the no-tool-call turn).
92
+ if (finalText)
93
+ history.push({ role: 'assistant', content: finalText });
94
+ return {
95
+ text: finalText,
96
+ turns,
97
+ toolCalls: executed,
98
+ requestId: lastRequestId,
99
+ messages: history,
100
+ latencyMs: Date.now() - startedAt,
101
+ };
86
102
  }
87
103
  async cancel(requestId) {
88
104
  await this.provider.cancel?.(requestId);
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,8 +13,15 @@ export type { ToolSource } from './tools/source.js';
13
13
  export { InProcessToolSource } from './tools/in-process.js';
14
14
  export type { InProcessTool } from './tools/in-process.js';
15
15
  export { ToolRegistry } from './tools/registry.js';
16
+ export { createL402ToolSource, parseL402Challenge, bolt11AmountSats, } from './tools/l402.js';
17
+ export type { L402Options, L402PayResult } from './tools/l402.js';
16
18
  export { Engine } from './engine.js';
17
19
  export type { EngineOptions, AgenticOptions, AgenticResult } from './engine.js';
20
+ export { SkillRegistry, parseSkill, keywordSelector, READ_REFERENCE_TOOL, } from './skills/registry.js';
21
+ export { createSkillReferenceToolSource } from './skills/reference-source.js';
22
+ export { skillsFromBundle } from './skills/bundle.js';
23
+ export type { SkillBundle, BundledSkill } from './skills/bundle.js';
24
+ export type { Skill, SkillReference, SkillSelector } from './skills/types.js';
18
25
  export { TurnLogger, defaultMask } from './logger.js';
19
26
  export type { TurnLog, Device, LoggerIO, LoggerOptions } from './logger.js';
20
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/E,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/E,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -9,6 +9,10 @@
9
9
  */
10
10
  export { InProcessToolSource } from './tools/in-process.js';
11
11
  export { ToolRegistry } from './tools/registry.js';
12
+ export { createL402ToolSource, parseL402Challenge, bolt11AmountSats, } from './tools/l402.js';
12
13
  export { Engine } from './engine.js';
14
+ export { SkillRegistry, parseSkill, keywordSelector, READ_REFERENCE_TOOL, } from './skills/registry.js';
15
+ export { createSkillReferenceToolSource } from './skills/reference-source.js';
16
+ export { skillsFromBundle } from './skills/bundle.js';
13
17
  export { TurnLogger, defaultMask } from './logger.js';
14
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Skill bundle — the RN-safe counterpart to the Node fs loader.
3
+ *
4
+ * React Native has no filesystem, so a skill folder can't be read at runtime.
5
+ * Instead a build step serialises the skills into a `SkillBundle` (plain JSON:
6
+ * each skill's raw SKILL.md text + its reference files), and the app rehydrates
7
+ * them here with `skillsFromBundle()`. Same skills, same SKILL.md authoring —
8
+ * just delivered as data instead of files.
9
+ *
10
+ * Pure, dependency-free, no fs/url imports — safe to import from the package's
11
+ * main entry on any host.
12
+ */
13
+ import type { Skill, SkillReference } from './types.js';
14
+ /** One serialised skill: the SKILL.md text + its reference files. */
15
+ export interface BundledSkill {
16
+ /** Folder name (informational; the real name comes from the frontmatter). */
17
+ dir?: string;
18
+ /** Raw SKILL.md contents. */
19
+ markdown: string;
20
+ /** references/*.md files. */
21
+ references?: SkillReference[];
22
+ }
23
+ /** A bundle of skills produced by the bundler script. */
24
+ export interface SkillBundle {
25
+ version: 1;
26
+ skills: BundledSkill[];
27
+ }
28
+ /** Rehydrate Skills from a bundle (RN-safe — no filesystem). */
29
+ export declare function skillsFromBundle(bundle: SkillBundle): Skill[];
30
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/skills/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGxD,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,CAQ7D"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Skill bundle — the RN-safe counterpart to the Node fs loader.
3
+ *
4
+ * React Native has no filesystem, so a skill folder can't be read at runtime.
5
+ * Instead a build step serialises the skills into a `SkillBundle` (plain JSON:
6
+ * each skill's raw SKILL.md text + its reference files), and the app rehydrates
7
+ * them here with `skillsFromBundle()`. Same skills, same SKILL.md authoring —
8
+ * just delivered as data instead of files.
9
+ *
10
+ * Pure, dependency-free, no fs/url imports — safe to import from the package's
11
+ * main entry on any host.
12
+ */
13
+ import { parseSkill } from './registry.js';
14
+ /** Rehydrate Skills from a bundle (RN-safe — no filesystem). */
15
+ export function skillsFromBundle(bundle) {
16
+ if (!bundle || bundle.version !== 1 || !Array.isArray(bundle.skills)) {
17
+ throw new Error('skillsFromBundle: not a valid v1 SkillBundle');
18
+ }
19
+ return bundle.skills.map((b) => ({
20
+ ...parseSkill(b.markdown, b.references),
21
+ dir: b.dir,
22
+ }));
23
+ }
24
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/skills/bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAkB3C,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;QACvC,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Skill loader — reads Claude-style Agent Skill folders from disk. NODE ONLY.
3
+ *
4
+ * Import from `@kaleidorg/mind/skills` on Node hosts (desktop sidecar,
5
+ * kaleidoagent). React Native has no filesystem — there, build skills with
6
+ * `SkillRegistry.addMarkdown(text, references)` from bundled strings instead.
7
+ *
8
+ * Layout (Anthropic Agent Skills spec, e.g. bitrefill/agents):
9
+ *
10
+ * skills/
11
+ * bitrefill/
12
+ * SKILL.md
13
+ * references/
14
+ * mcp.md
15
+ * cli.md
16
+ * …
17
+ *
18
+ * `loadSkillsDir(root)` returns one Skill per SKILL.md found, with every
19
+ * reference markdown read into `skill.references` for progressive disclosure.
20
+ */
21
+ import type { Skill } from './types.js';
22
+ /**
23
+ * Absolute path to the skills shipped inside this package
24
+ * (`@kaleidorg/mind/skills`). Resolves relative to the compiled loader, so it
25
+ * works from any host that installs the package. Override with an explicit dir
26
+ * when you keep skills elsewhere.
27
+ */
28
+ export declare function packagedSkillsDir(): string;
29
+ /** Load one skill folder containing a SKILL.md (+ optional references/). */
30
+ export declare function loadSkillFromDir(dir: string): Skill;
31
+ /** Load every skill folder under `root` (each a dir with a SKILL.md). */
32
+ export declare function loadSkillsDir(root: string): Skill[];
33
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AAGxD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAcnD;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAMnD"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Skill loader — reads Claude-style Agent Skill folders from disk. NODE ONLY.
3
+ *
4
+ * Import from `@kaleidorg/mind/skills` on Node hosts (desktop sidecar,
5
+ * kaleidoagent). React Native has no filesystem — there, build skills with
6
+ * `SkillRegistry.addMarkdown(text, references)` from bundled strings instead.
7
+ *
8
+ * Layout (Anthropic Agent Skills spec, e.g. bitrefill/agents):
9
+ *
10
+ * skills/
11
+ * bitrefill/
12
+ * SKILL.md
13
+ * references/
14
+ * mcp.md
15
+ * cli.md
16
+ * …
17
+ *
18
+ * `loadSkillsDir(root)` returns one Skill per SKILL.md found, with every
19
+ * reference markdown read into `skill.references` for progressive disclosure.
20
+ */
21
+ import { readdirSync, readFileSync, existsSync } from 'node:fs';
22
+ import { join } from 'node:path';
23
+ import { fileURLToPath } from 'node:url';
24
+ import { parseSkill } from './registry.js';
25
+ /**
26
+ * Absolute path to the skills shipped inside this package
27
+ * (`@kaleidorg/mind/skills`). Resolves relative to the compiled loader, so it
28
+ * works from any host that installs the package. Override with an explicit dir
29
+ * when you keep skills elsewhere.
30
+ */
31
+ export function packagedSkillsDir() {
32
+ // dist/skills/loader.js → ../../skills == <package root>/skills
33
+ return fileURLToPath(new URL('../../skills/', import.meta.url));
34
+ }
35
+ /** Load one skill folder containing a SKILL.md (+ optional references/). */
36
+ export function loadSkillFromDir(dir) {
37
+ const skillFile = join(dir, 'SKILL.md');
38
+ if (!existsSync(skillFile))
39
+ throw new Error(`No SKILL.md in ${dir}`);
40
+ const markdown = readFileSync(skillFile, 'utf8');
41
+ const refDir = join(dir, 'references');
42
+ const references = existsSync(refDir)
43
+ ? readdirSync(refDir)
44
+ .filter((f) => f.endsWith('.md'))
45
+ .sort()
46
+ .map((name) => ({ name, content: readFileSync(join(refDir, name), 'utf8') }))
47
+ : [];
48
+ return { ...parseSkill(markdown, references), dir };
49
+ }
50
+ /** Load every skill folder under `root` (each a dir with a SKILL.md). */
51
+ export function loadSkillsDir(root) {
52
+ if (!existsSync(root))
53
+ return [];
54
+ return readdirSync(root, { withFileTypes: true })
55
+ .filter((e) => e.isDirectory() && existsSync(join(root, e.name, 'SKILL.md')))
56
+ .sort((a, b) => a.name.localeCompare(b.name))
57
+ .map((e) => loadSkillFromDir(join(root, e.name)));
58
+ }
59
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,gEAAgE;IAChE,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAqB,UAAU,CAAC,MAAM,CAAC;QACrD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAChC,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AACtD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;SAC5E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Skill reference tool source — the read-side of Agent-Skills progressive
3
+ * disclosure.
4
+ *
5
+ * Exposes one tool, `read_skill_reference({ file, skill? })`, that returns the
6
+ * contents of a `references/*.md` file bundled with a skill. The brain enters a
7
+ * skill (its SKILL.md playbook lists the reference files), then pulls in only
8
+ * the reference it needs for the current step — instead of every doc being in
9
+ * context at once.
10
+ *
11
+ * Pure in-process: it reads from the SkillRegistry's already-loaded reference
12
+ * strings, so it works on every host (React Native included) once the skills
13
+ * are loaded. No filesystem, no network.
14
+ */
15
+ import type { ToolSource } from '../tools/source.js';
16
+ import { SkillRegistry } from './registry.js';
17
+ export declare function createSkillReferenceToolSource(registry: SkillRegistry): ToolSource;
18
+ //# sourceMappingURL=reference-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-source.d.ts","sourceRoot":"","sources":["../../src/skills/reference-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAuB,MAAM,eAAe,CAAC;AAEnE,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,CAwClF"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Skill reference tool source — the read-side of Agent-Skills progressive
3
+ * disclosure.
4
+ *
5
+ * Exposes one tool, `read_skill_reference({ file, skill? })`, that returns the
6
+ * contents of a `references/*.md` file bundled with a skill. The brain enters a
7
+ * skill (its SKILL.md playbook lists the reference files), then pulls in only
8
+ * the reference it needs for the current step — instead of every doc being in
9
+ * context at once.
10
+ *
11
+ * Pure in-process: it reads from the SkillRegistry's already-loaded reference
12
+ * strings, so it works on every host (React Native included) once the skills
13
+ * are loaded. No filesystem, no network.
14
+ */
15
+ import { READ_REFERENCE_TOOL } from './registry.js';
16
+ export function createSkillReferenceToolSource(registry) {
17
+ const tool = {
18
+ name: READ_REFERENCE_TOOL,
19
+ description: 'Read a reference document bundled with the active skill (its SKILL.md ' +
20
+ 'lists the available files). Use this to pull in the detailed instructions ' +
21
+ 'for a step — e.g. the MCP, CLI, or API guide — before acting.',
22
+ parameters: {
23
+ type: 'object',
24
+ properties: {
25
+ file: { type: 'string', description: 'Reference filename, e.g. "mcp.md"' },
26
+ skill: { type: 'string', description: 'Optional skill name to scope the lookup' },
27
+ },
28
+ required: ['file'],
29
+ },
30
+ };
31
+ async function execute(_name, args) {
32
+ const file = String(args.file ?? '').trim();
33
+ if (!file)
34
+ throw new Error('read_skill_reference: file is required');
35
+ const skill = args.skill ? String(args.skill) : undefined;
36
+ const ref = registry.reference(file, skill);
37
+ if (!ref) {
38
+ const available = registry
39
+ .references()
40
+ .map((r) => `${r.skill}/${r.name}`)
41
+ .join(', ');
42
+ throw new Error(`read_skill_reference: "${file}" not found. Available: ${available || '(none)'}`);
43
+ }
44
+ return ref.content;
45
+ }
46
+ return {
47
+ id: 'skill-references',
48
+ listTools: () => [tool],
49
+ has: (name) => name === READ_REFERENCE_TOOL,
50
+ execute,
51
+ };
52
+ }
53
+ //# sourceMappingURL=reference-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-source.js","sourceRoot":"","sources":["../../src/skills/reference-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAiB,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,UAAU,8BAA8B,CAAC,QAAuB;IACpE,MAAM,IAAI,GAAY;QACpB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,wEAAwE;YACxE,4EAA4E;YAC5E,+DAA+D;QACjE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;aAClF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF,CAAC;IAEF,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,IAA6B;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,QAAQ;iBACvB,UAAU,EAAE;iBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,2BAA2B,SAAS,IAAI,QAAQ,EAAE,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,OAAO;QACL,EAAE,EAAE,kBAAkB;QACtB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC;QACvB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,mBAAmB;QAC3C,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SkillRegistry — holds skills, parses SKILL.md files, selects per query, and
3
+ * composes the system prompt for the selected skill.
4
+ *
5
+ * Selection is pluggable. The default is a fast keyword heuristic (no model
6
+ * call); a host can inject a model-driven or embedding selector instead.
7
+ */
8
+ import type { Skill, SkillReference, SkillSelector } from './types.js';
9
+ /** Tool name the reference source exposes for progressive disclosure. */
10
+ export declare const READ_REFERENCE_TOOL = "read_skill_reference";
11
+ export declare function parseSkill(markdown: string, references?: SkillReference[]): Skill;
12
+ /** Default selector: score by meaningful keyword overlap; triggers weigh most. */
13
+ export declare const keywordSelector: SkillSelector;
14
+ export declare class SkillRegistry {
15
+ private readonly skills;
16
+ private readonly selector;
17
+ constructor(skills?: Skill[], selector?: SkillSelector);
18
+ add(skill: Skill): this;
19
+ /** Add a skill from raw SKILL.md text (+ optional reference files). */
20
+ addMarkdown(markdown: string, references?: SkillReference[]): this;
21
+ /** All reference files across skills, tagged with their owning skill. */
22
+ references(): Array<SkillReference & {
23
+ skill: string;
24
+ }>;
25
+ /** Look up a reference file by name (optionally scoped to one skill). */
26
+ reference(file: string, skill?: string): SkillReference | undefined;
27
+ list(): Skill[];
28
+ get(name: string): Skill | undefined;
29
+ /** Pick the most relevant skill for a query (null = none). */
30
+ select(query: string): Skill | null;
31
+ /**
32
+ * Compose the effective system prompt for a skill: the base prompt + the
33
+ * skill's playbook. The returned `allowedTools` should be passed to
34
+ * `engine.runAgentic(..., { allowedTools })` for progressive tool disclosure.
35
+ */
36
+ compose(base: string, skill: Skill | null): {
37
+ system: string;
38
+ allowedTools?: string[];
39
+ };
40
+ }
41
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvE,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAuB1D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,GAAG,KAAK,CAkCjF;AASD,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,aAuB7B,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,MAAM,GAAE,KAAK,EAAO,EAAE,QAAQ,GAAE,aAA+B;IAK3E,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKvB,uEAAuE;IACvE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI;IAIlE,yEAAyE;IACzE,UAAU,IAAI,KAAK,CAAC,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAMvD,yEAAyE;IACzE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAUnE,IAAI,IAAI,KAAK,EAAE;IAIf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC,8DAA8D;IAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAInC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;CAwBxF"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * SkillRegistry — holds skills, parses SKILL.md files, selects per query, and
3
+ * composes the system prompt for the selected skill.
4
+ *
5
+ * Selection is pluggable. The default is a fast keyword heuristic (no model
6
+ * call); a host can inject a model-driven or embedding selector instead.
7
+ */
8
+ /** Tool name the reference source exposes for progressive disclosure. */
9
+ export const READ_REFERENCE_TOOL = 'read_skill_reference';
10
+ /**
11
+ * Parse a SKILL.md file: a YAML-ish frontmatter block (name/description/tools/
12
+ * triggers) followed by the instruction body.
13
+ *
14
+ * ---
15
+ * name: portfolio-manager
16
+ * description: Rebalance BTC/USDT/XAUT to target allocations.
17
+ * tools: get_balance, kaleidoswap_get_quote, kaleidoswap_place_order
18
+ * triggers: rebalance, allocation, portfolio
19
+ * ---
20
+ * <instructions…>
21
+ */
22
+ /** Strip wrapping single/double quotes from a frontmatter value. */
23
+ function unquote(v) {
24
+ const t = v.trim();
25
+ if ((t.startsWith('"') && t.endsWith('"')) || (t.startsWith("'") && t.endsWith("'"))) {
26
+ return t.slice(1, -1);
27
+ }
28
+ return t;
29
+ }
30
+ export function parseSkill(markdown, references) {
31
+ const fm = markdown.match(/^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/);
32
+ const meta = {};
33
+ let body = markdown;
34
+ if (fm) {
35
+ body = fm[2] ?? '';
36
+ for (const line of (fm[1] ?? '').split('\n')) {
37
+ // Flat `key: value` lines (incl. indented keys under a nested `metadata:`
38
+ // block, which fold into the same map — we don't need YAML nesting here).
39
+ const m = line.match(/^\s*([A-Za-z_][\w-]*)\s*:\s*(.+?)\s*$/);
40
+ if (m && m[1])
41
+ meta[m[1].toLowerCase()] = unquote(m[2] ?? '');
42
+ }
43
+ }
44
+ const list = (v) => v
45
+ ? v.split(',').map((s) => s.trim()).filter(Boolean)
46
+ : undefined;
47
+ if (!meta.name)
48
+ throw new Error('SKILL.md missing `name` in frontmatter');
49
+ // Everything that isn't a first-class field becomes metadata.
50
+ const KNOWN = new Set(['name', 'description', 'tools', 'triggers']);
51
+ const metadata = {};
52
+ for (const [k, v] of Object.entries(meta))
53
+ if (!KNOWN.has(k))
54
+ metadata[k] = v;
55
+ return {
56
+ name: meta.name,
57
+ description: meta.description ?? '',
58
+ instructions: body.trim(),
59
+ tools: list(meta.tools),
60
+ triggers: list(meta.triggers),
61
+ metadata: Object.keys(metadata).length ? metadata : undefined,
62
+ references: references && references.length ? references : undefined,
63
+ };
64
+ }
65
+ // Common words that shouldn't count toward a skill match.
66
+ const STOPWORDS = new Set([
67
+ 'the', 'and', 'for', 'you', 'your', 'what', 'this', 'that', 'with', 'from',
68
+ 'have', 'has', 'are', 'was', 'can', 'will', 'please', 'today', 'now', 'get',
69
+ 'show', 'tell', 'how', 'much', 'many', 'about', 'into', 'over',
70
+ ]);
71
+ /** Default selector: score by meaningful keyword overlap; triggers weigh most. */
72
+ export const keywordSelector = {
73
+ select(query, skills) {
74
+ const q = query.toLowerCase();
75
+ const words = new Set(q.split(/\W+/).filter((w) => w.length > 2 && !STOPWORDS.has(w)));
76
+ let best = null;
77
+ let bestScore = 0;
78
+ for (const skill of skills) {
79
+ const haystack = `${skill.description} ${(skill.triggers ?? []).join(' ')}`.toLowerCase();
80
+ const hayWords = haystack.split(/\W+/).filter((w) => w.length > 2 && !STOPWORDS.has(w));
81
+ let score = 0;
82
+ for (const w of hayWords)
83
+ if (words.has(w))
84
+ score += 1;
85
+ // Strong boost for an explicit trigger appearing in the query.
86
+ for (const t of skill.triggers ?? [])
87
+ if (q.includes(t.toLowerCase()))
88
+ score += 3;
89
+ if (score > bestScore) {
90
+ bestScore = score;
91
+ best = skill;
92
+ }
93
+ }
94
+ // Require a real signal, not a single incidental word overlap.
95
+ return bestScore >= 2 ? best : null;
96
+ },
97
+ };
98
+ export class SkillRegistry {
99
+ skills = [];
100
+ selector;
101
+ constructor(skills = [], selector = keywordSelector) {
102
+ this.skills = [...skills];
103
+ this.selector = selector;
104
+ }
105
+ add(skill) {
106
+ this.skills.push(skill);
107
+ return this;
108
+ }
109
+ /** Add a skill from raw SKILL.md text (+ optional reference files). */
110
+ addMarkdown(markdown, references) {
111
+ return this.add(parseSkill(markdown, references));
112
+ }
113
+ /** All reference files across skills, tagged with their owning skill. */
114
+ references() {
115
+ return this.skills.flatMap((s) => (s.references ?? []).map((r) => ({ ...r, skill: s.name })));
116
+ }
117
+ /** Look up a reference file by name (optionally scoped to one skill). */
118
+ reference(file, skill) {
119
+ const base = file.replace(/^references\//, '');
120
+ for (const s of this.skills) {
121
+ if (skill && s.name !== skill)
122
+ continue;
123
+ const hit = (s.references ?? []).find((r) => r.name === base || r.name === file);
124
+ if (hit)
125
+ return hit;
126
+ }
127
+ return undefined;
128
+ }
129
+ list() {
130
+ return [...this.skills];
131
+ }
132
+ get(name) {
133
+ return this.skills.find((s) => s.name === name);
134
+ }
135
+ /** Pick the most relevant skill for a query (null = none). */
136
+ select(query) {
137
+ return this.selector.select(query, this.skills);
138
+ }
139
+ /**
140
+ * Compose the effective system prompt for a skill: the base prompt + the
141
+ * skill's playbook. The returned `allowedTools` should be passed to
142
+ * `engine.runAgentic(..., { allowedTools })` for progressive tool disclosure.
143
+ */
144
+ compose(base, skill) {
145
+ if (!skill)
146
+ return { system: base };
147
+ let system = `${base}\n\n## Active skill: ${skill.name}\n${skill.instructions}`.trim();
148
+ // Progressive disclosure: tell the model the reference files exist and how
149
+ // to pull one in, rather than dumping them all into context.
150
+ const refs = skill.references ?? [];
151
+ if (refs.length) {
152
+ const names = refs.map((r) => r.name).join(', ');
153
+ system +=
154
+ `\n\n## Reference files\nThis skill has detailed reference docs: ${names}. ` +
155
+ `When you need the detail for a step, call \`${READ_REFERENCE_TOOL}\` with the ` +
156
+ `filename (e.g. {"file":"${refs[0].name}"}) to read it before acting.`;
157
+ }
158
+ // When the skill scopes tools, keep the reference reader reachable too.
159
+ const allowedTools = skill.tools
160
+ ? refs.length
161
+ ? [...skill.tools, READ_REFERENCE_TOOL]
162
+ : skill.tools
163
+ : undefined;
164
+ return { system, allowedTools };
165
+ }
166
+ }
167
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/skills/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,oEAAoE;AACpE,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,UAA6B;IACxE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,0EAA0E;YAC1E,0EAA0E;YAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,CAC1B,CAAC;QACC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACnD,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAE1E,8DAA8D;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;QACzB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC7D,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC1E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAC3E,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CAC/D,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAChE,CAAC;QACF,IAAI,IAAI,GAAiB,IAAI,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1F,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;YACvD,+DAA+D;YAC/D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE;gBAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,IAAI,GAAG,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,+DAA+D;QAC/D,OAAO,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;CACF,CAAC;AAEF,MAAM,OAAO,aAAa;IACP,MAAM,GAAY,EAAE,CAAC;IACrB,QAAQ,CAAgB;IAEzC,YAAY,SAAkB,EAAE,EAAE,WAA0B,eAAe;QACzE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,KAAY;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IACvE,WAAW,CAAC,QAAgB,EAAE,UAA6B;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,yEAAyE;IACzE,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,SAAS,CAAC,IAAY,EAAE,KAAc;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;gBAAE,SAAS;YACxC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACjF,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QACtB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAY,EAAE,KAAmB;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAEpC,IAAI,MAAM,GAAG,GAAG,IAAI,wBAAwB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC;QAEvF,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM;gBACJ,mEAAmE,KAAK,IAAI;oBAC5E,+CAA+C,mBAAmB,cAAc;oBAChF,2BAA2B,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,+BAA+B,CAAC;QAC5E,CAAC;QAED,wEAAwE;QACxE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK;YAC9B,CAAC,CAAC,IAAI,CAAC,MAAM;gBACX,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC;gBACvC,CAAC,CAAC,KAAK,CAAC,KAAK;YACf,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;CACF"}