@prestyj/cli 5.5.0 → 5.7.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 (235) hide show
  1. package/assets/end-notification.mp3 +0 -0
  2. package/assets/skills/evidence-led-ui/LICENSES.md +68 -0
  3. package/assets/skills/evidence-led-ui/SKILL.md +139 -0
  4. package/{LICENSE → assets/skills/evidence-led-ui/corpus/awesome-design-md/LICENSE} +1 -1
  5. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
  6. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
  7. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/apple/DESIGN.md +562 -0
  8. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/binance/DESIGN.md +634 -0
  9. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
  10. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
  11. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
  12. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cal/DESIGN.md +542 -0
  13. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/claude/DESIGN.md +589 -0
  14. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clay/DESIGN.md +541 -0
  15. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
  16. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
  17. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
  18. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/composio/DESIGN.md +506 -0
  19. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
  20. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/dell-1996/DESIGN.md +632 -0
  21. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
  22. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/expo/DESIGN.md +526 -0
  23. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
  24. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/figma/DESIGN.md +578 -0
  25. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/framer/DESIGN.md +544 -0
  26. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
  27. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hp/DESIGN.md +670 -0
  28. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
  29. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
  30. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
  31. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
  32. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
  33. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
  34. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
  35. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/meta/DESIGN.md +683 -0
  36. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
  37. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
  38. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/miro/DESIGN.md +825 -0
  39. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
  40. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
  41. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nike/DESIGN.md +575 -0
  42. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nintendo-2001/DESIGN.md +649 -0
  43. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/notion/DESIGN.md +821 -0
  44. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
  45. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
  46. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
  47. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
  48. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
  49. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
  50. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
  51. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/renault/DESIGN.md +589 -0
  52. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
  53. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/resend/DESIGN.md +585 -0
  54. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
  55. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
  56. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
  57. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sentry/DESIGN.md +551 -0
  58. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/shopify/DESIGN.md +516 -0
  59. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/slack/DESIGN.md +482 -0
  60. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spacex/DESIGN.md +363 -0
  61. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
  62. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
  63. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/stripe/DESIGN.md +487 -0
  64. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/supabase/DESIGN.md +462 -0
  65. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/superhuman/DESIGN.md +448 -0
  66. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
  67. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
  68. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/together.ai/DESIGN.md +633 -0
  69. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/uber/DESIGN.md +636 -0
  70. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vercel/DESIGN.md +736 -0
  71. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vodafone/DESIGN.md +538 -0
  72. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/voltagent/DESIGN.md +521 -0
  73. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/warp/DESIGN.md +526 -0
  74. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/webflow/DESIGN.md +588 -0
  75. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wired/DESIGN.md +497 -0
  76. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wise/DESIGN.md +544 -0
  77. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/x.ai/DESIGN.md +465 -0
  78. package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/zapier/DESIGN.md +537 -0
  79. package/assets/skills/evidence-led-ui/data/corpus-manifest.json +768 -0
  80. package/assets/skills/evidence-led-ui/data/observations.json +47053 -0
  81. package/assets/skills/evidence-led-ui/references/anti-defaults.md +203 -0
  82. package/assets/skills/evidence-led-ui/references/archetypes.md +97 -0
  83. package/assets/skills/evidence-led-ui/references/craft-rulings.md +167 -0
  84. package/assets/skills/evidence-led-ui/references/methodology.md +72 -0
  85. package/assets/skills/evidence-led-ui/references/observed-patterns.md +68 -0
  86. package/assets/skills/evidence-led-ui/references/production-contract.md +120 -0
  87. package/assets/skills/evidence-led-ui/references/provenance.md +117 -0
  88. package/assets/skills/evidence-led-ui/references/quality-rubric.md +126 -0
  89. package/dist/app-sidecar.js +159 -43
  90. package/dist/app-sidecar.js.map +1 -1
  91. package/dist/chat-agents/general.test.js +3 -0
  92. package/dist/chat-agents/general.test.js.map +1 -1
  93. package/dist/chat-agents/jiwa.d.ts +53 -0
  94. package/dist/chat-agents/jiwa.d.ts.map +1 -0
  95. package/dist/chat-agents/jiwa.js +352 -0
  96. package/dist/chat-agents/jiwa.js.map +1 -0
  97. package/dist/chat-agents/jiwa.test.d.ts +2 -0
  98. package/dist/chat-agents/jiwa.test.d.ts.map +1 -0
  99. package/dist/chat-agents/jiwa.test.js +66 -0
  100. package/dist/chat-agents/jiwa.test.js.map +1 -0
  101. package/dist/chat-agents/shared.d.ts.map +1 -1
  102. package/dist/chat-agents/shared.js +5 -1
  103. package/dist/chat-agents/shared.js.map +1 -1
  104. package/dist/cli.d.ts.map +1 -1
  105. package/dist/cli.js +15 -0
  106. package/dist/cli.js.map +1 -1
  107. package/dist/core/agent-session-review-coverage.test.d.ts +2 -0
  108. package/dist/core/agent-session-review-coverage.test.d.ts.map +1 -0
  109. package/dist/core/agent-session-review-coverage.test.js +57 -0
  110. package/dist/core/agent-session-review-coverage.test.js.map +1 -0
  111. package/dist/core/agent-session.d.ts +13 -7
  112. package/dist/core/agent-session.d.ts.map +1 -1
  113. package/dist/core/agent-session.js +143 -38
  114. package/dist/core/agent-session.js.map +1 -1
  115. package/dist/core/compaction/compactor.test.js +1 -1
  116. package/dist/core/compaction/compactor.test.js.map +1 -1
  117. package/dist/core/event-bus.d.ts +2 -0
  118. package/dist/core/event-bus.d.ts.map +1 -1
  119. package/dist/core/event-bus.js.map +1 -1
  120. package/dist/core/goal-worker.test.js +3 -2
  121. package/dist/core/goal-worker.test.js.map +1 -1
  122. package/dist/core/ideal-review.d.ts +27 -0
  123. package/dist/core/ideal-review.d.ts.map +1 -1
  124. package/dist/core/ideal-review.js +64 -0
  125. package/dist/core/ideal-review.js.map +1 -1
  126. package/dist/core/ideal-review.test.js +34 -1
  127. package/dist/core/ideal-review.test.js.map +1 -1
  128. package/dist/core/loop-breaker.d.ts +23 -16
  129. package/dist/core/loop-breaker.d.ts.map +1 -1
  130. package/dist/core/loop-breaker.js +52 -11
  131. package/dist/core/loop-breaker.js.map +1 -1
  132. package/dist/core/loop-breaker.test.js +37 -16
  133. package/dist/core/loop-breaker.test.js.map +1 -1
  134. package/dist/core/lsp/client.d.ts +3 -0
  135. package/dist/core/lsp/client.d.ts.map +1 -1
  136. package/dist/core/lsp/client.js +20 -0
  137. package/dist/core/lsp/client.js.map +1 -1
  138. package/dist/core/lsp/manager.d.ts +32 -9
  139. package/dist/core/lsp/manager.d.ts.map +1 -1
  140. package/dist/core/lsp/manager.js +89 -37
  141. package/dist/core/lsp/manager.js.map +1 -1
  142. package/dist/core/lsp/manager.test.js +56 -4
  143. package/dist/core/lsp/manager.test.js.map +1 -1
  144. package/dist/core/nolan-prompt.d.ts +3 -3
  145. package/dist/core/nolan-prompt.d.ts.map +1 -1
  146. package/dist/core/nolan-prompt.js +10 -10
  147. package/dist/core/nolan-prompt.js.map +1 -1
  148. package/dist/core/nolan-prompt.test.js +17 -0
  149. package/dist/core/nolan-prompt.test.js.map +1 -1
  150. package/dist/core/run-lifecycle.d.ts +40 -0
  151. package/dist/core/run-lifecycle.d.ts.map +1 -0
  152. package/dist/core/run-lifecycle.js +95 -0
  153. package/dist/core/run-lifecycle.js.map +1 -0
  154. package/dist/core/run-lifecycle.test.d.ts +2 -0
  155. package/dist/core/run-lifecycle.test.d.ts.map +1 -0
  156. package/dist/core/run-lifecycle.test.js +64 -0
  157. package/dist/core/run-lifecycle.test.js.map +1 -0
  158. package/dist/core/session-manager.d.ts +25 -1
  159. package/dist/core/session-manager.d.ts.map +1 -1
  160. package/dist/core/session-manager.js +66 -1
  161. package/dist/core/session-manager.js.map +1 -1
  162. package/dist/core/session-manager.test.js +80 -2
  163. package/dist/core/session-manager.test.js.map +1 -1
  164. package/dist/core/skills-routing.test.d.ts +2 -0
  165. package/dist/core/skills-routing.test.d.ts.map +1 -0
  166. package/dist/core/skills-routing.test.js +70 -0
  167. package/dist/core/skills-routing.test.js.map +1 -0
  168. package/dist/core/skills.d.ts +2 -0
  169. package/dist/core/skills.d.ts.map +1 -1
  170. package/dist/core/skills.js +32 -9
  171. package/dist/core/skills.js.map +1 -1
  172. package/dist/core/subagent-manager.d.ts +40 -3
  173. package/dist/core/subagent-manager.d.ts.map +1 -1
  174. package/dist/core/subagent-manager.js +342 -30
  175. package/dist/core/subagent-manager.js.map +1 -1
  176. package/dist/core/subagent-manager.test.js +189 -3
  177. package/dist/core/subagent-manager.test.js.map +1 -1
  178. package/dist/core/subagent-store.d.ts +20 -0
  179. package/dist/core/subagent-store.d.ts.map +1 -0
  180. package/dist/core/subagent-store.js +177 -0
  181. package/dist/core/subagent-store.js.map +1 -0
  182. package/dist/core/subagent-store.test.d.ts +2 -0
  183. package/dist/core/subagent-store.test.d.ts.map +1 -0
  184. package/dist/core/subagent-store.test.js +94 -0
  185. package/dist/core/subagent-store.test.js.map +1 -0
  186. package/dist/modes/agent-home-mode.d.ts.map +1 -1
  187. package/dist/modes/agent-home-mode.js +10 -3
  188. package/dist/modes/agent-home-mode.js.map +1 -1
  189. package/dist/modes/serve-mode.d.ts.map +1 -1
  190. package/dist/modes/serve-mode.js +10 -3
  191. package/dist/modes/serve-mode.js.map +1 -1
  192. package/dist/modes/subagent-worker-mode.d.ts +2 -0
  193. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  194. package/dist/modes/subagent-worker-mode.js +13 -3
  195. package/dist/modes/subagent-worker-mode.js.map +1 -1
  196. package/dist/system-prompt.js +2 -2
  197. package/dist/system-prompt.js.map +1 -1
  198. package/dist/system-prompt.test.js +7 -5
  199. package/dist/system-prompt.test.js.map +1 -1
  200. package/dist/tools/goals.d.ts +3 -3
  201. package/dist/tools/skill.d.ts.map +1 -1
  202. package/dist/tools/skill.js +8 -3
  203. package/dist/tools/skill.js.map +1 -1
  204. package/dist/tools/tasks.d.ts +2 -2
  205. package/dist/tools/web-fetch.d.ts +1 -1
  206. package/dist/ui/App.d.ts +7 -1
  207. package/dist/ui/App.d.ts.map +1 -1
  208. package/dist/ui/App.js +63 -17
  209. package/dist/ui/App.js.map +1 -1
  210. package/dist/ui/components/Footer.d.ts +1 -0
  211. package/dist/ui/components/Footer.d.ts.map +1 -1
  212. package/dist/ui/components/Footer.js +3 -3
  213. package/dist/ui/components/Footer.js.map +1 -1
  214. package/dist/ui/components/Footer.test.d.ts +2 -0
  215. package/dist/ui/components/Footer.test.d.ts.map +1 -0
  216. package/dist/ui/components/Footer.test.js +16 -0
  217. package/dist/ui/components/Footer.test.js.map +1 -0
  218. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
  219. package/dist/ui/components/SkillsOverlay.js +8 -3
  220. package/dist/ui/components/SkillsOverlay.js.map +1 -1
  221. package/dist/ui/hooks/useAgentLoop.d.ts +8 -3
  222. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  223. package/dist/ui/hooks/useAgentLoop.js +70 -25
  224. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  225. package/dist/ui/hooks/useAgentLoop.test.js +27 -0
  226. package/dist/ui/hooks/useAgentLoop.test.js.map +1 -1
  227. package/dist/ui/hooks/useSessionPersistence.d.ts +4 -2
  228. package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -1
  229. package/dist/ui/hooks/useSessionPersistence.js +7 -1
  230. package/dist/ui/hooks/useSessionPersistence.js.map +1 -1
  231. package/dist/ui/render.d.ts +7 -0
  232. package/dist/ui/render.d.ts.map +1 -1
  233. package/dist/ui/render.js +4 -0
  234. package/dist/ui/render.js.map +1 -1
  235. package/package.json +6 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-routing.test.d.ts","sourceRoot":"","sources":["../../src/core/skills-routing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import fs from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { discoverSkills, formatSkillsForPrompt } from "./skills.js";
6
+ import { createSkillTool } from "../tools/skill.js";
7
+ const skill = {
8
+ name: "evidence-led-ui",
9
+ description: "Use for UI work. Exclude backend-only tasks.",
10
+ content: "Inspect before inventing.",
11
+ source: "global",
12
+ root: "/skills/evidence-led-ui",
13
+ };
14
+ describe("skill routing prompts", () => {
15
+ it("requires matching skills before decisions or edits", () => {
16
+ const prompt = formatSkillsForPrompt([skill]);
17
+ expect(prompt).toContain("compare the user's request with every skill description");
18
+ expect(prompt).toContain("before making decisions or edits");
19
+ expect(prompt).toContain("Respect explicit exclusions");
20
+ expect(prompt).toContain("do not override project or file/module rules");
21
+ expect(prompt).toContain("evidence-led-ui");
22
+ });
23
+ it("places the same routing rule in the skill tool description", () => {
24
+ const tool = createSkillTool([skill]);
25
+ expect(tool.description).toContain("Before acting");
26
+ expect(tool.description).toContain("matches its scope");
27
+ expect(tool.description).toContain("respect explicit exclusions");
28
+ });
29
+ it("keeps loaded skill instructions below project and file/module rules", async () => {
30
+ const tool = createSkillTool([skill]);
31
+ const result = await tool.execute({ skill: skill.name }, { signal: new AbortController().signal, toolCallId: "test" });
32
+ expect(result).toContain("Skill root directory: /skills/evidence-led-ui");
33
+ expect(result).toContain("authoritative within their stated scope");
34
+ expect(result).toContain("Preserve higher-priority project and file/module rules");
35
+ });
36
+ it("discovers evidence-led-ui for a fresh user from bundled assets", async () => {
37
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), "bundled-skills-"));
38
+ try {
39
+ const skills = await discoverSkills({ globalSkillsDir: path.join(root, "global") });
40
+ const evidenceSkill = skills.find((candidate) => candidate.name === "evidence-led-ui");
41
+ expect(evidenceSkill?.source).toBe("bundled");
42
+ expect(evidenceSkill?.root).toContain("assets/skills/evidence-led-ui");
43
+ expect(evidenceSkill?.content).toContain("# Evidence-Led UI");
44
+ }
45
+ finally {
46
+ await fs.rm(root, { recursive: true, force: true });
47
+ }
48
+ });
49
+ it("lets project skills override global and bundled definitions by name", async () => {
50
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), "skill-precedence-"));
51
+ const globalSkillsDir = path.join(root, "global");
52
+ const projectDir = path.join(root, "project");
53
+ const projectSkillsDir = path.join(projectDir, ".ezcoder", "skills");
54
+ try {
55
+ await fs.mkdir(globalSkillsDir, { recursive: true });
56
+ await fs.mkdir(projectSkillsDir, { recursive: true });
57
+ await fs.writeFile(path.join(globalSkillsDir, "evidence.md"), "---\nname: evidence-led-ui\ndescription: global\n---\nGlobal guidance.");
58
+ await fs.writeFile(path.join(projectSkillsDir, "evidence.md"), "---\nname: evidence-led-ui\ndescription: project\n---\nProject guidance.");
59
+ const skills = await discoverSkills({ globalSkillsDir, projectDir });
60
+ const matching = skills.filter((candidate) => candidate.name === "evidence-led-ui");
61
+ expect(matching).toHaveLength(1);
62
+ expect(matching[0]?.source).toBe("project");
63
+ expect(matching[0]?.content).toBe("Project guidance.");
64
+ }
65
+ finally {
66
+ await fs.rm(root, { recursive: true, force: true });
67
+ }
68
+ });
69
+ });
70
+ //# sourceMappingURL=skills-routing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-routing.test.js","sourceRoot":"","sources":["../../src/core/skills-routing.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface Skill {
3
3
  description: string;
4
4
  content: string;
5
5
  source: string;
6
+ /** Directory used to resolve references linked from the skill content. */
7
+ root?: string;
6
8
  }
7
9
  /**
8
10
  * Discover skills from global and project-local skill directories.
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAenB;AA6CD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAY7D"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAiBnB;AAuDD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAc7D"}
@@ -1,20 +1,39 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ const MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));
5
+ const BUNDLED_SKILLS_DIRS = [
6
+ // Single-file desktop sidecar: resources live beside app-sidecar.mjs.
7
+ path.resolve(MODULE_DIR, "skills"),
8
+ // Source and npm CLI: assets live beside src/ and dist/.
9
+ path.resolve(MODULE_DIR, "../../assets/skills"),
10
+ ];
3
11
  /**
4
12
  * Discover skills from global and project-local skill directories.
5
13
  */
6
14
  export async function discoverSkills(options) {
7
- const skills = [];
8
- // Global skills: ~/.ezcoder/skills/*.md
9
- const globalSkills = await loadSkillsFromDir(options.globalSkillsDir, "global");
10
- skills.push(...globalSkills);
11
- // Project skills: {cwd}/.ezcoder/skills/*.md
15
+ const skillsByName = new Map();
16
+ const addSkills = (skills) => {
17
+ for (const skill of skills)
18
+ skillsByName.set(skill.name.toLowerCase(), skill);
19
+ };
20
+ // Bundled defaults ship with EZ Coder. Global and project definitions with
21
+ // the same name override them, preserving user control.
22
+ addSkills(await loadBundledSkills());
23
+ addSkills(await loadSkillsFromDir(options.globalSkillsDir, "global"));
12
24
  if (options.projectDir) {
13
25
  const projectSkillsDir = path.join(options.projectDir, ".ezcoder", "skills");
14
- const projectSkills = await loadSkillsFromDir(projectSkillsDir, "project");
15
- skills.push(...projectSkills);
26
+ addSkills(await loadSkillsFromDir(projectSkillsDir, "project"));
16
27
  }
17
- return skills;
28
+ return [...skillsByName.values()];
29
+ }
30
+ async function loadBundledSkills() {
31
+ for (const dir of BUNDLED_SKILLS_DIRS) {
32
+ const skills = await loadSkillsFromDir(dir, "bundled");
33
+ if (skills.length > 0)
34
+ return skills;
35
+ }
36
+ return [];
18
37
  }
19
38
  async function loadSkillsFromDir(dir, source) {
20
39
  const skills = [];
@@ -34,6 +53,7 @@ async function loadSkillsFromDir(dir, source) {
34
53
  const skill = parseSkillFile(content, source);
35
54
  if (!skill.name)
36
55
  skill.name = path.basename(entry.name, ".md");
56
+ skill.root = dir;
37
57
  skills.push(skill);
38
58
  }
39
59
  catch {
@@ -49,6 +69,7 @@ async function loadSkillsFromDir(dir, source) {
49
69
  const skill = parseSkillFile(content, source);
50
70
  if (!skill.name)
51
71
  skill.name = entry.name;
72
+ skill.root = entryPath;
52
73
  skills.push(skill);
53
74
  }
54
75
  catch {
@@ -98,7 +119,9 @@ export function formatSkillsForPrompt(skills) {
98
119
  .map((s) => `- **${s.name}**${s.description ? `: ${s.description}` : ""}`)
99
120
  .join("\n");
100
121
  return (`## Skills\n\n` +
101
- `The following skills are available. Use the **skill** tool to invoke a skill when needed:\n\n` +
122
+ `Before acting, compare the user's request with every skill description below. ` +
123
+ `When the request matches a skill's stated scope, invoke that skill with the **skill** tool before making decisions or edits. ` +
124
+ `Respect explicit exclusions in the description. Matching skill instructions specialize this prompt but do not override project or file/module rules.\n\n` +
102
125
  list);
103
126
  }
104
127
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import type { Provider, ThinkingLevel } from "@prestyj/ai";
1
+ import type { Message, Provider, ThinkingLevel } from "@prestyj/ai";
2
2
  import type { AgentDefinition } from "./agents.js";
3
- export type SubAgentState = "starting" | "running" | "completed" | "failed" | "interrupted" | "closed";
3
+ import { SubAgentStore } from "./subagent-store.js";
4
+ export type SubAgentState = "starting" | "running" | "completed" | "failed" | "interrupted" | "closed" | "reaped";
4
5
  export interface SubAgentSnapshot {
5
6
  agent_id: string;
6
7
  task_name: string;
@@ -17,6 +18,13 @@ export interface SubAgentSnapshot {
17
18
  };
18
19
  output?: string;
19
20
  error?: string;
21
+ agent_name?: string;
22
+ provider?: string;
23
+ model?: string;
24
+ child_session_id?: string;
25
+ child_session_path?: string;
26
+ collected?: boolean;
27
+ recovered?: boolean;
20
28
  }
21
29
  export interface SubAgentManagerOptions {
22
30
  cwd: string;
@@ -29,40 +37,69 @@ export interface SubAgentManagerOptions {
29
37
  onState?: (snapshot: SubAgentSnapshot) => void;
30
38
  workerEntry?: string;
31
39
  idleTimeoutMs?: number;
40
+ store?: SubAgentStore;
41
+ sessionRootDir?: string;
32
42
  }
43
+ /** Shared pre-finalization hook used by both AgentSession and the Ink host. */
44
+ export declare function buildSubAgentCompletionFollowUp(manager: Pick<SubAgentManager, "completionGateMessage"> | undefined): Message[] | null;
33
45
  export declare class SubAgentManager {
34
46
  private readonly options;
35
47
  private readonly workers;
36
48
  private readonly snapshots;
37
49
  private readonly listeners;
38
50
  private shuttingDown;
51
+ private shutdownPromise?;
52
+ private readonly store;
53
+ private readonly sessionRootDir;
54
+ private parentSessionId?;
55
+ private persistQueue;
56
+ private persistPending;
57
+ private persistScheduled;
39
58
  constructor(options: SubAgentManagerOptions);
59
+ /** Restore bounded history; dead in-flight workers become honestly interrupted. */
60
+ hydrate(parentSessionId: string): Promise<void>;
61
+ /** Rebind durable child history after parent compaction creates a continuation. */
62
+ rebindParentSession(parentSessionId: string): Promise<void>;
63
+ /** A genuinely new parent starts with no unrelated child history. */
64
+ resetParentSession(parentSessionId: string): Promise<void>;
65
+ waitForPersistence(): Promise<void>;
40
66
  spawn(taskName: string, task: string, agentName?: string): Promise<SubAgentSnapshot>;
41
67
  sendMessage(agentId: string, message: string): Promise<number>;
42
68
  followup(agentId: string, task: string): Promise<SubAgentSnapshot>;
43
- interrupt(agentId: string): Promise<SubAgentSnapshot>;
69
+ interrupt(agentId: string, collectResult?: boolean): Promise<SubAgentSnapshot>;
44
70
  subscribe(listener: (snapshot: SubAgentSnapshot) => void): () => void;
45
71
  list(): SubAgentSnapshot[];
46
72
  wait(agentIds?: string[], condition?: "any" | "all", timeoutMs?: number): Promise<{
47
73
  timed_out: boolean;
48
74
  agents: SubAgentSnapshot[];
49
75
  }>;
76
+ completionGate(): {
77
+ active: SubAgentSnapshot[];
78
+ uncollected: SubAgentSnapshot[];
79
+ unresolved: number;
80
+ };
81
+ completionGateMessage(): string | undefined;
50
82
  interruptAll(): Promise<void>;
51
83
  shutdownAll(): Promise<void>;
52
84
  /** Synchronous process-exit fallback: terminate detached process groups immediately. */
53
85
  shutdownAllNow(): void;
86
+ private markCollected;
87
+ private spawnWorkerProcess;
88
+ private respawnRecovered;
54
89
  private attach;
55
90
  private handleFrame;
56
91
  private request;
57
92
  private waitForChange;
58
93
  private publish;
59
94
  private snapshot;
95
+ private queuePersist;
60
96
  private elapsed;
61
97
  private activeCount;
62
98
  private isActive;
63
99
  private isTerminal;
64
100
  private requireWorker;
65
101
  private assertAvailable;
102
+ private assertChildSessionPath;
66
103
  private createId;
67
104
  private scheduleIdleReap;
68
105
  private reapExcessIdle;
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-manager.d.ts","sourceRoot":"","sources":["../../src/core/subagent-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-manager.d.ts","sourceRoot":"","sources":["../../src/core/subagent-manager.ts"],"names":[],"mappings":"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"}