@novaeo/brain-connector 0.1.0 → 0.3.0
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 +49 -6
- package/dist/action-item-shape.d.ts +24 -0
- package/dist/action-item-shape.d.ts.map +1 -0
- package/dist/action-item-shape.js +89 -0
- package/dist/action-item-shape.js.map +1 -0
- package/dist/brain-http-client.d.ts +108 -2
- package/dist/brain-http-client.d.ts.map +1 -0
- package/dist/brain-http-client.js +66 -4
- package/dist/brain-http-client.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +19 -3
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +370 -38
- package/dist/server.js.map +1 -1
- package/package.json +2 -9
- package/LICENSE +0 -15
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
A standalone [Model Context Protocol](https://modelcontextprotocol.io) (MCP)
|
|
4
4
|
connector for the **Novaeo Brain** — your company's permission-aware memory.
|
|
5
|
-
It runs as a local **stdio** MCP server and exposes
|
|
6
|
-
client (Claude Desktop, Cursor, Codex, or a generic stdio host). Every call
|
|
7
|
-
made over HTTPS to the Brain API, authenticated with your personal token. The
|
|
5
|
+
It runs as a local **stdio** MCP server and exposes twenty Brain tools to any
|
|
6
|
+
MCP client (Claude Desktop, Cursor, Codex, or a generic stdio host). Every call
|
|
7
|
+
is made over HTTPS to the Brain API, authenticated with your personal token. The
|
|
8
8
|
token **is** your identity: the server resolves who you are and only ever
|
|
9
9
|
returns what you are allowed to see.
|
|
10
10
|
|
|
@@ -18,14 +18,57 @@ and no secrets. Its only runtime dependencies are
|
|
|
18
18
|
|---|---|
|
|
19
19
|
| `search_brain` | Permission-filtered semantic search; returns ranked snippets with citations. |
|
|
20
20
|
| `answer_from_brain` | Grounded answer to a question, with source citations. |
|
|
21
|
+
| `ask_novi` | The full Novi agent loop with your permissions — plans, calls tools, returns a cited answer. |
|
|
21
22
|
| `write_brain_memory` | Write a draft note into the brain under a visibility policy. |
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
23
|
+
| `get_me` | Your identity, capabilities, and admin/review flags. |
|
|
24
|
+
| `list_visibility_policies` | Visibility policies you may write to (ids for `write_brain_memory` / `create_action_item`). |
|
|
25
|
+
| `list_projects` | List projects (ids for task assignment and filters). |
|
|
26
|
+
| `list_pods` | List active pods (ids for task assignment and filters). |
|
|
27
|
+
| `list_directory` | List people in the workspace (identity ids for owners/assignees). |
|
|
28
|
+
| `list_action_items` | List action items (defaults to your own open items; rich filters, cursor pagination, server-side totals). |
|
|
29
|
+
| `get_action_item` | Get one action item, including its `updatedAt` and your capabilities. |
|
|
30
|
+
| `create_action_item` | Create an action item (full field set: priority, dates, frequency, pod, estimate, attachments, …). Returns the full created item including `updatedAt`. |
|
|
31
|
+
| `update_action_item` | Update an action item's status or fields (optimistic concurrency via `expectedUpdatedAt`). |
|
|
32
|
+
| `list_task_events` | Activity/event history of an action item. |
|
|
33
|
+
| `list_task_comments` | List comments on an action item. |
|
|
34
|
+
| `create_task_comment` | Comment on an action item (progress notes, findings). |
|
|
35
|
+
| `update_task_comment` | Edit or delete one of your comments. |
|
|
25
36
|
| `create_reminder` | Create a reminder that inherits its trigger message's visibility. |
|
|
26
37
|
| `summarize_thread` | Summarize a chat thread into a short, cited summary. |
|
|
27
38
|
| `promote_to_curated_note` | Promote a reviewed note into the curated `novaeo-brain` vault. |
|
|
28
39
|
|
|
40
|
+
### Listing action items without miscounting
|
|
41
|
+
|
|
42
|
+
`list_action_items` returns **one page**, capped at `limit` (max 100). Two habits keep
|
|
43
|
+
the results honest:
|
|
44
|
+
|
|
45
|
+
- **Paginate with `cursor`.** A non-null `nextCursor` in the response means more items
|
|
46
|
+
match. Pass it back as `cursor`, with the same filters and sort, to get the next page —
|
|
47
|
+
a cursor is bound to the filters that minted it, and reusing one after changing a filter
|
|
48
|
+
is an error rather than a silently short page.
|
|
49
|
+
- **Count with `includeStats`, never by counting rows.** `stats` is a server-side
|
|
50
|
+
aggregate over *every* item matching your filter (under your permissions), so it stays
|
|
51
|
+
correct when the page is capped. Its by-status buckets — `open`, `inProgress`,
|
|
52
|
+
`blocked`, `completed`, `cancelled` — sum to `total`. Add `includeClosed: true` for a
|
|
53
|
+
breakdown across all statuses. Counting the returned rows instead reports the page cap
|
|
54
|
+
as though it were a total.
|
|
55
|
+
|
|
56
|
+
Rows are a **compact projection** by default (`id`, `itemNumber`, `title`, `status`,
|
|
57
|
+
`priority`, `dueDate`, `ownerName`, `ownerIdentityId`, `lastActivityAt`, `updatedAt`) —
|
|
58
|
+
enough to identify, triage, and immediately update an item. Pass `verbose: true` for the
|
|
59
|
+
full field set. `lastActivityFrom` / `lastActivityTo` window the set on `last_activity_at`,
|
|
60
|
+
which is also the default sort key; items with no recorded activity fall outside any window.
|
|
61
|
+
Both take an ISO date (`YYYY-MM-DD`) or a full ISO instant, normalized to UTC — a date-only
|
|
62
|
+
bound covers that entire UTC day, so `lastActivityTo: "2026-08-19"` includes the 19th.
|
|
63
|
+
|
|
64
|
+
Unknown arguments are rejected with an MCP `InvalidParams` error rather than silently
|
|
65
|
+
dropped, so a call that works around a schema gap fails loudly instead of returning
|
|
66
|
+
correct-looking page-one data.
|
|
67
|
+
|
|
68
|
+
Two governance tools are hidden unless the connector starts with
|
|
69
|
+
`BRAIN_RULE_TIER_ENABLED=on` / `BRAIN_LAW_TIER_ENABLED=on`:
|
|
70
|
+
`promote_to_rule` and `set_law` (reviewer / Brain-admin enforced server-side).
|
|
71
|
+
|
|
29
72
|
## Configuration
|
|
30
73
|
|
|
31
74
|
Two environment variables are **required**. The connector exits with a clear
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** The fields a listing needs to be useful: identify, triage, and act. */
|
|
2
|
+
export declare const COMPACT_ACTION_ITEM_FIELDS: readonly ["id", "itemNumber", "title", "status", "priority", "dueDate", "ownerName", "ownerIdentityId", "lastActivityAt", "updatedAt"];
|
|
3
|
+
/**
|
|
4
|
+
* Drop snake_case keys that merely duplicate a camelCase twin. A snake_case key
|
|
5
|
+
* with no twin (`closed_by_identity_id`, `updated_by_identity_id`) is renamed
|
|
6
|
+
* rather than dropped, so no *field* is lost by folding the casing. Where both
|
|
7
|
+
* casings are present the camelCase one wins outright — if the two ever
|
|
8
|
+
* disagreed the API would already be serialising one item two ways, and
|
|
9
|
+
* camelCase is the documented surface.
|
|
10
|
+
*/
|
|
11
|
+
export declare function camelizeActionItem(item: Record<string, unknown>): Record<string, unknown>;
|
|
12
|
+
/** One item, full camelCase field set. Used for get/create responses. */
|
|
13
|
+
export declare function shapeActionItem(value: unknown): unknown;
|
|
14
|
+
/** `{ item, capabilities, correlationId }` — shape the nested item in place. */
|
|
15
|
+
export declare function shapeActionItemDetail(response: unknown): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* A list response: camelCase items, compact unless `verbose`. Everything else
|
|
18
|
+
* on the envelope (`nextCursor`, `withheldCount`, `stats`, `correlationId`) is
|
|
19
|
+
* preserved untouched — those are how a caller knows the page is not the set.
|
|
20
|
+
*/
|
|
21
|
+
export declare function shapeActionItemList(response: unknown, options: {
|
|
22
|
+
verbose: boolean;
|
|
23
|
+
}): unknown;
|
|
24
|
+
//# sourceMappingURL=action-item-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-item-shape.d.ts","sourceRoot":"","sources":["../src/action-item-shape.ts"],"names":[],"mappings":"AAYA,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,wIAc7B,CAAC;AAMX;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzF;AAMD,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGhE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAa7F"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/* ---------------------------------------------------------------------------
|
|
2
|
+
* NOVI-387 — response shaping for action-item payloads.
|
|
3
|
+
*
|
|
4
|
+
* The Brain API serialises every action item in BOTH casings (`dueDate` and
|
|
5
|
+
* `due_date`, `actualMinutesByDate` and `actual_minutes_by_date`, ~25 fields
|
|
6
|
+
* deep) for a legacy consumer. That doubles the wire payload: 100 items came to
|
|
7
|
+
* ~223 KB, past MCP client output limits, so a routine list call spilled to a
|
|
8
|
+
* file the agent then had to parse. The connector's documented surface is
|
|
9
|
+
* camelCase, so the duplicates are folded away here — and a list defaults to a
|
|
10
|
+
* compact projection, with `verbose: true` for the full item.
|
|
11
|
+
* ------------------------------------------------------------------------- */
|
|
12
|
+
/** The fields a listing needs to be useful: identify, triage, and act. */
|
|
13
|
+
export const COMPACT_ACTION_ITEM_FIELDS = [
|
|
14
|
+
"id",
|
|
15
|
+
// The durable "#1247" that chat posts quote.
|
|
16
|
+
"itemNumber",
|
|
17
|
+
"title",
|
|
18
|
+
"status",
|
|
19
|
+
"priority",
|
|
20
|
+
"dueDate",
|
|
21
|
+
"ownerName",
|
|
22
|
+
"ownerIdentityId",
|
|
23
|
+
"lastActivityAt",
|
|
24
|
+
// Carried so an immediate follow-up edit needs no re-read: update_action_item
|
|
25
|
+
// requires it as expectedUpdatedAt.
|
|
26
|
+
"updatedAt",
|
|
27
|
+
];
|
|
28
|
+
function toCamelCase(key) {
|
|
29
|
+
return key.replace(/_([a-z0-9])/g, (_match, char) => char.toUpperCase());
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Drop snake_case keys that merely duplicate a camelCase twin. A snake_case key
|
|
33
|
+
* with no twin (`closed_by_identity_id`, `updated_by_identity_id`) is renamed
|
|
34
|
+
* rather than dropped, so no *field* is lost by folding the casing. Where both
|
|
35
|
+
* casings are present the camelCase one wins outright — if the two ever
|
|
36
|
+
* disagreed the API would already be serialising one item two ways, and
|
|
37
|
+
* camelCase is the documented surface.
|
|
38
|
+
*/
|
|
39
|
+
export function camelizeActionItem(item) {
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const [key, value] of Object.entries(item)) {
|
|
42
|
+
if (!key.includes("_")) {
|
|
43
|
+
out[key] = value;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const camel = toCamelCase(key);
|
|
47
|
+
if (camel === key || camel in item)
|
|
48
|
+
continue;
|
|
49
|
+
out[camel] = value;
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
function isRecord(value) {
|
|
54
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
55
|
+
}
|
|
56
|
+
/** One item, full camelCase field set. Used for get/create responses. */
|
|
57
|
+
export function shapeActionItem(value) {
|
|
58
|
+
return isRecord(value) ? camelizeActionItem(value) : value;
|
|
59
|
+
}
|
|
60
|
+
/** `{ item, capabilities, correlationId }` — shape the nested item in place. */
|
|
61
|
+
export function shapeActionItemDetail(response) {
|
|
62
|
+
if (!isRecord(response) || !isRecord(response.item))
|
|
63
|
+
return shapeActionItem(response);
|
|
64
|
+
return { ...response, item: camelizeActionItem(response.item) };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A list response: camelCase items, compact unless `verbose`. Everything else
|
|
68
|
+
* on the envelope (`nextCursor`, `withheldCount`, `stats`, `correlationId`) is
|
|
69
|
+
* preserved untouched — those are how a caller knows the page is not the set.
|
|
70
|
+
*/
|
|
71
|
+
export function shapeActionItemList(response, options) {
|
|
72
|
+
if (!isRecord(response) || !Array.isArray(response.items))
|
|
73
|
+
return response;
|
|
74
|
+
const items = response.items.map((raw) => {
|
|
75
|
+
if (!isRecord(raw))
|
|
76
|
+
return raw;
|
|
77
|
+
const camel = camelizeActionItem(raw);
|
|
78
|
+
if (options.verbose)
|
|
79
|
+
return camel;
|
|
80
|
+
const compact = {};
|
|
81
|
+
for (const field of COMPACT_ACTION_ITEM_FIELDS) {
|
|
82
|
+
if (field in camel)
|
|
83
|
+
compact[field] = camel[field];
|
|
84
|
+
}
|
|
85
|
+
return compact;
|
|
86
|
+
});
|
|
87
|
+
return { ...response, items };
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=action-item-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-item-shape.js","sourceRoot":"","sources":["../src/action-item-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,11 +29,29 @@ export interface SearchPayload {
|
|
|
29
29
|
query: string;
|
|
30
30
|
limit?: number;
|
|
31
31
|
answerMode?: "private" | "shared";
|
|
32
|
+
sourceTypes?: string[];
|
|
33
|
+
functionSlug?: string;
|
|
34
|
+
projectId?: string;
|
|
35
|
+
/** Time window on source event time (ISO); sinceDays is a relative lookback. */
|
|
36
|
+
since?: string;
|
|
37
|
+
until?: string;
|
|
38
|
+
sinceDays?: number;
|
|
32
39
|
}
|
|
33
40
|
export interface AnswerPayload {
|
|
34
41
|
query: string;
|
|
35
42
|
limit?: number;
|
|
36
43
|
answerMode?: "private" | "shared";
|
|
44
|
+
sourceTypes?: string[];
|
|
45
|
+
functionSlug?: string;
|
|
46
|
+
projectId?: string;
|
|
47
|
+
since?: string;
|
|
48
|
+
until?: string;
|
|
49
|
+
sinceDays?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface AgentPayload {
|
|
52
|
+
query: string;
|
|
53
|
+
answerMode?: "private" | "shared";
|
|
54
|
+
threadId?: string;
|
|
37
55
|
}
|
|
38
56
|
export interface WriteMemoryPayload {
|
|
39
57
|
title: string;
|
|
@@ -45,6 +63,27 @@ export interface ListActionItemsPayload {
|
|
|
45
63
|
ownerIdentityId?: string;
|
|
46
64
|
status?: "open" | "in_progress" | "blocked" | "done" | "cancelled";
|
|
47
65
|
limit?: number;
|
|
66
|
+
projectId?: string;
|
|
67
|
+
includeClosed?: boolean;
|
|
68
|
+
priority?: Array<"urgent" | "high" | "normal" | "low" | "none">;
|
|
69
|
+
q?: string;
|
|
70
|
+
dueFrom?: string;
|
|
71
|
+
dueTo?: string;
|
|
72
|
+
pod?: string;
|
|
73
|
+
/** Opaque `nextCursor` from a previous page. Without it a caller with more
|
|
74
|
+
* than `limit` matching items simply cannot reach page two. */
|
|
75
|
+
cursor?: string;
|
|
76
|
+
/** Window on `last_activity_at`, which is also the default sort key. */
|
|
77
|
+
lastActivityFrom?: string;
|
|
78
|
+
lastActivityTo?: string;
|
|
79
|
+
sort?: "due_date" | "priority" | "last_activity_at" | "created_at";
|
|
80
|
+
dir?: "asc" | "desc";
|
|
81
|
+
/** Ask for server-side totals over the whole matching set, not the page. */
|
|
82
|
+
includeStats?: boolean;
|
|
83
|
+
}
|
|
84
|
+
export interface ActionItemAttachmentLink {
|
|
85
|
+
url: string;
|
|
86
|
+
label?: string;
|
|
48
87
|
}
|
|
49
88
|
export interface CreateActionItemPayload {
|
|
50
89
|
title: string;
|
|
@@ -53,14 +92,45 @@ export interface CreateActionItemPayload {
|
|
|
53
92
|
projectId?: string;
|
|
54
93
|
sourceMessageId?: string;
|
|
55
94
|
visibilityPolicyId?: string;
|
|
56
|
-
dueDate?: string;
|
|
95
|
+
dueDate?: string | null;
|
|
96
|
+
dueDateFirmness?: "hard" | "medium" | "soft";
|
|
97
|
+
startDate?: string | null;
|
|
98
|
+
endDate?: string | null;
|
|
99
|
+
frequency?: "one_time" | "daily" | "weekly" | "monthly" | "weekdays" | "yearly";
|
|
100
|
+
estimatedDuration?: string;
|
|
101
|
+
estimatedMinutes?: number | null;
|
|
102
|
+
pod?: string;
|
|
103
|
+
taskType?: "task" | "reminder" | "time_off";
|
|
104
|
+
attachmentLinks?: ActionItemAttachmentLink[];
|
|
105
|
+
status?: "open" | "in_progress" | "blocked" | "done" | "cancelled";
|
|
106
|
+
assignedAt?: string;
|
|
107
|
+
priority?: "urgent" | "high" | "normal" | "low";
|
|
108
|
+
resolutionNotes?: string;
|
|
109
|
+
calendarSyncOptIn?: boolean;
|
|
57
110
|
}
|
|
58
111
|
export interface UpdateActionItemPayload {
|
|
59
112
|
id: string;
|
|
113
|
+
expectedUpdatedAt: string;
|
|
60
114
|
status?: "open" | "in_progress" | "blocked" | "done" | "cancelled";
|
|
61
115
|
title?: string;
|
|
62
|
-
|
|
116
|
+
details?: string;
|
|
117
|
+
dueDate?: string | null;
|
|
118
|
+
dueDateFirmness?: "hard" | "medium" | "soft";
|
|
119
|
+
startDate?: string | null;
|
|
120
|
+
endDate?: string | null;
|
|
121
|
+
frequency?: "one_time" | "daily" | "weekly" | "monthly" | "weekdays" | "yearly";
|
|
122
|
+
estimatedDuration?: string;
|
|
123
|
+
estimatedMinutes?: number | null;
|
|
124
|
+
pod?: string | null;
|
|
125
|
+
taskType?: "task" | "reminder" | "time_off";
|
|
126
|
+
attachmentLinks?: ActionItemAttachmentLink[];
|
|
127
|
+
dueDateMoveReason?: string | null;
|
|
63
128
|
ownerIdentityId?: string;
|
|
129
|
+
assignedAt?: string;
|
|
130
|
+
closedAt?: string | null;
|
|
131
|
+
resolutionNotes?: string | null;
|
|
132
|
+
priority?: "urgent" | "high" | "normal" | "low" | null;
|
|
133
|
+
calendarSyncOptIn?: boolean;
|
|
64
134
|
}
|
|
65
135
|
export interface CreateReminderPayload {
|
|
66
136
|
remindAfter: string;
|
|
@@ -72,10 +142,24 @@ export interface CreateReminderPayload {
|
|
|
72
142
|
export interface SummarizeThreadPayload {
|
|
73
143
|
threadId: string;
|
|
74
144
|
}
|
|
145
|
+
export interface CreateCommentPayload {
|
|
146
|
+
actionItemId: string;
|
|
147
|
+
body: string;
|
|
148
|
+
}
|
|
149
|
+
export interface UpdateCommentPayload {
|
|
150
|
+
actionItemId: string;
|
|
151
|
+
commentId: string;
|
|
152
|
+
body?: string;
|
|
153
|
+
isDeleted?: boolean;
|
|
154
|
+
}
|
|
75
155
|
export interface PromoteNotePayload {
|
|
76
156
|
noteId: string;
|
|
77
157
|
dryRun?: boolean;
|
|
78
158
|
}
|
|
159
|
+
export interface AuthorityTierPayload {
|
|
160
|
+
noteId: string;
|
|
161
|
+
comment?: string;
|
|
162
|
+
}
|
|
79
163
|
export interface BrainHttpClientOptions {
|
|
80
164
|
/** Injected for tests; defaults to the global `fetch`. */
|
|
81
165
|
fetchImpl?: FetchLike;
|
|
@@ -89,11 +173,33 @@ export declare class BrainHttpClient {
|
|
|
89
173
|
private call;
|
|
90
174
|
search(payload: SearchPayload): Promise<unknown>;
|
|
91
175
|
answer(payload: AnswerPayload): Promise<unknown>;
|
|
176
|
+
agent(payload: AgentPayload): Promise<unknown>;
|
|
92
177
|
writeMemory(payload: WriteMemoryPayload): Promise<unknown>;
|
|
93
178
|
listActionItems(payload: ListActionItemsPayload): Promise<unknown>;
|
|
94
179
|
createActionItem(payload: CreateActionItemPayload): Promise<unknown>;
|
|
180
|
+
getActionItem(payload: {
|
|
181
|
+
id: string;
|
|
182
|
+
} | {
|
|
183
|
+
itemNumber: number;
|
|
184
|
+
}): Promise<unknown>;
|
|
185
|
+
listActionItemEvents(payload: {
|
|
186
|
+
id: string;
|
|
187
|
+
}): Promise<unknown>;
|
|
95
188
|
updateActionItem(payload: UpdateActionItemPayload): Promise<unknown>;
|
|
189
|
+
listComments(payload: {
|
|
190
|
+
actionItemId: string;
|
|
191
|
+
}): Promise<unknown>;
|
|
192
|
+
createComment(payload: CreateCommentPayload): Promise<unknown>;
|
|
193
|
+
updateComment(payload: UpdateCommentPayload): Promise<unknown>;
|
|
194
|
+
getMe(): Promise<unknown>;
|
|
195
|
+
listWritableVisibility(): Promise<unknown>;
|
|
196
|
+
listProjects(): Promise<unknown>;
|
|
197
|
+
listPods(): Promise<unknown>;
|
|
198
|
+
listDirectory(): Promise<unknown>;
|
|
96
199
|
createReminder(payload: CreateReminderPayload): Promise<unknown>;
|
|
97
200
|
summarizeThread(payload: SummarizeThreadPayload): Promise<unknown>;
|
|
98
201
|
promoteNote(payload: PromoteNotePayload): Promise<unknown>;
|
|
202
|
+
promoteToRule(payload: AuthorityTierPayload): Promise<unknown>;
|
|
203
|
+
setLaw(payload: AuthorityTierPayload): Promise<unknown>;
|
|
99
204
|
}
|
|
205
|
+
//# sourceMappingURL=brain-http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-http-client.d.ts","sourceRoot":"","sources":["../src/brain-http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import { newCorrelationId } from "./config.js";
|
|
2
3
|
/** Raised when the Brain API call fails (network or non-2xx response). */
|
|
3
4
|
export class BrainApiError extends Error {
|
|
@@ -22,7 +23,7 @@ export class BrainHttpClient {
|
|
|
22
23
|
this.fetchImpl = impl;
|
|
23
24
|
}
|
|
24
25
|
/** Issue an authenticated JSON request. The token resolves the identity. */
|
|
25
|
-
async call(method, path, body) {
|
|
26
|
+
async call(method, path, body, extraHeaders) {
|
|
26
27
|
const correlationId = newCorrelationId();
|
|
27
28
|
const url = `${this.baseUrl}${path}`;
|
|
28
29
|
let res;
|
|
@@ -33,6 +34,7 @@ export class BrainHttpClient {
|
|
|
33
34
|
"content-type": "application/json",
|
|
34
35
|
authorization: `Bearer ${this.token}`,
|
|
35
36
|
"x-correlation-id": correlationId,
|
|
37
|
+
...extraHeaders,
|
|
36
38
|
},
|
|
37
39
|
...(body ? { body: JSON.stringify(body) } : {}),
|
|
38
40
|
});
|
|
@@ -56,26 +58,78 @@ export class BrainHttpClient {
|
|
|
56
58
|
}
|
|
57
59
|
return (await res.json());
|
|
58
60
|
}
|
|
59
|
-
/*
|
|
61
|
+
/* Brain tools → HTTP paths. requesterId is NEVER sent. */
|
|
60
62
|
search(payload) {
|
|
61
63
|
return this.call("POST", "/v1/search", { ...payload });
|
|
62
64
|
}
|
|
63
65
|
answer(payload) {
|
|
64
66
|
return this.call("POST", "/v1/answer", { ...payload });
|
|
65
67
|
}
|
|
68
|
+
agent(payload) {
|
|
69
|
+
return this.call("POST", "/v1/agent", { ...payload });
|
|
70
|
+
}
|
|
66
71
|
writeMemory(payload) {
|
|
67
72
|
return this.call("POST", "/v1/notes", { ...payload });
|
|
68
73
|
}
|
|
69
74
|
listActionItems(payload) {
|
|
70
75
|
return this.call("POST", "/v1/action-items/query", { ...payload });
|
|
71
76
|
}
|
|
72
|
-
createActionItem(payload) {
|
|
73
|
-
|
|
77
|
+
async createActionItem(payload) {
|
|
78
|
+
const created = await this.call("POST", "/v1/action-items", { ...payload });
|
|
79
|
+
// The create response carries only id/visibilityPolicyId — follow up with a
|
|
80
|
+
// read so the caller gets the full item (including updatedAt, which
|
|
81
|
+
// update_action_item requires for optimistic concurrency). If the follow-up
|
|
82
|
+
// read fails, still return the create response.
|
|
83
|
+
try {
|
|
84
|
+
const detail = await this.call("GET", `/v1/action-items/${created.id}`);
|
|
85
|
+
return { ...detail.item, ...(detail.capabilities !== undefined ? { capabilities: detail.capabilities } : {}), correlationId: created.correlationId };
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return created;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getActionItem(payload) {
|
|
92
|
+
// A durable number resolves through its own route, which applies the same
|
|
93
|
+
// visibility filter and 404s identically for an item the caller cannot see.
|
|
94
|
+
return "itemNumber" in payload
|
|
95
|
+
? this.call("GET", `/v1/action-items/by-number/${payload.itemNumber}`)
|
|
96
|
+
: this.call("GET", `/v1/action-items/${payload.id}`);
|
|
97
|
+
}
|
|
98
|
+
listActionItemEvents(payload) {
|
|
99
|
+
return this.call("GET", `/v1/action-items/${payload.id}/events`);
|
|
74
100
|
}
|
|
75
101
|
updateActionItem(payload) {
|
|
76
102
|
const { id, ...rest } = payload;
|
|
77
103
|
return this.call("PATCH", `/v1/action-items/${id}`, { ...rest });
|
|
78
104
|
}
|
|
105
|
+
listComments(payload) {
|
|
106
|
+
return this.call("GET", `/v1/action-items/${payload.actionItemId}/comments`);
|
|
107
|
+
}
|
|
108
|
+
createComment(payload) {
|
|
109
|
+
const { actionItemId, ...rest } = payload;
|
|
110
|
+
// The API requires an Idempotency-Key on comment creation; the connector
|
|
111
|
+
// generates one per call so agents don't have to manage it.
|
|
112
|
+
return this.call("POST", `/v1/action-items/${actionItemId}/comments`, { ...rest }, { "Idempotency-Key": randomUUID() });
|
|
113
|
+
}
|
|
114
|
+
updateComment(payload) {
|
|
115
|
+
const { actionItemId, commentId, ...rest } = payload;
|
|
116
|
+
return this.call("PATCH", `/v1/action-items/${actionItemId}/comments/${commentId}`, { ...rest });
|
|
117
|
+
}
|
|
118
|
+
getMe() {
|
|
119
|
+
return this.call("GET", "/v1/me");
|
|
120
|
+
}
|
|
121
|
+
listWritableVisibility() {
|
|
122
|
+
return this.call("GET", "/v1/visibility/writable");
|
|
123
|
+
}
|
|
124
|
+
listProjects() {
|
|
125
|
+
return this.call("GET", "/v1/projects");
|
|
126
|
+
}
|
|
127
|
+
listPods() {
|
|
128
|
+
return this.call("GET", "/v1/pods");
|
|
129
|
+
}
|
|
130
|
+
listDirectory() {
|
|
131
|
+
return this.call("GET", "/v1/directory");
|
|
132
|
+
}
|
|
79
133
|
createReminder(payload) {
|
|
80
134
|
return this.call("POST", "/v1/reminders", { ...payload });
|
|
81
135
|
}
|
|
@@ -85,5 +139,13 @@ export class BrainHttpClient {
|
|
|
85
139
|
promoteNote(payload) {
|
|
86
140
|
return this.call("POST", "/v1/notes/promote", { ...payload });
|
|
87
141
|
}
|
|
142
|
+
promoteToRule(payload) {
|
|
143
|
+
const { noteId, ...rest } = payload;
|
|
144
|
+
return this.call("POST", `/v1/notes/${noteId}/promote-to-rule`, { ...rest });
|
|
145
|
+
}
|
|
146
|
+
setLaw(payload) {
|
|
147
|
+
const { noteId, ...rest } = payload;
|
|
148
|
+
return this.call("POST", `/v1/notes/${noteId}/set-law`, { ...rest });
|
|
149
|
+
}
|
|
88
150
|
}
|
|
89
151
|
//# sourceMappingURL=brain-http-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-http-client.js","sourceRoot":"","sources":["../src/brain-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AA4BrE,0EAA0E;AAC1E,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG3B;IAFX,YACE,OAAe,EACN,OAAiF;QAE1F,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,YAAO,GAAP,OAAO,CAA0E;QAG1F,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"brain-http-client.js","sourceRoot":"","sources":["../src/brain-http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/config.d.ts
CHANGED
|
@@ -22,3 +22,4 @@ export declare class ConfigError extends Error {
|
|
|
22
22
|
export declare function loadConfig(env?: NodeJS.ProcessEnv): ConnectorConfig;
|
|
23
23
|
/** Correlation id stamped on every tool call for end-to-end audit tracing. */
|
|
24
24
|
export declare function newCorrelationId(): string;
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CA+BhF;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { createBrainConnectorServer, BRAIN_TOOL_NAMES, type CreateServerOptions } from "./server.js";
|
|
1
|
+
export { createBrainConnectorServer, BRAIN_TOOL_NAMES, CONNECTOR_VERSION, type CreateServerOptions } from "./server.js";
|
|
2
|
+
export { camelizeActionItem, shapeActionItem, shapeActionItemDetail, shapeActionItemList, COMPACT_ACTION_ITEM_FIELDS } from "./action-item-shape.js";
|
|
2
3
|
export { BrainHttpClient, BrainApiError, type FetchLike, type BrainHttpClientOptions } from "./brain-http-client.js";
|
|
3
4
|
export { loadConfig, ConfigError, newCorrelationId, type ConnectorConfig } from "./config.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACrJ,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { createBrainConnectorServer, BRAIN_TOOL_NAMES } from "./server.js";
|
|
1
|
+
export { createBrainConnectorServer, BRAIN_TOOL_NAMES, CONNECTOR_VERSION } from "./server.js";
|
|
2
|
+
export { camelizeActionItem, shapeActionItem, shapeActionItemDetail, shapeActionItemList, COMPACT_ACTION_ITEM_FIELDS } from "./action-item-shape.js";
|
|
2
3
|
export { BrainHttpClient, BrainApiError } from "./brain-http-client.js";
|
|
3
4
|
export { loadConfig, ConfigError, newCorrelationId } from "./config.js";
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAA4B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,iBAAiB,EAA4B,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACrJ,OAAO,EAAE,eAAe,EAAE,aAAa,EAA+C,MAAM,wBAAwB,CAAC;AACrH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAwB,MAAM,aAAa,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { BrainHttpClient } from "./brain-http-client.js";
|
|
3
|
+
/**
|
|
4
|
+
* The connector's own version, read from `package.json` rather than hardcoded.
|
|
5
|
+
* `src/` and `dist/` are both one directory below the package root, so the same
|
|
6
|
+
* relative path resolves whether this runs from source (vitest) or from the
|
|
7
|
+
* published build. A hardcoded literal is what made `initialize` advertise
|
|
8
|
+
* 0.1.0 from a 0.2.0 package, leaving clients unable to tell which build they
|
|
9
|
+
* were talking to.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CONNECTOR_VERSION: string;
|
|
3
12
|
export interface CreateServerOptions {
|
|
4
13
|
/** HTTP client to the Brain API. Tests inject one with a mock fetch. */
|
|
5
14
|
client: BrainHttpClient;
|
|
15
|
+
/** Advertise the rule-tier governance tool. Defaults to BRAIN_RULE_TIER_ENABLED=on. */
|
|
16
|
+
enableRuleTier?: boolean;
|
|
17
|
+
/** Advertise the law-tier governance tool. Defaults to BRAIN_LAW_TIER_ENABLED=on. */
|
|
18
|
+
enableLawTier?: boolean;
|
|
6
19
|
}
|
|
7
|
-
/** The stable, ordered list of tool names this connector exposes. */
|
|
8
|
-
export declare
|
|
20
|
+
/** The stable, ordered list of tool names this connector exposes for the given feature flags. */
|
|
21
|
+
export declare function brainToolNames(options?: Pick<CreateServerOptions, "enableRuleTier" | "enableLawTier">): readonly string[];
|
|
22
|
+
/** The default, environment-gated tool list used by docs/tests that do not inject flags. */
|
|
23
|
+
export declare const BRAIN_TOOL_NAMES: readonly string[];
|
|
9
24
|
/**
|
|
10
|
-
* Build the public Brain MCP server with all
|
|
25
|
+
* Build the public Brain MCP server with all registered tools. Connect the
|
|
11
26
|
* returned server to a stdio (or any) transport.
|
|
12
27
|
*/
|
|
13
28
|
export declare function createBrainConnectorServer(options: CreateServerOptions): McpServer;
|
|
29
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAazD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAU5B,CAAC;AAuBL,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qFAAqF;IACrF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA6BD,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,eAAe,CAAM,GAAG,SAAS,MAAM,EAAE,CAK7H;AAED,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAkCjD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAiflF"}
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,48 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
4
|
import { BrainHttpClient } from "./brain-http-client.js";
|
|
5
|
+
import { shapeActionItem, shapeActionItemDetail, shapeActionItemList } from "./action-item-shape.js";
|
|
6
|
+
/* ---------------------------------------------------------------------------
|
|
7
|
+
* DER-274 — Public Brain MCP connector.
|
|
8
|
+
*
|
|
9
|
+
* A standalone, DB-free, dependency-self-contained stdio MCP server exposing
|
|
10
|
+
* the Brain tools. Each tool validates its input with zod and calls the
|
|
11
|
+
* Brain API over HTTPS via a `BrainHttpClient`. The per-user token IS the
|
|
12
|
+
* identity, so tools accept only their functional arguments — never a
|
|
13
|
+
* requesterId.
|
|
14
|
+
* ------------------------------------------------------------------------- */
|
|
15
|
+
/**
|
|
16
|
+
* The connector's own version, read from `package.json` rather than hardcoded.
|
|
17
|
+
* `src/` and `dist/` are both one directory below the package root, so the same
|
|
18
|
+
* relative path resolves whether this runs from source (vitest) or from the
|
|
19
|
+
* published build. A hardcoded literal is what made `initialize` advertise
|
|
20
|
+
* 0.1.0 from a 0.2.0 package, leaving clients unable to tell which build they
|
|
21
|
+
* were talking to.
|
|
22
|
+
*/
|
|
23
|
+
export const CONNECTOR_VERSION = (() => {
|
|
24
|
+
try {
|
|
25
|
+
const raw = readFileSync(new URL("../package.json", import.meta.url), "utf8");
|
|
26
|
+
const parsed = JSON.parse(raw);
|
|
27
|
+
const version = parsed.version;
|
|
28
|
+
if (typeof version === "string" && version.length > 0)
|
|
29
|
+
return version;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
/* fall through to the unknown marker below */
|
|
33
|
+
}
|
|
34
|
+
return "0.0.0-unknown";
|
|
35
|
+
})();
|
|
36
|
+
/**
|
|
37
|
+
* Every tool's declared JSON Schema says `additionalProperties: false`; passing
|
|
38
|
+
* a strict Zod object (rather than a bare shape, which the SDK turns into a
|
|
39
|
+
* stripping object) makes the runtime match the declaration. A caller who
|
|
40
|
+
* works around a schema gap by injecting an argument now gets an MCP error
|
|
41
|
+
* instead of silently correct-looking page-one data.
|
|
42
|
+
*/
|
|
43
|
+
function strict(shape) {
|
|
44
|
+
return z.object(shape).strict();
|
|
45
|
+
}
|
|
4
46
|
function ok(data) {
|
|
5
47
|
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
6
48
|
}
|
|
@@ -8,37 +50,90 @@ function fail(e) {
|
|
|
8
50
|
const message = e instanceof Error ? e.message : String(e);
|
|
9
51
|
return { content: [{ type: "text", text: JSON.stringify({ error: message }) }], isError: true };
|
|
10
52
|
}
|
|
11
|
-
|
|
12
|
-
export const BRAIN_TOOL_NAMES = [
|
|
53
|
+
const BASE_BRAIN_TOOL_NAMES = [
|
|
13
54
|
"search_brain",
|
|
14
55
|
"answer_from_brain",
|
|
56
|
+
"ask_novi",
|
|
15
57
|
"write_brain_memory",
|
|
16
58
|
"list_action_items",
|
|
59
|
+
"get_action_item",
|
|
17
60
|
"create_action_item",
|
|
18
61
|
"update_action_item",
|
|
62
|
+
"list_task_events",
|
|
63
|
+
"list_task_comments",
|
|
64
|
+
"create_task_comment",
|
|
65
|
+
"update_task_comment",
|
|
19
66
|
"create_reminder",
|
|
20
67
|
"summarize_thread",
|
|
21
68
|
"promote_to_curated_note",
|
|
69
|
+
"get_me",
|
|
70
|
+
"list_visibility_policies",
|
|
71
|
+
"list_projects",
|
|
72
|
+
"list_pods",
|
|
73
|
+
"list_directory",
|
|
22
74
|
];
|
|
75
|
+
function isFlagEnabled(name) {
|
|
76
|
+
return process.env[name] === "on";
|
|
77
|
+
}
|
|
78
|
+
/** The stable, ordered list of tool names this connector exposes for the given feature flags. */
|
|
79
|
+
export function brainToolNames(options = {}) {
|
|
80
|
+
const names = [...BASE_BRAIN_TOOL_NAMES];
|
|
81
|
+
if (options.enableRuleTier ?? isFlagEnabled("BRAIN_RULE_TIER_ENABLED"))
|
|
82
|
+
names.push("promote_to_rule");
|
|
83
|
+
if (options.enableLawTier ?? isFlagEnabled("BRAIN_LAW_TIER_ENABLED"))
|
|
84
|
+
names.push("set_law");
|
|
85
|
+
return names;
|
|
86
|
+
}
|
|
87
|
+
/** The default, environment-gated tool list used by docs/tests that do not inject flags. */
|
|
88
|
+
export const BRAIN_TOOL_NAMES = brainToolNames();
|
|
23
89
|
const answerMode = z
|
|
24
90
|
.enum(["private", "shared"])
|
|
25
91
|
.optional()
|
|
26
92
|
.describe("DM (private) vs group/channel (shared). Defaults server-side to private.");
|
|
93
|
+
const retrievalFilters = {
|
|
94
|
+
sourceTypes: z.array(z.string().min(1)).optional().describe("Optional source types to include, such as note, document, or message."),
|
|
95
|
+
functionSlug: z.string().min(1).optional().describe("Optional function slug filter for note memory."),
|
|
96
|
+
projectId: z.string().uuid().optional().describe("Optional project id filter for notes and documents."),
|
|
97
|
+
};
|
|
98
|
+
/* Action-item field schemas mirror the Brain API route contract (work.ts).
|
|
99
|
+
* Dates are date-only (YYYY-MM-DD); nullable means "clear the field" on update. */
|
|
100
|
+
const actionItemStatus = z.enum(["open", "in_progress", "blocked", "done", "cancelled"]);
|
|
101
|
+
const actionItemPriority = z.enum(["urgent", "high", "normal", "low"]);
|
|
102
|
+
const actionItemFrequency = z.enum(["one_time", "daily", "weekly", "monthly", "weekdays", "yearly"]);
|
|
103
|
+
const actionItemTaskType = z.enum(["task", "reminder", "time_off"]);
|
|
104
|
+
const actionItemFirmness = z.enum(["hard", "medium", "soft"]);
|
|
105
|
+
const dateOnly = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "date-only, YYYY-MM-DD");
|
|
106
|
+
const attachmentLinks = z
|
|
107
|
+
.array(z
|
|
108
|
+
.object({
|
|
109
|
+
url: z.string().url().startsWith("https://"),
|
|
110
|
+
label: z.string().trim().min(1).max(120).optional(),
|
|
111
|
+
})
|
|
112
|
+
.strict())
|
|
113
|
+
.max(10)
|
|
114
|
+
.optional()
|
|
115
|
+
.describe("Reference links (https only, max 10).");
|
|
27
116
|
/**
|
|
28
|
-
* Build the public Brain MCP server with all
|
|
117
|
+
* Build the public Brain MCP server with all registered tools. Connect the
|
|
29
118
|
* returned server to a stdio (or any) transport.
|
|
30
119
|
*/
|
|
31
120
|
export function createBrainConnectorServer(options) {
|
|
32
121
|
const { client } = options;
|
|
33
|
-
const server = new McpServer({ name: "novaeo-brain-connector", version:
|
|
122
|
+
const server = new McpServer({ name: "novaeo-brain-connector", version: CONNECTOR_VERSION });
|
|
123
|
+
const registerRuleTool = options.enableRuleTier ?? isFlagEnabled("BRAIN_RULE_TIER_ENABLED");
|
|
124
|
+
const registerLawTool = options.enableLawTier ?? isFlagEnabled("BRAIN_LAW_TIER_ENABLED");
|
|
34
125
|
// 1. search_brain → POST /v1/search
|
|
35
126
|
server.registerTool("search_brain", {
|
|
36
|
-
description: "Search company memory for relevant snippets (permission-filtered to your access). Returns ranked results with citations.",
|
|
37
|
-
inputSchema: {
|
|
127
|
+
description: "Search company memory for relevant snippets (permission-filtered to your access). Returns ranked results with citations. Optionally scope to a time window on the source event time (when the chat/meeting/Loom happened).",
|
|
128
|
+
inputSchema: strict({
|
|
38
129
|
query: z.string().min(1).describe("What to search for."),
|
|
39
130
|
limit: z.number().int().positive().max(50).optional(),
|
|
131
|
+
since: z.string().optional().describe("ISO date/time: only content at or after this source event time."),
|
|
132
|
+
until: z.string().optional().describe("ISO date/time: only content at or before this source event time."),
|
|
133
|
+
sinceDays: z.number().optional().describe("Relative window: only content from the last N days by source event time."),
|
|
134
|
+
...retrievalFilters,
|
|
40
135
|
answerMode,
|
|
41
|
-
},
|
|
136
|
+
}),
|
|
42
137
|
}, async (args) => {
|
|
43
138
|
try {
|
|
44
139
|
return ok(await client.search(args));
|
|
@@ -49,12 +144,16 @@ export function createBrainConnectorServer(options) {
|
|
|
49
144
|
});
|
|
50
145
|
// 2. answer_from_brain → POST /v1/answer
|
|
51
146
|
server.registerTool("answer_from_brain", {
|
|
52
|
-
description: "Answer a question grounded in company memory, permission-filtered to your access, with source citations.",
|
|
53
|
-
inputSchema: {
|
|
147
|
+
description: "Answer a question grounded in company memory, permission-filtered to your access, with source citations. Optionally scope to a time window on the source event time.",
|
|
148
|
+
inputSchema: strict({
|
|
54
149
|
query: z.string().min(1).describe("The question to answer."),
|
|
55
150
|
limit: z.number().int().positive().max(50).optional(),
|
|
151
|
+
since: z.string().optional().describe("ISO date/time: only content at or after this source event time."),
|
|
152
|
+
until: z.string().optional().describe("ISO date/time: only content at or before this source event time."),
|
|
153
|
+
sinceDays: z.number().optional().describe("Relative window: only content from the last N days by source event time."),
|
|
154
|
+
...retrievalFilters,
|
|
56
155
|
answerMode,
|
|
57
|
-
},
|
|
156
|
+
}),
|
|
58
157
|
}, async (args) => {
|
|
59
158
|
try {
|
|
60
159
|
return ok(await client.answer(args));
|
|
@@ -63,15 +162,35 @@ export function createBrainConnectorServer(options) {
|
|
|
63
162
|
return fail(e);
|
|
64
163
|
}
|
|
65
164
|
});
|
|
165
|
+
// 2b. ask_novi → POST /v1/agent — the full agent loop (plan → tools →
|
|
166
|
+
// synthesize) with YOUR permissions. Beyond a single search/answer, it can
|
|
167
|
+
// search the brain, summarize threads, manage your action items, read live
|
|
168
|
+
// SC15 operational data, search Drive (DM/private context), and delegate to
|
|
169
|
+
// Hermes — gated to what your token may read/write. MCP parity with Novi.
|
|
170
|
+
server.registerTool("ask_novi", {
|
|
171
|
+
description: "Ask Novi using the full agent loop with your permissions — it plans, calls the right tools (brain search, thread summary, action-item management, live SC15 ops reads, Drive search, delegate-to-Hermes), and returns a cited answer plus the tools it used. Use for anything beyond a one-shot search/answer.",
|
|
172
|
+
inputSchema: strict({
|
|
173
|
+
query: z.string().min(1).describe("Your request in plain language."),
|
|
174
|
+
answerMode,
|
|
175
|
+
threadId: z.string().optional().describe("Conversation id for follow-up context (optional)."),
|
|
176
|
+
}),
|
|
177
|
+
}, async (args) => {
|
|
178
|
+
try {
|
|
179
|
+
return ok(await client.agent(args));
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
return fail(e);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
66
185
|
// 3. write_brain_memory → POST /v1/notes
|
|
67
186
|
server.registerTool("write_brain_memory", {
|
|
68
187
|
description: "Write a memory (draft note) into the brain under a given visibility policy.",
|
|
69
|
-
inputSchema: {
|
|
188
|
+
inputSchema: strict({
|
|
70
189
|
title: z.string().min(1),
|
|
71
190
|
body: z.string().min(1),
|
|
72
191
|
visibilityPolicyId: z.string().uuid().describe("Visibility policy the note inherits."),
|
|
73
192
|
noteType: z.enum(["decision", "sop", "summary", "fact"]).optional(),
|
|
74
|
-
},
|
|
193
|
+
}),
|
|
75
194
|
}, async (args) => {
|
|
76
195
|
try {
|
|
77
196
|
return ok(await client.writeMemory(args));
|
|
@@ -82,15 +201,49 @@ export function createBrainConnectorServer(options) {
|
|
|
82
201
|
});
|
|
83
202
|
// 4. list_action_items → POST /v1/action-items/query
|
|
84
203
|
server.registerTool("list_action_items", {
|
|
85
|
-
description: "List action items (permission-filtered). Defaults to your own items; an owner filter for another user requires admin."
|
|
86
|
-
|
|
204
|
+
description: "List action items (permission-filtered). Defaults to your own open items; an owner filter for another user requires admin. " +
|
|
205
|
+
"This returns ONE PAGE, capped at `limit` (max 100): if `nextCursor` comes back non-null there are more items — pass it as `cursor` for the next page. " +
|
|
206
|
+
"Never count the returned rows to answer 'how many' — pass `includeStats: true` and read `stats`, which is a server-side count over every matching item. " +
|
|
207
|
+
"Rows are a compact projection by default; pass `verbose: true` for the full field set.",
|
|
208
|
+
inputSchema: strict({
|
|
87
209
|
ownerIdentityId: z.string().uuid().optional(),
|
|
88
|
-
status:
|
|
89
|
-
|
|
90
|
-
|
|
210
|
+
status: actionItemStatus.optional(),
|
|
211
|
+
includeClosed: z.boolean().optional().describe("Include done/cancelled items."),
|
|
212
|
+
priority: z.array(z.enum(["urgent", "high", "normal", "low", "none"])).optional(),
|
|
213
|
+
projectId: z.string().uuid().optional(),
|
|
214
|
+
pod: z.string().min(1).optional(),
|
|
215
|
+
q: z.string().optional().describe("Free-text filter over title/details."),
|
|
216
|
+
dueFrom: dateOnly.optional().describe("Only items due on/after this date (YYYY-MM-DD)."),
|
|
217
|
+
dueTo: dateOnly.optional().describe("Only items due on/before this date (YYYY-MM-DD)."),
|
|
218
|
+
lastActivityFrom: z.string().min(1).optional().describe("ISO date/time: only items whose last activity is at or after this. Items with no recorded activity are excluded by any window."),
|
|
219
|
+
lastActivityTo: z.string().min(1).optional().describe("ISO date/time: only items whose last activity is at or before this. Items with no recorded activity are excluded by any window."),
|
|
220
|
+
sort: z.enum(["due_date", "priority", "last_activity_at", "created_at"]).optional().describe("Sort key. Defaults to last_activity_at."),
|
|
221
|
+
dir: z.enum(["asc", "desc"]).optional().describe("Sort direction. Defaults to desc."),
|
|
222
|
+
cursor: z.string().min(1).optional().describe("The `nextCursor` from the previous page. Must be paired with the same filters and sort."),
|
|
223
|
+
includeStats: z.boolean().optional().describe("Return `stats`: server-side totals over every matching item, not just this page."),
|
|
224
|
+
verbose: z.boolean().optional().describe("Return every field on each item instead of the compact projection."),
|
|
225
|
+
limit: z.number().int().positive().max(100).optional().describe("Rows per page (max 100). Caps the page, never `stats`."),
|
|
226
|
+
}),
|
|
227
|
+
}, async (args) => {
|
|
228
|
+
try {
|
|
229
|
+
// `verbose` shapes the response here and is not an API filter.
|
|
230
|
+
const { verbose, ...payload } = args;
|
|
231
|
+
return ok(shapeActionItemList(await client.listActionItems(payload), { verbose: verbose === true }));
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
return fail(e);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
// 4b. get_action_item → GET /v1/action-items/:id or /by-number/:number
|
|
238
|
+
server.registerTool("get_action_item", {
|
|
239
|
+
description: "Get a single action item by id or by its durable number (the '#1247' shown in chat posts), including its updatedAt value (needed for updates) and your capabilities on it. Pass exactly one of id or itemNumber. Resolve a number here first when you only have the number, then call update_action_item with the returned id.",
|
|
240
|
+
inputSchema: strict({ id: z.string().uuid().optional(), itemNumber: z.number().int().positive().optional() }),
|
|
91
241
|
}, async (args) => {
|
|
92
242
|
try {
|
|
93
|
-
|
|
243
|
+
if ((args.id === undefined) === (args.itemNumber === undefined)) {
|
|
244
|
+
return fail(new Error("Pass exactly one of id or itemNumber."));
|
|
245
|
+
}
|
|
246
|
+
return ok(shapeActionItemDetail(await client.getActionItem(args.id !== undefined ? { id: args.id } : { itemNumber: args.itemNumber })));
|
|
94
247
|
}
|
|
95
248
|
catch (e) {
|
|
96
249
|
return fail(e);
|
|
@@ -98,19 +251,33 @@ export function createBrainConnectorServer(options) {
|
|
|
98
251
|
});
|
|
99
252
|
// 5. create_action_item → POST /v1/action-items
|
|
100
253
|
server.registerTool("create_action_item", {
|
|
101
|
-
description: "Create an action item
|
|
102
|
-
inputSchema: {
|
|
254
|
+
description: "Create an action item. Returns the full created item including updatedAt (use it as expectedUpdatedAt for updates).",
|
|
255
|
+
inputSchema: strict({
|
|
103
256
|
title: z.string().min(1),
|
|
104
257
|
details: z.string().optional(),
|
|
105
|
-
ownerIdentityId: z.string().uuid().optional(),
|
|
106
|
-
projectId: z.string().uuid().optional(),
|
|
258
|
+
ownerIdentityId: z.string().uuid().optional().describe("Defaults to you."),
|
|
259
|
+
projectId: z.string().uuid().optional().describe("From list_projects."),
|
|
107
260
|
sourceMessageId: z.string().uuid().optional().describe("Message the item derives visibility from."),
|
|
108
|
-
visibilityPolicyId: z.string().uuid().optional().describe("Explicit visibility
|
|
109
|
-
dueDate:
|
|
110
|
-
|
|
261
|
+
visibilityPolicyId: z.string().uuid().optional().describe("Explicit visibility if no source message; from list_visibility_policies."),
|
|
262
|
+
dueDate: dateOnly.nullable().optional().describe("Date-only (YYYY-MM-DD); no times."),
|
|
263
|
+
dueDateFirmness: actionItemFirmness.optional(),
|
|
264
|
+
startDate: dateOnly.nullable().optional(),
|
|
265
|
+
endDate: dateOnly.nullable().optional(),
|
|
266
|
+
frequency: actionItemFrequency.optional().describe("Defaults to one_time."),
|
|
267
|
+
estimatedDuration: z.string().optional().describe("Free-form estimate, e.g. '2h'."),
|
|
268
|
+
estimatedMinutes: z.number().int().positive().nullable().optional(),
|
|
269
|
+
pod: z.string().min(1).optional().describe("From list_pods."),
|
|
270
|
+
taskType: actionItemTaskType.optional(),
|
|
271
|
+
attachmentLinks,
|
|
272
|
+
status: actionItemStatus.optional(),
|
|
273
|
+
assignedAt: z.string().optional(),
|
|
274
|
+
priority: actionItemPriority.optional().describe("Omit for no priority."),
|
|
275
|
+
resolutionNotes: z.string().optional(),
|
|
276
|
+
calendarSyncOptIn: z.boolean().optional(),
|
|
277
|
+
}),
|
|
111
278
|
}, async (args) => {
|
|
112
279
|
try {
|
|
113
|
-
return ok(await client.createActionItem(args));
|
|
280
|
+
return ok(shapeActionItem(await client.createActionItem(args)));
|
|
114
281
|
}
|
|
115
282
|
catch (e) {
|
|
116
283
|
return fail(e);
|
|
@@ -118,14 +285,31 @@ export function createBrainConnectorServer(options) {
|
|
|
118
285
|
});
|
|
119
286
|
// 6. update_action_item → PATCH /v1/action-items/:id
|
|
120
287
|
server.registerTool("update_action_item", {
|
|
121
|
-
description: "Update an action item's status or fields.
|
|
122
|
-
inputSchema: {
|
|
288
|
+
description: "Update an action item's status or fields using the item updatedAt value for optimistic concurrency. On a 409 conflict, re-read the item and retry with the fresh updatedAt.",
|
|
289
|
+
inputSchema: strict({
|
|
123
290
|
id: z.string().uuid(),
|
|
124
|
-
|
|
291
|
+
expectedUpdatedAt: z.string().describe("The current item updatedAt value returned by list_action_items, get_action_item, or create_action_item."),
|
|
292
|
+
status: actionItemStatus.optional(),
|
|
125
293
|
title: z.string().min(1).optional(),
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
294
|
+
details: z.string().optional(),
|
|
295
|
+
dueDate: dateOnly.nullable().optional().describe("Date-only (YYYY-MM-DD); null clears."),
|
|
296
|
+
dueDateFirmness: actionItemFirmness.optional(),
|
|
297
|
+
startDate: dateOnly.nullable().optional(),
|
|
298
|
+
endDate: dateOnly.nullable().optional(),
|
|
299
|
+
frequency: actionItemFrequency.optional(),
|
|
300
|
+
estimatedDuration: z.string().optional(),
|
|
301
|
+
estimatedMinutes: z.number().int().positive().nullable().optional(),
|
|
302
|
+
pod: z.string().min(1).nullable().optional(),
|
|
303
|
+
taskType: actionItemTaskType.optional(),
|
|
304
|
+
attachmentLinks,
|
|
305
|
+
dueDateMoveReason: z.string().nullable().optional().describe("Why the due date moved."),
|
|
306
|
+
ownerIdentityId: z.string().uuid().optional().describe("Reassign; from list_directory."),
|
|
307
|
+
assignedAt: z.string().optional(),
|
|
308
|
+
closedAt: z.string().nullable().optional(),
|
|
309
|
+
resolutionNotes: z.string().nullable().optional(),
|
|
310
|
+
priority: actionItemPriority.nullable().optional().describe("Null clears the priority."),
|
|
311
|
+
calendarSyncOptIn: z.boolean().optional(),
|
|
312
|
+
}),
|
|
129
313
|
}, async (args) => {
|
|
130
314
|
try {
|
|
131
315
|
return ok(await client.updateActionItem(args));
|
|
@@ -134,16 +318,72 @@ export function createBrainConnectorServer(options) {
|
|
|
134
318
|
return fail(e);
|
|
135
319
|
}
|
|
136
320
|
});
|
|
321
|
+
// 6b. list_task_events → GET /v1/action-items/:id/events
|
|
322
|
+
server.registerTool("list_task_events", {
|
|
323
|
+
description: "List the activity/event history of an action item (status changes, edits, comments).",
|
|
324
|
+
inputSchema: strict({ id: z.string().uuid() }),
|
|
325
|
+
}, async (args) => {
|
|
326
|
+
try {
|
|
327
|
+
return ok(await client.listActionItemEvents(args));
|
|
328
|
+
}
|
|
329
|
+
catch (e) {
|
|
330
|
+
return fail(e);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
// 6c. list_task_comments → GET /v1/action-items/:id/comments
|
|
334
|
+
server.registerTool("list_task_comments", {
|
|
335
|
+
description: "List comments on an action item.",
|
|
336
|
+
inputSchema: strict({ actionItemId: z.string().uuid() }),
|
|
337
|
+
}, async (args) => {
|
|
338
|
+
try {
|
|
339
|
+
return ok(await client.listComments(args));
|
|
340
|
+
}
|
|
341
|
+
catch (e) {
|
|
342
|
+
return fail(e);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
// 6d. create_task_comment → POST /v1/action-items/:id/comments
|
|
346
|
+
server.registerTool("create_task_comment", {
|
|
347
|
+
description: "Add a comment to an action item. Use for progress notes, findings, or hand-off context.",
|
|
348
|
+
inputSchema: strict({
|
|
349
|
+
actionItemId: z.string().uuid(),
|
|
350
|
+
body: z.string().min(1),
|
|
351
|
+
}),
|
|
352
|
+
}, async (args) => {
|
|
353
|
+
try {
|
|
354
|
+
return ok(await client.createComment(args));
|
|
355
|
+
}
|
|
356
|
+
catch (e) {
|
|
357
|
+
return fail(e);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
// 6e. update_task_comment → PATCH /v1/action-items/:id/comments/:commentId
|
|
361
|
+
server.registerTool("update_task_comment", {
|
|
362
|
+
description: "Edit or delete one of your comments on an action item.",
|
|
363
|
+
inputSchema: strict({
|
|
364
|
+
actionItemId: z.string().uuid(),
|
|
365
|
+
commentId: z.string().uuid(),
|
|
366
|
+
body: z.string().min(1).optional().describe("New comment text (edit)."),
|
|
367
|
+
isDeleted: z.boolean().optional().describe("Set true to delete the comment."),
|
|
368
|
+
}),
|
|
369
|
+
}, async (args) => {
|
|
370
|
+
try {
|
|
371
|
+
return ok(await client.updateComment(args));
|
|
372
|
+
}
|
|
373
|
+
catch (e) {
|
|
374
|
+
return fail(e);
|
|
375
|
+
}
|
|
376
|
+
});
|
|
137
377
|
// 7. create_reminder → POST /v1/reminders
|
|
138
378
|
server.registerTool("create_reminder", {
|
|
139
379
|
description: "Create a reminder that fires after a given time, inheriting the trigger message's visibility.",
|
|
140
|
-
inputSchema: {
|
|
380
|
+
inputSchema: strict({
|
|
141
381
|
remindAfter: z.string().describe("ISO timestamp to remind after."),
|
|
142
382
|
triggerMessageId: z.string().uuid().describe("Message the reminder derives visibility from."),
|
|
143
383
|
spaceId: z.string().uuid().optional(),
|
|
144
384
|
threadId: z.string().optional(),
|
|
145
385
|
mentionedIdentityId: z.string().uuid().optional(),
|
|
146
|
-
},
|
|
386
|
+
}),
|
|
147
387
|
}, async (args) => {
|
|
148
388
|
try {
|
|
149
389
|
return ok(await client.createReminder(args));
|
|
@@ -155,9 +395,9 @@ export function createBrainConnectorServer(options) {
|
|
|
155
395
|
// 8. summarize_thread → POST /v1/summarize-thread
|
|
156
396
|
server.registerTool("summarize_thread", {
|
|
157
397
|
description: "Summarize a chat thread (permission-filtered) into a short, cited summary.",
|
|
158
|
-
inputSchema: {
|
|
398
|
+
inputSchema: strict({
|
|
159
399
|
threadId: z.string().min(1),
|
|
160
|
-
},
|
|
400
|
+
}),
|
|
161
401
|
}, async (args) => {
|
|
162
402
|
try {
|
|
163
403
|
return ok(await client.summarizeThread(args));
|
|
@@ -169,10 +409,10 @@ export function createBrainConnectorServer(options) {
|
|
|
169
409
|
// 9. promote_to_curated_note → POST /v1/notes/promote
|
|
170
410
|
server.registerTool("promote_to_curated_note", {
|
|
171
411
|
description: "Promote a reviewed brain note into the curated novaeo-brain vault. Defaults to a dry run; sensitive promotions require admin.",
|
|
172
|
-
inputSchema: {
|
|
412
|
+
inputSchema: strict({
|
|
173
413
|
noteId: z.string().uuid(),
|
|
174
414
|
dryRun: z.boolean().optional().describe("Preview without writing. Defaults to true server-side."),
|
|
175
|
-
},
|
|
415
|
+
}),
|
|
176
416
|
}, async (args) => {
|
|
177
417
|
try {
|
|
178
418
|
return ok(await client.promoteNote(args));
|
|
@@ -181,6 +421,98 @@ export function createBrainConnectorServer(options) {
|
|
|
181
421
|
return fail(e);
|
|
182
422
|
}
|
|
183
423
|
});
|
|
424
|
+
// 10. get_me → GET /v1/me
|
|
425
|
+
server.registerTool("get_me", {
|
|
426
|
+
description: "Your identity, capabilities, and admin/review flags. Call first to learn who the token acts as.",
|
|
427
|
+
inputSchema: strict({}),
|
|
428
|
+
}, async () => {
|
|
429
|
+
try {
|
|
430
|
+
return ok(await client.getMe());
|
|
431
|
+
}
|
|
432
|
+
catch (e) {
|
|
433
|
+
return fail(e);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
// 11. list_visibility_policies → GET /v1/visibility/writable
|
|
437
|
+
server.registerTool("list_visibility_policies", {
|
|
438
|
+
description: "Visibility policies you may write to. Use a policy id from here for write_brain_memory or create_action_item.",
|
|
439
|
+
inputSchema: strict({}),
|
|
440
|
+
}, async () => {
|
|
441
|
+
try {
|
|
442
|
+
return ok(await client.listWritableVisibility());
|
|
443
|
+
}
|
|
444
|
+
catch (e) {
|
|
445
|
+
return fail(e);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
// 12. list_projects → GET /v1/projects
|
|
449
|
+
server.registerTool("list_projects", {
|
|
450
|
+
description: "List projects (for projectId filters and task assignment).",
|
|
451
|
+
inputSchema: strict({}),
|
|
452
|
+
}, async () => {
|
|
453
|
+
try {
|
|
454
|
+
return ok(await client.listProjects());
|
|
455
|
+
}
|
|
456
|
+
catch (e) {
|
|
457
|
+
return fail(e);
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
// 13. list_pods → GET /v1/pods
|
|
461
|
+
server.registerTool("list_pods", {
|
|
462
|
+
description: "List active pods (for pod filters and task assignment).",
|
|
463
|
+
inputSchema: strict({}),
|
|
464
|
+
}, async () => {
|
|
465
|
+
try {
|
|
466
|
+
return ok(await client.listPods());
|
|
467
|
+
}
|
|
468
|
+
catch (e) {
|
|
469
|
+
return fail(e);
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
// 14. list_directory → GET /v1/directory
|
|
473
|
+
server.registerTool("list_directory", {
|
|
474
|
+
description: "List people in the workspace directory (identity ids for owners, assignees, mentions).",
|
|
475
|
+
inputSchema: strict({}),
|
|
476
|
+
}, async () => {
|
|
477
|
+
try {
|
|
478
|
+
return ok(await client.listDirectory());
|
|
479
|
+
}
|
|
480
|
+
catch (e) {
|
|
481
|
+
return fail(e);
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
if (registerRuleTool) {
|
|
485
|
+
server.registerTool("promote_to_rule", {
|
|
486
|
+
description: "Promote a reviewed/accepted durable memory note to rule tier. The Brain API enforces feature flags and reviewer/lead permissions.",
|
|
487
|
+
inputSchema: strict({
|
|
488
|
+
noteId: z.string().uuid(),
|
|
489
|
+
comment: z.string().optional(),
|
|
490
|
+
}),
|
|
491
|
+
}, async (args) => {
|
|
492
|
+
try {
|
|
493
|
+
return ok(await client.promoteToRule(args));
|
|
494
|
+
}
|
|
495
|
+
catch (e) {
|
|
496
|
+
return fail(e);
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
if (registerLawTool) {
|
|
501
|
+
server.registerTool("set_law", {
|
|
502
|
+
description: "Set a reviewed/accepted durable memory note to law tier. The Brain API enforces feature flags and Brain admin authorization.",
|
|
503
|
+
inputSchema: strict({
|
|
504
|
+
noteId: z.string().uuid(),
|
|
505
|
+
comment: z.string().optional(),
|
|
506
|
+
}),
|
|
507
|
+
}, async (args) => {
|
|
508
|
+
try {
|
|
509
|
+
return ok(await client.setLaw(args));
|
|
510
|
+
}
|
|
511
|
+
catch (e) {
|
|
512
|
+
return fail(e);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
}
|
|
184
516
|
return server;
|
|
185
517
|
}
|
|
186
518
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAErG;;;;;;;;+EAQ+E;AAE/E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,CAAC,GAAW,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAI,MAAgC,CAAC,OAAO,CAAC;QAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC,EAAE,CAAC;AAEL;;;;;;GAMG;AACH,SAAS,MAAM,CAA0B,KAAQ;IAC/C,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AAClC,CAAC;AAID,SAAS,EAAE,CAAC,IAAa;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACrE,CAAC;AACD,SAAS,IAAI,CAAC,CAAU;IACtB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClG,CAAC;AAWD,MAAM,qBAAqB,GAAG;IAC5B,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,yBAAyB;IACzB,QAAQ;IACR,0BAA0B;IAC1B,eAAe;IACf,WAAW;IACX,gBAAgB;CACR,CAAC;AAEX,SAAS,aAAa,CAAC,IAA0D;IAC/E,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACpC,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,UAAyE,EAAE;IACxG,MAAM,KAAK,GAAa,CAAC,GAAG,qBAAqB,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,cAAc,IAAI,aAAa,CAAC,yBAAyB,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,wBAAwB,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,EAAE,CAAC;AAEjD,MAAM,UAAU,GAAG,CAAC;KACjB,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KAC3B,QAAQ,EAAE;KACV,QAAQ,CAAC,0EAA0E,CAAC,CAAC;AAExF,MAAM,gBAAgB,GAAG;IACvB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IACpI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACrG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CACxG,CAAC;AAEF;mFACmF;AACnF,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACzF,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AACrG,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;AAClF,MAAM,eAAe,GAAG,CAAC;KACtB,KAAK,CACJ,CAAC;KACE,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC;KACD,MAAM,EAAE,CACZ;KACA,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,EAAE;KACV,QAAQ,CAAC,uCAAuC,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA4B;IACrE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC7F,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,IAAI,aAAa,CAAC,yBAAyB,CAAC,CAAC;IAC5F,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAEzF,oCAAoC;IACpC,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,4NAA4N;QAC9N,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;YACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;YACxG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YACzG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;YACrH,GAAG,gBAAgB;YACnB,UAAU;SACX,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,sKAAsK;QACxK,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;YACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;YACxG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YACzG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;YACrH,GAAG,gBAAgB;YACnB,UAAU;SACX,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EACT,gTAAgT;QAClT,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACpE,UAAU;YACV,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAC9F,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YACtF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;SACpE,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,qDAAqD;IACrD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,6HAA6H;YAC7H,wJAAwJ;YACxJ,0JAA0J;YAC1J,wFAAwF;QAC1F,WAAW,EAAE,MAAM,CAAC;YAClB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAC7C,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YACnC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC/E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YACzE,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YACxF,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACvF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gIAAgI,CAAC;YACzL,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iIAAiI,CAAC;YACxL,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACvI,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;YACxI,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;YACjI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;YAC9G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SAC1H,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;YACrC,OAAO,EAAE,CAAC,mBAAmB,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IACvE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,gUAAgU;QAClU,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;KAC9G,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,EAAE,CAAC,qBAAqB,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gDAAgD;IAChD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,qHAAqH;QACvH,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACnG,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;YACrI,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrF,eAAe,EAAE,kBAAkB,CAAC,QAAQ,EAAE;YAC9C,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACzC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACvC,SAAS,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC3E,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACnF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC7D,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE;YACvC,eAAe;YACf,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACzE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACtC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC1C,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,eAAe,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,qDAAqD;IACrD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,6KAA6K;QAC/K,WAAW,EAAE,MAAM,CAAC;YAClB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YACrB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;YACjJ,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YACxF,eAAe,EAAE,kBAAkB,CAAC,QAAQ,EAAE;YAC9C,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACzC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACvC,SAAS,EAAE,mBAAmB,CAAC,QAAQ,EAAE;YACzC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACxC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YAC5C,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE;YACvC,eAAe;YACf,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACvF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YAC1C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACjD,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACxF,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC1C,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yDAAyD;IACzD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EAAE,sFAAsF;QACnG,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;KAC/C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6DAA6D;IAC7D,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;KACzD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,+DAA+D;IAC/D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EAAE,yFAAyF;QACtG,WAAW,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SACxB,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACvE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC9E,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0CAA0C;IAC1C,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,+FAA+F;QAC5G,WAAW,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAClE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;SAClD,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5B,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sDAAsD;IACtD,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,+HAA+H;QACjI,WAAW,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SAClG,CAAC;KACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,WAAW,EAAE,iGAAiG;QAC9G,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;KACxB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6DAA6D;IAC7D,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,WAAW,EACT,+GAA+G;QACjH,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;KACxB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uCAAuC;IACvC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;KACxB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,+BAA+B;IAC/B,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;KACxB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,wFAAwF;QACrG,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;KACxB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;YACE,WAAW,EACT,mIAAmI;YACrI,WAAW,EAAE,MAAM,CAAC;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;gBACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC/B,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;YACE,WAAW,EACT,8HAA8H;YAChI,WAAW,EAAE,MAAM,CAAC;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;gBACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC/B,CAAC;SACH,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@novaeo/brain-connector",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Standalone stdio MCP connector for the Novaeo Brain. Exposes search, answer, memory, action-item, reminder, summarize, and promote tools over HTTPS using a per-user token.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"build": "tsc",
|
|
24
|
-
"prepublishOnly": "tsc",
|
|
25
|
-
"test": "vitest run",
|
|
23
|
+
"build": "tsc -b",
|
|
26
24
|
"start": "node ./dist/cli.js"
|
|
27
25
|
},
|
|
28
26
|
"keywords": [
|
|
@@ -38,10 +36,5 @@
|
|
|
38
36
|
"dependencies": {
|
|
39
37
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
40
38
|
"zod": "^3.24.1"
|
|
41
|
-
},
|
|
42
|
-
"devDependencies": {
|
|
43
|
-
"@types/node": "^22.10.0",
|
|
44
|
-
"typescript": "^5.7.2",
|
|
45
|
-
"vitest": "^2.1.8"
|
|
46
39
|
}
|
|
47
40
|
}
|
package/LICENSE
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Novaeo
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
|