daycare-cli 0.0.15 → 0.0.17

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 (65) hide show
  1. package/dist/engine/agents/agent.d.ts.map +1 -1
  2. package/dist/engine/agents/agent.js +4 -1
  3. package/dist/engine/agents/agent.js.map +1 -1
  4. package/dist/engine/agents/ops/agentLoopRun.d.ts +2 -0
  5. package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
  6. package/dist/engine/agents/ops/agentLoopRun.js +2 -1
  7. package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
  8. package/dist/engine/agents/ops/agentLoopRun.spec.js +1 -0
  9. package/dist/engine/agents/ops/agentLoopRun.spec.js.map +1 -1
  10. package/dist/engine/engine.d.ts.map +1 -1
  11. package/dist/engine/engine.js +3 -1
  12. package/dist/engine/engine.js.map +1 -1
  13. package/dist/engine/engine.spec.js +16 -0
  14. package/dist/engine/engine.spec.js.map +1 -1
  15. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.d.ts +2 -1
  16. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.d.ts.map +1 -1
  17. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.js +18 -1
  18. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.js.map +1 -1
  19. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.spec.d.ts +2 -0
  20. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.spec.d.ts.map +1 -0
  21. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.spec.js +32 -0
  22. package/dist/engine/modules/rlm/rlmToolDescriptionBuild.spec.js.map +1 -0
  23. package/dist/engine/modules/tools/skillToolBuild.d.ts +3 -0
  24. package/dist/engine/modules/tools/skillToolBuild.d.ts.map +1 -0
  25. package/dist/engine/modules/tools/skillToolBuild.js +113 -0
  26. package/dist/engine/modules/tools/skillToolBuild.js.map +1 -0
  27. package/dist/engine/modules/tools/skillToolBuild.spec.d.ts +2 -0
  28. package/dist/engine/modules/tools/skillToolBuild.spec.d.ts.map +1 -0
  29. package/dist/engine/modules/tools/skillToolBuild.spec.js +198 -0
  30. package/dist/engine/modules/tools/skillToolBuild.spec.js.map +1 -0
  31. package/dist/engine/modules/tools/toolListContextBuild.d.ts +2 -0
  32. package/dist/engine/modules/tools/toolListContextBuild.d.ts.map +1 -1
  33. package/dist/engine/modules/tools/toolListContextBuild.js +3 -3
  34. package/dist/engine/modules/tools/toolListContextBuild.js.map +1 -1
  35. package/dist/engine/modules/tools/toolListContextBuild.spec.js +12 -0
  36. package/dist/engine/modules/tools/toolListContextBuild.spec.js.map +1 -1
  37. package/dist/engine/modules/tools/types.d.ts +2 -0
  38. package/dist/engine/modules/tools/types.d.ts.map +1 -1
  39. package/dist/engine/skills/skillContentLoad.d.ts +7 -0
  40. package/dist/engine/skills/skillContentLoad.d.ts.map +1 -0
  41. package/dist/engine/skills/skillContentLoad.js +19 -0
  42. package/dist/engine/skills/skillContentLoad.js.map +1 -0
  43. package/dist/engine/skills/skillContentLoad.spec.d.ts +2 -0
  44. package/dist/engine/skills/skillContentLoad.spec.d.ts.map +1 -0
  45. package/dist/engine/skills/skillContentLoad.spec.js +52 -0
  46. package/dist/engine/skills/skillContentLoad.spec.js.map +1 -0
  47. package/dist/engine/skills/skillPromptFormat.d.ts.map +1 -1
  48. package/dist/engine/skills/skillPromptFormat.js +9 -5
  49. package/dist/engine/skills/skillPromptFormat.js.map +1 -1
  50. package/dist/engine/skills/skillPromptFormat.spec.js +5 -2
  51. package/dist/engine/skills/skillPromptFormat.spec.js.map +1 -1
  52. package/dist/engine/skills/skillResolve.d.ts.map +1 -1
  53. package/dist/engine/skills/skillResolve.js +35 -91
  54. package/dist/engine/skills/skillResolve.js.map +1 -1
  55. package/dist/engine/skills/skillResolve.spec.d.ts +2 -0
  56. package/dist/engine/skills/skillResolve.spec.d.ts.map +1 -0
  57. package/dist/engine/skills/skillResolve.spec.js +63 -0
  58. package/dist/engine/skills/skillResolve.spec.js.map +1 -0
  59. package/dist/engine/skills/skillTypes.d.ts +2 -0
  60. package/dist/engine/skills/skillTypes.d.ts.map +1 -1
  61. package/dist/prompts/SYSTEM.md +6 -1
  62. package/dist/skills/skills/skill-creator/SKILL.md +7 -1
  63. package/dist/types.d.ts +1 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,52 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { promises as fs } from "node:fs";
4
+ import { describe, expect, it } from "vitest";
5
+ import { skillContentLoad } from "./skillContentLoad.js";
6
+ describe("skillContentLoad", () => {
7
+ it("strips YAML frontmatter and returns body", async () => {
8
+ const skillPath = await skillFileCreate("---\nname: deploy\ndescription: Deploy\n---\n\n# Deploy\nUse script.");
9
+ try {
10
+ await expect(skillContentLoad(skillPath)).resolves.toBe("# Deploy\nUse script.");
11
+ }
12
+ finally {
13
+ await fs.rm(path.dirname(skillPath), { recursive: true, force: true });
14
+ }
15
+ });
16
+ it("returns full content when frontmatter is absent", async () => {
17
+ const skillPath = await skillFileCreate("# No Frontmatter\nBody");
18
+ try {
19
+ await expect(skillContentLoad(skillPath)).resolves.toBe("# No Frontmatter\nBody");
20
+ }
21
+ finally {
22
+ await fs.rm(path.dirname(skillPath), { recursive: true, force: true });
23
+ }
24
+ });
25
+ it("returns empty string when body is empty", async () => {
26
+ const skillPath = await skillFileCreate("---\nname: empty\n---\n");
27
+ try {
28
+ await expect(skillContentLoad(skillPath)).resolves.toBe("");
29
+ }
30
+ finally {
31
+ await fs.rm(path.dirname(skillPath), { recursive: true, force: true });
32
+ }
33
+ });
34
+ it("keeps body content that contains --- delimiters", async () => {
35
+ const skillPath = await skillFileCreate("---\nname: dash\n---\n\n# Title\n---\nStill body.");
36
+ try {
37
+ await expect(skillContentLoad(skillPath)).resolves.toBe("# Title\n---\nStill body.");
38
+ }
39
+ finally {
40
+ await fs.rm(path.dirname(skillPath), { recursive: true, force: true });
41
+ }
42
+ });
43
+ });
44
+ async function skillFileCreate(content) {
45
+ const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-skill-content-"));
46
+ const skillDir = path.join(baseDir, "skill");
47
+ await fs.mkdir(skillDir, { recursive: true });
48
+ const skillPath = path.join(skillDir, "SKILL.md");
49
+ await fs.writeFile(skillPath, content);
50
+ return skillPath;
51
+ }
52
+ //# sourceMappingURL=skillContentLoad.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillContentLoad.spec.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillContentLoad.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skillPromptFormat.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CA8C9D"}
1
+ {"version":3,"file":"skillPromptFormat.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAkD9D"}
@@ -20,11 +20,13 @@ export function skillPromptFormat(skills) {
20
20
  "## Skills (mandatory)",
21
21
  "",
22
22
  "Before replying, scan the skill descriptions below:",
23
- "- If exactly one skill clearly applies: read its SKILL.md at the path shown, then follow it.",
24
- "- If multiple could apply: choose the most specific one, then read/follow it.",
25
- "- If none clearly apply: do not read any SKILL.md.",
23
+ "- If exactly one skill clearly applies: call the `skill` tool with that skill name.",
24
+ "- If multiple could apply: choose the most specific one, then call `skill` once.",
25
+ "- If none clearly apply: do not call `skill`.",
26
26
  "",
27
- "Never read more than one skill up front; only read after selecting.",
27
+ "Tool behavior:",
28
+ "- Non-sandbox skill: `skill` returns instructions. Follow them in this context.",
29
+ "- Sandbox skill (`<sandbox>true</sandbox>`): `skill` runs autonomously and returns results.",
28
30
  "",
29
31
  "<available_skills>"
30
32
  ];
@@ -40,7 +42,9 @@ export function skillPromptFormat(skills) {
40
42
  lines.push(` <description>${description}</description>`);
41
43
  }
42
44
  lines.push(` <source>${xmlEscape(sourceLabel)}</source>`);
43
- lines.push(` <path>${xmlEscape(skill.path)}</path>`);
45
+ if (skill.sandbox === true) {
46
+ lines.push(" <sandbox>true</sandbox>");
47
+ }
44
48
  lines.push(" </skill>");
45
49
  }
46
50
  lines.push("</available_skills>");
@@ -1 +1 @@
1
- {"version":3,"file":"skillPromptFormat.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,uBAAuB;QACvB,EAAE;QACF,qDAAqD;QACrD,8FAA8F;QAC9F,+EAA+E;QAC/E,oDAAoD;QACpD,EAAE;QACF,qEAAqE;QACrE,EAAE;QACF,oBAAoB;KACrB,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,KAAK,QAAQ;YACvB,CAAC,CAAC,UAAU,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE;YACzC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QACnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,WAAW,gBAAgB,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"skillPromptFormat.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,uBAAuB;QACvB,EAAE;QACF,qDAAqD;QACrD,qFAAqF;QACrF,kFAAkF;QAClF,+CAA+C;QAC/C,EAAE;QACF,gBAAgB;QAChB,iFAAiF;QACjF,6FAA6F;QAC7F,EAAE;QACF,oBAAoB;KACrB,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,KAAK,QAAQ;YACvB,CAAC,CAAC,UAAU,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE;YACzC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QACnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,WAAW,gBAAgB,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -8,7 +8,8 @@ describe("skillPromptFormat", () => {
8
8
  name: "deploy",
9
9
  description: "Use <cron> & heartbeat",
10
10
  path: "/tmp/deploy/SKILL.md",
11
- source: "core"
11
+ source: "core",
12
+ sandbox: true
12
13
  },
13
14
  {
14
15
  id: "plugin:alpha/tooling",
@@ -33,7 +34,9 @@ describe("skillPromptFormat", () => {
33
34
  expect(prompt).toContain("<name>deploy</name>");
34
35
  expect(prompt).toContain("Use &lt;cron&gt; &amp; heartbeat");
35
36
  expect(prompt).toContain("<source>plugin:alpha</source>");
36
- expect(prompt).toContain("/tmp/deploy/SKILL.md");
37
+ expect(prompt).toContain("<sandbox>true</sandbox>");
38
+ expect(prompt).not.toContain("/tmp/deploy/SKILL.md");
39
+ expect(prompt).toContain("call the `skill` tool");
37
40
  expect(prompt.match(/<name>deploy<\/name>/g)).toHaveLength(1);
38
41
  });
39
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"skillPromptFormat.spec.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAiB;YAC3B;gBACE,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,MAAM;aACf;YACD;gBACE,EAAE,EAAE,sBAAsB;gBAC1B,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,4BAA4B;gBAClC,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,MAAM;aACf;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"skillPromptFormat.spec.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillPromptFormat.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAiB;YAC3B;gBACE,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI;aACd;YACD;gBACE,EAAE,EAAE,sBAAsB;gBAC1B,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,4BAA4B;gBAClC,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,MAAM;aACf;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skillResolve.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAS/D;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6B5B"}
1
+ {"version":3,"file":"skillResolve.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAW/D;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA+B5B"}
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { constants as fsConstants, promises as fs } from "node:fs";
3
+ import matter from "gray-matter";
3
4
  import { getLogger } from "../../log.js";
4
5
  import { SKILL_FILENAME } from "./skillConstants.js";
5
6
  const logger = getLogger("engine.skills");
@@ -31,6 +32,8 @@ export async function skillResolve(filePath, source, root) {
31
32
  id,
32
33
  name,
33
34
  description,
35
+ sandbox: metadata.sandbox,
36
+ permissions: metadata.permissions,
34
37
  path: resolvedPath,
35
38
  source: source.source,
36
39
  pluginId: source.source === "plugin" ? source.pluginId : undefined
@@ -54,109 +57,50 @@ async function skillFileReadable(filePath) {
54
57
  }
55
58
  }
56
59
  function skillFrontmatterParse(content) {
57
- const lines = content.split(/\r?\n/);
58
- const firstLine = lines[0] ?? "";
59
- if (lines.length === 0 || firstLine.trim() !== "---") {
60
- return {};
61
- }
62
- const frontmatter = [];
63
- for (let i = 1; i < lines.length; i += 1) {
64
- const line = lines[i] ?? "";
65
- if (line.trim() === "---" || line.trim() === "...") {
66
- break;
67
- }
68
- frontmatter.push(line);
60
+ try {
61
+ const parsed = matter(content);
62
+ return skillFrontmatterNormalize(parsed.data);
69
63
  }
70
- if (frontmatter.length === 0) {
64
+ catch {
71
65
  return {};
72
66
  }
73
- return skillYamlFrontmatterParse(frontmatter);
74
67
  }
75
- function skillYamlFrontmatterParse(lines) {
68
+ function skillFrontmatterNormalize(data) {
76
69
  const result = {};
77
- for (let i = 0; i < lines.length; i += 1) {
78
- const line = lines[i] ?? "";
79
- if (!line || line.trim().length === 0 || line.trim().startsWith("#")) {
80
- continue;
81
- }
82
- const match = line.match(/^([A-Za-z0-9_-]+)\s*:\s*(.*)$/);
83
- if (!match) {
84
- continue;
85
- }
86
- const key = match[1];
87
- let value = match[2] ?? "";
88
- if (value === "|" || value === ">" || value.trim().length === 0) {
89
- const block = skillYamlBlockCollect(lines, i + 1);
90
- i = block.nextIndex - 1;
91
- value = value === ">" ? block.value.replace(/\n/g, " ") : block.value;
92
- }
93
- else {
94
- value = value.trim();
95
- }
96
- const normalized = skillYamlValueNormalize(value);
97
- if (key === "name") {
98
- result.name = normalized;
99
- }
100
- if (key === "description") {
101
- result.description = normalized;
102
- }
70
+ if (typeof data.name === "string") {
71
+ result.name = data.name;
103
72
  }
104
- return result;
105
- }
106
- function skillYamlBlockCollect(lines, startIndex) {
107
- const blockLines = [];
108
- let minIndent = null;
109
- let index = startIndex;
110
- for (; index < lines.length; index += 1) {
111
- const line = lines[index] ?? "";
112
- if (line.trim().length === 0) {
113
- blockLines.push("");
114
- continue;
115
- }
116
- const match = line.match(/^(\s+)/);
117
- if (!match) {
118
- break;
119
- }
120
- const indentMatch = match[1];
121
- if (!indentMatch) {
122
- break;
123
- }
124
- const indent = indentMatch.length;
125
- if (minIndent === null || indent < minIndent) {
126
- minIndent = indent;
127
- }
128
- blockLines.push(line);
73
+ if (typeof data.description === "string") {
74
+ result.description = data.description;
129
75
  }
130
- if (blockLines.length === 0) {
131
- return { value: "", nextIndex: index };
76
+ if (typeof data.sandbox === "boolean") {
77
+ result.sandbox = data.sandbox;
132
78
  }
133
- const trimmed = blockLines.map((line) => {
134
- if (minIndent && line.length >= minIndent) {
135
- return line.slice(minIndent);
79
+ else if (typeof data.sandbox === "string") {
80
+ const normalized = data.sandbox.trim().toLowerCase();
81
+ if (normalized === "true") {
82
+ result.sandbox = true;
83
+ }
84
+ else if (normalized === "false") {
85
+ result.sandbox = false;
136
86
  }
137
- return line.trim();
138
- });
139
- return { value: trimmed.join("\n").trimEnd(), nextIndex: index };
140
- }
141
- function skillYamlValueNormalize(value) {
142
- if (value.length === 0) {
143
- return value;
144
87
  }
145
- if (value.startsWith('"') && value.endsWith('"')) {
146
- return skillYamlDoubleUnescape(value.slice(1, -1));
88
+ if (Array.isArray(data.permissions)) {
89
+ const permissions = data.permissions
90
+ .filter((value) => typeof value === "string")
91
+ .map((value) => value.trim())
92
+ .filter((value) => value.length > 0);
93
+ if (permissions.length > 0) {
94
+ result.permissions = Array.from(new Set(permissions));
95
+ }
147
96
  }
148
- if (value.startsWith("'") && value.endsWith("'")) {
149
- return value.slice(1, -1).replace(/''/g, "'");
97
+ else if (typeof data.permissions === "string") {
98
+ const permission = data.permissions.trim();
99
+ if (permission.length > 0) {
100
+ result.permissions = [permission];
101
+ }
150
102
  }
151
- return value;
152
- }
153
- function skillYamlDoubleUnescape(value) {
154
- return value
155
- .replace(/\\n/g, "\n")
156
- .replace(/\\t/g, "\t")
157
- .replace(/\\r/g, "\r")
158
- .replace(/\\"/g, '"')
159
- .replace(/\\\\/g, "\\");
103
+ return result;
160
104
  }
161
105
  function skillIdBuild(filePath, source, root) {
162
106
  const fileName = path.basename(filePath).toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"skillResolve.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillResolve.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skillResolve.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillResolve.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { promises as fs } from "node:fs";
4
+ import { describe, expect, it } from "vitest";
5
+ import { skillResolve } from "./skillResolve.js";
6
+ describe("skillResolve", () => {
7
+ it("parses sandbox true and permissions from frontmatter", async () => {
8
+ const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-skill-resolve-"));
9
+ try {
10
+ const skillDir = path.join(baseDir, "deploy");
11
+ await fs.mkdir(skillDir, { recursive: true });
12
+ const skillPath = path.join(skillDir, "SKILL.md");
13
+ await fs.writeFile(skillPath, [
14
+ "---",
15
+ "name: deploy",
16
+ "description: Deploy project",
17
+ "sandbox: true",
18
+ "permissions:",
19
+ " - \"@read:/workspace\"",
20
+ " - \"@network\"",
21
+ "---",
22
+ "",
23
+ "# Deploy"
24
+ ].join("\n"));
25
+ const skill = await skillResolve(skillPath, { source: "config", root: baseDir }, baseDir);
26
+ expect(skill?.sandbox).toBe(true);
27
+ expect(skill?.permissions).toEqual(["@read:/workspace", "@network"]);
28
+ }
29
+ finally {
30
+ await fs.rm(baseDir, { recursive: true, force: true });
31
+ }
32
+ });
33
+ it("parses sandbox false from frontmatter", async () => {
34
+ const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-skill-resolve-"));
35
+ try {
36
+ const skillDir = path.join(baseDir, "plan");
37
+ await fs.mkdir(skillDir, { recursive: true });
38
+ const skillPath = path.join(skillDir, "SKILL.md");
39
+ await fs.writeFile(skillPath, "---\nname: plan\ndescription: Plan work\nsandbox: false\n---\n\n# Plan");
40
+ const skill = await skillResolve(skillPath, { source: "config", root: baseDir }, baseDir);
41
+ expect(skill?.sandbox).toBe(false);
42
+ }
43
+ finally {
44
+ await fs.rm(baseDir, { recursive: true, force: true });
45
+ }
46
+ });
47
+ it("leaves sandbox undefined when frontmatter omits it", async () => {
48
+ const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "daycare-skill-resolve-"));
49
+ try {
50
+ const skillDir = path.join(baseDir, "review");
51
+ await fs.mkdir(skillDir, { recursive: true });
52
+ const skillPath = path.join(skillDir, "SKILL.md");
53
+ await fs.writeFile(skillPath, "---\nname: review\ndescription: Review code\n---\n\n# Review");
54
+ const skill = await skillResolve(skillPath, { source: "config", root: baseDir }, baseDir);
55
+ expect(skill?.sandbox).toBeUndefined();
56
+ expect(skill?.permissions).toBeUndefined();
57
+ }
58
+ finally {
59
+ await fs.rm(baseDir, { recursive: true, force: true });
60
+ }
61
+ });
62
+ });
63
+ //# sourceMappingURL=skillResolve.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillResolve.spec.js","sourceRoot":"","sources":["../../../sources/engine/skills/skillResolve.spec.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ export type AgentSkill = {
5
5
  id: string;
6
6
  name: string;
7
7
  description?: string | null;
8
+ sandbox?: boolean;
9
+ permissions?: string[];
8
10
  path: string;
9
11
  source: "core" | "config" | "plugin" | "user";
10
12
  pluginId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"skillTypes.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"skillTypes.d.ts","sourceRoot":"","sources":["../../../sources/engine/skills/skillTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -139,7 +139,12 @@ Use channels for persistent group coordination where agent mentions and shared h
139
139
 
140
140
  ## Skills
141
141
 
142
- Skills in `{{configDir}}/skills/`. Create/edit in `{{workspace}}/skills/<name>/` first, deploy atomically: `rm -rf {{configDir}}/skills/<name> && cp -r {{workspace}}/skills/<name> {{configDir}}/skills/`
142
+ Invoke skills via the `skill` tool. Do not read `SKILL.md` files directly.
143
+
144
+ - Non-sandbox skills: `skill` returns instructions; follow them in this context.
145
+ - Sandbox skills: `skill` runs autonomously in a subagent and returns results.
146
+
147
+ For local skill authoring: create/edit in `{{workspace}}/skills/<name>/` first, then deploy atomically to `{{configDir}}/skills/` with `rm -rf {{configDir}}/skills/<name> && cp -r {{workspace}}/skills/<name> {{configDir}}/skills/`.
143
148
 
144
149
  ---
145
150
 
@@ -65,9 +65,15 @@ skill-name/
65
65
 
66
66
  Every SKILL.md consists of:
67
67
 
68
- - **Frontmatter** (YAML): Contains `name` and `description` fields. These are the only fields that Daycare reads to determine when the skill gets used, thus it is very important to be clear and comprehensive in describing what the skill is, and when it should be used.
68
+ - **Frontmatter** (YAML): Contains required `name` and `description` fields, plus optional execution fields like `sandbox` and `permissions`.
69
69
  - **Body** (Markdown): Instructions and guidance for using the skill. Only loaded AFTER the skill triggers (if at all).
70
70
 
71
+ Frontmatter fields used by Daycare:
72
+ - `name` (required): skill selector shown in prompt metadata.
73
+ - `description` (required): when/why to use the skill.
74
+ - `sandbox` (optional boolean): when `true`, runs the skill in a forked subagent.
75
+ - `permissions` (optional string array): permission tags (for example `@read:/workspace`, `@write:/workspace`, `@network`) granted to sandbox subagent; must be a subset of caller permissions.
76
+
71
77
  #### Bundled Resources (optional)
72
78
 
73
79
  ##### Scripts (`scripts/`)
package/dist/types.d.ts CHANGED
@@ -9,6 +9,7 @@ export type { AgentDescriptor, AgentFetchStrategy } from "./engine/agents/ops/ag
9
9
  export type { InferenceClient, InferenceProvider, InferenceProviderOptions } from "./engine/modules/inference/types.js";
10
10
  export type { ImageGenerationProvider } from "./engine/modules/images/types.js";
11
11
  export type { ToolDefinition, ToolExecutionContext, ToolExecutionResult } from "./engine/modules/tools/types.js";
12
+ export type { AgentSkill } from "./engine/skills/skillTypes.js";
12
13
  export type { Config } from "./config/configTypes.js";
13
14
  export type { Signal, DelayedSignal, DelayedSignalCancelRepeatKeyInput, DelayedSignalScheduleInput, SignalGenerateInput, SignalSource, SignalSubscription, SignalSubscribeInput, SignalUnsubscribeInput } from "./engine/signals/signalTypes.js";
14
15
  export type { Channel, ChannelMember, ChannelMessage, ChannelSignalData } from "./engine/channels/channelTypes.js";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,YAAY,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAGjF,YAAY,EACV,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EAClB,MAAM,sCAAsC,CAAC;AAG9C,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,YAAY,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGvG,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGtD,YAAY,EACV,MAAM,EACN,aAAa,EACb,iCAAiC,EACjC,0BAA0B,EAC1B,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,iBAAiB,EAClB,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,YAAY,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAGjF,YAAY,EACV,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EAClB,MAAM,sCAAsC,CAAC;AAG9C,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,YAAY,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGvG,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGtD,YAAY,EACV,MAAM,EACN,aAAa,EACb,iCAAiC,EACjC,0BAA0B,EAC1B,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,OAAO,EACP,aAAa,EACb,cAAc,EACd,iBAAiB,EAClB,MAAM,mCAAmC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daycare-cli",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "Local-first, plugin-driven multi-agent runtime",
5
5
  "type": "module",
6
6
  "license": "MIT",