@tonk/cli 0.1.14 → 0.2.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.
Files changed (59) hide show
  1. package/README.md +84 -5
  2. package/dist/commands/hello/index.d.ts +3 -0
  3. package/dist/commands/hello/index.d.ts.map +1 -0
  4. package/dist/commands/hello/index.js +291 -0
  5. package/dist/commands/hello/index.js.map +1 -0
  6. package/dist/commands/hello.d.ts.map +1 -1
  7. package/dist/commands/hello.js +69 -6
  8. package/dist/commands/hello.js.map +1 -1
  9. package/dist/commands/init.d.ts +3 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +66 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/kill.d.ts +3 -0
  14. package/dist/commands/kill.d.ts.map +1 -0
  15. package/dist/commands/kill.js +38 -0
  16. package/dist/commands/kill.js.map +1 -0
  17. package/dist/commands/ls.d.ts +3 -0
  18. package/dist/commands/ls.d.ts.map +1 -0
  19. package/dist/commands/ls.js +31 -0
  20. package/dist/commands/ls.js.map +1 -0
  21. package/dist/commands/ps.d.ts +3 -0
  22. package/dist/commands/ps.d.ts.map +1 -0
  23. package/dist/commands/ps.js +34 -0
  24. package/dist/commands/ps.js.map +1 -0
  25. package/dist/commands/push.d.ts +3 -0
  26. package/dist/commands/push.d.ts.map +1 -0
  27. package/dist/commands/push.js +150 -0
  28. package/dist/commands/push.js.map +1 -0
  29. package/dist/commands/start.d.ts +3 -0
  30. package/dist/commands/start.d.ts.map +1 -0
  31. package/dist/commands/start.js +43 -0
  32. package/dist/commands/start.js.map +1 -0
  33. package/dist/tonk.js +71 -12
  34. package/dist/tonk.js.map +1 -1
  35. package/package.json +12 -4
  36. package/dist/commands/config.d.ts +0 -3
  37. package/dist/commands/config.d.ts.map +0 -1
  38. package/dist/commands/config.js +0 -338
  39. package/dist/commands/config.js.map +0 -1
  40. package/dist/commands/deploy.d.ts +0 -3
  41. package/dist/commands/deploy.d.ts.map +0 -1
  42. package/dist/commands/deploy.js +0 -460
  43. package/dist/commands/deploy.js.map +0 -1
  44. package/dist/commands/dev.d.ts +0 -3
  45. package/dist/commands/dev.d.ts.map +0 -1
  46. package/dist/commands/dev.js +0 -89
  47. package/dist/commands/dev.js.map +0 -1
  48. package/dist/commands/prettyPrint.d.ts +0 -3
  49. package/dist/commands/prettyPrint.d.ts.map +0 -1
  50. package/dist/commands/prettyPrint.js +0 -51
  51. package/dist/commands/prettyPrint.js.map +0 -1
  52. package/dist/commands/serve.d.ts +0 -3
  53. package/dist/commands/serve.d.ts.map +0 -1
  54. package/dist/commands/serve.js +0 -212
  55. package/dist/commands/serve.js.map +0 -1
  56. package/dist/lib/launchGUI.d.ts +0 -2
  57. package/dist/lib/launchGUI.d.ts.map +0 -1
  58. package/dist/lib/launchGUI.js +0 -175
  59. package/dist/lib/launchGUI.js.map +0 -1
@@ -0,0 +1,38 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fetch from 'node-fetch';
4
+ export const killCommand = new Command('kill')
5
+ .description('Stop a running bundle server')
6
+ .option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
7
+ .argument('<serverId>', 'ID of the server to stop')
8
+ .action(async (serverId, options) => {
9
+ const serverUrl = options.url;
10
+ try {
11
+ console.log(chalk.blue(`Stopping server with ID: ${serverId}...`));
12
+ const response = await fetch(`${serverUrl}/kill`, {
13
+ method: 'POST',
14
+ headers: {
15
+ 'Content-Type': 'application/json',
16
+ },
17
+ body: JSON.stringify({ id: serverId }),
18
+ });
19
+ if (!response.ok) {
20
+ const errorText = await response.text();
21
+ throw new Error(`Server error: ${errorText}`);
22
+ }
23
+ const result = (await response.json());
24
+ if (result.success) {
25
+ console.log(chalk.green('Server stopped successfully!'));
26
+ console.log(chalk.green(result.message));
27
+ }
28
+ else {
29
+ console.log(chalk.yellow('Server stop command sent, but with warnings:'));
30
+ console.log(chalk.yellow(result.message));
31
+ }
32
+ }
33
+ catch (error) {
34
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
35
+ process.exit(1);
36
+ }
37
+ });
38
+ //# sourceMappingURL=kill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill.js","sourceRoot":"","sources":["../../src/commands/kill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,KAAK,CAAC,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,OAAO,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAC,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGpC,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAC7D,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const lsCommand: Command;
3
+ //# sourceMappingURL=ls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAIlC,eAAO,MAAM,SAAS,SAmClB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fetch from 'node-fetch';
4
+ export const lsCommand = new Command('ls')
5
+ .description('List available bundles on the Tonk server')
6
+ .option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
7
+ .action(async (options) => {
8
+ const serverUrl = options.url;
9
+ try {
10
+ console.log(chalk.blue(`Fetching bundle list from ${serverUrl}...`));
11
+ const response = await fetch(`${serverUrl}/ls`);
12
+ if (!response.ok) {
13
+ const error = await response.text();
14
+ throw new Error(`Server error: ${error}`);
15
+ }
16
+ const bundles = (await response.json());
17
+ if (bundles.length === 0) {
18
+ console.log(chalk.yellow('No bundles found on the server.'));
19
+ return;
20
+ }
21
+ console.log(chalk.green(`Available bundles (${bundles.length}):`));
22
+ bundles.forEach((bundle) => {
23
+ console.log(` - ${bundle}`);
24
+ });
25
+ }
26
+ catch (error) {
27
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
28
+ process.exit(1);
29
+ }
30
+ });
31
+ //# sourceMappingURL=ls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,KAAK,CAAC,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAa,CAAC;QAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const psCommand: Command;
3
+ //# sourceMappingURL=ps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAYlC,eAAO,MAAM,SAAS,SAgDlB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fetch from 'node-fetch';
4
+ export const psCommand = new Command('ps')
5
+ .description('List running bundle servers')
6
+ .option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
7
+ .action(async (options) => {
8
+ const serverUrl = options.url;
9
+ try {
10
+ console.log(chalk.blue(`Fetching running servers from ${serverUrl}...`));
11
+ const response = await fetch(`${serverUrl}/ps`);
12
+ if (!response.ok) {
13
+ const error = await response.text();
14
+ throw new Error(`Server error: ${error}`);
15
+ }
16
+ const servers = (await response.json());
17
+ if (servers.length === 0) {
18
+ console.log(chalk.yellow('No servers currently running.'));
19
+ return;
20
+ }
21
+ console.log(chalk.green(`Running servers (${servers.length}):`));
22
+ // Format the output as a table
23
+ console.log(`${chalk.bold('ID'.padEnd(36))} | ${chalk.bold('Bundle'.padEnd(20))} | ${chalk.bold('Port'.padEnd(6))} | ${chalk.bold('Status')}`);
24
+ console.log('-'.repeat(80));
25
+ servers.forEach((server) => {
26
+ console.log(`${server.id.padEnd(36)} | ${server.bundleName.padEnd(20)} | ${String(server.port).padEnd(6)} | ${server.status}`);
27
+ });
28
+ }
29
+ catch (error) {
30
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
31
+ process.exit(1);
32
+ }
33
+ });
34
+ //# sourceMappingURL=ps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAU/B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,SAAS,KAAK,CAAC,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAEjE,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CACpB,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAkB,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CACnE,MAAM,CAAC,IAAI,CACZ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const pushCommand: Command;
3
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAyOlC,eAAO,MAAM,WAAW,SASI,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import fetch from 'node-fetch';
6
+ import { FormData } from 'formdata-node';
7
+ import { fileFromPath } from 'formdata-node/file-from-path';
8
+ import { FormDataEncoder } from 'form-data-encoder';
9
+ import { Readable } from 'stream';
10
+ import * as tar from 'tar';
11
+ /**
12
+ * Validates that the source directory exists
13
+ */
14
+ function validateSourceDirectory(sourcePath) {
15
+ if (!fs.existsSync(sourcePath)) {
16
+ console.error(chalk.red(`Error: Directory ${sourcePath} does not exist.`));
17
+ console.log(chalk.yellow(`Run 'npm run build' or 'yarn build' to create the dist directory.`));
18
+ process.exit(1);
19
+ }
20
+ }
21
+ /**
22
+ * Determines the bundle name based on package.json or directory name
23
+ */
24
+ function determineBundleName(projectRoot, providedName) {
25
+ let defaultName;
26
+ try {
27
+ const packageJsonPath = path.join(projectRoot, 'package.json');
28
+ if (fs.existsSync(packageJsonPath)) {
29
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
30
+ defaultName = packageJson.name
31
+ ? packageJson.name.replace(/^@.*\//, '')
32
+ : undefined;
33
+ }
34
+ }
35
+ catch (err) {
36
+ // Ignore error, will fall back to directory name
37
+ }
38
+ if (!defaultName) {
39
+ defaultName = path.basename(projectRoot);
40
+ }
41
+ // Use provided name or default
42
+ return providedName || defaultName;
43
+ }
44
+ /**
45
+ * Creates a tarball of the source directory
46
+ */
47
+ async function createTarball(sourcePath, projectRoot, bundleName) {
48
+ console.log(chalk.blue(`Packaging contents of directory ${sourcePath} as bundle '${bundleName}'...`));
49
+ const tempTarPath = path.join(projectRoot, `${bundleName}-${Date.now()}.tar.gz`);
50
+ // Get all directories and files in the source directory
51
+ const children = fs.readdirSync(sourcePath);
52
+ if (children.length === 0) {
53
+ throw new Error(`Source directory ${sourcePath} is empty.`);
54
+ }
55
+ // Create tarball with all children of the source directory
56
+ await tar.create({
57
+ gzip: true,
58
+ file: tempTarPath,
59
+ cwd: sourcePath,
60
+ }, children);
61
+ return tempTarPath;
62
+ }
63
+ /**
64
+ * Uploads the tarball to the Tonk server
65
+ */
66
+ async function uploadBundle(serverUrl, bundleName, tarballPath) {
67
+ console.log(chalk.blue(`Uploading bundle to ${serverUrl}...`));
68
+ const form = new FormData();
69
+ form.set('name', bundleName);
70
+ form.set('bundle', await fileFromPath(tarballPath));
71
+ const encoder = new FormDataEncoder(form);
72
+ const response = await fetch(`${serverUrl}/upload-bundle`, {
73
+ method: 'POST',
74
+ headers: encoder.headers,
75
+ body: Readable.from(encoder),
76
+ });
77
+ // Clean up temp file
78
+ fs.unlinkSync(tarballPath);
79
+ if (!response.ok) {
80
+ const errorText = await response.text();
81
+ throw new Error(`Server error: ${errorText}`);
82
+ }
83
+ const result = (await response.json());
84
+ console.log(chalk.green(`Bundle '${result.bundleName}' uploaded successfully!`));
85
+ return result;
86
+ }
87
+ /**
88
+ * Starts the bundle on the Tonk server
89
+ */
90
+ async function startBundle(serverUrl, bundleName) {
91
+ console.log(chalk.blue(`Starting bundle '${bundleName}'...`));
92
+ const startResponse = await fetch(`${serverUrl}/start`, {
93
+ method: 'POST',
94
+ headers: {
95
+ 'Content-Type': 'application/json',
96
+ },
97
+ body: JSON.stringify({ bundleName }),
98
+ });
99
+ if (!startResponse.ok) {
100
+ const startErrorText = await startResponse.text();
101
+ console.error(chalk.red(`Error starting bundle: ${startErrorText}`));
102
+ throw new Error(`Error starting bundle: ${startErrorText}`);
103
+ }
104
+ const startResult = (await startResponse.json());
105
+ console.log(chalk.green(`Bundle server started successfully!`));
106
+ console.log(chalk.green(`Server ID: ${startResult.id}`));
107
+ console.log(chalk.green(`Running on port: ${startResult.port}`));
108
+ console.log(chalk.green(`Status: ${startResult.status}`));
109
+ return startResult;
110
+ }
111
+ /**
112
+ * Main push command handler
113
+ */
114
+ async function handlePushCommand(options) {
115
+ const serverUrl = options.url;
116
+ const sourceDir = options.dir || './dist';
117
+ const projectRoot = process.cwd();
118
+ const sourcePath = path.isAbsolute(sourceDir)
119
+ ? sourceDir
120
+ : path.join(projectRoot, sourceDir);
121
+ try {
122
+ // Validate source directory
123
+ validateSourceDirectory(sourcePath);
124
+ // Determine bundle name
125
+ const bundleName = determineBundleName(projectRoot, options.name);
126
+ // Create tarball
127
+ const tarballPath = await createTarball(sourcePath, projectRoot, bundleName);
128
+ // Upload bundle
129
+ const uploadResult = await uploadBundle(serverUrl, bundleName, tarballPath);
130
+ // Start bundle if requested
131
+ if (options.start) {
132
+ await startBundle(serverUrl, uploadResult.bundleName);
133
+ }
134
+ else {
135
+ console.log(chalk.blue(`Use 'tonk start ${uploadResult.bundleName}' to start the bundle.`));
136
+ }
137
+ }
138
+ catch (error) {
139
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
140
+ process.exit(1);
141
+ }
142
+ }
143
+ export const pushCommand = new Command('push')
144
+ .description('Package and upload a bundle to the Tonk server')
145
+ .option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
146
+ .option('-n, --name <name>', 'Name for the bundle (defaults to directory name)')
147
+ .option('-d, --dir <dir>', 'Directory to bundle (defaults to ./dist)')
148
+ .option('-s, --start', 'Start the bundle after upload')
149
+ .action(handlePushCommand);
150
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAuB3B;;GAEG;AACH,SAAS,uBAAuB,CAAC,UAAkB;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,UAAU,kBAAkB,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,mEAAmE,CACpE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,WAAmB,EACnB,YAAqB;IAErB,IAAI,WAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,WAAW,GAAG,WAAW,CAAC,IAAI;gBAC5B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iDAAiD;IACnD,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,+BAA+B;IAC/B,OAAO,YAAY,IAAI,WAAW,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,UAAkB,EAClB,WAAmB,EACnB,UAAkB;IAElB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mCAAmC,UAAU,eAAe,UAAU,MAAM,CAC7E,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,WAAW,EACX,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,CACrC,CAAC;IAEF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,2DAA2D;IAC3D,MAAM,GAAG,CAAC,MAAM,CACd;QACE,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;KAChB,EACD,QAAQ,CACT,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,SAAiB,EACjB,UAAkB,EAClB,WAAmB;IAEnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,SAAS,KAAK,CAAC,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,gBAAgB,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;KAC7B,CAAC,CAAC;IAEH,qBAAqB;IACrB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;IACvD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,UAAU,0BAA0B,CAAC,CACpE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,UAAkB;IAElB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,UAAU,MAAM,CAAC,CAAC,CAAC;IAE9D,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,UAAU,EAAC,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,cAAc,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,0BAA0B,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAgB,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,OAAoB;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,4BAA4B;QAC5B,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEpC,wBAAwB;QACxB,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAElE,iBAAiB;QACjB,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,UAAU,EACV,WAAW,EACX,UAAU,CACX,CAAC;QAEF,gBAAgB;QAChB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE5E,4BAA4B;QAC5B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,mBAAmB,YAAY,CAAC,UAAU,wBAAwB,CACnE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CACL,mBAAmB,EACnB,kDAAkD,CACnD;KACA,MAAM,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const startCommand: Command;
3
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAWlC,eAAO,MAAM,YAAY,SAgDrB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fetch from 'node-fetch';
4
+ export const startCommand = new Command('start')
5
+ .description('Start a bundle server')
6
+ .option('-u, --url <url>', 'URL of the Tonk server', 'http://localhost:7777')
7
+ .option('-p, --port <port>', 'Port for the bundle server (optional)')
8
+ .argument('<bundleName>', 'Name of the bundle to start')
9
+ .action(async (bundleName, options) => {
10
+ const serverUrl = options.url;
11
+ try {
12
+ console.log(chalk.blue(`Starting bundle server for ${bundleName}...`));
13
+ const requestBody = {
14
+ bundleName,
15
+ };
16
+ // Add port if specified
17
+ if (options.port) {
18
+ requestBody.port = parseInt(options.port, 10);
19
+ }
20
+ const response = await fetch(`${serverUrl}/start`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ body: JSON.stringify(requestBody),
26
+ });
27
+ if (!response.ok) {
28
+ const errorText = await response.text();
29
+ throw new Error(`Server error: ${errorText}`);
30
+ }
31
+ const result = (await response.json());
32
+ console.log(chalk.green('Bundle server started successfully!'));
33
+ console.log(chalk.green(`Server ID: ${result.id}`));
34
+ console.log(chalk.green(`Running on port: ${result.port}`));
35
+ console.log(chalk.green(`Status: ${result.status}`));
36
+ console.log(chalk.blue(`Use 'tonk ps' to see all running servers`));
37
+ }
38
+ catch (error) {
39
+ console.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
40
+ process.exit(1);
41
+ }
42
+ });
43
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,UAAU,KAAK,CAAC,CAAC,CAAC;QAEvE,MAAM,WAAW,GAAwC;YACvD,UAAU;SACX,CAAC;QAEF,wBAAwB;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
package/dist/tonk.js CHANGED
@@ -1,26 +1,85 @@
1
1
  import { Command } from 'commander';
2
- import { configCommand } from './commands/config.js';
3
2
  import { createCommand } from './commands/create.js';
4
- import { deployCommand } from './commands/deploy.js';
5
- import { devCommand } from './commands/dev.js';
6
3
  import { helloCommand } from './commands/hello.js';
7
- import { printMarkdown } from './commands/prettyPrint.js';
8
- import { serveCommand } from './commands/serve.js';
4
+ import { lsCommand } from './commands/ls.js';
5
+ import { psCommand } from './commands/ps.js';
6
+ import { startCommand } from './commands/start.js';
7
+ import { killCommand } from './commands/kill.js';
8
+ import { pushCommand } from './commands/push.js';
9
+ import { createServer } from '@tonk/server';
10
+ import chalk from 'chalk';
11
+ import envPaths from 'env-paths';
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
9
14
  const program = new Command();
10
15
  // Main program setup
11
16
  program
12
17
  .name('tonk')
13
18
  .description('The tonk cli helps you to manage your tonk stack and apps.')
14
19
  .version('0.1.2')
20
+ .option('-d', 'Run the Tonk daemon')
15
21
  .on('--help', () => {
16
22
  console.log('\nWork in progress!');
17
23
  });
18
- program.addCommand(createCommand);
19
- program.addCommand(devCommand);
20
- program.addCommand(serveCommand);
21
- program.addCommand(deployCommand);
22
- program.addCommand(configCommand);
23
24
  program.addCommand(helloCommand);
24
- program.addCommand(printMarkdown);
25
- program.parse();
25
+ program.addCommand(createCommand);
26
+ // Add bundle management commands
27
+ program.addCommand(pushCommand);
28
+ program.addCommand(startCommand);
29
+ program.addCommand(psCommand);
30
+ program.addCommand(lsCommand);
31
+ program.addCommand(killCommand);
32
+ const startServer = async () => {
33
+ try {
34
+ // Create paths for Tonk daemon home
35
+ const paths = envPaths('tonk', { suffix: '' });
36
+ const tonkHome = paths.data;
37
+ const bundlesPath = path.join(tonkHome, 'bundles');
38
+ const storesPath = path.join(tonkHome, 'stores');
39
+ // Pretty print the Tonk home location
40
+ console.log(chalk.cyan('🏠 Tonk Home:'), chalk.bold.green(tonkHome));
41
+ // Ensure directories exist
42
+ for (const dir of [tonkHome, bundlesPath, storesPath]) {
43
+ if (!fs.existsSync(dir)) {
44
+ fs.mkdirSync(dir, { recursive: true });
45
+ }
46
+ }
47
+ console.log(chalk.blue('Starting TonkServer daemon...'));
48
+ console.log(chalk.blue(`Using Tonk home directory: ${tonkHome}`));
49
+ // Create server configuration matching ServerOptions interface
50
+ const serverConfig = {
51
+ bundlesPath,
52
+ dirPath: storesPath,
53
+ };
54
+ // Start the server
55
+ const server = await createServer(serverConfig);
56
+ // Handle process termination
57
+ const cleanup = async () => {
58
+ console.log(chalk.yellow('\nShutting down server...'));
59
+ try {
60
+ await server.stop();
61
+ console.log(chalk.green('Server shutdown complete.'));
62
+ // Force exit after brief delay to ensure any pending operations complete
63
+ setTimeout(() => process.exit(0), 500);
64
+ }
65
+ catch (err) {
66
+ console.error(chalk.red('Error during shutdown:'), err);
67
+ // Force exit even on error
68
+ process.exit(1);
69
+ }
70
+ };
71
+ process.on('SIGINT', cleanup);
72
+ process.on('SIGTERM', cleanup);
73
+ }
74
+ catch (error) {
75
+ console.error(chalk.red('Failed to start TonkServer daemon:'), error);
76
+ process.exit(1);
77
+ }
78
+ };
79
+ if (process.argv.length <= 3 && process.argv[2] === '-d') {
80
+ startServer();
81
+ }
82
+ else {
83
+ program.parse(process.argv);
84
+ }
26
85
  //# sourceMappingURL=tonk.js.map
package/dist/tonk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,qBAAqB;AACrB,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC;KAChB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonk/cli",
3
- "version": "0.1.14",
3
+ "version": "0.2.1",
4
4
  "description": "The Tonk stack command line utility",
5
5
  "type": "module",
6
6
  "bin": {
@@ -36,20 +36,25 @@
36
36
  "posttest": "npm run lint"
37
37
  },
38
38
  "dependencies": {
39
- "@tonk/server": "^0.1.9",
39
+ "@tonk/server": "^0.2.1",
40
40
  "chalk": "^5.3.0",
41
41
  "commander": "^11.1.0",
42
42
  "dotenv": "^16.4.7",
43
- "execa": "^8.0.1",
43
+ "env-paths": "^3.0.0",
44
44
  "fastmcp": "^1.20.2",
45
+ "form-data-encoder": "^4.0.2",
46
+ "formdata-node": "^6.0.3",
45
47
  "fs-extra": "^11.2.0",
46
48
  "gradient-string": "^2.0.2",
49
+ "ink": "^5.2.0",
47
50
  "inquirer": "^9.2.12",
48
- "@tonk/keepsync": "^0.3.7",
49
51
  "listr2": "^8.2.5",
50
52
  "marked": "^15.0.7",
53
+ "node-fetch": "^3.3.2",
51
54
  "open": "^10.1.0",
52
55
  "ora": "^7.0.1",
56
+ "react": "18",
57
+ "tar": "^6.2.1",
53
58
  "zod": "^3.24.2"
54
59
  },
55
60
  "devDependencies": {
@@ -57,6 +62,9 @@
57
62
  "@types/gradient-string": "^1.1.5",
58
63
  "@types/inquirer": "^9.0.7",
59
64
  "@types/node": "^22.7.5",
65
+ "@types/node-fetch": "^2.6.9",
66
+ "@types/react": "18",
67
+ "@types/tar": "^6.1.11",
60
68
  "gts": "^6.0.2",
61
69
  "rimraf": "^5.0.5",
62
70
  "tsup": "^8.0.1",
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const configCommand: Command;
3
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAOlC,eAAO,MAAM,aAAa,SA+ZtB,CAAC"}