@dmsdc-ai/aigentry-deliberation 0.0.38 → 0.0.40
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/README.md +156 -150
- package/doctor.js +6 -6
- package/examples/README.md +25 -0
- package/examples/basic-deliberation.md +99 -0
- package/examples/browser-automation.md +120 -0
- package/examples/code-review.md +78 -0
- package/examples/structured-synthesis.md +96 -0
- package/index.js +485 -3513
- package/install.js +3 -3
- package/lib/entitlement.js +120 -0
- package/lib/session.js +623 -0
- package/lib/speaker-discovery.js +1575 -0
- package/lib/telepty.js +868 -0
- package/lib/transport.js +1300 -0
- package/package.json +9 -3
- package/skills/deliberation/SKILL.md +108 -4
package/install.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Deliberation MCP Server — One-click installer
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* npx @dmsdc-ai/aigentry-deliberation install
|
|
7
|
+
* npx --yes --package @dmsdc-ai/aigentry-deliberation deliberation-install
|
|
8
8
|
* node install.js
|
|
9
9
|
*
|
|
10
10
|
* What it does:
|
|
@@ -55,7 +55,7 @@ const FILES_TO_COPY = [
|
|
|
55
55
|
"package-lock.json",
|
|
56
56
|
];
|
|
57
57
|
|
|
58
|
-
const DIRS_TO_COPY = ["selectors", "public", "skills"];
|
|
58
|
+
const DIRS_TO_COPY = ["selectors", "public", "skills", "lib"];
|
|
59
59
|
|
|
60
60
|
function log(msg) {
|
|
61
61
|
console.log(` ${msg}`);
|
|
@@ -293,7 +293,7 @@ if (args.includes("--help") || args.includes("-h")) {
|
|
|
293
293
|
Deliberation MCP Server Installer
|
|
294
294
|
|
|
295
295
|
Usage:
|
|
296
|
-
npx @dmsdc-ai/aigentry-deliberation install
|
|
296
|
+
npx --yes --package @dmsdc-ai/aigentry-deliberation deliberation-install
|
|
297
297
|
node install.js
|
|
298
298
|
|
|
299
299
|
Options:
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
|
|
5
|
+
const LICENSE_PATH = path.join(os.homedir(), ".aigentry", "license.json");
|
|
6
|
+
|
|
7
|
+
// Feature → tier mapping
|
|
8
|
+
const FEATURE_TIERS = {
|
|
9
|
+
"deliberation.core": ["free", "pro", "team"],
|
|
10
|
+
"deliberation.multi_session": ["pro", "team"],
|
|
11
|
+
"deliberation.browser_integration": ["pro", "team"],
|
|
12
|
+
"deliberation.auto_run": ["pro", "team"],
|
|
13
|
+
"deliberation.remote": ["pro", "team"],
|
|
14
|
+
"deliberation.decision_engine": ["pro", "team"],
|
|
15
|
+
"deliberation.code_review": ["pro", "team"],
|
|
16
|
+
"deliberation.unlimited_speakers": ["pro", "team"],
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Free tier limits
|
|
20
|
+
const FREE_LIMITS = {
|
|
21
|
+
"deliberation.multi_session": 1,
|
|
22
|
+
"deliberation.unlimited_speakers": 3,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// Tool → feature mapping
|
|
26
|
+
const TOOL_FEATURE_MAP = {
|
|
27
|
+
deliberation_start: "deliberation.core",
|
|
28
|
+
deliberation_respond: "deliberation.core",
|
|
29
|
+
deliberation_synthesize: "deliberation.core",
|
|
30
|
+
deliberation_status: "deliberation.core",
|
|
31
|
+
deliberation_history: "deliberation.core",
|
|
32
|
+
deliberation_reset: "deliberation.core",
|
|
33
|
+
deliberation_cli_config: "deliberation.core",
|
|
34
|
+
deliberation_speaker_candidates: "deliberation.core",
|
|
35
|
+
deliberation_confirm_speakers: "deliberation.core",
|
|
36
|
+
deliberation_list: "deliberation.core",
|
|
37
|
+
deliberation_list_active: "deliberation.core",
|
|
38
|
+
deliberation_context: "deliberation.core",
|
|
39
|
+
deliberation_copy_last_turn: "deliberation.core",
|
|
40
|
+
deliberation_browser_auto_turn: "deliberation.browser_integration",
|
|
41
|
+
deliberation_browser_llm_tabs: "deliberation.browser_integration",
|
|
42
|
+
deliberation_run_until_blocked: "deliberation.auto_run",
|
|
43
|
+
deliberation_cli_auto_turn: "deliberation.auto_run",
|
|
44
|
+
deliberation_ingest_remote_reply: "deliberation.remote",
|
|
45
|
+
deliberation_list_remote_sessions: "deliberation.remote",
|
|
46
|
+
deliberation_inject_context: "deliberation.remote",
|
|
47
|
+
deliberation_request_review: "deliberation.code_review",
|
|
48
|
+
decision_start: "deliberation.decision_engine",
|
|
49
|
+
decision_status: "deliberation.decision_engine",
|
|
50
|
+
decision_respond: "deliberation.decision_engine",
|
|
51
|
+
decision_resume: "deliberation.decision_engine",
|
|
52
|
+
decision_history: "deliberation.decision_engine",
|
|
53
|
+
decision_templates: "deliberation.decision_engine",
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
function loadLicense() {
|
|
57
|
+
// Environment variable override for testing and CI
|
|
58
|
+
const envTier = process.env.AIGENTRY_TIER;
|
|
59
|
+
if (envTier && ["free", "pro", "team"].includes(envTier)) {
|
|
60
|
+
return { tier: envTier };
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
if (!fs.existsSync(LICENSE_PATH)) return { tier: "free" };
|
|
64
|
+
const raw = fs.readFileSync(LICENSE_PATH, "utf8");
|
|
65
|
+
const license = JSON.parse(raw);
|
|
66
|
+
// Check expiry (30-day grace period)
|
|
67
|
+
if (license.expires_at) {
|
|
68
|
+
const expiry = new Date(license.expires_at);
|
|
69
|
+
const grace = new Date(expiry.getTime() + 30 * 24 * 60 * 60 * 1000);
|
|
70
|
+
if (new Date() > grace) return { tier: "free" };
|
|
71
|
+
}
|
|
72
|
+
// Check disabled features
|
|
73
|
+
return license;
|
|
74
|
+
} catch {
|
|
75
|
+
return { tier: "free" };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function checkEntitlement({ feature }) {
|
|
80
|
+
const license = loadLicense();
|
|
81
|
+
const tier = license.tier || "free";
|
|
82
|
+
const allowedTiers = FEATURE_TIERS[feature];
|
|
83
|
+
|
|
84
|
+
if (!allowedTiers) return { allowed: true, tier }; // unknown feature = allow
|
|
85
|
+
|
|
86
|
+
// Check explicit feature overrides
|
|
87
|
+
if (license.features?.includes(feature)) return { allowed: true, tier };
|
|
88
|
+
if (license.disabled_features?.includes(feature)) {
|
|
89
|
+
return { allowed: false, tier, reason: `Feature '${feature}' is disabled by admin` };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const allowed = allowedTiers.includes(tier);
|
|
93
|
+
if (!allowed) {
|
|
94
|
+
const requiredTier = allowedTiers[0] === "free" ? allowedTiers[1] : allowedTiers[0];
|
|
95
|
+
return {
|
|
96
|
+
allowed: false,
|
|
97
|
+
tier,
|
|
98
|
+
reason: `Requires ${requiredTier} tier`,
|
|
99
|
+
upgrade_url: "https://aigentry.dev/upgrade",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return { allowed: true, tier };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function checkToolEntitlement(toolName) {
|
|
107
|
+
const feature = TOOL_FEATURE_MAP[toolName];
|
|
108
|
+
if (!feature) return { allowed: true, tier: loadLicense().tier || "free" };
|
|
109
|
+
return checkEntitlement({ feature });
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function getFreeLimits(feature) {
|
|
113
|
+
return FREE_LIMITS[feature] || null;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function getCurrentTier() {
|
|
117
|
+
return loadLicense().tier || "free";
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { TOOL_FEATURE_MAP, FEATURE_TIERS, FREE_LIMITS };
|