shotgun-sh 0.1.0.dev15__py3-none-any.whl → 0.1.0.dev16__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.
Potentially problematic release.
This version of shotgun-sh might be problematic. Click here for more details.
- shotgun/agents/agent_manager.py +243 -24
- shotgun/agents/tools/artifact_management.py +2 -3
- shotgun/artifacts/templates/research/sdk_comparison.yaml +73 -73
- shotgun/prompts/agents/partials/interactive_mode.j2 +10 -1
- shotgun/prompts/agents/plan.j2 +9 -12
- shotgun/prompts/agents/research.j2 +6 -3
- shotgun/prompts/agents/specify.j2 +8 -9
- shotgun/prompts/agents/state/artifact_templates_available.j2 +3 -1
- shotgun/prompts/agents/state/existing_artifacts_available.j2 +2 -0
- shotgun/prompts/agents/tasks.j2 +1 -1
- shotgun/prompts/codebase/cypher_query_patterns.j2 +2 -0
- shotgun/prompts/codebase/partials/graph_schema.j2 +4 -2
- shotgun/tui/app.py +9 -1
- shotgun/tui/commands/__init__.py +73 -0
- shotgun/tui/screens/chat.py +361 -178
- shotgun/tui/screens/chat.tcss +11 -0
- shotgun/tui/screens/chat_screen/__init__.py +0 -0
- shotgun/tui/screens/chat_screen/command_providers.py +197 -0
- shotgun/tui/screens/chat_screen/history.py +160 -0
- {shotgun_sh-0.1.0.dev15.dist-info → shotgun_sh-0.1.0.dev16.dist-info}/METADATA +1 -1
- {shotgun_sh-0.1.0.dev15.dist-info → shotgun_sh-0.1.0.dev16.dist-info}/RECORD +24 -20
- {shotgun_sh-0.1.0.dev15.dist-info → shotgun_sh-0.1.0.dev16.dist-info}/WHEEL +0 -0
- {shotgun_sh-0.1.0.dev15.dist-info → shotgun_sh-0.1.0.dev16.dist-info}/entry_points.txt +0 -0
- {shotgun_sh-0.1.0.dev15.dist-info → shotgun_sh-0.1.0.dev16.dist-info}/licenses/LICENSE +0 -0
shotgun/tui/screens/chat.tcss
CHANGED
|
File without changes
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
from collections.abc import AsyncGenerator
|
|
2
|
+
from typing import TYPE_CHECKING, cast
|
|
3
|
+
|
|
4
|
+
from textual.command import DiscoveryHit, Hit, Provider
|
|
5
|
+
|
|
6
|
+
from shotgun.agents.agent_manager import AgentType
|
|
7
|
+
from shotgun.codebase.models import CodebaseGraph
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from shotgun.tui.screens.chat import ChatScreen
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AgentModeProvider(Provider):
|
|
14
|
+
"""Command provider for agent mode switching."""
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def chat_screen(self) -> "ChatScreen":
|
|
18
|
+
from shotgun.tui.screens.chat import ChatScreen
|
|
19
|
+
|
|
20
|
+
return cast(ChatScreen, self.screen)
|
|
21
|
+
|
|
22
|
+
def set_mode(self, mode: AgentType) -> None:
|
|
23
|
+
"""Switch to research mode."""
|
|
24
|
+
self.chat_screen.mode = mode
|
|
25
|
+
|
|
26
|
+
async def discover(self) -> AsyncGenerator[DiscoveryHit, None]:
|
|
27
|
+
"""Provide default mode switching commands when palette opens."""
|
|
28
|
+
yield DiscoveryHit(
|
|
29
|
+
"Switch to Research Mode",
|
|
30
|
+
lambda: self.set_mode(AgentType.RESEARCH),
|
|
31
|
+
help="🔬 Research topics with web search and synthesize findings",
|
|
32
|
+
)
|
|
33
|
+
yield DiscoveryHit(
|
|
34
|
+
"Switch to Plan Mode",
|
|
35
|
+
lambda: self.set_mode(AgentType.PLAN),
|
|
36
|
+
help="📋 Create comprehensive, actionable plans with milestones",
|
|
37
|
+
)
|
|
38
|
+
yield DiscoveryHit(
|
|
39
|
+
"Switch to Tasks Mode",
|
|
40
|
+
lambda: self.set_mode(AgentType.TASKS),
|
|
41
|
+
help="✅ Generate specific, actionable tasks from research and plans",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
async def search(self, query: str) -> AsyncGenerator[Hit, None]:
|
|
45
|
+
"""Search for mode commands."""
|
|
46
|
+
matcher = self.matcher(query)
|
|
47
|
+
|
|
48
|
+
commands = [
|
|
49
|
+
(
|
|
50
|
+
"Switch to Research Mode",
|
|
51
|
+
"🔬 Research topics with web search and synthesize findings",
|
|
52
|
+
lambda: self.set_mode(AgentType.RESEARCH),
|
|
53
|
+
AgentType.RESEARCH,
|
|
54
|
+
),
|
|
55
|
+
(
|
|
56
|
+
"Switch to Plan Mode",
|
|
57
|
+
"📋 Create comprehensive, actionable plans with milestones",
|
|
58
|
+
lambda: self.set_mode(AgentType.PLAN),
|
|
59
|
+
AgentType.PLAN,
|
|
60
|
+
),
|
|
61
|
+
(
|
|
62
|
+
"Switch to Tasks Mode",
|
|
63
|
+
"✅ Generate specific, actionable tasks from research and plans",
|
|
64
|
+
lambda: self.set_mode(AgentType.TASKS),
|
|
65
|
+
AgentType.TASKS,
|
|
66
|
+
),
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
for title, help_text, callback, mode in commands:
|
|
70
|
+
if self.chat_screen.mode == mode:
|
|
71
|
+
continue
|
|
72
|
+
score = matcher.match(title)
|
|
73
|
+
if score > 0:
|
|
74
|
+
yield Hit(score, matcher.highlight(title), callback, help=help_text)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class ProviderSetupProvider(Provider):
|
|
78
|
+
"""Command palette entries for provider configuration."""
|
|
79
|
+
|
|
80
|
+
@property
|
|
81
|
+
def chat_screen(self) -> "ChatScreen":
|
|
82
|
+
from shotgun.tui.screens.chat import ChatScreen
|
|
83
|
+
|
|
84
|
+
return cast(ChatScreen, self.screen)
|
|
85
|
+
|
|
86
|
+
def open_provider_config(self) -> None:
|
|
87
|
+
"""Show the provider configuration screen."""
|
|
88
|
+
self.chat_screen.app.push_screen("provider_config")
|
|
89
|
+
|
|
90
|
+
async def discover(self) -> AsyncGenerator[DiscoveryHit, None]:
|
|
91
|
+
yield DiscoveryHit(
|
|
92
|
+
"Open Provider Setup",
|
|
93
|
+
self.open_provider_config,
|
|
94
|
+
help="⚙️ Manage API keys for available providers",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
async def search(self, query: str) -> AsyncGenerator[Hit, None]:
|
|
98
|
+
matcher = self.matcher(query)
|
|
99
|
+
title = "Open Provider Setup"
|
|
100
|
+
score = matcher.match(title)
|
|
101
|
+
if score > 0:
|
|
102
|
+
yield Hit(
|
|
103
|
+
score,
|
|
104
|
+
matcher.highlight(title),
|
|
105
|
+
self.open_provider_config,
|
|
106
|
+
help="⚙️ Manage API keys for available providers",
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class CodebaseCommandProvider(Provider):
|
|
111
|
+
"""Command palette entries for codebase management."""
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def chat_screen(self) -> "ChatScreen":
|
|
115
|
+
from shotgun.tui.screens.chat import ChatScreen
|
|
116
|
+
|
|
117
|
+
return cast(ChatScreen, self.screen)
|
|
118
|
+
|
|
119
|
+
async def discover(self) -> AsyncGenerator[DiscoveryHit, None]:
|
|
120
|
+
yield DiscoveryHit(
|
|
121
|
+
"Codebase: Index Codebase",
|
|
122
|
+
self.chat_screen.index_codebase_command,
|
|
123
|
+
help="Index a repository into the codebase graph",
|
|
124
|
+
)
|
|
125
|
+
yield DiscoveryHit(
|
|
126
|
+
"Codebase: Delete Codebase Index",
|
|
127
|
+
self.chat_screen.delete_codebase_command,
|
|
128
|
+
help="Delete an existing codebase index",
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
async def search(self, query: str) -> AsyncGenerator[Hit, None]:
|
|
132
|
+
matcher = self.matcher(query)
|
|
133
|
+
commands = [
|
|
134
|
+
(
|
|
135
|
+
"Codebase: Index Codebase",
|
|
136
|
+
self.chat_screen.index_codebase_command,
|
|
137
|
+
"Index a repository into the codebase graph",
|
|
138
|
+
),
|
|
139
|
+
(
|
|
140
|
+
"Codebase: Delete Codebase Index",
|
|
141
|
+
self.chat_screen.delete_codebase_command,
|
|
142
|
+
"Delete an existing codebase index",
|
|
143
|
+
),
|
|
144
|
+
]
|
|
145
|
+
for title, callback, help_text in commands:
|
|
146
|
+
score = matcher.match(title)
|
|
147
|
+
if score > 0:
|
|
148
|
+
yield Hit(score, matcher.highlight(title), callback, help=help_text)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class DeleteCodebasePaletteProvider(Provider):
|
|
152
|
+
"""Provider that lists indexed codebases for deletion."""
|
|
153
|
+
|
|
154
|
+
@property
|
|
155
|
+
def chat_screen(self) -> "ChatScreen":
|
|
156
|
+
from shotgun.tui.screens.chat import ChatScreen
|
|
157
|
+
|
|
158
|
+
return cast(ChatScreen, self.screen)
|
|
159
|
+
|
|
160
|
+
async def _codebases(self) -> list[CodebaseGraph]:
|
|
161
|
+
try:
|
|
162
|
+
result = await self.chat_screen.codebase_sdk.list_codebases()
|
|
163
|
+
except Exception as exc: # pragma: no cover - defensive UI path
|
|
164
|
+
self.chat_screen.notify(
|
|
165
|
+
f"Unable to load codebases: {exc}", severity="error"
|
|
166
|
+
)
|
|
167
|
+
return []
|
|
168
|
+
return result.graphs
|
|
169
|
+
|
|
170
|
+
async def discover(self) -> AsyncGenerator[DiscoveryHit, None]:
|
|
171
|
+
graphs = await self._codebases()
|
|
172
|
+
for graph in graphs:
|
|
173
|
+
title = f"Delete {graph.name}"
|
|
174
|
+
help_text = f"{graph.graph_id} • {graph.repo_path}"
|
|
175
|
+
yield DiscoveryHit(
|
|
176
|
+
title,
|
|
177
|
+
lambda graph_id=graph.graph_id: self.chat_screen.delete_codebase_from_palette(
|
|
178
|
+
graph_id
|
|
179
|
+
),
|
|
180
|
+
help=help_text,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
async def search(self, query: str) -> AsyncGenerator[Hit, None]:
|
|
184
|
+
matcher = self.matcher(query)
|
|
185
|
+
graphs = await self._codebases()
|
|
186
|
+
for graph in graphs:
|
|
187
|
+
display = f"{graph.name} ({graph.graph_id[:8]})"
|
|
188
|
+
score = matcher.match(display)
|
|
189
|
+
if score > 0:
|
|
190
|
+
yield Hit(
|
|
191
|
+
score,
|
|
192
|
+
matcher.highlight(display),
|
|
193
|
+
lambda graph_id=graph.graph_id: self.chat_screen.delete_codebase_from_palette(
|
|
194
|
+
graph_id
|
|
195
|
+
),
|
|
196
|
+
help=graph.repo_path,
|
|
197
|
+
)
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
from pydantic_ai.messages import (
|
|
2
|
+
BuiltinToolCallPart,
|
|
3
|
+
BuiltinToolReturnPart,
|
|
4
|
+
ModelMessage,
|
|
5
|
+
ModelRequest,
|
|
6
|
+
ModelResponse,
|
|
7
|
+
TextPart,
|
|
8
|
+
ThinkingPart,
|
|
9
|
+
ToolCallPart,
|
|
10
|
+
)
|
|
11
|
+
from textual.app import ComposeResult
|
|
12
|
+
from textual.reactive import reactive
|
|
13
|
+
from textual.widget import Widget
|
|
14
|
+
from textual.widgets import Markdown
|
|
15
|
+
|
|
16
|
+
from shotgun.tui.components.vertical_tail import VerticalTail
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class PartialResponseWidget(Widget): # TODO: doesn't work lol
|
|
20
|
+
DEFAULT_CSS = """
|
|
21
|
+
PartialResponseWidget {
|
|
22
|
+
height: auto;
|
|
23
|
+
}
|
|
24
|
+
Markdown, AgentResponseWidget, UserQuestionWidget {
|
|
25
|
+
height: auto;
|
|
26
|
+
}
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
item: reactive[ModelMessage | None] = reactive(None, recompose=True)
|
|
30
|
+
|
|
31
|
+
def __init__(self, item: ModelMessage | None) -> None:
|
|
32
|
+
super().__init__()
|
|
33
|
+
self.item = item
|
|
34
|
+
|
|
35
|
+
def compose(self) -> ComposeResult:
|
|
36
|
+
if self.item is None:
|
|
37
|
+
pass
|
|
38
|
+
elif self.item.kind == "response":
|
|
39
|
+
yield AgentResponseWidget(self.item)
|
|
40
|
+
elif self.item.kind == "request":
|
|
41
|
+
yield UserQuestionWidget(self.item)
|
|
42
|
+
|
|
43
|
+
def watch_item(self, item: ModelMessage | None) -> None:
|
|
44
|
+
if item is None:
|
|
45
|
+
self.display = False
|
|
46
|
+
else:
|
|
47
|
+
self.display = True
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ChatHistory(Widget):
|
|
51
|
+
DEFAULT_CSS = """
|
|
52
|
+
VerticalTail {
|
|
53
|
+
align: left bottom;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
VerticalTail > * {
|
|
57
|
+
height: auto;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Horizontal {
|
|
61
|
+
height: auto;
|
|
62
|
+
background: $secondary-muted;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
Markdown {
|
|
66
|
+
height: auto;
|
|
67
|
+
}
|
|
68
|
+
"""
|
|
69
|
+
partial_response: reactive[ModelMessage | None] = reactive(None)
|
|
70
|
+
|
|
71
|
+
def __init__(self) -> None:
|
|
72
|
+
super().__init__()
|
|
73
|
+
self.items: list[ModelMessage] = []
|
|
74
|
+
self.vertical_tail: VerticalTail | None = None
|
|
75
|
+
self.partial_response = None
|
|
76
|
+
|
|
77
|
+
def compose(self) -> ComposeResult:
|
|
78
|
+
self.vertical_tail = VerticalTail()
|
|
79
|
+
yield self.vertical_tail
|
|
80
|
+
yield PartialResponseWidget(self.partial_response).data_bind(
|
|
81
|
+
item=ChatHistory.partial_response
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def update_messages(self, messages: list[ModelMessage]) -> None:
|
|
85
|
+
"""Update the displayed messages without recomposing."""
|
|
86
|
+
if not self.vertical_tail:
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
# Clear existing widgets
|
|
90
|
+
self.vertical_tail.remove_children()
|
|
91
|
+
|
|
92
|
+
# Add new message widgets
|
|
93
|
+
for item in messages:
|
|
94
|
+
if isinstance(item, ModelRequest):
|
|
95
|
+
self.vertical_tail.mount(UserQuestionWidget(item))
|
|
96
|
+
elif isinstance(item, ModelResponse):
|
|
97
|
+
self.vertical_tail.mount(AgentResponseWidget(item))
|
|
98
|
+
|
|
99
|
+
self.items = messages
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class UserQuestionWidget(Widget):
|
|
103
|
+
def __init__(self, item: ModelRequest | None) -> None:
|
|
104
|
+
super().__init__()
|
|
105
|
+
self.item = item
|
|
106
|
+
|
|
107
|
+
def compose(self) -> ComposeResult:
|
|
108
|
+
self.display = self.item is not None
|
|
109
|
+
if self.item is None:
|
|
110
|
+
yield Markdown(markdown="")
|
|
111
|
+
else:
|
|
112
|
+
prompt = "".join(
|
|
113
|
+
str(part.content) for part in self.item.parts if part.content
|
|
114
|
+
)
|
|
115
|
+
yield Markdown(markdown=f"**>** {prompt}")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class AgentResponseWidget(Widget):
|
|
119
|
+
def __init__(self, item: ModelResponse | None) -> None:
|
|
120
|
+
super().__init__()
|
|
121
|
+
self.item = item
|
|
122
|
+
|
|
123
|
+
def compose(self) -> ComposeResult:
|
|
124
|
+
self.display = self.item is not None
|
|
125
|
+
if self.item is None:
|
|
126
|
+
yield Markdown(markdown="")
|
|
127
|
+
else:
|
|
128
|
+
yield Markdown(markdown=f"**⏺** {self.compute_output()}")
|
|
129
|
+
|
|
130
|
+
def compute_output(self) -> str:
|
|
131
|
+
acc = ""
|
|
132
|
+
if self.item is None:
|
|
133
|
+
return ""
|
|
134
|
+
for part in self.item.parts: # TextPart | ToolCallPart | BuiltinToolCallPart | BuiltinToolReturnPart | ThinkingPart
|
|
135
|
+
if isinstance(part, TextPart):
|
|
136
|
+
acc += part.content + "\n\n"
|
|
137
|
+
elif isinstance(part, ToolCallPart):
|
|
138
|
+
parts_str = self._format_tool_call_part(part)
|
|
139
|
+
acc += parts_str + "\n\n"
|
|
140
|
+
elif isinstance(part, BuiltinToolCallPart):
|
|
141
|
+
acc += f"{part.tool_name}({part.args})\n\n"
|
|
142
|
+
elif isinstance(part, BuiltinToolReturnPart):
|
|
143
|
+
acc += f"{part.tool_name}()\n\n"
|
|
144
|
+
elif isinstance(part, ThinkingPart):
|
|
145
|
+
acc += f"{part.content}\n\n"
|
|
146
|
+
return acc.strip()
|
|
147
|
+
|
|
148
|
+
def _format_tool_call_part(self, part: ToolCallPart) -> str:
|
|
149
|
+
if part.tool_name == "write_artifact_section":
|
|
150
|
+
if isinstance(part.args, dict) and "section_title" in part.args:
|
|
151
|
+
return f"{part.tool_name}({part.args['section_title']})"
|
|
152
|
+
else:
|
|
153
|
+
return f"{part.tool_name}()"
|
|
154
|
+
if part.tool_name == "create_artifact":
|
|
155
|
+
if isinstance(part.args, dict) and "name" in part.args:
|
|
156
|
+
return f"{part.tool_name}({part.args['name']})"
|
|
157
|
+
else:
|
|
158
|
+
return f"{part.tool_name}()"
|
|
159
|
+
|
|
160
|
+
return f"{part.tool_name}({part.args})"
|
|
@@ -7,7 +7,7 @@ shotgun/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
7
7
|
shotgun/sentry_telemetry.py,sha256=3r9on0GQposn9aX6Dkb9mrfaVQl_dIZzhu9BjE838AU,2854
|
|
8
8
|
shotgun/telemetry.py,sha256=aBwCRFU97oiIK5K13OhT7yYCQUAVQyrvnoG-aX3k2ZE,3109
|
|
9
9
|
shotgun/agents/__init__.py,sha256=8Jzv1YsDuLyNPFJyckSr_qI4ehTVeDyIMDW4omsfPGc,25
|
|
10
|
-
shotgun/agents/agent_manager.py,sha256=
|
|
10
|
+
shotgun/agents/agent_manager.py,sha256=VRMPfwPtgTBtzyp-JYyyitGk_ZQ8oh8hTmB2cEylyZ0,16024
|
|
11
11
|
shotgun/agents/artifact_state.py,sha256=WkspYQe-9CvBS90PapBsX997yvJ5KWH-qtSXIWmfvp0,2121
|
|
12
12
|
shotgun/agents/common.py,sha256=my-Y7VNNpDDYxDJ4hlRmTs7lIS8tBKFvR9ew7uKxcPE,11369
|
|
13
13
|
shotgun/agents/models.py,sha256=6edILmN7caDAmf8x-qgl7lA42tl2b-ZsiC3da8tS3Xw,7127
|
|
@@ -30,7 +30,7 @@ shotgun/agents/history/message_utils.py,sha256=S7wqix4W3uvC8rChs6TMxp7yjnjr8a2Aq
|
|
|
30
30
|
shotgun/agents/history/token_counting.py,sha256=RasWy84eNjbmqyQDTGAzj1Q1I9ml_G_9R-maWN7gr8s,13839
|
|
31
31
|
shotgun/agents/history/token_estimation.py,sha256=iNqhDSqFzG0YYxGijMRzj54GALFglOp0qVMB6G59RhU,4690
|
|
32
32
|
shotgun/agents/tools/__init__.py,sha256=QaN80IqWvB5qEcjHqri1-PYvYlO74vdhcwLugoEdblo,772
|
|
33
|
-
shotgun/agents/tools/artifact_management.py,sha256=
|
|
33
|
+
shotgun/agents/tools/artifact_management.py,sha256=f8WvCCcXb_sMK0U4Y8D1RLUhcj2rhT6CrxB3bURYxcs,17205
|
|
34
34
|
shotgun/agents/tools/file_management.py,sha256=6ru6DXAl-S6DiCt2HLGTDrK2rJBJpn-t6RkSHzYbxc4,4571
|
|
35
35
|
shotgun/agents/tools/user_interaction.py,sha256=7l0OY8EdgO-9gkKy-yOv0V0P_Uzzfk0jMU39d4XN1xM,1087
|
|
36
36
|
shotgun/agents/tools/codebase/__init__.py,sha256=ceAGkK006NeOYaIJBLQsw7Q46sAyCRK9PYDs8feMQVw,661
|
|
@@ -56,7 +56,7 @@ shotgun/artifacts/templates/loader.py,sha256=qLAOibYH55l1kF3Yd3GU5uLVfF0CDUml-vt
|
|
|
56
56
|
shotgun/artifacts/templates/models.py,sha256=Y4BhTNhbjZJvBHsf5op569meRq96imggrt5ZjnkeaDg,4879
|
|
57
57
|
shotgun/artifacts/templates/plan/delivery_and_release_plan.yaml,sha256=HOdOCvVpEu9Qnrf5gll0oqY9v-_vapczyfmaB6c8cAg,3289
|
|
58
58
|
shotgun/artifacts/templates/research/market_research.yaml,sha256=uoOw5s6kUVwSBhhk6LfcCqZQZUC4BNUQnkeEYEYQ1VE,24744
|
|
59
|
-
shotgun/artifacts/templates/research/sdk_comparison.yaml,sha256=
|
|
59
|
+
shotgun/artifacts/templates/research/sdk_comparison.yaml,sha256=grQe52wbGZqdnHx_6gJc88dBdByeWkAtzU3G7HhmyGA,11074
|
|
60
60
|
shotgun/artifacts/templates/specify/prd.yaml,sha256=LTtTOERjYe1iGV7Wj-WJEExcbHp-zb3LMgweuboXmiM,10784
|
|
61
61
|
shotgun/artifacts/templates/specify/product_spec.yaml,sha256=BAubivc75VnNZVRqGK9kX1TxZDn-e2_eYbuZGaKvk2U,13953
|
|
62
62
|
shotgun/cli/__init__.py,sha256=_F1uW2g87y4bGFxz8Gp8u7mq2voHp8vQIUtCmm8Tojo,40
|
|
@@ -85,25 +85,25 @@ shotgun/codebase/core/parser_loader.py,sha256=LZRrDS8Sp518jIu3tQW-BxdwJ86lnsTteI
|
|
|
85
85
|
shotgun/prompts/__init__.py,sha256=RswUm0HMdfm2m2YKUwUsEdRIwoczdbI7zlucoEvHYRo,132
|
|
86
86
|
shotgun/prompts/loader.py,sha256=jy24-E02pCSmz2651aCT2NgHfRrHAGMYvKrD6gs0Er8,4424
|
|
87
87
|
shotgun/prompts/agents/__init__.py,sha256=YRIJMbzpArojNX1BP5gfxxois334z_GQga8T-xyWMbY,39
|
|
88
|
-
shotgun/prompts/agents/plan.j2,sha256=
|
|
89
|
-
shotgun/prompts/agents/research.j2,sha256=
|
|
90
|
-
shotgun/prompts/agents/specify.j2,sha256=
|
|
91
|
-
shotgun/prompts/agents/tasks.j2,sha256=
|
|
88
|
+
shotgun/prompts/agents/plan.j2,sha256=mogmrjqLx5xSXYqWdvLqcObZSfLVLQI39JpVs3Z-V84,2494
|
|
89
|
+
shotgun/prompts/agents/research.j2,sha256=LxlASYYt45sDmZW8YLJYH8ftGWa6Jvx5aD0MGNXXVjs,3025
|
|
90
|
+
shotgun/prompts/agents/specify.j2,sha256=1CC2SHsxA1Yma0gSFsq-k3VpwtEohN9nh2qeRMMRPRA,1809
|
|
91
|
+
shotgun/prompts/agents/tasks.j2,sha256=OYW1zsYRJxoQF4yVMqJNgi4SNz3YmcP4sljHmmqAu4Q,3613
|
|
92
92
|
shotgun/prompts/agents/partials/artifact_system.j2,sha256=AD1CvHDSZEmjplmDw443PeOmcXUgM5JdNLu1_mz18kM,1678
|
|
93
93
|
shotgun/prompts/agents/partials/codebase_understanding.j2,sha256=AQmN04VRzGmLbxKKthMK4hkJZ9mIU1NMKIpTDOHJrPM,5051
|
|
94
94
|
shotgun/prompts/agents/partials/common_agent_system_prompt.j2,sha256=UgEHSudzfsCcKHp-Nt6tlsel8ap93z7yevbt0r9SSSg,1663
|
|
95
95
|
shotgun/prompts/agents/partials/content_formatting.j2,sha256=MG0JB7SSp8YV5akDWpbs2f9DcdREIYqLp38NnoWLeQ0,1854
|
|
96
|
-
shotgun/prompts/agents/partials/interactive_mode.j2,sha256=
|
|
97
|
-
shotgun/prompts/agents/state/artifact_templates_available.j2,sha256=
|
|
98
|
-
shotgun/prompts/agents/state/existing_artifacts_available.j2,sha256=
|
|
96
|
+
shotgun/prompts/agents/partials/interactive_mode.j2,sha256=dx58RoPK7HUvydOM7qEKBU33xKOj8QIVDh39RAY-90c,940
|
|
97
|
+
shotgun/prompts/agents/state/artifact_templates_available.j2,sha256=Jb31uOnURfLSG8RKQxHZE8zivans_sG6hKgPbC91pfk,819
|
|
98
|
+
shotgun/prompts/agents/state/existing_artifacts_available.j2,sha256=gb5gKYeOXcJmIkkDS1JOm68AEymLutlxNow5HTtev7I,739
|
|
99
99
|
shotgun/prompts/agents/state/system_state.j2,sha256=NFuBOo7cGy0tQrnDUs3wGO19oytGNHK2K8tgoG4cw1M,274
|
|
100
100
|
shotgun/prompts/agents/state/codebase/codebase_graphs_available.j2,sha256=IX9Xrg1d2uh_C4096shY_hpqhuu0RJLZpH0NbXEMSXI,413
|
|
101
101
|
shotgun/prompts/codebase/__init__.py,sha256=NYuPMtmYM2ptuwf3YxVuotNlJOUq0hnjmwlzKcJkGK4,42
|
|
102
|
-
shotgun/prompts/codebase/cypher_query_patterns.j2,sha256=
|
|
102
|
+
shotgun/prompts/codebase/cypher_query_patterns.j2,sha256=ufTx_xT3VoS76KcVUbIgGQx-bJoJHx3bBE3dagAXv18,8913
|
|
103
103
|
shotgun/prompts/codebase/cypher_system.j2,sha256=kV-OJ8gM3vsBo8hW4mLSEHpJW-wV_2tNaPck3HUM52c,1497
|
|
104
104
|
shotgun/prompts/codebase/enhanced_query_context.j2,sha256=WzGnFaBLZO-mOdkZ_u_PewSu9niKy87DKNL4uzQq1Jg,724
|
|
105
105
|
shotgun/prompts/codebase/partials/cypher_rules.j2,sha256=vtc5OqTp-z5Rq_ti-_RG31bVOIA_iNe80_x3CdxO6bs,2397
|
|
106
|
-
shotgun/prompts/codebase/partials/graph_schema.j2,sha256=
|
|
106
|
+
shotgun/prompts/codebase/partials/graph_schema.j2,sha256=fUsD1ZgU1pIWUzrs97jHq3TatKeGSvZgG8XP5gCQUJc,1939
|
|
107
107
|
shotgun/prompts/codebase/partials/temporal_context.j2,sha256=yYHQHBQ4EeSs6TtKPm9fflGW3y6H0-yAANcTdsApkk4,1388
|
|
108
108
|
shotgun/prompts/history/__init__.py,sha256=wbMLQ8yWmYz1sfXXigEAUlNkFcM50KdQv0kp4VU_P58,43
|
|
109
109
|
shotgun/prompts/history/incremental_summarization.j2,sha256=GmnNh0pWTjaEaI1sPwKNsGCys5fK8xrzWqalAs_LhJw,2447
|
|
@@ -116,23 +116,27 @@ shotgun/sdk/exceptions.py,sha256=qBcQv0v7ZTwP7CMcxZST4GqCsfOWtOUjSzGBo0-heqo,412
|
|
|
116
116
|
shotgun/sdk/models.py,sha256=RsR9e2wiVrNGP2zTvjIZVvBlibgluuhDZlCNcw8JTTA,5488
|
|
117
117
|
shotgun/sdk/services.py,sha256=WJi_AANWJZPdWdq9LntP5nlYgLxLlsFyXt28DGYNoJo,1132
|
|
118
118
|
shotgun/tui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
-
shotgun/tui/app.py,sha256=
|
|
119
|
+
shotgun/tui/app.py,sha256=LjqQ4ylwVS7278bB6zZ5Uey6oD2pH9dljWymUVgYyPE,3661
|
|
120
120
|
shotgun/tui/styles.tcss,sha256=ETyyw1bpMBOqTi5RLcAJUScdPWTvAWEqE9YcT0kVs_E,121
|
|
121
|
+
shotgun/tui/commands/__init__.py,sha256=Bvm2EwIpYXp0jsf-d4t1wMptziCpY5TJKPItN05ts-0,2393
|
|
121
122
|
shotgun/tui/components/prompt_input.py,sha256=Ss-htqraHZAPaehGE4x86ij0veMjc4UgadMXpbdXr40,2229
|
|
122
123
|
shotgun/tui/components/spinner.py,sha256=ovTDeaJ6FD6chZx_Aepia6R3UkPOVJ77EKHfRmn39MY,2427
|
|
123
124
|
shotgun/tui/components/splash.py,sha256=vppy9vEIEvywuUKRXn2y11HwXSRkQZHLYoVjhDVdJeU,1267
|
|
124
125
|
shotgun/tui/components/vertical_tail.py,sha256=kkCH0WjAh54jDvRzIaOffRZXUKn_zHFZ_ichfUpgzaE,1071
|
|
125
|
-
shotgun/tui/screens/chat.py,sha256=
|
|
126
|
-
shotgun/tui/screens/chat.tcss,sha256=
|
|
126
|
+
shotgun/tui/screens/chat.py,sha256=x9_wdXl6Mbgwr_UfNfvWEkU-ua-Ph--9BmgrkIv-BEY,23922
|
|
127
|
+
shotgun/tui/screens/chat.tcss,sha256=2Yq3E23jxsySYsgZf4G1AYrYVcpX0UDW6kNNI0tDmtM,437
|
|
127
128
|
shotgun/tui/screens/directory_setup.py,sha256=lIZ1J4A6g5Q2ZBX8epW7BhR96Dmdcg22CyiM5S-I5WU,3237
|
|
128
129
|
shotgun/tui/screens/provider_config.py,sha256=A_tvDHF5KLP5PV60LjMJ_aoOdT3TjI6_g04UIUqGPqM,7126
|
|
129
130
|
shotgun/tui/screens/splash.py,sha256=E2MsJihi3c9NY1L28o_MstDxGwrCnnV7zdq00MrGAsw,706
|
|
131
|
+
shotgun/tui/screens/chat_screen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
132
|
+
shotgun/tui/screens/chat_screen/command_providers.py,sha256=jeryNT0WGeU6-8UTdEQk0C8A_HgNGrTskBgpqMDyAQU,6952
|
|
133
|
+
shotgun/tui/screens/chat_screen/history.py,sha256=eC8Md4wNyLv19exKLitNadyylTMmm7Rk8acd9h1QXtU,5062
|
|
130
134
|
shotgun/utils/__init__.py,sha256=WinIEp9oL2iMrWaDkXz2QX4nYVPAm8C9aBSKTeEwLtE,198
|
|
131
135
|
shotgun/utils/env_utils.py,sha256=8QK5aw_f_V2AVTleQQlcL0RnD4sPJWXlDG46fsHu0d8,1057
|
|
132
136
|
shotgun/utils/file_system_utils.py,sha256=l-0p1bEHF34OU19MahnRFdClHufThfGAjQ431teAIp0,1004
|
|
133
137
|
shotgun/utils/update_checker.py,sha256=Xf-7w3Pos3etzCoT771gJe2HLkA8_V2GrqWy7ni9UqA,11373
|
|
134
|
-
shotgun_sh-0.1.0.
|
|
135
|
-
shotgun_sh-0.1.0.
|
|
136
|
-
shotgun_sh-0.1.0.
|
|
137
|
-
shotgun_sh-0.1.0.
|
|
138
|
-
shotgun_sh-0.1.0.
|
|
138
|
+
shotgun_sh-0.1.0.dev16.dist-info/METADATA,sha256=BZyZEVZzVDYuVHHMhlc-SkciK_ocrPFpujSW9MtZINU,11271
|
|
139
|
+
shotgun_sh-0.1.0.dev16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
140
|
+
shotgun_sh-0.1.0.dev16.dist-info/entry_points.txt,sha256=asZxLU4QILneq0MWW10saVCZc4VWhZfb0wFZvERnzfA,45
|
|
141
|
+
shotgun_sh-0.1.0.dev16.dist-info/licenses/LICENSE,sha256=YebsZl590zCHrF_acCU5pmNt0pnAfD2DmAnevJPB1tY,1065
|
|
142
|
+
shotgun_sh-0.1.0.dev16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|