@telorun/cli 0.2.2 → 0.2.4

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
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { Kernel } from "@telorun/runtime";
2
+ import { Kernel } from "@telorun/kernel";
3
+ import * as fs from "fs";
3
4
  import * as path from "path";
4
5
  import yargs from "yargs";
5
6
  import { hideBin } from "yargs/helpers";
@@ -15,6 +16,64 @@ function createLogger(verbose) {
15
16
  verbose,
16
17
  };
17
18
  }
19
+ function setupWatchMode(kernel, log) {
20
+ const watchers = new Map();
21
+ const debounceTimers = new Map();
22
+ let active = true;
23
+ function watchFile(filePath) {
24
+ if (!active || watchers.has(filePath))
25
+ return;
26
+ let watcher;
27
+ try {
28
+ watcher = fs.watch(filePath, { persistent: false }, () => {
29
+ const existing = debounceTimers.get(filePath);
30
+ if (existing)
31
+ clearTimeout(existing);
32
+ debounceTimers.set(filePath, setTimeout(() => {
33
+ debounceTimers.delete(filePath);
34
+ watchers.get(filePath)?.close();
35
+ watchers.delete(filePath);
36
+ void handleChange(filePath);
37
+ }, 150));
38
+ });
39
+ }
40
+ catch {
41
+ return; // file may not exist yet
42
+ }
43
+ watcher.on("error", () => watchers.delete(filePath));
44
+ watchers.set(filePath, watcher);
45
+ }
46
+ async function handleChange(filePath) {
47
+ log.info(`[watch] reloading ${filePath}`);
48
+ try {
49
+ await kernel.reloadSource(filePath);
50
+ // Refresh watchers — new files may have been loaded after reload
51
+ for (const f of kernel.getSourceFiles())
52
+ watchFile(f);
53
+ log.info(log.ok(`[watch] complete`));
54
+ }
55
+ catch (err) {
56
+ log.info(log.error(`[watch] error: ${err instanceof Error ? err.message : String(err)}`));
57
+ }
58
+ // Re-establish watcher regardless of outcome (handles atomic rename saves)
59
+ setTimeout(() => {
60
+ if (active)
61
+ watchFile(filePath);
62
+ }, 50);
63
+ }
64
+ function cleanup() {
65
+ active = false;
66
+ for (const t of debounceTimers.values())
67
+ clearTimeout(t);
68
+ debounceTimers.clear();
69
+ for (const w of watchers.values())
70
+ w.close();
71
+ watchers.clear();
72
+ }
73
+ for (const f of kernel.getSourceFiles())
74
+ watchFile(f);
75
+ return { cleanup };
76
+ }
18
77
  async function run(argv) {
19
78
  const log = createLogger(argv.verbose);
20
79
  try {
@@ -30,6 +89,26 @@ async function run(argv) {
30
89
  await kernel.enableEventStream(eventStreamPath);
31
90
  log.info(`Event stream enabled: ${eventStreamPath}`);
32
91
  }
92
+ let watchHandle = null;
93
+ if (argv.watch) {
94
+ // Acquire a hold BEFORE start() to keep the kernel alive for apps that
95
+ // don't have their own holds (e.g. script-only manifests).
96
+ // shutdown() will force-resolve waitForIdle() on Ctrl+C regardless of
97
+ // how many holds are active (e.g. Http.Server may hold its own).
98
+ kernel.acquireHold("watch-mode");
99
+ kernel.on("Runtime.Started", () => {
100
+ const files = kernel.getSourceFiles();
101
+ log.info(`[watch] watching ${files.length} file(s)`);
102
+ watchHandle = setupWatchMode(kernel, log);
103
+ });
104
+ const shutdown = () => {
105
+ log.info("\n[watch] stopping...");
106
+ watchHandle?.cleanup();
107
+ kernel.shutdown();
108
+ };
109
+ process.once("SIGINT", shutdown);
110
+ process.once("SIGTERM", shutdown);
111
+ }
33
112
  await kernel.loadFromConfig(argv.path);
34
113
  await kernel.start();
35
114
  if (kernel.exitCode !== 0) {
@@ -65,6 +144,12 @@ yargs(hideBin(process.argv))
65
144
  type: "boolean",
66
145
  default: false,
67
146
  describe: "Capture a snapshot on exit",
147
+ })
148
+ .option("watch", {
149
+ alias: "w",
150
+ type: "boolean",
151
+ default: false,
152
+ describe: "Watch manifest files and reload on change",
68
153
  })
69
154
  .demandCommand(1, "Please specify a command or path to run")
70
155
  .strict()
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telorun/cli",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Telo CLI - Command-line interface for the Telo runtime.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "yargs": "^17.7.2",
24
- "@telorun/runtime": "0.2.2"
24
+ "@telorun/kernel": "0.2.4"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^20.0.0",