@gwdn/nexus-mcp 0.8.0 → 0.8.3
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 +25 -0
- package/dist/server.js +6 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/append-session-entry.d.ts +2 -0
- package/dist/tools/append-session-entry.d.ts.map +1 -1
- package/dist/tools/append-session-entry.js +24 -0
- package/dist/tools/append-session-entry.js.map +1 -1
- package/dist/tools/classify-document.d.ts +38 -0
- package/dist/tools/classify-document.d.ts.map +1 -0
- package/dist/tools/classify-document.js +45 -0
- package/dist/tools/classify-document.js.map +1 -0
- package/dist/tools/delete-document.d.ts +29 -0
- package/dist/tools/delete-document.d.ts.map +1 -0
- package/dist/tools/delete-document.js +34 -0
- package/dist/tools/delete-document.js.map +1 -0
- package/dist/tools/reviews.d.ts +1 -1
- package/dist/tools/update-document.d.ts +38 -0
- package/dist/tools/update-document.d.ts.map +1 -0
- package/dist/tools/update-document.js +51 -0
- package/dist/tools/update-document.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/layer2-coordination.test.ts +76 -0
- package/src/__tests__/server.test.ts +3 -2
- package/src/server.ts +33 -0
- package/src/tools/append-session-entry.ts +27 -0
- package/src/tools/classify-document.ts +55 -0
- package/src/tools/delete-document.ts +43 -0
- package/src/tools/update-document.ts +66 -0
package/README.md
CHANGED
|
@@ -78,6 +78,31 @@ src/
|
|
|
78
78
|
__tests__/ # Unit tests (112) and E2E integration tests (34)
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
## Known Issues
|
|
82
|
+
|
|
83
|
+
### npx cache prevents version upgrade
|
|
84
|
+
|
|
85
|
+
When using `npx` to run the MCP server, npm caches the resolved package in
|
|
86
|
+
`~/.npm/_npx/`. Subsequent invocations may continue to use the cached
|
|
87
|
+
(outdated) version even after a new release is published — especially in
|
|
88
|
+
terminals that were started before the update.
|
|
89
|
+
|
|
90
|
+
**Symptoms:** MCP tools report an older version, or new tools/fixes are missing.
|
|
91
|
+
|
|
92
|
+
**Fix:** Before starting OpenCode, clear stale npx caches:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
find ~/.npm/_npx -path "*/node_modules/@gwdn/nexus-mcp/package.json" \
|
|
96
|
+
-exec node -e "if(require('{}').version!=='0.8.1') console.log(require('path').resolve('{}','../../..'))" \; \
|
|
97
|
+
| xargs rm -rf
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then start OpenCode normally. npx will fetch the latest version into a fresh
|
|
101
|
+
cache entry.
|
|
102
|
+
|
|
103
|
+
> **Tip:** To avoid this entirely, pin `@latest` in your MCP config args:
|
|
104
|
+
> `["--yes", "@gwdn/nexus-mcp@latest"]`
|
|
105
|
+
|
|
81
106
|
## Related
|
|
82
107
|
|
|
83
108
|
- [nexus](https://github.com/gwnexus/nexus-hub) — Backend + Frontend (Next.js/Supabase/Netlify)
|
package/dist/server.js
CHANGED
|
@@ -85,6 +85,9 @@ import { appendSessionEntry, appendSessionEntrySchema, } from './tools/append-se
|
|
|
85
85
|
import { createTask, createTaskSchema } from './tools/create-task.js';
|
|
86
86
|
import { addDecisionComment, addDecisionCommentSchema, listDecisionComments, listDecisionCommentsSchema, } from './tools/decision-comments.js';
|
|
87
87
|
import { ingestDocument, ingestDocumentSchema, } from './tools/ingest-document.js';
|
|
88
|
+
import { classifyDocument, classifyDocumentSchema, } from './tools/classify-document.js';
|
|
89
|
+
import { updateDocument, updateDocumentSchema, } from './tools/update-document.js';
|
|
90
|
+
import { deleteDocument, deleteDocumentSchema, } from './tools/delete-document.js';
|
|
88
91
|
import { acknowledgeLetter, acknowledgeLetterSchema, listInbox, listInboxSchema, listOutbox, listOutboxSchema, } from './tools/letter-inbox.js';
|
|
89
92
|
import { createLetter, createLetterSchema, replyLetter, replyLetterSchema, } from './tools/letters.js';
|
|
90
93
|
import { listDocuments, listDocumentsSchema, } from './tools/list-documents.js';
|
|
@@ -146,6 +149,9 @@ server.tool('task_note', 'Append a note to an existing task. Notes are append-on
|
|
|
146
149
|
server.tool('task_list', 'List tasks for a project with optional status filtering. Returns tasks ordered by creation date (newest first).', listTasksSchema, withIdentity(listTasks));
|
|
147
150
|
server.tool('doc_ingest', 'Push text or markdown content into a project knowledge base. Creates an ingest item that can later be classified. Useful for agents to persist research results, generated documents, or extracted knowledge.', ingestDocumentSchema, withIdentity(ingestDocument));
|
|
148
151
|
server.tool('doc_list', 'List ingested documents for a project with optional source filtering. Returns documents ordered by creation date (newest first).', listDocumentsSchema, withIdentity(listDocuments));
|
|
152
|
+
server.tool('doc_classify', 'Update the classification of an ingest item. Valid classifications: unclassified, research_note, planning_item, decision_input, reference, archive.', classifyDocumentSchema, withIdentity(classifyDocument));
|
|
153
|
+
server.tool('doc_update', 'Update title, body, or source_url of an ingest item. Supports full body replacement or append mode via append_body. At least one field must be provided.', updateDocumentSchema, withIdentity(updateDocument));
|
|
154
|
+
server.tool('doc_delete', 'Delete an ingest item from a project knowledge base. This action is irreversible.', deleteDocumentSchema, withIdentity(deleteDocument));
|
|
149
155
|
server.tool('session_append', 'Append an entry to an existing session. Enforces session write isolation: only the session creator can append entries.', appendSessionEntrySchema, withIdentity(appendSessionEntry));
|
|
150
156
|
server.tool('session_create', 'Create a new work session for a project. Returns the session ID. The session starts in open status and must be closed explicitly via session_close.', createSessionSchema, withIdentity(createSession));
|
|
151
157
|
server.tool('session_close', 'Close an open session. Sets status to closed, optionally records a summary and next entry point. Only the session creator can close it.', closeSessionSchema, withIdentity(closeSession));
|
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":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAErD,4BAA4B;AAC5B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AAEpC,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,eAAe,EACf,UAAU,EACV,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,WAAW,EACX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,UAAU,EACV,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,+BAA+B,CAAA;AAEtC,sBAAsB;AACtB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,mBAAmB;AACnB,OAAO,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,KAAK,EACL,WAAW,EACX,MAAM,EACN,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;GAGG;AACH,8DAA8D;AAC9D,SAAS,YAAY,CAAC,OAAoC;IACxD,8DAA8D;IAC9D,OAAO,KAAK,EAAE,IAAS,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;QAC9B,OAAO,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD,CAAC,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAA;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,WAAW,EACX,qKAAqK,EACrK,qBAAqB,EACrB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CACtC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,qLAAqL,EACrL,sBAAsB,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CACvC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,sKAAsK,EACtK,iBAAiB,EACjB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAClC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,8LAA8L,EAC9L,wBAAwB,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACzC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,cAAc,EACd,yGAAyG,EACzG,iBAAiB,EACjB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAClC,CAAA;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,WAAW,EACX,oHAAoH,EACpH,kBAAkB,EAClB,YAAY,CAAC,YAAY,CAAC,CAC3B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,UAAU,EACV,4HAA4H,EAC5H,iBAAiB,EACjB,YAAY,CAAC,WAAW,CAAC,CAC1B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,UAAU,EACV,4KAA4K,EAC5K,eAAe,EACf,YAAY,CAAC,SAAS,CAAC,CACxB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,mJAAmJ,EACnJ,gBAAgB,EAChB,YAAY,CAAC,UAAU,CAAC,CACzB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,0IAA0I,EAC1I,uBAAuB,EACvB,YAAY,CAAC,iBAAiB,CAAC,CAChC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,oEAAoE,EACpE,gBAAgB,EAChB,YAAY,CAAC,UAAU,CAAC,CACzB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4IAA4I,EAC5I,sBAAsB,EACtB,YAAY,CAAC,gBAAgB,CAAC,CAC/B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,2JAA2J,EAC3J,iBAAiB,EACjB,YAAY,CAAC,WAAW,CAAC,CAC1B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,iHAAiH,EACjH,eAAe,EACf,YAAY,CAAC,SAAS,CAAC,CACxB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,+MAA+M,EAC/M,oBAAoB,EACpB,YAAY,CAAC,cAAc,CAAC,CAC7B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,UAAU,EACV,kIAAkI,EAClI,mBAAmB,EACnB,YAAY,CAAC,aAAa,CAAC,CAC5B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qJAAqJ,EACrJ,sBAAsB,EACtB,YAAY,CAAC,gBAAgB,CAAC,CAC/B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,0JAA0J,EAC1J,oBAAoB,EACpB,YAAY,CAAC,cAAc,CAAC,CAC7B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mFAAmF,EACnF,oBAAoB,EACpB,YAAY,CAAC,cAAc,CAAC,CAC7B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wHAAwH,EACxH,wBAAwB,EACxB,YAAY,CAAC,kBAAkB,CAAC,CACjC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,qJAAqJ,EACrJ,mBAAmB,EACnB,YAAY,CAAC,aAAa,CAAC,CAC5B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,eAAe,EACf,yIAAyI,EACzI,kBAAkB,EAClB,YAAY,CAAC,YAAY,CAAC,CAC3B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4JAA4J,EAC5J,sBAAsB,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CACvC,CAAA;AAED,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,qGAAqG,EACrG,wBAAwB,EACxB,YAAY,CAAC,kBAAkB,CAAC,CACjC,CAAA;AAED,MAAM,CAAC,IAAI,CACT,SAAS,EACT,2DAA2D,EAC3D,0BAA0B,EAC1B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAC3C,CAAA;AAED,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,SAAS,EACT,4IAA4I,EAC5I,YAAY,EACZ,YAAY,CAAC,MAAM,CAAC,CACrB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,8FAA8F,EAC9F,WAAW,EACX,YAAY,CAAC,KAAK,CAAC,CACpB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,sIAAsI,EACtI,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,uHAAuH,EACvH,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,uHAAuH,EACvH,gBAAgB,EAChB,YAAY,CAAC,UAAU,CAAC,CACzB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0FAA0F,EAC1F,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2CAA2C,EAC3C,gBAAgB,EAChB,YAAY,CAAC,UAAU,CAAC,CACzB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,uHAAuH,EACvH,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,SAAS,EACT,iHAAiH,EACjH,YAAY,EACZ,YAAY,CAAC,MAAM,CAAC,CACrB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,2EAA2E,EAC3E,WAAW,EACX,YAAY,CAAC,KAAK,CAAC,CACpB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,yGAAyG,EACzG,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,wHAAwH,EACxH,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,qCAAqC,EACrC,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,8FAA8F,EAC9F,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,uEAAuE,EACvE,qBAAqB,EACrB,YAAY,CAAC,eAAe,CAAC,CAC9B,CAAA;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,yJAAyJ,EACzJ,oBAAoB,EACpB,YAAY,CAAC,cAAc,CAAC,CAC7B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,8GAA8G,EAC9G,qBAAqB,EACrB,YAAY,CAAC,eAAe,CAAC,CAC9B,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,sLAAsL,EACtL,uBAAuB,EACvB,YAAY,CAAC,iBAAiB,CAAC,CAChC,CAAA;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,SAAS,EACT,mGAAmG,EACnG,YAAY,EACZ,YAAY,CAAC,MAAM,CAAC,CACrB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,uHAAuH,EACvH,WAAW,EACX,YAAY,CAAC,KAAK,CAAC,CACpB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,gGAAgG,EAChG,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,WAAW,EACX,4JAA4J,EAC5J,cAAc,EACd,YAAY,CAAC,QAAQ,CAAC,CACvB,CAAA;AAED,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,kJAAkJ,EAClJ,eAAe,EACf,YAAY,CAAC,SAAS,CAAC,CACxB,CAAA;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,yEAAyE;IACzE,MAAM,YAAY,EAAE,CAAA;IAEpB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;AACtD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -26,6 +26,7 @@ export declare const appendSessionEntrySchema: {
|
|
|
26
26
|
linked_entity_type: z.ZodOptional<z.ZodString>;
|
|
27
27
|
linked_entity_id: z.ZodOptional<z.ZodString>;
|
|
28
28
|
agent_id: z.ZodOptional<z.ZodString>;
|
|
29
|
+
metadata: z.ZodOptional<z.ZodString>;
|
|
29
30
|
};
|
|
30
31
|
type AppendSessionEntryArgs = {
|
|
31
32
|
session_id: string;
|
|
@@ -35,6 +36,7 @@ type AppendSessionEntryArgs = {
|
|
|
35
36
|
linked_entity_id?: string;
|
|
36
37
|
user_id: string;
|
|
37
38
|
agent_id?: string;
|
|
39
|
+
metadata?: string;
|
|
38
40
|
};
|
|
39
41
|
export declare function appendSessionEntry(args: AppendSessionEntryArgs): Promise<{
|
|
40
42
|
content: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append-session-entry.d.ts","sourceRoot":"","sources":["../../src/tools/append-session-entry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"append-session-entry.d.ts","sourceRoot":"","sources":["../../src/tools/append-session-entry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;CAwCpC,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB;;;;;;;;;;;;GA8CpE"}
|
|
@@ -37,8 +37,31 @@ export const appendSessionEntrySchema = {
|
|
|
37
37
|
.optional()
|
|
38
38
|
.describe('UUID of the linked entity'),
|
|
39
39
|
agent_id: z.string().max(200).optional().describe('Agent identifier if applicable'),
|
|
40
|
+
metadata: z
|
|
41
|
+
.string()
|
|
42
|
+
.max(10_000)
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('JSON string of metadata to merge into the session entry. ' +
|
|
45
|
+
'Example: \'{"model": "claude-opus-4", "toolstack": "opencode", "machine_id": "..."}\''),
|
|
40
46
|
};
|
|
41
47
|
export async function appendSessionEntry(args) {
|
|
48
|
+
let parsedMetadata;
|
|
49
|
+
if (args.metadata) {
|
|
50
|
+
try {
|
|
51
|
+
parsedMetadata = JSON.parse(args.metadata);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: JSON.stringify({ error: 'metadata must be a valid JSON string' }, null, 2),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
isError: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
42
65
|
const result = await nexusPost('/api/mcp/sessions', {
|
|
43
66
|
action: 'session_append',
|
|
44
67
|
session_id: args.session_id,
|
|
@@ -47,6 +70,7 @@ export async function appendSessionEntry(args) {
|
|
|
47
70
|
agent_id: args.agent_id,
|
|
48
71
|
linked_entity_type: args.linked_entity_type,
|
|
49
72
|
linked_entity_id: args.linked_entity_id,
|
|
73
|
+
...(parsedMetadata ? { metadata: parsedMetadata } : {}),
|
|
50
74
|
});
|
|
51
75
|
if (!result.ok) {
|
|
52
76
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append-session-entry.js","sourceRoot":"","sources":["../../src/tools/append-session-entry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,UAAU,EAAE,CAAC;SACV,IAAI,CAAC;QACJ,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,mBAAmB;QACnB,aAAa;QACb,cAAc;QACd,kBAAkB;QAClB,MAAM;QACN,YAAY;KACb,CAAC;SACD,QAAQ,CAAC,uBAAuB,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACzE,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CACP,6EAA6E,CAC9E;IACH,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,2BAA2B,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"append-session-entry.js","sourceRoot":"","sources":["../../src/tools/append-session-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_classify -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update the classification of an ingest item.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_classify).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const classifyDocumentSchema: {
|
|
9
|
+
document_id: z.ZodString;
|
|
10
|
+
classification: z.ZodEnum<{
|
|
11
|
+
research_note: "research_note";
|
|
12
|
+
planning_item: "planning_item";
|
|
13
|
+
unclassified: "unclassified";
|
|
14
|
+
decision_input: "decision_input";
|
|
15
|
+
reference: "reference";
|
|
16
|
+
archive: "archive";
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
type ClassifyDocumentArgs = {
|
|
20
|
+
document_id: string;
|
|
21
|
+
classification: string;
|
|
22
|
+
user_id: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function classifyDocument(args: ClassifyDocumentArgs): Promise<{
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
isError: boolean;
|
|
30
|
+
} | {
|
|
31
|
+
content: {
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}[];
|
|
35
|
+
isError?: undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=classify-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify-document.d.ts","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,sBAAsB;;;;;;;;;;CAYlC,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;;;;;GAwBhE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_classify -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update the classification of an ingest item.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_classify).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { nexusPost } from '../nexus-api.js';
|
|
9
|
+
export const classifyDocumentSchema = {
|
|
10
|
+
document_id: z.string().uuid().describe('Document UUID to classify'),
|
|
11
|
+
classification: z
|
|
12
|
+
.enum([
|
|
13
|
+
'unclassified',
|
|
14
|
+
'research_note',
|
|
15
|
+
'planning_item',
|
|
16
|
+
'decision_input',
|
|
17
|
+
'reference',
|
|
18
|
+
'archive',
|
|
19
|
+
])
|
|
20
|
+
.describe('New classification for the document'),
|
|
21
|
+
};
|
|
22
|
+
export async function classifyDocument(args) {
|
|
23
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
24
|
+
action: 'doc_classify',
|
|
25
|
+
document_id: args.document_id,
|
|
26
|
+
classification: args.classification,
|
|
27
|
+
});
|
|
28
|
+
if (!result.ok) {
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
isError: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{ type: 'text', text: JSON.stringify(result.data, null, 2) },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=classify-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify-document.js","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACpE,cAAc,EAAE,CAAC;SACd,IAAI,CAAC;QACJ,cAAc;QACd,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,SAAS;KACV,CAAC;SACD,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAA;AAQD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_delete -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Delete an ingest item from a project's knowledge base.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_delete).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const deleteDocumentSchema: {
|
|
9
|
+
document_id: z.ZodString;
|
|
10
|
+
};
|
|
11
|
+
type DeleteDocumentArgs = {
|
|
12
|
+
document_id: string;
|
|
13
|
+
user_id: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function deleteDocument(args: DeleteDocumentArgs): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
isError: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
isError?: undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=delete-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-document.d.ts","sourceRoot":"","sources":["../../src/tools/delete-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB;;CAEhC,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;GAuB5D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_delete -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Delete an ingest item from a project's knowledge base.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_delete).
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { nexusPost } from '../nexus-api.js';
|
|
9
|
+
export const deleteDocumentSchema = {
|
|
10
|
+
document_id: z.string().uuid().describe('Document UUID to delete'),
|
|
11
|
+
};
|
|
12
|
+
export async function deleteDocument(args) {
|
|
13
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
14
|
+
action: 'doc_delete',
|
|
15
|
+
document_id: args.document_id,
|
|
16
|
+
});
|
|
17
|
+
if (!result.ok) {
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: 'text',
|
|
22
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
isError: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{ type: 'text', text: JSON.stringify(result.data, null, 2) },
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=delete-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-document.js","sourceRoot":"","sources":["../../src/tools/delete-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACnE,CAAA;AAOD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
|
package/dist/tools/reviews.d.ts
CHANGED
|
@@ -86,11 +86,11 @@ export declare const rvDecideSchema: {
|
|
|
86
86
|
review_id: z.ZodString;
|
|
87
87
|
transition: z.ZodEnum<{
|
|
88
88
|
accept: "accept";
|
|
89
|
+
archive: "archive";
|
|
89
90
|
submit: "submit";
|
|
90
91
|
reject: "reject";
|
|
91
92
|
request_revision: "request_revision";
|
|
92
93
|
resubmit: "resubmit";
|
|
93
|
-
archive: "archive";
|
|
94
94
|
}>;
|
|
95
95
|
rationale: z.ZodOptional<z.ZodString>;
|
|
96
96
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_update -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update title, body, or source_url of an ingest item.
|
|
5
|
+
* Supports full body replacement or append mode.
|
|
6
|
+
* Delegates to POST /api/mcp/documents (action: doc_update).
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
export declare const updateDocumentSchema: {
|
|
10
|
+
document_id: z.ZodString;
|
|
11
|
+
title: z.ZodOptional<z.ZodString>;
|
|
12
|
+
body: z.ZodOptional<z.ZodString>;
|
|
13
|
+
source_url: z.ZodOptional<z.ZodString>;
|
|
14
|
+
append_body: z.ZodOptional<z.ZodString>;
|
|
15
|
+
};
|
|
16
|
+
type UpdateDocumentArgs = {
|
|
17
|
+
document_id: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
body?: string;
|
|
20
|
+
source_url?: string;
|
|
21
|
+
append_body?: string;
|
|
22
|
+
user_id: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function updateDocument(args: UpdateDocumentArgs): Promise<{
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
isError: boolean;
|
|
30
|
+
} | {
|
|
31
|
+
content: {
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}[];
|
|
35
|
+
isError?: undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=update-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-document.d.ts","sourceRoot":"","sources":["../../src/tools/update-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB;;;;;;CAgBhC,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;GA2B5D"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_update -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update title, body, or source_url of an ingest item.
|
|
5
|
+
* Supports full body replacement or append mode.
|
|
6
|
+
* Delegates to POST /api/mcp/documents (action: doc_update).
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { nexusPost } from '../nexus-api.js';
|
|
10
|
+
export const updateDocumentSchema = {
|
|
11
|
+
document_id: z.string().uuid().describe('Document UUID to update'),
|
|
12
|
+
title: z.string().max(500).optional().describe('New document title'),
|
|
13
|
+
body: z
|
|
14
|
+
.string()
|
|
15
|
+
.max(100_000)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('New document body (replaces existing content)'),
|
|
18
|
+
source_url: z.string().url().optional().describe('Updated source URL'),
|
|
19
|
+
append_body: z
|
|
20
|
+
.string()
|
|
21
|
+
.max(100_000)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Content to append to existing body (ignored if body is also provided)'),
|
|
24
|
+
};
|
|
25
|
+
export async function updateDocument(args) {
|
|
26
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
27
|
+
action: 'doc_update',
|
|
28
|
+
document_id: args.document_id,
|
|
29
|
+
title: args.title,
|
|
30
|
+
body: args.body,
|
|
31
|
+
source_url: args.source_url,
|
|
32
|
+
append_body: args.append_body,
|
|
33
|
+
});
|
|
34
|
+
if (!result.ok) {
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: 'text',
|
|
39
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
isError: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{ type: 'text', text: JSON.stringify(result.data, null, 2) },
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=update-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-document.js","sourceRoot":"","sources":["../../src/tools/update-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACpE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACtE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,QAAQ,CACP,uEAAuE,CACxE;CACJ,CAAA;AAWD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -206,6 +206,82 @@ describe('Layer 2: session_append', () => {
|
|
|
206
206
|
|
|
207
207
|
expect(result.isError).toBe(true)
|
|
208
208
|
})
|
|
209
|
+
|
|
210
|
+
it('should forward parsed metadata to the API', async () => {
|
|
211
|
+
vi.mocked(nexusPost).mockResolvedValue(
|
|
212
|
+
mockApiSuccess({
|
|
213
|
+
action: 'session_append',
|
|
214
|
+
entry_id: TEST_IDS.entryId,
|
|
215
|
+
session_id: TEST_IDS.sessionId,
|
|
216
|
+
entry_type: 'note',
|
|
217
|
+
project_id: TEST_IDS.projectId,
|
|
218
|
+
}),
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
const { appendSessionEntry } = await import('../tools/append-session-entry.js')
|
|
222
|
+
const metadata = JSON.stringify({
|
|
223
|
+
model: 'claude-opus-4',
|
|
224
|
+
toolstack: 'opencode',
|
|
225
|
+
machine_id: '00000000-0000-0000-0000-000000000001',
|
|
226
|
+
})
|
|
227
|
+
const result = await appendSessionEntry({
|
|
228
|
+
session_id: TEST_IDS.sessionId,
|
|
229
|
+
entry_type: 'note',
|
|
230
|
+
summary: 'Entry with metadata',
|
|
231
|
+
user_id: TEST_IDS.userId,
|
|
232
|
+
metadata,
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
expect(result.isError).toBeUndefined()
|
|
236
|
+
expect(vi.mocked(nexusPost)).toHaveBeenCalledWith(
|
|
237
|
+
'/api/mcp/sessions',
|
|
238
|
+
expect.objectContaining({
|
|
239
|
+
metadata: {
|
|
240
|
+
model: 'claude-opus-4',
|
|
241
|
+
toolstack: 'opencode',
|
|
242
|
+
machine_id: '00000000-0000-0000-0000-000000000001',
|
|
243
|
+
},
|
|
244
|
+
}),
|
|
245
|
+
)
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
it('should return error for invalid metadata JSON', async () => {
|
|
249
|
+
const { appendSessionEntry } = await import('../tools/append-session-entry.js')
|
|
250
|
+
const result = await appendSessionEntry({
|
|
251
|
+
session_id: TEST_IDS.sessionId,
|
|
252
|
+
entry_type: 'note',
|
|
253
|
+
summary: 'Bad metadata',
|
|
254
|
+
user_id: TEST_IDS.userId,
|
|
255
|
+
metadata: '{invalid json',
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
expect(result.isError).toBe(true)
|
|
259
|
+
const parsed = parseToolResponse(result)
|
|
260
|
+
expect(parsed.error).toContain('valid JSON')
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
it('should omit metadata key when not provided', async () => {
|
|
264
|
+
vi.mocked(nexusPost).mockResolvedValue(
|
|
265
|
+
mockApiSuccess({
|
|
266
|
+
action: 'session_append',
|
|
267
|
+
entry_id: TEST_IDS.entryId,
|
|
268
|
+
session_id: TEST_IDS.sessionId,
|
|
269
|
+
entry_type: 'note',
|
|
270
|
+
project_id: TEST_IDS.projectId,
|
|
271
|
+
}),
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
const { appendSessionEntry } = await import('../tools/append-session-entry.js')
|
|
275
|
+
await appendSessionEntry({
|
|
276
|
+
session_id: TEST_IDS.sessionId,
|
|
277
|
+
entry_type: 'note',
|
|
278
|
+
summary: 'No metadata',
|
|
279
|
+
user_id: TEST_IDS.userId,
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
const call = vi.mocked(nexusPost).mock.calls[0][1] as Record<string, unknown>
|
|
283
|
+
expect(call).not.toHaveProperty('metadata')
|
|
284
|
+
})
|
|
209
285
|
})
|
|
210
286
|
|
|
211
287
|
// ---------------------------------------------------------------------------
|
|
@@ -78,9 +78,9 @@ describe('MCP Server: withIdentity wrapper', () => {
|
|
|
78
78
|
})
|
|
79
79
|
|
|
80
80
|
describe('MCP Server: Schema exports', () => {
|
|
81
|
-
const EXPECTED_TOOL_COUNT =
|
|
81
|
+
const EXPECTED_TOOL_COUNT = 48
|
|
82
82
|
|
|
83
|
-
it('should register exactly
|
|
83
|
+
it('should register exactly 48 tools in server.ts', () => {
|
|
84
84
|
// Static analysis: count server.tool( calls in server.ts as a regression guard.
|
|
85
85
|
// If you add or remove a tool, update EXPECTED_TOOL_COUNT above.
|
|
86
86
|
const serverSource = readFileSync(
|
|
@@ -146,6 +146,7 @@ describe('MCP Server: Schema exports', () => {
|
|
|
146
146
|
|
|
147
147
|
const appendEntry = await import('../tools/append-session-entry.js')
|
|
148
148
|
expect(appendEntry.appendSessionEntrySchema).toBeDefined()
|
|
149
|
+
expect(appendEntry.appendSessionEntrySchema.metadata).toBeDefined()
|
|
149
150
|
expect(typeof appendEntry.appendSessionEntry).toBe('function')
|
|
150
151
|
|
|
151
152
|
const letters = await import('../tools/letters.js')
|
package/src/server.ts
CHANGED
|
@@ -109,6 +109,18 @@ import {
|
|
|
109
109
|
ingestDocument,
|
|
110
110
|
ingestDocumentSchema,
|
|
111
111
|
} from './tools/ingest-document.js'
|
|
112
|
+
import {
|
|
113
|
+
classifyDocument,
|
|
114
|
+
classifyDocumentSchema,
|
|
115
|
+
} from './tools/classify-document.js'
|
|
116
|
+
import {
|
|
117
|
+
updateDocument,
|
|
118
|
+
updateDocumentSchema,
|
|
119
|
+
} from './tools/update-document.js'
|
|
120
|
+
import {
|
|
121
|
+
deleteDocument,
|
|
122
|
+
deleteDocumentSchema,
|
|
123
|
+
} from './tools/delete-document.js'
|
|
112
124
|
import {
|
|
113
125
|
acknowledgeLetter,
|
|
114
126
|
acknowledgeLetterSchema,
|
|
@@ -354,6 +366,27 @@ server.tool(
|
|
|
354
366
|
withIdentity(listDocuments),
|
|
355
367
|
)
|
|
356
368
|
|
|
369
|
+
server.tool(
|
|
370
|
+
'doc_classify',
|
|
371
|
+
'Update the classification of an ingest item. Valid classifications: unclassified, research_note, planning_item, decision_input, reference, archive.',
|
|
372
|
+
classifyDocumentSchema,
|
|
373
|
+
withIdentity(classifyDocument),
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
server.tool(
|
|
377
|
+
'doc_update',
|
|
378
|
+
'Update title, body, or source_url of an ingest item. Supports full body replacement or append mode via append_body. At least one field must be provided.',
|
|
379
|
+
updateDocumentSchema,
|
|
380
|
+
withIdentity(updateDocument),
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
server.tool(
|
|
384
|
+
'doc_delete',
|
|
385
|
+
'Delete an ingest item from a project knowledge base. This action is irreversible.',
|
|
386
|
+
deleteDocumentSchema,
|
|
387
|
+
withIdentity(deleteDocument),
|
|
388
|
+
)
|
|
389
|
+
|
|
357
390
|
server.tool(
|
|
358
391
|
'session_append',
|
|
359
392
|
'Append an entry to an existing session. Enforces session write isolation: only the session creator can append entries.',
|
|
@@ -41,6 +41,14 @@ export const appendSessionEntrySchema = {
|
|
|
41
41
|
.optional()
|
|
42
42
|
.describe('UUID of the linked entity'),
|
|
43
43
|
agent_id: z.string().max(200).optional().describe('Agent identifier if applicable'),
|
|
44
|
+
metadata: z
|
|
45
|
+
.string()
|
|
46
|
+
.max(10_000)
|
|
47
|
+
.optional()
|
|
48
|
+
.describe(
|
|
49
|
+
'JSON string of metadata to merge into the session entry. ' +
|
|
50
|
+
'Example: \'{"model": "claude-opus-4", "toolstack": "opencode", "machine_id": "..."}\'',
|
|
51
|
+
),
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
type AppendSessionEntryArgs = {
|
|
@@ -51,9 +59,27 @@ type AppendSessionEntryArgs = {
|
|
|
51
59
|
linked_entity_id?: string
|
|
52
60
|
user_id: string
|
|
53
61
|
agent_id?: string
|
|
62
|
+
metadata?: string
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
export async function appendSessionEntry(args: AppendSessionEntryArgs) {
|
|
66
|
+
let parsedMetadata: Record<string, unknown> | undefined
|
|
67
|
+
if (args.metadata) {
|
|
68
|
+
try {
|
|
69
|
+
parsedMetadata = JSON.parse(args.metadata)
|
|
70
|
+
} catch {
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: 'text' as const,
|
|
75
|
+
text: JSON.stringify({ error: 'metadata must be a valid JSON string' }, null, 2),
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
isError: true,
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
57
83
|
const result = await nexusPost('/api/mcp/sessions', {
|
|
58
84
|
action: 'session_append',
|
|
59
85
|
session_id: args.session_id,
|
|
@@ -62,6 +88,7 @@ export async function appendSessionEntry(args: AppendSessionEntryArgs) {
|
|
|
62
88
|
agent_id: args.agent_id,
|
|
63
89
|
linked_entity_type: args.linked_entity_type,
|
|
64
90
|
linked_entity_id: args.linked_entity_id,
|
|
91
|
+
...(parsedMetadata ? { metadata: parsedMetadata } : {}),
|
|
65
92
|
})
|
|
66
93
|
|
|
67
94
|
if (!result.ok) {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_classify -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update the classification of an ingest item.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_classify).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
import { nexusPost } from '../nexus-api.js'
|
|
10
|
+
|
|
11
|
+
export const classifyDocumentSchema = {
|
|
12
|
+
document_id: z.string().uuid().describe('Document UUID to classify'),
|
|
13
|
+
classification: z
|
|
14
|
+
.enum([
|
|
15
|
+
'unclassified',
|
|
16
|
+
'research_note',
|
|
17
|
+
'planning_item',
|
|
18
|
+
'decision_input',
|
|
19
|
+
'reference',
|
|
20
|
+
'archive',
|
|
21
|
+
])
|
|
22
|
+
.describe('New classification for the document'),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type ClassifyDocumentArgs = {
|
|
26
|
+
document_id: string
|
|
27
|
+
classification: string
|
|
28
|
+
user_id: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function classifyDocument(args: ClassifyDocumentArgs) {
|
|
32
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
33
|
+
action: 'doc_classify',
|
|
34
|
+
document_id: args.document_id,
|
|
35
|
+
classification: args.classification,
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
if (!result.ok) {
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text' as const,
|
|
43
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
isError: true,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{ type: 'text' as const, text: JSON.stringify(result.data, null, 2) },
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_delete -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Delete an ingest item from a project's knowledge base.
|
|
5
|
+
* Delegates to POST /api/mcp/documents (action: doc_delete).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
import { nexusPost } from '../nexus-api.js'
|
|
10
|
+
|
|
11
|
+
export const deleteDocumentSchema = {
|
|
12
|
+
document_id: z.string().uuid().describe('Document UUID to delete'),
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type DeleteDocumentArgs = {
|
|
16
|
+
document_id: string
|
|
17
|
+
user_id: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function deleteDocument(args: DeleteDocumentArgs) {
|
|
21
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
22
|
+
action: 'doc_delete',
|
|
23
|
+
document_id: args.document_id,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
if (!result.ok) {
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text' as const,
|
|
31
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
isError: true,
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{ type: 'text' as const, text: JSON.stringify(result.data, null, 2) },
|
|
41
|
+
],
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doc_update -- Layer 2 Coordination
|
|
3
|
+
*
|
|
4
|
+
* Update title, body, or source_url of an ingest item.
|
|
5
|
+
* Supports full body replacement or append mode.
|
|
6
|
+
* Delegates to POST /api/mcp/documents (action: doc_update).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { z } from 'zod'
|
|
10
|
+
import { nexusPost } from '../nexus-api.js'
|
|
11
|
+
|
|
12
|
+
export const updateDocumentSchema = {
|
|
13
|
+
document_id: z.string().uuid().describe('Document UUID to update'),
|
|
14
|
+
title: z.string().max(500).optional().describe('New document title'),
|
|
15
|
+
body: z
|
|
16
|
+
.string()
|
|
17
|
+
.max(100_000)
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('New document body (replaces existing content)'),
|
|
20
|
+
source_url: z.string().url().optional().describe('Updated source URL'),
|
|
21
|
+
append_body: z
|
|
22
|
+
.string()
|
|
23
|
+
.max(100_000)
|
|
24
|
+
.optional()
|
|
25
|
+
.describe(
|
|
26
|
+
'Content to append to existing body (ignored if body is also provided)',
|
|
27
|
+
),
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type UpdateDocumentArgs = {
|
|
31
|
+
document_id: string
|
|
32
|
+
title?: string
|
|
33
|
+
body?: string
|
|
34
|
+
source_url?: string
|
|
35
|
+
append_body?: string
|
|
36
|
+
user_id: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function updateDocument(args: UpdateDocumentArgs) {
|
|
40
|
+
const result = await nexusPost('/api/mcp/documents', {
|
|
41
|
+
action: 'doc_update',
|
|
42
|
+
document_id: args.document_id,
|
|
43
|
+
title: args.title,
|
|
44
|
+
body: args.body,
|
|
45
|
+
source_url: args.source_url,
|
|
46
|
+
append_body: args.append_body,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
if (!result.ok) {
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{
|
|
53
|
+
type: 'text' as const,
|
|
54
|
+
text: JSON.stringify({ error: result.error }, null, 2),
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
isError: true,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
content: [
|
|
63
|
+
{ type: 'text' as const, text: JSON.stringify(result.data, null, 2) },
|
|
64
|
+
],
|
|
65
|
+
}
|
|
66
|
+
}
|