@crewx/skill 0.1.20-rc.7 → 0.1.20-rc.70

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.
package/README.md CHANGED
@@ -3,5 +3,5 @@
3
3
  Unified skill runner for CrewX - exec and doc skills.
4
4
 
5
5
  ```bash
6
- npx skill list
6
+ crewx skill list
7
7
  ```
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  #!/usr/bin/env node
2
- export declare function main(inputArgs?: string[]): Promise<void>;
3
- //# sourceMappingURL=cli.d.ts.map
2
+ export interface SkillCliContext {
3
+ readonly productPackageRoot?: string;
4
+ }
5
+ export declare function main(inputArgs?: string[], context?: SkillCliContext): Promise<void>;
6
+
package/dist/cli.js CHANGED
@@ -1,92 +1,6 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.main = main;
38
- const fs = __importStar(require("fs"));
39
- const path = __importStar(require("path"));
40
- const engine_1 = require("./src/engine");
41
- let PKG_VERSION = 'unknown';
42
- try {
43
- const _pkgPath = fs.existsSync(path.join(__dirname, 'package.json'))
44
- ? path.join(__dirname, 'package.json')
45
- : path.join(__dirname, '..', 'package.json');
46
- const _pkg = JSON.parse(fs.readFileSync(_pkgPath, 'utf-8'));
47
- if (_pkg?.version)
48
- PKG_VERSION = String(_pkg.version);
49
- }
50
- catch { }
51
- async function loadTracer() {
52
- try {
53
- return await Promise.resolve().then(() => __importStar(require('@crewx/shared/skill-tracer')));
54
- }
55
- catch {
56
- return null;
57
- }
58
- }
59
- function showDetailedUsage() {
60
- const skillMd = path.join(__dirname, '..', 'SKILL.md');
61
- if (fs.existsSync(skillMd)) {
62
- process.stdout.write(fs.readFileSync(skillMd, 'utf-8'));
63
- }
64
- else {
65
- printUsage();
66
- }
67
- }
68
- function findProjectRoot() {
69
- let dir = process.cwd();
70
- while (dir !== path.dirname(dir)) {
71
- if (fs.existsSync(path.join(dir, 'crewx.yaml')) ||
72
- fs.existsSync(path.join(dir, 'skills'))) {
73
- return dir;
74
- }
75
- dir = path.dirname(dir);
76
- }
77
- return process.cwd();
78
- }
79
- function getAdditionalPaths(projectRoot) {
80
- const paths = [];
81
- const nmDir = path.join(projectRoot, 'node_modules');
82
- if (fs.existsSync(nmDir)) {
83
- paths.push(nmDir);
84
- }
85
- return paths;
86
- }
87
- function printUsage() {
88
- console.log(`
89
- @crewx/skill@${PKG_VERSION} - Unified skill runner for CrewX
2
+ "use strict";var P=exports&&exports.__createBinding||(Object.create?(function(e,n,s,t){if(t===void 0)t=s;var r=Object.getOwnPropertyDescriptor(n,s);if(!r||("get"in r?!n.__esModule:r.writable||r.configurable)){r={enumerable:true,get:function(){return n[s]}}}Object.defineProperty(e,t,r)}):(function(e,n,s,t){if(t===void 0)t=s;e[t]=n[s]}));var $=exports&&exports.__setModuleDefault||(Object.create?(function(e,n){Object.defineProperty(e,"default",{enumerable:true,value:n})}):function(e,n){e["default"]=n});var _=exports&&exports.__importStar||(function(){var e=function(n){e=Object.getOwnPropertyNames||function(s){var t=[];for(var r in s)if(Object.prototype.hasOwnProperty.call(s,r))t[t.length]=r;return t};return e(n)};return function(n){if(n&&n.__esModule)return n;var s={};if(n!=null){for(var t=e(n),r=0;r<t.length;r++)if(t[r]!=="default")P(s,n,t[r])}$(s,n);return s}})();Object.defineProperty(exports,"__esModule",{value:true});exports.main=y;const p=_(require("fs"));const d=_(require("path"));const D=require("./src/engine");const C=require("./src/product-bundle");let k="unknown";try{const e=p.existsSync(d.join(__dirname,"package.json"))?d.join(__dirname,"package.json"):d.join(__dirname,"..","package.json");const n=JSON.parse(p.readFileSync(e,"utf-8"));if(n?.version)k=String(n.version)}catch{}async function j(){try{return await Promise.resolve().then(()=>_(require("@crewx/shared/skill-tracer")))}catch{return null}}function N(){const e=d.join(__dirname,"..","SKILL.md");if(p.existsSync(e)){process.stdout.write(p.readFileSync(e,"utf-8"))}else{v()}}function M(){let e=process.cwd();while(e!==d.dirname(e)){if(p.existsSync(d.join(e,"crewx.yaml"))||p.existsSync(d.join(e,"skills"))){return e}e=d.dirname(e)}return process.cwd()}function R(e){const n=[];const s=d.join(e,"node_modules");if(p.existsSync(s)){n.push(s)}return n}function v(){console.log(`
3
+ @crewx/skill@${k} - Unified skill runner for CrewX
90
4
 
91
5
  Usage:
92
6
  skill <command> [options]
@@ -108,133 +22,4 @@ Examples:
108
22
  skill develop DELEGATE
109
23
 
110
24
  For detailed usage guide: skill usage
111
- `);
112
- }
113
- function printList(engine) {
114
- const skills = engine.discover();
115
- if (skills.length === 0) {
116
- console.log('No skills found.');
117
- return;
118
- }
119
- const maxName = Math.max(...skills.map(s => s.name.length), 4);
120
- const maxType = 4;
121
- console.log(`${'NAME'.padEnd(maxName)} ${'TYPE'.padEnd(maxType)} ${'VERSION'.padEnd(7)} DESCRIPTION`);
122
- console.log(`${'─'.repeat(maxName)} ${'─'.repeat(maxType)} ${'─'.repeat(7)} ${'─'.repeat(40)}`);
123
- for (const s of skills) {
124
- console.log(`${s.name.padEnd(maxName)} ${s.type.padEnd(maxType)} ${(s.version ?? '-').padEnd(7)} ${s.description}`);
125
- }
126
- }
127
- async function main(inputArgs) {
128
- const args = inputArgs ?? process.argv.slice(2);
129
- const command = args[0];
130
- const projectRoot = findProjectRoot();
131
- const engine = new engine_1.SkillEngine(projectRoot, getAdditionalPaths(projectRoot));
132
- const tracer = await loadTracer();
133
- const argv = args.join(' ');
134
- if (command === '--version') {
135
- console.log(PKG_VERSION);
136
- return;
137
- }
138
- if (!command || command === '--help' || command === '-h') {
139
- printUsage();
140
- return;
141
- }
142
- if (command === 'usage') {
143
- showDetailedUsage();
144
- return;
145
- }
146
- if (command === 'help') {
147
- printUsage();
148
- return;
149
- }
150
- if (command === 'list') {
151
- printList(engine);
152
- return;
153
- }
154
- const skillName = command;
155
- const skillArgs = args.slice(1);
156
- let skill;
157
- try {
158
- skill = engine.resolve(skillName);
159
- }
160
- catch (err) {
161
- console.error(`Error: ${err.message}`);
162
- process.exitCode = 1;
163
- return;
164
- }
165
- if (skillArgs.length === 0) {
166
- const opts = { tracesDb: true };
167
- if (skill.version)
168
- opts.skillVersion = skill.version;
169
- const spanName = skill.name;
170
- const t = tracer ? tracer.trace(spanName, argv, opts) : null;
171
- const doc = engine.readDoc(skill);
172
- process.stdout.write(doc);
173
- engine.log(skill, skillArgs, 0);
174
- if (t && !t._skipped)
175
- t.ok(doc);
176
- return;
177
- }
178
- if (skill.type === 'exec' && skill.entrypoint) {
179
- const commandStr = skillArgs.join(' ');
180
- const opts = { tracesDb: true };
181
- if (skill.version)
182
- opts.skillVersion = skill.version;
183
- const spanName = skill.name;
184
- const t = tracer
185
- ? tracer.trace(spanName, commandStr, opts)
186
- : null;
187
- try {
188
- const result = await engine.execute(skill, skillArgs);
189
- engine.log(skill, skillArgs, result.exitCode);
190
- if (result.exitCode === 0) {
191
- if (t && !t._skipped)
192
- t.ok(result.stdout, { stderr: result.stderr });
193
- }
194
- else {
195
- if (t && !t._skipped)
196
- t.fail('exit ' + result.exitCode, { stderr: result.stderr });
197
- }
198
- process.exitCode = result.exitCode;
199
- return;
200
- }
201
- catch (e) {
202
- if (t && !t._skipped)
203
- t.fail(e.message || String(e));
204
- engine.log(skill, skillArgs, 1);
205
- process.exitCode = 1;
206
- return;
207
- }
208
- }
209
- const subDoc = skillArgs[0];
210
- const opts = { tracesDb: true };
211
- if (skill.version)
212
- opts.skillVersion = skill.version;
213
- const spanName = skill.name;
214
- const t = tracer ? tracer.trace(spanName, argv, opts) : null;
215
- try {
216
- const doc = engine.readDoc(skill, subDoc);
217
- process.stdout.write(doc);
218
- engine.log(skill, skillArgs, 0);
219
- if (t && !t._skipped)
220
- t.ok(doc);
221
- return;
222
- }
223
- catch (err) {
224
- if (t && !t._skipped)
225
- t.fail(err.message);
226
- engine.log(skill, skillArgs, 1);
227
- process.exitCode = 1;
228
- return;
229
- }
230
- }
231
- if (require.main === module) {
232
- loadTracer().then(tracer => {
233
- const opts = tracer ? { skillVersion: tracer.getOwnSkillVersion(__dirname) } : {};
234
- return tracer ? tracer.run('crewx/skill', () => main(), opts) : main();
235
- }).catch((err) => {
236
- console.error(`Error: ${err.message}`);
237
- process.exit(1);
238
- });
239
- }
240
- //# sourceMappingURL=cli.js.map
25
+ `)}function V(e){const n=e.discover();if(n.length===0){console.log("No skills found.");return}const s=Math.max(...n.map(r=>r.name.length),4);const t=4;console.log(`${"NAME".padEnd(s)} ${"TYPE".padEnd(t)} ${"VERSION".padEnd(7)} DESCRIPTION`);console.log(`${"\u2500".repeat(s)} ${"\u2500".repeat(t)} ${"\u2500".repeat(7)} ${"\u2500".repeat(40)}`);for(const r of n){console.log(`${r.name.padEnd(s)} ${r.type.padEnd(t)} ${(r.version??"-").padEnd(7)} ${r.description}`)}}async function y(e,n={}){const s=e??process.argv.slice(2);const t=s[0];const r=M();const f=await j();const w=s.join(" ");if(t==="--version"){console.log(k);return}if(!t||t==="--help"||t==="-h"){v();return}if(t==="usage"){N();return}if(t==="help"){v();return}const S=(0,C.resolveProductAppBundleInput)(n.productPackageRoot);const c=await D.SkillEngine.create(r,R(r),S.input,S.diagnostic);for(const o of c.getBundleDiagnostics()){console.error(`[skill] Verified product bundle skill discovery failed (${o.code}): ${o.relativePath}`)}if(t==="list"){V(c);return}const x=t;const u=s.slice(1);let i;try{i=c.resolve(x)}catch(o){console.error(`Error: ${o.message}`);process.exitCode=1;return}if(u.length===0){const o={tracesDb:true};if(i.version)o.skillVersion=i.version;const h=i.name;const m=f?f.trace(h,w,o):null;const l=c.readDoc(i);process.stdout.write(l);c.log(i,u,0);if(m&&!m._skipped)m.ok(l);return}if(i.type==="exec"&&i.entrypoint){const o=u.join(" ");const h={tracesDb:true};if(i.version)h.skillVersion=i.version;const m=i.name;const l=f?f.trace(m,o,h):null;try{const a=await c.execute(i,u);c.log(i,u,a.exitCode);if(a.exitCode===0){if(l&&!l._skipped)l.ok(a.stdout,{stderr:a.stderr})}else{if(l&&!l._skipped)l.fail("exit "+a.exitCode,{stderr:a.stderr})}process.exitCode=a.exitCode;return}catch(a){if(l&&!l._skipped)l.fail(a.message||String(a));c.log(i,u,1);process.exitCode=1;return}}const E=u[0];const b={tracesDb:true};if(i.version)b.skillVersion=i.version;const O=i.name;const g=f?f.trace(O,w,b):null;try{const o=c.readDoc(i,E);process.stdout.write(o);c.log(i,u,0);if(g&&!g._skipped)g.ok(o);return}catch(o){if(g&&!g._skipped)g.fail(o.message);c.log(i,u,1);process.exitCode=1;return}}if(require.main===module){j().then(e=>{const n=e?{skillVersion:e.getOwnSkillVersion(__dirname)}:{};return e?e.run("crewx/skill",()=>y(),n):y()}).catch(e=>{console.error(`Error: ${e.message}`);process.exit(1)})}
@@ -0,0 +1,6 @@
1
+ import { TaskRepository } from '@crewx/sdk/repository';
2
+ type TaskLookup = Pick<TaskRepository, 'getTask'>;
3
+ export type TaskRepositoryFactory = () => TaskLookup;
4
+ export declare function resolveCurrentTaskThreadId(env?: NodeJS.ProcessEnv, repositoryFactory?: TaskRepositoryFactory): string | undefined;
5
+ export {};
6
+
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.resolveCurrentTaskThreadId=s;const i=require("@crewx/sdk/repository");function s(t=process.env,r=()=>new i.TaskRepository){const n=t.CREWX_TASK_ID?.trim();const u=t.CREWX_AGENT_ID?.trim();if(!n||!u)return void 0;try{const e=r().getTask(n);if(!e||e.id!==n||e.agent_id!==u||e.status!=="running")return void 0;if(typeof e.thread_id!=="string"||!a(e.thread_id))return void 0;const d=t.CREWX_THREAD_ID;if(d&&d!==e.thread_id)return void 0;return e.thread_id}catch{return void 0}}function a(t){const r=Buffer.byteLength(t,"utf8");return r>=1&&r<=512&&!/[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u.test(t)}
@@ -1,21 +1,37 @@
1
+ import { type BundledSkillDiscoveryResult, type ProductAppBundleInput } from '@crewx/sdk/skills';
1
2
  import { SkillInfo } from './types';
3
+ export interface SkillEngineOptions {
4
+ readonly productBundle?: ProductAppBundleInput;
5
+ readonly bundleUnavailableDiagnostic?: string;
6
+ readonly bundledSkills?: BundledSkillDiscoveryResult['skills'];
7
+ readonly bundleDiagnostics?: BundledSkillDiscoveryResult['diagnostics'];
8
+ readonly taskThreadResolver?: () => string | undefined;
9
+ }
2
10
  export declare class SkillEngine {
3
11
  private skillsDir;
4
12
  private projectRoot;
5
13
  private additionalPaths;
6
- constructor(projectRoot: string, additionalPaths?: string[]);
14
+ private readonly productBundle?;
15
+ private readonly bundleUnavailableDiagnostic?;
16
+ private readonly bundledSkills;
17
+ private readonly bundleDiagnostics;
18
+ private readonly taskThreadResolver;
19
+ constructor(projectRoot: string, additionalPaths?: string[], options?: SkillEngineOptions);
20
+ static create(projectRoot: string, additionalPaths?: string[], productBundle?: ProductAppBundleInput, bundleUnavailableDiagnostic?: string): Promise<SkillEngine>;
7
21
  private getSearchDirs;
8
22
  discover(): SkillInfo[];
9
23
  resolve(name: string): SkillInfo;
24
+ getBundleDiagnostics(): BundledSkillDiscoveryResult['diagnostics'];
25
+ private warnShadowedWorkspaceSkills;
10
26
  private toSkillInfo;
11
27
  execute(skill: SkillInfo, args: string[]): Promise<{
12
28
  exitCode: number;
13
29
  stdout: string;
14
30
  stderr: string;
15
31
  }>;
32
+ private failExecution;
16
33
  readDoc(skill: SkillInfo, subDoc?: string): string;
17
34
  log(skill: SkillInfo, args: string[], exitCode: number): void;
18
- private findEntrypoint;
19
35
  }
20
36
  export { SkillInfo, SkillType, SkillLogEntry } from './types';
21
- //# sourceMappingURL=engine.d.ts.map
37
+
@@ -1,173 +1,3 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SkillEngine = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const child_process_1 = require("child_process");
40
- const skills_1 = require("@crewx/sdk/skills");
41
- const SKILL_MD = 'SKILL.md';
42
- const ENTRY_CANDIDATES = ['index.js', 'main.js'];
43
- const LOG_FILE = '.crewx/.skill-log.jsonl';
44
- class SkillEngine {
45
- constructor(projectRoot, additionalPaths) {
46
- this.projectRoot = projectRoot;
47
- this.skillsDir = path.join(projectRoot, 'skills');
48
- this.additionalPaths = additionalPaths ?? [];
49
- }
50
- getSearchDirs() {
51
- return [this.skillsDir, ...this.additionalPaths, path.join(this.projectRoot, 'apps')];
52
- }
53
- discover() {
54
- return (0, skills_1.discover)(this.getSearchDirs()).map((skill) => this.toSkillInfo(skill));
55
- }
56
- resolve(name) {
57
- return this.toSkillInfo((0, skills_1.resolve)(name, this.getSearchDirs()));
58
- }
59
- toSkillInfo(skill) {
60
- const entrypoint = this.findEntrypoint(skill.dir, path.basename(skill.dir));
61
- return {
62
- name: skill.name,
63
- type: entrypoint ? 'exec' : 'doc',
64
- description: skill.description ?? '',
65
- version: skill.version,
66
- dir: skill.dir,
67
- entrypoint,
68
- skillMdPath: skill.skillMdPath,
69
- };
70
- }
71
- execute(skill, args) {
72
- if (!skill.entrypoint) {
73
- throw new Error(`Skill '${skill.name}' has no entrypoint`);
74
- }
75
- return new Promise((resolve) => {
76
- const child = (0, child_process_1.spawn)('node', [skill.entrypoint, ...args], {
77
- cwd: this.projectRoot,
78
- stdio: ['inherit', 'pipe', 'pipe'],
79
- env: process.env,
80
- });
81
- const stdoutChunks = [];
82
- const stderrChunks = [];
83
- child.stdout?.on('data', (chunk) => {
84
- stdoutChunks.push(chunk);
85
- process.stdout.write(chunk);
86
- });
87
- child.stderr?.on('data', (chunk) => {
88
- stderrChunks.push(chunk);
89
- process.stderr.write(chunk);
90
- });
91
- child.on('error', (err) => {
92
- console.error(`Error spawning skill '${skill.name}': ${err.message}`);
93
- resolve({
94
- exitCode: 1,
95
- stdout: Buffer.concat(stdoutChunks).toString('utf-8'),
96
- stderr: Buffer.concat(stderrChunks).toString('utf-8'),
97
- });
98
- });
99
- child.on('close', (code) => {
100
- resolve({
101
- exitCode: code ?? 1,
102
- stdout: Buffer.concat(stdoutChunks).toString('utf-8'),
103
- stderr: Buffer.concat(stderrChunks).toString('utf-8'),
104
- });
105
- });
106
- });
107
- }
108
- readDoc(skill, subDoc) {
109
- let filePath;
110
- if (subDoc) {
111
- filePath = path.join(skill.dir, `${subDoc}.md`);
112
- if (!fs.existsSync(filePath)) {
113
- throw new Error(`Document not found: ${subDoc}.md in skill '${skill.name}'`);
114
- }
115
- }
116
- else {
117
- filePath = skill.skillMdPath ?? path.join(skill.dir, SKILL_MD);
118
- }
119
- return fs.readFileSync(filePath, 'utf-8');
120
- }
121
- log(skill, args, exitCode) {
122
- const logPath = path.join(this.projectRoot, LOG_FILE);
123
- const logDir = path.dirname(logPath);
124
- if (!fs.existsSync(logDir)) {
125
- fs.mkdirSync(logDir, { recursive: true });
126
- }
127
- const entry = {
128
- ts: new Date().toISOString(),
129
- agent: process.env.CREWX_AGENT_ID || 'unknown',
130
- skill: skill.name,
131
- args,
132
- exit: exitCode,
133
- type: skill.type,
134
- };
135
- fs.appendFileSync(logPath, JSON.stringify(entry) + '\n');
136
- }
137
- findEntrypoint(dir, skillName) {
138
- const pkgPath = path.join(dir, 'package.json');
139
- if (fs.existsSync(pkgPath)) {
140
- try {
141
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
142
- if (pkg.bin) {
143
- const binValue = typeof pkg.bin === 'string'
144
- ? pkg.bin
145
- : Object.values(pkg.bin)[0];
146
- if (binValue) {
147
- const resolved = path.resolve(dir, binValue);
148
- if (fs.existsSync(resolved))
149
- return resolved;
150
- }
151
- }
152
- if (pkg.main) {
153
- const resolved = path.resolve(dir, pkg.main);
154
- if (fs.existsSync(resolved))
155
- return resolved;
156
- }
157
- }
158
- catch {
159
- }
160
- }
161
- const namedJs = path.join(dir, `${skillName}.js`);
162
- if (fs.existsSync(namedJs))
163
- return namedJs;
164
- for (const candidate of ENTRY_CANDIDATES) {
165
- const candidatePath = path.join(dir, candidate);
166
- if (fs.existsSync(candidatePath))
167
- return candidatePath;
168
- }
169
- return undefined;
170
- }
171
- }
172
- exports.SkillEngine = SkillEngine;
173
- //# sourceMappingURL=engine.js.map
1
+ "use strict";var p=exports&&exports.__createBinding||(Object.create?(function(i,e,n,t){if(t===void 0)t=n;var r=Object.getOwnPropertyDescriptor(e,n);if(!r||("get"in r?!e.__esModule:r.writable||r.configurable)){r={enumerable:true,get:function(){return e[n]}}}Object.defineProperty(i,t,r)}):(function(i,e,n,t){if(t===void 0)t=n;i[t]=e[n]}));var S=exports&&exports.__setModuleDefault||(Object.create?(function(i,e){Object.defineProperty(i,"default",{enumerable:true,value:e})}):function(i,e){i["default"]=e});var f=exports&&exports.__importStar||(function(){var i=function(e){i=Object.getOwnPropertyNames||function(n){var t=[];for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r))t[t.length]=r;return t};return i(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null){for(var t=i(e),r=0;r<t.length;r++)if(t[r]!=="default")p(n,e,t[r])}S(n,e);return n}})();Object.defineProperty(exports,"__esModule",{value:true});exports.SkillEngine=void 0;const u=f(require("fs"));const a=f(require("path"));const g=require("child_process");const l=require("@crewx/sdk/skills");const b=require("./current-task");const v="SKILL.md";const w=".crewx/.skill-log.jsonl";class h{constructor(e,n,t={}){this.projectRoot=e;this.skillsDir=a.join(e,"skills");this.additionalPaths=n??[];this.productBundle=t.productBundle;this.bundleUnavailableDiagnostic=t.bundleUnavailableDiagnostic;this.bundleDiagnostics=t.bundleDiagnostics??[];this.bundledSkills=(t.bundledSkills??[]).map(r=>this.toSkillInfo(r,"bundled"));this.taskThreadResolver=t.taskThreadResolver??(()=>(0,b.resolveCurrentTaskThreadId)())}static async create(e,n=[],t,r){if(!t){return new h(e,n,{bundleUnavailableDiagnostic:r})}const s=await(0,l.discoverBundledProductSkills)(t);return new h(e,n,{productBundle:t,bundledSkills:s.skills,bundleDiagnostics:s.diagnostics})}getSearchDirs(){return[this.skillsDir,...this.additionalPaths,a.join(this.projectRoot,"apps")]}discover(){const e=(0,l.discover)(this.getSearchDirs());this.warnShadowedWorkspaceSkills(e);const n=new Set(this.bundledSkills.map(t=>t.name));return[...this.bundledSkills,...e.filter(t=>!n.has(t.name)).map(t=>this.toSkillInfo(t))].sort((t,r)=>t.name.localeCompare(r.name))}resolve(e){const n=this.bundledSkills.find(t=>t.name===e);if(n){const t=(0,l.discover)(this.getSearchDirs());this.warnShadowedWorkspaceSkills(t,new Set([e]));return n}try{return this.toSkillInfo((0,l.resolve)(e,this.getSearchDirs()))}catch(t){if(this.bundleUnavailableDiagnostic&&m(t)){throw new Error(`${t.message}
2
+ ${this.bundleUnavailableDiagnostic}`)}throw t}}getBundleDiagnostics(){return this.bundleDiagnostics}warnShadowedWorkspaceSkills(e,n){const t=new Set(this.bundledSkills.map(r=>r.name));for(const r of e){if(!t.has(r.name)||n&&!n.has(r.name))continue;console.error(`[skill] Workspace skill '${r.name}' is shadowed by a verified product bundle skill; using the bundled version.`)}}toSkillInfo(e,n){const t=(0,l.findEntrypoint)(e.dir,a.basename(e.dir));return{name:e.name,type:t?"exec":"doc",description:e.description??"",version:e.version,dir:e.dir,entrypoint:t,skillMdPath:e.skillMdPath,...n===void 0?{}:{source:n}}}async execute(e,n){if(!e.entrypoint){throw new Error(`Skill '${e.name}' has no entrypoint`)}let t=process.env;if(e.source==="bundled"){if(!this.productBundle)return this.failExecution("BUNDLE_INTEGRITY");try{const d=await(0,l.discoverBundledProductSkills)(this.productBundle);const c=d.skills.find(o=>o.name===e.name&&o.dir===e.dir);if(!c||(0,l.findEntrypoint)(c.dir,a.basename(c.dir))!==e.entrypoint){return this.failExecution("BUNDLE_INTEGRITY")}}catch{return this.failExecution("BUNDLE_INTEGRITY")}const r=_(n);const s=r?void 0:this.taskThreadResolver();t={...process.env};delete t.CREWX_THREAD_ID;if(!r&&s)t.CREWX_THREAD_ID=s;if(this.projectRoot)t.CREWX_WORKSPACE_ROOT=this.projectRoot;else delete t.CREWX_WORKSPACE_ROOT}return new Promise(r=>{const s=(0,g.spawn)("node",[e.entrypoint,...n],{cwd:this.projectRoot,stdio:["inherit","pipe","pipe"],env:t});const d=[];const c=[];s.stdout?.on("data",o=>{d.push(o);process.stdout.write(o)});s.stderr?.on("data",o=>{c.push(o);process.stderr.write(o)});s.on("error",o=>{console.error(`Error spawning skill '${e.name}': ${o.message}`);r({exitCode:1,stdout:Buffer.concat(d).toString("utf-8"),stderr:Buffer.concat(c).toString("utf-8")})});s.on("close",o=>{r({exitCode:o??1,stdout:Buffer.concat(d).toString("utf-8"),stderr:Buffer.concat(c).toString("utf-8")})})})}failExecution(e){const n=`${e}
3
+ `;process.stderr.write(n);return{exitCode:1,stdout:"",stderr:n}}readDoc(e,n){let t;if(n){t=a.join(e.dir,`${n}.md`);if(!u.existsSync(t)){throw new Error(`Document not found: ${n}.md in skill '${e.name}'`)}}else{t=e.skillMdPath??a.join(e.dir,v)}return u.readFileSync(t,"utf-8")}log(e,n,t){const r=a.join(this.projectRoot,w);const s=a.dirname(r);if(!u.existsSync(s)){u.mkdirSync(s,{recursive:true})}const d={ts:new Date().toISOString(),agent:process.env.CREWX_AGENT_ID||"unknown",skill:e.name,args:n,exit:t,type:e.type};u.appendFileSync(r,JSON.stringify(d)+"\n")}}exports.SkillEngine=h;function _(i){for(let e=0;e<i.length;e+=1){const n=i[e]??"";if(n.startsWith("--thread=")&&n.slice("--thread=".length).trim().length>0)return true;if(n==="--thread"&&(i[e+1]?.trim().length??0)>0)return true}return false}function m(i){return i instanceof Error&&i.message.startsWith("Skill not found:")}
@@ -0,0 +1,7 @@
1
+ import type { ProductAppBundleInput } from '@crewx/sdk/skills';
2
+ export interface ProductAppBundleResolution {
3
+ readonly input?: ProductAppBundleInput;
4
+ readonly diagnostic?: string;
5
+ }
6
+ export declare function resolveProductAppBundleInput(productPackageRoot?: string): ProductAppBundleResolution;
7
+
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.resolveProductAppBundleInput=I;const l=require("node:fs");const p=require("node:module");const d=require("node:path");const a=(0,d.join)("dist-server","common","product-app-bundle.js");const f=/^[a-f0-9]{64}$/;function I(n){if(typeof n!=="string"||n.trim().length===0){return{diagnostic:"PRODUCT_ROOT_UNAVAILABLE: verified bundled skills could not be checked because the running CrewX CLI product root is unavailable."}}const r=(0,d.resolve)(n);const s=(0,d.join)(r,a);if(!(0,l.existsSync)(s)){return{diagnostic:"PRODUCT_BUNDLE_HELPER_UNAVAILABLE: verified bundled skills could not be checked because the compiled product helper is missing."}}try{const e=(0,p.createRequire)(s)(s);const t=e.getProductAppBundleInput?.();if(!h(t)){return{diagnostic:"PRODUCT_BUNDLE_PIN_INVALID: verified bundled skills could not be checked because the compiled product helper did not provide a valid bundle root and hash pin."}}return{input:Object.freeze({root:t.root,expectedIndexHash:t.expectedIndexHash,reservedIds:Object.freeze({appIds:Object.freeze([...t.reservedIds.appIds]),definitionIds:Object.freeze([...t.reservedIds.definitionIds])})})}}catch{return{diagnostic:"PRODUCT_BUNDLE_HELPER_UNAVAILABLE: verified bundled skills could not be checked because the compiled product helper could not be loaded."}}}function h(n){if(n===null||typeof n!=="object"||Array.isArray(n))return false;const r=n;const s=r.root===null||typeof r.root==="string"&&r.root.length>0;const e=r.reservedIds;if(!s||typeof r.expectedIndexHash!=="string"||!f.test(r.expectedIndexHash)||e===void 0||e===null||typeof e!=="object"||Array.isArray(e))return false;const t=Reflect.ownKeys(e);const u=t.length===2&&t.includes("appIds")&&t.includes("definitionIds");const o=i=>Array.isArray(i)&&i.every(c=>typeof c==="string"&&c.length>0);return u&&o(e.appIds)&&o(e.definitionIds)}
@@ -2,6 +2,7 @@ export type SkillType = 'exec' | 'doc';
2
2
  export interface SkillInfo {
3
3
  name: string;
4
4
  type: SkillType;
5
+ source?: 'bundled';
5
6
  description: string;
6
7
  version?: string;
7
8
  dir: string;
@@ -24,4 +25,4 @@ export interface SkillSource {
24
25
  treeSha: string;
25
26
  installedAt: string;
26
27
  }
27
- //# sourceMappingURL=types.d.ts.map
28
+
package/dist/src/types.js CHANGED
@@ -1,3 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@crewx/skill",
3
- "version": "0.1.20-rc.7",
4
- "description": "Unified skill runner for CrewX - exec and doc skills via npx skill",
3
+ "version": "0.1.20-rc.70",
4
+ "description": "Unified skill runner for CrewX - exec and doc skills via crewx skill",
5
5
  "type": "commonjs",
6
6
  "main": "dist/src/engine.js",
7
7
  "types": "dist/src/engine.d.ts",
@@ -22,8 +22,8 @@
22
22
  "SKILL.md"
23
23
  ],
24
24
  "dependencies": {
25
- "@crewx/sdk": "0.9.0-rc.113",
26
- "@crewx/shared": "0.0.6-rc.28"
25
+ "@crewx/sdk": "0.9.0-rc.176",
26
+ "@crewx/shared": "0.0.6-rc.91"
27
27
  },
28
28
  "keywords": [
29
29
  "crewx",
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AA+GA,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG9D"}
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAA4B,MAAM,SAAS,CAAC;AAM9D,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAW;gBAEtB,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE;IAS3D,OAAO,CAAC,aAAa;IAYrB,QAAQ,IAAI,SAAS,EAAE;IAQvB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAIhC,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA+CxG,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAmBlD,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAmB7D,OAAO,CAAC,cAAc;CAoCvB;AAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}