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,372 @@
|
|
|
1
|
+
# The PUBLISHED chat surface: exactly which PROCESIO operations are offered to a
|
|
2
|
+
# general chat client, under which names, with which public wording.
|
|
3
|
+
#
|
|
4
|
+
# WHY THIS FILE EXISTS. The registry is the source of truth for what a tool IS
|
|
5
|
+
# (Hard rule 3) and server.py rightly tracks it - that surface dispatches whatever
|
|
6
|
+
# exists. A directory listing is a different kind of thing: a contract with people
|
|
7
|
+
# who did not write the manifests. If the published list were derived from them,
|
|
8
|
+
# renaming an action would silently remove a published tool, adding an argument
|
|
9
|
+
# would silently reshape a published schema, and a new tool would silently appear
|
|
10
|
+
# in a surface someone had reviewed. All three are invisible at the moment they
|
|
11
|
+
# happen, which is the worst property a published contract can have.
|
|
12
|
+
#
|
|
13
|
+
# So this file is the source of truth for ONE fact no manifest records: which
|
|
14
|
+
# operations we stand behind publicly, and how they are described to a stranger.
|
|
15
|
+
# It holds no behaviour. When it disagrees with the registry, CI fails
|
|
16
|
+
# (tests/test_chat_surface.py) - deliberately, and at build time.
|
|
17
|
+
#
|
|
18
|
+
# CURATION RULES, applied when adding an entry:
|
|
19
|
+
# - It serves creating something in PROCESIO, or seeing what you created.
|
|
20
|
+
# - It is nameable. A tool called "run any action" tells a model nothing and
|
|
21
|
+
# reads to a reviewer as an unbounded surface.
|
|
22
|
+
# - Its failure mode is legible. An action that can hang a client does not go
|
|
23
|
+
# here whatever else it does (see `excluded:` at the bottom).
|
|
24
|
+
# - `description` is written for someone who has never used PROCESIO. It is NOT
|
|
25
|
+
# copied from the manifest: manifest text addresses an operator who already
|
|
26
|
+
# knows the platform, and generating it from there would reintroduce exactly
|
|
27
|
+
# the coupling this file removes.
|
|
28
|
+
#
|
|
29
|
+
# read_only: true means the call changes nothing, anywhere. A client may run it
|
|
30
|
+
# without asking. It is NOT the same question as the reversibility gate, which
|
|
31
|
+
# asks whether a change can be undone - process-create is reversible and is
|
|
32
|
+
# emphatically not read-only. The gate is still enforced: a conformance test
|
|
33
|
+
# asserts read_only entries are also reversible, so a mislabel cannot widen what
|
|
34
|
+
# runs unattended.
|
|
35
|
+
|
|
36
|
+
# Semver, and the contract this number describes is the published tool list: names,
|
|
37
|
+
# schemas and wording. Adding a tool is a minor bump, removing or renaming one or
|
|
38
|
+
# tightening a schema is a major bump, and rewording a description is a patch. It is
|
|
39
|
+
# NOT the package version - server.json aligns that with the release - because a
|
|
40
|
+
# client pins to a surface and a release can ship with the surface unchanged.
|
|
41
|
+
surface_version: "0.1.0"
|
|
42
|
+
|
|
43
|
+
# A tool result goes straight into a model's context, so an unbounded one is a
|
|
44
|
+
# context leak rather than a large answer. Results over the cap are truncated and
|
|
45
|
+
# carry a note telling the caller how to narrow the request, which is more useful
|
|
46
|
+
# to a model than a silently short list. Per-tool `max_response_bytes` overrides.
|
|
47
|
+
limits:
|
|
48
|
+
max_response_bytes: 60000
|
|
49
|
+
|
|
50
|
+
# Arguments every PROCESIO action accepts and this surface exposes by default.
|
|
51
|
+
# `profile` is deliberately NOT among them: it selects a local credential profile,
|
|
52
|
+
# which is an installation detail rather than something a chat user should choose.
|
|
53
|
+
common_args:
|
|
54
|
+
workspace_id:
|
|
55
|
+
flag: workspace-id
|
|
56
|
+
type: string
|
|
57
|
+
description: "Workspace to act in. Omit to use the default workspace."
|
|
58
|
+
environment:
|
|
59
|
+
flag: environment
|
|
60
|
+
type: string
|
|
61
|
+
description: "Named environment, e.g. Internal-QA. Omit for the default."
|
|
62
|
+
|
|
63
|
+
tools:
|
|
64
|
+
|
|
65
|
+
# --- Pillar 1: Process Designer ------------------------------------------
|
|
66
|
+
- name: procesio_list_processes
|
|
67
|
+
pillar: process
|
|
68
|
+
title: List PROCESIO processes
|
|
69
|
+
description: >
|
|
70
|
+
List the automation processes in a PROCESIO workspace, newest first.
|
|
71
|
+
Use this to find the id of a process before running, editing or validating it.
|
|
72
|
+
target: {tool: procesio, action: list-processes}
|
|
73
|
+
read_only: true
|
|
74
|
+
common: [workspace_id, environment]
|
|
75
|
+
args:
|
|
76
|
+
- {flag: search, type: string, description: "Only processes whose name matches this text."}
|
|
77
|
+
- {flag: page, type: integer, description: "1-based page number."}
|
|
78
|
+
- {flag: page-size, type: integer, expose: page_size, description: "Processes per page."}
|
|
79
|
+
|
|
80
|
+
- name: procesio_create_process
|
|
81
|
+
pillar: process
|
|
82
|
+
title: Create a PROCESIO process
|
|
83
|
+
description: >
|
|
84
|
+
Create a new automation process from a JSON definition of its steps and
|
|
85
|
+
connections. Returns the new process id. Pass dry_run to see what would be
|
|
86
|
+
built without creating anything.
|
|
87
|
+
target: {tool: procesio, action: process-create}
|
|
88
|
+
read_only: false
|
|
89
|
+
common: [workspace_id, environment]
|
|
90
|
+
args:
|
|
91
|
+
- {flag: config, type: string, description: "The process definition, as a JSON object."}
|
|
92
|
+
- {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be created; create nothing."}
|
|
93
|
+
|
|
94
|
+
- name: procesio_edit_process
|
|
95
|
+
pillar: process
|
|
96
|
+
title: Edit a PROCESIO process
|
|
97
|
+
description: >
|
|
98
|
+
Change an existing process - add, retarget or reconfigure its steps. Pass
|
|
99
|
+
dry_run first to see the diff. Removing steps additionally requires
|
|
100
|
+
allow_remove, so a partial definition cannot silently delete work.
|
|
101
|
+
target: {tool: procesio, action: process-edit}
|
|
102
|
+
read_only: false
|
|
103
|
+
common: [workspace_id, environment]
|
|
104
|
+
args:
|
|
105
|
+
- {flag: id, type: string, required: true, description: "The process id."}
|
|
106
|
+
- {flag: config, type: string, description: "The changes, as a JSON object."}
|
|
107
|
+
- {flag: dry-run, type: boolean, expose: dry_run, description: "Report the diff; change nothing."}
|
|
108
|
+
- {flag: allow-remove, type: boolean, expose: allow_remove, description: "Permit this edit to delete steps."}
|
|
109
|
+
|
|
110
|
+
- name: procesio_validate_process
|
|
111
|
+
pillar: process
|
|
112
|
+
title: Validate a PROCESIO process
|
|
113
|
+
description: >
|
|
114
|
+
Check a process for errors without running it - unconnected steps, missing
|
|
115
|
+
required inputs, broken references. Do this before running a process you
|
|
116
|
+
just built. Validating is not the same as running: a process can validate
|
|
117
|
+
and still fail at execution.
|
|
118
|
+
target: {tool: procesio, action: process-validate}
|
|
119
|
+
read_only: true
|
|
120
|
+
common: [workspace_id, environment]
|
|
121
|
+
args:
|
|
122
|
+
- {flag: id, type: string, required: true, description: "The process id."}
|
|
123
|
+
|
|
124
|
+
- name: procesio_run_process
|
|
125
|
+
pillar: process
|
|
126
|
+
title: Run a PROCESIO process
|
|
127
|
+
description: >
|
|
128
|
+
Execute a process and return its run id. A process does real work - it can
|
|
129
|
+
send mail, write to databases and call external systems - so this is never
|
|
130
|
+
run unattended. Follow it with procesio_get_run_status and procesio_get_run_output.
|
|
131
|
+
target: {tool: procesio, action: run-process}
|
|
132
|
+
read_only: false
|
|
133
|
+
common: [workspace_id, environment]
|
|
134
|
+
args:
|
|
135
|
+
- {flag: id, type: string, required: true, description: "The process id."}
|
|
136
|
+
- {flag: payload, type: string, description: "Input values for the run, as a JSON object."}
|
|
137
|
+
- {flag: synchronous, type: boolean, description: "Wait for the run to finish instead of returning immediately."}
|
|
138
|
+
- {flag: timeout, type: integer, description: "Seconds to wait when synchronous."}
|
|
139
|
+
|
|
140
|
+
- name: procesio_get_run_status
|
|
141
|
+
pillar: process
|
|
142
|
+
title: Check a PROCESIO run
|
|
143
|
+
description: >
|
|
144
|
+
Report whether a run is still going, finished or failed, and which step it
|
|
145
|
+
reached. Takes the run id returned by procesio_run_process.
|
|
146
|
+
target: {tool: procesio, action: get-instance-status}
|
|
147
|
+
read_only: true
|
|
148
|
+
common: [workspace_id, environment]
|
|
149
|
+
args:
|
|
150
|
+
- {flag: id, type: string, required: true, description: "The run id."}
|
|
151
|
+
- {flag: actions, type: boolean, description: "Include per-step detail."}
|
|
152
|
+
|
|
153
|
+
- name: procesio_get_run_output
|
|
154
|
+
pillar: process
|
|
155
|
+
title: Read a PROCESIO run output
|
|
156
|
+
description: >
|
|
157
|
+
Return the values a finished run produced. Only meaningful once the run has
|
|
158
|
+
completed - check with procesio_get_run_status first.
|
|
159
|
+
target: {tool: procesio, action: get-instance-output}
|
|
160
|
+
read_only: true
|
|
161
|
+
common: [workspace_id, environment]
|
|
162
|
+
args:
|
|
163
|
+
- {flag: id, type: string, required: true, description: "The run id."}
|
|
164
|
+
|
|
165
|
+
- name: procesio_tidy_process_layout
|
|
166
|
+
pillar: process
|
|
167
|
+
title: Tidy a process canvas
|
|
168
|
+
description: >
|
|
169
|
+
Re-arrange a process's steps on the design canvas so it is readable. Changes
|
|
170
|
+
only the visual layout, never what the process does. Worth running after
|
|
171
|
+
building a process through the API, which places steps without arranging them.
|
|
172
|
+
target: {tool: procesio, action: relayout-process}
|
|
173
|
+
read_only: false
|
|
174
|
+
common: [workspace_id, environment]
|
|
175
|
+
args:
|
|
176
|
+
- {flag: id, type: string, required: true, description: "The process id."}
|
|
177
|
+
- {flag: dry-run, type: boolean, expose: dry_run, description: "Report the new layout; change nothing."}
|
|
178
|
+
|
|
179
|
+
# --- Pillar 2: Form Designer ---------------------------------------------
|
|
180
|
+
- name: procesio_list_forms
|
|
181
|
+
pillar: form
|
|
182
|
+
title: List PROCESIO forms
|
|
183
|
+
description: >
|
|
184
|
+
List the forms in a workspace. A form is the screen a person fills in to
|
|
185
|
+
start or feed a process.
|
|
186
|
+
target: {tool: procesio, action: form-list}
|
|
187
|
+
read_only: true
|
|
188
|
+
common: [workspace_id, environment]
|
|
189
|
+
args: []
|
|
190
|
+
|
|
191
|
+
- name: procesio_get_form
|
|
192
|
+
pillar: form
|
|
193
|
+
title: Read a PROCESIO form
|
|
194
|
+
description: >
|
|
195
|
+
Return a form's definition - its fields, their types and how they are laid out.
|
|
196
|
+
target: {tool: procesio, action: form-get}
|
|
197
|
+
read_only: true
|
|
198
|
+
common: [workspace_id, environment]
|
|
199
|
+
args:
|
|
200
|
+
- {flag: id, type: string, required: true, description: "The form id."}
|
|
201
|
+
|
|
202
|
+
- name: procesio_create_form
|
|
203
|
+
pillar: form
|
|
204
|
+
title: Create a PROCESIO form
|
|
205
|
+
description: >
|
|
206
|
+
Create a form from a JSON definition. Returns the new form id. Add fields
|
|
207
|
+
afterwards with procesio_add_form_field.
|
|
208
|
+
target: {tool: procesio, action: form-create}
|
|
209
|
+
read_only: false
|
|
210
|
+
common: [workspace_id, environment]
|
|
211
|
+
args:
|
|
212
|
+
- {flag: config, type: string, description: "The form definition, as a JSON object."}
|
|
213
|
+
- {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be created; create nothing."}
|
|
214
|
+
|
|
215
|
+
- name: procesio_add_form_field
|
|
216
|
+
pillar: form
|
|
217
|
+
title: Add fields to a PROCESIO form
|
|
218
|
+
description: >
|
|
219
|
+
Add one or more input fields to an existing form.
|
|
220
|
+
target: {tool: procesio, action: form-add-element}
|
|
221
|
+
read_only: false
|
|
222
|
+
common: [workspace_id, environment]
|
|
223
|
+
args:
|
|
224
|
+
- {flag: id, type: string, required: true, description: "The form id."}
|
|
225
|
+
- {flag: elements, type: string, description: "The fields to add, as a JSON array."}
|
|
226
|
+
- {flag: parent, type: string, description: "Id of the container to add them into."}
|
|
227
|
+
- {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be added; add nothing."}
|
|
228
|
+
|
|
229
|
+
# --- Pillar 3: AI Connector Builder --------------------------------------
|
|
230
|
+
- name: procesio_build_connector
|
|
231
|
+
pillar: connector
|
|
232
|
+
title: Build a PROCESIO connector from API docs
|
|
233
|
+
description: >
|
|
234
|
+
Start building a custom PROCESIO connector from an API's documentation. Give
|
|
235
|
+
it the docs URL and what you need the connector to do; it reads the docs,
|
|
236
|
+
asks what it still needs, and generates a connector package. Returns a build
|
|
237
|
+
id - follow it with procesio_get_connector_build.
|
|
238
|
+
target: {tool: connector-builder, action: create-build}
|
|
239
|
+
read_only: false
|
|
240
|
+
common: []
|
|
241
|
+
args:
|
|
242
|
+
- {flag: api-url, type: string, expose: api_url, description: "URL of the API documentation to read."}
|
|
243
|
+
- {flag: api-docs-text, type: string, expose: api_docs_text, description: "The documentation itself, if there is no public URL."}
|
|
244
|
+
- {flag: user-requirements, type: string, expose: user_requirements, description: "What the connector needs to do, in plain language."}
|
|
245
|
+
|
|
246
|
+
- name: procesio_list_connector_builds
|
|
247
|
+
pillar: connector
|
|
248
|
+
title: List connector builds
|
|
249
|
+
description: >
|
|
250
|
+
List connector builds and their current stage.
|
|
251
|
+
target: {tool: connector-builder, action: list-builds}
|
|
252
|
+
read_only: true
|
|
253
|
+
common: []
|
|
254
|
+
args:
|
|
255
|
+
- {flag: status, type: string, description: "Only builds in this stage."}
|
|
256
|
+
- {flag: page, type: integer, description: "1-based page number."}
|
|
257
|
+
|
|
258
|
+
- name: procesio_get_connector_build
|
|
259
|
+
pillar: connector
|
|
260
|
+
title: Check a connector build
|
|
261
|
+
description: >
|
|
262
|
+
Report a build's stage, what it is waiting on, and whether a connector
|
|
263
|
+
package is ready to download.
|
|
264
|
+
target: {tool: connector-builder, action: get-build}
|
|
265
|
+
read_only: true
|
|
266
|
+
common: []
|
|
267
|
+
args:
|
|
268
|
+
- {flag: build-id, type: string, expose: build_id, required: true, description: "The build id."}
|
|
269
|
+
|
|
270
|
+
- name: procesio_download_connector
|
|
271
|
+
pillar: connector
|
|
272
|
+
title: Download a built connector
|
|
273
|
+
description: >
|
|
274
|
+
Save a finished build's connector package to a local file, ready to install
|
|
275
|
+
with procesio_install_connector.
|
|
276
|
+
target: {tool: connector-builder, action: download-artifact}
|
|
277
|
+
read_only: false
|
|
278
|
+
common: []
|
|
279
|
+
args:
|
|
280
|
+
- {flag: build-id, type: string, expose: build_id, required: true, description: "The build id."}
|
|
281
|
+
- {flag: out, type: string, required: true, description: "Local path to write the package to."}
|
|
282
|
+
|
|
283
|
+
- name: procesio_install_connector
|
|
284
|
+
pillar: connector
|
|
285
|
+
title: Install a connector into PROCESIO
|
|
286
|
+
description: >
|
|
287
|
+
Install a connector package into a workspace, after which its operations
|
|
288
|
+
appear as steps you can use when building a process.
|
|
289
|
+
target: {tool: procesio, action: customaction-upload}
|
|
290
|
+
read_only: false
|
|
291
|
+
common: [workspace_id, environment]
|
|
292
|
+
args:
|
|
293
|
+
- {flag: file, type: string, required: true, description: "Path to the connector package."}
|
|
294
|
+
- {flag: name, type: string, description: "Name to show in the designer."}
|
|
295
|
+
|
|
296
|
+
- name: procesio_list_connectors
|
|
297
|
+
pillar: connector
|
|
298
|
+
title: List installed connectors
|
|
299
|
+
description: >
|
|
300
|
+
List the connectors installed in a workspace - the extra step types available
|
|
301
|
+
when building a process.
|
|
302
|
+
target: {tool: procesio, action: customaction-list}
|
|
303
|
+
read_only: true
|
|
304
|
+
common: [workspace_id, environment]
|
|
305
|
+
args: []
|
|
306
|
+
|
|
307
|
+
# --- Workspace ------------------------------------------------------------
|
|
308
|
+
- name: procesio_list_workspaces
|
|
309
|
+
pillar: workspace
|
|
310
|
+
title: List PROCESIO workspaces
|
|
311
|
+
description: >
|
|
312
|
+
List the workspaces this account can reach. A workspace holds its own
|
|
313
|
+
processes, forms, connectors and credentials.
|
|
314
|
+
target: {tool: procesio, action: list-workspaces}
|
|
315
|
+
read_only: true
|
|
316
|
+
common: [workspace_id, environment]
|
|
317
|
+
args: []
|
|
318
|
+
|
|
319
|
+
- name: procesio_list_environments
|
|
320
|
+
pillar: workspace
|
|
321
|
+
title: List PROCESIO environments
|
|
322
|
+
description: >
|
|
323
|
+
List the configured environments, so a call can be pointed at the right one.
|
|
324
|
+
target: {tool: procesio, action: list-environments}
|
|
325
|
+
read_only: true
|
|
326
|
+
common: []
|
|
327
|
+
args: []
|
|
328
|
+
|
|
329
|
+
- name: procesio_test_credential
|
|
330
|
+
pillar: workspace
|
|
331
|
+
title: Test a PROCESIO credential
|
|
332
|
+
description: >
|
|
333
|
+
Check that a stored credential can still reach the system it belongs to.
|
|
334
|
+
Answers whether a connection is working without running a whole process.
|
|
335
|
+
target: {tool: procesio, action: credential-test}
|
|
336
|
+
read_only: true
|
|
337
|
+
common: [workspace_id, environment]
|
|
338
|
+
args:
|
|
339
|
+
- {flag: config, type: string, description: "The credential to test, as a JSON object."}
|
|
340
|
+
|
|
341
|
+
# Operations kept OUT of the published surface, with the reason. This list is part
|
|
342
|
+
# of the contract: it is where a future "why isn't X here?" gets answered, and it
|
|
343
|
+
# stops an exclusion being quietly reversed by someone who assumes it was an oversight.
|
|
344
|
+
excluded:
|
|
345
|
+
- target: "procesio/get-process"
|
|
346
|
+
reason: >
|
|
347
|
+
Prints its JSON and then does not exit. Over stdio that is an unrecoverable
|
|
348
|
+
hang rather than an error, and a chat client has no way to recover from it.
|
|
349
|
+
procesio_list_processes plus procesio_validate_process cover the same need. Revisit only when
|
|
350
|
+
the action is proven to terminate.
|
|
351
|
+
- target: "procesio/*-delete"
|
|
352
|
+
reason: >
|
|
353
|
+
Irreversible with a data-loss blast class. A first public surface has no
|
|
354
|
+
deletion in it; the full surface still reaches these behind confirmation.
|
|
355
|
+
There is a second reason, and it is the stronger one: deleting a resource with a
|
|
356
|
+
large run history takes longer server-side than the client's read timeout, so the
|
|
357
|
+
call returns a transport error while the delete goes on to complete. Retrying
|
|
358
|
+
returns the same error, which reads like a permanent failure and is not one. A
|
|
359
|
+
caller therefore cannot tell from the response whether the deletion happened - and
|
|
360
|
+
a tool whose failure signal does not distinguish "nothing happened" from "it is
|
|
361
|
+
done" has no safe place on a surface a model drives. Confirm by listing the
|
|
362
|
+
resource, never from the error. (Deletes of credentials and Data Stores return
|
|
363
|
+
promptly; it is the instance history that costs the time.)
|
|
364
|
+
- target: "procesio/<generated REST passthroughs>"
|
|
365
|
+
reason: >
|
|
366
|
+
Several hundred generated get-/post-/put-/delete- actions mirroring raw API
|
|
367
|
+
endpoints. They are why the freeform surface exists. Publishing them would
|
|
368
|
+
make the tool list unreadable and turn the schema into the API reference.
|
|
369
|
+
- target: "procesio/profile (argument)"
|
|
370
|
+
reason: >
|
|
371
|
+
Selects a local credential profile. An installation detail, not a choice a
|
|
372
|
+
chat user should be asked to make. The default profile is used.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Reversibility gate for the MCP bridge - code-authoritative, pre-execution.
|
|
2
|
+
|
|
3
|
+
Reuses the ONE shared definition of "irreversible" (agents/_lib/reversibility) that
|
|
4
|
+
already guards `orchestrator drive` and the `deputy`, so the web platform cannot
|
|
5
|
+
drift into a second policy. The gate decides which execution PATH an action takes:
|
|
6
|
+
|
|
7
|
+
reversible -> runs on `run_tool` / `run_agent`
|
|
8
|
+
irreversible -> refused there; must go through `run_tool_confirmed` /
|
|
9
|
+
`run_agent_confirmed`, which opencode marks `ask` so a HUMAN
|
|
10
|
+
approves the click. A model cannot forge that approval, and it
|
|
11
|
+
cannot bypass by choosing the plain tool - the plain tool refuses
|
|
12
|
+
and names the confirmed path. That is the gate being code, not a
|
|
13
|
+
prompt (reversibility.py:1-8).
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
_REPO = Path(__file__).resolve().parents[2]
|
|
22
|
+
if str(_REPO) not in sys.path:
|
|
23
|
+
sys.path.insert(0, str(_REPO))
|
|
24
|
+
|
|
25
|
+
from agents._lib import reversibility # noqa: E402
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def classify(name: str, action: str | None) -> dict:
|
|
29
|
+
"""Classify on the tool/agent NAME + the ACTION verb (send-message,
|
|
30
|
+
delete-messages, issue-invoice, post-message). Deliberately NOT on arg values -
|
|
31
|
+
a subject line "please send me..." must not trip the gate; the verb lives in the
|
|
32
|
+
action name for every AAT side effect. Returns reversibility.classify()'s dict:
|
|
33
|
+
{reversible, verb, blast_class, reason}."""
|
|
34
|
+
argv = [action] if action else []
|
|
35
|
+
return reversibility.classify(name, argv)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def deny_irreversible_env() -> bool:
|
|
39
|
+
"""Headless/autonomous fail-safe. When AAT_MCP_DENY_IRREVERSIBLE is set, even the
|
|
40
|
+
*_confirmed tools refuse irreversible actions - there is no human in the seat to
|
|
41
|
+
approve. Default (unset) = interactive: opencode's `ask` on the confirmed tools
|
|
42
|
+
is the human gate."""
|
|
43
|
+
return os.environ.get("AAT_MCP_DENY_IRREVERSIBLE", "").strip().lower() in (
|
|
44
|
+
"1", "true", "yes", "on")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def decide(name: str, action: str | None, *, level: str = "L1", scopes=None,
|
|
48
|
+
role: str | None = None, ws_cap: str | None = None) -> dict:
|
|
49
|
+
"""Graded autonomy decision for the MCP layer (spec P0.0-07). Clamps the requested
|
|
50
|
+
level by the caller's role and any workspace cap, then applies the code-authoritative
|
|
51
|
+
reversibility gate at the effective level. The `AAT_MCP_DENY_IRREVERSIBLE` fail-safe
|
|
52
|
+
still hard-denies anything that would need human approval.
|
|
53
|
+
|
|
54
|
+
Default (level='L1', no role/cap) reproduces the binary gate exactly: reversible
|
|
55
|
+
runs, irreversible needs approval - so existing callers are unaffected."""
|
|
56
|
+
argv = [action] if action else []
|
|
57
|
+
if role is not None or ws_cap is not None:
|
|
58
|
+
eff = reversibility.clamp(level, role=role, ws_cap=ws_cap)
|
|
59
|
+
else:
|
|
60
|
+
eff = level
|
|
61
|
+
if eff is None:
|
|
62
|
+
return {"allow": False, "needs_confirmation": False, "level": None,
|
|
63
|
+
"reason": "role has no AAT access", "verb": None, "blast_class": None}
|
|
64
|
+
d = reversibility.decide(name, argv, level=eff, scopes=scopes)
|
|
65
|
+
if d.get("needs_confirmation") and deny_irreversible_env():
|
|
66
|
+
return {**d, "allow": False, "needs_confirmation": False,
|
|
67
|
+
"reason": "AAT_MCP_DENY_IRREVERSIBLE: " + d["reason"]}
|
|
68
|
+
return d
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""aat-mcp over HTTP (MCP Streamable-HTTP transport) - for containers / k8s, where
|
|
2
|
+
opencode connects as a *remote* MCP client. Reuses server.handle() so stdio and HTTP
|
|
3
|
+
share ONE dispatch + the same reversibility gate.
|
|
4
|
+
|
|
5
|
+
Endpoint: a single path (default /mcp). Client POSTs a JSON-RPC message (or a batch);
|
|
6
|
+
the server replies with application/json. Notifications (no id) get 202 Accepted. On
|
|
7
|
+
`initialize` the server issues an Mcp-Session-Id header (not enforced - single local
|
|
8
|
+
tenant). GET returns 405 (no server-initiated stream is needed for these tools).
|
|
9
|
+
|
|
10
|
+
Run: python webplatform/aat_mcp/http_server.py --host 0.0.0.0 --port 8901 [--token X]
|
|
11
|
+
Auth: if --token or AAT_MCP_HTTP_TOKEN is set, requests must send
|
|
12
|
+
`Authorization: Bearer <token>` (use for any non-loopback bind).
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import argparse
|
|
17
|
+
import json
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
import uuid
|
|
21
|
+
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
|
22
|
+
|
|
23
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
24
|
+
import server # noqa: E402 (reuse handle/TOOLS/dispatch)
|
|
25
|
+
|
|
26
|
+
PATH = "/mcp"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _make_handler(token: str | None):
|
|
30
|
+
class Handler(BaseHTTPRequestHandler):
|
|
31
|
+
protocol_version = "HTTP/1.1"
|
|
32
|
+
|
|
33
|
+
def log_message(self, fmt, *args): # quiet; logs to stderr only if needed
|
|
34
|
+
sys.stderr.write("[aat-mcp-http] " + (fmt % args) + "\n")
|
|
35
|
+
|
|
36
|
+
def _authed(self) -> bool:
|
|
37
|
+
if not token:
|
|
38
|
+
return True
|
|
39
|
+
got = self.headers.get("Authorization", "")
|
|
40
|
+
return got == f"Bearer {token}"
|
|
41
|
+
|
|
42
|
+
def _send(self, code: int, body: bytes | None, ctype: str = "application/json",
|
|
43
|
+
extra: dict | None = None):
|
|
44
|
+
self.send_response(code)
|
|
45
|
+
if body is not None:
|
|
46
|
+
self.send_header("Content-Type", ctype)
|
|
47
|
+
self.send_header("Content-Length", str(len(body)))
|
|
48
|
+
else:
|
|
49
|
+
self.send_header("Content-Length", "0")
|
|
50
|
+
for k, v in (extra or {}).items():
|
|
51
|
+
self.send_header(k, v)
|
|
52
|
+
self.end_headers()
|
|
53
|
+
if body is not None:
|
|
54
|
+
self.wfile.write(body)
|
|
55
|
+
|
|
56
|
+
def do_GET(self):
|
|
57
|
+
# Health probe convenience + MCP: no server-initiated SSE stream offered.
|
|
58
|
+
if self.path.rstrip("/") in ("", "/health", "/healthz"):
|
|
59
|
+
self._send(200, json.dumps({"ok": True, "server": server.SERVER_INFO,
|
|
60
|
+
"tools": [t["name"] for t in server.TOOLS]}
|
|
61
|
+
).encode())
|
|
62
|
+
return
|
|
63
|
+
self._send(405, json.dumps({"error": "GET not supported; POST JSON-RPC to "
|
|
64
|
+
+ PATH}).encode())
|
|
65
|
+
|
|
66
|
+
def do_POST(self):
|
|
67
|
+
if self.path.rstrip("/") != PATH.rstrip("/"):
|
|
68
|
+
self._send(404, json.dumps({"error": f"unknown path; use {PATH}"}).encode())
|
|
69
|
+
return
|
|
70
|
+
if not self._authed():
|
|
71
|
+
self._send(401, json.dumps({"error": "unauthorized"}).encode())
|
|
72
|
+
return
|
|
73
|
+
length = int(self.headers.get("Content-Length") or 0)
|
|
74
|
+
raw = self.rfile.read(length) if length else b""
|
|
75
|
+
try:
|
|
76
|
+
msg = json.loads(raw.decode("utf-8")) if raw else None
|
|
77
|
+
except ValueError:
|
|
78
|
+
self._send(400, json.dumps(
|
|
79
|
+
{"jsonrpc": "2.0", "id": None,
|
|
80
|
+
"error": {"code": -32700, "message": "parse error"}}).encode())
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
# Server-established user (multi-user platform). The auth gateway sets
|
|
84
|
+
# X-AAT-User; it is NEVER taken from the JSON-RPC body / model output. Bound
|
|
85
|
+
# for this request only, so the tool subprocess runs as that user.
|
|
86
|
+
uid = self.headers.get("X-AAT-User") or None
|
|
87
|
+
_utok = server.bridge.set_user(uid)
|
|
88
|
+
# Same rule for the managed-turn flag: it comes from the CALLER's config (the worker sets
|
|
89
|
+
# it on every turn it drives), never from the JSON-RPC body, so the model cannot clear it
|
|
90
|
+
# to unlock a competing orchestration loop.
|
|
91
|
+
_mtok = server.bridge.set_managed_turn(
|
|
92
|
+
(self.headers.get("X-AAT-Managed-Turn") or "").strip().lower() in ("1", "true", "yes"))
|
|
93
|
+
try:
|
|
94
|
+
batch = msg if isinstance(msg, list) else [msg]
|
|
95
|
+
responses = []
|
|
96
|
+
is_initialize = False
|
|
97
|
+
for m in batch:
|
|
98
|
+
if not isinstance(m, dict):
|
|
99
|
+
continue
|
|
100
|
+
if m.get("method") == "initialize":
|
|
101
|
+
is_initialize = True
|
|
102
|
+
# Legacy era only: modern Streamable HTTP requires the Mcp-Method / Mcp-Name
|
|
103
|
+
# header rules, which this transport does not implement.
|
|
104
|
+
resp = server.handle(m, modern=False)
|
|
105
|
+
if resp is not None:
|
|
106
|
+
responses.append(resp)
|
|
107
|
+
finally:
|
|
108
|
+
server.bridge.reset_managed_turn(_mtok)
|
|
109
|
+
server.bridge.reset_user(_utok)
|
|
110
|
+
|
|
111
|
+
if not responses:
|
|
112
|
+
self._send(202, None) # only notifications
|
|
113
|
+
return
|
|
114
|
+
out = responses if isinstance(msg, list) else responses[0]
|
|
115
|
+
extra = {"Mcp-Session-Id": uuid.uuid4().hex} if is_initialize else None
|
|
116
|
+
self._send(200, json.dumps(out, ensure_ascii=False).encode(), extra=extra)
|
|
117
|
+
|
|
118
|
+
return Handler
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def main() -> int:
|
|
122
|
+
ap = argparse.ArgumentParser()
|
|
123
|
+
ap.add_argument("--host", default="127.0.0.1")
|
|
124
|
+
ap.add_argument("--port", type=int, default=8901)
|
|
125
|
+
ap.add_argument("--token", default=os.environ.get("AAT_MCP_HTTP_TOKEN", ""))
|
|
126
|
+
a = ap.parse_args()
|
|
127
|
+
httpd = ThreadingHTTPServer((a.host, a.port), _make_handler(a.token or None))
|
|
128
|
+
sys.stderr.write(f"[aat-mcp-http] listening on http://{a.host}:{a.port}{PATH} "
|
|
129
|
+
f"(auth: {'on' if a.token else 'off'})\n")
|
|
130
|
+
sys.stderr.flush()
|
|
131
|
+
try:
|
|
132
|
+
httpd.serve_forever()
|
|
133
|
+
except KeyboardInterrupt:
|
|
134
|
+
pass
|
|
135
|
+
return 0
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
if __name__ == "__main__":
|
|
139
|
+
raise SystemExit(main())
|