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,74 @@
1
+ """Auth / identity actions: connectivity, current user, API-key + LLM-key mgmt."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+
6
+ from actiondef import ActionDef
7
+
8
+
9
+ def check(client, args) -> dict:
10
+ """Connectivity + auth probe via GET /auth/me."""
11
+ me = client.get("/auth/me")
12
+ return {"ok": True, "email": me.get("email"), "role": me.get("role"),
13
+ "has_llm_key": me.get("has_llm_key"), "base_url": client.base_url}
14
+
15
+
16
+ def whoami(client, args) -> dict:
17
+ """Full GET /auth/me for the authenticated principal."""
18
+ return client.get("/auth/me")
19
+
20
+
21
+ def list_api_keys(client, args) -> dict:
22
+ keys = client.get("/auth/api-keys")
23
+ return {"api_keys": keys, "count": len(keys) if isinstance(keys, list) else None}
24
+
25
+
26
+ def create_api_key(client, args) -> dict:
27
+ """POST /auth/api-keys — returns full_key ONCE (store it immediately)."""
28
+ return client.post("/auth/api-keys", {"name": args.name})
29
+
30
+
31
+ def revoke_api_key(client, args) -> dict:
32
+ return client.delete(f"/auth/api-keys/{args.id}")
33
+
34
+
35
+ def set_llm_key(client, args) -> dict:
36
+ """POST /auth/llm-key — set the LLM provider key used to power builds."""
37
+ return client.post("/auth/llm-key",
38
+ {"api_key": args.api_key, "provider": args.provider})
39
+
40
+
41
+ def delete_llm_key(client, args) -> dict:
42
+ return client.delete("/auth/llm-key")
43
+
44
+
45
+ def _create_api_key_args(p: argparse.ArgumentParser) -> None:
46
+ p.add_argument("--name", required=True, help="Label for the new API key")
47
+
48
+
49
+ def _revoke_api_key_args(p: argparse.ArgumentParser) -> None:
50
+ p.add_argument("--id", required=True, help="API key id to revoke")
51
+
52
+
53
+ def _set_llm_key_args(p: argparse.ArgumentParser) -> None:
54
+ p.add_argument("--api-key", dest="api_key", required=True,
55
+ help="LLM provider API key (e.g. sk-ant-... / sk-...)")
56
+ p.add_argument("--provider", required=True,
57
+ help="Provider id, e.g. anthropic | openai")
58
+
59
+
60
+ ACTIONS: dict[str, ActionDef] = {
61
+ "check": ActionDef(check, description="Connectivity + auth probe (GET /auth/me)."),
62
+ "whoami": ActionDef(whoami, description="Full current-user record (GET /auth/me)."),
63
+ "list-api-keys": ActionDef(list_api_keys, description="List your API keys."),
64
+ "create-api-key": ActionDef(
65
+ create_api_key, _create_api_key_args,
66
+ description="Create an API key (full_key shown only once)."),
67
+ "revoke-api-key": ActionDef(
68
+ revoke_api_key, _revoke_api_key_args, description="Revoke an API key by id."),
69
+ "set-llm-key": ActionDef(
70
+ set_llm_key, _set_llm_key_args,
71
+ description="Set the LLM provider key that powers builds."),
72
+ "delete-llm-key": ActionDef(
73
+ delete_llm_key, description="Remove the stored LLM provider key."),
74
+ }
@@ -0,0 +1,396 @@
1
+ """Build lifecycle actions — the heart of the connector pipeline.
2
+
3
+ Stage flow (documentation/04-PIPELINE-ENGINE.md):
4
+ create -> gather (GATHER+CLARIFY) -> answer (->PLAN) -> approve-plan (->GENERATE,
5
+ pauses) -> approve-generate (->VALIDATE/COMPILE/FIX/DELIVER) -> artifact (.nupkg).
6
+ Feedback loops: revise-plan, regenerate / regenerate-file, validate-*, retry,
7
+ override-stage, post-message.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+
13
+ from actiondef import ActionDef
14
+ from client import build_is_settled
15
+ from errors import UsageError
16
+ from handlers.common import (add_build_id, add_pagination, add_wait_args,
17
+ parse_json, run_with_optional_wait)
18
+
19
+
20
+ # --------------------------------------------------------------------------- #
21
+ # Read / list
22
+ # --------------------------------------------------------------------------- #
23
+
24
+ def list_builds(client, args) -> dict:
25
+ params = {"page": args.page, "per_page": args.per_page}
26
+ if args.status:
27
+ params["status"] = args.status
28
+ if args.archive_status:
29
+ params["archive_status"] = args.archive_status
30
+ if args.created_by:
31
+ params["created_by"] = args.created_by
32
+ return client.get("/builds", params)
33
+
34
+
35
+ def get_build(client, args) -> dict:
36
+ return client.get(f"/builds/{args.build_id}")
37
+
38
+
39
+ def stage_override_options(client, args) -> dict:
40
+ return client.get("/builds/stage-override-options")
41
+
42
+
43
+ # --------------------------------------------------------------------------- #
44
+ # Create + run
45
+ # --------------------------------------------------------------------------- #
46
+
47
+ def create_build(client, args) -> dict:
48
+ body: dict = {}
49
+ if args.api_url:
50
+ body["api_url"] = args.api_url
51
+ if args.api_urls:
52
+ body["api_urls"] = parse_json(args.api_urls, what="api-urls", expect=list)
53
+ if args.api_docs_text:
54
+ body["api_docs_text"] = args.api_docs_text
55
+ if args.user_requirements:
56
+ body["user_requirements"] = args.user_requirements
57
+ if not (body.get("api_url") or body.get("api_urls") or body.get("api_docs_text")):
58
+ raise UsageError("provide at least one of --api-url / --api-urls / --api-docs-text")
59
+ return client.post("/builds", body)
60
+
61
+
62
+ def start_build(client, args) -> dict:
63
+ """Launch the FULL pipeline as a background task (no per-stage pauses)."""
64
+ return client.post(f"/builds/{args.build_id}/start")
65
+
66
+
67
+ def gather(client, args) -> dict:
68
+ """Run GATHER + CLARIFY synchronously; returns api_profile + questions.
69
+ With --wait, survives the proxy 504 by polling to the clarify pause."""
70
+ return run_with_optional_wait(
71
+ client, args.build_id,
72
+ lambda: client.post(f"/builds/{args.build_id}/gather"), args)
73
+
74
+
75
+ def answer(client, args) -> dict:
76
+ """Submit clarification answers; triggers PLAN. With --wait, polls to the
77
+ plan-review pause (survives the proxy 504)."""
78
+ answers = parse_json(args.answers, what="answers", expect=dict) or {}
79
+ return run_with_optional_wait(
80
+ client, args.build_id,
81
+ lambda: client.post(f"/builds/{args.build_id}/answers", {"answers": answers}),
82
+ args)
83
+
84
+
85
+ def approve_plan(client, args) -> dict:
86
+ """Approve the plan; triggers GENERATE (pauses after generation)."""
87
+ return client.post(f"/builds/{args.build_id}/approve")
88
+
89
+
90
+ def revise_plan(client, args) -> dict:
91
+ """Send free-text feedback to revise the implementation plan. With --wait,
92
+ polls back to the plan-review pause (survives the proxy 504)."""
93
+ return run_with_optional_wait(
94
+ client, args.build_id,
95
+ lambda: client.post(f"/builds/{args.build_id}/revise-plan",
96
+ {"feedback": args.feedback}), args)
97
+
98
+
99
+ def wait_build(client, args) -> dict:
100
+ """Poll get-build until the build settles (waiting_user or terminal), or
101
+ only-terminal with --until terminal. Use after approve-generate/retry/
102
+ start-build to block until compile finishes."""
103
+ build = client.wait_for_settled(
104
+ args.build_id, timeout=args.wait_timeout, interval=args.poll_interval,
105
+ until=args.until)
106
+ out = dict(build)
107
+ out["waited"] = True
108
+ out["settled"] = build_is_settled(build, args.until)
109
+ return out
110
+
111
+
112
+ def approve_generate(client, args) -> dict:
113
+ """Accept generated files; triggers VALIDATE -> COMPILE -> FIX -> DELIVER."""
114
+ return client.post(f"/builds/{args.build_id}/generate/approve")
115
+
116
+
117
+ def regenerate(client, args) -> dict:
118
+ """Regenerate with per-file and/or general instructions."""
119
+ body: dict = {}
120
+ if args.file_instructions:
121
+ body["file_instructions"] = parse_json(
122
+ args.file_instructions, what="file-instructions", expect=dict)
123
+ if args.step_instructions:
124
+ body["step_instructions"] = args.step_instructions
125
+ return client.post(f"/builds/{args.build_id}/generate/regenerate", body)
126
+
127
+
128
+ def regenerate_file(client, args) -> dict:
129
+ return client.post(
130
+ f"/builds/{args.build_id}/generate/regenerate-file",
131
+ {"filename": args.filename, "instructions": args.instructions})
132
+
133
+
134
+ def validate_autofix(client, args) -> dict:
135
+ return client.post(f"/builds/{args.build_id}/validate/autofix")
136
+
137
+
138
+ def validate_continue(client, args) -> dict:
139
+ return client.post(f"/builds/{args.build_id}/validate/continue")
140
+
141
+
142
+ def validate_return_to_generate(client, args) -> dict:
143
+ return client.post(f"/builds/{args.build_id}/validate/return-to-generate")
144
+
145
+
146
+ def retry(client, args) -> dict:
147
+ body: dict = {}
148
+ if args.from_step is not None:
149
+ body["from_step"] = args.from_step
150
+ return client.post(f"/builds/{args.build_id}/retry", body)
151
+
152
+
153
+ def override_stage(client, args) -> dict:
154
+ return client.post(
155
+ f"/builds/{args.build_id}/override-stage",
156
+ {"target_step": args.target_step, "target_status": args.target_status})
157
+
158
+
159
+ def reset(client, args) -> dict:
160
+ return client.post(f"/builds/{args.build_id}/reset")
161
+
162
+
163
+ def revise(client, args) -> dict:
164
+ return client.post(f"/builds/{args.build_id}/revise")
165
+
166
+
167
+ def set_version(client, args) -> dict:
168
+ return client.patch(
169
+ f"/builds/{args.build_id}/version",
170
+ {"major": args.major, "minor": args.minor, "patch": args.patch})
171
+
172
+
173
+ def archive(client, args) -> dict:
174
+ return client.patch(f"/builds/{args.build_id}/archive")
175
+
176
+
177
+ def unarchive(client, args) -> dict:
178
+ return client.patch(f"/builds/{args.build_id}/unarchive")
179
+
180
+
181
+ # --------------------------------------------------------------------------- #
182
+ # Logs / events / messages
183
+ # --------------------------------------------------------------------------- #
184
+
185
+ def logs(client, args) -> dict:
186
+ params = {"page": args.page, "page_size": args.page_size}
187
+ for f in ("stage", "model", "model_search", "after", "before"):
188
+ v = getattr(args, f)
189
+ if v:
190
+ params[f] = v
191
+ if args.success is not None:
192
+ params["success"] = str(args.success).lower()
193
+ return client.get(f"/builds/{args.build_id}/logs", params)
194
+
195
+
196
+ def events(client, args) -> dict:
197
+ params = {"page": args.page, "per_page": args.per_page}
198
+ for f in ("step", "level", "event_type"):
199
+ v = getattr(args, f)
200
+ if v:
201
+ params[f] = v
202
+ return client.get(f"/builds/{args.build_id}/events", params)
203
+
204
+
205
+ def list_messages(client, args) -> dict:
206
+ params = {"page": args.page, "per_page": args.per_page}
207
+ if args.step:
208
+ params["step"] = args.step
209
+ return client.get(f"/builds/{args.build_id}/messages", params)
210
+
211
+
212
+ def post_message(client, args) -> dict:
213
+ return client.post(f"/builds/{args.build_id}/messages",
214
+ {"step": args.step, "content": args.content})
215
+
216
+
217
+ # --------------------------------------------------------------------------- #
218
+ # argparse
219
+ # --------------------------------------------------------------------------- #
220
+
221
+ def _list_builds_args(p: argparse.ArgumentParser) -> None:
222
+ add_pagination(p)
223
+ p.add_argument("--status", help="Filter by pipeline status")
224
+ p.add_argument("--archive-status", dest="archive_status",
225
+ help="active | archived | all")
226
+ p.add_argument("--created-by", dest="created_by",
227
+ help="UUID CSV (admin only)")
228
+
229
+
230
+ def _create_build_args(p: argparse.ArgumentParser) -> None:
231
+ p.add_argument("--api-url", dest="api_url", help="Single API docs URL")
232
+ p.add_argument("--api-urls", dest="api_urls", help="JSON array of doc URLs")
233
+ p.add_argument("--api-docs-text", dest="api_docs_text",
234
+ help="Pasted API documentation text")
235
+ p.add_argument("--user-requirements", dest="user_requirements",
236
+ help="What the connector should do")
237
+
238
+
239
+ def _gather_args(p: argparse.ArgumentParser) -> None:
240
+ add_build_id(p)
241
+ add_wait_args(p)
242
+
243
+
244
+ def _answer_args(p: argparse.ArgumentParser) -> None:
245
+ add_build_id(p)
246
+ p.add_argument("--answers", required=True,
247
+ help='JSON object {"q1":"a1","q2":"a2"}')
248
+ add_wait_args(p)
249
+
250
+
251
+ def _revise_plan_args(p: argparse.ArgumentParser) -> None:
252
+ add_build_id(p)
253
+ p.add_argument("--feedback", required=True, help="Plan revision feedback")
254
+ add_wait_args(p)
255
+
256
+
257
+ def _wait_build_args(p: argparse.ArgumentParser) -> None:
258
+ add_build_id(p)
259
+ p.add_argument("--wait-timeout", dest="wait_timeout", type=int, default=600,
260
+ help="Max seconds to poll (default 600)")
261
+ p.add_argument("--poll-interval", dest="poll_interval", type=int, default=8,
262
+ help="Seconds between polls (default 8)")
263
+ p.add_argument("--until", default="settled",
264
+ help="settled (waiting_user or terminal) | terminal (only completed/failed/...)")
265
+
266
+
267
+ def _regenerate_args(p: argparse.ArgumentParser) -> None:
268
+ add_build_id(p)
269
+ p.add_argument("--file-instructions", dest="file_instructions",
270
+ help='JSON object {"File.cs":"instructions"}')
271
+ p.add_argument("--step-instructions", dest="step_instructions",
272
+ help="General feedback for the whole generation step")
273
+
274
+
275
+ def _regenerate_file_args(p: argparse.ArgumentParser) -> None:
276
+ add_build_id(p)
277
+ p.add_argument("--filename", required=True, help="File to regenerate")
278
+ p.add_argument("--instructions", required=True, help="Instructions for the file")
279
+
280
+
281
+ def _retry_args(p: argparse.ArgumentParser) -> None:
282
+ add_build_id(p)
283
+ p.add_argument("--from-step", dest="from_step", type=int,
284
+ help="Stage number to retry from (default: last failed)")
285
+
286
+
287
+ def _override_stage_args(p: argparse.ArgumentParser) -> None:
288
+ add_build_id(p)
289
+ p.add_argument("--target-step", dest="target_step", type=int, required=True,
290
+ help="Target stage 1-8")
291
+ p.add_argument("--target-status", dest="target_status", required=True,
292
+ help="running | waiting_user")
293
+
294
+
295
+ def _set_version_args(p: argparse.ArgumentParser) -> None:
296
+ add_build_id(p)
297
+ p.add_argument("--major", type=int, required=True)
298
+ p.add_argument("--minor", type=int, required=True)
299
+ p.add_argument("--patch", type=int, required=True)
300
+
301
+
302
+ def _post_message_args(p: argparse.ArgumentParser) -> None:
303
+ add_build_id(p)
304
+ p.add_argument("--step", required=True, help="Pipeline step, e.g. clarify | plan")
305
+ p.add_argument("--content", required=True, help="Message text")
306
+
307
+
308
+ def _logs_args(p: argparse.ArgumentParser) -> None:
309
+ add_build_id(p)
310
+ p.add_argument("--page", type=int, default=1)
311
+ p.add_argument("--page-size", dest="page_size", type=int, default=100,
312
+ help="Max 500")
313
+ p.add_argument("--stage", help="Comma-separated stage names")
314
+ p.add_argument("--success", type=lambda v: v.lower() in ("1", "true", "yes"),
315
+ default=None, help="Filter by success true/false")
316
+ p.add_argument("--model", help="Comma-separated model names")
317
+ p.add_argument("--model-search", dest="model_search", help="Substring model search")
318
+ p.add_argument("--after", help="ISO datetime lower bound")
319
+ p.add_argument("--before", help="ISO datetime upper bound")
320
+
321
+
322
+ def _events_args(p: argparse.ArgumentParser) -> None:
323
+ add_build_id(p)
324
+ add_pagination(p, 100)
325
+ p.add_argument("--step", help="Filter by step")
326
+ p.add_argument("--level", help="Filter by level")
327
+ p.add_argument("--event-type", dest="event_type", help="Filter by event type")
328
+
329
+
330
+ def _messages_args(p: argparse.ArgumentParser) -> None:
331
+ add_build_id(p)
332
+ add_pagination(p, 100)
333
+ p.add_argument("--step", help="Filter by step")
334
+
335
+
336
+ def _build_id_only(p: argparse.ArgumentParser) -> None:
337
+ add_build_id(p)
338
+
339
+
340
+ ACTIONS: dict[str, ActionDef] = {
341
+ "list-builds": ActionDef(list_builds, _list_builds_args,
342
+ description="List builds (paginated, filterable)."),
343
+ "get-build": ActionDef(get_build, _build_id_only,
344
+ description="Full build detail (all JSONB fields)."),
345
+ "stage-override-options": ActionDef(
346
+ stage_override_options,
347
+ description="Valid stage-override targets for override-stage."),
348
+ "create-build": ActionDef(create_build, _create_build_args,
349
+ description="Create a build from URL(s) / pasted docs."),
350
+ "start-build": ActionDef(start_build, _build_id_only,
351
+ description="Run the FULL pipeline as a background task."),
352
+ "gather": ActionDef(gather, _gather_args,
353
+ description="Run GATHER+CLARIFY (profile+questions); --wait survives the 504."),
354
+ "wait-build": ActionDef(wait_build, _wait_build_args,
355
+ description="Poll get-build until settled/terminal (use after approve-generate/retry)."),
356
+ "answer": ActionDef(answer, _answer_args,
357
+ description="Submit clarification answers; triggers PLAN."),
358
+ "approve-plan": ActionDef(approve_plan, _build_id_only,
359
+ description="Approve plan; triggers GENERATE (then pauses)."),
360
+ "revise-plan": ActionDef(revise_plan, _revise_plan_args,
361
+ description="Revise the plan with free-text feedback."),
362
+ "approve-generate": ActionDef(
363
+ approve_generate, _build_id_only,
364
+ description="Accept generated files; runs VALIDATE->COMPILE->FIX->DELIVER."),
365
+ "regenerate": ActionDef(regenerate, _regenerate_args,
366
+ description="Regenerate files with per-file/general instructions."),
367
+ "regenerate-file": ActionDef(regenerate_file, _regenerate_file_args,
368
+ description="Regenerate a single file with instructions."),
369
+ "validate-autofix": ActionDef(validate_autofix, _build_id_only,
370
+ description="Auto-fix validation findings."),
371
+ "validate-continue": ActionDef(validate_continue, _build_id_only,
372
+ description="Continue past validation to COMPILE."),
373
+ "validate-return-to-generate": ActionDef(
374
+ validate_return_to_generate, _build_id_only,
375
+ description="Return from VALIDATE back to GENERATE."),
376
+ "retry": ActionDef(retry, _retry_args,
377
+ description="Retry the pipeline from a step (or last failed)."),
378
+ "override-stage": ActionDef(override_stage, _override_stage_args,
379
+ description="Jump the build to a target step/status."),
380
+ "reset": ActionDef(reset, _build_id_only,
381
+ description="Reset a failed/clarifying/planning build to pending."),
382
+ "revise": ActionDef(revise, _build_id_only,
383
+ description="Re-open a COMPLETED build to the generate pause for a small fix (then regenerate-file + approve-generate); bumps the version."),
384
+ "set-version": ActionDef(set_version, _set_version_args,
385
+ description="Set Major.Minor.Patch (at Plan/waiting_user)."),
386
+ "archive": ActionDef(archive, _build_id_only, description="Archive a build (admin)."),
387
+ "unarchive": ActionDef(unarchive, _build_id_only,
388
+ description="Unarchive a build (admin)."),
389
+ "logs": ActionDef(logs, _logs_args,
390
+ description="Per-build stage logs (model/cost/token breakdown)."),
391
+ "events": ActionDef(events, _events_args, description="Per-build pipeline events."),
392
+ "list-messages": ActionDef(list_messages, _messages_args,
393
+ description="Chat/system messages for a build."),
394
+ "post-message": ActionDef(post_message, _post_message_args,
395
+ description="Post a chat message to a build/step."),
396
+ }
@@ -0,0 +1,104 @@
1
+ """Shared argparse + JSON-parsing helpers for connector-builder handlers."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import json
6
+ from pathlib import Path
7
+ from typing import Any, Callable
8
+
9
+ import requests
10
+
11
+ from client import build_is_settled
12
+ from errors import ApiError, UsageError
13
+
14
+
15
+ def parse_json(raw: str | None, *, what: str = "value", expect: type | None = None) -> Any:
16
+ """Parse a JSON CLI argument; raise UsageError with a helpful message."""
17
+ if raw is None:
18
+ return None
19
+ try:
20
+ data = json.loads(raw)
21
+ except json.JSONDecodeError as e:
22
+ raise UsageError(f"--{what} must be valid JSON, got: {e}") from e
23
+ if expect is not None and not isinstance(data, expect):
24
+ names = expect.__name__ if isinstance(expect, type) else " or ".join(
25
+ t.__name__ for t in expect)
26
+ raise UsageError(f"--{what} must be a JSON {names}")
27
+ return data
28
+
29
+
30
+ def load_text_or_file(inline: str | None, file_path: str | None, *, what: str) -> str | None:
31
+ """Return inline text, or read it from a file (file wins precedence check is
32
+ XOR-ish: at most one). Used for content / config payloads that may be large."""
33
+ if inline is not None and file_path is not None:
34
+ raise UsageError(f"pass either --{what} or --{what}-file, not both")
35
+ if file_path is not None:
36
+ p = Path(file_path)
37
+ if not p.is_file():
38
+ raise UsageError(f"--{what}-file not found: {file_path}")
39
+ return p.read_text(encoding="utf-8")
40
+ return inline
41
+
42
+
43
+ def add_build_id(p: argparse.ArgumentParser) -> None:
44
+ p.add_argument("--build-id", dest="build_id", required=True,
45
+ help="Build UUID")
46
+
47
+
48
+ def add_pagination(p: argparse.ArgumentParser, default_per_page: int = 20) -> None:
49
+ p.add_argument("--page", type=int, default=1, help="Page number (default 1)")
50
+ p.add_argument("--per-page", dest="per_page", type=int, default=default_per_page,
51
+ help=f"Items per page (default {default_per_page})")
52
+
53
+
54
+ def add_wait_args(p: argparse.ArgumentParser) -> None:
55
+ """Opt-in polling for a synchronous LLM stage that 504s at the proxy but
56
+ completes server-side."""
57
+ p.add_argument("--wait", action="store_true",
58
+ help="Poll get-build until the stage settles (survives the proxy 504)")
59
+ p.add_argument("--wait-timeout", dest="wait_timeout", type=int, default=600,
60
+ help="Max seconds to poll when --wait (default 600)")
61
+ p.add_argument("--poll-interval", dest="poll_interval", type=int, default=8,
62
+ help="Seconds between polls when --wait (default 8)")
63
+
64
+
65
+ # Proxy/gateway statuses that mean "the backend is still working" rather than a
66
+ # real failure — swallow these under --wait and fall through to polling.
67
+ _TRANSIENT_HTTP = {502, 503, 504}
68
+
69
+
70
+ def run_with_optional_wait(client, build_id: str, trigger: Callable[[], Any],
71
+ args, *, until: str = "settled") -> dict:
72
+ """Run a stage-triggering call. Without --wait, return its result verbatim.
73
+ With --wait: record the build's updated_at, fire the trigger (swallowing a
74
+ 502/503/504 or a client-side timeout — the stage keeps running server-side),
75
+ then poll get-build until settled. Returns the settled build detail plus
76
+ ``waited``/``settled`` markers (and ``trigger_note`` if the trigger 504'd)."""
77
+ if not getattr(args, "wait", False):
78
+ return trigger()
79
+
80
+ baseline = None
81
+ try:
82
+ baseline = client.get_build(build_id).get("updated_at")
83
+ except Exception: # noqa: BLE001 - baseline is best-effort
84
+ baseline = None
85
+
86
+ note = None
87
+ try:
88
+ trigger()
89
+ except ApiError as e:
90
+ if e.status_code not in _TRANSIENT_HTTP:
91
+ raise
92
+ note = f"trigger returned HTTP {e.status_code}; polled for completion"
93
+ except (requests.exceptions.Timeout, requests.exceptions.ConnectionError):
94
+ note = "trigger timed out client-side; polled for completion"
95
+
96
+ build = client.wait_for_settled(
97
+ build_id, timeout=args.wait_timeout, interval=args.poll_interval,
98
+ until=until, baseline_updated_at=baseline)
99
+ out = dict(build)
100
+ out["waited"] = True
101
+ out["settled"] = build_is_settled(build, until)
102
+ if note:
103
+ out["trigger_note"] = note
104
+ return out
@@ -0,0 +1,111 @@
1
+ """Generated-file + artifact actions: versions, content read/write, downloads.
2
+
3
+ The compiled `.nupkg` (download-artifact) is the bridge to PROCESIO: hand it to
4
+ `procesio customaction-upload --file <nupkg>` to install the connector for live
5
+ testing.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import argparse
10
+
11
+ from actiondef import ActionDef
12
+ from errors import UsageError
13
+ from handlers.common import add_build_id, load_text_or_file
14
+
15
+
16
+ def list_file_versions(client, args) -> dict:
17
+ return client.get(f"/builds/{args.build_id}/files/versions")
18
+
19
+
20
+ def get_file_version(client, args) -> dict:
21
+ return client.get(
22
+ f"/builds/{args.build_id}/files/{args.filename}/versions/{args.version}")
23
+
24
+
25
+ def update_file(client, args) -> dict:
26
+ content = load_text_or_file(args.content, args.content_file, what="content")
27
+ if content is None:
28
+ raise UsageError("provide --content or --content-file")
29
+ return client.put(f"/builds/{args.build_id}/files/{args.filename}",
30
+ {"content": content})
31
+
32
+
33
+ def set_file_instructions(client, args) -> dict:
34
+ return client.put(
35
+ f"/builds/{args.build_id}/files/{args.filename}/instructions",
36
+ {"instructions": args.instructions})
37
+
38
+
39
+ def download_file(client, args) -> dict:
40
+ return client.download(
41
+ f"/builds/{args.build_id}/files/{args.filename}/download", args.out)
42
+
43
+
44
+ def download_all(client, args) -> dict:
45
+ return client.download(f"/builds/{args.build_id}/files/download-all", args.out)
46
+
47
+
48
+ def download_artifact(client, args) -> dict:
49
+ """Download the compiled .nupkg (or .zip fallback). This is the package you
50
+ upload to PROCESIO via `procesio customaction-upload`."""
51
+ return client.download(f"/builds/{args.build_id}/artifact", args.out)
52
+
53
+
54
+ def _versions_args(p: argparse.ArgumentParser) -> None:
55
+ add_build_id(p)
56
+
57
+
58
+ def _get_file_version_args(p: argparse.ArgumentParser) -> None:
59
+ add_build_id(p)
60
+ p.add_argument("--filename", required=True)
61
+ p.add_argument("--version", required=True, help="Version number")
62
+
63
+
64
+ def _update_file_args(p: argparse.ArgumentParser) -> None:
65
+ add_build_id(p)
66
+ p.add_argument("--filename", required=True)
67
+ p.add_argument("--content", help="New file content (inline)")
68
+ p.add_argument("--content-file", dest="content_file",
69
+ help="Read new content from this path")
70
+
71
+
72
+ def _set_file_instructions_args(p: argparse.ArgumentParser) -> None:
73
+ add_build_id(p)
74
+ p.add_argument("--filename", required=True)
75
+ p.add_argument("--instructions", required=True)
76
+
77
+
78
+ def _download_file_args(p: argparse.ArgumentParser) -> None:
79
+ add_build_id(p)
80
+ p.add_argument("--filename", required=True)
81
+ p.add_argument("--out", required=True, help="Output file path")
82
+
83
+
84
+ def _download_target_args(p: argparse.ArgumentParser) -> None:
85
+ add_build_id(p)
86
+ p.add_argument("--out", required=True, help="Output file path")
87
+
88
+
89
+ ACTIONS: dict[str, ActionDef] = {
90
+ "list-file-versions": ActionDef(
91
+ list_file_versions, _versions_args,
92
+ description="Version metadata for every file in a build (no content)."),
93
+ "get-file-version": ActionDef(
94
+ get_file_version, _get_file_version_args,
95
+ description="Full content of one file at a specific version."),
96
+ "update-file": ActionDef(
97
+ update_file, _update_file_args,
98
+ description="Overwrite a file's content (inline or from --content-file)."),
99
+ "set-file-instructions": ActionDef(
100
+ set_file_instructions, _set_file_instructions_args,
101
+ description="Save per-file regeneration instructions."),
102
+ "download-file": ActionDef(
103
+ download_file, _download_file_args,
104
+ description="Download one generated file to --out."),
105
+ "download-all": ActionDef(
106
+ download_all, _download_target_args,
107
+ description="Download all generated files as a zip to --out."),
108
+ "download-artifact": ActionDef(
109
+ download_artifact, _download_target_args,
110
+ description="Download the compiled .nupkg to --out (upload to PROCESIO)."),
111
+ }