canfar-lab 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- canfar_lab-0.7.0/.cursor/harness/.gitignore +4 -0
- canfar_lab-0.7.0/.cursor/harness/config.json +7 -0
- canfar_lab-0.7.0/.cursor/harness/failures/2026-08-27-epistemic-stack-verifier.md +13 -0
- canfar_lab-0.7.0/.cursor/harness/playbook.md +12 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-08-27-epistemic-stack.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-08-27-writing-skills.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-08-31-viz-skills.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-09-07-consolidate-astroai-main.md +7 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-09-07-update-upstream.md +6 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-21-studio-agent-layout.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-21-studio-settings-usability.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-22-desktop-studio-launch.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-22-desktop-sync-dock.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-22-local-notebooks-dock-bar.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-22-studio-launch.md +7 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-24-dsh-rc3-arc-doorbell.md +5 -0
- canfar_lab-0.7.0/.cursor/harness/trajectories/2026-10-24-review-ship.md +5 -0
- canfar_lab-0.7.0/.cursor/hooks/harness-session-start.sh +37 -0
- canfar_lab-0.7.0/.cursor/hooks.json +10 -0
- canfar_lab-0.7.0/.dockerignore +11 -0
- canfar_lab-0.7.0/.github/workflows/ci.yml +47 -0
- canfar_lab-0.7.0/.github/workflows/publish.yml +24 -0
- canfar_lab-0.7.0/.gitignore +20 -0
- canfar_lab-0.7.0/AGENTS.md +73 -0
- canfar_lab-0.7.0/CLAUDE.md +2 -0
- canfar_lab-0.7.0/LICENSE +21 -0
- canfar_lab-0.7.0/PKG-INFO +156 -0
- canfar_lab-0.7.0/README.md +94 -0
- canfar_lab-0.7.0/agents/claude/mcp.json +43 -0
- canfar_lab-0.7.0/agents/codex/mcp-servers.toml +34 -0
- canfar_lab-0.7.0/agents/cursor/mcp.json +43 -0
- canfar_lab-0.7.0/agents/omp/config-zero-spend.yml +19 -0
- canfar_lab-0.7.0/agents/omp/config.yml +40 -0
- canfar_lab-0.7.0/agents/omp/mcp.json +43 -0
- canfar_lab-0.7.0/agents/opencode/opencode.json +42 -0
- canfar_lab-0.7.0/agents/pi/settings.json +10 -0
- canfar_lab-0.7.0/agents/work/models.json +68 -0
- canfar_lab-0.7.0/docs/USAGE.md +294 -0
- canfar_lab-0.7.0/docs/cli.md +516 -0
- canfar_lab-0.7.0/docs/concurrency.md +59 -0
- canfar_lab-0.7.0/docs/config.md +34 -0
- canfar_lab-0.7.0/docs/desk-sync.md +499 -0
- canfar_lab-0.7.0/docs/help.md +104 -0
- canfar_lab-0.7.0/docs/panel.md +77 -0
- canfar_lab-0.7.0/docs/studio.md +236 -0
- canfar_lab-0.7.0/evals/astro_eval.py +393 -0
- canfar_lab-0.7.0/examples/workload/hello/README.md +15 -0
- canfar_lab-0.7.0/examples/workload/hello/job.py +17 -0
- canfar_lab-0.7.0/examples/workload/mnist_cnn/README.md +19 -0
- canfar_lab-0.7.0/examples/workload/mnist_cnn/infer.py +43 -0
- canfar_lab-0.7.0/examples/workload/mnist_cnn/train.py +66 -0
- canfar_lab-0.7.0/instructions/AGENTS-global.md +71 -0
- canfar_lab-0.7.0/pixi.lock +1638 -0
- canfar_lab-0.7.0/pyproject.toml +111 -0
- canfar_lab-0.7.0/rules/agents/env-hygiene.md +39 -0
- canfar_lab-0.7.0/rules/agents/harness.md +10 -0
- canfar_lab-0.7.0/rules/agents/latex.md +7 -0
- canfar_lab-0.7.0/rules/agents/ponytail.md +24 -0
- canfar_lab-0.7.0/rules/agents/python-pixi.md +6 -0
- canfar_lab-0.7.0/rules/agents/shell.md +6 -0
- canfar_lab-0.7.0/rules/agents/token-efficient.md +3 -0
- canfar_lab-0.7.0/rules/agents/writing.md +7 -0
- canfar_lab-0.7.0/rules/cursor/env-hygiene.mdc +44 -0
- canfar_lab-0.7.0/rules/cursor/harness.mdc +17 -0
- canfar_lab-0.7.0/rules/cursor/latex.mdc +15 -0
- canfar_lab-0.7.0/rules/cursor/ponytail.mdc +36 -0
- canfar_lab-0.7.0/rules/cursor/python-pixi.mdc +13 -0
- canfar_lab-0.7.0/rules/cursor/shell.mdc +14 -0
- canfar_lab-0.7.0/rules/cursor/token-efficient.mdc +15 -0
- canfar_lab-0.7.0/rules/cursor/writing.mdc +15 -0
- canfar_lab-0.7.0/scripts/audit-cli-help.sh +212 -0
- canfar_lab-0.7.0/scripts/bootstrap-canfar-workspace.sh +219 -0
- canfar_lab-0.7.0/scripts/check-wheel.sh +42 -0
- canfar_lab-0.7.0/scripts/ci.sh +37 -0
- canfar_lab-0.7.0/scripts/debug_autoscaler_repro.py +170 -0
- canfar_lab-0.7.0/scripts/ensure-claude-bridge.sh +53 -0
- canfar_lab-0.7.0/scripts/init-harness.sh +78 -0
- canfar_lab-0.7.0/scripts/init-session.sh +168 -0
- canfar_lab-0.7.0/scripts/install-agents.sh +43 -0
- canfar_lab-0.7.0/scripts/install-work-models.py +142 -0
- canfar_lab-0.7.0/scripts/sync-review-bench.sh +88 -0
- canfar_lab-0.7.0/skills/academic-writing/SKILL.md +94 -0
- canfar_lab-0.7.0/skills/ask-dont-tell/SKILL.md +31 -0
- canfar_lab-0.7.0/skills/canfar-lab-workflow/SKILL.md +216 -0
- canfar_lab-0.7.0/skills/gh-address-comments/LICENSE.txt +202 -0
- canfar_lab-0.7.0/skills/gh-address-comments/SKILL.md +25 -0
- canfar_lab-0.7.0/skills/gh-address-comments/scripts/fetch_comments.py +237 -0
- canfar_lab-0.7.0/skills/gh-fix-ci/LICENSE.txt +202 -0
- canfar_lab-0.7.0/skills/gh-fix-ci/SKILL.md +71 -0
- canfar_lab-0.7.0/skills/gh-fix-ci/scripts/inspect_pr_checks.py +505 -0
- canfar_lab-0.7.0/skills/harness-coding/AGENTS-snippet.md +23 -0
- canfar_lab-0.7.0/skills/harness-coding/SKILL.md +104 -0
- canfar_lab-0.7.0/skills/harness-coding/hooks/harness-session-start.sh +37 -0
- canfar_lab-0.7.0/skills/harness-coding/hooks/harness-stop.sh +99 -0
- canfar_lab-0.7.0/skills/harness-coding/scripts/init-harness.sh +76 -0
- canfar_lab-0.7.0/skills/harness-coding/scripts/install-all-agents.sh +5 -0
- canfar_lab-0.7.0/skills/harness-coding/scripts/install_pre_push_hook.sh +55 -0
- canfar_lab-0.7.0/skills/harness-coding/templates/config.json +7 -0
- canfar_lab-0.7.0/skills/harness-coding/templates/playbook-verify-tiers.md +2 -0
- canfar_lab-0.7.0/skills/harness-improve/SKILL.md +64 -0
- canfar_lab-0.7.0/skills/harness-reflect/SKILL.md +55 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/LICENSE.txt +201 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/SKILL.md +107 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/agents/openai.yaml +6 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/assets/experiment-template.ipynb +110 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/assets/jupyter-small.svg +3 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/assets/jupyter.png +0 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/assets/tutorial-template.ipynb +107 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/references/experiment-patterns.md +10 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/references/notebook-structure.md +17 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/references/quality-checklist.md +11 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/references/tutorial-patterns.md +9 -0
- canfar_lab-0.7.0/skills/jupyter-notebook/scripts/new_notebook.py +130 -0
- canfar_lab-0.7.0/skills/latex-debug/SKILL.md +57 -0
- canfar_lab-0.7.0/skills/overleaf-git/SKILL.md +71 -0
- canfar_lab-0.7.0/skills/pdf/LICENSE.txt +201 -0
- canfar_lab-0.7.0/skills/pdf/SKILL.md +67 -0
- canfar_lab-0.7.0/skills/pdf/agents/openai.yaml +5 -0
- canfar_lab-0.7.0/skills/pdf/assets/pdf.png +0 -0
- canfar_lab-0.7.0/skills/perf-measure/SKILL.md +33 -0
- canfar_lab-0.7.0/skills/pixi-dev/SKILL.md +48 -0
- canfar_lab-0.7.0/skills/repo-router/SKILL.md +79 -0
- canfar_lab-0.7.0/skills/science-correctness/SKILL.md +49 -0
- canfar_lab-0.7.0/skills/torchsky-dev/SKILL.md +29 -0
- canfar_lab-0.7.0/skills/uv-dev/SKILL.md +42 -0
- canfar_lab-0.7.0/src/canfar_lab/__init__.py +20 -0
- canfar_lab-0.7.0/src/canfar_lab/__main__.py +4 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/__init__.py +5 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/addons.py +230 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/agent_config.py +593 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/agent_targets.py +285 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/bin_root.py +383 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/bundle_path.py +48 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/clean_agent.py +97 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/fix.py +236 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/install.py +440 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/install_bins.py +407 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/install_fetch.py +577 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/interact.py +130 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/inventory.py +194 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/keys.py +338 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/opencode_config.py +89 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/openscience.py +275 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/plugins.py +620 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/reconcile.py +236 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/registry.py +72 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/registry_lifecycle.py +718 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/registry_probe.py +376 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/registry_store.py +78 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/review_bench.py +535 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/setup.py +921 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/setup_state.py +264 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/support.py +251 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/upstream.py +87 -0
- canfar_lab-0.7.0/src/canfar_lab/agent/wipe.py +119 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/__init__.py +0 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_cmd.py +378 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_format.py +251 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_install.py +603 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_keys.py +105 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_plugins.py +210 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/agent_setup.py +408 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/banner.py +76 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/clean.py +140 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/config.py +63 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/context.py +33 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/desk.py +218 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/dispatch.py +27 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/env.py +69 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/help_cmd.py +242 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/init_clone_env.py +506 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/kernel.py +109 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/main.py +113 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/open_cmd.py +134 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/panel.py +199 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/status.py +176 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/studio.py +522 -0
- canfar_lab-0.7.0/src/canfar_lab/cli/sync.py +509 -0
- canfar_lab-0.7.0/src/canfar_lab/config/__init__.py +3 -0
- canfar_lab-0.7.0/src/canfar_lab/config/settings.py +118 -0
- canfar_lab-0.7.0/src/canfar_lab/core/arc_permissions.py +109 -0
- canfar_lab-0.7.0/src/canfar_lab/core/cadc_auth.py +21 -0
- canfar_lab-0.7.0/src/canfar_lab/core/disk_usage.py +158 -0
- canfar_lab-0.7.0/src/canfar_lab/core/git.py +156 -0
- canfar_lab-0.7.0/src/canfar_lab/core/home_clean.py +144 -0
- canfar_lab-0.7.0/src/canfar_lab/core/home_layout.py +410 -0
- canfar_lab-0.7.0/src/canfar_lab/core/kernel.py +171 -0
- canfar_lab-0.7.0/src/canfar_lab/core/pathlock.py +177 -0
- canfar_lab-0.7.0/src/canfar_lab/core/paths.py +70 -0
- canfar_lab-0.7.0/src/canfar_lab/core/project.py +361 -0
- canfar_lab-0.7.0/src/canfar_lab/core/session_common.py +122 -0
- canfar_lab-0.7.0/src/canfar_lab/core/session_resources.py +166 -0
- canfar_lab-0.7.0/src/canfar_lab/core/storage.py +303 -0
- canfar_lab-0.7.0/src/canfar_lab/core/vospace_status.py +270 -0
- canfar_lab-0.7.0/src/canfar_lab/data/__init__.py +0 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/VERSION +1 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/agy.yaml +27 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/augment.yaml +28 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/claude.yaml +26 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/cline.yaml +19 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/codewhale.yaml +29 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/codex.yaml +28 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/copilot.yaml +26 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/cursor.yaml +23 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/droid.yaml +30 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/dsh.yaml +23 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/freebuff.yaml +28 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/goose.yaml +24 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/hermes.yaml +27 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/junie.yaml +29 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/kilo.yaml +25 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/muse.yaml +27 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/omp.yaml +29 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/openclaw.yaml +22 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/opencode.yaml +25 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/openscience.yaml +33 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/pi.yaml +31 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/qoder.yaml +25 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/swival.yaml +23 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/agents/zcode.yaml +25 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/claude/mcp.json +33 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/claude/settings.json +17 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cli/agent-tools.sh +17 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cline/cline-notes.md +7 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/codewhale/config.toml +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/codex/config.toml +30 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/copilot/mcp-config.json +42 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/mcp.json +33 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/astroai-lab-paths.mdc +18 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/cpp.mdc +13 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/env-hygiene.mdc +44 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/harness.mdc +17 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/latex.mdc +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/ponytail.mdc +36 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/python-pixi.mdc +13 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/python.mdc +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/shell.mdc +14 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/token-efficient.mdc +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/cursor/rules/writing.mdc +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/freebuff/astroai-notes.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/goose/extensions.yaml +43 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/goose/goosehints +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/kilo/kilo.jsonc +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/manifest.json +86 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/marimo/marimo.toml +17 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/muse/settings.json +3 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/omp/astroai-notes.md +23 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/opencode/opencode.json +42 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/agent/astronomy.md +25 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/canfar.md +81 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/command/astro-check.md +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/command/find-data.md +10 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/command/save-results.md +10 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/command/scale-out.md +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/astro-literature/SKILL.md +55 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/cadc-archive-search/SKILL.md +52 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/canfar-data-management/SKILL.md +63 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/canfar-ray-scaling/SKILL.md +76 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/catalog-crossmatch/SKILL.md +79 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/ccd-image-reduction/SKILL.md +79 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/fits-wcs-cutouts/SKILL.md +74 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/gaia-astrometry/SKILL.md +95 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/lightcurve-periodogram/SKILL.md +53 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/obscore-tap/SKILL.md +55 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/observation-planning/SKILL.md +69 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/photometric-calibration/SKILL.md +75 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/photometry-aperture/SKILL.md +65 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/spectra-specutils/SKILL.md +58 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/spectral-cubes/SKILL.md +68 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/openscience/skills/vo-cutouts-datalink/SKILL.md +76 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/pi/settings.json +4 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/ast-grep-cli.yaml +15 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/git-mcp.yaml +22 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/mcp-context7.yaml +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/mcp-memory.yaml +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/ponytail-rule.yaml +14 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/ray-manager-mcp.yaml +20 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/skore-cli.yaml +16 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/sqlite.yaml +26 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/time.yaml +23 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/plugins/token-efficient.yaml +13 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/project/.cursor/mcp.json +14 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/project/.cursor/rules/project-defaults.mdc +11 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/project/AGENTS.md +62 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/qoder/astroai-notes.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/env-hygiene.md +39 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/harness.md +10 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/latex.md +7 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/ponytail.md +24 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/python-pixi.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/shell.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/token-efficient.md +3 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/rules/writing.md +7 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/support.yaml +87 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/swival/astroai-notes.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/agent/zcode/astroai-notes.md +6 -0
- canfar_lab-0.7.0/src/canfar_lab/data/brand/README.md +11 -0
- canfar_lab-0.7.0/src/canfar_lab/data/brand/astroai-logo.png +0 -0
- canfar_lab-0.7.0/src/canfar_lab/data/desk/agents.html +159 -0
- canfar_lab-0.7.0/src/canfar_lab/data/desk/dock.html +230 -0
- canfar_lab-0.7.0/src/canfar_lab/data/notebooks/ray_train.ipynb +43 -0
- canfar_lab-0.7.0/src/canfar_lab/data/notebooks/starter.ipynb +460 -0
- canfar_lab-0.7.0/src/canfar_lab/data/notebooks/starter.py +423 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/HOWTO.md +294 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/README.md +225 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/VERSION +1 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/bin/dsh-web.sh +40 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/bin/panel.sh +108 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/cordis.bench.patch.yml +12 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/presets/review-bench/agent.cordis.yml +682 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/presets/review-bench/preset.yml +8 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/project-template/.dsh/README.md +95 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/project-template/.dsh/cordis.patch.yml +21 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/astroai-team-charter/SKILL.md +167 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/canfar-session/SKILL.md +44 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/review-panel/SKILL.md +258 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/review-panel/references/brief-template.md +42 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/review-panel/references/panel-round1.js +130 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/review-panel/references/report-template.md +49 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/skills/review-panel/references/rubric.md +128 -0
- canfar_lab-0.7.0/src/canfar_lab/data/review-bench/validate.mjs +314 -0
- canfar_lab-0.7.0/src/canfar_lab/data/shell/hooks.sh +68 -0
- canfar_lab-0.7.0/src/canfar_lab/data/shell/profile.sh +105 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-brand/cordis.patch.yml +8 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-brand/lib/client.js +81 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-brand/lib/index.js +2 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-brand/package.json +30 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-settings/cordis.patch.yml +4 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-settings/lib/client.js +308 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-settings/lib/index.js +111 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-astroai-settings/package.json +29 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-opencode-session/README.md +135 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-opencode-session/cordis.patch.yml +29 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-opencode-session/lib/index.js +216 -0
- canfar_lab-0.7.0/src/canfar_lab/data/studio/plugins/dsh-opencode-session/package.json +53 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/__init__.py +15 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/actions.py +281 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/agents_page.py +84 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/apps.py +384 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/proxy.py +440 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/serve.py +79 -0
- canfar_lab-0.7.0/src/canfar_lab/desk/state.py +155 -0
- canfar_lab-0.7.0/src/canfar_lab/dsh_release.py +158 -0
- canfar_lab-0.7.0/src/canfar_lab/errors.py +15 -0
- canfar_lab-0.7.0/src/canfar_lab/models/__init__.py +3 -0
- canfar_lab-0.7.0/src/canfar_lab/models/manifest.py +19 -0
- canfar_lab-0.7.0/src/canfar_lab/panel.py +274 -0
- canfar_lab-0.7.0/src/canfar_lab/session_urls.py +66 -0
- canfar_lab-0.7.0/src/canfar_lab/shell/__init__.py +1 -0
- canfar_lab-0.7.0/src/canfar_lab/shell/session_env.py +416 -0
- canfar_lab-0.7.0/src/canfar_lab/studio.py +557 -0
- canfar_lab-0.7.0/src/canfar_lab/studio_bundles.py +218 -0
- canfar_lab-0.7.0/src/canfar_lab/studio_doctor.py +578 -0
- canfar_lab-0.7.0/src/canfar_lab/studio_layer.py +968 -0
- canfar_lab-0.7.0/src/canfar_lab/studio_paths.py +225 -0
- canfar_lab-0.7.0/src/canfar_lab/studio_profile.py +177 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/__init__.py +15 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/arc_data.py +155 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/bus.py +236 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/catalog.py +221 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/clock.py +30 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/engine.py +512 -0
- canfar_lab-0.7.0/src/canfar_lab/sync/watch.py +167 -0
- canfar_lab-0.7.0/src/canfar_lab/ui.py +265 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/__init__.py +0 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/console.py +5 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/json_utils.py +141 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/subprocess.py +66 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/timing.py +61 -0
- canfar_lab-0.7.0/src/canfar_lab/utils/toml_compat.py +12 -0
- canfar_lab-0.7.0/src/canfar_lab/version.py +57 -0
- canfar_lab-0.7.0/src/canfar_workload/__init__.py +30 -0
- canfar_lab-0.7.0/src/canfar_workload/astro_data.py +561 -0
- canfar_lab-0.7.0/src/canfar_workload/autoscaler.py +748 -0
- canfar_lab-0.7.0/src/canfar_workload/canfar_ops.py +324 -0
- canfar_lab-0.7.0/src/canfar_workload/cli.py +1095 -0
- canfar_lab-0.7.0/src/canfar_workload/cluster.py +600 -0
- canfar_lab-0.7.0/src/canfar_workload/dashboard.py +317 -0
- canfar_lab-0.7.0/src/canfar_workload/executor.py +238 -0
- canfar_lab-0.7.0/src/canfar_workload/manager_client.py +179 -0
- canfar_lab-0.7.0/src/canfar_workload/mcp.py +626 -0
- canfar_lab-0.7.0/src/canfar_workload/models.py +301 -0
- canfar_lab-0.7.0/src/canfar_workload/preflight.py +196 -0
- canfar_lab-0.7.0/src/canfar_workload/ray_cluster.py +119 -0
- canfar_lab-0.7.0/src/canfar_workload/reconcile.py +211 -0
- canfar_lab-0.7.0/src/canfar_workload/settings.py +96 -0
- canfar_lab-0.7.0/src/canfar_workload/state_store.py +180 -0
- canfar_lab-0.7.0/src/canfar_workload/worker_logs.py +45 -0
- canfar_lab-0.7.0/src/canfar_workload/workers.py +231 -0
- canfar_lab-0.7.0/templates/canfar-workspace/AGENTS.md +80 -0
- canfar_lab-0.7.0/templates/canfar-workspace/CLAUDE.md +1 -0
- canfar_lab-0.7.0/templates/canfar-workspace/scripts/sync-keys.py +402 -0
- canfar_lab-0.7.0/templates/canfar-workspace/scripts/workspace-doctor.py +338 -0
- canfar_lab-0.7.0/templates/canfar-workspace/scripts/workspace-sync.py +627 -0
- canfar_lab-0.7.0/templates/canfar-workspace/update-repos.sh +145 -0
- canfar_lab-0.7.0/templates/canfar-workspace/workspace.toml +158 -0
- canfar_lab-0.7.0/tests/__init__.py +0 -0
- canfar_lab-0.7.0/tests/cli/test_cli_agent_contract.py +217 -0
- canfar_lab-0.7.0/tests/cli/test_cli_extended.py +587 -0
- canfar_lab-0.7.0/tests/cli/test_commands.py +271 -0
- canfar_lab-0.7.0/tests/cli/test_dispatch.py +18 -0
- canfar_lab-0.7.0/tests/cli/test_env_shell.py +148 -0
- canfar_lab-0.7.0/tests/cli/test_session_flow.py +174 -0
- canfar_lab-0.7.0/tests/cli/test_sync.py +159 -0
- canfar_lab-0.7.0/tests/cli/test_sync_exchange.py +264 -0
- canfar_lab-0.7.0/tests/conftest.py +83 -0
- canfar_lab-0.7.0/tests/fixtures/canfar-skills/skills/astroai-ray/SKILL.md +93 -0
- canfar_lab-0.7.0/tests/helpers.py +84 -0
- canfar_lab-0.7.0/tests/integration/test_cold_start_save_resume.py +147 -0
- canfar_lab-0.7.0/tests/unit/test_addons.py +112 -0
- canfar_lab-0.7.0/tests/unit/test_agent.py +577 -0
- canfar_lab-0.7.0/tests/unit/test_agent_awesome_clean_fix.py +181 -0
- canfar_lab-0.7.0/tests/unit/test_agent_config.py +456 -0
- canfar_lab-0.7.0/tests/unit/test_agent_coverage_boost.py +355 -0
- canfar_lab-0.7.0/tests/unit/test_agent_extended.py +109 -0
- canfar_lab-0.7.0/tests/unit/test_agent_install_matrix.py +512 -0
- canfar_lab-0.7.0/tests/unit/test_agent_keys.py +253 -0
- canfar_lab-0.7.0/tests/unit/test_agent_remove.py +300 -0
- canfar_lab-0.7.0/tests/unit/test_agent_setup_state.py +182 -0
- canfar_lab-0.7.0/tests/unit/test_arc_data.py +43 -0
- canfar_lab-0.7.0/tests/unit/test_arc_permissions.py +94 -0
- canfar_lab-0.7.0/tests/unit/test_astro_eval.py +89 -0
- canfar_lab-0.7.0/tests/unit/test_audit_strip_ansi.py +100 -0
- canfar_lab-0.7.0/tests/unit/test_bin_root.py +195 -0
- canfar_lab-0.7.0/tests/unit/test_cadc_auth.py +49 -0
- canfar_lab-0.7.0/tests/unit/test_completions.py +155 -0
- canfar_lab-0.7.0/tests/unit/test_concurrency.py +101 -0
- canfar_lab-0.7.0/tests/unit/test_desk_apps.py +216 -0
- canfar_lab-0.7.0/tests/unit/test_desk_proxy.py +422 -0
- canfar_lab-0.7.0/tests/unit/test_desk_state_actions.py +393 -0
- canfar_lab-0.7.0/tests/unit/test_disk_usage.py +98 -0
- canfar_lab-0.7.0/tests/unit/test_dsh_release.py +126 -0
- canfar_lab-0.7.0/tests/unit/test_gh_release_install.py +94 -0
- canfar_lab-0.7.0/tests/unit/test_git_clone_update.py +92 -0
- canfar_lab-0.7.0/tests/unit/test_help_cmd.py +261 -0
- canfar_lab-0.7.0/tests/unit/test_home_clean.py +51 -0
- canfar_lab-0.7.0/tests/unit/test_home_layout.py +319 -0
- canfar_lab-0.7.0/tests/unit/test_hooks.py +15 -0
- canfar_lab-0.7.0/tests/unit/test_kernel.py +73 -0
- canfar_lab-0.7.0/tests/unit/test_opencode_config.py +175 -0
- canfar_lab-0.7.0/tests/unit/test_openrouter_key.py +94 -0
- canfar_lab-0.7.0/tests/unit/test_openscience_config.py +275 -0
- canfar_lab-0.7.0/tests/unit/test_panel.py +145 -0
- canfar_lab-0.7.0/tests/unit/test_paths.py +234 -0
- canfar_lab-0.7.0/tests/unit/test_paths_extended.py +122 -0
- canfar_lab-0.7.0/tests/unit/test_plugins.py +417 -0
- canfar_lab-0.7.0/tests/unit/test_project.py +59 -0
- canfar_lab-0.7.0/tests/unit/test_project_extended.py +363 -0
- canfar_lab-0.7.0/tests/unit/test_pure_logic.py +688 -0
- canfar_lab-0.7.0/tests/unit/test_reconcile.py +116 -0
- canfar_lab-0.7.0/tests/unit/test_registry.py +1354 -0
- canfar_lab-0.7.0/tests/unit/test_review_bench.py +276 -0
- canfar_lab-0.7.0/tests/unit/test_session_env.py +245 -0
- canfar_lab-0.7.0/tests/unit/test_settings.py +31 -0
- canfar_lab-0.7.0/tests/unit/test_shell_profile.py +82 -0
- canfar_lab-0.7.0/tests/unit/test_storage_extended.py +171 -0
- canfar_lab-0.7.0/tests/unit/test_studio.py +274 -0
- canfar_lab-0.7.0/tests/unit/test_studio_profile.py +800 -0
- canfar_lab-0.7.0/tests/unit/test_subprocess.py +29 -0
- canfar_lab-0.7.0/tests/unit/test_support_panel.py +146 -0
- canfar_lab-0.7.0/tests/unit/test_sync_bus.py +119 -0
- canfar_lab-0.7.0/tests/unit/test_sync_catalog.py +91 -0
- canfar_lab-0.7.0/tests/unit/test_sync_engine.py +221 -0
- canfar_lab-0.7.0/tests/unit/test_sync_watch.py +165 -0
- canfar_lab-0.7.0/tests/unit/test_timing.py +76 -0
- canfar_lab-0.7.0/tests/unit/test_ui.py +105 -0
- canfar_lab-0.7.0/tests/unit/test_version.py +51 -0
- canfar_lab-0.7.0/tests/unit/test_vospace_status.py +205 -0
- canfar_lab-0.7.0/tests/unit/test_wipe.py +253 -0
- canfar_lab-0.7.0/tests/workload/test_astro_data.py +220 -0
- canfar_lab-0.7.0/tests/workload/test_autoscaler.py +463 -0
- canfar_lab-0.7.0/tests/workload/test_benchmark_contract.py +19 -0
- canfar_lab-0.7.0/tests/workload/test_canfar_ops.py +44 -0
- canfar_lab-0.7.0/tests/workload/test_cli.py +229 -0
- canfar_lab-0.7.0/tests/workload/test_cluster.py +887 -0
- canfar_lab-0.7.0/tests/workload/test_dashboard.py +197 -0
- canfar_lab-0.7.0/tests/workload/test_executor.py +155 -0
- canfar_lab-0.7.0/tests/workload/test_mcp.py +357 -0
- canfar_lab-0.7.0/tests/workload/test_models.py +77 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# verifier failure 2026-08-27-epistemic-stack
|
|
2
|
+
|
|
3
|
+
- `pixi run preflight-push` is configured as `verify_fast`, but this checkout
|
|
4
|
+
has no `preflight-push` Pixi task.
|
|
5
|
+
- `pixi run pytest -q tests/unit/test_addons.py tests/unit/test_plugins.py`
|
|
6
|
+
could not launch `pytest` because the current Pixi environment has no
|
|
7
|
+
`pytest` executable.
|
|
8
|
+
- `pixi run format-check` could not acquire the Pixi prefix lock from this
|
|
9
|
+
restricted checkout. Running the bundled Ruff directly with its cache under
|
|
10
|
+
`/private/tmp` passed (`153 files already formatted`).
|
|
11
|
+
- Follow-up: use the available `lint` task and direct catalog/skill checks;
|
|
12
|
+
do not classify the catalog changes as test failures until the environment
|
|
13
|
+
is provisioned.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Harness Playbook
|
|
2
|
+
|
|
3
|
+
## Bullets
|
|
4
|
+
|
|
5
|
+
- id: verify-tiers
|
|
6
|
+
desc: verify_fast during edits; verify (ci-local) before push; verify_full only when human opts in.
|
|
7
|
+
|
|
8
|
+
- id: file-memory
|
|
9
|
+
desc: Put durable notes in .cursor/harness/ — not long chat scrollback.
|
|
10
|
+
|
|
11
|
+
- id: minimal-diff
|
|
12
|
+
desc: Smallest correct change; match existing repo style and tools.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-08-27-epistemic-stack
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: `pixi run lint`; bundled Ruff `format --check` with cache under `/private/tmp`; direct YAML/catalog invariant check; skill-creator quick validation
|
|
4
|
+
outcome: pass — lint, formatting, registry parsing, and bundled skill validation pass; pytest unavailable in current environment
|
|
5
|
+
lesson: The configured `pixi run preflight-push` task is absent from this checkout; keep the mismatch recorded until the repository verifier is reconciled.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-08-27-writing-skills
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi run ci; static registry and syntax checks
|
|
4
|
+
outcome: pass for lint/format/static checks; CI stopped at pre-existing missing tomli in the stale environment
|
|
5
|
+
lesson: Root-layout GitHub skills need the plugin id as their destination name.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-08-31-viz-skills
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi python load_plugins() for matplotlib-data-visualization
|
|
4
|
+
outcome: comment-only on matplotlib plugin; orx-* not added
|
|
5
|
+
lesson: openresearch image already runs `orx install-skills`; do not duplicate that tree in plugins/.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 2026-09-07 consolidate onto astroai/main
|
|
2
|
+
|
|
3
|
+
- Rebased fork-only Ray autoscaler commits onto upstream; resolved `dashboard.py` (keep `live=` gate + manager_id probe path).
|
|
4
|
+
- Merged via https://github.com/astroai/canfar-lab/pull/11 → `af5ab3b`.
|
|
5
|
+
- Force-aligned `sfabbro/canfar-lab` `origin/main` to `upstream/main` (0/0 divergence).
|
|
6
|
+
- Deleted obsolete `wip/npx-platform-skills` and `wip/ray-autoscaler-cap`; removed vendor-astroai-ray worktree.
|
|
7
|
+
- Local only: harness `viz-skills` playbook bullet (unstaged).
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 2026-09-07 update from upstream/main
|
|
2
|
+
|
|
3
|
+
- FF `main` 758d6f3 → 8ca2ac3 (20 commits; agent CLIs home-canonical, plugin pack slimmed).
|
|
4
|
+
- Stash pop conflict: `matplotlib-data-visualization.yaml` modify/delete — kept upstream deletion (skills no longer vendored here).
|
|
5
|
+
- Re-applied local harness `viz-skills` bullet (worded for no in-tree plugin).
|
|
6
|
+
- Worktree `wip/npx-platform-skills`: rebase onto upstream skipped cherry-pick 97f6024 (already PR #10). Branch tip == upstream/main; origin/wip still has the old tip (needs force-push if retaining the remote branch).
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-21-studio-agent-layout
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: ./scripts/ci.sh
|
|
4
|
+
outcome: pass (1121 passed, 19 skipped, coverage 75.85%)
|
|
5
|
+
lesson: a home drop symlink into the scratch bin is one binary; classify must not call it a second home install. Key reload must use BSD `stat -f` and `date +%s` — macOS bash 3.2 has no `stat -c` and no `EPOCHSECONDS`, and an empty stamp matches the unset stamp so keys never load. Download allow-list must include `tempfile.gettempdir()` (macOS pytest tmp is `/var/folders`, not `/tmp`). Panel key assertions must clear every catalog key, or a developer `ANTHROPIC_API_KEY` changes `keys_present`.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-21-studio-settings-usability
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi run pytest tests/unit/test_bin_root.py tests/cli/test_cli_agent_contract.py --no-cov; node --check settings client
|
|
4
|
+
outcome: pass
|
|
5
|
+
lesson: a missing settings payload must not render the laptop sentence; keep the last good layout and show the error. Key rows need catalog labels, and only https signup links.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-22-desktop-studio-launch
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: ./scripts/ci.sh and python3 scripts/lib/test_studio_canfar_proxy.py
|
|
4
|
+
outcome: pass (1126 passed, proxy test ok). xmatcher stays the sync name; ~/src/astroai/xmatch is a separate checkout.
|
|
5
|
+
lesson: `--json` on `agent settings` must be a verb flag. A laptop `SCRATCH` directory is not a CANFAR session. The studio image pins `ARG DSH_VERSION` to canfar-lab's `DSH_VERSION`.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-22-desktop-sync-dock
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi run pytest tests/unit/test_studio.py tests/unit/test_desk_proxy.py tests/unit/test_studio_profile.py tests/unit/test_desk_state_actions.py -o addopts= -q
|
|
4
|
+
outcome: pass (110)
|
|
5
|
+
lesson: Laptop `canfar lab studio` must serve the desk proxy on the public port; bare dsh has no sync dock. A live :3080 that is not the proxy has to be quit before the dock can bind.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-22-local-notebooks-dock-bar
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi run pytest tests/unit/test_desk_apps.py tests/unit/test_desk_state_actions.py tests/unit/test_desk_proxy.py -o addopts= -q
|
|
4
|
+
outcome: pass (70)
|
|
5
|
+
lesson: Laptop JupyterLab and marimo are local loopback servers; the desk bar is a 44px top strip with a Hide handle.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Studio launch on the laptop
|
|
2
|
+
|
|
3
|
+
`pixi run canfar` is the platform client. canfar 1.4.1 (PyPI) reads `~/.canfar/config.yaml` on import and exits when the file is schema version 2 (written by canfar 1.5). `canfar lab` does not use that file. The pixi task `canfar` routes a leading `lab` through `canfar_lab.cli.dispatch` and only then the platform client.
|
|
4
|
+
|
|
5
|
+
The astroai dsh profile must pin `@deepseek-ai/dsh-experimental-agent-team-profile` to `studio.DSH_VERSION`. npm `latest` for that package is still `0.1.5-alpha.2`, and a bare `dsh plugin add` installs it. Those 0.1.5 modules in the profile `node_modules` shadow the 0.2.1-rc.2 CLI and `typert-loader` dies on startup. One `dsh plugin add <name>@<pin>` upgrades and prunes the retired web-profile. A `remove` before that add aborts the upgrade.
|
|
6
|
+
|
|
7
|
+
`dsh plugin` needs `pnpm` on PATH. The studio image activates pnpm 12.6.0 with corepack.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-24-dsh-rc3-arc-doorbell
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: pixi run pytest tests/unit/test_arc_data.py tests/unit/test_dsh_release.py tests/unit/test_studio.py tests/unit/test_desk_state_actions.py -o addopts= -q
|
|
4
|
+
outcome: pass after newest-tag fixture moved above the pin
|
|
5
|
+
lesson: npm latest can lag next. The doorbell uses canfar data cp to arc:/home; vosfs stays inside that client.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# trajectory 2026-10-24-review-ship
|
|
2
|
+
status: completed
|
|
3
|
+
verifier: ./scripts/ci.sh
|
|
4
|
+
outcome: pass — 1270 passed, 19 skipped, coverage 76.92%
|
|
5
|
+
lesson: pixi upgrade strips [project.dependencies] floors; restore canfar and the version bounds before committing the lock. ty 0.0.91 rejects @contextmanager -> Iterator.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Inject playbook context at session start when .cursor/harness exists.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
input=$(cat)
|
|
6
|
+
playbook=".cursor/harness/playbook.md"
|
|
7
|
+
|
|
8
|
+
if [[ ! -f "$playbook" ]]; then
|
|
9
|
+
echo '{}'
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
export HARNESS_PLAYBOOK="$playbook"
|
|
14
|
+
python3 <<'PY'
|
|
15
|
+
import json, os, re
|
|
16
|
+
|
|
17
|
+
path = os.environ.get("HARNESS_PLAYBOOK", ".cursor/harness/playbook.md")
|
|
18
|
+
try:
|
|
19
|
+
text = open(path).read()
|
|
20
|
+
except OSError:
|
|
21
|
+
print("{}")
|
|
22
|
+
raise SystemExit(0)
|
|
23
|
+
|
|
24
|
+
# ponytail: cap at 12 bullets to limit context injection
|
|
25
|
+
ids = re.findall(r"^- id:\s*(\S+)\s*\n\s*desc:\s*(.+)$", text, re.M)
|
|
26
|
+
if not ids:
|
|
27
|
+
print("{}")
|
|
28
|
+
raise SystemExit(0)
|
|
29
|
+
|
|
30
|
+
lines = [f"- id: {i}\n desc: {d.strip()}" for i, d in ids[:12]]
|
|
31
|
+
msg = (
|
|
32
|
+
"Harness playbook (full file: .cursor/harness/playbook.md). "
|
|
33
|
+
"Follow harness-coding: plan → execute → verify → file memory.\n\n"
|
|
34
|
+
+ "\n\n".join(lines)
|
|
35
|
+
)
|
|
36
|
+
print(json.dumps({"additional_context": msg}))
|
|
37
|
+
PY
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
# Remote gate mirroring ./scripts/ci.sh: ruff, ty, wheel data, CLI audit, pytest.
|
|
4
|
+
# Run ./scripts/ci.sh locally before pushing.
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [main]
|
|
10
|
+
|
|
11
|
+
# The test job only checks out and runs checks; it never writes back to
|
|
12
|
+
# the repo, so restrict the GITHUB_TOKEN to read-only contents.
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v7
|
|
21
|
+
|
|
22
|
+
- uses: prefix-dev/setup-pixi@v0.10.2
|
|
23
|
+
with:
|
|
24
|
+
cache: true
|
|
25
|
+
|
|
26
|
+
- name: Lockfile integrity — pixi install --frozen
|
|
27
|
+
# Hard-fail on lockfile drift: --frozen refuses to touch pixi.lock
|
|
28
|
+
# and errors if the manifest changed without re-locking.
|
|
29
|
+
run: pixi install --frozen
|
|
30
|
+
|
|
31
|
+
- name: Ruff check
|
|
32
|
+
run: pixi run lint
|
|
33
|
+
|
|
34
|
+
- name: Ruff format
|
|
35
|
+
run: pixi run format-check
|
|
36
|
+
|
|
37
|
+
- name: ty typecheck
|
|
38
|
+
run: pixi run typecheck
|
|
39
|
+
|
|
40
|
+
- name: Wheel data
|
|
41
|
+
run: bash scripts/check-wheel.sh
|
|
42
|
+
|
|
43
|
+
- name: CLI audit
|
|
44
|
+
run: pixi run cli-audit
|
|
45
|
+
|
|
46
|
+
- name: Pytest
|
|
47
|
+
run: pixi run test
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
pypi:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v7
|
|
15
|
+
|
|
16
|
+
- uses: actions/setup-python@v7
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
|
|
20
|
+
- name: Build
|
|
21
|
+
run: python -m pip install build hatchling && python -m build
|
|
22
|
+
|
|
23
|
+
- name: Publish to PyPI
|
|
24
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.venv/
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
.pytest_cache/
|
|
5
|
+
.ruff_cache/
|
|
6
|
+
dist/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
.coverage
|
|
9
|
+
htmlcov/
|
|
10
|
+
|
|
11
|
+
# Local MNIST example artifacts
|
|
12
|
+
examples/workload/mnist_cnn/data/
|
|
13
|
+
examples/workload/mnist_cnn/*.pt
|
|
14
|
+
uv.lock
|
|
15
|
+
|
|
16
|
+
# Agent scratch directories
|
|
17
|
+
.freebuff/
|
|
18
|
+
.agents/
|
|
19
|
+
.codex/
|
|
20
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# AGENTS.md — canfar-lab
|
|
2
|
+
|
|
3
|
+
In-session CANFAR Science Platform workbench and workload tooling (`canfar-lab`).
|
|
4
|
+
CANFAR is the platform. This package is one command tree: `canfar lab` on the
|
|
5
|
+
platform CLI, and the standalone `canfar-lab` binary.
|
|
6
|
+
|
|
7
|
+
## Remotes (AstroAI fork workflow)
|
|
8
|
+
|
|
9
|
+
| Remote | Points at | Use |
|
|
10
|
+
|--------|-----------|-----|
|
|
11
|
+
| `origin` | `<github_user>/canfar-lab` | Push fork `main` |
|
|
12
|
+
| `upstream` | `astroai/canfar-lab` | Sync `main`; PR target |
|
|
13
|
+
|
|
14
|
+
`main` tracks `upstream/main`. Prefer working and pushing on fork `main`.
|
|
15
|
+
Never force-push `astroai` `main`.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git fetch upstream && git rebase upstream/main
|
|
19
|
+
# edit on main
|
|
20
|
+
git push origin main
|
|
21
|
+
gh pr create -R astroai/canfar-lab --head <github_user>:main
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Environment
|
|
25
|
+
|
|
26
|
+
Pixi (`[tool.pixi]` in `pyproject.toml`). Prefer `pixi run` over system Python.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pixi install
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Verification
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
./scripts/ci.sh # lint, format, typecheck, CLI audit, pytest
|
|
36
|
+
canfar lab studio --doctor # Studio pre-flight (needs dsh on PATH)
|
|
37
|
+
canfar lab panel doctor # headless Team / review-bench
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Harness verify tasks in `.cursor/harness/config.json` map to the same gate.
|
|
41
|
+
|
|
42
|
+
## In-session project template
|
|
43
|
+
|
|
44
|
+
The AGENTS template copied into user projects lives under
|
|
45
|
+
`src/canfar_lab/data/agent/project/AGENTS.md`. Edit that file when changing
|
|
46
|
+
what lab users see after `canfar lab agent setup`, not only this root file.
|
|
47
|
+
|
|
48
|
+
Workspace layout and `/arc` rules (`PYTHONNOUSERSITE`, no `$HOME/.local`
|
|
49
|
+
installs): parent workspace `AGENTS.md` (`~/src/AGENTS.md`).
|
|
50
|
+
|
|
51
|
+
## Env hygiene
|
|
52
|
+
|
|
53
|
+
- Prefer `pixi run` / `pixi run python` over bare `python3` when Pixi exists.
|
|
54
|
+
- Never `pip install --user` or install into `~/.local` / `$HOME/.local` (esp. CANFAR `/arc/home`).
|
|
55
|
+
- Headless/batch: `export PYTHONNOUSERSITE=1` and `unset PYTHONPATH`.
|
|
56
|
+
- On CANFAR: code under `$WORK` → `/scratch/src` (session-ephemeral). Prefer
|
|
57
|
+
`canfar lab sync` / `canfar lab clone <fork> --update` to refresh source; `save`/`resume` are deps only.
|
|
58
|
+
See `docs/USAGE.md` → Getting code onto jobs; skill `canfar-lab-workflow`.
|
|
59
|
+
- Session images: always `images.canfar.net/astroai/*` — **never** `skaha/*`.
|
|
60
|
+
|
|
61
|
+
## Code propagation (jobs + sessions)
|
|
62
|
+
|
|
63
|
+
On CANFAR, code lives under `$WORK` → **`$SCRATCH/src`** (session-ephemeral).
|
|
64
|
+
Workers do not see another pod's `/scratch`. Pick a mode before jobs:
|
|
65
|
+
|
|
66
|
+
1. **GitHub push → pull** (default): push fork `origin`, then
|
|
67
|
+
`canfar lab sync` or `canfar lab clone <fork/repo> --update` (or `--ref <sha>`). Prints HEAD SHA.
|
|
68
|
+
2. **`canfar lab save` / `resume`**: lockfiles / env only — **not** source.
|
|
69
|
+
3. **VOSpace tarball** under `vos:$USER/astroai/` (pack deps yourself; no CLI yet).
|
|
70
|
+
4. **2 + 3** for reproducible headless (env snapshot + code blob).
|
|
71
|
+
|
|
72
|
+
Same-session Ray: `canfar lab run` packages local `working_dir`. Details:
|
|
73
|
+
`docs/USAGE.md` § Code propagation.
|
canfar_lab-0.7.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sébastien Fabbro
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: canfar-lab
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: In-session workbench and workload CLI extensions for the CANFAR Science Platform
|
|
5
|
+
Project-URL: Homepage, https://github.com/astroai/canfar-lab
|
|
6
|
+
Project-URL: Documentation, https://github.com/astroai/canfar-lab/blob/main/docs/USAGE.md
|
|
7
|
+
Project-URL: Repository, https://github.com/astroai/canfar-lab
|
|
8
|
+
Project-URL: Issues, https://github.com/astroai/canfar-lab/issues
|
|
9
|
+
Project-URL: Platform, https://opencadc.github.io/canfar/
|
|
10
|
+
Author-email: Simon Fabbro <simon.fabbro@nrc-cnrc.gc.ca>
|
|
11
|
+
License: MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2026 Sébastien Fabbro
|
|
14
|
+
|
|
15
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
16
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
17
|
+
in the Software without restriction, including without limitation the rights
|
|
18
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
19
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
20
|
+
furnished to do so, subject to the following conditions:
|
|
21
|
+
|
|
22
|
+
The above copyright notice and this permission notice shall be included in all
|
|
23
|
+
copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
26
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
28
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
29
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
30
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
31
|
+
SOFTWARE.
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Keywords: astroai,astronomy,canfar,science-platform,session
|
|
34
|
+
Classifier: Development Status :: 3 - Alpha
|
|
35
|
+
Classifier: Environment :: Console
|
|
36
|
+
Classifier: Intended Audience :: Developers
|
|
37
|
+
Classifier: Intended Audience :: Science/Research
|
|
38
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
39
|
+
Classifier: Natural Language :: English
|
|
40
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
41
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
43
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
44
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
45
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
46
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
47
|
+
Requires-Python: >=3.10
|
|
48
|
+
Requires-Dist: canfar>=1.5.2
|
|
49
|
+
Requires-Dist: httpx>=0.28.1
|
|
50
|
+
Requires-Dist: pydantic-settings>=2.16.1
|
|
51
|
+
Requires-Dist: pydantic>=2.14.1
|
|
52
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
53
|
+
Requires-Dist: rich>=15.0.0
|
|
54
|
+
Requires-Dist: tomli>=2.5.0; python_version < '3.11'
|
|
55
|
+
Requires-Dist: typer>=0.27.3
|
|
56
|
+
Provides-Extra: dev
|
|
57
|
+
Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
|
|
58
|
+
Requires-Dist: pytest>=9.1.1; extra == 'dev'
|
|
59
|
+
Requires-Dist: ruff>=0.17.2; extra == 'dev'
|
|
60
|
+
Requires-Dist: ty>=0.0.91; extra == 'dev'
|
|
61
|
+
Description-Content-Type: text/markdown
|
|
62
|
+
|
|
63
|
+
# canfar-lab
|
|
64
|
+
|
|
65
|
+
The **`canfar lab`** commands you run *inside* an AstroAI session on the
|
|
66
|
+
[CANFAR Science Platform](https://www.opencadc.org/canfar/). The same tree is
|
|
67
|
+
the standalone `canfar-lab` binary.
|
|
68
|
+
|
|
69
|
+
Start and stop sessions with [`canfar`](https://github.com/opencadc/canfar)
|
|
70
|
+
(or the Science Portal). Inside the session, `canfar lab` does three jobs:
|
|
71
|
+
|
|
72
|
+
1. **Project env** — `init` / `clone` / `save` / `resume` (lockfiles on `/arc`)
|
|
73
|
+
2. **Ray cluster** — `cluster start` / `status` / `run` / `jobs`
|
|
74
|
+
3. **Agents** — `agent setup` / `install` / `verify`
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
flowchart LR
|
|
78
|
+
subgraph laptop [Laptop or portal]
|
|
79
|
+
Portal[Science Portal]
|
|
80
|
+
CanfarCLI["canfar login / create"]
|
|
81
|
+
end
|
|
82
|
+
subgraph session [AstroAI session]
|
|
83
|
+
Lab["canfar lab"]
|
|
84
|
+
Tools["pixi / uv / Jupyter / CADC / Ray"]
|
|
85
|
+
end
|
|
86
|
+
Portal --> session
|
|
87
|
+
CanfarCLI --> session
|
|
88
|
+
Lab --> Tools
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
| Name | Meaning |
|
|
92
|
+
|------|---------|
|
|
93
|
+
| **AstroAI** | Product: GitHub [`astroai`](https://github.com/astroai), Harbor `astroai` |
|
|
94
|
+
| **CANFAR** | Host platform: portal, Skaha, `/arc`, auth |
|
|
95
|
+
| **`canfar`** | Platform CLI — sessions and `canfar data` |
|
|
96
|
+
| **`canfar lab` / `canfar-lab`** | This package, inside a session |
|
|
97
|
+
| **`images.canfar.net/astroai/*`** | Session images |
|
|
98
|
+
|
|
99
|
+
Images: [canfar-containers](https://github.com/astroai/canfar-containers).
|
|
100
|
+
|
|
101
|
+
## Inside a session
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
canfar lab # status banner
|
|
105
|
+
canfar lab init mylab # or: clone owner/repo
|
|
106
|
+
canfar lab save # lockfile snapshot to /arc
|
|
107
|
+
canfar lab resume mylab
|
|
108
|
+
canfar lab status # quotas, sessions (not the Ray cluster)
|
|
109
|
+
|
|
110
|
+
canfar lab cluster start
|
|
111
|
+
canfar lab cluster status
|
|
112
|
+
canfar lab run train.py --cpus 2
|
|
113
|
+
|
|
114
|
+
canfar lab kernel ensure
|
|
115
|
+
canfar lab agent setup
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`canfar lab status` is this session’s CPU/disk/quota. `canfar lab cluster status`
|
|
119
|
+
is whether the Ray cluster is up. `canfar lab cluster stop` tears down workers
|
|
120
|
+
and the manager.
|
|
121
|
+
|
|
122
|
+
Help: `canfar lab help` · one command: `canfar lab help -c cluster` · cheat sheet:
|
|
123
|
+
[docs/help.md](docs/help.md)
|
|
124
|
+
|
|
125
|
+
## Install
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pip install canfar-lab
|
|
129
|
+
canfar-lab --help
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Do not pass `--user`. On a CANFAR session that writes `/arc/home/.local`. If the image Python is not writable, `uv pip install --python /opt/canfar canfar-lab`. Upgrade with `pip install -U canfar-lab`. Session images that already include the package put `canfar-lab` on PATH.
|
|
133
|
+
|
|
134
|
+
## Docs
|
|
135
|
+
|
|
136
|
+
| Doc | What it is |
|
|
137
|
+
|-----|------------|
|
|
138
|
+
| [docs/help.md](docs/help.md) | Cheat sheet |
|
|
139
|
+
| [docs/USAGE.md](docs/USAGE.md) | Storage, workflows, Ray, agents |
|
|
140
|
+
| [docs/cli.md](docs/cli.md) | Flags and every command |
|
|
141
|
+
| [docs/config.md](docs/config.md) | Optional `~/.astroai/lab/config.yaml` |
|
|
142
|
+
| [docs/concurrency.md](docs/concurrency.md) | Shared home: locks, atomic writes, agent runtime placement |
|
|
143
|
+
| [docs/studio.md](docs/studio.md) | AstroAI Studio: the browser coding portal, its dsh profile, teams, storage split |
|
|
144
|
+
| [docs/desk-sync.md](docs/desk-sync.md) | Desk cockpit and CANFAR ↔ desktop sync (design proposal) |
|
|
145
|
+
| [docs/panel.md](docs/panel.md) | AstroAI Panel / Studio Team review (keys only; models in dsh Settings) |
|
|
146
|
+
|
|
147
|
+
Data movement is not this CLI. Use **`canfar data`** and `vcp` / `vls`.
|
|
148
|
+
|
|
149
|
+
## Development
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
./scripts/ci.sh
|
|
153
|
+
pixi run test
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
[MIT](LICENSE). `canfar` keeps its own license.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# canfar-lab
|
|
2
|
+
|
|
3
|
+
The **`canfar lab`** commands you run *inside* an AstroAI session on the
|
|
4
|
+
[CANFAR Science Platform](https://www.opencadc.org/canfar/). The same tree is
|
|
5
|
+
the standalone `canfar-lab` binary.
|
|
6
|
+
|
|
7
|
+
Start and stop sessions with [`canfar`](https://github.com/opencadc/canfar)
|
|
8
|
+
(or the Science Portal). Inside the session, `canfar lab` does three jobs:
|
|
9
|
+
|
|
10
|
+
1. **Project env** — `init` / `clone` / `save` / `resume` (lockfiles on `/arc`)
|
|
11
|
+
2. **Ray cluster** — `cluster start` / `status` / `run` / `jobs`
|
|
12
|
+
3. **Agents** — `agent setup` / `install` / `verify`
|
|
13
|
+
|
|
14
|
+
```mermaid
|
|
15
|
+
flowchart LR
|
|
16
|
+
subgraph laptop [Laptop or portal]
|
|
17
|
+
Portal[Science Portal]
|
|
18
|
+
CanfarCLI["canfar login / create"]
|
|
19
|
+
end
|
|
20
|
+
subgraph session [AstroAI session]
|
|
21
|
+
Lab["canfar lab"]
|
|
22
|
+
Tools["pixi / uv / Jupyter / CADC / Ray"]
|
|
23
|
+
end
|
|
24
|
+
Portal --> session
|
|
25
|
+
CanfarCLI --> session
|
|
26
|
+
Lab --> Tools
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
| Name | Meaning |
|
|
30
|
+
|------|---------|
|
|
31
|
+
| **AstroAI** | Product: GitHub [`astroai`](https://github.com/astroai), Harbor `astroai` |
|
|
32
|
+
| **CANFAR** | Host platform: portal, Skaha, `/arc`, auth |
|
|
33
|
+
| **`canfar`** | Platform CLI — sessions and `canfar data` |
|
|
34
|
+
| **`canfar lab` / `canfar-lab`** | This package, inside a session |
|
|
35
|
+
| **`images.canfar.net/astroai/*`** | Session images |
|
|
36
|
+
|
|
37
|
+
Images: [canfar-containers](https://github.com/astroai/canfar-containers).
|
|
38
|
+
|
|
39
|
+
## Inside a session
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
canfar lab # status banner
|
|
43
|
+
canfar lab init mylab # or: clone owner/repo
|
|
44
|
+
canfar lab save # lockfile snapshot to /arc
|
|
45
|
+
canfar lab resume mylab
|
|
46
|
+
canfar lab status # quotas, sessions (not the Ray cluster)
|
|
47
|
+
|
|
48
|
+
canfar lab cluster start
|
|
49
|
+
canfar lab cluster status
|
|
50
|
+
canfar lab run train.py --cpus 2
|
|
51
|
+
|
|
52
|
+
canfar lab kernel ensure
|
|
53
|
+
canfar lab agent setup
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`canfar lab status` is this session’s CPU/disk/quota. `canfar lab cluster status`
|
|
57
|
+
is whether the Ray cluster is up. `canfar lab cluster stop` tears down workers
|
|
58
|
+
and the manager.
|
|
59
|
+
|
|
60
|
+
Help: `canfar lab help` · one command: `canfar lab help -c cluster` · cheat sheet:
|
|
61
|
+
[docs/help.md](docs/help.md)
|
|
62
|
+
|
|
63
|
+
## Install
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install canfar-lab
|
|
67
|
+
canfar-lab --help
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Do not pass `--user`. On a CANFAR session that writes `/arc/home/.local`. If the image Python is not writable, `uv pip install --python /opt/canfar canfar-lab`. Upgrade with `pip install -U canfar-lab`. Session images that already include the package put `canfar-lab` on PATH.
|
|
71
|
+
|
|
72
|
+
## Docs
|
|
73
|
+
|
|
74
|
+
| Doc | What it is |
|
|
75
|
+
|-----|------------|
|
|
76
|
+
| [docs/help.md](docs/help.md) | Cheat sheet |
|
|
77
|
+
| [docs/USAGE.md](docs/USAGE.md) | Storage, workflows, Ray, agents |
|
|
78
|
+
| [docs/cli.md](docs/cli.md) | Flags and every command |
|
|
79
|
+
| [docs/config.md](docs/config.md) | Optional `~/.astroai/lab/config.yaml` |
|
|
80
|
+
| [docs/concurrency.md](docs/concurrency.md) | Shared home: locks, atomic writes, agent runtime placement |
|
|
81
|
+
| [docs/studio.md](docs/studio.md) | AstroAI Studio: the browser coding portal, its dsh profile, teams, storage split |
|
|
82
|
+
| [docs/desk-sync.md](docs/desk-sync.md) | Desk cockpit and CANFAR ↔ desktop sync (design proposal) |
|
|
83
|
+
| [docs/panel.md](docs/panel.md) | AstroAI Panel / Studio Team review (keys only; models in dsh Settings) |
|
|
84
|
+
|
|
85
|
+
Data movement is not this CLI. Use **`canfar data`** and `vcp` / `vls`.
|
|
86
|
+
|
|
87
|
+
## Development
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
./scripts/ci.sh
|
|
91
|
+
pixi run test
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
[MIT](LICENSE). `canfar` keeps its own license.
|