delimit-cli 4.6.0 → 4.6.1

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.
@@ -0,0 +1,167 @@
1
+ # PRO_TOOLS single source of truth — LED-1410.
2
+ #
3
+ # This file is the canonical list of every Delimit MCP tool that
4
+ # requires a Pro license. Codegen propagates it into:
5
+ #
6
+ # - ai/license_core.py : PRO_TOOLS + FREE_TRIAL_LIMITS (gets
7
+ # compiled to .so for paying customers)
8
+ # - ai/license.py : Python fallback PRO_TOOLS for customers
9
+ # whose platform has no .so, AND the
10
+ # extension frozenset that fills in tools
11
+ # added after the last compiled build
12
+ # - ai/rate_limiter.py : PRO_TOOLS (filtered to non-deliberation
13
+ # tools, since DELIBERATION_TOOLS has its
14
+ # own tier in rate_limiter)
15
+ #
16
+ # To add or remove a Pro tool:
17
+ # 1. Edit this file
18
+ # 2. Run: python3 scripts/gen_pro_tools.py
19
+ # 3. Commit the regenerated .py files alongside the YAML change
20
+ #
21
+ # CI runs scripts/check_pro_tools_drift.py on every push and fails if
22
+ # any of the three generated files diverge from this manifest.
23
+ #
24
+ # DO NOT add an "extension set" in license.py by hand — that was the
25
+ # class of bug that LED-1260 caught (compiled set diverged from
26
+ # fallback set; customers with the binary got tools free while
27
+ # customers without paid). One YAML, three regenerated callers.
28
+
29
+ version: 1
30
+
31
+ # Tools tagged `kind: deliberation` go into the DELIBERATION_TOOLS
32
+ # frozenset in rate_limiter.py (separate rate-limit tier). They are
33
+ # ALSO Pro, but they're not in rate_limiter's PRO_TOOLS frozenset
34
+ # (that one is "pro non-deliberation").
35
+ #
36
+ # `in_compiled` controls whether the tool appears in license_core.py's
37
+ # baked-in PRO_TOOLS set (which gets compiled into the .so customers
38
+ # receive). License.py's fallback + extension sets always include
39
+ # every tool here regardless of in_compiled, so the gate is consistent
40
+ # for non-binary customers. The split exists because:
41
+ # - true → tool is gated by gate_tool() (the function that ships
42
+ # in the .so). Binary customers see this tool as Pro.
43
+ # - false → tool is in the fallback set but NOT in the compiled set.
44
+ # Binary customers' gate_tool() returns None (not gated).
45
+ # Non-binary customers see the tool as Pro via the fallback.
46
+ # The `false` entries are a historical leak — LED-1260 surfaced this
47
+ # class of bug and added the affected tools to the extension/fallback
48
+ # but did NOT close the gate-side gap. The codegen here preserves the
49
+ # current behavior verbatim; closing the gap requires founder
50
+ # ratification per CLAUDE.md "What Constitutes a Breaking Change for
51
+ # Users" (changes default behavior for paying customers). Track at
52
+ # LED-1454 (PR-B follow-up).
53
+ #
54
+ # `free_trial_limit` lets a tool be called N times before requiring a
55
+ # license (used by license_core's FREE_TRIAL_LIMITS dict). Only set
56
+ # this on tools where a free trial makes operational sense; most Pro
57
+ # tools should NOT be partially-free.
58
+
59
+ tools:
60
+ # ── Deliberation (separate rate tier) ────────────────────────────
61
+ - {name: delimit_deliberate, kind: deliberation, free_trial_limit: 3}
62
+ # LED-1260 leaky-gap (in_compiled: false) — landed AFTER the
63
+ # compiled set was last built. LED-1454 ratifies the closure.
64
+ - {name: delimit_security_deliberate, kind: deliberation, in_compiled: false}
65
+
66
+ # ── Governance (deep) ────────────────────────────────────────────
67
+ - {name: delimit_gov_evaluate, kind: pro, category: governance}
68
+ - {name: delimit_gov_policy, kind: pro, category: governance}
69
+ - {name: delimit_gov_run, kind: pro, category: governance}
70
+ - {name: delimit_gov_verify, kind: pro, category: governance}
71
+ # LED-1260 caught this missing from compiled; in_compiled stays false
72
+ # until LED-1454 closes the leaky-gate gap with founder ratification.
73
+ - {name: delimit_gov_new_task, kind: pro, category: governance, in_compiled: false}
74
+
75
+ # ── OS layer ─────────────────────────────────────────────────────
76
+ - {name: delimit_os_plan, kind: pro, category: os}
77
+ - {name: delimit_os_status, kind: pro, category: os}
78
+ - {name: delimit_os_gates, kind: pro, category: os}
79
+
80
+ # ── Deploy pipeline ──────────────────────────────────────────────
81
+ - {name: delimit_deploy_plan, kind: pro, category: deploy}
82
+ - {name: delimit_deploy_build, kind: pro, category: deploy}
83
+ - {name: delimit_deploy_publish, kind: pro, category: deploy}
84
+ - {name: delimit_deploy_verify, kind: pro, category: deploy}
85
+ - {name: delimit_deploy_rollback, kind: pro, category: deploy}
86
+ - {name: delimit_deploy_status, kind: pro, category: deploy}
87
+ - {name: delimit_deploy_site, kind: pro, category: deploy}
88
+ - {name: delimit_deploy_npm, kind: pro, category: deploy}
89
+
90
+ # ── Memory (note: store + recent are FREE; only search is Pro) ───
91
+ - {name: delimit_memory_search, kind: pro, category: memory}
92
+
93
+ # ── Vault ────────────────────────────────────────────────────────
94
+ - {name: delimit_vault_search, kind: pro, category: vault}
95
+ - {name: delimit_vault_snapshot, kind: pro, category: vault}
96
+ - {name: delimit_vault_health, kind: pro, category: vault}
97
+
98
+ # ── Evidence ─────────────────────────────────────────────────────
99
+ - {name: delimit_evidence_collect, kind: pro, category: evidence}
100
+ - {name: delimit_evidence_verify, kind: pro, category: evidence}
101
+
102
+ # ── Models (provider configuration surface) ──────────────────────
103
+ - {name: delimit_models, kind: pro, category: models}
104
+
105
+ # ── Observability ────────────────────────────────────────────────
106
+ - {name: delimit_obs_metrics, kind: pro, category: observability}
107
+ - {name: delimit_obs_logs, kind: pro, category: observability}
108
+ - {name: delimit_obs_status, kind: pro, category: observability}
109
+
110
+ # ── Release ──────────────────────────────────────────────────────
111
+ - {name: delimit_release_plan, kind: pro, category: release}
112
+ - {name: delimit_release_status, kind: pro, category: release}
113
+ - {name: delimit_release_sync, kind: pro, category: release}
114
+
115
+ # ── Cost ─────────────────────────────────────────────────────────
116
+ - {name: delimit_cost_analyze, kind: pro, category: cost}
117
+ - {name: delimit_cost_optimize, kind: pro, category: cost}
118
+ - {name: delimit_cost_alert, kind: pro, category: cost}
119
+
120
+ # ── Social ───────────────────────────────────────────────────────
121
+ - {name: delimit_social_post, kind: pro, category: social}
122
+ - {name: delimit_social_generate, kind: pro, category: social}
123
+ - {name: delimit_social_history, kind: pro, category: social}
124
+ # LED-1260 caught this missing from compiled; in_compiled stays
125
+ # false until LED-1454 closes the leaky-gate gap.
126
+ - {name: delimit_social_approve, kind: pro, category: social, in_compiled: false}
127
+
128
+ # ── Security orchestrator ────────────────────────────────────────
129
+ # LED-1260 leaky-gap (in_compiled: false) — see LED-1454.
130
+ - {name: delimit_security_ingest, kind: pro, category: security, in_compiled: false}
131
+
132
+ # ── Repo deep ────────────────────────────────────────────────────
133
+ # LED-1260 leaky-gap on all four repo_* tools (in_compiled: false) —
134
+ # binary customers got these tools free while non-binary customers
135
+ # paid via the fallback set. LED-1454 ratifies the closure.
136
+ - {name: delimit_repo_analyze, kind: pro, category: repo, in_compiled: false}
137
+ - {name: delimit_repo_config_audit, kind: pro, category: repo, in_compiled: false}
138
+ - {name: delimit_repo_config_validate, kind: pro, category: repo, in_compiled: false}
139
+ - {name: delimit_repo_diagnose, kind: pro, category: repo, in_compiled: false}
140
+
141
+ # ── Test ─────────────────────────────────────────────────────────
142
+ # LED-1260 leaky-gap (in_compiled: false) — see LED-1454.
143
+ - {name: delimit_test_coverage, kind: pro, category: test, in_compiled: false}
144
+
145
+ # ── Screen capture (browser automation) ──────────────────────────
146
+ - {name: delimit_screen_record, kind: pro, category: capture}
147
+ - {name: delimit_screenshot, kind: pro, category: capture}
148
+
149
+ # ── Notifications ────────────────────────────────────────────────
150
+ - {name: delimit_notify, kind: pro, category: notify}
151
+
152
+ # ── Agent orchestration ──────────────────────────────────────────
153
+ - {name: delimit_agent_dispatch, kind: pro, category: agent}
154
+ - {name: delimit_agent_status, kind: pro, category: agent}
155
+ - {name: delimit_agent_complete, kind: pro, category: agent}
156
+ - {name: delimit_agent_handoff, kind: pro, category: agent}
157
+
158
+ # ── Autonomous build loop ────────────────────────────────────────
159
+ # LED-1260 leaky-gap on all four (in_compiled: false) — these landed
160
+ # AFTER the compiled set was last built. LED-1454 ratifies closure.
161
+ - {name: delimit_next_task, kind: pro, category: build_loop, in_compiled: false}
162
+ - {name: delimit_task_complete, kind: pro, category: build_loop, in_compiled: false}
163
+ - {name: delimit_loop_status, kind: pro, category: build_loop, in_compiled: false}
164
+ - {name: delimit_loop_config, kind: pro, category: build_loop, in_compiled: false}
165
+
166
+ # ── Worker Pool v2 executor (LED-981) ────────────────────────────
167
+ - {name: delimit_executor, kind: pro, category: agent}
@@ -729,6 +729,7 @@ def monitor_user_engagement(username: str = "delimitdev", proxy_url: str = PROXY
729
729
  cd = cc.get("data", {})
730
730
  if cd.get("id") != comment_id:
731
731
  continue
732
+ our_comment_body = cd.get("body") or ""
732
733
  replies_listing = cd.get("replies")
733
734
  if not isinstance(replies_listing, dict):
734
735
  continue
@@ -737,7 +738,10 @@ def monitor_user_engagement(username: str = "delimitdev", proxy_url: str = PROXY
737
738
  rd = rc.get("data", {})
738
739
  reply_id = rd.get("id", "")
739
740
  reply_author = rd.get("author", "")
740
- reply_body = (rd.get("body") or "")[:200]
741
+ # Capture full reply body for the follow-up drafter (the alert
742
+ # email's short preview still uses the truncated form below).
743
+ reply_body_full = rd.get("body") or ""
744
+ reply_body = reply_body_full[:200]
741
745
  if not reply_id or reply_author == username:
742
746
  continue
743
747
  seen_key = f"reply_{reply_id}"
@@ -749,6 +753,8 @@ def monitor_user_engagement(username: str = "delimitdev", proxy_url: str = PROXY
749
753
  "reply_id": reply_id,
750
754
  "reply_author": reply_author,
751
755
  "reply_body": reply_body,
756
+ "reply_body_full": reply_body_full,
757
+ "our_comment_body": our_comment_body,
752
758
  "subreddit": d.get("subreddit", ""),
753
759
  "title": d.get("link_title", ""),
754
760
  "message": f"u/{reply_author} replied to your comment in r/{d.get('subreddit','')}: {reply_body[:100]}",