Skip to content

Commit d164d3b

Browse files
committed
fix: inspector
1 parent 2b807c7 commit d164d3b

File tree

7 files changed

+68
-28
lines changed

7 files changed

+68
-28
lines changed

examples/chat-room/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@
44
"private": true,
55
"type": "module",
66
"scripts": {
7+
"dev": "npx @actor-core/cli@latest dev",
78
"check-types": "tsc --noEmit",
89
"test": "vitest run"
910
},
1011
"devDependencies": {
1112
"@types/node": "^22.13.9",
1213
"@types/prompts": "^2",
1314
"actor-core": "workspace:*",
15+
"@actor-core/cli": "workspace:*",
1416
"prompts": "^2.4.2",
1517
"tsx": "^3.12.7",
1618
"typescript": "^5.5.2",
1719
"vitest": "^3.0.9"
1820
},
1921
"example": {
20-
"platforms": [
21-
"*"
22-
],
22+
"platforms": ["*"],
2323
"actors": {
2424
"chat-room": "src/chat-room.ts"
2525
}

examples/counter/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44
"private": true,
55
"type": "module",
66
"scripts": {
7+
"dev": "npx @actor-core/cli@latest dev",
78
"check-types": "tsc --noEmit",
89
"test": "vitest run"
910
},
1011
"devDependencies": {
1112
"@types/node": "^22.13.9",
1213
"actor-core": "workspace:*",
14+
"@actor-core/cli": "workspace:*",
1315
"tsx": "^3.12.7",
1416
"typescript": "^5.7.3",
1517
"vitest": "^3.0.9"
1618
},
1719
"example": {
18-
"platforms": [
19-
"*"
20-
]
20+
"platforms": ["*"]
2121
}
2222
}

packages/actor-core-cli/src/commands/dev.tsx

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { Argument, Command, Option } from "commander";
33
import { workflow } from "../workflow";
44

55
import { validateConfigTask } from "../workflows/validate-config";
6-
import { serve } from "@actor-core/nodejs";
76
import chokidar from "chokidar";
87
import { Text } from "ink";
98
import open from "open";
109
import { withResolvers } from "../utils/mod";
10+
import { spawn } from "node:child_process";
1111

1212
export const dev = new Command()
1313
.name("dev")
@@ -35,8 +35,6 @@ export async function action(
3535
) {
3636
const cwd = path.join(process.cwd(), cmdPath);
3737
await workflow("Run locally your ActorCore project", async function* (ctx) {
38-
let server: ReturnType<typeof serve>;
39-
4038
if (opts.open) {
4139
open(
4240
process.env._ACTOR_CORE_CLI_DEV
@@ -51,26 +49,48 @@ export async function action(
5149
ignored: (path) => path.includes("node_modules"),
5250
});
5351

54-
let lock: ReturnType<typeof withResolvers> = withResolvers();
52+
function createServer() {
53+
return spawn(
54+
process.execPath,
55+
[
56+
path.join(
57+
path.dirname(require.resolve("@actor-core/cli")),
58+
"server-entry.js",
59+
),
60+
],
61+
{ env: { ...process.env, PORT: opts.port }, cwd },
62+
);
63+
}
5564

56-
watcher.on("all", async (event, path) => {
57-
if (path.includes("node_modules") || path.includes("/.")) return;
65+
let server: ReturnType<typeof spawn> | undefined = undefined;
66+
let lock: ReturnType<typeof withResolvers> = withResolvers();
5867

59-
server?.close();
68+
function createLock() {
6069
if (lock) {
6170
lock.resolve(undefined);
62-
lock = withResolvers();
6371
}
72+
lock = withResolvers();
73+
}
74+
75+
watcher.on("all", async (_, path) => {
76+
if (path.includes("node_modules") || path.includes("/.")) return;
77+
78+
server?.kill();
6479
});
6580

6681
while (true) {
67-
const config = yield* validateConfigTask(ctx, cwd);
68-
config.app.config.inspector = {
69-
enabled: true,
70-
};
71-
server = serve(config.app, {
72-
port: Number.parseInt(opts.port || "6420", 10) || 6420,
82+
yield* validateConfigTask(ctx, cwd);
83+
server = createServer();
84+
createLock();
85+
86+
server?.addListener("exit", () => {
87+
lock.resolve(undefined);
7388
});
89+
90+
server?.addListener("close", () => {
91+
lock.resolve(undefined);
92+
});
93+
7494
yield* ctx.task(
7595
"Watching for changes...",
7696
async () => {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { validateConfig } from "./utils/config";
2+
import { serve } from "@actor-core/nodejs";
3+
4+
async function run() {
5+
const config = await validateConfig(process.cwd());
6+
config.app.config.inspector = {
7+
enabled: true,
8+
};
9+
serve(config.app, {
10+
port: Number.parseInt(process.env.PORT || "6420", 10) || 6420,
11+
});
12+
}
13+
14+
run().catch((err) => {
15+
console.error(err);
16+
process.exit(1);
17+
});

packages/actor-core-cli/src/workflow.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,7 @@ export function workflow(
257257
new Promise<undefined>((resolve) => setTimeout(resolve, ms)),
258258
task: runner.bind(null, {
259259
...meta,
260-
parent: meta.id,
261-
id: "",
260+
parent: meta.parent,
262261
name: "",
263262
}) as Context["task"],
264263
render(children: React.ReactNode) {
@@ -292,11 +291,12 @@ export function workflow(
292291
WorkflowAction.Prompt.One<T>,
293292
WorkflowAction.Prompt.Answer<T>
294293
> {
294+
const id = getTaskId();
295295
const { promise, resolve, reject } =
296296
withResolvers<WorkflowAction.Prompt.Answer<T>>();
297297

298298
yield WorkflowAction.prompt<T>(
299-
{ ...meta, id: meta.id, name: question },
299+
{ ...meta, id, name: question },
300300
question,
301301
{
302302
answer: null,
@@ -308,7 +308,7 @@ export function workflow(
308308
const result = await promise;
309309

310310
yield WorkflowAction.prompt<T>(
311-
{ ...meta, id: meta.id, name: question },
311+
{ ...meta, id, name: question },
312312
question,
313313
{
314314
answer: result,
@@ -353,11 +353,15 @@ export function workflow(
353353
parentMap.set(task.meta.id, parent);
354354
// Propagate errors up the tree
355355
if (task.status === "error") {
356-
let parentTask = parentMap.get(id);
356+
let parentTask = parentMap.get(task.meta.id);
357357
while (parentTask) {
358358
const grandParent = parentMap.get(parentTask);
359359
yield WorkflowAction.progress(
360-
{ id, name: parentTask, parent: grandParent || null },
360+
{
361+
id: parentTask,
362+
name: parentTask,
363+
parent: grandParent || null,
364+
},
361365
"error",
362366
);
363367
parentTask = grandParent;

packages/actor-core-cli/tsup.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const __dirname = topLevelFileURLToPath(new topLevelURL(".", import.meta.url));
1111
`;
1212

1313
export default defineConfig({
14-
entry: ["src/mod.ts", "src/cli.ts"],
14+
entry: ["src/mod.ts", "src/cli.ts", "src/server-entry.ts"],
1515
platform: "node",
1616
bundle: true,
1717
format: "esm",

packages/platforms/nodejs/src/mod.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { assertUnreachable } from "actor-core/utils";
44
import { CoordinateTopology } from "actor-core/topologies/coordinate";
55
import { logger } from "./log";
66
import type { Hono } from "hono";
7-
import { getRouterName, showRoutes } from "hono/dev";
87
import { StandaloneTopology, type ActorCoreApp } from "actor-core";
98
import {
109
MemoryGlobalState,

0 commit comments

Comments
 (0)