@atoms-tech/atoms-mcp 0.1.1 → 0.2.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 +136 -0
- package/dist/auth/login.d.ts +6 -4
- package/dist/auth/login.d.ts.map +1 -1
- package/dist/auth/login.js +19 -9
- package/dist/auth/login.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/server.js +126 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/bulk-import.d.ts +70 -0
- package/dist/tools/bulk-import.d.ts.map +1 -0
- package/dist/tools/bulk-import.js +188 -0
- package/dist/tools/bulk-import.js.map +1 -0
- package/dist/tools/project-summary.d.ts +64 -0
- package/dist/tools/project-summary.d.ts.map +1 -0
- package/dist/tools/project-summary.js +170 -0
- package/dist/tools/project-summary.js.map +1 -0
- package/dist/tools/trace.d.ts +53 -0
- package/dist/tools/trace.d.ts.map +1 -0
- package/dist/tools/trace.js +166 -0
- package/dist/tools/trace.js.map +1 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# @atoms-tech/atoms-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for [ATOMS.tech](https://atoms.tech) — connect AI agents to your requirements management workspace.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@atoms-tech/atoms-mcp)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# 1. Login to your ATOMS account
|
|
12
|
+
npx @atoms-tech/atoms-mcp login
|
|
13
|
+
|
|
14
|
+
# 2. Add to Claude Code
|
|
15
|
+
claude mcp add atoms-mcp -- npx @atoms-tech/atoms-mcp
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
That's it. Claude can now read, create, and manage requirements in your ATOMS projects.
|
|
19
|
+
|
|
20
|
+
## What It Does
|
|
21
|
+
|
|
22
|
+
ATOMS MCP gives AI agents direct access to your requirements, test cases, and traceability data through the [Model Context Protocol](https://modelcontextprotocol.io). Agents can:
|
|
23
|
+
|
|
24
|
+
- Browse projects, search requirements, and inspect items
|
|
25
|
+
- Create and update requirements, test cases, and notes
|
|
26
|
+
- Bulk import 100 items at a time
|
|
27
|
+
- Link items with parent/child and verification relationships
|
|
28
|
+
- Record test results and check coverage gaps
|
|
29
|
+
- Export traceability diagrams as Mermaid graphs
|
|
30
|
+
|
|
31
|
+
Every action is logged with AI actor attribution (`mcp_claude`) and enforces your organization's role-based permissions.
|
|
32
|
+
|
|
33
|
+
## Available Tools
|
|
34
|
+
|
|
35
|
+
| Tool | Description | Access |
|
|
36
|
+
|------|-------------|--------|
|
|
37
|
+
| `atoms_list_projects` | List all accessible projects | Read |
|
|
38
|
+
| `atoms_list_items` | Browse items with type/domain/level filters | Read |
|
|
39
|
+
| `atoms_get_item` | Get full item details with relationships | Read |
|
|
40
|
+
| `atoms_search` | Full-text search across items | Read |
|
|
41
|
+
| `atoms_get_coverage` | Find requirements without test cases | Read |
|
|
42
|
+
| `atoms_get_history` | Audit trail for an item | Read |
|
|
43
|
+
| `atoms_export_mermaid` | Generate traceability diagram | Read |
|
|
44
|
+
| `atoms_create_item` | Create a requirement, test case, or note | Write |
|
|
45
|
+
| `atoms_update_item` | Update item fields | Write |
|
|
46
|
+
| `atoms_delete_item` | Soft-delete an item | Write |
|
|
47
|
+
| `atoms_link_items` | Add/remove relationships between items | Write |
|
|
48
|
+
| `atoms_bulk_import` | Bulk create up to 100 items at once | Write |
|
|
49
|
+
| `atoms_record_test_result` | Record pass/fail for a test case | Write |
|
|
50
|
+
| `atoms_trace` | Walk traceability graph (upstream/downstream) | Read |
|
|
51
|
+
| `atoms_project_summary` | Project compliance dashboard (counts, coverage, status) | Read |
|
|
52
|
+
|
|
53
|
+
## Authentication
|
|
54
|
+
|
|
55
|
+
ATOMS MCP uses **OAuth 2.1 with PKCE** — the same flow used by GitHub CLI and Supabase CLI.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Interactive login (opens browser)
|
|
59
|
+
npx @atoms-tech/atoms-mcp login
|
|
60
|
+
|
|
61
|
+
# Check current session
|
|
62
|
+
npx @atoms-tech/atoms-mcp whoami
|
|
63
|
+
|
|
64
|
+
# Clear credentials
|
|
65
|
+
npx @atoms-tech/atoms-mcp logout
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**How it works:**
|
|
69
|
+
|
|
70
|
+
1. `login` opens your browser to the ATOMS consent page
|
|
71
|
+
2. You approve the MCP connection with your ATOMS account
|
|
72
|
+
3. Tokens are stored locally at `~/.atoms-mcp/credentials.json`
|
|
73
|
+
4. Tokens auto-refresh — you only need to login once
|
|
74
|
+
|
|
75
|
+
You can also set `ATOMS_ACCESS_TOKEN` as an environment variable for CI/headless use.
|
|
76
|
+
|
|
77
|
+
## CLI Commands
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
npx @atoms-tech/atoms-mcp login # Authenticate with ATOMS
|
|
81
|
+
npx @atoms-tech/atoms-mcp logout # Clear stored credentials
|
|
82
|
+
npx @atoms-tech/atoms-mcp whoami # Show current user
|
|
83
|
+
npx @atoms-tech/atoms-mcp --help # Show all commands
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Running without a subcommand starts the MCP server on stdio.
|
|
87
|
+
|
|
88
|
+
## Setup
|
|
89
|
+
|
|
90
|
+
### Claude Code
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
claude mcp add atoms-mcp -- npx @atoms-tech/atoms-mcp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Claude Desktop
|
|
97
|
+
|
|
98
|
+
Add to your `claude_desktop_config.json`:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"mcpServers": {
|
|
103
|
+
"atoms-mcp": {
|
|
104
|
+
"command": "npx",
|
|
105
|
+
"args": ["@atoms-tech/atoms-mcp"]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Cursor / Windsurf
|
|
112
|
+
|
|
113
|
+
Add to your MCP configuration with `command: "npx"` and `args: ["@atoms-tech/atoms-mcp"]`. Refer to your editor's MCP documentation for the exact config file location.
|
|
114
|
+
|
|
115
|
+
## Security
|
|
116
|
+
|
|
117
|
+
- **Row Level Security (RLS)** — All queries run with the user's JWT. The server never uses a service role key. You can only access projects your organization has granted you access to.
|
|
118
|
+
- **Role enforcement** — Write tools check your org role (viewer, editor, admin) before making changes. Viewers are blocked from mutations.
|
|
119
|
+
- **Audit logging** — Every tool call is logged with tool name, parameters, duration, and session ID. Write operations log to `change_history` with `actor: "mcp_claude"`.
|
|
120
|
+
- **Rate limiting** — Built-in per-user rate limiter prevents abuse.
|
|
121
|
+
- **No secrets in the package** — The Supabase anon key is a publishable client key (like a Firebase API key). It grants zero data access without a valid user JWT.
|
|
122
|
+
|
|
123
|
+
## Requirements
|
|
124
|
+
|
|
125
|
+
- Node.js >= 18
|
|
126
|
+
- An [ATOMS.tech](https://atoms.tech) account with at least one project
|
|
127
|
+
|
|
128
|
+
## Links
|
|
129
|
+
|
|
130
|
+
- [ATOMS.tech](https://atoms.tech) — Requirements management platform
|
|
131
|
+
- [Model Context Protocol](https://modelcontextprotocol.io) — Open standard for AI tool integration
|
|
132
|
+
- [GitHub](https://github.com/support-atoms-tech/atoms-mvp-v2) — Source code
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT
|
package/dist/auth/login.d.ts
CHANGED
|
@@ -12,10 +12,12 @@
|
|
|
12
12
|
* Run the interactive login flow.
|
|
13
13
|
* Opens browser, waits for callback, stores tokens.
|
|
14
14
|
*
|
|
15
|
-
* Uses OAuth 2.1 PKCE flow:
|
|
16
|
-
* 1.
|
|
17
|
-
* 2.
|
|
18
|
-
* 3.
|
|
15
|
+
* Uses OAuth 2.1 PKCE flow with hosted consent page:
|
|
16
|
+
* 1. Open browser to ATOMS consent page with code_challenge
|
|
17
|
+
* 2. User reviews permissions and clicks "Authorize"
|
|
18
|
+
* 3. Consent page redirects to Supabase OAuth with PKCE params
|
|
19
|
+
* 4. Supabase returns authorization code to localhost callback
|
|
20
|
+
* 5. Exchange code + code_verifier for session tokens
|
|
19
21
|
*/
|
|
20
22
|
export declare function login(): Promise<{
|
|
21
23
|
email: string;
|
package/dist/auth/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAkMxD"}
|
package/dist/auth/login.js
CHANGED
|
@@ -12,17 +12,19 @@ import { createServer } from "node:http";
|
|
|
12
12
|
import { randomBytes, createHash } from "node:crypto";
|
|
13
13
|
import { URL } from "node:url";
|
|
14
14
|
import { writeCredentials } from "./token-store.js";
|
|
15
|
-
import { ATOMS_SUPABASE_URL, ATOMS_SUPABASE_ANON_KEY } from "../config.js";
|
|
15
|
+
import { ATOMS_SUPABASE_URL, ATOMS_SUPABASE_ANON_KEY, ATOMS_APP_URL } from "../config.js";
|
|
16
16
|
const CALLBACK_PORT = 19275;
|
|
17
17
|
const CALLBACK_PATH = "/callback";
|
|
18
18
|
/**
|
|
19
19
|
* Run the interactive login flow.
|
|
20
20
|
* Opens browser, waits for callback, stores tokens.
|
|
21
21
|
*
|
|
22
|
-
* Uses OAuth 2.1 PKCE flow:
|
|
23
|
-
* 1.
|
|
24
|
-
* 2.
|
|
25
|
-
* 3.
|
|
22
|
+
* Uses OAuth 2.1 PKCE flow with hosted consent page:
|
|
23
|
+
* 1. Open browser to ATOMS consent page with code_challenge
|
|
24
|
+
* 2. User reviews permissions and clicks "Authorize"
|
|
25
|
+
* 3. Consent page redirects to Supabase OAuth with PKCE params
|
|
26
|
+
* 4. Supabase returns authorization code to localhost callback
|
|
27
|
+
* 5. Exchange code + code_verifier for session tokens
|
|
26
28
|
*/
|
|
27
29
|
export async function login() {
|
|
28
30
|
// Generate PKCE challenge
|
|
@@ -31,10 +33,9 @@ export async function login() {
|
|
|
31
33
|
.update(codeVerifier)
|
|
32
34
|
.digest("base64url");
|
|
33
35
|
const redirectTo = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
|
|
34
|
-
// Build
|
|
35
|
-
const authUrl = new URL(`${
|
|
36
|
-
authUrl.searchParams.set("
|
|
37
|
-
authUrl.searchParams.set("redirect_to", redirectTo);
|
|
36
|
+
// Build consent page URL — hosted on ATOMS web app
|
|
37
|
+
const authUrl = new URL(`${ATOMS_APP_URL}/auth/mcp-consent`);
|
|
38
|
+
authUrl.searchParams.set("redirect_uri", redirectTo);
|
|
38
39
|
authUrl.searchParams.set("code_challenge", codeChallenge);
|
|
39
40
|
authUrl.searchParams.set("code_challenge_method", "S256");
|
|
40
41
|
return new Promise((resolve, reject) => {
|
|
@@ -46,6 +47,15 @@ export async function login() {
|
|
|
46
47
|
return;
|
|
47
48
|
}
|
|
48
49
|
try {
|
|
50
|
+
// Check for user cancellation from consent page
|
|
51
|
+
const error = url.searchParams.get("error");
|
|
52
|
+
if (error === "access_denied") {
|
|
53
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
54
|
+
res.end(failurePage("Authorization was cancelled."));
|
|
55
|
+
server.close();
|
|
56
|
+
reject(new Error("Authorization cancelled by user."));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
49
59
|
// PKCE flow: Supabase redirects with ?code=xxx in query params
|
|
50
60
|
const code = url.searchParams.get("code");
|
|
51
61
|
if (code) {
|
package/dist/auth/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK;IAEzB,0BAA0B;IAC1B,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;SACvC,MAAM,CAAC,YAAY,CAAC;SACpB,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,oBAAoB,aAAa,GAAG,aAAa,EAAE,CAAC;IAEvE,mDAAmD;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,aAAa,mBAAmB,CAAC,CAAC;IAC7D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAC1D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAE1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;YAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,aAAa,EAAE,CAAC,CAAC;YAEzE,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACnC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,gDAAgD;gBAChD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;oBAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACrD,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;gBAED,+DAA+D;gBAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE1C,IAAI,IAAI,EAAE,CAAC;oBACT,sEAAsE;oBACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,kBAAkB,gCAAgC,EAAE;wBAClF,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,QAAQ,EAAE,uBAAuB;yBAClC;wBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,SAAS,EAAE,IAAI;4BACf,aAAa,EAAE,YAAY;yBAC5B,CAAC;qBACH,CAAC,CAAC;oBAEH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAMpC,CAAC;oBAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;wBAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,GAAG,IAAI,eAAe,CAAC;wBAC/E,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC,CAAC;wBACxD,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC,CAAC;wBACrD,OAAO;oBACT,CAAC;oBAED,0BAA0B;oBAC1B,IAAI,KAAK,GAAG,eAAe,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;wBACnG,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;oBACjC,CAAC;oBAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;oBAEtC,iEAAiE;oBACjE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,YAAY,GAAG,YAAY,CAAC,kBAAkB,EAAE,uBAAuB,EAAE;wBAC7E,MAAM,EAAE;4BACN,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,SAAS,CAAC,YAAY,EAAE,EAAE;yBAC/D;qBACF,CAAC,CAAC;oBAEH,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY;yBAC5D,IAAI,CAAC,aAAa,CAAC;yBACnB,MAAM,CAAC,QAAQ,CAAC;yBAChB,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEZ,IAAI,MAAM,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvD,0DAA0D;wBAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CACjB,yDAAyD;4BACzD,6EAA6E;4BAC7E,oCAAoC,CACrC,CAAC,CAAC;wBACH,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;wBAC5E,OAAO;oBACT,CAAC;oBAED,MAAM,gBAAgB,CAAC;wBACrB,YAAY,EAAE,SAAS,CAAC,YAAa;wBACrC,aAAa,EAAE,SAAS,CAAC,aAAc;wBACvC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI;wBAC9D,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;oBAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,iEAAiE;gBACjE,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzD,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;gBAE7E,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;oBAChC,MAAM,gBAAgB,CAAC;wBACrB,YAAY,EAAE,WAAW;wBACzB,aAAa,EAAE,YAAY;wBAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI;qBAC1C,CAAC,CAAC;oBAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;oBACtC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,0DAA0D;oBAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACjC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,+DAA+D;QAC/D,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAClD,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBACvB,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC9B,MAAM,gBAAgB,CAAC;4BACrB,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI;4BACzD,UAAU,EAAE,IAAI,CAAC,UAAU;yBAC5B,CAAC,CAAC;wBAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;wBACtC,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC,CAAC;oBACzD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBACnB,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;wBACvC,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;YACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEvF,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtD,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkCD,CAAC;AACT,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA4Fc,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+BpB,CAAC;AACT,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAgDe,MAAM;;;QAGtB,CAAC;AACT,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export declare const ATOMS_SUPABASE_URL = "https://gmebjyhomsbvhrxffzre.supabase.co";
|
|
16
16
|
export declare const ATOMS_SUPABASE_ANON_KEY = "sb_publishable_b49MUAB8XCrQiF7x5b9lUA_w1aplSBH";
|
|
17
|
+
/** ATOMS web app URL — hosts the MCP consent page */
|
|
18
|
+
export declare const ATOMS_APP_URL: string;
|
|
17
19
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,kBAAkB,6CAA6C,CAAC;AAC7E,eAAO,MAAM,uBAAuB,mDACc,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,kBAAkB,6CAA6C,CAAC;AAC7E,eAAO,MAAM,uBAAuB,mDACc,CAAC;AAEnD,qDAAqD;AACrD,eAAO,MAAM,aAAa,QAAiE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export const ATOMS_SUPABASE_URL = "https://gmebjyhomsbvhrxffzre.supabase.co";
|
|
16
16
|
export const ATOMS_SUPABASE_ANON_KEY = "sb_publishable_b49MUAB8XCrQiF7x5b9lUA_w1aplSBH";
|
|
17
|
+
/** ATOMS web app URL — hosts the MCP consent page */
|
|
18
|
+
export const ATOMS_APP_URL = process.env.ATOMS_APP_URL ?? "https://atoms-mvp-v2.vercel.app";
|
|
17
19
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAClC,gDAAgD,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAClC,gDAAgD,CAAC;AAEnD,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,iCAAiC,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -472,6 +472,57 @@ Returns:
|
|
|
472
472
|
const { linkItemsHandler } = await import("./tools/link-items.js");
|
|
473
473
|
return linkItemsHandler(params);
|
|
474
474
|
}));
|
|
475
|
+
server.registerTool("atoms_bulk_import", {
|
|
476
|
+
title: "Bulk Import ATOMS Items",
|
|
477
|
+
description: `Bulk create multiple items in a single tool call. Essential for AI agents
|
|
478
|
+
that generate 20+ requirements at once.
|
|
479
|
+
|
|
480
|
+
Checks write access once, generates sequential IDs, batch inserts all items,
|
|
481
|
+
and reports per-item errors without aborting the entire batch.
|
|
482
|
+
|
|
483
|
+
Args:
|
|
484
|
+
- project_id (string, UUID): Target project
|
|
485
|
+
- items (array): Up to 100 items to create, each with:
|
|
486
|
+
- type (string): requirement|test-case|note
|
|
487
|
+
- title (string): Item title (max 500 chars)
|
|
488
|
+
- body (string, optional): Rich text body
|
|
489
|
+
- summary (string, optional): Brief summary
|
|
490
|
+
- domains (string[], optional): Domain tags
|
|
491
|
+
- level (string, optional): System|Subsystem|Component
|
|
492
|
+
- parent_id (string, optional): Parent item ID to link
|
|
493
|
+
|
|
494
|
+
Returns:
|
|
495
|
+
{ created: number, items: [{ id, title, type }], errors: [] }
|
|
496
|
+
|
|
497
|
+
Limits:
|
|
498
|
+
- Maximum 100 items per call
|
|
499
|
+
- If any item fails, others still succeed — errors reported separately
|
|
500
|
+
|
|
501
|
+
Side effects:
|
|
502
|
+
- Logs to change_history with actor='mcp_claude' for each created item
|
|
503
|
+
- Creates parent relationships for items with parent_id`,
|
|
504
|
+
inputSchema: {
|
|
505
|
+
project_id: z.string().uuid().describe("UUID of the target project"),
|
|
506
|
+
items: z.array(z.object({
|
|
507
|
+
type: z.enum(["requirement", "test-case", "note"]).describe("Item type"),
|
|
508
|
+
title: z.string().min(1).max(500).describe("Item title"),
|
|
509
|
+
body: z.string().optional().describe("Rich text body"),
|
|
510
|
+
summary: z.string().optional().describe("Brief summary"),
|
|
511
|
+
domains: z.array(z.string()).optional().describe("Domain tags"),
|
|
512
|
+
level: z.string().optional().describe("System|Subsystem|Component"),
|
|
513
|
+
parent_id: z.string().optional().describe("Parent item ID to link"),
|
|
514
|
+
})).min(1).max(100).describe("Items to create (1-100)"),
|
|
515
|
+
},
|
|
516
|
+
annotations: {
|
|
517
|
+
readOnlyHint: false,
|
|
518
|
+
destructiveHint: false,
|
|
519
|
+
idempotentHint: false,
|
|
520
|
+
openWorldHint: false,
|
|
521
|
+
},
|
|
522
|
+
}, withMiddleware("atoms_bulk_import", async (params) => {
|
|
523
|
+
const { bulkImportHandler } = await import("./tools/bulk-import.js");
|
|
524
|
+
return bulkImportHandler(params);
|
|
525
|
+
}));
|
|
475
526
|
server.registerTool("atoms_record_test_result", {
|
|
476
527
|
title: "Record Test Result",
|
|
477
528
|
description: `Record a pass/fail/blocked result for a test case.
|
|
@@ -508,4 +559,79 @@ Side effects:
|
|
|
508
559
|
const { recordTestResultHandler } = await import("./tools/record-test-result.js");
|
|
509
560
|
return recordTestResultHandler(params);
|
|
510
561
|
}));
|
|
562
|
+
// ---------------------------------------------------------------------------
|
|
563
|
+
// Tool Registration — Phase 4 (Advanced Tools)
|
|
564
|
+
// ---------------------------------------------------------------------------
|
|
565
|
+
server.registerTool("atoms_trace", {
|
|
566
|
+
title: "Trace Item Relationships",
|
|
567
|
+
description: `Walk the traceability graph from a starting item.
|
|
568
|
+
|
|
569
|
+
Answers questions like "which requirements does TC-00003 verify?" or
|
|
570
|
+
"if I change REQ-00001, what's affected downstream?"
|
|
571
|
+
|
|
572
|
+
Args:
|
|
573
|
+
- project_id (string, UUID): Project containing the item
|
|
574
|
+
- item_id (string): Starting item ID
|
|
575
|
+
- direction (string): upstream|downstream|both
|
|
576
|
+
- upstream: follow parent/verifies links (dependencies)
|
|
577
|
+
- downstream: follow child/verified_by links (dependents)
|
|
578
|
+
- both: trace in both directions
|
|
579
|
+
- depth (number, optional): Max traversal depth (default 5, max 10)
|
|
580
|
+
- relationship_types (string[], optional): Filter to specific types (parent, child, related, verifies, verified_by)
|
|
581
|
+
|
|
582
|
+
Returns:
|
|
583
|
+
{ root, direction, items: [{ id, title, type, relationship, depth }], total_count }
|
|
584
|
+
|
|
585
|
+
Examples:
|
|
586
|
+
- "What does TC-00003 verify?" → atoms_trace(project_id, "TC-00003", "upstream")
|
|
587
|
+
- "What's affected by REQ-00001?" → atoms_trace(project_id, "REQ-00001", "downstream")`,
|
|
588
|
+
inputSchema: {
|
|
589
|
+
project_id: z.string().uuid().describe("UUID of the project"),
|
|
590
|
+
item_id: z.string().min(1).max(20).describe("Starting item ID"),
|
|
591
|
+
direction: z.enum(["upstream", "downstream", "both"])
|
|
592
|
+
.describe("Traversal direction"),
|
|
593
|
+
depth: z.number().int().min(1).max(10).default(5)
|
|
594
|
+
.describe("Max traversal depth (default 5)"),
|
|
595
|
+
relationship_types: z.array(z.enum(["parent", "child", "related", "verifies", "verified_by"])).optional()
|
|
596
|
+
.describe("Filter to specific relationship types"),
|
|
597
|
+
},
|
|
598
|
+
annotations: {
|
|
599
|
+
readOnlyHint: true,
|
|
600
|
+
destructiveHint: false,
|
|
601
|
+
idempotentHint: true,
|
|
602
|
+
openWorldHint: false,
|
|
603
|
+
},
|
|
604
|
+
}, withMiddleware("atoms_trace", async (params) => {
|
|
605
|
+
const { traceHandler } = await import("./tools/trace.js");
|
|
606
|
+
return traceHandler(params);
|
|
607
|
+
}));
|
|
608
|
+
server.registerTool("atoms_project_summary", {
|
|
609
|
+
title: "Project Compliance Summary",
|
|
610
|
+
description: `One-call project health and compliance dashboard.
|
|
611
|
+
|
|
612
|
+
Returns item counts by type, test execution status, requirement coverage
|
|
613
|
+
(overall and by domain), and recent change activity.
|
|
614
|
+
|
|
615
|
+
Args:
|
|
616
|
+
- project_id (string, UUID): Project to summarize
|
|
617
|
+
|
|
618
|
+
Returns:
|
|
619
|
+
{ project_name, counts, test_status, coverage, coverage_by_domain, recent_changes, last_updated }
|
|
620
|
+
|
|
621
|
+
Examples:
|
|
622
|
+
- "Give me a compliance snapshot" → atoms_project_summary(project_id)
|
|
623
|
+
- "How's our test coverage?" → atoms_project_summary(project_id)`,
|
|
624
|
+
inputSchema: {
|
|
625
|
+
project_id: z.string().uuid().describe("UUID of the project"),
|
|
626
|
+
},
|
|
627
|
+
annotations: {
|
|
628
|
+
readOnlyHint: true,
|
|
629
|
+
destructiveHint: false,
|
|
630
|
+
idempotentHint: true,
|
|
631
|
+
openWorldHint: false,
|
|
632
|
+
},
|
|
633
|
+
}, withMiddleware("atoms_project_summary", async (params) => {
|
|
634
|
+
const { projectSummaryHandler } = await import("./tools/project-summary.js");
|
|
635
|
+
return projectSummaryHandler(params);
|
|
636
|
+
}));
|
|
511
637
|
//# 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":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_bulk_import — Bulk create multiple items in a single tool call.
|
|
3
|
+
* Essential for AI agents that generate 20+ requirements at once.
|
|
4
|
+
*
|
|
5
|
+
* Checks write access once, generates sequential IDs, batch inserts,
|
|
6
|
+
* and reports per-item errors without aborting the entire batch.
|
|
7
|
+
*/
|
|
8
|
+
interface BulkImportItem {
|
|
9
|
+
type: "requirement" | "test-case" | "note";
|
|
10
|
+
title: string;
|
|
11
|
+
body?: string;
|
|
12
|
+
summary?: string;
|
|
13
|
+
domains?: string[];
|
|
14
|
+
level?: string;
|
|
15
|
+
parent_id?: string;
|
|
16
|
+
}
|
|
17
|
+
interface CreatedItem {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
type: string;
|
|
21
|
+
}
|
|
22
|
+
interface BulkImportError {
|
|
23
|
+
index: number;
|
|
24
|
+
title: string;
|
|
25
|
+
error: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function bulkImportHandler(params: {
|
|
28
|
+
project_id: string;
|
|
29
|
+
items: BulkImportItem[];
|
|
30
|
+
}): Promise<{
|
|
31
|
+
content: {
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}[];
|
|
35
|
+
structuredContent: {
|
|
36
|
+
data: any[];
|
|
37
|
+
meta: {
|
|
38
|
+
truncated: boolean;
|
|
39
|
+
truncation_message: string;
|
|
40
|
+
total_count?: number | undefined;
|
|
41
|
+
limit?: number | undefined;
|
|
42
|
+
offset?: number | undefined;
|
|
43
|
+
has_more?: boolean | undefined;
|
|
44
|
+
};
|
|
45
|
+
status: "success";
|
|
46
|
+
};
|
|
47
|
+
} | {
|
|
48
|
+
content: {
|
|
49
|
+
type: "text";
|
|
50
|
+
text: string;
|
|
51
|
+
}[];
|
|
52
|
+
structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
|
|
53
|
+
created: number;
|
|
54
|
+
items: never[];
|
|
55
|
+
errors: BulkImportError[];
|
|
56
|
+
}>;
|
|
57
|
+
} | {
|
|
58
|
+
content: {
|
|
59
|
+
type: "text";
|
|
60
|
+
text: string;
|
|
61
|
+
}[];
|
|
62
|
+
structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
|
|
63
|
+
created: number;
|
|
64
|
+
items: CreatedItem[];
|
|
65
|
+
errors: BulkImportError[];
|
|
66
|
+
project_id: string;
|
|
67
|
+
}>;
|
|
68
|
+
}>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=bulk-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-import.d.ts","sourceRoot":"","sources":["../../src/tools/bulk-import.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6NA"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_bulk_import — Bulk create multiple items in a single tool call.
|
|
3
|
+
* Essential for AI agents that generate 20+ requirements at once.
|
|
4
|
+
*
|
|
5
|
+
* Checks write access once, generates sequential IDs, batch inserts,
|
|
6
|
+
* and reports per-item errors without aborting the entire batch.
|
|
7
|
+
*/
|
|
8
|
+
import { getClient, getUserId, requireWriteAccess } from "../db/client.js";
|
|
9
|
+
import { generateItemId } from "../db/queries.js";
|
|
10
|
+
import { getMcpSessionId } from "../server.js";
|
|
11
|
+
import { formatToolResult, formatErrorResult, success, accessDeniedError, validationError, dbError, authError, } from "./_base.js";
|
|
12
|
+
export async function bulkImportHandler(params) {
|
|
13
|
+
try {
|
|
14
|
+
// Validate item count
|
|
15
|
+
if (!params.items || params.items.length === 0) {
|
|
16
|
+
return formatErrorResult(validationError("items array must contain at least 1 item"));
|
|
17
|
+
}
|
|
18
|
+
if (params.items.length > 100) {
|
|
19
|
+
return formatErrorResult(validationError(`Maximum 100 items per call (received ${params.items.length}). Split into multiple calls.`));
|
|
20
|
+
}
|
|
21
|
+
const client = await getClient();
|
|
22
|
+
const userId = getUserId();
|
|
23
|
+
// Check write access once for the entire batch
|
|
24
|
+
try {
|
|
25
|
+
await requireWriteAccess(client, params.project_id);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (err instanceof Error && err.message === "VIEWER_ROLE") {
|
|
29
|
+
return formatErrorResult(accessDeniedError("Viewer"));
|
|
30
|
+
}
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
const now = new Date().toISOString();
|
|
34
|
+
const sessionId = getMcpSessionId();
|
|
35
|
+
const created = [];
|
|
36
|
+
const errors = [];
|
|
37
|
+
// Generate all IDs sequentially (each call increments the counter)
|
|
38
|
+
const itemsWithIds = [];
|
|
39
|
+
for (let i = 0; i < params.items.length; i++) {
|
|
40
|
+
const input = params.items[i];
|
|
41
|
+
try {
|
|
42
|
+
const itemId = await generateItemId(client, params.project_id, input.type);
|
|
43
|
+
itemsWithIds.push({ itemId, input, index: i });
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
errors.push({
|
|
47
|
+
index: i,
|
|
48
|
+
title: input.title,
|
|
49
|
+
error: `ID generation failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (itemsWithIds.length === 0) {
|
|
54
|
+
return formatToolResult(success({
|
|
55
|
+
created: 0,
|
|
56
|
+
items: [],
|
|
57
|
+
errors,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
// Build insert rows and WorkItem data blobs
|
|
61
|
+
const insertRows = [];
|
|
62
|
+
const workItemMap = new Map();
|
|
63
|
+
for (const { itemId, input } of itemsWithIds) {
|
|
64
|
+
const workItem = {
|
|
65
|
+
id: itemId,
|
|
66
|
+
type: input.type,
|
|
67
|
+
title: input.title,
|
|
68
|
+
summary: input.summary,
|
|
69
|
+
body: input.body,
|
|
70
|
+
tags: {
|
|
71
|
+
domains: input.domains ?? [],
|
|
72
|
+
level: input.level,
|
|
73
|
+
},
|
|
74
|
+
ownership: {
|
|
75
|
+
primary: null,
|
|
76
|
+
additional: [],
|
|
77
|
+
},
|
|
78
|
+
relationships: {
|
|
79
|
+
parents: input.parent_id ? [input.parent_id] : [],
|
|
80
|
+
children: [],
|
|
81
|
+
related: [],
|
|
82
|
+
},
|
|
83
|
+
links: [],
|
|
84
|
+
metadata: {
|
|
85
|
+
created_at: now,
|
|
86
|
+
created_by: userId,
|
|
87
|
+
updated_at: now,
|
|
88
|
+
updated_by: userId,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
workItemMap.set(itemId, workItem);
|
|
92
|
+
insertRows.push({
|
|
93
|
+
id: itemId,
|
|
94
|
+
project_id: params.project_id,
|
|
95
|
+
type: input.type,
|
|
96
|
+
title: input.title,
|
|
97
|
+
data: workItem,
|
|
98
|
+
created_by: userId,
|
|
99
|
+
updated_by: userId,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Batch insert all items
|
|
103
|
+
const { error: insertErr } = await client
|
|
104
|
+
.from("items")
|
|
105
|
+
.insert(insertRows);
|
|
106
|
+
if (insertErr) {
|
|
107
|
+
// If batch insert fails, fall back to individual inserts
|
|
108
|
+
for (const { itemId, input, index } of itemsWithIds) {
|
|
109
|
+
const row = insertRows.find((r) => r.id === itemId);
|
|
110
|
+
if (!row)
|
|
111
|
+
continue;
|
|
112
|
+
const { error: singleErr } = await client
|
|
113
|
+
.from("items")
|
|
114
|
+
.insert(row);
|
|
115
|
+
if (singleErr) {
|
|
116
|
+
errors.push({
|
|
117
|
+
index,
|
|
118
|
+
title: input.title,
|
|
119
|
+
error: singleErr.message,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
created.push({ id: itemId, title: input.title, type: input.type });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Batch succeeded — all items created
|
|
129
|
+
for (const { itemId, input } of itemsWithIds) {
|
|
130
|
+
created.push({ id: itemId, title: input.title, type: input.type });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Create relationships for items with parent_id (fire-and-forget)
|
|
134
|
+
const relRows = itemsWithIds
|
|
135
|
+
.filter(({ input }) => input.parent_id)
|
|
136
|
+
.filter(({ itemId }) => created.some((c) => c.id === itemId))
|
|
137
|
+
.map(({ itemId, input }) => ({
|
|
138
|
+
from_id: itemId,
|
|
139
|
+
to_id: input.parent_id,
|
|
140
|
+
type: "parent",
|
|
141
|
+
project_id: params.project_id,
|
|
142
|
+
}));
|
|
143
|
+
if (relRows.length > 0) {
|
|
144
|
+
await client
|
|
145
|
+
.from("item_relationships")
|
|
146
|
+
.insert(relRows)
|
|
147
|
+
.then(({ error }) => {
|
|
148
|
+
if (error) {
|
|
149
|
+
process.stderr.write(`[atoms-mcp] Warning: bulk relationship sync failed: ${error.message}\n`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Audit: log one change_history entry per created item (fire-and-forget)
|
|
154
|
+
const historyRows = created.map((item) => ({
|
|
155
|
+
item_id: item.id,
|
|
156
|
+
project_id: params.project_id,
|
|
157
|
+
changed_by: userId,
|
|
158
|
+
event_type: "created",
|
|
159
|
+
old_data: null,
|
|
160
|
+
new_data: workItemMap.get(item.id) ?? null,
|
|
161
|
+
actor: "mcp_claude",
|
|
162
|
+
session_id: sessionId,
|
|
163
|
+
}));
|
|
164
|
+
if (historyRows.length > 0) {
|
|
165
|
+
await client
|
|
166
|
+
.from("change_history")
|
|
167
|
+
.insert(historyRows)
|
|
168
|
+
.then(({ error }) => {
|
|
169
|
+
if (error) {
|
|
170
|
+
process.stderr.write(`[atoms-mcp] Warning: bulk change_history log failed: ${error.message}\n`);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return formatToolResult(success({
|
|
175
|
+
created: created.length,
|
|
176
|
+
items: created,
|
|
177
|
+
errors: errors.length > 0 ? errors : [],
|
|
178
|
+
project_id: params.project_id,
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
if (err instanceof Error && err.message.includes("Not authenticated")) {
|
|
183
|
+
return formatErrorResult(authError());
|
|
184
|
+
}
|
|
185
|
+
return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=bulk-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-import.js","sourceRoot":"","sources":["../../src/tools/bulk-import.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,SAAS,GACV,MAAM,YAAY,CAAC;AAyBpB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAGvC;IACC,IAAI,CAAC;QACH,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,iBAAiB,CACtB,eAAe,CAAC,0CAA0C,CAAC,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9B,OAAO,iBAAiB,CACtB,eAAe,CACb,wCAAwC,MAAM,CAAC,KAAK,CAAC,MAAM,+BAA+B,CAC3F,CACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC1D,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QACpC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,mEAAmE;QACnE,MAAM,YAAY,GAIb,EAAE,CAAC;QAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,EACN,MAAM,CAAC,UAAU,EACjB,KAAK,CAAC,IAAI,CACX,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,gBAAgB,CACrB,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,EAAE;gBACT,MAAM;aACP,CAAC,CACH,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAQX,EAAE,CAAC;QAER,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEhD,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAa;gBACzB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACD,SAAS,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,EAAE;iBACf;gBACD,aAAa,EAAE;oBACb,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBACjD,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,EAAE;iBACZ;gBACD,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE;oBACR,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,MAAM;iBACnB;aACF,CAAC;YAEF,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElC,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,MAAM;gBACV,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM;aACtC,IAAI,CAAC,OAAO,CAAC;aACb,MAAM,CAAC,UAAU,CAAC,CAAC;QAEtB,IAAI,SAAS,EAAE,CAAC;YACd,yDAAyD;YACzD,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;gBACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG;oBAAE,SAAS;gBAEnB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM;qBACtC,IAAI,CAAC,OAAO,CAAC;qBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEf,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,KAAK,EAAE,SAAS,CAAC,OAAO;qBACzB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,MAAM,OAAO,GAAG,YAAY;aACzB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;aACtC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;aAC5D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,KAAK,CAAC,SAAU;YACvB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC,CAAC;QAEN,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM;iBACT,IAAI,CAAC,oBAAoB,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uDAAuD,KAAK,CAAC,OAAO,IAAI,CACzE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAED,yEAAyE;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI;YAC1C,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC,CAAC;QAEJ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM;iBACT,IAAI,CAAC,gBAAgB,CAAC;iBACtB,MAAM,CAAC,WAAW,CAAC;iBACnB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,KAAK,CAAC,OAAO,IAAI,CAC1E,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,gBAAgB,CACrB,OAAO,CAAC;YACN,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtE,OAAO,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,iBAAiB,CACtB,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_project_summary — One-call compliance/health dashboard for a project.
|
|
3
|
+
*
|
|
4
|
+
* Returns item counts by type, test status breakdown, coverage stats
|
|
5
|
+
* (overall + per domain), and recent change activity.
|
|
6
|
+
*/
|
|
7
|
+
interface DomainCoverage {
|
|
8
|
+
domain: string;
|
|
9
|
+
covered: number;
|
|
10
|
+
total: number;
|
|
11
|
+
percent: number;
|
|
12
|
+
}
|
|
13
|
+
interface ProjectSummaryData {
|
|
14
|
+
project_id: string;
|
|
15
|
+
project_name: string;
|
|
16
|
+
counts: {
|
|
17
|
+
requirements: number;
|
|
18
|
+
test_cases: number;
|
|
19
|
+
notes: number;
|
|
20
|
+
};
|
|
21
|
+
test_status: {
|
|
22
|
+
passed: number;
|
|
23
|
+
failed: number;
|
|
24
|
+
blocked: number;
|
|
25
|
+
not_run: number;
|
|
26
|
+
};
|
|
27
|
+
coverage: {
|
|
28
|
+
covered: number;
|
|
29
|
+
uncovered: number;
|
|
30
|
+
total: number;
|
|
31
|
+
percent: number;
|
|
32
|
+
};
|
|
33
|
+
coverage_by_domain: DomainCoverage[];
|
|
34
|
+
recent_changes: number;
|
|
35
|
+
last_updated: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function projectSummaryHandler(params: {
|
|
38
|
+
project_id: string;
|
|
39
|
+
}): Promise<{
|
|
40
|
+
content: {
|
|
41
|
+
type: "text";
|
|
42
|
+
text: string;
|
|
43
|
+
}[];
|
|
44
|
+
structuredContent: {
|
|
45
|
+
data: any[];
|
|
46
|
+
meta: {
|
|
47
|
+
truncated: boolean;
|
|
48
|
+
truncation_message: string;
|
|
49
|
+
total_count?: number | undefined;
|
|
50
|
+
limit?: number | undefined;
|
|
51
|
+
offset?: number | undefined;
|
|
52
|
+
has_more?: boolean | undefined;
|
|
53
|
+
};
|
|
54
|
+
status: "success";
|
|
55
|
+
};
|
|
56
|
+
} | {
|
|
57
|
+
content: {
|
|
58
|
+
type: "text";
|
|
59
|
+
text: string;
|
|
60
|
+
}[];
|
|
61
|
+
structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<ProjectSummaryData>;
|
|
62
|
+
}>;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=project-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-summary.d.ts","sourceRoot":"","sources":["../../src/tools/project-summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;;;;;;;;;;;;;;GA6KA"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_project_summary — One-call compliance/health dashboard for a project.
|
|
3
|
+
*
|
|
4
|
+
* Returns item counts by type, test status breakdown, coverage stats
|
|
5
|
+
* (overall + per domain), and recent change activity.
|
|
6
|
+
*/
|
|
7
|
+
import { getClient } from "../db/client.js";
|
|
8
|
+
import { formatToolResult, formatErrorResult, success, dbError, authError, notFoundError, } from "./_base.js";
|
|
9
|
+
export async function projectSummaryHandler(params) {
|
|
10
|
+
try {
|
|
11
|
+
const client = await getClient();
|
|
12
|
+
// 1. Verify project exists and get its name
|
|
13
|
+
const { data: project, error: projErr } = await client
|
|
14
|
+
.from("projects")
|
|
15
|
+
.select("id, name")
|
|
16
|
+
.eq("id", params.project_id)
|
|
17
|
+
.is("deleted_at", null)
|
|
18
|
+
.maybeSingle();
|
|
19
|
+
if (projErr)
|
|
20
|
+
throw new Error(projErr.message);
|
|
21
|
+
if (!project) {
|
|
22
|
+
return formatErrorResult(notFoundError("Project", params.project_id));
|
|
23
|
+
}
|
|
24
|
+
// 2. Get all items grouped by type
|
|
25
|
+
const { data: items, error: itemsErr } = await client
|
|
26
|
+
.from("items")
|
|
27
|
+
.select("id, type, data")
|
|
28
|
+
.eq("project_id", params.project_id)
|
|
29
|
+
.is("deleted_at", null);
|
|
30
|
+
if (itemsErr)
|
|
31
|
+
throw new Error(itemsErr.message);
|
|
32
|
+
const allItems = items ?? [];
|
|
33
|
+
const counts = {
|
|
34
|
+
requirements: 0,
|
|
35
|
+
test_cases: 0,
|
|
36
|
+
notes: 0,
|
|
37
|
+
};
|
|
38
|
+
const testCaseIds = [];
|
|
39
|
+
const requirementItems = [];
|
|
40
|
+
for (const item of allItems) {
|
|
41
|
+
if (item.type === "requirement") {
|
|
42
|
+
counts.requirements++;
|
|
43
|
+
const domains = item.data?.tags?.domains ?? [];
|
|
44
|
+
requirementItems.push({ id: item.id, domains });
|
|
45
|
+
}
|
|
46
|
+
else if (item.type === "test-case") {
|
|
47
|
+
counts.test_cases++;
|
|
48
|
+
testCaseIds.push(item.id);
|
|
49
|
+
}
|
|
50
|
+
else if (item.type === "note") {
|
|
51
|
+
counts.notes++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 3. Get latest test result per test case from test_results shadow table
|
|
55
|
+
const testStatus = {
|
|
56
|
+
passed: 0,
|
|
57
|
+
failed: 0,
|
|
58
|
+
blocked: 0,
|
|
59
|
+
not_run: 0,
|
|
60
|
+
};
|
|
61
|
+
if (testCaseIds.length > 0) {
|
|
62
|
+
// Fetch all test results for this project, ordered by run_at desc
|
|
63
|
+
const { data: results, error: resultsErr } = await client
|
|
64
|
+
.from("test_results")
|
|
65
|
+
.select("item_id, result, run_at")
|
|
66
|
+
.eq("project_id", params.project_id)
|
|
67
|
+
.order("run_at", { ascending: false });
|
|
68
|
+
if (resultsErr)
|
|
69
|
+
throw new Error(resultsErr.message);
|
|
70
|
+
// Deduplicate to latest result per test case
|
|
71
|
+
const latestByItem = new Map();
|
|
72
|
+
for (const r of results ?? []) {
|
|
73
|
+
if (!latestByItem.has(r.item_id)) {
|
|
74
|
+
latestByItem.set(r.item_id, r.result);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Count statuses — test cases without any result are "not_run"
|
|
78
|
+
for (const tcId of testCaseIds) {
|
|
79
|
+
const result = latestByItem.get(tcId);
|
|
80
|
+
if (!result || result === "not-run") {
|
|
81
|
+
testStatus.not_run++;
|
|
82
|
+
}
|
|
83
|
+
else if (result === "passed") {
|
|
84
|
+
testStatus.passed++;
|
|
85
|
+
}
|
|
86
|
+
else if (result === "failed") {
|
|
87
|
+
testStatus.failed++;
|
|
88
|
+
}
|
|
89
|
+
else if (result === "blocked") {
|
|
90
|
+
testStatus.blocked++;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
testStatus.not_run++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 4. Coverage: requirements with at least one verified_by relationship
|
|
98
|
+
const { data: verifiedRels, error: relErr } = await client
|
|
99
|
+
.from("item_relationships")
|
|
100
|
+
.select("from_id")
|
|
101
|
+
.eq("project_id", params.project_id)
|
|
102
|
+
.eq("type", "verified_by");
|
|
103
|
+
if (relErr)
|
|
104
|
+
throw new Error(relErr.message);
|
|
105
|
+
const coveredIds = new Set((verifiedRels ?? []).map((r) => r.from_id));
|
|
106
|
+
const coveredCount = requirementItems.filter((r) => coveredIds.has(r.id)).length;
|
|
107
|
+
const totalReqs = requirementItems.length;
|
|
108
|
+
const coverage = {
|
|
109
|
+
covered: coveredCount,
|
|
110
|
+
uncovered: totalReqs - coveredCount,
|
|
111
|
+
total: totalReqs,
|
|
112
|
+
percent: totalReqs > 0
|
|
113
|
+
? Math.round((coveredCount / totalReqs) * 1000) / 10
|
|
114
|
+
: 100,
|
|
115
|
+
};
|
|
116
|
+
// 5. Coverage by domain
|
|
117
|
+
const domainMap = new Map();
|
|
118
|
+
for (const req of requirementItems) {
|
|
119
|
+
const domains = req.domains.length > 0 ? req.domains : ["(untagged)"];
|
|
120
|
+
const isCovered = coveredIds.has(req.id);
|
|
121
|
+
for (const domain of domains) {
|
|
122
|
+
if (!domainMap.has(domain)) {
|
|
123
|
+
domainMap.set(domain, { covered: 0, total: 0 });
|
|
124
|
+
}
|
|
125
|
+
const entry = domainMap.get(domain);
|
|
126
|
+
entry.total++;
|
|
127
|
+
if (isCovered)
|
|
128
|
+
entry.covered++;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const coverageByDomain = Array.from(domainMap.entries())
|
|
132
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
133
|
+
.map(([domain, stats]) => ({
|
|
134
|
+
domain,
|
|
135
|
+
covered: stats.covered,
|
|
136
|
+
total: stats.total,
|
|
137
|
+
percent: stats.total > 0
|
|
138
|
+
? Math.round((stats.covered / stats.total) * 1000) / 10
|
|
139
|
+
: 100,
|
|
140
|
+
}));
|
|
141
|
+
// 6. Recent changes (last 7 days)
|
|
142
|
+
const sevenDaysAgo = new Date();
|
|
143
|
+
sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
|
|
144
|
+
const { count: recentChanges, error: histErr } = await client
|
|
145
|
+
.from("change_history")
|
|
146
|
+
.select("id", { count: "exact", head: true })
|
|
147
|
+
.eq("project_id", params.project_id)
|
|
148
|
+
.gte("changed_at", sevenDaysAgo.toISOString());
|
|
149
|
+
if (histErr)
|
|
150
|
+
throw new Error(histErr.message);
|
|
151
|
+
const data = {
|
|
152
|
+
project_id: params.project_id,
|
|
153
|
+
project_name: project.name,
|
|
154
|
+
counts,
|
|
155
|
+
test_status: testStatus,
|
|
156
|
+
coverage,
|
|
157
|
+
coverage_by_domain: coverageByDomain,
|
|
158
|
+
recent_changes: recentChanges ?? 0,
|
|
159
|
+
last_updated: new Date().toISOString(),
|
|
160
|
+
};
|
|
161
|
+
return formatToolResult(success(data));
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
if (err instanceof Error && err.message.includes("Not authenticated")) {
|
|
165
|
+
return formatErrorResult(authError());
|
|
166
|
+
}
|
|
167
|
+
return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=project-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-summary.js","sourceRoot":"","sources":["../../src/tools/project-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_trace — Graph traversal for traceability queries.
|
|
3
|
+
*
|
|
4
|
+
* Answers questions like "which requirements does TC-00003 verify?"
|
|
5
|
+
* or "what's affected if I change REQ-00001?"
|
|
6
|
+
*/
|
|
7
|
+
interface TraceNode {
|
|
8
|
+
id: string;
|
|
9
|
+
title: string;
|
|
10
|
+
type: string;
|
|
11
|
+
relationship: string;
|
|
12
|
+
depth: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function traceHandler(params: {
|
|
15
|
+
project_id: string;
|
|
16
|
+
item_id: string;
|
|
17
|
+
direction: "upstream" | "downstream" | "both";
|
|
18
|
+
depth: number;
|
|
19
|
+
relationship_types?: string[];
|
|
20
|
+
}): Promise<{
|
|
21
|
+
content: {
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
structuredContent: {
|
|
26
|
+
data: any[];
|
|
27
|
+
meta: {
|
|
28
|
+
truncated: boolean;
|
|
29
|
+
truncation_message: string;
|
|
30
|
+
total_count?: number | undefined;
|
|
31
|
+
limit?: number | undefined;
|
|
32
|
+
offset?: number | undefined;
|
|
33
|
+
has_more?: boolean | undefined;
|
|
34
|
+
};
|
|
35
|
+
status: "success";
|
|
36
|
+
};
|
|
37
|
+
} | {
|
|
38
|
+
content: {
|
|
39
|
+
type: "text";
|
|
40
|
+
text: string;
|
|
41
|
+
}[];
|
|
42
|
+
structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
|
|
43
|
+
truncated?: boolean | undefined;
|
|
44
|
+
truncation_message?: string | undefined;
|
|
45
|
+
root: string;
|
|
46
|
+
direction: "upstream" | "downstream" | "both";
|
|
47
|
+
depth_limit: number;
|
|
48
|
+
items: TraceNode[];
|
|
49
|
+
total_count: number;
|
|
50
|
+
}>;
|
|
51
|
+
}>;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/tools/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKA"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* atoms_trace — Graph traversal for traceability queries.
|
|
3
|
+
*
|
|
4
|
+
* Answers questions like "which requirements does TC-00003 verify?"
|
|
5
|
+
* or "what's affected if I change REQ-00001?"
|
|
6
|
+
*/
|
|
7
|
+
import { getClient } from "../db/client.js";
|
|
8
|
+
import { getItemById } from "../db/queries.js";
|
|
9
|
+
import { formatToolResult, formatErrorResult, success, notFoundError, dbError, authError, } from "./_base.js";
|
|
10
|
+
/** Maximum items returned to prevent huge responses. */
|
|
11
|
+
const MAX_ITEMS = 200;
|
|
12
|
+
/** Relationship types that point "upstream" (toward parents / dependencies). */
|
|
13
|
+
const UPSTREAM_TYPES = ["parent", "verifies"];
|
|
14
|
+
/** Relationship types that point "downstream" (toward dependents). */
|
|
15
|
+
const DOWNSTREAM_TYPES = ["child", "verified_by"];
|
|
16
|
+
/**
|
|
17
|
+
* Inverse mapping: when traversing an incoming edge we need
|
|
18
|
+
* to know what the outgoing type means for the other side.
|
|
19
|
+
*/
|
|
20
|
+
const INVERSE_TYPE = {
|
|
21
|
+
parent: "child",
|
|
22
|
+
child: "parent",
|
|
23
|
+
verifies: "verified_by",
|
|
24
|
+
verified_by: "verifies",
|
|
25
|
+
related: "related",
|
|
26
|
+
};
|
|
27
|
+
export async function traceHandler(params) {
|
|
28
|
+
try {
|
|
29
|
+
const maxDepth = Math.min(Math.max(params.depth ?? 5, 1), 10);
|
|
30
|
+
const client = await getClient();
|
|
31
|
+
// Verify root item exists
|
|
32
|
+
const rootItem = await getItemById(client, params.project_id, params.item_id);
|
|
33
|
+
if (!rootItem) {
|
|
34
|
+
return formatErrorResult(notFoundError("Item", params.item_id));
|
|
35
|
+
}
|
|
36
|
+
// Fetch all relationships in the project once (same pattern as export-mermaid)
|
|
37
|
+
const { data: rels, error: relsErr } = await client
|
|
38
|
+
.from("item_relationships")
|
|
39
|
+
.select("from_id, to_id, type")
|
|
40
|
+
.eq("project_id", params.project_id);
|
|
41
|
+
if (relsErr)
|
|
42
|
+
throw new Error(relsErr.message);
|
|
43
|
+
// Fetch all non-deleted items for title/type lookup
|
|
44
|
+
const { data: items, error: itemsErr } = await client
|
|
45
|
+
.from("items")
|
|
46
|
+
.select("id, title, type")
|
|
47
|
+
.eq("project_id", params.project_id)
|
|
48
|
+
.is("deleted_at", null);
|
|
49
|
+
if (itemsErr)
|
|
50
|
+
throw new Error(itemsErr.message);
|
|
51
|
+
const itemMap = new Map();
|
|
52
|
+
for (const item of items ?? []) {
|
|
53
|
+
itemMap.set(item.id, { title: item.title, type: item.type });
|
|
54
|
+
}
|
|
55
|
+
// Build adjacency lists based on direction
|
|
56
|
+
// For each item, we store { neighbor, relType, direction }
|
|
57
|
+
const adjacency = new Map();
|
|
58
|
+
const addEdge = (from, to, relType) => {
|
|
59
|
+
if (!adjacency.has(from))
|
|
60
|
+
adjacency.set(from, []);
|
|
61
|
+
adjacency.get(from).push({ neighbor: to, relType });
|
|
62
|
+
};
|
|
63
|
+
const allowedTypes = params.relationship_types
|
|
64
|
+
? new Set(params.relationship_types)
|
|
65
|
+
: null;
|
|
66
|
+
for (const rel of rels ?? []) {
|
|
67
|
+
const relType = rel.type;
|
|
68
|
+
// Upstream: follow edges where the item is the source and the rel points upstream
|
|
69
|
+
// i.e., from_id -> to_id with type "parent" or "verifies"
|
|
70
|
+
if (params.direction === "upstream" || params.direction === "both") {
|
|
71
|
+
if (UPSTREAM_TYPES.includes(relType)) {
|
|
72
|
+
if (!allowedTypes || allowedTypes.has(relType)) {
|
|
73
|
+
addEdge(rel.from_id, rel.to_id, relType);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Also follow inverse: if from_id has a "child" pointing to to_id,
|
|
77
|
+
// then to_id is upstream of from_id — but we model it as:
|
|
78
|
+
// from_id's downstream is to_id via "child". For upstream from to_id,
|
|
79
|
+
// we'd follow to_id -> from_id via inverse of "child" = "parent".
|
|
80
|
+
if (DOWNSTREAM_TYPES.includes(relType)) {
|
|
81
|
+
const inverseType = INVERSE_TYPE[relType] ?? relType;
|
|
82
|
+
if (!allowedTypes || allowedTypes.has(inverseType)) {
|
|
83
|
+
addEdge(rel.to_id, rel.from_id, inverseType);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (params.direction === "downstream" || params.direction === "both") {
|
|
88
|
+
if (DOWNSTREAM_TYPES.includes(relType)) {
|
|
89
|
+
if (!allowedTypes || allowedTypes.has(relType)) {
|
|
90
|
+
addEdge(rel.from_id, rel.to_id, relType);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Inverse: upstream type from the other side means downstream for us
|
|
94
|
+
if (UPSTREAM_TYPES.includes(relType)) {
|
|
95
|
+
const inverseType = INVERSE_TYPE[relType] ?? relType;
|
|
96
|
+
if (!allowedTypes || allowedTypes.has(inverseType)) {
|
|
97
|
+
addEdge(rel.to_id, rel.from_id, inverseType);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// "related" is bidirectional — add both directions if allowed
|
|
102
|
+
if (relType === "related") {
|
|
103
|
+
if (!allowedTypes || allowedTypes.has("related")) {
|
|
104
|
+
addEdge(rel.from_id, rel.to_id, "related");
|
|
105
|
+
addEdge(rel.to_id, rel.from_id, "related");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// BFS traversal from root
|
|
110
|
+
const visited = new Set();
|
|
111
|
+
visited.add(params.item_id);
|
|
112
|
+
const result = [];
|
|
113
|
+
const queue = [];
|
|
114
|
+
// Seed queue with direct neighbors of the root
|
|
115
|
+
const rootNeighbors = adjacency.get(params.item_id) ?? [];
|
|
116
|
+
for (const edge of rootNeighbors) {
|
|
117
|
+
queue.push({ id: edge.neighbor, depth: 1, relType: edge.relType });
|
|
118
|
+
}
|
|
119
|
+
while (queue.length > 0 && result.length < MAX_ITEMS) {
|
|
120
|
+
const { id, depth, relType } = queue.shift();
|
|
121
|
+
if (visited.has(id) || depth > maxDepth)
|
|
122
|
+
continue;
|
|
123
|
+
visited.add(id);
|
|
124
|
+
const info = itemMap.get(id);
|
|
125
|
+
if (!info)
|
|
126
|
+
continue; // skip deleted items
|
|
127
|
+
result.push({
|
|
128
|
+
id,
|
|
129
|
+
title: info.title,
|
|
130
|
+
type: info.type,
|
|
131
|
+
relationship: relType,
|
|
132
|
+
depth,
|
|
133
|
+
});
|
|
134
|
+
// Enqueue neighbors at next depth
|
|
135
|
+
if (depth < maxDepth) {
|
|
136
|
+
const neighbors = adjacency.get(id) ?? [];
|
|
137
|
+
for (const edge of neighbors) {
|
|
138
|
+
if (!visited.has(edge.neighbor)) {
|
|
139
|
+
queue.push({
|
|
140
|
+
id: edge.neighbor,
|
|
141
|
+
depth: depth + 1,
|
|
142
|
+
relType: edge.relType,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return formatToolResult(success({
|
|
149
|
+
root: params.item_id,
|
|
150
|
+
direction: params.direction,
|
|
151
|
+
depth_limit: maxDepth,
|
|
152
|
+
items: result,
|
|
153
|
+
total_count: result.length,
|
|
154
|
+
...(result.length >= MAX_ITEMS
|
|
155
|
+
? { truncated: true, truncation_message: `Results capped at ${MAX_ITEMS} items. Use a smaller depth or filter by relationship_types.` }
|
|
156
|
+
: {}),
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
if (err instanceof Error && err.message.includes("Not authenticated")) {
|
|
161
|
+
return formatErrorResult(authError());
|
|
162
|
+
}
|
|
163
|
+
return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/tools/trace.ts"],"names":[],"mappings":"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"}
|