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.
Files changed (199) hide show
  1. lkr_dev_cli-0.0.61/.github/workflows/ci.yml +108 -0
  2. lkr_dev_cli-0.0.61/.github/workflows/release.yml +171 -0
  3. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.gitignore +3 -0
  4. lkr_dev_cli-0.0.61/.nvmrc +1 -0
  5. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/Makefile +6 -1
  6. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/PKG-INFO +28 -4
  7. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/README.md +27 -3
  8. lkr_dev_cli-0.0.61/add-ons/codemode-extension/manifest.lkml +15 -0
  9. lkr_dev_cli-0.0.61/add-ons/codemode-extension/package-lock.json +6824 -0
  10. lkr_dev_cli-0.0.61/add-ons/codemode-extension/package.json +29 -0
  11. lkr_dev_cli-0.0.61/add-ons/codemode-extension/src/index.tsx +337 -0
  12. lkr_dev_cli-0.0.61/add-ons/codemode-extension/tsconfig.json +13 -0
  13. lkr_dev_cli-0.0.61/add-ons/codemode-extension/webpack.config.js +42 -0
  14. lkr_dev_cli-0.0.61/lkr/codemode/wasm/.cargo/config.toml +2 -0
  15. lkr_dev_cli-0.0.61/lkr/codemode/wasm/Cargo.lock +2091 -0
  16. lkr_dev_cli-0.0.61/lkr/codemode/wasm/Cargo.toml +38 -0
  17. lkr_dev_cli-0.0.61/lkr/codemode/wasm/build.rs +762 -0
  18. lkr_dev_cli-0.0.61/lkr/codemode/wasm/src/lib.rs +1909 -0
  19. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/__init__.py +14 -0
  20. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/main.py +87 -1
  21. lkr_dev_cli-0.0.61/lkr/parse/sql.py +1651 -0
  22. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/agents.py +67 -29
  23. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/lookml.py +1 -0
  24. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr.md +25 -2
  25. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/pyproject.toml +1 -1
  26. lkr_dev_cli-0.0.61/scripts/build_codemode_wasm.py +226 -0
  27. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_agents_tools.py +59 -22
  28. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_tools.py +27 -0
  29. lkr_dev_cli-0.0.61/tests/test_parse_sql.py +457 -0
  30. lkr_dev_cli-0.0.60/.github/workflows/ci.yml +0 -54
  31. lkr_dev_cli-0.0.60/.github/workflows/release.yml +0 -82
  32. lkr_dev_cli-0.0.60/lkr/parse/sql.py +0 -630
  33. lkr_dev_cli-0.0.60/tests/test_parse_sql.py +0 -148
  34. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/SKILL.md +0 -0
  35. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/01-simple-single-table.md +0 -0
  36. {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
  37. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/03-pk-fk-joins.md +0 -0
  38. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/04-triangle-inequality-joins.md +0 -0
  39. {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
  40. {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
  41. {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
  42. {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
  43. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/09-unions.md +0 -0
  44. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/10-unnest-arrays.md +0 -0
  45. {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
  46. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/12-table-wildcards.md +0 -0
  47. {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
  48. {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
  49. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml/references/measures-and-sql-functions.md +0 -0
  50. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/SKILL.md +0 -0
  51. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/examples/lookml-pr-checks.yml +0 -0
  52. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/examples/template.model.lkml.tmpl +0 -0
  53. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/configure_model.py +0 -0
  54. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/create_github_pr.sh +0 -0
  55. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/diff_lookml_tests.py +0 -0
  56. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/init_branch.py +0 -0
  57. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/pre_gate.py +0 -0
  58. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/preflight.sh +0 -0
  59. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/scripts/setup_repo.sh +0 -0
  60. {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
  61. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/agentic-lookml-workflow/sub-skills/setup/SKILL.md +0 -0
  62. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/generate-view-from-table/SKILL.md +0 -0
  63. {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
  64. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/SKILL.md +0 -0
  65. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/order_items_query.py +0 -0
  66. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/personal_folder_dashboards.py +0 -0
  67. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-code-mode/scripts/traverse_folders.py +0 -0
  68. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/SKILL.md +0 -0
  69. {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
  70. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/create_custom_view.py +0 -0
  71. {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
  72. {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
  73. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/generate_lookml.py +0 -0
  74. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/inspect_connections.py +0 -0
  75. {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
  76. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lkr-project-helper/scripts/upload_assets.py +0 -0
  77. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-expressions/SKILL.md +0 -0
  78. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-expressions/references/excel-equivalents.md +0 -0
  79. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/looker-filters/SKILL.md +0 -0
  80. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/SKILL.md +0 -0
  81. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-access-grants/SKILL.md +0 -0
  82. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-advanced-liquid/SKILL.md +0 -0
  83. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/SKILL.md +0 -0
  84. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/references/advanced.md +0 -0
  85. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-explore/references/joins.md +0 -0
  86. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/SKILL.md +0 -0
  87. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/dimension.md +0 -0
  88. {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
  89. {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
  90. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-fields/references/measure.md +0 -0
  91. {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
  92. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-liquid/SKILL.md +0 -0
  93. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-model/SKILL.md +0 -0
  94. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-ojof/SKILL.md +0 -0
  95. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-refinements/SKILL.md +0 -0
  96. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-sets/SKILL.md +0 -0
  97. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-tests/SKILL.md +0 -0
  98. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml/sub-skills/lookml-view/SKILL.md +0 -0
  99. {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
  100. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/SKILL.md +0 -0
  101. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/scripts/enrich_partition_clustering.py +0 -0
  102. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.agents/skills/lookml-field-curation/scripts/profile_string_fields.py +0 -0
  103. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/ci-windows.yaml +0 -0
  104. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/update-looker-skills.yml +0 -0
  105. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.github/workflows/website.yml +0 -0
  106. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.pre-commit-config.yaml +0 -0
  107. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.python-version +0 -0
  108. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.vscode/launch.json +0 -0
  109. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/.vscode/settings.json +0 -0
  110. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/AGENTS.md +0 -0
  111. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/Dockerfile +0 -0
  112. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/LICENSE +0 -0
  113. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/TODO.md +0 -0
  114. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/cloudbuild.yaml +0 -0
  115. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/codemode.md +0 -0
  116. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/__init__.py +0 -0
  117. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/__init__.py +0 -0
  118. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/main.py +0 -0
  119. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth/oauth.py +0 -0
  120. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/auth_service.py +0 -0
  121. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/classes.py +0 -0
  122. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/LOCAL.md +0 -0
  123. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/__init__.py +0 -0
  124. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/constant.py +0 -0
  125. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/download_swagger.py +0 -0
  126. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/examples.py +0 -0
  127. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/help.py +0 -0
  128. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/main.py +0 -0
  129. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/readme.py +0 -0
  130. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/swagger.json +0 -0
  131. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/codemode/type.py +0 -0
  132. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/constants.py +0 -0
  133. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/custom_types.py +0 -0
  134. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/exceptions.py +0 -0
  135. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/__init__.py +0 -0
  136. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/classes.py +0 -0
  137. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/extended_sdk_methods/main.py +0 -0
  138. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/logger.py +0 -0
  139. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/main.py +0 -0
  140. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/classes.py +0 -0
  141. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/main.py +0 -0
  142. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/mcp/utils.py +0 -0
  143. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/classes.py +0 -0
  144. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/embed_container.html +0 -0
  145. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/main.py +0 -0
  146. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/observability/utils.py +0 -0
  147. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/constants.py +0 -0
  148. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/curation.py +0 -0
  149. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/dag.py +0 -0
  150. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml.py +0 -0
  151. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_database_compare.py +0 -0
  152. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_snapshot.py +0 -0
  153. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/lookml_to_api.py +0 -0
  154. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/sql_to_lookml.py +0 -0
  155. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/translations.py +0 -0
  156. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/types.py +0 -0
  157. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/parse/user_attributes.py +0 -0
  158. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/__init__.py +0 -0
  159. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/_schema_rs.so +0 -0
  160. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/builder.py +0 -0
  161. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/dynamic_fields.py +0 -0
  162. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/fields.py +0 -0
  163. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/filter_expressions.py +0 -0
  164. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/main.py +0 -0
  165. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/Cargo.lock +0 -0
  166. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/Cargo.toml +0 -0
  167. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/rust/src/lib.rs +0 -0
  168. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/schema/validator.py +0 -0
  169. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/classes.py +0 -0
  170. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/main.py +0 -0
  171. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/tools/permission_deprecation.py +0 -0
  172. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr/utils.py +0 -0
  173. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/lkr_dev_cli/__init__.py +0 -0
  174. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/parse.md +0 -0
  175. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/README.md +0 -0
  176. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/__init__.py +0 -0
  177. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/scripts/schema/history.py +0 -0
  178. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/skills-lock.json +0 -0
  179. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/TESTING.md +0 -0
  180. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_bq_change_listener.py +0 -0
  181. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_codemode.py +0 -0
  182. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_dependency_resolution.py +0 -0
  183. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_deps.sh +0 -0
  184. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_extended_sdk_methods.py +0 -0
  185. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_init_sdk.py +0 -0
  186. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_database_compare.py +0 -0
  187. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_field_curation.py +0 -0
  188. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_lookml_snapshot.py +0 -0
  189. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_oauth_account.py +0 -0
  190. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_parse_lookml.py +0 -0
  191. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_permission_deprecation.py +0 -0
  192. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_schema.py +0 -0
  193. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_sql_join_analysis.py +0 -0
  194. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_sql_queries_workflow.py +0 -0
  195. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_translations.py +0 -0
  196. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_user_attributes.py +0 -0
  197. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/tests/test_version.py +0 -0
  198. {lkr_dev_cli-0.0.60 → lkr_dev_cli-0.0.61}/ty.toml +0 -0
  199. {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"
@@ -4,6 +4,9 @@ __pycache__
4
4
  tmp
5
5
  .env
6
6
  lkr/schema/rust/target/
7
+ lkr/codemode/wasm/target/
8
+ dist/
9
+ node_modules/
7
10
  coverage.xml
8
11
  .coverage
9
12
  *.profraw
@@ -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.60
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 (omitting internal instructions unless `--include-instructions` is set, or replacing `skills[]` via `--skills-file`). 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+`).
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
- # Fetch agent metadata from Looker and write looker-<agent_id>-agent-card.json (OAuth2 default)
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 (omitting internal instructions unless `--include-instructions` is set, or replacing `skills[]` via `--skills-file`). 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+`).
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
- # Fetch agent metadata from Looker and write looker-<agent_id>-agent-card.json (OAuth2 default)
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
+ }