procesio-cli 0.1.1__py3-none-any.whl

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 (647) hide show
  1. procesio_cli/__init__.py +18 -0
  2. procesio_cli/_cli.py +71 -0
  3. procesio_cli/agents/__init__.py +0 -0
  4. procesio_cli/agents/_lib/__init__.py +0 -0
  5. procesio_cli/agents/_lib/actiondef.py +24 -0
  6. procesio_cli/agents/_lib/errors.py +40 -0
  7. procesio_cli/agents/_lib/reversibility.py +236 -0
  8. procesio_cli/agents/_lib/toolrunner.py +141 -0
  9. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
  10. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
  11. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
  12. procesio_cli/agents/connector-builder/README.md +51 -0
  13. procesio_cli/agents/connector-builder/agent.yaml +61 -0
  14. procesio_cli/agents/connector-builder/context.py +19 -0
  15. procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
  16. procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
  17. procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
  18. procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
  19. procesio_cli/agents/connector-builder/handlers/status.py +35 -0
  20. procesio_cli/agents/connector-builder/knowledge.py +47 -0
  21. procesio_cli/agents/connector-builder/main.py +93 -0
  22. procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
  23. procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
  24. procesio_cli/agents/orchestrator/__init__.py +0 -0
  25. procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
  26. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
  27. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
  28. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
  29. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
  30. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
  31. procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
  32. procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
  33. procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
  34. procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
  35. procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
  36. procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
  37. procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
  38. procesio_cli/agents/procesio/README.md +97 -0
  39. procesio_cli/agents/procesio/__init__.py +0 -0
  40. procesio_cli/agents/procesio/agent.yaml +73 -0
  41. procesio_cli/agents/procesio/audit.py +226 -0
  42. procesio_cli/agents/procesio/checklist.py +135 -0
  43. procesio_cli/agents/procesio/context.py +19 -0
  44. procesio_cli/agents/procesio/handlers/__init__.py +0 -0
  45. procesio_cli/agents/procesio/handlers/audit.py +39 -0
  46. procesio_cli/agents/procesio/handlers/checklist.py +34 -0
  47. procesio_cli/agents/procesio/handlers/guidance.py +36 -0
  48. procesio_cli/agents/procesio/handlers/status.py +33 -0
  49. procesio_cli/agents/procesio/handlers/verify.py +39 -0
  50. procesio_cli/agents/procesio/knowledge.py +115 -0
  51. procesio_cli/agents/procesio/main.py +89 -0
  52. procesio_cli/agents/procesio/tests/__init__.py +0 -0
  53. procesio_cli/agents/procesio/tests/conftest.py +62 -0
  54. procesio_cli/agents/procesio/tests/test_audit.py +91 -0
  55. procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
  56. procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
  57. procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
  58. procesio_cli/agents/procesio/tests/test_verify.py +134 -0
  59. procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
  60. procesio_cli/agents/procesio/verifylib.py +222 -0
  61. procesio_cli/dashboard/README.md +117 -0
  62. procesio_cli/dashboard/__init__.py +18 -0
  63. procesio_cli/dashboard/serve.py +98 -0
  64. procesio_cli/dashboard/server/__init__.py +1 -0
  65. procesio_cli/dashboard/server/config_schemas.py +92 -0
  66. procesio_cli/dashboard/server/google.py +103 -0
  67. procesio_cli/dashboard/server/handler.py +160 -0
  68. procesio_cli/dashboard/server/inventory.py +213 -0
  69. procesio_cli/dashboard/server/jobs.py +118 -0
  70. procesio_cli/dashboard/server/llmtest.py +181 -0
  71. procesio_cli/dashboard/server/procesio_env.py +94 -0
  72. procesio_cli/dashboard/server/routes.py +74 -0
  73. procesio_cli/dashboard/server/runner.py +150 -0
  74. procesio_cli/dashboard/server/security.py +29 -0
  75. procesio_cli/dashboard/server/setup.py +211 -0
  76. procesio_cli/dashboard/server/validate.py +152 -0
  77. procesio_cli/dashboard/tests/conftest.py +16 -0
  78. procesio_cli/dashboard/tests/test_dashboard.py +225 -0
  79. procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
  80. procesio_cli/dashboard/web/actions.js +274 -0
  81. procesio_cli/dashboard/web/api.js +79 -0
  82. procesio_cli/dashboard/web/app.js +385 -0
  83. procesio_cli/dashboard/web/copilot.js +72 -0
  84. procesio_cli/dashboard/web/google.js +121 -0
  85. procesio_cli/dashboard/web/index.html +67 -0
  86. procesio_cli/dashboard/web/procesio_env.js +187 -0
  87. procesio_cli/dashboard/web/styles.css +207 -0
  88. procesio_cli/registry.py +370 -0
  89. procesio_cli/scripts/build-router.py +249 -0
  90. procesio_cli/scripts/build-tool-skill.py +202 -0
  91. procesio_cli/scripts/check-requirements.py +131 -0
  92. procesio_cli/scripts/check-skill-governance.py +174 -0
  93. procesio_cli/scripts/evaluate-skill-routing.py +217 -0
  94. procesio_cli/scripts/evaluate-skills.py +316 -0
  95. procesio_cli/scripts/get-skill.py +122 -0
  96. procesio_cli/scripts/list-skills.py +68 -0
  97. procesio_cli/scripts/list-tools.py +73 -0
  98. procesio_cli/scripts/run-agent.py +59 -0
  99. procesio_cli/scripts/run-tool.py +123 -0
  100. procesio_cli/scripts/secret_scan.py +584 -0
  101. procesio_cli/scripts/set-credential.py +126 -0
  102. procesio_cli/scripts/validate-skills.py +530 -0
  103. procesio_cli/skills/PORTFOLIO.md +134 -0
  104. procesio_cli/skills/__init__.py +6 -0
  105. procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
  106. procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
  107. procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
  108. procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
  109. procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
  110. procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
  111. procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
  112. procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
  113. procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
  114. procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
  115. procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
  116. procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
  117. procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
  118. procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
  119. procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
  120. procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
  121. procesio_cli/skills/evals/baseline-catalog.json +14 -0
  122. procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
  123. procesio_cli/skills/evals/baseline.json +37 -0
  124. procesio_cli/skills/evals/behavioral.json +367 -0
  125. procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
  126. procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
  127. procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
  128. procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
  129. procesio_cli/skills/evals/routing.json +363 -0
  130. procesio_cli/skills/evals/validation-baseline.json +4 -0
  131. procesio_cli/skills/procesio-cli/SKILL.md +134 -0
  132. procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
  133. procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
  134. procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
  135. procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
  136. procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
  137. procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
  138. procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
  139. procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
  140. procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
  141. procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
  142. procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
  143. procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
  144. procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
  145. procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
  146. procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
  147. procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
  148. procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
  149. procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
  150. procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
  151. procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
  152. procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
  153. procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
  154. procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
  155. procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
  156. procesio_cli/skills/procesio-setup/SKILL.md +180 -0
  157. procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
  158. procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
  159. procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
  160. procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
  161. procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
  162. procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
  163. procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
  164. procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
  165. procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
  166. procesio_cli/skills/tests/__init__.py +0 -0
  167. procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
  168. procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
  169. procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
  170. procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
  171. procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
  172. procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
  173. procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
  174. procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
  175. procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
  176. procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
  177. procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
  178. procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
  179. procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
  180. procesio_cli/skills/tests/test_skill_routing.py +74 -0
  181. procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
  182. procesio_cli/skills/tests/test_validate_skills.py +115 -0
  183. procesio_cli/tools/__init__.py +0 -0
  184. procesio_cli/tools/_lib/README.md +119 -0
  185. procesio_cli/tools/_lib/__init__.py +0 -0
  186. procesio_cli/tools/_lib/accounting.py +120 -0
  187. procesio_cli/tools/_lib/contacts.py +544 -0
  188. procesio_cli/tools/_lib/creds.py +83 -0
  189. procesio_cli/tools/_lib/creds_backends.py +578 -0
  190. procesio_cli/tools/_lib/dbprofiles.py +147 -0
  191. procesio_cli/tools/_lib/dbquery.py +286 -0
  192. procesio_cli/tools/_lib/dbschema.py +225 -0
  193. procesio_cli/tools/_lib/io.py +54 -0
  194. procesio_cli/tools/_lib/manifest.py +297 -0
  195. procesio_cli/tools/_lib/skill_release.py +127 -0
  196. procesio_cli/tools/_lib/skill_resources.py +118 -0
  197. procesio_cli/tools/_lib/userdata.py +228 -0
  198. procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
  199. procesio_cli/tools/_lib/webserialize/admin.py +61 -0
  200. procesio_cli/tools/_lib/webserialize/client.py +264 -0
  201. procesio_cli/tools/_lib/webserialize/config.py +96 -0
  202. procesio_cli/tools/_lib/webserialize/errors.py +27 -0
  203. procesio_cli/tools/_lib/webserialize/framing.py +45 -0
  204. procesio_cli/tools/_lib/webserialize/registry.py +47 -0
  205. procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
  206. procesio_cli/tools/_lib/webserialize/server.py +510 -0
  207. procesio_cli/tools/_lib/websession.py +194 -0
  208. procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
  209. procesio_cli/tools/connector-builder/README.md +101 -0
  210. procesio_cli/tools/connector-builder/SKILL.md +248 -0
  211. procesio_cli/tools/connector-builder/__init__.py +7 -0
  212. procesio_cli/tools/connector-builder/actiondef.py +24 -0
  213. procesio_cli/tools/connector-builder/client.py +251 -0
  214. procesio_cli/tools/connector-builder/errors.py +44 -0
  215. procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
  216. procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
  217. procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
  218. procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
  219. procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
  220. procesio_cli/tools/connector-builder/handlers/common.py +104 -0
  221. procesio_cli/tools/connector-builder/handlers/files.py +111 -0
  222. procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
  223. procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
  224. procesio_cli/tools/connector-builder/main.py +94 -0
  225. procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
  226. procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
  227. procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
  228. procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
  229. procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
  230. procesio_cli/tools/connector-builder/tool.yaml +671 -0
  231. procesio_cli/tools/framework-map/.gitattributes +2 -0
  232. procesio_cli/tools/framework-map/README.md +98 -0
  233. procesio_cli/tools/framework-map/SKILL.md +30 -0
  234. procesio_cli/tools/framework-map/app.js +188 -0
  235. procesio_cli/tools/framework-map/fm_builder.py +476 -0
  236. procesio_cli/tools/framework-map/fm_catalog.py +19 -0
  237. procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
  238. procesio_cli/tools/framework-map/fm_strings.py +101 -0
  239. procesio_cli/tools/framework-map/main.py +95 -0
  240. procesio_cli/tools/framework-map/styles.css +214 -0
  241. procesio_cli/tools/framework-map/tests/conftest.py +33 -0
  242. procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
  243. procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
  244. procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
  245. procesio_cli/tools/framework-map/tool.yaml +61 -0
  246. procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
  247. procesio_cli/tools/mysql/README.md +196 -0
  248. procesio_cli/tools/mysql/SKILL.md +37 -0
  249. procesio_cli/tools/mysql/__init__.py +0 -0
  250. procesio_cli/tools/mysql/connection.py +191 -0
  251. procesio_cli/tools/mysql/main.py +487 -0
  252. procesio_cli/tools/mysql/profiles.template.json +1 -0
  253. procesio_cli/tools/mysql/schema.py +434 -0
  254. procesio_cli/tools/mysql/tests/__init__.py +0 -0
  255. procesio_cli/tools/mysql/tests/conftest.py +21 -0
  256. procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
  257. procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
  258. procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
  259. procesio_cli/tools/mysql/tool.yaml +112 -0
  260. procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
  261. procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
  262. procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
  263. procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
  264. procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
  265. procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
  266. procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
  267. procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
  268. procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
  269. procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
  270. procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
  271. procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
  272. procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
  273. procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
  274. procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
  275. procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
  276. procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
  277. procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
  278. procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
  279. procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
  280. procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
  281. procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
  282. procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
  283. procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
  284. procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
  285. procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
  286. procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
  287. procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
  288. procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
  289. procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
  290. procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
  291. procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
  292. procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
  293. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
  294. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
  295. procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
  296. procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
  297. procesio_cli/tools/procesio/README.md +341 -0
  298. procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
  299. procesio_cli/tools/procesio/SKILL.md +694 -0
  300. procesio_cli/tools/procesio/__init__.py +1 -0
  301. procesio_cli/tools/procesio/actiondef.py +27 -0
  302. procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
  303. procesio_cli/tools/procesio/auth.py +354 -0
  304. procesio_cli/tools/procesio/autogen.py +121 -0
  305. procesio_cli/tools/procesio/client.py +355 -0
  306. procesio_cli/tools/procesio/config.py +96 -0
  307. procesio_cli/tools/procesio/data/endpoints.json +2901 -0
  308. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
  309. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
  310. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
  311. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
  312. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
  313. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
  314. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
  315. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
  316. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
  317. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
  318. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
  319. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
  320. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
  321. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
  322. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
  323. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
  324. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
  325. procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
  326. procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
  327. procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
  328. procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
  329. procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
  330. procesio_cli/tools/procesio/dto/__init__.py +13 -0
  331. procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
  332. procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
  333. procesio_cli/tools/procesio/dto/credential/description.md +193 -0
  334. procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
  335. procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
  336. procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
  337. procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
  338. procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
  339. procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
  340. procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
  341. procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
  342. procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
  343. procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
  344. procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
  345. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
  346. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
  347. procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
  348. procesio_cli/tools/procesio/dto/document/builder.py +193 -0
  349. procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
  350. procesio_cli/tools/procesio/dto/document/description.md +124 -0
  351. procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
  352. procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
  353. procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
  354. procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
  355. procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
  356. procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
  357. procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
  358. procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
  359. procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
  360. procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
  361. procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
  362. procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
  363. procesio_cli/tools/procesio/dto/form/description.md +346 -0
  364. procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
  365. procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
  366. procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
  367. procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
  368. procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
  369. procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
  370. procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
  371. procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
  372. procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
  373. procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
  374. procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
  375. procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
  376. procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
  377. procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
  378. procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
  379. procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
  380. procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
  381. procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
  382. procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
  383. procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
  384. procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
  385. procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
  386. procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
  387. procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
  388. procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
  389. procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
  390. procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
  391. procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
  392. procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
  393. procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
  394. procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
  395. procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
  396. procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
  397. procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
  398. procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
  399. procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
  400. procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
  401. procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
  402. procesio_cli/tools/procesio/dto/framework.py +125 -0
  403. procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
  404. procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
  405. procesio_cli/tools/procesio/dto/process/description.md +218 -0
  406. procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
  407. procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
  408. procesio_cli/tools/procesio/dto/process/naming.py +305 -0
  409. procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
  410. procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
  411. procesio_cli/tools/procesio/dto/refdata.py +87 -0
  412. procesio_cli/tools/procesio/dto/registry.py +27 -0
  413. procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
  414. procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
  415. procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
  416. procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
  417. procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
  418. procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
  419. procesio_cli/tools/procesio/environments.py +264 -0
  420. procesio_cli/tools/procesio/errors.py +166 -0
  421. procesio_cli/tools/procesio/flowmodel/README.md +37 -0
  422. procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
  423. procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
  424. procesio_cli/tools/procesio/flowmodel/families.py +34 -0
  425. procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
  426. procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
  427. procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
  428. procesio_cli/tools/procesio/flowmodel/model.py +82 -0
  429. procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
  430. procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
  431. procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
  432. procesio_cli/tools/procesio/form_code_keys.py +50 -0
  433. procesio_cli/tools/procesio/formlint.py +292 -0
  434. procesio_cli/tools/procesio/gen_manifest.py +118 -0
  435. procesio_cli/tools/procesio/handlers/__init__.py +1 -0
  436. procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
  437. procesio_cli/tools/procesio/handlers/catalog.py +147 -0
  438. procesio_cli/tools/procesio/handlers/common.py +90 -0
  439. procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
  440. procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
  441. procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
  442. procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
  443. procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
  444. procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
  445. procesio_cli/tools/procesio/handlers/files.py +141 -0
  446. procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
  447. procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
  448. procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
  449. procesio_cli/tools/procesio/handlers/form_code.py +277 -0
  450. procesio_cli/tools/procesio/handlers/form_element.py +199 -0
  451. procesio_cli/tools/procesio/handlers/form_events.py +441 -0
  452. procesio_cli/tools/procesio/handlers/form_update.py +270 -0
  453. procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
  454. procesio_cli/tools/procesio/handlers/generic.py +135 -0
  455. procesio_cli/tools/procesio/handlers/layout.py +137 -0
  456. procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
  457. procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
  458. procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
  459. procesio_cli/tools/procesio/handlers/processes.py +416 -0
  460. procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
  461. procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
  462. procesio_cli/tools/procesio/handlers/schedules.py +320 -0
  463. procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
  464. procesio_cli/tools/procesio/handlers/transport.py +463 -0
  465. procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
  466. procesio_cli/tools/procesio/layout/README.md +196 -0
  467. procesio_cli/tools/procesio/layout/__init__.py +11 -0
  468. procesio_cli/tools/procesio/layout/adapter.py +736 -0
  469. procesio_cli/tools/procesio/layout/cycles.py +186 -0
  470. procesio_cli/tools/procesio/layout/dispatch.py +39 -0
  471. procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
  472. procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
  473. procesio_cli/tools/procesio/layout/elk/package.json +11 -0
  474. procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
  475. procesio_cli/tools/procesio/layout/engine.py +1311 -0
  476. procesio_cli/tools/procesio/layout/report.py +187 -0
  477. procesio_cli/tools/procesio/main.py +179 -0
  478. procesio_cli/tools/procesio/profiles.py +193 -0
  479. procesio_cli/tools/procesio/reliability.py +193 -0
  480. procesio_cli/tools/procesio/sqlformat.py +167 -0
  481. procesio_cli/tools/procesio/swagger.py +51 -0
  482. procesio_cli/tools/procesio/tests/__init__.py +0 -0
  483. procesio_cli/tools/procesio/tests/conftest.py +129 -0
  484. procesio_cli/tools/procesio/tests/test_auth.py +200 -0
  485. procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
  486. procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
  487. procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
  488. procesio_cli/tools/procesio/tests/test_client.py +114 -0
  489. procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
  490. procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
  491. procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
  492. procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
  493. procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
  494. procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
  495. procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
  496. procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
  497. procesio_cli/tools/procesio/tests/test_dto.py +734 -0
  498. procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
  499. procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
  500. procesio_cli/tools/procesio/tests/test_environments.py +214 -0
  501. procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
  502. procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
  503. procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
  504. procesio_cli/tools/procesio/tests/test_files.py +72 -0
  505. procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
  506. procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
  507. procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
  508. procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
  509. procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
  510. procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
  511. procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
  512. procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
  513. procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
  514. procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
  515. procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
  516. procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
  517. procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
  518. procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
  519. procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
  520. procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
  521. procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
  522. procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
  523. procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
  524. procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
  525. procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
  526. procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
  527. procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
  528. procesio_cli/tools/procesio/tests/test_guards.py +110 -0
  529. procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
  530. procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
  531. procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
  532. procesio_cli/tools/procesio/tests/test_layout.py +574 -0
  533. procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
  534. procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
  535. procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
  536. procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
  537. procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
  538. procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
  539. procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
  540. procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
  541. procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
  542. procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
  543. procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
  544. procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
  545. procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
  546. procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
  547. procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
  548. procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
  549. procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
  550. procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
  551. procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
  552. procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
  553. procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
  554. procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
  555. procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
  556. procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
  557. procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
  558. procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
  559. procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
  560. procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
  561. procesio_cli/tools/procesio/tests/test_transport.py +147 -0
  562. procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
  563. procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
  564. procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
  565. procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
  566. procesio_cli/tools/procesio/tool.yaml +12486 -0
  567. procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
  568. procesio_cli/tools/sqlserver/README.md +192 -0
  569. procesio_cli/tools/sqlserver/SKILL.md +37 -0
  570. procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
  571. procesio_cli/tools/sqlserver/__init__.py +0 -0
  572. procesio_cli/tools/sqlserver/connection.py +242 -0
  573. procesio_cli/tools/sqlserver/main.py +521 -0
  574. procesio_cli/tools/sqlserver/profiles.template.json +1 -0
  575. procesio_cli/tools/sqlserver/schema.py +600 -0
  576. procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
  577. procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
  578. procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
  579. procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
  580. procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
  581. procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
  582. procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
  583. procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
  584. procesio_cli/tools/sqlserver/tool.yaml +123 -0
  585. procesio_cli/tools/web/README.md +381 -0
  586. procesio_cli/tools/web/SKILL.md +37 -0
  587. procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
  588. procesio_cli/tools/web/__init__.py +21 -0
  589. procesio_cli/tools/web/actiondef.py +24 -0
  590. procesio_cli/tools/web/api.py +444 -0
  591. procesio_cli/tools/web/brokered.py +107 -0
  592. procesio_cli/tools/web/driver.py +839 -0
  593. procesio_cli/tools/web/drivercontract.py +44 -0
  594. procesio_cli/tools/web/errors.py +54 -0
  595. procesio_cli/tools/web/handlers/__init__.py +1 -0
  596. procesio_cli/tools/web/handlers/archive.py +367 -0
  597. procesio_cli/tools/web/handlers/browse.py +182 -0
  598. procesio_cli/tools/web/handlers/contacts.py +74 -0
  599. procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
  600. procesio_cli/tools/web/main.py +128 -0
  601. procesio_cli/tools/web/sessions.py +253 -0
  602. procesio_cli/tools/web/steps.py +162 -0
  603. procesio_cli/tools/web/tests/__init__.py +0 -0
  604. procesio_cli/tools/web/tests/conftest.py +197 -0
  605. procesio_cli/tools/web/tests/test_api.py +330 -0
  606. procesio_cli/tools/web/tests/test_archive.py +190 -0
  607. procesio_cli/tools/web/tests/test_brokered.py +138 -0
  608. procesio_cli/tools/web/tests/test_dispatch.py +132 -0
  609. procesio_cli/tools/web/tests/test_errors.py +60 -0
  610. procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
  611. procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
  612. procesio_cli/tools/web/tests/test_sessions.py +145 -0
  613. procesio_cli/tools/web/tests/test_steps.py +210 -0
  614. procesio_cli/tools/web/tool.yaml +184 -0
  615. procesio_cli/tools/xlsx/README.md +34 -0
  616. procesio_cli/tools/xlsx/SKILL.md +28 -0
  617. procesio_cli/tools/xlsx/__init__.py +0 -0
  618. procesio_cli/tools/xlsx/main.py +129 -0
  619. procesio_cli/tools/xlsx/reader.py +91 -0
  620. procesio_cli/tools/xlsx/tests/__init__.py +0 -0
  621. procesio_cli/tools/xlsx/tests/conftest.py +39 -0
  622. procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
  623. procesio_cli/tools/xlsx/tool.yaml +30 -0
  624. procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
  625. procesio_cli/webplatform/aat_mcp/README.md +78 -0
  626. procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
  627. procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
  628. procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
  629. procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
  630. procesio_cli/webplatform/aat_mcp/gate.py +68 -0
  631. procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
  632. procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
  633. procesio_cli/webplatform/aat_mcp/server.py +306 -0
  634. procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
  635. procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
  636. procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
  637. procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
  638. procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
  639. procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
  640. procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
  641. procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
  642. procesio_cli-0.1.1.dist-info/METADATA +467 -0
  643. procesio_cli-0.1.1.dist-info/RECORD +647 -0
  644. procesio_cli-0.1.1.dist-info/WHEEL +4 -0
  645. procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
  646. procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
  647. procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
@@ -0,0 +1,360 @@
1
+ # PROCESIO DTO sub-tools — design note (IMPLEMENTED 2026-06-24)
2
+
3
+ Captured 2026-06-23; **built and live-verified 2026-06-24**. The plan below was
4
+ followed; implementation status is at the bottom (see "Implementation status").
5
+
6
+ ## Purpose (obey this above the mechanism)
7
+
8
+ Create/edit PROCESIO objects so the result is:
9
+ 1. **Deterministic & reliable** — DTOs built by scripts from known structures/patterns, reused.
10
+ 2. **Fast** — script execution, not LLM inference.
11
+ 3. **Cheap** — no tokens spent assembling the DTO.
12
+ 4. **Independent** — builders usable outside this tool.
13
+ 5. **Scalable** — portable into other solutions.
14
+
15
+ If a mechanism serves this purpose better than what's below, change the mechanism.
16
+
17
+ ## Pipeline (the contract)
18
+
19
+ ```
20
+ user request
21
+ → [LLM] minimal config — smallest correct input, per component ← the ONLY non-deterministic step
22
+ → [validate] config against the component's JSON Schema (fail-fast)
23
+ → [build] deterministic builder MERGES config onto a golden DTO template → full PROCESIO DTO
24
+ → [validate@source] call PROCESIO's own validate/test endpoint where one exists
25
+ → [send] create (POST) OR edit (GET current → apply config delta → PUT)
26
+ → [confirm] return id; for edits, re-GET and diff
27
+ ```
28
+
29
+ ## Per-component artifacts — the "3-part doc" is **executable files, not prose**
30
+
31
+ Per component, a folder `tools/procesio/dto/<component>/` containing:
32
+
33
+ 1. `description.md` — what it is, when to use, gotchas *(the general description)*.
34
+ 2. `config.schema.json` — JSON Schema the LLM fills *(point-2 "config structure")*.
35
+ Maximally constrained: enums for types, required-minimal surface, references
36
+ resolvable against live PROCESIO data.
37
+ 3. `template.dto.json` — a **real, captured** golden DTO with placeholders
38
+ *(point-3 "actual DTO structure")*.
39
+ 4. `builder.py` — **pure** function `config → DTO` (template-merge + expansion
40
+ rules). No I/O, no auth, no network. Separately unit-tested.
41
+ 5. `fixtures/` — golden `config → DTO` pairs (regression tests) + a captured live
42
+ object for drift detection.
43
+
44
+ The schema + template **are** the documentation. Prose drifts; tested artifacts don't.
45
+
46
+ ## Design principles (the challenge refinements)
47
+
48
+ - **Template-merge, not from-scratch translation.** The golden template carries
49
+ every undocumented boilerplate field (ids, positions, default flags) verbatim;
50
+ the builder only fills/repeats the semantic slots the config names. Less code,
51
+ higher fidelity, fewer ways to be wrong.
52
+ - **Use PROCESIO's own validation as a correctness oracle** before committing —
53
+ `POST /api/Projects/validate`, `POST /api/Credentials/test`,
54
+ `POST /api/Actions/test`, and any per-component validate. The cheapest place to
55
+ catch a bad DTO is PROCESIO itself, deterministically.
56
+ - **Builders are pure libraries.** `config → DTO`, zero side effects. The tool
57
+ wraps auth/transport; the builder ports into a process, a service, anything.
58
+ (serves *independent* + *scalable*.)
59
+ - **Win reliability at the config schema.** The LLM step is the only soft spot;
60
+ constrain it hard (enums, validated ID references, minimal required fields) so
61
+ mistakes fail at the schema, not in production.
62
+ - **Versioned templates + drift test.** Capture each template with date/API
63
+ version; a round-trip test re-GETs a known object and diffs it against the
64
+ template to detect platform drift before it breaks a build.
65
+ - **Composable builders.** A process references data models, credentials, and
66
+ actions — its builder composes the smaller builders. Build simple→complex so
67
+ the complex ones reuse the simple ones.
68
+
69
+ ## DTO source (decided)
70
+
71
+ Primary: **a human annotates example DTOs** (the non-Swagger rules — required
72
+ fields, enums, what references what, what the UI auto-fills). Supplement only as
73
+ needed by round-tripping a live object (GET an existing one) and HAR-capturing
74
+ designer saves (for Documents/Forms whose save isn't a clean REST PUT).
75
+
76
+ ## Tool surface (per component, once taught)
77
+
78
+ ```
79
+ <component>-create --config '<json>' [--dry-run]
80
+ <component>-edit --id <id> --config '<json>' [--dry-run]
81
+ ```
82
+ `--dry-run` returns the built DTO + the PROCESIO validate result and sends
83
+ nothing. These sit alongside the raw `post-*` / `put-*` endpoint actions already
84
+ generated (those remain the escape hatch).
85
+
86
+ ## Build sequence (simple→complex; prove the pattern early)
87
+
88
+ 1. **Webhooks** — small DTO, high frequency. First; establishes the pattern.
89
+ 2. **Credentials** — small, has a `test` endpoint (built-in validation oracle).
90
+ 3. **Data Models** (DataTypes) — medium; referenced by everything else.
91
+ 4. **Forms & Tasks** — medium; depend on data models.
92
+ 5. **Documents** (document designer) — designer payload; likely HAR-sourced.
93
+ 6. **Processes** — largest (nodes, edges, variables, actions); composes the above.
94
+
95
+ ## What I need from you to start a component
96
+
97
+ 1. One or two **real example DTOs** (a create + an edit), exported or pasted.
98
+ 2. **Notes on the non-obvious rules**: required fields, allowed enums, references,
99
+ what the UI fills automatically.
100
+ 3. The create/edit endpoints (already generated) + any validate/test endpoint.
101
+
102
+ From those I produce `config.schema.json` + `template.dto.json` + `builder.py` +
103
+ `fixtures/`, and the two `<component>-create` / `-edit` actions.
104
+
105
+ ## Open questions (resolve when we start)
106
+
107
+ - **Reference resolution** — builder fetches live IDs (datatype/credential/
108
+ workspace) to validate config references at build time, or assumes the LLM
109
+ supplies valid IDs? (Lean: resolve where cheap.)
110
+ - **Edit config shape** — full desired-state vs delta. (Lean: desired-state for
111
+ create; delta merged onto the re-GET for edit.)
112
+ - **Create idempotency** — guard against duplicates on retry.
113
+
114
+ ## Implementation status (2026-06-24)
115
+
116
+ All six components built and **live-verified** in a real workspace
117
+ (`3fd85e9d-…`). Surface: `<component>-create` / `<component>-edit` actions
118
+ (`--config '<json>'` | `--config-file`, `--dry-run`), generated by
119
+ `handlers/dto_actions.py` from `dto/registry.py`. Framework: `dto/framework.py`
120
+ (jsonschema validate → pure `build` → create/validate/edit). Bundled reference:
121
+ `dto/data/platform_types.json`, `dto/data/action_catalog.json` (231 actions),
122
+ `dto/form/elements/*.json` (27 golden controls) + `data_shell.json`.
123
+
124
+ | Component | action(s) | live proof |
125
+ |---|---|---|
126
+ | **datatype** | datatype-create/edit | create+GET+edit; all primitives, lists, model-ref, inline nesting |
127
+ | **process** | process-create/edit | validate→create→**run→STATUS_FINISH**; any catalog action; literal/var/template/attr-path/output bindings; linear+explicit edges; **decisional branching**; webhook attach |
128
+ | **credential** | credential-create/edit | create + `POST /test` live connection (GitHub 200); **used in a process** via Call API v3 → 200 |
129
+ | **document** | document-create/edit | create; **used in a process** via Generate Document → rendered HTML |
130
+ | **webhook** | webhook-create/edit | create (generate-data model) + `launch` → **triggered a process instance** |
131
+ | **form** | form-create/edit | create + publish + **rendered at runtime** (forms.procesio.app/{tinyUrl}); 27 control types |
132
+
133
+ Resolved open questions: **reference resolution** = `prepare_ctx` resolves live
134
+ ids (models/credentials/catalog) into ctx, builders stay pure. **Edit** =
135
+ desired-state rebuild + PUT (datatype reconciles attributes via the attribute
136
+ endpoints). **Idempotency** = not guarded (each create is a new resource).
137
+
138
+ Tests: `tests/test_dto.py` (pure builders + golden fixtures + schema validation).
139
+ Manifest is regenerated by `python -m tools.procesio.gen_manifest` (the file is
140
+ too large to hand-edit). Per-component `description.md` + `template.dto.json` +
141
+ `fixtures/` document each contract.
142
+
143
+ ### Key live-verified facts (also in PROCESIO-API-NOTES.md)
144
+ - **Forms render from `Data.elements`** — the encrypted `Data.code` blob is NOT
145
+ needed (proven: code="" + modified elements rendered the change). Forms are
146
+ reachable at runtime only via a **CustomUrl** (`POST /api/CustomUrl/FormTemplate`
147
+ → `tinyUrl` → `forms.procesio.app/{tinyUrl}`); a bare `/forms/{id}` 404s.
148
+ - **Processes** keep the **client-supplied Id** (POST returns empty). Ports live
149
+ on the source action; a `00000000…`→Start entry edge is required; each branch
150
+ needs its own **Stop** (a Stop accepts one input port).
151
+ - **Webhooks** need the generated webhook-type DataModel (`generate-data`) +
152
+ `IsEdited:true`; MANUAL works, AUTO needs different handling.
153
+
154
+ ## Phase 2 enhancements (2026-06-24, all live-verified)
155
+
156
+ **Process**
157
+ - **Scripting actions** (Javascript, Python) work via the generic builder: `Code`
158
+ (a `{template, vars}` binding with `<%0%>` index injection) + `Output` ({var},
159
+ typed `json`/`object`). JS outputs via `setOutput(v)` → `{"result": v}`; Python
160
+ outputs via `print(v)` → `{"result": "<stdout>"}`. Inputs inject by **index
161
+ `<%0%>`**, NOT by name. SQL = Execute Query (`list<object>`) / Execute Command
162
+ (rows-affected) with `@param`.
163
+ - **Global `<%N%>` indexing per action** — variable indices are now unique across
164
+ ALL of an action's parameters (was per-param), required for actions that reuse a
165
+ property facet for multiple params (JS Code+Output, Decisional Cases+Default,
166
+ document-mapper). `{template}` local `<%i%>` are remapped to the global index.
167
+ - **Error ports** — `onError: "<handlerId>"` on an action creates an
168
+ `ErrorDataModel` variable (`10c6ac59-…220`, `IsError`), sets `VariableErrorId`,
169
+ and adds an error port (`Type:1, Data:{isDefault:"error"}`) to the handler.
170
+ - **Join** convergence — the flow-control Join is `fb6a9d14-…` (`inputPorts=-1`,
171
+ accepts many); a list-`Join` shares the name, so control actions
172
+ (start/stop/join) are **pinned by id** in `_CONTROL_TEMPLATE`. Branches converge
173
+ via Join (each branch otherwise needs its own Stop — a Stop accepts 1 input).
174
+ Decisional **default** port = `Type:0, Data:{isDefault:"default"}` (done).
175
+ - **Canvas layout** — build-time positions come solely from the shared layout
176
+ engine (`_engine_layout` → `layout/engine.py`): nodes laid left-to-right by
177
+ layer, happy path on the main lane, parallel nodes fan into lanes, error
178
+ handlers drop to a low rail. Implements the PROCESIO design directives
179
+ (one-direction flow, minimize crossings, ≤50 actions, Join to declutter). The
180
+ legacy provisional `_layout()` was removed 2026-07-07 (it was always overwritten
181
+ by the engine; DTOs stayed byte-identical) — see
182
+ `todo/done/procesio-retire-builder-layout.md`.
183
+ - **`docMap`** (Generate Document) — maps document-template variables to process
184
+ variables: `[{id, source:{value:"<%N%>", variable:[…]}, destination:{id, variableId:<docVarId>, attribute}}]`.
185
+ `prepare_ctx` resolves the doc's variable ids from `Select Document Template`.
186
+ - All 231 catalog actions are reachable (data-driven by label); ~19 names are
187
+ ambiguous (versioned variants) → reference by actionId when it matters.
188
+
189
+ **Document**
190
+ - Body authored with friendly `<%name%>` placeholders is translated to
191
+ `<%varId%>` at build time (the render engine resolves by **variable id**, and the
192
+ server keeps client-supplied ids). URLs/images = plain HTML `<a>`/`<img>` in the
193
+ body. Repeating tables over a list var = one `<tr>` with `<%listId.attrId%>`
194
+ cells (the builder substitutes the leading var name → id; the `.attr` must be an
195
+ attribute id). End-to-end verified: a variable document populated via Generate
196
+ Document `docMap` rendered the values + the link.
197
+
198
+ **Forms**
199
+ - **Events + triggers** — `events: [{on, do, …}]` per control. `on` ∈
200
+ click/input/focus/blur/open/tabchange/rowadded/rowdeleted/paginated →
201
+ the right `on*Events` config = `{debounce, events:[{id, type, action, config}]}`.
202
+ `do` ∈ **map** (MAP_FORM_DATA), **process** (RUN_PROCESS: processId, syncRun,
203
+ inputMap/outputMap), **js** (RUN_JAVASCRIPT: code), **form** (RUN_FORM).
204
+ - **Tasks/assignees/approvals** — `assignee`/`assigneeReplacement` on
205
+ section/tabs/table; `approver`/`approverReplacement` on the approval control.
206
+ - **Themes/CSS** — `theme: {"--c-primary":"#…", …}` overrides the shell theme
207
+ (19 sections of `{type,label,value,cssVariable}`). All control properties are
208
+ settable via the named convenience keys or the raw `configs` passthrough.
209
+
210
+ ## Phase 3 — systematic coverage (2026-06-24, live-verified)
211
+
212
+ - **All-actions audit** — every one of the **210 distinct catalog actions builds
213
+ AND validates** (`/api/Projects/validate`): 210/210, zero structural failures.
214
+ The data-driven builder genuinely covers all PROCESIO actions (versioned
215
+ duplicate-name variants → reference by actionId).
216
+ - **Error-port exclusions** — `onError` is rejected on Start/Stop/Join/For Each
217
+ (they have no error port), per PROCESIO.
218
+ - **Forms use a FLAT elements list + parentId** (NOT nested `children`) — corrected
219
+ a real bug: nested-children containers did **not** render. Now section/columns/
220
+ tabs children are flat with `parentId`, and columns/tabs keep an ordered
221
+ child-name list. **Verified live**: section child, 2-column layout, and a table
222
+ all render.
223
+ - **Form tables** — `{"type":"table","columns":[{"key","label","cell":{…}}]}` builds
224
+ the table + a `static-table-row` + the cell controls wired via
225
+ `childrenIdPerColumn` (colId→[cellId]). **Verified live** (PRODUCT/QUANTITY columns
226
+ with input/number cells render).
227
+ - **Document tables with variables** — a repeating table over a list-model variable:
228
+ one `<tr>` with `<%items.product%>` cells (friendly names → `<%listId.attrId%>`
229
+ via model-attribute resolution). **Verified live**: a 2-row table rendered from a
230
+ mapped list (Widget/Gadget), plus a scalar var + hyperlink.
231
+ - **Data Model from JSON** (platform trick) — `datatype-create … "fromJson":{…}`
232
+ infers the model via `/api/DataTypes/generate`. **Verified**: nested object +
233
+ list inferred. Other platform tricks are UI-only (canvas shortcuts); the
234
+ `group/name` process-naming convention is supported (just the name field).
235
+ - **Form events expanded** to the full documented vocabulary (ready/hover/
236
+ stepchange/nextstep/previousstep/before|afterapprove|reject/messages…) on top of
237
+ the export-verified click/input/focus/blur/tabchange/row/pagination set.
238
+ - **Design directives applied**: error-port→handler pattern, one-direction
239
+ left-to-right auto-layout with lanes + a low error lane, ≤50-action guidance,
240
+ secrets only in the credential vault, distinct action names (user-supplied).
241
+
242
+ **Webhooks — AUTO (listen+capture) + custom responses (corrected & verified).**
243
+ The docs clarified that **AUTO = the listen/capture METHOD** (not a stored type):
244
+ `type:"auto"` runs the real designer flow in the webhook `create` override —
245
+ create → get URL → `POST /api/Webhooks/listen` (start) → send the sample to
246
+ `/api/Webhooks/launch/{id}` → stop — returning a `capture` log. Verified: the
247
+ AUTO webhook is created via listen+capture and triggers a process. (The gateway
248
+ won't persist `Type:0` via REST — `POST Type:0` → 502 — so the stored type is 1;
249
+ AUTO is the method.) **Custom webhook responses are configured ON THE PROCESS**
250
+ (per docs): `process-create … "customResponse":{"var":"responseVar"}` sets the
251
+ flow `CustomResponseDto` (`{Variable, Value:"<%0%>"}`, matching production); the
252
+ value is computed and stored on the instance
253
+ (`GET …/instances/{iid}/customResponse` → verified "OK-"). The webhook-definition
254
+ `CustomResponseConfig` (static/JS/JSON-path) and the synchronous HTTP return are
255
+ designer-only (not persisted/exposed by REST). MANUAL + AUTO + trigger all work.
256
+
257
+ ---
258
+ ## These capabilities are CURATED ACTIONS — do not reimplement
259
+ Everything described above is reachable through a runnable action (run `python scripts/run-tool.py procesio`
260
+ to list all ~330). In particular:
261
+ - Parse a flow/export into a node/edge graph → **`read-flow-graph`**; structural summary/smells → **`inspect-flow`**.
262
+ - Auto-layout a canvas (legacy or `LAYOUT_ENGINE=elk`) → **`layout-flow`**; verify positions → **`verify-layout`**;
263
+ cross-process map → **`layout-resource-map`**; re-lay-out a LIVE process in place → **`relayout-process`**.
264
+ - Duplicate a process → **`duplicate-process`**; validate one → **`process-validate`**; delete → **`process-delete`**.
265
+ Reach for the action first; only drop to a raw `<method>-<path>` wrapper or `request` if no curated action fits.
266
+
267
+ ## Two builder gaps that only appear at SAVE time (fixed 2026-08-27)
268
+
269
+ Both were invisible to `--dry-run` reading and to the offline schema, and both blocked the save of
270
+ any config using them.
271
+
272
+ **1. `{"var": x, "path": [...]}` wrote the attribute NAME.** `attr_index` was documented but never
273
+ populated, so the name went straight into `attribute.attributeId` — a field the API parses as a
274
+ Guid — and the save died with `Error converting value "ToEmail" to type 'System.Guid'`. Every
275
+ model-typed attribute binding was affected. `prepare_ctx` now fetches each referenced model
276
+ (`GET /api/DataTypes/{id}`, recursively for model-typed attributes) and indexes its attributes by
277
+ name; each step of a path is resolved against the model the PREVIOUS step lands in, which is what
278
+ makes a nested path work. A value that already looks like a Guid passes through, an unknown name
279
+ raises and lists the attributes that do exist, and a variable with no known model still passes the
280
+ name through (offline behaviour unchanged).
281
+
282
+ **2. A SQL node was built without its `Parameters config tab`.** The builder emits only the
283
+ properties a config names; the designer renders that one from the TEMPLATE, finds no value, and
284
+ blocks the save with "Please make sure that the action is defined/configured properly". So NO
285
+ `process-create` config containing an Execute Query / Execute Command could be saved, bound or not.
286
+ The builder now always appends it (empty when unbound), keyed per family — the Command bind id is
287
+ not the Query one.
288
+
289
+ ### A `For Each` needs its ports wired explicitly
290
+ The implicit linear chain walks every action including the loop BODY, which leaves the For Each with
291
+ one outgoing port and the last body action with none. Two BE errors, both `statusCode 391 "Action
292
+ has too few output ports"`, one after the other. The shape that validates:
293
+
294
+ ```
295
+ ["start","getPending"], ["getPending","loop"],
296
+ ["loop","buildBody"], ["loop","stop"], <- body entry AND the continuation after the loop
297
+ ["buildBody","send"], ["send","mark"], ["mark","loop"] <- the body closes back onto the For Each
298
+ ```
299
+
300
+ So: a `For Each` takes TWO outgoing edges, and the last action of the body loops back to it. Body
301
+ actions still carry `parent: "<forEachId>"` as well — `parent` sets containment, `edges` set flow.
302
+
303
+ ## The warm toolrunner daemon serves STALE tool code
304
+
305
+ `scripts/run-tool.py` routes through a persistent worker pool by default, and those workers keep the
306
+ modules they imported at start. **After editing any tool source, `run-tool.py` keeps running the OLD
307
+ code** — the same command produces the same pre-fix output while pytest against the same file is
308
+ green, which reads exactly like "my change did not apply". Nothing warns.
309
+
310
+ Use `AAT_RUNNER=0` (or `AAT_RUNNER_DIRECT=1`) for the first call after a code change, or restart the
311
+ daemon. The give-away is a fix that is provably present on import (`inspect.getsource`) and provably
312
+ absent from the tool's output.
313
+
314
+ ## Engine-STATE properties: a `For Each` times out on iteration one without them
315
+
316
+ A template can declare properties of `type: "ignore"` — engine state the designer never shows and
317
+ no config names, carrying their seed value ON THE TEMPLATE. The builder emitted only the properties
318
+ a config named, so it dropped them, and the engine then fell back to its own defaults.
319
+
320
+ On `For Each` that is fatal and reads like a configuration problem: without **`Action start time`**
321
+ (template seed `2010-01-01T00:00:00.0000000Z`) elapsed time is measured from year one, so the loop
322
+ fails instantly with `Foreach timeout exceeded!` — whatever `Action timeout` says, including a
323
+ generous 300. The other one is `Zero based list index` (seed `-1`). `Call Subprocess` declares one
324
+ too; nothing else in the catalog does.
325
+
326
+ The builder now copies every `ignore`-typed property from the template. **Diagnosing this from the
327
+ error is impossible** — the fix came from diffing the node against a For Each in a working export,
328
+ which is the general technique: when an action fails on configuration the validator accepts, dump a
329
+ live working instance of the same action and compare `Parameters[]` property-by-property.
330
+
331
+ A working `For Each` in a live flow also sets `Action timeout` to `0` (no cap).
332
+
333
+ ### `Send Email`: the From address is a property, and SendGrid checks it
334
+ `From (Display Name)` and `From (Entity)` differ only in their last four characters
335
+ (`…ca11e4ef116c` vs `…ca11e4ef11c6`), and only the second one is the ADDRESS. A config that names
336
+ neither gets neither emitted, so there is no property to patch afterwards — `node-set-param` answers
337
+ "property not found on node", because the builder only writes what the config asked for.
338
+
339
+ Over a SendGrid relay an unverified or blank From fails the send outright: *"The from address does
340
+ not match a verified Sender Identity"*. The SMTP credential's own `From` may be blank, in which case
341
+ the address must come from the action. `sendgrid list-verified-senders` lists what the account will
342
+ actually accept.
343
+
344
+ ## `<component>-edit --dry-run` used to preview a CREATE, not the edit
345
+
346
+ The dry-run branch built the DTO straight from the config, skipping the component's own edit
347
+ preparation — which for a process is exactly what reuses the live flow's VARIABLE IDS by name and
348
+ its canvas positions. So the preview showed brand-new ids while the real edit kept them.
349
+
350
+ That is the worst direction for a preview to be wrong, because a process variable is referenced BY
351
+ GUID from outside the process (a form's RUN_PROCESS inputMap/outputMap binds it by id), so "do the
352
+ ids survive this edit?" is the question a dry-run is run to answer. It answered wrongly both ways: a
353
+ preserved id shown as changed, and a genuine rename shown as if nothing external would break.
354
+
355
+ Fixed by extracting the live-resource enrichment into a `Component.edit_ctx` hook that both the real
356
+ edit and the new `framework.build_edit_dto` call. A component without the hook is unaffected, and an
357
+ unreadable live resource still produces a preview rather than refusing one.
358
+
359
+ **The general lesson:** a dry-run is only as good as the code path it shares with the real write. If
360
+ it builds through a different path, it is a different operation wearing the same name.
@@ -0,0 +1,67 @@
1
+ # PROCESIO Form Development — the complete guide
2
+
3
+ Everything needed to build a **professional-grade** PROCESIO form: how the DTO is
4
+ shaped, how form-level CSS and JavaScript actually execute, what the runtime DOM
5
+ looks like, how to read and write field values, how to build a custom animated
6
+ stepper, how to hide and reveal controls, how to wire a control to a process and
7
+ get data back into fields, and how to deploy all of it without destroying the
8
+ form.
9
+
10
+ Everything here was **verified against a live form and against the renderer's own
11
+ source** (`docs_info/ui-builder-main`). Where something was learned by breaking
12
+ the live form, the symptom is recorded next to the rule — see
13
+ [08-PITFALLS.md](08-PITFALLS.md), which is the fastest way to avoid repeating a
14
+ day of debugging.
15
+
16
+ ## The files, and when to attach which
17
+
18
+ | File | Attach it when you need to… |
19
+ |---|---|
20
+ | [01-ANATOMY.md](01-ANATOMY.md) | understand the FormTemplate DTO: elements, configs, sections, the data model, value paths, steppers |
21
+ | [02-CODE-INJECTION.md](02-CODE-INJECTION.md) | write ANY form-level JavaScript — this is the one non-negotiable prerequisite |
22
+ | [03-DOM-CONTRACT.md](03-DOM-CONTRACT.md) | write CSS or query the DOM — the selector reference and what the renderer guarantees |
23
+ | [04-INTERACTION-RECIPES.md](04-INTERACTION-RECIPES.md) | read/write a field, hide a field, gate a button, build a custom control, validate, toast, embed an interactive map (Leaflet) |
24
+ | [05-STEPPER-AND-MOTION.md](05-STEPPER-AND-MOTION.md) | build a custom stepper, a step transition, a loader veil, entrance animations |
25
+ | [06-PROCESS-INTEGRATION.md](06-PROCESS-INTEGRATION.md) | trigger a process from the form and land its results back in fields |
26
+ | [07-DEPLOY-WORKFLOW.md](07-DEPLOY-WORKFLOW.md) | actually ship the CSS/JS to a live form, and test before you do |
27
+ | [08-PITFALLS.md](08-PITFALLS.md) | anything — read it once, then keep it attached |
28
+
29
+ **Minimum viable attachment set** for "add an animation / behaviour to an existing
30
+ form": `02` + `03` + `05` + `08`.
31
+
32
+ ## The five-sentence version
33
+
34
+ 1. A form is a **flat list of elements**, each a bag of `configs`, plus a mirrored
35
+ **data model** whose attribute ids must equal the elements' config ids.
36
+ 2. Form-level CSS and JS live **AES-encrypted in `Data.code`** and are edited with
37
+ `form-get-code` / `form-set-code`, never with `form-edit`.
38
+ 3. The CSS is injected as a `<style>` into the real page; **the JS is replayed in a
39
+ throwaway sandbox iframe**, so anything that must survive is injected once into
40
+ `window.parent.document`.
41
+ 4. The renderer destroys and rebuilds controls on every step change (`v-if`), so
42
+ **all state is recomputed from a MutationObserver**, never stored on a node.
43
+ 5. Behaviour is layered ON TOP of the platform's own — you click the platform's
44
+ real control rather than setting values behind its back, because it is Vue-bound.
45
+
46
+ ## Vocabulary
47
+
48
+ | Term | Meaning |
49
+ |---|---|
50
+ | **element** | one control in `Data.elements` — input, paragraph, column, stepper, step… |
51
+ | **config** | one `{id, key, value}` entry on an element; `label`, `name`, `visible`, `onClickEvents`… are all configs |
52
+ | **value path** | `{dmRootId}.{FIELDS_NS}.{elementId}.{valueConfigId}` — how a process addresses a form field |
53
+ | **`Data.code`** | the designer's "Switch to code" editor: the form-level `{CSS, JAVASCRIPT}` pair, stored encrypted |
54
+ | **runtime layer** | the JS you inject into the parent document; it outlives individual script runs |
55
+ | **veil** | a full-card loader overlay that masks the renderer rebuilding controls |
56
+ | **rail** | a custom step indicator drawn by your own JS, replacing the platform's nav |
57
+ | **gating** | hiding a control with `display: none` so it also leaves the tab order |
58
+
59
+ ## Related framework notes
60
+
61
+ - [../dto/form/FORM-STYLING-NOTES.md](../dto/form/FORM-STYLING-NOTES.md) — the four
62
+ styling surfaces (theme, per-element style, element-event JS, form-level code)
63
+ - [../PROCESIO-RESOURCE-MODEL-NOTES.md](../PROCESIO-RESOURCE-MODEL-NOTES.md) — the
64
+ export DTO for every resource type, including the flow graph
65
+ - [../PROCESIO-API-NOTES.md](../PROCESIO-API-NOTES.md) — auth, endpoints, casing
66
+ - [../PROCESIO-FE-VALIDATION-NOTES.md](../PROCESIO-FE-VALIDATION-NOTES.md) — what the
67
+ save-time validation gate rejects
@@ -0,0 +1,209 @@
1
+ # 01 — Anatomy of a PROCESIO form
2
+
3
+ What the DTO contains, what each part is for, and which parts are load-bearing for
4
+ runtime behaviour. Read this before you touch a form programmatically; the two
5
+ sections that cause the most silent breakage are **value paths** and the **data
6
+ model mirror**.
7
+
8
+ ---
9
+
10
+ ## 1. The envelope
11
+
12
+ ```
13
+ GET /api/FormTemplate/{id} -> camelCase body
14
+ PUT /api/FormTemplate -> PascalCase envelope, full DTO
15
+ POST /api/FormTemplate -> create (the client supplies the Id)
16
+ PATCH /api/FormTemplate/{id}?state= -> publish/unpublish
17
+ ```
18
+
19
+ **The casing flips between the two directions.** The GET returns
20
+ `{id, name, isPrivate, type, status, state, assignees, customUrl, data}`; the PUT
21
+ wants `{Id, Name, IsPrivate, Type, Status, State, Assignees, CustomUrl, Data}`.
22
+ Map explicitly — echoing back an unexpected extra field from the GET is how a PUT
23
+ starts failing for reasons nobody can see. The canonical map lives in
24
+ `handlers/form_code.py::_PUT_KEYS`.
25
+
26
+ `Status = 1` (PUBLISHED) + `State = true` publishes. A `CustomUrl` gives the form
27
+ its public short link (`forms.<host>/{tinyUrl}`).
28
+
29
+ ## 2. `Data` — the five parts that matter
30
+
31
+ ```
32
+ Data = {
33
+ elements : [ … ], // the control tree (PLAINTEXT) — this is what renders
34
+ dataModel : { … }, // a mirror of elements, used for value addressing
35
+ theme : [ … ], // ~190 CSS variables in 18 groups, form-wide
36
+ code : "…", // AES-encrypted { CSS, JAVASCRIPT } (see 02 + 07)
37
+ messages : { … }, // platform copy
38
+ }
39
+ ```
40
+
41
+ **`elements` alone is enough to render.** Proven live: a form with `code: ""` and
42
+ modified elements rendered the modified elements. The encrypted code blob is a
43
+ presentation/behaviour layer on top, never a requirement.
44
+
45
+ ## 3. `elements` — a FLAT list with `parentId`
46
+
47
+ PROCESIO does **not** nest children inside a parent element. Every control is a
48
+ top-level entry in one flat array and points at its parent:
49
+
50
+ ```json
51
+ {
52
+ "id": "<guid>",
53
+ "type": "input",
54
+ "parentId": "<guid of the column/step/section>",
55
+ "section": "header" | "body" | "footer",
56
+ "configs": [ {"id": "<guid>", "key": "label", "value": "CNP"}, … ]
57
+ }
58
+ ```
59
+
60
+ - **`section`** decides where in the shell it renders. `heading` defaults to
61
+ `header`, `button` to `footer`, everything else to `body`.
62
+ - **`type`** must be one of the known control types. The full list is the file
63
+ names in `dto/form/elements/*.json`:
64
+
65
+ `approval, assignee, button, chart, chat, checkbox, column, columns,
66
+ datetime-input, divider, dropdown, dynamic-table-row, file-upload, file-viewer,
67
+ heading, icon, image, input, list, number-input, paragraph, radiobox, section,
68
+ select, side-panel, signature-pad, static-table-row, step, stepper, tab, table,
69
+ tabs, textarea`
70
+
71
+ Each of those `.json` files is a **captured golden**: a real element of that type
72
+ with every config present and valid. Building a new element = clone the golden,
73
+ assign fresh ids, override the semantic configs. Never hand-author an element
74
+ from scratch — you will omit a config the renderer silently depends on.
75
+
76
+ ### Layout containers
77
+
78
+ `columns` → `column` → controls. A `stepper` contains `step` elements; each `step`
79
+ contains the controls of that step. `section`, `tabs`/`tab`, `table` +
80
+ `static-table-row`/`dynamic-table-row` follow the same parent/child pattern.
81
+
82
+ ## 4. `configs` — where all the meaning lives
83
+
84
+ A config is `{id, key, value}` (some carry `category`). The keys you will actually
85
+ set:
86
+
87
+ | Group | Keys |
88
+ |---|---|
89
+ | identity | `name`, `id`, `label`, `placeholder`, `tooltip`, `info-text` |
90
+ | behaviour | `required`, `readonly`, `visible`, `regex`, `defaultValue`, `min`, `max` |
91
+ | control-specific | `rows`, `mode`, `multiple`, `searchable`, `clearable`, `hasNow`, `maxFileSize`, `canAdd`, `canRemove`, `addText`, `variation`, `outlined` |
92
+ | options | `sourceType` (`static-list` \| `JSON` \| `URL`) + `sourceValue` |
93
+ | media/link | `src`, `url`, `alt`, `title`, `width`, `height`, `linkUrl` |
94
+ | submit | `submit`, `disabledIfFormIsInvalid` |
95
+ | tasks | `assignee`, `assigneeReplacement`, `approver`, `approverReplacement` |
96
+ | **value** | `value` — the live field value (see §5) |
97
+ | **styling** | `style` — a `CSSProperty[]`, per-element CSS variables |
98
+ | **events** | `on…Events` — see §6 |
99
+
100
+ ### The `style` config (per-element styling)
101
+
102
+ `{key: "style", category: "styling", value: CSSProperty[]}` where each property is
103
+ `{label, value, cssVariable, type, enabled}`. The runtime applies **only**
104
+ `enabled: true` entries.
105
+
106
+ - Valid variables for a type = that type's CSS group in the theme (the first theme
107
+ group whose `types` include the element type — so input / number / datetime /
108
+ textarea / select all share the **Input** group).
109
+ - For `type == "css-variable-select"` (colours) pass a **theme variable**
110
+ (`--c-neutral--50`), not a hex: the runtime emits `var(<value>)`. Plain variables
111
+ (heights, paddings) take raw values.
112
+ - Non-stylable types (heading, paragraph, divider, image…) have no style group.
113
+
114
+ ### `visible` is NOT a hide
115
+
116
+ `Element.component.vue` renders under `v-if`. Setting `visible: false` **removes
117
+ the node from the DOM** — it is not hidden, it is destroyed. Consequences run
118
+ through this whole guide: entrance animations re-fire on every step change (good),
119
+ exit transitions are impossible (the node is already gone), and any state you
120
+ attach to a node must be recomputed rather than remembered.
121
+
122
+ ## 5. The data model mirror, and value paths
123
+
124
+ Every control is backed by a data-model attribute. The structure is three levels:
125
+
126
+ ```
127
+ root "form" id = formId
128
+ └── "fields" id = 11223344-5566-7788-99aa-aabbccddeeff (CONSTANT across all forms)
129
+ └── <element> id = elementId
130
+ └── attrs one per config, INCLUDING `value`
131
+ ```
132
+
133
+ A process addresses a form field by the full path:
134
+
135
+ ```
136
+ {dmRootId}.{FIELDS_NS}.{elementId}.{valueConfigId}
137
+ ```
138
+
139
+ **Two id rules that are not optional**, both verified against real production
140
+ forms:
141
+
142
+ 1. The value segment must be the element's **own `value` config id** — not a fresh
143
+ guid. With a fresh id the process-designer's "Form variable" selector shows
144
+ `Unknown`.
145
+ 2. Every data-model attribute id must equal the element's **config id for that
146
+ key**. Measured on a real form: 15/16 attributes resolved with reused ids,
147
+ 0/16 with fresh ones.
148
+
149
+ Get this wrong and nothing errors — the designer just renders raw guids and values
150
+ never flow.
151
+
152
+ ## 6. Events on an element
153
+
154
+ Each trigger has its own config key whose value is `{debounce, events: [...]}`:
155
+
156
+ ```json
157
+ {"key": "onInputEvents",
158
+ "value": {"debounce": 0,
159
+ "events": [{"id": "<guid>", "type": "INPUT",
160
+ "action": "RUN_PROCESS", "config": { … }}]}}
161
+ ```
162
+
163
+ **A fresh element carries the key with a `null` value.** That is what "no handler"
164
+ looks like — it is not an error and not a missing field.
165
+
166
+ ### Trigger → config key → event type
167
+
168
+ | `on` | config key | `type` |
169
+ |---|---|---|
170
+ | click | `onClickEvents` | `CLICK` |
171
+ | input / change | `onInputEvents` | `INPUT` |
172
+ | focus / blur / hover | `onFocusEvents` / `onBlurEvents` / `onHoverEvents` | `FOCUS` / `BLUR` / `HOVER` |
173
+ | ready | `onReadyEvents` | `READY` |
174
+ | open / close | `onOpenEvents` / `onCloseEvents` | `SIDE_PANEL_OPEN` / `SIDE_PANEL_CLOSE` |
175
+ | tabchange | `onTabChangeEvents` | `TAB_CHANGE` |
176
+ | rowadded / rowdeleted | `onTableRowAddedEvents` / `onTableRowDeletedEvents` | `TABLE_ROW_ADDED` / `TABLE_ROW_DELETED` |
177
+ | paginated | `onPaginationChangedEvents` | `TABLE_PAGINATED` |
178
+ | stepchange | `onStepChangeEvents` | `STEPPER_STEP_CHANGE` |
179
+ | nextstep / previousstep | `onNextStepEvents` / `onPreviousStepEvents` | `STEPPER_NEXT_STEP` / `STEPPER_PREVIOUS_STEP` |
180
+ | beforeapprove / afterapprove | `onBeforeApproveEvents` / `onAfterApproveEvents` | `BEFORE_APPROVE` / `AFTER_APPROVE` |
181
+ | beforereject / afterreject | `onBeforeRejectEvents` / `onAfterRejectEvents` | `BEFORE_REJECT` / `AFTER_REJECT` |
182
+ | beforeapprovalsubmit / afterapprovalsubmit | `onBeforeApprovalSubmitEvents` / `onAfterApprovalSubmitEvents` | `BEFORE_APPROVE_OR_REJECT` / `AFTER_APPROVE_OR_REJECT` |
183
+ | messagesfetch / messagesent | `onMessagesFetchEvents` / `onMessageSentEvents` | `CHAT_MESSAGES_FETCH` / `CHAT_MESSAGE_SENT` |
184
+
185
+ Source of truth: `dto/form/builder.py::_EVENT_KEY` / `_EVENT_TYPE`, verified against
186
+ the renderer's `trigger.ts` `TriggerKey` enum and `FieldEvents.component.vue`.
187
+ **Never re-derive this table in new code** — import the builder's maps, as
188
+ `handlers/form_events.py` does. A wrong event type is silently accepted by the API
189
+ and simply never fires.
190
+
191
+ ### Event actions
192
+
193
+ | `action` | config |
194
+ |---|---|
195
+ | `RUN_JAVASCRIPT` | `{code: "<js source, plaintext>"}` |
196
+ | `RUN_PROCESS` | `{processId, inputMap[], outputMap[], syncRun}` — see [06](06-PROCESS-INTEGRATION.md) |
197
+ | `MAP_FORM_DATA` | `{mapping: [{id, left, right}]}` |
198
+ | `TRIGGER_FORM` | `{formId, mapping: [...]}` |
199
+
200
+ ## 7. Where the four styling surfaces live
201
+
202
+ | Surface | Scope | Where |
203
+ |---|---|---|
204
+ | Theme | whole form, by control type | `Data.theme` — ~190 CSS variables |
205
+ | Per-element style | one control | that element's `style` config |
206
+ | Element event JS | one control, one trigger | that element's `on…Events` config (**plaintext**) |
207
+ | Form-level CSS + JS | whole form | `Data.code` (**encrypted**) |
208
+
209
+ The last one is where all serious work happens; the rest of this guide is about it.