spooling 0.2.7__tar.gz → 0.2.8__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.
- {spooling-0.2.7/spooling.egg-info → spooling-0.2.8}/PKG-INFO +2 -2
- {spooling-0.2.7 → spooling-0.2.8}/README.md +1 -1
- {spooling-0.2.7 → spooling-0.2.8}/pyproject.toml +1 -1
- {spooling-0.2.7 → spooling-0.2.8}/spooling/cli.py +26 -4
- {spooling-0.2.7 → spooling-0.2.8/spooling.egg-info}/PKG-INFO +2 -2
- {spooling-0.2.7 → spooling-0.2.8}/tests/test_session_ids.py +19 -0
- {spooling-0.2.7 → spooling-0.2.8}/LICENSE +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/setup.cfg +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/__init__.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/agent.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/classifiers.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/cloud.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/config.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/__init__.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/base.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/bigquery.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/clickhouse.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/factory.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/mongodb.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/mysql.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/postgresql.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/rest/__init__.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/rest/base.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/rest/shopify_connectors.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/snowflake.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/connectors/types.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/db.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/embeddings.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/evals.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/experiments.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/ingest.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/mcp_server.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/optimize.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/parser.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/pricing.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/__init__.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/antigravity.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/base.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/codex.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/copilot.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/cortex_code.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/cursor.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/gemini.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/github.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/gitlab.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/kiro.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/opencode.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/session_file.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/providers/windsurf.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/redact.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/remote_otel.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/schema.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/sdk.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/search.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/server.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/sessions.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/stats.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/subscription_pricing.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/tracing.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/tunnel.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/tunnel_auth.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling/watcher.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling.egg-info/SOURCES.txt +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling.egg-info/dependency_links.txt +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling.egg-info/entry_points.txt +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling.egg-info/requires.txt +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/spooling.egg-info/top_level.txt +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/tests/test_mcp_auth_middleware.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/tests/test_storage_optimizations.py +0 -0
- {spooling-0.2.7 → spooling-0.2.8}/tests/test_tunnel_auth.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spooling
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: Local session tracker and semantic search for AI coding assistants
|
|
5
5
|
Author: Parsed Analytics, Inc.
|
|
6
6
|
License: MIT
|
|
@@ -188,7 +188,7 @@ spooling session show ses_e6310bd1 -m # plus the full conversation text
|
|
|
188
188
|
spooling session show ses_e6310bd1 -m --max-chars 300 # truncate each message
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
-
`session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
191
|
+
`spooling session <id> -m` is shorthand for `spooling session show <id> -m`. `session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
192
192
|
|
|
193
193
|
### `spooling optimize`
|
|
194
194
|
|
|
@@ -152,7 +152,7 @@ spooling session show ses_e6310bd1 -m # plus the full conversation text
|
|
|
152
152
|
spooling session show ses_e6310bd1 -m --max-chars 300 # truncate each message
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
-
`session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
155
|
+
`spooling session <id> -m` is shorthand for `spooling session show <id> -m`. `session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
156
156
|
|
|
157
157
|
### `spooling optimize`
|
|
158
158
|
|
|
@@ -1135,9 +1135,27 @@ def redact(path, session_id, show):
|
|
|
1135
1135
|
# Sessions
|
|
1136
1136
|
# ---------------------------------------------------------------------------
|
|
1137
1137
|
|
|
1138
|
-
|
|
1138
|
+
class _SessionGroup(click.Group):
|
|
1139
|
+
"""`spooling session <id>` is shorthand for `spooling session show <id>`."""
|
|
1140
|
+
|
|
1141
|
+
def resolve_command(self, ctx, args):
|
|
1142
|
+
try:
|
|
1143
|
+
return super().resolve_command(ctx, args)
|
|
1144
|
+
except click.UsageError:
|
|
1145
|
+
if args and not args[0].startswith("-") and "show" in self.commands:
|
|
1146
|
+
return "show", self.commands["show"], args
|
|
1147
|
+
raise
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
@cli.group(cls=_SessionGroup)
|
|
1139
1151
|
def session():
|
|
1140
|
-
"""Inspect and list local sessions.
|
|
1152
|
+
"""Inspect and list local sessions.
|
|
1153
|
+
|
|
1154
|
+
\b
|
|
1155
|
+
spooling session list list sessions with ids
|
|
1156
|
+
spooling session show ID -m read a session's full text
|
|
1157
|
+
spooling session ID -m same as 'show ID'
|
|
1158
|
+
"""
|
|
1141
1159
|
pass
|
|
1142
1160
|
|
|
1143
1161
|
|
|
@@ -1234,8 +1252,12 @@ def session_show(session_id, messages, max_chars):
|
|
|
1234
1252
|
|
|
1235
1253
|
detail = get_session_detail(session_id)
|
|
1236
1254
|
if not detail:
|
|
1237
|
-
console.print(
|
|
1238
|
-
|
|
1255
|
+
console.print(
|
|
1256
|
+
f"[yellow]Session not found: {session_id}[/yellow]\n"
|
|
1257
|
+
"[dim]Find ids with 'spooling session list --id PART' or 'spooling search QUERY'. "
|
|
1258
|
+
"If the session is recent, run 'spooling sync' first.[/dim]"
|
|
1259
|
+
)
|
|
1260
|
+
raise SystemExit(1)
|
|
1239
1261
|
|
|
1240
1262
|
s = detail["session"]
|
|
1241
1263
|
console.print(Panel(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spooling
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: Local session tracker and semantic search for AI coding assistants
|
|
5
5
|
Author: Parsed Analytics, Inc.
|
|
6
6
|
License: MIT
|
|
@@ -188,7 +188,7 @@ spooling session show ses_e6310bd1 -m # plus the full conversation text
|
|
|
188
188
|
spooling session show ses_e6310bd1 -m --max-chars 300 # truncate each message
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
-
`session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
191
|
+
`spooling session <id> -m` is shorthand for `spooling session show <id> -m`. `session show` accepts a full session id or any unique prefix. If a prefix matches several sessions, it lists them and exits so you can pick one.
|
|
192
192
|
|
|
193
193
|
### `spooling optimize`
|
|
194
194
|
|
|
@@ -133,3 +133,22 @@ def test_cli_session_show_and_list(conn):
|
|
|
133
133
|
assert res.exit_code == 0
|
|
134
134
|
assert UU1 in res.output
|
|
135
135
|
assert OC1 not in res.output
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_cli_session_id_shortcut_and_not_found(conn):
|
|
139
|
+
from spooling.cli import cli
|
|
140
|
+
|
|
141
|
+
r = CliRunner()
|
|
142
|
+
res = r.invoke(cli, ["session", "ses_e6310bd1", "-m"]) # no 'show'
|
|
143
|
+
assert res.exit_code == 0, res.output
|
|
144
|
+
assert "hello from login issue" in res.output
|
|
145
|
+
|
|
146
|
+
res = r.invoke(cli, ["session", "nosuchcommand"])
|
|
147
|
+
assert res.exit_code == 1
|
|
148
|
+
assert "not found" in res.output.lower()
|
|
149
|
+
|
|
150
|
+
res = r.invoke(cli, ["session", "list", "--id", "0b104f33"], env={"COLUMNS": "200"})
|
|
151
|
+
assert res.exit_code == 0 # real subcommands still win
|
|
152
|
+
|
|
153
|
+
res = r.invoke(cli, ["session"]) # bare group shows help
|
|
154
|
+
assert "show" in res.output and "list" in res.output
|
|
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
|
|
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
|
|
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
|