@kynver-app/mcp-agent-os 0.3.51 → 0.3.52

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
@@ -21,6 +21,7 @@ import { registerMemoryQualityFeedbackTools } from "./tools/memory-quality-feedb
21
21
  import { registerOperatingRulesTools } from "./tools/operating-rules.js";
22
22
  import { registerProviderEvidenceTools } from "./tools/provider-evidence.js";
23
23
  import { registerPrBacklogTools } from "./tools/pr-backlog.js";
24
+ import { registerTaskBoardWatchdogTools } from "./tools/task-board-watchdog.js";
24
25
  import { registerMeshLivenessTools } from "./tools/mesh-liveness.js";
25
26
  import { registerDiagnosticsTools } from "./tools/diagnostics.js";
26
27
  import { registerSkillsTools } from "./tools/skills.js";
@@ -30,6 +31,7 @@ import { registerMonitorTools } from "./tools/monitor.js";
30
31
  import { registerMacroControlsTools } from "./tools/macro-controls.js";
31
32
  import { registerKariAdMarketingLoopTools } from "./tools/kariad-marketing-loop.js";
32
33
  import { registerKariAdOutcomeImportTools } from "./tools/kariad-outcome-import.js";
34
+ import { registerCmoControlTools } from "./tools/cmo-control.js";
33
35
  import { registerCurrentFocusTools } from "./tools/current-focus.js";
34
36
  import { readOwnPackageVersion } from "./lib/package-version.js";
35
37
  const PACKAGE_VERSION = readOwnPackageVersion(import.meta.url);
@@ -734,6 +736,8 @@ export function createAgentOsServer() {
734
736
  registerProviderEvidenceTools({ register, resolveToolSlug, jsonResult });
735
737
  // PR backlog drain (read-only routing-funnel surface).
736
738
  registerPrBacklogTools({ register, resolveToolSlug, jsonResult });
739
+ // Kynver-native task board watchdog (read + tick for verify_live).
740
+ registerTaskBoardWatchdogTools({ register, resolveToolSlug, jsonResult });
737
741
  // Connected-box mesh liveness (heartbeats, cron lease, peer rescues).
738
742
  registerMeshLivenessTools({ register, resolveToolSlug, jsonResult });
739
743
  // Visible Diagnostics report (dispatch-funnel, closed-loop, verify-live health …).
@@ -747,6 +751,7 @@ export function createAgentOsServer() {
747
751
  registerKariAdMarketingLoopTools({ register, resolveToolSlug, jsonResult });
748
752
  // KariAd marketing loop — M6 outcome import (analytics feedback + memory learning).
749
753
  registerKariAdOutcomeImportTools({ register, resolveToolSlug, jsonResult });
754
+ registerCmoControlTools({ register, resolveToolSlug, jsonResult });
750
755
  // M5: Kynver current-focus / todo adapter (agent-loop focus ≠ executor lease).
751
756
  registerCurrentFocusTools({ register, resolveToolSlug, jsonResult, compact });
752
757
  return server;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * M7 — CMO control status MCP tool (verify-live / agent steering).
3
+ *
4
+ * Read-only customer-safe marketing rollup: connection, approvals, trend
5
+ * snapshot summary, campaign evidence rows, and next actions.
6
+ */
7
+ type ToolResult = {
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ structuredContent?: unknown;
13
+ };
14
+ export interface CmoControlToolDeps {
15
+ register: (name: string, description: string, inputSchema: Record<string, unknown>, cb: (args: any) => any) => void;
16
+ resolveToolSlug: (explicitSlug?: string) => Promise<string>;
17
+ jsonResult: (data: unknown) => ToolResult;
18
+ }
19
+ export declare function registerCmoControlTools({ register, resolveToolSlug, jsonResult, }: CmoControlToolDeps): void;
20
+ export {};
@@ -0,0 +1,26 @@
1
+ /**
2
+ * M7 — CMO control status MCP tool (verify-live / agent steering).
3
+ *
4
+ * Read-only customer-safe marketing rollup: connection, approvals, trend
5
+ * snapshot summary, campaign evidence rows, and next actions.
6
+ */
7
+ import { z } from "zod";
8
+ import { get } from "../lib/kynver-client.js";
9
+ const slugField = z
10
+ .string()
11
+ .optional()
12
+ .describe("AgentOS slug. Defaults to env/primary AgentOS.");
13
+ export function registerCmoControlTools({ register, resolveToolSlug, jsonResult, }) {
14
+ register("agent_os_cmo_control_status_get", [
15
+ "Fetch the user-facing marketing / CMO control status for Command Center.",
16
+ "Returns connection health, pending marketing approvals, trend snapshot summary,",
17
+ "recent campaign activity evidence, executive summary, and suggested next actions.",
18
+ "Customer-safe copy only — no credentials, lane names, or memory internals.",
19
+ "Read-only; safe for unattended verification.",
20
+ "Workbench: navigate to view=marketing or open_panel system:cmo-campaign.",
21
+ ].join(" "), { slug: slugField }, async ({ slug }) => {
22
+ const s = await resolveToolSlug(slug);
23
+ const payload = await get(`/agent-os/${encodeURIComponent(s)}/cmo-control`);
24
+ return jsonResult(payload);
25
+ });
26
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Task board watchdog MCP tools — read/trigger the Kynver-native board sweep.
3
+ *
4
+ * agent_os_task_board_watchdog_get → GET …/task-board-watchdog (last snapshot)
5
+ * agent_os_task_board_watchdog_tick → POST …/task-board-watchdog (run one tick)
6
+ */
7
+ type ToolResult = {
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ structuredContent?: unknown;
13
+ };
14
+ export interface TaskBoardWatchdogToolDeps {
15
+ register: (name: string, description: string, inputSchema: Record<string, unknown>, cb: (args: any) => any) => void;
16
+ resolveToolSlug: (explicitSlug?: string) => Promise<string>;
17
+ jsonResult: (data: unknown) => ToolResult;
18
+ }
19
+ export declare function registerTaskBoardWatchdogTools({ register, resolveToolSlug, jsonResult, }: TaskBoardWatchdogToolDeps): void;
20
+ export {};
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Task board watchdog MCP tools — read/trigger the Kynver-native board sweep.
3
+ *
4
+ * agent_os_task_board_watchdog_get → GET …/task-board-watchdog (last snapshot)
5
+ * agent_os_task_board_watchdog_tick → POST …/task-board-watchdog (run one tick)
6
+ */
7
+ import { z } from "zod";
8
+ import { get, post } from "../lib/kynver-client.js";
9
+ async function resolveAgentOsId(slug) {
10
+ const row = await get(`/agent-os/${encodeURIComponent(slug)}`);
11
+ const id = typeof row.id === "string" ? row.id.trim() : "";
12
+ if (!id) {
13
+ throw new Error(`AgentOS slug "${slug}" did not resolve to an id. Pass agentOsId explicitly or ensure GET /api/agent-os/{slug} returns id.`);
14
+ }
15
+ return id;
16
+ }
17
+ const idSchema = {
18
+ agentOsId: z.string().uuid().optional().describe("AgentOS workspace id"),
19
+ slug: z.string().optional().describe("AgentOS slug (resolved to id when agentOsId omitted)"),
20
+ };
21
+ export function registerTaskBoardWatchdogTools({ register, resolveToolSlug, jsonResult, }) {
22
+ register("agent_os_task_board_watchdog_get", [
23
+ "Fetch the Kynver-native task board watchdog snapshot: last tick movement counts,",
24
+ "quiet flag, dispatch floor advice, and agentReadable summary.",
25
+ "Safe for verify_live — read-only.",
26
+ ].join(" "), idSchema, async (args) => {
27
+ const agentOsId = args.agentOsId?.trim() ||
28
+ (await resolveAgentOsId(args.slug ?? (await resolveToolSlug())));
29
+ const data = await get(`/agent-os/by-id/${encodeURIComponent(agentOsId)}/task-board-watchdog`);
30
+ return jsonResult(data);
31
+ });
32
+ register("agent_os_task_board_watchdog_tick", [
33
+ "Run one Kynver-native task board watchdog tick: board reconcile, expert supervisor,",
34
+ "bookkeeping drain, budget-reset PR lifecycle retry, and meaningful-change report.",
35
+ "Idempotent — safe for verify_live when a fresh snapshot is needed.",
36
+ ].join(" "), idSchema, async (args) => {
37
+ const agentOsId = args.agentOsId?.trim() ||
38
+ (await resolveAgentOsId(args.slug ?? (await resolveToolSlug())));
39
+ const data = await post(`/agent-os/by-id/${encodeURIComponent(agentOsId)}/task-board-watchdog`, {});
40
+ return jsonResult(data);
41
+ });
42
+ }
@@ -98,4 +98,49 @@ export function registerWorkbenchTools({ register, resolveToolSlug, jsonResult,
98
98
  }
99
99
  return jsonResult(await post(`/agent-os/${slug}/workbench/command`, body));
100
100
  });
101
+ register("agent_os_workbench_present", [
102
+ "Present a full-screen slideshow on the operator's open Command Center — walk the user",
103
+ "through points/status/reviews as large-type slides while you narrate in chat.",
104
+ "action=start with your own slides, OR compose=\"working_on\" to auto-build a",
105
+ "'What we're working on' deck from the live rollup server-side. Drive with",
106
+ "action=next/prev/goto/close. Slides may carry an EntityRef (task:<id>, plan:<id>)",
107
+ "for a 'Show in Command Center' button. View-control only; user can dismiss (Esc).",
108
+ ].join(" "), {
109
+ slug: z.string().optional(),
110
+ action: z.enum(["start", "next", "prev", "goto", "close"]).optional()
111
+ .describe("Default start."),
112
+ compose: z.enum(["working_on"]).optional()
113
+ .describe("Auto-compose the deck from the live rollup (ignores slides)."),
114
+ title: z.string().optional().describe("Deck headline (start)."),
115
+ slides: z
116
+ .array(z.object({
117
+ title: z.string(),
118
+ body: z.string().optional(),
119
+ bullets: z.array(z.string()).optional(),
120
+ metric: z.object({ value: z.string(), label: z.string() }).optional(),
121
+ ref: z.string().optional().describe("EntityRef e.g. task:<id>, plan:<id>"),
122
+ tone: z.enum(["info", "good", "warn", "risk"]).optional(),
123
+ }))
124
+ .optional()
125
+ .describe("Slides for action=start (max 16)."),
126
+ index: z.number().optional().describe("Target slide for action=goto (0-based)."),
127
+ autoAdvanceMs: z.number().optional().describe("Optional auto-advance (3000–120000 ms)."),
128
+ sessionId: z.string().optional(),
129
+ }, async (args) => {
130
+ const slug = await resolveToolSlug(args.slug);
131
+ const body = {
132
+ kind: "present",
133
+ source: "agent",
134
+ sessionId: args.sessionId,
135
+ compose: args.compose,
136
+ present: {
137
+ action: args.action ?? "start",
138
+ title: args.title,
139
+ slides: args.slides,
140
+ index: args.index,
141
+ autoAdvanceMs: args.autoAdvanceMs,
142
+ },
143
+ };
144
+ return jsonResult(await post(`/agent-os/${slug}/workbench/command`, body));
145
+ });
101
146
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/mcp-agent-os",
3
- "version": "0.3.51",
3
+ "version": "0.3.52",
4
4
  "description": "Kynver Agentic OS MCP server \u2014 slug-keyed agent identity, goals, projects, sessions, and long-term memory",
5
5
  "type": "module",
6
6
  "bin": {