sky-dev 0.1.3__tar.gz → 0.1.4__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 (49) hide show
  1. {sky_dev-0.1.3 → sky_dev-0.1.4}/CHANGELOG.md +24 -0
  2. {sky_dev-0.1.3 → sky_dev-0.1.4}/PKG-INFO +13 -6
  3. {sky_dev-0.1.3 → sky_dev-0.1.4}/README.md +13 -6
  4. {sky_dev-0.1.3 → sky_dev-0.1.4}/pyproject.toml +1 -1
  5. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/__init__.py +1 -1
  6. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/cli.py +22 -18
  7. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/config/schema.py +17 -8
  8. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/fast_loop.py +4 -1
  9. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/PKG-INFO +13 -6
  10. {sky_dev-0.1.3 → sky_dev-0.1.4}/.env.example +0 -0
  11. {sky_dev-0.1.3 → sky_dev-0.1.4}/CONTRIBUTING.md +0 -0
  12. {sky_dev-0.1.3 → sky_dev-0.1.4}/LICENSE +0 -0
  13. {sky_dev-0.1.3 → sky_dev-0.1.4}/MANIFEST.in +0 -0
  14. {sky_dev-0.1.3 → sky_dev-0.1.4}/SECURITY.md +0 -0
  15. {sky_dev-0.1.3 → sky_dev-0.1.4}/setup.cfg +0 -0
  16. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/config/__init__.py +0 -0
  17. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/config/models.yaml +0 -0
  18. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/__init__.py +0 -0
  19. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/approval.py +0 -0
  20. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/benchmark.py +0 -0
  21. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/chat.py +0 -0
  22. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/mode_prompts.py +0 -0
  23. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/router.py +0 -0
  24. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/subagent.py +0 -0
  25. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/core/workflow.py +0 -0
  26. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/errors.py +0 -0
  27. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/memory/__init__.py +0 -0
  28. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/memory/indexer.py +0 -0
  29. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/memory/vectorstore.py +0 -0
  30. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/__init__.py +0 -0
  31. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/audit.py +0 -0
  32. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/detection.py +0 -0
  33. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/guardrails.py +0 -0
  34. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/prompts.py +0 -0
  35. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/rate_limit.py +0 -0
  36. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/security/sanitize.py +0 -0
  37. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/storage/__init__.py +0 -0
  38. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/storage/db.py +0 -0
  39. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/__init__.py +0 -0
  40. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/fs_tools.py +0 -0
  41. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/git_tools.py +0 -0
  42. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/registry.py +0 -0
  43. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/search_tools.py +0 -0
  44. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky/tools/shell_tools.py +0 -0
  45. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/SOURCES.txt +0 -0
  46. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/dependency_links.txt +0 -0
  47. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/entry_points.txt +0 -0
  48. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/requires.txt +0 -0
  49. {sky_dev-0.1.3 → sky_dev-0.1.4}/sky_dev.egg-info/top_level.txt +0 -0
@@ -1,4 +1,28 @@
1
1
  # Changelog
2
+
3
+ ## [0.1.4] - 2026-09-07
4
+
5
+ ### Added
6
+ - Config-driven role mapping in `sky.yaml` (`mode_roles`)
7
+ - Circuit breaker for infinite tool-calling loops
8
+ - 60-second timeout for agent responses
9
+ - Security guardrails for command injection prevention
10
+
11
+ ### Changed
12
+ - `planning` and `reviewer` roles now use `meta/muse-glimmer-30b` via NVIDIA NIM
13
+ - Better error messages for 404 and 500 errors
14
+ - Approval gate UI now shows `[y/n/e]` clearly
15
+
16
+ ### Fixed
17
+ - `sky plan` now correctly uses `planning` role (was using `fast_loop`)
18
+ - `sky ask` now correctly uses `general` role (was using `fast_loop`)
19
+ - Non-existent model IDs replaced with verified models
20
+ - Hardcoded `role = "fast_loop"` removed from `fast_loop.py`
21
+
22
+ ### Security
23
+ - Command injection prevention (`[;&|`]` characters blocked)
24
+ - Path traversal prevention
25
+ - Better error messages for security violations
2
26
  ## [0.1.3] - 2026-09-07
3
27
 
4
28
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sky-dev
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Sky - Agentic coding assistant. Build without boundaries.
5
5
  Author-email: Aaditya A <aaditya@corover.ai>
6
6
  License: MIT
@@ -109,12 +109,19 @@ sky chat
109
109
  - 💰 **Cost Tracking** — Every session shows what it cost
110
110
  - 🔄 **Resumable Workflows** — Interrupt and resume anytime
111
111
 
112
- ## Providers
112
+ ## Models
113
113
 
114
- | Provider | Use Case | Setup |
115
- |----------|----------|-------|
116
- | Groq | Planning, Routing, General | `GROQ_API_KEY` in .env |
117
- | NVIDIA NIM | Coding, Testing, Subagents | `NVIDIA_NIM_API_KEY` in .env |
114
+ Sky uses specialized models for each task:
115
+
116
+ | Role | Model | Provider |
117
+ |------|-------|----------|
118
+ | General Chat | GPT-OSS 120B | Groq |
119
+ | Planning | Muse Glimmer 30B | NVIDIA NIM |
120
+ | Review | Muse Glimmer 30B | NVIDIA NIM |
121
+ | Routing | Compound Mini | Groq |
122
+ | Tool Calling | Nemotron 120B | NVIDIA NIM |
123
+ | Coding | Nemotron 120B | NVIDIA NIM |
124
+ | Testing | Nemotron 120B | NVIDIA NIM |
118
125
 
119
126
  ## Commands
120
127
 
@@ -60,12 +60,19 @@ sky chat
60
60
  - 💰 **Cost Tracking** — Every session shows what it cost
61
61
  - 🔄 **Resumable Workflows** — Interrupt and resume anytime
62
62
 
63
- ## Providers
64
-
65
- | Provider | Use Case | Setup |
66
- |----------|----------|-------|
67
- | Groq | Planning, Routing, General | `GROQ_API_KEY` in .env |
68
- | NVIDIA NIM | Coding, Testing, Subagents | `NVIDIA_NIM_API_KEY` in .env |
63
+ ## Models
64
+
65
+ Sky uses specialized models for each task:
66
+
67
+ | Role | Model | Provider |
68
+ |------|-------|----------|
69
+ | General Chat | GPT-OSS 120B | Groq |
70
+ | Planning | Muse Glimmer 30B | NVIDIA NIM |
71
+ | Review | Muse Glimmer 30B | NVIDIA NIM |
72
+ | Routing | Compound Mini | Groq |
73
+ | Tool Calling | Nemotron 120B | NVIDIA NIM |
74
+ | Coding | Nemotron 120B | NVIDIA NIM |
75
+ | Testing | Nemotron 120B | NVIDIA NIM |
69
76
 
70
77
  ## Commands
71
78
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sky-dev"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Sky - Agentic coding assistant. Build without boundaries."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  """Sky - Build without boundaries."""
2
2
 
3
- __version__ = "0.1.3"
3
+ __version__ = "0.1.4"
4
4
  __author__ = "Aaditya A"
5
5
  __author_email__ = "aaditya@corover.ai"
6
6
  __description__ = "Local, CLI-based, agentic software development assistant"
@@ -739,18 +739,18 @@ def _write_default_models_yaml(path: Path):
739
739
  description: "Ultra-fast routing (0.1s)"
740
740
  - id: "openai/gpt-oss-120b"
741
741
  description: "Best general conversation"
742
- - id: "meta-models/Muse-Glimmer-30B"
743
- description: "Dedicated reasoning & planning"
744
742
  - id: "qwen/qwen3.6-27b"
745
743
  description: "Best-in-class tool calling"
746
744
 
747
745
  nim:
748
746
  base_url: "https://integrate.api.nvidia.com/v1"
749
747
  timeout: 60
750
- default_model: "nvidia/nemotron-3-super-120b-a12b"
748
+ default_model: "meta/muse-glimmer-30b"
751
749
  models:
750
+ - id: "meta/muse-glimmer-30b"
751
+ description: "Purpose-built for agentic reasoning & planning"
752
752
  - id: "nvidia/nemotron-3-super-120b-a12b"
753
- description: "Purpose-built for agentic workflows and tool calling"
753
+ description: "Best-in-class tool calling & coding"
754
754
  - id: "nvidia/llama-3.1-nemotron-70b-instruct"
755
755
  description: "Reliable backup model"
756
756
 
@@ -759,43 +759,43 @@ roles:
759
759
  provider: "groq"
760
760
  model_id: "openai/gpt-oss-120b"
761
761
  temperature: 0.7
762
- description: "User interaction, chat, explanations"
762
+ description: "Best general conversation"
763
763
 
764
764
  planning:
765
- provider: "groq"
766
- model_id: "meta-models/Muse-Glimmer-30B"
765
+ provider: "nim"
766
+ model_id: "meta/muse-glimmer-30b"
767
767
  temperature: 0.3
768
- description: "Task decomposition, structured planning"
768
+ description: "Dedicated reasoning & planning"
769
769
 
770
770
  reviewer:
771
- provider: "groq"
772
- model_id: "meta-models/Muse-Glimmer-30B"
771
+ provider: "nim"
772
+ model_id: "meta/muse-glimmer-30b"
773
773
  temperature: 0.3
774
- description: "Code review, quality analysis"
774
+ description: "Code review & analysis"
775
775
 
776
776
  routing:
777
777
  provider: "groq"
778
778
  model_id: "groq/compound-mini"
779
779
  temperature: 0.0
780
- description: "Intent classification, simple decisions"
780
+ description: "Ultra-fast routing (0.1s)"
781
781
 
782
782
  fast_loop:
783
783
  provider: "nim"
784
784
  model_id: "nvidia/nemotron-3-super-120b-a12b"
785
785
  temperature: 0.1
786
- description: "Parallel tool calling, function execution"
786
+ description: "Best-in-class tool calling"
787
787
 
788
788
  coder:
789
789
  provider: "nim"
790
790
  model_id: "nvidia/nemotron-3-super-120b-a12b"
791
791
  temperature: 0.1
792
- description: "Agentic coding, code generation"
792
+ description: "Agentic coding"
793
793
 
794
794
  tester:
795
795
  provider: "nim"
796
796
  model_id: "nvidia/nemotron-3-super-120b-a12b"
797
797
  temperature: 0.1
798
- description: "Test generation, pattern recognition"
798
+ description: "Test generation & pattern recognition"
799
799
 
800
800
  fallback:
801
801
  provider: "nim"
@@ -932,10 +932,10 @@ def check_providers(global_install: bool = typer.Option(False, "--global", help=
932
932
 
933
933
  console.print("\n[bold]Model Recommendations:[/bold]")
934
934
  console.print(" - [bold]General Interaction:[/bold] openai/gpt-oss-120b (Groq) - Best conversation")
935
- console.print(" - [bold]Planning/Reviewing:[/bold] Muse Glimmer (Groq) - Best reasoning")
935
+ console.print(" - [bold]Planning/Reviewing:[/bold] Muse Glimmer 30B (NIM) - Best reasoning")
936
936
  console.print(" - [bold]Routing:[/bold] groq/compound-mini (Groq) - Fastest (0.1s)")
937
- console.print(" - [bold]Tool Calling:[/bold] Qwen 27b (Groq) - Best tool use")
938
- console.print(" - [bold]Coding/Testing:[/bold] Devstral 2 (NIM) - Best SWE-bench (77.6%)")
937
+ console.print(" - [bold]Tool Calling:[/bold] Nemotron 120B (NIM) - Best tool use")
938
+ console.print(" - [bold]Coding/Testing:[/bold] Nemotron 120B (NIM) - Best SWE-bench")
939
939
  except SkyError as e:
940
940
  console.print(f"\n[bold red]Error ({e.code}):[/bold red] {e.message}")
941
941
  if e.suggestion:
@@ -969,3 +969,7 @@ if __name__ == "__main__":
969
969
  except Exception as e:
970
970
  console.print(f"[bold red]{_handle_error(e)}[/bold red]")
971
971
  sys.exit(1)
972
+ app()
973
+ except Exception as e:
974
+ console.print(f"[bold red]{_handle_error(e)}[/bold red]")
975
+ sys.exit(1)
@@ -112,6 +112,15 @@ class DexProjectConfig(BaseModel):
112
112
  model_config = ConfigDict(extra="forbid")
113
113
 
114
114
  project_name: str = "sky-project"
115
+ mode_roles: Dict[str, str] = Field(
116
+ default={
117
+ "ask": "general",
118
+ "plan": "planning",
119
+ "agent": "fast_loop",
120
+ "workflow": "fast_loop",
121
+ },
122
+ description="Mapping from mode names to role names"
123
+ )
115
124
  approval_rules: List[ApprovalRuleConfig] = Field(default_factory=list)
116
125
  max_retries: int = Field(default=3, ge=1, le=10)
117
126
  docker_image: str = "python:3.11-slim"
@@ -295,7 +304,6 @@ def load_models_config(global_mode: bool = False) -> ModelRoutingConfig:
295
304
  models=[
296
305
  ModelInfoConfig(id="groq/compound-mini", description="Ultra-fast routing (0.1s)", context_window=8192, best_for=["routing", "classification"], provider="groq"),
297
306
  ModelInfoConfig(id="openai/gpt-oss-120b", description="Best general conversation", context_window=128000, best_for=["general", "chat"], provider="groq"),
298
- ModelInfoConfig(id="meta-models/Muse-Glimmer-30B", description="Dedicated reasoning & planning", context_window=32768, best_for=["planning", "reviewing"], provider="groq"),
299
307
  ModelInfoConfig(id="qwen/qwen3.6-27b", description="Best-in-class tool calling", context_window=32768, best_for=["tool_calling", "execution"], provider="groq")
300
308
  ]
301
309
  ),
@@ -304,21 +312,22 @@ def load_models_config(global_mode: bool = False) -> ModelRoutingConfig:
304
312
  timeout=60,
305
313
  requires_api_key=True,
306
314
  free_tier=True,
307
- default_model="mistralai/devstral-2",
315
+ default_model="meta/muse-glimmer-30b",
308
316
  models=[
309
- ModelInfoConfig(id="mistralai/devstral-2", description="Purpose-built for agentic coding", context_window=131072, best_for=["coding", "tool_use"], provider="nim"),
317
+ ModelInfoConfig(id="meta/muse-glimmer-30b", description="Purpose-built for agentic reasoning & planning", context_window=131072, best_for=["planning", "reviewing"], provider="nim"),
318
+ ModelInfoConfig(id="nvidia/nemotron-3-super-120b-a12b", description="Best-in-class tool calling & coding", context_window=131072, best_for=["coding", "tool_use"], provider="nim"),
310
319
  ModelInfoConfig(id="nvidia/llama-3.1-nemotron-70b-instruct", description="Reliable backup model", context_window=131072, best_for=["fallback"], provider="nim")
311
320
  ]
312
321
  )
313
322
  },
314
323
  roles={
315
324
  "general": ModelAssignmentConfig(provider="groq", model_id="openai/gpt-oss-120b", temperature=0.7),
316
- "planning": ModelAssignmentConfig(provider="groq", model_id="meta-models/Muse-Glimmer-30B", temperature=0.3),
317
- "reviewer": ModelAssignmentConfig(provider="groq", model_id="meta-models/Muse-Glimmer-30B", temperature=0.3),
325
+ "planning": ModelAssignmentConfig(provider="nim", model_id="meta/muse-glimmer-30b", temperature=0.3),
326
+ "reviewer": ModelAssignmentConfig(provider="nim", model_id="meta/muse-glimmer-30b", temperature=0.3),
318
327
  "routing": ModelAssignmentConfig(provider="groq", model_id="groq/compound-mini", temperature=0.0),
319
- "fast_loop": ModelAssignmentConfig(provider="groq", model_id="qwen/qwen3.6-27b", temperature=0.1),
320
- "coder": ModelAssignmentConfig(provider="nim", model_id="mistralai/devstral-2", temperature=0.1),
321
- "tester": ModelAssignmentConfig(provider="nim", model_id="mistralai/devstral-2", temperature=0.1),
328
+ "fast_loop": ModelAssignmentConfig(provider="nim", model_id="nvidia/nemotron-3-super-120b-a12b", temperature=0.1),
329
+ "coder": ModelAssignmentConfig(provider="nim", model_id="nvidia/nemotron-3-super-120b-a12b", temperature=0.1),
330
+ "tester": ModelAssignmentConfig(provider="nim", model_id="nvidia/nemotron-3-super-120b-a12b", temperature=0.1),
322
331
  },
323
332
  fallback=ModelAssignmentConfig(provider="nim", model_id="nvidia/llama-3.1-nemotron-70b-instruct", temperature=0.1),
324
333
  timeout_seconds=30,
@@ -283,7 +283,10 @@ class FastLoopEngine:
283
283
  messages[0]["content"] = prompt
284
284
 
285
285
  tools = self._get_available_tools(mode, tools_filter)
286
- role = "fast_loop"
286
+
287
+ # Get mode-to-role mapping from config
288
+ mode_roles = getattr(self.config, "mode_roles", {})
289
+ role = mode_roles.get(mode, "fast_loop")
287
290
 
288
291
  if self.config.verbose:
289
292
  from rich.console import Console
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sky-dev
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: Sky - Agentic coding assistant. Build without boundaries.
5
5
  Author-email: Aaditya A <aaditya@corover.ai>
6
6
  License: MIT
@@ -109,12 +109,19 @@ sky chat
109
109
  - 💰 **Cost Tracking** — Every session shows what it cost
110
110
  - 🔄 **Resumable Workflows** — Interrupt and resume anytime
111
111
 
112
- ## Providers
112
+ ## Models
113
113
 
114
- | Provider | Use Case | Setup |
115
- |----------|----------|-------|
116
- | Groq | Planning, Routing, General | `GROQ_API_KEY` in .env |
117
- | NVIDIA NIM | Coding, Testing, Subagents | `NVIDIA_NIM_API_KEY` in .env |
114
+ Sky uses specialized models for each task:
115
+
116
+ | Role | Model | Provider |
117
+ |------|-------|----------|
118
+ | General Chat | GPT-OSS 120B | Groq |
119
+ | Planning | Muse Glimmer 30B | NVIDIA NIM |
120
+ | Review | Muse Glimmer 30B | NVIDIA NIM |
121
+ | Routing | Compound Mini | Groq |
122
+ | Tool Calling | Nemotron 120B | NVIDIA NIM |
123
+ | Coding | Nemotron 120B | NVIDIA NIM |
124
+ | Testing | Nemotron 120B | NVIDIA NIM |
118
125
 
119
126
  ## Commands
120
127
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes