@contextstream/mcp-server 0.3.48 → 0.3.50
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/dist/index.js +350 -13
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7085,6 +7085,85 @@ W:${wsHint}
|
|
|
7085
7085
|
if (params?.limit) urlParams.set("limit", String(params.limit));
|
|
7086
7086
|
return request(this.config, `/integrations/knowledge?${urlParams.toString()}`, { method: "GET" });
|
|
7087
7087
|
}
|
|
7088
|
+
// ============================================
|
|
7089
|
+
// Reminder Methods
|
|
7090
|
+
// ============================================
|
|
7091
|
+
/**
|
|
7092
|
+
* List reminders for the user
|
|
7093
|
+
*/
|
|
7094
|
+
async remindersList(params) {
|
|
7095
|
+
const withDefaults = this.withDefaults(params || {});
|
|
7096
|
+
const query = new URLSearchParams();
|
|
7097
|
+
if (withDefaults.workspace_id) query.set("workspace_id", withDefaults.workspace_id);
|
|
7098
|
+
if (withDefaults.project_id) query.set("project_id", withDefaults.project_id);
|
|
7099
|
+
if (params?.status) query.set("status", params.status);
|
|
7100
|
+
if (params?.priority) query.set("priority", params.priority);
|
|
7101
|
+
if (params?.limit) query.set("limit", String(params.limit));
|
|
7102
|
+
const suffix = query.toString() ? `?${query.toString()}` : "";
|
|
7103
|
+
return request(this.config, `/reminders${suffix}`, { method: "GET" });
|
|
7104
|
+
}
|
|
7105
|
+
/**
|
|
7106
|
+
* Get active reminders (pending, overdue, due soon)
|
|
7107
|
+
*/
|
|
7108
|
+
async remindersActive(params) {
|
|
7109
|
+
const withDefaults = this.withDefaults(params || {});
|
|
7110
|
+
const query = new URLSearchParams();
|
|
7111
|
+
if (withDefaults.workspace_id) query.set("workspace_id", withDefaults.workspace_id);
|
|
7112
|
+
if (withDefaults.project_id) query.set("project_id", withDefaults.project_id);
|
|
7113
|
+
if (params?.context) query.set("context", params.context);
|
|
7114
|
+
if (params?.limit) query.set("limit", String(params.limit));
|
|
7115
|
+
const suffix = query.toString() ? `?${query.toString()}` : "";
|
|
7116
|
+
return request(this.config, `/reminders/active${suffix}`, { method: "GET" });
|
|
7117
|
+
}
|
|
7118
|
+
/**
|
|
7119
|
+
* Create a new reminder
|
|
7120
|
+
*/
|
|
7121
|
+
async remindersCreate(params) {
|
|
7122
|
+
const withDefaults = this.withDefaults(params);
|
|
7123
|
+
return request(this.config, "/reminders", {
|
|
7124
|
+
body: {
|
|
7125
|
+
workspace_id: withDefaults.workspace_id,
|
|
7126
|
+
project_id: withDefaults.project_id,
|
|
7127
|
+
title: params.title,
|
|
7128
|
+
content: params.content,
|
|
7129
|
+
remind_at: params.remind_at,
|
|
7130
|
+
priority: params.priority || "normal",
|
|
7131
|
+
keywords: params.keywords || [],
|
|
7132
|
+
recurrence: params.recurrence,
|
|
7133
|
+
memory_event_id: params.memory_event_id
|
|
7134
|
+
}
|
|
7135
|
+
});
|
|
7136
|
+
}
|
|
7137
|
+
/**
|
|
7138
|
+
* Snooze a reminder
|
|
7139
|
+
*/
|
|
7140
|
+
async remindersSnooze(params) {
|
|
7141
|
+
uuidSchema.parse(params.reminder_id);
|
|
7142
|
+
return request(this.config, `/reminders/${params.reminder_id}/snooze`, {
|
|
7143
|
+
body: { until: params.until }
|
|
7144
|
+
});
|
|
7145
|
+
}
|
|
7146
|
+
/**
|
|
7147
|
+
* Mark a reminder as completed
|
|
7148
|
+
*/
|
|
7149
|
+
async remindersComplete(params) {
|
|
7150
|
+
uuidSchema.parse(params.reminder_id);
|
|
7151
|
+
return request(this.config, `/reminders/${params.reminder_id}/complete`, { method: "POST" });
|
|
7152
|
+
}
|
|
7153
|
+
/**
|
|
7154
|
+
* Dismiss a reminder
|
|
7155
|
+
*/
|
|
7156
|
+
async remindersDismiss(params) {
|
|
7157
|
+
uuidSchema.parse(params.reminder_id);
|
|
7158
|
+
return request(this.config, `/reminders/${params.reminder_id}/dismiss`, { method: "POST" });
|
|
7159
|
+
}
|
|
7160
|
+
/**
|
|
7161
|
+
* Delete a reminder
|
|
7162
|
+
*/
|
|
7163
|
+
async remindersDelete(params) {
|
|
7164
|
+
uuidSchema.parse(params.reminder_id);
|
|
7165
|
+
return request(this.config, `/reminders/${params.reminder_id}`, { method: "DELETE" });
|
|
7166
|
+
}
|
|
7088
7167
|
};
|
|
7089
7168
|
|
|
7090
7169
|
// src/tools.ts
|
|
@@ -7678,16 +7757,51 @@ function getCoreToolsHint() {
|
|
|
7678
7757
|
var LESSON_DEDUP_WINDOW_MS = 2 * 60 * 1e3;
|
|
7679
7758
|
var recentLessonCaptures = /* @__PURE__ */ new Map();
|
|
7680
7759
|
var LIGHT_TOOLSET = /* @__PURE__ */ new Set([
|
|
7760
|
+
// Core session tools (13)
|
|
7681
7761
|
"session_init",
|
|
7762
|
+
"session_tools",
|
|
7682
7763
|
"context_smart",
|
|
7764
|
+
"session_summary",
|
|
7683
7765
|
"session_capture",
|
|
7766
|
+
"session_capture_lesson",
|
|
7767
|
+
"session_get_lessons",
|
|
7684
7768
|
"session_recall",
|
|
7685
7769
|
"session_remember",
|
|
7770
|
+
"session_get_user_context",
|
|
7771
|
+
"session_smart_search",
|
|
7772
|
+
"session_compress",
|
|
7773
|
+
"session_delta",
|
|
7774
|
+
// Setup and configuration (3)
|
|
7775
|
+
"generate_editor_rules",
|
|
7776
|
+
"workspace_associate",
|
|
7777
|
+
"workspace_bootstrap",
|
|
7778
|
+
// Project management (5)
|
|
7779
|
+
"projects_create",
|
|
7780
|
+
"projects_list",
|
|
7781
|
+
"projects_get",
|
|
7782
|
+
"projects_overview",
|
|
7783
|
+
"projects_statistics",
|
|
7784
|
+
// Project indexing (4)
|
|
7785
|
+
"projects_ingest_local",
|
|
7786
|
+
"projects_index",
|
|
7787
|
+
"projects_index_status",
|
|
7788
|
+
"projects_files",
|
|
7789
|
+
// Memory basics (3)
|
|
7790
|
+
"memory_search",
|
|
7791
|
+
"memory_decisions",
|
|
7792
|
+
"memory_get_event",
|
|
7793
|
+
// Graph basics (2)
|
|
7794
|
+
"graph_related",
|
|
7795
|
+
"graph_decisions",
|
|
7796
|
+
// Reminders (2)
|
|
7797
|
+
"reminders_list",
|
|
7798
|
+
"reminders_active",
|
|
7799
|
+
// Utility (2)
|
|
7686
7800
|
"auth_me",
|
|
7687
7801
|
"mcp_server_version"
|
|
7688
7802
|
]);
|
|
7689
7803
|
var STANDARD_TOOLSET = /* @__PURE__ */ new Set([
|
|
7690
|
-
// Core session tools
|
|
7804
|
+
// Core session tools (13)
|
|
7691
7805
|
"session_init",
|
|
7692
7806
|
"session_tools",
|
|
7693
7807
|
"context_smart",
|
|
@@ -7701,18 +7815,59 @@ var STANDARD_TOOLSET = /* @__PURE__ */ new Set([
|
|
|
7701
7815
|
"session_smart_search",
|
|
7702
7816
|
"session_compress",
|
|
7703
7817
|
"session_delta",
|
|
7704
|
-
// Setup and configuration
|
|
7818
|
+
// Setup and configuration (3)
|
|
7705
7819
|
"generate_editor_rules",
|
|
7706
7820
|
"workspace_associate",
|
|
7707
7821
|
"workspace_bootstrap",
|
|
7822
|
+
// Workspace management (2)
|
|
7823
|
+
"workspaces_list",
|
|
7824
|
+
"workspaces_get",
|
|
7825
|
+
// Project management (6)
|
|
7708
7826
|
"projects_create",
|
|
7709
7827
|
"projects_list",
|
|
7710
|
-
|
|
7828
|
+
"projects_get",
|
|
7829
|
+
"projects_overview",
|
|
7830
|
+
"projects_statistics",
|
|
7831
|
+
"projects_update",
|
|
7832
|
+
// Project indexing (4)
|
|
7711
7833
|
"projects_ingest_local",
|
|
7712
7834
|
"projects_index",
|
|
7713
7835
|
"projects_index_status",
|
|
7714
7836
|
"projects_files",
|
|
7715
|
-
//
|
|
7837
|
+
// Memory events (9)
|
|
7838
|
+
"memory_search",
|
|
7839
|
+
"memory_decisions",
|
|
7840
|
+
"memory_create_event",
|
|
7841
|
+
"memory_list_events",
|
|
7842
|
+
"memory_get_event",
|
|
7843
|
+
"memory_update_event",
|
|
7844
|
+
"memory_delete_event",
|
|
7845
|
+
"memory_timeline",
|
|
7846
|
+
"memory_summary",
|
|
7847
|
+
// Memory nodes (2)
|
|
7848
|
+
"memory_create_node",
|
|
7849
|
+
"memory_list_nodes",
|
|
7850
|
+
// Knowledge graph analysis (8)
|
|
7851
|
+
"graph_related",
|
|
7852
|
+
"graph_decisions",
|
|
7853
|
+
"graph_path",
|
|
7854
|
+
"graph_dependencies",
|
|
7855
|
+
"graph_call_path",
|
|
7856
|
+
"graph_impact",
|
|
7857
|
+
"graph_circular_dependencies",
|
|
7858
|
+
"graph_unused_code",
|
|
7859
|
+
// Search (3)
|
|
7860
|
+
"search_semantic",
|
|
7861
|
+
"search_hybrid",
|
|
7862
|
+
"search_keyword",
|
|
7863
|
+
// Reminders (6)
|
|
7864
|
+
"reminders_list",
|
|
7865
|
+
"reminders_active",
|
|
7866
|
+
"reminders_create",
|
|
7867
|
+
"reminders_snooze",
|
|
7868
|
+
"reminders_complete",
|
|
7869
|
+
"reminders_dismiss",
|
|
7870
|
+
// Utility (2)
|
|
7716
7871
|
"auth_me",
|
|
7717
7872
|
"mcp_server_version"
|
|
7718
7873
|
]);
|
|
@@ -8775,8 +8930,8 @@ Automatically detects code files and skips ignored directories like node_modules
|
|
|
8775
8930
|
"memory_get_event",
|
|
8776
8931
|
{
|
|
8777
8932
|
title: "Get memory event",
|
|
8778
|
-
description: "Get a specific memory event by ID",
|
|
8779
|
-
inputSchema: external_exports.object({ event_id: external_exports.string().uuid() })
|
|
8933
|
+
description: "Get a specific memory event by ID with FULL content (not truncated). Use this when you need the complete content of a memory event, not just the preview returned by search/recall.",
|
|
8934
|
+
inputSchema: external_exports.object({ event_id: external_exports.string().uuid().describe("The UUID of the memory event to retrieve") })
|
|
8780
8935
|
},
|
|
8781
8936
|
async (input) => {
|
|
8782
8937
|
const result = await client.getMemoryEvent(input.event_id);
|
|
@@ -10546,6 +10701,188 @@ Use this to verify integrations are healthy and syncing properly.`,
|
|
|
10546
10701
|
return { content: [{ type: "text", text: formatted }], structuredContent: toStructured(result) };
|
|
10547
10702
|
}
|
|
10548
10703
|
);
|
|
10704
|
+
registerTool(
|
|
10705
|
+
"reminders_list",
|
|
10706
|
+
{
|
|
10707
|
+
title: "List reminders",
|
|
10708
|
+
description: `List all reminders for the current user.
|
|
10709
|
+
Returns: reminders with title, content, remind_at, priority, status, and keywords.
|
|
10710
|
+
Can filter by status (pending, completed, dismissed, snoozed) and priority (low, normal, high, urgent).
|
|
10711
|
+
|
|
10712
|
+
Use this to see what reminders you have set.`,
|
|
10713
|
+
inputSchema: external_exports.object({
|
|
10714
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10715
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10716
|
+
status: external_exports.enum(["pending", "completed", "dismissed", "snoozed"]).optional().describe("Filter by status"),
|
|
10717
|
+
priority: external_exports.enum(["low", "normal", "high", "urgent"]).optional().describe("Filter by priority"),
|
|
10718
|
+
limit: external_exports.number().optional().describe("Maximum reminders to return (default: 20)")
|
|
10719
|
+
})
|
|
10720
|
+
},
|
|
10721
|
+
async (input) => {
|
|
10722
|
+
const result = await client.remindersList({
|
|
10723
|
+
workspace_id: input.workspace_id,
|
|
10724
|
+
project_id: input.project_id,
|
|
10725
|
+
status: input.status,
|
|
10726
|
+
priority: input.priority,
|
|
10727
|
+
limit: input.limit
|
|
10728
|
+
});
|
|
10729
|
+
if (!result.reminders || result.reminders.length === 0) {
|
|
10730
|
+
return { content: [{ type: "text", text: "No reminders found." }] };
|
|
10731
|
+
}
|
|
10732
|
+
return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
|
|
10733
|
+
}
|
|
10734
|
+
);
|
|
10735
|
+
registerTool(
|
|
10736
|
+
"reminders_active",
|
|
10737
|
+
{
|
|
10738
|
+
title: "Get active reminders",
|
|
10739
|
+
description: `Get active reminders that are pending, overdue, or due soon.
|
|
10740
|
+
Returns: reminders with urgency levels (overdue, due_soon, today, upcoming).
|
|
10741
|
+
Optionally provide context (e.g., current task description) to get contextually relevant reminders.
|
|
10742
|
+
|
|
10743
|
+
Use this to see what reminders need attention now.`,
|
|
10744
|
+
inputSchema: external_exports.object({
|
|
10745
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10746
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10747
|
+
context: external_exports.string().optional().describe("Optional context to match relevant reminders (e.g., current task)"),
|
|
10748
|
+
limit: external_exports.number().optional().describe("Maximum reminders to return (default: 10)")
|
|
10749
|
+
})
|
|
10750
|
+
},
|
|
10751
|
+
async (input) => {
|
|
10752
|
+
const result = await client.remindersActive({
|
|
10753
|
+
workspace_id: input.workspace_id,
|
|
10754
|
+
project_id: input.project_id,
|
|
10755
|
+
context: input.context,
|
|
10756
|
+
limit: input.limit
|
|
10757
|
+
});
|
|
10758
|
+
if (!result.reminders || result.reminders.length === 0) {
|
|
10759
|
+
return { content: [{ type: "text", text: "No active reminders." }] };
|
|
10760
|
+
}
|
|
10761
|
+
const formatted = result.reminders.map((r) => {
|
|
10762
|
+
const icon = r.urgency === "overdue" ? "\u{1F534}" : r.urgency === "due_soon" ? "\u{1F7E0}" : r.urgency === "today" ? "\u{1F7E1}" : "\u{1F535}";
|
|
10763
|
+
const priority = r.priority !== "normal" ? ` [${r.priority}]` : "";
|
|
10764
|
+
return `${icon} ${r.title}${priority}
|
|
10765
|
+
Due: ${new Date(r.remind_at).toLocaleString()}
|
|
10766
|
+
${r.content_preview}`;
|
|
10767
|
+
}).join("\n\n");
|
|
10768
|
+
const header = result.overdue_count > 0 ? `\u26A0\uFE0F ${result.overdue_count} overdue reminder(s)
|
|
10769
|
+
|
|
10770
|
+
` : "";
|
|
10771
|
+
return { content: [{ type: "text", text: header + formatted }], structuredContent: toStructured(result) };
|
|
10772
|
+
}
|
|
10773
|
+
);
|
|
10774
|
+
registerTool(
|
|
10775
|
+
"reminders_create",
|
|
10776
|
+
{
|
|
10777
|
+
title: "Create a reminder",
|
|
10778
|
+
description: `Create a new reminder for a specific date/time.
|
|
10779
|
+
Set reminders to be notified about tasks, follow-ups, or important dates.
|
|
10780
|
+
|
|
10781
|
+
Priority levels: low, normal, high, urgent
|
|
10782
|
+
Recurrence: daily, weekly, monthly (optional)
|
|
10783
|
+
|
|
10784
|
+
Example: Create a reminder to "Review PR #123" for tomorrow at 10am with high priority.`,
|
|
10785
|
+
inputSchema: external_exports.object({
|
|
10786
|
+
workspace_id: external_exports.string().uuid().optional(),
|
|
10787
|
+
project_id: external_exports.string().uuid().optional(),
|
|
10788
|
+
title: external_exports.string().describe("Reminder title (brief, descriptive)"),
|
|
10789
|
+
content: external_exports.string().describe("Reminder details/description"),
|
|
10790
|
+
remind_at: external_exports.string().describe('When to remind (ISO 8601 datetime, e.g., "2025-01-15T10:00:00Z")'),
|
|
10791
|
+
priority: external_exports.enum(["low", "normal", "high", "urgent"]).optional().describe("Priority level (default: normal)"),
|
|
10792
|
+
keywords: external_exports.array(external_exports.string()).optional().describe("Keywords for contextual surfacing"),
|
|
10793
|
+
recurrence: external_exports.enum(["daily", "weekly", "monthly"]).optional().describe("Recurrence pattern")
|
|
10794
|
+
})
|
|
10795
|
+
},
|
|
10796
|
+
async (input) => {
|
|
10797
|
+
const result = await client.remindersCreate({
|
|
10798
|
+
workspace_id: input.workspace_id,
|
|
10799
|
+
project_id: input.project_id,
|
|
10800
|
+
title: input.title,
|
|
10801
|
+
content: input.content,
|
|
10802
|
+
remind_at: input.remind_at,
|
|
10803
|
+
priority: input.priority,
|
|
10804
|
+
keywords: input.keywords,
|
|
10805
|
+
recurrence: input.recurrence
|
|
10806
|
+
});
|
|
10807
|
+
const due = new Date(result.remind_at).toLocaleString();
|
|
10808
|
+
return {
|
|
10809
|
+
content: [{ type: "text", text: `\u2705 Reminder created: "${result.title}"
|
|
10810
|
+
Due: ${due}
|
|
10811
|
+
Priority: ${result.priority}
|
|
10812
|
+
ID: ${result.id}` }],
|
|
10813
|
+
structuredContent: toStructured(result)
|
|
10814
|
+
};
|
|
10815
|
+
}
|
|
10816
|
+
);
|
|
10817
|
+
registerTool(
|
|
10818
|
+
"reminders_snooze",
|
|
10819
|
+
{
|
|
10820
|
+
title: "Snooze a reminder",
|
|
10821
|
+
description: `Snooze a reminder until a later time.
|
|
10822
|
+
Use this to postpone a reminder without dismissing it.
|
|
10823
|
+
|
|
10824
|
+
Common snooze durations:
|
|
10825
|
+
- 1 hour: add 1 hour to current time
|
|
10826
|
+
- 4 hours: add 4 hours
|
|
10827
|
+
- Tomorrow: next day at 9am
|
|
10828
|
+
- Next week: 7 days from now`,
|
|
10829
|
+
inputSchema: external_exports.object({
|
|
10830
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to snooze"),
|
|
10831
|
+
until: external_exports.string().describe("When to resurface the reminder (ISO 8601 datetime)")
|
|
10832
|
+
})
|
|
10833
|
+
},
|
|
10834
|
+
async (input) => {
|
|
10835
|
+
const result = await client.remindersSnooze({
|
|
10836
|
+
reminder_id: input.reminder_id,
|
|
10837
|
+
until: input.until
|
|
10838
|
+
});
|
|
10839
|
+
const snoozedUntil = new Date(result.snoozed_until).toLocaleString();
|
|
10840
|
+
return {
|
|
10841
|
+
content: [{ type: "text", text: `\u{1F634} Reminder snoozed until ${snoozedUntil}` }],
|
|
10842
|
+
structuredContent: toStructured(result)
|
|
10843
|
+
};
|
|
10844
|
+
}
|
|
10845
|
+
);
|
|
10846
|
+
registerTool(
|
|
10847
|
+
"reminders_complete",
|
|
10848
|
+
{
|
|
10849
|
+
title: "Complete a reminder",
|
|
10850
|
+
description: `Mark a reminder as completed.
|
|
10851
|
+
Use this when the task or action associated with the reminder is done.`,
|
|
10852
|
+
inputSchema: external_exports.object({
|
|
10853
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to complete")
|
|
10854
|
+
})
|
|
10855
|
+
},
|
|
10856
|
+
async (input) => {
|
|
10857
|
+
const result = await client.remindersComplete({
|
|
10858
|
+
reminder_id: input.reminder_id
|
|
10859
|
+
});
|
|
10860
|
+
return {
|
|
10861
|
+
content: [{ type: "text", text: `\u2705 Reminder completed!` }],
|
|
10862
|
+
structuredContent: toStructured(result)
|
|
10863
|
+
};
|
|
10864
|
+
}
|
|
10865
|
+
);
|
|
10866
|
+
registerTool(
|
|
10867
|
+
"reminders_dismiss",
|
|
10868
|
+
{
|
|
10869
|
+
title: "Dismiss a reminder",
|
|
10870
|
+
description: `Dismiss a reminder without completing it.
|
|
10871
|
+
Use this to remove a reminder that is no longer relevant.`,
|
|
10872
|
+
inputSchema: external_exports.object({
|
|
10873
|
+
reminder_id: external_exports.string().uuid().describe("ID of the reminder to dismiss")
|
|
10874
|
+
})
|
|
10875
|
+
},
|
|
10876
|
+
async (input) => {
|
|
10877
|
+
const result = await client.remindersDismiss({
|
|
10878
|
+
reminder_id: input.reminder_id
|
|
10879
|
+
});
|
|
10880
|
+
return {
|
|
10881
|
+
content: [{ type: "text", text: `\u{1F5D1}\uFE0F Reminder dismissed.` }],
|
|
10882
|
+
structuredContent: toStructured(result)
|
|
10883
|
+
};
|
|
10884
|
+
}
|
|
10885
|
+
);
|
|
10549
10886
|
}
|
|
10550
10887
|
|
|
10551
10888
|
// src/resources.ts
|
|
@@ -11437,12 +11774,12 @@ Created API key: ${maskApiKey(apiKey)}
|
|
|
11437
11774
|
const modeChoice = normalizeInput(await rl.question("Choose [1/2] (default 1): ")) || "1";
|
|
11438
11775
|
const mode = modeChoice === "2" ? "full" : "minimal";
|
|
11439
11776
|
console.log("\nMCP toolset (which tools to expose to the AI):");
|
|
11440
|
-
console.log(" 1) Light \u2014
|
|
11441
|
-
console.log(" Best for:
|
|
11442
|
-
console.log(" 2) Standard (recommended) \u2014
|
|
11443
|
-
console.log(" Best for: most users,
|
|
11444
|
-
console.log(" 3) Complete \u2014 all tools including
|
|
11445
|
-
console.log(" Best for: power users needing
|
|
11777
|
+
console.log(" 1) Light \u2014 core session, project, and basic memory/graph tools (~30 tools)");
|
|
11778
|
+
console.log(" Best for: faster responses, simpler workflows, resource-constrained environments");
|
|
11779
|
+
console.log(" 2) Standard (recommended) \u2014 adds workspace, memory CRUD, graph analysis, search (~50 tools)");
|
|
11780
|
+
console.log(" Best for: most users, full development workflow with memory and code analysis");
|
|
11781
|
+
console.log(" 3) Complete \u2014 all tools including AI, GitHub, Slack integrations (~86 tools)");
|
|
11782
|
+
console.log(" Best for: power users needing integrations and advanced features");
|
|
11446
11783
|
console.log("");
|
|
11447
11784
|
console.log(" Tip: Change later by setting CONTEXTSTREAM_TOOLSET=light|standard|complete");
|
|
11448
11785
|
const toolsetChoice = normalizeInput(await rl.question("Choose [1/2/3] (default 2): ")) || "2";
|
|
@@ -11730,7 +12067,7 @@ Applying to ${projects.length} project(s)...`);
|
|
|
11730
12067
|
const skipped = writeActions.filter((a) => a.status === "skipped").length;
|
|
11731
12068
|
const dry = writeActions.filter((a) => a.status === "dry-run").length;
|
|
11732
12069
|
console.log(`Summary: ${created} created, ${updated} updated, ${appended} appended, ${skipped} skipped, ${dry} dry-run.`);
|
|
11733
|
-
const toolsetDesc = toolset === "light" ? "~
|
|
12070
|
+
const toolsetDesc = toolset === "light" ? "~30 tools" : toolset === "complete" ? "~86 tools" : "~50 tools";
|
|
11734
12071
|
console.log(`Toolset: ${toolset} (${toolsetDesc})`);
|
|
11735
12072
|
}
|
|
11736
12073
|
console.log("\nNext steps:");
|
package/package.json
CHANGED