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,355 @@
|
|
|
1
|
+
"""ProcesioClient - thin REST wrapper over the PROCESIO Web API.
|
|
2
|
+
|
|
3
|
+
One instance per CLI invocation, bound to a single credential profile. Every
|
|
4
|
+
request is authenticated by tools.procesio.auth (Bearer for userpass profiles,
|
|
5
|
+
key/value/workspaceid headers for apikey profiles). The HTTP session is
|
|
6
|
+
injectable so the whole test suite runs with zero live calls.
|
|
7
|
+
|
|
8
|
+
`request()` is the universal entrypoint - it can reach any of the ~247
|
|
9
|
+
documented endpoints. The curated handlers (processes, instances, ...) are thin
|
|
10
|
+
wrappers over it for ergonomics; they add nothing the generic `request` action
|
|
11
|
+
can't do.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
import time
|
|
17
|
+
from typing import Any
|
|
18
|
+
|
|
19
|
+
from tools.procesio import auth, config, environments, profiles, reliability
|
|
20
|
+
from tools.procesio.errors import DeadlineExceeded, ProcesioAPIError
|
|
21
|
+
|
|
22
|
+
# Query for `GET /api/Projects/{id}` when only the flow's `variables` are needed: the server
|
|
23
|
+
# then skips the actions, canvas and webhook look-up (a ~60 KB flow comes back as ~5 KB) and
|
|
24
|
+
# returns the same `variables` list. A server that predates the parameter ignores it and
|
|
25
|
+
# answers with the whole flow, so this is safe against every environment.
|
|
26
|
+
VARIABLES_ONLY = {"variablesOnly": "true"}
|
|
27
|
+
|
|
28
|
+
_BROWSER_UA = (
|
|
29
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
30
|
+
"(KHTML, like Gecko) Chrome/126.0 Safari/537.36"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _require_session(session):
|
|
35
|
+
if session is not None:
|
|
36
|
+
return session
|
|
37
|
+
import requests # already a project dependency
|
|
38
|
+
|
|
39
|
+
return requests.Session()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ProcesioClient:
|
|
43
|
+
def __init__(self, profile_name: str | None = None, *, session=None,
|
|
44
|
+
profile: dict | None = None, name: str | None = None,
|
|
45
|
+
workspace_id: str | None = None, environment: str | None = None):
|
|
46
|
+
# Allow tests to inject a profile directly; otherwise resolve from store.
|
|
47
|
+
# Copy so folding the environment URLs in never mutates the caller's dict.
|
|
48
|
+
if profile is not None:
|
|
49
|
+
self.name = name or profile_name or "(injected)"
|
|
50
|
+
self.profile = dict(profile)
|
|
51
|
+
else:
|
|
52
|
+
self.name, resolved = profiles.resolve(profile_name)
|
|
53
|
+
self.profile = dict(resolved)
|
|
54
|
+
# Resolve the active environment (explicit flag > credential binding >
|
|
55
|
+
# default env > Internal-PROD) and fold its host URLs into the profile so
|
|
56
|
+
# config.web_base/app_base/forms_base/auth_base pick them up. An explicit
|
|
57
|
+
# per-profile URL override (rare) still wins via setdefault.
|
|
58
|
+
self.env = environments.resolve(environment, self.profile)
|
|
59
|
+
for key in environments.URL_KEYS:
|
|
60
|
+
val = self.env.get(key)
|
|
61
|
+
if val:
|
|
62
|
+
self.profile.setdefault(key, val)
|
|
63
|
+
self._session = _require_session(session)
|
|
64
|
+
# Per-call override of the active-workspace header. Wins over a profile's
|
|
65
|
+
# own workspace_id, and scopes a userpass cookie session to a workspace.
|
|
66
|
+
self.workspace_id = workspace_id
|
|
67
|
+
# Metadata of the last HTTP round-trip (status / elapsed_s / body_len /
|
|
68
|
+
# headers). Lets a handler report on a write whose empty body can lie
|
|
69
|
+
# (put-projects; see O4 in PROCESIO-API-NOTES.md).
|
|
70
|
+
self.last_meta: dict | None = None
|
|
71
|
+
|
|
72
|
+
# -- internals ----------------------------------------------------------
|
|
73
|
+
|
|
74
|
+
@staticmethod
|
|
75
|
+
def _parse_body(resp) -> Any:
|
|
76
|
+
try:
|
|
77
|
+
return resp.json()
|
|
78
|
+
except Exception: # noqa: BLE001
|
|
79
|
+
return {"raw_text": getattr(resp, "text", "")}
|
|
80
|
+
|
|
81
|
+
def _headers(self) -> dict[str, str]:
|
|
82
|
+
base = {"User-Agent": _BROWSER_UA, "Accept": "application/json",
|
|
83
|
+
# REQUIRED by the prod gateway on main routes; omitting -> 401.
|
|
84
|
+
"x-version": config.api_version(self.profile)}
|
|
85
|
+
base.update(auth.auth_headers(self.name, self.profile, self._session))
|
|
86
|
+
if self.workspace_id:
|
|
87
|
+
base["workspaceid"] = self.workspace_id # override / set active WS
|
|
88
|
+
return base
|
|
89
|
+
|
|
90
|
+
def _clear_jar(self) -> None:
|
|
91
|
+
"""Drop any cookies the requests Session accumulated. We authenticate via
|
|
92
|
+
an explicit `Cookie` header (auth_headers); if the Session jar also holds
|
|
93
|
+
a (possibly stale) `__Host-procesio.access`, requests sends BOTH and the
|
|
94
|
+
gateway intermittently rejects the request (401). Keeping the jar empty
|
|
95
|
+
guarantees only our managed cookie is sent."""
|
|
96
|
+
try:
|
|
97
|
+
self._session.cookies.clear()
|
|
98
|
+
except Exception: # noqa: BLE001
|
|
99
|
+
pass
|
|
100
|
+
|
|
101
|
+
@staticmethod
|
|
102
|
+
def _body_len(resp) -> int:
|
|
103
|
+
text = getattr(resp, "text", None)
|
|
104
|
+
if isinstance(text, str):
|
|
105
|
+
return len(text)
|
|
106
|
+
content = getattr(resp, "content", b"") or b""
|
|
107
|
+
return len(content)
|
|
108
|
+
|
|
109
|
+
def _do_http(self, method: str, url: str, params, body,
|
|
110
|
+
read_timeout, deadline_at: float | None,
|
|
111
|
+
extra_headers: dict | None = None) -> tuple[int, Any]:
|
|
112
|
+
"""One HTTP round-trip, under the TOTAL wall-clock deadline. `read_timeout`
|
|
113
|
+
is the per-read inactivity guard handed to requests (None = wait
|
|
114
|
+
indefinitely, for a synchronous run). `deadline_at` is an absolute
|
|
115
|
+
monotonic timestamp (None = exempt); the send runs on a daemon thread so a
|
|
116
|
+
dribbling/held connection cannot outlive it. Records `last_meta`."""
|
|
117
|
+
def _once() -> tuple[int, Any]:
|
|
118
|
+
headers = self._headers()
|
|
119
|
+
if body is not None:
|
|
120
|
+
headers["Content-Type"] = "application/json"
|
|
121
|
+
if extra_headers:
|
|
122
|
+
headers.update({k: str(v) for k, v in extra_headers.items()})
|
|
123
|
+
self._clear_jar()
|
|
124
|
+
t0 = time.monotonic()
|
|
125
|
+
resp = self._session.request(
|
|
126
|
+
method.upper(), url, params=params, json=body,
|
|
127
|
+
headers=headers, timeout=read_timeout,
|
|
128
|
+
)
|
|
129
|
+
status = getattr(resp, "status_code", 0)
|
|
130
|
+
parsed = self._parse_body(resp)
|
|
131
|
+
self.last_meta = {
|
|
132
|
+
"status": status,
|
|
133
|
+
"elapsed_s": round(time.monotonic() - t0, 3),
|
|
134
|
+
"body_len": self._body_len(resp),
|
|
135
|
+
"headers": dict(getattr(resp, "headers", {}) or {}),
|
|
136
|
+
}
|
|
137
|
+
return status, parsed
|
|
138
|
+
|
|
139
|
+
remaining = None if deadline_at is None else deadline_at - time.monotonic()
|
|
140
|
+
return reliability.run_with_deadline(_once, remaining)
|
|
141
|
+
|
|
142
|
+
# Statuses that can mean "your session is no longer good" rather than "you
|
|
143
|
+
# are not allowed". 401 is the obvious one; 403 is NOT — measured against the
|
|
144
|
+
# prod gateway, a rejected access cookie comes back 403 (a MISSING one comes
|
|
145
|
+
# back 401). Treating 403 as final left a stale session raising a permission
|
|
146
|
+
# error that a re-auth would have fixed. The cost of including it is one cheap
|
|
147
|
+
# refresh round-trip on a genuine permission denial, and it is one-shot.
|
|
148
|
+
_REAUTH_STATUSES = frozenset({401, 403})
|
|
149
|
+
|
|
150
|
+
def _send_once(self, method: str, url: str, params, body, read_timeout,
|
|
151
|
+
deadline_at, _retry_on_auth: bool,
|
|
152
|
+
extra_headers: dict | None = None) -> tuple[int, Any]:
|
|
153
|
+
"""A single logical attempt: the HTTP round-trip PLUS the one-shot
|
|
154
|
+
re-authentication for userpass. Retries (GET-only) live one layer up, in
|
|
155
|
+
request()."""
|
|
156
|
+
status, parsed = self._do_http(method, url, params, body, read_timeout,
|
|
157
|
+
deadline_at, extra_headers)
|
|
158
|
+
if (status in self._REAUTH_STATUSES and _retry_on_auth
|
|
159
|
+
and self.profile.get("type") == "userpass"):
|
|
160
|
+
auth.reauthenticate(self.name, self.profile, self._session)
|
|
161
|
+
self._clear_jar()
|
|
162
|
+
return self._send_once(method, url, params, body, read_timeout,
|
|
163
|
+
deadline_at, False, extra_headers)
|
|
164
|
+
return status, parsed
|
|
165
|
+
|
|
166
|
+
# -- universal request --------------------------------------------------
|
|
167
|
+
|
|
168
|
+
def request(self, method: str, path: str, *, query: dict | None = None,
|
|
169
|
+
body: Any = None, _retry_on_auth: bool = True,
|
|
170
|
+
headers: dict | None = None,
|
|
171
|
+
read_timeout=reliability.DEFAULT, deadline=reliability.DEFAULT) -> Any:
|
|
172
|
+
"""Call any Web-API endpoint. `path` starts with '/api/...'. Returns the
|
|
173
|
+
parsed JSON body on 2xx; raises ProcesioAPIError on a non-2xx, or
|
|
174
|
+
DeadlineExceeded if the TOTAL wall-clock deadline elapses.
|
|
175
|
+
|
|
176
|
+
A total deadline (class-aware: reads ~90s, writes ~180s) makes a stalled
|
|
177
|
+
call SURFACE instead of hanging until SIGKILL. GET is retried on transient
|
|
178
|
+
statuses / network errors; POST/PUT/PATCH/DELETE are NEVER retried (an
|
|
179
|
+
execution would double-run; a timed-out write may already have applied).
|
|
180
|
+
run-process passes `deadline=None` (exempt) + its own `read_timeout`.
|
|
181
|
+
|
|
182
|
+
`headers` adds request headers for the endpoints that take an argument
|
|
183
|
+
there rather than in the body or the path - toggle-activation reads the
|
|
184
|
+
target state from a `state` header, and there is no other way to say it.
|
|
185
|
+
"""
|
|
186
|
+
import requests # for its exception types; already a project dependency
|
|
187
|
+
|
|
188
|
+
method_u = method.upper()
|
|
189
|
+
if read_timeout is reliability.DEFAULT:
|
|
190
|
+
read_timeout = reliability.READ_TIMEOUT
|
|
191
|
+
deadline_s = reliability.resolve_deadline(method_u, deadline)
|
|
192
|
+
cls = reliability.endpoint_class(method_u)
|
|
193
|
+
if not path.startswith("/"):
|
|
194
|
+
path = "/" + path
|
|
195
|
+
url = f"{config.web_base(self.profile)}{path}"
|
|
196
|
+
clean = {k: v for k, v in (query or {}).items() if v is not None}
|
|
197
|
+
|
|
198
|
+
start = time.monotonic()
|
|
199
|
+
deadline_at = None if deadline_s is None else start + deadline_s
|
|
200
|
+
attempt = 0
|
|
201
|
+
while True:
|
|
202
|
+
try:
|
|
203
|
+
status, parsed = self._send_once(
|
|
204
|
+
method_u, url, clean, body, read_timeout, deadline_at,
|
|
205
|
+
_retry_on_auth, headers)
|
|
206
|
+
except reliability.DeadlineHit:
|
|
207
|
+
raise DeadlineExceeded(path, cls, deadline_s or 0.0,
|
|
208
|
+
time.monotonic() - start)
|
|
209
|
+
except (requests.exceptions.ConnectionError,
|
|
210
|
+
requests.exceptions.Timeout) as exc:
|
|
211
|
+
if reliability.network_error_retryable(method_u, attempt) \
|
|
212
|
+
and self._budget_ok(deadline_at):
|
|
213
|
+
attempt += 1
|
|
214
|
+
self._backoff(attempt, None, deadline_at,
|
|
215
|
+
f"{method_u} {path}: {exc.__class__.__name__}")
|
|
216
|
+
continue
|
|
217
|
+
raise
|
|
218
|
+
if 200 <= status < 300:
|
|
219
|
+
return parsed
|
|
220
|
+
if reliability.is_retryable(method_u, status, attempt) \
|
|
221
|
+
and self._budget_ok(deadline_at):
|
|
222
|
+
attempt += 1
|
|
223
|
+
retry_after = reliability.parse_retry_after(
|
|
224
|
+
(self.last_meta or {}).get("headers")) if status == 429 else None
|
|
225
|
+
self._backoff(attempt, retry_after, deadline_at,
|
|
226
|
+
f"{method_u} {path}: HTTP {status}")
|
|
227
|
+
continue
|
|
228
|
+
details = parsed if isinstance(parsed, dict) else {"body": parsed}
|
|
229
|
+
raise ProcesioAPIError(int(status or 0), f"HTTP {status}", details)
|
|
230
|
+
|
|
231
|
+
@staticmethod
|
|
232
|
+
def _budget_ok(deadline_at: float | None) -> bool:
|
|
233
|
+
"""Is there enough wall-clock left to justify another attempt? A retry that
|
|
234
|
+
cannot fit inside the total deadline is pointless — fail now with the real
|
|
235
|
+
status instead of after a doomed backoff."""
|
|
236
|
+
if deadline_at is None:
|
|
237
|
+
return True
|
|
238
|
+
return (deadline_at - time.monotonic()) > 0.5
|
|
239
|
+
|
|
240
|
+
def _backoff(self, attempt: int, retry_after, deadline_at, why: str) -> None:
|
|
241
|
+
wait = retry_after if retry_after is not None else reliability.full_jitter(attempt)
|
|
242
|
+
if deadline_at is not None:
|
|
243
|
+
wait = min(wait, max(0.0, deadline_at - time.monotonic()))
|
|
244
|
+
from tools._lib.io import log
|
|
245
|
+
log(f"procesio: retry {attempt} in {wait:.2f}s ({why})")
|
|
246
|
+
time.sleep(wait)
|
|
247
|
+
|
|
248
|
+
# -- verb helpers -------------------------------------------------------
|
|
249
|
+
|
|
250
|
+
def get(self, path, query=None, **kw):
|
|
251
|
+
return self.request("GET", path, query=query, **kw)
|
|
252
|
+
|
|
253
|
+
def post(self, path, body=None, query=None, **kw):
|
|
254
|
+
return self.request("POST", path, query=query, body=body, **kw)
|
|
255
|
+
|
|
256
|
+
def put(self, path, body=None, query=None, **kw):
|
|
257
|
+
return self.request("PUT", path, query=query, body=body, **kw)
|
|
258
|
+
|
|
259
|
+
def patch(self, path, body=None, query=None, **kw):
|
|
260
|
+
return self.request("PATCH", path, query=query, body=body, **kw)
|
|
261
|
+
|
|
262
|
+
def delete(self, path, query=None, **kw):
|
|
263
|
+
return self.request("DELETE", path, query=query, **kw)
|
|
264
|
+
|
|
265
|
+
def request_bytes(self, method: str, path: str, *, query: dict | None = None,
|
|
266
|
+
body: Any = None, headers: dict | None = None) -> tuple[int, bytes, dict]:
|
|
267
|
+
"""Like request() but returns (status, raw_bytes, headers) without JSON
|
|
268
|
+
parsing — for binary/file responses such as the Transport `.procesio`
|
|
269
|
+
export (application/octet-stream) or the flow-instance file download
|
|
270
|
+
(identified by extra request HEADERS passed via `headers=`)."""
|
|
271
|
+
if not path.startswith("/"):
|
|
272
|
+
path = "/" + path
|
|
273
|
+
url = f"{config.web_base(self.profile)}{path}"
|
|
274
|
+
clean = {k: v for k, v in (query or {}).items() if v is not None}
|
|
275
|
+
hdrs = self._headers()
|
|
276
|
+
if body is not None:
|
|
277
|
+
hdrs["Content-Type"] = "application/json"
|
|
278
|
+
if headers:
|
|
279
|
+
hdrs.update({k: v for k, v in headers.items() if v is not None})
|
|
280
|
+
self._clear_jar()
|
|
281
|
+
resp = self._session.request(method.upper(), url, params=clean, json=body,
|
|
282
|
+
headers=hdrs, timeout=120)
|
|
283
|
+
return (getattr(resp, "status_code", 0),
|
|
284
|
+
getattr(resp, "content", b""),
|
|
285
|
+
dict(getattr(resp, "headers", {}) or {}))
|
|
286
|
+
|
|
287
|
+
def request_multipart(self, path: str, *, files: dict, query: dict | None = None,
|
|
288
|
+
headers: dict | None = None, _retry_on_auth: bool = True) -> Any:
|
|
289
|
+
"""POST a multipart/form-data body (e.g. a custom-action `.nupkg` package
|
|
290
|
+
upload). `files` is requests' `files=` dict
|
|
291
|
+
`{field: (filename, bytes, content_type)}`. Content-Type is left UNSET so
|
|
292
|
+
requests writes the multipart boundary itself. Returns parsed JSON on 2xx."""
|
|
293
|
+
if not path.startswith("/"):
|
|
294
|
+
path = "/" + path
|
|
295
|
+
url = f"{config.web_base(self.profile)}{path}"
|
|
296
|
+
clean = {k: v for k, v in (query or {}).items() if v is not None}
|
|
297
|
+
hdrs = self._headers() # NO Content-Type -> requests sets multipart
|
|
298
|
+
if headers:
|
|
299
|
+
hdrs.update({k: v for k, v in headers.items() if v is not None})
|
|
300
|
+
self._clear_jar()
|
|
301
|
+
resp = self._session.request("POST", url, params=clean, files=files,
|
|
302
|
+
headers=hdrs, timeout=300)
|
|
303
|
+
status = getattr(resp, "status_code", 0)
|
|
304
|
+
parsed = self._parse_body(resp)
|
|
305
|
+
if 200 <= status < 300:
|
|
306
|
+
return parsed
|
|
307
|
+
if (status in self._REAUTH_STATUSES and _retry_on_auth
|
|
308
|
+
and self.profile.get("type") == "userpass"):
|
|
309
|
+
auth.reauthenticate(self.name, self.profile, self._session)
|
|
310
|
+
self._clear_jar()
|
|
311
|
+
return self.request_multipart(path, files=files, query=query,
|
|
312
|
+
headers=headers, _retry_on_auth=False)
|
|
313
|
+
details = parsed if isinstance(parsed, dict) else {"body": parsed}
|
|
314
|
+
raise ProcesioAPIError(int(status or 0), f"HTTP {status}", details)
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def parse_json_arg(raw: str | None, what: str) -> Any:
|
|
318
|
+
"""Parse a --query/--body/--payload JSON argument from the CLI.
|
|
319
|
+
|
|
320
|
+
Accepts either JSON inline, or ``@path`` to read the JSON from a file.
|
|
321
|
+
|
|
322
|
+
⚠ WHY ``@path`` EXISTS, AND IT IS NOT A CONVENIENCE. Windows caps a command
|
|
323
|
+
line at roughly 32 KB. A real PROCESIO flow definition is larger than that:
|
|
324
|
+
the UC-7 detection flow's captured definition is ~37 KB, and the E-2 gateway
|
|
325
|
+
flows are comparable. So passing one inline raises
|
|
326
|
+
|
|
327
|
+
FileNotFoundError: [WinError 206] The filename or extension is too long
|
|
328
|
+
|
|
329
|
+
before the tool is even started, which means **this tool could not write a
|
|
330
|
+
real process definition at all** - and a definition write is exactly what a
|
|
331
|
+
rollback restore and an engine deployment both are. Found by E-13 A2 while
|
|
332
|
+
trying to restore a duplicated gateway process.
|
|
333
|
+
|
|
334
|
+
The ``@path`` convention is the one `tools/_lib/_atlassian_cli.py` already
|
|
335
|
+
uses, so this is the framework's existing spelling rather than a new one.
|
|
336
|
+
"""
|
|
337
|
+
if raw is None or raw == "":
|
|
338
|
+
return None
|
|
339
|
+
if isinstance(raw, str) and raw.startswith("@"):
|
|
340
|
+
from pathlib import Path as _Path
|
|
341
|
+
|
|
342
|
+
from tools.procesio.errors import UsageError
|
|
343
|
+
|
|
344
|
+
p = _Path(raw[1:])
|
|
345
|
+
if not p.is_file():
|
|
346
|
+
raise UsageError(f"--{what} points at {p}, which is not a file")
|
|
347
|
+
raw = p.read_text(encoding="utf-8")
|
|
348
|
+
if not raw.strip():
|
|
349
|
+
return None
|
|
350
|
+
try:
|
|
351
|
+
return json.loads(raw)
|
|
352
|
+
except json.JSONDecodeError as e:
|
|
353
|
+
from tools.procesio.errors import UsageError
|
|
354
|
+
|
|
355
|
+
raise UsageError(f"--{what} must be valid JSON: {e}") from e
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""PROCESIO base URLs + auth constants.
|
|
2
|
+
|
|
3
|
+
PROCESIO splits into two services:
|
|
4
|
+
* the **Web API** (process/instance/workspace/etc CRUD) - default
|
|
5
|
+
https://webapi.procesio.app . This host is reachable with a valid
|
|
6
|
+
DigiCert cert and serves the v1.19 Swagger.
|
|
7
|
+
* the **Proxy API / Authentication Service** (username+password login,
|
|
8
|
+
refreshToken, password change) - documented at https://auth.procesio.app .
|
|
9
|
+
|
|
10
|
+
Both hosts are CONFIGURABLE so the tool survives PROCESIO's infra moving
|
|
11
|
+
(e.g. auth.procesio.app currently fronts a Kong gateway whose default cert is
|
|
12
|
+
served for that SNI from some networks). Precedence, highest first:
|
|
13
|
+
1. the profile's own "web_base" / "auth_base" field,
|
|
14
|
+
2. the PROCESIO_WEB_BASE / PROCESIO_AUTH_BASE environment variables,
|
|
15
|
+
3. the documented defaults below.
|
|
16
|
+
|
|
17
|
+
Login parameters (realm / client_id) come from PROCESIO's developer docs
|
|
18
|
+
(https://docs.procesio.com/developers-guide/procesio-api-documentation):
|
|
19
|
+
all users live in realm "procesio01"; the UI client_id is "procesio-ui";
|
|
20
|
+
client_secret is empty.
|
|
21
|
+
"""
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import os
|
|
25
|
+
|
|
26
|
+
DEFAULT_WEB_BASE = "https://webapi.procesio.app"
|
|
27
|
+
DEFAULT_AUTH_BASE = "https://auth.procesio.app"
|
|
28
|
+
# The designer / front-end host (distinct from the Web API host): designer URLs and
|
|
29
|
+
# the CORS Origin/Referer sent on login. The forms host renders public forms.
|
|
30
|
+
DEFAULT_APP_BASE = "https://procesio.app"
|
|
31
|
+
DEFAULT_FORMS_BASE = "https://forms.procesio.app"
|
|
32
|
+
DEFAULT_REALM = "procesio01"
|
|
33
|
+
DEFAULT_CLIENT_ID = "procesio-ui"
|
|
34
|
+
# The gateway selects the API contract via the `x-version` request header. In
|
|
35
|
+
# production it is REQUIRED on the main-gateway routes (DataTypes/Projects/
|
|
36
|
+
# Actions/...): omitting it returns 401 (the documented
|
|
37
|
+
# AssumeDefaultVersionWhenUnspecified is NOT in effect in prod). Send it on
|
|
38
|
+
# every call. Overridable per-profile ("api_version") or via env.
|
|
39
|
+
DEFAULT_API_VERSION = "1.19"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def web_base(profile: dict | None = None) -> str:
|
|
43
|
+
profile = profile or {}
|
|
44
|
+
return (
|
|
45
|
+
profile.get("web_base")
|
|
46
|
+
or os.environ.get("PROCESIO_WEB_BASE")
|
|
47
|
+
or DEFAULT_WEB_BASE
|
|
48
|
+
).rstrip("/")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def auth_base(profile: dict | None = None) -> str:
|
|
52
|
+
profile = profile or {}
|
|
53
|
+
return (
|
|
54
|
+
profile.get("auth_base")
|
|
55
|
+
or os.environ.get("PROCESIO_AUTH_BASE")
|
|
56
|
+
or DEFAULT_AUTH_BASE
|
|
57
|
+
).rstrip("/")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def app_base(profile: dict | None = None) -> str:
|
|
61
|
+
"""The designer / front-end host. Sourced (like web_base) from the active
|
|
62
|
+
environment via the profile the client injects it into; overridable per-profile
|
|
63
|
+
or via PROCESIO_APP_BASE, else the production default."""
|
|
64
|
+
profile = profile or {}
|
|
65
|
+
return (
|
|
66
|
+
profile.get("app_base")
|
|
67
|
+
or os.environ.get("PROCESIO_APP_BASE")
|
|
68
|
+
or DEFAULT_APP_BASE
|
|
69
|
+
).rstrip("/")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def forms_base(profile: dict | None = None) -> str:
|
|
73
|
+
"""The public forms host (rendered-form URLs). Same precedence as app_base."""
|
|
74
|
+
profile = profile or {}
|
|
75
|
+
return (
|
|
76
|
+
profile.get("forms_base")
|
|
77
|
+
or os.environ.get("PROCESIO_FORMS_BASE")
|
|
78
|
+
or DEFAULT_FORMS_BASE
|
|
79
|
+
).rstrip("/")
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def realm(profile: dict | None = None) -> str:
|
|
83
|
+
return (profile or {}).get("realm") or DEFAULT_REALM
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def client_id(profile: dict | None = None) -> str:
|
|
87
|
+
return (profile or {}).get("client_id") or DEFAULT_CLIENT_ID
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def api_version(profile: dict | None = None) -> str:
|
|
91
|
+
profile = profile or {}
|
|
92
|
+
return (
|
|
93
|
+
profile.get("api_version")
|
|
94
|
+
or os.environ.get("PROCESIO_API_VERSION")
|
|
95
|
+
or DEFAULT_API_VERSION
|
|
96
|
+
)
|