projectionlab-mcp 1.1.0 → 1.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/HOW-IT-WORKS.md +2 -2
- package/README.md +1 -0
- package/REFERENCE.md +11 -2
- package/dist/bootstrap.js +5 -3
- package/dist/bootstrap.js.map +1 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +41 -6
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -1
- package/dist/extensionBridge.d.ts +14 -1
- package/dist/extensionBridge.js +74 -20
- package/dist/extensionBridge.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.js +1 -1
- package/dist/largeOutput.js +25 -0
- package/dist/largeOutput.js.map +1 -1
- package/dist/logger.js +11 -4
- package/dist/logger.js.map +1 -1
- package/dist/pathPatch.js +5 -0
- package/dist/pathPatch.js.map +1 -1
- package/dist/plans.d.ts +45 -10
- package/dist/plans.js +139 -42
- package/dist/plans.js.map +1 -1
- package/dist/redact.d.ts +24 -0
- package/dist/redact.js +91 -0
- package/dist/redact.js.map +1 -1
- package/dist/resources/planData.js +3 -1
- package/dist/resources/planData.js.map +1 -1
- package/dist/resources/summary.js +4 -1
- package/dist/resources/summary.js.map +1 -1
- package/dist/snapshot.js +18 -11
- package/dist/snapshot.js.map +1 -1
- package/dist/tools/clonePlan.js +3 -3
- package/dist/tools/clonePlan.js.map +1 -1
- package/dist/tools/connection.js +21 -3
- package/dist/tools/connection.js.map +1 -1
- package/dist/tools/diff.js +7 -7
- package/dist/tools/diff.js.map +1 -1
- package/dist/tools/getPlan.js +4 -4
- package/dist/tools/getPlan.js.map +1 -1
- package/dist/tools/getPlanSection.js +5 -5
- package/dist/tools/getPlanSection.js.map +1 -1
- package/dist/tools/getPlanSettings.js +3 -3
- package/dist/tools/getPlanSettings.js.map +1 -1
- package/dist/tools/restore.js +18 -1
- package/dist/tools/restore.js.map +1 -1
- package/dist/tools/snapshots.js +17 -1
- package/dist/tools/snapshots.js.map +1 -1
- package/dist/tools/updatePlanEvent.js +63 -37
- package/dist/tools/updatePlanEvent.js.map +1 -1
- package/dist/tools/updatePlanSection.js +11 -6
- package/dist/tools/updatePlanSection.js.map +1 -1
- package/dist/tools/updatePlanSettings.js +3 -3
- package/dist/tools/updatePlanSettings.js.map +1 -1
- package/dist/types/wire.d.ts +27 -2
- package/dist/types/wire.js +6 -2
- package/dist/types/wire.js.map +1 -1
- package/dist/updateCheck.d.ts +22 -0
- package/dist/updateCheck.js +58 -0
- package/dist/updateCheck.js.map +1 -0
- package/dist/versionCompare.d.ts +5 -0
- package/dist/versionCompare.js +33 -0
- package/dist/versionCompare.js.map +1 -0
- package/dist/versionNotices.d.ts +9 -0
- package/dist/versionNotices.js +42 -0
- package/dist/versionNotices.js.map +1 -0
- package/package.json +1 -1
- package/skills/projectionlab/SKILL.md +55 -15
package/HOW-IT-WORKS.md
CHANGED
|
@@ -18,13 +18,13 @@ The server opens a WebSocket listener on `127.0.0.1:<PL_WS_PORT>`. A browser-sid
|
|
|
18
18
|
|
|
19
19
|
`src/types/wire.ts` is the contract shared by the server and every executor:
|
|
20
20
|
|
|
21
|
-
- The executor connects and sends a `hello` frame with a shared token
|
|
21
|
+
- The executor connects and sends a `hello` frame with a shared token, the protocol version, and an `instanceId` (a stable id for the installation: the extension persists one UUID, the snippet generates one per page load). The server validates the `Origin` header (extension or app origin only), checks the token, and replies `helloAck`, or closes with code `4001` (auth), `4002` (version), `4003` (a takeover replaced this executor), or `4004` (busy: another executor holds the connection, retry later). The server keeps one active executor and the incumbent keeps it: a second authenticated executor is refused with `4004`, retries on a slow schedule, and connects by itself when the active one goes away. It takes over only by sending `takeover: true` in the hello (the extension does that when the user presses Save on its options page) or by repeating the incumbent's `instanceId`, which lets an executor replace its own stale socket. The `helloAck` carries the server's release version in `serverVersion` so the extension can show a mismatch line; executors that ignore the field are unaffected, and servers older than the field simply omit it.
|
|
22
22
|
- Requests are `{ id, method, params }`; responses are `{ id, ok, result | error }`. Methods map directly to Plugin API calls plus `describeApi`/`waitForApi`.
|
|
23
23
|
- A ~20 s `ping`/`pong` heartbeat keeps the connection healthy (and keeps a Manifest V3 service worker from being suspended).
|
|
24
24
|
|
|
25
25
|
### The browser extension
|
|
26
26
|
|
|
27
|
-
Manifest V3, in `extension/`. A background service worker owns the WebSocket, reconnects with exponential backoff, and uses an `alarms` wake after suspension. For each request it locates a ProjectionLab tab (opening one in the background when configured to do so) and uses `scripting.executeScript` to run the operation directly in the page's **MAIN world**, where `window.projectionlabPluginAPI` is visible. The structured result returns through the scripting API without a content-script relay. Chrome/Edge/Brave use the service-worker manifest; Firefox 140 or newer uses an event-page manifest with MAIN-world scripting support.
|
|
27
|
+
Manifest V3, in `extension/`. A background service worker owns the WebSocket, reconnects with exponential backoff, and uses an `alarms` wake after suspension. An authentication refusal (bad token or protocol mismatch) blocks reconnecting; the block is stored in `storage.session` so the alarm-driven worker restarts honor it, and saving the options page clears it (Save also asks the server for a takeover, making this browser the active one even when no field was edited). A takeover (4003) or a busy refusal (4004) does not block: the extension shows "Standing by", retries at least 30 seconds apart, and connects on its own once the active browser disconnects. For each request it locates a ProjectionLab tab (opening one in the background when configured to do so) and uses `scripting.executeScript` to run the operation directly in the page's **MAIN world**, where `window.projectionlabPluginAPI` is visible. The structured result returns through the scripting API without a content-script relay. Chrome/Edge/Brave use the service-worker manifest; Firefox 140 or newer uses an event-page manifest with MAIN-world scripting support.
|
|
28
28
|
|
|
29
29
|
### The bootstrap snippet
|
|
30
30
|
|
package/README.md
CHANGED
|
@@ -44,6 +44,7 @@ Prefer to set it up yourself? See **[Manual setup](https://github.com/Backroads4
|
|
|
44
44
|
- **Undo.** Every confirmed change is backed up first, so it can be rolled back.
|
|
45
45
|
- **No overwriting your edits.** If a plan was saved in ProjectionLab after the assistant read it, the change is refused rather than overwriting your edit.
|
|
46
46
|
- **Stays on your computer.** Your API key and the connection token are stored only on your computer, and the browser connects only to the server running there.
|
|
47
|
+
- **Update-aware.** Your assistant mentions it once when a newer release is available; the server reads the latest release number from npm once per start (`PL_UPDATE_CHECK=false` turns that off).
|
|
47
48
|
|
|
48
49
|
Details are in the [safety model](https://github.com/Backroads4Me/projectionlab-mcp/blob/main/REFERENCE.md#safety-model) and [Privacy](https://github.com/Backroads4Me/projectionlab-mcp/blob/main/PRIVACY.md).
|
|
49
50
|
|
package/REFERENCE.md
CHANGED
|
@@ -89,13 +89,14 @@ The server starts without `PL_API_KEY` so it can tell the agent what is missing;
|
|
|
89
89
|
| `PL_PRETTY_JSON` | No | `false` | Pretty-print JSON output (uses ~25–40% more tokens) |
|
|
90
90
|
| `PL_READ_ONLY` | No | `true` | Write/mutation tools are disabled unless this is exactly `false` |
|
|
91
91
|
| `PL_SNAPSHOT_DIR` | No | `~/.projectionlab-mcp/snapshots` | Directory for pre-mutation snapshots |
|
|
92
|
+
| `PL_UPDATE_CHECK` | No | `true` | One request to `registry.npmjs.org` per start to read the latest release number; off only when this is exactly `false` |
|
|
92
93
|
| `LOG_LEVEL` | No | `info` | Log verbosity (`debug`, `info`, `warn`, `error`) |
|
|
93
94
|
|
|
94
95
|
## Available tools
|
|
95
96
|
|
|
96
97
|
| Tool | Description | Mutates |
|
|
97
98
|
|---|---|---|
|
|
98
|
-
| `projectionlab_check_connection` | Verify browser + API connectivity | No |
|
|
99
|
+
| `projectionlab_check_connection` | Verify browser + API connectivity; the result also carries `versions` (server, executor, latest npm release) and `notices` (plain-language update messages) | No |
|
|
99
100
|
| `projectionlab_get_bootstrap` | Return a console snippet to connect a ProjectionLab tab | No |
|
|
100
101
|
| `projectionlab_describe_plugin_api` | Describe the available Plugin API surface | No |
|
|
101
102
|
| `projectionlab_describe_schema` | Describe the data schema (plan names, account IDs) | No |
|
|
@@ -144,6 +145,10 @@ Write operations (`update_*`, `restore_*`, `clone_plan`, `delete_plan`) default
|
|
|
144
145
|
|
|
145
146
|
Every write that replaces the plans array re-reads the plans just before writing and refuses with `PLAN_CONFLICT` if any plan was added, removed, or saved in ProjectionLab since the tool read them, so an edit made in the ProjectionLab UI is never silently overwritten. `projectionlab_update_plan_section` also returns a `planVersion` in its dry run; pass it back as `expectedPlanVersion` when confirming to refuse the write if the plan was saved after the preview.
|
|
146
147
|
|
|
148
|
+
Plan reads hide secret values: a secret-named field (`apiKey`, `token`, `password`, …) comes back as `[REDACTED]`. A payload for `projectionlab_update_plan_section` or any `restore_*` tool that still holds that sentinel under a secret-named key is refused with `INVALID_INPUT`, dry runs included, naming the offending dot paths. Supply the real value, or change single fields with `projectionlab_update_plan_event` or `projectionlab_update_plan_settings`, which patch by path and never round-trip hidden values.
|
|
149
|
+
|
|
150
|
+
`projectionlab_update_plan_section` also refuses `sectionData` that does not match the section's current container shape (array for milestones, `{ events: [...] }` for event sections, plain object for `variables`, `montecarlo` and `withdrawalStrategy`), so a wrong or omitted payload can never delete a section or change its type.
|
|
151
|
+
|
|
147
152
|
For a small assumptions or strategy change, first call
|
|
148
153
|
`projectionlab_get_plan_settings` with the plan name. It returns the current
|
|
149
154
|
`variables`, `montecarlo`, and `withdrawalStrategy` values as dot paths with
|
|
@@ -171,7 +176,11 @@ Event forms use the same path workflow. Fetch one event with
|
|
|
171
176
|
`projectionlab_get_plan_section` using its `eventIdentifier` and
|
|
172
177
|
`"listPaths": true`, then pass selected paths to
|
|
173
178
|
`projectionlab_update_plan_event` as `pathChanges`. The older `patch` input
|
|
174
|
-
remains available for shallow top-level changes
|
|
179
|
+
remains available for shallow top-level changes: existing fields are
|
|
180
|
+
validated like `pathChanges` (same JSON type, secret-named fields refused)
|
|
181
|
+
and new fields must be plain, non-secret names. Both inputs report each
|
|
182
|
+
dry-run change as `{ "before": ..., "after": ... }`; a field the patch adds
|
|
183
|
+
reports `"before": "[ABSENT]"`.
|
|
175
184
|
|
|
176
185
|
Current Finances accounts also support targeted discovery and nested patches.
|
|
177
186
|
Call `projectionlab_get_current_finances` with an exact `accountId` and
|
package/dist/bootstrap.js
CHANGED
|
@@ -32,6 +32,7 @@ export function buildBootstrapSnippet(port, token) {
|
|
|
32
32
|
if (window.__plmcpBootstrap) { console.log("[plmcp] bootstrap already running"); return; }
|
|
33
33
|
window.__plmcpBootstrap = true;
|
|
34
34
|
let stopped = false;
|
|
35
|
+
const instanceId = crypto.randomUUID();
|
|
35
36
|
const log = (m) => console.log("[plmcp]", m);
|
|
36
37
|
function waitForApi(timeoutMs) {
|
|
37
38
|
return new Promise((resolve, reject) => {
|
|
@@ -75,14 +76,14 @@ export function buildBootstrapSnippet(port, token) {
|
|
|
75
76
|
} catch (err) {
|
|
76
77
|
const msg = err && err.message ? err.message : String(err);
|
|
77
78
|
const code = err && err.code === "API_NOT_AVAILABLE" ? "API_NOT_AVAILABLE"
|
|
78
|
-
: /api.?key|invalid key|unauthori[sz]ed|forbidden
|
|
79
|
+
: /api.?key|invalid key|unauthori[sz]ed|forbidden|\\b401\\b|\\b403\\b/i.test(msg) ? "API_KEY_INVALID" : "UNKNOWN";
|
|
79
80
|
ws.send(JSON.stringify({ type: "response", id: frame.id, ok: false, error: { code, message: msg } }));
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
function connect() {
|
|
83
84
|
if (stopped) return;
|
|
84
85
|
const ws = new WebSocket("ws://127.0.0.1:" + cfg.port);
|
|
85
|
-
ws.onopen = () => ws.send(JSON.stringify({ type: "hello", token: cfg.token, protocolVersion: cfg.protocolVersion, executor: cfg.executor }));
|
|
86
|
+
ws.onopen = () => ws.send(JSON.stringify({ type: "hello", token: cfg.token, protocolVersion: cfg.protocolVersion, executor: cfg.executor, instanceId }));
|
|
86
87
|
ws.onmessage = (ev) => {
|
|
87
88
|
let frame;
|
|
88
89
|
try { frame = JSON.parse(ev.data); } catch { return; }
|
|
@@ -93,7 +94,8 @@ export function buildBootstrapSnippet(port, token) {
|
|
|
93
94
|
ws.onclose = (ev) => {
|
|
94
95
|
if (stopped) return;
|
|
95
96
|
if (ev.code === 4001 || ev.code === 4002) { stopped = true; window.__plmcpBootstrap = false; log("stopped: " + (ev.reason || ev.code)); return; }
|
|
96
|
-
if (ev.code ===
|
|
97
|
+
if (ev.code === 4004) { log("another executor is connected; this tab will connect if that one goes away (retrying in 30s)"); setTimeout(connect, 30000); return; }
|
|
98
|
+
if (ev.code === 4003) { log("another executor took over the connection (retrying in 30s)"); setTimeout(connect, 30000); return; }
|
|
97
99
|
log("disconnected; retrying in 3s");
|
|
98
100
|
setTimeout(connect, 3000);
|
|
99
101
|
};
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;uEACuE;AACvE,MAAM,cAAc,GAAiE;IACnF,YAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,KAAa;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI;QACJ,KAAK;QACL,eAAe,EAAE,gBAAgB;QACjC,QAAQ,EAAE,aAAa,OAAO,EAAE;KACjC,CAAC,CAAC;IACH,OAAO;gBACO,GAAG;2BACQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;uEACuE;AACvE,MAAM,cAAc,GAAiE;IACnF,YAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,KAAa;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI;QACJ,KAAK;QACL,eAAe,EAAE,gBAAgB;QACjC,QAAQ,EAAE,aAAa,OAAO,EAAE;KACjC,CAAC,CAAC;IACH,OAAO;gBACO,GAAG;2BACQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0EnD,CAAC;AACP,CAAC"}
|
package/dist/bridge.d.ts
CHANGED
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Per-user config file shared by every MCP host on the machine. */
|
|
2
2
|
export declare const USER_ENV_FILE: string;
|
|
3
|
+
declare const LOG_LEVELS: readonly ["error", "warn", "info", "debug"];
|
|
4
|
+
export type LogLevel = (typeof LOG_LEVELS)[number];
|
|
3
5
|
export declare const config: {
|
|
4
6
|
readonly apiKey: string | undefined;
|
|
5
7
|
readonly wsPort: number;
|
|
@@ -9,7 +11,9 @@ export declare const config: {
|
|
|
9
11
|
readonly exportCacheMs: number;
|
|
10
12
|
readonly prettyJson: boolean;
|
|
11
13
|
readonly readOnly: boolean;
|
|
14
|
+
readonly updateCheck: boolean;
|
|
12
15
|
readonly snapshotDir: string;
|
|
13
16
|
readonly logLevel: "error" | "warn" | "info" | "debug";
|
|
14
17
|
};
|
|
15
18
|
export type Config = typeof config;
|
|
19
|
+
export {};
|
package/dist/config.js
CHANGED
|
@@ -23,6 +23,36 @@ function optionalInt(name, fallback) {
|
|
|
23
23
|
}
|
|
24
24
|
return value;
|
|
25
25
|
}
|
|
26
|
+
/** A listen port: all digits, 1 to 65535. parseInt alone would accept
|
|
27
|
+
* "8788abc" and bind whatever number it reads out of it. */
|
|
28
|
+
function portFromEnv(name, fallback) {
|
|
29
|
+
const raw = process.env[name];
|
|
30
|
+
if (!raw)
|
|
31
|
+
return fallback;
|
|
32
|
+
const value = /^\d+$/.test(raw.trim()) ? Number(raw.trim()) : NaN;
|
|
33
|
+
if (!Number.isInteger(value) || value < 1 || value > 65535) {
|
|
34
|
+
throw new Error(`Invalid value for ${name}: "${raw}" (expected a port number from 1 to 65535)`);
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
const LOG_LEVELS = ["error", "warn", "info", "debug"];
|
|
39
|
+
/** The configured log level; anything else falls back to info. */
|
|
40
|
+
function logLevel() {
|
|
41
|
+
const raw = process.env.LOG_LEVEL;
|
|
42
|
+
return LOG_LEVELS.includes(raw) ? raw : "info";
|
|
43
|
+
}
|
|
44
|
+
/** The app origin the browser executors come from; it must parse as a URL
|
|
45
|
+
* because the connection handler derives the allowed origin from it. */
|
|
46
|
+
function appUrl() {
|
|
47
|
+
const raw = optional("PL_APP_URL", "https://app.projectionlab.com");
|
|
48
|
+
try {
|
|
49
|
+
new URL(raw);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
throw new Error(`Invalid value for PL_APP_URL: "${raw}" (expected an absolute URL)`);
|
|
53
|
+
}
|
|
54
|
+
return raw;
|
|
55
|
+
}
|
|
26
56
|
function optionalBoolean(name) {
|
|
27
57
|
const value = process.env[name];
|
|
28
58
|
if (value === undefined)
|
|
@@ -41,11 +71,13 @@ export const config = {
|
|
|
41
71
|
// what is missing; operations that need the key reject without it.
|
|
42
72
|
apiKey: process.env.PL_API_KEY || undefined,
|
|
43
73
|
// Localhost WebSocket the browser extension (or bootstrap snippet) connects
|
|
44
|
-
// to. The token is a shared secret the executor must present; if unset
|
|
45
|
-
// ExtensionBridge generates one and persists it
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
74
|
+
// to. The token is a shared secret the executor must present; if unset or
|
|
75
|
+
// blank, ExtensionBridge generates one and persists it next to
|
|
76
|
+
// USER_ENV_FILE. A blank value never counts as a token: it would let any
|
|
77
|
+
// client authenticate with an empty string.
|
|
78
|
+
wsPort: portFromEnv("PL_WS_PORT", 8788),
|
|
79
|
+
wsToken: process.env.PL_WS_TOKEN?.trim() || undefined,
|
|
80
|
+
appUrl: appUrl(),
|
|
49
81
|
apiReadyTimeoutMs: optionalInt("PL_API_READY_TIMEOUT_MS", 30000),
|
|
50
82
|
// How long a full export may be served from cache. Writes always invalidate,
|
|
51
83
|
// so this can be generous for read-heavy analysis sessions.
|
|
@@ -54,7 +86,10 @@ export const config = {
|
|
|
54
86
|
prettyJson: optionalBoolean("PL_PRETTY_JSON") ?? false,
|
|
55
87
|
// Writes stay disabled unless PL_READ_ONLY is exactly "false".
|
|
56
88
|
readOnly: (process.env.PL_READ_ONLY ?? "").trim().toLowerCase() !== "false",
|
|
89
|
+
// On unless PL_UPDATE_CHECK is exactly "false"; the only registry request
|
|
90
|
+
// the server makes is the one this gates.
|
|
91
|
+
updateCheck: (process.env.PL_UPDATE_CHECK ?? "").trim().toLowerCase() !== "false",
|
|
57
92
|
snapshotDir: expandHome(optional("PL_SNAPSHOT_DIR", "~/.projectionlab-mcp/snapshots")),
|
|
58
|
-
logLevel:
|
|
93
|
+
logLevel: logLevel(),
|
|
59
94
|
};
|
|
60
95
|
//# 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,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;AAE3E,yEAAyE;AACzE,oEAAoE;AACpE,yEAAyE;AACzE,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AACpC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAEpD,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,MAAM,GAAG,qCAAqC,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS;IAC3C,4EAA4E;IAC5E,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -11,6 +11,12 @@ export declare class ProjectionLabError extends Error {
|
|
|
11
11
|
toResult(): PlError;
|
|
12
12
|
}
|
|
13
13
|
export declare function toPlError(err: unknown): PlError;
|
|
14
|
+
/**
|
|
15
|
+
* A whole-section or restore payload that still holds `[REDACTED]` under a
|
|
16
|
+
* secret-named key came from a redacted read; writing it back would store the
|
|
17
|
+
* sentinel in the user's data. Names the offending dot paths.
|
|
18
|
+
*/
|
|
19
|
+
export declare function redactedSecretsError(payloadName: string, paths: string[]): ProjectionLabError;
|
|
14
20
|
export declare function errorResult(err: unknown): {
|
|
15
21
|
content: {
|
|
16
22
|
type: "text";
|
package/dist/errors.js
CHANGED
|
@@ -27,6 +27,16 @@ export function toPlError(err) {
|
|
|
27
27
|
suggestion: "Check server logs for details",
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* A whole-section or restore payload that still holds `[REDACTED]` under a
|
|
32
|
+
* secret-named key came from a redacted read; writing it back would store the
|
|
33
|
+
* sentinel in the user's data. Names the offending dot paths.
|
|
34
|
+
*/
|
|
35
|
+
export function redactedSecretsError(payloadName, paths) {
|
|
36
|
+
return new ProjectionLabError("INVALID_INPUT", `${payloadName} contains redacted secret values at: ${paths.join(", ")}`, "These values were hidden by the read that produced this payload, so it cannot be written back. " +
|
|
37
|
+
"Supply the real values, or change single fields with projectionlab_update_plan_event or " +
|
|
38
|
+
"projectionlab_update_plan_settings, which patch by path and never round-trip hidden values.");
|
|
39
|
+
}
|
|
30
40
|
export function errorResult(err) {
|
|
31
41
|
// An error message can echo request data from the browser executor, so the
|
|
32
42
|
// Plugin API key is scrubbed from it like any other tool output.
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsB5C,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IAEA;IAHlB,YACkB,IAAe,EAC/B,OAAe,EACC,UAAkB;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAW;QAEf,eAAU,GAAV,UAAU,CAAQ;QAGlC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,OAAO;QACP,UAAU,EAAE,+BAA+B;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsB5C,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IAEA;IAHlB,YACkB,IAAe,EAC/B,OAAe,EACC,UAAkB;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAW;QAEf,eAAU,GAAV,UAAU,CAAQ;QAGlC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,OAAO;QACP,UAAU,EAAE,+BAA+B;KAC5C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,KAAe;IAEf,OAAO,IAAI,kBAAkB,CAC3B,eAAe,EACf,GAAG,WAAW,wCAAwC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxE,iGAAiG;QAC/F,0FAA0F;QAC1F,6FAA6F,CAChG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,7 @@ export declare class ExtensionBridge implements Bridge {
|
|
|
4
4
|
private wss;
|
|
5
5
|
private conn;
|
|
6
6
|
private connExecutor;
|
|
7
|
+
private connInstanceId;
|
|
7
8
|
private readonly pending;
|
|
8
9
|
private nextId;
|
|
9
10
|
private heartbeat;
|
|
@@ -25,12 +26,24 @@ export declare class ExtensionBridge implements Bridge {
|
|
|
25
26
|
/** New sockets must send a valid hello before anything else. `helloRead`
|
|
26
27
|
* runs once the first message arrives, whatever it holds. */
|
|
27
28
|
private awaitHello;
|
|
28
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Decide whether an authenticated hello becomes the active executor. The
|
|
31
|
+
* incumbent keeps the connection: a newcomer is refused with BUSY unless it
|
|
32
|
+
* requests takeover, or repeats the incumbent's instance id (an executor
|
|
33
|
+
* must never be locked out by its own stale socket). An incumbent whose
|
|
34
|
+
* socket is not open is dead and gets dropped first; the heartbeat is what
|
|
35
|
+
* clears a crashed incumbent that still looks open.
|
|
36
|
+
*/
|
|
37
|
+
private admit;
|
|
38
|
+
/** Promote an authenticated socket to the active connection. Replacing a
|
|
39
|
+
* live incumbent (takeover or same instance id) closes it with 4003. */
|
|
29
40
|
private adopt;
|
|
30
41
|
private onFrame;
|
|
31
42
|
private settle;
|
|
32
43
|
private wireError;
|
|
33
44
|
private startHeartbeat;
|
|
45
|
+
/** Reject every in-flight request; the executor that was sent to is gone. */
|
|
46
|
+
private abandonRequests;
|
|
34
47
|
private dropConnection;
|
|
35
48
|
private serialize;
|
|
36
49
|
/** Why no executor can be reached, with the fix, for error messages. */
|
package/dist/extensionBridge.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
2
|
import { chmodSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { WebSocketServer } from "ws";
|
|
4
|
+
import { WebSocketServer, WebSocket } from "ws";
|
|
5
5
|
import { buildBootstrapSnippet } from "./bootstrap.js";
|
|
6
6
|
import { config, USER_ENV_FILE } from "./config.js";
|
|
7
7
|
import { ProjectionLabError } from "./errors.js";
|
|
8
8
|
import { log } from "./logger.js";
|
|
9
|
+
import { VERSION } from "./version.js";
|
|
9
10
|
import { CLOSE_CODES, HEARTBEAT_INTERVAL_MS, PROTOCOL_VERSION, } from "./types/wire.js";
|
|
10
11
|
/** Origins allowed to open the WebSocket. Extensions plus the PL app itself
|
|
11
12
|
* (Tier 0 bootstrap snippet runs in page context, so the browser sends the
|
|
@@ -33,6 +34,17 @@ const EXTENSION_HELP = "Install the MCP Bridge for ProjectionLab extension (zips
|
|
|
33
34
|
"it again from about:debugging (This Firefox > Load Temporary Add-on > manifest.json in the same " +
|
|
34
35
|
"folder) and re-enter the port and token if its options page is empty.";
|
|
35
36
|
const REQUEST_TIMEOUT_MS = 60_000;
|
|
37
|
+
/** Parses one text frame. Returns null unless it is a JSON object: valid JSON
|
|
38
|
+
* such as `null` or `42` has no `type` to read. */
|
|
39
|
+
function parseFrame(raw) {
|
|
40
|
+
try {
|
|
41
|
+
const frame = JSON.parse(String(raw));
|
|
42
|
+
return frame && typeof frame === "object" ? frame : null;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
36
48
|
/** Best-effort chmod; a file the process does not own keeps its mode. */
|
|
37
49
|
function restrictMode(path, mode) {
|
|
38
50
|
try {
|
|
@@ -46,6 +58,7 @@ export class ExtensionBridge {
|
|
|
46
58
|
wss = null;
|
|
47
59
|
conn = null;
|
|
48
60
|
connExecutor = "";
|
|
61
|
+
connInstanceId = "";
|
|
49
62
|
pending = new Map();
|
|
50
63
|
nextId = 1;
|
|
51
64
|
heartbeat = null;
|
|
@@ -162,11 +175,8 @@ export class ExtensionBridge {
|
|
|
162
175
|
ws.once("message", (raw) => {
|
|
163
176
|
clearTimeout(timer);
|
|
164
177
|
helloRead();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
hello = JSON.parse(String(raw));
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
178
|
+
const hello = parseFrame(raw);
|
|
179
|
+
if (!hello) {
|
|
170
180
|
ws.close(CLOSE_CODES.AUTH_FAILED, "malformed hello");
|
|
171
181
|
return;
|
|
172
182
|
}
|
|
@@ -180,19 +190,60 @@ export class ExtensionBridge {
|
|
|
180
190
|
ws.close(CLOSE_CODES.VERSION_MISMATCH, "protocol version mismatch");
|
|
181
191
|
return;
|
|
182
192
|
}
|
|
183
|
-
|
|
193
|
+
// Only authenticated hellos reach the connection decision, so an
|
|
194
|
+
// unauthenticated client can neither displace an executor nor learn
|
|
195
|
+
// that one is connected.
|
|
196
|
+
const instanceId = typeof hello.instanceId === "string" &&
|
|
197
|
+
hello.instanceId.length >= 1 &&
|
|
198
|
+
hello.instanceId.length <= 64
|
|
199
|
+
? hello.instanceId
|
|
200
|
+
: "";
|
|
201
|
+
this.admit(ws, hello.executor, instanceId, hello.takeover === true);
|
|
184
202
|
});
|
|
185
203
|
}
|
|
186
|
-
/**
|
|
187
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Decide whether an authenticated hello becomes the active executor. The
|
|
206
|
+
* incumbent keeps the connection: a newcomer is refused with BUSY unless it
|
|
207
|
+
* requests takeover, or repeats the incumbent's instance id (an executor
|
|
208
|
+
* must never be locked out by its own stale socket). An incumbent whose
|
|
209
|
+
* socket is not open is dead and gets dropped first; the heartbeat is what
|
|
210
|
+
* clears a crashed incumbent that still looks open.
|
|
211
|
+
*/
|
|
212
|
+
admit(ws, executor, instanceId, takeover) {
|
|
213
|
+
const incumbent = this.conn;
|
|
214
|
+
if (!incumbent || incumbent.readyState !== WebSocket.OPEN) {
|
|
215
|
+
if (incumbent)
|
|
216
|
+
this.dropConnection("dropping a dead executor connection");
|
|
217
|
+
this.adopt(ws, executor, instanceId);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (takeover || (instanceId !== "" && instanceId === this.connInstanceId)) {
|
|
221
|
+
this.adopt(ws, executor, instanceId);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
log.info("extension", `Refusing ${executor} with BUSY: ${this.connExecutor} holds the connection`);
|
|
225
|
+
ws.close(CLOSE_CODES.BUSY, "another executor holds the connection");
|
|
226
|
+
}
|
|
227
|
+
/** Promote an authenticated socket to the active connection. Replacing a
|
|
228
|
+
* live incumbent (takeover or same instance id) closes it with 4003. */
|
|
229
|
+
adopt(ws, executor, instanceId) {
|
|
188
230
|
if (this.conn && this.conn !== ws) {
|
|
189
231
|
log.info("extension", `Replacing ${this.connExecutor} with ${executor}`);
|
|
190
232
|
this.conn.close(CLOSE_CODES.REPLACED, "replaced by newer connection");
|
|
233
|
+
// The replaced executor's state must not leak into the new one: its
|
|
234
|
+
// cached export could be served from the previous browser, its
|
|
235
|
+
// unanswered requests would hang until the 60s timeout, and a pong the
|
|
236
|
+
// old executor never sent must not drop the new one at the next
|
|
237
|
+
// heartbeat tick. The new socket and the heartbeat stay as they are.
|
|
238
|
+
this.exportCache = null;
|
|
239
|
+
this.awaitingPong = false;
|
|
240
|
+
this.abandonRequests("executor was replaced");
|
|
191
241
|
}
|
|
192
242
|
this.conn = ws;
|
|
193
243
|
this.connExecutor = executor;
|
|
244
|
+
this.connInstanceId = instanceId;
|
|
194
245
|
log.info("extension", `Executor connected: ${executor}`);
|
|
195
|
-
ws.send(JSON.stringify({ type: "helloAck", protocolVersion: PROTOCOL_VERSION }));
|
|
246
|
+
ws.send(JSON.stringify({ type: "helloAck", protocolVersion: PROTOCOL_VERSION, serverVersion: VERSION }));
|
|
196
247
|
ws.on("message", (raw) => this.onFrame(ws, raw));
|
|
197
248
|
ws.on("close", () => {
|
|
198
249
|
if (this.conn === ws) {
|
|
@@ -208,11 +259,8 @@ export class ExtensionBridge {
|
|
|
208
259
|
onFrame(ws, raw) {
|
|
209
260
|
if (this.conn !== ws)
|
|
210
261
|
return;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
frame = JSON.parse(String(raw));
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
262
|
+
const frame = parseFrame(raw);
|
|
263
|
+
if (!frame) {
|
|
216
264
|
log.warn("extension", "Dropping malformed frame");
|
|
217
265
|
return;
|
|
218
266
|
}
|
|
@@ -271,6 +319,14 @@ export class ExtensionBridge {
|
|
|
271
319
|
this.conn.send(JSON.stringify({ type: "ping" }));
|
|
272
320
|
}, HEARTBEAT_INTERVAL_MS);
|
|
273
321
|
}
|
|
322
|
+
/** Reject every in-flight request; the executor that was sent to is gone. */
|
|
323
|
+
abandonRequests(reason) {
|
|
324
|
+
for (const [id, pending] of this.pending) {
|
|
325
|
+
clearTimeout(pending.timer);
|
|
326
|
+
pending.reject(new ProjectionLabError("EXTENSION_NOT_CONNECTED", `Request ${id} aborted: ${reason}`, "The browser-side executor disconnected mid-request. Check the browser and retry."));
|
|
327
|
+
}
|
|
328
|
+
this.pending.clear();
|
|
329
|
+
}
|
|
274
330
|
dropConnection(reason) {
|
|
275
331
|
// Close the socket if it's still live - wss.close() waits for all
|
|
276
332
|
// clients, so leaving it open would hang shutdown.
|
|
@@ -282,17 +338,14 @@ export class ExtensionBridge {
|
|
|
282
338
|
}
|
|
283
339
|
this.conn = null;
|
|
284
340
|
this.connExecutor = "";
|
|
341
|
+
this.connInstanceId = "";
|
|
285
342
|
this.awaitingPong = false;
|
|
286
343
|
this.exportCache = null;
|
|
287
344
|
if (this.heartbeat) {
|
|
288
345
|
clearInterval(this.heartbeat);
|
|
289
346
|
this.heartbeat = null;
|
|
290
347
|
}
|
|
291
|
-
|
|
292
|
-
clearTimeout(pending.timer);
|
|
293
|
-
pending.reject(new ProjectionLabError("EXTENSION_NOT_CONNECTED", `Request ${id} aborted: ${reason}`, "The browser-side executor disconnected mid-request. Check the browser and retry."));
|
|
294
|
-
}
|
|
295
|
-
this.pending.clear();
|
|
348
|
+
this.abandonRequests(reason);
|
|
296
349
|
}
|
|
297
350
|
serialize(fn) {
|
|
298
351
|
const next = this.opChain.then(fn, fn);
|
|
@@ -362,6 +415,7 @@ export class ExtensionBridge {
|
|
|
362
415
|
return result;
|
|
363
416
|
}
|
|
364
417
|
result.browser = true;
|
|
418
|
+
result.executor = this.connExecutor || undefined;
|
|
365
419
|
try {
|
|
366
420
|
await this.request("waitForApi", [config.apiReadyTimeoutMs], config.apiReadyTimeoutMs + 5_000);
|
|
367
421
|
result.pageLoaded = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensionBridge.js","sourceRoot":"","sources":["../src/extensionBridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extensionBridge.js","sourceRoot":"","sources":["../src/extensionBridge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { ExtensionBridge } from "./extensionBridge.js";
|
|
|
6
6
|
import { registerBootstrapTool } from "./tools/bootstrap.js";
|
|
7
7
|
import { SnapshotManager } from "./snapshot.js";
|
|
8
8
|
import { log } from "./logger.js";
|
|
9
|
+
import { redactSecrets } from "./redact.js";
|
|
10
|
+
import { updateCheck } from "./updateCheck.js";
|
|
9
11
|
import { SERVER_INSTRUCTIONS } from "./instructions.js";
|
|
10
12
|
import { VERSION } from "./version.js";
|
|
11
13
|
// Tools
|
|
@@ -47,6 +49,8 @@ async function main() {
|
|
|
47
49
|
instructions: SERVER_INSTRUCTIONS,
|
|
48
50
|
});
|
|
49
51
|
const bridge = new ExtensionBridge();
|
|
52
|
+
// Fire-and-forget registry lookup; startup never waits on the network.
|
|
53
|
+
updateCheck.start();
|
|
50
54
|
registerBootstrapTool(server, bridge);
|
|
51
55
|
const snapshots = new SnapshotManager();
|
|
52
56
|
// Register read tools
|
|
@@ -106,7 +110,11 @@ async function main() {
|
|
|
106
110
|
log.info("server", "ProjectionLab MCP server running on stdio");
|
|
107
111
|
}
|
|
108
112
|
main().catch((err) => {
|
|
109
|
-
console.
|
|
113
|
+
// The one console call outside the logger. An Error's stack can carry a
|
|
114
|
+
// message built from request data, so the text is scrubbed the same way
|
|
115
|
+
// every logged line is before it reaches stderr.
|
|
116
|
+
const text = err instanceof Error ? err.stack || err.message || String(err) : String(err);
|
|
117
|
+
console.error("Fatal error:", redactSecrets(text));
|
|
110
118
|
process.exit(1);
|
|
111
119
|
});
|
|
112
120
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/instructions.d.ts
CHANGED
|
@@ -7,4 +7,4 @@ export declare function readGuide(): string;
|
|
|
7
7
|
* instructions give these to the model; the full guide is the
|
|
8
8
|
* `projectionlab://guide` resource and the bundled skill.
|
|
9
9
|
*/
|
|
10
|
-
export declare const SERVER_INSTRUCTIONS = "ProjectionLab MCP: reads and edits the user's ProjectionLab retirement plan through their logged-in browser tab.\n\n- Call projectionlab_check_connection first in every session. If any check fails, read the resource projectionlab://guide and walk the user through the fix one step at a time.\n- Writes are disabled unless the user sets PL_READ_ONLY=false. Every write tool is a dry run unless confirm: true is passed; describe the preview to the user in plain words (which plan, which item, the old and new value), never as JSON, and confirm only the specific change they approved. Confirmed changes are snapshotted and can be undone with projectionlab_rollback.\n- Change the plan only when the user explicitly asks.\n- Plan figures are private: never send them outside the conversation. Never reveal PL_API_KEY or the WebSocket token.\n- The server reads plan definitions; projections and Chance of Success run only in the ProjectionLab UI.\n- The tools read ProjectionLab's backup export: a field being present does not mean the app uses it, and a write that stored a value does not prove the app acts on it. Check a change's effect in the ProjectionLab UI.\n- Provide information and education, not personalized financial advice.";
|
|
10
|
+
export declare const SERVER_INSTRUCTIONS = "ProjectionLab MCP: reads and edits the user's ProjectionLab retirement plan through their logged-in browser tab.\n\n- Call projectionlab_check_connection first in every session. If any check fails, read the resource projectionlab://guide and walk the user through the fix one step at a time. If it returns notices, relay each one to the user once, in plain words, then carry on with their request; do not repeat them later in the session and do not refuse to work because of them.\n- Writes are disabled unless the user sets PL_READ_ONLY=false. Every write tool is a dry run unless confirm: true is passed; describe the preview to the user in plain words (which plan, which item, the old and new value), never as JSON, and confirm only the specific change they approved. Confirmed changes are snapshotted and can be undone with projectionlab_rollback.\n- Change the plan only when the user explicitly asks.\n- Plan figures are private: never send them outside the conversation. Never reveal PL_API_KEY or the WebSocket token.\n- The server reads plan definitions; projections and Chance of Success run only in the ProjectionLab UI.\n- The tools read ProjectionLab's backup export: a field being present does not mean the app uses it, and a write that stored a value does not prove the app acts on it. Check a change's effect in the ProjectionLab UI.\n- Provide information and education, not personalized financial advice.";
|