gumloop 0.5.1__tar.gz → 0.5.2__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.
- {gumloop-0.5.1 → gumloop-0.5.2}/PKG-INFO +1 -1
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/_version.py +1 -1
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/sessions.py +11 -3
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/plugin_assets/gumloop/skills/gumloop-cli/references/commands.md +5 -1
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/types.py +1 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sessions.py +32 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.env.example +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.github/workflows/ci.yml +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.github/workflows/release.yml +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.gitignore +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.pre-commit-config.yaml +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/.python-version +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/LICENSE +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/README.md +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/pyproject.toml +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/scripts/check +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/scripts/fmt +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/scripts/import-logins.sh +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/scripts/install.sh +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/scripts/sdk_examples.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/_auth.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/_client.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/_gumcp_transport.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/_http.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/brain_sync.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/chromium_cookies.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/discovery.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/extract.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/filter.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/browser_logins/firefox_cookies.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/_args_input.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/_downloads.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/_sync_output.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/agents.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/artifacts.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/auth.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/brain.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/browser.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/chat.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/evaluations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/mcp.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/models.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/plugin.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/skills.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/sync.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/commands/update.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/console.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/context.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/credentials.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/errors.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/main.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/oauth.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/plugin_assets/gumloop/plugin.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/plugin_assets/gumloop/skills/gumloop-cli/SKILL.md +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/errors.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/oauth.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/py.typed +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/agents.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/artifacts.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/brain.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/browser_profiles.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/chat.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/evaluations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/mcp.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/organizations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/sessions.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/skills.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/sync.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/resources/teams.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/spec/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/spec/_compat.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/spec/_extensions.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/archive.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/bundle.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/bundle_validation.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/errors.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/hashing.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/installed.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/local_state.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/lock.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/markers.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/reconcile.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/reporting.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/results.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/run.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/scheduler.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/target_files.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/targets.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/sync/wire.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/conftest.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/sync_scenario_helpers.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/sync_test_fakes.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_agents.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_args_input.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_artifacts.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_brain.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_brain_sync.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_browser_logins.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_chat.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_context.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_credentials.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_evaluations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_home_isolation.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_login.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_main.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_mcp.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_models.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_plugin.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_skills.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_bundle.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_command.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_command_safety.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_contract_fixtures.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_enrollment.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_fixture_corpus.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_hashing.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_installed.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_reconciliation_safety.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_scheduler_macos.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/cli/test_sync_targets.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/conftest.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/README.md +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/generated-bundle-transfer-limit.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-absolute-path.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-bytes-per-file-limit.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-device.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-duplicate-entry.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-fifo.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-files-per-skill-limit.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-nul-name.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-parent-traversal.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-reserved-marker.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-socket.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-symlink.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-total-uncompressed-limit.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-windows-drive-prefix.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/valid-single-skill-stored.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/valid-single-skill.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/bundles/newer-than-plan.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/bundles/normal.zip +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/catalog.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/corpus.sha256 +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/hashes/content-v1.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/hashes/manifest-v1.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/invalid-duplicate-identity.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/invalid-duplicate-install-name.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/invalid-manifest-hash.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/newer-than-plan.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/normal-bundle.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/below-pro.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/cli-upgrade-required.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/lost-membership.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/normal-empty-plan.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/normal-plan.json +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/integration/conftest.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/integration/test_live.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/__init__.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/conftest.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/helpers.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_agents.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_artifacts.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_brain.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_chat.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_client.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_errors.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_evaluations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_gumcp_transport.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_mcp.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_models.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_oauth.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_organizations.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_sessions.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_skills.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_sync.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/sdk/test_teams.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/skill_sync_fixtures.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/tests/test_client.py +0 -0
- {gumloop-0.5.1 → gumloop-0.5.2}/uv.lock +0 -0
|
@@ -24,6 +24,7 @@ sessions_app = typer.Typer(
|
|
|
24
24
|
epilog=(
|
|
25
25
|
"Examples:\n"
|
|
26
26
|
" gumloop sessions create agent_abc --input 'Hello!'\n"
|
|
27
|
+
" gumloop sessions create agent_abc --name 'Invoice 4471' --input 'Reconcile invoice 4471'\n"
|
|
27
28
|
" echo 'Hi from a file' | gumloop sessions create agent_abc --input-stdin -"
|
|
28
29
|
),
|
|
29
30
|
)
|
|
@@ -42,6 +43,10 @@ def create_session(
|
|
|
42
43
|
str | None,
|
|
43
44
|
typer.Option("--session-id", help="Optional client-side id for the new session."),
|
|
44
45
|
] = None,
|
|
46
|
+
name: Annotated[
|
|
47
|
+
str | None,
|
|
48
|
+
typer.Option("--name", help="Session name shown in the sidebar (1-256 characters)."),
|
|
49
|
+
] = None,
|
|
45
50
|
json_output: Annotated[
|
|
46
51
|
bool,
|
|
47
52
|
typer.Option("--json", help="Print the raw SDK response as JSON."),
|
|
@@ -56,6 +61,8 @@ def create_session(
|
|
|
56
61
|
raise GumloopError("Pass at most one of --input or --input-stdin.")
|
|
57
62
|
if input_stdin is not None and input_stdin != "-":
|
|
58
63
|
raise GumloopError("--input-stdin only accepts '-' (reads from stdin).")
|
|
64
|
+
if name is not None and not name.strip():
|
|
65
|
+
raise GumloopError("Pass a non-empty --name.")
|
|
59
66
|
message = sys.stdin.read() if input_stdin == "-" else input_text
|
|
60
67
|
|
|
61
68
|
# cast narrows SessionResponse | Iterator to the non-streaming branch
|
|
@@ -67,6 +74,7 @@ def create_session(
|
|
|
67
74
|
agent_id,
|
|
68
75
|
input=message,
|
|
69
76
|
session_id=session_id,
|
|
77
|
+
name=name,
|
|
70
78
|
)
|
|
71
79
|
),
|
|
72
80
|
)
|
|
@@ -82,7 +90,7 @@ def create_session(
|
|
|
82
90
|
# message bodies go through rich.text.Text.
|
|
83
91
|
session = response.session
|
|
84
92
|
console.print(f"[bold]Session {escape_markup(session.id)}[/bold]", markup=True, highlight=False)
|
|
85
|
-
for field in ("agent_id", "agent_name", "state", "created_at"):
|
|
93
|
+
for field in ("name", "agent_id", "agent_name", "state", "created_at"):
|
|
86
94
|
value = getattr(session, field, None)
|
|
87
95
|
if value not in (None, ""):
|
|
88
96
|
console.print(f" {field}: {value}", markup=False, highlight=False)
|
|
@@ -208,7 +216,7 @@ def get_session(
|
|
|
208
216
|
|
|
209
217
|
session = response.session
|
|
210
218
|
console.print(f"[bold]Session {escape_markup(session.id)}[/bold]", markup=True, highlight=False)
|
|
211
|
-
for field in ("agent_id", "agent_name", "state", "created_at"):
|
|
219
|
+
for field in ("name", "agent_id", "agent_name", "state", "created_at"):
|
|
212
220
|
value = getattr(session, field, None)
|
|
213
221
|
if value not in (None, ""):
|
|
214
222
|
console.print(f" {field}: {value}", markup=False, highlight=False)
|
|
@@ -272,7 +280,7 @@ def send_session(
|
|
|
272
280
|
return
|
|
273
281
|
|
|
274
282
|
console.print(f"[bold]Session {escape_markup(session.id)}[/bold]", markup=True, highlight=False)
|
|
275
|
-
for field in ("agent_id", "agent_name", "state", "created_at"):
|
|
283
|
+
for field in ("name", "agent_id", "agent_name", "state", "created_at"):
|
|
276
284
|
value = getattr(session, field, None)
|
|
277
285
|
if value not in (None, ""):
|
|
278
286
|
console.print(f" {field}: {value}", markup=False, highlight=False)
|
|
@@ -51,12 +51,16 @@ cat task.txt | gumloop models route --input-stdin - --model gpt-5.6-luna --model
|
|
|
51
51
|
## Sessions
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
gumloop sessions create <agent_id> [--input text | --input-stdin -] [--session-id id] [--json]
|
|
54
|
+
gumloop sessions create <agent_id> [--input text | --input-stdin -] [--session-id id] [--name name] [--json]
|
|
55
|
+
gumloop sessions list <agent_id> [--search text] [--state s] [--type t] [--sort order] [--limit n] [--json]
|
|
55
56
|
gumloop sessions get <session_id> [--json] # --json returns the full transcript
|
|
56
57
|
gumloop sessions send <session_id> [--input text | --input-stdin -] [--json]
|
|
58
|
+
gumloop sessions rename <session_id> <name>
|
|
57
59
|
gumloop sessions cancel <session_id>
|
|
58
60
|
```
|
|
59
61
|
|
|
62
|
+
`--name` sets the name shown in the sidebar; without it the session keeps the agent's name until renamed. `list --search` matches session names (and message content), so named sessions are findable by name.
|
|
63
|
+
|
|
60
64
|
## Chat completions
|
|
61
65
|
|
|
62
66
|
```bash
|
|
@@ -29,6 +29,38 @@ def test_sessions_create_posts_to_per_agent_endpoint_with_inline_input(cli_runne
|
|
|
29
29
|
assert sent["input"] == "hello there"
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
@respx.mock
|
|
33
|
+
def test_sessions_create_sends_name(cli_runner: CliRunner) -> None:
|
|
34
|
+
route = respx.post(f"{API_BASE}/agents/agent_abc/sessions").mock(
|
|
35
|
+
return_value=httpx.Response(
|
|
36
|
+
201,
|
|
37
|
+
json={"session": {"id": "session_xyz", "agent_id": "agent_abc", "name": "CDE Lightband ebff4bf3"}},
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
save_credentials(Credentials(api_key="key"))
|
|
41
|
+
|
|
42
|
+
result = cli_runner.invoke(
|
|
43
|
+
app,
|
|
44
|
+
["sessions", "create", "agent_abc", "--name", "CDE Lightband ebff4bf3", "--input", "start"],
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
assert result.exit_code == 0, result.output
|
|
48
|
+
sent = json.loads(route.calls[0].request.content)
|
|
49
|
+
assert sent["name"] == "CDE Lightband ebff4bf3"
|
|
50
|
+
assert "CDE Lightband ebff4bf3" in result.output
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@respx.mock
|
|
54
|
+
def test_sessions_create_rejects_blank_name(cli_runner: CliRunner) -> None:
|
|
55
|
+
route = respx.post(f"{API_BASE}/agents/agent_abc/sessions")
|
|
56
|
+
save_credentials(Credentials(api_key="key"))
|
|
57
|
+
|
|
58
|
+
result = cli_runner.invoke(app, ["sessions", "create", "agent_abc", "--name", " ", "--json"])
|
|
59
|
+
|
|
60
|
+
assert result.exit_code != 0
|
|
61
|
+
assert not route.called
|
|
62
|
+
|
|
63
|
+
|
|
32
64
|
@respx.mock
|
|
33
65
|
def test_sessions_create_reads_input_from_stdin(cli_runner: CliRunner) -> None:
|
|
34
66
|
route = respx.post(f"{API_BASE}/agents/agent_abc/sessions").mock(
|
|
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
|
{gumloop-0.5.1 → gumloop-0.5.2}/src/gumloop/cli/plugin_assets/gumloop/skills/gumloop-cli/SKILL.md
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-absolute-path.zip
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-duplicate-entry.zip
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-parent-traversal.zip
RENAMED
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/invalid-reserved-marker.zip
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/valid-single-skill-stored.zip
RENAMED
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/archives/valid-single-skill.zip
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
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/manifests/invalid-manifest-hash.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/cli-upgrade-required.json
RENAMED
|
File without changes
|
|
File without changes
|
{gumloop-0.5.1 → gumloop-0.5.2}/tests/fixtures/skill_sync/v1/responses/normal-empty-plan.json
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
|