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,159 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "PROCESIO Process (Flow) config",
4
+ "description": "Minimal config to build a runnable PROCESIO process. The builder resolves each action against the live action catalog, binds params to the template's properties, auto-injects Start/Stop, and wires ports (linear by default, or via explicit edges).",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["title"],
8
+ "properties": {
9
+ "title": {"type": "string", "minLength": 1},
10
+ "description": {"type": "string"},
11
+ "timeout": {"type": "integer", "minimum": 0, "default": 0},
12
+ "variables": {"type": "array", "items": {"$ref": "#/$defs/variable"}},
13
+ "actions": {"type": "array", "items": {"$ref": "#/$defs/action"}},
14
+ "edges": {
15
+ "type": "array",
16
+ "description": "Explicit wiring between action ids ('start'/'stop' reserved). Omit for a linear chain.",
17
+ "items": {"$ref": "#/$defs/edge"}
18
+ },
19
+ "webhooks": {
20
+ "type": "array",
21
+ "description": "Webhook triggers: each {webhookId, variables:[{name, source}]} binds a process variable to the webhook Body/Query/Header.",
22
+ "items": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": ["webhookId"],
26
+ "properties": {
27
+ "webhookId": {"type": "string"},
28
+ "variables": {"type": "array", "items": {
29
+ "type": "object", "additionalProperties": false, "required": ["name"],
30
+ "properties": {"name": {"type": "string"}, "source": {"type": "string", "enum": ["header", "query", "body"]}}}}
31
+ }
32
+ }
33
+ },
34
+ "customResponse": {"description": "synchronous webhook response: {var: <process var name>} returns that variable's value to the caller (or {value: literal})"},
35
+ "relayout": {"description": "canvas re-tidy scope on EDIT (create always lays out fully). One of: \"all\" | \"none\" | \"new\" | [actionId,...] | {new:bool, actions:[...], edited:[...]}. Default on edit: re-arrange the WHOLE canvas (classic engine + clustering), exactly like a create. \"new\" (or process-edit --keep-layout, or PROCESIO_KEEP_LAYOUT=1) keeps existing positions and places only new actions, for a hand-arranged canvas."},
36
+ "_webhooks": {"type": "array", "description": "internal: WebhookInstanceDto[] passthrough"},
37
+ "_customResponse": {"description": "internal: CustomResponseDto"}
38
+ },
39
+ "$defs": {
40
+ "variable": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "required": ["name"],
44
+ "properties": {
45
+ "name": {"type": "string", "minLength": 1},
46
+ "type": {"type": "string", "enum": ["boolean", "integer", "float", "double", "string", "datetime", "json", "object", "guid", "bool", "int", "long", "number", "text", "str", "uuid", "date-time"]},
47
+ "model": {"type": "string", "description": "data model name/id (instead of a primitive type)"},
48
+ "direction": {"type": "string", "enum": ["input", "process", "output", "processinfo"], "default": "process", "description": "processinfo declares the platform's ProcessInfo variable (type 40, SystemDataModel): bind its fields with {var: ProcessInfo, path: [workspaceId|instanceId|templateId|name|startedOn]}. It is NOT added automatically."},
49
+ "isList": {"type": "boolean", "default": false},
50
+ "required": {"type": "boolean", "default": false},
51
+ "isError": {"type": "boolean", "default": false},
52
+ "default": {}
53
+ }
54
+ },
55
+ "action": {
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": ["id", "action"],
59
+ "properties": {
60
+ "id": {"type": "string", "minLength": 1, "description": "config-local id used in edges"},
61
+ "action": {"type": "string", "minLength": 1, "description": "action template name (or id) from the catalog"},
62
+ "name": {"type": "string", "description": "display name; if omitted it is auto-derived from what the action does (e.g. 'GET /users', 'For each items', a Node's leading comment) and falls back to the template name. Re-evaluated on every build/edit."},
63
+ "params": {
64
+ "type": "object",
65
+ "description": "property label/id -> binding (literal, {value}, {var[,path]}, or {template,vars})",
66
+ "additionalProperties": {"$ref": "#/$defs/binding"}
67
+ },
68
+ "onError": {"type": "string", "description": "action id to route this action's error port to (captures the error in an ErrorDataModel variable)"},
69
+ "parent": {"type": "string", "description": "id of the For Each action that contains this action (loop body). A For Each cannot be nested directly inside another For Each."},
70
+ "subprocess": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "description": "Call/Trigger Subprocess: target flow id + variable maps. Sub-process var ids are GUIDs (e.g. from read-flow-graph on the target); parent vars resolve by name.",
74
+ "required": ["target"],
75
+ "properties": {
76
+ "target": {"type": "string", "description": "target flow (subprocess) GUID"},
77
+ "inputs": {"type": "object", "description": "subInputVarId -> parent binding (literal/{value}/{var,path})", "additionalProperties": {"$ref": "#/$defs/binding"}},
78
+ "outputs": {"type": "object", "description": "parentVarName -> subOutputVarId (GUID)", "additionalProperties": {"type": "string"}}
79
+ }
80
+ },
81
+ "docMap": {"type": "object", "description": "Generate Document: map each document template variable name -> a process variable (name or {var})", "additionalProperties": {"type": ["string", "object"]}},
82
+ "dsMap": {"type": "object", "description": "Data Store Set Values (InsertRows/UpdateRows): map each COLUMN NAME -> a value binding. A bare string/number is a LITERAL value; use {var} / {var, path} / {value} for the other forms.", "additionalProperties": {"type": ["string", "number", "boolean", "object"]}},
83
+ "dsWhere": {"description": "Data Store Where (SelectRows/UpdateRows/DeleteRows): conditions as a list [{column, op, value}] combined by AND, or {logic:'and'|'or', conditions:[...]}. op is a QueryOperators name (equals, notEquals, contains, startsWith, greaterThan, lessThan, between, in, isNull, isNotNull, ...) or a numeric value; value is a binding (literal, {var}, {var, path}).", "oneOf": [{"type": "array", "items": {"type": "object"}}, {"type": "object"}]},
84
+ "queryStore": {
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "description": "Query Store: ONE MySQL statement over the workspace's Data Stores. In `sql`, write a table as {{ds:StoreNameOrId}} and a column as {{col:StoreNameOrId.ColNameOrId}} (each becomes an id-bound chip resolved live), a parameter as @name (bound via `params`), and system columns (CreatedOn/UpdatedOn/CreatedById/UpdatedById) by plain name. `params` maps each @name -> a binding (bare = literal; {var[,path]} / {value}). Optional `timeout` seconds (60-1800, default 1800) and `resultRows`/`totalCount` output variables (name or {var}).",
88
+ "required": ["sql"],
89
+ "properties": {
90
+ "sql": {"type": "string", "minLength": 1},
91
+ "params": {"type": "object", "additionalProperties": {"$ref": "#/$defs/binding"}},
92
+ "timeout": {"type": "integer"},
93
+ "resultRows": {"anyOf": [{"type": "string"}, {"type": "object", "required": ["var"], "additionalProperties": false, "properties": {"var": {"type": "string"}, "path": {"type": "array", "items": {"type": "string"}}}}]},
94
+ "totalCount": {"anyOf": [{"type": "string"}, {"type": "object", "required": ["var"], "additionalProperties": false, "properties": {"var": {"type": "string"}, "path": {"type": "array", "items": {"type": "string"}}}}]}
95
+ }
96
+ },
97
+ "branches": {
98
+ "type": "array",
99
+ "description": "Decisional routing. Regular Decisional: {to, when:[conditions], name?, default}. AI Decisional: {to, condition:'<natural-language>', name?, default} — condition is a plain-English sentence the model evaluates. A non-default case is auto-labelled from its condition (rule-based: 'amount > 1000'; AI: the condition sentence) unless name is given; re-evaluated on every build/edit.",
100
+ "items": {
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "required": ["to"],
104
+ "properties": {
105
+ "to": {"type": "string", "description": "target action id"},
106
+ "default": {"type": "boolean", "description": "the fallback branch"},
107
+ "when": {"type": "array", "items": {"$ref": "#/$defs/condition"}},
108
+ "condition": {"type": "string", "description": "AI Decisional only: the natural-language condition for this case"},
109
+ "name": {"type": "string", "description": "case label shown in the designer (regular OR AI Decisional); default is derived from the case condition, else 'Case N'"}
110
+ }
111
+ }
112
+ }
113
+ }
114
+ },
115
+ "condition": {
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "required": ["left", "op"],
119
+ "properties": {
120
+ "left": {"$ref": "#/$defs/operand"},
121
+ "op": {"type": "string", "description": "EQUALS, DOES_NOT_EQUAL, GREATER_THAN, LESS_THAN, CONTAINS, IS_EMPTY, IS_NOT_EMPTY, IS_TRUE, IS_FALSE, ..."},
122
+ "right": {"$ref": "#/$defs/operand"},
123
+ "logic": {"type": "string", "enum": ["and", "or"]}
124
+ }
125
+ },
126
+ "operand": {
127
+ "anyOf": [
128
+ {"type": ["string", "number", "boolean", "null"]},
129
+ {"type": "object", "additionalProperties": false, "properties": {"value": {}}},
130
+ {"type": "object", "additionalProperties": false, "required": ["var"],
131
+ "properties": {"var": {"type": "string"}, "path": {"type": "array", "items": {"type": "string"}}}}
132
+ ]
133
+ },
134
+ "binding": {
135
+ "anyOf": [
136
+ {"type": ["string", "number", "boolean", "null"]},
137
+ {"type": "object", "additionalProperties": false, "properties": {"value": {}}},
138
+ {"type": "object", "additionalProperties": false, "required": ["credential"],
139
+ "properties": {"credential": {"type": "string", "description": "credential INSTANCE gid for a credentials-typed property (the action's credential template/type is fixed by the catalog)"}}},
140
+ {"type": "object", "additionalProperties": false, "required": ["var"],
141
+ "properties": {"var": {"type": "string"}, "path": {"type": "array", "items": {"type": "string"}}}},
142
+ {"type": "object", "additionalProperties": false, "required": ["template", "vars"],
143
+ "properties": {"template": {"description": "string OR a JSON object/array with <%i%> placeholders in string leaves"}, "vars": {"type": "array", "items": {"anyOf": [
144
+ {"type": "string"},
145
+ {"type": "object", "additionalProperties": false, "required": ["var"],
146
+ "properties": {"var": {"type": "string"}, "path": {"type": "array", "items": {"type": "string"}}}}
147
+ ]}}}}
148
+ ]
149
+ },
150
+ "edge": {
151
+ "oneOf": [
152
+ {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "string"}},
153
+ {"type": "object", "additionalProperties": false, "required": ["from", "to"],
154
+ "properties": {"from": {"type": "string"}, "to": {"type": "string"},
155
+ "Type": {"type": "integer"}, "Config": {"type": "object"}, "Data": {}}}
156
+ ]
157
+ }
158
+ }
159
+ }
@@ -0,0 +1,218 @@
1
+ # Process (Flow) sub-tool
2
+
3
+ Build a runnable PROCESIO **process** from a compact config. The builder is
4
+ data-driven: every action is resolved against the live action catalog (231+
5
+ templates incl. custom/connector actions), so it covers **all** actions without
6
+ per-action code.
7
+
8
+ ## Config
9
+
10
+ ```json
11
+ {
12
+ "title": "Greet",
13
+ "variables": [
14
+ {"name": "name", "type": "string", "direction": "input", "required": true},
15
+ {"name": "greeting", "type": "string", "direction": "output"}
16
+ ],
17
+ "actions": [
18
+ {"id": "concat", "action": "Concatenate", "params": {
19
+ "List of strings to concatenate": {"template": "Hello <%0%>", "vars": ["name"]},
20
+ "Result": {"var": "greeting"}
21
+ }}
22
+ ],
23
+ "edges": [["start", "concat"], ["concat", "stop"]]
24
+ }
25
+ ```
26
+
27
+ - **variables** — `VariableDto`. `type` (primitive) or `model` (data-model name/id);
28
+ `direction` input(10)/process(20)/output(30); `isList`, `required`, `default`.
29
+ Input variables are the run payload; output variables come back in the run result.
30
+ - **actions** — each `{id, action, name?, params}`. `action` is a catalog template
31
+ **name** (or id). `params` maps a property **label** (or id) to a binding. Omit
32
+ `name` and the builder auto-labels the node from what it does — `GET /users` (Call
33
+ API), `For each items`, a `Node`'s leading `//` comment, `SELECT clients` (Execute
34
+ Query), `Generate <file>` — falling back to the template name; duplicates get a
35
+ ` 2`/` 3` suffix. The label is cosmetic (every reference is by id) and is
36
+ re-evaluated on every build/edit, so an explicit `name` is the way to pin one.
37
+ - **params binding** — one of:
38
+ - literal: `"hi"` / `{"value": 5}` → `Value=literal, Variable=[]`
39
+ - variable: `{"var": "name"}` → `Value="<%0%>"`, `Variable=[{0, <id>, attr}]`
40
+ (works for both input properties and **output capture** — bind a var to an
41
+ output-direction property to receive the action's result)
42
+ - variable + attribute path: `{"var": "obj", "path": ["field", "sub"]}`
43
+ - multi-var template: `{"template": "Hi <%0%> <%1%>", "vars": ["a", "b"]}`
44
+ - **edges** — `["fromId", "toId"]` (or `{from, to, Type, Config}` for branch ports).
45
+ `start`/`stop` are reserved ids (auto-injected). Omit `edges` for a linear chain.
46
+
47
+ ## API contract (verified live 2026-06-24, 4Export)
48
+
49
+ - **Validate@source:** `POST /api/Projects/validate` — empty body = valid (the oracle).
50
+ - **Create:** `POST /api/Projects` with the `FlowRequestDto`. Returns **empty**; the
51
+ flow persists with the **client-supplied `Id`** (unlike DataTypes, the server does
52
+ not assign it). `--dry-run` returns the DTO + the validate result.
53
+ - **Get:** `GET /api/Projects/{id}` → `{ "flow": ... }`.
54
+ - **Edit:** `PUT /api/Projects` (desired-state: the whole flow is rebuilt and replaced).
55
+ - **Run:** `POST /api/Projects/{id}/run?runSynchronous=true` body `{payload, connectionId:null}`
56
+ → `{instanceId, status, variable, error}`. `status==50` = STATUS_FINISH.
57
+
58
+ ## Advanced (Phase 2)
59
+
60
+ - **onError** — `{"id":"call","action":"Call API","params":{…},"onError":"handler"}`
61
+ routes the action's error port to `handler` and captures the error in an
62
+ ErrorDataModel variable. (Start/Stop/Join/ForEach have no error port.)
63
+ - **Join** — `{"id":"j","action":"Join"}` converges branches (accepts many inputs);
64
+ wire each branch into it, then `j`→stop. Pinned to the flow-control Join template.
65
+ - **Scripting** (verified live 2026-06-29, 4Export) — inputs inject by index `<%0%>`
66
+ (an array/object injects as a JSON literal, so `const h = <%0%>;` is valid). **A STRING
67
+ injects as a BARE token, not a quoted literal — wrap it yourself: `const s='<%0%>';`.
68
+ Without quotes you get `const s=SDSDX0GM6L;` → ReferenceError → the Node returns null
69
+ silently (verified 2026-07-22, Uranus 100 P1).**
70
+ **For arbitrary text (quotes, apostrophes, newlines, JSON, HTML) read it as a raw template
71
+ literal: `` const s = String.raw`<%0%>`; ``.** Single quotes break on the first apostrophe and
72
+ on any newline; `String.raw` keeps everything verbatim and only breaks on a backtick or `${`
73
+ in the value, so keep those out of strings you generate yourself. A string variable that holds
74
+ JSON text can be injected bare (`const o = <%0%>;`) and lands as an object literal (measured
75
+ 2026-10-17 building a multi-process demo: event batches, AI responses and email HTML).
76
+ **ALWAYS bind the scripting action's `Error` OUTPUT property to a (string) variable**
77
+ (`"Error": {"var": "myErr"}`, alongside `Single Result`/`List Result`) — a script failure
78
+ is captured there so it can be debugged. This is a STANDING directive for every Node /
79
+ Javascript / Python action. It is the Error OUTPUT, NOT the error PORT / `onError` branch
80
+ (that's a different, heavier convergence mechanism — do not use it just to capture an error).
81
+ Output conventions differ **per language**:
82
+ - **Javascript** — `setOutput(v)`; the single `Output` port wraps as `{"result": v}`.
83
+ `v` can be anything (incl. an array/object) but the consumer **must unwrap `.result`**.
84
+ `{"action":"Javascript","params":{"Code":{"template":"setOutput(<%0%>*2)","vars":["n"]},"Output":{"var":"out"}}}` (`out` typed `json`).
85
+ - **Node** — top-level **`return v;`** (NOT `setOutput`). Two clean (un-wrapped) output
86
+ ports: bind **`List Result`** for an array (`out` typed `json`+`isList:true`) or
87
+ **`Single Result`** for a scalar/object. **`Timeout` is required** (number, 60–300; a
88
+ missing/zero Timeout fails the run with `value ('00:00:00') must be greater than '00:00:00'`).
89
+ `{"action":"Node","params":{"Code":{"template":"return <%0%>.map(x=>x*2);","vars":["arr"]},"Timeout":60,"List Result":{"var":"out"}}}`.
90
+ → **Node is the way to emit a clean typed list/object** (e.g. a chat message array);
91
+ Javascript cannot (it always wraps). Python: `print(v)` → `Output` = `{"result":"<stdout>"}`.
92
+ - **docMap** (Generate Document) — `{"id":"gd","action":"Generate Document","params":{"Select Document Template":"<docId>","Save document as":"2","File Name":"out","HTML string":{"var":"html"}},"docMap":{"<docVarName>":"<procVarName>"}}`
93
+ maps document variables to process variables; run and read `html`/the file output.
94
+ - **Data Store node** (`{"action":"Data Store","params":{"Select Data Store":"<storeId>","Operation":"<op>", …}, "dsMap":{…}, "dsWhere":[…]}`) — row-level ops on a native Data Store. `Operation` is the option **value** (`SelectRows`/`InsertRows`/`UpdateRows`/`DeleteRows`), never the label. Verified live end-to-end (SELECT filters, INSERT writes):
95
+ - ⚠ **`Select Data Store` must be the store's GUID, never its name.** Unlike Query Store's
96
+ `{{ds:Name}}` token, the builder passes this value through unresolved. A NAME saves, passes the
97
+ FE gate, `POST /api/Projects/validate` and the `verify` parity audit, then every run fails at that
98
+ node with `Error while building input model: Invalid Data Store identifier: '<name>'` (measured
99
+ 2026-10). Read the id from `datastore-list` first.
100
+ - **`dsMap`** (Set Values, Insert/Update) — `{"<columnName>": binding}` per column. A bare string/number is a **LITERAL**; use `{var}` / `{var,path}` / `{value}` otherwise. The row targets its column **by NAME**. Supply EVERY required column (a missing required column fails at run: `required column '<c>' cannot be null`); system columns (`CreatedOn`/`UpdatedById`/…) are auto-filled. `InsertRows` writes **element 0 of a list only** — there is no native batch, so loop a `For Each` to write many rows.
101
+ - **`dsWhere`** (Where, Select/Update/Delete) — `[{"column","op","value"}]` ANDed, or `{"logic":"and|or","conditions":[…]}`. `op` is a decisional operator name (`equals`, `notEquals`, `contains`, `greaterThan`, …). The runtime value is an ARRAY of `InputDataStoreDecisional` (the SAME condition tree a rule `Decisional` uses — left operand is the column literal, right is the value/variable), **not** the REST filter group. A SELECT with no `dsWhere` returns ALL rows.
102
+ - **Query Store node** (`{"action":"Query Store","queryStore":{"sql":…,"params":{…},"timeout":…,"resultRows":…,"totalCount":…}}`) — a MySQL script over the workspace's Data Stores: one statement, or several separated by `;` that run as one batch with no transaction (since v3.0.0, 2026-10). At most one statement may return rows and a misspelled `@param` silently reads as NULL. User variables (`SET @v = …`) work, but comparing a text variable with a text column fails on a collation mismatch unless the comparison adds `COLLATE utf8mb4_0900_ai_ci` (measured 2026-10-22). Supported statements: SELECT/WITH/JOIN/GROUP BY plus INSERT/UPDATE/DELETE/REPLACE (reads AND writes). In `sql`, write a table as `{{ds:StoreNameOrId}}` and a column as `{{col:StoreNameOrId.ColNameOrId}}` (each becomes an id-bound chip resolved live from Data Store metadata, or pass a GUID), a parameter as `@name` (bound via `params`, injection-safe), and system columns (`CreatedOn`/`CreatedById`/…) by plain name. `params` maps each `@name` -> a binding (bare = LITERAL; `{var[,path]}`/`{value}` otherwise). `timeout` 60-1800 (default 1800). `resultRows` -> a **list-of-Json** variable, `totalCount` -> an **Integer** (rows returned, or rows affected for a write). INSERT/REPLACE must set `CreatedById`+`UpdatedById` (a user GUID param); a LIST param uses `JSON_CONTAINS(@l, JSON_QUOTE(col))` / `col MEMBER OF (CAST(@l AS JSON))`, never `IN (@l)`. Verified live end-to-end. Full contract: `PROCESIO-QUERY-STORE-NOTES.md`.
103
+ - **`Result Rows`** output must bind a **NON-LIST** variable (a `list`-typed var → HTTP 500 `Nullable object must have a value.`); it still returns the rows as a list. Bind `Affected Rows` (int) to read an insert/update/delete count. Managed with the `datastore-*` tool actions (create store, add/get/delete rows).
104
+ - **For Each (loop body)** — give a `For Each` action an `id`, then mark each body
105
+ action with `parent:"<forEachId>"`. The body actions are parented to the loop frame
106
+ (`ParentId` = the For-Each node) and the For-Each renders as an `area`. A `For Each`
107
+ **cannot be nested directly inside another `For Each`** — put a `Call Subprocess` (or
108
+ `Trigger Subprocess`) inside the loop and place the inner `For Each` in that subprocess.
109
+ `{"id":"loop","action":"For Each","params":{"For Each Item":{"var":"items"}}}` +
110
+ `{"id":"step","action":"Map Data","parent":"loop"}`.
111
+ - **Rule-based `Decisional`** (diamond, NOT the AI one) — `branches:[{name, to, when:[{left,
112
+ op, right?, logic?}]}, {to, default:true}]`. `op` is a STRING operator: `IS_NOT_EMPTY` /
113
+ `IS_EMPTY` (left only), `EQUALS` / `DOES_NOT_EQUAL`, `CONTAINS` / `DOES_NOT_CONTAIN`,
114
+ `GREATER_THAN[_OR_EQUAL_TO]`, `LESS_THAN[_OR_EQUAL_TO]`, `IS_TRUE` / `IS_FALSE`,
115
+ `BELONGS` / `DOES_NOT_BELONG`. Each case AND the default get a branch port; a case that
116
+ skips work should route to a `Join` that the happy path also reaches (Stop takes one input).
117
+ Example "do nothing unless cod arrives": `{"action":"Decisional","branches":[{"name":"Are
118
+ cod","to":"work","when":[{"left":{"var":"cod"},"op":"IS_NOT_EMPTY"}]},{"to":"join","default":true}]}`.
119
+ A non-default case with no `name` is auto-labelled from its condition (`amount > 1000`,
120
+ `cod present`); the AI variant is labelled from its natural-language `condition`. An
121
+ explicit `name` always wins, and the label is re-evaluated on every build/edit.
122
+ - **`Trigger Subprocess` = fire-and-forget** (vs `Call Subprocess` which waits). Same
123
+ `subprocess:{target,inputs,outputs}` shape; use it when the parent needn't wait for the
124
+ child (e.g. Drive upload / email / sheet-append side effects while the form already has
125
+ its generated file outputs). Outputs generally aren't captured (it doesn't await).
126
+ **Fire-and-forget hides failures: a broken/failing child never fails the parent run**, so
127
+ a headless `status==50` is NOT proof the child worked — verify a subprocess side effect
128
+ with `Call` (awaited) or by checking the effect directly.
129
+ - **Subprocess input mappings require the PARENT side to be a plain VARIABLE.** A subprocess
130
+ input row maps a parent variable id -> a subprocess input var. A raw **literal**
131
+ (`{"value": x}` or a bare scalar) or an **attribute-path** (`{"var": x, "path": [...]}`)
132
+ lands a non-variable token in the mapping's `process` field. PROCESIO tolerates that for
133
+ `Call` at runtime, but the live designer marks a **`Trigger Subprocess`** INVALID
134
+ ("Mapping of required subprocess variable (X) is missing"), which **blocks the launch**
135
+ (`statusCode 373`). The builder auto-fixes **literals**: each literal subprocess input is
136
+ hoisted into a synthetic `_sublitN` process variable (its DefaultValue = the literal, which
137
+ IS delivered at runtime) and the binding rewritten to that variable — so literal inputs are
138
+ safe for Trigger. **Attribute-paths are NOT auto-hoisted** (that needs a computed value, not
139
+ a default): to pass `someObj.attr` to a subprocess input, first compute it into a plain
140
+ variable (a `Node`) and map that variable — otherwise keep that call a `Call Subprocess`.
141
+ (Our static validators — `process-fe-validate`, `flow-lint`, `POST /api/Projects/validate`
142
+ — all MISS the literal/path Trigger defect; only the live Angular designer catches it.)
143
+ - **Call/Trigger Subprocess** — `subprocess:{target,inputs,outputs}` on a `Call
144
+ Subprocess` / `Trigger Subprocess` action. `target` = the subprocess flow GUID;
145
+ `inputs` maps `subInputVarId -> parentBinding` (sub-process variable ids are GUIDs,
146
+ e.g. from `read-flow-graph` on the target flow; the parent side resolves by name);
147
+ `outputs` maps `parentVarName -> subOutputVarId`.
148
+ `{"id":"call","action":"Call Subprocess","subprocess":{"target":"<flowGuid>",
149
+ "inputs":{"<subInVarGuid>":{"var":"x"}},"outputs":{"y":"<subOutVarGuid>"}}}`.
150
+ - **Canvas** is auto-laid-out left-to-right by the deterministic layout engine
151
+ (`tools/procesio/layout/`) as the final build step — happy path straight, branches
152
+ fanned, error handlers on a low lane, For-Each frames sized to their body.
153
+ - **Every save is arranged.** A create AND an edit lay the whole canvas out with the
154
+ default arrangement: the classic engine with clustering (long chains fold into shelves,
155
+ error/default branches drop perpendicular). The live-edit actions (`node-*`,
156
+ `sql-parameterize`, `rename-actions`, the FE fix) arrange through the same save path.
157
+ Opt out to protect a hand-arranged canvas: `process-edit --keep-layout` (= `relayout:
158
+ "new"`: existing actions keep their positions, only new ones are placed), or
159
+ `PROCESIO_KEEP_LAYOUT=1` for every save. `relayout`: `"all"` | `"none"` | `"new"` |
160
+ `[actionId,…]` | `{new:bool, actions:[…], edited:[…]}`.
161
+ - **Actions are named by what they do.** An explicit `name` wins; otherwise the builder
162
+ derives one: Query Store "Read OMN Units" / "Save to Leads" / "Update Settings" (from the
163
+ `{{ds:...}}` stores in its SQL), Node from its leading comment or else "Compute <output
164
+ variable>", Call API "GET /path", For Each "For each <list>", Execute Query "SELECT table". (For a one-off tidy of a specific action on an existing process, the
165
+ `layout-flow --only <id>` tool is the zero-ambiguity path — it uses real action ids.)
166
+
167
+ ## Invariants
168
+
169
+ - **Node shape is dictated by the action** (`CustomData.type` ← the catalog `shape`);
170
+ the builder never sets a shape per action. **Decisional fan-out is unlimited** (N cases
171
+ + an optional default). Both are locked by `tests/test_process_invariants.py`.
172
+
173
+ ## Gotchas
174
+
175
+ - Ports live on the **source** action's `Ports[]`; a `00000000…`→Start entry edge is required.
176
+ - `CustomData` is designer metadata (position/icon/config) — not load-bearing for
177
+ execution, but included so the flow opens cleanly in the UI.
178
+ - The bundled catalog (`dto/data/action_catalog.json`) is the offline default;
179
+ `prepare_ctx` fetches the live workspace catalog at build time for custom actions.
180
+ - **Call API version — use the unversioned `"Call API"` (the LATEST/live one).**
181
+ `/api/Actions` exposes `Call API` (`cd8bd0bc-…804de`), `Call API v1/v2/v3`; there is
182
+ **no `v4` action** — "Call API - v4" is only a palette FOLDER (the current generation),
183
+ and `v1/v2/v3` are frozen pins (base + v1 sit under a "To be decommissioned" folder).
184
+ Real production flows use the unversioned `Call API`; it has the richest outputs
185
+ (`Response Status` / `Response Body` / `Response Headers` / `Response File`, plus
186
+ `Verb`, `Endpoint`, `Request Parameters`, `Time Out`). Bind the credential to
187
+ `Select REST API credentials` (`{"credential":<gid>}`); the API-key credential
188
+ auto-injects its key. **Do NOT pin `Call API v3`** — its output props are named
189
+ `Status Output` / `Body Output` and it is an older generation. (Verified live 2026-07-14
190
+ building the google-search migration — see `[[aat-to-procesio-migration]]`.)
191
+
192
+ ## AI Decisional
193
+
194
+ Routes on natural-language conditions evaluated by an LLM. An action with `params` (the AI
195
+ config) + `branches` (each case's plain-English `condition` + target, plus one `default`).
196
+ Needs an **"AI OpenAI Compatible"** credential (create with `credential-create`).
197
+
198
+ ```jsonc
199
+ {"id": "ai", "action": "AI Decisional",
200
+ "params": {
201
+ "Select AI Configuration": "<credential id>",
202
+ "Model": "gpt-4o-mini",
203
+ "Endpoint": "1", // 1 = Chat Completions, 2 = Responses
204
+ "User Prompt": {"template": "Classify: <%0%>", "vars": ["ticket"]},
205
+ "Timeout (seconds)": 60,
206
+ "LLM Response": {"var": "aiResult"}, // OUTPUT — the structured decision
207
+ "Temperature": 0, "Top P": 1, "Max Output Tokens": 1024,
208
+ "Presence Penalty": 0, "Frequency Penalty": 0, "Seed": "", "Store": false},
209
+ "branches": [
210
+ {"name": "Refund", "to": "n1", "condition": "Is the customer asking for a refund?"},
211
+ {"name": "Bug", "to": "n2", "condition": "Does this describe a software bug?"},
212
+ {"to": "n3", "default": true}]}
213
+ ```
214
+
215
+ Each case `condition` is a plain-English sentence; the model picks the first true case.
216
+ `name` is the optional designer label (default `Case N`). Every case AND the default get their
217
+ own branch edge (the default carries the `isDefault` marker), so route each target to its own
218
+ successor — a `Stop` takes only ONE input; converge branches with a `Join` if they must merge.
@@ -0,0 +1,32 @@
1
+ {
2
+ "title": "Greet",
3
+ "description": "demo",
4
+ "variables": [
5
+ {
6
+ "name": "name",
7
+ "type": "string",
8
+ "direction": "input",
9
+ "required": true
10
+ },
11
+ {
12
+ "name": "greeting",
13
+ "type": "string",
14
+ "direction": "output"
15
+ }
16
+ ],
17
+ "actions": [
18
+ {
19
+ "id": "cc",
20
+ "action": "Concatenate",
21
+ "params": {
22
+ "Input String 1": {
23
+ "var": "name"
24
+ },
25
+ "Input String 2": " - processed",
26
+ "Result": {
27
+ "var": "greeting"
28
+ }
29
+ }
30
+ }
31
+ ]
32
+ }