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,594 @@
1
+ # Phase 4 — end-to-end use case (AAT_ "Company Intelligence Brief")
2
+
3
+ A full working demo in workspace **4Export** (`3fd85e9d-121e-415b-877f-f488cd685ce3`)
4
+ exercising every DTO sub-tool: 2 data models, 2 credentials, 1 document, 2 processes,
5
+ 1 webhook, 1 form. All resources prefixed `AAT_`. Built entirely programmatically.
6
+
7
+ ## Resource ids (4Export)
8
+
9
+ | Resource | id |
10
+ |---|---|
11
+ | Data model AAT_SearchHit | `f675610e-8ac9-40a3-a909-e963841b72c9` |
12
+ | Data model AAT_SearchReport | `cfa383c7-1a36-410b-852e-bcc57c53a614` |
13
+ | Credential AAT_GoogleSearch (REST API) | `77b6f02b-d111-4ff4-b67a-264b571b9957` |
14
+ | Credential AAT_SendGrid (SMTP) | `7b38b993-9141-4533-995d-44d73d9932fb` |
15
+ | Document AAT_CompanyBrief | `503f33b4-8653-497d-8f77-ae52d909cae1` |
16
+ | Webhook AAT_BriefRequested | `9b700656-4619-41e1-96ce-4be561fd7bc1` (model `9b3e2e82-b8c0-4a63-be98-4098e3e17d7f`, attr searchTerm `18c90bb9-391d-4853-a843-658afebd27a9`) |
17
+ | Process AAT_Process_Notify | `564d2934-ffb2-44a5-8d5e-4e0979b3ccaa` |
18
+
19
+ ## Learnings (verified live 2026-06-24)
20
+
21
+ 1. **Webhook -> process variable binding maps the WHOLE body, not a field.**
22
+ `WebhookVariables` is exactly `{VariableId, VariableType}` where VariableType
23
+ 1=header, 2=query, 3=body (confirmed against real exported flows). There is NO
24
+ per-field mapping. The body (type 3) must bind to a **model-typed** process
25
+ variable whose DataType is the webhook's generated data model — then downstream
26
+ actions read its attributes. Binding the body to a *primitive* (string) variable
27
+ dumps the raw JSON (`{ "searchTerm": "..." }`) into it. Real exports confirm the
28
+ body var is model-typed (Type=10 input, DataType = a custom model id).
29
+
30
+ 2. **Builder enhancement — attribute paths inside text templates.** To embed a
31
+ model attribute into a text field (email Subject = "Brief for <%0%> is ready"
32
+ where the value is `payload.searchTerm`), the process builder's `{template,vars}`
33
+ binding now accepts `vars` items as either a name string OR `{"var": name,
34
+ "path": ["attrIdOrName"]}`. `_make_parameter` builds the VariableAttributeDto
35
+ chain; `config.schema.json` `binding.template.vars.items` widened to `anyOf
36
+ [string, {var,path}]`. Without this, model attributes could not be placed into
37
+ text. (attr_index isn't pre-populated for webhook models, so pass the attribute
38
+ **id** in `path`.)
39
+
40
+ 3. **REST API key credential — key as a query param.** For Google Custom Search
41
+ (needs `?key=...&cx=...`): REST API credential, Authentication method = "API key
42
+ authentication", Key=`key`, Value=`<apikey>`, **Header(`10101010-0001-0009`)=false,
43
+ Query Parameters(`10101010-0001-0010`)=true**. `/api/Credentials/test` with Test
44
+ endpoint `?cx=722c82f83dd77489f&q=...` returned a real `customsearch#search`
45
+ body -> placement confirmed. The action then adds `cx`+`q` query params.
46
+
47
+ 4. **SendGrid over SMTP.** Credential type "Outbound e-mail (SMTP)":
48
+ Server=`smtp.sendgrid.net`, Port=`587`, Encryption=`TLS` (587 None/TLS/Auto all
49
+ pass the connection test; 465 timed out), Username=`apikey`, Password=<sendgrid
50
+ api-key>, From=`<verified-sender>@procesio.com` (a SendGrid verified sender). `/test` ->
51
+ `{"isSuccess":true,"body":"Connection was successful"}`. Email delivered live to
52
+ a personal Gmail inbox.
53
+
54
+ 5. **google-mail account selection** is the `GOOGLE_ACCOUNT` env var (values:
55
+ `default` = the work mailbox, `personal`), NOT an `--account` flag.
56
+ Verified the SendGrid email by Cc'ing the readable default inbox.
57
+
58
+ 6. **Process GET shape.** `GET /api/Projects/{id}` wraps everything under a top-level
59
+ `flow` key. Instances: `GET /api/Projects/{id}/instances` (paged); per-instance
60
+ detail endpoints return 401 (not exposed over this surface). Instance `status:50`
61
+ = finished, `actionsConsumed` counts non-Start/Stop actions, `errorMessage` null
62
+ on success. A webhook-launched run is async (launch returns empty 200).
63
+
64
+ 7. **Send Email action** properties: `Select SMTP credentials` (literal credential
65
+ id), `To`/`Cc`/`Bcc`, `From (Entity)` (must be a verified sender), `From (Display
66
+ Name)`, `Subject`, `Body` (code-editor), `Body is Html` (check-box, literal true).
67
+
68
+ ## Process 2 (search -> PDF) — the hard-won scripting/document learnings
69
+
70
+ Process `AAT_Process_SearchGenerate` (`11bf8d6d-3e7a-4355-a37e-75c9608d8443`):
71
+ Call API (Google CSE) -> Javascript (build full branded HTML) -> Generate Document
72
+ (shell template, docMap) -> branded PDF with the live search table + hero image.
73
+ Verified live: PDF rendered with SUBJECT, 6 real LinkedIn results, the search image.
74
+
75
+ 8. **Javascript output is ALWAYS wrapped `{result: <v>}`.** It maps cleanly only
76
+ into a model whose `result` field is a **primitive** (e.g. `AAT_HtmlEnvelope
77
+ {result: string}` -> `result` = the string). Mapping `{result: v}` into a model
78
+ whose `result` is a nested **model** or **list-of-model** creates the structure
79
+ but leaves inner fields EMPTY — PROCESIO does **not** map a plain JS object's
80
+ keys onto a typed model's attributes. Consequence: **you cannot build a typed
81
+ list/model from a JS action** to feed a document's repeating table. (Confirmed by
82
+ reading the real output variable, not just customResponse, which is lossy for
83
+ nested models.) Bind the output to `AAT_HtmlEnvelope` id `303b0e3b-557f-4667-ac76-fc436999b023`
84
+ (result attr `7950ac90-aded-46f1-ad18-b5f3d2c99357`).
85
+
86
+ 9. **To put dynamic data in a document: build the whole HTML in JS, render via a
87
+ shell template.** `AAT_BriefShell` (`2c172798-0a96-4911-9c2e-16aebf5afabc`) body
88
+ is a single `<%htmlContent%>` placeholder (string var). Generate Document docMap:
89
+ `htmlContent <- {var: htmlEnv, path: [result_guid]}`. The placeholder substitutes
90
+ **raw HTML** (not escaped) -> the PDF renders the full branded layout, table,
91
+ image. This is the robust pattern given the JS->typed-model limitation.
92
+
93
+ 10. **Generate Document REQUIRES `Select Document Template`** (else 502/"Missing
94
+ document information"). The **`HTML string` property is an OUTPUT** (the rendered
95
+ HTML is written there) — not an input; binding a var to it gets it overwritten.
96
+
97
+ 11. **docMap attribute paths must be GUIDs.** Navigating a `json` var by key fails:
98
+ `Error converting value "result" to ... Guid ... attribute.attributeId`. So a
99
+ `json` variable can't be navigated in docMap — must be a typed model with real
100
+ attribute GUIDs.
101
+
102
+ 12. **Compiled-model cache.** An attribute added to a data model via *edit* (after
103
+ creation) is NOT in the runtime's compiled model: Generate Document fails
104
+ "Unable to find attribute <guid> in data type <id>" even though GET shows it.
105
+ **Always create a data model with all attributes up front**; don't rely on
106
+ datatype-edit add for attributes consumed by Generate Document.
107
+
108
+ 13. **Call API for Google CSE.** `Request Parameters` (tabs-payload-v2) =
109
+ `{body:{type:RAW,value:{...}}, headers:[], queryParams:[{key,value,id,type:"TEXT"}]}`.
110
+ cx as a literal, `q` as `<%var%>`, `num` literal. `Verb` GET =
111
+ `3ab385bd-f8ae-b641-9176-e7db886aec01`. `Response Body` -> a **string** var. The
112
+ API key is injected by the credential (API-key-as-query). No Endpoint path needed
113
+ (credential URL already ends `/customsearch/v1`). Use the UNVERSIONED `Call API` action (id cd8bd0bc-...804de) = the LATEST/live one (outputs Response Status/Body/Headers/File); `Call API v1/v2/v3` are frozen pins and there is NO `v4` action ("Call API - v4" is only a palette folder). See [[aat-to-procesio-migration]].
114
+
115
+ 14. **JS JSON injection: inject as a BARE object literal** (`var data = <%0%>;`), NOT
116
+ inside backticks. A backtick template literal un-escapes the JSON's `\n`/`\"`
117
+ sequences and corrupts it (JSON.parse then throws -> 0 results). Bare injection
118
+ treats the CSE JSON as a JS object literal directly.
119
+
120
+ 15. **Reading results.** `run-process --synchronous` returns output vars under
121
+ `result.variable`. Download a generated file: `GET /api/File/download` with
122
+ headers `uploadFilePath` (the file's `path`), `variableId`, `instanceId`,
123
+ `flowTemplateId` (parse variableId/instanceId from the path). Instance status +
124
+ per-action errors: `GET /api/Projects/instances/{iid}/status?flowTemplateId={pid}`
125
+ (`.instance.actions[].errorMessage`). Status 50 = finished, 40 = ran-with-errors.
126
+
127
+ 16. **Builder enhancements made for this (generic, reusable):** template-binding
128
+ `vars` items may be `{var, path}` (attribute paths in text/object templates), and
129
+ a `template` may be a JSON **object/array** (not just a string) — `<%i%>` is
130
+ remapped in all string leaves. `config.schema.json` widened to match. Lets Call
131
+ API `Request Parameters` and attribute-path subjects be expressed declaratively.
132
+
133
+ ## CRITICAL process-builder fix — designer config vs runtime Parameters
134
+
135
+ **Symptom (reported live):** every action's parameters showed EMPTY in the designer
136
+ ("Send Email - Not configured", To/Subject/Body blank), `Validate` flagged "action is
137
+ not defined/configured properly" — yet the process **ran fine** (email sent, PDF made).
138
+ Clicking `Validate` in the designer then cleared the errors.
139
+
140
+ **Root cause:** a PROCESIO action stores its parameter values in TWO places that must
141
+ mirror each other — `Parameters[]` (`{TabPropertyId, Value, Variable}`, what the
142
+ RUNTIME reads) AND `CustomData.configuration[].settings[].value` (what the DESIGNER
143
+ reads/validates). The builder filled only `Parameters[]` and left the configuration
144
+ tree as the empty template defaults → designer blank + invalid, runtime correct.
145
+
146
+ **Fix (in `_action_node`, applies to every process the tool builds):** deep-copy the
147
+ template `configuration` and set each setting's `value` to mirror its Parameter via
148
+ `_config_value_from_param` — same value, but a variable reference is the raw
149
+ `variableId` (with `.attrId` for attribute paths) in the config where the Parameter
150
+ uses a `<%N%>` placeholder (verified against real exports: Call API `Response Body`
151
+ config value = the var id; Parameter value = `<%3%>`). Structured/object values are
152
+ walked recursively. Confirmed live: settings now carry values, Validate passes,
153
+ runtime unchanged.
154
+
155
+ **Canvas origin fix (also reported):** flow started "way-left". Real flows start at
156
+ ~x500/y480; `_layout` now uses `_X0,_Y_MAIN,_X_PITCH = 480,480,260` (was 100,300,320).
157
+ Verified: Start(480,480) → actions 740/1000/1260 → Stop(1520), all on y=480.
158
+
159
+ ## CRITICAL fixes round 2 — stale variable ids + form data model
160
+
161
+ Two more designer-vs-runtime issues (reported live):
162
+
163
+ **A. Process variable ids drift on every edit.** `build()` reassigned a fresh id to
164
+ every variable on each create/edit. External references (a form's RUN_PROCESS
165
+ inputMap/outputMap bind a process variable by id) therefore went stale after any
166
+ process re-edit -> the form's "Process input variable" column showed EMPTY. **Fix:**
167
+ process-`_edit` now fetches the existing flow and reuses variable ids by name
168
+ (`ctx["existing_var_ids"]`), so ids are stable across edits. (Action ids can still
169
+ change - they're internal; only variable ids are referenced externally.) Re-aligned
170
+ the form to Process 2's current ids after the fix.
171
+
172
+ **B. Form fields had no data model -> mapping paths unresolvable.** A PROCESIO form
173
+ backs every control with a **data-model attribute**: `Data.dataModel` root "form"
174
+ (id = the form id) -> a `fields` container (**id `11223344-5566-7788-99aa-aabbccddeeff`,
175
+ a platform constant in every form**) -> one sub-model per element (**id = element id**)
176
+ -> an attribute per config, incl. `value`. A RUN_PROCESS/MAP trigger references a
177
+ field by the path `formId.fields.elementId.valueAttrId`, and the **runtime stores the
178
+ field's value in that attribute**. The form builder only emitted `elements` and used
179
+ the shell's empty `fields` container -> the path pointed at nothing -> designer showed
180
+ raw guids AND values didn't flow. **Fix:** `_build_data_model` now mirrors every
181
+ element into the `fields` container (sub-model id = element id; a typed attribute per
182
+ non-event config; `value` typed by control kind incl. file-upload -> FileDataModel),
183
+ sets the dataModel root id = form id, and `field_paths` reference the real `value`
184
+ attribute id. Verified live: dataModel has 8 field sub-models with value attrs, the
185
+ inputMap paths reference existing attributes, root id = form id, and a form-triggered
186
+ Process 2 instance ran to status 50.
187
+
188
+ **Headless caveat (still true):** Playwright `fill`/`press` set the native input but
189
+ don't update the Angular-bound form model, so in automation `fields.X.value` stays
190
+ empty and the path resolves to itself (a filename came out as the path). A real
191
+ keyboard user populates the bound model and the value flows. Verify form value-flow
192
+ in a REAL browser.
193
+
194
+ ## CRITICAL fixes round 3 — bespoke config shapes + build audit
195
+
196
+ `Map Document Data` (and, the user predicted, Decisional conditions) showed EMPTY in
197
+ the designer + failed Validate. Cause: a few property types store a **different
198
+ shape** in the designer config than in the runtime Parameter, and the round-1 mirror
199
+ just copied the runtime shape. Confirmed against real exports:
200
+
201
+ - **document-mapper** — runtime `{id, source:{value,variable}, destination:{variableId}}`
202
+ but designer `{id, process:<varId|literal>, document:<docVarId>}`.
203
+ - **decisional-case** — runtime `{id, actionid, condition:[{operator, leftOperator:{value:"<%N%>",
204
+ variable:[...]}, ...}]}` but designer `{id, name, target, condition:[{id, uid, operator,
205
+ leftOperator:{variable:"", attribute:{id:"",nextAttribute:null}, value:<varId>}, ...}]}`.
206
+
207
+ **Fix:** `_apply_values_to_config` dispatches by setting `type` — `_docmapper_config`
208
+ and `_decisional_cases_config` emit the designer shape; everything else uses the
209
+ `<%N%>`->varId mirror. **Plus a build audit (`_audit_config`, requested by the user):**
210
+ after building, every Parameter must map to a config setting, bespoke types must carry
211
+ their required keys (process/document; target/condition), and a runtime value must not
212
+ leave the designer field empty — otherwise the build **raises** (the designer would
213
+ flag "not configured"). Verified: Render PDF's Map Document Data config is now
214
+ `[{id, process:<htmlEnv.result>, document:<htmlContent>}]`, the audit passes, the flow
215
+ still runs to status 50. Regression tests added (config mirror, docMap shape, form
216
+ data model).
217
+
218
+ ## Round 4 — document list-table is a dead end (designer "Unknown")
219
+
220
+ The showcase doc `AAT_CompanyBrief` (typed `hits` list + repeating table) shows the
221
+ table cells (`<%hitsId.attrId%>`) as **"Unknown"** chips in the document designer,
222
+ even though the attr ids match AAT_SearchHit exactly. There is no documented repeating
223
+ syntax, and (decisive) **you cannot populate a typed list anyway** — a typed list can
224
+ only be produced by a Scripting action, and PROCESIO doesn't map a JS object onto a
225
+ typed model's attributes. So **list-bound document tables don't work on this platform**;
226
+ scalar `<%name%>` binding DOES (chips resolve, renders). The working pattern for
227
+ dynamic/repeating content is the **HTML-string shell** (one `<%htmlContent%>`
228
+ placeholder fed a full HTML string from a script via an `{result:string}` envelope) —
229
+ proven by `AAT_BriefShell` + `AAT_Process_SearchGenerate`. Tool guard added:
230
+ `document` builder `prepare_ctx` now prints a WARNING when a body references a
231
+ list-variable attribute, steering to the shell pattern; `document/description.md`
232
+ documents it.
233
+
234
+ ## Tool-implementation status (gap review)
235
+
236
+ All fixes are in the BUILDER CODE (so a fresh session's create/edit is correct), not
237
+ just applied to live resources — verified by grep + 38 tests:
238
+ - process: config-value mirror, document-mapper/decisional-case config transforms,
239
+ build audit, canvas origin, variable-id preservation on edit, template `{var,path}`
240
+ + object templates, scripting global index, error ports/Join/decisional/custom-resp.
241
+ - form: flat elements, events/triggers, field-name->value-path resolution, full
242
+ data-model mirror (fields container + per-element sub-models + value attrs).
243
+ - document: scalar binding + name->id; active list-table warning.
244
+ - schema widened; goldens regenerated; regression tests added (config mirror, docMap
245
+ shape, form data-model mirror).
246
+ Remaining items are PLATFORM limits, not tool bugs, captured in docs/memory so a fresh
247
+ session avoids them: JS output is `{result:v}` and won't fill typed models (use
248
+ HTML-string shell); RUN_JAVASCRIPT form events + Angular model don't run under headless
249
+ Playwright (verify form JS in a real browser); compiled-model cache (create data models
250
+ complete, don't rely on datatype-edit add for attrs consumed by Generate Document).
251
+
252
+ ## Round 5 — decisional condition needs the full field set
253
+
254
+ The round-3 decisional-case transform was incomplete: a real decisional condition (full
255
+ shape from the chat Bot export) also carries `value: null`, `rightOperandAsListRequired:
256
+ false`, `operandsAsListOptional: true` (besides id/uid/operator/logicOperator/left/right/
257
+ auxOperator). Omitting them made the designer fail to render the condition — empty/red
258
+ right operand, "Case (not configured)", and the **Validate button hung**. Also a literal
259
+ operand value (e.g. `50`) must be a **string** ("50") in the config. Fixed in
260
+ `_decisional_cases_config` / `_operand_config`; regression test added.
261
+
262
+ A throwaway dev process `zzz_comprehensive` (`669722ec-…`) was repaired in place (GET ->
263
+ re-mirror config with the fixed transforms -> PUT). Its 4 Concatenate `Input String 2`
264
+ fields were genuinely empty in the test data (a required field) — filled with a literal;
265
+ that's process data, not a tool bug. **Reusable recovery move:** any older process showing
266
+ "not configured" can be fixed without its source config by GET -> `_apply_values_to_config`
267
+ per action (normalize camelCase params to TabPropertyId/Value/Variable) -> PUT.
268
+
269
+ ## Round 6 — form data-model ROOT id must be separate from the form id (THE form bug)
270
+
271
+ Runtime symptom: typing in a field threw `Cannot read properties of undefined
272
+ (reading 'searchTerm')` from the onInput concat — i.e. `ProcesioForm.data.fields` was
273
+ **undefined**, even though real forms' onClick handlers do `ProcesioForm.data.fields.X
274
+ .visible = …` fine. Same root cause as the designer "Unknown" mappings. Decisive find
275
+ from a real export: the form's `Data.dataModel` **root id is a SEPARATE generated id,
276
+ NOT the form template id** (real: root `a07641ba…` ≠ form `70876314…`), the fields
277
+ container's `parentDataTypeId` is that root id, and the field-reference path's FIRST
278
+ segment is that root id. My builder set the root id = the form id and used the form id
279
+ as the path's first segment — that collision broke the runtime's `data.fields`
280
+ construction and the designer resolution.
281
+
282
+ **Fix:** `build()` now generates `ctx["dm_root_id"]` (separate), `_build_data_model`
283
+ uses it as the dataModel root id + the fields container's parentDataTypeId, and the
284
+ field paths use it as segment 0. Verified structurally (root id != form id, fields
285
+ container hangs off it, inputMap path[0] == root id). RUNTIME confirmation needs a real
286
+ browser — headless Playwright can't fire the Angular onInput; the concat is now
287
+ defensive (no hard error) + logs an `AAT diag` line if `data.fields` is still missing.
288
+
289
+ ## Round 11 — ROOT CAUSE (definitive): element goldens were stale, not what the toolbar produces
290
+
291
+ User's brilliant move: added a FRESH "Text input" from the toolbar (`input1`) next to my
292
+ generated `companyName`, mapped the input variable to `input1` (which resolved), and saved.
293
+ This put a canonical control beside a generated one in the same form. The diff:
294
+
295
+ - The variable picker showed `input1 -> value` but `companyname -> defaultValue` only, NO
296
+ `value`. So my field had no `value` property to map -> "Unknown".
297
+ - **PROCESIO RECOMPILES the data model from the ELEMENTS on save**, and only emits a `value`
298
+ data-model attr when the element's `value` config is CANONICAL. Canonical input value
299
+ config = `{key:"value", label:"Value", type:"hidden", value:"", exposed:true,
300
+ events:["EMIT_INPUT"]}`. My golden had `{label:"", value:null}` with no `exposed`/`events`
301
+ -> compiler dropped the value attr.
302
+ - My goldens were hand-trimmed captures: a real input has 18 configs (all `exposed:true`)
303
+ incl `type`/`disabled`/`visible`/`onFocus`/`onBlur`/`style`; mine had 12 and lacked
304
+ `exposed` everywhere. (The earlier "visible" round was a partial symptom, not the cause.)
305
+
306
+ Fix (the real one): **re-captured all 27 element goldens from real toolbar-created controls
307
+ in the repo exports** (`docs_info/Exports/*.procesio` -> `Forms[].Data.elements`). A real
308
+ input there matches the user's fresh `input1` byte-for-byte (verified). Extractor
309
+ (`tools/procesio/dto/form/capture_goldens.py`): per type, pick the export instance with the
310
+ most `exposed:true` configs; neutralize event/option/style values. Builder data-model build
311
+ now mirrors PROCESIO's compiler: one attr per non-event/non-`style` config, attr name =
312
+ camelCase(key) (`info-text`->`infoText`), id == config id, isPublic/hidden false; removed the
313
+ visible-synthesis hack (canonical goldens include it in the right position). 42 tests green.
314
+
315
+ Live AAT form re-applied: companyName/country/searchTerm sub-models are now byte-identical
316
+ (14 attrs incl `value`) to PROCESIO's compiled `input1`; both buttons' input/output map
317
+ value-segments resolve to the field's value config id; diagnostic `input1` removed. (User to
318
+ confirm the input "Form variable" now shows companyName/country and the field exposes `value`.)
319
+
320
+ ## Round 10 — input-side "Unknown" = field sub-model missing a `visible` attr
321
+
322
+ After Round 9's isPublic/attr-id fix the OUTPUT form-variable resolved (`form.fields
323
+ .brieffile.value`) but the INPUT side STILL showed "Unknown" for companyName/country.
324
+ Same form, same data model, same dotted4 path format. The asymmetry: output references
325
+ briefFile (file-upload), input references companyName/country (text inputs).
326
+
327
+ Deep key-by-key diff of my companyName sub-model vs the reference `cui` field (input,
328
+ referenced on the input side of a real form): mine was MISSING `visible`, `disabled`,
329
+ `type` attrs and had `info-text` (vs ref `infoText`). The decisive correlation:
330
+ **briefFile RESOLVES and HAS a `visible` attr; companyName was UNKNOWN and LACKED it.**
331
+ briefFile resolves WITHOUT `type`/`disabled`, so only `visible` is load-bearing for the
332
+ trigger-map input-side resolver — a field with no `visible` attr is treated as
333
+ non-mappable. Root cause in the tool: the `input` element golden was captured incomplete
334
+ (no `visible` config), while `file-upload` includes it — which is exactly why output
335
+ worked and input didn't.
336
+
337
+ Verified the mechanism with real data: 199 real-form elements have onInput/onChange
338
+ events AND are RUN_PROCESS inputMap targets (so events aren't the cause); input- and
339
+ output-referenced fields are BOTH isPublic:false (so isPublic-by-direction isn't it).
340
+ Fix: form builder synthesizes a `visible:true` config on any element golden lacking one,
341
+ so every field sub-model carries a `visible` attr (id == the element's visible config id,
342
+ preserving the attr-id==config-id invariant). 42 tests green; new guard
343
+ `test_form_every_field_submodel_has_visible_attr`. Live AAT form re-applied: companyName,
344
+ country, searchTerm, briefFile all now have a `visible` attr. (User to confirm the
345
+ trigger-map input "Form variable" now shows companyName/country instead of "Unknown".)
346
+
347
+ ## Round 9 — map "Unknown"/blank ROOT CAUSE + searchTerm concat actually fixed (ground truth from 163 real forms)
348
+
349
+ User: after Round 8 the input form-variable went from raw-guid to **"Unknown"** and output
350
+ was still blank — "a step in the right direction, but still not solved". Also: **bring back
351
+ the Search Term field — fix the issue, don't go around it.** (Dropping searchTerm in the
352
+ earlier round was avoidance.)
353
+
354
+ Got GROUND TRUTH two ways: (a) mined the repo's real project exports
355
+ `docs_info/Exports/*.procesio` (each has a `Forms` array with stringified `Data`); (b) a
356
+ 12-way parallel workflow scanned all 145 live workspaces → 163 real UI-built forms with
357
+ RUN_PROCESS maps / in-form JS. Reference form for both bugs: **OMS Homepage** (also
358
+ HUB-Overview-Tabs, eTransport HUB).
359
+
360
+ BUG A — "Unknown"/blank. The dotted4 map path `<root>.11223344.<el>.<valueAttr>` and
361
+ root==variables[0] were already correct (identical to real forms). The real differences,
362
+ both properties of platform-GENERATED data models that my builder violated:
363
+ 1. **data-model attr id == the element's CONFIG id** of the same key. Real forms reuse
364
+ the element config ids as the fields sub-model attr ids (OMS 15/16; the value-attr id
365
+ == the element's `value` config id). My builder minted FRESH attr ids (0/11 match) →
366
+ the path's value-segment resolved to nothing the designer could name → "Unknown".
367
+ 2. **`isPublic:false`** on every field sub-model AND leaf attr. 100%-consistent across
368
+ all 163 real forms; my builder set `isPublic:true` → resolver won't index the node.
369
+ Fix (form builder): `_build_element` uses the element's `value` config id as the field-path
370
+ value segment; `_build_data_model` reuses each config's id as the attr id and sets
371
+ isPublic:false (+ hidden:false). Live AAT form now: 70 attrs, 0 id-mismatches, 0
372
+ isPublic≠false, all 3 map value-segments == element value config ids.
373
+
374
+ BUG B — **in-form JS field access WORKS** (Round 7's "JS can't read fields / ProcesioForm is
375
+ a stub" was WRONG — that probe ran outside the live form-runtime iframe). Real API, embedded
376
+ verbatim in a real form's own JS doc-comment: `ProcesioForm.data.fields.<elementName>.value`
377
+ to read/write (also `.visible/.required/.readonly`), `ProcesioForm.variables.<name>` for form
378
+ vars. The field key is the element name and the runtime LOWERCASES it (downloadButton →
379
+ downloadbutton). So searchTerm is BACK as a read-only field, auto-filled by an onInput
380
+ handler on companyName+country: `setv('searchTerm', companyName + ' ' + country)` (defensive
381
+ `F[n]||F[n.toLowerCase()]`). 41 builder tests green; new guards
382
+ `test_form_datamodel_attr_ids_match_element_config_ids_and_are_private`. (User to confirm in
383
+ a designer refresh: trigger-map shows field NAMES, and typing fills Search Term live.)
384
+
385
+ ## Round 8 — process<->form data map showed form variables as guids (input) / blank (output)
386
+
387
+ User (designer "Map data" panel for the Search & Generate trigger): the **input** form
388
+ variable rendered as the raw path guid `<root>.11223344...<element>.<valueAttr>` and the
389
+ **output** form variable rendered as **nothing**. Same class of "form vars look like
390
+ guids" reported earlier - but this one is in the RUN_PROCESS data map, not the data model.
391
+
392
+ Root cause (found by probing the live form + the shell): the designer resolves a stored
393
+ field path back to its NAME by walking from the form HANDLE variable `Data.variables[0]`
394
+ (id `65396456-36bf-4d9f-8d32-63a4a9e5c8c0`, the FORM-scope root, `scopes:["FORM"]`, a
395
+ shell constant) into `Data.dataModel`. So `dataModel.id`, the field-path first segment,
396
+ and `variables[0].id` must ALL be the SAME id. The form builder was generating a FRESH
397
+ `dm_root_id` for `dataModel.id` + field paths (live form had `ae1d596d...`) while
398
+ `variables[0]` stayed `65396456...` - so the resolver started at `65396456`, found no
399
+ root, and fell back to printing the raw path (input) / blank (output). The earlier
400
+ "root != form id" fix had over-corrected: it must be `variables[0].id` (which is ALSO
401
+ != form id), not a random id.
402
+
403
+ Fix (in the builder, so it never recurs): `build()` derives `ctx["dm_root_id"]` from the
404
+ shell's "form" variable (`dataType`/`id`) instead of `_new_id()`, and a build-time guard
405
+ raises unless `dataModel.id == variables[0].id` and every `field_paths` value roots at it.
406
+ New regression test `test_form_field_paths_root_matches_form_handle_variable`. Removing
407
+ the `_new_id()` call shifted the deterministic test id sequence by one -> regenerated
408
+ `fixtures/reg.elements.json` (verified structurally identical, pure -1 id shift). 40 tests
409
+ green. Re-applied `form_final.json` to the live form; probe confirms `dataModel.id ==
410
+ variables[0].id == 65396456...`, both buttons' input paths + btnSearch output path now
411
+ root at `65396456...`, and the `fields` container holds element sub-models named
412
+ companyName/country/briefFile each with their value attr - so the designer now shows the
413
+ field NAMES on both sides. (User to confirm visually after a designer refresh.)
414
+
415
+ ## Round 7 — in-form JavaScript CANNOT read field values (current runtime)
416
+
417
+ Probed the live runtime layer by layer (no Chrome MCP, headless can't fire onInput, so
418
+ read the object shape through the console). Result: in `forms.procesio.app`'s current
419
+ runtime, the in-form JS sandbox (about:srcdoc) exposes only a STUB:
420
+ `ProcesioForm == {data: "<formId-string>", variables: {form: ""}}` — **no field
421
+ values**. The old `ProcesioForm.data.fields.X.value` API (from exports) is a previous
422
+ runtime version and no longer works. So **any form JS that reads/writes field values
423
+ fails** — the read-only searchTerm oninput concat is impossible, and so is a webhook
424
+ `fetch` button that needs the typed values in its payload.
425
+
426
+ **What works: RUN_PROCESS triggers** — they map field values to the process
427
+ SERVER-SIDE (not via JS), so they get the real typed values. Final form design (user
428
+ chose "drop searchTerm, map fields directly"): Company + Country inputs, a file-upload,
429
+ **Search & Generate** = RUN_PROCESS Process 2 (companyName+country -> PDF into the
430
+ upload), **Email me** = RUN_PROCESS Process 3 (companyName+country -> SendGrid email).
431
+ No searchTerm field, no field-reading JS -> no console errors. Process 3 restructured
432
+ to take companyName+country (was the webhook payload model). The webhook
433
+ `AAT_BriefRequested` remains a standalone API-triggerable artifact.
434
+ **Rule for the form builder going forward: never rely on form JS to read field values
435
+ — use RUN_PROCESS inputMap/outputMap (server-side) for anything that needs them.**
436
+
437
+ ## Form (AAT_CompanyBriefForm `1c515f94-ef1a-4696-aa62-43fb78e55221`)
438
+
439
+ Render URL: `https://forms.procesio.app/iG5-IMmbNP` (CustomUrl tinyUrl). 8 controls:
440
+ heading, paragraph, 2 inputs (companyName/country), read-only searchTerm, file-upload
441
+ (briefFile), Search & Generate button, Email-me button. Renders perfectly with the
442
+ enterprise theme (verified by screenshot).
443
+
444
+ 17. **Form trigger config (verified against real exports):** per-control config key
445
+ `onClickEvents`/`onInputEvents` = `{debounce:0, events:[{id, type:"CLICK"|"INPUT",
446
+ action, config}]}`. `RUN_PROCESS` config = `{processId, syncRun, inputMap,
447
+ outputMap, conditions:[], areConditionsConfigured:true}`. `RUN_JAVASCRIPT` =
448
+ `{code}`. Both inputMap & outputMap rows are `{id, left: <processVarId>, right:
449
+ <formFieldPath>}`.
450
+
451
+ 18. **Form field value-path = `formId.11223344-5566-7788-99aa-aabbccddeeff.elementId
452
+ .valueConfigId`** (the middle GUID is a platform "fields" container constant,
453
+ confirmed across forms). The form builder now resolves a field **name** in a
454
+ trigger's inputMap/outputMap/mapping to this full path (`ctx['field_paths']`), so
455
+ triggers reference fields by name. Fields must be declared **before** the buttons
456
+ that reference them (paths are registered as elements build in order).
457
+
458
+ 19. **RUN_PROCESS from a form WORKS end-to-end (verified live):** clicking Search &
459
+ Generate ran Process 2 synchronously and placed the generated PDF into the
460
+ file-upload control (download icon appeared). The form runtime executes the
461
+ process with the workspace context — an anonymous public form can run a process
462
+ that uses credentials.
463
+
464
+ 20. **Make the process robust to the form, not the reverse.** Process 2 takes
465
+ `companyName`+`country` and concatenates server-side (Call API `q` =
466
+ `"<%0%> <%1%>"` over both vars). So the brief is correct from the two filled
467
+ fields directly; it does NOT depend on the client-side concat firing. The
468
+ read-only `searchTerm` field + its oninput concat is a display convenience only.
469
+
470
+ 21. **Known limitation — RUN_JAVASCRIPT form events + headless verification.** Under
471
+ headless Playwright, `fill()` and even per-key `press()` set the native input's
472
+ visible text but do NOT update PROCESIO's Angular form **model** (custom input
473
+ components) — so an empty model field, when read by an inputMap path, resolves to
474
+ the *path string* itself (e.g. a filename came out as the field path). Separately,
475
+ `RUN_JAVASCRIPT` events (the oninput concat, and the webhook `fetch`) did not fire
476
+ in the headless runtime even though the event structure matches real exports
477
+ exactly (a dead-simple constant assignment to `searchTerm.value` also didn't
478
+ show). The webhook `fetch` is additionally cross-origin (form -> webapi) so it
479
+ needs `mode:'no-cors'`. These are form-RUNTIME/headless-automation concerns, not
480
+ DTO-builder correctness — the form is built per the documented contract; real
481
+ keyboard users drive the Angular model. Verify form JS interactions manually in a
482
+ real browser, not headless.
483
+
484
+ ## Round 12 — DECISIVE functional test: list-bound document tables DO render; Round 4 was WRONG
485
+
486
+ A scratch process functional render test settled the AAT_CompanyBrief "Unknown" mystery
487
+ definitively. Two runs in the AAT workspace (`3fd85e9d-…`), Generate Document -> PDF,
488
+ typed `hits` list fed via a **process-variable DefaultValue containing a JSON array**
489
+ (option 2 — no Call API echo, no Javascript needed; it worked first try):
490
+
491
+ - **Run A — original `AAT_SearchHit` (f675610e) + original `AAT_CompanyBrief` doc
492
+ (503f33b4):** status **40**, single error: `Unable to find attribute
493
+ 5625a0c7-… (title) in data type f675610e-… (AAT_SearchHit). Please ensure the data
494
+ model attributes are defined correctly.` The run REACHED document rendering and
495
+ iterated the list (so the typed list WAS populated) — it failed resolving the item
496
+ attribute against the **runtime's compiled model**.
497
+ - **Run B — FRESH model (all 6 attrs created up front) + FRESH doc (same `<%hits.attr%>`
498
+ table, one `<tr>`):** status **50**, 0 errors, produced `render_test_fresh.pdf`
499
+ (19,395 bytes). Extracted text = **all 3 rows, one per hit** (3 titles / 3 sources /
500
+ 3 summaries) + the scalar searchTerm in the header. **Zero "Unknown".**
501
+
502
+ CONCLUSIONS (overturning Round 4 + the document/description.md "dead end"):
503
+ 1. **List-bound repeating document tables DO render** — a single `<tr>` with
504
+ `<%hits.attr%>` placeholders expands to one row per list element. The repeating
505
+ syntax is exactly that (bind the list var's attributes in ONE row).
506
+ 2. **A typed list CAN be fed without scripting** — a process variable typed as the
507
+ item model, `isList:true`, with `DefaultValue` = a JSON array of objects hydrates
508
+ into the typed list at runtime. (This also validates the "Process 2 list feed":
509
+ the same DefaultValue-JSON / one-mapping docMap with `destination.attribute=null`
510
+ binds the whole list to the doc's list variable.)
511
+ 3. **ROOT CAUSE of AAT_CompanyBrief "Unknown" = the DATA MODEL (the user was right).**
512
+ The original `AAT_SearchHit`'s attributes are present in `GET /api/DataTypes/{id}`
513
+ and look byte-identical to a working model's, but they are **missing from the
514
+ runtime's COMPILED model** — the same stale-compiled-cache failure as learning #12
515
+ (attributes added via `POST/PUT /api/DataTypes/attribute/{rootId}` edit are not
516
+ recompiled). The document designer reads that same compiled model, so the cells
517
+ show "Unknown"; Generate Document throws "Unable to find attribute". A FRESH model
518
+ created with all attributes up front compiles correctly and renders.
519
+ **FIX:** recreate `AAT_SearchHit` from scratch with all attributes in the initial
520
+ `POST /api/DataTypes` (never rely on attribute-edit for attrs consumed by a
521
+ document), repoint `AAT_CompanyBrief.hits` at the new model id, re-map the table
522
+ cell `<%hits.attr%>` ids to the new attribute ids.
523
+
524
+ NOTE: `document/description.md` lines 43-64 ("repeating tables ... DO NOT work ... a
525
+ dead end") and PHASE4 Round 4 are now FALSIFIED and should be corrected — the pattern
526
+ works; the prior failure was the stale-compiled-model, not a platform limitation.
527
+
528
+ ## Round 13 — ROOT CAUSE PINNED + LIVE FIX APPLIED: child model `parentIds` back-link drives the runtime compiled model
529
+
530
+ Round 12 proved the AAT_CompanyBrief "Unknown" / "Unable to find attribute" failure
531
+ is a DATA-MODEL defect (fresh model rendered, original threw). Round 13 isolated the
532
+ EXACT load-bearing field, fixed the LIVE model, and re-rendered the ORIGINAL model+doc
533
+ to green.
534
+
535
+ THE ONE FIELD THAT MATTERS: an item (child) model's `parentIds` must contain the id of
536
+ each parent data model whose `isList`+`isDataModel` attribute references it.
537
+ - Broken: `AAT_SearchHit.parentIds = []` (created standalone, never linked back).
538
+ - Working refs: a live process with `Details.parentIds=[Invoice]`, `url.parentIds` non-empty,
539
+ `technicalDataElectricity.parentIds` = 2 parents.
540
+
541
+ RED HERRING (do NOT chase again): the inlined `attributes[]` array on the PARENT's list
542
+ attribute (`AAT_SearchReport.hits.attributes`) being `[]` vs 14 on the working process. After the fix
543
+ the render is GREEN while that GET array is STILL `[]`. So the inlined-children array in
544
+ `GET /api/DataTypes/{parent}` is a lazy/volatile projection, NOT the cause. The runtime
545
+ compiled model is keyed off the child's `parentIds`, not that array.
546
+
547
+ HOW THE LINK IS WRITTEN (and how PUT fails):
548
+ - `PUT /api/DataTypes` (top-level) IGNORES `parentIds` — sending the full child body with
549
+ parentIds populated does nothing (and DataType edit only renames; it can't change attrs).
550
+ - `PUT /api/DataTypes/attribute` returns **401 Unauthorized** on the userpass session
551
+ (endpoint not permitted) — do not use it.
552
+ - `POST /api/DataTypes/attribute/{parentId}` (status 200) is the working path: adding the
553
+ list-of-model attribute on the PARENT makes the platform (a) write the child's
554
+ `parentIds` back-link AND (b) recompile the child into the runtime model. Side effect:
555
+ if an attribute of that name already exists, the server auto-renames the new one
556
+ (`hits` -> `hits_1`); delete the duplicate afterwards via
557
+ `DELETE /api/DataTypes/attribute/{parentId}/{dupAttrId}`. The original attribute id (and
558
+ thus all document cell references `<%hits.attr%>`) is preserved.
559
+
560
+ LIVE FIX APPLIED (AAT workspace 3fd85e9d-…):
561
+ 1. `POST /api/DataTypes/attribute/cfa383c7-…(AAT_SearchReport)` with a `hits` list attr
562
+ pointing at `f675610e…(AAT_SearchHit)` → this set
563
+ `AAT_SearchHit.parentIds = ["cfa383c7-…"]` and recompiled the model.
564
+ 2. Deleted the auto-created duplicate `hits_1` attribute; original `hits`
565
+ (id 0101e404-…) intact, so the doc's cell refs still resolve.
566
+
567
+ VERIFICATION (decisive, end-to-end, ORIGINAL model + ORIGINAL doc 503f33b4):
568
+ - Built a minimal Generate Document process (typed `hits` list fed by a process-var
569
+ DefaultValue JSON of 3 fake hits + 4 scalars), ran synchronous.
570
+ - Status **50**, `error: []`, body contains NEITHER "Unable to find attribute" NOR the
571
+ title-attr guid `5625a0c7`. (Round 12's run was status 40 with exactly that error.)
572
+ - Downloaded the rendered file via `GET /api/File/download` (path/varId/instanceId/
573
+ flowTemplateId in HEADERS, NOT query) — 3784 bytes text/html — containing all 3 hit
574
+ rows (3 titles, 3 displayLinks, 3 snippets) and **zero "Unknown"**.
575
+ - Scratch process deleted (404). No live AAT showcase resource other than the one
576
+ intended back-link was changed.
577
+
578
+ DTO BUILDER FIX (tools/procesio/dto/datatype/builder.py) — prevent regression:
579
+ The builder's `build()` hardcodes child `Content.ParentIds: []` and, when a list attribute
580
+ references an EXISTING model via `model:`, never writes the child's back-link — that is how
581
+ AAT_SearchHit regressed (created standalone, then referenced). Two-part fix:
582
+ 1. PREFER inline children: a list-of-model should be authored as `attributes:` (inline
583
+ nested sub-model) so parent+child are created together in the SINGLE initial
584
+ `POST /api/DataTypes` — the platform writes parentIds at create time. Document `model:`
585
+ + `isList` as the regression path.
586
+ 2. For `model:`+`isList` against a PRE-EXISTING child (and in the `_edit` reconcile path),
587
+ after the parent list attribute is created via `POST /api/DataTypes/attribute/{parentId}`,
588
+ RE-FETCH the child and assert `parentId ∈ child.parentIds`; if absent, the link did not
589
+ take — re-issue the attribute POST (or fail loudly) rather than leaving a silently-broken
590
+ model. Never rely on top-level `PUT /api/DataTypes` to set parentIds (it is ignored), and
591
+ never use `PUT /api/DataTypes/attribute` (401 on userpass).
592
+ Add a manifest/runtime guard test: create parent with a list-of-model child, then assert the
593
+ child's `parentIds` contains the parent id (the structural invariant that makes documents
594
+ expand the list and resolve item-attribute cells).