@aryacode/dsh-engineering 0.0.0-stage → 0.4.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 (284) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/LICENSE +21 -0
  3. package/README.md +230 -2
  4. package/cordis.patch.yml +123 -0
  5. package/lib/client.js +3448 -0
  6. package/lib/index.d.ts +2 -0
  7. package/lib/index.js +9 -0
  8. package/locale/en.json +6 -0
  9. package/locale/zh.json +6 -0
  10. package/package.json +94 -3
  11. package/vendor/ftview/README.md +55 -0
  12. package/vendor/ftview/SKILL.md +74 -0
  13. package/vendor/ftview/lib/checks.d.ts +27 -0
  14. package/vendor/ftview/lib/checks.js +39 -0
  15. package/vendor/ftview/lib/core.d.ts +208 -0
  16. package/vendor/ftview/lib/core.js +160 -0
  17. package/vendor/ftview/lib/edit/drafts.d.ts +49 -0
  18. package/vendor/ftview/lib/edit/drafts.js +84 -0
  19. package/vendor/ftview/lib/edit/operations.d.ts +62 -0
  20. package/vendor/ftview/lib/edit/operations.js +126 -0
  21. package/vendor/ftview/lib/edit/prepare.d.ts +38 -0
  22. package/vendor/ftview/lib/edit/prepare.js +133 -0
  23. package/vendor/ftview/lib/edit/tools.d.ts +25 -0
  24. package/vendor/ftview/lib/edit/tools.js +198 -0
  25. package/vendor/ftview/lib/edit.d.ts +30 -0
  26. package/vendor/ftview/lib/edit.js +38 -0
  27. package/vendor/ftview/lib/index.d.ts +31 -0
  28. package/vendor/ftview/lib/index.js +36 -0
  29. package/vendor/ftview/lib/model.d.ts +80 -0
  30. package/vendor/ftview/lib/model.js +267 -0
  31. package/vendor/ftview/lib/session.d.ts +48 -0
  32. package/vendor/ftview/lib/session.js +98 -0
  33. package/vendor/ftview/lib/skill.d.ts +29 -0
  34. package/vendor/ftview/lib/skill.js +43 -0
  35. package/vendor/ftview/lib/studio/discover.d.ts +36 -0
  36. package/vendor/ftview/lib/studio/discover.js +87 -0
  37. package/vendor/ftview/lib/studio/preflight.d.ts +51 -0
  38. package/vendor/ftview/lib/studio/preflight.js +64 -0
  39. package/vendor/ftview/lib/studio/tools.d.ts +15 -0
  40. package/vendor/ftview/lib/studio/tools.js +83 -0
  41. package/vendor/ftview/lib/studio.d.ts +30 -0
  42. package/vendor/ftview/lib/studio.js +37 -0
  43. package/vendor/ftview/lib/tools.d.ts +14 -0
  44. package/vendor/ftview/lib/tools.js +202 -0
  45. package/vendor/l5x/README.md +62 -0
  46. package/vendor/l5x/SKILL.md +81 -0
  47. package/vendor/l5x/lib/approvals.d.ts +50 -0
  48. package/vendor/l5x/lib/approvals.js +93 -0
  49. package/vendor/l5x/lib/client.js +412 -0
  50. package/vendor/l5x/lib/client.js.map +1 -0
  51. package/vendor/l5x/lib/core/errors.d.ts +38 -0
  52. package/vendor/l5x/lib/core/errors.js +48 -0
  53. package/vendor/l5x/lib/core/params.d.ts +49 -0
  54. package/vendor/l5x/lib/core/params.js +39 -0
  55. package/vendor/l5x/lib/core/result.d.ts +46 -0
  56. package/vendor/l5x/lib/core/result.js +21 -0
  57. package/vendor/l5x/lib/core/tool.d.ts +102 -0
  58. package/vendor/l5x/lib/core/tool.js +19 -0
  59. package/vendor/l5x/lib/drafts.d.ts +66 -0
  60. package/vendor/l5x/lib/drafts.js +98 -0
  61. package/vendor/l5x/lib/editing.d.ts +30 -0
  62. package/vendor/l5x/lib/editing.js +42 -0
  63. package/vendor/l5x/lib/engine/acd-edit.d.ts +13 -0
  64. package/vendor/l5x/lib/engine/acd-edit.js +115 -0
  65. package/vendor/l5x/lib/engine/analysis.d.ts +22 -0
  66. package/vendor/l5x/lib/engine/analysis.js +258 -0
  67. package/vendor/l5x/lib/engine/capabilities.d.ts +9 -0
  68. package/vendor/l5x/lib/engine/capabilities.js +40 -0
  69. package/vendor/l5x/lib/engine/change-set.d.ts +122 -0
  70. package/vendor/l5x/lib/engine/change-set.js +446 -0
  71. package/vendor/l5x/lib/engine/configuration.d.ts +21 -0
  72. package/vendor/l5x/lib/engine/configuration.js +42 -0
  73. package/vendor/l5x/lib/engine/details.d.ts +47 -0
  74. package/vendor/l5x/lib/engine/details.js +173 -0
  75. package/vendor/l5x/lib/engine/direct-polling.d.ts +91 -0
  76. package/vendor/l5x/lib/engine/direct-polling.js +193 -0
  77. package/vendor/l5x/lib/engine/download-review.d.ts +15 -0
  78. package/vendor/l5x/lib/engine/download-review.js +63 -0
  79. package/vendor/l5x/lib/engine/logic-syntax.d.ts +60 -0
  80. package/vendor/l5x/lib/engine/logic-syntax.js +237 -0
  81. package/vendor/l5x/lib/engine/observations.d.ts +41 -0
  82. package/vendor/l5x/lib/engine/observations.js +67 -0
  83. package/vendor/l5x/lib/engine/project-analysis.d.ts +131 -0
  84. package/vendor/l5x/lib/engine/project-analysis.js +314 -0
  85. package/vendor/l5x/lib/engine/review-evidence.d.ts +8 -0
  86. package/vendor/l5x/lib/engine/review-evidence.js +49 -0
  87. package/vendor/l5x/lib/engine/review.d.ts +18 -0
  88. package/vendor/l5x/lib/engine/review.js +123 -0
  89. package/vendor/l5x/lib/engine/studio-sdk.d.ts +101 -0
  90. package/vendor/l5x/lib/engine/studio-sdk.js +571 -0
  91. package/vendor/l5x/lib/engine/tag-resolution.d.ts +20 -0
  92. package/vendor/l5x/lib/engine/tag-resolution.js +169 -0
  93. package/vendor/l5x/lib/engine/usage.d.ts +16 -0
  94. package/vendor/l5x/lib/engine/usage.js +92 -0
  95. package/vendor/l5x/lib/engine/xml-regions.d.ts +23 -0
  96. package/vendor/l5x/lib/engine/xml-regions.js +77 -0
  97. package/vendor/l5x/lib/fs.d.ts +17 -0
  98. package/vendor/l5x/lib/fs.js +36 -0
  99. package/vendor/l5x/lib/index.d.ts +36 -0
  100. package/vendor/l5x/lib/index.js +42 -0
  101. package/vendor/l5x/lib/live.d.ts +48 -0
  102. package/vendor/l5x/lib/live.js +48 -0
  103. package/vendor/l5x/lib/model/aois.d.ts +39 -0
  104. package/vendor/l5x/lib/model/aois.js +112 -0
  105. package/vendor/l5x/lib/model/errors.d.ts +15 -0
  106. package/vendor/l5x/lib/model/errors.js +18 -0
  107. package/vendor/l5x/lib/model/index.d.ts +20 -0
  108. package/vendor/l5x/lib/model/index.js +19 -0
  109. package/vendor/l5x/lib/model/module.d.ts +37 -0
  110. package/vendor/l5x/lib/model/module.js +54 -0
  111. package/vendor/l5x/lib/model/modules.d.ts +24 -0
  112. package/vendor/l5x/lib/model/modules.js +55 -0
  113. package/vendor/l5x/lib/model/parse.d.ts +32 -0
  114. package/vendor/l5x/lib/model/parse.js +116 -0
  115. package/vendor/l5x/lib/model/project.d.ts +15 -0
  116. package/vendor/l5x/lib/model/project.js +31 -0
  117. package/vendor/l5x/lib/model/routines.d.ts +71 -0
  118. package/vendor/l5x/lib/model/routines.js +183 -0
  119. package/vendor/l5x/lib/model/tags.d.ts +51 -0
  120. package/vendor/l5x/lib/model/tags.js +119 -0
  121. package/vendor/l5x/lib/model/types.d.ts +304 -0
  122. package/vendor/l5x/lib/model/types.js +12 -0
  123. package/vendor/l5x/lib/model/udts.d.ts +34 -0
  124. package/vendor/l5x/lib/model/udts.js +81 -0
  125. package/vendor/l5x/lib/model/xml.d.ts +139 -0
  126. package/vendor/l5x/lib/model/xml.js +291 -0
  127. package/vendor/l5x/lib/model/xref.d.ts +28 -0
  128. package/vendor/l5x/lib/model/xref.js +154 -0
  129. package/vendor/l5x/lib/session.d.ts +119 -0
  130. package/vendor/l5x/lib/session.js +236 -0
  131. package/vendor/l5x/lib/skill.d.ts +30 -0
  132. package/vendor/l5x/lib/skill.js +44 -0
  133. package/vendor/l5x/lib/studio-state.d.ts +77 -0
  134. package/vendor/l5x/lib/studio-state.js +79 -0
  135. package/vendor/l5x/lib/studio.d.ts +29 -0
  136. package/vendor/l5x/lib/studio.js +40 -0
  137. package/vendor/l5x/lib/tools/checks.d.ts +19 -0
  138. package/vendor/l5x/lib/tools/checks.js +140 -0
  139. package/vendor/l5x/lib/tools/common.d.ts +41 -0
  140. package/vendor/l5x/lib/tools/common.js +84 -0
  141. package/vendor/l5x/lib/tools/controller.d.ts +21 -0
  142. package/vendor/l5x/lib/tools/controller.js +170 -0
  143. package/vendor/l5x/lib/tools/drafts.d.ts +23 -0
  144. package/vendor/l5x/lib/tools/drafts.js +270 -0
  145. package/vendor/l5x/lib/tools/live.d.ts +21 -0
  146. package/vendor/l5x/lib/tools/live.js +175 -0
  147. package/vendor/l5x/lib/tools/read.d.ts +19 -0
  148. package/vendor/l5x/lib/tools/read.js +245 -0
  149. package/vendor/l5x/lib/tools/references.d.ts +20 -0
  150. package/vendor/l5x/lib/tools/references.js +269 -0
  151. package/vendor/l5x/lib/tools/studio.d.ts +21 -0
  152. package/vendor/l5x/lib/tools/studio.js +193 -0
  153. package/vendor/l5x/poll-worker.mjs +77 -0
  154. package/vendor/l5x/studio-bridge/NuGet.Config +1 -0
  155. package/vendor/l5x/studio-bridge/Program.cs +304 -0
  156. package/vendor/l5x/studio-bridge/StudioBridge.csproj +11 -0
  157. package/vendor/mwi/README.md +60 -0
  158. package/vendor/mwi/SKILL.md +87 -0
  159. package/vendor/mwi/bridge/README.md +8 -0
  160. package/vendor/mwi/bridge/mw_bridge.ps1 +2763 -0
  161. package/vendor/mwi/bridge/sdk-interop-importer.cs +30 -0
  162. package/vendor/mwi/bridge/sdk-variable-reader.cs +22 -0
  163. package/vendor/mwi/bridge/start_bridge.cmd +21 -0
  164. package/vendor/mwi/bridge/watch_dialogs.cmd +13 -0
  165. package/vendor/mwi/bridge/watch_dialogs.ps1 +153 -0
  166. package/vendor/mwi/code/engine/motionworks_iec_mcp/__init__.py +14 -0
  167. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/__init__.cpython-312.pyc +0 -0
  168. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/block_interfaces.cpython-312.pyc +0 -0
  169. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/cfb.cpython-312.pyc +0 -0
  170. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/datatypes.cpython-312.pyc +0 -0
  171. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/declarations.cpython-312.pyc +0 -0
  172. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/errors.cpython-312.pyc +0 -0
  173. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/graphical_listing.cpython-312.pyc +0 -0
  174. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/grid.cpython-312.pyc +0 -0
  175. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/knowledge.cpython-312.pyc +0 -0
  176. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/mwt_bind.cpython-312.pyc +0 -0
  177. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/navigation.cpython-312.pyc +0 -0
  178. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/program_checks.cpython-312.pyc +0 -0
  179. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/project.cpython-312.pyc +0 -0
  180. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/staging.cpython-312.pyc +0 -0
  181. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/structure.cpython-312.pyc +0 -0
  182. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/task_bindings.cpython-312.pyc +0 -0
  183. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/tasks.cpython-312.pyc +0 -0
  184. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/tree.cpython-312.pyc +0 -0
  185. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/validation.cpython-312.pyc +0 -0
  186. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/variable_edit.cpython-312.pyc +0 -0
  187. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/variables.cpython-312.pyc +0 -0
  188. package/vendor/mwi/code/engine/motionworks_iec_mcp/__pycache__/workflow.cpython-312.pyc +0 -0
  189. package/vendor/mwi/code/engine/motionworks_iec_mcp/block_interfaces.py +275 -0
  190. package/vendor/mwi/code/engine/motionworks_iec_mcp/build.py +339 -0
  191. package/vendor/mwi/code/engine/motionworks_iec_mcp/capture.py +448 -0
  192. package/vendor/mwi/code/engine/motionworks_iec_mcp/cfb.py +765 -0
  193. package/vendor/mwi/code/engine/motionworks_iec_mcp/com.py +268 -0
  194. package/vendor/mwi/code/engine/motionworks_iec_mcp/datatypes.py +204 -0
  195. package/vendor/mwi/code/engine/motionworks_iec_mcp/declarations.py +399 -0
  196. package/vendor/mwi/code/engine/motionworks_iec_mcp/descriptions.py +30 -0
  197. package/vendor/mwi/code/engine/motionworks_iec_mcp/eip.py +292 -0
  198. package/vendor/mwi/code/engine/motionworks_iec_mcp/errors.py +36 -0
  199. package/vendor/mwi/code/engine/motionworks_iec_mcp/graphical_listing.py +208 -0
  200. package/vendor/mwi/code/engine/motionworks_iec_mcp/grid.py +227 -0
  201. package/vendor/mwi/code/engine/motionworks_iec_mcp/ide.py +317 -0
  202. package/vendor/mwi/code/engine/motionworks_iec_mcp/iec.py +317 -0
  203. package/vendor/mwi/code/engine/motionworks_iec_mcp/installed_help.py +151 -0
  204. package/vendor/mwi/code/engine/motionworks_iec_mcp/knowledge.py +218 -0
  205. package/vendor/mwi/code/engine/motionworks_iec_mcp/libraries.py +250 -0
  206. package/vendor/mwi/code/engine/motionworks_iec_mcp/manuals.py +520 -0
  207. package/vendor/mwi/code/engine/motionworks_iec_mcp/mwt_bind.py +133 -0
  208. package/vendor/mwi/code/engine/motionworks_iec_mcp/navigation.py +44 -0
  209. package/vendor/mwi/code/engine/motionworks_iec_mcp/pou_writer.py +1547 -0
  210. package/vendor/mwi/code/engine/motionworks_iec_mcp/program_checks.py +360 -0
  211. package/vendor/mwi/code/engine/motionworks_iec_mcp/project.py +704 -0
  212. package/vendor/mwi/code/engine/motionworks_iec_mcp/reference_data/catalog.json +672 -0
  213. package/vendor/mwi/code/engine/motionworks_iec_mcp/reference_data/patterns.json +86 -0
  214. package/vendor/mwi/code/engine/motionworks_iec_mcp/restore.py +208 -0
  215. package/vendor/mwi/code/engine/motionworks_iec_mcp/server.py +1913 -0
  216. package/vendor/mwi/code/engine/motionworks_iec_mcp/snapshot.py +138 -0
  217. package/vendor/mwi/code/engine/motionworks_iec_mcp/st_comments.py +25 -0
  218. package/vendor/mwi/code/engine/motionworks_iec_mcp/staging.py +179 -0
  219. package/vendor/mwi/code/engine/motionworks_iec_mcp/stlint.py +676 -0
  220. package/vendor/mwi/code/engine/motionworks_iec_mcp/structure.py +98 -0
  221. package/vendor/mwi/code/engine/motionworks_iec_mcp/task_bindings.py +68 -0
  222. package/vendor/mwi/code/engine/motionworks_iec_mcp/tasks.py +162 -0
  223. package/vendor/mwi/code/engine/motionworks_iec_mcp/transaction.py +157 -0
  224. package/vendor/mwi/code/engine/motionworks_iec_mcp/tree.py +563 -0
  225. package/vendor/mwi/code/engine/motionworks_iec_mcp/tree_writer.py +790 -0
  226. package/vendor/mwi/code/engine/motionworks_iec_mcp/uia.py +465 -0
  227. package/vendor/mwi/code/engine/motionworks_iec_mcp/validation.py +41 -0
  228. package/vendor/mwi/code/engine/motionworks_iec_mcp/variable_edit.py +183 -0
  229. package/vendor/mwi/code/engine/motionworks_iec_mcp/variables.py +472 -0
  230. package/vendor/mwi/code/engine/motionworks_iec_mcp/workflow.py +130 -0
  231. package/vendor/mwi/code/engine/motionworks_iec_mcp/writer.py +666 -0
  232. package/vendor/mwi/code/mw_code.py +1258 -0
  233. package/vendor/mwi/legacy/edit-session.js +50 -0
  234. package/vendor/mwi/legacy/fb-insertion.js +74 -0
  235. package/vendor/mwi/legacy/native-code.js +83 -0
  236. package/vendor/mwi/legacy/native-groups.js +75 -0
  237. package/vendor/mwi/legacy/native-structure.js +143 -0
  238. package/vendor/mwi/legacy/native-variables.js +77 -0
  239. package/vendor/mwi/legacy/pou-conversion.js +47 -0
  240. package/vendor/mwi/legacy/pou-package.js +66 -0
  241. package/vendor/mwi/lib/core/bridge.d.ts +71 -0
  242. package/vendor/mwi/lib/core/bridge.js +53 -0
  243. package/vendor/mwi/lib/core/code-engine.d.ts +47 -0
  244. package/vendor/mwi/lib/core/code-engine.js +109 -0
  245. package/vendor/mwi/lib/core/errors.d.ts +37 -0
  246. package/vendor/mwi/lib/core/errors.js +47 -0
  247. package/vendor/mwi/lib/core/params.d.ts +52 -0
  248. package/vendor/mwi/lib/core/params.js +46 -0
  249. package/vendor/mwi/lib/core/ps-bridge.d.ts +62 -0
  250. package/vendor/mwi/lib/core/ps-bridge.js +127 -0
  251. package/vendor/mwi/lib/core/result.d.ts +45 -0
  252. package/vendor/mwi/lib/core/result.js +20 -0
  253. package/vendor/mwi/lib/core/tool.d.ts +80 -0
  254. package/vendor/mwi/lib/core/tool.js +55 -0
  255. package/vendor/mwi/lib/edit/compare.d.ts +33 -0
  256. package/vendor/mwi/lib/edit/compare.js +70 -0
  257. package/vendor/mwi/lib/edit.d.ts +20 -0
  258. package/vendor/mwi/lib/edit.js +32 -0
  259. package/vendor/mwi/lib/index.d.ts +21 -0
  260. package/vendor/mwi/lib/index.js +33 -0
  261. package/vendor/mwi/lib/read/service.d.ts +117 -0
  262. package/vendor/mwi/lib/read/service.js +229 -0
  263. package/vendor/mwi/lib/read.d.ts +21 -0
  264. package/vendor/mwi/lib/read.js +33 -0
  265. package/vendor/mwi/lib/session/project.d.ts +34 -0
  266. package/vendor/mwi/lib/session/project.js +54 -0
  267. package/vendor/mwi/lib/session/service.d.ts +167 -0
  268. package/vendor/mwi/lib/session/service.js +566 -0
  269. package/vendor/mwi/lib/session/stage.d.ts +84 -0
  270. package/vendor/mwi/lib/session/stage.js +187 -0
  271. package/vendor/mwi/lib/session/workspace.d.ts +52 -0
  272. package/vendor/mwi/lib/session/workspace.js +90 -0
  273. package/vendor/mwi/lib/skill.d.ts +36 -0
  274. package/vendor/mwi/lib/skill.js +56 -0
  275. package/vendor/mwi/lib/tools/edit.d.ts +20 -0
  276. package/vendor/mwi/lib/tools/edit.js +286 -0
  277. package/vendor/mwi/lib/tools/read.d.ts +19 -0
  278. package/vendor/mwi/lib/tools/read.js +161 -0
  279. package/vendor/mwi/lib/tools/session.d.ts +20 -0
  280. package/vendor/mwi/lib/tools/session.js +166 -0
  281. package/vendor/mwi/lib/tools/verify.d.ts +19 -0
  282. package/vendor/mwi/lib/tools/verify.js +85 -0
  283. package/vendor/mwi/lib/verify.d.ts +17 -0
  284. package/vendor/mwi/lib/verify.js +29 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,128 @@
1
+ # Changelog
2
+
3
+ ## [0.4.0] - 2026-10-25
4
+
5
+ ### Changed
6
+
7
+ - **One package, one client bundle.** The L5X ladder viewer and the FactoryTalk View ME display preview now ship inside `@aryacode/dsh-engineering` itself: `lib/client.js` registers once, under the bundle's own package name, and runs both faces inside that one factory. `@aryacode/dsh-engineering-l5x-viewer` and `@aryacode/dsh-engineering-ftview-viewer` are no longer dependencies, so the bundle declares no `@aryacode/*` dependency at all.
8
+ - The `l5x-viewer` and `ftview-viewer` rows collapse into one `viewers` row that mounts the bundle package itself. A client bundle is only discovered through a mounted row, and a package registers exactly one bundle, so both previews mount together; the tool rows stay independent of it.
9
+ - The bundle package gains a host half (`lib/index.js`): an entry that registers nothing of its own, present because the Shell scans the client face of packages that a row mounts.
10
+
11
+ ### Added
12
+
13
+ - `scripts/build-client.mjs` builds `lib/client.js` from the two committed face bundles. The face bodies are copied verbatim, each in its own closure, and the merged plugin exports the union of both faces' services. `pnpm build:client` regenerates the artifact; `pnpm pack` runs it first.
14
+ - `test/client-face.spec.mjs` holds the three properties that would otherwise fail silently in the app: the registration id equals the package name, the factory materializes with both faces and merges their services, and `apply` mounts both previews. It also fails when `lib/client.js` is stale against its faces.
15
+
16
+ ## [0.3.0] - 2026-10-23
17
+
18
+ ### Added
19
+
20
+ - **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.
21
+ - The bundle now registers 79 tools: the 73 generated reference tools plus six Optix tools. Optix stays unlinked to a skill until one exists.
22
+
23
+ ## [0.2.0] - 2026-10-23
24
+
25
+ ### Added
26
+
27
+ - **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.
28
+ - 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.
29
+ - The edit row is off by default. Edits write only the staged copy and verify unrelated saved and native state.
30
+
31
+ ### Changed
32
+
33
+ - The bundle is now 73 tools. MotionWorks IEC mounts here instead of as a separate plugin.
34
+
35
+ 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).
36
+
37
+ ## [0.1.2] - 2026-10-23
38
+
39
+ ### Fixed
40
+
41
+ - **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.
42
+ - **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.
43
+ - 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.
44
+ - 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.
45
+
46
+ ### Added
47
+
48
+ - `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.
49
+ - `docs/examples.md`: end-to-end sessions for reading, staged edits, SDK verification, supervised controller access, live reads and FactoryTalk View.
50
+ - `docs/architecture.md`: the row model, service injection, configuration, client faces, distribution and compatibility.
51
+ - Package READMEs for `packages/l5x`, `packages/ftview`, `packages/viewer` and `packages/ftview-viewer`.
52
+
53
+ ### Changed
54
+
55
+ - 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.
56
+ - Add `docs:tools` and `docs:check` scripts; tests now run through tsx so they can read the TypeScript tool factories.
57
+
58
+ ## [0.1.1] - 2026-10-23
59
+
60
+
61
+
62
+ - 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.
63
+ - 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.
64
+
65
+ - 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.
66
+ - 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.
67
+
68
+ - 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).
69
+
70
+ - 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.
71
+ - Insert `ftview-read` and `ftview-read-skill` disabled until the old FTView plugin retires, because both register the same skill name.
72
+ - 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`.
73
+
74
+ - 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.
75
+ - 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.
76
+
77
+ - 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.
78
+ - 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.
79
+
80
+ - 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.
81
+ - 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.
82
+ - 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.
83
+
84
+ - 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.
85
+ - 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.
86
+ - Bring the polling worker and the `st-ethernet-ip` dependency into the package, and dispose owned workers when the plugin unloads.
87
+ - Add 4 live tests: registration, an undeclared tag, a JSON-string refusal and the trend job refusal. Suite is 60 tests.
88
+
89
+ - 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.
90
+ - 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.
91
+ - `verify_offline_l5x` and `build_acd_from_draft` now return a `verification_id` when the build passed and the review has no blockers.
92
+ - 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.
93
+
94
+ - 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.
95
+ - 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.
96
+ - 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.
97
+ - Add 4 studio tests: registration, SDK preflight, capabilities and the unchanged-routine refusal. Suite is 52 tests.
98
+
99
+ - 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.
100
+ - 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.
101
+ - 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.
102
+ - 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.
103
+
104
+ - 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.
105
+ - 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.
106
+ - 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.
107
+ - 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`.
108
+ - 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.
109
+ - 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.
110
+ - 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.
111
+ - 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.
112
+ - 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.
113
+ - 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.
114
+ - 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.
115
+ - Add chat isolation, AOI-qualified tracing and unresolved-symbol tests. Suite is 38 tests.
116
+ - 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.
117
+ - 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.
118
+ - 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.
119
+ - 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.
120
+ - 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`.
121
+ - 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.
122
+ - 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.
123
+
124
+ ## [0.1.0]
125
+
126
+ - 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.
127
+ - Keep `onDemand: false` so the bundle does not change the product-wide eager tool exposure Arya measured and kept.
128
+ - 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,231 @@
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 · 16 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 previews are independent of the tools — switching L5X tools off does not remove
28
+ the ladder viewer. Both previews mount from **one** row (`viewers`), because a package registers
29
+ exactly one browser bundle.
30
+
31
+ ## What it supports
32
+
33
+ | Product | Tools | Default | Needs |
34
+ |---|---|---|---|
35
+ | **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 |
36
+ | **FactoryTalk View ME** | 14 | all on | Node for an export folder; FactoryTalk View Studio ME for discovery and the handoff |
37
+ | **MotionWorks IEC** | 24 | session, read, verify on; edit **off** | MotionWorks IEC 3 Pro installed; verified against 1.19 |
38
+ | **FactoryTalk Optix** | 6 | on | Optix Studio installed |
39
+
40
+ Tool groups, by product:
41
+
42
+ - **L5X** — 11 read (`open_project` … `compare_projects`), 9 staged drafts (`draft_*`), 6 Logix
43
+ Designer SDK, 7 supervised controller, 2 live EtherNet/IP
44
+ - **FactoryTalk View** — 6 read, 5 staged edits, 3 Studio handoff
45
+ - **MotionWorks IEC** — 7 session, 7 saved-project reads, 3 verify, 7 staged edits
46
+ - **Optix** — 6 tools, unlinked to a skill until one exists
47
+
48
+ ## What the policy changes
49
+
50
+ Each skill governs a product's tools. The capability policy is per-tool, not per-prefix, because the
51
+ rebuilt tools use descriptive names.
52
+
53
+ | Skill | Governs | Tools |
54
+ |---|---|---|
55
+ | `rockwell-l5x` | `l5x_*` **and** the 35 L5X tools by exact name | 35 |
56
+ | `factorytalk-view` | `ftview_*` | 14 |
57
+ | `motionworks-iec` | `mw_*` | 24 |
58
+ | — | `optix_*` | 6 (always visible: no skill yet) |
59
+
60
+ `onDemand` stays `false`. Bounded on-demand discovery was measured against eager exposure and kept
61
+ eager, because discovery cost more turns than the schema characters it saved. The context win comes
62
+ from the per-product switches and from splitting the surfaces into rows.
63
+
64
+ The reference in [docs/reference/tools.md](docs/reference/tools.md) is generated from the registered
65
+ definitions, and `pnpm test` fails when a registered tool is not governed or the committed reference
66
+ drifts.
67
+
68
+ ## Status
69
+
70
+ Where each surface actually stands, based on what has been exercised.
71
+
72
+ **Working and verified**
73
+
74
+ - L5X offline reads, references, usage, checks and comparison against revision 19+ projects
75
+ - Staged L5X editing — nine `draft_*` tools, validation, and one new file on apply
76
+ - Logix Designer SDK: a real ACD exported to a 3.0 MB L5X against SDK v37
77
+ - Supervised controller access — upload, mode change and download behind per-call approval, with
78
+ downloads accepting only a verification id produced by a passed build
79
+ - Live EtherNet/IP reads and a bounded PLC trend
80
+ - FactoryTalk View ME: export reads, structural checks, comparison, staged display and HMI tag edits
81
+ - MotionWorks IEC: verified live against 3 Pro 1.19 — stage, start, worksheet, close, saved-project
82
+ reads, compile diagnostics, code replacement, declaration add, POU create/delete, block insertion
83
+ and a POU package export/delete/import round trip
84
+ - Ladder viewer and FactoryTalk View display preview
85
+
86
+ **Deliberately off by default** — enabled per profile: `l5x-editing`, `l5x-studio`, `l5x-live`,
87
+ `mwi-edit`. A read-only profile should not pay for nine draft schemas or a controller surface.
88
+
89
+ **Known limits** — stated in the bundle, not hidden:
90
+
91
+ - Live reads and SDK builds cannot establish that online logic matches the export; every result says
92
+ so in `coverage`
93
+ - FBD/SFC semantics are not exercised
94
+ - FactoryTalk View Studio work is a **manual handoff**: the bundle plans the import and preflights
95
+ changed files, it does not import
96
+ - Optix has no skill, so its 6 tools cannot be switched off
97
+
98
+ **Not in this repository** — CAD mounts as an independent plugin.
99
+
100
+ ## Milestones
101
+
102
+ | Version | What landed |
103
+ |---|---|
104
+ | **0.4.0** | Both previews fold into the bundle's own client face — one package, one browser bundle, 16 rows |
105
+ | **0.3.0** | FactoryTalk Optix becomes a bundle component; 79 tools total |
106
+ | **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 |
107
+ | **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 |
108
+
109
+ ## Install
110
+
111
+ The bundle carries its components (`vendor/`), its own browser face (both previews) and the
112
+ tool-exposure policy. Installing a component on its own gives you tools **without** the policy.
113
+
114
+ ```sh
115
+ # in the AryaCode profile
116
+ pnpm add @aryacode/dsh-engineering
117
+ ```
118
+
119
+ ```jsonc
120
+ // profile package.json
121
+ "dsh": { "profile": { "bundles": ["@aryacode/dsh-engineering"] } }
122
+ ```
123
+
124
+ Then, in the application, the **Engineering** card lists each row as a component. Per-row enable state
125
+ lives in the profile, so disabling a row survives the next update.
126
+
127
+ For development, clone this repository, `pnpm install`, and link it into a profile bundle list; the
128
+ development home mounts the same rows.
129
+
130
+ ## How it composes
131
+
132
+ The bundle adds one loader layer after the Web app. It patches the existing `tool-capability-policy`
133
+ row and inserts its own rows; it never replaces a product plugin id.
134
+
135
+ ```mermaid
136
+ flowchart TB
137
+ Profile["Profile bundle list"] --> Bundle["@aryacode/dsh-engineering"]
138
+ Bundle -->|"id-targeted config override"| Policy["tool-capability-policy"]
139
+ Bundle -->|insert| L5XRead["l5x-read (on)"]
140
+ L5XRead --> L5XSkill["l5x-read-skill (on)"]
141
+ Bundle -->|insert| L5XEdit["l5x-editing (off)"]
142
+ Bundle -->|insert| L5XStudio["l5x-studio (off)"]
143
+ Bundle -->|insert| L5XLive["l5x-live (off)"]
144
+ Bundle -->|insert| Viewers["viewers (on) — ladder + ME display previews"]
145
+ Bundle -->|insert| FTV["ftview-read / edit / studio (on)"]
146
+ Bundle -->|insert| MWI["mwi-session / read / verify (on), edit (off)"]
147
+ Bundle -->|insert| Optix["optix (on)"]
148
+ Policy -->|"rockwell-l5x governs 35 tools"| L5XRead
149
+ Policy -->|"factorytalk-view governs ftview_*"| FTV
150
+ Policy -->|"motionworks-iec governs mw_*"| MWI
151
+ ```
152
+
153
+ Row ids are stable. Profiles and patches address these ids, so per-row enable state survives upgrades
154
+ even when the implementation behind a row is replaced.
155
+
156
+ | Row id | Package entry | Default |
157
+ |---|---|---|
158
+ | `l5x-read` | `dsh-engineering-l5x` | on |
159
+ | `l5x-read-skill` | `dsh-engineering-l5x/skill` | on |
160
+ | `l5x-editing` | `dsh-engineering-l5x/editing` | off |
161
+ | `l5x-studio` | `dsh-engineering-l5x/studio` | off |
162
+ | `l5x-live` | `dsh-engineering-l5x/live` | off |
163
+ | `viewers` | `@aryacode/dsh-engineering` (its own client face: ladder + ME display previews) | on |
164
+ | `ftview-read` | `dsh-engineering-ftview` | on |
165
+ | `ftview-read-skill` | `dsh-engineering-ftview/skill` | on |
166
+ | `ftview-edit` | `dsh-engineering-ftview/edit` | on |
167
+ | `ftview-studio` | `dsh-engineering-ftview/studio` | on |
168
+ | `mwi-session` | `dsh-engineering-mwi` | on |
169
+ | `mwi-read` | `dsh-engineering-mwi/read` | on |
170
+ | `mwi-read-skill` | `dsh-engineering-mwi/skill` | on |
171
+ | `mwi-verify` | `dsh-engineering-mwi/verify` | on |
172
+ | `mwi-edit` | `dsh-engineering-mwi/edit` | off |
173
+ | `optix` | `@aryacode/dsh-tool-ft-optix` | on |
174
+
175
+ ## Safety
176
+
177
+ - **Read-only by default.** Reading, checks, comparison and the viewers never change a controller.
178
+ - **Edits write new files.** `draft_apply` writes one new L5X beside the source and refuses to
179
+ overwrite; `ftview_apply` writes a new export folder and leaves the source untouched. MotionWorks
180
+ edits write only the staged copy and verify unrelated saved and native state.
181
+ - **Controller changes need a human.** Upload, mode change and download require per-call approval and
182
+ a session policy that permits asking. The tools refuse before contacting a controller when approval
183
+ is unavailable, and a download accepts only a verification id produced by a passed build.
184
+ - **No hidden vendor execution.** The FactoryTalk View Studio handoff returns a manual import plan; it
185
+ does not run a vendor utility.
186
+ - **Coverage is stated.** Every result names what it cannot establish, including whether online logic
187
+ matches the export.
188
+
189
+ ## Requirements
190
+
191
+ | Surface | Needs |
192
+ |---|---|
193
+ | L5X read, references, checks, drafts | Node only; reads `.L5X` revision 19 or later |
194
+ | L5X Studio SDK | Studio 5000 with the Logix Designer SDK service, FactoryTalk Linx, .NET |
195
+ | L5X controller | Reachable controller, FactoryTalk Linx, a matching uploaded ACD |
196
+ | L5X live | A reachable controller over EtherNet/IP; no Studio, Linx or ACD |
197
+ | FactoryTalk View read, edit | Node only; a FactoryTalk View ME export folder |
198
+ | FactoryTalk View Studio | FactoryTalk View Studio ME for discovery and the manual import |
199
+ | MotionWorks IEC | MotionWorks IEC 3 Pro; the 32-bit COM bridge and the Python saved-model engine |
200
+ | Optix | FactoryTalk Optix Studio |
201
+
202
+ ## Documentation
203
+
204
+ | Document | Owns |
205
+ |---|---|
206
+ | [Tool reference](docs/reference/tools.md) | Every tool, parameter and description (generated) |
207
+ | [Examples](docs/examples.md) | End-to-end sessions per product |
208
+ | [Architecture](docs/architecture.md) | Composition, row model, configuration, client faces, packaging |
209
+ | [L5X port](docs/port/l5x.md) | L5X port decisions and measurements |
210
+ | [FTView port](docs/port/ftview.md) | FactoryTalk View port decisions |
211
+ | [MotionWorks IEC port](docs/port/mwi.md) | MWI migration design, phases and inventory |
212
+ | [Packaging](docs/port/packaging.md) | How the bundle is packed and pinned |
213
+ | [Retirement](docs/port/retirement.md) | What "gone" means for a retired plugin |
214
+ | [Changelog](CHANGELOG.md) | Released and unreleased changes |
215
+
216
+ ## Development
217
+
218
+ ```sh
219
+ pnpm install
220
+ pnpm build:client # regenerate lib/client.js from the committed face bundles
221
+ pnpm test # patch, docs, tool-reference, manifest and client-face checks
222
+ pnpm docs:tools # regenerate the tool reference from the registered definitions
223
+ pnpm docs:check # fail if the committed reference has drifted
224
+ ```
225
+
226
+ Tests run through `tsx` so they can read the TypeScript tool factories. A registered tool that no
227
+ skill governs fails the suite — the policy is a test, not a convention.
228
+
229
+ ## Licence
230
+
231
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,123 @@
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
+ # Both previews (the L5X ladder viewer and the FactoryTalk View ME display
94
+ # preview) are this bundle's own client face. A package registers exactly one
95
+ # browser bundle, so one row mounts both; switching the L5X or FTView *tools*
96
+ # off leaves this row alone, because a client face adds no model context.
97
+ - id: viewers
98
+ name: '@aryacode/dsh-engineering'
99
+ # FactoryTalk View ME: read, edit and Studio entries plus the display
100
+ # preview. The old plugin is retired, so these mount by default.
101
+ - id: ftview-read
102
+ name: '@aryacode/dsh-engineering/ftview'
103
+ - id: ftview-read-skill
104
+ name: '@aryacode/dsh-engineering/ftview/skill'
105
+ - id: ftview-edit
106
+ name: '@aryacode/dsh-engineering/ftview/edit'
107
+ - id: ftview-studio
108
+ name: '@aryacode/dsh-engineering/ftview/studio'
109
+ # MotionWorks IEC: the redesigned rows. Editing is off by default, like L5X.
110
+ - id: mwi-session
111
+ name: '@aryacode/dsh-engineering/mwi'
112
+ - id: mwi-read
113
+ name: '@aryacode/dsh-engineering/mwi/read'
114
+ - id: mwi-read-skill
115
+ name: '@aryacode/dsh-engineering/mwi/skill'
116
+ - id: mwi-verify
117
+ name: '@aryacode/dsh-engineering/mwi/verify'
118
+ - id: mwi-edit
119
+ name: '@aryacode/dsh-engineering/mwi/edit'
120
+ disabled: true
121
+ # FactoryTalk Optix stays a separate package, mounted as a component row.
122
+ - id: optix
123
+ name: '@deepseek-ai/dsh-tool-ft-optix'