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,226 @@
1
+ # PROCESIO API — live-validated auth & coverage notes
2
+
3
+ Recorded 2026-06-23 against the production Web API. No secrets in this file.
4
+
5
+ ## Hosts & infrastructure
6
+
7
+ | Host | Resolves to | TLS | Role | Reachable from here |
8
+ |------|-------------|-----|------|---------------------|
9
+ | `webapi.procesio.app` | 86.105.154.113 (Kong) | valid `*.procesio.app` | **Web API** (v1.19 Swagger, 295 ops) | ✅ yes |
10
+ | `auth.procesio.app` | 86.105.154.113 (Kong) | **self-signed Kong default** (`CN=localhost,O=Kong`) | Proxy/Auth API (login) | ❌ Kong "no route" / cert fail |
11
+ | `procesio.app` | nginx | valid | the Vue SPA (`VUE_APP_*` build env) | SPA only, `/api` = 405 |
12
+ | `procesio.com` | Cloudflare | valid | Next.js marketing site | n/a |
13
+
14
+ All `*.procesio.app` names (auth, app, identity, login, sso, …) resolve to the
15
+ same Kong node; only `webapi` has a configured cert+route. So the documented
16
+ auth host `auth.procesio.app` currently serves Kong's default cert and 404s its
17
+ own `/api/Authentication` and `/swagger` from the public edge.
18
+
19
+ ## Auth mode 1 — API key ✅ WORKING
20
+
21
+ Three request headers on every Web-API call:
22
+
23
+ ```
24
+ key: <api key name>
25
+ value: <api key value>
26
+ workspaceid: <workspace GUID> # required for workspace-scoped keys
27
+ ```
28
+
29
+ The Swagger security schemes define `key` (KeyName) and `value` (KeyValue); the
30
+ developer docs add `workspaceid`. Live results for the two showcase keys:
31
+
32
+ | Profile | key/value | workspaceid | `GET /api/Workspaces` |
33
+ |---------|-----------|-------------|------------------------|
34
+ | `personal` | valid | (none) | **200** — 146 workspaces |
35
+ | `ws-scoped` | valid | (none) | 401 Unauthorized |
36
+ | `ws-scoped` | valid | its own workspace GUID | **200** |
37
+ | `ws-scoped` | valid | a DIFFERENT workspace GUID | 401 |
38
+
39
+ **The `key` header is the key HANDLE, not its display name.** The API Keys page
40
+ shows each key with a human name (e.g. a short label) and a separate random
41
+ *handle* (~16 chars). Sending the display name as `key` returns **403
42
+ `Unauthorized`** on every endpoint; sending the handle returns 200. An empty
43
+ `key` returns 401 instead of 403, so a 403 with a valid value + workspaceid means
44
+ "wrong key name/handle", not "wrong workspace". Store the handle with
45
+ `add-credential --key <handle>`.
46
+
47
+ **Conclusion:** a personal/master key authenticates without `workspaceid`; a
48
+ workspace-scoped key **requires** the exact workspace GUID. Such a profile must be stored WITH its `workspace_id` to authenticate at all. Find any workspace's GUID with `list-workspaces` (`id`).
49
+
50
+ ### Endpoints exercised live with the `personal` key (all 200)
51
+ - `GET /api/Workspaces` → 146 workspaces
52
+ - `GET /api/Projects` → `{totalItemCount, pageNumber, pageItemCount, pageItems}`
53
+ - `GET /api/DataTypes` → same paginated envelope
54
+ - `GET /api/Actions` → `{actions, grouping, prototypes}`
55
+ - `GET /api/Credentials/types` → 33 connection types
56
+
57
+ `GET /api/ApiKey` returns 401 even for the personal key — that endpoint needs a
58
+ `workspaceid`-scoped context (use a workspace profile).
59
+
60
+ ## Auth mode 2 — username / password ✅ WORKING (cookie session)
61
+
62
+ Confirmed from a real login HAR (`procesio.app.har`) + live replay. The actual
63
+ flow is a **cookie session on the Web API**, NOT the OAuth/Bearer flow the docs
64
+ describe and NOT on `auth.procesio.app` (that host is obsolete — "auth moved to
65
+ webapi"):
66
+
67
+ ```
68
+ POST https://webapi.procesio.app/api/authentication # lowercase path
69
+ Content-Type: application/x-www-form-urlencoded
70
+ x-requested-by: playground-v1 # REQUIRED (omitting it = 407)
71
+ body: username=<>&password=<>&client_id=procesio-ui # form, no realm/grant_type/client_secret
72
+
73
+ 200 -> {"message":"Authentication successful"}
74
+ Set-Cookie: __Host-procesio.access (HttpOnly, Secure, Path=/)
75
+ Set-Cookie: __Host-procesio.refresh (HttpOnly, Secure, Path=/)
76
+ Response header: x-session-expires-at (exposed via Access-Control-Expose-Headers)
77
+ ```
78
+
79
+ Every subsequent Web-API call carries those two cookies plus
80
+ `x-requested-by: playground-v1` (browser uses `credentials: include`;
81
+ `Access-Control-Allow-Credentials: true`). Live-verified end to end:
82
+ `POST /api/authentication` → 200, then `GET /api/users/me` → 200 (real user
83
+ `facaf267-…`), `GET /api/workspaces` → 200.
84
+
85
+ The tool implements exactly this: `login` form-posts and caches the cookies in
86
+ Credential Manager (`token-<profile>`), `auth_headers` sends `Cookie` +
87
+ `x-requested-by`, and a 401 transparently re-logs-in. The `client_id` is
88
+ overridable per profile; the gateway id defaults to `playground-v1`
89
+ (`requested_by` profile field to override). No Bearer token, no `auth_base` is
90
+ involved any more for login.
91
+
92
+ > Earlier 407/401 dead-ends were because the documented flow (JSON body,
93
+ > realm/grant_type, `auth.procesio.app`) is obsolete: the gateway needs the
94
+ > form body **and** the `x-requested-by` header on **webapi**.
95
+
96
+ ### Session caching (Windows Credential Manager blob limit)
97
+
98
+ Windows Credential Manager rejects a blob over **2560 bytes** — `CredWrite` fails
99
+ with `WinError 1783 "stub received bad data"`. The trap: keyring stores the value
100
+ as **UTF-16LE**, so the real ceiling is **1280 CHARACTERS**, not 2560. Measured by
101
+ binary search on this machine: 1280 chars writes, 1281 fails. Budget in
102
+ characters and halve the byte figure, or you will conclude a payload fits when it
103
+ does not — the two cookies are ~1700 chars, which "fits" 2560 bytes on paper and
104
+ is rejected in practice.
105
+
106
+ ### The login 401 is GENERIC — it never tells you which half is wrong
107
+
108
+ A rejected form login answers:
109
+
110
+ ```
111
+ 401 "Authentication token is null!"
112
+ ```
113
+
114
+ Verified by probing the endpoint with an account that does not exist: the body is
115
+ byte-identical to a real account with a wrong password. So the string proves only
116
+ that the gateway accepted the REQUEST shape (path, form body, `x-requested-by`)
117
+ and refused the CREDENTIALS. It does not distinguish, and must not be read as, a
118
+ missing/expired token despite what it says — nothing about a cached session is
119
+ involved on a login call.
120
+
121
+ Diagnose by elimination, in this order (cheapest first):
122
+ 1. **Wrong environment.** A profile is bound to one environment; an account that
123
+ lives on QA/DEV (or a client installation) simply does not exist on PROD and is
124
+ rejected exactly like a bad password. Match the profile's environment to the
125
+ host the user actually logs into in the browser.
126
+ 2. **Typo at the hidden prompt.** getpass echoes nothing, and `Ctrl+V` does not
127
+ paste in a Windows console — a truncated paste looks like a wrong password.
128
+ 3. **SSO account.** An account that reaches the platform through an external IdP
129
+ has no platform-side password to submit; the redirect-based SSO flow is not
130
+ implemented here, so use an api-key profile instead.
131
+
132
+ Rule of thumb for any gateway that returns one opaque message for every auth
133
+ failure: probe it once with a knowingly invalid identity. If the response matches
134
+ what the user is getting, the message carries no information and the fault must be
135
+ located by varying one input at a time.
136
+
137
+ ### Storing a credential needs the runner bypassed
138
+
139
+ `add-credential` deliberately prompts for the secret instead of taking it on the
140
+ command line (flags leak into shell history and process listings). But run-tool
141
+ routes tools through the persistent runner by default, so the tool runs in a
142
+ daemon worker with no TTY, `sys.stdin.isatty()` is False, and the prompt is
143
+ unreachable — even though the human IS at a console. Bypass it for that one call:
144
+
145
+ ```powershell
146
+ $env:AAT_RUNNER_DIRECT = "1"
147
+ python scripts/run-tool.py procesio add-credential --name <profile> --type userpass --username <you> --make-default
148
+ Remove-Item Env:AAT_RUNNER_DIRECT
149
+ ```
150
+
151
+ Generalizes to every framework action that prompts for a secret. See
152
+ `tools/_lib/toolrunner/TOOLRUNNER-NOTES.md` ("Limitations").
153
+
154
+ ### The dashboard's secret list is not where a profile is added
155
+
156
+ A tool that keeps its OWN multi-profile store shows only its bookkeeping secrets
157
+ in the dashboard's generic per-tool secret list — here `credentials` (the
158
+ non-secret JSON index of profile names) and `form-code-key` (unrelated to login).
159
+ Neither is the credential a user is hunting for, and hand-writing the index
160
+ desyncs it from the real `cred-<name>` entries. Profiles are added through the
161
+ tool's own action only; the dashboard panel manages environments and
162
+ set-default/remove for profiles that already exist.
163
+
164
+ The two JWTs therefore cannot share one entry, and both must survive (the access
165
+ cookie authenticates; the refresh cookie is what renews the session without the
166
+ password). They get **one entry each** — `token-<name>` for the access cookie
167
+ plus its expiry, `refresh-<name>` for the refresh cookie. At ~961 and ~733 chars
168
+ each fits comfortably.
169
+
170
+ So the tool: (1) keeps an **in-process** cookie cache (always works, avoids
171
+ re-login within one CLI invocation), and (2) best-effort persists both entries
172
+ independently — a failed refresh write only costs the next process a full login,
173
+ it does not break the access cache. If a write fails it logs to stderr and
174
+ re-logs-in next invocation. Never let a token cache write crash a request.
175
+
176
+ ### Renewing a session — refresh, don't re-login
177
+
178
+ The access cookie is a **~30-minute JWT**; the refresh cookie outlives it. A
179
+ browser never notices, because for cookie/BFF clients the gateway refreshes
180
+ behind a `307` redirect. A programmatic cookie client gets no such help and must
181
+ ask explicitly:
182
+
183
+ ```
184
+ POST {web_base}/api/Authentication/refreshToken
185
+ Content-Type: application/x-www-form-urlencoded
186
+ x-requested-by: playground-v1
187
+ body: refresh_token=<value of __Host-procesio.refresh>&client_id=procesio-ui
188
+ ```
189
+
190
+ → `200 {"message":"Token refreshed successfully"}` plus a fresh **pair** of
191
+ Set-Cookie headers. Verified live: the refreshed access cookie authenticates an
192
+ ordinary Web-API call. This is why the refresh cookie must be cached — without
193
+ it the only way to renew is to re-send the account password every half hour.
194
+
195
+ Resolution order is therefore: in-process cache → persistent cache → **refresh**
196
+ → full login. A refresh token that is dead by its own `exp` is skipped rather
197
+ than spending a round-trip proving it.
198
+
199
+ ### Which status means "your session is stale"
200
+
201
+ Measured against the prod gateway with a bad access cookie:
202
+
203
+ | Cookie sent | Status |
204
+ | --- | --- |
205
+ | valid | `200` |
206
+ | present but rejected (bad/expired token) | **`403`** |
207
+ | present but unparseable | `401` |
208
+ | absent entirely | `401` |
209
+
210
+ The trap: a **rejected session comes back 403, not 401**. A client that
211
+ re-authenticates only on 401 surfaces a stale session as a permission error the
212
+ user cannot act on. Treat both as re-authable; make it one-shot so a genuine
213
+ permission denial still terminates. The cost of including 403 is one cheap
214
+ refresh round-trip when the denial was real.
215
+
216
+ ### Bearer (token-in-body) is also available
217
+
218
+ Omitting `x-requested-by` on the login POST switches the gateway out of cookie/BFF
219
+ mode: the 200 body then carries `access_token` / `refresh_token` / `expires_in`
220
+ (1800) instead of setting cookies, and `Authorization: Bearer <access_token>`
221
+ authenticates Web-API calls normally (verified live). PROCESIO's own API
222
+ documentation recommends this style for integrations and reserves the cookie path
223
+ for the official SPA. This tool still uses the cookie flow — switching is a
224
+ migration to make deliberately, not a bug fix — but the option is real and
225
+ carries no extra dependency.
226
+
@@ -0,0 +1,183 @@
1
+ # Building a PROCESIO card end to end — findings from the build loop
2
+
3
+ Mechanics learned while shipping a two-process card with forms, a scripted engine and an
4
+ oracle-checked acceptance pass. These are the things that cost time and were not already
5
+ written down. Companions: [PROCESIO-RECONCILIATION-PATTERNS.md](PROCESIO-RECONCILIATION-PATTERNS.md)
6
+ (what to build), [PROCESIO-FORM-API-HANG-NOTE.md](PROCESIO-FORM-API-HANG-NOTE.md) (the form
7
+ read hang), [PROCESIO-NODE-MODULE-WHITELIST.md](PROCESIO-NODE-MODULE-WHITELIST.md).
8
+
9
+ ## 1. Scale every factor KIND separately, not just money
10
+
11
+ "Integer minor units for money" is necessary and not sufficient. The moment a figure is
12
+ produced by **multiplying two configured values**, each needs its own integer scale, or the
13
+ product re-introduces the float error the minor-unit rule exists to remove.
14
+
15
+ A default factor times a country multiplier is the canonical case: `11.2 * 1.15` evaluates
16
+ to `12.879999999999999`, and any downstream exact-equality assertion then fails on a figure
17
+ that is arithmetically right. Give the multiplier its own scale — **basis points, x10000** —
18
+ and do the multiply as integers with a rounded integer divide:
19
+
20
+ ```js
21
+ var factorMilli = divRound(baseMilli * markupBp, 10000); // 11200 * 11500 / 10000 = 12880
22
+ function divRound(a, b) { return Math.floor((a + Math.floor(b / 2)) / b); } // positive only
23
+ ```
24
+
25
+ Pick the scale from the value's own precision (quantities in thousandths, rates in
26
+ thousandths, percentages and multipliers in basis points, money in cents), multiply into a
27
+ wider unit, and divide only at render. Check the widest product against `2^53` and put a row
28
+ limit in front of it, so a file large enough to break the assumption is refused rather than
29
+ silently wrong.
30
+
31
+ ## 2. Never let a generated script's escape sequences cross a shell layer
32
+
33
+ Generating Node source from a script is the right way to keep the deployed code identical to
34
+ the locally tested code. But a `\n` written inside a JS **string literal** can be collapsed
35
+ into a real newline by an intervening shell, heredoc, or quoting layer. The result is a
36
+ literal that ends mid-string, and the failure surfaces as `SyntaxError: unexpected end of
37
+ string` at a line number that looks unrelated to the edit.
38
+
39
+ **Rule:** write the generator as a **file** and execute the file — never pipe the generator
40
+ source through a shell heredoc. Inside the generator, represent the escape as a token and
41
+ substitute it at write time, so no layer can interpret it:
42
+
43
+ ```python
44
+ NL = chr(92) + "n" # the two characters \ and n, as JS source
45
+ src = template.replace("~NL~", NL)
46
+ assert "~NL~" not in src
47
+ ```
48
+
49
+ Then assert the property you care about after writing: the file should contain **zero raw
50
+ newlines inside string literals**, which a grep for the escape sequence confirms cheaply.
51
+
52
+ ## 3. A date control submits a LOCALISED display value, not an ISO date
53
+
54
+ A `datetime-input` bound to a string process variable does not necessarily deliver
55
+ `YYYY-MM-DD`. Given an ISO default it can render and submit a localised display value
56
+ (`"1 July 2026, 04:00"` — note the time, which is a timezone offset applied to midnight).
57
+ An engine that validates `^\d{4}-\d{2}-\d{2}$` then rejects a period the user set correctly.
58
+
59
+ Normalise defensively at the top of the engine: accept an ISO date, an ISO datetime, the
60
+ `DD/MM/YYYY` display form, and fall back to date parsing for anything else — reading the
61
+ result back in **UTC**, so an offset cannot shift the day across a period boundary. Keep a
62
+ clear fatal for what still will not parse, quoting the raw value.
63
+
64
+ This class of defect is invisible to an API-side test, because a programmatic submission
65
+ passes the payload directly and never exercises the control's own formatting. Only opening
66
+ the rendered form shows it.
67
+
68
+ ## 4. The same flow comes back in two different casings
69
+
70
+ `GET /api/Projects/{id}` returns the flow **camelCase** (`variables`, `actions`, `name`,
71
+ `id`, `type`). The Transport **export** (`POST /api/Transport/export-entities`) returns the
72
+ same structure **PascalCase** (`Variables`, `Actions`, `Name`, `Id`, `Type`). Any tool that
73
+ reads a flow from both sources must accept either; a checker written against one silently
74
+ sees zero variables from the other and reports a clean pass over nothing.
75
+
76
+ ## 5. Form event map rows are `left` / `right`, and `right` must have four segments
77
+
78
+ In the built form DTO, an `inputMap` / `outputMap` row is `{id, left, right}`:
79
+
80
+ - `left` — the **process variable GUID**
81
+ - `right` — the **form value path**, `formId.FIELDS_NS.elementId.valueConfigId`
82
+
83
+ A row whose `right` is still a raw field **name** is accepted by the API, renders blank in
84
+ the designer, and never carries a value. Assert `right.split(".")` has **exactly four**
85
+ GUID-shaped segments for every row, and that `left` resolves to a real variable of the right
86
+ direction (inputs to input variables, outputs to output variables). This is cheap, reads
87
+ only the DTO, and catches the whole class before a single run.
88
+
89
+ ## 6. A file output and a JSON output look identical in a run result
90
+
91
+ In `run-process-with-file` output, a File variable arrives as an object
92
+ (`{id, name, mimeType, size, path, hash}`) — and so does a `json` machine-channel variable.
93
+ "Count the object-valued outputs" is therefore not a way to count produced artefacts, and an
94
+ assertion written that way fails the moment a structured output is added. Assert the file
95
+ variables **by name**, and check `size` is present and non-zero.
96
+
97
+ ## 7. Form-level CSS is NOT a low-risk surface. A bad `Data.code` blob kills the form
98
+
99
+ Form-level CSS and JavaScript share one storage slot: `Data.code`, AES-encrypted with the
100
+ `procesio / form-code-key` passphrase. It is tempting to treat CSS as the safe half of that
101
+ pair, on the reasoning that the worst a stylesheet can do is look wrong. That is not the
102
+ failure mode.
103
+
104
+ If the public renderer cannot decrypt the blob it throws **`Malformed UTF-8 data`** out of
105
+ `FormWrapper.component` and **never mounts the form at all** — a spinner forever, every
106
+ control gone, the page unusable. Not "unstyled": absent. A form created with `code: ""`
107
+ renders perfectly; the same form with a `css` string can be dead on arrival, so this is
108
+ easy to introduce while believing you took the cautious option.
109
+
110
+ Combined with the `form-get` hang (every read-modify-write form action inherits it, so a
111
+ form gets ONE authoring pass over the API), the rule is:
112
+
113
+ > **Do not send `css` or `javascript` on a form you cannot afford to rebuild.** Express
114
+ > styling through `theme` and per-element `style` configs, which are ordinary DTO fields
115
+ > and cannot break the render.
116
+
117
+ Diagnose it from the browser console, not the API: creation returns a normal id and
118
+ `form-list` shows the form present and published. Only the console says why the page is
119
+ blank.
120
+
121
+ **What per-element `style` can and cannot reach.** It does apply: a `--c-input-background`
122
+ set on a textarea resolves on `.pds-c-input-group--wrapper` at runtime. But the design
123
+ system paints that wrapper's `background-color` from its own rule, so the variable is
124
+ plumbed and ignored, and the pane stays white. Colour vars must reference a theme variable
125
+ rather than a hex, so redefining a neutral in `theme` and pointing the element style at it
126
+ is the legal path — it just will not repaint a surface the design system hard-codes. Verify
127
+ the computed `background-color`, not the custom property, before believing a colour landed.
128
+
129
+ ## 8. Prove the engine off-platform, in a real JS engine
130
+
131
+ The Node sources can be exercised locally under an embedded JS engine (Duktape via `dukpy`
132
+ installs from a wheel on Windows; a native-build engine such as `quickjs` needs a C++
133
+ toolchain and is not worth the dependency). PROCESIO wraps a Node action's code in a
134
+ function, so top-level `return` is legal there; locally, wrap it explicitly:
135
+
136
+ ```python
137
+ dukpy.evaljs("(function(){\n" + src + "\n})()")
138
+ ```
139
+
140
+ Duktape is ES5.1, which is a useful constraint rather than a limitation: writing the engine
141
+ in ES5 keeps it inside what the sandbox reliably supports, and every logic defect surfaces
142
+ in a sub-second local run instead of a multi-minute platform round trip. Feed the same
143
+ source files to both, so what runs on the platform is byte-for-byte what was proved off it.
144
+
145
+ Assert the OUTPUT, not the call: open a generated workbook with a real reader and read the
146
+ figure back out of the file. "It returned base64" and "it produced a workbook" are different
147
+ claims, and only the second one is worth making.
148
+
149
+ ## 9. Assembling a file-in / file-out card through the builder (the renderer wiring)
150
+
151
+ A reconciliation-style card is `File(s) in -> engine -> report renderers -> File(s) out`. Every
152
+ piece is a native action the **compact builder can wire by property label** — you do not splice
153
+ raw DTO. The labels (from the live action catalog `configuration[].settings[]`, which the builder's
154
+ `_property_index` reads, recursing into `side-pannel` nested `value` lists):
155
+
156
+ - **File To Base64** — `File` (input file var) → `Base64 Content` (output string var).
157
+ - **String To Base64** — `Input String` (input) → `Result` (output string var).
158
+ - **HTML To PDF** — a **side-panel** `Configure` holding `HTML string` (the HTML var), `File Name`
159
+ (a literal, e.g. `Bank-Reconciliation.pdf`) and `File Output` (the output File var).
160
+ - **Base64 To File** — `Base64 String` (the base64 var), `File Name` (a literal) and `File` (the
161
+ output File var).
162
+
163
+ ⚠ **A File variable is declared with `model:<File datatype GUID 10c6ac59-…-121212121219>`, NOT
164
+ `type:"file"`** — the process-create schema's `type` enum has no `file` (it 400s: "'file' is not one
165
+ of [...]"). Same pattern as a Guid var (`model:<Guid GUID>`). The engine and the report builders are
166
+ ordinary `Node` actions (`Code:{template,vars}`); a downstream Node reads an upstream Node's output
167
+ by binding that output var as its input (`vars:["recon"]`). A linear `edges` chain is enough;
168
+ Start/Stop auto-inject.
169
+
170
+ **Run it with files, and prove the files, not the run.** `run-process-with-file --id <pid> --file
171
+ StatementFile=stmt.csv --file LedgerFile=ledg.csv --payload '{...non-file inputs...}'` publishes →
172
+ uploads bytes → launches → polls. The File outputs arrive as objects `{id,name,path,size,hash}`;
173
+ `file-download --from-run <result.json> --var ExcelFile --out out.xlsx` fetches one. Judge on
174
+ opening the file (openpyxl sheets + values; the `%PDF-` magic), never on status 50 — a clean 50
175
+ returning a null File is this platform's failure signature (Rule 8).
176
+
177
+ **Cross-workspace import is CONDITIONAL, not absolute.** The API-NOTES record `Transport/import`
178
+ answering `403 "workspace migration"`; that is the RELOCATION case. `import --file <pack>
179
+ --workspace-id <clean-different-ws>` into a workspace where the ids do not already exist **succeeds**
180
+ (measured: PL-120 B-022, PL-004 B-023) and preserves the flow id — so the round-trip proof (import
181
+ into a clean different ws, run there, judge on the produced files) is achievable over the API for a
182
+ process-bearing pack. Forms still need the designer (a form-bearing pack is not API-installable);
183
+ the process is the marketplace artefact, the intake form is the designer front door.
@@ -0,0 +1,141 @@
1
+ # PROCESIO connectors & platform actions - what the tool resolves live vs what it bundles
2
+
3
+ Scope: how PROCESIO's built-in **connectors** and **platform actions** reach this tool,
4
+ and the specific ones added in the Aug-Sep 2026 wave and in v3.0.0 (2026-10). Companion to
5
+ `PROCESIO-CUSTOM-ACTION-NOTES.md` (which is about *building* NuGet custom actions) and
6
+ `PROCESIO-SQL-ACTIONS-NOTES.md`.
7
+
8
+ ## The one rule that governs "is a new action supported?"
9
+
10
+ The process builder resolves the **action catalog live** at build time
11
+ (`dto/process/builder.py` `prepare_ctx` → `GET /api/Actions?getFullAction=true` on the
12
+ target workspace) and only falls back to the bundled `dto/data/action_catalog.json`
13
+ when the live fetch is slow or fails. Credential types are likewise live-resolved
14
+ (`GET /api/Credentials/types`). **Consequence:** a new platform action or a new
15
+ credential type works at runtime the moment PROCESIO ships it - no tool change. What
16
+ goes stale is the *offline* bundle (the fallback) and the human notes.
17
+
18
+ Refresh the offline bundle with `dto/data/_refresh.py`:
19
+
20
+ ```
21
+ python tools/procesio/dto/data/_refresh.py --profile <name> --workspace-id <guid> --procesio-only # report
22
+ python tools/procesio/dto/data/_refresh.py --profile <name> --workspace-id <guid> --procesio-only --write # apply
23
+ ```
24
+
25
+ Always pass **`--procesio-only`** when the refresh runs against a real workspace: it
26
+ keeps only `isProcesioAction=true` entries, so that workspace's own uploaded custom
27
+ actions never leak into the platform bundle. It is additive by default;
28
+ `--replace-existing` also updates the shape of actions already bundled (diff before
29
+ committing - an in-place shape change silently alters every process the builder emits).
30
+
31
+ ## Three action kinds (do not conflate)
32
+
33
+ `RunActionDto.ActionType` has three values:
34
+
35
+ - **Platform (built-in) action** - seeded in the DB, `isProcesioAction=true`, global to
36
+ every workspace. Uploaded by admins via `POST /api/PlatformAction`. This is what the
37
+ catalog bundle mirrors. Connectors like Prelude/Redis/Data Store are platform actions.
38
+ - **Custom action** - a developer's NuGet package implementing `IAction`, uploaded per
39
+ workspace via `POST /api/Actions` (multipart), `isProcesioAction=false`, run by the
40
+ Action-Execution service. Namespace blacklist on upload (Reflection, Diagnostics.Process,
41
+ IO, InteropServices, Loader, …).
42
+ - **Connector action** - the *design-time* execution of a connector's property/event to
43
+ populate dynamic UI (chained dropdowns, previews): `POST /api/Actions/event`
44
+ (`ConnectorActionRequestDto`), async, results over SignalR (`ConnectionId`) or polled
45
+ at `GET /api/Actions/event/{id}`. A built-in connector (e.g. Data Store) exposes
46
+ `OnReady`/`OnChange` handlers with `OutputTarget.Options` to fill selects.
47
+
48
+ ## New/relevant `FeComponentType` values (custom-action / connector control types)
49
+
50
+ Backend enum `Action-Core/.../Utils/FeComponentType.cs`; serialized lowercase-hyphenated
51
+ (e.g. `Data_Store_Decisional` → `data-store-decisional`). Do not confuse with the FE
52
+ form-element enum `ElementType`.
53
+
54
+ - `Ai_Decisional_Case = 44`, `Credentials_Ai = 45`
55
+ - `Data_Store_Mapper = 46`, `Data_Store_Decisional = 47`
56
+ - `Auto = 102` (Action-Core 2.x, v3.0.0); also new: `FeTextFormat.DATASTORE = 8`
57
+ - (also in play: `Map_Parameters = 43`, `Credentials_Db = 32`, `Document_Mapper = 38`,
58
+ `Document_Select = 39`, `Form_Template = 42`)
59
+
60
+ ## The connectors/actions added in the Aug-Sep 2026 wave (all prod-verified)
61
+
62
+ - **Prelude** connector (`isProcesioAction=true`) - phone verification + lookup via
63
+ prelude.so. Credential is a **REST_API/Bearer** derived template ("REST API/ Prelude",
64
+ base `https://platform.prelude.so`); pick the operation via a `SelectedAction`/
65
+ `Operation` select. Inputs vary by operation (Target, TargetType, Code, Method,
66
+ PreferredChannel, SenderId, TemplateId, Variables, Locale, CodeSize, ForceChallenge,
67
+ CallbackUrl, CorrelationId, IncludeCallerName); output `Result`/`Status`/
68
+ `VerificationId`/`RequestId`. Confirms the old "Prelude" worked-example in
69
+ `PROCESIO-API-NOTES.md` is now a **real shipped connector**, not just an illustration.
70
+ - **Redis** connector + Redis credential - code merged (Web-Api #1452 validation +
71
+ test client, Process-Execution #250), but **NOT yet activated on PROD**: as of
72
+ 2026-09-21 `Redis` is still absent from `GET /api/Credentials/types` (35 types, no
73
+ Redis), so a Redis credential cannot be created there yet. Contract is documented in
74
+ `dto/credential/description.md`; treat as shipped-not-activated until it appears live.
75
+ Still NOT activated at the v3.0.0 release (2026-10-21): `Redis` is absent from
76
+ `GET /api/Credentials/types`.
77
+ - **Query Store** action (`DataStoreQueryAction`) - query a data store from a process.
78
+ Input `Query` in a **code-editor whose text format is `datastore`** (the new format,
79
+ alongside `sql`/`python`/`ruby`), plus `Parameters` (map-parameters) and `Timeout`
80
+ (60-1800); output `ResultRows` (datatype) + `TotalCount`. This is the read path a
81
+ process uses; the interactive rows API is the `DataStore` REST surface the tool
82
+ already maps. Since v3.0.0 (2026-10) `Query` is a `;`-separated script: no transaction, at
83
+ most one row-returning statement (error 2003 otherwise, raised after the script ran), user
84
+ variables allowed, a misspelled `@param` reads as NULL silently. Full contract in
85
+ `PROCESIO-QUERY-STORE-NOTES.md`.
86
+ - **CURL** action (`CurlAction`) - `CurlCommand` (code-editor) in → `Result` (datatype),
87
+ `Status` (number), `Error`. "Run curl commands."
88
+ - **Data Store** connector in the process designer - operations
89
+ `SelectAll/SelectWhere/InsertRows/UpdateRows/DeleteRows` (sent by NAME), a WHERE tree
90
+ using the 21-value `QueryOperators` vocabulary (superset of the REST filter operators;
91
+ the tool already carries 0-20 in `handlers/datastore_ops.py`), and the
92
+ `Data_Store_Mapper`/`Data_Store_Decisional` control types above. In the FORM designer,
93
+ a data store is not an element - it is an event action
94
+ `RUN_DATA_STORE_OPERATION` (config `{dataStoreId, operation READ|ADD|UPDATE|DELETE,
95
+ inputMap[], outputMap[]}`) attachable to any element's `field-events`.
96
+
97
+ ## The connectors/actions added in v3.0.0 (2026-10, prod-verified)
98
+
99
+ - **GUID Converter** (Utilitary, listed after Generate GUID), actionId
100
+ `77f61c6d-0000-0200-0000-00000000b001`. Input `Input` (required) plus `InputFormat`, a select
101
+ of AutoDetect / Standard / Hex / HexBigEndian / Number / Base64 / Base64DotNet. Outputs
102
+ Standard, Guid, Hex, HexBigEndian, Number, Base64, Base64DotNet. It converts between the
103
+ standard text form, the `0x` hex literal PROCESIO stores for a Data Store Guid column
104
+ (`BINARY(16)`, the `Hex` output), a decimal number and Base64, in both byte orders.
105
+ AutoDetect refuses ambiguous input (codes 1009-1012), so name the format when it is known.
106
+ See the Guid sections of `PROCESIO-QUERY-STORE-NOTES.md` for why the byte order matters.
107
+ - **Azure Storage** connector, id `83838383-0000-0000-0000-aaaaaaaaaaaa`. Inputs Credentials,
108
+ Resource (Blob / Container), Operation (14 operations, e.g. Upload blob, List blobs by
109
+ prefix, Copy blob, Create container), Container, BlobName, InputFile, Prefix, BlobNames,
110
+ DestinationContainer, DestinationBlobName; outputs Result, UploadedBlobName, OutputFile,
111
+ Names, Details.
112
+ - **"Azure Storage Account" credential**, a new ROOT credential type `AZURE_STORAGE` (= 10),
113
+ live in `GET /api/Credentials/types`. Fields (`be_id`): `AuthenticationType` (radio; the
114
+ option values are GUIDs, their `be_value`s are `SharedKey` / `ServicePrincipal`),
115
+ `AccountName`, `AccountKey`, `TenantId`, `ClientId`, `ClientSecret`, `BlobEndpoint`. It is
116
+ NOT the older derived template "OAuth2 (REST API) / Azure Storage"
117
+ (`REST_API_OAUTH_PREDEFINED`). Contract in `dto/credential/description.md`.
118
+ - **Call Subprocess** gained two engine-written OUTPUT settings: "Call subprocess child
119
+ instance id" (`...a03fe3`) and "Call subprocess child instance id list" (`...a03fe4`). They
120
+ fill `Auto` (type 50) variables on the INSTANCE, named `{ActionName}_{PropertyName}` (e.g.
121
+ `Call_Subprocess_ChildInstanceId`). **Fixed in prod 2026-10-22:** both settings now come
122
+ back as type `auto` and their instance variables as `Auto` (type 50). The earlier state is
123
+ gone (2026-10-21 the settings were still served `ignore` and the variables typed 20, which
124
+ is why the old advice was to read them by name — no longer needed). The started-flow slot
125
+ (`...a03fe2`) stays type `ignore`; the builder treats `ignore` and `auto` alike and finds it
126
+ by id, so the fix needs no builder change (`_HIDDEN_SETTING_TYPES` already covers both). The
127
+ offline bundle (`dto/data/action_catalog.json`) was corrected to type the two slots `auto` to
128
+ match. Auto variables are engine-owned: read-only, always returned on instance / history /
129
+ archive reads, and kept through data-retention cleanup. The child instance ids are also kept
130
+ after the parent resumes.
131
+ - **Query Store** became multi-statement (see its entry above).
132
+
133
+ The offline bundle was refreshed for this wave on 2026-10-21 (238 actions: GUID Converter and
134
+ Azure Storage added, Call Subprocess and Query Store replaced).
135
+
136
+ ## Scripting languages
137
+
138
+ Python, Javascript, Node, **Ruby**, and **CURL** - no C# scripting action (C# is the
139
+ custom-action NuGet path). Each takes a `Code` string and returns an output; Node adds a
140
+ `Timeout` (60-300) and a `Stdout` output (console.log capture, added 2026-09). See
141
+ `PROCESIO-NODE-MODULE-WHITELIST.md` / `PROCESIO-PYTHON-ACTION-NOTES.md` for the sandbox.