@printwithsynergy/synergy-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/CLAUDE.md +16 -8
- package/README.md +27 -16
- package/dist/config.d.ts +10 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +52 -8
- package/dist/config.js.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/tools/blast-radius.d.ts.map +1 -1
- package/dist/tools/blast-radius.js +14 -2
- package/dist/tools/blast-radius.js.map +1 -1
- package/dist/tools/floor-pin-grid.d.ts.map +1 -1
- package/dist/tools/floor-pin-grid.js +12 -1
- package/dist/tools/floor-pin-grid.js.map +1 -1
- package/dist/tools/stack-health-grid.d.ts +10 -7
- package/dist/tools/stack-health-grid.d.ts.map +1 -1
- package/dist/tools/stack-health-grid.js +25 -24
- package/dist/tools/stack-health-grid.js.map +1 -1
- package/package.json +2 -2
package/CLAUDE.md
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
## Scope
|
|
4
4
|
|
|
5
5
|
Cross-stack dev-audit MCP server. Surfaces the patterns the cross-
|
|
6
|
-
stack architecture audit found inconsistently applied across the
|
|
7
|
-
printwithsynergy
|
|
8
|
-
synergy, platform
|
|
6
|
+
stack architecture audit found inconsistently applied across the
|
|
7
|
+
printwithsynergy stack (codex-pdf, lint-pdf, lens-pdf, compile-pdf,
|
|
8
|
+
synergy, platform, atlas, trove, sift-pdf, assay-pdf, trove-agent,
|
|
9
|
+
artwork-pdf, synergy-marketing, host-with-synergy, pdf-rd, and
|
|
10
|
+
synergy-mcp itself) as four MCP tools over stdio.
|
|
9
11
|
|
|
10
12
|
**Non-goals:**
|
|
11
13
|
- Don't replace observability — `stack_health_grid` is a snapshot
|
|
@@ -32,8 +34,9 @@ synergy, platform) as four MCP tools over stdio.
|
|
|
32
34
|
Four tools (`src/tools/*.ts`):
|
|
33
35
|
|
|
34
36
|
- `blast_radius` — regex-based call-site discovery. Python `from X
|
|
35
|
-
import Y` + TS `import { Y } from 'X'` + bare-name
|
|
36
|
-
filesystem scan, no AST.
|
|
37
|
+
import Y` + TS `import { Y } from 'X'` + Go import paths + bare-name
|
|
38
|
+
usage. Pure filesystem scan, no AST. (`docs` repos like pdf-rd scan
|
|
39
|
+
no source — markdown isn't a searched extension.)
|
|
37
40
|
- `floor_pin_grid` — parse `pyproject.toml#dependencies` and
|
|
38
41
|
`package.json#{dependencies,devDependencies,peerDependencies}` for
|
|
39
42
|
the org-package allowlist (`ORG_PACKAGES` in
|
|
@@ -41,7 +44,8 @@ Four tools (`src/tools/*.ts`):
|
|
|
41
44
|
- `pattern_audit` — file-existence + shallow-grep probes. Each probe
|
|
42
45
|
is a one-function file-system call; no AST.
|
|
43
46
|
- `stack_health_grid` — parallel `fetch` to per-repo health endpoints
|
|
44
|
-
(the
|
|
47
|
+
(the converged org `/healthz` + `/readyz` + `/v1/contract` convention;
|
|
48
|
+
codex predates `/readyz`, platform exposes only `/healthz`).
|
|
45
49
|
|
|
46
50
|
Adding a new tool:
|
|
47
51
|
|
|
@@ -80,8 +84,12 @@ the available subset and emit a note. **Never** throw because a repo
|
|
|
80
84
|
is missing; the OSS dev story is "configure incrementally."
|
|
81
85
|
|
|
82
86
|
For prod URLs (`stack_health_grid`), the defaults are baked in
|
|
83
|
-
(`codex.
|
|
84
|
-
`
|
|
87
|
+
(`codex-pdf-production.up.railway.app`, `lintpdf.com`,
|
|
88
|
+
`synergy-api-production.up.railway.app`, `platform.printwithsynergy.com`);
|
|
89
|
+
override via `SYNERGY_MCP_URL_<REPO>`. Repos with no public HTTP surface
|
|
90
|
+
(npm libraries, the Go daemon, static sites, docs, internal-only services
|
|
91
|
+
like compile-pdf) default to no URL and are skipped with a note until the
|
|
92
|
+
env var is set.
|
|
85
93
|
|
|
86
94
|
## Local dev
|
|
87
95
|
|
package/README.md
CHANGED
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
Cross-stack dev-audit MCP server for the [Print With Synergy](https://printwithsynergy.com)
|
|
4
4
|
stack.
|
|
5
5
|
|
|
6
|
-
Serves four tools over the MCP stdio transport, scoped to the
|
|
7
|
-
|
|
6
|
+
Serves four tools over the MCP stdio transport, scoped to the full stack —
|
|
7
|
+
`codex-pdf`, `lint-pdf`, `lens-pdf`, `compile-pdf`, `synergy`, `platform`,
|
|
8
|
+
`atlas`, `trove`, `sift-pdf`, `assay-pdf`, `trove-agent`, `artwork-pdf`,
|
|
9
|
+
`synergy-marketing`, `host-with-synergy`, `pdf-rd`, and `synergy-mcp` itself:
|
|
8
10
|
|
|
9
11
|
| Tool | What it answers |
|
|
10
12
|
| -------------------- | --------------------------------------------------------------------- |
|
|
11
13
|
| `blast_radius` | Who breaks if I change this symbol / route / env var? |
|
|
12
14
|
| `floor_pin_grid` | Which repo pins which org package, at which version? |
|
|
13
15
|
| `pattern_audit` | Which repos have CI / consume-surface / RFC 7807 / deep CLAUDE.md? |
|
|
14
|
-
| `stack_health_grid` | What does `/healthz` + `/v1/contract` say across the prod URLs?
|
|
16
|
+
| `stack_health_grid` | What does `/healthz` + `/readyz` + `/v1/contract` say across the prod URLs? |
|
|
15
17
|
|
|
16
18
|
Built to close gaps the cross-stack architecture audit surfaced — pin drift,
|
|
17
19
|
pattern divergence, "lens vs lens-server" naming collisions, ad-hoc health
|
|
@@ -26,7 +28,7 @@ npm install -g @printwithsynergy/synergy-mcp
|
|
|
26
28
|
|
|
27
29
|
## Configure
|
|
28
30
|
|
|
29
|
-
The server needs to know where your
|
|
31
|
+
The server needs to know where your stack repo working trees live. Two ways:
|
|
30
32
|
|
|
31
33
|
### 1. Stack root (recommended)
|
|
32
34
|
|
|
@@ -34,7 +36,10 @@ If you clone every repo into a single parent directory:
|
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
38
|
export SYNERGY_MCP_STACK_ROOT=$HOME/code/printwithsynergy
|
|
37
|
-
# expects
|
|
39
|
+
# expects sibling dirs named after each repo, e.g.
|
|
40
|
+
# $HOME/code/printwithsynergy/{codex-pdf,lint-pdf,lens-pdf,compile-pdf,synergy,
|
|
41
|
+
# platform,atlas,trove,sift-pdf,assay-pdf,trove-agent,artwork-pdf,
|
|
42
|
+
# synergy-marketing,host-with-synergy,pdf-rd,synergy-mcp}
|
|
38
43
|
```
|
|
39
44
|
|
|
40
45
|
### 2. Per-repo overrides
|
|
@@ -53,16 +58,21 @@ plus a `notes[]` entry naming the missing repo.
|
|
|
53
58
|
|
|
54
59
|
### Prod URLs (for `stack_health_grid` only)
|
|
55
60
|
|
|
56
|
-
Defaults match the production hostnames
|
|
57
|
-
|
|
61
|
+
Defaults match the current production hostnames; override per service. Repos
|
|
62
|
+
with no public HTTP surface (npm libraries, the Go daemon, static sites, docs,
|
|
63
|
+
internal-only services) default to no URL and are skipped with a `notes[]`
|
|
64
|
+
entry — set the matching env var to probe them:
|
|
58
65
|
|
|
59
66
|
```bash
|
|
60
|
-
export SYNERGY_MCP_URL_CODEX_PDF=https://codex.
|
|
61
|
-
export SYNERGY_MCP_URL_LINT_PDF=https://lintpdf.com
|
|
62
|
-
export
|
|
63
|
-
export
|
|
64
|
-
export
|
|
65
|
-
#
|
|
67
|
+
export SYNERGY_MCP_URL_CODEX_PDF=https://codex-pdf-production.up.railway.app # default
|
|
68
|
+
export SYNERGY_MCP_URL_LINT_PDF=https://lintpdf.com # default
|
|
69
|
+
export SYNERGY_MCP_URL_SYNERGY=https://synergy-api-production.up.railway.app # default
|
|
70
|
+
export SYNERGY_MCP_URL_PLATFORM=https://platform.printwithsynergy.com # default
|
|
71
|
+
export SYNERGY_MCP_URL_COMPILE_PDF=https://... # null by default (internal plumbing)
|
|
72
|
+
export SYNERGY_MCP_URL_ATLAS=https://... # null by default
|
|
73
|
+
export SYNERGY_MCP_URL_TROVE=https://... # null by default
|
|
74
|
+
export SYNERGY_MCP_URL_SIFT_PDF=https://... # null by default
|
|
75
|
+
# lens-pdf / assay-pdf / trove-agent / marketing / docs — no HTTP surface.
|
|
66
76
|
```
|
|
67
77
|
|
|
68
78
|
## Use from Claude Code
|
|
@@ -104,7 +114,7 @@ Returns per-hit `{ repo, file, line, text, kind }` where `kind` is one of
|
|
|
104
114
|
`import` | `usage` | `route` | `env`.
|
|
105
115
|
|
|
106
116
|
Implementation note: regex-based (Python `from X import Y`, TS
|
|
107
|
-
`import { Y } from 'X'`, plus bare-name usage). Not AST.
|
|
117
|
+
`import { Y } from 'X'`, Go import paths, plus bare-name usage). Not AST.
|
|
108
118
|
[`ctxo`](https://github.com/anthropics/code-review-graph) ships a real AST
|
|
109
119
|
backed blast-radius for TS/Go/C# but doesn't have a Python plugin yet; this
|
|
110
120
|
tool fills the gap with the working substitute that lint-pdf's `CLAUDE.md`
|
|
@@ -142,8 +152,9 @@ Probes are intentionally cheap (file existence, shallow grep). Audit findings
|
|
|
142
152
|
|
|
143
153
|
Optional `repos: ["codex-pdf", "synergy"]` to subset.
|
|
144
154
|
|
|
145
|
-
Each row: `{ repo, url, endpoint, status, latency_ms, body_summary }`.
|
|
146
|
-
|
|
155
|
+
Each row: `{ repo, url, endpoint, status, latency_ms, body_summary }`. Service
|
|
156
|
+
repos probe the converged org `/healthz` + `/readyz` + `/v1/contract` set (codex
|
|
157
|
+
predates `/readyz`; platform exposes only `/healthz` publicly).
|
|
147
158
|
|
|
148
159
|
## Develop
|
|
149
160
|
|
package/dist/config.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
export type RepoName = "codex-pdf" | "lint-pdf" | "lens-pdf" | "compile-pdf" | "synergy" | "platform";
|
|
1
|
+
export type RepoName = "codex-pdf" | "lint-pdf" | "lens-pdf" | "compile-pdf" | "synergy" | "platform" | "atlas" | "trove" | "sift-pdf" | "assay-pdf" | "trove-agent" | "artwork-pdf" | "synergy-marketing" | "host-with-synergy" | "pdf-rd" | "synergy-mcp";
|
|
2
2
|
export declare const KNOWN_REPOS: RepoName[];
|
|
3
|
-
/** Language tag drives which AST / pattern set to use.
|
|
4
|
-
|
|
3
|
+
/** Language tag drives which AST / pattern set to use.
|
|
4
|
+
* `docs` is markdown-only (pdf-rd) — blast_radius scans no source there. */
|
|
5
|
+
export type RepoLang = "python" | "typescript" | "go" | "docs";
|
|
5
6
|
export declare const REPO_LANG: Record<RepoName, RepoLang>;
|
|
6
|
-
/** Prod URLs for stack_health_grid. Override via env.
|
|
7
|
+
/** Prod URLs for stack_health_grid. Override via env (SYNERGY_MCP_URL_<REPO>).
|
|
8
|
+
* `null` = no public HTTP surface to probe (npm libraries, the Go daemon,
|
|
9
|
+
* static marketing sites, docs, internal-only services with no marketed URL).
|
|
10
|
+
* Even when the default is `null`, endpointsFor() still defines a repo's
|
|
11
|
+
* health paths so a caller-supplied SYNERGY_MCP_URL_<REPO> probes correctly. */
|
|
7
12
|
export declare const PROD_URLS: Record<RepoName, string | null>;
|
|
8
13
|
/** Resolve the working-tree path for a single repo, or null. */
|
|
9
14
|
export declare function resolveRepoPath(repo: RepoName): string | null;
|
|
10
|
-
/** Resolve
|
|
15
|
+
/** Resolve every known repo path. Missing repos appear as null. */
|
|
11
16
|
export declare function resolveAllRepoPaths(): Record<RepoName, string | null>;
|
|
12
17
|
/** True if any repo resolves; the caller can surface `config_missing`. */
|
|
13
18
|
export declare function hasAnyRepo(): boolean;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,UAAU,GACV,UAAU,GACV,aAAa,GACb,SAAS,GACT,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,UAAU,GACV,UAAU,GACV,aAAa,GACb,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,UAAU,GACV,WAAW,GACX,aAAa,GACb,aAAa,GACb,mBAAmB,GACnB,mBAAmB,GACnB,QAAQ,GACR,aAAa,CAAC;AAElB,eAAO,MAAM,WAAW,EAAE,QAAQ,EAiBjC,CAAC;AAEF;6EAC6E;AAC7E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI,GAAG,MAAM,CAAC;AAE/D,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAiBhD,CAAC;AAEF;;;;iFAIiF;AACjF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CA8BrD,CAAC;AAUF,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAMrE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Stack configuration.
|
|
3
3
|
*
|
|
4
|
-
* synergy-mcp serves a cross-stack dev-audit MCP over
|
|
4
|
+
* synergy-mcp serves a cross-stack dev-audit MCP over the repos in
|
|
5
5
|
* the Print With Synergy stack. It needs to know where each repo's
|
|
6
6
|
* working tree is on the host. Two ways to tell it:
|
|
7
7
|
*
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* (...one per repo). Highest priority.
|
|
10
10
|
* 2. Stack root env: SYNERGY_MCP_STACK_ROOT=/path/to/clones — assumes
|
|
11
11
|
* each repo is a sibling directory named after the repo. This is
|
|
12
|
-
* the common case when you clone
|
|
12
|
+
* the common case when you clone the whole stack into a single
|
|
13
13
|
* `printwithsynergy/` directory.
|
|
14
14
|
*
|
|
15
15
|
* If neither is set, the server starts but every tool returns an
|
|
@@ -25,23 +25,67 @@ export const KNOWN_REPOS = [
|
|
|
25
25
|
"compile-pdf",
|
|
26
26
|
"synergy",
|
|
27
27
|
"platform",
|
|
28
|
+
"atlas",
|
|
29
|
+
"trove",
|
|
30
|
+
"sift-pdf",
|
|
31
|
+
"assay-pdf",
|
|
32
|
+
"trove-agent",
|
|
33
|
+
"artwork-pdf",
|
|
34
|
+
"synergy-marketing",
|
|
35
|
+
"host-with-synergy",
|
|
36
|
+
"pdf-rd",
|
|
37
|
+
"synergy-mcp",
|
|
28
38
|
];
|
|
29
39
|
export const REPO_LANG = {
|
|
30
40
|
"codex-pdf": "python",
|
|
31
41
|
"lint-pdf": "python",
|
|
32
42
|
"compile-pdf": "python",
|
|
43
|
+
"sift-pdf": "python",
|
|
44
|
+
"assay-pdf": "python",
|
|
33
45
|
"lens-pdf": "typescript",
|
|
34
46
|
synergy: "typescript",
|
|
35
47
|
platform: "typescript",
|
|
48
|
+
atlas: "typescript",
|
|
49
|
+
trove: "typescript",
|
|
50
|
+
"artwork-pdf": "typescript",
|
|
51
|
+
"synergy-marketing": "typescript",
|
|
52
|
+
"host-with-synergy": "typescript",
|
|
53
|
+
"synergy-mcp": "typescript",
|
|
54
|
+
"trove-agent": "go",
|
|
55
|
+
"pdf-rd": "docs",
|
|
36
56
|
};
|
|
37
|
-
/** Prod URLs for stack_health_grid. Override via env.
|
|
57
|
+
/** Prod URLs for stack_health_grid. Override via env (SYNERGY_MCP_URL_<REPO>).
|
|
58
|
+
* `null` = no public HTTP surface to probe (npm libraries, the Go daemon,
|
|
59
|
+
* static marketing sites, docs, internal-only services with no marketed URL).
|
|
60
|
+
* Even when the default is `null`, endpointsFor() still defines a repo's
|
|
61
|
+
* health paths so a caller-supplied SYNERGY_MCP_URL_<REPO> probes correctly. */
|
|
38
62
|
export const PROD_URLS = {
|
|
39
|
-
|
|
63
|
+
// codex.lintpdf.com is retired; the canonical origin is the Railway service.
|
|
64
|
+
"codex-pdf": process.env.SYNERGY_MCP_URL_CODEX_PDF ??
|
|
65
|
+
"https://codex-pdf-production.up.railway.app",
|
|
40
66
|
"lint-pdf": process.env.SYNERGY_MCP_URL_LINT_PDF ?? "https://lintpdf.com",
|
|
41
|
-
|
|
67
|
+
// compile-pdf is now internal-only deterministic-writer plumbing (2026-06-18
|
|
68
|
+
// pivot) — consumed by synergy over a private network, no marketed public URL.
|
|
69
|
+
"compile-pdf": process.env.SYNERGY_MCP_URL_COMPILE_PDF ?? null,
|
|
42
70
|
"lens-pdf": null, // npm library — no prod URL
|
|
43
|
-
synergy
|
|
44
|
-
|
|
71
|
+
// synergy + platform are live (jwt-only auth cutover complete); default to
|
|
72
|
+
// their prod URLs so stack_health_grid probes them out of the box.
|
|
73
|
+
synergy: process.env.SYNERGY_MCP_URL_SYNERGY ??
|
|
74
|
+
"https://synergy-api-production.up.railway.app",
|
|
75
|
+
platform: process.env.SYNERGY_MCP_URL_PLATFORM ??
|
|
76
|
+
"https://platform.printwithsynergy.com",
|
|
77
|
+
// Service repos with no documented public prod URL — env-overridable.
|
|
78
|
+
atlas: process.env.SYNERGY_MCP_URL_ATLAS ?? null,
|
|
79
|
+
trove: process.env.SYNERGY_MCP_URL_TROVE ?? null,
|
|
80
|
+
"sift-pdf": process.env.SYNERGY_MCP_URL_SIFT_PDF ?? null,
|
|
81
|
+
// No HTTP surface: CLI, Go daemon (dials out over WS), static sites, docs, MCP.
|
|
82
|
+
"assay-pdf": null,
|
|
83
|
+
"trove-agent": null,
|
|
84
|
+
"artwork-pdf": process.env.SYNERGY_MCP_URL_ARTWORK_PDF ?? null,
|
|
85
|
+
"synergy-marketing": null,
|
|
86
|
+
"host-with-synergy": null,
|
|
87
|
+
"pdf-rd": null,
|
|
88
|
+
"synergy-mcp": null,
|
|
45
89
|
};
|
|
46
90
|
/**
|
|
47
91
|
* Map a RepoName to its env-var-friendly UPPERCASE_SNAKE form, e.g.
|
|
@@ -63,7 +107,7 @@ export function resolveRepoPath(repo) {
|
|
|
63
107
|
}
|
|
64
108
|
return null;
|
|
65
109
|
}
|
|
66
|
-
/** Resolve
|
|
110
|
+
/** Resolve every known repo path. Missing repos appear as null. */
|
|
67
111
|
export function resolveAllRepoPaths() {
|
|
68
112
|
const result = {};
|
|
69
113
|
for (const repo of KNOWN_REPOS) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Synergy stack. Serves four tools over stdio:
|
|
5
5
|
*
|
|
6
6
|
* - blast_radius — find every call site of a symbol / route / env
|
|
7
|
-
* var across the
|
|
7
|
+
* var across the configured stack repos.
|
|
8
8
|
* - floor_pin_grid — the (repo × org-package × version-spec) matrix.
|
|
9
9
|
* - pattern_audit — the (repo × architectural-pattern) matrix.
|
|
10
|
-
* - stack_health_grid — parallel /healthz + /v1/contract
|
|
11
|
-
* across the prod URLs.
|
|
10
|
+
* - stack_health_grid — parallel /healthz + /readyz + /v1/contract
|
|
11
|
+
* probes across the prod URLs.
|
|
12
12
|
*
|
|
13
13
|
* Configuration is via environment variables — see ./config.ts.
|
|
14
14
|
* Designed to run from Claude Code via `npx @printwithsynergy/synergy-mcp`
|
|
@@ -24,11 +24,11 @@ import { FloorPinGridInput, floorPinGrid } from "./tools/floor-pin-grid.js";
|
|
|
24
24
|
import { PatternAuditInput, patternAudit } from "./tools/pattern-audit.js";
|
|
25
25
|
import { StackHealthGridInput, stackHealthGrid, } from "./tools/stack-health-grid.js";
|
|
26
26
|
const SERVER_NAME = "synergy-mcp";
|
|
27
|
-
const SERVER_VERSION = "0.
|
|
27
|
+
const SERVER_VERSION = "0.2.0";
|
|
28
28
|
const TOOLS = [
|
|
29
29
|
{
|
|
30
30
|
name: "blast_radius",
|
|
31
|
-
description: "Find every call site of a symbol, HTTP route, or env var across the printwithsynergy stack
|
|
31
|
+
description: "Find every call site of a symbol, HTTP route, or env var across the printwithsynergy stack (codex-pdf, lint-pdf, lens-pdf, compile-pdf, synergy, platform, atlas, trove, sift-pdf, assay-pdf, trove-agent, and the rest). Use to answer 'who breaks if I change X?' before refactoring across the seam.",
|
|
32
32
|
schema: BlastRadiusInput,
|
|
33
33
|
handler: blastRadius,
|
|
34
34
|
},
|
|
@@ -46,7 +46,7 @@ const TOOLS = [
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
name: "stack_health_grid",
|
|
49
|
-
description: "Fetch /healthz and /v1/contract (where exposed) across the configured prod URLs for the stack, in parallel, returning status code + latency + body summary per probe. Branches per-repo
|
|
49
|
+
description: "Fetch /healthz, /readyz, and /v1/contract (where exposed) across the configured prod URLs for the stack, in parallel, returning status code + latency + body summary per probe. Branches per-repo around the converged org health-endpoint convention.",
|
|
50
50
|
schema: StackHealthGridInput,
|
|
51
51
|
handler: stackHealthGrid,
|
|
52
52
|
},
|
|
@@ -121,7 +121,7 @@ async function main() {
|
|
|
121
121
|
content: [
|
|
122
122
|
{
|
|
123
123
|
type: "text",
|
|
124
|
-
text: "No repos configured. Set SYNERGY_MCP_STACK_ROOT to the directory containing your
|
|
124
|
+
text: "No repos configured. Set SYNERGY_MCP_STACK_ROOT to the directory containing your stack repo clones, or SYNERGY_MCP_PATH_<REPO> per-repo (e.g. SYNERGY_MCP_PATH_CODEX_PDF=/path/to/codex-pdf).",
|
|
125
125
|
},
|
|
126
126
|
],
|
|
127
127
|
isError: true,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,cAAc,GAAG,OAAO,CAAC;AAgB/B,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,cAAc,GAAG,OAAO,CAAC;AAgB/B,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,ySAAyS;QAC3S,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,WAAW;KACsB;IAC5C;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,kQAAkQ;QACpQ,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,YAAY;KACsB;IAC7C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,6RAA6R;QAC/R,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,YAAY;KACsB;IAC7C;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,wPAAwP;QAC1P,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,eAAe;KACsB;CACxC,CAAC;AAEX,2DAA2D;AAC3D,SAAS,YAAY,CACnB,GAA+B;IAE/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAmB,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC;QACnD,MAAM,KAAK,GAA4B,EAAE,WAAW,EAAE,CAAC;QACvD,IAAI,KAAK,GAAiB,KAAK,CAAC;QAChC,IAAI,KAAK,YAAY,CAAC,CAAC,WAAW,IAAI,KAAK,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;YACpE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAyB,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;YACtB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;YACrB,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACxB,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,MAAM,GAAG,GAA4B;QACnC,IAAI,EAAE,QAAQ;QACd,UAAU;KACX,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;gBACnE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAClD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+LAA+L;qBACtM;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,yBAAyB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;qBAC/D;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAa,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACjE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC;gBAChE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,6CAA6C;AAC/C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blast-radius.d.ts","sourceRoot":"","sources":["../../src/tools/blast-radius.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAyB3B,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"blast-radius.d.ts","sourceRoot":"","sources":["../../src/tools/blast-radius.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAyB3B,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CAC5C;AAwKD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CA2B5B"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* sites.
|
|
5
5
|
*
|
|
6
6
|
* V1 uses ripgrep-style regex matching tuned to the language of
|
|
7
|
-
* each repo (Python
|
|
7
|
+
* each repo (Python / TypeScript / Go). It's not full AST analysis —
|
|
8
8
|
* ctxo (https://github.com/anthropics/code-review-graph) does that
|
|
9
9
|
* for TS/Go/C# but doesn't ship a Python plugin yet. Grep is the
|
|
10
10
|
* working substitute that lint-pdf's CLAUDE.md already calls out.
|
|
@@ -56,8 +56,9 @@ function buildPatterns(target, kind, lang) {
|
|
|
56
56
|
re: new RegExp(
|
|
57
57
|
// TS: process.env.X, process.env['X'], process.env["X"]
|
|
58
58
|
// Python: os.getenv("X"), os.environ["X"], os.environ.get("X")
|
|
59
|
+
// Go: os.Getenv("X"), os.LookupEnv("X")
|
|
59
60
|
// YAML: X: value
|
|
60
|
-
`(?:process\\.env(?:\\.${t}|\\[['"]${t}['"]\\]))|(?:os\\.getenv\\(['"]${t}['"]\\))|(?:os\\.environ(?:\\[['"]${t}['"]\\]|\\.get\\(['"]${t}['"]\\)))|(?:^\\s*${t}\\s*:)`, "m"),
|
|
61
|
+
`(?:process\\.env(?:\\.${t}|\\[['"]${t}['"]\\]))|(?:os\\.(?:getenv|Getenv|LookupEnv)\\(['"]${t}['"]\\))|(?:os\\.environ(?:\\[['"]${t}['"]\\]|\\.get\\(['"]${t}['"]\\)))|(?:^\\s*${t}\\s*:)`, "m"),
|
|
61
62
|
},
|
|
62
63
|
];
|
|
63
64
|
}
|
|
@@ -77,7 +78,17 @@ function buildPatterns(target, kind, lang) {
|
|
|
77
78
|
re: new RegExp(`^\\s*from\\s+\\S+\\s+import\\s+[^#]*\\b${t}\\b`, "m"),
|
|
78
79
|
});
|
|
79
80
|
}
|
|
81
|
+
else if (lang === "go") {
|
|
82
|
+
// Go imports are by path, not symbol; an import line mentioning the
|
|
83
|
+
// target catches aliased/named imports. Call sites (`pkg.Symbol`) are
|
|
84
|
+
// caught by the shared bare-name `usage` pattern below.
|
|
85
|
+
patterns.push({
|
|
86
|
+
kind: "import",
|
|
87
|
+
re: new RegExp(`^\\s*(?:[A-Za-z0-9_]+\\s+)?["'][^"']*${t}[^"']*["']`, "m"),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
80
90
|
else {
|
|
91
|
+
// typescript (and the docs lang, which scans no source files)
|
|
81
92
|
patterns.push({
|
|
82
93
|
kind: "import",
|
|
83
94
|
re: new RegExp(`^\\s*import\\s+(?:[^;]*\\{[^}]*\\b${t}\\b[^}]*\\}|\\*\\s+as\\s+${t}|${t})`, "m"),
|
|
@@ -98,6 +109,7 @@ const SOURCE_EXT = new Set([
|
|
|
98
109
|
".cjs",
|
|
99
110
|
".py",
|
|
100
111
|
".pyi",
|
|
112
|
+
".go",
|
|
101
113
|
".yml",
|
|
102
114
|
".yaml",
|
|
103
115
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blast-radius.js","sourceRoot":"","sources":["../../src/tools/blast-radius.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAc,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EAGT,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,sJAAsJ,CACvJ;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACpC,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CACP,4LAA4L,CAC7L;IACH,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF,CACnF;IACH,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,oDAAoD,CAAC;CAClE,CAAC,CAAC;AAUH,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,IAA8C,EAC9C,IAAc;IAEd,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL;gBACE,IAAI,EAAE,KAAc;gBACpB,EAAE,EAAE,IAAI,MAAM;gBACZ,wDAAwD;gBACxD,+DAA+D;gBAC/D,iBAAiB;gBACjB,yBAAyB,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"blast-radius.js","sourceRoot":"","sources":["../../src/tools/blast-radius.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-pin-grid.d.ts","sourceRoot":"","sources":["../../src/tools/floor-pin-grid.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAE/E,eAAO,MAAM,iBAAiB;;;;;;EAO5B,CAAC;AAEH,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"floor-pin-grid.d.ts","sourceRoot":"","sources":["../../src/tools/floor-pin-grid.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAE/E,eAAO,MAAM,iBAAiB;;;;;;EAO5B,CAAC;AAEH,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AA0GD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACvC,OAAO,CAAC,kBAAkB,CAAC,CA8B7B"}
|
|
@@ -21,14 +21,25 @@ export const FloorPinGridInput = z.object({
|
|
|
21
21
|
.optional()
|
|
22
22
|
.describe("Optional package-name filter (e.g. 'codex-pdf' or '@printwithsynergy/lens-pdf'). When omitted, returns rows for every detected org package across every repo."),
|
|
23
23
|
});
|
|
24
|
-
/** Known org package names worth surfacing in the grid.
|
|
24
|
+
/** Known org package names worth surfacing in the grid.
|
|
25
|
+
*
|
|
26
|
+
* compile-pdf's per-producer satellite wheels
|
|
27
|
+
* (`compile-pdf-{rewrite,marks,impose,trap,…}`) are intentionally omitted —
|
|
28
|
+
* they're internal to compile-pdf's own monorepo, not cross-repo-consumed.
|
|
29
|
+
* Add one only if it starts appearing in another repo's manifest. */
|
|
25
30
|
const ORG_PACKAGES = [
|
|
31
|
+
// Python engines / CLIs (PyPI)
|
|
26
32
|
"codex-pdf",
|
|
27
33
|
"lint-pdf",
|
|
28
34
|
"compile-pdf",
|
|
35
|
+
"sift-pdf",
|
|
36
|
+
"assay-pdf",
|
|
37
|
+
"synergy-sdk",
|
|
38
|
+
// TS clients + libraries (npm)
|
|
29
39
|
"@printwithsynergy/codex-client",
|
|
30
40
|
"@printwithsynergy/lens-pdf",
|
|
31
41
|
"@printwithsynergy/client",
|
|
42
|
+
"@printwithsynergy/atlas-adapter-sdk",
|
|
32
43
|
"@printwithsynergy/synergy-mcp",
|
|
33
44
|
];
|
|
34
45
|
function isOrgPackage(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-pin-grid.js","sourceRoot":"","sources":["../../src/tools/floor-pin-grid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAiB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,+JAA+J,CAChK;CACJ,CAAC,CAAC;AAWH
|
|
1
|
+
{"version":3,"file":"floor-pin-grid.js","sourceRoot":"","sources":["../../src/tools/floor-pin-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* stack_health_grid — fetch /healthz (and /v1/contract when
|
|
3
|
-
* across the configured prod URLs for the stack, in
|
|
4
|
-
* return a grid with status code + latency + version skew.
|
|
2
|
+
* stack_health_grid — fetch /healthz (and /readyz + /v1/contract when
|
|
3
|
+
* available) across the configured prod URLs for the stack, in
|
|
4
|
+
* parallel, and return a grid with status code + latency + version skew.
|
|
5
5
|
*
|
|
6
|
-
* Audit finding #15 in the cross-stack audit caught
|
|
7
|
-
* health/contract endpoint
|
|
8
|
-
*
|
|
6
|
+
* Audit finding #15 in the cross-stack audit caught divergent
|
|
7
|
+
* health/contract endpoint shapes. The stack has since largely
|
|
8
|
+
* converged on the org `/healthz` + `/readyz` + `/v1/contract`
|
|
9
|
+
* convention; this tool branches per-service so the few repos that
|
|
10
|
+
* predate it (e.g. codex, which exposes `/healthz` + `/v1/contract`
|
|
11
|
+
* but no `/readyz`) still probe correctly.
|
|
9
12
|
*/
|
|
10
13
|
import { z } from "zod";
|
|
11
14
|
import { type RepoName } from "../config.js";
|
|
@@ -22,7 +25,7 @@ export declare const StackHealthGridInput: z.ZodObject<{
|
|
|
22
25
|
export interface HealthRow {
|
|
23
26
|
repo: RepoName;
|
|
24
27
|
url: string;
|
|
25
|
-
endpoint: "healthz" | "
|
|
28
|
+
endpoint: "healthz" | "readyz" | "v1/contract";
|
|
26
29
|
status: number | "timeout" | "error";
|
|
27
30
|
latency_ms: number | null;
|
|
28
31
|
body_summary: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-health-grid.d.ts","sourceRoot":"","sources":["../../src/tools/stack-health-grid.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stack-health-grid.d.ts","sourceRoot":"","sources":["../../src/tools/stack-health-grid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErE,eAAO,MAAM,oBAAoB;;;;;;;;;EAe/B,CAAC;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAqED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAC1C,OAAO,CAAC,qBAAqB,CAAC,CAmChC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* stack_health_grid — fetch /healthz (and /v1/contract when
|
|
3
|
-
* across the configured prod URLs for the stack, in
|
|
4
|
-
* return a grid with status code + latency + version skew.
|
|
2
|
+
* stack_health_grid — fetch /healthz (and /readyz + /v1/contract when
|
|
3
|
+
* available) across the configured prod URLs for the stack, in
|
|
4
|
+
* parallel, and return a grid with status code + latency + version skew.
|
|
5
5
|
*
|
|
6
|
-
* Audit finding #15 in the cross-stack audit caught
|
|
7
|
-
* health/contract endpoint
|
|
8
|
-
*
|
|
6
|
+
* Audit finding #15 in the cross-stack audit caught divergent
|
|
7
|
+
* health/contract endpoint shapes. The stack has since largely
|
|
8
|
+
* converged on the org `/healthz` + `/readyz` + `/v1/contract`
|
|
9
|
+
* convention; this tool branches per-service so the few repos that
|
|
10
|
+
* predate it (e.g. codex, which exposes `/healthz` + `/v1/contract`
|
|
11
|
+
* but no `/readyz`) still probe correctly.
|
|
9
12
|
*/
|
|
10
13
|
import { z } from "zod";
|
|
11
14
|
import { KNOWN_REPOS, PROD_URLS } from "../config.js";
|
|
@@ -21,31 +24,29 @@ export const StackHealthGridInput = z.object({
|
|
|
21
24
|
.default(5000)
|
|
22
25
|
.describe("Per-request timeout in ms. The whole grid still resolves; rows that time out get `status: 'timeout'`."),
|
|
23
26
|
});
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
const HEALTHZ = { endpoint: "healthz", path: "/healthz" };
|
|
28
|
+
const READYZ = { endpoint: "readyz", path: "/readyz" };
|
|
29
|
+
const CONTRACT = { endpoint: "v1/contract", path: "/v1/contract" };
|
|
30
|
+
/** Per-repo endpoint discovery. Service repos expose the converged org
|
|
31
|
+
* `/healthz` + `/readyz` + `/v1/contract` set; codex predates `/readyz`,
|
|
32
|
+
* and platform exposes only `/healthz` publicly. Non-HTTP repos (npm
|
|
33
|
+
* libraries, the Go daemon, static sites, docs, the MCP itself) return
|
|
34
|
+
* no probes via the `default`. */
|
|
26
35
|
function endpointsFor(repo) {
|
|
27
36
|
switch (repo) {
|
|
28
37
|
case "codex-pdf":
|
|
29
|
-
return [
|
|
30
|
-
{ endpoint: "v1/healthz", path: "/v1/healthz" },
|
|
31
|
-
{ endpoint: "v1/contract", path: "/v1/contract" },
|
|
32
|
-
];
|
|
38
|
+
return [HEALTHZ, CONTRACT]; // no /readyz
|
|
33
39
|
case "lint-pdf":
|
|
34
|
-
return [
|
|
35
|
-
{ endpoint: "health", path: "/health" },
|
|
36
|
-
{ endpoint: "ready", path: "/ready" },
|
|
37
|
-
];
|
|
38
40
|
case "compile-pdf":
|
|
39
|
-
return [
|
|
40
|
-
{ endpoint: "v1/healthz", path: "/v1/healthz" },
|
|
41
|
-
{ endpoint: "v1/contract", path: "/v1/contract" },
|
|
42
|
-
];
|
|
43
41
|
case "synergy":
|
|
44
|
-
|
|
42
|
+
case "atlas":
|
|
43
|
+
case "trove":
|
|
44
|
+
case "sift-pdf":
|
|
45
|
+
return [HEALTHZ, READYZ, CONTRACT];
|
|
45
46
|
case "platform":
|
|
46
|
-
return [
|
|
47
|
-
|
|
48
|
-
return []; //
|
|
47
|
+
return [HEALTHZ];
|
|
48
|
+
default:
|
|
49
|
+
return []; // no HTTP surface to probe
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
async function probe(url, timeout_ms) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-health-grid.js","sourceRoot":"","sources":["../../src/tools/stack-health-grid.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stack-health-grid.js","sourceRoot":"","sources":["../../src/tools/stack-health-grid.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@printwithsynergy/synergy-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Cross-stack dev-audit MCP server for the Print With Synergy stack — blast-radius queries, floor-pin grid, pattern audit, and stack health grid across codex-pdf / lint-pdf / lens-pdf / compile-pdf / synergy / platform.",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Cross-stack dev-audit MCP server for the Print With Synergy stack — blast-radius queries, floor-pin grid, pattern audit, and stack health grid across the full stack (codex-pdf / lint-pdf / lens-pdf / compile-pdf / synergy / platform / atlas / trove / sift-pdf / assay-pdf / trove-agent and more).",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|