gravity-cli 0.11.1__tar.gz → 0.12.0__tar.gz
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.
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/AGENT_STANDARD_V2.md +3 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/PKG-INFO +6 -5
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/README.md +4 -3
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/manifest_v2.py +2 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googlesheets.yaml +9 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/slack.yaml +4 -1
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/pyproject.toml +1 -1
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/pyproject.toml +2 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/BUILDER_GUIDE.md +3 -4
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/BUILDER_GUIDE_V2.md +4 -4
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/CHANGELOG.md +7 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/guide.py +2 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/init.py +1 -3
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/docs/Gravity.agent.md +3 -4
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/manifest.yaml +9 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/src/agent.py +5 -1
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_v2_cli.py +3 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/uv.lock +2 -2
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/.env.example +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/.github/workflows/ci.yml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/.github/workflows/composio-watch.yml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/.github/workflows/release.yml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/AGENT_STANDARD.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/LICENSE +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/NOTICE +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/RELEASING.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/TEMPLATES.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/LICENSE +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/NOTICE +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/README.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/__main__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/built_ins.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/catalog.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/catalog.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/catalog_imported.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/contract.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/cron.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/describe.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/errors.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/export.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/gen_catalog.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/gen_vocabulary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/instance.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/manifest.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/rules.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/rules_cases.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/source_scan.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/specs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/validation.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/__main__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/capabilities.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/airtable.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/asana.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/browser_tool.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/composio_search.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/dropbox.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/exa.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/excel.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/firecrawl.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/github.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/gmail.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googlecalendar.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googledocs.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googledrive.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googleslides.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/googletasks.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/hackernews.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/hubspot.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/instagram.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/jira.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/linear.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/linkedin.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/microsoft_teams.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/notion.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/outlook.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/perplexityai.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/pinterest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/reddit.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/tavily.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/connectors/youtube.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/core_shapes.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/generated_shapes.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/policy.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/airtable.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/asana.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/browser_tool.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/composio_search.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/dropbox.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/exa.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/excel.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/firecrawl.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/github.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/gmail.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googlecalendar.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googledocs.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googledrive.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googlesheets.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googleslides.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/googletasks.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/hackernews.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/hubspot.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/instagram.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/jira.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/linear.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/linkedin.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/microsoft_teams.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/notion.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/outlook.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/perplexityai.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/pinterest.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/reddit.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/slack.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/tavily.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas/youtube.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/schemas.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/ochat.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/ocrm.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/ogh.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/oms.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/oweb.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/owork.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/shapes.d/shared.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/sync.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/ochat.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/ocrm.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/ogh.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/oms.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/oweb.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/owork.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/rchat.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/rfiles.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/rgh.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/rtrack.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.d/rwork.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/vocabulary/verbs.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/schema/manifest.schema.json +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/conftest.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/fixtures/demo_manifests.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_accounts.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_actions_memory.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_catalog_parity.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_cron.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_describe.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_errors.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_generated_tables.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_instance.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_json_schema.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_kind_outputs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_manifest.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_manifest_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_place_maker.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_rules.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_slots.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_source_scan.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_sync.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_validation.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/tests/test_vocabulary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/scripts/composio-watch.sh +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/__main__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/_runner_script.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/api.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/changelog.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/cli.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/adapt.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/build.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/capabilities.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/changelog.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/check.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/connect.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/dev.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/docs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/help.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/login.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/memory.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/push.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/run.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/runs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/schedule.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/tools.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/update.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/commands/validate.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/config.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/dev.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/dev_page/index.html +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/docs/Gravity.getting-started.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/docs/problem-to-agent.md +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/inputs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/localrun.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/manifest.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/project.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/chat/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/chat/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/chat/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/chat/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/deepagent/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/deepagent/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/deepagent/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/deepagent/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/minimal/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/minimal/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/minimal/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/minimal/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/src/gateway.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/src/nodes/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/src/prompts.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/structured/src/state.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/chat/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/chat/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/chat/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/chat/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/chat/tests/test_agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/deepagent/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/deepagent/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/deepagent/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/deepagent/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/deepagent/tests/test_agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/tests/test_agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/.gitignore +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/gateway.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/nodes/__init__.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/nodes/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/prompts.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/src/state.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/structured/tests/test_agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/timeline.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/ui.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/updater.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/workspace.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter/src/summary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter/tests/test_summary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter-v2/manifest.yaml +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter-v2/requirements.txt +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter-v2/src/agent.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter-v2/src/summary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/starter-v2/tests/test_summary.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/conftest.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_adapt.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_agent_guide.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_agents.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_api.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_build_push.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_changelog.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_check.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_connect.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_connect_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_dev.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_dev_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_gateway_token.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_inputs_memory.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_localrun.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_manifest_integration.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_run.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_run_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_runs.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_schedule.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_schedule_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_session.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_templates.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_templates_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_timeline.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_tools.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_ui.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_updater.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_validate.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_validate_v2.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_welcome.py +0 -0
- {gravity_cli-0.11.1 → gravity_cli-0.12.0}/tests/test_workspace.py +0 -0
|
@@ -16,7 +16,7 @@ that package disagree, the package wins and this document has a bug.
|
|
|
16
16
|
(`issue.list`) and what it changes (`issue.create`); the consumer picks the
|
|
17
17
|
app — Linear, Jira, Asana — when they set it up. `contract: v1` manifests
|
|
18
18
|
(tool names) are still accepted while the platform moves to v2; their standard is
|
|
19
|
-
AGENT_STANDARD.md.
|
|
19
|
+
AGENT_STANDARD.md. Gravity runs both.
|
|
20
20
|
|
|
21
21
|
## 1. Layout
|
|
22
22
|
|
|
@@ -373,7 +373,8 @@ outputs: # what the consumer may ask the result to become
|
|
|
373
373
|
capability that takes its rendering — markdown: `message.send`,
|
|
374
374
|
`message.create`, `document.create`, `issue.create`, `comment.create`,
|
|
375
375
|
`post.create`, `file.create`; docx and pptx: `file.create`, `message.send`
|
|
376
|
-
(and `presentation.create` for a deck); rows: `row.append`, `
|
|
376
|
+
(and `presentation.create` for a deck); rows: `row.append`, `spreadsheet.create`,
|
|
377
|
+
`file.create`; xlsx: `file.create`, `spreadsheet.create` (a new Google Sheet, every table a tab).
|
|
377
378
|
`default` (expected; `gravity validate` warns without it) is where it goes
|
|
378
379
|
unless the consumer picks otherwise: a download, or a destination and its
|
|
379
380
|
app. The consumer can change it, and picks the place (a Slack channel, a
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gravity-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: gravity cli — init, run, and push python agents to the Gravity marketplace
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
License-File: NOTICE
|
|
8
8
|
Requires-Python: >=3.12
|
|
9
|
-
Requires-Dist: gravity-schema==0.
|
|
9
|
+
Requires-Dist: gravity-schema==0.12.0
|
|
10
10
|
Requires-Dist: httpx>=0.27.0
|
|
11
11
|
Requires-Dist: keyring>=25.0.0
|
|
12
12
|
Requires-Dist: python-dotenv>=1.0.0
|
|
@@ -756,17 +756,18 @@ outputs: # extra formats the platform renders and deliv
|
|
|
756
756
|
|
|
757
757
|
Unknown fields are rejected rather than ignored, so a typo is reported instead of silently dropped.
|
|
758
758
|
|
|
759
|
-
### Contract v2
|
|
759
|
+
### Contract v2
|
|
760
760
|
|
|
761
761
|
The CLI also reads `contract: v2` manifests, where an agent names **capabilities** (`message.list`, `issue.create`)
|
|
762
762
|
instead of tools, and the person picks the app when they set it up: Gmail or Outlook, Linear or Jira. What it reads
|
|
763
763
|
goes under `sources`, what it changes under `writes`; code calls `gravity.read("inbox")` and `gravity.act("send", ...)`.
|
|
764
|
-
v2 runs
|
|
764
|
+
Gravity runs both contracts. A v2 agent runs once a consumer has set it up (their app and place for each source,
|
|
765
|
+
write and output); `gravity init` stays on v1 by default until that setup page is on the web app.
|
|
765
766
|
|
|
766
767
|
```bash
|
|
767
768
|
gravity init my-agent --contract v2 # the v2 templates
|
|
768
769
|
gravity capabilities message # what exists, and which apps serve it
|
|
769
|
-
gravity check message.list --app gmail # try one on your own account
|
|
770
|
+
gravity check message.list --app gmail # try one on your own account
|
|
770
771
|
gravity run --use inbox=outlook # pick the app for a local run
|
|
771
772
|
gravity guide --contract v2 # the v2 guide; the rules are in AGENT_STANDARD_V2.md
|
|
772
773
|
```
|
|
@@ -739,17 +739,18 @@ outputs: # extra formats the platform renders and deliv
|
|
|
739
739
|
|
|
740
740
|
Unknown fields are rejected rather than ignored, so a typo is reported instead of silently dropped.
|
|
741
741
|
|
|
742
|
-
### Contract v2
|
|
742
|
+
### Contract v2
|
|
743
743
|
|
|
744
744
|
The CLI also reads `contract: v2` manifests, where an agent names **capabilities** (`message.list`, `issue.create`)
|
|
745
745
|
instead of tools, and the person picks the app when they set it up: Gmail or Outlook, Linear or Jira. What it reads
|
|
746
746
|
goes under `sources`, what it changes under `writes`; code calls `gravity.read("inbox")` and `gravity.act("send", ...)`.
|
|
747
|
-
v2 runs
|
|
747
|
+
Gravity runs both contracts. A v2 agent runs once a consumer has set it up (their app and place for each source,
|
|
748
|
+
write and output); `gravity init` stays on v1 by default until that setup page is on the web app.
|
|
748
749
|
|
|
749
750
|
```bash
|
|
750
751
|
gravity init my-agent --contract v2 # the v2 templates
|
|
751
752
|
gravity capabilities message # what exists, and which apps serve it
|
|
752
|
-
gravity check message.list --app gmail # try one on your own account
|
|
753
|
+
gravity check message.list --app gmail # try one on your own account
|
|
753
754
|
gravity run --use inbox=outlook # pick the app for a local run
|
|
754
755
|
gravity guide --contract v2 # the v2 guide; the rules are in AGENT_STANDARD_V2.md
|
|
755
756
|
```
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/manifest_v2.py
RENAMED
|
@@ -54,8 +54,8 @@ RENDERER_DESTINATIONS: dict[Renderer, tuple[str, ...]] = {
|
|
|
54
54
|
Renderer.DOCX: ("file.create", "document.create", "message.send"),
|
|
55
55
|
Renderer.PPTX: ("file.create", "presentation.create", "message.send"),
|
|
56
56
|
Renderer.PDF: ("file.create", "message.send"),
|
|
57
|
-
Renderer.ROWS: ("row.append", "file.create"),
|
|
58
|
-
Renderer.XLSX: ("file.create",),
|
|
57
|
+
Renderer.ROWS: ("row.append", "spreadsheet.create", "file.create"),
|
|
58
|
+
Renderer.XLSX: ("file.create", "spreadsheet.create"),
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
# A filter on one of these fields takes one of the shape's listed values.
|
|
@@ -537,10 +537,19 @@ writes:
|
|
|
537
537
|
args: {spreadsheet_id: "{target}", ranges: ["{sheet ?? ='Sheet1'}"]}
|
|
538
538
|
check: rows_present
|
|
539
539
|
spreadsheet.create:
|
|
540
|
+
# draft.tables (optional), each {name, range, values}: an output delivered as a new spreadsheet, every table a tab.
|
|
541
|
+
# The first fills the tab a new spreadsheet comes with (its range names no tab: "A1", whatever the locale calls
|
|
542
|
+
# it); each later one gets its own tab first. values: the header line, then the table's lines
|
|
540
543
|
steps:
|
|
541
544
|
- action: GOOGLESHEETS_CREATE_GOOGLE_SHEET1
|
|
542
545
|
args: {title: "{draft.title}"}
|
|
543
546
|
save: {id: "data.response_data.spreadsheetId ?? data.spreadsheetId", link: "data.response_data.spreadsheetUrl ?? data.spreadsheetUrl"}
|
|
547
|
+
- action: GOOGLESHEETS_ADD_SHEET
|
|
548
|
+
each: draft.tables|rest
|
|
549
|
+
args: {spreadsheet_id: "{id}", title: "{item.name}"}
|
|
550
|
+
- action: GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND
|
|
551
|
+
each: draft.tables
|
|
552
|
+
args: {spreadsheetId: "{id}", range: "{item.range}", valueInputOption: RAW, values: "{item.values}"}
|
|
544
553
|
returns: {id: id, title: draft.title, link: link}
|
|
545
554
|
# verified live 2026-10-12
|
|
546
555
|
row.update: &sheet_row_update
|
|
@@ -1397,7 +1397,10 @@ writes:
|
|
|
1397
1397
|
target: {resource: channel, label: Channel}
|
|
1398
1398
|
steps:
|
|
1399
1399
|
- action: SLACK_SEND_MESSAGE
|
|
1400
|
-
|
|
1400
|
+
# a draft with `blocks` (Gravity's digest, pictures and all) posts them, its text only as their fallback:
|
|
1401
|
+
# Slack takes markdown_text or blocks, never both
|
|
1402
|
+
args: {channel: "{target}", markdown_text: "{draft|text_unless_blocks}", blocks: "{draft.blocks}",
|
|
1403
|
+
fallback_text: "{draft|text_if_blocks}", thread_ts: "{draft.thread}"}
|
|
1401
1404
|
save: {id: "data.ts ?? data.message.ts", channel: "data.channel ?? ={target}"}
|
|
1402
1405
|
returns: {id: id, channel: channel, text: draft.text}
|
|
1403
1406
|
read_back:
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gravity-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.12.0"
|
|
4
4
|
description = "gravity cli — init, run, and push python agents to the Gravity marketplace"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
7
7
|
license-files = ["LICENSE", "NOTICE"]
|
|
8
8
|
requires-python = ">=3.12"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"gravity-schema==0.
|
|
10
|
+
"gravity-schema==0.12.0", # released in lockstep: always the same version as this package
|
|
11
11
|
"typer>=0.15.0",
|
|
12
12
|
"httpx>=0.27.0",
|
|
13
13
|
"rich>=13.9.0",
|
|
@@ -869,9 +869,8 @@ see, locally or hosted:
|
|
|
869
869
|
- [ ] `gravity validate` passes and a `gravity run` (or `gravity dev` run) produced the result you expect (§8, §9)
|
|
870
870
|
- [ ] No keys or secrets anywhere; nothing your code needs lives outside `src/` and `tests/`
|
|
871
871
|
|
|
872
|
-
## 12. Contract v2
|
|
872
|
+
## 12. Contract v2
|
|
873
873
|
|
|
874
|
-
This guide is contract v1
|
|
875
|
-
|
|
876
|
-
against a gateway that serves v2. Its guide is `gravity guide --contract v2`, and `gravity init my-agent --contract v2`
|
|
874
|
+
This guide is contract v1. Contract v2 names what an agent reads and changes as capabilities (`message.list`,
|
|
875
|
+
`issue.create`) instead of tools, and the person picks the app at setup. Gravity runs both. Its guide is `gravity guide --contract v2`, and `gravity init my-agent --contract v2`
|
|
877
876
|
starts one.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Build an agent for Gravity: contract v2
|
|
1
|
+
# Build an agent for Gravity: contract v2
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> Gravity runs contract v1 and v2; `gravity guide` (without `--contract v2`) is v1's guide. Start a v2 agent with
|
|
4
|
+
> `gravity init my-agent --contract v2`. A v2 agent runs once its consumer has set it up: their app and place for
|
|
5
|
+
> each source, write and output.
|
|
6
6
|
|
|
7
7
|
Everything you need to build, test and submit a Gravity agent, in the order you'll do it. What you can use on
|
|
8
8
|
which app is in `gravity capabilities`; the exact rules are in `AGENT_STANDARD_V2.md` in the gravity-cli repo.
|
|
@@ -4,6 +4,13 @@ Shown by `gravity update` and `gravity changelog`, and after an update. Each rel
|
|
|
4
4
|
then one bullet per change: `- new|improved|fixed: A one-line headline. The detail behind it.`
|
|
5
5
|
Write it for a builder, not for a maintainer. `tests/test_changelog.py` fails a release that has no entry.
|
|
6
6
|
|
|
7
|
+
## 0.12.0 - 2026-10-31
|
|
8
|
+
|
|
9
|
+
- new: Contract v2 is no longer a preview: Gravity's hosted platform runs v1 and v2 agents side by side. A v2 agent runs once its consumer has set it up (their app and place for each source, write and output). `gravity init` still starts v1 unless you pass `--contract v2`.
|
|
10
|
+
- new: A v2 output can go to a new Google Sheet: `spreadsheet.create` takes a `rows` or `xlsx` output and makes a spreadsheet with a tab for every table in your corpus.
|
|
11
|
+
- improved: A v2 output sent to Slack posts the same digest Gravity shows (headings, tables, pictures as Slack blocks), not a plain-text copy.
|
|
12
|
+
- improved: The v2 minimal template shows how to declare an output and return the corpus it's rendered from; an output without a corpus fails at delivery.
|
|
13
|
+
|
|
7
14
|
## 0.11.1 - 2026-10-31
|
|
8
15
|
|
|
9
16
|
- fixed: `gravity connect sheets` (and the other v1 app names) works again on a gateway that serves both contracts. 0.9.0 through 0.11.0 took the v2 path on any gateway that served v2, where v1's names aren't apps; now only a v2-only gateway gets it.
|
|
@@ -10,13 +10,13 @@ from gravity_schema import CONTRACT_V1, CONTRACT_V2
|
|
|
10
10
|
from .. import Problem, ui
|
|
11
11
|
|
|
12
12
|
GUIDE = Path(__file__).parent.parent / "BUILDER_GUIDE.md" # ships inside the package
|
|
13
|
-
GUIDE_V2 = GUIDE.with_name("BUILDER_GUIDE_V2.md") # contract v2
|
|
13
|
+
GUIDE_V2 = GUIDE.with_name("BUILDER_GUIDE_V2.md") # contract v2
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def guide_command(
|
|
17
17
|
save: bool = typer.Option(False, "--save", help="Write the guide to the current folder instead of showing it"),
|
|
18
18
|
contract: Annotated[str, typer.Option(
|
|
19
|
-
"--contract", metavar="v1|v2", help="v1 (tools
|
|
19
|
+
"--contract", metavar="v1|v2", help="v1 (tools) or v2 (capabilities, the app picked at setup)",
|
|
20
20
|
)] = CONTRACT_V1,
|
|
21
21
|
):
|
|
22
22
|
"""How to build a good agent: the builder guide."""
|
|
@@ -48,8 +48,7 @@ def init_command(
|
|
|
48
48
|
# Annotated, so a call from Python (the welcome's first agent, tests) gets the plain default.
|
|
49
49
|
contract: Annotated[str, typer.Option(
|
|
50
50
|
"--contract", metavar="v1|v2",
|
|
51
|
-
help="v1 names the tools the agent calls; v2 names capabilities and the user picks the app
|
|
52
|
-
"needs a gateway that runs v2)",
|
|
51
|
+
help="v1 names the tools the agent calls; v2 names capabilities and the user picks the app at setup",
|
|
53
52
|
)] = CONTRACT_V1,
|
|
54
53
|
):
|
|
55
54
|
"""Scaffold a working agent: manifest, pinned deps and a src/agent.py that runs."""
|
|
@@ -99,6 +98,5 @@ def init_command(
|
|
|
99
98
|
workspace.refresh(dest)
|
|
100
99
|
install = "uv venv && uv pip install -r requirements.txt"
|
|
101
100
|
if contract == CONTRACT_V2:
|
|
102
|
-
ui.note("Contract v2 is a preview: it runs only against a gateway that serves v2.")
|
|
103
101
|
install += f" && {SDK_INSTALL}"
|
|
104
102
|
ui.next_steps(f"cd {name}", install, 'gravity run --input query="hello"')
|
|
@@ -1155,11 +1155,10 @@ your folder: read them as examples of structure, and follow the method.
|
|
|
1155
1155
|
- [ ] `gravity validate` passes; a `gravity run` or `gravity dev` run produced the result you expect
|
|
1156
1156
|
- [ ] No keys or secrets in any file; nothing the code needs lives outside `src/` and `tests/`
|
|
1157
1157
|
|
|
1158
|
-
## 17. Contract v2
|
|
1158
|
+
## 17. Contract v2: capabilities instead of tools
|
|
1159
1159
|
|
|
1160
|
-
Everything above is contract v1
|
|
1161
|
-
|
|
1162
|
-
reads both, picked by the manifest's `contract`; `gravity guide --contract v2` is the full v2 guide and
|
|
1160
|
+
Everything above is contract v1. Gravity's hosted platform runs v1 and v2; build on v2 when the person asks for it
|
|
1161
|
+
(`gravity init --contract v2`), else stay on v1. The CLI reads both, picked by the manifest's `contract`; `gravity guide --contract v2` is the full v2 guide and
|
|
1163
1162
|
`AGENT_STANDARD_V2.md` its exact rules.
|
|
1164
1163
|
|
|
1165
1164
|
In v2 the manifest never names an app or a tool. It names **capabilities**, `<shape>.<verb>` (`message.list`,
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/src/gravity_cli/templates/v2/minimal/manifest.yaml
RENAMED
|
@@ -38,6 +38,15 @@ models:
|
|
|
38
38
|
# label: "Where follow-ups go"
|
|
39
39
|
# approvals:
|
|
40
40
|
# required_for: [issue.create] # each call waits for the consumer's yes
|
|
41
|
+
#
|
|
42
|
+
# What the result can become, delivered by Gravity after the run (the agent declares no write for it). An agent with
|
|
43
|
+
# outputs returns a corpus in its final state (see src/agent.py); without one the delivery fails.
|
|
44
|
+
# outputs:
|
|
45
|
+
# summary:
|
|
46
|
+
# renderer: markdown # markdown | docx | pptx | pdf | rows | xlsx
|
|
47
|
+
# label: "Summary"
|
|
48
|
+
# destinations: [download, message.send]
|
|
49
|
+
# default: {destination: message.send, app: gmail}
|
|
41
50
|
|
|
42
51
|
resources:
|
|
43
52
|
memory_mb: 512 # a request — the platform clamps, never guarantees
|
|
@@ -13,6 +13,7 @@ from langgraph.prebuilt import create_react_agent
|
|
|
13
13
|
class State(TypedDict):
|
|
14
14
|
inputs: dict
|
|
15
15
|
result: str
|
|
16
|
+
corpus: dict # what the manifest's outputs are rendered from (unused without outputs)
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
# ← manifest.runtime.entrypoint. An async factory the runner calls per run; building the
|
|
@@ -41,7 +42,10 @@ async def graph():
|
|
|
41
42
|
async def run_agent(state: State):
|
|
42
43
|
query = state["inputs"].get("query", "")
|
|
43
44
|
result = await react.ainvoke({"messages": [{"role": "user", "content": query}]})
|
|
44
|
-
|
|
45
|
+
text = result["messages"][-1].content
|
|
46
|
+
# With `outputs` in the manifest, return the corpus they're rendered from as well:
|
|
47
|
+
# return {**gravity.Corpus(title="Summary", summary=text).to_state(), "result": text}
|
|
48
|
+
return {"result": text}
|
|
45
49
|
|
|
46
50
|
workflow = StateGraph(State)
|
|
47
51
|
workflow.add_node("agent", run_agent)
|
|
@@ -23,10 +23,11 @@ def test_templates_are_v2_and_their_example_is_valid_when_uncommented(tmp_path,
|
|
|
23
23
|
(tmp_path / "manifest.yaml").write_text(text, encoding="utf-8")
|
|
24
24
|
assert load_manifest(tmp_path / "manifest.yaml").contract == "v2"
|
|
25
25
|
# the commented example, uncommented, is a valid manifest too: it names real capabilities
|
|
26
|
-
example = re.sub(r"^# (sources:|writes:|approvals:| .*)$", r"\1", text, flags=re.MULTILINE)
|
|
26
|
+
example = re.sub(r"^# (sources:|writes:|approvals:|outputs:| .*)$", r"\1", text, flags=re.MULTILINE)
|
|
27
27
|
(tmp_path / "manifest.yaml").write_text(example, encoding="utf-8")
|
|
28
28
|
m = load_manifest(tmp_path / "manifest.yaml")
|
|
29
|
-
|
|
29
|
+
output = {"message.send"} if template == "minimal" else set() # the one that shows an output, sent by mail
|
|
30
|
+
assert m.capabilities == {"issue.list", "issue.create", *output} and m.approvals.required_for == ["issue.create"]
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
STARTER = Path(__file__).resolve().parents[1] / "starter-v2" # the contract v2 example; starter/ is v1
|
|
@@ -164,7 +164,7 @@ wheels = [
|
|
|
164
164
|
|
|
165
165
|
[[package]]
|
|
166
166
|
name = "gravity-cli"
|
|
167
|
-
version = "0.
|
|
167
|
+
version = "0.12.0"
|
|
168
168
|
source = { editable = "." }
|
|
169
169
|
dependencies = [
|
|
170
170
|
{ name = "gravity-schema" },
|
|
@@ -201,7 +201,7 @@ dev = [
|
|
|
201
201
|
|
|
202
202
|
[[package]]
|
|
203
203
|
name = "gravity-schema"
|
|
204
|
-
version = "0.
|
|
204
|
+
version = "0.12.0"
|
|
205
205
|
source = { editable = "packages/gravity-schema" }
|
|
206
206
|
dependencies = [
|
|
207
207
|
{ name = "pydantic" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/__init__.py
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/__main__.py
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/built_ins.py
RENAMED
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/catalog.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/contract.py
RENAMED
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/describe.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/gen_catalog.py
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/gen_vocabulary.py
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/instance.py
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/manifest.py
RENAMED
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/rules_cases.json
RENAMED
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/source_scan.py
RENAMED
|
File without changes
|
|
File without changes
|
{gravity_cli-0.11.1 → gravity_cli-0.12.0}/packages/gravity-schema/gravity_schema/validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|