claude-smart 0.2.46 → 0.2.47
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.md +19 -11
- package/bin/claude-smart.js +290 -68
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/README.md +11 -10
- package/plugin/dashboard/app/layout.tsx +20 -0
- package/plugin/opencode/dist/server.mjs +76 -2
- package/plugin/opencode/server.mts +79 -2
- package/plugin/pyproject.toml +6 -2
- package/plugin/scripts/smart-install.sh +7 -1
- package/plugin/src/claude_smart/cli.py +210 -22
- package/plugin/src/claude_smart/context_format.py +9 -9
- package/plugin/src/claude_smart/cs_cite.py +66 -19
- package/plugin/uv.lock +5 -5
- package/plugin/vendor/reflexio/README.md +3 -3
- package/plugin/vendor/reflexio/pyproject.toml +1 -1
- package/plugin/vendor/reflexio/reflexio/README.md +3 -1
- package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +1 -1
- package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +2 -2
- package/plugin/vendor/reflexio/reflexio/cli/utils.py +44 -1
- package/plugin/vendor/reflexio/reflexio/client/client.py +97 -0
- package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +8 -0
- package/plugin/vendor/reflexio/reflexio/lib/_base.py +15 -0
- package/plugin/vendor/reflexio/reflexio/lib/_generation.py +9 -8
- package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +27 -16
- package/plugin/vendor/reflexio/reflexio/lib/_search.py +23 -5
- package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +9 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/governance.py +117 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +45 -3
- package/plugin/vendor/reflexio/reflexio/models/config_schema.py +16 -0
- package/plugin/vendor/reflexio/reflexio/server/README.md +14 -2
- package/plugin/vendor/reflexio/reflexio/server/api.py +176 -29
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +1 -1
- package/plugin/vendor/reflexio/reflexio/server/{_auth.py → auth.py} +2 -0
- package/plugin/vendor/reflexio/reflexio/server/extensions.py +213 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +4 -4
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1 -1
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +12 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.4.0.prompt.md +14 -2
- package/plugin/vendor/reflexio/reflexio/server/services/README.md +3 -1
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +8 -0
- package/plugin/vendor/reflexio/reflexio/server/services/governance/config.py +52 -0
- package/plugin/vendor/reflexio/reflexio/server/services/governance/service.py +378 -0
- package/plugin/vendor/reflexio/reflexio/server/services/governance/subject_refs.py +34 -0
- package/plugin/vendor/reflexio/reflexio/server/services/lineage/gc_scheduler.py +45 -19
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +9 -1
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/aggregation_prompt_processing.py +100 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator.py +129 -111
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/service.py +9 -9
- package/plugin/vendor/reflexio/reflexio/server/services/profile/components/extractor.py +3 -2
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/recency.py +211 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +29 -13
- package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +4 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/governance_validation.py +681 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +14 -2
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +2 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +49 -19
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_governance.py +1965 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_lineage.py +5 -3
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1 -2133
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +262 -107
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +73 -33
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_agent.py +952 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_eval_results.py +189 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_optimization.py +247 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_source_linkage.py +145 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_user.py +838 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +19 -3
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +4 -4
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_governance.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +0 -909
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +2 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_agent.py +365 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_eval_results.py +124 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_optimization.py +85 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_source_linkage.py +47 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_user.py +333 -0
- package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +153 -12
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/user_detail_stripping.py +0 -84
|
@@ -8,9 +8,9 @@ from ._base import (
|
|
|
8
8
|
_vector_rank_rows,
|
|
9
9
|
)
|
|
10
10
|
from ._extras import ExtrasMixin
|
|
11
|
+
from ._governance import SQLiteGovernanceMixin
|
|
11
12
|
from ._lineage import SQLiteLineageMixin
|
|
12
13
|
from ._operations import OperationMixin
|
|
13
|
-
from ._playbook import PlaybookMixin
|
|
14
14
|
from ._profiles import ProfileMixin
|
|
15
15
|
from ._requests import RequestMixin
|
|
16
16
|
from ._shadow_verdicts import ShadowVerdictsMixin as SQLiteShadowVerdictsMixin
|
|
@@ -25,13 +25,25 @@ from ._stall_state import (
|
|
|
25
25
|
mark_stall_notified,
|
|
26
26
|
upsert_stall_state,
|
|
27
27
|
)
|
|
28
|
+
from .playbook import (
|
|
29
|
+
AgentEvaluationResultStoreMixin,
|
|
30
|
+
AgentPlaybookStoreMixin,
|
|
31
|
+
OptimizationJobStoreMixin,
|
|
32
|
+
PlaybookSourceLinkageMixin,
|
|
33
|
+
UserPlaybookStoreMixin,
|
|
34
|
+
)
|
|
28
35
|
|
|
29
36
|
|
|
30
37
|
class SQLiteStorage(
|
|
31
38
|
SQLiteAgentRunMixin,
|
|
32
39
|
ProfileMixin,
|
|
33
40
|
RequestMixin,
|
|
34
|
-
|
|
41
|
+
AgentPlaybookStoreMixin,
|
|
42
|
+
UserPlaybookStoreMixin,
|
|
43
|
+
PlaybookSourceLinkageMixin,
|
|
44
|
+
OptimizationJobStoreMixin,
|
|
45
|
+
AgentEvaluationResultStoreMixin,
|
|
46
|
+
SQLiteGovernanceMixin,
|
|
35
47
|
SQLiteLineageMixin,
|
|
36
48
|
OperationMixin,
|
|
37
49
|
ExtrasMixin,
|
|
@@ -62,6 +62,7 @@ from reflexio.server.services.storage.retention_mixin import (
|
|
|
62
62
|
from reflexio.server.services.storage.storage_base import BaseStorage
|
|
63
63
|
from reflexio.server.site_var.site_var_manager import SiteVarManager
|
|
64
64
|
|
|
65
|
+
from ._governance import init_governance_tables
|
|
65
66
|
from ._stall_state import init_stall_state_table
|
|
66
67
|
|
|
67
68
|
logger = logging.getLogger(__name__)
|
|
@@ -642,6 +643,7 @@ class SQLiteStorageBase(RetentionMixin, BaseStorage):
|
|
|
642
643
|
with self._lock:
|
|
643
644
|
cur = self.conn.cursor()
|
|
644
645
|
cur.executescript(_DDL)
|
|
646
|
+
init_governance_tables(self.conn)
|
|
645
647
|
self.conn.commit()
|
|
646
648
|
if self._has_sqlite_vec:
|
|
647
649
|
self._create_vec_tables()
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import sqlite3
|
|
4
4
|
from collections import defaultdict
|
|
5
|
+
from datetime import UTC, datetime
|
|
5
6
|
from typing import Any, Literal, cast
|
|
6
7
|
|
|
7
8
|
from reflexio.models.api_schema.braintrust_schema import (
|
|
@@ -179,31 +180,60 @@ class ExtrasMixin:
|
|
|
179
180
|
(current_start_iso, current_time_iso),
|
|
180
181
|
)
|
|
181
182
|
|
|
183
|
+
def day_bucket(timestamp: int) -> int:
|
|
184
|
+
return int(
|
|
185
|
+
datetime.fromtimestamp(timestamp, tz=UTC)
|
|
186
|
+
.replace(hour=0, minute=0, second=0, microsecond=0)
|
|
187
|
+
.timestamp()
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
def count_series(timestamps: list[int]) -> list[dict[str, int]]:
|
|
191
|
+
buckets: dict[int, int] = defaultdict(int)
|
|
192
|
+
for timestamp in timestamps:
|
|
193
|
+
buckets[day_bucket(timestamp)] += 1
|
|
194
|
+
return [
|
|
195
|
+
{"timestamp": timestamp, "value": value}
|
|
196
|
+
for timestamp, value in sorted(buckets.items())
|
|
197
|
+
]
|
|
198
|
+
|
|
199
|
+
def rate_series(rows: list[sqlite3.Row]) -> list[dict[str, int | float]]:
|
|
200
|
+
buckets: dict[int, dict[str, int]] = defaultdict(
|
|
201
|
+
lambda: {"success": 0, "count": 0}
|
|
202
|
+
)
|
|
203
|
+
for row in rows:
|
|
204
|
+
bucket = day_bucket(_iso_to_epoch(row["created_at"]))
|
|
205
|
+
buckets[bucket]["count"] += 1
|
|
206
|
+
if row["is_success"]:
|
|
207
|
+
buckets[bucket]["success"] += 1
|
|
208
|
+
return [
|
|
209
|
+
{
|
|
210
|
+
"timestamp": timestamp,
|
|
211
|
+
"value": (
|
|
212
|
+
100.0 * aggregate["success"] / aggregate["count"]
|
|
213
|
+
if aggregate["count"]
|
|
214
|
+
else 0.0
|
|
215
|
+
),
|
|
216
|
+
"count": aggregate["count"],
|
|
217
|
+
}
|
|
218
|
+
for timestamp, aggregate in sorted(buckets.items())
|
|
219
|
+
]
|
|
220
|
+
|
|
182
221
|
return {
|
|
183
222
|
"current_period": current_stats,
|
|
184
223
|
"previous_period": previous_stats,
|
|
185
|
-
"interactions_time_series":
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
],
|
|
193
|
-
"playbooks_time_series": sorted(
|
|
224
|
+
"interactions_time_series": count_series(
|
|
225
|
+
[_iso_to_epoch(r["created_at"]) for r in interactions_ts]
|
|
226
|
+
),
|
|
227
|
+
"profiles_time_series": count_series(
|
|
228
|
+
[r["last_modified_timestamp"] for r in profiles_ts]
|
|
229
|
+
),
|
|
230
|
+
"playbooks_time_series": count_series(
|
|
194
231
|
[
|
|
195
|
-
|
|
232
|
+
_iso_to_epoch(r["created_at"])
|
|
196
233
|
for r in (*user_playbooks_ts, *agent_playbooks_ts)
|
|
197
|
-
]
|
|
198
|
-
key=lambda x: x["timestamp"],
|
|
234
|
+
]
|
|
199
235
|
),
|
|
200
|
-
"evaluations_time_series":
|
|
201
|
-
{
|
|
202
|
-
"timestamp": _iso_to_epoch(r["created_at"]),
|
|
203
|
-
"value": 100 if r["is_success"] else 0,
|
|
204
|
-
}
|
|
205
|
-
for r in evals_ts
|
|
206
|
-
],
|
|
236
|
+
"evaluations_time_series": rate_series(evals_ts),
|
|
207
237
|
}
|
|
208
238
|
|
|
209
239
|
@SQLiteStorageBase.handle_exceptions
|