@kynver-app/runtime 0.1.3 → 0.1.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
@@ -1488,6 +1488,101 @@ async function runDaemon(args) {
1488
1488
  console.error(JSON.stringify({ event: "daemon_stop", runId, agentOsId }));
1489
1489
  }
1490
1490
 
1491
+ // src/plan-progress.ts
1492
+ function parseEvidenceArg(raw) {
1493
+ const idx = raw.indexOf(":");
1494
+ if (idx <= 0) throw new Error(`invalid --evidence ${raw} (expected type:value)`);
1495
+ return { type: raw.slice(0, idx), value: raw.slice(idx + 1) };
1496
+ }
1497
+ async function emitPlanProgress(args) {
1498
+ const planId = required(args, "plan");
1499
+ const agentOsId = (args.agentOsId ? String(args.agentOsId) : loadUserConfig().agentOsId) || "";
1500
+ if (!agentOsId) {
1501
+ console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json");
1502
+ process.exit(1);
1503
+ }
1504
+ const roleLane = required(args, "role");
1505
+ const status = required(args, "status");
1506
+ const evidence = [];
1507
+ const rawEvidence = args.evidence;
1508
+ if (Array.isArray(rawEvidence)) {
1509
+ for (const item of rawEvidence) evidence.push(parseEvidenceArg(String(item)));
1510
+ } else if (typeof rawEvidence === "string") {
1511
+ evidence.push(parseEvidenceArg(rawEvidence));
1512
+ }
1513
+ const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1514
+ const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0);
1515
+ const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/plans/${encodeURIComponent(planId)}/progress-events`;
1516
+ const body = {
1517
+ rowKey: args.row ? String(args.row) : void 0,
1518
+ rowId: args.rowId ? String(args.rowId) : void 0,
1519
+ taskId: args.task ? String(args.task) : void 0,
1520
+ reviewTaskId: args.reviewTask ? String(args.reviewTask) : void 0,
1521
+ roleLane,
1522
+ status,
1523
+ note: args.note ? String(args.note) : void 0,
1524
+ remainingWork: args.remaining ? String(args.remaining) : void 0,
1525
+ evidence: evidence.length ? evidence : void 0,
1526
+ proposed: args.proposed === true || args.proposed === "true",
1527
+ executorRef: args.executorRef ? String(args.executorRef) : void 0
1528
+ };
1529
+ const res = await fetch(url, {
1530
+ method: "POST",
1531
+ headers: {
1532
+ "Content-Type": "application/json",
1533
+ "X-OpenClaw-Cron-Secret": secret,
1534
+ "X-Kynver-Runtime-Secret": secret
1535
+ },
1536
+ body: JSON.stringify(body)
1537
+ });
1538
+ const text = await res.text();
1539
+ let parsed = null;
1540
+ try {
1541
+ parsed = JSON.parse(text);
1542
+ } catch {
1543
+ parsed = text;
1544
+ }
1545
+ if (!res.ok) {
1546
+ console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));
1547
+ process.exit(1);
1548
+ }
1549
+ console.log(JSON.stringify(parsed, null, 2));
1550
+ }
1551
+ async function verifyPlan(args) {
1552
+ const planId = required(args, "plan");
1553
+ const slug = loadUserConfig().agentOsSlug;
1554
+ if (!slug) {
1555
+ console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)");
1556
+ process.exit(1);
1557
+ }
1558
+ const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
1559
+ const apiKey = process.env.KYNVER_API_KEY;
1560
+ const headers = { "Content-Type": "application/json" };
1561
+ if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
1562
+ const url = `${base}/api/agent-os/${encodeURIComponent(slug)}/plans/${encodeURIComponent(planId)}/verify`;
1563
+ const res = await fetch(url, {
1564
+ method: "POST",
1565
+ headers,
1566
+ body: JSON.stringify({
1567
+ worktreePath: args.worktree ? String(args.worktree) : void 0,
1568
+ taskId: args.task ? String(args.task) : void 0,
1569
+ humanOverride: args.humanOverride === true || args.humanOverride === "true"
1570
+ })
1571
+ });
1572
+ const text = await res.text();
1573
+ let parsed = null;
1574
+ try {
1575
+ parsed = JSON.parse(text);
1576
+ } catch {
1577
+ parsed = text;
1578
+ }
1579
+ if (!res.ok) {
1580
+ console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));
1581
+ process.exit(1);
1582
+ }
1583
+ console.log(JSON.stringify(parsed, null, 2));
1584
+ }
1585
+
1491
1586
  // src/cli.ts
1492
1587
  function isHelpFlag(arg) {
1493
1588
  return arg === "help" || arg === "--help" || arg === "-h";
@@ -1514,7 +1609,9 @@ function usage(code = 0) {
1514
1609
  " kynver worker status --run RUN_ID --name worker",
1515
1610
  " kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]",
1516
1611
  " kynver worker stop --run RUN_ID --name worker",
1517
- " kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"
1612
+ " kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]",
1613
+ " kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]",
1614
+ " kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override]"
1518
1615
  ].join("\n")
1519
1616
  );
1520
1617
  process.exit(code);
@@ -1524,7 +1621,7 @@ async function main(argv = process.argv.slice(2)) {
1524
1621
  const scope = argv.shift();
1525
1622
  let action;
1526
1623
  let rest;
1527
- if (scope === "run" || scope === "worker") {
1624
+ if (scope === "run" || scope === "worker" || scope === "plan") {
1528
1625
  action = argv.shift();
1529
1626
  rest = argv;
1530
1627
  } else {
@@ -1537,6 +1634,8 @@ async function main(argv = process.argv.slice(2)) {
1537
1634
  if (scope === "login") return void await runLogin(args);
1538
1635
  if (scope === "setup") return void await runSetup(args);
1539
1636
  if (scope === "daemon") return void await runDaemon(args);
1637
+ if (scope === "plan" && action === "progress") return void await emitPlanProgress(args);
1638
+ if (scope === "plan" && action === "verify") return void await verifyPlan(args);
1540
1639
  if (scope === "run" && action === "create") return createRun(args);
1541
1640
  if (scope === "run" && action === "list") return listRuns();
1542
1641
  if (scope === "run" && action === "status") return runStatus(args);