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,226 @@
|
|
|
1
|
+
"""Static analysis of a PROCESIO process (flow) DTO.
|
|
2
|
+
|
|
3
|
+
Two kinds of findings:
|
|
4
|
+
- correctness: the designer-vs-runtime parity bugs that make Validate fail even
|
|
5
|
+
when the process runs (the hard-won PHASE4-E2E lessons). `verify` gates on these.
|
|
6
|
+
- practice: best-practice smells (too many actions, slow actions, no error
|
|
7
|
+
handling, no description, possible inline secret). The `audit` action reports them.
|
|
8
|
+
|
|
9
|
+
DTO case matters: the LIVE Web-API returns camelCase (`actions`, `parameters`,
|
|
10
|
+
`value`), while the offline .procesio EXPORT bundles use PascalCase (`Actions`,
|
|
11
|
+
`Parameters`, `Value`). Every lookup goes through `ci()` (case-insensitive) so the
|
|
12
|
+
agent works on a live process AND on an export golden. Beyond that the auditor is
|
|
13
|
+
defensive: an unknown shape downgrades a check to "skipped" rather than crashing
|
|
14
|
+
or emitting a false finding. It never invents certainty it does not have.
|
|
15
|
+
"""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import json
|
|
19
|
+
import re
|
|
20
|
+
|
|
21
|
+
_STRUCTURAL = {"start", "stop"} # no configuration expected (compared lowercased)
|
|
22
|
+
# A node whose human NAME signals a Data Store / cache operation while its action
|
|
23
|
+
# TYPE is 'Call API' is a masquerade: a Call API does NOT touch the Data Store, it
|
|
24
|
+
# just calls an HTTP endpoint (the FX-usecase bug - a Call API node wearing a cache
|
|
25
|
+
# icon). Intent keywords are matched on the action NAME, the type on the template.
|
|
26
|
+
_DATASTORE_INTENT = ("cache", "data store", "datastore")
|
|
27
|
+
_CALLAPI_TEMPLATE = "call api"
|
|
28
|
+
_SLOW_KEYWORDS = ("call api", "sql", "ftp", "decisional",
|
|
29
|
+
"data store", "mysql", "redis") # network/DB-bound: count toward speed
|
|
30
|
+
_GUID_RE = re.compile(
|
|
31
|
+
r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", re.I)
|
|
32
|
+
_SECRET_KEYWORDS = ("password", "passwd", "apikey", "api_key", "api-key",
|
|
33
|
+
"secret", "client_secret", "bearer ", "authorization")
|
|
34
|
+
_TOKEN_RE = re.compile(r"^[A-Za-z0-9+/_=-]{24,}$")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def ci(d, *names):
|
|
38
|
+
"""Case-insensitive dict get: first `names` value whose key matches ignoring
|
|
39
|
+
case. Handles live camelCase and export PascalCase from one call site."""
|
|
40
|
+
if not isinstance(d, dict):
|
|
41
|
+
return None
|
|
42
|
+
lowered = {k.lower(): k for k in d.keys()}
|
|
43
|
+
for n in names:
|
|
44
|
+
k = lowered.get(n.lower())
|
|
45
|
+
if k is not None:
|
|
46
|
+
return d[k]
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _actions(flow: dict) -> list[dict]:
|
|
51
|
+
a = ci(flow, "actions")
|
|
52
|
+
return [x for x in a if isinstance(x, dict)] if isinstance(a, list) else []
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _template(a: dict) -> str:
|
|
56
|
+
return str(ci(a, "actionTemplateName") or ci(a, "actionName") or "")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _name(a: dict) -> str:
|
|
60
|
+
return str(ci(a, "actionName") or _template(a) or "?")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _is_structural(a: dict) -> bool:
|
|
64
|
+
return _template(a).strip().lower() in _STRUCTURAL
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _param_set(p: dict) -> bool:
|
|
68
|
+
val = ci(p, "value")
|
|
69
|
+
return (val not in (None, "")) or bool(ci(p, "variable"))
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _config_settings(a: dict) -> list[dict]:
|
|
73
|
+
conf = ci(ci(a, "customData") or {}, "configuration")
|
|
74
|
+
if not isinstance(conf, list):
|
|
75
|
+
return []
|
|
76
|
+
settings: list[dict] = []
|
|
77
|
+
for tab in conf:
|
|
78
|
+
if isinstance(tab, dict):
|
|
79
|
+
for s in ci(tab, "settings") or []:
|
|
80
|
+
if isinstance(s, dict):
|
|
81
|
+
settings.append(s)
|
|
82
|
+
return settings
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _config_set(s: dict) -> bool:
|
|
86
|
+
return ci(s, "value") not in (None, "", [], {})
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _f(kind, severity, code, message, citation, action=None) -> dict:
|
|
90
|
+
out = {"kind": kind, "severity": severity, "code": code,
|
|
91
|
+
"message": message, "citation": citation}
|
|
92
|
+
if action:
|
|
93
|
+
out["action"] = action
|
|
94
|
+
return out
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _datastore_masquerade(flow: dict) -> list[dict]:
|
|
98
|
+
"""A node named like a Data Store/cache op whose TYPE is 'Call API' does not read
|
|
99
|
+
or write the Data Store - it just calls an endpoint. Hard-fail: the cache never
|
|
100
|
+
works, which is invisible because the process still 'runs' green (FX-usecase bug)."""
|
|
101
|
+
out: list[dict] = []
|
|
102
|
+
for a in _actions(flow):
|
|
103
|
+
if _is_structural(a):
|
|
104
|
+
continue
|
|
105
|
+
if any(k in _name(a).lower() for k in _DATASTORE_INTENT) \
|
|
106
|
+
and _CALLAPI_TEMPLATE in _template(a).lower():
|
|
107
|
+
out.append(_f(
|
|
108
|
+
"correctness", "fail", "datastore-as-callapi",
|
|
109
|
+
"action is named like a Data Store / cache operation but its type is "
|
|
110
|
+
"'Call API' - a Call API node does NOT read or write the Data Store. "
|
|
111
|
+
"Use a native Data Store action (Select/Insert/Update/Delete), not a "
|
|
112
|
+
"Call API dressed with a cache icon.",
|
|
113
|
+
"FX-usecase diagnosis; PROCESIO-DATASTORE", _name(a)))
|
|
114
|
+
return out
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def correctness_findings(flow: dict) -> list[dict]:
|
|
118
|
+
"""Designer-vs-runtime parity checks only (what `verify` gates on)."""
|
|
119
|
+
findings: list[dict] = list(_datastore_masquerade(flow))
|
|
120
|
+
for a in _actions(flow):
|
|
121
|
+
if _is_structural(a):
|
|
122
|
+
continue
|
|
123
|
+
params = ci(a, "parameters")
|
|
124
|
+
if not isinstance(params, list):
|
|
125
|
+
continue
|
|
126
|
+
set_params = [p for p in params if isinstance(p, dict) and _param_set(p)]
|
|
127
|
+
settings = _config_settings(a)
|
|
128
|
+
set_settings = [s for s in settings if _config_set(s)]
|
|
129
|
+
if set_params and settings and not set_settings:
|
|
130
|
+
findings.append(_f(
|
|
131
|
+
"correctness", "warn", "designer-blank",
|
|
132
|
+
"runtime parameters are set but the designer configuration is empty; "
|
|
133
|
+
"the designer will show 'not configured' and Validate will fail "
|
|
134
|
+
"(mirror parameters into customData.configuration)",
|
|
135
|
+
"PHASE4-E2E process-builder fix", _name(a)))
|
|
136
|
+
elif params and not set_params and not set_settings:
|
|
137
|
+
findings.append(_f(
|
|
138
|
+
"correctness", "info", "unconfigured-action",
|
|
139
|
+
"action has parameters but none are set; confirm it is meant to be empty",
|
|
140
|
+
"playbook A", _name(a)))
|
|
141
|
+
return findings
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _practice_findings(flow: dict) -> tuple[list[dict], dict]:
|
|
145
|
+
findings: list[dict] = []
|
|
146
|
+
nonstructural = [a for a in _actions(flow) if not _is_structural(a)]
|
|
147
|
+
n = len(nonstructural)
|
|
148
|
+
|
|
149
|
+
if n > 5:
|
|
150
|
+
findings.append(_f("practice", "warn", "high-action-count",
|
|
151
|
+
f"{n} non-structural actions; >5 is 'really bad' for a "
|
|
152
|
+
"form-called process - reduce/merge or move to one scripting action",
|
|
153
|
+
"best-practices 9-10"))
|
|
154
|
+
elif n >= 4:
|
|
155
|
+
findings.append(_f("practice", "info", "action-count",
|
|
156
|
+
f"{n} non-structural actions; aim for <=3 if a form calls this",
|
|
157
|
+
"best-practices 9-10"))
|
|
158
|
+
|
|
159
|
+
slow = sorted({_template(a) for a in nonstructural
|
|
160
|
+
if any(k in _template(a).lower() for k in _SLOW_KEYWORDS)})
|
|
161
|
+
if slow:
|
|
162
|
+
findings.append(_f("practice", "info" if len(slow) <= 2 else "warn",
|
|
163
|
+
"slow-actions",
|
|
164
|
+
"latency-adding actions present: " + ", ".join(slow) +
|
|
165
|
+
" - use only where needed, minimize for form-called processes",
|
|
166
|
+
"best-practices 10"))
|
|
167
|
+
|
|
168
|
+
has_desc = bool(str(ci(flow, "description") or "").strip())
|
|
169
|
+
if not has_desc:
|
|
170
|
+
findings.append(_f("practice", "info", "missing-description",
|
|
171
|
+
"process has no description; document it and the trigger order (SOP)",
|
|
172
|
+
"best-practices 7"))
|
|
173
|
+
|
|
174
|
+
blob = json.dumps(flow, default=str).lower()
|
|
175
|
+
error_handling = any(t in blob for t in
|
|
176
|
+
('errorport', '"error"', 'onerror', 'error_port', 'erroraction'))
|
|
177
|
+
if n >= 2 and not error_handling:
|
|
178
|
+
findings.append(_f("practice", "info", "no-error-handling",
|
|
179
|
+
"no error-port / error handling detected (heuristic); add a "
|
|
180
|
+
"global try/catch via Error Port + Decisional",
|
|
181
|
+
"best-practices 5"))
|
|
182
|
+
|
|
183
|
+
findings.extend(_secret_smells(nonstructural))
|
|
184
|
+
|
|
185
|
+
summary = {
|
|
186
|
+
"action_count": len(_actions(flow)),
|
|
187
|
+
"nonstructural_action_count": n,
|
|
188
|
+
"slow_actions": slow,
|
|
189
|
+
"has_description": has_desc,
|
|
190
|
+
"error_handling_detected": error_handling,
|
|
191
|
+
}
|
|
192
|
+
return findings, summary
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _secret_smells(actions: list[dict]) -> list[dict]:
|
|
196
|
+
out: list[dict] = []
|
|
197
|
+
for a in actions:
|
|
198
|
+
params = ci(a, "parameters") or []
|
|
199
|
+
for p in params:
|
|
200
|
+
if not isinstance(p, dict) or ci(p, "variable"):
|
|
201
|
+
continue # bound to a variable -> not an inline literal
|
|
202
|
+
val = ci(p, "value")
|
|
203
|
+
if not isinstance(val, str) or not val or _GUID_RE.match(val):
|
|
204
|
+
continue # GUIDs (e.g. a credential id literal) are expected, not secrets
|
|
205
|
+
low = val.lower()
|
|
206
|
+
if any(k in low for k in _SECRET_KEYWORDS) or (
|
|
207
|
+
len(val) >= 24 and _TOKEN_RE.match(val) and not val.startswith("<%")):
|
|
208
|
+
out.append(_f("practice", "warn", "possible-inline-secret",
|
|
209
|
+
"a parameter holds a literal that looks like a secret; "
|
|
210
|
+
"secrets must live in the Credential Manager, not in the process",
|
|
211
|
+
"best-practices 2", _name(a)))
|
|
212
|
+
break
|
|
213
|
+
return out
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def audit_process(flow: dict) -> dict:
|
|
217
|
+
"""Full audit: correctness + practice findings + a summary."""
|
|
218
|
+
correctness = correctness_findings(flow)
|
|
219
|
+
practice, summary = _practice_findings(flow)
|
|
220
|
+
findings = correctness + practice
|
|
221
|
+
counts = {"fail": 0, "warn": 0, "info": 0}
|
|
222
|
+
for f in findings:
|
|
223
|
+
counts[f["severity"]] = counts.get(f["severity"], 0) + 1
|
|
224
|
+
summary["findings_by_severity"] = counts
|
|
225
|
+
summary["title"] = ci(flow, "title") or ci(flow, "name")
|
|
226
|
+
return {"findings": findings, "summary": summary}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""The build-and-test self-test checklist, as structured data.
|
|
2
|
+
|
|
3
|
+
Single source of truth for what "tested" means (the playbook's checklist in
|
|
4
|
+
machine-readable form). The `checklist` action emits it; `verify` runs the
|
|
5
|
+
automatable steps; the manual steps are surfaced so a human/LLM cannot quietly
|
|
6
|
+
skip them. Keep this in sync with PROCESIO-BUILD-AND-TEST-PLAYBOOK.md.
|
|
7
|
+
|
|
8
|
+
Each step:
|
|
9
|
+
id stable slug
|
|
10
|
+
phase validate | run | forms | webhooks | e2e
|
|
11
|
+
title what to check
|
|
12
|
+
how concrete mechanic
|
|
13
|
+
tool which registered tool/action performs it (or "" for judgment)
|
|
14
|
+
automatable True -> `verify` can run it
|
|
15
|
+
False -> a human/LLM must do it (named in verify's manual_checks)
|
|
16
|
+
citation where it comes from
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
STEPS: list[dict] = [
|
|
21
|
+
# A. static validation -----------------------------------------------------
|
|
22
|
+
{"id": "validate-process", "phase": "validate", "automatable": True,
|
|
23
|
+
"title": "Validate the process with PROCESIO's own validator",
|
|
24
|
+
"how": "POST /api/Projects/validate; expect no validation errors",
|
|
25
|
+
"tool": "procesio request", "citation": "playbook A"},
|
|
26
|
+
{"id": "config-parity-audit", "phase": "validate", "automatable": True,
|
|
27
|
+
"title": "Designer-vs-runtime parity: every action configured",
|
|
28
|
+
"how": "runtime Parameters[] must be mirrored into CustomData.configuration "
|
|
29
|
+
"or the designer shows 'not configured' and Validate fails",
|
|
30
|
+
"tool": "procesio agent (audit/verify)", "citation": "playbook A; PHASE4-E2E"},
|
|
31
|
+
{"id": "test-credentials", "phase": "validate", "automatable": True,
|
|
32
|
+
"title": "Test every credential the process uses",
|
|
33
|
+
"how": "POST /api/Credentials/test returns a real upstream body when placement is right",
|
|
34
|
+
"tool": "procesio request", "citation": "playbook A; PHASE4-E2E 3-4"},
|
|
35
|
+
{"id": "test-actions", "phase": "validate", "automatable": True,
|
|
36
|
+
"title": "Test individual actions where supported",
|
|
37
|
+
"how": "POST /api/Actions/test", "tool": "procesio request",
|
|
38
|
+
"citation": "playbook A"},
|
|
39
|
+
{"id": "db-credential-engine", "phase": "validate", "automatable": True,
|
|
40
|
+
"title": "For a DB credential, Test Connection against the chosen engine",
|
|
41
|
+
"how": "a MySQL DB credential (server-type MySQL) or a Redis credential must pass "
|
|
42
|
+
"POST /api/Credentials/test — it opens a real connection",
|
|
43
|
+
"tool": "procesio credential-test", "citation": "datastore/best-practices; PRC-3696"},
|
|
44
|
+
# B. run + instance --------------------------------------------------------
|
|
45
|
+
{"id": "run-instance", "phase": "run", "automatable": True,
|
|
46
|
+
"title": "Run the process and read the real instance status",
|
|
47
|
+
"how": "run-process --synchronous, then status 50 = finished, 40 = ran-with-errors",
|
|
48
|
+
"tool": "procesio run-process / get-instance-status",
|
|
49
|
+
"citation": "playbook B; PHASE4-E2E 6,15"},
|
|
50
|
+
{"id": "read-action-errors", "phase": "run", "automatable": True,
|
|
51
|
+
"title": "Read per-action errorMessage, do not assume success",
|
|
52
|
+
"how": "GET /api/Projects/instances/{id}/status?getActions=true",
|
|
53
|
+
"tool": "procesio get-instance-status --actions", "citation": "playbook B"},
|
|
54
|
+
{"id": "download-artifact", "phase": "run", "automatable": False,
|
|
55
|
+
"title": "Download and open any generated file",
|
|
56
|
+
"how": "GET /api/File/download with uploadFilePath/variableId/instanceId/flowTemplateId",
|
|
57
|
+
"tool": "procesio request", "citation": "playbook B"},
|
|
58
|
+
{"id": "datastore-roundtrip", "phase": "run", "automatable": True,
|
|
59
|
+
"title": "Data Store: a row round-trips (add -> filtered read -> update -> delete)",
|
|
60
|
+
"how": "add-rows then get-rows with a filter returns exactly it; update-row by PK and "
|
|
61
|
+
"delete-rows change affectedRows as expected (rows keyed by display name)",
|
|
62
|
+
"tool": "procesio datastore-*", "citation": "datastore"},
|
|
63
|
+
{"id": "schedule-cron", "phase": "run", "automatable": True,
|
|
64
|
+
"title": "Schedule: preview a cron string, then confirm the stored recurrence",
|
|
65
|
+
"how": "validate-crontab returns the expected next occurrences; create-schedule "
|
|
66
|
+
"--cron then get-schedule shows recurrence type 8 (CRON)",
|
|
67
|
+
"tool": "procesio validate-crontab / create-schedule / get-schedule",
|
|
68
|
+
"citation": "scheduling; PRC-3282"},
|
|
69
|
+
# C. forms -----------------------------------------------------------------
|
|
70
|
+
{"id": "form-render", "phase": "forms", "automatable": False,
|
|
71
|
+
"title": "Confirm the form renders (layout, theme, controls)",
|
|
72
|
+
"how": "open forms.procesio.app/... and screenshot",
|
|
73
|
+
"tool": "web", "citation": "playbook C"},
|
|
74
|
+
{"id": "form-behavior", "phase": "forms", "automatable": False,
|
|
75
|
+
"title": "Verify field value-flow in a REAL browser, not headless",
|
|
76
|
+
"how": "headless fill()/press() do NOT update the Angular form model and "
|
|
77
|
+
"RUN_JAVASCRIPT events do not fire headlessly -> false negatives",
|
|
78
|
+
"tool": "web (persistent session)", "citation": "playbook C; PHASE4-E2E 7-11,21"},
|
|
79
|
+
{"id": "form-triggers", "phase": "forms", "automatable": False,
|
|
80
|
+
"title": "Confirm RUN_PROCESS triggers ran the process and produced the artifact",
|
|
81
|
+
"how": "prefer server-side RUN_PROCESS mapping over form JS reading field values",
|
|
82
|
+
"tool": "web", "citation": "playbook C"},
|
|
83
|
+
{"id": "form-theme-render", "phase": "forms", "automatable": False,
|
|
84
|
+
"title": "Confirm the theme renders: dark mode + element alignment",
|
|
85
|
+
"how": "toggle dark mode and check the 16-var palette applies; container elements "
|
|
86
|
+
"honor their --fd/--jc/--ai alignment vars — verify in a real browser",
|
|
87
|
+
"tool": "web", "citation": "playbook C; form-styling"},
|
|
88
|
+
{"id": "form-datastore-trigger", "phase": "forms", "automatable": False,
|
|
89
|
+
"title": "Confirm a RUN_DATA_STORE_OPERATION trigger runs and the row round-trips",
|
|
90
|
+
"how": "fire the element event; the READ/ADD/UPDATE/DELETE op hits the store and the "
|
|
91
|
+
"result maps back into the form (filters apply to every op except ADD)",
|
|
92
|
+
"tool": "web + procesio datastore-get-rows", "citation": "datastore"},
|
|
93
|
+
# D. webhooks --------------------------------------------------------------
|
|
94
|
+
{"id": "webhook-trigger", "phase": "webhooks", "automatable": True,
|
|
95
|
+
"title": "Trigger the webhook and confirm an async instance runs to status 50",
|
|
96
|
+
"how": "POST the webhook endpoint with a real payload, then poll instances",
|
|
97
|
+
"tool": "procesio request / list-instances", "citation": "playbook D"},
|
|
98
|
+
{"id": "webhook-body-binding", "phase": "webhooks", "automatable": False,
|
|
99
|
+
"title": "Webhook body binds WHOLE to a model-typed variable",
|
|
100
|
+
"how": "bind the body to a primitive and you get raw JSON instead of fields",
|
|
101
|
+
"tool": "procesio agent (design check)", "citation": "playbook D; PHASE4-E2E 1"},
|
|
102
|
+
# E. end-to-end ------------------------------------------------------------
|
|
103
|
+
{"id": "e2e-flow", "phase": "e2e", "automatable": False,
|
|
104
|
+
"title": "Exercise the whole use case as a user; verify the real artifact",
|
|
105
|
+
"how": "form -> process(es) -> document/email/SQL -> system of record",
|
|
106
|
+
"tool": "web + procesio", "citation": "playbook E"},
|
|
107
|
+
{"id": "idempotency", "phase": "e2e", "automatable": False,
|
|
108
|
+
"title": "Trigger twice; confirm no duplicate side effects",
|
|
109
|
+
"how": "external IDs / dedupe keys make a retry or double-trigger safe",
|
|
110
|
+
"tool": "", "citation": "best-practices 2"},
|
|
111
|
+
{"id": "ux-timing", "phase": "e2e", "automatable": False,
|
|
112
|
+
"title": "Check forms UX timing (1s / 3s rules)",
|
|
113
|
+
"how": ">=90% of clicks under 1s, <=10% in 1-3s, none ever over 3s",
|
|
114
|
+
"tool": "web", "citation": "best-practices 9"},
|
|
115
|
+
{"id": "speed", "phase": "e2e", "automatable": True,
|
|
116
|
+
"title": "Check optimize-for-speed (action count, slow actions)",
|
|
117
|
+
"how": "~10ms per action; reduce count; minimize Call API/SQL/FTP/Decisional",
|
|
118
|
+
"tool": "procesio agent (audit)", "citation": "best-practices 10"},
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
PHASES = ["validate", "run", "forms", "webhooks", "e2e"]
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def steps(phase: str | None = None, automatable_only: bool = False) -> list[dict]:
|
|
125
|
+
out = STEPS
|
|
126
|
+
if phase:
|
|
127
|
+
out = [s for s in out if s["phase"] == phase]
|
|
128
|
+
if automatable_only:
|
|
129
|
+
out = [s for s in out if s["automatable"]]
|
|
130
|
+
return [dict(s) for s in out]
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def manual_steps() -> list[dict]:
|
|
134
|
+
"""Steps `verify` cannot run - a human/LLM must do them by hand."""
|
|
135
|
+
return [dict(s) for s in STEPS if not s["automatable"]]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Runtime context for the PROCESIO agent.
|
|
2
|
+
|
|
3
|
+
Unlike the outreach agent there is no state backend - the PROCESIO agent is
|
|
4
|
+
stateless. The only thing context-actions need is a tool invoker (so they can
|
|
5
|
+
drive the `procesio` tool), which tests replace with a fake. No secret of its
|
|
6
|
+
own; readiness comes from the tools it drives.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from agents._lib import toolrunner
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ProcesioContext:
|
|
14
|
+
def __init__(self, invoke=None):
|
|
15
|
+
self.invoke = invoke or toolrunner.invoke
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def create(cls, invoke=None) -> "ProcesioContext":
|
|
19
|
+
return cls(invoke=invoke)
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""audit action - static best-practice analysis of a process (no run). Surfaces
|
|
2
|
+
the inefficiency / UX / robustness smells so they get addressed: action count,
|
|
3
|
+
slow actions, missing error handling, missing description, possible inline secret,
|
|
4
|
+
plus the designer-vs-runtime parity correctness findings.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
|
|
10
|
+
from agents._lib.actiondef import ActionDef
|
|
11
|
+
from agents.procesio import audit as auditlib
|
|
12
|
+
from agents.procesio import verifylib
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _audit(ctx, args) -> dict:
|
|
16
|
+
scope = verifylib.scope_args(args.profile, args.workspace_id)
|
|
17
|
+
flow = verifylib._flow_from(
|
|
18
|
+
ctx.invoke("procesio", "get-process", "--id", args.process_id, *scope))
|
|
19
|
+
report = auditlib.audit_process(flow)
|
|
20
|
+
report["process_id"] = args.process_id
|
|
21
|
+
return report
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _args(p: argparse.ArgumentParser) -> None:
|
|
25
|
+
p.add_argument("--process-id", dest="process_id", required=True,
|
|
26
|
+
help="process (project) id to audit")
|
|
27
|
+
p.add_argument("--profile", help="procesio credential profile to use")
|
|
28
|
+
p.add_argument("--workspace-id", dest="workspace_id",
|
|
29
|
+
help="workspace GUID the process lives in (required whenever it "
|
|
30
|
+
"is not the profile's default workspace)")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
ACTIONS = {
|
|
34
|
+
"audit": ActionDef(
|
|
35
|
+
func=_audit, context=True, add_args=_args,
|
|
36
|
+
description="Static best-practice + correctness audit of a process "
|
|
37
|
+
"(action count, slow actions, error handling, inline secrets, "
|
|
38
|
+
"designer-vs-runtime parity)."),
|
|
39
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""checklist action - emit the self-test checklist as structured steps. The single
|
|
2
|
+
source `verify` runs and any session follows, so a test layer cannot be skipped
|
|
3
|
+
by forgetting it exists.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
|
|
9
|
+
from agents._lib.actiondef import ActionDef
|
|
10
|
+
from agents.procesio import checklist as cl
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _checklist(args) -> dict:
|
|
14
|
+
steps = cl.steps(phase=args.phase, automatable_only=args.automatable_only)
|
|
15
|
+
return {
|
|
16
|
+
"phases": cl.PHASES,
|
|
17
|
+
"count": len(steps),
|
|
18
|
+
"steps": steps,
|
|
19
|
+
"manual_steps": [s["id"] for s in cl.manual_steps()],
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _args(p: argparse.ArgumentParser) -> None:
|
|
24
|
+
p.add_argument("--phase", help="filter to one phase: " + " | ".join(cl.PHASES))
|
|
25
|
+
p.add_argument("--automatable-only", dest="automatable_only",
|
|
26
|
+
action="store_true", help="only steps `verify` can run")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
ACTIONS = {
|
|
30
|
+
"checklist": ActionDef(
|
|
31
|
+
func=_checklist, add_args=_args,
|
|
32
|
+
description="Emit the rigorous self-test checklist (structured). "
|
|
33
|
+
"--phase to filter, --automatable-only for verify-runnable steps."),
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""guidance action - serve the agent's knowledge base (the build-and-test
|
|
2
|
+
playbook, best practices, and the tool-vs-agent boundary) from one
|
|
3
|
+
registry-discoverable place. The methodology is loaded, never re-derived.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
|
|
9
|
+
from agents._lib.actiondef import ActionDef
|
|
10
|
+
from agents._lib.errors import AgentError
|
|
11
|
+
from agents.procesio import knowledge
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _guidance(args) -> dict:
|
|
15
|
+
if args.topic == "all":
|
|
16
|
+
return {"topics": knowledge.topics(), "sections": knowledge.load_all()}
|
|
17
|
+
try:
|
|
18
|
+
return knowledge.load(args.topic)
|
|
19
|
+
except (KeyError, FileNotFoundError) as e:
|
|
20
|
+
raise AgentError("unknown_topic", str(e),
|
|
21
|
+
{"known": knowledge.topics() + ["all"]})
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _args(p: argparse.ArgumentParser) -> None:
|
|
25
|
+
p.add_argument("--topic", default="all",
|
|
26
|
+
help="playbook | best-practices | visual-organization | datastore | "
|
|
27
|
+
"scheduling | environments | boundary | all (default all)")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
ACTIONS = {
|
|
31
|
+
"guidance": ActionDef(
|
|
32
|
+
func=_guidance, add_args=_args,
|
|
33
|
+
description="Serve the build-and-test playbook + best practices (the agent's "
|
|
34
|
+
"knowledge base). --topic playbook|best-practices|"
|
|
35
|
+
"visual-organization|boundary|all."),
|
|
36
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""status action - report the PROCESIO agent's readiness and that of the tools it
|
|
2
|
+
drives. Pure introspection: reads the registry, no network, no secrets needed.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from agents._lib.actiondef import ActionDef
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _status(_args) -> dict:
|
|
10
|
+
from registry import list_agents
|
|
11
|
+
|
|
12
|
+
me = next((a for a in list_agents() if a.get("name") == "procesio"), None)
|
|
13
|
+
if me is None:
|
|
14
|
+
return {"agent": "procesio", "found": False,
|
|
15
|
+
"note": "agent.yaml not discovered by the registry"}
|
|
16
|
+
tools = me.get("tool_status", {})
|
|
17
|
+
return {
|
|
18
|
+
"agent": "procesio",
|
|
19
|
+
"found": True,
|
|
20
|
+
"version": me.get("version"),
|
|
21
|
+
"ready": me.get("ready", False),
|
|
22
|
+
"missing_secrets": me.get("missing_secrets", []),
|
|
23
|
+
"tools_ready": sorted(n for n, s in tools.items() if s.get("ready")),
|
|
24
|
+
"tools_unready": {n: s for n, s in tools.items() if not s.get("ready")},
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
ACTIONS = {
|
|
29
|
+
"status": ActionDef(
|
|
30
|
+
func=_status,
|
|
31
|
+
description="Report agent + driven-tool readiness (presence + secrets).",
|
|
32
|
+
),
|
|
33
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""verify action - run the automatable self-test steps against a live process and
|
|
2
|
+
return a pass/fail report. The enforcement gate: it validates, audits config
|
|
3
|
+
parity, and (with --run) runs the process and reads the real instance status.
|
|
4
|
+
Manual steps it cannot run are listed so they are not silently skipped.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
|
|
10
|
+
from agents._lib.actiondef import ActionDef
|
|
11
|
+
from agents.procesio import verifylib
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _verify(ctx, args) -> dict:
|
|
15
|
+
return verifylib.verify_process(
|
|
16
|
+
ctx.invoke, args.process_id, profile=args.profile,
|
|
17
|
+
workspace_id=args.workspace_id,
|
|
18
|
+
run=args.run, payload=args.payload, timeout=args.timeout)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _args(p: argparse.ArgumentParser) -> None:
|
|
22
|
+
p.add_argument("--process-id", dest="process_id", required=True,
|
|
23
|
+
help="process (project) id to verify")
|
|
24
|
+
p.add_argument("--run", action="store_true",
|
|
25
|
+
help="actually run the process and read the instance status")
|
|
26
|
+
p.add_argument("--payload", help="input variables as a JSON object (with --run)")
|
|
27
|
+
p.add_argument("--timeout", type=int, help="secondsTimeOut for the synchronous run")
|
|
28
|
+
p.add_argument("--profile", help="procesio credential profile to use")
|
|
29
|
+
p.add_argument("--workspace-id", dest="workspace_id",
|
|
30
|
+
help="workspace GUID the process lives in (required whenever it "
|
|
31
|
+
"is not the profile's default workspace)")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
ACTIONS = {
|
|
35
|
+
"verify": ActionDef(
|
|
36
|
+
func=_verify, context=True, add_args=_args,
|
|
37
|
+
description="Run the automatable self-test gate against a process (validate, "
|
|
38
|
+
"config-parity audit, and with --run execute + read instance status)."),
|
|
39
|
+
}
|