lkr-dev-cli 0.0.60__tar.gz → 0.0.61__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.
- lkr_dev_cli-0.0.61/.github/workflows/ci.yml +108 -0
- lkr_dev_cli-0.0.61/.github/workflows/release.yml +171 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.gitignore +3 -0
- lkr_dev_cli-0.0.61/.nvmrc +1 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/Makefile +6 -1
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/PKG-INFO +28 -4
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/README.md +27 -3
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/manifest.lkml +15 -0
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/package-lock.json +6824 -0
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/package.json +29 -0
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/src/index.tsx +337 -0
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/tsconfig.json +13 -0
- lkr_dev_cli-0.0.61/add-ons/codemode-extension/webpack.config.js +42 -0
- lkr_dev_cli-0.0.61/lkr/codemode/wasm/.cargo/config.toml +2 -0
- lkr_dev_cli-0.0.61/lkr/codemode/wasm/Cargo.lock +2091 -0
- lkr_dev_cli-0.0.61/lkr/codemode/wasm/Cargo.toml +38 -0
- lkr_dev_cli-0.0.61/lkr/codemode/wasm/build.rs +762 -0
- lkr_dev_cli-0.0.61/lkr/codemode/wasm/src/lib.rs +1909 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/__init__.py +14 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/main.py +87 -1
- lkr_dev_cli-0.0.61/lkr/parse/sql.py +1651 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/agents.py +67 -29
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/lookml.py +1 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr.md +25 -2
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/pyproject.toml +1 -1
- lkr_dev_cli-0.0.61/scripts/build_codemode_wasm.py +226 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_agents_tools.py +59 -22
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_tools.py +27 -0
- lkr_dev_cli-0.0.61/tests/test_parse_sql.py +457 -0
- lkr_dev_cli-0.0.60/.github/workflows/ci.yml +0 -54
- lkr_dev_cli-0.0.60/.github/workflows/release.yml +0 -82
- lkr_dev_cli-0.0.60/lkr/parse/sql.py +0 -630
- lkr_dev_cli-0.0.60/tests/test_parse_sql.py +0 -148
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/01-simple-single-table.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/02-conditional-measures-and-bucketing.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/03-pk-fk-joins.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/04-triangle-inequality-joins.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/05-dimensional-non-key-joins.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/06-nested-ctes-and-subqueries.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/07-measure-of-measures-reaggregation.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/08-window-functions-and-qualify.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/09-unions.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/10-unnest-arrays.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/11-json-columns-and-extract.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/12-table-wildcards.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/13-large-tables-and-partitioning.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/14-templated-filters-and-parameters.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/measures-and-sql-functions.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/examples/lookml-pr-checks.yml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/examples/template.model.lkml.tmpl +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/configure_model.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/create_github_pr.sh +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/diff_lookml_tests.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/init_branch.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/pre_gate.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/preflight.sh +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/setup_repo.sh +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/validate_and_commit_branch.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/sub-skills/setup/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/generate-view-from-table/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/generate-view-from-table/scripts/generate_bronze_view.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/order_items_query.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/personal_folder_dashboards.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/traverse_folders.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/bq_view_lookml_generator.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/create_custom_view.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/deploy_and_reset_workspace.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/ensure_project_and_model.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/generate_lookml.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/inspect_connections.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/migrate_dashboard_to_udd.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/upload_assets.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-expressions/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-expressions/references/excel-equivalents.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-filters/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-access-grants/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-advanced-liquid/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/references/advanced.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/references/joins.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/dimension.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/dimension_group.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/filter_parameter.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/measure.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/value_format.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-liquid/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-model/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-ojof/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-refinements/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-sets/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-tests/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-view/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-view/references/derived_table.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/SKILL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/scripts/enrich_partition_clustering.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/scripts/profile_string_fields.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/ci-windows.yaml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/update-looker-skills.yml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/website.yml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.pre-commit-config.yaml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.python-version +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.vscode/launch.json +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.vscode/settings.json +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/AGENTS.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/Dockerfile +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/LICENSE +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/TODO.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/cloudbuild.yaml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/codemode.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/oauth.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth_service.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/classes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/LOCAL.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/constant.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/download_swagger.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/examples.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/help.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/readme.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/swagger.json +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/type.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/constants.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/custom_types.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/exceptions.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/classes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/logger.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/classes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/utils.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/classes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/embed_container.html +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/utils.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/constants.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/curation.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/dag.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_database_compare.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_snapshot.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_to_api.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/sql_to_lookml.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/translations.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/types.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/user_attributes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/_schema_rs.so +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/builder.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/dynamic_fields.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/fields.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/filter_expressions.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/Cargo.lock +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/Cargo.toml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/src/lib.rs +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/validator.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/classes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/main.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/permission_deprecation.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/utils.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr_dev_cli/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/parse.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/README.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/__init__.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/history.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/skills-lock.json +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/TESTING.md +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_bq_change_listener.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_codemode.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_dependency_resolution.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_deps.sh +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_extended_sdk_methods.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_init_sdk.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_database_compare.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_field_curation.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_snapshot.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_oauth_account.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_parse_lookml.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_permission_deprecation.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_schema.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_sql_join_analysis.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_sql_queries_workflow.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_translations.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_user_attributes.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_version.py +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/ty.toml +0 -0
- {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/uv.lock +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
validate:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
contents: "write"
|
|
15
|
+
pull-requests: "write"
|
|
16
|
+
id-token: "write"
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout code
|
|
20
|
+
uses: actions/checkout@v5
|
|
21
|
+
|
|
22
|
+
- name: Setup Rust toolchain
|
|
23
|
+
uses: dtolnay/rust-toolchain@stable
|
|
24
|
+
with:
|
|
25
|
+
components: clippy, rustfmt, llvm-tools-preview
|
|
26
|
+
targets: wasm32-unknown-unknown
|
|
27
|
+
|
|
28
|
+
- name: Install wasm-bindgen-cli
|
|
29
|
+
run: |
|
|
30
|
+
curl -fSL https://github.com/wasm-bindgen/wasm-bindgen/releases/download/0.2.129/wasm-bindgen-0.2.129-x86_64-unknown-linux-musl.tar.gz \
|
|
31
|
+
| tar -xz -C ~/.cargo/bin --strip-components=1 wasm-bindgen-0.2.129-x86_64-unknown-linux-musl/wasm-bindgen
|
|
32
|
+
|
|
33
|
+
- name: Setup Node.js
|
|
34
|
+
uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version-file: .nvmrc
|
|
37
|
+
|
|
38
|
+
- name: Setup Python
|
|
39
|
+
uses: actions/setup-python@v6
|
|
40
|
+
with:
|
|
41
|
+
python-version: "3.12"
|
|
42
|
+
|
|
43
|
+
- name: Install uv
|
|
44
|
+
uses: astral-sh/setup-uv@v7
|
|
45
|
+
with:
|
|
46
|
+
version: latest
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: |
|
|
50
|
+
uv sync --extra all
|
|
51
|
+
|
|
52
|
+
- name: Run Rust clippy, unit tests, and build extension
|
|
53
|
+
run: |
|
|
54
|
+
cargo clippy --manifest-path lkr/schema/rust/Cargo.toml -- -D warnings
|
|
55
|
+
cargo test --no-default-features --manifest-path lkr/schema/rust/Cargo.toml
|
|
56
|
+
make schema-rs
|
|
57
|
+
cargo clippy --manifest-path lkr/codemode/wasm/Cargo.toml -- -D warnings
|
|
58
|
+
cargo test --manifest-path lkr/codemode/wasm/Cargo.toml
|
|
59
|
+
make codemode-wasm
|
|
60
|
+
cd add-ons/codemode-extension && npm install --no-audit --no-fund && npx tsc --noEmit && npm run build
|
|
61
|
+
|
|
62
|
+
- name: Run pytest
|
|
63
|
+
run: |
|
|
64
|
+
uv run pytest tests/ -v
|
|
65
|
+
uv run pytest tests/test_schema.py -v --cov=lkr.schema --cov=scripts.schema --cov-report=term-missing
|
|
66
|
+
|
|
67
|
+
- name: Run ruff
|
|
68
|
+
run: |
|
|
69
|
+
uv run ruff check .
|
|
70
|
+
|
|
71
|
+
- name: Run ty
|
|
72
|
+
run: |
|
|
73
|
+
uv run ty check
|
|
74
|
+
|
|
75
|
+
- name: Get short SHA
|
|
76
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
77
|
+
id: vars
|
|
78
|
+
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
79
|
+
|
|
80
|
+
- name: Authenticate to Google Cloud
|
|
81
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
82
|
+
uses: google-github-actions/auth@v3
|
|
83
|
+
with:
|
|
84
|
+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
|
|
85
|
+
project_id: ${{ secrets.GCP_PROJECT_ID }}
|
|
86
|
+
|
|
87
|
+
- name: Upload Code Mode WASM bundles to GCS
|
|
88
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
89
|
+
uses: google-github-actions/upload-cloud-storage@v2
|
|
90
|
+
with:
|
|
91
|
+
path: dist
|
|
92
|
+
destination: "${{ secrets.CDN_BUCKET_NAME }}/cli/codemode/${{ steps.vars.outputs.short_sha }}"
|
|
93
|
+
parent: false
|
|
94
|
+
process_gcloudignore: false
|
|
95
|
+
|
|
96
|
+
- name: Add CDN links to Job Summary and Commit
|
|
97
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
98
|
+
env:
|
|
99
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
100
|
+
run: |
|
|
101
|
+
BODY="### 🚀 Code Mode WASM Deployed to CDN (Commit \`${{ steps.vars.outputs.short_sha }}\`)"$'\n\n'
|
|
102
|
+
for file in dist/*.js; do
|
|
103
|
+
filename=$(basename "$file")
|
|
104
|
+
url="https://cdn.lkr.dev/cli/codemode/${{ steps.vars.outputs.short_sha }}/$filename"
|
|
105
|
+
BODY+="- **$filename**: [\`$url\`]($url)"$'\n'
|
|
106
|
+
done
|
|
107
|
+
echo "$BODY" >> $GITHUB_STEP_SUMMARY
|
|
108
|
+
gh api "/repos/${{ github.repository }}/commits/${{ github.sha }}/comments" -f body="$BODY"
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
name: Release Docker Image
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
|
|
7
|
+
env:
|
|
8
|
+
REGION: us-central1
|
|
9
|
+
SERVICE_NAME: cli
|
|
10
|
+
APP_NAME: lkr-cli
|
|
11
|
+
TAG: ${{ github.event.release.tag_name }}
|
|
12
|
+
UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build-and-push:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
permissions:
|
|
18
|
+
contents: "read"
|
|
19
|
+
id-token: "write"
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Set IMAGE_NAME
|
|
23
|
+
run: echo "IMAGE_NAME=${{ env.REGION }}-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ env.APP_NAME }}/${{ env.SERVICE_NAME }}" >> $GITHUB_ENV
|
|
24
|
+
|
|
25
|
+
- name: Checkout
|
|
26
|
+
uses: actions/checkout@v5
|
|
27
|
+
|
|
28
|
+
- name: Replace version in pyproject.toml
|
|
29
|
+
run: |
|
|
30
|
+
find . -name "pyproject.toml" -exec sed -i "s/^version = .*/version = \"${{ env.TAG }}\"/" {} +
|
|
31
|
+
|
|
32
|
+
- name: Authenticate to Google Cloud
|
|
33
|
+
uses: google-github-actions/auth@v3
|
|
34
|
+
with:
|
|
35
|
+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
|
|
36
|
+
project_id: ${{ secrets.GCP_PROJECT_ID }}
|
|
37
|
+
|
|
38
|
+
- name: Set up Cloud SDK
|
|
39
|
+
uses: google-github-actions/setup-gcloud@v3
|
|
40
|
+
|
|
41
|
+
- name: Build and push Docker image
|
|
42
|
+
run: |
|
|
43
|
+
# Build and push the image with both the release tag and latest
|
|
44
|
+
gcloud builds submit . \
|
|
45
|
+
--project ${{ secrets.GCP_PROJECT_ID }} \
|
|
46
|
+
--tag ${{ env.IMAGE_NAME }}:${{ env.TAG }} \
|
|
47
|
+
--gcs-log-dir=gs://${{ secrets.GCP_LOGS_BUCKET_NAME }}/${{ env.APP_NAME }}
|
|
48
|
+
|
|
49
|
+
- name: Add latest tag
|
|
50
|
+
run: |
|
|
51
|
+
gcloud artifacts docker tags add ${{ env.IMAGE_NAME }}:${{ env.TAG }} \
|
|
52
|
+
${{ env.IMAGE_NAME }}:latest \
|
|
53
|
+
--project ${{ secrets.GCP_PROJECT_ID }}
|
|
54
|
+
|
|
55
|
+
- name: Trigger Website Deploy
|
|
56
|
+
run: |
|
|
57
|
+
curl -fSL "$DEPLOY_URL"
|
|
58
|
+
env:
|
|
59
|
+
DEPLOY_URL: ${{ secrets.DEPLOY_URL }}
|
|
60
|
+
|
|
61
|
+
publish:
|
|
62
|
+
name: python
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@v5
|
|
67
|
+
|
|
68
|
+
- name: Install uv
|
|
69
|
+
uses: astral-sh/setup-uv@v7
|
|
70
|
+
|
|
71
|
+
- name: Replace version in pyproject.toml
|
|
72
|
+
run: |
|
|
73
|
+
find . -name "pyproject.toml" -exec sed -i "s/^version = .*/version = \"${{ env.TAG }}\"/" {} +
|
|
74
|
+
|
|
75
|
+
- name: uv sync
|
|
76
|
+
run: uv sync --frozen --no-dev
|
|
77
|
+
|
|
78
|
+
- name: uv build
|
|
79
|
+
run: uv build
|
|
80
|
+
|
|
81
|
+
- name: uv publish
|
|
82
|
+
run: uv publish
|
|
83
|
+
|
|
84
|
+
codemode-wasm:
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
permissions:
|
|
87
|
+
contents: "write"
|
|
88
|
+
id-token: "write"
|
|
89
|
+
|
|
90
|
+
steps:
|
|
91
|
+
- name: Checkout
|
|
92
|
+
uses: actions/checkout@v5
|
|
93
|
+
|
|
94
|
+
- name: Setup Rust toolchain
|
|
95
|
+
uses: dtolnay/rust-toolchain@stable
|
|
96
|
+
with:
|
|
97
|
+
targets: wasm32-unknown-unknown
|
|
98
|
+
|
|
99
|
+
- name: Install wasm-bindgen-cli
|
|
100
|
+
run: |
|
|
101
|
+
curl -fSL https://github.com/wasm-bindgen/wasm-bindgen/releases/download/0.2.129/wasm-bindgen-0.2.129-x86_64-unknown-linux-musl.tar.gz \
|
|
102
|
+
| tar -xz -C ~/.cargo/bin --strip-components=1 wasm-bindgen-0.2.129-x86_64-unknown-linux-musl/wasm-bindgen
|
|
103
|
+
|
|
104
|
+
- name: Setup Node.js
|
|
105
|
+
uses: actions/setup-node@v4
|
|
106
|
+
with:
|
|
107
|
+
node-version-file: .nvmrc
|
|
108
|
+
|
|
109
|
+
- name: Setup Python
|
|
110
|
+
uses: actions/setup-python@v6
|
|
111
|
+
with:
|
|
112
|
+
python-version: "3.12"
|
|
113
|
+
|
|
114
|
+
- name: Install uv
|
|
115
|
+
uses: astral-sh/setup-uv@v7
|
|
116
|
+
|
|
117
|
+
- name: Build Code Mode WASM and Looker Extension bundles
|
|
118
|
+
run: |
|
|
119
|
+
make codemode-wasm
|
|
120
|
+
cd add-ons/codemode-extension && npm install --no-audit --no-fund && npm run build
|
|
121
|
+
|
|
122
|
+
- name: Authenticate to Google Cloud
|
|
123
|
+
uses: google-github-actions/auth@v3
|
|
124
|
+
with:
|
|
125
|
+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
|
|
126
|
+
project_id: ${{ secrets.GCP_PROJECT_ID }}
|
|
127
|
+
|
|
128
|
+
- name: Set up Cloud SDK
|
|
129
|
+
uses: google-github-actions/setup-gcloud@v3
|
|
130
|
+
|
|
131
|
+
- name: Upload to GCS (Tagged Version)
|
|
132
|
+
uses: google-github-actions/upload-cloud-storage@v2
|
|
133
|
+
with:
|
|
134
|
+
path: dist
|
|
135
|
+
destination: "${{ secrets.CDN_BUCKET_NAME }}/cli/codemode/${{ env.TAG }}"
|
|
136
|
+
parent: false
|
|
137
|
+
process_gcloudignore: false
|
|
138
|
+
|
|
139
|
+
- name: Upload to GCS (Latest)
|
|
140
|
+
uses: google-github-actions/upload-cloud-storage@v2
|
|
141
|
+
with:
|
|
142
|
+
path: dist
|
|
143
|
+
destination: "${{ secrets.CDN_BUCKET_NAME }}/cli/codemode/latest"
|
|
144
|
+
parent: false
|
|
145
|
+
process_gcloudignore: false
|
|
146
|
+
|
|
147
|
+
- name: Invalidate Cloud CDN Cache
|
|
148
|
+
run: |
|
|
149
|
+
gcloud compute url-maps invalidate-cdn-cache "${{ secrets.CDN_LOAD_BALANCER_NAME }}" \
|
|
150
|
+
--path "/cli/codemode/latest/*" \
|
|
151
|
+
--project "${{ secrets.GCP_PROJECT_ID }}" \
|
|
152
|
+
--async
|
|
153
|
+
|
|
154
|
+
- name: Upload assets and update GitHub Release
|
|
155
|
+
env:
|
|
156
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
157
|
+
run: |
|
|
158
|
+
gh release upload "${{ env.TAG }}" dist/*.js --clobber
|
|
159
|
+
LINKS="### 🚀 Code Mode WASM CDN Links"$'\n'
|
|
160
|
+
for ver in "${{ env.TAG }}" latest; do
|
|
161
|
+
LINKS+=$'\n'"#### \`$ver\`"$'\n'
|
|
162
|
+
for file in dist/*.js; do
|
|
163
|
+
filename=$(basename "$file")
|
|
164
|
+
url="https://cdn.lkr.dev/cli/codemode/$ver/$filename"
|
|
165
|
+
LINKS+="- **$filename**: [\`$url\`]($url)"$'\n'
|
|
166
|
+
done
|
|
167
|
+
done
|
|
168
|
+
echo "$LINKS" >> $GITHUB_STEP_SUMMARY
|
|
169
|
+
CURRENT_BODY=$(gh release view "${{ env.TAG }}" --json body --jq .body)
|
|
170
|
+
NEW_BODY="${CURRENT_BODY}"$'\n\n'"${LINKS}"
|
|
171
|
+
gh release edit "${{ env.TAG }}" --notes "$NEW_BODY"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
v24.21.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: docs test-deps codemode-test codemode-start schema-rs test-rs coverage-py coverage-rs coverage
|
|
1
|
+
.PHONY: docs test-deps codemode-test codemode-start codemode-wasm schema-rs test-rs coverage-py coverage-rs coverage
|
|
2
2
|
|
|
3
3
|
docs:
|
|
4
4
|
uv run --frozen --extra all typer lkr/main.py utils docs --output lkr.md
|
|
@@ -12,9 +12,14 @@ codemode-test:
|
|
|
12
12
|
schema-rs:
|
|
13
13
|
cargo build --release --manifest-path lkr/schema/rust/Cargo.toml && cp lkr/schema/rust/target/release/lib_schema_rs.so lkr/schema/_schema_rs.so
|
|
14
14
|
|
|
15
|
+
codemode-wasm:
|
|
16
|
+
uv run python scripts/build_codemode_wasm.py
|
|
17
|
+
|
|
15
18
|
test-rs:
|
|
16
19
|
cargo clippy --manifest-path lkr/schema/rust/Cargo.toml -- -D warnings
|
|
17
20
|
cargo test --no-default-features --manifest-path lkr/schema/rust/Cargo.toml
|
|
21
|
+
cargo clippy --manifest-path lkr/codemode/wasm/Cargo.toml -- -D warnings
|
|
22
|
+
cargo test --manifest-path lkr/codemode/wasm/Cargo.toml
|
|
18
23
|
|
|
19
24
|
coverage-py:
|
|
20
25
|
uv run --frozen --extra all pytest tests/ --ignore=tests/test_dependency_resolution.py --cov=lkr/schema --cov=scripts/schema --cov-report=term-missing --cov-report=xml:coverage.xml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: lkr-dev-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.61
|
|
4
4
|
Summary: lkr: a command line interface for looker
|
|
5
5
|
Author: bwebs
|
|
6
6
|
License-Expression: MIT
|
|
@@ -574,15 +574,39 @@ uvx lkr-dev-cli tools agents delete <agent_id> \
|
|
|
574
574
|
|
|
575
575
|
### Generating an A2A Agent Card
|
|
576
576
|
|
|
577
|
-
`lkr tools agents card` generates an **Agent-to-Agent** (**A2A**) `0.3.0` Agent Card JSON file (`looker-<agent_id>-agent-card.json`) from your Looker agent's name, description, Explore sources, and active golden queries (
|
|
577
|
+
`lkr tools agents card` generates an **Agent-to-Agent** (**A2A**) `0.3.0` Agent Card JSON file (`looker-<agent_id>-agent-card.json`) from your Looker agent's name, description, Explore sources (`tags`), and active golden queries (`examples`). Looker `26.10.0+` is required (`26.2.0` added the initial route and `26.6.0` added SSE, with default enablement and instruction support in `26.10.0+`).
|
|
578
|
+
|
|
579
|
+
Because Looker agents do not store a dedicated A2A routing summary ("when should another agent call this endpoint?"), `card` handles `skills[]` in three ways while preserving Looker's active golden queries as `examples` unless overridden:
|
|
580
|
+
|
|
581
|
+
1. **Interactive prompt (default)**: Keeps Looker's `agent.description` on `card.description` and prompts for `skills[0].description` (press Enter to reuse Looker's description).
|
|
582
|
+
2. **Looker project file (`--project-id` + `--skills-file`)**: Reads a JSON skill object or array stored inside a Looker project (for example, `agents/ecommerce_skill.json`), merges any omitted `tags` or `examples` from the Looker agent, and writes `looker-<agent_id>-agent-card.json`.
|
|
583
|
+
3. **Local file (`--skills-file`)**: Reads a JSON skill object or array from local disk.
|
|
584
|
+
|
|
585
|
+
For example, store `agents/ecommerce_skill.json` in your Looker project (`thelook`):
|
|
586
|
+
|
|
587
|
+
```json
|
|
588
|
+
{
|
|
589
|
+
"id": "orders-and-revenue",
|
|
590
|
+
"name": "Orders & Revenue",
|
|
591
|
+
"description": "Route here when the user asks about order volume, GMV, returns, or brand performance."
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
Then read that skill file from Looker and write `looker-<agent_id>-agent-card.json`:
|
|
578
596
|
|
|
579
597
|
```bash
|
|
580
|
-
#
|
|
598
|
+
# Read skill JSON from a Looker project (pass `lkr --dev` before `tools` if only on your dev branch) and write looker-<agent_id>-agent-card.json
|
|
599
|
+
uvx lkr-dev-cli tools agents card <agent_id> \
|
|
600
|
+
--project-id thelook \
|
|
601
|
+
--skills-file agents/ecommerce_skill.json
|
|
602
|
+
|
|
603
|
+
# Interactive prompt for skills[0].description (OAuth2 default), or read a local skills JSON file
|
|
581
604
|
uvx lkr-dev-cli tools agents card <agent_id>
|
|
605
|
+
uvx lkr-dev-cli tools agents card <agent_id> --skills-file ./skills.json
|
|
582
606
|
|
|
583
607
|
# Build a bearer-token card offline (zero Looker API calls) and print to stdout
|
|
584
608
|
uvx lkr-dev-cli --base-url https://acme.cloud.looker.com \
|
|
585
|
-
tools agents card <agent_id> --offline --auth bearer -o -
|
|
609
|
+
tools agents card <agent_id> --offline --description "Routes order and revenue questions." --auth bearer -o -
|
|
586
610
|
```
|
|
587
611
|
|
|
588
612
|
Example `looker-<agent_id>-agent-card.json` output (`--auth oauth2`, default):
|
|
@@ -535,15 +535,39 @@ uvx lkr-dev-cli tools agents delete <agent_id> \
|
|
|
535
535
|
|
|
536
536
|
### Generating an A2A Agent Card
|
|
537
537
|
|
|
538
|
-
`lkr tools agents card` generates an **Agent-to-Agent** (**A2A**) `0.3.0` Agent Card JSON file (`looker-<agent_id>-agent-card.json`) from your Looker agent's name, description, Explore sources, and active golden queries (
|
|
538
|
+
`lkr tools agents card` generates an **Agent-to-Agent** (**A2A**) `0.3.0` Agent Card JSON file (`looker-<agent_id>-agent-card.json`) from your Looker agent's name, description, Explore sources (`tags`), and active golden queries (`examples`). Looker `26.10.0+` is required (`26.2.0` added the initial route and `26.6.0` added SSE, with default enablement and instruction support in `26.10.0+`).
|
|
539
|
+
|
|
540
|
+
Because Looker agents do not store a dedicated A2A routing summary ("when should another agent call this endpoint?"), `card` handles `skills[]` in three ways while preserving Looker's active golden queries as `examples` unless overridden:
|
|
541
|
+
|
|
542
|
+
1. **Interactive prompt (default)**: Keeps Looker's `agent.description` on `card.description` and prompts for `skills[0].description` (press Enter to reuse Looker's description).
|
|
543
|
+
2. **Looker project file (`--project-id` + `--skills-file`)**: Reads a JSON skill object or array stored inside a Looker project (for example, `agents/ecommerce_skill.json`), merges any omitted `tags` or `examples` from the Looker agent, and writes `looker-<agent_id>-agent-card.json`.
|
|
544
|
+
3. **Local file (`--skills-file`)**: Reads a JSON skill object or array from local disk.
|
|
545
|
+
|
|
546
|
+
For example, store `agents/ecommerce_skill.json` in your Looker project (`thelook`):
|
|
547
|
+
|
|
548
|
+
```json
|
|
549
|
+
{
|
|
550
|
+
"id": "orders-and-revenue",
|
|
551
|
+
"name": "Orders & Revenue",
|
|
552
|
+
"description": "Route here when the user asks about order volume, GMV, returns, or brand performance."
|
|
553
|
+
}
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
Then read that skill file from Looker and write `looker-<agent_id>-agent-card.json`:
|
|
539
557
|
|
|
540
558
|
```bash
|
|
541
|
-
#
|
|
559
|
+
# Read skill JSON from a Looker project (pass `lkr --dev` before `tools` if only on your dev branch) and write looker-<agent_id>-agent-card.json
|
|
560
|
+
uvx lkr-dev-cli tools agents card <agent_id> \
|
|
561
|
+
--project-id thelook \
|
|
562
|
+
--skills-file agents/ecommerce_skill.json
|
|
563
|
+
|
|
564
|
+
# Interactive prompt for skills[0].description (OAuth2 default), or read a local skills JSON file
|
|
542
565
|
uvx lkr-dev-cli tools agents card <agent_id>
|
|
566
|
+
uvx lkr-dev-cli tools agents card <agent_id> --skills-file ./skills.json
|
|
543
567
|
|
|
544
568
|
# Build a bearer-token card offline (zero Looker API calls) and print to stdout
|
|
545
569
|
uvx lkr-dev-cli --base-url https://acme.cloud.looker.com \
|
|
546
|
-
tools agents card <agent_id> --offline --auth bearer -o -
|
|
570
|
+
tools agents card <agent_id> --offline --description "Routes order and revenue questions." --auth bearer -o -
|
|
547
571
|
```
|
|
548
572
|
|
|
549
573
|
Example `looker-<agent_id>-agent-card.json` output (`--auth oauth2`, default):
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
project_name: "lkr-codemode-extension"
|
|
2
|
+
|
|
3
|
+
application: lkr-codemode {
|
|
4
|
+
label: "Looker Code Mode"
|
|
5
|
+
url: "https://cdn.lkr.dev/cli/codemode/latest/codemode_extension.js"
|
|
6
|
+
# url: "https://localhost:8080/codemode_extension.js"
|
|
7
|
+
mount_points: {
|
|
8
|
+
standalone: yes
|
|
9
|
+
}
|
|
10
|
+
entitlements: {
|
|
11
|
+
raw_api_request: yes
|
|
12
|
+
use_iframes: yes
|
|
13
|
+
use_form_submit: yes
|
|
14
|
+
}
|
|
15
|
+
}
|