crewly 1.20.131 → 1.20.132

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 (130) hide show
  1. package/config/skills/agent/core/find-skill/SKILL.md +58 -0
  2. package/config/skills/agent/core/find-skill/execute.sh +67 -0
  3. package/config/skills/agent/core/find-skill/execute.test.sh +69 -0
  4. package/config/skills/agent/core/generate-pdf/SKILL.md +24 -29
  5. package/config/skills/agent/core/generate-pdf/execute.sh +22 -78
  6. package/config/skills/agent/core/generate-pdf/execute.test.sh +45 -0
  7. package/config/skills/agent/core/install-skill/SKILL.md +67 -0
  8. package/config/skills/agent/core/install-skill/execute.sh +80 -0
  9. package/config/skills/agent/core/install-skill/execute.test.sh +74 -0
  10. package/config/skills/agent/pdf-tools/SKILL.md +103 -0
  11. package/config/skills/agent/pdf-tools/execute.sh +301 -0
  12. package/config/skills/agent/pdf-tools/execute.test.sh +218 -0
  13. package/config/skills/agent/pdf-tools/instructions.md +14 -0
  14. package/config/skills/agent/pdf-tools/pdf_tools.py +268 -0
  15. package/config/skills/agent/pdf-tools/skill.json +103 -0
  16. package/config/skills/agent/pdf-tools/style.css +143 -0
  17. package/config/skills/agent/transcribe-audio/SKILL.md +42 -5
  18. package/config/skills/agent/transcribe-audio/execute.sh +44 -11
  19. package/config/skills/agent/transcribe-audio/execute.test.sh +90 -0
  20. package/config/skills/agent/transcribe-audio/install-whisper-cpp.sh +126 -0
  21. package/config/skills/agent/transcribe-audio/install-whisper-cpp.test.sh +69 -0
  22. package/config/skills/agent/transcribe-audio/skill.json +67 -6
  23. package/config/skills/marketplace-registry.ts +8 -1
  24. package/config/skills/registry.json +337 -3
  25. package/dist/backend/backend/src/constants.d.ts +71 -0
  26. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  27. package/dist/backend/backend/src/constants.js +96 -0
  28. package/dist/backend/backend/src/constants.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.d.ts +49 -0
  30. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.d.ts.map +1 -0
  31. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.js +185 -0
  32. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.controller.js.map +1 -0
  33. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.d.ts +21 -0
  34. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.d.ts.map +1 -0
  35. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.js +29 -0
  36. package/dist/backend/backend/src/controllers/skill-setup/skill-setup.routes.js.map +1 -0
  37. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  38. package/dist/backend/backend/src/routes/api.routes.js +5 -0
  39. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  40. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +14 -0
  41. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +33 -1
  43. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  44. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +11 -3
  46. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.d.ts +281 -0
  48. package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.d.ts.map +1 -0
  49. package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.js +559 -0
  50. package/dist/backend/backend/src/services/skill-setup/skill-discovery.service.js.map +1 -0
  51. package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.d.ts +243 -0
  52. package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.d.ts.map +1 -0
  53. package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.js +439 -0
  54. package/dist/backend/backend/src/services/skill-setup/skill-install-job.service.js.map +1 -0
  55. package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.d.ts +138 -0
  56. package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.d.ts.map +1 -0
  57. package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.js +281 -0
  58. package/dist/backend/backend/src/services/skill-setup/skill-setup-manifest.js.map +1 -0
  59. package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.d.ts +338 -0
  60. package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.js +761 -0
  62. package/dist/backend/backend/src/services/skill-setup/skill-setup-runner.service.js.map +1 -0
  63. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +6 -0
  65. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  66. package/dist/backend/backend/src/types/marketplace.types.d.ts +16 -1
  67. package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
  68. package/dist/backend/backend/src/utils/inbound-file-hint.utils.d.ts +55 -0
  69. package/dist/backend/backend/src/utils/inbound-file-hint.utils.d.ts.map +1 -0
  70. package/dist/backend/backend/src/utils/inbound-file-hint.utils.js +78 -0
  71. package/dist/backend/backend/src/utils/inbound-file-hint.utils.js.map +1 -0
  72. package/dist/backend/build-info.json +2 -2
  73. package/dist/cli/backend/src/constants.d.ts +71 -0
  74. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  75. package/dist/cli/backend/src/constants.js +96 -0
  76. package/dist/cli/backend/src/constants.js.map +1 -1
  77. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +14 -0
  78. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  79. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +33 -1
  80. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  81. package/dist/cli/backend/src/services/marketplace/marketplace.service.d.ts +101 -0
  82. package/dist/cli/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -0
  83. package/dist/cli/backend/src/services/marketplace/marketplace.service.js +392 -0
  84. package/dist/cli/backend/src/services/marketplace/marketplace.service.js.map +1 -0
  85. package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.d.ts +281 -0
  86. package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.d.ts.map +1 -0
  87. package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.js +559 -0
  88. package/dist/cli/backend/src/services/skill-setup/skill-discovery.service.js.map +1 -0
  89. package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.d.ts +138 -0
  90. package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.d.ts.map +1 -0
  91. package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.js +281 -0
  92. package/dist/cli/backend/src/services/skill-setup/skill-setup-manifest.js.map +1 -0
  93. package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.d.ts +338 -0
  94. package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.d.ts.map +1 -0
  95. package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.js +761 -0
  96. package/dist/cli/backend/src/services/skill-setup/skill-setup-runner.service.js.map +1 -0
  97. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  98. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +6 -0
  99. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  100. package/dist/cli/backend/src/types/marketplace.types.d.ts +219 -0
  101. package/dist/cli/backend/src/types/marketplace.types.d.ts.map +1 -0
  102. package/dist/cli/backend/src/types/marketplace.types.js +6 -0
  103. package/dist/cli/backend/src/types/marketplace.types.js.map +1 -0
  104. package/dist/cli/backend/src/utils/inbound-file-hint.utils.d.ts +55 -0
  105. package/dist/cli/backend/src/utils/inbound-file-hint.utils.d.ts.map +1 -0
  106. package/dist/cli/backend/src/utils/inbound-file-hint.utils.js +78 -0
  107. package/dist/cli/backend/src/utils/inbound-file-hint.utils.js.map +1 -0
  108. package/dist/cli/backend/src/utils/package-root.d.ts +15 -0
  109. package/dist/cli/backend/src/utils/package-root.d.ts.map +1 -0
  110. package/dist/cli/backend/src/utils/package-root.js +38 -0
  111. package/dist/cli/backend/src/utils/package-root.js.map +1 -0
  112. package/dist/cli/cli/src/commands/install.d.ts +13 -1
  113. package/dist/cli/cli/src/commands/install.d.ts.map +1 -1
  114. package/dist/cli/cli/src/commands/install.js +40 -3
  115. package/dist/cli/cli/src/commands/install.js.map +1 -1
  116. package/dist/cli/cli/src/commands/skills.d.ts +58 -0
  117. package/dist/cli/cli/src/commands/skills.d.ts.map +1 -0
  118. package/dist/cli/cli/src/commands/skills.js +132 -0
  119. package/dist/cli/cli/src/commands/skills.js.map +1 -0
  120. package/dist/cli/cli/src/index.js +12 -3
  121. package/dist/cli/cli/src/index.js.map +1 -1
  122. package/dist/cli/cli/src/utils/archive-creator.d.ts +14 -0
  123. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -1
  124. package/dist/cli/cli/src/utils/archive-creator.js +24 -3
  125. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -1
  126. package/dist/cli/cli/src/utils/package-validator.d.ts +2 -0
  127. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -1
  128. package/dist/cli/cli/src/utils/package-validator.js +16 -0
  129. package/dist/cli/cli/src/utils/package-validator.js.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * One-line hints for files that arrive with a chat message.
3
+ *
4
+ * A Slack voice message reaches the agent as `[Slack File: /…/F123-Audio_Clip.m4a
5
+ * (audio/mp4, 214KB)]`. One agent knew to run `transcribe-audio`; another said
6
+ * "I can't transcribe audio" and stopped. The path alone does not say which
7
+ * skill reads the file, so the bridge adds a hint naming it — and what to do
8
+ * when that skill is not set up yet (specs/skill-auto-install.md).
9
+ *
10
+ * PDFs already get their text extracted inline by the Slack bridge; a hint is
11
+ * added only when that extraction failed or was cut short, so the agent is not
12
+ * told twice about content it already has.
13
+ *
14
+ * @module utils/inbound-file-hint.utils
15
+ */
16
+ /** File extensions treated as audio/video even when the MIME type is generic. */
17
+ export declare const AUDIO_VIDEO_EXTENSIONS: readonly ["m4a", "mp3", "wav", "aac", "ogg", "oga", "opus", "flac", "amr", "webm", "mp4", "m4v", "mov", "mkv", "caf"];
18
+ /** Marker the Slack bridge appends when it cuts extracted PDF text. */
19
+ export declare const EXTRACTED_TEXT_TRUNCATED_MARKER = "[truncated]";
20
+ /** The fields of an inbound file the hint needs. */
21
+ export interface InboundFile {
22
+ name: string;
23
+ mimetype: string;
24
+ localPath: string;
25
+ /** Text already extracted inline (PDFs) */
26
+ extractedText?: string;
27
+ }
28
+ /**
29
+ * Whether a file is audio or video.
30
+ *
31
+ * @param file - Inbound file
32
+ * @returns True for audio/* or video/* MIME types or a known extension
33
+ */
34
+ export declare function isAudioOrVideo(file: Pick<InboundFile, 'name' | 'mimetype'>): boolean;
35
+ /**
36
+ * Whether a file is a PDF.
37
+ *
38
+ * @param file - Inbound file
39
+ * @returns True for application/pdf or a .pdf name
40
+ */
41
+ export declare function isPdf(file: Pick<InboundFile, 'name' | 'mimetype'>): boolean;
42
+ /**
43
+ * The hint line for one inbound file, or null when none is needed.
44
+ *
45
+ * @param file - Inbound file
46
+ * @returns e.g. `[Hint: voice/audio or video file — transcribe it with the transcribe-audio skill …]`
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * inboundFileHint({ name: 'Audio Clip.m4a', mimetype: 'audio/mp4', localPath: '/tmp/a.m4a' });
51
+ * // '[Hint: voice/audio or video file — use the transcribe-audio skill: {"audioFile":"/tmp/a.m4a"} …]'
52
+ * ```
53
+ */
54
+ export declare function inboundFileHint(file: InboundFile): string | null;
55
+ //# sourceMappingURL=inbound-file-hint.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-file-hint.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/inbound-file-hint.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,uHAAwH,CAAC;AAE5J,uEAAuE;AACvE,eAAO,MAAM,+BAA+B,gBAAgB,CAAC;AAE7D,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAIpF;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAE3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAehE"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * One-line hints for files that arrive with a chat message.
3
+ *
4
+ * A Slack voice message reaches the agent as `[Slack File: /…/F123-Audio_Clip.m4a
5
+ * (audio/mp4, 214KB)]`. One agent knew to run `transcribe-audio`; another said
6
+ * "I can't transcribe audio" and stopped. The path alone does not say which
7
+ * skill reads the file, so the bridge adds a hint naming it — and what to do
8
+ * when that skill is not set up yet (specs/skill-auto-install.md).
9
+ *
10
+ * PDFs already get their text extracted inline by the Slack bridge; a hint is
11
+ * added only when that extraction failed or was cut short, so the agent is not
12
+ * told twice about content it already has.
13
+ *
14
+ * @module utils/inbound-file-hint.utils
15
+ */
16
+ /** File extensions treated as audio/video even when the MIME type is generic. */
17
+ export const AUDIO_VIDEO_EXTENSIONS = ['m4a', 'mp3', 'wav', 'aac', 'ogg', 'oga', 'opus', 'flac', 'amr', 'webm', 'mp4', 'm4v', 'mov', 'mkv', 'caf'];
18
+ /** Marker the Slack bridge appends when it cuts extracted PDF text. */
19
+ export const EXTRACTED_TEXT_TRUNCATED_MARKER = '[truncated]';
20
+ /**
21
+ * The file extension, lower-cased.
22
+ *
23
+ * @param name - File name
24
+ * @returns Extension without the dot ('' when none)
25
+ */
26
+ function extensionOf(name) {
27
+ const dot = name.lastIndexOf('.');
28
+ return dot >= 0 ? name.slice(dot + 1).toLowerCase() : '';
29
+ }
30
+ /**
31
+ * Whether a file is audio or video.
32
+ *
33
+ * @param file - Inbound file
34
+ * @returns True for audio/* or video/* MIME types or a known extension
35
+ */
36
+ export function isAudioOrVideo(file) {
37
+ const mime = (file.mimetype ?? '').toLowerCase();
38
+ if (mime.startsWith('audio/') || mime.startsWith('video/'))
39
+ return true;
40
+ return AUDIO_VIDEO_EXTENSIONS.includes(extensionOf(file.name ?? ''));
41
+ }
42
+ /**
43
+ * Whether a file is a PDF.
44
+ *
45
+ * @param file - Inbound file
46
+ * @returns True for application/pdf or a .pdf name
47
+ */
48
+ export function isPdf(file) {
49
+ return (file.mimetype ?? '').toLowerCase() === 'application/pdf' || extensionOf(file.name ?? '') === 'pdf';
50
+ }
51
+ /**
52
+ * The hint line for one inbound file, or null when none is needed.
53
+ *
54
+ * @param file - Inbound file
55
+ * @returns e.g. `[Hint: voice/audio or video file — transcribe it with the transcribe-audio skill …]`
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * inboundFileHint({ name: 'Audio Clip.m4a', mimetype: 'audio/mp4', localPath: '/tmp/a.m4a' });
60
+ * // '[Hint: voice/audio or video file — use the transcribe-audio skill: {"audioFile":"/tmp/a.m4a"} …]'
61
+ * ```
62
+ */
63
+ export function inboundFileHint(file) {
64
+ const pathJson = JSON.stringify(file.localPath);
65
+ if (isAudioOrVideo(file)) {
66
+ return (`[Hint: voice/audio or video file — use the transcribe-audio skill: {"audioFile":${pathJson}}. ` +
67
+ `If it answers "needsSetup": true, tell the user you are setting up transcription and run install-skill --id transcribe-audio — do not just say you cannot.]`);
68
+ }
69
+ if (isPdf(file)) {
70
+ const text = file.extractedText?.trim() ?? '';
71
+ if (text && !text.endsWith(EXTRACTED_TEXT_TRUNCATED_MARKER))
72
+ return null;
73
+ const why = text ? 'only the start of its text is included above' : 'its text could not be extracted here';
74
+ return `[Hint: PDF — ${why}; use the PDF reading skill (pdf-tools): {"action":"read","input":${pathJson}}.]`;
75
+ }
76
+ return null;
77
+ }
78
+ //# sourceMappingURL=inbound-file-hint.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-file-hint.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/inbound-file-hint.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE5J,uEAAuE;AACvE,MAAM,CAAC,MAAM,+BAA+B,GAAG,aAAa,CAAC;AAW7D;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAA4C;IAC1E,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,IAA4C;IACjE,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,iBAAiB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC;AAC5G,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,IAAiB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,CACN,mFAAmF,QAAQ,KAAK;YAChG,6JAA6J,CAC7J,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,sCAAsC,CAAC;QAC3G,OAAO,gBAAgB,GAAG,qEAAqE,QAAQ,KAAK,CAAC;IAC9G,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Finds the Crewly package root by walking up from the given directory,
3
+ * looking for a package.json with `"name": "crewly"`.
4
+ *
5
+ * This works correctly in both development mode (where source lives at backend/src/)
6
+ * and compiled/npm-installed mode (where code lives at dist/backend/backend/src/).
7
+ * The naive `path.resolve(__dirname, '../..')` approach breaks in compiled mode
8
+ * because the directory depth differs.
9
+ *
10
+ * @param startDir - Directory to start searching from (typically the caller's __dirname).
11
+ * @returns The absolute path to the package root directory.
12
+ * @throws Error if no matching package.json is found after reaching the filesystem root.
13
+ */
14
+ export declare function findPackageRoot(startDir: string): string;
15
+ //# sourceMappingURL=package-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-root.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/package-root.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwBxD"}
@@ -0,0 +1,38 @@
1
+ import path from 'path';
2
+ import { readFileSync, existsSync } from 'fs';
3
+ /**
4
+ * Finds the Crewly package root by walking up from the given directory,
5
+ * looking for a package.json with `"name": "crewly"`.
6
+ *
7
+ * This works correctly in both development mode (where source lives at backend/src/)
8
+ * and compiled/npm-installed mode (where code lives at dist/backend/backend/src/).
9
+ * The naive `path.resolve(__dirname, '../..')` approach breaks in compiled mode
10
+ * because the directory depth differs.
11
+ *
12
+ * @param startDir - Directory to start searching from (typically the caller's __dirname).
13
+ * @returns The absolute path to the package root directory.
14
+ * @throws Error if no matching package.json is found after reaching the filesystem root.
15
+ */
16
+ export function findPackageRoot(startDir) {
17
+ let current = path.resolve(startDir);
18
+ while (true) {
19
+ const pkgPath = path.join(current, 'package.json');
20
+ if (existsSync(pkgPath)) {
21
+ try {
22
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
23
+ if (pkg.name === 'crewly') {
24
+ return current;
25
+ }
26
+ }
27
+ catch {
28
+ // Malformed package.json — keep searching
29
+ }
30
+ }
31
+ const parent = path.dirname(current);
32
+ if (parent === current) {
33
+ throw new Error('Could not find Crewly package root (no package.json with name "crewly" found in any parent directory)');
34
+ }
35
+ current = parent;
36
+ }
37
+ }
38
+ //# sourceMappingURL=package-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-root.js","sourceRoot":"","sources":["../../../../../backend/src/utils/package-root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,OAAO,CAAC;gBAChB,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,0CAA0C;YAC3C,CAAC;QACF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACd,uGAAuG,CACvG,CAAC;QACH,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;AACF,CAAC"}
@@ -4,11 +4,23 @@
4
4
  * Installs skills from the Crewly marketplace. Supports installing a single
5
5
  * skill by ID or all agent skills with the --all flag.
6
6
  *
7
+ * A single install also runs the skill's setup block (system tools, models,
8
+ * Python packages — specs/skill-auto-install.md). A skill bundled with Crewly
9
+ * is not downloaded again; only its setup runs. `--all` skips setup (it would
10
+ * install every skill's dependencies); run `crewly skills setup <id>` for those.
11
+ *
7
12
  * @module cli/commands/install
8
13
  */
9
14
  interface InstallOptions {
10
15
  all?: boolean;
11
16
  }
17
+ /** Injectable dependencies (tests). */
18
+ export interface InstallDeps {
19
+ /** Where a skill lives on this machine: 'bundled', 'installed', or null */
20
+ localSource?: (id: string) => Promise<'bundled' | 'installed' | null>;
21
+ /** Run a skill's setup; returns the `crewly skills setup` exit code (0 ok, 1 failed, 2 not found) */
22
+ runSetup?: (id: string) => Promise<number>;
23
+ }
12
24
  /**
13
25
  * Installs a skill (or all skills) from the Crewly marketplace.
14
26
  *
@@ -18,6 +30,6 @@ interface InstallOptions {
18
30
  * @param id - Optional marketplace item ID to install
19
31
  * @param options - Command options (--all)
20
32
  */
21
- export declare function installCommand(id?: string, options?: InstallOptions): Promise<void>;
33
+ export declare function installCommand(id?: string, options?: InstallOptions, deps?: InstallDeps): Promise<void>;
22
34
  export {};
23
35
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzF"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;IACtE,qGAAqG;IACrG,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAaD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCjH"}
@@ -4,10 +4,27 @@
4
4
  * Installs skills from the Crewly marketplace. Supports installing a single
5
5
  * skill by ID or all agent skills with the --all flag.
6
6
  *
7
+ * A single install also runs the skill's setup block (system tools, models,
8
+ * Python packages — specs/skill-auto-install.md). A skill bundled with Crewly
9
+ * is not downloaded again; only its setup runs. `--all` skips setup (it would
10
+ * install every skill's dependencies); run `crewly skills setup <id>` for those.
11
+ *
7
12
  * @module cli/commands/install
8
13
  */
9
14
  import chalk from 'chalk';
10
15
  import { fetchRegistry, downloadAndInstall, formatBytes, } from '../utils/marketplace.js';
16
+ import { skillsSetupCommand } from './skills.js';
17
+ import { SkillDiscoveryService } from '../../../backend/src/services/skill-setup/skill-discovery.service.js';
18
+ /**
19
+ * Default: resolve with the local (offline) skill discovery.
20
+ *
21
+ * @param id - Skill id
22
+ * @returns Source or null
23
+ */
24
+ async function defaultLocalSource(id) {
25
+ const skill = await new SkillDiscoveryService().resolveLocal(id);
26
+ return skill && skill.source !== 'registry' ? skill.source : null;
27
+ }
11
28
  /**
12
29
  * Installs a skill (or all skills) from the Crewly marketplace.
13
30
  *
@@ -17,13 +34,23 @@ import { fetchRegistry, downloadAndInstall, formatBytes, } from '../utils/market
17
34
  * @param id - Optional marketplace item ID to install
18
35
  * @param options - Command options (--all)
19
36
  */
20
- export async function installCommand(id, options) {
37
+ export async function installCommand(id, options, deps = {}) {
38
+ const localSource = deps.localSource ?? defaultLocalSource;
39
+ const runSetup = deps.runSetup ?? ((skillId) => skillsSetupCommand(skillId));
21
40
  if (!id && !options?.all) {
22
41
  console.log(chalk.red('Please specify a skill ID or use --all to install all skills.'));
23
42
  console.log(chalk.gray('Example: crewly install skill-nano-banana'));
24
43
  console.log(chalk.gray(' crewly install --all'));
25
44
  process.exit(1);
26
45
  }
46
+ // A skill bundled with Crewly is already on disk: only its setup is missing.
47
+ if (id && !options?.all && (await localSource(id)) === 'bundled') {
48
+ console.log(chalk.blue(`${id} is bundled with Crewly — no download needed.`));
49
+ const code = await runSetup(id);
50
+ if (code !== 0)
51
+ process.exit(1);
52
+ return;
53
+ }
27
54
  try {
28
55
  console.log(chalk.blue('Fetching marketplace registry...'));
29
56
  const registry = await fetchRegistry();
@@ -32,7 +59,7 @@ export async function installCommand(id, options) {
32
59
  await installAll(registry.items);
33
60
  }
34
61
  else if (id) {
35
- await installSingle(id, registry.items);
62
+ await installSingle(id, registry.items, runSetup);
36
63
  }
37
64
  }
38
65
  catch (error) {
@@ -89,8 +116,9 @@ async function installAll(items) {
89
116
  *
90
117
  * @param id - The marketplace item ID
91
118
  * @param items - All registry items
119
+ * @param runSetup - Runs the installed skill's setup block
92
120
  */
93
- async function installSingle(id, items) {
121
+ async function installSingle(id, items, runSetup) {
94
122
  const item = items.find((i) => i.id === id);
95
123
  if (!item) {
96
124
  console.log(chalk.red(`Item "${id}" not found in the marketplace.`));
@@ -105,6 +133,15 @@ async function installSingle(id, items) {
105
133
  console.log(chalk.green(' ✓ Verified checksum'));
106
134
  }
107
135
  console.log(chalk.green(` ✓ ${result.message}`));
136
+ if (item.type === 'skill') {
137
+ // 2 = no local copy found to set up (nothing declared to run); 1 = setup failed.
138
+ const code = await runSetup(item.id);
139
+ if (code === 1) {
140
+ console.log(chalk.red(`\n${item.name} is installed, but its setup failed. Fix the problem above, then run: crewly skills setup ${item.id}`));
141
+ process.exitCode = 1;
142
+ return;
143
+ }
144
+ }
108
145
  console.log(chalk.green('\nDone!'));
109
146
  }
110
147
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../../cli/src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,GAEZ,MAAM,yBAAyB,CAAC;AAMjC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAW,EAAE,OAAwB;IACxE,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE7D,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,EAAE,EAAE,CAAC;YACd,MAAM,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,UAAU,CAAC,KAAwB;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;IAEzE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvE,SAAS,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC/D,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,SAAS,oBAAoB,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,SAAS,eAAe,MAAM,UAAU,CAAC,CAAC,CAAC;QAC7E,yDAAyD;QACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAC,EAAU,EAAE,KAAwB;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IAEjF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../../cli/src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `crewly skills setup <id> [--check]` — run (or check) a skill's setup block.
3
+ *
4
+ * Installs what the skill's `skill.json` → `setup` declares (system commands,
5
+ * files such as models, Python packages) with the same idempotent runner the
6
+ * backend uses for `install-skill` (specs/skill-auto-install.md). Works on
7
+ * bundled skills and marketplace skills already installed on this machine,
8
+ * without a running backend and without the network (except for what the
9
+ * setup itself downloads). The person at the terminal is the owner, so there
10
+ * is no trust gate here.
11
+ *
12
+ * @module cli/commands/skills
13
+ */
14
+ import { SkillDiscoveryService } from '../../../backend/src/services/skill-setup/skill-discovery.service.js';
15
+ import { SkillSetupRunner, type SetupProgressEvent } from '../../../backend/src/services/skill-setup/skill-setup-runner.service.js';
16
+ /** Options for `crewly skills setup`. */
17
+ export interface SkillsSetupOptions {
18
+ /** Only check; install nothing */
19
+ check?: boolean;
20
+ }
21
+ /** Injectable dependencies (tests). */
22
+ export interface SkillsCommandDeps {
23
+ discovery?: Pick<SkillDiscoveryService, 'resolveLocal'>;
24
+ runner?: Pick<SkillSetupRunner, 'runSetup'>;
25
+ log?: (line: string) => void;
26
+ }
27
+ /**
28
+ * Format one progress event as a terminal line (null = print nothing).
29
+ *
30
+ * @param event - Progress event
31
+ * @returns Line or null
32
+ */
33
+ export declare function formatProgress(event: SetupProgressEvent): string | null;
34
+ /**
35
+ * Run or check the setup of one skill on this machine.
36
+ *
37
+ * @param id - Skill id (or directory name)
38
+ * @param options - `--check` for a dry check
39
+ * @param deps - Injectable dependencies
40
+ * @returns Exit code: 0 ok, 1 failed/missing, 2 unknown skill
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * process.exitCode = await skillsSetupCommand('transcribe-audio', { check: true });
45
+ * ```
46
+ */
47
+ export declare function skillsSetupCommand(id: string, options?: SkillsSetupOptions, deps?: SkillsCommandDeps): Promise<number>;
48
+ /**
49
+ * `crewly skills <action> [id]` dispatcher.
50
+ *
51
+ * @param action - `setup` (with `--check` to only check) or `check`
52
+ * @param id - Skill id
53
+ * @param options - Command options
54
+ * @param deps - Injectable dependencies
55
+ * @returns Exit code
56
+ */
57
+ export declare function skillsCommand(action: string, id: string | undefined, options?: SkillsSetupOptions, deps?: SkillsCommandDeps): Promise<number>;
58
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,qBAAqB,EAAsB,MAAM,sEAAsE,CAAC;AACjI,OAAO,EACN,gBAAgB,EAChB,KAAK,kBAAkB,EAGvB,MAAM,yEAAyE,CAAC;AAEjF,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IAClC,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IACjC,SAAS,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAQvE;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCpI;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,kBAAuB,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAW3J"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * `crewly skills setup <id> [--check]` — run (or check) a skill's setup block.
3
+ *
4
+ * Installs what the skill's `skill.json` → `setup` declares (system commands,
5
+ * files such as models, Python packages) with the same idempotent runner the
6
+ * backend uses for `install-skill` (specs/skill-auto-install.md). Works on
7
+ * bundled skills and marketplace skills already installed on this machine,
8
+ * without a running backend and without the network (except for what the
9
+ * setup itself downloads). The person at the terminal is the owner, so there
10
+ * is no trust gate here.
11
+ *
12
+ * @module cli/commands/skills
13
+ */
14
+ import chalk from 'chalk';
15
+ import { SkillDiscoveryService } from '../../../backend/src/services/skill-setup/skill-discovery.service.js';
16
+ import { SkillSetupRunner, } from '../../../backend/src/services/skill-setup/skill-setup-runner.service.js';
17
+ /** Symbol + colour per final step status. */
18
+ const STATUS_STYLE = {
19
+ satisfied: (t) => chalk.green(` ✓ ${t}`),
20
+ installed: (t) => chalk.green(` ✓ ${t}`),
21
+ missing: (t) => chalk.yellow(` ✗ ${t}`),
22
+ failed: (t) => chalk.red(` ✗ ${t}`),
23
+ skipped: (t) => chalk.gray(` - ${t}`),
24
+ };
25
+ /**
26
+ * Format one progress event as a terminal line (null = print nothing).
27
+ *
28
+ * @param event - Progress event
29
+ * @returns Line or null
30
+ */
31
+ export function formatProgress(event) {
32
+ if (event.stepId === 'setup')
33
+ return event.phase === 'waiting' ? chalk.yellow(` … ${event.message}`) : null;
34
+ if (event.phase === 'checking')
35
+ return null;
36
+ if (event.phase === 'installing' || event.phase === 'downloading' || event.phase === 'waiting') {
37
+ return chalk.blue(` … ${event.stepId}: ${event.message}`);
38
+ }
39
+ const style = STATUS_STYLE[event.phase];
40
+ return style ? style(`${event.stepId} — ${event.message}`) : null;
41
+ }
42
+ /**
43
+ * Print a finished setup's summary.
44
+ *
45
+ * @param skill - The skill
46
+ * @param result - Setup result
47
+ * @param log - Line printer
48
+ */
49
+ function printSummary(skill, result, log) {
50
+ log('');
51
+ if (result.success) {
52
+ log(chalk.green(result.checkOnly ? `${skill.id}: everything is installed.` : `${skill.id} is set up (${Math.round(result.durationMs / 1000)}s).`));
53
+ }
54
+ else if (result.checkOnly) {
55
+ const missing = result.steps.filter((s) => s.status === 'missing' && !s.optional).map((s) => s.id);
56
+ log(chalk.yellow(`${skill.id}: missing ${missing.join(', ')}. Run: crewly skills setup ${skill.id}`));
57
+ }
58
+ else {
59
+ log(chalk.red(`${skill.id} setup failed: ${result.error ?? 'unknown error'}`));
60
+ }
61
+ if (result.logFile)
62
+ log(chalk.gray(`Log: ${result.logFile}`));
63
+ }
64
+ /**
65
+ * Run or check the setup of one skill on this machine.
66
+ *
67
+ * @param id - Skill id (or directory name)
68
+ * @param options - `--check` for a dry check
69
+ * @param deps - Injectable dependencies
70
+ * @returns Exit code: 0 ok, 1 failed/missing, 2 unknown skill
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * process.exitCode = await skillsSetupCommand('transcribe-audio', { check: true });
75
+ * ```
76
+ */
77
+ export async function skillsSetupCommand(id, options = {}, deps = {}) {
78
+ const log = deps.log ?? ((line) => console.log(line));
79
+ const discovery = deps.discovery ?? new SkillDiscoveryService();
80
+ const runner = deps.runner ?? new SkillSetupRunner();
81
+ const skill = await discovery.resolveLocal(id);
82
+ if (!skill) {
83
+ log(chalk.red(`Skill "${id}" is not on this machine.`));
84
+ log(chalk.gray(`Install it first: crewly install ${id} (or search: crewly search ${id})`));
85
+ return 2;
86
+ }
87
+ if (skill.manifestError) {
88
+ log(chalk.red(`${skill.id} has an invalid setup block: ${skill.manifestError}`));
89
+ return 1;
90
+ }
91
+ if (!skill.manifest) {
92
+ log(chalk.green(`${skill.id} declares no setup — nothing to install.`));
93
+ return 0;
94
+ }
95
+ const where = skill.source === 'bundled' ? 'bundled with Crewly' : skill.skillDir;
96
+ log(chalk.blue(`${options.check ? 'Checking' : 'Setting up'} ${skill.id} (${where})…`));
97
+ const result = await runner.runSetup({
98
+ skillId: skill.id,
99
+ skillDir: skill.skillDir ?? '',
100
+ manifest: skill.manifest,
101
+ checkOnly: options.check === true,
102
+ onProgress: (event) => {
103
+ const line = formatProgress(event);
104
+ if (line)
105
+ log(line);
106
+ },
107
+ });
108
+ printSummary(skill, result, log);
109
+ return result.success ? 0 : 1;
110
+ }
111
+ /**
112
+ * `crewly skills <action> [id]` dispatcher.
113
+ *
114
+ * @param action - `setup` (with `--check` to only check) or `check`
115
+ * @param id - Skill id
116
+ * @param options - Command options
117
+ * @param deps - Injectable dependencies
118
+ * @returns Exit code
119
+ */
120
+ export async function skillsCommand(action, id, options = {}, deps = {}) {
121
+ const log = deps.log ?? ((line) => console.log(line));
122
+ if (action !== 'setup' && action !== 'check') {
123
+ log(chalk.red(`Unknown action "${action}". Use: crewly skills setup <id> [--check]`));
124
+ return 2;
125
+ }
126
+ if (!id) {
127
+ log(chalk.red('Please give a skill id, e.g. crewly skills setup transcribe-audio'));
128
+ return 2;
129
+ }
130
+ return skillsSetupCommand(id, { check: action === 'check' || options.check === true }, deps);
131
+ }
132
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../../cli/src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { statusCommand } from './commands/status.js';
9
9
  import { logsCommand } from './commands/logs.js';
10
10
  import { upgradeCommand } from './commands/upgrade.js';
11
11
  import { installCommand } from './commands/install.js';
12
+ import { skillsCommand } from './commands/skills.js';
12
13
  import { searchCommand } from './commands/search.js';
13
14
  import { onboardCommand } from './commands/onboard.js';
14
15
  import { harnessCommand, loginCommand as harnessLoginCommand } from './commands/harness.js';
@@ -77,9 +78,17 @@ program
77
78
  .action(upgradeCommand);
78
79
  program
79
80
  .command('install [id]')
80
- .description('Install a skill from the Crewly marketplace')
81
- .option('--all', 'Install all agent skills')
82
- .action(installCommand);
81
+ .description('Install a skill from the Crewly marketplace and run its setup (tools, models, Python packages)')
82
+ .option('--all', 'Install all agent skills (without their setup)')
83
+ // Explicit arity: commander appends the Command object, which must not land in `deps`.
84
+ .action((id, options) => installCommand(id, options));
85
+ program
86
+ .command('skills <action> [id]')
87
+ .description('Skill setup: `crewly skills setup <id>` installs what a skill needs (tools, models, Python packages); add --check to only check')
88
+ .option('--check', 'Only check what is installed; change nothing')
89
+ .action(async (action, id, options) => {
90
+ process.exitCode = await skillsCommand(action, id, options);
91
+ });
83
92
  program
84
93
  .command('search [query]')
85
94
  .description('Search the Crewly skill marketplace')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli/src/index.ts"],"names":[],"mappings":"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"}