@kynver-app/mcp-agent-os 0.3.7 → 0.3.8

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/server.js CHANGED
@@ -10,6 +10,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
10
  import { z } from "zod";
11
11
  import { get, post, patch } from "./lib/kynver-client.js";
12
12
  import { registerPlanTools } from "./tools/plans.js";
13
+ import { registerPlanProgressTools } from "./tools/plan-progress.js";
13
14
  import { registerTaskTools } from "./tools/tasks.js";
14
15
  import { registerActionRequiredTools } from "./tools/action-required.js";
15
16
  function jsonResult(data) {
@@ -610,6 +611,7 @@ export function createAgentOsServer() {
610
611
  registerTaskTools({ register, resolveToolSlug, jsonResult, compact });
611
612
  // First-class AgentOS plans (Phase 5A): versioned operational artifacts.
612
613
  registerPlanTools({ register, resolveToolSlug, jsonResult, compact });
614
+ registerPlanProgressTools({ register, resolveToolSlug, jsonResult, compact });
613
615
  // Action Required inbox: agent_os_ask_human + agent_os_await_action (slice 1).
614
616
  registerActionRequiredTools({ register, jsonResult, compact });
615
617
  return server;
@@ -0,0 +1,2 @@
1
+ import type { PlanToolDeps } from "./plans.js";
2
+ export declare function registerPlanProgressTools({ register, resolveToolSlug, jsonResult, compact, }: PlanToolDeps): void;
@@ -0,0 +1,113 @@
1
+ import { z } from "zod";
2
+ import { get, post } from "../lib/kynver-client.js";
3
+ const progressStatus = z.enum(["todo", "running", "partial", "blocked", "done"]);
4
+ const roleLane = z.enum([
5
+ "plan_author",
6
+ "plan_reviewer",
7
+ "implementer",
8
+ "report_reviewer",
9
+ "deep_reviewer",
10
+ "repair_implementer",
11
+ "runtime_verifier",
12
+ "user",
13
+ "system",
14
+ ]);
15
+ const evidenceSchema = z.object({
16
+ type: z.enum(["path", "pr", "commit", "command", "url", "note"]),
17
+ value: z.string(),
18
+ exitCode: z.number().optional(),
19
+ stdoutTail: z.string().optional(),
20
+ });
21
+ const rowUpsertSchema = z.object({
22
+ rowKey: z.string(),
23
+ title: z.string(),
24
+ description: z.string().optional(),
25
+ ordinal: z.number(),
26
+ stageId: z.string().optional(),
27
+ ownerLane: roleLane.optional(),
28
+ taskId: z.string().optional(),
29
+ });
30
+ export function registerPlanProgressTools({ register, resolveToolSlug, jsonResult, compact, }) {
31
+ const slugField = z
32
+ .string()
33
+ .optional()
34
+ .describe("AgentOS workspace slug. Omit to use env or the server-discovered primary.");
35
+ register("agent_os_plan_progress_rows_upsert", "Seed or update structured plan progress rows (canonical checklist state).", {
36
+ planId: z.string(),
37
+ rows: z.array(rowUpsertSchema),
38
+ slug: slugField,
39
+ }, async (args) => {
40
+ const s = await resolveToolSlug(args.slug);
41
+ return jsonResult(await post(`/agent-os/${s}/plans/${args.planId}/progress-rows`, {
42
+ rows: args.rows,
43
+ }));
44
+ });
45
+ register("agent_os_plan_progress_event_append", "Append a role-lane progress event and apply allowed row transition rules.", {
46
+ planId: z.string(),
47
+ rowKey: z.string().optional(),
48
+ rowId: z.string().optional(),
49
+ taskId: z.string().optional(),
50
+ reviewTaskId: z.string().optional(),
51
+ roleLane,
52
+ status: progressStatus,
53
+ note: z.string().optional(),
54
+ remainingWork: z.string().optional(),
55
+ evidence: z.array(evidenceSchema).optional(),
56
+ proposed: z.boolean().optional(),
57
+ executorRef: z.string().optional(),
58
+ slug: slugField,
59
+ }, async (args) => {
60
+ const s = await resolveToolSlug(args.slug);
61
+ const { slug, planId, remainingWork, ...rest } = args;
62
+ return jsonResult(await post(`/agent-os/${s}/plans/${planId}/progress-events`, compact({
63
+ ...rest,
64
+ ...(remainingWork !== undefined ? { remaining: remainingWork } : {}),
65
+ })));
66
+ });
67
+ register("agent_os_plan_review_task_create", "Create a discovery review/decision AgentTask linked to a progress row.", {
68
+ planId: z.string(),
69
+ title: z.string(),
70
+ description: z.string().optional(),
71
+ rowKey: z.string().optional(),
72
+ rowId: z.string().optional(),
73
+ forWill: z.boolean().optional(),
74
+ parentTaskId: z.string().optional(),
75
+ idempotencyKey: z.string().optional(),
76
+ slug: slugField,
77
+ }, async (args) => {
78
+ const s = await resolveToolSlug(args.slug);
79
+ const { slug, planId, ...rest } = args;
80
+ return jsonResult(await post(`/agent-os/${s}/plans/${planId}/review-tasks`, compact(rest)));
81
+ });
82
+ register("agent_os_plan_progress_rows_list", "List structured progress rows for a plan.", { planId: z.string(), slug: slugField }, async (args) => {
83
+ const s = await resolveToolSlug(args.slug);
84
+ return jsonResult(await get(`/agent-os/${s}/plans/${args.planId}/progress-rows`));
85
+ });
86
+ register("agent_os_plan_progress_events_list", "List append-only progress events for a plan (audit trail).", {
87
+ planId: z.string(),
88
+ rowId: z.string().optional(),
89
+ limit: z.number().int().min(1).max(500).optional(),
90
+ slug: slugField,
91
+ }, async (args) => {
92
+ const s = await resolveToolSlug(args.slug);
93
+ const qs = new URLSearchParams();
94
+ if (args.rowId)
95
+ qs.set("rowId", args.rowId);
96
+ if (args.limit)
97
+ qs.set("limit", String(args.limit));
98
+ const q = qs.toString();
99
+ return jsonResult(await get(`/agent-os/${s}/plans/${args.planId}/progress-events${q ? `?${q}` : ""}`));
100
+ });
101
+ register("agent_os_plan_verify", "Run automated runtime verification (typecheck + test) or operator override for plan closure.", {
102
+ planId: z.string(),
103
+ worktreePath: z.string().optional(),
104
+ taskId: z.string().optional(),
105
+ humanOverride: z.boolean().optional(),
106
+ overrideReason: z.string().optional(),
107
+ slug: slugField,
108
+ }, async (args) => {
109
+ const s = await resolveToolSlug(args.slug);
110
+ const { slug, planId, ...rest } = args;
111
+ return jsonResult(await post(`/agent-os/${s}/plans/${planId}/verify`, compact(rest)));
112
+ });
113
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/mcp-agent-os",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "Kynver Agentic OS MCP server — slug-keyed agent identity, goals, projects, sessions, and long-term memory",
5
5
  "type": "module",
6
6
  "bin": {