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,179 @@
|
|
|
1
|
+
# PROCESIO C# Custom Actions — packaging, whitelist, and the file channel
|
|
2
|
+
|
|
3
|
+
What the platform documents about the **C# Custom Action** (`.nupkg` upload), and how
|
|
4
|
+
that compares with the scripting actions. Everything below is **vendor-documented**,
|
|
5
|
+
read from `docs.procesio.com/llms-full.txt`, and is labelled as such: none of it has
|
|
6
|
+
been executed against a live instance from this framework. Read
|
|
7
|
+
[`PROCESIO-NODE-MODULE-WHITELIST.md`](PROCESIO-NODE-MODULE-WHITELIST.md) for the
|
|
8
|
+
sandbox facts that **were** probed live.
|
|
9
|
+
|
|
10
|
+
## The build contract
|
|
11
|
+
|
|
12
|
+
- **C# only**, class library, implementing `IAction` from `Ringhel.Procesio.Action.Core`
|
|
13
|
+
with `ClassDecorator` / `FEDecorator` / `BEDecorator` / `Validator` attributes.
|
|
14
|
+
- **Target framework (changed in v3.0.0, 2026-10).** The hosts run on **net10.0**. Target
|
|
15
|
+
`net10.0` for a new build (preferred), or multi-target
|
|
16
|
+
`<TargetFrameworks>net8.0;net10.0</TargetFrameworks>`; a `net8.0` package still loads. The
|
|
17
|
+
public docs still say .NET Core 3.1 / net6.0 in places, which is stale, and the earlier advice
|
|
18
|
+
here ("target net6.0, keep 3.1 as the fallback") is withdrawn: Action-Core 2.x ships only
|
|
19
|
+
`net8.0;net10.0`, so there is no net6 build of the core package to compile against. Upload
|
|
20
|
+
runs server-side validations, so a wrong target fails late, at upload, not at build. See
|
|
21
|
+
"Runtime, loader and upload (v3.0.0)" below.
|
|
22
|
+
- The core package comes from a **GitHub Packages feed** and needs a GitHub PAT with
|
|
23
|
+
`read:packages`. It is not on nuget.org.
|
|
24
|
+
- The `.csproj` must set `CopyLocalLockFileAssemblies`, `GeneratePackageOnBuild` and an
|
|
25
|
+
`IncludeDepsInPackage` target, because **dependencies ship inside the `.nupkg`**.
|
|
26
|
+
|
|
27
|
+
## Runtime, loader and upload (v3.0.0, 2026-10)
|
|
28
|
+
|
|
29
|
+
Unlike the rest of this note, this section comes from the platform's own v3.0.0 release
|
|
30
|
+
(Action-Core 2.0 / 2.1, Action-Execution v3, Test-Action v2, the Web-Api upload validator), not
|
|
31
|
+
from the public docs.
|
|
32
|
+
|
|
33
|
+
- **Which lib folder loads.** Action-Execution v3 loads the package's `lib/<tfm>` folder closest
|
|
34
|
+
to the host at or below net10.0, so net8, net6 and netstandard packages still load. (Before, it
|
|
35
|
+
probed only netcoreapp3.1 / net6 / net8 and loaded nothing from a net10-only package.)
|
|
36
|
+
Assemblies the host already holds (Action-Core, Newtonsoft.Json) are skipped, so a package
|
|
37
|
+
built against Action-Core 1.x binds to the host's 2.1 at run time.
|
|
38
|
+
- **Multi-targeting passes upload.** The validator reads only the lib folder the host would
|
|
39
|
+
load, so a `net8.0;net10.0` package no longer fails with `MULTIPLE_ACTIONS`. The whitelist,
|
|
40
|
+
the blacklist and the codes are unchanged: `MULTIPLE_ACTIONS`, `FORBIDDEN_NAMESPACE`,
|
|
41
|
+
`FORBIDDEN_ASSEMBLY`, `INVALID_NUGET_PACKAGE`.
|
|
42
|
+
- **The one breaking change (Action-Core 2.1):** `AiCredentialsManager`,
|
|
43
|
+
`AiCredentialsConfiguration` and `StructuredOutputMode` moved from namespace
|
|
44
|
+
`...Models.Credentials.API` to `...Models.Credentials.AI_API`. A package compiled against 2.1
|
|
45
|
+
must use the new namespace; a 1.x package that uses the AI credential types may fail to bind
|
|
46
|
+
on a 2.1 host, so rebuild it. The REST and DB credential types did not move.
|
|
47
|
+
- **Additive in Action-Core 2.x:** `FeComponentType.Auto = 102`, `FeTextFormat.DATASTORE = 8`,
|
|
48
|
+
and the Azure Storage credential models (`AzureStorageCredentialsManager`,
|
|
49
|
+
`IAzureStorageClient`, `AzureStorageAuthenticationType`). Newtonsoft.Json is 13.0.4.
|
|
50
|
+
- **The NuGet store is switchable per environment** (`ActiveNugetStore` = `None` /
|
|
51
|
+
`CodeArtifact` / `GitHub`). With `None`, upload and delete fail with `statusCode` 1013
|
|
52
|
+
(`FEATURE_DISABLED`), value "This feature is disabled on this environment.", target
|
|
53
|
+
`Action Library`; custom-action lists come back empty and the front end hides the feature. So
|
|
54
|
+
an empty custom-action list is not proof that nothing was uploaded: an upload answering 1013
|
|
55
|
+
means the environment has no store. Action-Execution downloads each package from the store
|
|
56
|
+
path recorded on its own template.
|
|
57
|
+
- **Upload and delete stamp `UpdatedOn` / `UpdatedById`** on the action template.
|
|
58
|
+
- **`Credentials_Rest` uploads no longer fail with `TEMPLATE_ERROR`.** A credential type now
|
|
59
|
+
resolves to its ROOT template. Before v3.0.0 a derived template that kept its parent's `Type`
|
|
60
|
+
(the REST API / Prelude template, for one) made every upload whose action had a
|
|
61
|
+
`Credentials_Rest` property fail with `TEMPLATE_ERROR`.
|
|
62
|
+
- **Test-Action v2** is .NET 10 only, with no API change: `/api/Actions/test` and
|
|
63
|
+
`/api/Credentials/test` are unchanged.
|
|
64
|
+
|
|
65
|
+
## Lifecycle — plan for it, it is unusually rigid
|
|
66
|
+
|
|
67
|
+
- **A Custom Action cannot be updated in place.** The only route is a new package version
|
|
68
|
+
and a fresh create.
|
|
69
|
+
- **It cannot be deleted once used in at least one process.** Deletion is guaranteed only
|
|
70
|
+
while the action has never been placed on a canvas. **Anything that promises to clean up
|
|
71
|
+
after itself must either never drag the action onto a process, or exercise it through the
|
|
72
|
+
action's own test area** (`IsTestable = true` opens one), or the cleanup fails by design.
|
|
73
|
+
|
|
74
|
+
## The dependency whitelist — two lists, and the second is the sharp one
|
|
75
|
+
|
|
76
|
+
"Other libraries that are not offered by Microsoft need to be whitelisted with us." The
|
|
77
|
+
docs publish both lists as a JSON configuration block.
|
|
78
|
+
|
|
79
|
+
**Packages:** `Ringhel.Procesio.Action.Core`, `Newtonsoft.Json`, `JetBrains.Annotations`,
|
|
80
|
+
`SimMetrics.Net`, `CsvHelper`, `DocumentFormat`, `DocumentFormat.OpenXml`,
|
|
81
|
+
`DocumentFormat.OpenXml.Packaging`, `DocumentFormat.OpenXml.Spreadsheet`, `Ical.Net`.
|
|
82
|
+
|
|
83
|
+
**Namespaces:** the packages above plus `System.Runtime`, `System.Linq`,
|
|
84
|
+
`System.Threading.Tasks`, `System.Collections`, `System.Private.CoreLib`,
|
|
85
|
+
`System.Private.Uri`, `corlib`, `System.Text.RegularExpression`,
|
|
86
|
+
`System.Diagnostics.Debug`, `System.ComponentModel`, `System.Data`, `System.Console`,
|
|
87
|
+
and five `System.Net.*` entries.
|
|
88
|
+
|
|
89
|
+
Four things fall out, and they decide designs:
|
|
90
|
+
|
|
91
|
+
1. **The package list allows OpenXml; the namespace list only names `.Packaging` and
|
|
92
|
+
`.Spreadsheet`.** `DocumentFormat.OpenXml.Wordprocessing` (a DOCX body) and
|
|
93
|
+
`DocumentFormat.OpenXml.Presentation` (a PPTX) are **absent**. So the documented
|
|
94
|
+
capability is **XLSX-shaped**, and the common assumption that one library buys three
|
|
95
|
+
formats does not survive the namespace list. Untested; treat DOCX and PPTX in C# as
|
|
96
|
+
unproven until someone runs it.
|
|
97
|
+
2. **`System.IO` is absent** while the core assemblies are present. The file example in
|
|
98
|
+
the same docs uses a `Stream`. Read that as **streams yes, file system unstated** —
|
|
99
|
+
and do not design against a temp path without measuring first.
|
|
100
|
+
3. **Also absent**: `System.Net.Http`, `System.Security.Cryptography`, `System.Text.Json`,
|
|
101
|
+
`System.IO.Compression`. No PDF library of any kind appears, so **PDF inside a Custom
|
|
102
|
+
Action is a vendor request**, while PDF text extraction is available with no gate at all
|
|
103
|
+
through the native action and the Python action.
|
|
104
|
+
4. **The published list contains two misspellings**, `WhitelistNamesapaces` and
|
|
105
|
+
`System.Text.RegularExpression` in the singular. If namespaces are matched literally,
|
|
106
|
+
`System.Text.RegularExpressions` is not whitelisted. A typo inside an allowlist is
|
|
107
|
+
load-bearing; verify before relying on regex.
|
|
108
|
+
|
|
109
|
+
The whitelist is published **as a configuration block**, which is a deployment-owned
|
|
110
|
+
artefact. Whether a self-hosted operator can edit it, and therefore whether the dependency
|
|
111
|
+
constraint is topology-dependent, **is not documented**. Ask before promising a customer a
|
|
112
|
+
library that is not on the list.
|
|
113
|
+
|
|
114
|
+
## How a file reaches a Custom Action — a stream, never a path
|
|
115
|
+
|
|
116
|
+
```csharp
|
|
117
|
+
IEnumerable<FileModel> FileList { get; set; } // or a single FileModel
|
|
118
|
+
|
|
119
|
+
foreach (var file in FileList)
|
|
120
|
+
{
|
|
121
|
+
_ = file.Name; // string
|
|
122
|
+
_ = file.File; // Stream — the content
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`FileModel` has exactly two properties, `Name` and `File`. The front end binds it with
|
|
127
|
+
`[FEDecorator(Type = FeComponentType.File)]` against a file-typed process variable.
|
|
128
|
+
**Nothing in the documentation states that a Custom Action has a file system**, in either
|
|
129
|
+
direction, and nothing states whether anything written during one invocation survives into
|
|
130
|
+
the next. Both are open questions, and the second one is the expensive one: a per-run
|
|
131
|
+
filesystem and no filesystem look identical in the docs and behave very differently across
|
|
132
|
+
an async split.
|
|
133
|
+
|
|
134
|
+
## The scripting actions, for comparison
|
|
135
|
+
|
|
136
|
+
Four exist, and they are not one sandbox with four languages.
|
|
137
|
+
|
|
138
|
+
| Action | Libraries | File position |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| **Javascript** | none ("no access to specific libraries") | — |
|
|
141
|
+
| **Node** | a fixed list of **24**, no additions | docs state plainly it "does not support working with files" |
|
|
142
|
+
| **Python** | 9 preinstalled, including **pdfplumber**, **PyPDF2**, **pandas**, **spacy**, **pillow** | "Files cannot be added in Python script", then the base64 bridge below |
|
|
143
|
+
| **Ruby** | 9 gems, none document-related | — |
|
|
144
|
+
|
|
145
|
+
**The platform's documented file channel for a script is base64 through process
|
|
146
|
+
variables**, not a file system: `File to BASE64` turns a File variable into a string, the
|
|
147
|
+
script works on the string, and `Base64 to File` turns the result back into a File. Use
|
|
148
|
+
that bridge rather than looking for a path.
|
|
149
|
+
|
|
150
|
+
## Before building a Custom Action, check the catalogue
|
|
151
|
+
|
|
152
|
+
A large amount of file work needs no custom code, no upload and no whitelisting request:
|
|
153
|
+
|
|
154
|
+
- **PDF**: Extract Text (returns concatenated text **plus** per-word JSON with position and
|
|
155
|
+
font), Extract Embedded Files, Area Mapper, Merge Files, Select/Remove pages,
|
|
156
|
+
Acroform Insert Image.
|
|
157
|
+
- **Excel**: Create Workbook, Split Workbook, XLS To XLSX, Insert/Rename/Delete Sheet,
|
|
158
|
+
Get Sheet Names, Read Range, Read Range from CSV, Copy Paste, Apply Formula,
|
|
159
|
+
Get Named Range, Get Last Used Row.
|
|
160
|
+
- **Documents**: Generate Document (from a Document Designer template), HTML to PDF,
|
|
161
|
+
DOCX to PDF, DOCX to HTML, Word Mail Merge, Export to CSV/XLSX, Write (list) to file,
|
|
162
|
+
Read file, File to Base64, plus an Archive sub-folder for compress and decompress.
|
|
163
|
+
|
|
164
|
+
**Rule of thumb: catalogue action first, then Python action, then Node, then a Custom
|
|
165
|
+
Action.** The order tracks cost — the first three need no upload, no versioning ritual, no
|
|
166
|
+
GitHub PAT and no vendor whitelisting request, and only the Custom Action carries a
|
|
167
|
+
lifecycle you cannot undo.
|
|
168
|
+
|
|
169
|
+
## Documented size limits — and which ones do not apply
|
|
170
|
+
|
|
171
|
+
| Limit | Applies to |
|
|
172
|
+
|---|---|
|
|
173
|
+
| 100 MB | FTP/sFTP **Download File** |
|
|
174
|
+
| 1 GB | FTP/sFTP **Upload File** |
|
|
175
|
+
| 500 MB (default `maxfilesize`) | form **File Upload** element |
|
|
176
|
+
|
|
177
|
+
**None of these binds a Custom Action.** No size limit, timeout, memory limit or
|
|
178
|
+
concurrency statement is documented for Custom Actions at all. Measure before quoting a
|
|
179
|
+
figure to anyone.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# PROCESIO API docs — corrections needed
|
|
2
|
+
|
|
3
|
+
Audience: the PROCESIO docs/dev team.
|
|
4
|
+
Source of truth: a real login HAR from `procesio.app` + live calls against
|
|
5
|
+
`webapi.procesio.app` (2026-06-23). Target page:
|
|
6
|
+
`https://docs.procesio.com/developers-guide/procesio-api-documentation`.
|
|
7
|
+
|
|
8
|
+
The **username/password authentication** chapter is materially out of date — it
|
|
9
|
+
documents an OAuth/Bearer flow on a host that no longer serves it. The API-key /
|
|
10
|
+
run-a-process chapter is mostly correct. Details below.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. Authentication host moved: `auth.procesio.app` → `webapi.procesio.app`
|
|
15
|
+
|
|
16
|
+
**Docs say:** *"Use the Proxy API `https://auth.procesio.app/swagger/index.html`
|
|
17
|
+
to reach the Authentication Service … POST `/api/Authentication`."*
|
|
18
|
+
|
|
19
|
+
**Reality:** login happens on the Web API host. `auth.procesio.app` now answers
|
|
20
|
+
with Kong's **default self-signed certificate** (`CN=localhost, O=Kong`) and
|
|
21
|
+
returns `{"message":"no Route matched"}` for `/api/Authentication` and
|
|
22
|
+
`/swagger/index.html`. Any integrator following the docs hits a TLS/404 wall.
|
|
23
|
+
|
|
24
|
+
**Fix:** point the auth chapter at `https://webapi.procesio.app`, and remove (or
|
|
25
|
+
repoint) the dead `auth.procesio.app/swagger/index.html` link.
|
|
26
|
+
|
|
27
|
+
## 2. Login request shape is wrong (JSON+OAuth → form + `x-requested-by`)
|
|
28
|
+
|
|
29
|
+
**Docs say:** `POST /api/Authentication` with a JSON body
|
|
30
|
+
`{realm:"procesio01", grant_type:"password", username, password,
|
|
31
|
+
client_id:"procesio-ui", client_secret:""}`.
|
|
32
|
+
|
|
33
|
+
**Reality (from the HAR):**
|
|
34
|
+
|
|
35
|
+
```http
|
|
36
|
+
POST https://webapi.procesio.app/api/authentication
|
|
37
|
+
Content-Type: application/x-www-form-urlencoded
|
|
38
|
+
x-requested-by: playground-v1
|
|
39
|
+
|
|
40
|
+
username=<user>&password=<pass>&client_id=procesio-ui
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Differences to correct:
|
|
44
|
+
- **Content type is `application/x-www-form-urlencoded`**, not JSON.
|
|
45
|
+
- Body fields are only **`username`, `password`, `client_id`**. `realm`,
|
|
46
|
+
`grant_type`, and `client_secret` are **not used** — drop them from the docs.
|
|
47
|
+
- A **`x-requested-by`** request header is **required**. Without it the gateway
|
|
48
|
+
returns **`407`**. (The web app sends `x-requested-by: playground-v1`.) This
|
|
49
|
+
header is currently undocumented and is the single most common reason an
|
|
50
|
+
integration "mysteriously" fails to authenticate.
|
|
51
|
+
- Path casing in production is lowercase `/api/authentication` (ASP.NET is
|
|
52
|
+
case-insensitive, so both resolve, but the docs/Swagger differ — align them).
|
|
53
|
+
|
|
54
|
+
## 3. Token delivery: Bearer JWT → HttpOnly cookie session
|
|
55
|
+
|
|
56
|
+
**Docs say:** *"you will receive an access token in the response which you will
|
|
57
|
+
be able to use to access the Web API"* and a **"Bearer Authentication"** section
|
|
58
|
+
(Authorize with `Bearer {token}`).
|
|
59
|
+
|
|
60
|
+
**Reality:** the `200` response body contains **no token** — it is literally
|
|
61
|
+
`{"message":"Authentication successful"}`. Authentication is delivered as **two
|
|
62
|
+
HttpOnly cookies**:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Set-Cookie: __Host-procesio.access (HttpOnly, Secure, Path=/)
|
|
66
|
+
Set-Cookie: __Host-procesio.refresh (HttpOnly, Secure, Path=/)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Subsequent Web-API calls authenticate by **sending those cookies** (the SPA uses
|
|
70
|
+
`fetch(..., {credentials:"include"})`; the server replies with
|
|
71
|
+
`Access-Control-Allow-Credentials: true`) plus the same `x-requested-by` header.
|
|
72
|
+
Lifetimes come from the cookies' own `Expires` attribute — observed
|
|
73
|
+
**~24 h for `.access`** and a longer window for `.refresh` (values were 961 and
|
|
74
|
+
733 bytes, i.e. JWTs). The `x-session-expires-at` header is declared in
|
|
75
|
+
`Access-Control-Expose-Headers` but was **empty** in the login response we
|
|
76
|
+
captured — either populate it consistently or remove it from the contract.
|
|
77
|
+
|
|
78
|
+
**Fix:** replace the "access token + Bearer {token}" narrative for the
|
|
79
|
+
username/password flow with a **cookie-session** description:
|
|
80
|
+
- list the two `__Host-procesio.*` cookies and that they are HttpOnly/Secure,
|
|
81
|
+
- state that callers must send cookies (`credentials: include`) + `x-requested-by`,
|
|
82
|
+
- document `x-session-expires-at` and the refresh mechanism (what calls the
|
|
83
|
+
refresh cookie, and the refresh endpoint, if any),
|
|
84
|
+
- if `Authorization: Bearer` is still accepted by the Web API for
|
|
85
|
+
machine-to-machine use, document **how to obtain that token now** (the login
|
|
86
|
+
no longer returns one); otherwise remove the Bearer section for this flow.
|
|
87
|
+
|
|
88
|
+
## 4. API-key auth — mostly correct, two clarifications
|
|
89
|
+
|
|
90
|
+
The run-a-process chapter correctly lists the three headers `key` (key name),
|
|
91
|
+
`value` (key value), `workspaceid` (workspace GUID) on
|
|
92
|
+
`POST https://webapi.procesio.app/api/projects/{id}/run` with body
|
|
93
|
+
`{"payload":{}, "connectionid":null}`. Confirmed working live. Two additions:
|
|
94
|
+
|
|
95
|
+
- **State that `workspaceid` is required for workspace-scoped keys.** Live: a
|
|
96
|
+
workspace-scoped key returns **`401`** with no `workspaceid`; supplying the
|
|
97
|
+
correct workspace GUID returns `200`. (A master/personal key happens to work
|
|
98
|
+
without one.) This isn't obvious and bites integrators.
|
|
99
|
+
- The Swagger security schemes name these headers `KeyName`→`key` and
|
|
100
|
+
`KeyValue`→`value`. Make sure the prose and Swagger use the same names
|
|
101
|
+
(`key`/`value`, not `api_key`).
|
|
102
|
+
|
|
103
|
+
## 5. Minor path/casing alignments
|
|
104
|
+
|
|
105
|
+
- Process **list** is `GET /api/Projects`; **run** is `POST /api/Projects/{id}/run`
|
|
106
|
+
(capital `P`; the run endpoint also accepts `runSynchronous` &
|
|
107
|
+
`secondsTimeOut` query params). The "ProcessTemplate" tag maps to the
|
|
108
|
+
`/api/Projects` path — worth a note so readers don't look for `/api/ProcessTemplate`.
|
|
109
|
+
- Workspace **list** is `GET /api/Workspaces` (plural). `GET /api/Workspace`
|
|
110
|
+
(singular) is not a route → 401/404. Align docs/examples to the plural form.
|
|
111
|
+
- The `webapi.procesio.app` v1.19 Swagger is accurate and reachable — keep it as
|
|
112
|
+
the canonical Web-API reference; just fix the **auth chapter** that precedes it.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### TL;DR for the doc owner
|
|
117
|
+
1. Auth host: `auth.procesio.app` → `webapi.procesio.app`.
|
|
118
|
+
2. Login is **form-urlencoded** with **`username`+`password`+`client_id`** and a
|
|
119
|
+
required **`x-requested-by`** header — not JSON/OAuth.
|
|
120
|
+
3. Auth is a **cookie session** (`__Host-procesio.access`/`.refresh`), not a
|
|
121
|
+
Bearer token in the body.
|
|
122
|
+
4. Spell out that **`workspaceid` is required** for workspace-scoped API keys.
|
|
123
|
+
5. Fix the dead `auth.procesio.app/swagger` link and small path-casing mismatches.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# PROCESIO environments — model & mechanics
|
|
2
|
+
|
|
3
|
+
PROCESIO ships as independent installations with no data path between them (each has
|
|
4
|
+
its own hosts, its own accounts). This tool models each installation as a named
|
|
5
|
+
**environment** `<Client>-<ENV>` carrying the four hosts it lives on, and binds each
|
|
6
|
+
credential to one environment.
|
|
7
|
+
|
|
8
|
+
## The four hosts
|
|
9
|
+
|
|
10
|
+
| field | what it is | prod value |
|
|
11
|
+
|--------------|------------------------------------------|----------------------------|
|
|
12
|
+
| `web_base` | Web API — every REST call | `https://webapi.procesio.app` |
|
|
13
|
+
| `app_base` | designer / front-end — designer URLs + the login CORS `Origin`/`Referer` | `https://procesio.app` |
|
|
14
|
+
| `forms_base` | public forms host — rendered-form URLs | `https://forms.procesio.app` |
|
|
15
|
+
| `auth_base` | legacy Proxy/Authentication host (login actually goes to `web_base`; rarely used) | `https://auth.procesio.app` |
|
|
16
|
+
|
|
17
|
+
The `-qa` / `-dev` installations follow a host family: `webapi-qa.` / `qa.` /
|
|
18
|
+
`forms-qa.` and `webapi-dev.` / `dev.` / `forms-dev.`.
|
|
19
|
+
|
|
20
|
+
## Two layers, merged at read time
|
|
21
|
+
|
|
22
|
+
- **Built-in presets** in `environments.py::BUILTIN` (`Internal-PROD/QA/DEV`) — PROCESIO's
|
|
23
|
+
own infra, framework-shared, available with zero setup. These are *framework* data
|
|
24
|
+
(public app hostnames), like the historical hard-coded defaults were.
|
|
25
|
+
- **User registry** at `context-state-knowledge/config/procesio/environments.json`
|
|
26
|
+
(per-user, wipeable) — client-specific environments (`Acme-*`, …) and the
|
|
27
|
+
`default` pointer. A user entry with a built-in's name **overrides** it (correct a
|
|
28
|
+
moved Internal host without a code change). Client installation URLs are
|
|
29
|
+
customer-specific, so they are **user data** and live here, never in shared code.
|
|
30
|
+
|
|
31
|
+
## Resolution precedence (both credential + URL)
|
|
32
|
+
|
|
33
|
+
Active **environment** for a call, highest first:
|
|
34
|
+
1. `--environment <name>` flag,
|
|
35
|
+
2. the credential's own `environment` binding,
|
|
36
|
+
3. the stored `default` environment,
|
|
37
|
+
4. `Internal-PROD`.
|
|
38
|
+
|
|
39
|
+
The resolved environment's URLs are folded into the profile the client holds, so
|
|
40
|
+
`config.web_base/app_base/forms_base/auth_base` pick them up. An explicit per-profile
|
|
41
|
+
URL override (a rare `web_base` on the credential blob itself) still wins — injection
|
|
42
|
+
uses `setdefault`.
|
|
43
|
+
|
|
44
|
+
Active **credential** for a call: `--profile` → the credential bound to the active
|
|
45
|
+
environment → the stored default profile. So switching environment also switches which
|
|
46
|
+
account/key is used, provided exactly one credential is bound there.
|
|
47
|
+
|
|
48
|
+
## Backward compatibility (why nothing breaks on upgrade)
|
|
49
|
+
|
|
50
|
+
A pre-existing single-credential setup keeps working as production with **nothing to
|
|
51
|
+
re-enter**: no registry file + an **unbound** credential ⇒ `Internal-PROD` ⇒ the exact
|
|
52
|
+
historical hard-coded URLs. Existing credentials carry no `environment` field, so they
|
|
53
|
+
resolve to `Internal-PROD` automatically.
|
|
54
|
+
|
|
55
|
+
## Operating it
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
list-environments # what exists, which is default, bound creds
|
|
59
|
+
add-environment --name Acme-PROD \ # register a client installation
|
|
60
|
+
--web-base https://webapi.acme… --app-base https://acme… --forms-base https://forms.acme…
|
|
61
|
+
set-environment --name Internal-QA # move the default pointer (persists)
|
|
62
|
+
add-credential --name qa-me --type userpass --username … --environment Internal-QA
|
|
63
|
+
<any action> --environment Internal-DEV # one call against another env, default unchanged
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`add-environment` needs all three of `--web-base/--app-base/--forms-base`; `client`/`env`
|
|
67
|
+
are derived from the `<Client>-<ENV>` name when omitted. Built-in `Internal-*` cannot be
|
|
68
|
+
removed. Names are matched case-insensitively.
|
|
69
|
+
|
|
70
|
+
## The form-code-key is per environment too
|
|
71
|
+
|
|
72
|
+
A form's "Switch to code" CSS and JavaScript (`Data.code`) is AES-encrypted with a key
|
|
73
|
+
the installation's web app holds. The platform team confirmed it is one key per
|
|
74
|
+
INSTALLATION: the same on every workspace of it, not guaranteed to match on another. So
|
|
75
|
+
the tool stores it per environment, `form-code-key@<environment>`, and resolves it from
|
|
76
|
+
the call's environment like everything else here (`form_code_keys.py`):
|
|
77
|
+
|
|
78
|
+
- `form-code-key@<env>` when stored;
|
|
79
|
+
- else, for the DEFAULT environment only, the bare legacy `form-code-key` (the same
|
|
80
|
+
backward-compatible rule as an unbound credential);
|
|
81
|
+
- else an error naming the secret to store. Never another environment's key: a blob
|
|
82
|
+
encrypted with the wrong installation's key is one its renderer cannot open, and the
|
|
83
|
+
form goes blank.
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
python scripts/set-credential.py procesio form-code-key@Internal-QA
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Tests / isolation
|
|
90
|
+
|
|
91
|
+
The suite's autouse `_isolate_userdata` fixture (conftest) pins `AAT_USERDATA_DIR` to a
|
|
92
|
+
temp dir, so every test starts from the built-ins with `default = Internal-PROD` and no
|
|
93
|
+
test reads or writes the developer's real registry. Userpass login tests must also take
|
|
94
|
+
the `store` fixture (in-memory creds) or a persistent cached token skips the login.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# PROCESIO front-end (designer-layer) validation — notes
|
|
2
|
+
|
|
3
|
+
Born 2026-07-06. Ports the Process Designer's client-side **"Process Errors"** checks
|
|
4
|
+
(the ones that BLOCK designer *Save*) into an offline validator, and auto-runs it before
|
|
5
|
+
every process save. Source of truth for the rules: `docs_info/process-validation-reference-1.md`
|
|
6
|
+
(the FE team's verbatim dump of `Validation.ts` + `ControlValidators/*`).
|
|
7
|
+
|
|
8
|
+
## Why this exists (the core insight)
|
|
9
|
+
|
|
10
|
+
`POST /api/Projects/validate` validates only the **runtime** layer (parameters) and
|
|
11
|
+
returns EMPTY even when the designer would REFUSE to save. The designer's "Process
|
|
12
|
+
Errors" panel is a **separate client-side check of the DESIGNER layer (`customData`)**
|
|
13
|
+
with **no server endpoint**. So a tool-driven save was held to a *lower* bar than a human
|
|
14
|
+
clicking Save. This closes that gap: FE (designer) checks run first, then BE, then save.
|
|
15
|
+
|
|
16
|
+
## Pieces
|
|
17
|
+
|
|
18
|
+
- `flowmodel/fevalidation.py` — **pure**, offline, case-insensitive validator over a flow
|
|
19
|
+
DTO. `validate_flow(flow, *, datatypes=None, target_vars_of=None, include_types=True)`
|
|
20
|
+
→ `list[warning]`. `split_severity()` → `(errors, warnings)`.
|
|
21
|
+
- `handlers/fevalidate.py` — impure layer: gathers the datatype catalog + subprocess-var
|
|
22
|
+
resolver from the live API, exposes the **`process-fe-validate`** action, and provides
|
|
23
|
+
the **`pre_save_validate(client, dto, *, force)`** gate (FE → BE, raises
|
|
24
|
+
`ValidationBlocked` on blocking errors unless `force`).
|
|
25
|
+
- Wiring: `dto/framework.py` gained a `save_gate` field on `Component`;
|
|
26
|
+
`dto/process/builder.py` defines `_save_gate` and calls it inside `_edit` before the PUT
|
|
27
|
+
and registers it on `COMPONENT`; `handlers/dto_actions.py` runs the gate in
|
|
28
|
+
`_make_create` before POST and threads `--force` / `--no-types` into `ctx`.
|
|
29
|
+
- `errors.py` gained `ValidationBlocked` → classified as `validation_failed`, exit 2,
|
|
30
|
+
with the full `{fe, be, blocked, forced}` report as `details`.
|
|
31
|
+
|
|
32
|
+
## Severity model (deliberate)
|
|
33
|
+
|
|
34
|
+
- **error** (blocks save): the deterministic, high-signal checks — connectivity, exactly
|
|
35
|
+
1 Start / ≥1 Stop, node names, unique/primitive-named variables, numeric limits,
|
|
36
|
+
required-empty fields, leftover placeholders, number/integer value-format, and
|
|
37
|
+
subprocess required-input mapping.
|
|
38
|
+
- **warning** (never blocks): the **data-type MISMATCH** layer. The FE helper
|
|
39
|
+
`getValueDataTypes` (which resolves a value's variable refs to their datatypes) is NOT
|
|
40
|
+
in the reference file, so it was reconstructed best-effort. Kept non-blocking so an
|
|
41
|
+
imperfect reconstruction can never wrongly block a legit save. Ported for the default
|
|
42
|
+
validator + column-definition; the other composite type-checks (TabsPayload,
|
|
43
|
+
MapProcessData, Conditional) are left for a later tuned pass. `--no-types` skips it.
|
|
44
|
+
|
|
45
|
+
## DTO ↔ FE-model mapping — quirks discovered the hard way
|
|
46
|
+
|
|
47
|
+
The reference describes the FE's **in-memory** model; the persisted/live DTO differs.
|
|
48
|
+
These bit me during live verification — get them right or you get false positives:
|
|
49
|
+
|
|
50
|
+
1. **Node name = `customData.name`, NOT `actionName`.** The FE's `node.name` (the canvas
|
|
51
|
+
label, defaults from the template, e.g. "Start"/"Call API") is stored in
|
|
52
|
+
`customData.name`. On many live DTOs `actionName` is `None`. Reading `actionName`
|
|
53
|
+
flagged `NODE_NAME` on 9/25 valid processes. `_action_name` reads `customData.name`
|
|
54
|
+
first (sentinel `_ABSENT` when the key is truly absent → falls back to `actionName`
|
|
55
|
+
for older/fixture DTOs).
|
|
56
|
+
2. **`actionTemplateId` / `actionTemplateName` can BOTH be `None`** on legacy DTOs (e.g.
|
|
57
|
+
"Github API", "Old/*"). Template-family detection (`_kind`) keys off the GUID first,
|
|
58
|
+
then the template name, then falls back to `customData.name` for the structural
|
|
59
|
+
templates (Start/Stop/For Each/(Trigger) Subprocess). A renamed non-structural node
|
|
60
|
+
just reads as "other" (safe false-negative, never a false block).
|
|
61
|
+
3. **Settings carry the FULL FE `Setting` shape** in `customData.configuration[].settings[]`:
|
|
62
|
+
`id, type (SettingType), label, value, dataTypeId, isList, isRequired, limits`. So the
|
|
63
|
+
FE field-level checks CAN run offline — no need to enrich from `/api/Actions`.
|
|
64
|
+
4. **Empty ≠ format error.** The FE's `isValidNumber`/`isValidInteger` treat `""` as
|
|
65
|
+
valid; emptiness is the *required* check's job. An optional numeric field left blank
|
|
66
|
+
(e.g. a Delay's unused "Runtime Amount", `type=number dataTypeId=INTEGER value=""`)
|
|
67
|
+
must NOT be flagged. `_default_value_check` and `_check_limits` skip empty values.
|
|
68
|
+
This was a real false positive on "AI Decisional Test" (BE-valid).
|
|
69
|
+
5. **`lineArray` is reconstructed from `Ports`.** Edges live on the *source* action's
|
|
70
|
+
`Ports` (`sourceId`/`destinationId`/`type`/`data.isDefault`). Each line touches BOTH
|
|
71
|
+
endpoints. **Error path** = `Type == 1` OR `data.isDefault == "error"` (the reference
|
|
72
|
+
keys on `isDefault === "error"`; the DTO also uses `Type == 1`).
|
|
73
|
+
6. **`flow-list` (subprocess target) setting has NO `id`.** Locate it via a loose walk
|
|
74
|
+
(`_walk_settings_loose`) that recurses one level into side-panel values; the id-based
|
|
75
|
+
`getAllSettings` flatten skips it.
|
|
76
|
+
7. Case: exports are PascalCase (`Actions`, `CustomData`), live API is camelCase. Every
|
|
77
|
+
field access goes through `_g` (case-insensitive). Live flow is under `resp["flow"]`.
|
|
78
|
+
|
|
79
|
+
## Live verification (2026-07-06)
|
|
80
|
+
|
|
81
|
+
Swept 25 real processes in the default workspace: **24 FE-clean, 0 false positives**; the
|
|
82
|
+
only FE-flagged one ("AI Connector Builder Result") is genuinely `isValid=False` (an
|
|
83
|
+
`UNCONNECTED` action). FE errors correctly line up with BE invalidity where they overlap.
|
|
84
|
+
|
|
85
|
+
## Relationship to `flow-lint`
|
|
86
|
+
|
|
87
|
+
`flow-lint` (handlers/flowlint.py) predates this and covers a few designer checks NOT in
|
|
88
|
+
the reference file: stale subprocess **side-pannel id**, Execute-Query **Output** null /
|
|
89
|
+
scalar-typed, and Node **code binding error-scope/undeclared vars**. Those are
|
|
90
|
+
complementary. **As of 2026-07-06 those three unique flow-lint checks are FOLDED INTO the
|
|
91
|
+
gate**: `run_fe_validation` calls `flowlint.lint_flow_dto` and merges its unique findings
|
|
92
|
+
(SIDEPANEL_ID, EXECQUERY_*, CODE_*, missing_error_variable) as blocking errors — the
|
|
93
|
+
overlapping subprocess-mapping ones are excluded to avoid double-reporting. It's
|
|
94
|
+
best-effort (wrapped in try/except): a flow-lint infra hiccup never blocks a legit save.
|
|
95
|
+
So a stale-sidepanel / bad-Execute-Query / error-scope-code flow is now blocked on save too.
|
|
96
|
+
|
|
97
|
+
## Gotchas / do-nots
|
|
98
|
+
|
|
99
|
+
- The gate is process-only (via `Component.save_gate`); other components (form/document)
|
|
100
|
+
are unaffected — their existing `validate` oracle still runs.
|
|
101
|
+
- `--force` bypasses BOTH FE and BE and saves anyway. `--dry-run` runs the gate in
|
|
102
|
+
report-only mode (forced open) so you see the validation without saving.
|
|
103
|
+
- The type (warning) layer needs the datatype catalog (`GET /api/DataTypes`,
|
|
104
|
+
`pageItemCount=1000`); it's fetched best-effort and silently skipped if that call fails.
|
|
105
|
+
- After changing any action's arg/description surface, regenerate the manifest:
|
|
106
|
+
`python -m tools.procesio.gen_manifest` (never hand-edit tool.yaml; ~236 KB, capped
|
|
107
|
+
Write). `tests/test_manifest_sync.py` guards it.
|