stcode 0.0.1a0__py3-none-any.whl

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 (111) hide show
  1. stcode/__init__.py +10 -0
  2. stcode/cli/__init__.py +9 -0
  3. stcode/cli/bootstrap.py +70 -0
  4. stcode/cli/labels.py +621 -0
  5. stcode/cli/logic/__init__.py +0 -0
  6. stcode/cli/logic/commands.py +36 -0
  7. stcode/cli/logic/completion.py +43 -0
  8. stcode/cli/logic/connection.py +46 -0
  9. stcode/cli/logic/requests.py +18 -0
  10. stcode/cli/logic/sessions.py +67 -0
  11. stcode/cli/logic/settings.py +35 -0
  12. stcode/cli/logic/state.py +43 -0
  13. stcode/cli/logic/workspace.py +17 -0
  14. stcode/cli/main.py +290 -0
  15. stcode/cli/models.py +61 -0
  16. stcode/cli/services/__init__.py +0 -0
  17. stcode/cli/services/client.py +393 -0
  18. stcode/cli/services/launcher.py +159 -0
  19. stcode/cli/services/paths.py +18 -0
  20. stcode/cli/services/preferences.py +107 -0
  21. stcode/cli/ui/__init__.py +0 -0
  22. stcode/cli/ui/app.py +136 -0
  23. stcode/cli/ui/app.tcss +3 -0
  24. stcode/cli/ui/components/__init__.py +0 -0
  25. stcode/cli/ui/components/banner.py +78 -0
  26. stcode/cli/ui/components/cards.py +229 -0
  27. stcode/cli/ui/components/prompt.py +225 -0
  28. stcode/cli/ui/components/status.py +95 -0
  29. stcode/cli/ui/components/transcript/__init__.py +51 -0
  30. stcode/cli/ui/components/transcript/entries.py +232 -0
  31. stcode/cli/ui/components/transcript/formatting.py +188 -0
  32. stcode/cli/ui/components/transcript/view.py +101 -0
  33. stcode/cli/ui/screens/__init__.py +0 -0
  34. stcode/cli/ui/screens/chat/__init__.py +0 -0
  35. stcode/cli/ui/screens/chat/chat.tcss +12 -0
  36. stcode/cli/ui/screens/chat/presenter.py +187 -0
  37. stcode/cli/ui/screens/chat/screen.py +682 -0
  38. stcode/cli/ui/screens/connect.py +126 -0
  39. stcode/cli/ui/screens/connect.tcss +49 -0
  40. stcode/cli/ui/screens/dialog.tcss +40 -0
  41. stcode/cli/ui/screens/sessions.py +105 -0
  42. stcode/cli/ui/screens/settings.py +137 -0
  43. stcode/cli/ui/screens/settings.tcss +69 -0
  44. stcode/cli/ui/screens/trust.py +50 -0
  45. stcode/cli/ui/theme.py +221 -0
  46. stcode/core/__main__.py +7 -0
  47. stcode/core/agent/__init__.py +41 -0
  48. stcode/core/agent/agent.py +651 -0
  49. stcode/core/agent/events.py +97 -0
  50. stcode/core/agent/supervisor.py +226 -0
  51. stcode/core/agent/task.py +120 -0
  52. stcode/core/common/__init__.py +21 -0
  53. stcode/core/common/compat.py +27 -0
  54. stcode/core/common/ids.py +43 -0
  55. stcode/core/common/tools.py +50 -0
  56. stcode/core/common/trace.py +406 -0
  57. stcode/core/common/truncate.py +76 -0
  58. stcode/core/configs.py +490 -0
  59. stcode/core/daemon/__init__.py +32 -0
  60. stcode/core/daemon/autonomy.py +71 -0
  61. stcode/core/daemon/main.py +126 -0
  62. stcode/core/daemon/protocol.py +499 -0
  63. stcode/core/daemon/runner.py +359 -0
  64. stcode/core/daemon/server.py +682 -0
  65. stcode/core/daemon/workspace.py +88 -0
  66. stcode/core/harness/__init__.py +81 -0
  67. stcode/core/harness/approvals.py +85 -0
  68. stcode/core/harness/context.py +260 -0
  69. stcode/core/harness/errors.py +40 -0
  70. stcode/core/harness/harness.py +417 -0
  71. stcode/core/harness/mcp.py +530 -0
  72. stcode/core/harness/outputs.py +99 -0
  73. stcode/core/harness/prompts/__init__.py +138 -0
  74. stcode/core/harness/prompts/execute.py +51 -0
  75. stcode/core/harness/prompts/plan.py +57 -0
  76. stcode/core/harness/prompts/sections.py +238 -0
  77. stcode/core/harness/skills/__init__.py +30 -0
  78. stcode/core/harness/skills/loader.py +247 -0
  79. stcode/core/harness/tools/__init__.py +111 -0
  80. stcode/core/harness/tools/base.py +640 -0
  81. stcode/core/harness/tools/files.py +276 -0
  82. stcode/core/harness/tools/interact.py +72 -0
  83. stcode/core/harness/tools/registry.py +113 -0
  84. stcode/core/harness/tools/repl.py +97 -0
  85. stcode/core/harness/tools/schema.py +186 -0
  86. stcode/core/harness/tools/search.py +356 -0
  87. stcode/core/harness/tools/shell.py +372 -0
  88. stcode/core/harness/tools/skill.py +66 -0
  89. stcode/core/harness/tools/todo.py +62 -0
  90. stcode/core/harness/tools/web.py +163 -0
  91. stcode/core/providers/__init__.py +31 -0
  92. stcode/core/providers/anthropic_claude.py +243 -0
  93. stcode/core/providers/base.py +73 -0
  94. stcode/core/providers/gateway.py +267 -0
  95. stcode/core/providers/google_gemini.py +225 -0
  96. stcode/core/providers/openai_gpt.py +250 -0
  97. stcode/core/providers/registry.py +46 -0
  98. stcode/core/providers/types.py +148 -0
  99. stcode/core/repl/__init__.py +19 -0
  100. stcode/core/repl/_worker.py +179 -0
  101. stcode/core/repl/client.py +374 -0
  102. stcode/core/session/__init__.py +39 -0
  103. stcode/core/session/session.py +493 -0
  104. stcode/core/team/__init__.py +38 -0
  105. stcode/core/team/mailbox.py +249 -0
  106. stcode/core/team/tools.py +145 -0
  107. stcode-0.0.1a0.dist-info/METADATA +229 -0
  108. stcode-0.0.1a0.dist-info/RECORD +111 -0
  109. stcode-0.0.1a0.dist-info/WHEEL +4 -0
  110. stcode-0.0.1a0.dist-info/entry_points.txt +3 -0
  111. stcode-0.0.1a0.dist-info/licenses/LICENSE +201 -0
stcode/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ """
2
+ stcode — Terminal Coding Agent
3
+ """
4
+
5
+ import importlib.metadata
6
+
7
+ try:
8
+ __version__ = importlib.metadata.version("stcode")
9
+ except importlib.metadata.PackageNotFoundError:
10
+ __version__ = "0.0.0"
stcode/cli/__init__.py ADDED
@@ -0,0 +1,9 @@
1
+ """
2
+ CLI — what the user sees and types: the typer entrypoint, the textual screens, and the
3
+ copy they display.
4
+
5
+ A separate program from `stcode.core`: neither imports the other. The UI reaches the
6
+ engine only through the daemon's socket (`client.py`), and starts one as a subprocess
7
+ when none is listening (`launcher.py`). No re-exports: every screen imports
8
+ `stcode.cli.labels`, and pulling typer in through this `__init__` would be dead weight.
9
+ """
@@ -0,0 +1,70 @@
1
+ """Construct client dependencies before handing the terminal to Textual."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import contextlib
6
+ from pathlib import Path
7
+
8
+ from stcode.cli.logic.connection import Connection
9
+ from stcode.cli.logic.state import ClientState
10
+ from stcode.cli.models import ApprovalMode, StartOptions
11
+ from stcode.cli.services.launcher import Launcher
12
+ from stcode.cli.services.preferences import load_prefs, save_prefs, ui_path
13
+ from stcode.cli.ui.app import StcodeApp
14
+ from stcode.cli.ui.theme import TerminalMode, detect_terminal_mode
15
+
16
+
17
+ def build_app(
18
+ launcher: Launcher,
19
+ *,
20
+ daemonless: bool = False,
21
+ restart: bool = False,
22
+ cwd: Path | None = None,
23
+ resume: str = "",
24
+ mode: ApprovalMode | None = None,
25
+ role: str = "",
26
+ terminal_mode: TerminalMode = "dark",
27
+ prefs_path: Path | None = None,
28
+ ) -> StcodeApp:
29
+ path = prefs_path or ui_path()
30
+ prefs = load_prefs(path)
31
+
32
+ def save_preferences() -> None:
33
+ with contextlib.suppress(OSError):
34
+ save_prefs(prefs, path)
35
+
36
+ return StcodeApp(
37
+ Connection(launcher),
38
+ ClientState(),
39
+ StartOptions(
40
+ cwd or Path.cwd(), cwd is not None, daemonless, resume, mode, role
41
+ ),
42
+ prefs,
43
+ path,
44
+ save_preferences=save_preferences,
45
+ restart=restart,
46
+ terminal_mode=terminal_mode,
47
+ )
48
+
49
+
50
+ def run(
51
+ launcher: Launcher,
52
+ *,
53
+ daemonless: bool = False,
54
+ restart: bool = False,
55
+ cwd: Path | None = None,
56
+ resume: str = "",
57
+ mode: ApprovalMode | None = None,
58
+ role: str = "",
59
+ ) -> None:
60
+ # Detection must precede Textual taking ownership of the tty.
61
+ build_app(
62
+ launcher,
63
+ daemonless=daemonless,
64
+ restart=restart,
65
+ cwd=cwd,
66
+ resume=resume,
67
+ mode=mode,
68
+ role=role,
69
+ terminal_mode=detect_terminal_mode(),
70
+ ).run()