@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/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ /** Host half of the engineering bundle: registers nothing; the patch and the client face do the work. */
2
+ export declare function apply(): void
package/lib/index.js ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Host half of the engineering bundle.
3
+ *
4
+ * The bundle's work happens in its patch (`cordis.patch.yml`: the tool policy
5
+ * and the product rows) and in its client face (`./client`). This entry exists
6
+ * because a client bundle is discovered through a *mounted* package row, and a
7
+ * row mounts a package root. It registers nothing of its own.
8
+ */
9
+ export function apply() {}
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,97 @@
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.4.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
+ "lib/**/*",
34
+ "locale/*.json",
35
+ "vendor/**/*",
36
+ "README.md",
37
+ "CHANGELOG.md",
38
+ "LICENSE"
39
+ ],
40
+ "dsh": {
41
+ "bundle": {
42
+ "patch": "./cordis.patch.yml"
43
+ },
44
+ "client": {
45
+ "platform": "web",
46
+ "inject": [
47
+ "@deepseek-ai/dsh-client-ui-sidebar-documentpreview",
48
+ "@deepseek-ai/dsh-client-ui-renderer",
49
+ "@deepseek-ai/dsh-api-workspace-files",
50
+ "@deepseek-ai/dsh-api-session-controller",
51
+ "@deepseek-ai/dsh-client-ui-conversation",
52
+ "@deepseek-ai/dsh-client-locale",
53
+ "@deepseek-ai/dsh-client-ui-slots"
54
+ ]
55
+ }
56
+ },
57
+ "dependencies": {
58
+ "@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"
59
+ },
60
+ "peerDependencies": {
61
+ "@deepseek-ai/cordis": "~4.0.4",
62
+ "@deepseek-ai/dsh-tool-skill": "^0.2.0-rc.2"
63
+ },
64
+ "devDependencies": {
65
+ "js-yaml": "^4.1.0",
66
+ "tsx": "^4.23.15"
67
+ },
68
+ "exports": {
69
+ ".": {
70
+ "types": "./lib/index.d.ts",
71
+ "default": "./lib/index.js"
72
+ },
73
+ "./client": "./lib/client.js",
74
+ "./package.json": "./package.json",
75
+ "./l5x": "./vendor/l5x/lib/index.js",
76
+ "./l5x/skill": "./vendor/l5x/lib/skill.js",
77
+ "./l5x/editing": "./vendor/l5x/lib/editing.js",
78
+ "./l5x/live": "./vendor/l5x/lib/live.js",
79
+ "./l5x/studio": "./vendor/l5x/lib/studio.js",
80
+ "./ftview": "./vendor/ftview/lib/index.js",
81
+ "./ftview/skill": "./vendor/ftview/lib/skill.js",
82
+ "./ftview/edit": "./vendor/ftview/lib/edit.js",
83
+ "./ftview/studio": "./vendor/ftview/lib/studio.js",
84
+ "./mwi": "./vendor/mwi/lib/index.js",
85
+ "./mwi/read": "./vendor/mwi/lib/read.js",
86
+ "./mwi/skill": "./vendor/mwi/lib/skill.js",
87
+ "./mwi/verify": "./vendor/mwi/lib/verify.js",
88
+ "./mwi/edit": "./vendor/mwi/lib/edit.js"
89
+ },
90
+ "scripts": {
91
+ "test": "node --import tsx --test test/patch.spec.mjs test/docs.spec.mjs test/tool-reference.spec.mjs test/manifests.spec.mjs test/client-face.spec.mjs",
92
+ "docs:tools": "tsx scripts/gen-tool-reference.ts",
93
+ "docs:check": "tsx scripts/gen-tool-reference.ts --check",
94
+ "build:client": "node scripts/build-client.mjs",
95
+ "assemble": "node scripts/assemble.mjs"
96
+ }
6
97
  }
@@ -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
+ ```
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: factorytalk-view
3
+ description: Design and support FactoryTalk View ME and PanelView Plus applications from documented text exports: displays, HMI tags, structural checks and export comparison.
4
+ whenToUse: Use when the user asks about FactoryTalk View ME, PanelView Plus, ME display exports, HMI tags, or comparing ME exports. Route FactoryTalk View SE and Optix to their own surfaces.
5
+ ---
6
+
7
+ # FactoryTalk View ME engineering
8
+
9
+ ## Boundary
10
+
11
+ This surface reads and stages changes to documented text exports: display XML and the HMI tag CSV.
12
+ A staged edit is written to a NEW export folder; the source is never modified. The Studio entry plans
13
+ a manual import for a human; it does not drive Studio, contact a terminal, or decode MER or MED
14
+ databases.
15
+
16
+ ## Start
17
+
18
+ 1. Call `ftview_open` with the export folder. Keep the returned `view_id`.
19
+ 2. Later calls may omit `view_id` when exactly one export is open.
20
+ 3. Ask only for the exports the task needs: display XML for display work, the tag CSV for tag work,
21
+ L5X only when PLC binding matters.
22
+
23
+ ## Inspect
24
+
25
+ - `ftview_list` enumerates displays or tags, with a name filter and paging.
26
+ - `ftview_get` reads one display (its named objects) or one tag row.
27
+ - `ftview_find` searches displays, object names, object attribute values and tags.
28
+
29
+ ## Check and compare
30
+
31
+ - `ftview_check` reports structural findings: tag CSV integrity, duplicate display/object/tag names,
32
+ and files that did not parse. It is not vendor schema validation and says nothing about PLC
33
+ binding.
34
+ - `ftview_compare` compares two opened exports by display name, tag name and file hash.
35
+
36
+ ## Editing
37
+
38
+ The `ftview-edit` entry stages changes; it may be disabled in this profile. If a draft tool is
39
+ unavailable, say editing is not enabled here rather than trying another tool.
40
+
41
+ - `ftview_draft_display_set` stages one attribute change on a display or one of its named objects.
42
+ - `ftview_draft_display_add` stages a new display by copying an existing display file.
43
+ - `ftview_draft_tag_upsert` stages one HMI tag description/type change or a new tag row.
44
+ - One operation per call. Each returns the draft id and the operation count; nothing is written yet.
45
+ - `ftview_validate` applies the staged edits to a re-parsed copy and reports the changed files.
46
+ - `ftview_apply` writes a NEW export folder. It never modifies the source.
47
+
48
+ After applying, reopen the written folder with `ftview_open` and compare it with the source using
49
+ `ftview_compare`.
50
+
51
+ ## Studio
52
+
53
+ The `ftview-studio` entry plans a manual import; it may be disabled.
54
+
55
+ - `ftview_studio_status` discovers installed ME tooling, schemas and help files.
56
+ - `ftview_studio_preflight` checks the files that differ between two exports for Studio import
57
+ problems, including name restrictions.
58
+ - `ftview_studio_handoff` returns the ordered manual import plan for a human in FactoryTalk View
59
+ Studio. No vendor utility runs and no file is written.
60
+
61
+ ## Reporting
62
+
63
+ - Every result carries `summary`, `data`, `next` and `coverage`. Read `coverage` before claiming
64
+ completeness.
65
+ - State what the export cannot prove: XSD validity, PLC binding, runtime behavior, visual rendering,
66
+ and anything absent from the supplied export.
67
+ - Quote the display file and object name for a finding.
68
+ - Do not call a tag unused from the absence of references in displays; other consumers are invisible
69
+ here.
70
+
71
+ ## Out of scope
72
+
73
+ FactoryTalk View SE and FactoryTalk Optix are different products and are not analyzed here. MER/MED
74
+ databases are not decoded, and no tool contacts a PanelView terminal or changes runtime data.
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Structural checks shared by the read and editing entries.
3
+ *
4
+ * @module dsh-engineering-ftview/checks
5
+ */
6
+ import type { DisplayFile, TagRow } from './model.ts';
7
+ /** One finding the check reports. */
8
+ export interface Finding {
9
+ readonly rule: string;
10
+ readonly severity: 'error' | 'warning' | 'info';
11
+ readonly message: string;
12
+ readonly evidence: unknown;
13
+ }
14
+ /** The application parts the checks read. */
15
+ export interface Checkable {
16
+ readonly displays: readonly DisplayFile[];
17
+ readonly tags: readonly TagRow[];
18
+ readonly tagErrors: readonly string[];
19
+ readonly diagnostics: readonly string[];
20
+ }
21
+ /**
22
+ * Run the structural checks.
23
+ *
24
+ * @param app - Displays, tags and the diagnostics from scanning.
25
+ * @returns Findings in rule order.
26
+ */
27
+ export declare function findingsOf(app: Checkable): Finding[];
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Structural checks shared by the read and editing entries.
3
+ *
4
+ * @module dsh-engineering-ftview/checks
5
+ */
6
+ /**
7
+ * Run the structural checks.
8
+ *
9
+ * @param app - Displays, tags and the diagnostics from scanning.
10
+ * @returns Findings in rule order.
11
+ */
12
+ export function findingsOf(app) {
13
+ const findings = [];
14
+ for (const error of app.tagErrors)
15
+ findings.push({ rule: 'TAG_CSV', severity: 'warning', message: error, evidence: { file: 'tag CSV' } });
16
+ for (const diagnostic of app.diagnostics)
17
+ findings.push({ rule: 'UNPARSED_FILE', severity: 'warning', message: diagnostic, evidence: { file: diagnostic.split(':')[0] } });
18
+ const displayNames = new Set();
19
+ for (const display of app.displays) {
20
+ if (displayNames.has(display.name))
21
+ findings.push({ rule: 'DUPLICATE_DISPLAY_NAME', severity: 'warning', message: `Two displays are named ${JSON.stringify(display.name)}.`, evidence: { display: display.name, file: display.file } });
22
+ displayNames.add(display.name);
23
+ const objectNames = new Set();
24
+ for (const object of display.objects) {
25
+ if (object.name === undefined)
26
+ continue;
27
+ if (objectNames.has(object.name))
28
+ findings.push({ rule: 'DUPLICATE_OBJECT_NAME', severity: 'warning', message: `Display ${JSON.stringify(display.name)} has more than one object named ${JSON.stringify(object.name)}.`, evidence: { display: display.name, object: object.name } });
29
+ objectNames.add(object.name);
30
+ }
31
+ }
32
+ const tagNames = new Set();
33
+ for (const tag of app.tags) {
34
+ if (tagNames.has(tag.name))
35
+ findings.push({ rule: 'DUPLICATE_TAG_NAME', severity: 'error', message: `The tag CSV declares ${JSON.stringify(tag.name)} more than once.`, evidence: { tag: tag.name } });
36
+ tagNames.add(tag.name);
37
+ }
38
+ return findings;
39
+ }
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Shared result, error and parameter conventions for the engineering bundle.
3
+ *
4
+ * Every tool answers with `summary`, `data`, `next` and `coverage`, and every
5
+ * parameter is described at the point of declaration. Failures carry a stable
6
+ * code, a message in the reader's terms, and the fix that unblocks the caller.
7
+ *
8
+ * @module dsh-engineering-ftview/core
9
+ */
10
+ /** How completely an answer covers the request. */
11
+ export interface Coverage {
12
+ readonly complete: boolean;
13
+ readonly unverified: readonly string[];
14
+ }
15
+ /** One suggested follow-up call. */
16
+ export interface NextStep {
17
+ readonly tool: string;
18
+ readonly args?: Readonly<Record<string, unknown>>;
19
+ readonly why: string;
20
+ }
21
+ /** The success document every tool returns. */
22
+ export interface Success {
23
+ readonly summary: string;
24
+ readonly data: unknown;
25
+ readonly next: readonly NextStep[];
26
+ readonly coverage: Coverage;
27
+ }
28
+ /** A failure the caller can usually repair. */
29
+ export declare class EngineeringError extends Error {
30
+ readonly code: string;
31
+ readonly fix: string;
32
+ readonly candidates: readonly string[];
33
+ /**
34
+ * @param code - Stable identifier for tests and logs.
35
+ * @param message - What failed, in the reader's terms.
36
+ * @param fix - The next call or check.
37
+ * @param candidates - Known names the caller probably meant.
38
+ */
39
+ constructor(code: string, message: string, fix: string, candidates?: readonly string[]);
40
+ }
41
+ /**
42
+ * Convert any thrown value into the error envelope.
43
+ *
44
+ * @param error - The thrown value.
45
+ * @returns The envelope the tool registry reports.
46
+ */
47
+ export declare function errorEnvelope(error: unknown): {
48
+ error: {
49
+ code: string;
50
+ message: string;
51
+ fix: string;
52
+ candidates: readonly string[];
53
+ };
54
+ };
55
+ /** Build one success document. */
56
+ export declare function success(summary: string, data: unknown, next: readonly NextStep[], coverage: Coverage): Success;
57
+ /** One JSON Schema property, always described. */
58
+ export interface ParameterSchema {
59
+ readonly type: 'string' | 'integer' | 'number' | 'boolean' | 'array' | 'object';
60
+ readonly description: string;
61
+ readonly enum?: readonly string[];
62
+ readonly items?: ParameterSchema;
63
+ readonly default?: unknown;
64
+ readonly minimum?: number;
65
+ readonly maximum?: number;
66
+ readonly minItems?: number;
67
+ readonly maxItems?: number;
68
+ readonly properties?: Readonly<Record<string, ParameterSchema>>;
69
+ readonly required?: readonly string[];
70
+ readonly additionalProperties?: boolean;
71
+ }
72
+ /** A described string parameter. */
73
+ export declare function string(description: string, extra?: Partial<ParameterSchema>): ParameterSchema;
74
+ /** A described integer parameter with an optional range. */
75
+ export declare function integer(description: string, extra?: Partial<ParameterSchema>): ParameterSchema;
76
+ /** A described enum parameter. */
77
+ export declare function choice(description: string, values: readonly string[], extra?: Partial<ParameterSchema>): ParameterSchema;
78
+ /** One object element of an array parameter. */
79
+ export declare function objectItem(description: string, properties: Readonly<Record<string, ParameterSchema>>, required?: readonly string[]): ParameterSchema;
80
+ /** An array of one parameter type. */
81
+ export declare function list(description: string, items: ParameterSchema, extra?: Partial<ParameterSchema>): ParameterSchema;
82
+ /** The `parameters` object of one tool. */
83
+ export interface Parameters {
84
+ readonly type: 'object';
85
+ readonly properties: Readonly<Record<string, ParameterSchema>>;
86
+ readonly required: readonly string[];
87
+ readonly additionalProperties: false;
88
+ }
89
+ /**
90
+ * Build a parameter object.
91
+ *
92
+ * @param properties - Named parameters, each already described.
93
+ * @param required - Names the caller must supply.
94
+ * @returns The schema a tool definition declares.
95
+ */
96
+ export declare function object(properties: Readonly<Record<string, ParameterSchema>>, required?: readonly string[]): Parameters;
97
+ /** One directory entry the filesystem provider reports. */
98
+ export interface DirEntry {
99
+ readonly name: string;
100
+ readonly type: string;
101
+ }
102
+ /** The filesystem operations this package uses. */
103
+ export interface FsService {
104
+ resolve(path: string, options?: {
105
+ readonly signal?: AbortSignal;
106
+ readonly cwd?: string;
107
+ }): Promise<string>;
108
+ stat(path: string, signal?: AbortSignal): Promise<{
109
+ readonly type: string;
110
+ } | undefined>;
111
+ readBytes(path: string, signal: AbortSignal | undefined, maxBytes?: number): Promise<Uint8Array>;
112
+ listDir?(path: string, signal?: AbortSignal): Promise<readonly DirEntry[]>;
113
+ writeText?(path: string, text: string, options?: {
114
+ readonly kind?: 'createIfAbsent' | 'overwrite';
115
+ }, signal?: AbortSignal): Promise<void>;
116
+ }
117
+ /** A path resolved by the harness filesystem into its backend identity. */
118
+ export interface FsTarget {
119
+ /** Opaque key for stale guards and target lookup. */
120
+ readonly targetKey: unknown;
121
+ /** Path for model- and UI-facing output. */
122
+ readonly displayPath: string;
123
+ }
124
+ /** The harness filesystem as it is actually provided: operations take resolved targets. */
125
+ export interface RawFsService {
126
+ resolve(path: string, options?: {
127
+ readonly signal?: AbortSignal;
128
+ readonly cwd?: string;
129
+ }): Promise<FsTarget | string>;
130
+ stat(target: FsTarget | string, signal?: AbortSignal): Promise<{
131
+ readonly type: string;
132
+ } | undefined>;
133
+ readBytes(target: FsTarget | string, signal: AbortSignal | undefined, maxBytes?: number): Promise<Uint8Array>;
134
+ listDir?(target: FsTarget | string, signal?: AbortSignal): Promise<readonly DirEntry[]>;
135
+ writeText?(target: FsTarget | string, text: string, options?: {
136
+ readonly kind?: 'createIfAbsent' | 'overwrite';
137
+ }, signal?: AbortSignal): Promise<void>;
138
+ }
139
+ /**
140
+ * Present the harness filesystem with string paths.
141
+ *
142
+ * The model, edits and discovery compose paths (`${root}/${file}`); the harness
143
+ * service takes opaque targets. This adapter resolves each path before calling
144
+ * the service and returns display strings, so path composition stays readable.
145
+ * A provider that already returns strings, such as a test double, passes through.
146
+ *
147
+ * @param service - The harness filesystem service.
148
+ * @returns The same operations addressed by path strings.
149
+ */
150
+ export declare function stringFs(service: RawFsService): FsService;
151
+ /** The tool registry the plugin registers into. */
152
+ export interface ToolRegistry {
153
+ register(definition: ToolDefinition): void;
154
+ }
155
+ /** The services a composition must provide before this plugin loads. */
156
+ export interface PluginContext {
157
+ readonly tools: ToolRegistry;
158
+ readonly fs: RawFsService;
159
+ provide?(name: string, value: unknown): void;
160
+ get?(name: string): unknown;
161
+ }
162
+ /** The context a tool body receives. */
163
+ export interface ExecContext {
164
+ readonly signal?: AbortSignal;
165
+ readonly cwd?: string;
166
+ readonly chat?: object;
167
+ }
168
+ /** One text block the transcript renders. */
169
+ export interface TextBlock {
170
+ readonly type: 'text';
171
+ readonly text: string;
172
+ }
173
+ /** The output declaration every registered tool carries. */
174
+ export interface ToolOutput {
175
+ readonly schema: {
176
+ readonly type: 'object';
177
+ readonly additionalProperties: boolean;
178
+ };
179
+ render(args: unknown, value: unknown): readonly TextBlock[];
180
+ }
181
+ /** One registered tool. */
182
+ export interface ToolDefinition {
183
+ readonly name: string;
184
+ readonly description: string;
185
+ readonly parameters: Parameters;
186
+ readonly output: ToolOutput;
187
+ execute(args: Readonly<Record<string, unknown>>, exec: ExecContext): Promise<unknown>;
188
+ }
189
+ /** One tool body before the shared envelope and error handling are attached. */
190
+ export interface ToolSpec {
191
+ readonly name: string;
192
+ readonly description: string;
193
+ readonly parameters: Parameters;
194
+ run(args: Readonly<Record<string, unknown>>, exec: ExecContext): Promise<unknown>;
195
+ }
196
+ /**
197
+ * Wrap one tool body in the shared envelope and error handling.
198
+ *
199
+ * @param spec - Tool identity and body.
200
+ * @returns The definition the registry accepts.
201
+ */
202
+ export declare function tool(spec: ToolSpec): ToolDefinition;
203
+ /** A required string argument. */
204
+ export declare function requiredString(args: Readonly<Record<string, unknown>>, name: string): string;
205
+ /** An optional string argument. */
206
+ export declare function optionalString(args: Readonly<Record<string, unknown>>, name: string): string | undefined;
207
+ /** An optional integer argument. */
208
+ export declare function optionalInteger(args: Readonly<Record<string, unknown>>, name: string): number | undefined;