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.
Files changed (85) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +19 -11
  3. package/bin/claude-smart.js +290 -68
  4. package/package.json +1 -1
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/README.md +11 -10
  8. package/plugin/dashboard/app/layout.tsx +20 -0
  9. package/plugin/opencode/dist/server.mjs +76 -2
  10. package/plugin/opencode/server.mts +79 -2
  11. package/plugin/pyproject.toml +6 -2
  12. package/plugin/scripts/smart-install.sh +7 -1
  13. package/plugin/src/claude_smart/cli.py +210 -22
  14. package/plugin/src/claude_smart/context_format.py +9 -9
  15. package/plugin/src/claude_smart/cs_cite.py +66 -19
  16. package/plugin/uv.lock +5 -5
  17. package/plugin/vendor/reflexio/README.md +3 -3
  18. package/plugin/vendor/reflexio/pyproject.toml +1 -1
  19. package/plugin/vendor/reflexio/reflexio/README.md +3 -1
  20. package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +1 -1
  21. package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +2 -2
  22. package/plugin/vendor/reflexio/reflexio/cli/utils.py +44 -1
  23. package/plugin/vendor/reflexio/reflexio/client/client.py +97 -0
  24. package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +8 -0
  25. package/plugin/vendor/reflexio/reflexio/lib/_base.py +15 -0
  26. package/plugin/vendor/reflexio/reflexio/lib/_generation.py +9 -8
  27. package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +27 -16
  28. package/plugin/vendor/reflexio/reflexio/lib/_search.py +23 -5
  29. package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +9 -0
  30. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +1 -0
  31. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/governance.py +117 -0
  32. package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +45 -3
  33. package/plugin/vendor/reflexio/reflexio/models/config_schema.py +16 -0
  34. package/plugin/vendor/reflexio/reflexio/server/README.md +14 -2
  35. package/plugin/vendor/reflexio/reflexio/server/api.py +176 -29
  36. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +1 -1
  37. package/plugin/vendor/reflexio/reflexio/server/{_auth.py → auth.py} +2 -0
  38. package/plugin/vendor/reflexio/reflexio/server/extensions.py +213 -0
  39. package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +4 -4
  40. package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1 -1
  41. package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +12 -1
  42. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.4.0.prompt.md +14 -2
  43. package/plugin/vendor/reflexio/reflexio/server/services/README.md +3 -1
  44. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +8 -0
  45. package/plugin/vendor/reflexio/reflexio/server/services/governance/config.py +52 -0
  46. package/plugin/vendor/reflexio/reflexio/server/services/governance/service.py +378 -0
  47. package/plugin/vendor/reflexio/reflexio/server/services/governance/subject_refs.py +34 -0
  48. package/plugin/vendor/reflexio/reflexio/server/services/lineage/gc_scheduler.py +45 -19
  49. package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +9 -1
  50. package/plugin/vendor/reflexio/reflexio/server/services/playbook/aggregation_prompt_processing.py +100 -0
  51. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator.py +129 -111
  52. package/plugin/vendor/reflexio/reflexio/server/services/playbook/service.py +9 -9
  53. package/plugin/vendor/reflexio/reflexio/server/services/profile/components/extractor.py +3 -2
  54. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/recency.py +211 -0
  55. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +29 -13
  56. package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +4 -0
  57. package/plugin/vendor/reflexio/reflexio/server/services/storage/governance_validation.py +681 -0
  58. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +14 -2
  59. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +2 -0
  60. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +49 -19
  61. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_governance.py +1965 -0
  62. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_lineage.py +5 -3
  63. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1 -2133
  64. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +262 -107
  65. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +73 -33
  66. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/__init__.py +13 -0
  67. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_agent.py +952 -0
  68. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_eval_results.py +189 -0
  69. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_optimization.py +247 -0
  70. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_source_linkage.py +145 -0
  71. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_user.py +838 -0
  72. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +19 -3
  73. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +4 -4
  74. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_governance.py +148 -0
  75. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +0 -909
  76. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +13 -0
  77. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +2 -0
  78. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/__init__.py +13 -0
  79. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_agent.py +365 -0
  80. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_eval_results.py +124 -0
  81. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_optimization.py +85 -0
  82. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_source_linkage.py +47 -0
  83. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_user.py +333 -0
  84. package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +153 -12
  85. package/plugin/vendor/reflexio/reflexio/server/services/playbook/user_detail_stripping.py +0 -84
@@ -23,23 +23,35 @@ from ._agent_run import (
23
23
  )
24
24
  from ._base import BaseStorageCore, matches_status_filter
25
25
  from ._extras import ExtrasMixin
26
+ from ._governance import GovernanceMixin
26
27
  from ._lineage import EntityType, LineageEventMixin
27
28
  from ._operations import OperationMixin
28
- from ._playbook import PlaybookMixin
29
29
  from ._profiles import ProfileMixin
30
30
  from ._requests import RequestMixin
31
31
  from ._retrieval_log import RetrievalLogMixin
32
32
  from ._shadow_verdicts import ShadowVerdictsMixin
33
33
  from ._share_links import ShareLinkMixin
34
34
  from ._stall_state import StallStateMixin
35
+ from .playbook import (
36
+ AgentEvaluationResultStoreMixin,
37
+ AgentPlaybookStoreMixin,
38
+ OptimizationJobStoreMixin,
39
+ PlaybookSourceLinkageMixin,
40
+ UserPlaybookStoreMixin,
41
+ )
35
42
 
36
43
 
37
44
  class BaseStorage(
38
45
  AgentRunMixin,
39
46
  ProfileMixin,
40
47
  RequestMixin,
41
- PlaybookMixin,
48
+ AgentPlaybookStoreMixin,
49
+ UserPlaybookStoreMixin,
50
+ PlaybookSourceLinkageMixin,
51
+ OptimizationJobStoreMixin,
52
+ AgentEvaluationResultStoreMixin,
42
53
  RetrievalLogMixin,
54
+ GovernanceMixin,
43
55
  LineageEventMixin,
44
56
  OperationMixin,
45
57
  ExtrasMixin,
@@ -244,7 +256,11 @@ __all__ = [
244
256
  "PendingToolCallRecord",
245
257
  "PendingToolCallStatus",
246
258
  "PendingToolCallUpsertResult",
247
- "PlaybookMixin",
259
+ "AgentEvaluationResultStoreMixin",
260
+ "AgentPlaybookStoreMixin",
261
+ "OptimizationJobStoreMixin",
262
+ "PlaybookSourceLinkageMixin",
263
+ "UserPlaybookStoreMixin",
248
264
  "RetrievalLogMixin",
249
265
  "PriorAnswerMatch",
250
266
  "RunToolDependencyKind",
@@ -29,10 +29,10 @@ class ExtrasMixin:
29
29
  dict: Dictionary containing:
30
30
  - current_period: Stats for the current period (days_back)
31
31
  - previous_period: Stats for the previous period (for trend calculation)
32
- - interactions_time_series: List of time series data points (raw, ungrouped)
33
- - profiles_time_series: List of time series data points (raw, ungrouped)
34
- - playbooks_time_series: List of time series data points (raw, ungrouped)
35
- - evaluations_time_series: List of time series data points (raw, ungrouped)
32
+ - interactions_time_series: Daily bucketed interaction counts
33
+ - profiles_time_series: Daily bucketed profile counts
34
+ - playbooks_time_series: Daily bucketed playbook counts
35
+ - evaluations_time_series: Daily bucketed success rates with optional counts
36
36
  """
37
37
  raise NotImplementedError
38
38
 
@@ -0,0 +1,148 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC, abstractmethod
4
+ from typing import Literal
5
+
6
+ from reflexio.models.api_schema.domain.governance import (
7
+ AuditEvent,
8
+ PurgeOperation,
9
+ PurgeOperationTarget,
10
+ SubjectWriteBarrier,
11
+ )
12
+ from reflexio.models.config_schema import GovernanceRetentionConfig
13
+
14
+
15
+ class GovernanceMixin(ABC):
16
+ """Mixin for backend-neutral governance storage primitives."""
17
+
18
+ @abstractmethod
19
+ def append_audit_event(self, event: AuditEvent) -> bool:
20
+ raise NotImplementedError
21
+
22
+ @abstractmethod
23
+ def list_audit_events(
24
+ self, subject_ref: str | None = None, *, org_id: str | None = None
25
+ ) -> list[AuditEvent]:
26
+ raise NotImplementedError
27
+
28
+ @abstractmethod
29
+ def begin_purge_operation(
30
+ self,
31
+ purge_id: str,
32
+ idempotency_key: str,
33
+ operation_type: Literal["user_erasure", "org_purge"],
34
+ scope_type: Literal["user", "org"],
35
+ subject_ref: str | None,
36
+ request_ref: str,
37
+ ) -> PurgeOperation:
38
+ raise NotImplementedError
39
+
40
+ @abstractmethod
41
+ def record_purge_target(
42
+ self,
43
+ purge_id: str,
44
+ target_name: str,
45
+ phase: str,
46
+ status: Literal["pending", "running", "failed", "complete"],
47
+ target_ref: str = "",
48
+ detail: dict[str, object] | None = None,
49
+ deleted_count: int = 0,
50
+ error_detail: str | None = None,
51
+ ) -> None:
52
+ raise NotImplementedError
53
+
54
+ @abstractmethod
55
+ def list_purge_targets(
56
+ self, purge_id: str, phase: str | None = None
57
+ ) -> list[PurgeOperationTarget]:
58
+ raise NotImplementedError
59
+
60
+ @abstractmethod
61
+ def purge_targets_prepared(self, purge_id: str) -> bool:
62
+ raise NotImplementedError
63
+
64
+ @abstractmethod
65
+ def prepare_governance_erase_targets(
66
+ self,
67
+ purge_id: str,
68
+ user_id: str,
69
+ owned_user_playbook_ids: set[int] | None = None,
70
+ ) -> None:
71
+ raise NotImplementedError
72
+
73
+ @abstractmethod
74
+ def hide_governance_agent_playbooks_for_rebuild(self, purge_id: str) -> list[int]:
75
+ raise NotImplementedError
76
+
77
+ @abstractmethod
78
+ def apply_governance_user_data_delete(
79
+ self, purge_id: str, user_id: str
80
+ ) -> dict[str, int]:
81
+ raise NotImplementedError
82
+
83
+ @abstractmethod
84
+ def apply_governance_agent_playbook_rebuild(
85
+ self,
86
+ purge_id: str,
87
+ agent_playbook_id: int,
88
+ remaining_source_windows: list[dict[str, object]],
89
+ content: str | None,
90
+ trigger: str | None,
91
+ rationale: str | None,
92
+ blocking_issue: dict[str, object] | None,
93
+ expanded_terms: str | None,
94
+ tags: list[str] | None,
95
+ ) -> None:
96
+ raise NotImplementedError
97
+
98
+ @abstractmethod
99
+ def complete_purge_operation_with_audit(
100
+ self, purge_id: str, audit_event: AuditEvent
101
+ ) -> PurgeOperation:
102
+ raise NotImplementedError
103
+
104
+ @abstractmethod
105
+ def begin_subject_erasure_barrier(
106
+ self, subject_ref: str, purge_id: str
107
+ ) -> SubjectWriteBarrier:
108
+ raise NotImplementedError
109
+
110
+ @abstractmethod
111
+ def assert_subject_writable(self, subject_ref: str) -> None:
112
+ raise NotImplementedError
113
+
114
+ @abstractmethod
115
+ def complete_subject_erasure_barrier_after_empty_check(
116
+ self, purge_id: str, audit_event: AuditEvent
117
+ ) -> PurgeOperation:
118
+ raise NotImplementedError
119
+
120
+ @abstractmethod
121
+ def fail_subject_erasure_barrier(
122
+ self,
123
+ subject_ref: str,
124
+ purge_id: str,
125
+ error_code: str,
126
+ error_detail: str,
127
+ ) -> SubjectWriteBarrier:
128
+ raise NotImplementedError
129
+
130
+ @abstractmethod
131
+ def get_subject_write_barrier(
132
+ self, subject_ref: str
133
+ ) -> SubjectWriteBarrier | None:
134
+ raise NotImplementedError
135
+
136
+ @abstractmethod
137
+ def fail_purge_operation(
138
+ self, purge_id: str, error_code: str, error_detail: str
139
+ ) -> PurgeOperation:
140
+ raise NotImplementedError
141
+
142
+ @abstractmethod
143
+ def get_purge_operation(self, purge_id: str) -> PurgeOperation:
144
+ raise NotImplementedError
145
+
146
+ @abstractmethod
147
+ def gc_governance_retention(self, *, config: GovernanceRetentionConfig) -> int:
148
+ raise NotImplementedError