@sena-ai/cli 1.4.0 → 1.4.1

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/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { registerStop } from './commands/stop.js';
8
8
  import { registerRestart } from './commands/restart.js';
9
9
  import { registerStatus } from './commands/status.js';
10
10
  import { registerLogs } from './commands/logs.js';
11
+ import { registerInit } from './commands/init.js';
11
12
  const __filename = fileURLToPath(import.meta.url);
12
13
  const __dirname = dirname(__filename);
13
14
  // Read version from package.json
@@ -23,5 +24,6 @@ registerStop(program);
23
24
  registerRestart(program);
24
25
  registerStatus(program);
25
26
  registerLogs(program);
27
+ registerInit(program);
26
28
  program.parse();
27
29
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,iCAAiC;AACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAA;AAE9G,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iCAAiC,CAAC;KAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAA;AAE1D,aAAa,CAAC,OAAO,CAAC,CAAA;AACtB,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,eAAe,CAAC,OAAO,CAAC,CAAA;AACxB,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,YAAY,CAAC,OAAO,CAAC,CAAA;AAErB,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,iCAAiC;AACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAA;AAE9G,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iCAAiC,CAAC;KAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAA;AAE1D,aAAa,CAAC,OAAO,CAAC,CAAA;AACtB,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,eAAe,CAAC,OAAO,CAAC,CAAA;AACxB,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,YAAY,CAAC,OAAO,CAAC,CAAA;AAErB,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerInit(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkBxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDnD"}
@@ -0,0 +1,63 @@
1
+ import { existsSync, readFileSync, writeFileSync, renameSync } from 'node:fs';
2
+ import { resolve, basename } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ const TEMPLATES = {
5
+ 'slack-integration': {
6
+ repo: 'unlimiting-studio/sena-ai/templates/slack-integration',
7
+ envHint: ' # Edit .env with your Slack credentials',
8
+ },
9
+ 'platform-integration': {
10
+ repo: 'unlimiting-studio/sena-ai/templates/platform-integration',
11
+ envHint: ' # Edit .env with your CONNECT_KEY and PLATFORM_URL',
12
+ },
13
+ };
14
+ const DEFAULT_TEMPLATE = 'slack-integration';
15
+ export function registerInit(program) {
16
+ program
17
+ .command('init <name>')
18
+ .description('Create a new Sena bot project')
19
+ .option('-t, --template <template>', `template to use (${Object.keys(TEMPLATES).join(', ')})`, DEFAULT_TEMPLATE)
20
+ .action(async (name, opts) => {
21
+ const targetDir = resolve(process.cwd(), name);
22
+ const botName = basename(targetDir);
23
+ const tmpl = TEMPLATES[opts.template];
24
+ if (!tmpl) {
25
+ console.error(`Unknown template '${opts.template}'. Available: ${Object.keys(TEMPLATES).join(', ')}`);
26
+ process.exit(1);
27
+ }
28
+ if (existsSync(targetDir)) {
29
+ console.error(`Directory '${botName}' already exists.`);
30
+ process.exit(1);
31
+ }
32
+ console.log(`Creating '${botName}' (template: ${opts.template})...`);
33
+ // Download template via degit
34
+ const degit = (await import('degit')).default;
35
+ const emitter = degit(tmpl.repo, { cache: false });
36
+ await emitter.clone(targetDir);
37
+ // Replace placeholders
38
+ const configPath = resolve(targetDir, 'sena.config.ts');
39
+ const pkgPath = resolve(targetDir, 'package.json');
40
+ let config = readFileSync(configPath, 'utf-8');
41
+ config = config.replace(/%%BOT_NAME%%/g, botName);
42
+ writeFileSync(configPath, config);
43
+ let pkg = readFileSync(pkgPath, 'utf-8');
44
+ pkg = pkg.replace('"sena-bot"', `"${botName}"`);
45
+ writeFileSync(pkgPath, pkg);
46
+ // .env.template → .env
47
+ const envTemplate = resolve(targetDir, '.env.template');
48
+ if (existsSync(envTemplate)) {
49
+ renameSync(envTemplate, resolve(targetDir, '.env'));
50
+ }
51
+ // Install dependencies
52
+ console.log('Installing dependencies...');
53
+ execSync('pnpm install', { cwd: targetDir, stdio: 'inherit' });
54
+ console.log('');
55
+ console.log(`Done! Your bot '${botName}' is ready.`);
56
+ console.log('');
57
+ console.log('Next steps:');
58
+ console.log(` cd ${botName}`);
59
+ console.log(tmpl.envHint);
60
+ console.log(' npx sena start');
61
+ });
62
+ }
63
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,SAAS,GAAsD;IACnE,mBAAmB,EAAE;QACnB,IAAI,EAAE,uDAAuD;QAC7D,OAAO,EAAE,2CAA2C;KACrD;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,0DAA0D;QAChE,OAAO,EAAE,sDAAsD;KAChE;CACF,CAAA;AAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAA;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC;SAC/G,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAA0B,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,iBAAiB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,mBAAmB,CAAC,CAAA;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,gBAAgB,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAA;QAEpE,8BAA8B;QAC9B,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAE9B,uBAAuB;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAElD,IAAI,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC9C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QACjD,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAEjC,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACxC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,OAAO,GAAG,CAAC,CAAA;QAC/C,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAE3B,uBAAuB;QACvB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;QACvD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QACrD,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACzC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAE9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,aAAa,CAAC,CAAA;QACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -15,14 +15,26 @@ if (!configPath) {
15
15
  }
16
16
  // Use tsx tsImport for .ts config files (plain import won't work from compiled .js)
17
17
  let config;
18
- if (configPath.endsWith('.ts') || configPath.endsWith('.tsx')) {
19
- const { tsImport } = await import('tsx/esm/api');
20
- const mod = await tsImport(configPath, import.meta.url);
21
- config = mod.default;
18
+ try {
19
+ if (configPath.endsWith('.ts') || configPath.endsWith('.tsx')) {
20
+ const { tsImport } = await import('tsx/esm/api');
21
+ const mod = await tsImport(configPath, import.meta.url);
22
+ config = mod.default;
23
+ }
24
+ else {
25
+ const mod = await import(configPath);
26
+ config = mod.default;
27
+ }
22
28
  }
23
- else {
24
- const mod = await import(configPath);
25
- config = mod.default;
29
+ catch (err) {
30
+ const message = err instanceof Error ? err.message : String(err);
31
+ console.error(`[worker-entry] failed to load config: ${message}`);
32
+ // Notify orchestrator about the boot error so it can relay to the requesting worker
33
+ try {
34
+ process.send?.({ type: 'boot-error', error: message });
35
+ }
36
+ catch { /* IPC closed */ }
37
+ process.exit(1);
26
38
  }
27
39
  const port = parseInt(process.env.SENA_WORKER_PORT || '0', 10);
28
40
  // Remove early guard — createWorker registers its own graceful disconnect handler
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../src/worker-entry.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,sEAAsE;AACtE,2EAA2E;AAC3E,wEAAwE;AACxE,SAAS,oBAAoB;IAC3B,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AACD,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;AAE9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;AAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,oFAAoF;AACpF,IAAI,MAAoD,CAAA;AACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAA+B,CAAA;IACrF,MAAM,GAAG,GAAG,CAAC,OAAO,CAAA;AACtB,CAAC;KAAM,CAAC;IACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAA+B,CAAA;IAClE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAA;AACtB,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;AAE9D,kFAAkF;AAClF,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;AAE1D,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAC7C,MAAM,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../src/worker-entry.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,sEAAsE;AACtE,2EAA2E;AAC3E,wEAAwE;AACxE,SAAS,oBAAoB;IAC3B,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AACD,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;AAE9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;AAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,oFAAoF;AACpF,IAAI,MAAoD,CAAA;AACxD,IAAI,CAAC;IACH,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAA+B,CAAA;QACrF,MAAM,GAAG,GAAG,CAAC,OAAO,CAAA;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAA+B,CAAA;QAClE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAA;IACtB,CAAC;AACH,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAChE,OAAO,CAAC,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAA;IACjE,oFAAoF;IACpF,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;AAE9D,kFAAkF;AAClF,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;AAE1D,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAC7C,MAAM,CAAC,KAAK,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sena-ai/cli",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "sena": "dist/cli.js"
@@ -19,10 +19,11 @@
19
19
  "access": "public"
20
20
  },
21
21
  "dependencies": {
22
- "tsx": "^4.21.0",
23
22
  "commander": "^13",
23
+ "degit": "^2.8.4",
24
24
  "dotenv": "^16.6",
25
- "@sena-ai/core": "1.4.0"
25
+ "tsx": "^4.21.0",
26
+ "@sena-ai/core": "1.4.1"
26
27
  },
27
28
  "devDependencies": {
28
29
  "@types/node": "^25.5.0",