@aryacode/dsh-engineering 0.0.0-stage → 0.3.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 (281) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/LICENSE +21 -0
  3. package/README.md +228 -2
  4. package/cordis.patch.yml +122 -0
  5. package/locale/en.json +6 -0
  6. package/locale/zh.json +6 -0
  7. package/package.json +77 -3
  8. package/vendor/ftview/README.md +55 -0
  9. package/vendor/ftview/SKILL.md +74 -0
  10. package/vendor/ftview/lib/checks.d.ts +27 -0
  11. package/vendor/ftview/lib/checks.js +39 -0
  12. package/vendor/ftview/lib/core.d.ts +208 -0
  13. package/vendor/ftview/lib/core.js +160 -0
  14. package/vendor/ftview/lib/edit/drafts.d.ts +49 -0
  15. package/vendor/ftview/lib/edit/drafts.js +84 -0
  16. package/vendor/ftview/lib/edit/operations.d.ts +62 -0
  17. package/vendor/ftview/lib/edit/operations.js +126 -0
  18. package/vendor/ftview/lib/edit/prepare.d.ts +38 -0
  19. package/vendor/ftview/lib/edit/prepare.js +133 -0
  20. package/vendor/ftview/lib/edit/tools.d.ts +25 -0
  21. package/vendor/ftview/lib/edit/tools.js +198 -0
  22. package/vendor/ftview/lib/edit.d.ts +30 -0
  23. package/vendor/ftview/lib/edit.js +38 -0
  24. package/vendor/ftview/lib/index.d.ts +31 -0
  25. package/vendor/ftview/lib/index.js +36 -0
  26. package/vendor/ftview/lib/model.d.ts +80 -0
  27. package/vendor/ftview/lib/model.js +267 -0
  28. package/vendor/ftview/lib/session.d.ts +48 -0
  29. package/vendor/ftview/lib/session.js +98 -0
  30. package/vendor/ftview/lib/skill.d.ts +29 -0
  31. package/vendor/ftview/lib/skill.js +43 -0
  32. package/vendor/ftview/lib/studio/discover.d.ts +36 -0
  33. package/vendor/ftview/lib/studio/discover.js +87 -0
  34. package/vendor/ftview/lib/studio/preflight.d.ts +51 -0
  35. package/vendor/ftview/lib/studio/preflight.js +64 -0
  36. package/vendor/ftview/lib/studio/tools.d.ts +15 -0
  37. package/vendor/ftview/lib/studio/tools.js +83 -0
  38. package/vendor/ftview/lib/studio.d.ts +30 -0
  39. package/vendor/ftview/lib/studio.js +37 -0
  40. package/vendor/ftview/lib/tools.d.ts +14 -0
  41. package/vendor/ftview/lib/tools.js +202 -0
  42. package/vendor/l5x/README.md +62 -0
  43. package/vendor/l5x/SKILL.md +81 -0
  44. package/vendor/l5x/lib/approvals.d.ts +50 -0
  45. package/vendor/l5x/lib/approvals.js +93 -0
  46. package/vendor/l5x/lib/client.js +412 -0
  47. package/vendor/l5x/lib/client.js.map +1 -0
  48. package/vendor/l5x/lib/core/errors.d.ts +38 -0
  49. package/vendor/l5x/lib/core/errors.js +48 -0
  50. package/vendor/l5x/lib/core/params.d.ts +49 -0
  51. package/vendor/l5x/lib/core/params.js +39 -0
  52. package/vendor/l5x/lib/core/result.d.ts +46 -0
  53. package/vendor/l5x/lib/core/result.js +21 -0
  54. package/vendor/l5x/lib/core/tool.d.ts +102 -0
  55. package/vendor/l5x/lib/core/tool.js +19 -0
  56. package/vendor/l5x/lib/drafts.d.ts +66 -0
  57. package/vendor/l5x/lib/drafts.js +98 -0
  58. package/vendor/l5x/lib/editing.d.ts +30 -0
  59. package/vendor/l5x/lib/editing.js +42 -0
  60. package/vendor/l5x/lib/engine/acd-edit.d.ts +13 -0
  61. package/vendor/l5x/lib/engine/acd-edit.js +115 -0
  62. package/vendor/l5x/lib/engine/analysis.d.ts +22 -0
  63. package/vendor/l5x/lib/engine/analysis.js +258 -0
  64. package/vendor/l5x/lib/engine/capabilities.d.ts +9 -0
  65. package/vendor/l5x/lib/engine/capabilities.js +40 -0
  66. package/vendor/l5x/lib/engine/change-set.d.ts +122 -0
  67. package/vendor/l5x/lib/engine/change-set.js +446 -0
  68. package/vendor/l5x/lib/engine/configuration.d.ts +21 -0
  69. package/vendor/l5x/lib/engine/configuration.js +42 -0
  70. package/vendor/l5x/lib/engine/details.d.ts +47 -0
  71. package/vendor/l5x/lib/engine/details.js +173 -0
  72. package/vendor/l5x/lib/engine/direct-polling.d.ts +91 -0
  73. package/vendor/l5x/lib/engine/direct-polling.js +193 -0
  74. package/vendor/l5x/lib/engine/download-review.d.ts +15 -0
  75. package/vendor/l5x/lib/engine/download-review.js +63 -0
  76. package/vendor/l5x/lib/engine/logic-syntax.d.ts +60 -0
  77. package/vendor/l5x/lib/engine/logic-syntax.js +237 -0
  78. package/vendor/l5x/lib/engine/observations.d.ts +41 -0
  79. package/vendor/l5x/lib/engine/observations.js +67 -0
  80. package/vendor/l5x/lib/engine/project-analysis.d.ts +131 -0
  81. package/vendor/l5x/lib/engine/project-analysis.js +314 -0
  82. package/vendor/l5x/lib/engine/review-evidence.d.ts +8 -0
  83. package/vendor/l5x/lib/engine/review-evidence.js +49 -0
  84. package/vendor/l5x/lib/engine/review.d.ts +18 -0
  85. package/vendor/l5x/lib/engine/review.js +123 -0
  86. package/vendor/l5x/lib/engine/studio-sdk.d.ts +101 -0
  87. package/vendor/l5x/lib/engine/studio-sdk.js +571 -0
  88. package/vendor/l5x/lib/engine/tag-resolution.d.ts +20 -0
  89. package/vendor/l5x/lib/engine/tag-resolution.js +169 -0
  90. package/vendor/l5x/lib/engine/usage.d.ts +16 -0
  91. package/vendor/l5x/lib/engine/usage.js +92 -0
  92. package/vendor/l5x/lib/engine/xml-regions.d.ts +23 -0
  93. package/vendor/l5x/lib/engine/xml-regions.js +77 -0
  94. package/vendor/l5x/lib/fs.d.ts +17 -0
  95. package/vendor/l5x/lib/fs.js +36 -0
  96. package/vendor/l5x/lib/index.d.ts +36 -0
  97. package/vendor/l5x/lib/index.js +42 -0
  98. package/vendor/l5x/lib/live.d.ts +48 -0
  99. package/vendor/l5x/lib/live.js +48 -0
  100. package/vendor/l5x/lib/model/aois.d.ts +39 -0
  101. package/vendor/l5x/lib/model/aois.js +112 -0
  102. package/vendor/l5x/lib/model/errors.d.ts +15 -0
  103. package/vendor/l5x/lib/model/errors.js +18 -0
  104. package/vendor/l5x/lib/model/index.d.ts +20 -0
  105. package/vendor/l5x/lib/model/index.js +19 -0
  106. package/vendor/l5x/lib/model/module.d.ts +37 -0
  107. package/vendor/l5x/lib/model/module.js +54 -0
  108. package/vendor/l5x/lib/model/modules.d.ts +24 -0
  109. package/vendor/l5x/lib/model/modules.js +55 -0
  110. package/vendor/l5x/lib/model/parse.d.ts +32 -0
  111. package/vendor/l5x/lib/model/parse.js +116 -0
  112. package/vendor/l5x/lib/model/project.d.ts +15 -0
  113. package/vendor/l5x/lib/model/project.js +31 -0
  114. package/vendor/l5x/lib/model/routines.d.ts +71 -0
  115. package/vendor/l5x/lib/model/routines.js +183 -0
  116. package/vendor/l5x/lib/model/tags.d.ts +51 -0
  117. package/vendor/l5x/lib/model/tags.js +119 -0
  118. package/vendor/l5x/lib/model/types.d.ts +304 -0
  119. package/vendor/l5x/lib/model/types.js +12 -0
  120. package/vendor/l5x/lib/model/udts.d.ts +34 -0
  121. package/vendor/l5x/lib/model/udts.js +81 -0
  122. package/vendor/l5x/lib/model/xml.d.ts +139 -0
  123. package/vendor/l5x/lib/model/xml.js +291 -0
  124. package/vendor/l5x/lib/model/xref.d.ts +28 -0
  125. package/vendor/l5x/lib/model/xref.js +154 -0
  126. package/vendor/l5x/lib/session.d.ts +119 -0
  127. package/vendor/l5x/lib/session.js +236 -0
  128. package/vendor/l5x/lib/skill.d.ts +30 -0
  129. package/vendor/l5x/lib/skill.js +44 -0
  130. package/vendor/l5x/lib/studio-state.d.ts +77 -0
  131. package/vendor/l5x/lib/studio-state.js +79 -0
  132. package/vendor/l5x/lib/studio.d.ts +29 -0
  133. package/vendor/l5x/lib/studio.js +40 -0
  134. package/vendor/l5x/lib/tools/checks.d.ts +19 -0
  135. package/vendor/l5x/lib/tools/checks.js +140 -0
  136. package/vendor/l5x/lib/tools/common.d.ts +41 -0
  137. package/vendor/l5x/lib/tools/common.js +84 -0
  138. package/vendor/l5x/lib/tools/controller.d.ts +21 -0
  139. package/vendor/l5x/lib/tools/controller.js +170 -0
  140. package/vendor/l5x/lib/tools/drafts.d.ts +23 -0
  141. package/vendor/l5x/lib/tools/drafts.js +270 -0
  142. package/vendor/l5x/lib/tools/live.d.ts +21 -0
  143. package/vendor/l5x/lib/tools/live.js +175 -0
  144. package/vendor/l5x/lib/tools/read.d.ts +19 -0
  145. package/vendor/l5x/lib/tools/read.js +245 -0
  146. package/vendor/l5x/lib/tools/references.d.ts +20 -0
  147. package/vendor/l5x/lib/tools/references.js +269 -0
  148. package/vendor/l5x/lib/tools/studio.d.ts +21 -0
  149. package/vendor/l5x/lib/tools/studio.js +193 -0
  150. package/vendor/l5x/poll-worker.mjs +77 -0
  151. package/vendor/l5x/studio-bridge/NuGet.Config +1 -0
  152. package/vendor/l5x/studio-bridge/Program.cs +304 -0
  153. package/vendor/l5x/studio-bridge/StudioBridge.csproj +11 -0
  154. package/vendor/mwi/README.md +60 -0
  155. package/vendor/mwi/SKILL.md +87 -0
  156. package/vendor/mwi/bridge/README.md +8 -0
  157. package/vendor/mwi/bridge/mw_bridge.ps1 +2763 -0
  158. package/vendor/mwi/bridge/sdk-interop-importer.cs +30 -0
  159. package/vendor/mwi/bridge/sdk-variable-reader.cs +22 -0
  160. package/vendor/mwi/bridge/start_bridge.cmd +21 -0
  161. package/vendor/mwi/bridge/watch_dialogs.cmd +13 -0
  162. package/vendor/mwi/bridge/watch_dialogs.ps1 +153 -0
  163. package/vendor/mwi/code/engine/motionworks_iec_mcp/__init__.py +14 -0
  164. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/__init__.cpython-312.pyc +0 -0
  165. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/block_interfaces.cpython-312.pyc +0 -0
  166. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/cfb.cpython-312.pyc +0 -0
  167. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/datatypes.cpython-312.pyc +0 -0
  168. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/declarations.cpython-312.pyc +0 -0
  169. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/errors.cpython-312.pyc +0 -0
  170. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/graphical_listing.cpython-312.pyc +0 -0
  171. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/grid.cpython-312.pyc +0 -0
  172. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/knowledge.cpython-312.pyc +0 -0
  173. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/mwt_bind.cpython-312.pyc +0 -0
  174. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/navigation.cpython-312.pyc +0 -0
  175. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/program_checks.cpython-312.pyc +0 -0
  176. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/project.cpython-312.pyc +0 -0
  177. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/staging.cpython-312.pyc +0 -0
  178. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/structure.cpython-312.pyc +0 -0
  179. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/task_bindings.cpython-312.pyc +0 -0
  180. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/tasks.cpython-312.pyc +0 -0
  181. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/tree.cpython-312.pyc +0 -0
  182. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/validation.cpython-312.pyc +0 -0
  183. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/variable_edit.cpython-312.pyc +0 -0
  184. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/variables.cpython-312.pyc +0 -0
  185. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/workflow.cpython-312.pyc +0 -0
  186. package/vendor/mwi/code/engine/motionworks_iec_mcp/block_interfaces.py +275 -0
  187. package/vendor/mwi/code/engine/motionworks_iec_mcp/build.py +339 -0
  188. package/vendor/mwi/code/engine/motionworks_iec_mcp/capture.py +448 -0
  189. package/vendor/mwi/code/engine/motionworks_iec_mcp/cfb.py +765 -0
  190. package/vendor/mwi/code/engine/motionworks_iec_mcp/com.py +268 -0
  191. package/vendor/mwi/code/engine/motionworks_iec_mcp/datatypes.py +204 -0
  192. package/vendor/mwi/code/engine/motionworks_iec_mcp/declarations.py +399 -0
  193. package/vendor/mwi/code/engine/motionworks_iec_mcp/descriptions.py +30 -0
  194. package/vendor/mwi/code/engine/motionworks_iec_mcp/eip.py +292 -0
  195. package/vendor/mwi/code/engine/motionworks_iec_mcp/errors.py +36 -0
  196. package/vendor/mwi/code/engine/motionworks_iec_mcp/graphical_listing.py +208 -0
  197. package/vendor/mwi/code/engine/motionworks_iec_mcp/grid.py +227 -0
  198. package/vendor/mwi/code/engine/motionworks_iec_mcp/ide.py +317 -0
  199. package/vendor/mwi/code/engine/motionworks_iec_mcp/iec.py +317 -0
  200. package/vendor/mwi/code/engine/motionworks_iec_mcp/installed_help.py +151 -0
  201. package/vendor/mwi/code/engine/motionworks_iec_mcp/knowledge.py +218 -0
  202. package/vendor/mwi/code/engine/motionworks_iec_mcp/libraries.py +250 -0
  203. package/vendor/mwi/code/engine/motionworks_iec_mcp/manuals.py +520 -0
  204. package/vendor/mwi/code/engine/motionworks_iec_mcp/mwt_bind.py +133 -0
  205. package/vendor/mwi/code/engine/motionworks_iec_mcp/navigation.py +44 -0
  206. package/vendor/mwi/code/engine/motionworks_iec_mcp/pou_writer.py +1547 -0
  207. package/vendor/mwi/code/engine/motionworks_iec_mcp/program_checks.py +360 -0
  208. package/vendor/mwi/code/engine/motionworks_iec_mcp/project.py +704 -0
  209. package/vendor/mwi/code/engine/motionworks_iec_mcp/reference_data/catalog.json +672 -0
  210. package/vendor/mwi/code/engine/motionworks_iec_mcp/reference_data/patterns.json +86 -0
  211. package/vendor/mwi/code/engine/motionworks_iec_mcp/restore.py +208 -0
  212. package/vendor/mwi/code/engine/motionworks_iec_mcp/server.py +1913 -0
  213. package/vendor/mwi/code/engine/motionworks_iec_mcp/snapshot.py +138 -0
  214. package/vendor/mwi/code/engine/motionworks_iec_mcp/st_comments.py +25 -0
  215. package/vendor/mwi/code/engine/motionworks_iec_mcp/staging.py +179 -0
  216. package/vendor/mwi/code/engine/motionworks_iec_mcp/stlint.py +676 -0
  217. package/vendor/mwi/code/engine/motionworks_iec_mcp/structure.py +98 -0
  218. package/vendor/mwi/code/engine/motionworks_iec_mcp/task_bindings.py +68 -0
  219. package/vendor/mwi/code/engine/motionworks_iec_mcp/tasks.py +162 -0
  220. package/vendor/mwi/code/engine/motionworks_iec_mcp/transaction.py +157 -0
  221. package/vendor/mwi/code/engine/motionworks_iec_mcp/tree.py +563 -0
  222. package/vendor/mwi/code/engine/motionworks_iec_mcp/tree_writer.py +790 -0
  223. package/vendor/mwi/code/engine/motionworks_iec_mcp/uia.py +465 -0
  224. package/vendor/mwi/code/engine/motionworks_iec_mcp/validation.py +41 -0
  225. package/vendor/mwi/code/engine/motionworks_iec_mcp/variable_edit.py +183 -0
  226. package/vendor/mwi/code/engine/motionworks_iec_mcp/variables.py +472 -0
  227. package/vendor/mwi/code/engine/motionworks_iec_mcp/workflow.py +130 -0
  228. package/vendor/mwi/code/engine/motionworks_iec_mcp/writer.py +666 -0
  229. package/vendor/mwi/code/mw_code.py +1258 -0
  230. package/vendor/mwi/legacy/edit-session.js +50 -0
  231. package/vendor/mwi/legacy/fb-insertion.js +74 -0
  232. package/vendor/mwi/legacy/native-code.js +83 -0
  233. package/vendor/mwi/legacy/native-groups.js +75 -0
  234. package/vendor/mwi/legacy/native-structure.js +143 -0
  235. package/vendor/mwi/legacy/native-variables.js +77 -0
  236. package/vendor/mwi/legacy/pou-conversion.js +47 -0
  237. package/vendor/mwi/legacy/pou-package.js +66 -0
  238. package/vendor/mwi/lib/core/bridge.d.ts +71 -0
  239. package/vendor/mwi/lib/core/bridge.js +53 -0
  240. package/vendor/mwi/lib/core/code-engine.d.ts +47 -0
  241. package/vendor/mwi/lib/core/code-engine.js +109 -0
  242. package/vendor/mwi/lib/core/errors.d.ts +37 -0
  243. package/vendor/mwi/lib/core/errors.js +47 -0
  244. package/vendor/mwi/lib/core/params.d.ts +52 -0
  245. package/vendor/mwi/lib/core/params.js +46 -0
  246. package/vendor/mwi/lib/core/ps-bridge.d.ts +62 -0
  247. package/vendor/mwi/lib/core/ps-bridge.js +127 -0
  248. package/vendor/mwi/lib/core/result.d.ts +45 -0
  249. package/vendor/mwi/lib/core/result.js +20 -0
  250. package/vendor/mwi/lib/core/tool.d.ts +80 -0
  251. package/vendor/mwi/lib/core/tool.js +55 -0
  252. package/vendor/mwi/lib/edit/compare.d.ts +33 -0
  253. package/vendor/mwi/lib/edit/compare.js +70 -0
  254. package/vendor/mwi/lib/edit.d.ts +20 -0
  255. package/vendor/mwi/lib/edit.js +32 -0
  256. package/vendor/mwi/lib/index.d.ts +21 -0
  257. package/vendor/mwi/lib/index.js +33 -0
  258. package/vendor/mwi/lib/read/service.d.ts +117 -0
  259. package/vendor/mwi/lib/read/service.js +229 -0
  260. package/vendor/mwi/lib/read.d.ts +21 -0
  261. package/vendor/mwi/lib/read.js +33 -0
  262. package/vendor/mwi/lib/session/project.d.ts +34 -0
  263. package/vendor/mwi/lib/session/project.js +54 -0
  264. package/vendor/mwi/lib/session/service.d.ts +167 -0
  265. package/vendor/mwi/lib/session/service.js +566 -0
  266. package/vendor/mwi/lib/session/stage.d.ts +84 -0
  267. package/vendor/mwi/lib/session/stage.js +187 -0
  268. package/vendor/mwi/lib/session/workspace.d.ts +52 -0
  269. package/vendor/mwi/lib/session/workspace.js +90 -0
  270. package/vendor/mwi/lib/skill.d.ts +36 -0
  271. package/vendor/mwi/lib/skill.js +56 -0
  272. package/vendor/mwi/lib/tools/edit.d.ts +20 -0
  273. package/vendor/mwi/lib/tools/edit.js +286 -0
  274. package/vendor/mwi/lib/tools/read.d.ts +19 -0
  275. package/vendor/mwi/lib/tools/read.js +161 -0
  276. package/vendor/mwi/lib/tools/session.d.ts +20 -0
  277. package/vendor/mwi/lib/tools/session.js +166 -0
  278. package/vendor/mwi/lib/tools/verify.d.ts +19 -0
  279. package/vendor/mwi/lib/tools/verify.js +85 -0
  280. package/vendor/mwi/lib/verify.d.ts +17 -0
  281. package/vendor/mwi/lib/verify.js +29 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,115 @@
1
+ # Changelog
2
+
3
+ ## [0.3.0] - 2026-10-23
4
+
5
+ ### Added
6
+
7
+ - **FactoryTalk Optix as a bundle component:** the `optix` row mounts `@aryacode/dsh-tool-ft-optix` (Studio discovery, live authoring, validation, templates, preview and OCR) from a released component tarball. The standalone tool plugin is no longer a product entry or an installer dependency.
8
+ - The bundle now registers 79 tools: the 73 generated reference tools plus six Optix tools. Optix stays unlinked to a skill until one exists.
9
+
10
+ ## [0.2.0] - 2026-10-23
11
+
12
+ ### Added
13
+
14
+ - **MotionWorks IEC rows:** `mwi-session` (find, stage, open, start, status, worksheet, close), `mwi-read` (overview, list, get, search, references, review, help), `mwi-verify` (compile, diagnostics, saved-source baselines) and `mwi-edit` (code, declarations, structure, block insertion, POU packages, validation, apply), plus the `mwi-read-skill` guidance.
15
+ - The redesigned surface is 24 tools over the proven 32-bit COM bridge and the Python saved-model engine. It is verified live against MotionWorks IEC 3 Pro 1.19: stage, start, worksheet, close, saved-project reads, compile diagnostics, code replacement, declaration add, POU create/delete, block insertion and a POU package export/delete/import round trip.
16
+ - The edit row is off by default. Edits write only the staged copy and verify unrelated saved and native state.
17
+
18
+ ### Changed
19
+
20
+ - The bundle is now 73 tools. MotionWorks IEC mounts here instead of as a separate plugin.
21
+
22
+ Notable changes to `dsh-engineering`. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
23
+
24
+ ## [0.1.2] - 2026-10-23
25
+
26
+ ### Fixed
27
+
28
+ - **L5X filesystem contract:** the harness filesystem resolves paths to opaque targets. The session now keeps a target for re-reads and a display path for outputs, so `export_acd_to_l5x`, drafts and SDK tools receive strings again instead of a provider object. Verified against SDK v37: a real ACD exported to a 3.0 MB L5X.
29
+ - **FactoryTalk View filesystem contract:** the read, editing and Studio entries adapt composed string paths to the harness target contract, so opening an export, applying edits and Studio discovery no longer pass raw paths to target-based operations.
30
+ - Link every L5X tool to the `rockwell-l5x` capability by exact name. The rebuilt tools use descriptive names (`open_project`, `draft_apply`, ...), so the `l5x_` prefix alone did not govern them and their schemas stayed visible when the skill was off.
31
+ - Correct the `factorytalk-view` guidance: the editing and Studio entries now exist and are enabled, so the skill no longer calls those operations out of scope.
32
+
33
+ ### Added
34
+
35
+ - `docs/reference/tools.md` and `tools.json`: a generated reference for all 49 tools, with a test that fails when the committed reference or the policy coverage drifts from the registered definitions.
36
+ - `docs/examples.md`: end-to-end sessions for reading, staged edits, SDK verification, supervised controller access, live reads and FactoryTalk View.
37
+ - `docs/architecture.md`: the row model, service injection, configuration, client faces, distribution and compatibility.
38
+ - Package READMEs for `packages/l5x`, `packages/ftview`, `packages/viewer` and `packages/ftview-viewer`.
39
+
40
+ ### Changed
41
+
42
+ - Rewrite the README for the current bundle: what it is, the eleven components and their defaults, install, composition, the policy table, tools, requirements, safety and known gaps.
43
+ - Add `docs:tools` and `docs:check` scripts; tests now run through tsx so they can read the TypeScript tool factories.
44
+
45
+ ## [0.1.1] - 2026-10-23
46
+
47
+
48
+
49
+ - Add the FTView Studio entry `ftview-studio`: `ftview_studio_status`, `ftview_studio_preflight`, `ftview_studio_handoff` — discovery of installs, schemas, help and the Add Component utility, changed-file preflight with Studio name restrictions, and the ordered manual import plan. No vendor utility is executed.
50
+ - Add 6 Studio tests: registration, discovery with a simulated install, absent install, changed-file preflight, unsafe-name blocker and the handoff plan. FTView suite is 26 tests.
51
+
52
+ - Add the FTView editing entry `ftview-edit`: `ftview_draft_display_set`, `ftview_draft_display_add`, `ftview_draft_tag_upsert`, `ftview_validate`, `ftview_apply` — one operation per call, text-preserving transforms, re-parsed validation, and apply to a new folder that never touches the source. Row disabled until the old plugin retires.
53
+ - Add 8 editing tests: display attribute edit end to end, tag row update, display copy, draft clearing, unknown display, duplicate name, and existing-output refusal. FTView suite is 20 tests.
54
+
55
+ - Fold the FactoryTalk View display preview into the bundle as `dsh-engineering-ftview-viewer`, mounted by the `ftview-viewer` row (disabled until the old plugin retires, because both claim `.xml` previews).
56
+
57
+ - Add the FactoryTalk View ME read surface as `dsh-engineering-ftview`: six intents (`ftview_open`, `ftview_list`, `ftview_get`, `ftview_find`, `ftview_check`, `ftview_compare`), 3,557 schema characters, and a 2.5 KB `factorytalk-view` skill. No Python engine; display XML and the tag CSV are parsed in TypeScript.
58
+ - Insert `ftview-read` and `ftview-read-skill` disabled until the old FTView plugin retires, because both register the same skill name.
59
+ - Add 12 FTView tests: registration, every parameter described, open, list, get, not-found candidates, find, structural checks, compare and skill registration. Design recorded in `docs/port/ftview.md`.
60
+
61
+ - Fold the L5X ladder viewer into the bundle as `dsh-engineering-l5x-viewer`, mounted by the `l5x-viewer` row. The package carries the copied client source and the built closure-factory artifact re-registered under the bundle name, so the viewer keeps rendering while the standalone `ui-logix-project-viewer` product entry is retired.
62
+ - Verified in the dev app: after removing the standalone viewer from `PRODUCT_PLUGINS` and rebuilding, the same L5X document still renders its ladder view from the folded package, and the Plugins page no longer lists the standalone viewer card.
63
+
64
+ - Retire the old L5X plugin from the dev profile: `dsh-tool-l5x` is removed from its dependencies and its `l5x-tools` and `l5x-skill` patch rows are gone. The composed profile carries only this bundle's rows.
65
+ - Verified live after the retirement: the session listed the eleven read tools and the new `rockwell-l5x` description, with no `l5x_*` tool and no old skill text.
66
+
67
+ - Port the client face: the PLC trend card (`lib/client.js`, 17.2 KB closure-factory bundle) registered for `start_plc_trend`, with its locales, styles and trend model. The card mounts independently of every tool row.
68
+ - Record that the old plugin's `face.ts` and `Studio5000.tsx` were dead code — never imported by its client entry — so the two-rung ladder rail is not a ported feature. A ladder viewer for L5X documents would be new work.
69
+ - Add `dsh.client` metadata, a `tsdown.client.config.ts` bundle with the package name as its registration id, and the host build now emits both halves.
70
+
71
+ - Add the `l5x-live` entry: `poll_live_tags` and `start_plc_trend`, 2,971 schema characters, inserted disabled. Reads use the package's polling worker and its own EtherNet/IP connection, so no Studio, FactoryLinx or SDK is required.
72
+ - Tags are a real array of flat objects, not the old JSON string: a string is refused with a fix. The trend starts a session-owned job and states that live logic matching the export is unverified.
73
+ - Bring the polling worker and the `st-ethernet-ip` dependency into the package, and dispose owned workers when the plugin unloads.
74
+ - Add 4 live tests: registration, an undeclared tag, a JSON-string refusal and the trend job refusal. Suite is 60 tests.
75
+
76
+ - Add the supervised controller tools to `l5x-studio`: `controller_approval_status`, `capture_controller_snapshot`, `go_online`, `read_controller_mode`, `read_live_tag`, `change_controller_mode` and `download_project`. The entry is now 13 tools and 7,901 schema characters, still inserted disabled.
77
+ - Port the approval seam as a composition service: the three machine-changing actions refuse with `APPROVAL_UNAVAILABLE` before contacting a controller when the session policy is not `ask`, and proceed only on `allowed-once`. Downloads accept only a `verification_id` this chat produced from a passed build, checked against the built ACD and both L5X hashes.
78
+ - `verify_offline_l5x` and `build_acd_from_draft` now return a `verification_id` when the build passed and the review has no blockers.
79
+ - Add 4 approval-gate tests: status without the service, status with `ask`, a mode change refused before contact, and a download without a verification id. Suite is 56 tests.
80
+
81
+ - Add the `l5x-studio` entry with its offline half: `studio_sdk_status`, `studio_capabilities`, `export_acd_to_l5x`, `verify_offline_l5x`, `build_acd_from_draft` and `studio_review_evidence`. 3,914 schema characters, inserted disabled because it needs Studio 5000.
82
+ - The entry consumes the read entry's `l5xProjects` service and records ACD exports per chat, so a baseline is accepted only when both the ACD and the L5X hashes still match the export that produced them.
83
+ - Verified locally against the installed SDK: an ACD exported to L5X in 29 s, the export reopened by this parser, and a Studio-exported L5X built offline with `offline_build: passed`. The SDK refused to re-import its own export with `XMLSrv_E_IMPORT_ABORTED_NO_CHANGES`; recorded in the port specification.
84
+ - Add 4 studio tests: registration, SDK preflight, capabilities and the unchanged-routine refusal. Suite is 52 tests.
85
+
86
+ - Add the draft family as its own `l5x-editing` entry: `draft_rung`, `draft_st`, `draft_routine`, `draft_tag`, `draft_tag_description`, `draft_udt_member`, `draft_udt_description`, `draft_validate`, `draft_apply`. One operation per call, accumulated per chat and project, validated against the project, then written to one new file.
87
+ - The editing entry consumes the read entry's `l5xProjects` service, so a project is opened once for both entries. It is inserted disabled: the read entry stays at 8,107 schema characters and editing costs 7,233 only when enabled.
88
+ - Add 7 draft tests: accumulation, argument refusal, validation hash, application to a new file, source preservation, overwrite refusal and draft handles. Suite is 48 tests.
89
+ - Update the `rockwell-l5x` guidance for drafting: boundary, one-operation-per-call, validate before apply, and the note that editing may be disabled in a profile.
90
+
91
+ - Port the `rockwell-l5x` guidance into the package: a 2.9 KB decision tree covering the read workflow, AOI and program scope rules, checks, comparison, reporting limits and revision floors. It is registered by `dsh-engineering-l5x/skill` and mounted as the stable `l5x-read-skill` row; the old 27 KB skill row can stay disabled.
92
+ - Add 3 skill tests: registration identity, body budget and frontmatter stripping, and a loud failure when the skills service is missing. Suite is 41 tests.
93
+ - Mount the L5X pilot as a bundle component: `cordis.patch.yml` inserts the stable `l5x-read` row, `dsh-engineering-l5x` is a workspace dependency, and the Plugins card lists the component under Engineering. The dev profile no longer inserts the row itself.
94
+ - Start the L5X port in `packages/l5x`: four offline read tools (`open_project`, `project_overview`, `list_components`, `get_component`), 2,431 schema characters, every parameter described, results carrying `summary`/`data`/`coverage`/`next`, and failures carrying `code`/`message`/`fix`/`candidates`.
95
+ - Add `list_components` because the current 43-tool surface exposes no way to enumerate tags, UDTs, routines or modules; discovery exists only in the legacy twelve-tool API.
96
+ - Add the reference cluster: `search_logic`, `find_references`, `trace_dependencies`, `resolve_tag`, `usage_map`. The five tools that answered "where is this used" in the old surface collapse into two named intents plus address resolution and element mapping; the surface is now 9 tools and 6,154 schema characters with 31 of 31 parameters described.
97
+ - Complete the offline read surface with `run_checks` and `compare_projects`: findings filtered by rule or severity with review caveats, and a component-level diff that ignores timestamps and XML formatting. The surface is now 11 tools and 7,994 schema characters with 41 of 41 parameters described.
98
+ - Document and enforce export revisions: reading accepts any L5X revision 19 or later, flags revisions outside the observed matrix as `untested_revision`, and refuses anything older than 19. The revision-37 floor applies only to a Studio SDK build.
99
+ - Add 7 checks and comparison tests, including a real tag-description change and a zero-change comparison, plus 3 revision tests. Suite is 34 tests.
100
+ - Scope project handles to the chat that opened them. The first two-chat transcript made the second chat see a handle from the first and fail its listing with `AMBIGUOUS_PROJECT`; handles now live per chat.
101
+ - Resolve `AOI_Name::Member` in `trace_dependencies` against the AOI's declaration scope, and refuse an unresolved symbol with `UNRESOLVED_SYMBOL` and the scope fix instead of returning an empty graph. `find_references` coverage now states that external consumers are not visible.
102
+ - Add chat isolation, AOI-qualified tracing and unresolved-symbol tests. Suite is 38 tests.
103
+ - Document the composed layer, the skill-to-namespace policy, the measured tool exposure, the built-in target composition, the retirement list, and the replacement-map requirement for the flip.
104
+ - Record the classification: AryaCode's product catalog lists this bundle as AryaCode-authored with market distribution, so the Plugins page groups it under AryaCode and not Community.
105
+ - Record the switch model: a skill is the single per-product switch for guidance and tools, while the client faces (ladder viewer, ME display renderer, DXF viewer) are separate entries that stay mounted. The port shares one isomorphic parser between the host tools and each viewer.
106
+ - Specify the L5X port from measured failures: 43 tools, 132 undescribed parameters, nine JSON-in-string parameters, 97 error codes, and the overlapping reference, inspection and drafting clusters. The spec splits the product into `l5x-tools` (default), `l5x-studio` and `l5x-live` (both off), the skill and the independent client.
107
+ - Settle the four port decisions: two reference tools rather than one with a mode; `observe_logic` retires; no batch tool; the SDK entry owns the supervised lifecycle and `edit_offline_acd` survives as `build_acd_from_draft`.
108
+ - Add `AGENTS.md`: documentation is updated in the same change as the code it describes, diagrams are part of the contract, and known gaps stay explicit.
109
+ - Add `test/docs.spec.mjs`, which fails when the README policy table, the documented unlinked namespace, the changelog version heading, or the locale key sets disagree with the patch. Verified to fail on a dropped policy row and on a renamed prefix.
110
+
111
+ ## [0.1.0]
112
+
113
+ - Add the engineering bundle: a phase-1, additive loader layer that targets the existing `tool-capability-policy` row and links `l5x_*`, `ftview_*` and `mw_*` to the skills that govern them.
114
+ - Keep `onDemand: false` so the bundle does not change the product-wide eager tool exposure Arya measured and kept.
115
+ - Insert no plugin rows, so existing profiles and product plugin ids are untouched.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 KonnectSuite
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,229 @@
1
- # Temporary Holding Version
1
+ # AryaCode Engineering
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **One bundle for automation-engineering work in AryaCode.** Studio 5000 L5X, FactoryTalk View ME,
4
+ MotionWorks IEC and FactoryTalk Optix sit behind a single install, one row per capability, and one
5
+ switch per product — so the switch removes tool schemas from the request instead of leaving them
6
+ visible after the guidance is off.
7
+
8
+ `@aryacode/dsh-engineering` · 79 tools · 17 rows · 4 products · MIT
9
+
10
+ ---
11
+
12
+ ## Why a bundle
13
+
14
+ A general assistant pays for every tool schema on every request. An automation engineer needs deep
15
+ surfaces — reading a 3 MB L5X, comparing two projects, staging ladder edits, talking to a controller —
16
+ but only one or two of them at a time.
17
+
18
+ This bundle splits those surfaces into independently switchable rows and links each product's tools to
19
+ the skill that governs it. Turning a product off removes **both** its guidance and its schemas:
20
+
21
+ | State | What the model receives |
22
+ |---|---|
23
+ | `rockwell-l5x` skill **on** | L5X guidance + 35 tool schemas |
24
+ | `rockwell-l5x` skill **off** | neither |
25
+
26
+ The heavy surfaces are separate rows on purpose. A read-only profile pays for the read tools and
27
+ nothing else, and the viewers are independent of the tools — switching L5X tools off does not remove
28
+ the ladder viewer.
29
+
30
+ ## What it supports
31
+
32
+ | Product | Tools | Default | Needs |
33
+ |---|---|---|---|
34
+ | **Studio 5000 L5X** | 35 | read on; edit, Studio, live **off** | Node for offline reads; Studio 5000 + Logix Designer SDK for SDK work; a controller for live |
35
+ | **FactoryTalk View ME** | 14 | all on | Node for an export folder; FactoryTalk View Studio ME for discovery and the handoff |
36
+ | **MotionWorks IEC** | 24 | session, read, verify on; edit **off** | MotionWorks IEC 3 Pro installed; verified against 1.19 |
37
+ | **FactoryTalk Optix** | 6 | on | Optix Studio installed |
38
+
39
+ Tool groups, by product:
40
+
41
+ - **L5X** — 11 read (`open_project` … `compare_projects`), 9 staged drafts (`draft_*`), 6 Logix
42
+ Designer SDK, 7 supervised controller, 2 live EtherNet/IP
43
+ - **FactoryTalk View** — 6 read, 5 staged edits, 3 Studio handoff
44
+ - **MotionWorks IEC** — 7 session, 7 saved-project reads, 3 verify, 7 staged edits
45
+ - **Optix** — 6 tools, unlinked to a skill until one exists
46
+
47
+ ## What the policy changes
48
+
49
+ Each skill governs a product's tools. The capability policy is per-tool, not per-prefix, because the
50
+ rebuilt tools use descriptive names.
51
+
52
+ | Skill | Governs | Tools |
53
+ |---|---|---|
54
+ | `rockwell-l5x` | `l5x_*` **and** the 35 L5X tools by exact name | 35 |
55
+ | `factorytalk-view` | `ftview_*` | 14 |
56
+ | `motionworks-iec` | `mw_*` | 24 |
57
+ | — | `optix_*` | 6 (always visible: no skill yet) |
58
+
59
+ `onDemand` stays `false`. Bounded on-demand discovery was measured against eager exposure and kept
60
+ eager, because discovery cost more turns than the schema characters it saved. The context win comes
61
+ from the per-product switches and from splitting the surfaces into rows.
62
+
63
+ The reference in [docs/reference/tools.md](docs/reference/tools.md) is generated from the registered
64
+ definitions, and `pnpm test` fails when a registered tool is not governed or the committed reference
65
+ drifts.
66
+
67
+ ## Status
68
+
69
+ Where each surface actually stands, based on what has been exercised.
70
+
71
+ **Working and verified**
72
+
73
+ - L5X offline reads, references, usage, checks and comparison against revision 19+ projects
74
+ - Staged L5X editing — nine `draft_*` tools, validation, and one new file on apply
75
+ - Logix Designer SDK: a real ACD exported to a 3.0 MB L5X against SDK v37
76
+ - Supervised controller access — upload, mode change and download behind per-call approval, with
77
+ downloads accepting only a verification id produced by a passed build
78
+ - Live EtherNet/IP reads and a bounded PLC trend
79
+ - FactoryTalk View ME: export reads, structural checks, comparison, staged display and HMI tag edits
80
+ - MotionWorks IEC: verified live against 3 Pro 1.19 — stage, start, worksheet, close, saved-project
81
+ reads, compile diagnostics, code replacement, declaration add, POU create/delete, block insertion
82
+ and a POU package export/delete/import round trip
83
+ - Ladder viewer and FactoryTalk View display preview
84
+
85
+ **Deliberately off by default** — enabled per profile: `l5x-editing`, `l5x-studio`, `l5x-live`,
86
+ `mwi-edit`. A read-only profile should not pay for nine draft schemas or a controller surface.
87
+
88
+ **Known limits** — stated in the bundle, not hidden:
89
+
90
+ - Live reads and SDK builds cannot establish that online logic matches the export; every result says
91
+ so in `coverage`
92
+ - FBD/SFC semantics are not exercised
93
+ - FactoryTalk View Studio work is a **manual handoff**: the bundle plans the import and preflights
94
+ changed files, it does not import
95
+ - Optix has no skill, so its 6 tools cannot be switched off
96
+
97
+ **Not in this repository** — CAD mounts as an independent plugin.
98
+
99
+ ## Milestones
100
+
101
+ | Version | What landed |
102
+ |---|---|
103
+ | **0.3.0** | FactoryTalk Optix becomes a bundle component; 79 tools total |
104
+ | **0.2.0** | MotionWorks IEC ports into the bundle — 24 tools over the COM bridge and saved-model engine, verified live; edit off by default |
105
+ | **0.1.2** | Harness filesystem contract fixed across L5X and FactoryTalk View; every L5X tool linked to its capability by name; generated tool reference, examples and architecture docs |
106
+
107
+ ## Install
108
+
109
+ The bundle is a meta-package: it mounts its components by row id and carries the tool-exposure policy.
110
+ Installing a component on its own gives you tools **without** the policy.
111
+
112
+ ```sh
113
+ # in the AryaCode profile
114
+ pnpm add @aryacode/dsh-engineering
115
+ ```
116
+
117
+ ```jsonc
118
+ // profile package.json
119
+ "dsh": { "profile": { "bundles": ["@aryacode/dsh-engineering"] } }
120
+ ```
121
+
122
+ Then, in the application, the **Engineering** card lists each row as a component. Per-row enable state
123
+ lives in the profile, so disabling a row survives the next update.
124
+
125
+ For development, clone this repository, `pnpm install`, and link it into a profile bundle list; the
126
+ development home mounts the same rows.
127
+
128
+ ## How it composes
129
+
130
+ The bundle adds one loader layer after the Web app. It patches the existing `tool-capability-policy`
131
+ row and inserts its own rows; it never replaces a product plugin id.
132
+
133
+ ```mermaid
134
+ flowchart TB
135
+ Profile["Profile bundle list"] --> Bundle["@aryacode/dsh-engineering"]
136
+ Bundle -->|"id-targeted config override"| Policy["tool-capability-policy"]
137
+ Bundle -->|insert| L5XRead["l5x-read (on)"]
138
+ L5XRead --> L5XSkill["l5x-read-skill (on)"]
139
+ Bundle -->|insert| L5XEdit["l5x-editing (off)"]
140
+ Bundle -->|insert| L5XStudio["l5x-studio (off)"]
141
+ Bundle -->|insert| L5XLive["l5x-live (off)"]
142
+ Bundle -->|insert| L5XViewer["l5x-viewer (on)"]
143
+ Bundle -->|insert| FTV["ftview-read / edit / studio / viewer (on)"]
144
+ Bundle -->|insert| MWI["mwi-session / read / verify (on), edit (off)"]
145
+ Bundle -->|insert| Optix["optix (on)"]
146
+ Policy -->|"rockwell-l5x governs 35 tools"| L5XRead
147
+ Policy -->|"factorytalk-view governs ftview_*"| FTV
148
+ Policy -->|"motionworks-iec governs mw_*"| MWI
149
+ ```
150
+
151
+ Row ids are stable. Profiles and patches address these ids, so per-row enable state survives upgrades
152
+ even when the implementation behind a row is replaced.
153
+
154
+ | Row id | Package entry | Default |
155
+ |---|---|---|
156
+ | `l5x-read` | `dsh-engineering-l5x` | on |
157
+ | `l5x-read-skill` | `dsh-engineering-l5x/skill` | on |
158
+ | `l5x-editing` | `dsh-engineering-l5x/editing` | off |
159
+ | `l5x-studio` | `dsh-engineering-l5x/studio` | off |
160
+ | `l5x-live` | `dsh-engineering-l5x/live` | off |
161
+ | `l5x-viewer` | `dsh-engineering-l5x-viewer` | on |
162
+ | `ftview-read` | `dsh-engineering-ftview` | on |
163
+ | `ftview-read-skill` | `dsh-engineering-ftview/skill` | on |
164
+ | `ftview-edit` | `dsh-engineering-ftview/edit` | on |
165
+ | `ftview-studio` | `dsh-engineering-ftview/studio` | on |
166
+ | `ftview-viewer` | `dsh-engineering-ftview-viewer` | on |
167
+ | `mwi-session` | `dsh-engineering-mwi` | on |
168
+ | `mwi-read` | `dsh-engineering-mwi/read` | on |
169
+ | `mwi-read-skill` | `dsh-engineering-mwi/skill` | on |
170
+ | `mwi-verify` | `dsh-engineering-mwi/verify` | on |
171
+ | `mwi-edit` | `dsh-engineering-mwi/edit` | off |
172
+ | `optix` | `@aryacode/dsh-tool-ft-optix` | on |
173
+
174
+ ## Safety
175
+
176
+ - **Read-only by default.** Reading, checks, comparison and the viewers never change a controller.
177
+ - **Edits write new files.** `draft_apply` writes one new L5X beside the source and refuses to
178
+ overwrite; `ftview_apply` writes a new export folder and leaves the source untouched. MotionWorks
179
+ edits write only the staged copy and verify unrelated saved and native state.
180
+ - **Controller changes need a human.** Upload, mode change and download require per-call approval and
181
+ a session policy that permits asking. The tools refuse before contacting a controller when approval
182
+ is unavailable, and a download accepts only a verification id produced by a passed build.
183
+ - **No hidden vendor execution.** The FactoryTalk View Studio handoff returns a manual import plan; it
184
+ does not run a vendor utility.
185
+ - **Coverage is stated.** Every result names what it cannot establish, including whether online logic
186
+ matches the export.
187
+
188
+ ## Requirements
189
+
190
+ | Surface | Needs |
191
+ |---|---|
192
+ | L5X read, references, checks, drafts | Node only; reads `.L5X` revision 19 or later |
193
+ | L5X Studio SDK | Studio 5000 with the Logix Designer SDK service, FactoryTalk Linx, .NET |
194
+ | L5X controller | Reachable controller, FactoryTalk Linx, a matching uploaded ACD |
195
+ | L5X live | A reachable controller over EtherNet/IP; no Studio, Linx or ACD |
196
+ | FactoryTalk View read, edit | Node only; a FactoryTalk View ME export folder |
197
+ | FactoryTalk View Studio | FactoryTalk View Studio ME for discovery and the manual import |
198
+ | MotionWorks IEC | MotionWorks IEC 3 Pro; the 32-bit COM bridge and the Python saved-model engine |
199
+ | Optix | FactoryTalk Optix Studio |
200
+
201
+ ## Documentation
202
+
203
+ | Document | Owns |
204
+ |---|---|
205
+ | [Tool reference](docs/reference/tools.md) | Every tool, parameter and description (generated) |
206
+ | [Examples](docs/examples.md) | End-to-end sessions per product |
207
+ | [Architecture](docs/architecture.md) | Composition, row model, configuration, client faces, packaging |
208
+ | [L5X port](docs/port/l5x.md) | L5X port decisions and measurements |
209
+ | [FTView port](docs/port/ftview.md) | FactoryTalk View port decisions |
210
+ | [MotionWorks IEC port](docs/port/mwi.md) | MWI migration design, phases and inventory |
211
+ | [Packaging](docs/port/packaging.md) | How the bundle is packed and pinned |
212
+ | [Retirement](docs/port/retirement.md) | What "gone" means for a retired plugin |
213
+ | [Changelog](CHANGELOG.md) | Released and unreleased changes |
214
+
215
+ ## Development
216
+
217
+ ```sh
218
+ pnpm install
219
+ pnpm test # patch, docs, tool-reference and manifest checks
220
+ pnpm docs:tools # regenerate the tool reference from the registered definitions
221
+ pnpm docs:check # fail if the committed reference has drifted
222
+ ```
223
+
224
+ Tests run through `tsx` so they can read the TypeScript tool factories. A registered tool that no
225
+ skill governs fails the suite — the policy is a test, not a convention.
226
+
227
+ ## Licence
228
+
229
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,122 @@
1
+ # AryaCode engineering bundle.
2
+ #
3
+ # Two layers live here.
4
+ #
5
+ # 1. Tool exposure. Targets the existing `tool-capability-policy` row and links
6
+ # each engineering product's tool namespace to the skill that governs it, so
7
+ # the Skills page switch controls the guidance and the tools together instead
8
+ # of leaving the tool schemas exposed after the skill is off.
9
+ #
10
+ # `onDemand` stays false. Arya measured bounded on-demand discovery against
11
+ # eager exposure and kept eager exposure because discovery cost more turns
12
+ # than the schema characters it saved. The context gain comes from per-product
13
+ # switches and from trimming the product schemas.
14
+ #
15
+ # Optix has no skill yet, so `optix_*` stays unlinked and always visible. Link
16
+ # it here once a FactoryTalk Optix skill registers one.
17
+ #
18
+ # 2. The product rows. Mounts the rebuilt L5X and FactoryTalk View surfaces and
19
+ # their guidance as components of this bundle. The row ids are stable, so per-entry enable
20
+ # state survives upgrades even as the package behind them is rebuilt.
21
+ - id: tool-capability-policy
22
+ config:
23
+ policyOnly: true
24
+ toolPolicy:
25
+ onDemand: false
26
+ capabilities:
27
+ - skill: rockwell-l5x
28
+ # The rebuilt L5X tools keep descriptive names (open_project,
29
+ # draft_apply, ...). This exact list is what the skill switch
30
+ # governs; `l5x_` stays linked for any prefixed tool added later.
31
+ tools:
32
+ - open_project
33
+ - project_overview
34
+ - list_components
35
+ - get_component
36
+ - search_logic
37
+ - find_references
38
+ - trace_dependencies
39
+ - resolve_tag
40
+ - usage_map
41
+ - run_checks
42
+ - compare_projects
43
+ - draft_rung
44
+ - draft_st
45
+ - draft_routine
46
+ - draft_tag
47
+ - draft_tag_description
48
+ - draft_udt_member
49
+ - draft_udt_description
50
+ - draft_validate
51
+ - draft_apply
52
+ - studio_sdk_status
53
+ - studio_capabilities
54
+ - export_acd_to_l5x
55
+ - verify_offline_l5x
56
+ - build_acd_from_draft
57
+ - studio_review_evidence
58
+ - controller_approval_status
59
+ - capture_controller_snapshot
60
+ - go_online
61
+ - read_controller_mode
62
+ - read_live_tag
63
+ - change_controller_mode
64
+ - download_project
65
+ - poll_live_tags
66
+ - start_plc_trend
67
+ prefixes:
68
+ - l5x_
69
+ - skill: factorytalk-view
70
+ prefixes:
71
+ - ftview_
72
+ - skill: motionworks-iec
73
+ prefixes:
74
+ - mw_
75
+ - insert:
76
+ - id: l5x-read
77
+ name: '@aryacode/dsh-engineering/l5x'
78
+ - id: l5x-read-skill
79
+ name: '@aryacode/dsh-engineering/l5x/skill'
80
+ # Editing is its own entry so a read-only profile does not pay for nine
81
+ # draft schemas. It consumes the read entry's project service.
82
+ - id: l5x-editing
83
+ name: '@aryacode/dsh-engineering/l5x/editing'
84
+ disabled: true
85
+ # The SDK entry needs Studio 5000 installed, so it stays off until asked for.
86
+ - id: l5x-studio
87
+ name: '@aryacode/dsh-engineering/l5x/studio'
88
+ disabled: true
89
+ # Live reads need a controller address; the row is the switch.
90
+ - id: l5x-live
91
+ name: '@aryacode/dsh-engineering/l5x/live'
92
+ disabled: true
93
+ # The ladder viewer is the bundle's own client face, independent of the tools.
94
+ - id: l5x-viewer
95
+ name: '@aryacode/dsh-engineering/l5x-viewer'
96
+ # FactoryTalk View ME: read, edit and Studio entries plus the display
97
+ # preview. The old plugin is retired, so these mount by default.
98
+ - id: ftview-read
99
+ name: '@aryacode/dsh-engineering/ftview'
100
+ - id: ftview-read-skill
101
+ name: '@aryacode/dsh-engineering/ftview/skill'
102
+ - id: ftview-edit
103
+ name: '@aryacode/dsh-engineering/ftview/edit'
104
+ - id: ftview-studio
105
+ name: '@aryacode/dsh-engineering/ftview/studio'
106
+ - id: ftview-viewer
107
+ name: '@aryacode/dsh-engineering/ftview-viewer'
108
+ # MotionWorks IEC: the redesigned rows. Editing is off by default, like L5X.
109
+ - id: mwi-session
110
+ name: '@aryacode/dsh-engineering/mwi'
111
+ - id: mwi-read
112
+ name: '@aryacode/dsh-engineering/mwi/read'
113
+ - id: mwi-read-skill
114
+ name: '@aryacode/dsh-engineering/mwi/skill'
115
+ - id: mwi-verify
116
+ name: '@aryacode/dsh-engineering/mwi/verify'
117
+ - id: mwi-edit
118
+ name: '@aryacode/dsh-engineering/mwi/edit'
119
+ disabled: true
120
+ # FactoryTalk Optix stays a separate package, mounted as a component row.
121
+ - id: optix
122
+ name: '@deepseek-ai/dsh-tool-ft-optix'
package/locale/en.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Engineering",
4
+ "description": "Automation-engineering plugins for Studio 5000, FactoryTalk View, FactoryTalk Optix, MotionWorks IEC and CAD drawings."
5
+ }
6
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "工程",
4
+ "description": "面向 Studio 5000、FactoryTalk View、FactoryTalk Optix、MotionWorks IEC 与 CAD 图纸的自动化工程插件。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,6 +1,80 @@
1
1
  {
2
2
  "name": "@aryacode/dsh-engineering",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.3.0",
4
+ "description": "AryaCode engineering bundle: one install surface and one tool-exposure policy for the Studio 5000 L5X, FactoryTalk View and MotionWorks IEC plugins, with skill links for Optix and CAD.",
5
+ "keywords": [
6
+ "dsh",
7
+ "deepseek-harness",
8
+ "cordis",
9
+ "plugin",
10
+ "bundle",
11
+ "engineering",
12
+ "automation",
13
+ "plc",
14
+ "studio-5000",
15
+ "factorytalk",
16
+ "motionworks"
17
+ ],
18
+ "license": "MIT",
19
+ "type": "module",
20
+ "engines": {
21
+ "node": "^22.19.0 || >=24.0.0"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/KonnectSuite/dsh-engineering.git"
26
+ },
27
+ "homepage": "https://github.com/KonnectSuite/dsh-engineering#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/KonnectSuite/dsh-engineering/issues"
30
+ },
31
+ "files": [
32
+ "cordis.patch.yml",
33
+ "locale/*.json",
34
+ "vendor/**/*",
35
+ "README.md",
36
+ "CHANGELOG.md",
37
+ "LICENSE"
38
+ ],
39
+ "dsh": {
40
+ "bundle": {
41
+ "patch": "./cordis.patch.yml"
42
+ }
43
+ },
44
+ "dependencies": {
45
+ "@deepseek-ai/dsh-tool-ft-optix": "https://github.com/KonnectSuite/KonnectSuite.github.io/releases/download/plugins-v0.3.0/deepseek-ai-dsh-tool-ft-optix-0.2.1-rc.3.tgz",
46
+ "@aryacode/dsh-engineering-l5x-viewer": "0.1.2",
47
+ "@aryacode/dsh-engineering-ftview-viewer": "0.1.2"
48
+ },
49
+ "peerDependencies": {
50
+ "@deepseek-ai/cordis": "~4.0.4",
51
+ "@deepseek-ai/dsh-tool-skill": "^0.2.0-rc.2"
52
+ },
53
+ "devDependencies": {
54
+ "js-yaml": "^4.1.0",
55
+ "tsx": "^4.23.15"
56
+ },
57
+ "exports": {
58
+ ".": "./cordis.patch.yml",
59
+ "./l5x": "./vendor/l5x/lib/index.js",
60
+ "./l5x/skill": "./vendor/l5x/lib/skill.js",
61
+ "./l5x/editing": "./vendor/l5x/lib/editing.js",
62
+ "./l5x/live": "./vendor/l5x/lib/live.js",
63
+ "./l5x/studio": "./vendor/l5x/lib/studio.js",
64
+ "./ftview": "./vendor/ftview/lib/index.js",
65
+ "./ftview/skill": "./vendor/ftview/lib/skill.js",
66
+ "./ftview/edit": "./vendor/ftview/lib/edit.js",
67
+ "./ftview/studio": "./vendor/ftview/lib/studio.js",
68
+ "./mwi": "./vendor/mwi/lib/index.js",
69
+ "./mwi/read": "./vendor/mwi/lib/read.js",
70
+ "./mwi/skill": "./vendor/mwi/lib/skill.js",
71
+ "./mwi/verify": "./vendor/mwi/lib/verify.js",
72
+ "./mwi/edit": "./vendor/mwi/lib/edit.js"
73
+ },
74
+ "scripts": {
75
+ "test": "node --import tsx --test test/patch.spec.mjs test/docs.spec.mjs test/tool-reference.spec.mjs test/manifests.spec.mjs",
76
+ "docs:tools": "tsx scripts/gen-tool-reference.ts",
77
+ "docs:check": "tsx scripts/gen-tool-reference.ts --check",
78
+ "assemble": "node scripts/assemble.mjs"
79
+ }
6
80
  }
@@ -0,0 +1,55 @@
1
+ # dsh-engineering-ftview
2
+
3
+ FactoryTalk View ME tools for the `dsh-engineering` bundle. Three loader entries share one package:
4
+
5
+ | Entry | Tools | Purpose |
6
+ |---|---|---|
7
+ | `dsh-engineering-ftview` | 6 read tools | Open an export folder, list and read displays and HMI tags, search, check, compare |
8
+ | `dsh-engineering-ftview/edit` | 5 tools | Stage display and tag changes, validate, apply to a new folder |
9
+ | `dsh-engineering-ftview/studio` | 3 tools | Discover Studio, preflight changed files, plan the manual import |
10
+
11
+ The `factorytalk-view` guidance ships as the separate `dsh-engineering-ftview/skill` entry.
12
+
13
+ ## Read surface
14
+
15
+ `ftview_open` scans one export folder and returns a `view_id`. `ftview_list` pages displays or tags,
16
+ `ftview_get` reads one display (named objects) or one tag row, `ftview_find` searches names and text,
17
+ `ftview_check` reports tag CSV integrity, duplicate names and unparsed files, and `ftview_compare`
18
+ diffs two exports by display name, tag name and file hash.
19
+
20
+ This is a TypeScript redesign, not a port of the old Python plugin: no `engine.py`, no `lxml`, no
21
+ `ftview_project_start`/`environment`/`stage_register` tools.
22
+
23
+ ## Editing
24
+
25
+ `ftview_draft_display_set`, `ftview_draft_display_add` and `ftview_draft_tag_upsert` stage one change
26
+ per call; `ftview_validate` applies the staged edits to a re-parsed copy and reports changed files;
27
+ `ftview_apply` writes a new export folder, leaving the source untouched.
28
+
29
+ ## Studio
30
+
31
+ `ftview_studio_status` discovers installed FactoryTalk View ME tooling and schemas.
32
+ `ftview_studio_preflight` checks changed files for import problems, including Studio name
33
+ restrictions. `ftview_studio_handoff` returns the ordered manual import plan. No vendor utility runs.
34
+
35
+ ## Configuration
36
+
37
+ | Entry | Option | Default |
38
+ |---|---|---|
39
+ | read | `maxFiles` | 2000 |
40
+ | edit | `maxDraftOperations` | 100 |
41
+ | studio | `searchRoots` | the two Rockwell Programs folders |
42
+
43
+ ## Boundary
44
+
45
+ The surface parses documented text exports (display XML and the HMI tag CSV). It does not decode MER
46
+ or MED, contact a terminal, validate against vendor XSD, bind tags to a PLC, or drive Studio.
47
+ FactoryTalk View SE and FactoryTalk Optix are different products and are not analyzed here.
48
+
49
+ ## Develop
50
+
51
+ ```sh
52
+ pnpm install
53
+ pnpm run build
54
+ pnpm test
55
+ ```