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,74 @@
|
|
|
1
|
+
"""Auth / identity actions: connectivity, current user, API-key + LLM-key mgmt."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
|
|
6
|
+
from actiondef import ActionDef
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def check(client, args) -> dict:
|
|
10
|
+
"""Connectivity + auth probe via GET /auth/me."""
|
|
11
|
+
me = client.get("/auth/me")
|
|
12
|
+
return {"ok": True, "email": me.get("email"), "role": me.get("role"),
|
|
13
|
+
"has_llm_key": me.get("has_llm_key"), "base_url": client.base_url}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def whoami(client, args) -> dict:
|
|
17
|
+
"""Full GET /auth/me for the authenticated principal."""
|
|
18
|
+
return client.get("/auth/me")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def list_api_keys(client, args) -> dict:
|
|
22
|
+
keys = client.get("/auth/api-keys")
|
|
23
|
+
return {"api_keys": keys, "count": len(keys) if isinstance(keys, list) else None}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def create_api_key(client, args) -> dict:
|
|
27
|
+
"""POST /auth/api-keys — returns full_key ONCE (store it immediately)."""
|
|
28
|
+
return client.post("/auth/api-keys", {"name": args.name})
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def revoke_api_key(client, args) -> dict:
|
|
32
|
+
return client.delete(f"/auth/api-keys/{args.id}")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def set_llm_key(client, args) -> dict:
|
|
36
|
+
"""POST /auth/llm-key — set the LLM provider key used to power builds."""
|
|
37
|
+
return client.post("/auth/llm-key",
|
|
38
|
+
{"api_key": args.api_key, "provider": args.provider})
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def delete_llm_key(client, args) -> dict:
|
|
42
|
+
return client.delete("/auth/llm-key")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _create_api_key_args(p: argparse.ArgumentParser) -> None:
|
|
46
|
+
p.add_argument("--name", required=True, help="Label for the new API key")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _revoke_api_key_args(p: argparse.ArgumentParser) -> None:
|
|
50
|
+
p.add_argument("--id", required=True, help="API key id to revoke")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _set_llm_key_args(p: argparse.ArgumentParser) -> None:
|
|
54
|
+
p.add_argument("--api-key", dest="api_key", required=True,
|
|
55
|
+
help="LLM provider API key (e.g. sk-ant-... / sk-...)")
|
|
56
|
+
p.add_argument("--provider", required=True,
|
|
57
|
+
help="Provider id, e.g. anthropic | openai")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
ACTIONS: dict[str, ActionDef] = {
|
|
61
|
+
"check": ActionDef(check, description="Connectivity + auth probe (GET /auth/me)."),
|
|
62
|
+
"whoami": ActionDef(whoami, description="Full current-user record (GET /auth/me)."),
|
|
63
|
+
"list-api-keys": ActionDef(list_api_keys, description="List your API keys."),
|
|
64
|
+
"create-api-key": ActionDef(
|
|
65
|
+
create_api_key, _create_api_key_args,
|
|
66
|
+
description="Create an API key (full_key shown only once)."),
|
|
67
|
+
"revoke-api-key": ActionDef(
|
|
68
|
+
revoke_api_key, _revoke_api_key_args, description="Revoke an API key by id."),
|
|
69
|
+
"set-llm-key": ActionDef(
|
|
70
|
+
set_llm_key, _set_llm_key_args,
|
|
71
|
+
description="Set the LLM provider key that powers builds."),
|
|
72
|
+
"delete-llm-key": ActionDef(
|
|
73
|
+
delete_llm_key, description="Remove the stored LLM provider key."),
|
|
74
|
+
}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"""Build lifecycle actions — the heart of the connector pipeline.
|
|
2
|
+
|
|
3
|
+
Stage flow (documentation/04-PIPELINE-ENGINE.md):
|
|
4
|
+
create -> gather (GATHER+CLARIFY) -> answer (->PLAN) -> approve-plan (->GENERATE,
|
|
5
|
+
pauses) -> approve-generate (->VALIDATE/COMPILE/FIX/DELIVER) -> artifact (.nupkg).
|
|
6
|
+
Feedback loops: revise-plan, regenerate / regenerate-file, validate-*, retry,
|
|
7
|
+
override-stage, post-message.
|
|
8
|
+
"""
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
|
|
13
|
+
from actiondef import ActionDef
|
|
14
|
+
from client import build_is_settled
|
|
15
|
+
from errors import UsageError
|
|
16
|
+
from handlers.common import (add_build_id, add_pagination, add_wait_args,
|
|
17
|
+
parse_json, run_with_optional_wait)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# --------------------------------------------------------------------------- #
|
|
21
|
+
# Read / list
|
|
22
|
+
# --------------------------------------------------------------------------- #
|
|
23
|
+
|
|
24
|
+
def list_builds(client, args) -> dict:
|
|
25
|
+
params = {"page": args.page, "per_page": args.per_page}
|
|
26
|
+
if args.status:
|
|
27
|
+
params["status"] = args.status
|
|
28
|
+
if args.archive_status:
|
|
29
|
+
params["archive_status"] = args.archive_status
|
|
30
|
+
if args.created_by:
|
|
31
|
+
params["created_by"] = args.created_by
|
|
32
|
+
return client.get("/builds", params)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_build(client, args) -> dict:
|
|
36
|
+
return client.get(f"/builds/{args.build_id}")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def stage_override_options(client, args) -> dict:
|
|
40
|
+
return client.get("/builds/stage-override-options")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# --------------------------------------------------------------------------- #
|
|
44
|
+
# Create + run
|
|
45
|
+
# --------------------------------------------------------------------------- #
|
|
46
|
+
|
|
47
|
+
def create_build(client, args) -> dict:
|
|
48
|
+
body: dict = {}
|
|
49
|
+
if args.api_url:
|
|
50
|
+
body["api_url"] = args.api_url
|
|
51
|
+
if args.api_urls:
|
|
52
|
+
body["api_urls"] = parse_json(args.api_urls, what="api-urls", expect=list)
|
|
53
|
+
if args.api_docs_text:
|
|
54
|
+
body["api_docs_text"] = args.api_docs_text
|
|
55
|
+
if args.user_requirements:
|
|
56
|
+
body["user_requirements"] = args.user_requirements
|
|
57
|
+
if not (body.get("api_url") or body.get("api_urls") or body.get("api_docs_text")):
|
|
58
|
+
raise UsageError("provide at least one of --api-url / --api-urls / --api-docs-text")
|
|
59
|
+
return client.post("/builds", body)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def start_build(client, args) -> dict:
|
|
63
|
+
"""Launch the FULL pipeline as a background task (no per-stage pauses)."""
|
|
64
|
+
return client.post(f"/builds/{args.build_id}/start")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def gather(client, args) -> dict:
|
|
68
|
+
"""Run GATHER + CLARIFY synchronously; returns api_profile + questions.
|
|
69
|
+
With --wait, survives the proxy 504 by polling to the clarify pause."""
|
|
70
|
+
return run_with_optional_wait(
|
|
71
|
+
client, args.build_id,
|
|
72
|
+
lambda: client.post(f"/builds/{args.build_id}/gather"), args)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def answer(client, args) -> dict:
|
|
76
|
+
"""Submit clarification answers; triggers PLAN. With --wait, polls to the
|
|
77
|
+
plan-review pause (survives the proxy 504)."""
|
|
78
|
+
answers = parse_json(args.answers, what="answers", expect=dict) or {}
|
|
79
|
+
return run_with_optional_wait(
|
|
80
|
+
client, args.build_id,
|
|
81
|
+
lambda: client.post(f"/builds/{args.build_id}/answers", {"answers": answers}),
|
|
82
|
+
args)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def approve_plan(client, args) -> dict:
|
|
86
|
+
"""Approve the plan; triggers GENERATE (pauses after generation)."""
|
|
87
|
+
return client.post(f"/builds/{args.build_id}/approve")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def revise_plan(client, args) -> dict:
|
|
91
|
+
"""Send free-text feedback to revise the implementation plan. With --wait,
|
|
92
|
+
polls back to the plan-review pause (survives the proxy 504)."""
|
|
93
|
+
return run_with_optional_wait(
|
|
94
|
+
client, args.build_id,
|
|
95
|
+
lambda: client.post(f"/builds/{args.build_id}/revise-plan",
|
|
96
|
+
{"feedback": args.feedback}), args)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def wait_build(client, args) -> dict:
|
|
100
|
+
"""Poll get-build until the build settles (waiting_user or terminal), or
|
|
101
|
+
only-terminal with --until terminal. Use after approve-generate/retry/
|
|
102
|
+
start-build to block until compile finishes."""
|
|
103
|
+
build = client.wait_for_settled(
|
|
104
|
+
args.build_id, timeout=args.wait_timeout, interval=args.poll_interval,
|
|
105
|
+
until=args.until)
|
|
106
|
+
out = dict(build)
|
|
107
|
+
out["waited"] = True
|
|
108
|
+
out["settled"] = build_is_settled(build, args.until)
|
|
109
|
+
return out
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def approve_generate(client, args) -> dict:
|
|
113
|
+
"""Accept generated files; triggers VALIDATE -> COMPILE -> FIX -> DELIVER."""
|
|
114
|
+
return client.post(f"/builds/{args.build_id}/generate/approve")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def regenerate(client, args) -> dict:
|
|
118
|
+
"""Regenerate with per-file and/or general instructions."""
|
|
119
|
+
body: dict = {}
|
|
120
|
+
if args.file_instructions:
|
|
121
|
+
body["file_instructions"] = parse_json(
|
|
122
|
+
args.file_instructions, what="file-instructions", expect=dict)
|
|
123
|
+
if args.step_instructions:
|
|
124
|
+
body["step_instructions"] = args.step_instructions
|
|
125
|
+
return client.post(f"/builds/{args.build_id}/generate/regenerate", body)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def regenerate_file(client, args) -> dict:
|
|
129
|
+
return client.post(
|
|
130
|
+
f"/builds/{args.build_id}/generate/regenerate-file",
|
|
131
|
+
{"filename": args.filename, "instructions": args.instructions})
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def validate_autofix(client, args) -> dict:
|
|
135
|
+
return client.post(f"/builds/{args.build_id}/validate/autofix")
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def validate_continue(client, args) -> dict:
|
|
139
|
+
return client.post(f"/builds/{args.build_id}/validate/continue")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def validate_return_to_generate(client, args) -> dict:
|
|
143
|
+
return client.post(f"/builds/{args.build_id}/validate/return-to-generate")
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def retry(client, args) -> dict:
|
|
147
|
+
body: dict = {}
|
|
148
|
+
if args.from_step is not None:
|
|
149
|
+
body["from_step"] = args.from_step
|
|
150
|
+
return client.post(f"/builds/{args.build_id}/retry", body)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def override_stage(client, args) -> dict:
|
|
154
|
+
return client.post(
|
|
155
|
+
f"/builds/{args.build_id}/override-stage",
|
|
156
|
+
{"target_step": args.target_step, "target_status": args.target_status})
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def reset(client, args) -> dict:
|
|
160
|
+
return client.post(f"/builds/{args.build_id}/reset")
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def revise(client, args) -> dict:
|
|
164
|
+
return client.post(f"/builds/{args.build_id}/revise")
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def set_version(client, args) -> dict:
|
|
168
|
+
return client.patch(
|
|
169
|
+
f"/builds/{args.build_id}/version",
|
|
170
|
+
{"major": args.major, "minor": args.minor, "patch": args.patch})
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def archive(client, args) -> dict:
|
|
174
|
+
return client.patch(f"/builds/{args.build_id}/archive")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def unarchive(client, args) -> dict:
|
|
178
|
+
return client.patch(f"/builds/{args.build_id}/unarchive")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
# --------------------------------------------------------------------------- #
|
|
182
|
+
# Logs / events / messages
|
|
183
|
+
# --------------------------------------------------------------------------- #
|
|
184
|
+
|
|
185
|
+
def logs(client, args) -> dict:
|
|
186
|
+
params = {"page": args.page, "page_size": args.page_size}
|
|
187
|
+
for f in ("stage", "model", "model_search", "after", "before"):
|
|
188
|
+
v = getattr(args, f)
|
|
189
|
+
if v:
|
|
190
|
+
params[f] = v
|
|
191
|
+
if args.success is not None:
|
|
192
|
+
params["success"] = str(args.success).lower()
|
|
193
|
+
return client.get(f"/builds/{args.build_id}/logs", params)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def events(client, args) -> dict:
|
|
197
|
+
params = {"page": args.page, "per_page": args.per_page}
|
|
198
|
+
for f in ("step", "level", "event_type"):
|
|
199
|
+
v = getattr(args, f)
|
|
200
|
+
if v:
|
|
201
|
+
params[f] = v
|
|
202
|
+
return client.get(f"/builds/{args.build_id}/events", params)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def list_messages(client, args) -> dict:
|
|
206
|
+
params = {"page": args.page, "per_page": args.per_page}
|
|
207
|
+
if args.step:
|
|
208
|
+
params["step"] = args.step
|
|
209
|
+
return client.get(f"/builds/{args.build_id}/messages", params)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def post_message(client, args) -> dict:
|
|
213
|
+
return client.post(f"/builds/{args.build_id}/messages",
|
|
214
|
+
{"step": args.step, "content": args.content})
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
# --------------------------------------------------------------------------- #
|
|
218
|
+
# argparse
|
|
219
|
+
# --------------------------------------------------------------------------- #
|
|
220
|
+
|
|
221
|
+
def _list_builds_args(p: argparse.ArgumentParser) -> None:
|
|
222
|
+
add_pagination(p)
|
|
223
|
+
p.add_argument("--status", help="Filter by pipeline status")
|
|
224
|
+
p.add_argument("--archive-status", dest="archive_status",
|
|
225
|
+
help="active | archived | all")
|
|
226
|
+
p.add_argument("--created-by", dest="created_by",
|
|
227
|
+
help="UUID CSV (admin only)")
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def _create_build_args(p: argparse.ArgumentParser) -> None:
|
|
231
|
+
p.add_argument("--api-url", dest="api_url", help="Single API docs URL")
|
|
232
|
+
p.add_argument("--api-urls", dest="api_urls", help="JSON array of doc URLs")
|
|
233
|
+
p.add_argument("--api-docs-text", dest="api_docs_text",
|
|
234
|
+
help="Pasted API documentation text")
|
|
235
|
+
p.add_argument("--user-requirements", dest="user_requirements",
|
|
236
|
+
help="What the connector should do")
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def _gather_args(p: argparse.ArgumentParser) -> None:
|
|
240
|
+
add_build_id(p)
|
|
241
|
+
add_wait_args(p)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def _answer_args(p: argparse.ArgumentParser) -> None:
|
|
245
|
+
add_build_id(p)
|
|
246
|
+
p.add_argument("--answers", required=True,
|
|
247
|
+
help='JSON object {"q1":"a1","q2":"a2"}')
|
|
248
|
+
add_wait_args(p)
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def _revise_plan_args(p: argparse.ArgumentParser) -> None:
|
|
252
|
+
add_build_id(p)
|
|
253
|
+
p.add_argument("--feedback", required=True, help="Plan revision feedback")
|
|
254
|
+
add_wait_args(p)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def _wait_build_args(p: argparse.ArgumentParser) -> None:
|
|
258
|
+
add_build_id(p)
|
|
259
|
+
p.add_argument("--wait-timeout", dest="wait_timeout", type=int, default=600,
|
|
260
|
+
help="Max seconds to poll (default 600)")
|
|
261
|
+
p.add_argument("--poll-interval", dest="poll_interval", type=int, default=8,
|
|
262
|
+
help="Seconds between polls (default 8)")
|
|
263
|
+
p.add_argument("--until", default="settled",
|
|
264
|
+
help="settled (waiting_user or terminal) | terminal (only completed/failed/...)")
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def _regenerate_args(p: argparse.ArgumentParser) -> None:
|
|
268
|
+
add_build_id(p)
|
|
269
|
+
p.add_argument("--file-instructions", dest="file_instructions",
|
|
270
|
+
help='JSON object {"File.cs":"instructions"}')
|
|
271
|
+
p.add_argument("--step-instructions", dest="step_instructions",
|
|
272
|
+
help="General feedback for the whole generation step")
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def _regenerate_file_args(p: argparse.ArgumentParser) -> None:
|
|
276
|
+
add_build_id(p)
|
|
277
|
+
p.add_argument("--filename", required=True, help="File to regenerate")
|
|
278
|
+
p.add_argument("--instructions", required=True, help="Instructions for the file")
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def _retry_args(p: argparse.ArgumentParser) -> None:
|
|
282
|
+
add_build_id(p)
|
|
283
|
+
p.add_argument("--from-step", dest="from_step", type=int,
|
|
284
|
+
help="Stage number to retry from (default: last failed)")
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _override_stage_args(p: argparse.ArgumentParser) -> None:
|
|
288
|
+
add_build_id(p)
|
|
289
|
+
p.add_argument("--target-step", dest="target_step", type=int, required=True,
|
|
290
|
+
help="Target stage 1-8")
|
|
291
|
+
p.add_argument("--target-status", dest="target_status", required=True,
|
|
292
|
+
help="running | waiting_user")
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def _set_version_args(p: argparse.ArgumentParser) -> None:
|
|
296
|
+
add_build_id(p)
|
|
297
|
+
p.add_argument("--major", type=int, required=True)
|
|
298
|
+
p.add_argument("--minor", type=int, required=True)
|
|
299
|
+
p.add_argument("--patch", type=int, required=True)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def _post_message_args(p: argparse.ArgumentParser) -> None:
|
|
303
|
+
add_build_id(p)
|
|
304
|
+
p.add_argument("--step", required=True, help="Pipeline step, e.g. clarify | plan")
|
|
305
|
+
p.add_argument("--content", required=True, help="Message text")
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def _logs_args(p: argparse.ArgumentParser) -> None:
|
|
309
|
+
add_build_id(p)
|
|
310
|
+
p.add_argument("--page", type=int, default=1)
|
|
311
|
+
p.add_argument("--page-size", dest="page_size", type=int, default=100,
|
|
312
|
+
help="Max 500")
|
|
313
|
+
p.add_argument("--stage", help="Comma-separated stage names")
|
|
314
|
+
p.add_argument("--success", type=lambda v: v.lower() in ("1", "true", "yes"),
|
|
315
|
+
default=None, help="Filter by success true/false")
|
|
316
|
+
p.add_argument("--model", help="Comma-separated model names")
|
|
317
|
+
p.add_argument("--model-search", dest="model_search", help="Substring model search")
|
|
318
|
+
p.add_argument("--after", help="ISO datetime lower bound")
|
|
319
|
+
p.add_argument("--before", help="ISO datetime upper bound")
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def _events_args(p: argparse.ArgumentParser) -> None:
|
|
323
|
+
add_build_id(p)
|
|
324
|
+
add_pagination(p, 100)
|
|
325
|
+
p.add_argument("--step", help="Filter by step")
|
|
326
|
+
p.add_argument("--level", help="Filter by level")
|
|
327
|
+
p.add_argument("--event-type", dest="event_type", help="Filter by event type")
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def _messages_args(p: argparse.ArgumentParser) -> None:
|
|
331
|
+
add_build_id(p)
|
|
332
|
+
add_pagination(p, 100)
|
|
333
|
+
p.add_argument("--step", help="Filter by step")
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def _build_id_only(p: argparse.ArgumentParser) -> None:
|
|
337
|
+
add_build_id(p)
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
ACTIONS: dict[str, ActionDef] = {
|
|
341
|
+
"list-builds": ActionDef(list_builds, _list_builds_args,
|
|
342
|
+
description="List builds (paginated, filterable)."),
|
|
343
|
+
"get-build": ActionDef(get_build, _build_id_only,
|
|
344
|
+
description="Full build detail (all JSONB fields)."),
|
|
345
|
+
"stage-override-options": ActionDef(
|
|
346
|
+
stage_override_options,
|
|
347
|
+
description="Valid stage-override targets for override-stage."),
|
|
348
|
+
"create-build": ActionDef(create_build, _create_build_args,
|
|
349
|
+
description="Create a build from URL(s) / pasted docs."),
|
|
350
|
+
"start-build": ActionDef(start_build, _build_id_only,
|
|
351
|
+
description="Run the FULL pipeline as a background task."),
|
|
352
|
+
"gather": ActionDef(gather, _gather_args,
|
|
353
|
+
description="Run GATHER+CLARIFY (profile+questions); --wait survives the 504."),
|
|
354
|
+
"wait-build": ActionDef(wait_build, _wait_build_args,
|
|
355
|
+
description="Poll get-build until settled/terminal (use after approve-generate/retry)."),
|
|
356
|
+
"answer": ActionDef(answer, _answer_args,
|
|
357
|
+
description="Submit clarification answers; triggers PLAN."),
|
|
358
|
+
"approve-plan": ActionDef(approve_plan, _build_id_only,
|
|
359
|
+
description="Approve plan; triggers GENERATE (then pauses)."),
|
|
360
|
+
"revise-plan": ActionDef(revise_plan, _revise_plan_args,
|
|
361
|
+
description="Revise the plan with free-text feedback."),
|
|
362
|
+
"approve-generate": ActionDef(
|
|
363
|
+
approve_generate, _build_id_only,
|
|
364
|
+
description="Accept generated files; runs VALIDATE->COMPILE->FIX->DELIVER."),
|
|
365
|
+
"regenerate": ActionDef(regenerate, _regenerate_args,
|
|
366
|
+
description="Regenerate files with per-file/general instructions."),
|
|
367
|
+
"regenerate-file": ActionDef(regenerate_file, _regenerate_file_args,
|
|
368
|
+
description="Regenerate a single file with instructions."),
|
|
369
|
+
"validate-autofix": ActionDef(validate_autofix, _build_id_only,
|
|
370
|
+
description="Auto-fix validation findings."),
|
|
371
|
+
"validate-continue": ActionDef(validate_continue, _build_id_only,
|
|
372
|
+
description="Continue past validation to COMPILE."),
|
|
373
|
+
"validate-return-to-generate": ActionDef(
|
|
374
|
+
validate_return_to_generate, _build_id_only,
|
|
375
|
+
description="Return from VALIDATE back to GENERATE."),
|
|
376
|
+
"retry": ActionDef(retry, _retry_args,
|
|
377
|
+
description="Retry the pipeline from a step (or last failed)."),
|
|
378
|
+
"override-stage": ActionDef(override_stage, _override_stage_args,
|
|
379
|
+
description="Jump the build to a target step/status."),
|
|
380
|
+
"reset": ActionDef(reset, _build_id_only,
|
|
381
|
+
description="Reset a failed/clarifying/planning build to pending."),
|
|
382
|
+
"revise": ActionDef(revise, _build_id_only,
|
|
383
|
+
description="Re-open a COMPLETED build to the generate pause for a small fix (then regenerate-file + approve-generate); bumps the version."),
|
|
384
|
+
"set-version": ActionDef(set_version, _set_version_args,
|
|
385
|
+
description="Set Major.Minor.Patch (at Plan/waiting_user)."),
|
|
386
|
+
"archive": ActionDef(archive, _build_id_only, description="Archive a build (admin)."),
|
|
387
|
+
"unarchive": ActionDef(unarchive, _build_id_only,
|
|
388
|
+
description="Unarchive a build (admin)."),
|
|
389
|
+
"logs": ActionDef(logs, _logs_args,
|
|
390
|
+
description="Per-build stage logs (model/cost/token breakdown)."),
|
|
391
|
+
"events": ActionDef(events, _events_args, description="Per-build pipeline events."),
|
|
392
|
+
"list-messages": ActionDef(list_messages, _messages_args,
|
|
393
|
+
description="Chat/system messages for a build."),
|
|
394
|
+
"post-message": ActionDef(post_message, _post_message_args,
|
|
395
|
+
description="Post a chat message to a build/step."),
|
|
396
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Shared argparse + JSON-parsing helpers for connector-builder handlers."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any, Callable
|
|
8
|
+
|
|
9
|
+
import requests
|
|
10
|
+
|
|
11
|
+
from client import build_is_settled
|
|
12
|
+
from errors import ApiError, UsageError
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def parse_json(raw: str | None, *, what: str = "value", expect: type | None = None) -> Any:
|
|
16
|
+
"""Parse a JSON CLI argument; raise UsageError with a helpful message."""
|
|
17
|
+
if raw is None:
|
|
18
|
+
return None
|
|
19
|
+
try:
|
|
20
|
+
data = json.loads(raw)
|
|
21
|
+
except json.JSONDecodeError as e:
|
|
22
|
+
raise UsageError(f"--{what} must be valid JSON, got: {e}") from e
|
|
23
|
+
if expect is not None and not isinstance(data, expect):
|
|
24
|
+
names = expect.__name__ if isinstance(expect, type) else " or ".join(
|
|
25
|
+
t.__name__ for t in expect)
|
|
26
|
+
raise UsageError(f"--{what} must be a JSON {names}")
|
|
27
|
+
return data
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def load_text_or_file(inline: str | None, file_path: str | None, *, what: str) -> str | None:
|
|
31
|
+
"""Return inline text, or read it from a file (file wins precedence check is
|
|
32
|
+
XOR-ish: at most one). Used for content / config payloads that may be large."""
|
|
33
|
+
if inline is not None and file_path is not None:
|
|
34
|
+
raise UsageError(f"pass either --{what} or --{what}-file, not both")
|
|
35
|
+
if file_path is not None:
|
|
36
|
+
p = Path(file_path)
|
|
37
|
+
if not p.is_file():
|
|
38
|
+
raise UsageError(f"--{what}-file not found: {file_path}")
|
|
39
|
+
return p.read_text(encoding="utf-8")
|
|
40
|
+
return inline
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def add_build_id(p: argparse.ArgumentParser) -> None:
|
|
44
|
+
p.add_argument("--build-id", dest="build_id", required=True,
|
|
45
|
+
help="Build UUID")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def add_pagination(p: argparse.ArgumentParser, default_per_page: int = 20) -> None:
|
|
49
|
+
p.add_argument("--page", type=int, default=1, help="Page number (default 1)")
|
|
50
|
+
p.add_argument("--per-page", dest="per_page", type=int, default=default_per_page,
|
|
51
|
+
help=f"Items per page (default {default_per_page})")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def add_wait_args(p: argparse.ArgumentParser) -> None:
|
|
55
|
+
"""Opt-in polling for a synchronous LLM stage that 504s at the proxy but
|
|
56
|
+
completes server-side."""
|
|
57
|
+
p.add_argument("--wait", action="store_true",
|
|
58
|
+
help="Poll get-build until the stage settles (survives the proxy 504)")
|
|
59
|
+
p.add_argument("--wait-timeout", dest="wait_timeout", type=int, default=600,
|
|
60
|
+
help="Max seconds to poll when --wait (default 600)")
|
|
61
|
+
p.add_argument("--poll-interval", dest="poll_interval", type=int, default=8,
|
|
62
|
+
help="Seconds between polls when --wait (default 8)")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# Proxy/gateway statuses that mean "the backend is still working" rather than a
|
|
66
|
+
# real failure — swallow these under --wait and fall through to polling.
|
|
67
|
+
_TRANSIENT_HTTP = {502, 503, 504}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def run_with_optional_wait(client, build_id: str, trigger: Callable[[], Any],
|
|
71
|
+
args, *, until: str = "settled") -> dict:
|
|
72
|
+
"""Run a stage-triggering call. Without --wait, return its result verbatim.
|
|
73
|
+
With --wait: record the build's updated_at, fire the trigger (swallowing a
|
|
74
|
+
502/503/504 or a client-side timeout — the stage keeps running server-side),
|
|
75
|
+
then poll get-build until settled. Returns the settled build detail plus
|
|
76
|
+
``waited``/``settled`` markers (and ``trigger_note`` if the trigger 504'd)."""
|
|
77
|
+
if not getattr(args, "wait", False):
|
|
78
|
+
return trigger()
|
|
79
|
+
|
|
80
|
+
baseline = None
|
|
81
|
+
try:
|
|
82
|
+
baseline = client.get_build(build_id).get("updated_at")
|
|
83
|
+
except Exception: # noqa: BLE001 - baseline is best-effort
|
|
84
|
+
baseline = None
|
|
85
|
+
|
|
86
|
+
note = None
|
|
87
|
+
try:
|
|
88
|
+
trigger()
|
|
89
|
+
except ApiError as e:
|
|
90
|
+
if e.status_code not in _TRANSIENT_HTTP:
|
|
91
|
+
raise
|
|
92
|
+
note = f"trigger returned HTTP {e.status_code}; polled for completion"
|
|
93
|
+
except (requests.exceptions.Timeout, requests.exceptions.ConnectionError):
|
|
94
|
+
note = "trigger timed out client-side; polled for completion"
|
|
95
|
+
|
|
96
|
+
build = client.wait_for_settled(
|
|
97
|
+
build_id, timeout=args.wait_timeout, interval=args.poll_interval,
|
|
98
|
+
until=until, baseline_updated_at=baseline)
|
|
99
|
+
out = dict(build)
|
|
100
|
+
out["waited"] = True
|
|
101
|
+
out["settled"] = build_is_settled(build, until)
|
|
102
|
+
if note:
|
|
103
|
+
out["trigger_note"] = note
|
|
104
|
+
return out
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Generated-file + artifact actions: versions, content read/write, downloads.
|
|
2
|
+
|
|
3
|
+
The compiled `.nupkg` (download-artifact) is the bridge to PROCESIO: hand it to
|
|
4
|
+
`procesio customaction-upload --file <nupkg>` to install the connector for live
|
|
5
|
+
testing.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
|
|
11
|
+
from actiondef import ActionDef
|
|
12
|
+
from errors import UsageError
|
|
13
|
+
from handlers.common import add_build_id, load_text_or_file
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def list_file_versions(client, args) -> dict:
|
|
17
|
+
return client.get(f"/builds/{args.build_id}/files/versions")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_file_version(client, args) -> dict:
|
|
21
|
+
return client.get(
|
|
22
|
+
f"/builds/{args.build_id}/files/{args.filename}/versions/{args.version}")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def update_file(client, args) -> dict:
|
|
26
|
+
content = load_text_or_file(args.content, args.content_file, what="content")
|
|
27
|
+
if content is None:
|
|
28
|
+
raise UsageError("provide --content or --content-file")
|
|
29
|
+
return client.put(f"/builds/{args.build_id}/files/{args.filename}",
|
|
30
|
+
{"content": content})
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def set_file_instructions(client, args) -> dict:
|
|
34
|
+
return client.put(
|
|
35
|
+
f"/builds/{args.build_id}/files/{args.filename}/instructions",
|
|
36
|
+
{"instructions": args.instructions})
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def download_file(client, args) -> dict:
|
|
40
|
+
return client.download(
|
|
41
|
+
f"/builds/{args.build_id}/files/{args.filename}/download", args.out)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def download_all(client, args) -> dict:
|
|
45
|
+
return client.download(f"/builds/{args.build_id}/files/download-all", args.out)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def download_artifact(client, args) -> dict:
|
|
49
|
+
"""Download the compiled .nupkg (or .zip fallback). This is the package you
|
|
50
|
+
upload to PROCESIO via `procesio customaction-upload`."""
|
|
51
|
+
return client.download(f"/builds/{args.build_id}/artifact", args.out)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _versions_args(p: argparse.ArgumentParser) -> None:
|
|
55
|
+
add_build_id(p)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _get_file_version_args(p: argparse.ArgumentParser) -> None:
|
|
59
|
+
add_build_id(p)
|
|
60
|
+
p.add_argument("--filename", required=True)
|
|
61
|
+
p.add_argument("--version", required=True, help="Version number")
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _update_file_args(p: argparse.ArgumentParser) -> None:
|
|
65
|
+
add_build_id(p)
|
|
66
|
+
p.add_argument("--filename", required=True)
|
|
67
|
+
p.add_argument("--content", help="New file content (inline)")
|
|
68
|
+
p.add_argument("--content-file", dest="content_file",
|
|
69
|
+
help="Read new content from this path")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _set_file_instructions_args(p: argparse.ArgumentParser) -> None:
|
|
73
|
+
add_build_id(p)
|
|
74
|
+
p.add_argument("--filename", required=True)
|
|
75
|
+
p.add_argument("--instructions", required=True)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _download_file_args(p: argparse.ArgumentParser) -> None:
|
|
79
|
+
add_build_id(p)
|
|
80
|
+
p.add_argument("--filename", required=True)
|
|
81
|
+
p.add_argument("--out", required=True, help="Output file path")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _download_target_args(p: argparse.ArgumentParser) -> None:
|
|
85
|
+
add_build_id(p)
|
|
86
|
+
p.add_argument("--out", required=True, help="Output file path")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
ACTIONS: dict[str, ActionDef] = {
|
|
90
|
+
"list-file-versions": ActionDef(
|
|
91
|
+
list_file_versions, _versions_args,
|
|
92
|
+
description="Version metadata for every file in a build (no content)."),
|
|
93
|
+
"get-file-version": ActionDef(
|
|
94
|
+
get_file_version, _get_file_version_args,
|
|
95
|
+
description="Full content of one file at a specific version."),
|
|
96
|
+
"update-file": ActionDef(
|
|
97
|
+
update_file, _update_file_args,
|
|
98
|
+
description="Overwrite a file's content (inline or from --content-file)."),
|
|
99
|
+
"set-file-instructions": ActionDef(
|
|
100
|
+
set_file_instructions, _set_file_instructions_args,
|
|
101
|
+
description="Save per-file regeneration instructions."),
|
|
102
|
+
"download-file": ActionDef(
|
|
103
|
+
download_file, _download_file_args,
|
|
104
|
+
description="Download one generated file to --out."),
|
|
105
|
+
"download-all": ActionDef(
|
|
106
|
+
download_all, _download_target_args,
|
|
107
|
+
description="Download all generated files as a zip to --out."),
|
|
108
|
+
"download-artifact": ActionDef(
|
|
109
|
+
download_artifact, _download_target_args,
|
|
110
|
+
description="Download the compiled .nupkg to --out (upload to PROCESIO)."),
|
|
111
|
+
}
|