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,13 @@
1
+ """PROCESIO DTO sub-tools.
2
+
3
+ Deterministic, reusable builders that turn a small validated `config` into a full
4
+ PROCESIO DTO by merging it onto a captured golden template, then create/edit the
5
+ resource over the Web API. See DTO-SUBTOOLS-NOTE.md for the design.
6
+
7
+ Layout per component: tools/procesio/dto/<component>/
8
+ description.md - what it is / when to use / gotchas
9
+ config.schema.json - the JSON Schema the (LLM-produced) config must satisfy
10
+ template.dto.json - a real captured golden DTO with placeholders
11
+ builder.py - PURE config -> DTO (no I/O); + a Component spec
12
+ fixtures/ - golden config->DTO pairs (regression) + drift captures
13
+ """
@@ -0,0 +1,179 @@
1
+ """Credential builder — PURE config -> CredentialsDto.
2
+
3
+ A credential instance is a saved set of property values for a credential template
4
+ (connection type). The builder resolves the template (gtid/gtpid + property ids,
5
+ fetched live in prepare_ctx) and maps config `properties: {label: value}` to
6
+ `properties: [{id, value}]`. Select/radio option *names* are resolved to their
7
+ option value (guid) automatically.
8
+
9
+ API (verified live 2026-06-24):
10
+ - Create: POST /api/Credentials {gtid, gtpid, name, properties[]} -> {id}
11
+ - Get: GET /api/Credentials/{id}
12
+ - Edit: PUT /api/Credentials {gid: id, ...}
13
+ - Validate@source: POST /api/Credentials/test (live connection probe)
14
+ """
15
+ from __future__ import annotations
16
+
17
+ from pathlib import Path
18
+
19
+ from tools.procesio.dto.framework import Component
20
+ from tools.procesio.errors import UsageError
21
+
22
+ DIR = Path(__file__).resolve().parent
23
+
24
+
25
+ def _property_index(template: dict) -> dict:
26
+ out: dict[str, dict] = {}
27
+ for p in template.get("properties") or []:
28
+ if p.get("label"):
29
+ out.setdefault(p["label"].strip().lower(), p)
30
+ if p.get("id"):
31
+ out[p["id"]] = p
32
+ return out
33
+
34
+
35
+ _GUIDISH = 32 # a guid without dashes is 32 hex chars; with dashes, 36
36
+
37
+
38
+ def _looks_guid(v) -> bool:
39
+ s = str(v or "").strip()
40
+ return len(s) >= _GUIDISH and s.count("-") >= 4
41
+
42
+
43
+ def _resolve_option(prop: dict, value):
44
+ """Map an option property's value to the option **guid** the engine expects.
45
+
46
+ Accepts the option `name` ("GET"), its `be_value` ("Get"), or the guid itself.
47
+
48
+ RAISES on an unmatched value when the property's options are guid-valued. This
49
+ is deliberate: PROCESIO stores whatever string you send, the credential saves
50
+ fine, and then EVERY Call API run using it dies at runtime with
51
+ ``Error while building input model: Unrecognized Guid format.`` — blamed on the
52
+ Call API action, not the credential, which sends you hunting in the wrong place.
53
+ (Cost hours on 2026-07-30 with ``"Method": "POST"``; POST is not even an option —
54
+ the credential Method is only used by the /test probe, Call API carries its own
55
+ Verb.) Non-guid option sets (checkbox-style "true"/"false") still pass through,
56
+ so nothing that worked before breaks.
57
+ """
58
+ opts = prop.get("options")
59
+ if not (isinstance(opts, list) and opts) or not isinstance(value, str):
60
+ return value
61
+ want = value.strip().lower()
62
+ for key in ("name", "be_value", "value"):
63
+ for o in opts:
64
+ if str(o.get(key, "")).strip().lower() == want:
65
+ return o.get("value")
66
+ if any(_looks_guid(o.get("value")) for o in opts):
67
+ allowed = [o.get("name") for o in opts if o.get("name")]
68
+ raise UsageError(
69
+ f"credential property {prop.get('label')!r}: {value!r} is not one of its "
70
+ f"options {allowed}. This property is an option list valued by GUID — "
71
+ f"sending a raw string saves fine but makes every Call API run using this "
72
+ f"credential fail at runtime with 'Unrecognized Guid format'. Pass an "
73
+ f"option name (or its guid). Note: a REST credential's 'Method' is only "
74
+ f"used by the connection test; the Call API action carries its own 'Verb'."
75
+ )
76
+ return value
77
+
78
+
79
+ def build(config: dict, ctx: dict) -> dict:
80
+ template = ctx.get("template")
81
+ if not template:
82
+ raise UsageError("credential build needs the resolved template in ctx "
83
+ "(prepare_ctx fetches /api/Credentials/types)")
84
+ pidx = _property_index(template)
85
+ props = []
86
+ for label, value in (config.get("properties") or {}).items():
87
+ prop = pidx.get(str(label).strip().lower()) or pidx.get(label)
88
+ if not prop:
89
+ known = sorted({p["label"] for p in template.get("properties") or [] if p.get("label")})
90
+ raise UsageError(f"credential template {template.get('name')!r} has no "
91
+ f"property {label!r}; known: {known}")
92
+ props.append({"id": prop["id"], "value": _resolve_option(prop, value)})
93
+ dto = {
94
+ "gid": config.get("id"),
95
+ "gtid": template.get("gid"),
96
+ "gtpid": template.get("pid"),
97
+ "name": config["name"],
98
+ "tname": template.get("name"),
99
+ "type": template.get("type"),
100
+ # status is the "validated" flag in the manager list. prepare_ctx runs the
101
+ # /test probe and sets ctx["validated"] so a passing credential persists as
102
+ # validated (functionally identical to not-validated, but cleaner).
103
+ "status": bool(ctx.get("validated", False)),
104
+ "description": config.get("description", ""),
105
+ "properties": props,
106
+ }
107
+ return dto
108
+
109
+
110
+ def _test_ok(res) -> bool:
111
+ """Did POST /api/Credentials/test succeed? Response: {isSuccess, statusCode, ...}."""
112
+ if not isinstance(res, dict):
113
+ return False
114
+ if str(res.get("isSuccess")).strip().lower() == "true":
115
+ return True
116
+ try:
117
+ return 200 <= int(res.get("statusCode")) < 300
118
+ except (TypeError, ValueError):
119
+ return False
120
+
121
+
122
+ def prepare_ctx(client, config: dict) -> dict:
123
+ """Resolve the named credential template to its full definition (gid/pid +
124
+ property ids/options) and run the /test probe so a passing credential is saved
125
+ as **validated** (set ctx["validated"]; build maps it to the status flag). The
126
+ test uses the credential's own `Test endpoint` / test-parameters — those are for
127
+ validation only and do NOT flow to the action, so the action still needs its own
128
+ request params."""
129
+ want = (config.get("template") or "").strip().lower()
130
+ if not want:
131
+ raise UsageError("config.template is required (a credential type name, e.g. 'REST API')")
132
+ types = client.get("/api/Credentials/types")
133
+ for t in types or []:
134
+ if (t.get("name") or "").strip().lower() == want:
135
+ validated = False
136
+ try: # probe so it can persist as validated
137
+ res = client.post("/api/Credentials/test", build(config, {"template": t}))
138
+ validated = _test_ok(res)
139
+ except Exception: # noqa: BLE001 - never block a create on the probe
140
+ validated = False
141
+ return {"template": t, "validated": validated}
142
+ names = sorted((t.get("name") or "") for t in (types or []))
143
+ raise UsageError(f"unknown credential template {config.get('template')!r}; known: {names}")
144
+
145
+
146
+ def _extract_id(resp, dto):
147
+ if isinstance(resp, dict):
148
+ return resp.get("id") or resp.get("Id") or resp.get("gid")
149
+ return None
150
+
151
+
152
+ def _validate(client, dto, ctx):
153
+ """POST /api/Credentials/test — a live connection probe. Returns the raw
154
+ result; shape is server-defined."""
155
+ try:
156
+ res = client.post("/api/Credentials/test", dto)
157
+ return {"tested": True, "result": res}
158
+ except Exception as e: # noqa: BLE001 - report, don't abort the create
159
+ return {"tested": False, "error": str(e)[:300]}
160
+
161
+
162
+ def _edit(client, resource_id, config, ctx):
163
+ dto = build({**config, "id": resource_id}, ctx)
164
+ client.put("/api/Credentials", dto)
165
+ return client.get(f"/api/Credentials/{resource_id}")
166
+
167
+
168
+ COMPONENT = Component(
169
+ name="credential",
170
+ description="PROCESIO credential instance: saved values for a connection template.",
171
+ dir=DIR,
172
+ build=build,
173
+ create_endpoint=("POST", "/api/Credentials"),
174
+ get_path="/api/Credentials/{id}",
175
+ extract_id=_extract_id,
176
+ prepare_ctx=prepare_ctx,
177
+ validate=_validate,
178
+ edit=_edit,
179
+ )
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "PROCESIO Credential config",
4
+ "description": "Create/edit a credential instance for a connection template. 'template' is the type name (e.g. 'REST API', 'Outbound e-mail (SMTP)', 'SQL'); 'properties' maps property labels to values (select/radio option NAMES are accepted and resolved to their value).",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["template", "name", "properties"],
8
+ "properties": {
9
+ "template": {"type": "string", "minLength": 1, "description": "credential template/type name"},
10
+ "name": {"type": "string", "minLength": 1, "description": "instance name"},
11
+ "description": {"type": "string"},
12
+ "properties": {
13
+ "type": "object",
14
+ "description": "property label (or id) -> value (secrets included here). A value may be an array (e.g. an OAuth2 'Scopes' pills list) or object for structured properties.",
15
+ "minProperties": 1,
16
+ "additionalProperties": {"type": ["string", "number", "boolean", "null", "array", "object"]}
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,193 @@
1
+ # Credential sub-tool
2
+
3
+ Create/edit a PROCESIO **credential instance** — saved values for a connection
4
+ template (REST API, SMTP, SQL, SFTP, OAuth2 services, …). Actions reference a
5
+ credential by its instance id.
6
+
7
+ ## Config
8
+
9
+ ```json
10
+ {
11
+ "template": "REST API",
12
+ "name": "GitHub public",
13
+ "description": "no-auth REST",
14
+ "properties": {
15
+ "URL": "https://api.github.com",
16
+ "Authentication method": "No authentication",
17
+ "Method": "GET",
18
+ "Test endpoint": "/zen"
19
+ }
20
+ }
21
+ ```
22
+
23
+ - **template** — the connection type **name** (from `GET /api/Credentials/types`;
24
+ e.g. `REST API`, `Outbound e-mail (SMTP)`, `SQL`, `SFTP`).
25
+ - **properties** — property **label** (or id) → value. Secret values (passwords,
26
+ keys) go here. For `select`/`radio` properties you may pass the option **name**
27
+ (e.g. `"No authentication"`, `"GET"`) — it is resolved to the option's value.
28
+
29
+ ## Database credentials — SQL Server, MySQL, and Redis
30
+
31
+ The DB credential type (named **`SQL`** in the live catalog) is now multi-engine: the
32
+ platform added `DbClientType.MYSQL = 2` alongside `MSSQL = 1` (Web-Api / Process-Execution
33
+ `CustomMySQLClient`, PRC-3696), so the SAME credential template creates a **MySQL**
34
+ connection by choosing the **"Server Type"** option `MySQL` (live-confirmed option value
35
+ `40404040-0001-0001-0002-cccccccccccc`; MSSQL is `…-0001-…`). No new tool code — the builder
36
+ resolves the option name to its guid like any other select property. The DB actions
37
+ (**Execute Query** / **Execute Command**, GUIDs `76470756-…` / `a1625da6-…`; the newer V2 variants add a Timeout + Parameters tab) then run against it
38
+ unchanged, and the credential's Test button opens a real `MySqlConnection`. Live property
39
+ labels on the `SQL` type: Server Type, Protocol Type, Server Name, Port Number, Database
40
+ Name, Encrypt, Pooling, Trust Server Certificate, Authentication Type, Username, Password.
41
+
42
+ ```json
43
+ {
44
+ "template": "SQL",
45
+ "name": "reporting-mysql",
46
+ "properties": {
47
+ "Server Type": "MySQL",
48
+ "Server Name": "db.internal",
49
+ "Port Number": "3306",
50
+ "Database Name": "reporting",
51
+ "Username": "svc_report",
52
+ "Password": "<secret>"
53
+ }
54
+ }
55
+ ```
56
+
57
+ **Redis** is its own standalone credential type — `CredentialsType.REDIS = 9`, NOT a
58
+ `DbClientType`/SQL sub-type (Web-Api #1452 / Action-Core #130 / Process-Execution #250).
59
+ Set `template` to `Redis` and pass its properties: **Host** (req; bare host/IP), **Port**
60
+ (6379), **Username**, **Password**, **Database** (0), **UseTls** (false),
61
+ **ValidateCertificate** (true), **ConnectTimeoutSeconds** (5), **CommandTimeoutSeconds** (5;
62
+ both >0, ≤300). Its process action is **"Redis Connector"** (pick Operation family →
63
+ Operation; 19 typed ops across Key/String, Expiration, Hash, List, Set/SortedSet, Pub/Sub;
64
+ outputs Response / Found / AffectedCount; no raw-command execution). Template GUID referenced
65
+ by the connector: `80808080-0001-0000-0000-aaaaaaaaaaaa`.
66
+
67
+ > ⚠ **Redis shipped to prod but is not yet activated** — its credential template is not
68
+ > seeded in DataBase-Update, so `Redis` does not yet appear in `GET /api/Credentials/types`
69
+ > (only 34 types today; MySQL via `SQL` is live). The contract above is stable and will
70
+ > work as-is once activated; until then a Redis credential cannot be created. Verify with
71
+ > the property/option names before relying on the literals above. Still not activated at
72
+ > the v3.0.0 release (2026-10-21). (Outbound DB hosts are
73
+ > also SSRF-guarded by a host blacklist — `DbHostBlacklistChecker` — so a blacklisted /
74
+ > private host is rejected at connect time.)
75
+
76
+ **Prelude** ships as a REST-derived credential - `template: "REST API/ Prelude"`, Bearer
77
+ token, base `https://platform.prelude.so`, driving the Prelude connector (phone
78
+ verification + lookup). It IS live in `GET /api/Credentials/types` (verified 2026-09-21,
79
+ 35 types). See `PROCESIO-CONNECTORS-NOTES.md`.
80
+
81
+ **Azure Storage Account** is a standalone ROOT credential type since v3.0.0 (2026-10):
82
+ `CredentialsType.AZURE_STORAGE = 10`, template name `Azure Storage Account`, live in
83
+ `GET /api/Credentials/types`. It drives the **Azure Storage** connector (id
84
+ `83838383-0000-0000-0000-aaaaaaaaaaaa`). Fields (`be_id`):
85
+
86
+ | be_id | Notes |
87
+ | --- | --- |
88
+ | `AuthenticationType` | radio; the option values are GUIDs, their `be_value`s are `SharedKey` / `ServicePrincipal` |
89
+ | `AccountName` | |
90
+ | `AccountKey` | secret |
91
+ | `TenantId` | |
92
+ | `ClientId` | |
93
+ | `ClientSecret` | secret |
94
+ | `BlobEndpoint` | |
95
+
96
+ Resolve the `AuthenticationType` option from the live template rather than hardcoding its
97
+ GUID, and send only the fields the chosen method needs (see the conditional-property gotcha
98
+ below). Do not confuse it with the older derived template **"OAuth2 (REST API) / Azure
99
+ Storage"** (`REST_API_OAUTH_PREDEFINED`), which is an OAuth2 REST credential, not this root type.
100
+
101
+ > ⚠ **A credential read returns its secrets in plaintext (PRC-5556):** `credential-get`
102
+ > and the read API hand back stored secret values, not a masked placeholder. Never log,
103
+ > print, or echo a fetched credential, and never write one to a file the secret scanner
104
+ > then flags. Treat the whole object as sensitive.
105
+
106
+ ## API contract (verified live 2026-06-24)
107
+
108
+ - **Validate@source:** `POST /api/Credentials/test` — a **live connection probe**
109
+ (e.g. a real GET for REST). Run via `--dry-run` (returns the built DTO + test
110
+ result) or automatically on create.
111
+ - **Create:** `POST /api/Credentials` (`CredentialsDto {gtid, gtpid, name, properties[]}`)
112
+ → `{ "id": "<gid>" }`.
113
+ - **Get:** `GET /api/Credentials/{id}`.
114
+ - **Edit:** `PUT /api/Credentials` with `gid = id`.
115
+ - **Delete:** `DELETE /api/Credentials/{id}`.
116
+
117
+ ## Validated status (auto)
118
+
119
+ The credential list shows **validated** / **not validated** (the DTO `status` flag).
120
+ On create/edit the builder runs `POST /api/Credentials/test`; if it returns
121
+ `isSuccess`/2xx, the credential is saved as **validated** (`status:true`). A
122
+ not-validated credential is functionally identical — this is cosmetic. To make a
123
+ credential validate, give it whatever its connection type needs to probe: for REST,
124
+ set `Method` and a `Test endpoint` (e.g. `"?cx=...&q=..."`); for SMTP the connection
125
+ probe alone suffices. **These test parameters are for validation only — they do NOT
126
+ flow into the action**, so the action still needs its own request params (e.g. Call
127
+ API's `Request Parameters` queryParams).
128
+
129
+ ## Using a credential in a process
130
+
131
+ A credentials-type action property (e.g. Call API's "Select REST API credentials")
132
+ is bound by passing the credential **id** as the param value:
133
+ `"Select REST API credentials": "<credential id>"`.
134
+
135
+ ## Gotchas
136
+
137
+ - `gtid`/`gtpid` are stable per template; the builder reads them from the live
138
+ template so it never hardcodes ids.
139
+ - A credential type resolves to its ROOT template (changed in v3.0.0, 2026-10). Before, a
140
+ derived template that kept its parent's `Type` (the `REST API/ Prelude` template, for one)
141
+ made every custom-action upload whose action had a `Credentials_Rest` property fail with
142
+ `TEMPLATE_ERROR`. A derived template and its root now report the same root type.
143
+ - Some required properties are *conditional* (depend on a radio choice, e.g.
144
+ Basic-auth fields only matter when Basic auth is selected) — send only what your
145
+ chosen path needs.
146
+
147
+ ## Editing an existing credential — what a partial `--config` silently costs
148
+
149
+ `credential-edit` builds a **whole** DTO from the config you pass; it does not
150
+ merge with what is on the server. Everything you leave out is re-derived or
151
+ sent empty, so an edit meant to change one field can quietly move several.
152
+
153
+ - **Unconditionally-required properties must be re-sent even when you are not
154
+ changing them.** Omitting one fails the PUT with
155
+ `{"statusCode": 113, "value": "Required credentials fields should not be
156
+ empty.", "target": "<Property Label>"}`. The 400 names the property, so read
157
+ `target` rather than guessing. For REST API that is at least `Method`; a
158
+ credential that carries a test probe also needs its `Test endpoint`.
159
+ - **Re-send the current value of every property you want left alone**, read
160
+ from `credential-get` — not typed from a console display. A value copied out
161
+ of terminal output is truncated at the terminal width, and the edit then
162
+ shortens the stored field to whatever fitted on screen. A description silently
163
+ went from 183 characters to 88 this way. Read the field, pass the field.
164
+ - **`status` cannot be pinned.** The config schema refuses the key outright
165
+ (`Additional properties are not allowed ('status' was unexpected)`), because
166
+ it is not a setting: it is the manager list's *validated* flag, recomputed on
167
+ every create/edit from the `POST /api/Credentials/test` probe. Expect it to
168
+ move on any edit and report it rather than claiming the field held still.
169
+ - **The validated flag proves only what the test endpoint proves.** If the
170
+ credential's `Test endpoint` points at an unauthenticated route, the probe
171
+ passes with no credentials at all and *validated* says nothing about whether
172
+ the auth material works. Only a real call through the action does.
173
+ - **Collapsable properties come back with different scaffolding after an edit.**
174
+ The server starts emitting a `be_id` per sub-field and stops emitting
175
+ `configurations`/`pill`, and it drops blank placeholder rows from table
176
+ properties. None of that is a value change. When diffing a before/after
177
+ export, reduce each property to its `{sub-field id -> value}` leaves — do not
178
+ compare the raw blobs (five phantom differences) and do not skip the
179
+ properties (a real change would hide).
180
+ - **⚠ The tool's response echoes secret-bearing property values back**, in both
181
+ the dry-run DTO and the edit result. Never log, capture or persist that
182
+ stdout. Build the config in-process from the credential store and parse the
183
+ response rather than printing it.
184
+
185
+ ## No Bearer option in the REST API template
186
+
187
+ The authentication selector offers `NoAuth`, `BasicAuth`, `ApiKey`, `OAuth2`
188
+ and `Certificate` — there is **no Bearer**. To send `Authorization: Bearer
189
+ <token>`, choose API key authentication and set `Key` = `Authorization`,
190
+ `Value` = `Bearer <token>`, with the `Header` checkbox true (it routes the pair
191
+ to a header rather than a query parameter). The auth method must be given as the
192
+ option **name** (`"API key authentication"`), not its `be_value`; a raw string
193
+ saves but fails at runtime with `Unrecognized Guid format`.
@@ -0,0 +1,11 @@
1
+ {
2
+ "template": "REST API",
3
+ "name": "GitHub",
4
+ "description": "public",
5
+ "properties": {
6
+ "URL": "https://api.github.com",
7
+ "Authentication method": "No authentication",
8
+ "Method": "GET",
9
+ "Test endpoint": "/zen"
10
+ }
11
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "gid": null,
3
+ "gtid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
4
+ "gtpid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
5
+ "name": "GitHub",
6
+ "tname": "REST API",
7
+ "type": "rest",
8
+ "status": false,
9
+ "description": "public",
10
+ "properties": [
11
+ {
12
+ "id": "p-url",
13
+ "value": "https://api.github.com"
14
+ },
15
+ {
16
+ "id": "p-auth",
17
+ "value": "opt-noauth"
18
+ },
19
+ {
20
+ "id": "p-method",
21
+ "value": "opt-get"
22
+ },
23
+ {
24
+ "id": "p-test",
25
+ "value": "/zen"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "REST API",
3
+ "gid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
4
+ "pid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
5
+ "type": "rest",
6
+ "properties": [
7
+ {
8
+ "id": "p-url",
9
+ "label": "URL",
10
+ "type": "text"
11
+ },
12
+ {
13
+ "id": "p-auth",
14
+ "label": "Authentication method",
15
+ "type": "radio",
16
+ "options": [
17
+ {
18
+ "name": "No authentication",
19
+ "value": "opt-noauth"
20
+ },
21
+ {
22
+ "name": "Basic authentication",
23
+ "value": "opt-basic"
24
+ }
25
+ ]
26
+ },
27
+ {
28
+ "id": "p-method",
29
+ "label": "Method",
30
+ "type": "select",
31
+ "options": [
32
+ {
33
+ "name": "GET",
34
+ "value": "opt-get"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "id": "p-test",
40
+ "label": "Test endpoint",
41
+ "type": "text"
42
+ }
43
+ ]
44
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "_note": "Golden CredentialsDto (POST /api/Credentials body). gtid=template gid, gtpid=template pid (both stable per connection type, from GET /api/Credentials/types). properties[] = {id, value} where id is a template property id and value is the entered value (secrets live here; select/radio values are the option's guid). gid is null on create (server assigns) / the instance id on edit. Verified live 2026-06-24: created a REST API credential, POST /api/Credentials/test returned a live 200.",
3
+ "gid": null,
4
+ "gtid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
5
+ "gtpid": "10101010-0001-0000-0000-aaaaaaaaaaaa",
6
+ "name": "<name>",
7
+ "tname": "REST API",
8
+ "type": null,
9
+ "status": false,
10
+ "description": "",
11
+ "properties": [
12
+ {"id": "10101010-0001-0001-0000-bbbbbbbbbbbb", "value": "<URL>"},
13
+ {"id": "10101010-0001-0004-0000-bbbbbbbbbbbb", "value": "<auth method option guid>"},
14
+ {"id": "10101010-0001-0002-0000-bbbbbbbbbbbb", "value": "<method option guid>"}
15
+ ]
16
+ }
@@ -0,0 +1,147 @@
1
+ """Refresh `action_catalog.json` from a live PROCESIO workspace.
2
+
3
+ The bundle is the process builder's OFFLINE default: `prepare_ctx` tries the live
4
+ workspace catalog first and falls back here when that fetch is slow or fails. A
5
+ stale bundle therefore does not fail loudly - it fails as
6
+ `unknown action '<name>' - not in the action catalog` for any action the platform
7
+ has gained since the bundle was taken, and only when the live fetch also misses
8
+ its deadline. That is a confusing pair of symptoms for one cause, which is why
9
+ this script exists rather than the bundle being hand-edited.
10
+
11
+ `action_catalog.json`'s own note has referred to this file since 24/06/2026; it
12
+ was not actually present until a build needed the `Data Store` action and found
13
+ the bundle 1 action behind.
14
+
15
+ python _refresh.py --profile <name> --workspace-id <guid> # report
16
+ python _refresh.py --profile <name> --workspace-id <guid> --write # apply
17
+
18
+ ADDITIVE BY DEFAULT. `--write` adds actions the bundle is missing and leaves
19
+ existing entries alone, because an in-place replacement of an action whose shape
20
+ has changed would silently alter every process the builder emits. Pass
21
+ `--replace-existing` to take the live definition for actions that are already
22
+ present, and diff the result before committing it.
23
+ """
24
+ from __future__ import annotations
25
+
26
+ import argparse
27
+ import json
28
+ import subprocess
29
+ import sys
30
+ from pathlib import Path
31
+
32
+ HERE = Path(__file__).resolve().parent
33
+ BUNDLE = HERE / "action_catalog.json"
34
+ AAT = HERE.parents[3]
35
+
36
+
37
+ def fetch_live(profile: str, workspace_id: str, timeout: int = 300) -> list:
38
+ """`GET /api/Actions?getFullAction=true` through the registered tool.
39
+
40
+ That endpoint serialises every action's full configuration tree and is
41
+ occasionally very slow while the rest of the API stays sub-second, so this
42
+ runs with a generous timeout - it is a maintenance script, not a hot path."""
43
+ cmd = [sys.executable, str(AAT / "scripts" / "run-tool.py"), "procesio",
44
+ "request", "--method", "GET", "--path", "/api/Actions?getFullAction=true",
45
+ "--profile", profile, "--workspace-id", workspace_id]
46
+ proc = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8",
47
+ cwd=str(AAT), timeout=timeout)
48
+ body = json.loads(proc.stdout.strip() or "{}")
49
+ if "error" in body:
50
+ raise SystemExit(f"fetch failed: {json.dumps(body['error'])}")
51
+ res = body.get("result") or body
52
+ acts = res.get("actions") if isinstance(res, dict) else res
53
+ if not acts:
54
+ raise SystemExit("live catalog returned no actions")
55
+ return acts
56
+
57
+
58
+ def main() -> int:
59
+ ap = argparse.ArgumentParser(description=__doc__.split("\n")[0])
60
+ ap.add_argument("--profile", required=True)
61
+ ap.add_argument("--workspace-id", required=True)
62
+ ap.add_argument("--write", action="store_true",
63
+ help="apply the change; without it, only report")
64
+ ap.add_argument("--replace-existing", action="store_true",
65
+ help="also take the live definition for actions already "
66
+ "bundled (diff the result before committing)")
67
+ ap.add_argument("--procesio-only", action="store_true",
68
+ help="keep only platform actions (isProcesioAction=true) "
69
+ "from the live catalog, so a workspace's own custom / "
70
+ "connector actions never leak into the offline bundle. "
71
+ "Use this whenever the refresh runs against a real "
72
+ "workspace, which the bundle is not meant to mirror.")
73
+ a = ap.parse_args()
74
+
75
+ bundle = json.loads(BUNDLE.read_text(encoding="utf-8"))
76
+ live = fetch_live(a.profile, a.workspace_id)
77
+ if a.procesio_only:
78
+ live = [x for x in live if x.get("isProcesioAction")]
79
+
80
+ # Project every live action to the bundle's canonical key set (the union of keys
81
+ # already in the bundle) BEFORE comparing or storing. The live API attaches volatile,
82
+ # workspace-specific fields (workspaceId, createdBy/updatedBy, *On timestamps, etc.)
83
+ # that must never enter a portable, checked-in snapshot; stripping them also makes
84
+ # `--replace-existing` flag only REAL config changes instead of timestamp churn.
85
+ from collections import Counter
86
+ _kc = Counter(k for x in bundle["actions"] for k in x.keys())
87
+ _n = len(bundle["actions"])
88
+ # Canonical keys appear in most actions; a volatile field (or one a few polluted
89
+ # entries carry) appears in a minority, so a majority threshold keeps the portable
90
+ # shape without hardcoding a blacklist that a new volatile field could slip past.
91
+ keep = {k for k, c in _kc.items() if c > _n / 2} if _n else None
92
+
93
+ def canon(act):
94
+ return {k: v for k, v in act.items() if k in keep} if keep else act
95
+
96
+ # First position per name — the bundle may carry duplicate names, so replace by
97
+ # recorded index (identity-based .index() blew up on a duplicated action).
98
+ pos = {}
99
+ for i, x in enumerate(bundle["actions"]):
100
+ nm = x.get("name")
101
+ if nm and nm not in pos:
102
+ pos[nm] = i
103
+ name_counts = Counter(x.get("name") for x in bundle["actions"])
104
+ by_name = {x.get("name"): x for x in bundle["actions"] if x.get("name")}
105
+ added, replaced, skipped_ambiguous = [], [], []
106
+ for act in live:
107
+ name = act.get("name")
108
+ if not name:
109
+ continue
110
+ act = canon(act)
111
+ if name not in by_name:
112
+ added.append(name)
113
+ pos[name] = len(bundle["actions"])
114
+ bundle["actions"].append(act)
115
+ by_name[name] = act
116
+ elif a.replace_existing and by_name[name] != act:
117
+ # A name that occurs more than once (e.g. an action shipped in two versions
118
+ # under one display name) cannot be targeted safely by name — replacing would
119
+ # collapse both onto one live definition. Skip and report it; fix those by id.
120
+ if name_counts[name] > 1:
121
+ if name not in skipped_ambiguous:
122
+ skipped_ambiguous.append(name)
123
+ continue
124
+ replaced.append(name)
125
+ bundle["actions"][pos[name]] = act
126
+ by_name[name] = act
127
+
128
+ missing_live = sorted(n for n in by_name if n not in {x.get("name") for x in live})
129
+
130
+ report = {"bundled_before": len(by_name), "live": len(live),
131
+ "added": sorted(added), "replaced": sorted(replaced),
132
+ "skipped_ambiguous_names": sorted(skipped_ambiguous),
133
+ "in_bundle_but_not_live": missing_live,
134
+ "written": False}
135
+ if a.write and (added or replaced):
136
+ # LF on purpose: the tree is LF (.gitattributes), and a bare write_text on Windows
137
+ # would turn every line into CRLF and bury the real change in EOL churn.
138
+ BUNDLE.write_text(json.dumps(bundle, indent=1, ensure_ascii=False),
139
+ encoding="utf-8", newline="\n")
140
+ report["written"] = True
141
+ report["bundled_after"] = len(bundle["actions"])
142
+ print(json.dumps(report, indent=2))
143
+ return 0
144
+
145
+
146
+ if __name__ == "__main__":
147
+ raise SystemExit(main())