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.
- procesio_cli/__init__.py +18 -0
- procesio_cli/_cli.py +71 -0
- procesio_cli/agents/__init__.py +0 -0
- procesio_cli/agents/_lib/__init__.py +0 -0
- procesio_cli/agents/_lib/actiondef.py +24 -0
- procesio_cli/agents/_lib/errors.py +40 -0
- procesio_cli/agents/_lib/reversibility.py +236 -0
- procesio_cli/agents/_lib/toolrunner.py +141 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
- procesio_cli/agents/connector-builder/README.md +51 -0
- procesio_cli/agents/connector-builder/agent.yaml +61 -0
- procesio_cli/agents/connector-builder/context.py +19 -0
- procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
- procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
- procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
- procesio_cli/agents/connector-builder/handlers/status.py +35 -0
- procesio_cli/agents/connector-builder/knowledge.py +47 -0
- procesio_cli/agents/connector-builder/main.py +93 -0
- procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
- procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
- procesio_cli/agents/orchestrator/__init__.py +0 -0
- procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
- procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
- procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
- procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
- procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
- procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
- procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
- procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
- procesio_cli/agents/procesio/README.md +97 -0
- procesio_cli/agents/procesio/__init__.py +0 -0
- procesio_cli/agents/procesio/agent.yaml +73 -0
- procesio_cli/agents/procesio/audit.py +226 -0
- procesio_cli/agents/procesio/checklist.py +135 -0
- procesio_cli/agents/procesio/context.py +19 -0
- procesio_cli/agents/procesio/handlers/__init__.py +0 -0
- procesio_cli/agents/procesio/handlers/audit.py +39 -0
- procesio_cli/agents/procesio/handlers/checklist.py +34 -0
- procesio_cli/agents/procesio/handlers/guidance.py +36 -0
- procesio_cli/agents/procesio/handlers/status.py +33 -0
- procesio_cli/agents/procesio/handlers/verify.py +39 -0
- procesio_cli/agents/procesio/knowledge.py +115 -0
- procesio_cli/agents/procesio/main.py +89 -0
- procesio_cli/agents/procesio/tests/__init__.py +0 -0
- procesio_cli/agents/procesio/tests/conftest.py +62 -0
- procesio_cli/agents/procesio/tests/test_audit.py +91 -0
- procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
- procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
- procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
- procesio_cli/agents/procesio/tests/test_verify.py +134 -0
- procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
- procesio_cli/agents/procesio/verifylib.py +222 -0
- procesio_cli/dashboard/README.md +117 -0
- procesio_cli/dashboard/__init__.py +18 -0
- procesio_cli/dashboard/serve.py +98 -0
- procesio_cli/dashboard/server/__init__.py +1 -0
- procesio_cli/dashboard/server/config_schemas.py +92 -0
- procesio_cli/dashboard/server/google.py +103 -0
- procesio_cli/dashboard/server/handler.py +160 -0
- procesio_cli/dashboard/server/inventory.py +213 -0
- procesio_cli/dashboard/server/jobs.py +118 -0
- procesio_cli/dashboard/server/llmtest.py +181 -0
- procesio_cli/dashboard/server/procesio_env.py +94 -0
- procesio_cli/dashboard/server/routes.py +74 -0
- procesio_cli/dashboard/server/runner.py +150 -0
- procesio_cli/dashboard/server/security.py +29 -0
- procesio_cli/dashboard/server/setup.py +211 -0
- procesio_cli/dashboard/server/validate.py +152 -0
- procesio_cli/dashboard/tests/conftest.py +16 -0
- procesio_cli/dashboard/tests/test_dashboard.py +225 -0
- procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
- procesio_cli/dashboard/web/actions.js +274 -0
- procesio_cli/dashboard/web/api.js +79 -0
- procesio_cli/dashboard/web/app.js +385 -0
- procesio_cli/dashboard/web/copilot.js +72 -0
- procesio_cli/dashboard/web/google.js +121 -0
- procesio_cli/dashboard/web/index.html +67 -0
- procesio_cli/dashboard/web/procesio_env.js +187 -0
- procesio_cli/dashboard/web/styles.css +207 -0
- procesio_cli/registry.py +370 -0
- procesio_cli/scripts/build-router.py +249 -0
- procesio_cli/scripts/build-tool-skill.py +202 -0
- procesio_cli/scripts/check-requirements.py +131 -0
- procesio_cli/scripts/check-skill-governance.py +174 -0
- procesio_cli/scripts/evaluate-skill-routing.py +217 -0
- procesio_cli/scripts/evaluate-skills.py +316 -0
- procesio_cli/scripts/get-skill.py +122 -0
- procesio_cli/scripts/list-skills.py +68 -0
- procesio_cli/scripts/list-tools.py +73 -0
- procesio_cli/scripts/run-agent.py +59 -0
- procesio_cli/scripts/run-tool.py +123 -0
- procesio_cli/scripts/secret_scan.py +584 -0
- procesio_cli/scripts/set-credential.py +126 -0
- procesio_cli/scripts/validate-skills.py +530 -0
- procesio_cli/skills/PORTFOLIO.md +134 -0
- procesio_cli/skills/__init__.py +6 -0
- procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
- procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
- procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
- procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
- procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
- procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
- procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
- procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
- procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
- procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
- procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
- procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
- procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
- procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
- procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
- procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
- procesio_cli/skills/evals/baseline-catalog.json +14 -0
- procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
- procesio_cli/skills/evals/baseline.json +37 -0
- procesio_cli/skills/evals/behavioral.json +367 -0
- procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
- procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
- procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
- procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
- procesio_cli/skills/evals/routing.json +363 -0
- procesio_cli/skills/evals/validation-baseline.json +4 -0
- procesio_cli/skills/procesio-cli/SKILL.md +134 -0
- procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
- procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
- procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
- procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
- procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
- procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
- procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
- procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
- procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
- procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
- procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
- procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
- procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
- procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
- procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
- procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
- procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
- procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
- procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
- procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
- procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
- procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
- procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
- procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
- procesio_cli/skills/procesio-setup/SKILL.md +180 -0
- procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
- procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
- procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
- procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
- procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
- procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
- procesio_cli/skills/tests/__init__.py +0 -0
- procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
- procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
- procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
- procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
- procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
- procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
- procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
- procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
- procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
- procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
- procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
- procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
- procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
- procesio_cli/skills/tests/test_skill_routing.py +74 -0
- procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
- procesio_cli/skills/tests/test_validate_skills.py +115 -0
- procesio_cli/tools/__init__.py +0 -0
- procesio_cli/tools/_lib/README.md +119 -0
- procesio_cli/tools/_lib/__init__.py +0 -0
- procesio_cli/tools/_lib/accounting.py +120 -0
- procesio_cli/tools/_lib/contacts.py +544 -0
- procesio_cli/tools/_lib/creds.py +83 -0
- procesio_cli/tools/_lib/creds_backends.py +578 -0
- procesio_cli/tools/_lib/dbprofiles.py +147 -0
- procesio_cli/tools/_lib/dbquery.py +286 -0
- procesio_cli/tools/_lib/dbschema.py +225 -0
- procesio_cli/tools/_lib/io.py +54 -0
- procesio_cli/tools/_lib/manifest.py +297 -0
- procesio_cli/tools/_lib/skill_release.py +127 -0
- procesio_cli/tools/_lib/skill_resources.py +118 -0
- procesio_cli/tools/_lib/userdata.py +228 -0
- procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
- procesio_cli/tools/_lib/webserialize/admin.py +61 -0
- procesio_cli/tools/_lib/webserialize/client.py +264 -0
- procesio_cli/tools/_lib/webserialize/config.py +96 -0
- procesio_cli/tools/_lib/webserialize/errors.py +27 -0
- procesio_cli/tools/_lib/webserialize/framing.py +45 -0
- procesio_cli/tools/_lib/webserialize/registry.py +47 -0
- procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
- procesio_cli/tools/_lib/webserialize/server.py +510 -0
- procesio_cli/tools/_lib/websession.py +194 -0
- procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
- procesio_cli/tools/connector-builder/README.md +101 -0
- procesio_cli/tools/connector-builder/SKILL.md +248 -0
- procesio_cli/tools/connector-builder/__init__.py +7 -0
- procesio_cli/tools/connector-builder/actiondef.py +24 -0
- procesio_cli/tools/connector-builder/client.py +251 -0
- procesio_cli/tools/connector-builder/errors.py +44 -0
- procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
- procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
- procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
- procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
- procesio_cli/tools/connector-builder/handlers/common.py +104 -0
- procesio_cli/tools/connector-builder/handlers/files.py +111 -0
- procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
- procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
- procesio_cli/tools/connector-builder/main.py +94 -0
- procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
- procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
- procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
- procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
- procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
- procesio_cli/tools/connector-builder/tool.yaml +671 -0
- procesio_cli/tools/framework-map/.gitattributes +2 -0
- procesio_cli/tools/framework-map/README.md +98 -0
- procesio_cli/tools/framework-map/SKILL.md +30 -0
- procesio_cli/tools/framework-map/app.js +188 -0
- procesio_cli/tools/framework-map/fm_builder.py +476 -0
- procesio_cli/tools/framework-map/fm_catalog.py +19 -0
- procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
- procesio_cli/tools/framework-map/fm_strings.py +101 -0
- procesio_cli/tools/framework-map/main.py +95 -0
- procesio_cli/tools/framework-map/styles.css +214 -0
- procesio_cli/tools/framework-map/tests/conftest.py +33 -0
- procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
- procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
- procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
- procesio_cli/tools/framework-map/tool.yaml +61 -0
- procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/mysql/README.md +196 -0
- procesio_cli/tools/mysql/SKILL.md +37 -0
- procesio_cli/tools/mysql/__init__.py +0 -0
- procesio_cli/tools/mysql/connection.py +191 -0
- procesio_cli/tools/mysql/main.py +487 -0
- procesio_cli/tools/mysql/profiles.template.json +1 -0
- procesio_cli/tools/mysql/schema.py +434 -0
- procesio_cli/tools/mysql/tests/__init__.py +0 -0
- procesio_cli/tools/mysql/tests/conftest.py +21 -0
- procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
- procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
- procesio_cli/tools/mysql/tool.yaml +112 -0
- procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
- procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
- procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
- procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
- procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
- procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
- procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
- procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
- procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
- procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
- procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
- procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
- procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
- procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
- procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
- procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
- procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
- procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
- procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
- procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
- procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
- procesio_cli/tools/procesio/README.md +341 -0
- procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
- procesio_cli/tools/procesio/SKILL.md +694 -0
- procesio_cli/tools/procesio/__init__.py +1 -0
- procesio_cli/tools/procesio/actiondef.py +27 -0
- procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
- procesio_cli/tools/procesio/auth.py +354 -0
- procesio_cli/tools/procesio/autogen.py +121 -0
- procesio_cli/tools/procesio/client.py +355 -0
- procesio_cli/tools/procesio/config.py +96 -0
- procesio_cli/tools/procesio/data/endpoints.json +2901 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
- procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
- procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
- procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
- procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
- procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
- procesio_cli/tools/procesio/dto/__init__.py +13 -0
- procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
- procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
- procesio_cli/tools/procesio/dto/credential/description.md +193 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
- procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
- procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
- procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
- procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
- procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
- procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
- procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
- procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
- procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
- procesio_cli/tools/procesio/dto/document/builder.py +193 -0
- procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
- procesio_cli/tools/procesio/dto/document/description.md +124 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
- procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
- procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
- procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
- procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
- procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
- procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
- procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
- procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
- procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
- procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
- procesio_cli/tools/procesio/dto/form/description.md +346 -0
- procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
- procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
- procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
- procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
- procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
- procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
- procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
- procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
- procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
- procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
- procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
- procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
- procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
- procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
- procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
- procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
- procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
- procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
- procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
- procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
- procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
- procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
- procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
- procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
- procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
- procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
- procesio_cli/tools/procesio/dto/framework.py +125 -0
- procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
- procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
- procesio_cli/tools/procesio/dto/process/description.md +218 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
- procesio_cli/tools/procesio/dto/process/naming.py +305 -0
- procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
- procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
- procesio_cli/tools/procesio/dto/refdata.py +87 -0
- procesio_cli/tools/procesio/dto/registry.py +27 -0
- procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
- procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
- procesio_cli/tools/procesio/environments.py +264 -0
- procesio_cli/tools/procesio/errors.py +166 -0
- procesio_cli/tools/procesio/flowmodel/README.md +37 -0
- procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
- procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
- procesio_cli/tools/procesio/flowmodel/families.py +34 -0
- procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
- procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
- procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
- procesio_cli/tools/procesio/flowmodel/model.py +82 -0
- procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
- procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
- procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
- procesio_cli/tools/procesio/form_code_keys.py +50 -0
- procesio_cli/tools/procesio/formlint.py +292 -0
- procesio_cli/tools/procesio/gen_manifest.py +118 -0
- procesio_cli/tools/procesio/handlers/__init__.py +1 -0
- procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
- procesio_cli/tools/procesio/handlers/catalog.py +147 -0
- procesio_cli/tools/procesio/handlers/common.py +90 -0
- procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
- procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
- procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
- procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
- procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
- procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
- procesio_cli/tools/procesio/handlers/files.py +141 -0
- procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
- procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
- procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
- procesio_cli/tools/procesio/handlers/form_code.py +277 -0
- procesio_cli/tools/procesio/handlers/form_element.py +199 -0
- procesio_cli/tools/procesio/handlers/form_events.py +441 -0
- procesio_cli/tools/procesio/handlers/form_update.py +270 -0
- procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
- procesio_cli/tools/procesio/handlers/generic.py +135 -0
- procesio_cli/tools/procesio/handlers/layout.py +137 -0
- procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
- procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
- procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
- procesio_cli/tools/procesio/handlers/processes.py +416 -0
- procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
- procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
- procesio_cli/tools/procesio/handlers/schedules.py +320 -0
- procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
- procesio_cli/tools/procesio/handlers/transport.py +463 -0
- procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
- procesio_cli/tools/procesio/layout/README.md +196 -0
- procesio_cli/tools/procesio/layout/__init__.py +11 -0
- procesio_cli/tools/procesio/layout/adapter.py +736 -0
- procesio_cli/tools/procesio/layout/cycles.py +186 -0
- procesio_cli/tools/procesio/layout/dispatch.py +39 -0
- procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
- procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
- procesio_cli/tools/procesio/layout/elk/package.json +11 -0
- procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
- procesio_cli/tools/procesio/layout/engine.py +1311 -0
- procesio_cli/tools/procesio/layout/report.py +187 -0
- procesio_cli/tools/procesio/main.py +179 -0
- procesio_cli/tools/procesio/profiles.py +193 -0
- procesio_cli/tools/procesio/reliability.py +193 -0
- procesio_cli/tools/procesio/sqlformat.py +167 -0
- procesio_cli/tools/procesio/swagger.py +51 -0
- procesio_cli/tools/procesio/tests/__init__.py +0 -0
- procesio_cli/tools/procesio/tests/conftest.py +129 -0
- procesio_cli/tools/procesio/tests/test_auth.py +200 -0
- procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
- procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
- procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
- procesio_cli/tools/procesio/tests/test_client.py +114 -0
- procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
- procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
- procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
- procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
- procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
- procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
- procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
- procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
- procesio_cli/tools/procesio/tests/test_dto.py +734 -0
- procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
- procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
- procesio_cli/tools/procesio/tests/test_environments.py +214 -0
- procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
- procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
- procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
- procesio_cli/tools/procesio/tests/test_files.py +72 -0
- procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
- procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
- procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
- procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
- procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
- procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
- procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
- procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
- procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
- procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
- procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
- procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
- procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
- procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
- procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
- procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
- procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
- procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
- procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
- procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
- procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
- procesio_cli/tools/procesio/tests/test_guards.py +110 -0
- procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
- procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
- procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
- procesio_cli/tools/procesio/tests/test_layout.py +574 -0
- procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
- procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
- procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
- procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
- procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
- procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
- procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
- procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
- procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
- procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
- procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
- procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
- procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
- procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
- procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
- procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
- procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
- procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
- procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
- procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
- procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
- procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
- procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
- procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
- procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
- procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
- procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
- procesio_cli/tools/procesio/tests/test_transport.py +147 -0
- procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
- procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
- procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
- procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
- procesio_cli/tools/procesio/tool.yaml +12486 -0
- procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/sqlserver/README.md +192 -0
- procesio_cli/tools/sqlserver/SKILL.md +37 -0
- procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
- procesio_cli/tools/sqlserver/__init__.py +0 -0
- procesio_cli/tools/sqlserver/connection.py +242 -0
- procesio_cli/tools/sqlserver/main.py +521 -0
- procesio_cli/tools/sqlserver/profiles.template.json +1 -0
- procesio_cli/tools/sqlserver/schema.py +600 -0
- procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
- procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
- procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
- procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
- procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
- procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
- procesio_cli/tools/sqlserver/tool.yaml +123 -0
- procesio_cli/tools/web/README.md +381 -0
- procesio_cli/tools/web/SKILL.md +37 -0
- procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
- procesio_cli/tools/web/__init__.py +21 -0
- procesio_cli/tools/web/actiondef.py +24 -0
- procesio_cli/tools/web/api.py +444 -0
- procesio_cli/tools/web/brokered.py +107 -0
- procesio_cli/tools/web/driver.py +839 -0
- procesio_cli/tools/web/drivercontract.py +44 -0
- procesio_cli/tools/web/errors.py +54 -0
- procesio_cli/tools/web/handlers/__init__.py +1 -0
- procesio_cli/tools/web/handlers/archive.py +367 -0
- procesio_cli/tools/web/handlers/browse.py +182 -0
- procesio_cli/tools/web/handlers/contacts.py +74 -0
- procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
- procesio_cli/tools/web/main.py +128 -0
- procesio_cli/tools/web/sessions.py +253 -0
- procesio_cli/tools/web/steps.py +162 -0
- procesio_cli/tools/web/tests/__init__.py +0 -0
- procesio_cli/tools/web/tests/conftest.py +197 -0
- procesio_cli/tools/web/tests/test_api.py +330 -0
- procesio_cli/tools/web/tests/test_archive.py +190 -0
- procesio_cli/tools/web/tests/test_brokered.py +138 -0
- procesio_cli/tools/web/tests/test_dispatch.py +132 -0
- procesio_cli/tools/web/tests/test_errors.py +60 -0
- procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
- procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
- procesio_cli/tools/web/tests/test_sessions.py +145 -0
- procesio_cli/tools/web/tests/test_steps.py +210 -0
- procesio_cli/tools/web/tool.yaml +184 -0
- procesio_cli/tools/xlsx/README.md +34 -0
- procesio_cli/tools/xlsx/SKILL.md +28 -0
- procesio_cli/tools/xlsx/__init__.py +0 -0
- procesio_cli/tools/xlsx/main.py +129 -0
- procesio_cli/tools/xlsx/reader.py +91 -0
- procesio_cli/tools/xlsx/tests/__init__.py +0 -0
- procesio_cli/tools/xlsx/tests/conftest.py +39 -0
- procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
- procesio_cli/tools/xlsx/tool.yaml +30 -0
- procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
- procesio_cli/webplatform/aat_mcp/README.md +78 -0
- procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
- procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
- procesio_cli/webplatform/aat_mcp/gate.py +68 -0
- procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
- procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
- procesio_cli/webplatform/aat_mcp/server.py +306 -0
- procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
- procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
- procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
- procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
- procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
- procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
- procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
- procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
- procesio_cli-0.1.1.dist-info/METADATA +467 -0
- procesio_cli-0.1.1.dist-info/RECORD +647 -0
- procesio_cli-0.1.1.dist-info/WHEEL +4 -0
- procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
- procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
- procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"""PROCESIO environments - named URL sets an installation is reached through.
|
|
2
|
+
|
|
3
|
+
A PROCESIO *environment* is one installation of the platform: a `<Client>-<ENV>`
|
|
4
|
+
label (e.g. `Internal-PROD`, `Internal-QA`, `Acme-DEVQA`) that carries the four
|
|
5
|
+
host URLs that installation lives on:
|
|
6
|
+
|
|
7
|
+
web_base the Web API host (every REST call) webapi-*.procesio.app
|
|
8
|
+
app_base the designer / front-end host (designer URLs, CORS Origin) *.procesio.app
|
|
9
|
+
forms_base the public forms host (rendered-form URLs) forms-*.procesio.app
|
|
10
|
+
auth_base the legacy Proxy/Authentication host (rarely used - login goes to web_base)
|
|
11
|
+
|
|
12
|
+
Environments are NON-secret (they are just hostnames). Credentials are stored
|
|
13
|
+
separately (Credential Manager, see profiles.py) and each credential is *bound*
|
|
14
|
+
to one environment by name - so switching environment also switches which
|
|
15
|
+
account/key is used. A credential with no binding belongs to the DEFAULT
|
|
16
|
+
environment, which itself defaults to `Internal-PROD`. That is what keeps every
|
|
17
|
+
pre-existing single-credential setup working unchanged as production: no env
|
|
18
|
+
config on disk + an unbound credential == Internal-PROD == the historical
|
|
19
|
+
hard-coded URLs, with nothing to re-enter.
|
|
20
|
+
|
|
21
|
+
Two layers, merged at read time:
|
|
22
|
+
* BUILT-IN presets in code (Internal-PROD/QA/DEV) - PROCESIO's own infra, shared
|
|
23
|
+
with every teammate, available with zero setup.
|
|
24
|
+
* a USER registry at ``config/procesio/environments.json`` (per-user, wipeable)
|
|
25
|
+
holding client-specific environments (Acme-*, ...) and the default pointer.
|
|
26
|
+
A user entry with the same name OVERRIDES a built-in (so a moved Internal host
|
|
27
|
+
can be corrected without a code change).
|
|
28
|
+
|
|
29
|
+
Client environment URLs are customer-specific, so they are USER DATA and live in
|
|
30
|
+
the registry file - never baked into the shared framework code (only PROCESIO's
|
|
31
|
+
own Internal-* presets are).
|
|
32
|
+
"""
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import json
|
|
36
|
+
import re
|
|
37
|
+
|
|
38
|
+
from tools._lib import userdata
|
|
39
|
+
from tools.procesio.errors import UsageError
|
|
40
|
+
|
|
41
|
+
COMPONENT = "procesio"
|
|
42
|
+
REGISTRY_FILE = "environments.json"
|
|
43
|
+
|
|
44
|
+
# The canonical fallback: an unbound credential and an unset default both resolve
|
|
45
|
+
# here, and its URLs equal the historical hard-coded production defaults.
|
|
46
|
+
DEFAULT_ENV_NAME = "Internal-PROD"
|
|
47
|
+
|
|
48
|
+
# The four hosts every environment defines. Keys are the field names injected into
|
|
49
|
+
# a profile so config.web_base/app_base/forms_base/auth_base pick them up.
|
|
50
|
+
URL_KEYS = ("web_base", "app_base", "forms_base", "auth_base")
|
|
51
|
+
|
|
52
|
+
# Built-in PROCESIO-internal environments (framework-shared, non-secret infra).
|
|
53
|
+
# Production keeps the bare hostnames; QA/DEV use the -qa/-dev host family. auth_base
|
|
54
|
+
# is only meaningful on PROD (the legacy Proxy host); QA/DEV omit it and fall back to
|
|
55
|
+
# the config default, since login goes to web_base anyway.
|
|
56
|
+
BUILTIN: dict[str, dict] = {
|
|
57
|
+
"Internal-PROD": {
|
|
58
|
+
"name": "Internal-PROD", "client": "Internal", "env": "PROD",
|
|
59
|
+
"web_base": "https://webapi.procesio.app",
|
|
60
|
+
"app_base": "https://procesio.app",
|
|
61
|
+
"forms_base": "https://forms.procesio.app",
|
|
62
|
+
"auth_base": "https://auth.procesio.app",
|
|
63
|
+
"builtin": True,
|
|
64
|
+
},
|
|
65
|
+
"Internal-QA": {
|
|
66
|
+
"name": "Internal-QA", "client": "Internal", "env": "QA",
|
|
67
|
+
"web_base": "https://webapi-qa.procesio.app",
|
|
68
|
+
"app_base": "https://qa.procesio.app",
|
|
69
|
+
"forms_base": "https://forms-qa.procesio.app",
|
|
70
|
+
"builtin": True,
|
|
71
|
+
},
|
|
72
|
+
"Internal-DEV": {
|
|
73
|
+
"name": "Internal-DEV", "client": "Internal", "env": "DEV",
|
|
74
|
+
"web_base": "https://webapi-dev.procesio.app",
|
|
75
|
+
"app_base": "https://dev.procesio.app",
|
|
76
|
+
"forms_base": "https://forms-dev.procesio.app",
|
|
77
|
+
"builtin": True,
|
|
78
|
+
},
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
_NAME_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*$")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# -- registry file ----------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
def _registry_path():
|
|
87
|
+
return userdata.config_dir(COMPONENT) / REGISTRY_FILE
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _load_registry() -> dict:
|
|
91
|
+
p = _registry_path()
|
|
92
|
+
if not p.exists():
|
|
93
|
+
return {"environments": {}, "default": None}
|
|
94
|
+
try:
|
|
95
|
+
data = json.loads(p.read_text(encoding="utf-8"))
|
|
96
|
+
except (json.JSONDecodeError, OSError):
|
|
97
|
+
return {"environments": {}, "default": None}
|
|
98
|
+
if not isinstance(data, dict):
|
|
99
|
+
return {"environments": {}, "default": None}
|
|
100
|
+
envs = data.get("environments")
|
|
101
|
+
data["environments"] = envs if isinstance(envs, dict) else {}
|
|
102
|
+
if "default" not in data:
|
|
103
|
+
data["default"] = None
|
|
104
|
+
return data
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _save_registry(data: dict) -> None:
|
|
108
|
+
p = _registry_path()
|
|
109
|
+
# Direct bytes write with LF endings - never the (Cowork-mount-capped) Write tool.
|
|
110
|
+
payload = json.dumps(data, ensure_ascii=False, indent=2) + "\n"
|
|
111
|
+
p.write_bytes(payload.encode("utf-8"))
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# -- read -------------------------------------------------------------------
|
|
115
|
+
|
|
116
|
+
def all_environments() -> dict[str, dict]:
|
|
117
|
+
"""Every known environment: built-ins overlaid by any user entry of the same
|
|
118
|
+
name, plus purely user-defined ones. Values are copies safe to mutate."""
|
|
119
|
+
merged: dict[str, dict] = {k: dict(v) for k, v in BUILTIN.items()}
|
|
120
|
+
for name, env in _load_registry()["environments"].items():
|
|
121
|
+
if not isinstance(env, dict):
|
|
122
|
+
continue
|
|
123
|
+
base = merged.get(name, {})
|
|
124
|
+
base.update(env)
|
|
125
|
+
base["name"] = name
|
|
126
|
+
base["builtin"] = name in BUILTIN
|
|
127
|
+
merged[name] = base
|
|
128
|
+
return merged
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _find(name: str) -> tuple[str, dict] | None:
|
|
132
|
+
"""Case-insensitive lookup by canonical name. Returns (canonical_name, env)."""
|
|
133
|
+
if not name:
|
|
134
|
+
return None
|
|
135
|
+
envs = all_environments()
|
|
136
|
+
if name in envs:
|
|
137
|
+
return name, envs[name]
|
|
138
|
+
low = name.strip().lower()
|
|
139
|
+
for canon, env in envs.items():
|
|
140
|
+
if canon.lower() == low:
|
|
141
|
+
return canon, env
|
|
142
|
+
return None
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def get(name: str) -> dict:
|
|
146
|
+
hit = _find(name)
|
|
147
|
+
if not hit:
|
|
148
|
+
raise UsageError(
|
|
149
|
+
f"no PROCESIO environment named '{name}'. "
|
|
150
|
+
f"Known: {', '.join(sorted(all_environments())) or '(none)'}. "
|
|
151
|
+
f"Add one with: run-tool procesio add-environment ..."
|
|
152
|
+
)
|
|
153
|
+
return hit[1]
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def exists(name: str) -> bool:
|
|
157
|
+
return _find(name) is not None
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def canonical_name(name: str) -> str | None:
|
|
161
|
+
hit = _find(name)
|
|
162
|
+
return hit[0] if hit else None
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
# -- default pointer --------------------------------------------------------
|
|
166
|
+
|
|
167
|
+
def get_default() -> str:
|
|
168
|
+
"""The active environment name. The stored pointer if set and still valid,
|
|
169
|
+
else DEFAULT_ENV_NAME (Internal-PROD) - so a fresh box is production."""
|
|
170
|
+
stored = _load_registry().get("default")
|
|
171
|
+
if stored and exists(stored):
|
|
172
|
+
return canonical_name(stored)
|
|
173
|
+
return DEFAULT_ENV_NAME
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def set_default(name: str) -> str:
|
|
177
|
+
canon = canonical_name(name)
|
|
178
|
+
if not canon:
|
|
179
|
+
raise UsageError(
|
|
180
|
+
f"cannot switch to unknown environment '{name}'. "
|
|
181
|
+
f"Known: {', '.join(sorted(all_environments()))}. "
|
|
182
|
+
f"Add it first with: run-tool procesio add-environment ..."
|
|
183
|
+
)
|
|
184
|
+
data = _load_registry()
|
|
185
|
+
data["default"] = canon
|
|
186
|
+
_save_registry(data)
|
|
187
|
+
return canon
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# -- add / remove (user registry only) --------------------------------------
|
|
191
|
+
|
|
192
|
+
def _derive_client_env(name: str, client: str | None, env: str | None):
|
|
193
|
+
"""Fill client/env from the `<Client>-<ENV>` name when not given explicitly."""
|
|
194
|
+
if client and env:
|
|
195
|
+
return client, env
|
|
196
|
+
if "-" in name:
|
|
197
|
+
c, _, e = name.rpartition("-")
|
|
198
|
+
return client or c, env or e
|
|
199
|
+
return client or name, env or ""
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def add(name: str, *, web_base: str, app_base: str, forms_base: str,
|
|
203
|
+
auth_base: str | None = None, client: str | None = None,
|
|
204
|
+
env: str | None = None, make_default: bool = False) -> dict:
|
|
205
|
+
name = (name or "").strip()
|
|
206
|
+
if not _NAME_RE.match(name):
|
|
207
|
+
raise UsageError(
|
|
208
|
+
"environment name must look like '<Client>-<ENV>' "
|
|
209
|
+
"(letters/digits/.-_ , e.g. 'Acme-PROD')"
|
|
210
|
+
)
|
|
211
|
+
if not (web_base and app_base and forms_base):
|
|
212
|
+
raise UsageError("add-environment needs --web-base, --app-base and --forms-base")
|
|
213
|
+
client, env = _derive_client_env(name, client, env)
|
|
214
|
+
entry = {
|
|
215
|
+
"name": name, "client": client, "env": env,
|
|
216
|
+
"web_base": web_base.rstrip("/"),
|
|
217
|
+
"app_base": app_base.rstrip("/"),
|
|
218
|
+
"forms_base": forms_base.rstrip("/"),
|
|
219
|
+
}
|
|
220
|
+
if auth_base:
|
|
221
|
+
entry["auth_base"] = auth_base.rstrip("/")
|
|
222
|
+
data = _load_registry()
|
|
223
|
+
data["environments"][name] = entry
|
|
224
|
+
if make_default:
|
|
225
|
+
data["default"] = name
|
|
226
|
+
_save_registry(data)
|
|
227
|
+
out = dict(entry)
|
|
228
|
+
out["builtin"] = name in BUILTIN
|
|
229
|
+
return out
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def remove(name: str) -> None:
|
|
233
|
+
data = _load_registry()
|
|
234
|
+
canon = None
|
|
235
|
+
for existing in data["environments"]:
|
|
236
|
+
if existing.lower() == name.strip().lower():
|
|
237
|
+
canon = existing
|
|
238
|
+
break
|
|
239
|
+
if canon is None:
|
|
240
|
+
if name in BUILTIN or canonical_name(name) in BUILTIN:
|
|
241
|
+
raise UsageError(f"'{name}' is a built-in environment and cannot be removed")
|
|
242
|
+
raise UsageError(f"no user-defined environment named '{name}'")
|
|
243
|
+
del data["environments"][canon]
|
|
244
|
+
if data.get("default") and data["default"].lower() == canon.lower():
|
|
245
|
+
data["default"] = None
|
|
246
|
+
_save_registry(data)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
# -- resolution -------------------------------------------------------------
|
|
250
|
+
|
|
251
|
+
def resolve(name: str | None, profile: dict | None = None) -> dict:
|
|
252
|
+
"""The active environment for a call. Precedence, highest first:
|
|
253
|
+
1. an explicit environment name (the --environment flag),
|
|
254
|
+
2. the credential's own `environment` binding,
|
|
255
|
+
3. the stored default environment,
|
|
256
|
+
4. Internal-PROD.
|
|
257
|
+
Always returns a full environment dict (never raises for the fallbacks;
|
|
258
|
+
only an explicit unknown name raises)."""
|
|
259
|
+
if name:
|
|
260
|
+
return get(name)
|
|
261
|
+
bound = (profile or {}).get("environment")
|
|
262
|
+
if bound and exists(bound):
|
|
263
|
+
return get(bound)
|
|
264
|
+
return get(get_default())
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Map exceptions to the framework error envelope: (code, message, details, exit_code).
|
|
2
|
+
|
|
3
|
+
PROCESIO's Web API is ASP.NET/Kestrel behind a Kong gateway, so a request can
|
|
4
|
+
fail at three layers: argument validation (UsageError), missing/invalid
|
|
5
|
+
credentials before any HTTP call (AuthError), or a non-2xx HTTP response
|
|
6
|
+
(ProcesioAPIError). classify() turns each into a stable string code so callers
|
|
7
|
+
(and the outreach agent) can branch without parsing prose.
|
|
8
|
+
|
|
9
|
+
Notable status semantics observed against the live gateway:
|
|
10
|
+
401 Bearer/api-key rejected by the Web API (Kestrel).
|
|
11
|
+
403 authenticated but not permitted in this workspace.
|
|
12
|
+
404 Kong "no Route matched" OR a real not-found from the app.
|
|
13
|
+
407 the Web API could not complete the upstream Proxy-API auth leg
|
|
14
|
+
(its own /api/Authentication proxies to the Authentication Service).
|
|
15
|
+
"""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class UsageError(Exception):
|
|
22
|
+
"""Bad/invalid arguments. Maps to 'invalid_argument', exit code 2."""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class AuthError(Exception):
|
|
26
|
+
"""Missing/invalid credentials before any HTTP call. -> auth_required."""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ProcesioAPIError(Exception):
|
|
30
|
+
"""A non-2xx HTTP response from PROCESIO. Carries status + parsed body."""
|
|
31
|
+
|
|
32
|
+
def __init__(self, status: int, message: str, details: dict | None = None):
|
|
33
|
+
super().__init__(message)
|
|
34
|
+
self.status = status
|
|
35
|
+
self.details = details or {}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class RemovalBlocked(Exception):
|
|
39
|
+
"""A desired-state save was blocked because it would REMOVE actions or variables
|
|
40
|
+
that exist on the live resource. Carries what would disappear so the caller can see
|
|
41
|
+
it before paying for it. Maps to 'removal_blocked', exit code 2. Intentional
|
|
42
|
+
removals pass --allow-remove.
|
|
43
|
+
|
|
44
|
+
Separate from ValidationBlocked on purpose: --force answers "save it even though it
|
|
45
|
+
is invalid", which is a different question from "yes, delete those". A half-built
|
|
46
|
+
process is a legitimate thing to force-save WITHOUT wanting to drop anything.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
def __init__(self, message: str, removed: dict | None = None):
|
|
50
|
+
super().__init__(message)
|
|
51
|
+
self.removed = removed or {}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ValidationBlocked(Exception):
|
|
55
|
+
"""A save was blocked because front-end (designer) and/or back-end validation found
|
|
56
|
+
errors. Carries the full report so the caller can see exactly what to fix. Maps to
|
|
57
|
+
'validation_failed', exit code 2. Bypassable with --force."""
|
|
58
|
+
|
|
59
|
+
def __init__(self, message: str, report: dict | None = None):
|
|
60
|
+
super().__init__(message)
|
|
61
|
+
self.report = report or {}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class DeadlineExceeded(Exception):
|
|
65
|
+
"""A request exceeded its TOTAL wall-clock deadline (see reliability.py). The
|
|
66
|
+
old client had no total deadline — a stalled call ran until SIGKILL. This makes
|
|
67
|
+
the stall a structured, machine-readable failure instead. `outcome` is always
|
|
68
|
+
'unknown' for a write: the request MAY have applied server-side, so the caller
|
|
69
|
+
must verify behaviourally, never assume it did or did not land."""
|
|
70
|
+
|
|
71
|
+
def __init__(self, path: str, endpoint_class: str, deadline_s: float,
|
|
72
|
+
elapsed_s: float):
|
|
73
|
+
super().__init__(
|
|
74
|
+
f"request exceeded the {endpoint_class} deadline of "
|
|
75
|
+
f"{deadline_s:.0f}s (elapsed {elapsed_s:.1f}s): {path}")
|
|
76
|
+
self.path = path
|
|
77
|
+
self.endpoint_class = endpoint_class
|
|
78
|
+
self.deadline_s = deadline_s
|
|
79
|
+
self.elapsed_s = elapsed_s
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class NotPersisted(Exception):
|
|
83
|
+
"""A write returned 2xx but a read-back shows the server kept the OLD value. PROCESIO does
|
|
84
|
+
this silently in places (a FormTemplate write that drops Data: the PUT succeeds, updatedOn
|
|
85
|
+
moves, the previous content stays). Maps to 'not_persisted', exit code 1. Carries what was
|
|
86
|
+
sent vs what is stored."""
|
|
87
|
+
|
|
88
|
+
def __init__(self, message: str, details: dict | None = None):
|
|
89
|
+
super().__init__(message)
|
|
90
|
+
self.details = details or {}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
_HTTP_CODES = {
|
|
94
|
+
400: ("invalid_argument", "bad request - check the parameters/body"),
|
|
95
|
+
401: ("auth_required", "authentication failed - token or api-key rejected"),
|
|
96
|
+
403: ("permission_denied", "not permitted in this workspace"),
|
|
97
|
+
404: ("not_found", "not found (or Kong route not matched)"),
|
|
98
|
+
405: ("invalid_argument", "method not allowed for this path"),
|
|
99
|
+
407: ("proxy_auth_failed",
|
|
100
|
+
"the Web API could not authenticate against the Proxy API "
|
|
101
|
+
"(check the auth_base host and credentials)"),
|
|
102
|
+
409: ("conflict", "conflict"),
|
|
103
|
+
422: ("invalid_argument", "unprocessable - validation failed"),
|
|
104
|
+
429: ("rate_limited", "rate limit exceeded - back off and retry"),
|
|
105
|
+
500: ("server_error", "PROCESIO server error"),
|
|
106
|
+
502: ("server_error", "bad gateway"),
|
|
107
|
+
503: ("server_error", "service unavailable"),
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def map_http_error(status: int, reason: str = "") -> tuple[str, str, int]:
|
|
112
|
+
code, default_msg = _HTTP_CODES.get(status, ("procesio_api_error", f"HTTP {status}"))
|
|
113
|
+
exit_code = 2 if code == "invalid_argument" else 1
|
|
114
|
+
return code, reason or default_msg, exit_code
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _reason_from_body(details: Any) -> str:
|
|
118
|
+
"""PROCESIO error bodies vary: {"message": ...}, {"error": ...},
|
|
119
|
+
{"errors": {...}}, or an ASP.NET ProblemDetails {"title": ..., "errors": {...}}."""
|
|
120
|
+
if not isinstance(details, dict):
|
|
121
|
+
return ""
|
|
122
|
+
for key in ("message", "error", "error_message", "reason", "title", "detail"):
|
|
123
|
+
val = details.get(key)
|
|
124
|
+
if isinstance(val, str) and val:
|
|
125
|
+
return val
|
|
126
|
+
errs = details.get("errors")
|
|
127
|
+
if isinstance(errs, list) and errs:
|
|
128
|
+
first = errs[0]
|
|
129
|
+
if isinstance(first, str):
|
|
130
|
+
return first
|
|
131
|
+
if isinstance(first, dict):
|
|
132
|
+
return first.get("message") or first.get("error") or ""
|
|
133
|
+
if isinstance(errs, dict):
|
|
134
|
+
for val in errs.values():
|
|
135
|
+
if isinstance(val, list) and val and isinstance(val[0], str):
|
|
136
|
+
return val[0]
|
|
137
|
+
if isinstance(val, str) and val:
|
|
138
|
+
return val
|
|
139
|
+
return ""
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def classify(exc: Exception) -> tuple[str, str, dict, int]:
|
|
143
|
+
if isinstance(exc, AuthError):
|
|
144
|
+
return "auth_required", str(exc), {}, 1
|
|
145
|
+
if isinstance(exc, UsageError):
|
|
146
|
+
return "invalid_argument", str(exc), {}, 2
|
|
147
|
+
if isinstance(exc, ValidationBlocked):
|
|
148
|
+
return "validation_failed", str(exc), exc.report, 2
|
|
149
|
+
if isinstance(exc, NotPersisted):
|
|
150
|
+
return "not_persisted", str(exc), exc.details, 1
|
|
151
|
+
if isinstance(exc, RemovalBlocked):
|
|
152
|
+
return "removal_blocked", str(exc), exc.removed, 2
|
|
153
|
+
if isinstance(exc, DeadlineExceeded):
|
|
154
|
+
return "deadline_exceeded", str(exc), {
|
|
155
|
+
"kind": "deadline",
|
|
156
|
+
"endpoint": exc.path,
|
|
157
|
+
"class": exc.endpoint_class,
|
|
158
|
+
"deadline_s": exc.deadline_s,
|
|
159
|
+
"elapsed_s": round(exc.elapsed_s, 2),
|
|
160
|
+
"outcome": "unknown",
|
|
161
|
+
}, 1
|
|
162
|
+
if isinstance(exc, ProcesioAPIError):
|
|
163
|
+
reason = _reason_from_body(exc.details) or str(exc)
|
|
164
|
+
code, msg, exit_code = map_http_error(exc.status, reason)
|
|
165
|
+
return code, msg, {"status": exc.status, "body": exc.details}, exit_code
|
|
166
|
+
return "error", str(exc) or exc.__class__.__name__, {}, 1
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# flowmodel — offline flow graph reader
|
|
2
|
+
|
|
3
|
+
Parses a PROCESIO flow (a `.procesio` export bundle or a live flow DTO) into a canonical,
|
|
4
|
+
JSON-ready node/edge graph model. Pure, offline, case-insensitive (handles PascalCase
|
|
5
|
+
exports and camelCase live DTOs). Never mutates its input.
|
|
6
|
+
|
|
7
|
+
This is the substrate the canvas layout tool, `inspect-flow`, and audit build on — parse
|
|
8
|
+
once, reuse. The model it produces is documented in `../PROCESIO-RESOURCE-MODEL-NOTES.md` §1.
|
|
9
|
+
|
|
10
|
+
## Use
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
from tools.procesio.flowmodel import read_flow, read_bundle
|
|
14
|
+
|
|
15
|
+
g = read_flow(bundle_or_flow, flow_id=None) # -> FlowGraph (nodes, edges, containers,
|
|
16
|
+
# variables, subprocess_calls, resources,
|
|
17
|
+
# start_id, stop_ids); g.to_dict() for JSON
|
|
18
|
+
rm = read_bundle(bundle) # -> {"flows": {...}, "process_edges": [...]}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
CLI (offline, no profile needed):
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
python -m tools.procesio.main read-flow-graph --in <export.procesio|-> [--flow-id <id>]
|
|
25
|
+
python -m tools.procesio.main read-flow-graph --in <export.procesio> --resource-map
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `--in` accepts a file path, `-` (stdin), or a raw JSON string.
|
|
29
|
+
- `--flow-id` disambiguates a multi-flow bundle.
|
|
30
|
+
- `--resource-map` emits every flow plus the cross-process (process→process) edge list,
|
|
31
|
+
built from each flow's `Call/Trigger Subprocess` targets.
|
|
32
|
+
|
|
33
|
+
## Files
|
|
34
|
+
|
|
35
|
+
- `model.py` — dataclasses: `FlowGraph`, `Node`, `Edge`, `Container`, `VarRef`, `SubprocessCall`.
|
|
36
|
+
- `reader.py` — `read_flow` / `read_bundle` + the case-insensitive getter `_g`.
|
|
37
|
+
- Tests: `../tests/test_flowmodel.py` (synthetic + real exports).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Pure, offline reader: a PROCESIO flow/export → a canonical node/edge graph model.
|
|
2
|
+
|
|
3
|
+
The substrate the canvas layout tool, inspect-flow, and audit build on. See
|
|
4
|
+
tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md §1 for the model it parses.
|
|
5
|
+
"""
|
|
6
|
+
from tools.procesio.flowmodel.model import (
|
|
7
|
+
Container, Edge, FlowGraph, Node, SubprocessCall, VarRef,
|
|
8
|
+
)
|
|
9
|
+
from tools.procesio.flowmodel.reader import read_bundle, read_flow
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"FlowGraph", "Node", "Edge", "Container", "VarRef", "SubprocessCall",
|
|
13
|
+
"read_flow", "read_bundle",
|
|
14
|
+
]
|