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,476 @@
1
+ # -*- coding: utf-8 -*-
2
+ """framework-map builder: extract the live registry, compress it, apply RO
3
+ translations, and assemble the single-file bilingual HTML map.
4
+
5
+ Pure framework logic - reads only the registry (manifests) and the sibling
6
+ asset files (fm_strings, fm_ro_catalog, styles.css, app.js). No user data.
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import copy
11
+ import json
12
+ import os
13
+ import sys
14
+ from pathlib import Path
15
+ from string import Template
16
+
17
+ import yaml
18
+
19
+ import fm_strings
20
+ import fm_ro_catalog
21
+
22
+ TOOL_ROOT = Path(__file__).resolve().parent
23
+
24
+ # ---- category map: which explorer group each tool belongs to ----------------
25
+ from fm_catalog import CAT, FALLBACK_CAT # noqa: E402 (the census, per install)
26
+
27
+
28
+ # ---- 1. extract: read the live registry -------------------------------------
29
+ def extract(framework_root: Path) -> dict:
30
+ if str(framework_root) not in sys.path:
31
+ sys.path.insert(0, str(framework_root))
32
+ import importlib
33
+ import registry
34
+ importlib.reload(registry) # pick up freshly added tools within one process
35
+ return {
36
+ "tools": registry.list_tools(),
37
+ "agents": registry.list_agents(),
38
+ "skills": registry.list_skills(),
39
+ }
40
+
41
+
42
+ # ---- 2. compress: full registry -> lean, embeddable EN data ------------------
43
+ def _short_secret(s):
44
+ desc = (s.get("description") or "").split(".")[0].strip()
45
+ return {"name": s["name"], "desc": desc[:90]}
46
+
47
+
48
+ def _compact_action(a):
49
+ args = [{"n": g["name"], "r": bool(g.get("required")), "d": (g.get("description") or "")[:70]}
50
+ for g in a.get("args", [])]
51
+ return {"n": a["name"], "d": (a.get("description") or "")[:220], "a": args}
52
+
53
+
54
+ def compress(dump: dict) -> dict:
55
+ tools = []
56
+ for t in dump["tools"]:
57
+ r = t.get("routing") or {}
58
+ tools.append({
59
+ "name": t["name"], "cat": CAT.get(t["name"], FALLBACK_CAT), "desc": t.get("description", ""),
60
+ "triggers": r.get("triggers"), "primary": r.get("primary_action"), "example": r.get("example"),
61
+ "secrets": [_short_secret(s) for s in t.get("secrets", [])], "ready": t.get("ready"),
62
+ "actions": [_compact_action(a) for a in t.get("actions", [])],
63
+ })
64
+ agents = []
65
+ for a in dump["agents"]:
66
+ r = a.get("routing") or {}
67
+ agents.append({
68
+ "name": a["name"], "desc": a.get("description", ""), "tools": a.get("tools", []),
69
+ "triggers": r.get("triggers"), "primary": r.get("primary_action"), "example": r.get("example"),
70
+ "actions": [_compact_action(ac) for ac in a.get("actions", [])],
71
+ })
72
+ skills = [{"name": s["name"], "desc": s.get("description", "")} for s in dump["skills"]]
73
+ return {"tools": tools, "agents": agents, "skills": skills}
74
+
75
+
76
+ def categories(data: dict) -> dict:
77
+ out = {}
78
+ for t in data["tools"]:
79
+ out[t["cat"]] = out.get(t["cat"], 0) + 1
80
+ return out
81
+
82
+
83
+ def uncategorized(data: dict) -> list:
84
+ return sorted(t["name"] for t in data["tools"] if t["cat"] == FALLBACK_CAT)
85
+
86
+
87
+ # ---- 3. translate: EN data -> RO data (catalog layer), with fallback ---------
88
+ def translate_ro(data_en: dict):
89
+ ro = copy.deepcopy(data_en)
90
+ miss = {"tool_desc": [], "triggers": [], "agent_desc": [], "skill_desc": [], "category": []}
91
+ seen_cat_miss = set()
92
+ for t in ro["tools"]:
93
+ if t["cat"] in fm_ro_catalog.CATS:
94
+ t["cat"] = fm_ro_catalog.CATS[t["cat"]]
95
+ elif t["cat"] not in seen_cat_miss:
96
+ seen_cat_miss.add(t["cat"]); miss["category"].append(t["cat"])
97
+ if t["name"] in fm_ro_catalog.TOOL_DESC:
98
+ t["desc"] = fm_ro_catalog.TOOL_DESC[t["name"]]
99
+ else:
100
+ miss["tool_desc"].append(t["name"])
101
+ if t.get("triggers"):
102
+ nt = []
103
+ for x in t["triggers"]:
104
+ if x in fm_ro_catalog.TRIG:
105
+ nt.append(fm_ro_catalog.TRIG[x])
106
+ else:
107
+ miss["triggers"].append(x); nt.append(x)
108
+ t["triggers"] = nt
109
+ for a in ro["agents"]:
110
+ if a["name"] in fm_ro_catalog.AGENT_DESC:
111
+ a["desc"] = fm_ro_catalog.AGENT_DESC[a["name"]]
112
+ else:
113
+ miss["agent_desc"].append(a["name"])
114
+ if a.get("triggers"): # agent triggers were previously left untranslated
115
+ nt = []
116
+ for x in a["triggers"]:
117
+ if x in fm_ro_catalog.TRIG:
118
+ nt.append(fm_ro_catalog.TRIG[x])
119
+ else:
120
+ miss["triggers"].append(x); nt.append(x)
121
+ a["triggers"] = nt
122
+ for s in ro["skills"]:
123
+ if s["name"] in fm_ro_catalog.SKILL_DESC:
124
+ s["desc"] = fm_ro_catalog.SKILL_DESC[s["name"]]
125
+ else:
126
+ miss["skill_desc"].append(s["name"])
127
+ miss = {k: v for k, v in miss.items() if v}
128
+ return ro, miss
129
+
130
+
131
+ # ---- 4. assemble: data + templates + assets -> single HTML -------------------
132
+ SVG = r"""<svg viewBox="0 0 920 500" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif" role="img" aria-label="architecture diagram">
133
+ <defs>
134
+ <marker id="ah" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#8a93a3"/></marker>
135
+ <marker id="ahg" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#047857"/></marker>
136
+ <marker id="ahs" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#b45309"/></marker>
137
+ </defs>
138
+ <rect x="40" y="18" width="210" height="48" rx="10" fill="#eef4ff" stroke="#2563eb"/>
139
+ <text x="145" y="40" text-anchor="middle" font-size="14" font-weight="700" fill="#1d3a8a">$svg_you</text>
140
+ <text x="145" y="56" text-anchor="middle" font-size="10.5" fill="#4b6bb5">$svg_you2</text>
141
+ <rect x="355" y="18" width="210" height="48" rx="10" fill="#fff8ec" stroke="#f3ddb0"/>
142
+ <text x="460" y="40" text-anchor="middle" font-size="14" font-weight="700" fill="#b45309">$svg_skill</text>
143
+ <text x="460" y="56" text-anchor="middle" font-size="10.5" fill="#b07a2a">$svg_skill2</text>
144
+ <rect x="670" y="18" width="210" height="48" rx="10" fill="#fef2f2" stroke="#f6cccc"/>
145
+ <text x="775" y="40" text-anchor="middle" font-size="14" font-weight="700" fill="#b91c1c">$svg_timer</text>
146
+ <text x="775" y="56" text-anchor="middle" font-size="10.5" fill="#c2554e">$svg_timer2</text>
147
+ <rect x="315" y="116" width="290" height="58" rx="13" fill="#eef2ff" stroke="#4338ca" stroke-width="1.4"/>
148
+ <text x="460" y="140" text-anchor="middle" font-size="15.5" font-weight="700" fill="#3730a3">$svg_orch</text>
149
+ <text x="460" y="159" text-anchor="middle" font-size="10.5" fill="#5b53c4">$svg_orch2</text>
150
+ <rect x="688" y="120" width="192" height="50" rx="11" fill="#eef2ff" stroke="#4338ca"/>
151
+ <text x="784" y="141" text-anchor="middle" font-size="13.5" font-weight="700" fill="#3730a3">$svg_sched</text>
152
+ <text x="784" y="158" text-anchor="middle" font-size="10" fill="#5b53c4">$svg_sched2</text>
153
+ <rect x="250" y="230" width="196" height="56" rx="13" fill="#f5f3ff" stroke="#d6ccf7" stroke-width="1.4"/>
154
+ <text x="348" y="254" text-anchor="middle" font-size="15" font-weight="700" fill="#6d28d9">$svg_agents</text>
155
+ <text x="348" y="272" text-anchor="middle" font-size="10.5" fill="#8257d6">$svg_agents2</text>
156
+ <rect x="486" y="230" width="230" height="56" rx="13" fill="#ecfeff" stroke="#a5e8ef" stroke-width="1.4"/>
157
+ <text x="601" y="254" text-anchor="middle" font-size="15" font-weight="700" fill="#0e7490">$svg_tools</text>
158
+ <text x="601" y="272" text-anchor="middle" font-size="10.5" fill="#2a8ba3">$svg_tools2</text>
159
+ <rect x="756" y="230" width="124" height="56" rx="11" fill="#fff8ec" stroke="#f3ddb0"/>
160
+ <text x="818" y="252" text-anchor="middle" font-size="12" font-weight="700" fill="#92600a">$svg_cred1</text>
161
+ <text x="818" y="268" text-anchor="middle" font-size="12" font-weight="700" fill="#92600a">$svg_cred2</text>
162
+ <rect x="300" y="330" width="416" height="46" rx="10" fill="#f7f9fc" stroke="#e5e8ef"/>
163
+ <text x="508" y="351" text-anchor="middle" font-size="12" font-weight="600" fill="#45506a">$svg_ext</text>
164
+ <text x="508" y="367" text-anchor="middle" font-size="10.5" fill="#6c7690">$svg_ext2</text>
165
+ <rect x="40" y="416" width="840" height="58" rx="13" fill="#ecfdf5" stroke="#b3e6ce" stroke-width="1.4"/>
166
+ <text x="460" y="440" text-anchor="middle" font-size="14.5" font-weight="700" fill="#047857">$svg_store</text>
167
+ <text x="460" y="459" text-anchor="middle" font-size="10.5" fill="#3f9e7c">$svg_store2</text>
168
+ <line x1="145" y1="66" x2="360" y2="114" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
169
+ <line x1="460" y1="66" x2="460" y2="112" stroke="#b45309" stroke-width="1.4" stroke-dasharray="4 4" marker-end="url(#ahs)"/>
170
+ <text x="470" y="94" font-size="10" fill="#b07a2a">$svg_l_know</text>
171
+ <line x1="775" y1="66" x2="784" y2="116" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
172
+ <line x1="688" y1="150" x2="609" y2="148" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
173
+ <line x1="418" y1="174" x2="360" y2="226" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
174
+ <line x1="512" y1="174" x2="580" y2="226" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
175
+ <text x="392" y="208" font-size="9.5" fill="#8a93a3">$svg_l_routes</text>
176
+ <line x1="446" y1="258" x2="482" y2="258" stroke="#6d28d9" stroke-width="1.6" marker-end="url(#ah)"/>
177
+ <text x="447" y="250" font-size="9.5" fill="#6d28d9">$svg_l_drives</text>
178
+ <line x1="756" y1="258" x2="720" y2="258" stroke="#b45309" stroke-width="1.4" stroke-dasharray="4 4" marker-end="url(#ahs)"/>
179
+ <text x="700" y="222" font-size="9.5" fill="#b07a2a" text-anchor="middle">$svg_l_secrets</text>
180
+ <line x1="595" y1="286" x2="545" y2="326" stroke="#8a93a3" stroke-width="1.5" marker-end="url(#ah)"/>
181
+ <line x1="270" y1="286" x2="270" y2="416" stroke="#047857" stroke-width="1.3" stroke-dasharray="5 4" marker-start="url(#ahg)" marker-end="url(#ahg)"/>
182
+ <line x1="650" y1="376" x2="650" y2="416" stroke="#047857" stroke-width="1.3" stroke-dasharray="5 4" marker-start="url(#ahg)" marker-end="url(#ahg)"/>
183
+ <line x1="150" y1="416" x2="150" y2="150" stroke="#047857" stroke-width="1.3" stroke-dasharray="5 4" marker-start="url(#ahg)" marker-end="url(#ahg)"/>
184
+ <text x="278" y="308" font-size="9.5" fill="#047857">$svg_l_rw</text>
185
+ </svg>"""
186
+
187
+ # Stands in for PART_A wherever the architecture narrative is not shipped. Uses the
188
+ # same live counters, so it is never out of date with what the registry found.
189
+ GENERIC_HERO = """<section class="hero">
190
+ <h1>$hero_h</h1>
191
+ <p class="lead">$hero_p</p>
192
+ <div class="stats">
193
+ <div class="stat"><b>$NTOOLS</b><span>$w_tools</span></div>
194
+ <div class="stat"><b>$NAGENTS</b><span>$w_agents</span></div>
195
+ <div class="stat"><b>$NSKILLS</b><span>$w_skills</span></div>
196
+ <div class="stat"><b>$NACTIONS</b><span>$w_actions</span></div>
197
+ </div>
198
+ </section>"""
199
+
200
+ PART_A = globals().get("PART_A", GENERIC_HERO)
201
+
202
+ PART_B = globals().get("PART_B", "")
203
+
204
+ HEADER = """<header class="top"><div class="top-in">
205
+ <div class="brand"><span class="dot"></span>Agents &amp; Tools</div>
206
+ <nav class="nav">
207
+ <a href="#explore" data-t="nav_explore">Explore</a>
208
+ </nav>
209
+ <div class="langtoggle" role="group" aria-label="Language">
210
+ <button data-lang="en" class="on">EN</button>
211
+ <button data-lang="ro">RO</button>
212
+ </div>
213
+ </div></header>"""
214
+
215
+ EXPLORE = """<section class="band" id="explore">
216
+ <div class="kicker" data-t="exp_kicker">Every capability, drillable</div>
217
+ <h2 data-t="exp_h2">Explore everything</h2>
218
+ <p class="intro" data-t="exp_intro">The full registry, straight from the manifests.</p>
219
+ <div class="exp-bar exp-tools">
220
+ <input id="search" type="search" placeholder="Search..." autocomplete="off">
221
+ <div class="tabs">
222
+ <button data-tab="tools" data-t="tab_tools" class="on">Tools</button>
223
+ <button data-tab="agents" data-t="tab_agents">Agents</button>
224
+ <button data-tab="skills" data-t="tab_skills">Skills</button>
225
+ </div>
226
+ <button class="btn" id="expand-all" data-t="ctl_expand">Expand all</button>
227
+ <button class="btn" id="collapse-all" data-t="ctl_collapse">Collapse all</button>
228
+ <span class="expcount" id="expcount"></span>
229
+ </div>
230
+ <div id="emptymsg" class="empty" style="display:none" data-t="empty">Nothing matches that search.</div>
231
+ <div id="tools-view"></div>
232
+ <div id="agents-view" style="display:none"></div>
233
+ <div id="skills-view" style="display:none"></div>
234
+ </section>"""
235
+
236
+
237
+ _SCHED_FALLBACK = {
238
+ "en": '<b>Live today:</b> no scheduled jobs yet. Add entries to schedule.yaml '
239
+ 'and the hourly tick runs whatever is due.',
240
+ "ro": '<b>Activ azi:</b> niciun job programat încă. Adaugă intrări în '
241
+ 'schedule.yaml şi tick-ul orar rulează ce e scadent.',
242
+ }
243
+ _CANON_FOLDERS = ["config", "state", "prompts", "sessions", "exports", "schedule"]
244
+ _FOLDER_EXTRA = {
245
+ "en": {"state": "machine-owned runtime state, per component",
246
+ "prompts": "your personal prompt copies (base stays in git)",
247
+ "exports": "human-readable dumps of the store"},
248
+ "ro": {"state": "stare runtime deţinută de maşină, per componentă",
249
+ "prompts": "copiile tale personale de prompt (baza rămâne în git)",
250
+ "exports": "exporturi citibile de om ale depozitului"},
251
+ }
252
+
253
+
254
+ def _cadence(sch, lang):
255
+ if not isinstance(sch, dict):
256
+ return ""
257
+ units = {"en": {"h": ("hour", "hours"), "m": ("minute", "minutes"), "d": ("day", "days")},
258
+ "ro": {"h": ("oră", "ore"), "m": ("minut", "minute"), "d": ("zi", "zile")}}[lang]
259
+ seg = []
260
+ if "every" in sch:
261
+ v = str(sch["every"]).strip()
262
+ num, unit = v[:-1], v[-1:]
263
+ sing, plur = units.get(unit, (unit, unit))
264
+ if num in ("", "1"):
265
+ seg.append({"en": f"every {sing}", "ro": f"în fiecare {sing}"}[lang])
266
+ else:
267
+ seg.append({"en": f"every {num} {plur}", "ro": f"la fiecare {num} {plur}"}[lang])
268
+ elif "monthly_on" in sch:
269
+ d = sch["monthly_on"]
270
+ suf = {1: "st", 2: "nd", 3: "rd"}.get(d if isinstance(d, int) and d < 20 else
271
+ (d % 10 if isinstance(d, int) else 0), "th")
272
+ seg.append({"en": f"on the {d}{suf} of each month",
273
+ "ro": f"lunar, pe data de {d}"}[lang])
274
+ elif "daily_at" in sch:
275
+ seg.append({"en": f"daily at {sch['daily_at']}", "ro": f"zilnic la {sch['daily_at']}"}[lang])
276
+ elif "weekly_on" in sch:
277
+ seg.append({"en": f"weekly on {sch['weekly_on']}", "ro": f"săptămânal ({sch['weekly_on']})"}[lang])
278
+ win = sch.get("between")
279
+ if win and "-" in str(win):
280
+ a, b = str(win).split("-", 1)
281
+ seg.append({"en": f"{a} to {b}", "ro": f"{a} - {b}"}[lang])
282
+ return ", ".join(seg)
283
+
284
+
285
+ def _schedule_note(lang):
286
+ """Build the 'Live today' note from the live schedule.yaml (user data). None
287
+ on a fresh/wiped install (no schedule) -> the caller uses _SCHED_FALLBACK."""
288
+ try:
289
+ from tools._lib import userdata
290
+ sdir = Path(userdata.schedule_dir())
291
+ except Exception:
292
+ return None
293
+ entries = []
294
+ try:
295
+ if sdir.exists():
296
+ for yf in sorted(sdir.glob("*.yaml")):
297
+ doc = yaml.safe_load(yf.read_text(encoding="utf-8")) or {}
298
+ for e in (doc.get("entries") or []):
299
+ if e.get("enabled", True):
300
+ entries.append(e)
301
+ except Exception:
302
+ return None
303
+ modes = {"en": {"driver": "driver mode", "auto": "auto mode"},
304
+ "ro": {"driver": "mod driver", "auto": "mod auto"}}[lang]
305
+ phrases = []
306
+ for e in entries:
307
+ tgt = e.get("target") or {}
308
+ name, kind = tgt.get("name"), tgt.get("type", "agent")
309
+ if not name or kind not in ("agent", "tool"):
310
+ continue
311
+ span = f'<span class="jump {kind}" data-ujump="{name}" data-ukind="{kind}">{name}</span>'
312
+ cad = _cadence(e.get("schedule") or {}, lang)
313
+ mode = modes.get(e.get("mode", "auto"), e.get("mode", "auto"))
314
+ phrases.append(f"{span} {cad}, {mode}." if cad else f"{span}, {mode}.")
315
+ if not phrases:
316
+ return None
317
+ n = len(phrases)
318
+ lead = {"en": f"<b>Live today:</b> {n} job{'s' if n != 1 else ''} run on the hourly tick. ",
319
+ "ro": f"<b>Activ azi:</b> {n} job{'uri' if n != 1 else ''} rulează pe tick-ul orar. "}[lang]
320
+ return lead + " ".join(phrases)
321
+
322
+
323
+ def _store_tree(lang):
324
+ """The context-state-knowledge tree, from the CANONICAL folder list.
325
+
326
+ This used to read the REAL top-level folders off disk when present, so that a
327
+ new subfolder was never omitted. But this panel documents the framework's
328
+ LAYOUT - the folders the resolvers create - not any one installation of it,
329
+ and framework-map.html is versioned: a checkout with user data produced
330
+ different bytes than a clean one, so every builder generated a spurious diff
331
+ over one person's folder set. (The "Live today" schedule note below IS
332
+ deliberately live - showing the real jobs is the point of that panel. The
333
+ difference is that the note announces itself as live, while this tree silently
334
+ drifted per machine.)
335
+
336
+ The "never omit a new subfolder" guarantee moves to test_fm_store_tree.py,
337
+ which creates a user-data root through tools/_lib/userdata and asserts this
338
+ list matches what the resolvers actually make - a build-time check instead of
339
+ a read of one machine's disk. store.db's record types stay conceptual - they
340
+ are DB types, not folders."""
341
+ S = fm_strings.S[lang]
342
+ folders = list(_CANON_FOLDERS)
343
+ fdesc = {"config": S["tc_config"], "sessions": S["tc_sessions"],
344
+ "schedule": S["tc_schedule"], **_FOLDER_EXTRA[lang]}
345
+ out = [f'<span class="c">{S["tc_hdr"]}</span>', "context-state-knowledge/",
346
+ f'&#9500;&#9472; <span class="d">store.db</span>{" " * 8}<span class="c">{S["tc_db"]}</span>']
347
+ rt = [("knowledge", "tc_know"), ("resource", "tc_res"), ("preference", "tc_pref"),
348
+ ("decision", "tc_dec"), ("runs", "tc_runs")]
349
+ for i, (nm, key) in enumerate(rt):
350
+ br = "&#9492;&#9472;" if i == len(rt) - 1 else "&#9500;&#9472;"
351
+ out.append(f'&#9474; {br} <span class="f">{nm}</span>{" " * (12 - len(nm))}'
352
+ f'<span class="c">{S[key]}</span>')
353
+ for i, fn in enumerate(folders):
354
+ br = "&#9492;&#9472;" if i == len(folders) - 1 else "&#9500;&#9472;"
355
+ lbl = fn + "/"
356
+ out.append(f'{br} <span class="d">{lbl}</span>{" " * max(2, 14 - len(lbl))}'
357
+ f'<span class="c">{fdesc.get(fn, "")}</span>')
358
+ return "\n".join(out)
359
+
360
+
361
+ # Copy for GENERIC_HERO, carried here rather than in the per-install strings file
362
+ # so that ANY distribution renders a correct hero with nothing to author. A
363
+ # distribution that ships its own narrative overrides these from fm_strings.
364
+ GENERIC_HERO_STRINGS = {
365
+ "en": {"w_tools": "tools", "w_agents": "agents", "w_skills": "skills",
366
+ "w_actions": "actions",
367
+ "hero_h": "Agents &amp; Tools",
368
+ "hero_p": "Everything installed in this checkout, read straight from the "
369
+ "manifests. Search it, filter by category, and open any component "
370
+ "to see the actions it exposes and the credentials it needs."},
371
+ "ro": {"w_tools": "unelte", "w_agents": "agen&#539;i", "w_skills": "skill-uri",
372
+ "w_actions": "ac&#539;iuni",
373
+ "hero_h": "Agen&#539;i &#537;i unelte",
374
+ "hero_p": "Tot ce e instalat &#238;n acest checkout, citit direct din "
375
+ "manifeste. Caut&#259;, filtreaz&#259; pe categorii &#537;i deschide "
376
+ "orice component&#259; ca s&#259; vezi ce ac&#539;iuni expune &#537;i "
377
+ "ce creden&#539;iale &#238;i trebuie."},
378
+ }
379
+
380
+ def _fill(tpl: str, lang: str) -> str:
381
+ svg = Template(SVG).safe_substitute(fm_strings.S[lang])
382
+ # marker ids must be unique per language SVG, else url(#id) resolves to the
383
+ # first (EN) marker, which is display:none in RO mode -> arrowheads vanish.
384
+ for mid in ("ah", "ahg", "ahs"):
385
+ svg = svg.replace('id="%s"' % mid, 'id="%s-%s"' % (mid, lang))
386
+ svg = svg.replace('url(#%s)' % mid, 'url(#%s-%s)' % (mid, lang))
387
+ # Fallback layer first, so a distribution that authors its own copy wins.
388
+ d = dict(GENERIC_HERO_STRINGS[lang]); d.update(fm_strings.S[lang]); d["SVG"] = svg
389
+ # Only build a panel the template actually asks for. Both helpers need copy
390
+ # from the per-install strings file, and computing them unconditionally made
391
+ # the engine fail on any distribution that does not render those sections.
392
+ if "$sched_note" in tpl:
393
+ d["sched_note"] = _schedule_note(lang) or _SCHED_FALLBACK[lang]
394
+ if "$store_tree" in tpl:
395
+ d["store_tree"] = _store_tree(lang)
396
+ return Template(tpl).safe_substitute(d)
397
+
398
+
399
+ def _lang_div(inner: str, lang: str) -> str:
400
+ return '<div class="lang lang-%s">%s</div>' % (lang, inner)
401
+
402
+
403
+ def assemble(data_en: dict, data_ro: dict, counts: dict) -> str:
404
+ css = (TOOL_ROOT / "styles.css").read_text(encoding="utf-8")
405
+ js = (TOOL_ROOT / "app.js").read_text(encoding="utf-8")
406
+ dj = json.dumps(data_en, ensure_ascii=False, separators=(",", ":")).replace("</", "<\\/")
407
+ dro = json.dumps(data_ro, ensure_ascii=False, separators=(",", ":")).replace("</", "<\\/")
408
+ lbl = json.dumps(fm_strings.LBL, ensure_ascii=False, separators=(",", ":")).replace("</", "<\\/")
409
+
410
+ body = HEADER + '<main class="wrap">'
411
+ body += _lang_div(_fill(PART_A, "en"), "en")
412
+ body += _lang_div(_fill(PART_A, "ro"), "ro")
413
+ body += EXPLORE
414
+ body += _lang_div(_fill(PART_B, "en"), "en")
415
+ body += _lang_div(_fill(PART_B, "ro"), "ro")
416
+ body += '</main>'
417
+ body += '<footer class="wrap">'
418
+ body += _lang_div(Template("<div>$footer</div>").safe_substitute(fm_strings.S["en"]), "en")
419
+ body += _lang_div(Template("<div>$footer</div>").safe_substitute(fm_strings.S["ro"]), "ro")
420
+ body += '</footer>'
421
+
422
+ for tok, val in [("$NTOOLS", "{:,}".format(counts["tools"])),
423
+ ("$NAGENTS", "{:,}".format(counts["agents"])),
424
+ ("$NSKILLS", "{:,}".format(counts["skills"])),
425
+ ("$NACTIONS", "{:,}".format(counts["actions"])),
426
+ ("$NTOOLACTIONS", "{:,}".format(counts["tool_actions"]))]:
427
+ body = body.replace(tok, val)
428
+
429
+ return (
430
+ "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n"
431
+ "<meta charset=\"utf-8\">\n"
432
+ "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n"
433
+ "<title>Agents &amp; Tools &mdash; Framework Map</title>\n"
434
+ "<style>" + css + "</style>\n</head>\n<body>\n"
435
+ + body +
436
+ "\n<script>const DATA=" + dj + ";const DATA_RO=" + dro + ";const LBL=" + lbl + ";</script>\n"
437
+ "<script>\n" + js + "\n</script>\n</body>\n</html>"
438
+ )
439
+
440
+
441
+ # ---- top-level orchestration -------------------------------------------------
442
+ def build_html(framework_root: Path):
443
+ """Return (html_str, stats_dict)."""
444
+ dump = extract(framework_root)
445
+ data = compress(dump)
446
+ data_ro, miss = translate_ro(data)
447
+ tool_actions = sum(len(t["actions"]) for t in data["tools"])
448
+ agent_actions = sum(len(a["actions"]) for a in data["agents"])
449
+ counts = {
450
+ "tools": len(data["tools"]), "agents": len(data["agents"]), "skills": len(data["skills"]),
451
+ "tool_actions": tool_actions, "agent_actions": agent_actions,
452
+ "actions": tool_actions + agent_actions,
453
+ }
454
+ html = assemble(data, data_ro, counts)
455
+ stats = {
456
+ **counts,
457
+ "categories": categories(data),
458
+ "uncategorized": uncategorized(data),
459
+ "ro_untranslated": miss,
460
+ }
461
+ return html, stats
462
+
463
+
464
+ def stats_only(framework_root: Path):
465
+ dump = extract(framework_root)
466
+ data = compress(dump)
467
+ _, miss = translate_ro(data)
468
+ tool_actions = sum(len(t["actions"]) for t in data["tools"])
469
+ agent_actions = sum(len(a["actions"]) for a in data["agents"])
470
+ return {
471
+ "tools": len(data["tools"]), "agents": len(data["agents"]), "skills": len(data["skills"]),
472
+ "tool_actions": tool_actions, "agent_actions": agent_actions,
473
+ "actions": tool_actions + agent_actions,
474
+ "categories": categories(data), "uncategorized": uncategorized(data),
475
+ "ro_untranslated": miss,
476
+ }
@@ -0,0 +1,19 @@
1
+ """Category census for this distribution.
2
+
3
+ Generated from the publication plan; regenerate when the published set
4
+ changes. Every published tool must appear here or the map files it under
5
+ "Other" and `framework-map check` reports it.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ CAT = {
10
+ "connector-builder": "PROCESIO & automation",
11
+ "framework-map": "Framework core",
12
+ "mysql": "Data & databases",
13
+ "procesio": "PROCESIO & automation",
14
+ "sqlserver": "Data & databases",
15
+ "web": "Web automation",
16
+ "xlsx": "Data & databases",
17
+ }
18
+
19
+ FALLBACK_CAT = "Other"
@@ -0,0 +1,94 @@
1
+ """Romanian catalogue for this distribution.
2
+
3
+ Generated from the publication plan. `framework-map check` lists anything
4
+ a new component adds that is not translated here yet.
5
+ """
6
+ from __future__ import annotations
7
+
8
+ # category labels
9
+ CATS = {
10
+ "Data & databases": "Date & baze de date",
11
+ "Framework core": "Nucleul framework-ului",
12
+ "Other": "Altele",
13
+ "PROCESIO & automation": "PROCESIO & automatizare",
14
+ "Web automation": "Automatizare web",
15
+ }
16
+
17
+ TOOL_DESC = {
18
+ "connector-builder": "AI Connector Builder (connector-builder.procesio.app): transformă documentația unui API într-un connector .nupkg de Custom Action PROCESIO compilat, printr-un pipeline LLM în 8 etape (gather -> clarify -> plan -> generate -> validate -> compile -> fix -> deliver). Conduce tot ciclul de build, citește/scrie fișierele generate, descarcă artefactul .nupkg (de urcat în PROCESIO pentru testare live), inspectează logurile/telemetria și editează baza de cunoștințe a builder-ului (prompturi, module de spec, exemple, reguli de validare). Două moduri de auth, ambele -> token Bearer: o cheie API acb_, sau username/parolă via /auth/login.",
19
+ "framework-map": "Regenerează harta framework-ului, interactivă și bilingvă (EN implicit / RO) - un singur fișier HTML autonom care vizualizează fiecare tool, agent, skill și acțiune din registrul viu (până la nivel de argument), plus bucla de orchestrare, diagrama cine-declanșează-ce, programările, memoria de context/stare/cunoștințe și exemple de utilizare. Făcut pentru a prezenta framework-ul Agents-and-Tools unei echipe.",
20
+ "mysql": "Interogări MySQL/MariaDB read-only peste pymysql, cu profile de conexiune numite. Implicit doar SELECT (--write pentru a suprascrie); întoarce rânduri ca JSON; introspecție de schemă/tabele. MySQL nu are un intent de read-only, deci write-guard-ul e mecanismul de forțare.",
21
+ "procesio": "Platforma de automatizare low-code PROCESIO (procesio.app/.com). Acoperire 1:1 completă a Web API-ului: fiecare endpoint e o acțiune (nume <metodă>-<cale>) plus scurtături ergonomice, un `request` generic și un `export` (transport .procesio). Auth duală (cheie API per-workspace, sau sesiune cookie username/parolă) cu un depozit de profile multi-credential; --profile alege contul/cheia, --workspace-id setează workspace-ul activ.",
22
+ "sqlserver": "Interogări SQL Server read-only peste pyodbc, cu profile de conexiune numite. Implicit doar SELECT (--write pentru a suprascrie); întoarce rânduri ca JSON; introspecție de schemă/tabele.",
23
+ "web": "Conduce aplicații web care NU au API prin Playwright, refolosind sesiuni de login SALVATE ca să ne autentificăm o dată și să reutilizăm. Sesiunile sunt Playwright storageState (cookie-uri + localStorage) per site numit, stocate gitignored sub tools/web/sessions/<name>.json - țin auth live și sunt SENSIBILE (niciodată comise, niciodată afișate). Alte tool-uri și agentul de outreach îl apelează ori de câte ori trebuie să se conecteze la un site sau să facă research web mai adânc. Pe bază de acțiuni. Fără API HTTP; o abstracție BrowserDriver împachetează Playwright (importat lazy) ca tool-ul să se încarce chiar și înainte ca browserele să fie instalate. SESIUNI DEȚINUTE DE BROKER: run/get-text/screenshot pe o sesiune deținută de un broker de serializare (whatsapp/ryver/fgo/mirro) rulează ÎN acel broker, serializate cu comenzile tool-ului proprietar. --direct trece peste (backup).",
24
+ "xlsx": "Citește workbook-uri Excel locale (.xlsx/.xlsm) - listează foi, citește o foaie ca JSON, sau aruncă tot fișierul în text. Fără credentiale.",
25
+ }
26
+
27
+ AGENT_DESC = {
28
+ "connector-builder": "Agent de orchestrare pentru construirea de connectoare PROCESIO. Conduce tool-ul `connector-builder` (clientul REST al AI Connector Builder de la connector-builder.procesio.app) și tool-ul `procesio` ca să ruleze bucla completă: generează un connector de Custom Action din documentația API → descarcă .nupkg-ul compilat → îl urcă în PROCESIO → îl testează live → întoarce eșecurile ca să îmbunătățească connectorul (și, pentru probleme sistemice, baza de cunoștințe a builder-ului). E partea executabilă a playbook-ului build→test→improve din acest folder și puntea către playbook-ul de build-and-test al agentului procesio. Mecanica tool-ului stă în tools/connector-builder/; metodologia stă aici.",
29
+ "procesio": "Agent de build-and-test PROCESIO. Știe cum să creeze use case-uri, să editeze resurse și să îmbunătățească implementări pe platforma PROCESIO și impune disciplina de build-and-test: servește playbook-ul operațional + best practices, emite checklist-ul riguros de self-test, rulează o poartă de verify automatizabilă pe un proces live (validare, paritate designer-vs-runtime, rulare + citire status instanță) și auditează static un proces pentru mirosuri de ineficiență / UX / robustețe. Metodologia stă în acest folder; mecanica tool-ului stă în tools/procesio/.",
30
+ }
31
+
32
+ SKILL_DESC = {
33
+ "procesio-cli": "Operează și depanează resurse PROCESIO prin CLI-ul sau MCP-ul acestui repository. Folosește când inspectezi, creezi, editezi, rulezi, validezi, auditezi, exporți, imporți, programezi, declanșezi, testezi sau verifici un proces PROCESIO, un formular, un document, un webhook, o credențială, un model de date, o Custom Action, un workspace sau o instanță de execuție.",
34
+ "procesio-setup": "Conectează această instalare la un workspace PROCESIO, ca serverul MCP și CLI-ul să îl poată accesa. Folosește la prima rulare, după instalarea plugin-ului, când un apel eșuează cu auth_required, missing_secrets sau fără credențial stocat, când cineva întreabă cum să adauge o cheie API ori un al doilea mediu, când comuți între medii PROCESIO, sau când un tool raportează o cerință de mașină lipsă.",
35
+ "procesio-cli-maintainer": "Modifică sau revizuiește codul sursă al repository-ului procesio-cli. Folosește pentru a adăuga o acțiune CLI nouă, a edita un manifest sau o implementare CLI, a schimba registrul sau serverul MCP, a modifica runtime-ul unui agent, routerul de capabilități generat, sincronizarea CLAUDE.md, o poartă de CI, teste, gestionarea credențialelor, contractul JSON sau politica de reversibilitate; folosește pentru implementarea repository-ului, diff-uri, referințe de integrare stricate și sincronizarea manifest-la-skill. NU folosi pentru operații pe workspace-ul PROCESIO sau când livrabilul principal e un pachet de Agent Skill, redactarea unui SKILL.md, granițele de rutare ale unui skill sau evaluarea comportamentală a unui skill.",
36
+ "agent-skill-engineer": "Construiește pachete reutilizabile de Agent Skill și sisteme de rutare și evaluare pentru SKILL.md. Folosește când livrabilul principal e un Agent Skill: transformi un workflow repetat de agent într-un skill, redactezi sau revizuiești un SKILL.md ori un skill de domeniu (de ex. skill-ul de optimizare SQL), schimbi descrierea sau granița de declanșare a unui skill, împarți conținutul unui skill în referințe, scripturi sau asset-uri progresive, construiești baseline-uri cu rubrică fixă și evaluări A/A sau A/B de skill, ori auditezi un pachet de skill. NU folosi pentru implementare obișnuită de repository, operații pe workspace, design CLI nelegat, creare de imagini sau conținut de unică folosință.",
37
+ "procesio-platform-advisor": "Evaluează dacă PROCESIO poate susține un flux de lucru și ce arhitectură se potrivește. Folosește pentru capabilitatea produsului, fezabilitate, evaluarea unui caz de utilizare, limite de integrare, prețarea PROCESIO, calcul de cost, câte EE-uri sunt necesare pentru un volum zilnic, dimensionarea capacității mediilor de execuție, comparații cu Zapier, Make, MuleSoft sau Workato, on-prem versus cloud, dovezi de conformitate, strategie RPA și decizia asupra căror procese de business să fie automatizate înainte de implementare.",
38
+ "sql-server-optimizer": "Optimizator T-SQL de SQL Server pentru SQL simplu și workflow-uri PROCESIO. Rescrie interogări, proceduri stocate, funcții și scripturi în cod mai rapid, mai curat, gata de producție. Detectează variabilele inline PROCESIO și SQL-ul cu parametri nativi, convertindu-le corect. Îmbunătățește ordinea de JOIN, asigură sargabilitate și siguranță de tip, forțează izolarea READ UNCOMMITTED și header-e de semnătură pe toate obiectele și scoate un bloc de mapare a parametrilor plus note concise. Folosește MEREU acest skill când userul: lipește orice T-SQL; cere să optimizezi, revizuiești, repari, cureți, rescrii sau îmbunătățești SQL; întreabă de ce e lentă o interogare; întreabă de indexuri, parameter sniffing sau planuri de execuție; folosește fraze de tip \"optimizează această interogare\", \"revizuiește-mi procedura\", \"parametrizează asta\", sau \"PROCESIO SQL\".",
39
+ }
40
+
41
+ TRIG = {
42
+ "approve / revise the plan / regenerate files / download the connector artifact": "aprobă / revizuiește planul / regenerează fișiere / descarcă artefactul connectorului",
43
+ "audit a procesio process for best practices": "auditează un proces procesio pentru best practices",
44
+ "build a PROCESIO custom action / connector from API docs": "construiește un custom action / connector PROCESIO din documentația API",
45
+ "build a PROCESIO custom action / connector from API docs and test it": "construiește o custom action / un connector PROCESIO din documentația API și testează-l",
46
+ "build a procesio use case": "construiește un use case procesio",
47
+ "build the bilingual framework map (EN/RO)": "construiește harta bilingvă a framework-ului (EN/RO)",
48
+ "create / run / drive an AI Connector Builder build": "creează / rulează / conduce un build AI Connector Builder",
49
+ "delete a process / form / document / webhook / credential": "șterge un proces / formular / document / webhook / credential",
50
+ "download a flow-instance file (Generate-Document output)": "descarcă un fișier de instanță de flux (output Generate-Document)",
51
+ "drive the AI Connector Builder end to end (gather → plan → generate → compile)": "conduce AI Connector Builder de la cap la coadă (colectare → plan → generare → compilare)",
52
+ "drive/scrape a website that has no API, using a saved login session; deeper web research": "conduce/scrapează un site fără API, cu o sesiune de login salvată; research web mai adânc",
53
+ "duplicate a process / copy a process / clone a process": "duplică un proces / copiază un proces / clonează un proces",
54
+ "edit the connector builder's prompts / spec modules / examples (improve generation)": "editează prompturile / modulele de spec / exemplele connector builder-ului (îmbunătățește generarea)",
55
+ "export procesio": "export procesio",
56
+ "generate a .nupkg connector for PROCESIO from documentation": "generează un connector .nupkg pentru PROCESIO din documentație",
57
+ "how do I run the connector build → test → improve loop": "cum rulez bucla build → test → îmbunătățire a connectorului",
58
+ "how should I build / test in procesio": "cum ar trebui să construiesc / testez în procesio",
59
+ "import procesio / import a .procesio bundle": "import procesio / importă un bundle .procesio",
60
+ "improve a procesio implementation": "îmbunătățește o implementare procesio",
61
+ "launch procesio process": "lansează un proces procesio",
62
+ "layout / re-lay-out a process canvas; read or inspect a flow graph": "aranjează / re-aranjează canvasul unui proces; citește sau inspectează un graf de flux",
63
+ "list / add / set the default procesio environment (<Client>-<ENV>); bind a credential to an environment": "listează / adaugă / setează mediul procesio implicit (<Client>-<ENV>); leagă o credențială de un mediu",
64
+ "list MySQL tables or columns": "listează tabele sau coloane MySQL",
65
+ "list SQL Server tables or columns": "listează tabele sau coloane SQL Server",
66
+ "list forms / list documents; get or toggle a process; AI Decisional": "listează formulare / documente; ia sau comută un proces; AI Decisional",
67
+ "list procesio processes": "listează procesele procesio",
68
+ "procesio": "procesio",
69
+ "procesio api": "procesio api",
70
+ "procesio endpoint": "procesio endpoint",
71
+ "procesio export": "procesio export",
72
+ "procesio instance": "procesio instance",
73
+ "procesio workspace": "procesio workspace",
74
+ "query a MySQL / MariaDB database": "interoghează o bază de date MySQL / MariaDB",
75
+ "query a SQL Server / MSSQL database": "interoghează o bază de date SQL Server / MSSQL",
76
+ "read a table from MySQL": "citește un tabel din MySQL",
77
+ "read a table from SQL Server": "citește un tabel din SQL Server",
78
+ "refresh the agents and tools diagram / presentation page": "împrospătează diagrama de agenți și tool-uri / pagina de prezentare",
79
+ "regenerate / rebuild the framework map or the agents-and-tools visualization": "regenerează / reconstruiește harta framework-ului sau vizualizarea agents-and-tools",
80
+ "run a MySQL query": "rulează o interogare MySQL",
81
+ "run a SQL Server query": "rulează o interogare SQL Server",
82
+ "run a procesio process": "rulează un proces procesio",
83
+ "run procesio against QA / DEV / staging / a client installation": "rulează procesio pe QA / DEV / staging / o instalare de client",
84
+ "switch procesio environment / work on PROCESIO Internal-QA / Internal-DEV / a client env": "schimbă mediul procesio / lucrează pe PROCESIO Internal-QA / Internal-DEV / un mediu de client",
85
+ "test / verify a procesio process or resource": "testează / verifică un proces sau o resursă procesio",
86
+ "test a credential connection / test a custom action": "testează o conexiune de credential / testează un custom action",
87
+ "trigger procesio flow": "declanșează un flux procesio",
88
+ "update the framework HTML with the new tools / agents / mechanics": "actualizează HTML-ul framework-ului cu tool-urile / agenții / mecanicile noi",
89
+ "upload / install / delete / list a custom action (.nupkg connector)": "urcă / instalează / șterge / listează un custom action (connector .nupkg)",
90
+ "upload a generated connector to PROCESIO and improve it from the feedback": "urcă un connector generat în PROCESIO și îmbunătățește-l din feedback",
91
+ "validate a process (correctness oracle)": "validează un proces (oracol de corectitudine)",
92
+ "what's the next step for this connector build": "care e următorul pas pentru acest build de connector",
93
+ "which tools or agents changed / still need an RO translation": "ce tool-uri sau agenți s-au schimbat / mai au nevoie de traducere RO",
94
+ }