@codesys/mcp-toolkit 2.3.0 → 2.5.0

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +63 -7
  3. package/README.zh-CN.md +43 -5
  4. package/dist/actions.js +7 -2
  5. package/dist/actions.js.map +1 -1
  6. package/dist/codesys/alarm-tools.d.ts +28 -0
  7. package/dist/codesys/alarm-tools.js +126 -0
  8. package/dist/codesys/alarm-tools.js.map +1 -0
  9. package/dist/codesys/graphical-read.d.ts +63 -0
  10. package/dist/codesys/graphical-read.js +214 -0
  11. package/dist/codesys/graphical-read.js.map +1 -0
  12. package/dist/codesys/graphical.js +13 -1
  13. package/dist/codesys/graphical.js.map +1 -1
  14. package/dist/codesys/report.d.ts +51 -0
  15. package/dist/codesys/report.js +100 -0
  16. package/dist/codesys/report.js.map +1 -0
  17. package/dist/hmi/native.d.ts +2 -1
  18. package/dist/hmi/native.js +42 -4
  19. package/dist/hmi/native.js.map +1 -1
  20. package/dist/hmi/render.d.ts +5 -0
  21. package/dist/hmi/render.js +33 -7
  22. package/dist/hmi/render.js.map +1 -1
  23. package/dist/hmi/route.d.ts +7 -7
  24. package/dist/hmi/route.js +36 -12
  25. package/dist/hmi/route.js.map +1 -1
  26. package/dist/hmi/service.d.ts +26 -1
  27. package/dist/hmi/service.js +113 -21
  28. package/dist/hmi/service.js.map +1 -1
  29. package/dist/hmi/spec.d.ts +104 -1
  30. package/dist/hmi/spec.js +20 -2
  31. package/dist/hmi/spec.js.map +1 -1
  32. package/dist/hmi/symbols.d.ts +89 -0
  33. package/dist/hmi/symbols.js +210 -0
  34. package/dist/hmi/symbols.js.map +1 -0
  35. package/dist/hmi/tools.d.ts +2 -0
  36. package/dist/hmi/tools.js +87 -10
  37. package/dist/hmi/tools.js.map +1 -1
  38. package/dist/panel/hmi.js +121 -27
  39. package/dist/panel.js +2 -1
  40. package/dist/panel.js.map +1 -1
  41. package/dist/progress.d.ts +17 -0
  42. package/dist/progress.js +36 -0
  43. package/dist/progress.js.map +1 -0
  44. package/dist/server.d.ts +1 -1
  45. package/dist/server.js +4 -3
  46. package/dist/server.js.map +1 -1
  47. package/dist/tools.js +126 -5
  48. package/dist/tools.js.map +1 -1
  49. package/package.json +1 -1
  50. package/watcher/mcp_alarms.py +58 -0
package/dist/panel.js CHANGED
@@ -206,7 +206,8 @@ export function registerPanel(server, ws = { project: () => undefined }) {
206
206
  const all = hmi?.screens() ?? [];
207
207
  const s = hmi?.screen(screen) ?? all[0];
208
208
  const live = s && hmi ? await hmi.values(s).catch(() => ({ values: {}, errors: {} })) : { values: {}, errors: {} };
209
- return json({ screens: all.map((x) => ({ name: x.name, title: x.title })), ...(s ? { screen: s } : {}), values: live.values, sim: hmi?.sim() ?? {}, alarms: hmi?.page().alarms ?? [] });
209
+ const page = hmi?.page();
210
+ return json({ screens: all.map((x) => ({ name: x.name, title: x.title })), ...(s ? { screen: s } : {}), values: live.values, sim: hmi?.sim() ?? {}, alarms: page?.alarms ?? [], ...(page?.symbols ? { symbols: page.symbols } : {}) });
210
211
  }));
211
212
  action("ui_hmi_write", "operate the HMI: write a value into CODESYS's simulation (only variables on an HMI screen).", z.object({ variable: z.string(), value: z.string() }), async (a) => {
212
213
  if (!ws.hmi)
package/dist/panel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type ProgressSink = (message: string) => void;
2
+ /** Tell the client what a long action is doing now (nothing happens without a progress token). */
3
+ export declare function reportProgress(message: string): void;
4
+ export interface ProgressRequest {
5
+ progressToken?: string | number;
6
+ notify: (n: {
7
+ method: "notifications/progress";
8
+ params: {
9
+ progressToken: string | number;
10
+ progress: number;
11
+ message?: string;
12
+ };
13
+ }) => Promise<void>;
14
+ }
15
+ export declare const HEARTBEAT_MS = 10000;
16
+ /** Runs fn with progress reporting for this request; a heartbeat every HEARTBEAT_MS while it runs. */
17
+ export declare function withProgress<T>(req: ProgressRequest | undefined, label: string, fn: () => Promise<T>, heartbeatMs?: number): Promise<T>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCP progress for long actions. A client that sends a progressToken gets
3
+ * notifications/progress: a heartbeat while any action runs, and steps that
4
+ * long actions report (an HMI export reports each page). Clients that reset
5
+ * their timeout on progress then don't give up on a minute-long export.
6
+ *
7
+ * Code deep in an action calls reportProgress(); AsyncLocalStorage carries the
8
+ * request's sink there, so nothing has to pass it along.
9
+ */
10
+ import { AsyncLocalStorage } from "node:async_hooks";
11
+ const store = new AsyncLocalStorage();
12
+ /** Tell the client what a long action is doing now (nothing happens without a progress token). */
13
+ export function reportProgress(message) {
14
+ store.getStore()?.(message);
15
+ }
16
+ export const HEARTBEAT_MS = 10_000;
17
+ /** Runs fn with progress reporting for this request; a heartbeat every HEARTBEAT_MS while it runs. */
18
+ export async function withProgress(req, label, fn, heartbeatMs = HEARTBEAT_MS) {
19
+ const token = req?.progressToken;
20
+ if (token === undefined || !req)
21
+ return fn();
22
+ let n = 0;
23
+ const started = Date.now();
24
+ const sink = (message) => {
25
+ req.notify({ method: "notifications/progress", params: { progressToken: token, progress: ++n, message } }).catch(() => undefined);
26
+ };
27
+ const timer = setInterval(() => sink(`${label}: still working (${Math.round((Date.now() - started) / 1000)} s)`), heartbeatMs);
28
+ timer.unref?.();
29
+ try {
30
+ return await store.run(sink, fn);
31
+ }
32
+ finally {
33
+ clearInterval(timer);
34
+ }
35
+ }
36
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAgB,CAAC;AAEpD,kGAAkG;AAClG,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAOD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,GAAgC,EAAE,KAAa,EAAE,EAAoB,EAAE,WAAW,GAAG,YAAY;IACrI,MAAM,KAAK,GAAG,GAAG,EAAE,aAAa,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAiB,CAAC,OAAO,EAAE,EAAE;QACrC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACpI,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAC/H,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { McpServer } from "@modelcontextprotocol/server";
2
2
  import { type AppContext } from "./tools.js";
3
- export declare const VERSION = "2.3.0";
3
+ export declare const VERSION = "2.5.0";
4
4
  export declare function createServer(ctx: AppContext): McpServer;
5
5
  export type { AppContext };
package/dist/server.js CHANGED
@@ -4,18 +4,19 @@ import { currentCodesysSim } from "./codesys/simulation.js";
4
4
  import { registerTools, revertObject, versionLine } from "./tools.js";
5
5
  import { registerPanel } from "./panel.js";
6
6
  import { HmiService } from "./hmi/service.js";
7
- export const VERSION = "2.3.0";
7
+ export const VERSION = "2.5.0";
8
8
  const INSTRUCTIONS = `CODESYS V3.5 automation through a persistent CODESYS session.
9
9
  Everything goes through the one tool named codesys, as {"action": "<name>", "args": {...}}. The names below are its actions; {"action": "help"} lists them all with their arguments.
10
10
  Use batch whenever you know the next steps: it sends several actions in one call and is much faster than separate calls. For example, all the create_object and write_object calls of a step followed by compile, or codesys_sim_force, wait, codesys_sim_cycle and codesys_sim_read for one test.
11
11
  Workflow: open_project (or create_project) -> get_project_tree -> read_objects -> write_object / create_object -> compile.
12
12
  Object paths are relative to the active application: 'PLC_PRG', 'FB_Pump/Start' (method), 'FB_Pump/Speed/Get' (property accessor).
13
- Write code as Structured Text; create ladder, FBD or SFC POUs with create_graphical. Existing graphical bodies are marked [non-ST] and can't be edited in place. Before calling a library FB, check its interface with get_signature instead of guessing; find_references shows where a name is used.
13
+ Write code as Structured Text; create ladder, FBD or SFC POUs with create_graphical. read_objects gives an LD, FBD or SFC body as create_graphical's description: to change it, edit that and call create_graphical with replace: true (CFC stays read-only). Before calling a library FB, check its interface with get_signature instead of guessing; find_references shows where a name is used.
14
14
  The first call after start can take 1-3 minutes while CODESYS starts; codesys_status shows progress without waiting.
15
15
  To check that logic works, use CODESYS's own simulation (no controller, nothing extra to install, the real compiler and libraries): codesys_sim_start -> codesys_sim_control (run) or codesys_sim_cycle (exact cycles) -> codesys_sim_read / write / force / unforce -> codesys_sim_stop. The project is locked until codesys_sim_stop.
16
16
  Fix code with write_object after codesys_sim_stop, then codesys_sim_start again to load it.
17
17
  To check timing, set up a trace (trace_setup, before codesys_sim_start) and record it (trace_record) while the simulation runs.
18
- Operator screens: hmi_template gives page layouts; hmi_save_screen stores a page, hmi_screenshot shows it to you, open_hmi opens it live for the user, hmi_export_codesys builds it as a native CODESYS visualization.
18
+ Operator screens: hmi_template gives page layouts; hmi_save_screen stores a page, hmi_screenshot shows it to you, open_hmi opens it live for the user, hmi_export_codesys builds it as a native CODESYS visualization with CODESYS alarms. hmi_symbols lists the process symbols; hmi_save_symbol adds your own SVG symbol.
19
+ Alarms: alarm_status and alarm_acknowledge test CODESYS alarms in the simulation. For the handover: project_report (report with a commissioning checklist) and export_sources (the project as text files for git).
19
20
  Right after opening or creating a project, call the separate tool open_sim_panel: it shows the user a live CODESYS-style workspace in the chat (the project tree and the code as you write it, changes, compile results and the simulation), so they can watch you work.`;
20
21
  export function createServer(ctx) {
21
22
  // A host treats an extension the server doesn't advertise as unsupported, and then runs
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,YAAY,GAAG;;;;;;;;;;;yQAWoP,CAAC;AAE1Q,MAAM,UAAU,YAAY,CAAC,GAAe;IAC1C,wFAAwF;IACxF,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtK,GAAG,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,aAAa,CAAC,MAAM,EAAE;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;QAChC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAC7G,UAAU,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,YAAY,GAAG;;;;;;;;;;;;yQAYoP,CAAC;AAE1Q,MAAM,UAAU,YAAY,CAAC,GAAe;IAC1C,wFAAwF;IACxF,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtK,GAAG,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,aAAa,CAAC,MAAM,EAAE;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;QAChC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAC7G,UAAU,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/tools.js CHANGED
@@ -5,11 +5,16 @@ import { registerGraphicalActions } from "./codesys/graphical.js";
5
5
  import { registerDebugActions } from "./codesys/debug.js";
6
6
  import { registerSimTestAction } from "./codesys/simtest.js";
7
7
  import { registerDeviceActions } from "./codesys/device-tools.js";
8
- import { copyFile } from "node:fs/promises";
8
+ import { condition, listAlarms, registerAlarmActions } from "./codesys/alarm-tools.js";
9
+ import { projectReport } from "./codesys/report.js";
10
+ import { describeGraphical } from "./codesys/graphical-read.js";
11
+ import { screenVariables } from "./hmi/spec.js";
12
+ import { reportProgress } from "./progress.js";
13
+ import { copyFile, mkdir, rm, writeFile } from "node:fs/promises";
9
14
  import { registerActionTool } from "./actions.js";
10
15
  import { getUiCapability } from "@modelcontextprotocol/ext-apps/server";
11
- import { existsSync } from "node:fs";
12
- import { isAbsolute, join, resolve as resolvePath } from "node:path";
16
+ import { existsSync, readFileSync } from "node:fs";
17
+ import { dirname, isAbsolute, join, resolve as resolvePath } from "node:path";
13
18
  import * as z from "zod/v4";
14
19
  import { BridgeError } from "./bridge/bridge.js";
15
20
  import { buildOutline, ioList } from "./codesys/outline.js";
@@ -292,7 +297,7 @@ export function registerTools(server, ctx) {
292
297
  return [head, ...(lines.length ? lines : ["(empty)"])].join("\n");
293
298
  }));
294
299
  reg("read_objects", {
295
- description: "Read the declaration and implementation text of ST objects: POUs, methods, property accessors (path 'FB/Prop/Get'), actions, interfaces, DUTs and GVLs. Objects with a graphical body (SFC, CFC, LD, FBD) come with their PLCopenXML, to read (they stay read-only).",
300
+ description: "Read the declaration and implementation text of ST objects: POUs, methods, property accessors (path 'FB/Prop/Get'), actions, interfaces, DUTs and GVLs. Ladder, FBD and SFC bodies come as the description create_graphical takes (edit it and call create_graphical with replace: true); CFC, and anything that description can't hold, come as PLCopenXML.",
296
301
  inputSchema: z.object({ paths: z.array(pathArg).min(1).max(50) }),
297
302
  }, async ({ paths }) => run(ctx, async () => {
298
303
  const r = await b.call("objects.read", { paths });
@@ -312,7 +317,14 @@ export function registerTools(server, ctx) {
312
317
  for (const o of x.objects) {
313
318
  if (o.xml) {
314
319
  const xml = compactPlcOpen(o.xml) + (o.truncated ? "\n(truncated)" : "");
315
- graphicalBodies.set(o.path, `\n--- graphical body as PLCopenXML (read-only) ---\n${xml}`);
320
+ const d = o.truncated ? undefined : describeGraphical(o.xml);
321
+ if (d) {
322
+ const label = d.kind === "ladder" ? "ladder (LD)" : d.kind === "fbd" ? "FBD" : "SFC";
323
+ const how = `To change it: edit this and call create_graphical with name, declaration, ${d.kind}: <this> and replace: true.`;
324
+ graphicalBodies.set(o.path, `\n--- ${label} body, as create_graphical's description ---\n${JSON.stringify({ [d.kind]: d.spec })}\n${d.notes.length ? `Not in the description: ${d.notes.join("; ")}. The PLCopenXML:\n${xml}` : how}`);
325
+ }
326
+ else
327
+ graphicalBodies.set(o.path, `\n--- graphical body as PLCopenXML (read-only) ---\n${xml}`);
316
328
  }
317
329
  else if (o.error) {
318
330
  graphicalBodies.set(o.path, `\nPLCopenXML export failed: ${o.error}`);
@@ -574,6 +586,114 @@ export function registerTools(server, ctx) {
574
586
  const r = await b.call("devices.list", { io: io ?? true }, { timeoutMs: 180_000 });
575
587
  return describeDevices(r.devices);
576
588
  }));
589
+ reg("project_report", {
590
+ description: "Write a handover report of the project as Markdown next to it (or at path): summary, tasks, I/O list, device-tree mappings, CODESYS alarms, HMI pages, libraries, devices and program structure, ending with a commissioning checklist built from this project (each I/O point, alarm, HMI page and task to verify on the real machine). Read-only towards CODESYS. Returns the summary and the file path.",
591
+ inputSchema: z.object({ path: z.string().optional().describe("Where to write it (default: <project>.report.md next to the project)") }),
592
+ }, async ({ path }) => run(ctx, async () => {
593
+ if (!ctx.project)
594
+ throw new Error("No project is open.");
595
+ reportProgress("reading the project");
596
+ const info = await b.call("project.info", {}, { timeoutMs: 30_000 });
597
+ const nodes = await exportNodes();
598
+ const tasks = (await b.call("tasks.list")).tasks;
599
+ reportProgress("reading devices and I/O mappings");
600
+ const devices = (await b.call("devices.list", { io: true }, { timeoutMs: 180_000 }).catch(() => ({ devices: [] }))).devices;
601
+ const libraries = (await b.call("libraries.list").catch(() => ({ libraries: [] }))).libraries;
602
+ reportProgress("reading alarms");
603
+ const alarms = await listAlarms(ctx).catch(() => []);
604
+ const screens = ctx.hmi?.screens() ?? [];
605
+ const compile = cache?.compile;
606
+ const md = projectReport({
607
+ project: info.path,
608
+ application: info.application,
609
+ compiler: info.compiler_version,
610
+ generated: new Date().toISOString().slice(0, 16).replace("T", " "),
611
+ nodes,
612
+ outline: buildOutline(nodes, tasks),
613
+ tasks,
614
+ io: ioList(nodes),
615
+ mapped: devices.flatMap((d) => (d.io_csv ? parseIoMappingCsv(d.io_csv) : [])).filter((c) => c.variable),
616
+ devices: describeDevices(devices.map((d) => ({ ...d, io_csv: undefined }))),
617
+ libraries: libraries.map((l) => ({ name: l.name, ...(l.effective_resolution ? { resolution: l.effective_resolution } : {}) })),
618
+ alarms,
619
+ hmi: screens.map((s) => ({ name: s.name, title: s.title, widgets: s.widgets.length, variables: screenVariables(s).length })),
620
+ ...(compile ? { compile: { errors: compile.messages.filter((m) => /error/i.test(m.severity)).length, warnings: compile.messages.filter((m) => /warn/i.test(m.severity)).length } } : {}),
621
+ });
622
+ const file = path ? absPath(ctx, path) : info.path.replace(/\.project$/i, "") + ".report.md";
623
+ await writeFile(file, md, "utf8");
624
+ const summary = md.split("\n## ")[1]?.replace(/^Summary\n+/, "") ?? "";
625
+ return `Wrote ${file} (${md.split("\n").length} lines, ${md.split("\n").filter((l) => l.startsWith("- [ ]")).length} checklist items).\n${summary.trim()}`;
626
+ }));
627
+ reg("export_sources", {
628
+ description: "Export the project as plain text files for version control (git) and review: one .st file per POU, method, property, action, DUT, GVL and interface (declaration, then implementation), in folders like the project tree; ladder, FBD and SFC bodies as PLCopenXML (.xml); project.txt with tasks, libraries, devices and alarms; and the HMI screens. A CODESYS project file is binary, so this is what makes changes diffable. Exporting again updates the folder and removes files of deleted objects (only files an earlier export wrote).",
629
+ inputSchema: z.object({ dir: z.string().optional().describe("Folder to export to (default: <project>_src next to the project)") }),
630
+ }, async ({ dir }) => run(ctx, async () => {
631
+ if (!ctx.project)
632
+ throw new Error("No project is open.");
633
+ const info = await b.call("project.info", {}, { timeoutMs: 30_000 });
634
+ reportProgress("exporting the objects");
635
+ const nodes = await exportNodes();
636
+ const root = dir ? absPath(ctx, dir) : `${info.path.replace(/\.project$/i, "")}_src`;
637
+ const files = new Map();
638
+ const safe = (s) => s.replace(/[<>:"\\|?*]/g, "_");
639
+ const KINDS = new Set(["pou", "method", "property", "accessor", "action", "dut", "gvl", "interface", "interface_method"]);
640
+ const nl = (s) => s.replace(/\r\n/g, "\n").trimEnd();
641
+ for (const n of nodes) {
642
+ if (!KINDS.has(n.kind))
643
+ continue;
644
+ const rel = n.path.split("/").map(safe).join("/");
645
+ const text = [n.declaration ? nl(n.declaration) : "", n.implementation && n.st !== false ? nl(n.implementation) : ""].filter(Boolean).join("\n\n");
646
+ if (text)
647
+ files.set(`${rel}.st`, `${text}\n`);
648
+ if (n.st === false && n.xml)
649
+ files.set(`${rel}.xml`, `${nl(n.xml)}\n`);
650
+ }
651
+ reportProgress("tasks, libraries, devices and alarms");
652
+ const tasks = (await b.call("tasks.list")).tasks;
653
+ const libraries = (await b.call("libraries.list").catch(() => ({ libraries: [] }))).libraries;
654
+ const devices = (await b.call("devices.list", { io: false }, { timeoutMs: 180_000 }).catch(() => ({ devices: [] }))).devices;
655
+ const alarms = await listAlarms(ctx).catch(() => []);
656
+ files.set("project.txt", [
657
+ `Project: ${info.path.replace(/\\/g, "/").split("/").pop()}`,
658
+ `Application: ${info.application ?? "?"}${info.compiler_version ? `\nCompiler: ${info.compiler_version}` : ""}`,
659
+ "",
660
+ "[Tasks]",
661
+ ...tasks.map(describeTask),
662
+ "",
663
+ "[Libraries]",
664
+ ...libraries.map((l) => `${l.name}${l.effective_resolution ? ` -> ${l.effective_resolution}` : ""}`),
665
+ "",
666
+ "[Devices]",
667
+ describeDevices(devices),
668
+ "",
669
+ "[Alarms]",
670
+ ...alarms.flatMap((g) => g.alarms.map((a) => `${g.name}/${a.id} [${a.cls}] ${a.text} :: ${condition(a)}`)),
671
+ "",
672
+ ].join("\n"));
673
+ const hmiFile = ctx.hmi?.file();
674
+ if (hmiFile && existsSync(hmiFile))
675
+ files.set("hmi.json", readFileSync(hmiFile, "utf8"));
676
+ // Write, then remove what an earlier export wrote and this one didn't.
677
+ const MANIFEST = ".codesys-export.json";
678
+ const manifestPath = join(root, MANIFEST);
679
+ const before = existsSync(manifestPath) ? (JSON.parse(readFileSync(manifestPath, "utf8")).files ?? []) : [];
680
+ let changed = 0;
681
+ for (const [rel, text] of files) {
682
+ const p = join(root, rel);
683
+ await mkdir(dirname(p), { recursive: true });
684
+ if (!existsSync(p) || readFileSync(p, "utf8") !== text) {
685
+ await writeFile(p, text, "utf8");
686
+ changed++;
687
+ }
688
+ }
689
+ const gone = before.filter((f) => !files.has(f) && !f.includes("..") && existsSync(join(root, f)));
690
+ for (const f of gone)
691
+ await rm(join(root, f));
692
+ await writeFile(manifestPath, `${JSON.stringify({ project: info.path, exported: new Date().toISOString(), files: [...files.keys()].sort() }, null, 2)}\n`, "utf8");
693
+ const st = [...files.keys()].filter((f) => f.endsWith(".st")).length;
694
+ const xml = [...files.keys()].filter((f) => f.endsWith(".xml")).length;
695
+ return `Exported to ${root}: ${st} .st file(s)${xml ? `, ${xml} graphical body(ies) as .xml` : ""}, project.txt${files.has("hmi.json") ? ", hmi.json" : ""}. ${changed} file(s) written or changed${gone.length ? `, ${gone.length} removed (deleted objects)` : ""}; the rest were unchanged. Commit the folder to see each change as a text diff.`;
696
+ }));
577
697
  const libCache = new Map();
578
698
  /** A source library read from CODESYS, or the browse cache of a compiled or unreferenced one. */
579
699
  const readLibrary = async (name, version) => {
@@ -727,6 +847,7 @@ export function registerTools(server, ctx) {
727
847
  registerDebugActions(reg, ctx, (fn) => run(ctx, fn));
728
848
  registerSimTestAction(reg, ctx, (fn) => run(ctx, fn));
729
849
  registerDeviceActions(reg, ctx, (fn) => run(ctx, fn));
850
+ registerAlarmActions(reg, ctx, (fn) => run(ctx, fn));
730
851
  if (ctx.hmi)
731
852
  registerHmiActions(reg, ctx, ctx.hmi, (fn) => run(ctx, fn));
732
853
  registerActionTool(server, actions);