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,24 @@
1
+ """ActionDef - dispatchable action unit for the connector-builder tool.
2
+
3
+ Mirrors the redmine/quickmail-web pattern. Actions that talk to the API receive
4
+ a live ``client`` first (so tests inject a fake and run with no network);
5
+ ``needs_client`` decides that. Pure/local actions (none today, but kept for
6
+ parity) leave it False and receive only the parsed argparse namespace.
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ from dataclasses import dataclass
12
+ from typing import Callable
13
+
14
+
15
+ def _no_args(_parser: argparse.ArgumentParser) -> None:
16
+ return None
17
+
18
+
19
+ @dataclass
20
+ class ActionDef:
21
+ func: Callable
22
+ add_args: Callable[[argparse.ArgumentParser], None] = _no_args
23
+ needs_client: bool = True
24
+ description: str = ""
@@ -0,0 +1,251 @@
1
+ """HTTP client for the AI Connector Builder API (connector-builder.procesio.app).
2
+
3
+ Both supported auth modes resolve to the SAME wire shape: an
4
+ ``Authorization: Bearer <token>`` header (verified against the backend's
5
+ ``app/core/permissions.py`` — an API key is just a bearer token that starts with
6
+ ``acb_``). So the client only ever sets one header; how the token is obtained is
7
+ the only difference between the two modes:
8
+
9
+ 1. **API key** (default, simplest): the ``acb_...`` key, stored under
10
+ ``agents-and-tools:connector-builder:api-key``. Used verbatim as the bearer.
11
+ 2. **Username / password**: ``username`` + ``password`` secrets → ``POST
12
+ /auth/login`` → ``access_token`` (a JWT) → used as the bearer. This is the
13
+ "web-tool" login the user referred to, done over the REST API instead of a
14
+ browser (the app exposes the same backend at ``/api/*``).
15
+
16
+ Selection order (override with env ``CONNECTOR_BUILDER_AUTH=apikey|userpass``):
17
+ api-key if stored, else username+password. Base URL defaults to the production
18
+ host and is overridable via env ``CONNECTOR_BUILDER_BASE_URL``.
19
+
20
+ See CONNECTOR-BUILDER-API-NOTES.md for the wire details.
21
+ """
22
+ from __future__ import annotations
23
+
24
+ import os
25
+ import time
26
+ from pathlib import Path
27
+ from typing import Any, Optional
28
+
29
+ import requests
30
+
31
+ from errors import ApiError, CredentialError
32
+
33
+ # A build is "done for now" when it pauses for the user or reaches a terminal
34
+ # state. The sync LLM stages (gather/answer/revise-plan) 504 at the proxy but
35
+ # keep running server-side, so --wait polls get-build until one of these holds.
36
+ TERMINAL_STATUSES = {"completed", "failed", "delivered", "succeeded", "cancelled"}
37
+
38
+
39
+ def build_is_settled(build: dict, until: str = "settled") -> bool:
40
+ """until='terminal' → only completed/failed/... ; 'settled' → also a
41
+ waiting_user pause (a stage finished and is waiting for the next action)."""
42
+ status = (build.get("status") or "").lower()
43
+ step = (build.get("step_status") or "").lower()
44
+ if status in TERMINAL_STATUSES:
45
+ return True
46
+ if until == "settled" and step == "waiting_user":
47
+ return True
48
+ return False
49
+
50
+ TOOL = "connector-builder"
51
+
52
+ # Production: Caddy strips the /api/* prefix and forwards to the backend, so the
53
+ # REST surface documented in documentation/03-API-REFERENCE.md lives under /api.
54
+ DEFAULT_BASE_URL = "https://connector-builder.procesio.app/api"
55
+
56
+ TIMEOUT_CONNECT = 10
57
+ TIMEOUT_READ = 180 # pipeline gather/plan calls can be slow; downloads stream
58
+
59
+
60
+ def get_base_url() -> str:
61
+ return os.environ.get("CONNECTOR_BUILDER_BASE_URL", DEFAULT_BASE_URL).rstrip("/")
62
+
63
+
64
+ def _cred(name: str) -> Optional[str]:
65
+ # Env override first (handy for CI / tests), then Credential Manager.
66
+ env = os.environ.get(f"CONNECTOR_BUILDER_{name.upper().replace('-', '_')}")
67
+ if env:
68
+ return env
69
+ import sys
70
+ framework_root = Path(__file__).resolve().parents[2]
71
+ if str(framework_root) not in sys.path:
72
+ sys.path.insert(0, str(framework_root))
73
+ from tools._lib import creds
74
+ return creds.get_optional(TOOL, name)
75
+
76
+
77
+ def resolve_token() -> str:
78
+ """Resolve the bearer token per the configured/derived auth mode."""
79
+ mode = os.environ.get("CONNECTOR_BUILDER_AUTH", "").strip().lower()
80
+ api_key = _cred("api-key")
81
+ username = _cred("username")
82
+ password = _cred("password")
83
+
84
+ if not mode:
85
+ mode = "apikey" if api_key else ("userpass" if username and password else "")
86
+
87
+ if mode == "apikey":
88
+ if not api_key:
89
+ raise CredentialError(
90
+ "auth mode 'apikey' but no api-key stored. Store it with:\n"
91
+ " python scripts/set-credential.py connector-builder api-key")
92
+ return api_key
93
+ if mode == "userpass":
94
+ if not (username and password):
95
+ raise CredentialError(
96
+ "auth mode 'userpass' but username/password not both stored. Set:\n"
97
+ " python scripts/set-credential.py connector-builder username\n"
98
+ " python scripts/set-credential.py connector-builder password")
99
+ return login(username, password)
100
+ raise CredentialError(
101
+ "no connector-builder credential found. Store an API key:\n"
102
+ " python scripts/set-credential.py connector-builder api-key\n"
103
+ "or a username + password:\n"
104
+ " python scripts/set-credential.py connector-builder username\n"
105
+ " python scripts/set-credential.py connector-builder password")
106
+
107
+
108
+ def login(username: str, password: str, base_url: Optional[str] = None) -> str:
109
+ """POST /auth/login → access_token (JWT). Used by the userpass auth mode."""
110
+ base = (base_url or get_base_url()).rstrip("/")
111
+ r = requests.post(
112
+ f"{base}/auth/login",
113
+ json={"email": username, "password": password},
114
+ timeout=(TIMEOUT_CONNECT, TIMEOUT_READ),
115
+ )
116
+ if r.status_code >= 400:
117
+ raise ApiError(r.status_code, "/auth/login", _detail(r))
118
+ tok = r.json().get("access_token")
119
+ if not tok:
120
+ raise ApiError(r.status_code, "/auth/login", "login returned no access_token")
121
+ return tok
122
+
123
+
124
+ def _detail(resp: "requests.Response") -> str:
125
+ try:
126
+ body = resp.json()
127
+ if isinstance(body, dict):
128
+ return str(body.get("detail") or body.get("message") or body)
129
+ return str(body)
130
+ except ValueError:
131
+ return (resp.text or "")[:500]
132
+
133
+
134
+ class ConnectorBuilderClient:
135
+ """Thin REST wrapper. One method per HTTP verb, plus multipart + binary
136
+ download. Every response is JSON except the binary download helpers."""
137
+
138
+ def __init__(self, base_url: Optional[str] = None, token: Optional[str] = None,
139
+ session: Any = None):
140
+ self.base_url = (base_url or get_base_url()).rstrip("/")
141
+ self._token = token # lazily resolved on first use if None
142
+ self._s = session or requests.Session()
143
+
144
+ # -- auth ---------------------------------------------------------------
145
+ @property
146
+ def token(self) -> str:
147
+ if self._token is None:
148
+ self._token = resolve_token()
149
+ return self._token
150
+
151
+ def _headers(self, extra: Optional[dict] = None) -> dict:
152
+ h = {
153
+ "Authorization": f"Bearer {self.token}",
154
+ "Accept": "application/json",
155
+ "User-Agent": "agents-and-tools-connector-builder/0.1",
156
+ }
157
+ if extra:
158
+ h.update(extra)
159
+ return h
160
+
161
+ def _url(self, path: str) -> str:
162
+ return f"{self.base_url}/{path.lstrip('/')}"
163
+
164
+ # -- verbs --------------------------------------------------------------
165
+ def request(self, method: str, path: str, *, params: Optional[dict] = None,
166
+ json_body: Any = None) -> Any:
167
+ r = self._s.request(
168
+ method.upper(), self._url(path),
169
+ params=params, json=json_body,
170
+ headers=self._headers(),
171
+ timeout=(TIMEOUT_CONNECT, TIMEOUT_READ),
172
+ )
173
+ if r.status_code >= 400:
174
+ raise ApiError(r.status_code, path, _detail(r))
175
+ if r.status_code == 204 or not (r.content or b"").strip():
176
+ return {}
177
+ try:
178
+ return r.json()
179
+ except ValueError:
180
+ return {"raw": r.text}
181
+
182
+ def get(self, path: str, params: Optional[dict] = None) -> Any:
183
+ return self.request("GET", path, params=params)
184
+
185
+ def post(self, path: str, json_body: Any = None, params: Optional[dict] = None) -> Any:
186
+ return self.request("POST", path, params=params, json_body=json_body)
187
+
188
+ def put(self, path: str, json_body: Any = None) -> Any:
189
+ return self.request("PUT", path, json_body=json_body)
190
+
191
+ def patch(self, path: str, json_body: Any = None) -> Any:
192
+ return self.request("PATCH", path, json_body=json_body)
193
+
194
+ def delete(self, path: str, params: Optional[dict] = None) -> Any:
195
+ return self.request("DELETE", path, params=params)
196
+
197
+ # -- polling ------------------------------------------------------------
198
+ def get_build(self, build_id: str) -> dict:
199
+ return self.get(f"/builds/{build_id}")
200
+
201
+ def wait_for_settled(self, build_id: str, *, timeout: int = 600,
202
+ interval: int = 8, until: str = "settled",
203
+ baseline_updated_at: Optional[str] = None,
204
+ sleep=time.sleep, clock=time.monotonic) -> dict:
205
+ """Poll get-build until the build is settled (per `until`) AND — when a
206
+ baseline is given — its updated_at has advanced past it (so we never
207
+ return the pre-trigger state on a fast poll). Returns the last build seen
208
+ even if the timeout is hit (caller checks build_is_settled)."""
209
+ deadline = clock() + max(0, timeout)
210
+ build = self.get_build(build_id)
211
+ while True:
212
+ advanced = baseline_updated_at is None or \
213
+ build.get("updated_at") != baseline_updated_at
214
+ if advanced and build_is_settled(build, until):
215
+ return build
216
+ if clock() >= deadline:
217
+ return build
218
+ sleep(interval)
219
+ build = self.get_build(build_id)
220
+
221
+ # -- binary download ----------------------------------------------------
222
+ def download(self, path: str, out_path: str, params: Optional[dict] = None) -> dict:
223
+ """Stream a binary endpoint (artifact / file download / zip) to disk.
224
+ Returns {out, bytes, filename, content_type}."""
225
+ r = self._s.get(
226
+ self._url(path), params=params, headers=self._headers(),
227
+ timeout=(TIMEOUT_CONNECT, TIMEOUT_READ), stream=True,
228
+ )
229
+ if r.status_code >= 400:
230
+ raise ApiError(r.status_code, path, _detail(r))
231
+ out = Path(out_path)
232
+ out.parent.mkdir(parents=True, exist_ok=True)
233
+ total = 0
234
+ with open(out, "wb") as f:
235
+ for chunk in r.iter_content(chunk_size=65536):
236
+ if chunk:
237
+ f.write(chunk)
238
+ total += len(chunk)
239
+ return {
240
+ "out": str(out),
241
+ "bytes": total,
242
+ "filename": _content_disposition_filename(r) or out.name,
243
+ "content_type": r.headers.get("Content-Type"),
244
+ }
245
+
246
+
247
+ def _content_disposition_filename(resp: "requests.Response") -> Optional[str]:
248
+ cd = resp.headers.get("Content-Disposition", "")
249
+ if "filename=" in cd:
250
+ return cd.split("filename=", 1)[1].strip().strip('"').split(";", 1)[0]
251
+ return None
@@ -0,0 +1,44 @@
1
+ """Map exceptions to the framework error envelope: (code, message, details, exit).
2
+
3
+ JSON in / JSON out: every uncaught exception becomes an {"error": {...}} object.
4
+ We classify by exception type so an auth failure, a bad argument, and an HTTP
5
+ 4xx/5xx each surface with a distinct, stable code.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ from typing import Any
10
+
11
+
12
+ class UsageError(Exception):
13
+ """Bad/invalid arguments. Maps to 'invalid_argument', exit 2."""
14
+
15
+
16
+ class CredentialError(Exception):
17
+ """No usable credential (neither api-key nor username+password stored).
18
+ Maps to 'auth_required', exit 1."""
19
+
20
+
21
+ class ApiError(Exception):
22
+ """A non-2xx HTTP response from the connector-builder API.
23
+ Maps to 'api_error', exit 1. Carries status + the server's detail."""
24
+
25
+ def __init__(self, status_code: int, path: str, detail: str = "",
26
+ details: dict[str, Any] | None = None):
27
+ self.status_code = status_code
28
+ self.path = path
29
+ self.detail = (detail or "")[:500]
30
+ self.details = details or {}
31
+ self.details.setdefault("status_code", status_code)
32
+ self.details.setdefault("path", path)
33
+ super().__init__(f"{status_code} on {path}: {self.detail}")
34
+
35
+
36
+ def classify(exc: Exception) -> tuple[str, str, dict, int]:
37
+ if isinstance(exc, UsageError):
38
+ return "invalid_argument", str(exc) or "invalid argument", {}, 2
39
+ if isinstance(exc, CredentialError):
40
+ return "auth_required", str(exc), {}, 1
41
+ if isinstance(exc, ApiError):
42
+ code = "auth_failed" if exc.status_code in (401, 403) else "api_error"
43
+ return code, str(exc), exc.details, 1
44
+ return "error", str(exc) or exc.__class__.__name__, {"type": type(exc).__name__}, 1
@@ -0,0 +1,142 @@
1
+ """Generate tool.yaml from the live ACTIONS dict (single source of truth).
2
+
3
+ Introspects each action's argparse to emit the manifest's actions/args, so the
4
+ manifest can never drift from the dispatcher (the manifest-sync test enforces the
5
+ same invariant). Run after adding/changing an action:
6
+
7
+ .venv/Scripts/python tools/connector-builder/gen_manifest.py
8
+
9
+ Header metadata (name/description/secrets/routing) is curated here.
10
+ """
11
+ from __future__ import annotations
12
+
13
+ import argparse
14
+ import sys
15
+ from pathlib import Path
16
+
17
+ import yaml
18
+
19
+ TOOL_ROOT = Path(__file__).resolve().parent
20
+ FRAMEWORK_ROOT = TOOL_ROOT.parents[1]
21
+ for _p in (str(TOOL_ROOT), str(FRAMEWORK_ROOT)):
22
+ if _p not in sys.path:
23
+ sys.path.insert(0, _p)
24
+
25
+ import main # noqa: E402
26
+
27
+ DESCRIPTION = (
28
+ "AI Connector Builder (connector-builder.procesio.app): turn API documentation "
29
+ "into a compiled PROCESIO Custom Action .nupkg connector via an 8-stage LLM "
30
+ "pipeline (gather -> clarify -> plan -> generate -> validate -> compile -> fix "
31
+ "-> deliver). Drive the whole build lifecycle, read/write generated files, "
32
+ "download the .nupkg artifact (to upload to PROCESIO for live testing), inspect "
33
+ "logs/telemetry, and edit the builder's own knowledge base (prompts, spec "
34
+ "modules, examples, validation rules). Two auth modes, both -> Bearer token: an "
35
+ "acb_ API key, or username/password via /auth/login."
36
+ )
37
+
38
+ SECRETS = [
39
+ {"name": "api-key",
40
+ "description": "Connector Builder API key (acb_...). Used verbatim as the bearer token."},
41
+ {"name": "username",
42
+ "description": "Login email for username/password auth mode (e.g. user@example.com)."},
43
+ {"name": "password",
44
+ "description": "Login password for username/password auth mode (-> POST /auth/login -> JWT)."},
45
+ ]
46
+
47
+ ROUTING = {
48
+ "triggers": [
49
+ "build a PROCESIO custom action / connector from API docs",
50
+ "generate a .nupkg connector for PROCESIO from documentation",
51
+ "create / run / drive an AI Connector Builder build",
52
+ "approve / revise the plan / regenerate files / download the connector artifact",
53
+ "edit the connector builder's prompts / spec modules / examples (improve generation)",
54
+ ],
55
+ "primary_action": "create-build",
56
+ "example": ("connector-builder create-build --api-url <docs-url> --user-requirements '...' "
57
+ "(then gather / answer / approve-plan / approve-generate / download-artifact)"),
58
+ }
59
+
60
+ # Per-action one-line output hints (optional; advisory only).
61
+ OUTPUT_SCHEMAS = {
62
+ "check": '{ "ok": true, "email": "...", "role": "admin", "base_url": "..." }',
63
+ "create-build": '{ "id": "uuid", "status": "pending", ... }',
64
+ "gather": '{ "status": "clarifying", "api_profile": {...}, "clarification_questions": [...] }',
65
+ "answer": '{ "status": "planning", "implementation_plan": {...} }',
66
+ "approve-plan": '{ "status": "generating", "step_status": "waiting_user", "generated_files": {...} }',
67
+ "approve-generate": '{ "status": "approved", "build_id": "uuid" }',
68
+ "download-artifact": '{ "out": "...", "bytes": N, "filename": "..._PROCESIO.API.nupkg" }',
69
+ "list-builds": '{ "builds": [...], "total": N, "page": 1, "per_page": 20 }',
70
+ }
71
+
72
+ # argparse type object -> manifest type string.
73
+ _TYPE_MAP = {int: "integer", float: "number"}
74
+
75
+
76
+ def _arg_type(action: argparse.Action) -> str:
77
+ if isinstance(action, (argparse._StoreTrueAction, argparse._StoreFalseAction)):
78
+ return "boolean"
79
+ t = getattr(action, "type", None)
80
+ if t in _TYPE_MAP:
81
+ return _TYPE_MAP[t]
82
+ # The --success / boolean-lambda flags parse to bool.
83
+ if callable(t) and getattr(t, "__name__", "") == "<lambda>":
84
+ return "boolean"
85
+ return "string"
86
+
87
+
88
+ def _args_for(defn) -> list[dict]:
89
+ parser = argparse.ArgumentParser()
90
+ defn.add_args(parser)
91
+ out: list[dict] = []
92
+ for action in parser._actions:
93
+ opts = [o for o in action.option_strings if o.startswith("--") and o != "--help"]
94
+ if not opts:
95
+ continue
96
+ name = opts[0][2:]
97
+ entry: dict = {"name": name, "type": _arg_type(action)}
98
+ if getattr(action, "required", False):
99
+ entry["required"] = True
100
+ if action.help:
101
+ entry["description"] = action.help
102
+ out.append(entry)
103
+ return out
104
+
105
+
106
+ def build_manifest() -> dict:
107
+ actions = []
108
+ for name in sorted(main.ACTIONS):
109
+ defn = main.ACTIONS[name]
110
+ entry: dict = {"name": name, "description": defn.description}
111
+ args = _args_for(defn)
112
+ if args:
113
+ entry["args"] = args
114
+ if name in OUTPUT_SCHEMAS:
115
+ entry["output_schema"] = OUTPUT_SCHEMAS[name]
116
+ actions.append(entry)
117
+ return {
118
+ "name": "connector-builder",
119
+ "description": DESCRIPTION,
120
+ "version": "0.2.0",
121
+ "runtime": "python",
122
+ "entrypoint": "main.py",
123
+ "secrets": SECRETS,
124
+ "routing": ROUTING,
125
+ "actions": actions,
126
+ }
127
+
128
+
129
+ def main_gen() -> None:
130
+ manifest = build_manifest()
131
+ text = yaml.safe_dump(manifest, sort_keys=False, allow_unicode=True, width=100)
132
+ out = TOOL_ROOT / "tool.yaml"
133
+ header = ("# GENERATED by gen_manifest.py from the live ACTIONS dict — do not\n"
134
+ "# hand-edit actions/args; edit the handlers + header consts and rerun:\n"
135
+ "# .venv/Scripts/python tools/connector-builder/gen_manifest.py\n")
136
+ out.write_text(header + text, encoding="utf-8")
137
+ print(f"wrote {out} ({len(text)} bytes, {len(manifest['actions'])} actions)",
138
+ file=sys.stderr)
139
+
140
+
141
+ if __name__ == "__main__":
142
+ main_gen()
@@ -0,0 +1 @@
1
+ """connector-builder action handlers (imported by BARE name from main.py)."""
@@ -0,0 +1,182 @@
1
+ """Admin actions (admin role): pipeline/provider/compilation config, the
2
+ knowledge base (prompts, spec_modules, examples, validation_rules, clarification),
3
+ the compiler self-test, users, and issue cases.
4
+
5
+ The knowledge actions are how you improve the BUILDER ITSELF — editing the prompt
6
+ templates, connector spec modules, and few-shot examples changes how every future
7
+ build generates code. That is the deepest feedback loop after a PROCESIO test.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+
13
+ from actiondef import ActionDef
14
+ from errors import UsageError
15
+ from handlers.common import add_pagination, load_text_or_file, parse_json
16
+
17
+ _CONFIG_KINDS = ("pipeline", "providers", "compilation", "maintenance")
18
+ _MODULE_TYPES = ("prompt", "spec_module", "example", "validation_rule", "clarification")
19
+
20
+
21
+ # -- config ------------------------------------------------------------------
22
+
23
+ def get_config(client, args) -> dict:
24
+ if args.which not in _CONFIG_KINDS:
25
+ raise UsageError(f"--which must be one of {', '.join(_CONFIG_KINDS)}")
26
+ suffix = "/config/maintenance" if args.which == "maintenance" else f"/config/{args.which}"
27
+ return client.get(f"/admin{suffix}")
28
+
29
+
30
+ def update_config(client, args) -> dict:
31
+ if args.which not in _CONFIG_KINDS:
32
+ raise UsageError(f"--which must be one of {', '.join(_CONFIG_KINDS)}")
33
+ raw = load_text_or_file(args.data, args.data_file, what="data")
34
+ if raw is None:
35
+ raise UsageError("provide --data (JSON) or --data-file")
36
+ body = parse_json(raw, what="data", expect=dict)
37
+ suffix = "/config/maintenance" if args.which == "maintenance" else f"/config/{args.which}"
38
+ return client.put(f"/admin{suffix}", body)
39
+
40
+
41
+ def reload_config(client, args) -> dict:
42
+ return client.post("/admin/config/reload")
43
+
44
+
45
+ # -- knowledge ---------------------------------------------------------------
46
+
47
+ def knowledge_list(client, args) -> dict:
48
+ _check_module_type(args.module_type)
49
+ return {"module_type": args.module_type,
50
+ "modules": client.get(f"/admin/knowledge/{args.module_type}")}
51
+
52
+
53
+ def knowledge_get(client, args) -> dict:
54
+ _check_module_type(args.module_type)
55
+ return client.get(f"/admin/knowledge/{args.module_type}/{args.name}")
56
+
57
+
58
+ def knowledge_create(client, args) -> dict:
59
+ _check_module_type(args.module_type)
60
+ content = load_text_or_file(args.content, args.content_file, what="content")
61
+ if content is None:
62
+ raise UsageError("provide --content or --content-file")
63
+ return client.post(f"/admin/knowledge/{args.module_type}",
64
+ {"name": args.name, "content": content})
65
+
66
+
67
+ def knowledge_update(client, args) -> dict:
68
+ _check_module_type(args.module_type)
69
+ content = load_text_or_file(args.content, args.content_file, what="content")
70
+ if content is None:
71
+ raise UsageError("provide --content or --content-file")
72
+ return client.put(f"/admin/knowledge/{args.module_type}/{args.name}",
73
+ {"content": content})
74
+
75
+
76
+ def knowledge_delete(client, args) -> dict:
77
+ _check_module_type(args.module_type)
78
+ return client.delete(f"/admin/knowledge/{args.module_type}/{args.name}")
79
+
80
+
81
+ def _check_module_type(mt: str) -> None:
82
+ if mt not in _MODULE_TYPES:
83
+ raise UsageError(f"--module-type must be one of {', '.join(_MODULE_TYPES)}")
84
+
85
+
86
+ # -- selftest / users / issues ----------------------------------------------
87
+
88
+ def build_selftest(client, args) -> dict:
89
+ """POST /admin/build-selftest — end-to-end compiler health (trivial 2-file C#)."""
90
+ return client.post("/admin/build-selftest")
91
+
92
+
93
+ def list_users(client, args) -> dict:
94
+ return {"users": client.get("/admin/users")}
95
+
96
+
97
+ def list_issues(client, args) -> dict:
98
+ params = {"page": args.page, "per_page": args.per_page}
99
+ for f in ("stage", "severity", "status", "build_id", "error_category", "search"):
100
+ v = getattr(args, f)
101
+ if v:
102
+ params[f] = v
103
+ return client.get("/admin/issues", params)
104
+
105
+
106
+ def get_issue(client, args) -> dict:
107
+ return client.get(f"/admin/issues/{args.id}")
108
+
109
+
110
+ # -- argparse ----------------------------------------------------------------
111
+
112
+ def _get_config_args(p: argparse.ArgumentParser) -> None:
113
+ p.add_argument("--which", required=True,
114
+ help="pipeline | providers | compilation | maintenance")
115
+
116
+
117
+ def _update_config_args(p: argparse.ArgumentParser) -> None:
118
+ p.add_argument("--which", required=True,
119
+ help="pipeline | providers | compilation | maintenance")
120
+ p.add_argument("--data", help="Config payload as JSON (inline)")
121
+ p.add_argument("--data-file", dest="data_file", help="Read JSON payload from path")
122
+
123
+
124
+ def _knowledge_list_args(p: argparse.ArgumentParser) -> None:
125
+ p.add_argument("--module-type", dest="module_type", required=True,
126
+ help=f"one of {', '.join(_MODULE_TYPES)}")
127
+
128
+
129
+ def _knowledge_get_args(p: argparse.ArgumentParser) -> None:
130
+ p.add_argument("--module-type", dest="module_type", required=True,
131
+ help=f"one of {', '.join(_MODULE_TYPES)}")
132
+ p.add_argument("--name", required=True, help="Module name, e.g. clarify.md")
133
+
134
+
135
+ def _knowledge_write_args(p: argparse.ArgumentParser) -> None:
136
+ p.add_argument("--module-type", dest="module_type", required=True,
137
+ help=f"one of {', '.join(_MODULE_TYPES)}")
138
+ p.add_argument("--name", required=True, help="Module name, e.g. clarify.md")
139
+ p.add_argument("--content", help="Module content (inline)")
140
+ p.add_argument("--content-file", dest="content_file",
141
+ help="Read module content from path")
142
+
143
+
144
+ def _list_issues_args(p: argparse.ArgumentParser) -> None:
145
+ add_pagination(p)
146
+ p.add_argument("--stage", help="Pipeline stage filter")
147
+ p.add_argument("--severity", help="Severity filter")
148
+ p.add_argument("--status", help="Status filter")
149
+ p.add_argument("--build-id", dest="build_id", help="Filter by build")
150
+ p.add_argument("--error-category", dest="error_category", help="Error category filter")
151
+ p.add_argument("--search", help="Free-text search")
152
+
153
+
154
+ def _get_issue_args(p: argparse.ArgumentParser) -> None:
155
+ p.add_argument("--id", required=True, help="Issue case id")
156
+
157
+
158
+ ACTIONS: dict[str, ActionDef] = {
159
+ "get-config": ActionDef(get_config, _get_config_args,
160
+ description="Read a config block (pipeline/providers/...)."),
161
+ "update-config": ActionDef(update_config, _update_config_args,
162
+ description="Update a config block from JSON."),
163
+ "reload-config": ActionDef(reload_config,
164
+ description="Reload all YAML config + knowledge cache."),
165
+ "knowledge-list": ActionDef(knowledge_list, _knowledge_list_args,
166
+ description="List knowledge modules of a type."),
167
+ "knowledge-get": ActionDef(knowledge_get, _knowledge_get_args,
168
+ description="Get one knowledge module's content."),
169
+ "knowledge-create": ActionDef(knowledge_create, _knowledge_write_args,
170
+ description="Create a new knowledge module."),
171
+ "knowledge-update": ActionDef(knowledge_update, _knowledge_write_args,
172
+ description="Update an existing knowledge module."),
173
+ "knowledge-delete": ActionDef(knowledge_delete, _knowledge_get_args,
174
+ description="Delete a knowledge module."),
175
+ "build-selftest": ActionDef(build_selftest,
176
+ description="Compiler health self-test (trivial C#)."),
177
+ "list-users": ActionDef(list_users, description="List all users (admin)."),
178
+ "list-issues": ActionDef(list_issues, _list_issues_args,
179
+ description="List issue cases (failures), filterable."),
180
+ "get-issue": ActionDef(get_issue, _get_issue_args,
181
+ description="Full issue-case detail incl. snapshots."),
182
+ }