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,381 @@
|
|
|
1
|
+
# web
|
|
2
|
+
|
|
3
|
+
Drive web apps that have **no API** using [Playwright](https://playwright.dev/python/),
|
|
4
|
+
reusing **saved login sessions** so you authenticate once per site and reuse it
|
|
5
|
+
headlessly forever after. This is the framework's bridge to anything that only
|
|
6
|
+
lives behind a browser: tools like `whatsapp-personal` and the outreach agent
|
|
7
|
+
call `web` whenever they need to connect to a site or do deeper web research.
|
|
8
|
+
|
|
9
|
+
There is **no HTTP API** here. A small `BrowserDriver` abstraction wraps
|
|
10
|
+
Playwright (imported lazily) so the tool — and its test suite — load even before
|
|
11
|
+
the browser binaries are installed.
|
|
12
|
+
|
|
13
|
+
## Why saved sessions
|
|
14
|
+
|
|
15
|
+
A *session* is a Playwright **storageState**: the cookies + localStorage of a
|
|
16
|
+
browser after a human logged in. Capture it once (`save-session`, headed) and
|
|
17
|
+
every later headless run reuses that authentication.
|
|
18
|
+
|
|
19
|
+
> **Sessions are SENSITIVE.** Each `tools/web/sessions/<name>.json` contains live
|
|
20
|
+
> auth material — anyone with the file can act as you on that site until it
|
|
21
|
+
> expires. They are **gitignored** (`tools/web/sessions/*.json`), never printed,
|
|
22
|
+
> and never logged. `list-sessions` reports names + size + mtime only. Treat them
|
|
23
|
+
> like passwords.
|
|
24
|
+
|
|
25
|
+
## Setup (one-time)
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
uv sync
|
|
29
|
+
uv run playwright install chromium # download the browser binary (~120 MB)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If `playwright install chromium` is skipped, the tool still loads and the test
|
|
33
|
+
suite still passes (Playwright is imported lazily) — but any action that opens a
|
|
34
|
+
real browser will fail with a `browser_error` telling you to install it.
|
|
35
|
+
|
|
36
|
+
> **`browser_error: Executable doesn't exist` even after installing?** A prior
|
|
37
|
+
> install can be marked-present-but-incomplete, so a plain `playwright install`
|
|
38
|
+
> no-ops instead of repairing it. Force a clean re-download:
|
|
39
|
+
> `uv run playwright install chromium --force` (or
|
|
40
|
+
> `.\.venv\Scripts\python.exe -m playwright install chromium --force`).
|
|
41
|
+
|
|
42
|
+
## Actions
|
|
43
|
+
|
|
44
|
+
| Action | Purpose |
|
|
45
|
+
|--------|---------|
|
|
46
|
+
| `save-session` | Interactively capture a login session (headed browser + ENTER). |
|
|
47
|
+
| `list-sessions` | List saved sessions (metadata only). |
|
|
48
|
+
| `delete-session` | Remove a saved session file. |
|
|
49
|
+
| `run` | Run a declarative step list against a saved session. |
|
|
50
|
+
| `get-text` | Load a session, open a URL, return visible text. |
|
|
51
|
+
| `screenshot` | Load a session, open a URL, save a screenshot. |
|
|
52
|
+
|
|
53
|
+
### save-session (run once per site)
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python scripts/run-tool.py web save-session --name linkedin --url https://www.linkedin.com/login
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
A **headed** browser opens at the URL. Log in fully (including any 2FA), return
|
|
60
|
+
to the terminal, and press **ENTER**. The storageState is captured and written
|
|
61
|
+
to `tools/web/sessions/linkedin.json`.
|
|
62
|
+
|
|
63
|
+
Args: `--name` (required), `--url` (required), `--channel` (optional: `chrome`
|
|
64
|
+
or `msedge` to drive a real installed browser instead of the bundled Chromium —
|
|
65
|
+
useful when a site fingerprints the bundled build).
|
|
66
|
+
|
|
67
|
+
### list-sessions / delete-session
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
python scripts/run-tool.py web list-sessions
|
|
71
|
+
python scripts/run-tool.py web delete-session --name linkedin
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### run — declarative step list
|
|
75
|
+
|
|
76
|
+
```powershell
|
|
77
|
+
python scripts/run-tool.py web run --session linkedin --actions-file steps.json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Inline `--actions` also works but mind your shell's JSON quoting; a file is more
|
|
81
|
+
robust. Optional `--url` visits a page first; `--headed` shows the window;
|
|
82
|
+
`--channel` picks a browser channel.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{ "session": "linkedin",
|
|
88
|
+
"results": { "name": "value" },
|
|
89
|
+
"screenshots": ["path"],
|
|
90
|
+
"final_url": "https://..." }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Step schema (the mini-language)
|
|
94
|
+
|
|
95
|
+
Each step is a JSON object with a `do` key; the rest are its parameters.
|
|
96
|
+
Unknown `do` values or keys, or missing required keys, fail fast with
|
|
97
|
+
`invalid_argument` **before** any browser opens.
|
|
98
|
+
|
|
99
|
+
| `do` | Required keys | Optional keys | Effect |
|
|
100
|
+
|------|---------------|---------------|--------|
|
|
101
|
+
| `goto` | `url` | `timeout` | Navigate to a URL. |
|
|
102
|
+
| `click` | `selector` | `timeout`, `force` | Click the first match. `force: true` skips the actionability wait - for a framework that paints a container over its own controls, where the hit test at the control's centre returns that container and the click is refused although a person can press it. It also skips the visibility check, so a truly hidden element is "clicked" with no effect and no error. |
|
|
103
|
+
| `fill` | `selector`, `text` | `timeout` | Type text into an input. |
|
|
104
|
+
| `press` | `key` | `selector` | Press a key (globally, or focused on a selector). |
|
|
105
|
+
| `wait` | `ms` | | Pause for a fixed time - for a negative check ("nothing happened within N ms"). |
|
|
106
|
+
| `wait_for` | `selector` | `timeout` | Wait until a selector appears. |
|
|
107
|
+
| `eval` | `script` | `name`, `arg` | Run JS in the page (Playwright `evaluate`) and store the JSON result in `results[name]`. It reads live state `extract_attr` cannot see (an input's `.value` property, `disabled`). An `async () => {...}` script can click and poll, which times an interaction. |
|
|
108
|
+
| `extract_text` | (none) | `selector`, `name`, `timeout` | Read text (a selector, or whole page body) into `results[name]`. |
|
|
109
|
+
| `extract_attr` | `selector`, `attr` | `name`, `timeout` | Read an attribute into `results[name]`. |
|
|
110
|
+
| `viewport` | `width`, `height` | | Resize the live page viewport (default 1280x720), e.g. 1920x1080 for video-grade captures. Put it before the `goto` so the page lays out at the new size. |
|
|
111
|
+
| `screenshot` | `path` | `full_page` | Save a screenshot; path collected into `screenshots`. |
|
|
112
|
+
| `upload` | `selector`, `path` | `timeout` | Set files on an `<input type=file>` (often hidden). `path` is a path or list of paths. |
|
|
113
|
+
| `upload_via_chooser` | `selector`, `path` | `timeout` | Attach files behind a NATIVE chooser: clicks `selector` while expecting the chooser, then hands it the files. |
|
|
114
|
+
|
|
115
|
+
`timeout` is in **milliseconds**. For `extract_text`/`extract_attr`, `name` is
|
|
116
|
+
the key in `results`; it defaults to the selector (or `text` / `selector@attr`).
|
|
117
|
+
|
|
118
|
+
Example `steps.json`:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
[
|
|
122
|
+
{"do": "goto", "url": "https://www.linkedin.com/in/someone"},
|
|
123
|
+
{"do": "wait_for", "selector": "main"},
|
|
124
|
+
{"do": "extract_text", "selector": "h1", "name": "name"},
|
|
125
|
+
{"do": "extract_text", "selector": ".text-body-medium", "name": "headline"},
|
|
126
|
+
{"do": "screenshot", "path": "outputs/profile.png"}
|
|
127
|
+
]
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### Anonymous browsing — a session with nothing in it
|
|
131
|
+
|
|
132
|
+
`run` always loads a session. For a public page that needs no login, give it an EMPTY
|
|
133
|
+
storageState and it behaves as a fresh anonymous browser:
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
from tools.web import sessions
|
|
137
|
+
sessions.write_state("anon", {"cookies": [], "origins": []})
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Delete it afterwards with `web delete-session --name anon --confirm`.
|
|
141
|
+
|
|
142
|
+
#### Human handoff — the agent stages, you submit
|
|
143
|
+
|
|
144
|
+
For anything outward-facing (Submit, Confirm, Send), the agent fills the form
|
|
145
|
+
and **you** click the control. `--hold-seconds` keeps the headed browser open
|
|
146
|
+
after the last step so you can review and act:
|
|
147
|
+
|
|
148
|
+
```powershell
|
|
149
|
+
python scripts/run-tool.py web run --session dca --headed --hold-seconds 900 --hold-until-selector "text=Thank" --actions-file steps.json
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
`--hold-until-selector` / `--hold-until-url-excludes <host>` end the hold as soon
|
|
153
|
+
as you act. The result gains a `hold` block:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
"hold": { "held_seconds": 412.0, "completed": true, "reason": "selector" }
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`reason` is `selector` | `url` | `timeout`. **An expired hold is still a
|
|
160
|
+
successful run** (exit 0, `completed: false`) — the steps ran, you were just not
|
|
161
|
+
at the desk. `--hold-seconds` requires `--headed` (usage error otherwise), and
|
|
162
|
+
`completed` is advisory: confirm the outcome from `final_url` + `diagnostics`,
|
|
163
|
+
never from a screenshot taken before you clicked.
|
|
164
|
+
|
|
165
|
+
### get-text — convenience for research
|
|
166
|
+
|
|
167
|
+
```powershell
|
|
168
|
+
python scripts/run-tool.py web get-text --session linkedin --url https://example.com --selector main --wait main
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`--selector` (optional) reads one element; without it, the whole page body.
|
|
172
|
+
`--wait` (optional selector) is awaited first — handy for single-page apps.
|
|
173
|
+
|
|
174
|
+
### page-contacts — published contacts on a public page (no browser)
|
|
175
|
+
|
|
176
|
+
```powershell
|
|
177
|
+
python scripts/run-tool.py web page-contacts --url https://linktr.ee/someone
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
One plain GET with a browser User-Agent, no session. Returns the emails (mailto
|
|
181
|
+
links, visible text, `name [at] domain [dot] com`), profile links grouped by
|
|
182
|
+
platform, link-in-bio pages and affiliate-shaped links, via the shared extractor
|
|
183
|
+
`tools/_lib/contacts.py`. A 4xx/5xx page comes back as `reachable: false`, not an
|
|
184
|
+
error. For pages that need a login or JavaScript, use `get-text` with a session.
|
|
185
|
+
|
|
186
|
+
### screenshot
|
|
187
|
+
|
|
188
|
+
```powershell
|
|
189
|
+
python scripts/run-tool.py web screenshot --session linkedin --url https://example.com --out outputs/page.png
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`--viewport-only` captures just the viewport (default is full page); `--wait`
|
|
193
|
+
awaits a selector first.
|
|
194
|
+
|
|
195
|
+
## Render HTML to a print PDF (`render-pdf`)
|
|
196
|
+
|
|
197
|
+
`render-pdf` lays an HTML file out with Chromium's print engine. By default it prints on a
|
|
198
|
+
paper format (`--format A4`, Letter, ...) with document margins of 12/14/12/12 mm.
|
|
199
|
+
|
|
200
|
+
Large-format print (a roll-up, a poster, a banner) needs an exact sheet instead of a paper name:
|
|
201
|
+
|
|
202
|
+
```powershell
|
|
203
|
+
python scripts/run-tool.py web render-pdf --html-file rollup.html --out rollup.pdf --width 1000mm --height 2000mm --margin 0
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- `--width` / `--height` take CSS lengths and go together; they override `--format`.
|
|
207
|
+
`--margin 0` is for full-bleed artwork.
|
|
208
|
+
- Chromium rounds the sheet to whole CSS pixels (96 px per inch), so 1000 x 2000 mm comes out
|
|
209
|
+
as about 1000.17 x 2000.25 mm. When the printer checks dimensions, trim the PDF's MediaBox to
|
|
210
|
+
the exact size afterwards; keep the outermost fraction of a millimetre background-only.
|
|
211
|
+
PDF y runs bottom-up, so a trimmed MediaBox written as `[0 0 W H]` cuts that fraction off the
|
|
212
|
+
TOP of the artwork and shifts it against any TrimBox; anchor it at the top-left instead
|
|
213
|
+
(`[0, y1-H, W, y1]` from the rendered box's `y1`).
|
|
214
|
+
- Bleed: render the sheet at trim + 2 x bleed (a 1000 x 2000 mm roll-up with 3 mm bleed is
|
|
215
|
+
`--width 1006mm --height 2006mm`), place the artwork 3 mm in, run any background that touches
|
|
216
|
+
an edge 3 mm past it, then write `TrimBox` = the sheet inset by the bleed and `BleedBox` =
|
|
217
|
+
the sheet. A full-bleed band printed without bleed can show a white hairline after cutting.
|
|
218
|
+
- Gradient-filled text prints as the glyph outlines used as a clip over a raster gradient: the
|
|
219
|
+
edges stay vector-sharp at any size, only the colour ramp is pixels. An SVG `<text>` with a
|
|
220
|
+
gradient `fill` keeps the word as real text with the embedded font.
|
|
221
|
+
- Make the HTML self-contained: the page is loaded with `set_content` (from `about:blank`), so
|
|
222
|
+
inline fonts and images as `data:` URIs. The driver waits for `document.fonts.ready` before
|
|
223
|
+
printing, so an inlined web font is used rather than a silent fallback.
|
|
224
|
+
- SVG images stay vector in the PDF; PNGs stay raster, so check their effective resolution at
|
|
225
|
+
the printed size (a logo of ~600 px printed 14 cm wide is ~110 dpi).
|
|
226
|
+
- `text-wrap: pretty` was seen not to stop a lone last word in the headless print engine; bind
|
|
227
|
+
the last words with ` ` when a widow matters.
|
|
228
|
+
|
|
229
|
+
## Persistent storage is granted at start-up
|
|
230
|
+
|
|
231
|
+
Automated Chromium answers `navigator.storage.persist()` and a persisted Storage Bucket
|
|
232
|
+
with "denied". WhatsApp Web (since 2026-10) halts on its loading splash when that happens,
|
|
233
|
+
with `[storage] storage bucket persistence denied (aquire-persistent-storage-denied)` in the
|
|
234
|
+
console, and every action then times out waiting for `#pane-side`. The driver grants the
|
|
235
|
+
`durableStorage` permission over CDP (`Browser.grantPermissions`) and makes the page-side
|
|
236
|
+
persistence checks agree (`_PERSISTENT_STORAGE_JS`). If a site again stalls on its splash,
|
|
237
|
+
read the console diagnostics before suspecting selectors.
|
|
238
|
+
|
|
239
|
+
A logged-out WhatsApp profile shows "Scan to log in" (re-link with `whatsapp-personal
|
|
240
|
+
relink`). After a re-link WhatsApp may open a "What's new on WhatsApp Web" dialog that
|
|
241
|
+
covers the search box until **Continue** is clicked, and a freshly linked device holds only
|
|
242
|
+
the most recent messages of a chat until the phone syncs history.
|
|
243
|
+
|
|
244
|
+
## Runtime diagnostics (verification)
|
|
245
|
+
|
|
246
|
+
`run`, `get-text`, and `screenshot` results include a `diagnostics` object collected over
|
|
247
|
+
the session — the observability for "verify before declaring done" (don't trust a
|
|
248
|
+
screenshot alone; it hides JS errors and failed requests):
|
|
249
|
+
|
|
250
|
+
```json
|
|
251
|
+
"diagnostics": {
|
|
252
|
+
"console": [{"type": "error", "text": "..."}], // console error/warning messages
|
|
253
|
+
"page_errors": ["..."], // uncaught JS exceptions
|
|
254
|
+
"failed_requests": [{"url": "...", "method": "GET", "failure": "..."}],
|
|
255
|
+
"bad_responses": [{"url": "...", "status": 400}] // HTTP >= 400
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Empty lists = a clean run. Any `page_errors`, `console` errors, or a 4xx/5xx on the page's
|
|
260
|
+
OWN endpoints means the page is broken even if it looks fine in a screenshot. (Used to
|
|
261
|
+
verify PROCESIO forms end-to-end — see `agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md`.)
|
|
262
|
+
|
|
263
|
+
## Output contract
|
|
264
|
+
|
|
265
|
+
Like every tool here: exactly one JSON object on stdout, progress/debug on
|
|
266
|
+
stderr, non-zero exit on error. Error envelope:
|
|
267
|
+
|
|
268
|
+
```json
|
|
269
|
+
{ "error": { "code": "...", "message": "...", "details": { } } }
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Codes: `invalid_argument` (bad args/step schema, exit 2),
|
|
273
|
+
`session_not_found` (missing/corrupt session, exit 1),
|
|
274
|
+
`browser_error` (navigation/selector/timeout/missing-binary, exit 1),
|
|
275
|
+
`error` (anything else, exit 1).
|
|
276
|
+
|
|
277
|
+
## Python API (for other tools and agents)
|
|
278
|
+
|
|
279
|
+
Import `web` directly instead of shelling out. The driver is always torn down
|
|
280
|
+
for you. All functions accept `driver_factory=` so callers/tests can inject a
|
|
281
|
+
fake driver and run with no real browser.
|
|
282
|
+
|
|
283
|
+
```python
|
|
284
|
+
from tools.web import (
|
|
285
|
+
open_session, # -> a STARTED BrowserDriver (use as a context manager)
|
|
286
|
+
run_steps, # run a declarative step list against a saved session
|
|
287
|
+
get_text, # load session, open url, return visible text
|
|
288
|
+
screenshot, # load session, open url, save an image
|
|
289
|
+
save_session, # interactive capture (headed + human signal callback)
|
|
290
|
+
list_sessions, # metadata of saved sessions
|
|
291
|
+
delete_session, # remove a saved session
|
|
292
|
+
session_path, # absolute Path to a session file
|
|
293
|
+
BrowserDriver, # the Protocol other code programs against
|
|
294
|
+
)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Signatures
|
|
298
|
+
|
|
299
|
+
```python
|
|
300
|
+
open_session(name: str, *, headless: bool = True, channel: str | None = None,
|
|
301
|
+
url: str | None = None, driver_factory=PlaywrightDriver) -> BrowserDriver
|
|
302
|
+
|
|
303
|
+
run_steps(name: str, steps: list[dict], *, url: str | None = None,
|
|
304
|
+
headless: bool = True, channel: str | None = None,
|
|
305
|
+
driver_factory=...) -> dict # {"session","results","screenshots","final_url"}
|
|
306
|
+
|
|
307
|
+
get_text(name: str, url: str, *, selector: str | None = None, wait: str | None = None,
|
|
308
|
+
headless: bool = True, channel: str | None = None, driver_factory=...) -> dict
|
|
309
|
+
|
|
310
|
+
screenshot(name: str, url: str, out: str, *, full_page: bool = True,
|
|
311
|
+
wait: str | None = None, headless: bool = True,
|
|
312
|
+
channel: str | None = None, driver_factory=...) -> dict
|
|
313
|
+
|
|
314
|
+
save_session(name: str, url: str, *, wait_for_signal: Callable[[], Any] | None = None,
|
|
315
|
+
channel: str | None = None, driver_factory=...) -> dict
|
|
316
|
+
|
|
317
|
+
list_sessions() -> list[dict] # [{name, bytes, modified}]
|
|
318
|
+
delete_session(name: str) -> bool
|
|
319
|
+
session_path(name: str) -> pathlib.Path
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Programmatic example — drive a saved session step by step
|
|
323
|
+
|
|
324
|
+
```python
|
|
325
|
+
from tools.web import open_session
|
|
326
|
+
|
|
327
|
+
# open_session returns a started driver; use it as a context manager so the
|
|
328
|
+
# browser is always closed.
|
|
329
|
+
with open_session("whatsapp", url="https://web.whatsapp.com") as d:
|
|
330
|
+
d.wait_for("div[role='textbox']")
|
|
331
|
+
d.fill("div[role='textbox']", "Hi there")
|
|
332
|
+
d.press("Enter")
|
|
333
|
+
last = d.extract_text("div.message-in:last-child")
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### One-shot scripted interaction
|
|
337
|
+
|
|
338
|
+
```python
|
|
339
|
+
from tools.web import run_steps
|
|
340
|
+
|
|
341
|
+
out = run_steps("linkedin", [
|
|
342
|
+
{"do": "goto", "url": "https://www.linkedin.com/in/someone"},
|
|
343
|
+
{"do": "extract_text", "selector": "h1", "name": "name"},
|
|
344
|
+
])
|
|
345
|
+
print(out["results"]["name"])
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### The BrowserDriver surface
|
|
349
|
+
|
|
350
|
+
`open_session` returns an object implementing `BrowserDriver`:
|
|
351
|
+
|
|
352
|
+
```
|
|
353
|
+
goto(url, *, timeout=None) click(selector, *, timeout=None, force=False)
|
|
354
|
+
fill(selector, text, *, timeout=None) press(key, *, selector=None)
|
|
355
|
+
wait_for(selector, *, timeout=None) extract_text(selector=None, *, timeout=None) -> str
|
|
356
|
+
extract_attr(selector, attr, *, timeout=None) -> str | None
|
|
357
|
+
screenshot(path, *, full_page=True) -> str current_url() -> str
|
|
358
|
+
storage_state() -> dict # capture cookies+localStorage (used by save_session)
|
|
359
|
+
close() # idempotent teardown
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Testing
|
|
363
|
+
|
|
364
|
+
```powershell
|
|
365
|
+
uv run pytest tools/web -q
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
The suite is **fully hermetic**: every test injects a `FakeDriver` and an
|
|
369
|
+
isolated temp sessions dir, so it runs with **zero real browser** and passes even
|
|
370
|
+
when Playwright's binaries are not installed. It covers the step interpreter,
|
|
371
|
+
session path/name validation (no traversal) and lifecycle, the public API,
|
|
372
|
+
dispatch/arg-parsing, error mapping, and the manifest-runtime sync guard.
|
|
373
|
+
|
|
374
|
+
A real-browser test is intentionally *not* in the suite (it would break hermetic
|
|
375
|
+
guarantees and CI without binaries). To smoke-test a real browser manually,
|
|
376
|
+
create an anonymous session file `tools/web/sessions/smoke.json` containing
|
|
377
|
+
`{"cookies":[],"origins":[]}` and run:
|
|
378
|
+
|
|
379
|
+
```powershell
|
|
380
|
+
python scripts/run-tool.py web get-text --session smoke --url https://example.com --selector h1
|
|
381
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web
|
|
3
|
+
description: Drive web apps that have NO API via Playwright, reusing SAVED login sessions so we authenticate once and reuse. Sessions are Playwright storageState (cookies + localStorage) per named site, stored gitignored under tools/web/sessions/<name>.json - they hold live auth and are SENSITIVE (never committed, never printed). Other tools and the outreach agent call this whenever they need to connect to a…
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# web
|
|
7
|
+
|
|
8
|
+
Drive web apps that have NO API via Playwright, reusing SAVED login sessions so we authenticate once and reuse. Sessions are Playwright storageState (cookies + localStorage) per named site, stored gitignored under tools/web/sessions/<name>.json - they hold live auth and are SENSITIVE (never committed, never printed). Other tools and the outreach agent call this whenever they need to connect to a site or do deeper web research. Action-dispatched. No HTTP API; a BrowserDriver abstraction wraps Playwright (imported lazily) so the tool loads even before browsers are installed. BROKER-OWNED SESSIONS: run/get-text/screenshot against a session owned by a serializing broker (whatsapp/ryver/fgo/mirro - tools/_lib/webserialize) are executed INSIDE that broker, serialized with the owning tool's commands, so ad-hoc web commands can't race the profile. --direct bypasses (backup). save-session/delete-session auto-stop the owning broker first.
|
|
9
|
+
|
|
10
|
+
## How to call it
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
python scripts/run-tool.py web <action> [--args]
|
|
14
|
+
# e.g. web run --session <name> ... (read text: web get-text; one-time login: web save-session)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
One JSON object on stdout for success; `{"error": {"code", "message", "details"}}` and a non-zero exit on failure. Progress and logs go to stderr only.
|
|
18
|
+
|
|
19
|
+
**Start with `run`.**
|
|
20
|
+
|
|
21
|
+
## Actions
|
|
22
|
+
|
|
23
|
+
| action | required args | what it does |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `archive-document` | `--out-dir`, `--name` | Capture a published document (web page or PDF) as a reviewable evidence set: the ORIGINAL response bytes untouched, a self-contained HTML rendering with… |
|
|
26
|
+
| `delete-session` | `--name` | Delete ALL of a saved session's artifacts - the storageState file, the persistent <name>.profile/ directory, and the <name>.cookies.json sidecar. Deleting a… |
|
|
27
|
+
| `get-text` | `--session`, `--url` | Convenience: load a session, open --url, return visible text (whole page or --selector). For lead/topic research. |
|
|
28
|
+
| `list-sessions` | — | List saved sessions (names + metadata only, never contents). |
|
|
29
|
+
| `page-contacts` | `--url` | The contact details a PUBLIC page publishes, read with one plain HTTP GET (no browser, no session, nothing clicked): emails from mailto links and visible text… |
|
|
30
|
+
| `render-pdf` | `--out` | Render an HTML string/file to a PDF (session-less, headless Chromium page.pdf). |
|
|
31
|
+
| `run` | `--session` | Load a saved session, optionally navigate to --url, then execute a declarative step list (--actions JSON array or --actions-file). Returns collected outputs.… |
|
|
32
|
+
| `save-session` | `--name`, `--url` | Interactively capture a login session. Launches a HEADED browser at --url, lets the human log in, then captures storageState to tools/web/sessions/<name>.json.… |
|
|
33
|
+
| `screenshot` | `--session`, `--url`, `--out` | Load a session, open --url, save a screenshot to --out. |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
Generated from `tools/web/tool.yaml` by `scripts/build-tool-skill.py`. Do not edit by hand — change the manifest and regenerate.
|