cartograph-cli 0.3.0__tar.gz → 0.3.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.
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/.github/workflows/fresh-install.yml +6 -3
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/PKG-INFO +1 -1
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/pyproject.toml +1 -1
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/installer.py +31 -21
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/fresh_install/test_fresh_install.sh +4 -4
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/.github/workflows/publish.yml +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/.github/workflows/test.yml +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/.gitignore +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/CLAUDE.md +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/CONTRIBUTING.md +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/LICENSE +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/README.md +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/.validation_stamp.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/examples/example_usage.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/src/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/src/agent_cli.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/tests/test_agent_cli.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/widget.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/.validation_stamp.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/examples/example_usage.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/src/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/src/file_stamp.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/tests/test_file_stamp.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/widget.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/logo/logo-cartograph-black.svg +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/logo/logo-cartograph-white.svg +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/logo/logo-cartograph.svg +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/pytest.ini +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/__main__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/auth.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/checkin.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/cli.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/cloud.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/config.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/dashboard.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/dashboard_ui.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/engine.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/inspector.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/base.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/javascript.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/nim.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/python.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/registry.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/scanners/js_scanner.js +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/scanners/nim_scanner.nim +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/library_config.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/scaffolding/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/base.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/bm25.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/filters.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/hybrid.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/ngram.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/search/synonyms.json +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/trust.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/validation_stamp.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/validator.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/__init__.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/cloud_health.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/conftest.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/fresh_install/Dockerfile +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_checkin.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_create.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_inspect.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_install.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_language_engines.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_loading.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_search.py +0 -0
- {cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/tests/test_validate.py +0 -0
|
@@ -54,9 +54,12 @@ jobs:
|
|
|
54
54
|
|
|
55
55
|
- name: Verify widget structure
|
|
56
56
|
run: |
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
# Find the created widget dir dynamically instead of hardcoding
|
|
58
|
+
WIDGET_DIR=$(find cg -maxdepth 2 -name "widget.json" -printf "%h" -quit)
|
|
59
|
+
echo "Widget created at: $WIDGET_DIR"
|
|
60
|
+
test -f "$WIDGET_DIR/widget.json"
|
|
61
|
+
test -d "$WIDGET_DIR/src"
|
|
62
|
+
test -d "$WIDGET_DIR/tests"
|
|
60
63
|
|
|
61
64
|
- name: cartograph stats
|
|
62
65
|
run: cartograph stats
|
|
@@ -45,26 +45,29 @@ def _widget_dir(target_dir, widget_id):
|
|
|
45
45
|
return os.path.join(target_dir, DEFAULT_INSTALL_DIR, python_dir_name(widget_id))
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def _install_from_cloud(widget_id, dest_path):
|
|
48
|
+
def _install_from_cloud(widget_id, dest_path, owner_hint=None):
|
|
49
49
|
"""Search cloud for a widget and install it by downloading the zip."""
|
|
50
|
-
from .cloud import
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
50
|
+
from .cloud import download_widget
|
|
51
|
+
|
|
52
|
+
if owner_hint:
|
|
53
|
+
# Already know the owner from @owner/widget_id format
|
|
54
|
+
owner = owner_hint
|
|
55
|
+
else:
|
|
56
|
+
# Search cloud to find the widget and its owner
|
|
57
|
+
from .cloud import search as cloud_search
|
|
58
|
+
results = cloud_search(widget_id, top_k=5)
|
|
59
|
+
widgets = results.get("widgets", [])
|
|
60
|
+
match = next(
|
|
61
|
+
(w for w in widgets
|
|
62
|
+
if w.get("id") == widget_id
|
|
63
|
+
or w.get("id", "").endswith(f"/{widget_id}")),
|
|
64
|
+
None,
|
|
65
|
+
)
|
|
66
|
+
if not match:
|
|
67
|
+
return {"error": f"Widget '{widget_id}' not found locally or in the cloud registry."}
|
|
68
|
+
owner = match.get("owner", "")
|
|
69
|
+
if not owner:
|
|
70
|
+
return {"error": f"Widget '{widget_id}' found in cloud but missing owner info."}
|
|
68
71
|
|
|
69
72
|
result = download_widget(owner, widget_id)
|
|
70
73
|
if "error" in result:
|
|
@@ -91,9 +94,16 @@ def _install_from_cloud(widget_id, dest_path):
|
|
|
91
94
|
|
|
92
95
|
|
|
93
96
|
def install(carto, widget_id, target_dir, version=None):
|
|
94
|
-
"""Install a widget into target_dir/
|
|
97
|
+
"""Install a widget into target_dir/cg/widget_id."""
|
|
95
98
|
from .engine import REPO_DIR
|
|
96
99
|
|
|
100
|
+
# Strip @owner/ prefix if present (cloud widget IDs are namespaced)
|
|
101
|
+
owner_hint = None
|
|
102
|
+
if widget_id.startswith("@"):
|
|
103
|
+
parts = widget_id[1:].split("/", 1)
|
|
104
|
+
if len(parts) == 2:
|
|
105
|
+
owner_hint, widget_id = parts
|
|
106
|
+
|
|
97
107
|
if not os.path.isabs(target_dir):
|
|
98
108
|
return {"error": f"Target must be an absolute path, got: '{target_dir}'"}
|
|
99
109
|
|
|
@@ -134,7 +144,7 @@ def install(carto, widget_id, target_dir, version=None):
|
|
|
134
144
|
return {"error": str(e)}
|
|
135
145
|
|
|
136
146
|
# Fall back to cloud registry
|
|
137
|
-
return _install_from_cloud(widget_id, dest_path)
|
|
147
|
+
return _install_from_cloud(widget_id, dest_path, owner_hint=owner_hint)
|
|
138
148
|
|
|
139
149
|
|
|
140
150
|
def upgrade(carto, widget_id, target_dir, version=None):
|
|
@@ -53,14 +53,14 @@ check "cartograph create" cartograph create backend-hello-python \
|
|
|
53
53
|
--language python --domain backend --name "Hello World"
|
|
54
54
|
|
|
55
55
|
# 6. Check the widget structure exists
|
|
56
|
-
check "widget structure" test -f
|
|
57
|
-
check "widget src exists" test -d
|
|
58
|
-
check "widget tests exist" test -d
|
|
56
|
+
check "widget structure" test -f cg/backend_hello_python/widget.json
|
|
57
|
+
check "widget src exists" test -d cg/backend_hello_python/src
|
|
58
|
+
check "widget tests exist" test -d cg/backend_hello_python/tests
|
|
59
59
|
|
|
60
60
|
# 7. Validate the widget (should fail on template TODOs)
|
|
61
61
|
echo ""
|
|
62
62
|
echo "=== validate (expect failure on TODOs) ==="
|
|
63
|
-
if cartograph validate
|
|
63
|
+
if cartograph validate cg/backend_hello_python 2>&1; then
|
|
64
64
|
echo " NOTE: validate passed (unexpected but ok)"
|
|
65
65
|
else
|
|
66
66
|
echo " Expected failure on template TODOs - PASS"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/.validation_stamp.json
RENAMED
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/examples/example_usage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_agent_cli_python/tests/test_agent_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/.validation_stamp.json
RENAMED
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/examples/example_usage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/cg/infra_file_stamp_python/tests/test_file_stamp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/scanners/js_scanner.js
RENAMED
|
File without changes
|
{cartograph_cli-0.3.0 → cartograph_cli-0.3.2}/src/cartograph/languages/scanners/nim_scanner.nim
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
|