@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 +101 -2
- package/dist/cli.js.map +3 -3
- package/dist/index.js +101 -2
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1513,6 +1513,101 @@ async function runDaemon(args) {
|
|
|
1513
1513
|
console.error(JSON.stringify({ event: "daemon_stop", runId, agentOsId }));
|
|
1514
1514
|
}
|
|
1515
1515
|
|
|
1516
|
+
// src/plan-progress.ts
|
|
1517
|
+
function parseEvidenceArg(raw) {
|
|
1518
|
+
const idx = raw.indexOf(":");
|
|
1519
|
+
if (idx <= 0) throw new Error(`invalid --evidence ${raw} (expected type:value)`);
|
|
1520
|
+
return { type: raw.slice(0, idx), value: raw.slice(idx + 1) };
|
|
1521
|
+
}
|
|
1522
|
+
async function emitPlanProgress(args) {
|
|
1523
|
+
const planId = required(args, "plan");
|
|
1524
|
+
const agentOsId = (args.agentOsId ? String(args.agentOsId) : loadUserConfig().agentOsId) || "";
|
|
1525
|
+
if (!agentOsId) {
|
|
1526
|
+
console.error("requires --agent-os-id or agentOsId in ~/.kynver/config.json");
|
|
1527
|
+
process.exit(1);
|
|
1528
|
+
}
|
|
1529
|
+
const roleLane = required(args, "role");
|
|
1530
|
+
const status = required(args, "status");
|
|
1531
|
+
const evidence = [];
|
|
1532
|
+
const rawEvidence = args.evidence;
|
|
1533
|
+
if (Array.isArray(rawEvidence)) {
|
|
1534
|
+
for (const item of rawEvidence) evidence.push(parseEvidenceArg(String(item)));
|
|
1535
|
+
} else if (typeof rawEvidence === "string") {
|
|
1536
|
+
evidence.push(parseEvidenceArg(rawEvidence));
|
|
1537
|
+
}
|
|
1538
|
+
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1539
|
+
const secret = resolveCallbackSecret(args.secret ? String(args.secret) : void 0);
|
|
1540
|
+
const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/plans/${encodeURIComponent(planId)}/progress-events`;
|
|
1541
|
+
const body = {
|
|
1542
|
+
rowKey: args.row ? String(args.row) : void 0,
|
|
1543
|
+
rowId: args.rowId ? String(args.rowId) : void 0,
|
|
1544
|
+
taskId: args.task ? String(args.task) : void 0,
|
|
1545
|
+
reviewTaskId: args.reviewTask ? String(args.reviewTask) : void 0,
|
|
1546
|
+
roleLane,
|
|
1547
|
+
status,
|
|
1548
|
+
note: args.note ? String(args.note) : void 0,
|
|
1549
|
+
remainingWork: args.remaining ? String(args.remaining) : void 0,
|
|
1550
|
+
evidence: evidence.length ? evidence : void 0,
|
|
1551
|
+
proposed: args.proposed === true || args.proposed === "true",
|
|
1552
|
+
executorRef: args.executorRef ? String(args.executorRef) : void 0
|
|
1553
|
+
};
|
|
1554
|
+
const res = await fetch(url, {
|
|
1555
|
+
method: "POST",
|
|
1556
|
+
headers: {
|
|
1557
|
+
"Content-Type": "application/json",
|
|
1558
|
+
"X-OpenClaw-Cron-Secret": secret,
|
|
1559
|
+
"X-Kynver-Runtime-Secret": secret
|
|
1560
|
+
},
|
|
1561
|
+
body: JSON.stringify(body)
|
|
1562
|
+
});
|
|
1563
|
+
const text = await res.text();
|
|
1564
|
+
let parsed = null;
|
|
1565
|
+
try {
|
|
1566
|
+
parsed = JSON.parse(text);
|
|
1567
|
+
} catch {
|
|
1568
|
+
parsed = text;
|
|
1569
|
+
}
|
|
1570
|
+
if (!res.ok) {
|
|
1571
|
+
console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));
|
|
1572
|
+
process.exit(1);
|
|
1573
|
+
}
|
|
1574
|
+
console.log(JSON.stringify(parsed, null, 2));
|
|
1575
|
+
}
|
|
1576
|
+
async function verifyPlan(args) {
|
|
1577
|
+
const planId = required(args, "plan");
|
|
1578
|
+
const slug = loadUserConfig().agentOsSlug;
|
|
1579
|
+
if (!slug) {
|
|
1580
|
+
console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)");
|
|
1581
|
+
process.exit(1);
|
|
1582
|
+
}
|
|
1583
|
+
const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : void 0);
|
|
1584
|
+
const apiKey = process.env.KYNVER_API_KEY;
|
|
1585
|
+
const headers = { "Content-Type": "application/json" };
|
|
1586
|
+
if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
|
|
1587
|
+
const url = `${base}/api/agent-os/${encodeURIComponent(slug)}/plans/${encodeURIComponent(planId)}/verify`;
|
|
1588
|
+
const res = await fetch(url, {
|
|
1589
|
+
method: "POST",
|
|
1590
|
+
headers,
|
|
1591
|
+
body: JSON.stringify({
|
|
1592
|
+
worktreePath: args.worktree ? String(args.worktree) : void 0,
|
|
1593
|
+
taskId: args.task ? String(args.task) : void 0,
|
|
1594
|
+
humanOverride: args.humanOverride === true || args.humanOverride === "true"
|
|
1595
|
+
})
|
|
1596
|
+
});
|
|
1597
|
+
const text = await res.text();
|
|
1598
|
+
let parsed = null;
|
|
1599
|
+
try {
|
|
1600
|
+
parsed = JSON.parse(text);
|
|
1601
|
+
} catch {
|
|
1602
|
+
parsed = text;
|
|
1603
|
+
}
|
|
1604
|
+
if (!res.ok) {
|
|
1605
|
+
console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));
|
|
1606
|
+
process.exit(1);
|
|
1607
|
+
}
|
|
1608
|
+
console.log(JSON.stringify(parsed, null, 2));
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1516
1611
|
// src/cli.ts
|
|
1517
1612
|
function isHelpFlag(arg) {
|
|
1518
1613
|
return arg === "help" || arg === "--help" || arg === "-h";
|
|
@@ -1539,7 +1634,9 @@ function usage(code = 0) {
|
|
|
1539
1634
|
" kynver worker status --run RUN_ID --name worker",
|
|
1540
1635
|
" kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]",
|
|
1541
1636
|
" kynver worker stop --run RUN_ID --name worker",
|
|
1542
|
-
" kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]"
|
|
1637
|
+
" kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]",
|
|
1638
|
+
" 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]",
|
|
1639
|
+
" kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override]"
|
|
1543
1640
|
].join("\n")
|
|
1544
1641
|
);
|
|
1545
1642
|
process.exit(code);
|
|
@@ -1549,7 +1646,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
1549
1646
|
const scope = argv.shift();
|
|
1550
1647
|
let action;
|
|
1551
1648
|
let rest;
|
|
1552
|
-
if (scope === "run" || scope === "worker") {
|
|
1649
|
+
if (scope === "run" || scope === "worker" || scope === "plan") {
|
|
1553
1650
|
action = argv.shift();
|
|
1554
1651
|
rest = argv;
|
|
1555
1652
|
} else {
|
|
@@ -1562,6 +1659,8 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
1562
1659
|
if (scope === "login") return void await runLogin(args);
|
|
1563
1660
|
if (scope === "setup") return void await runSetup(args);
|
|
1564
1661
|
if (scope === "daemon") return void await runDaemon(args);
|
|
1662
|
+
if (scope === "plan" && action === "progress") return void await emitPlanProgress(args);
|
|
1663
|
+
if (scope === "plan" && action === "verify") return void await verifyPlan(args);
|
|
1565
1664
|
if (scope === "run" && action === "create") return createRun(args);
|
|
1566
1665
|
if (scope === "run" && action === "list") return listRuns();
|
|
1567
1666
|
if (scope === "run" && action === "status") return runStatus(args);
|