cueclaw 0.1.4 → 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.
@@ -6,10 +6,10 @@ import {
6
6
  readPidFile,
7
7
  removePidFile,
8
8
  spawnDaemonProcess
9
- } from "./chunk-54BGF7G5.js";
9
+ } from "./chunk-2PHW4AV3.js";
10
10
  import {
11
11
  getServiceStatus
12
- } from "./chunk-MEAAX2SW.js";
12
+ } from "./chunk-7X5HHQEQ.js";
13
13
  import {
14
14
  checkEnvironment,
15
15
  validateAuth
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-DVQFSFIZ.js";
29
29
  import {
30
30
  executeWorkflow
31
- } from "./chunk-3HV3MHME.js";
31
+ } from "./chunk-4KXY2J6M.js";
32
32
  import {
33
33
  deleteWorkflow,
34
34
  getStepRunsByRunId,
@@ -38,14 +38,14 @@ import {
38
38
  listWorkflows,
39
39
  updateWorkflowPhase,
40
40
  upsertWorkflow
41
- } from "./chunk-HKZ6IN7X.js";
41
+ } from "./chunk-3LMKPLR6.js";
42
42
  import {
43
43
  cueclawHome,
44
44
  loadConfig,
45
45
  loadExistingConfig,
46
46
  validateConfig,
47
47
  writeConfig
48
- } from "./chunk-5TV4LNC3.js";
48
+ } from "./chunk-J53KYCXL.js";
49
49
  import "./chunk-BVQG3WYO.js";
50
50
  import {
51
51
  isDev,
@@ -510,9 +510,13 @@ async function stopDaemonBridge(bridge) {
510
510
  function stopExternalDaemon() {
511
511
  const pid = readPidFile();
512
512
  if (pid && isProcessAlive(pid)) {
513
- process.kill(pid, "SIGTERM");
513
+ try {
514
+ process.kill(pid, "SIGTERM");
515
+ logger.info({ pid }, "Stopped external daemon");
516
+ } catch (err) {
517
+ logger.warn({ err, pid }, "Failed to stop external daemon");
518
+ }
514
519
  removePidFile();
515
- logger.info({ pid }, "Stopped external daemon");
516
520
  }
517
521
  }
518
522
 
@@ -528,7 +532,9 @@ function useDaemonBridge(config, db, cwd, dispatch) {
528
532
  dispatch({ type: "ADD_MESSAGE", message: { type: "system", text: "Starting daemon..." } });
529
533
  initDaemonBridge(db, config, cwd, { skipBots: !hasConfiguredBots }).then((bridge) => {
530
534
  if (cancelled) {
531
- stopDaemonBridge(bridge);
535
+ stopDaemonBridge(bridge).catch((err) => {
536
+ logger.error({ err }, "Failed to stop daemon bridge after cancellation");
537
+ });
532
538
  return;
533
539
  }
534
540
  bridgeRef.current = bridge;
@@ -563,7 +569,9 @@ function useDaemonBridge(config, db, cwd, dispatch) {
563
569
  return () => {
564
570
  cancelled = true;
565
571
  if (bridgeRef.current) {
566
- stopDaemonBridge(bridgeRef.current);
572
+ stopDaemonBridge(bridgeRef.current).catch((err) => {
573
+ logger.error({ err }, "Failed to stop daemon bridge during cleanup");
574
+ });
567
575
  bridgeRef.current = null;
568
576
  }
569
577
  };
@@ -708,7 +716,7 @@ Guidelines:
708
716
  }
709
717
 
710
718
  // src/tui/hooks/use-planner-session.ts
711
- function usePlannerSession(config, dispatch, streamingText) {
719
+ function usePlannerSession(config, dispatch) {
712
720
  const plannerSessionRef = useRef3(null);
713
721
  const handleUserMessage = useCallback3(async (text) => {
714
722
  if (!config) return;
@@ -717,28 +725,25 @@ function usePlannerSession(config, dispatch, streamingText) {
717
725
  dispatch({ type: "SET_STREAMING_TEXT", text: "" });
718
726
  try {
719
727
  let result;
728
+ let accumulated = "";
729
+ const onToken = (token) => {
730
+ accumulated += token;
731
+ dispatch({ type: "SET_STREAMING_TEXT", text: accumulated });
732
+ };
720
733
  const tuiContext = { channel: "tui" };
721
734
  if (plannerSessionRef.current && plannerSessionRef.current.status === "conversing") {
722
735
  result = await continuePlannerSession(
723
736
  plannerSessionRef.current,
724
737
  text,
725
738
  config,
726
- {
727
- onToken: (token) => {
728
- dispatch({ type: "SET_STREAMING_TEXT", text: (streamingText || "") + token });
729
- }
730
- },
739
+ { onToken },
731
740
  tuiContext
732
741
  );
733
742
  } else {
734
743
  result = await startPlannerSession(
735
744
  text,
736
745
  config,
737
- {
738
- onToken: (token) => {
739
- dispatch({ type: "SET_STREAMING_TEXT", text: (streamingText || "") + token });
740
- }
741
- },
746
+ { onToken },
742
747
  tuiContext
743
748
  );
744
749
  }
@@ -774,7 +779,7 @@ function usePlannerSession(config, dispatch, streamingText) {
774
779
  plannerSessionRef.current = null;
775
780
  logger.error({ err }, "Planner session failed");
776
781
  }
777
- }, [config, streamingText]);
782
+ }, [config]);
778
783
  const handleCancelGeneration = useCallback3(() => {
779
784
  if (plannerSessionRef.current) {
780
785
  cancelPlannerSession(plannerSessionRef.current);
@@ -873,7 +878,11 @@ ${failedSteps.join("\n")}` : "";
873
878
  const handleCancel = useCallback4(() => {
874
879
  if (workflow) {
875
880
  const rejected = rejectPlan(workflow);
876
- updateWorkflowPhase(db, workflow.id, rejected.phase);
881
+ try {
882
+ updateWorkflowPhase(db, workflow.id, rejected.phase);
883
+ } catch (err) {
884
+ logger.error({ err }, "Failed to update workflow phase");
885
+ }
877
886
  }
878
887
  if (plannerSessionRef.current) {
879
888
  plannerSessionRef.current = null;
@@ -1663,7 +1672,7 @@ function AppProvider({ cwd, skipOnboarding, children }) {
1663
1672
  });
1664
1673
  }, []);
1665
1674
  const { bridgeRef, daemonStatus } = useDaemonBridge(config, db, cwd, dispatch);
1666
- const planner = usePlannerSession(config, dispatch, state.streamingText);
1675
+ const planner = usePlannerSession(config, dispatch);
1667
1676
  const execution = useWorkflowExecution(
1668
1677
  state.workflow,
1669
1678
  db,
@@ -2498,12 +2507,17 @@ function formatDuration2(ms) {
2498
2507
  }
2499
2508
 
2500
2509
  // src/tui/workflow-detail-view.tsx
2501
- import { useState as useState8, useCallback as useCallback14 } from "react";
2510
+ import { useState as useState8, useCallback as useCallback14, useEffect as useEffect7 } from "react";
2502
2511
  import { Box as Box18, Text as Text18 } from "ink";
2503
2512
  import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
2504
2513
  function WorkflowDetailView({ workflow, runs, latestStepRuns, onBack, onSelectRun, onStop }) {
2505
2514
  const [selectedRunIndex, setSelectedRunIndex] = useState8(0);
2506
2515
  const displayRuns = runs.slice(0, 5);
2516
+ useEffect7(() => {
2517
+ if (selectedRunIndex >= displayRuns.length && displayRuns.length > 0) {
2518
+ setSelectedRunIndex(displayRuns.length - 1);
2519
+ }
2520
+ }, [displayRuns.length, selectedRunIndex]);
2507
2521
  useKeypress("detail-view-actions", KeyPriority.Normal, useCallback14((input, key) => {
2508
2522
  if (keyBindings.escape(input, key) || keyBindings.quit(input, key)) {
2509
2523
  onBack();
@@ -2678,7 +2692,7 @@ function formatDuration3(ms) {
2678
2692
  }
2679
2693
 
2680
2694
  // src/tui/onboarding.tsx
2681
- import { useState as useState9, useCallback as useCallback15, useMemo as useMemo5 } from "react";
2695
+ import { useState as useState9, useCallback as useCallback15, useMemo as useMemo5, useRef as useRef9, useEffect as useEffect8 } from "react";
2682
2696
  import { Box as Box19, Text as Text19, useStdout as useStdout4 } from "ink";
2683
2697
  import { TextInput, PasswordInput, ConfirmInput, Spinner, StatusMessage } from "@inkjs/ui";
2684
2698
  import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
@@ -2690,6 +2704,12 @@ function Onboarding({ onComplete, onCancel, issues }) {
2690
2704
  const { stdout } = useStdout4();
2691
2705
  const cols = stdout?.columns ?? 80;
2692
2706
  const existing = useMemo5(() => loadExistingConfig(), []);
2707
+ const completeTimerRef = useRef9(null);
2708
+ useEffect8(() => {
2709
+ return () => {
2710
+ if (completeTimerRef.current) clearTimeout(completeTimerRef.current);
2711
+ };
2712
+ }, []);
2693
2713
  const initialStep = useMemo5(() => {
2694
2714
  if (!issues || issues.length === 0) return "welcome";
2695
2715
  const errorFields = new Set(issues.filter((i) => i.severity === "error").map((i) => i.field));
@@ -2710,6 +2730,7 @@ function Onboarding({ onComplete, onCancel, issues }) {
2710
2730
  const env = checkEnvironment();
2711
2731
  useKeypress("onboarding-cancel", KeyPriority.Normal, useCallback15((input, key) => {
2712
2732
  if (onCancel && keyBindings.escape(input, key)) {
2733
+ if (completeTimerRef.current) clearTimeout(completeTimerRef.current);
2713
2734
  onCancel();
2714
2735
  return true;
2715
2736
  }
@@ -2848,7 +2869,7 @@ function Onboarding({ onComplete, onCancel, issues }) {
2848
2869
  }
2849
2870
  const config = loadConfig();
2850
2871
  setStep("done");
2851
- setTimeout(() => onComplete(config), 1500);
2872
+ completeTimerRef.current = setTimeout(() => onComplete(config), 1500);
2852
2873
  }, [onComplete]);
2853
2874
  const StepLayout = ({ children, input }) => /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", flexGrow: 1, children: [
2854
2875
  /* @__PURE__ */ jsx23(Box19, { flexDirection: "column", flexGrow: 1, children }),
@@ -3106,14 +3127,19 @@ function Onboarding({ onComplete, onCancel, issues }) {
3106
3127
  }
3107
3128
 
3108
3129
  // src/tui/status.tsx
3109
- import { useState as useState10, useCallback as useCallback16, useEffect as useEffect7 } from "react";
3130
+ import { useState as useState10, useCallback as useCallback16, useEffect as useEffect9 } from "react";
3110
3131
  import { Box as Box20, Text as Text20 } from "ink";
3111
3132
  import { Fragment as Fragment5, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
3112
3133
  function Status({ workflows, onSelect, onBack, onStop, onDelete }) {
3113
3134
  const [selectedIndex, setSelectedIndex] = useState10(0);
3114
3135
  const [confirm, setConfirm] = useState10(null);
3115
3136
  const [message, setMessage] = useState10(null);
3116
- useEffect7(() => {
3137
+ useEffect9(() => {
3138
+ if (selectedIndex >= workflows.length && workflows.length > 0) {
3139
+ setSelectedIndex(workflows.length - 1);
3140
+ }
3141
+ }, [workflows.length, selectedIndex]);
3142
+ useEffect9(() => {
3117
3143
  if (!message) return;
3118
3144
  const timer = setTimeout(() => setMessage(null), 3e3);
3119
3145
  return () => clearTimeout(timer);
@@ -3224,7 +3250,7 @@ function AppLayout({ cwd }) {
3224
3250
  const configIssues = useMemo6(() => {
3225
3251
  const validation = validateConfig();
3226
3252
  return validation.issues.filter((i) => i.severity === "error");
3227
- }, []);
3253
+ }, [config]);
3228
3254
  return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", height: rows, children: [
3229
3255
  /* @__PURE__ */ jsx25(Static, { items: view !== "onboarding" ? ["banner"] : [], children: (item) => /* @__PURE__ */ jsx25(
3230
3256
  Banner,
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  cleanupStaleSessions,
12
12
  executeWorkflow
13
- } from "./chunk-3HV3MHME.js";
13
+ } from "./chunk-4KXY2J6M.js";
14
14
  import {
15
15
  getWorkflow,
16
16
  initDb,
@@ -18,11 +18,11 @@ import {
18
18
  listWorkflows,
19
19
  updateWorkflowPhase,
20
20
  upsertWorkflow
21
- } from "./chunk-HKZ6IN7X.js";
21
+ } from "./chunk-3LMKPLR6.js";
22
22
  import {
23
23
  cueclawHome,
24
24
  loadConfig
25
- } from "./chunk-5TV4LNC3.js";
25
+ } from "./chunk-J53KYCXL.js";
26
26
  import {
27
27
  logger
28
28
  } from "./chunk-KBLMQZ3P.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cueclawHome
3
- } from "./chunk-5TV4LNC3.js";
3
+ } from "./chunk-J53KYCXL.js";
4
4
 
5
5
  // src/db.ts
6
6
  import Database from "better-sqlite3";
@@ -4,12 +4,12 @@ import {
4
4
  updateStepRunStatus,
5
5
  updateWorkflowPhase,
6
6
  updateWorkflowRunStatus
7
- } from "./chunk-HKZ6IN7X.js";
7
+ } from "./chunk-3LMKPLR6.js";
8
8
  import {
9
9
  cueclawHome,
10
10
  getDefaultImage,
11
11
  loadConfig
12
- } from "./chunk-5TV4LNC3.js";
12
+ } from "./chunk-J53KYCXL.js";
13
13
  import {
14
14
  ConfigError,
15
15
  ExecutorError
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cueclawHome
3
- } from "./chunk-5TV4LNC3.js";
3
+ } from "./chunk-J53KYCXL.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-KBLMQZ3P.js";
@@ -18,13 +18,13 @@ var ConfigSchema = z.object({
18
18
  claude: z.object({
19
19
  api_key: z.string(),
20
20
  base_url: z.url().default("https://api.anthropic.com"),
21
- planner: z.object({ model: z.string().default("claude-sonnet-4-6") }).default({ model: "claude-sonnet-4-6" }),
21
+ planner: z.object({ model: z.string().default("claude-opus-4-6") }).default({ model: "claude-opus-4-6" }),
22
22
  executor: z.object({
23
- model: z.string().default("claude-sonnet-4-6"),
23
+ model: z.string().default("claude-opus-4-6"),
24
24
  api_key: z.string().optional(),
25
25
  base_url: z.url().optional(),
26
26
  skip_permissions: z.boolean().default(false)
27
- }).default({ model: "claude-sonnet-4-6", skip_permissions: false })
27
+ }).default({ model: "claude-opus-4-6", skip_permissions: false })
28
28
  }),
29
29
  identity: z.object({ name: z.string() }).optional(),
30
30
  whatsapp: z.object({
@@ -141,9 +141,9 @@ var DEFAULT_CONFIG = `# CueClaw Configuration
141
141
  claude:
142
142
  api_key: \${ANTHROPIC_API_KEY}
143
143
  planner:
144
- model: claude-sonnet-4-6
144
+ model: claude-opus-4-6
145
145
  executor:
146
- model: claude-sonnet-4-6
146
+ model: claude-opus-4-6
147
147
 
148
148
  container:
149
149
  enabled: true
package/dist/cli.js CHANGED
@@ -8,13 +8,13 @@ import {
8
8
  insertWorkflow,
9
9
  listWorkflows,
10
10
  updateWorkflowPhase
11
- } from "./chunk-HKZ6IN7X.js";
11
+ } from "./chunk-3LMKPLR6.js";
12
12
  import {
13
13
  createDefaultConfig,
14
14
  cueclawHome,
15
15
  ensureCueclawHome,
16
16
  loadConfig
17
- } from "./chunk-5TV4LNC3.js";
17
+ } from "./chunk-J53KYCXL.js";
18
18
  import "./chunk-BVQG3WYO.js";
19
19
  import {
20
20
  loadSecrets
@@ -115,7 +115,7 @@ program.command("new").description("Create a new workflow from a natural languag
115
115
  try {
116
116
  const config = loadConfig();
117
117
  const { generatePlan, confirmPlan } = await import("./planner-MJ3XBCWH.js");
118
- const { executeWorkflow } = await import("./executor-44MSZ76T.js");
118
+ const { executeWorkflow } = await import("./executor-VIWMPELU.js");
119
119
  logger.info({ description: description.slice(0, 100) }, "Starting plan generation");
120
120
  console.log("Planning workflow...");
121
121
  const workflow = await generatePlan(description, config);
@@ -295,7 +295,7 @@ program.command("resume").argument("<workflow-id>", "Workflow ID").description("
295
295
  updateWorkflowPhase(db, workflowId, "executing");
296
296
  logger.info({ workflowId }, "Resuming workflow execution");
297
297
  console.log(`Executing workflow "${wf.name}"...`);
298
- const { executeWorkflow } = await import("./executor-44MSZ76T.js");
298
+ const { executeWorkflow } = await import("./executor-VIWMPELU.js");
299
299
  const result = await executeWorkflow({
300
300
  workflow: { ...wf, phase: "executing" },
301
301
  triggerData: null,
@@ -359,7 +359,7 @@ var daemonCmd = program.command("daemon").description("Manage background daemon"
359
359
  daemonCmd.command("start").option("--foreground", "Run in foreground (for system services)").description("Start the daemon (runs in background by default)").action(async (opts) => {
360
360
  if (opts.foreground) {
361
361
  try {
362
- const { startDaemon } = await import("./daemon-Y5HIGH44.js");
362
+ const { startDaemon } = await import("./daemon-IAWVNSJS.js");
363
363
  await startDaemon();
364
364
  } catch (err) {
365
365
  logger.error({ err }, "Daemon failed");
@@ -367,7 +367,7 @@ daemonCmd.command("start").option("--foreground", "Run in foreground (for system
367
367
  }
368
368
  return;
369
369
  }
370
- const { isDaemonRunning, spawnDaemonProcess } = await import("./daemon-Y5HIGH44.js");
370
+ const { isDaemonRunning, spawnDaemonProcess } = await import("./daemon-IAWVNSJS.js");
371
371
  if (isDaemonRunning()) {
372
372
  console.log("Daemon is already running.");
373
373
  return;
@@ -382,7 +382,7 @@ daemonCmd.command("start").option("--foreground", "Run in foreground (for system
382
382
  }
383
383
  });
384
384
  daemonCmd.command("stop").description("Stop the daemon").action(async () => {
385
- const { readPidFile, isProcessAlive, removePidFile } = await import("./daemon-Y5HIGH44.js");
385
+ const { readPidFile, isProcessAlive, removePidFile } = await import("./daemon-IAWVNSJS.js");
386
386
  const pid = readPidFile();
387
387
  if (pid && isProcessAlive(pid)) {
388
388
  process.kill(pid, "SIGTERM");
@@ -391,7 +391,7 @@ daemonCmd.command("stop").description("Stop the daemon").action(async () => {
391
391
  console.log(`Daemon stopped (PID ${pid}).`);
392
392
  return;
393
393
  }
394
- const { getServiceStatus, stopService } = await import("./service-Q7USNFFB.js");
394
+ const { getServiceStatus, stopService } = await import("./service-SYWHY6SI.js");
395
395
  const status = getServiceStatus();
396
396
  if (status === "running") {
397
397
  const result = stopService();
@@ -409,14 +409,14 @@ daemonCmd.command("stop").description("Stop the daemon").action(async () => {
409
409
  console.log("Daemon is not running.");
410
410
  });
411
411
  daemonCmd.command("restart").description("Restart the daemon").action(async () => {
412
- const { readPidFile, isProcessAlive, removePidFile } = await import("./daemon-Y5HIGH44.js");
412
+ const { readPidFile, isProcessAlive, removePidFile } = await import("./daemon-IAWVNSJS.js");
413
413
  const pid = readPidFile();
414
414
  if (pid && isProcessAlive(pid)) {
415
415
  process.kill(pid, "SIGTERM");
416
416
  removePidFile();
417
417
  console.log(`Stopped daemon (PID ${pid}).`);
418
418
  } else {
419
- const { getServiceStatus, stopService } = await import("./service-Q7USNFFB.js");
419
+ const { getServiceStatus, stopService } = await import("./service-SYWHY6SI.js");
420
420
  if (getServiceStatus() === "running") {
421
421
  const result = stopService();
422
422
  if (!result.success) {
@@ -426,7 +426,7 @@ daemonCmd.command("restart").description("Restart the daemon").action(async () =
426
426
  console.log("Stopped system service daemon.");
427
427
  }
428
428
  }
429
- const { spawnDaemonProcess } = await import("./daemon-Y5HIGH44.js");
429
+ const { spawnDaemonProcess } = await import("./daemon-IAWVNSJS.js");
430
430
  const newPid = spawnDaemonProcess();
431
431
  if (newPid) {
432
432
  console.log(`Daemon restarted in background (PID ${newPid})`);
@@ -436,7 +436,7 @@ daemonCmd.command("restart").description("Restart the daemon").action(async () =
436
436
  }
437
437
  });
438
438
  daemonCmd.command("install").description("Install system service").action(async () => {
439
- const { installService } = await import("./service-Q7USNFFB.js");
439
+ const { installService } = await import("./service-SYWHY6SI.js");
440
440
  const result = installService();
441
441
  if (result.success) {
442
442
  logger.info("System service installed");
@@ -448,7 +448,7 @@ daemonCmd.command("install").description("Install system service").action(async
448
448
  }
449
449
  });
450
450
  daemonCmd.command("uninstall").description("Remove system service").action(async () => {
451
- const { uninstallService } = await import("./service-Q7USNFFB.js");
451
+ const { uninstallService } = await import("./service-SYWHY6SI.js");
452
452
  const result = uninstallService();
453
453
  if (result.success) {
454
454
  logger.info("System service uninstalled");
@@ -460,13 +460,13 @@ daemonCmd.command("uninstall").description("Remove system service").action(async
460
460
  }
461
461
  });
462
462
  daemonCmd.command("status").description("View daemon status").action(async () => {
463
- const { readPidFile, isProcessAlive } = await import("./daemon-Y5HIGH44.js");
463
+ const { readPidFile, isProcessAlive } = await import("./daemon-IAWVNSJS.js");
464
464
  const pid = readPidFile();
465
465
  if (pid && isProcessAlive(pid)) {
466
466
  console.log(`Daemon status: running (PID ${pid})`);
467
467
  return;
468
468
  }
469
- const { getServiceStatus } = await import("./service-Q7USNFFB.js");
469
+ const { getServiceStatus } = await import("./service-SYWHY6SI.js");
470
470
  const status = getServiceStatus();
471
471
  if (status === "running") {
472
472
  console.log(`Daemon status: running (system service)`);
@@ -476,7 +476,7 @@ daemonCmd.command("status").description("View daemon status").action(async () =>
476
476
  });
477
477
  daemonCmd.command("logs").description("View daemon logs").action(async () => {
478
478
  const { join } = await import("path");
479
- const { cueclawHome: cueclawHome2 } = await import("./config-FYL6T5JP.js");
479
+ const { cueclawHome: cueclawHome2 } = await import("./config-MIMVWGYE.js");
480
480
  const logPath = join(cueclawHome2(), "logs", "daemon.log");
481
481
  const { existsSync } = await import("fs");
482
482
  if (!existsSync(logPath)) {
@@ -495,7 +495,7 @@ botCmd.command("status").description("View channel connection status").action(()
495
495
  program.command("setup").description("First-run setup: validate Docker, build container, smoke test").action(async () => {
496
496
  try {
497
497
  const config = loadConfig();
498
- const { runSetup } = await import("./setup-JK664Y2M.js");
498
+ const { runSetup } = await import("./setup-S4LRDLRD.js");
499
499
  await runSetup(config, process.cwd());
500
500
  } catch (err) {
501
501
  logger.error({ err }, "Setup failed");
@@ -508,7 +508,7 @@ program.command("tui").description("Start interactive TUI").option("--skip-onboa
508
508
  enableTuiLogging();
509
509
  const React = await import("react");
510
510
  const { render } = await import("ink");
511
- const { App } = await import("./app-6SXWEUZZ.js");
511
+ const { App } = await import("./app-P3ERBGJD.js");
512
512
  render(React.createElement(App, { cwd: process.cwd(), skipOnboarding: opts.skipOnboarding }), { exitOnCtrlC: false });
513
513
  } catch (err) {
514
514
  logger.error({ err }, "Failed to start TUI");
@@ -522,7 +522,7 @@ program.option("--skip-onboarding", "Skip first-run onboarding wizard").action(a
522
522
  enableTuiLogging();
523
523
  const React = await import("react");
524
524
  const { render } = await import("ink");
525
- const { App } = await import("./app-6SXWEUZZ.js");
525
+ const { App } = await import("./app-P3ERBGJD.js");
526
526
  render(React.createElement(App, { cwd: process.cwd(), skipOnboarding }), { exitOnCtrlC: false });
527
527
  } catch (err) {
528
528
  logger.error({ err }, "Failed to start TUI");
@@ -8,7 +8,7 @@ import {
8
8
  needsOnboarding,
9
9
  validateConfig,
10
10
  writeConfig
11
- } from "./chunk-5TV4LNC3.js";
11
+ } from "./chunk-J53KYCXL.js";
12
12
  import "./chunk-BVQG3WYO.js";
13
13
  import "./chunk-ZCK3IFLC.js";
14
14
  export {
@@ -7,12 +7,12 @@ import {
7
7
  spawnDaemonProcess,
8
8
  startDaemon,
9
9
  writePidFile
10
- } from "./chunk-54BGF7G5.js";
10
+ } from "./chunk-2PHW4AV3.js";
11
11
  import "./chunk-ZOFGQYXX.js";
12
12
  import "./chunk-DVQFSFIZ.js";
13
- import "./chunk-3HV3MHME.js";
14
- import "./chunk-HKZ6IN7X.js";
15
- import "./chunk-5TV4LNC3.js";
13
+ import "./chunk-4KXY2J6M.js";
14
+ import "./chunk-3LMKPLR6.js";
15
+ import "./chunk-J53KYCXL.js";
16
16
  import "./chunk-BVQG3WYO.js";
17
17
  import "./chunk-ZCK3IFLC.js";
18
18
  import "./chunk-KBLMQZ3P.js";
@@ -2,9 +2,9 @@ import {
2
2
  executeWorkflow,
3
3
  resolveInputs,
4
4
  resolveValue
5
- } from "./chunk-3HV3MHME.js";
6
- import "./chunk-HKZ6IN7X.js";
7
- import "./chunk-5TV4LNC3.js";
5
+ } from "./chunk-4KXY2J6M.js";
6
+ import "./chunk-3LMKPLR6.js";
7
+ import "./chunk-J53KYCXL.js";
8
8
  import "./chunk-BVQG3WYO.js";
9
9
  import "./chunk-ZCK3IFLC.js";
10
10
  import "./chunk-KBLMQZ3P.js";
@@ -3,8 +3,8 @@ import {
3
3
  installService,
4
4
  stopService,
5
5
  uninstallService
6
- } from "./chunk-MEAAX2SW.js";
7
- import "./chunk-5TV4LNC3.js";
6
+ } from "./chunk-7X5HHQEQ.js";
7
+ import "./chunk-J53KYCXL.js";
8
8
  import "./chunk-BVQG3WYO.js";
9
9
  import "./chunk-ZCK3IFLC.js";
10
10
  import "./chunk-KBLMQZ3P.js";
@@ -5,7 +5,7 @@ import {
5
5
  import "./chunk-DVQFSFIZ.js";
6
6
  import {
7
7
  getDefaultImage
8
- } from "./chunk-5TV4LNC3.js";
8
+ } from "./chunk-J53KYCXL.js";
9
9
  import "./chunk-BVQG3WYO.js";
10
10
  import "./chunk-ZCK3IFLC.js";
11
11
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cueclaw",
3
- "version": "0.1.4",
3
+ "version": "0.2.1",
4
4
  "description": "Orchestrate agent workflows with natural language. Natural language in, executable DAG out.",
5
5
  "type": "module",
6
6
  "bin": {