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.
- package/CHANGELOG.md +11 -8
- package/bin/delimit-cli.js +17 -3
- package/gateway/ai/agent_dispatch.py +5 -0
- package/gateway/ai/backends/git_health.py +175 -0
- package/gateway/ai/backends/tools_infra.py +13 -0
- package/gateway/ai/cli_contract.py +185 -0
- package/gateway/ai/governance.py +181 -0
- package/gateway/ai/heartbeat.py +290 -0
- package/gateway/ai/ledger_manager.py +81 -4
- package/gateway/ai/ledger_proof.py +127 -0
- package/gateway/ai/license.py +132 -47
- package/gateway/ai/license_core.cpython-310-x86_64-linux-gnu.so +0 -0
- package/gateway/ai/license_core.pyi +1 -1
- package/gateway/ai/outreach_loop_daemon.py +349 -0
- package/gateway/ai/outreach_substantive.py +768 -7
- package/gateway/ai/pro_tools.yaml +167 -0
- package/gateway/ai/reddit_scanner.py +7 -1
- package/gateway/ai/server.py +295 -116
- package/gateway/ai/social_queue.py +166 -10
- package/gateway/ai/tenant_auth.py +329 -0
- package/gateway/ai/tenant_data.py +339 -0
- package/gateway/ai/tenant_paths.py +150 -0
- package/package.json +4 -1
- package/scripts/build-license-core.sh +0 -85
- package/scripts/security-check.sh +0 -66
- package/scripts/test-license-core-so.sh +0 -107
|
@@ -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
|
-
|
|
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]}",
|