smart-web-mcp 1.6.26 → 1.7.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/CHANGELOG.md +8 -0
- package/dist/dev-runtime.d.ts +1 -0
- package/dist/dev-runtime.js +13 -6
- package/dist/dev-runtime.js.map +1 -1
- package/dist/dev.js +2 -2
- package/dist/dev.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
|
+
* Allow the existing `smart-web-dev` stdio entrypoint to read implementation modules from a managed absolute release-dist path. An atomic `current` symlink switch refreshes fetch/search/crawl modules between calls without replacing the host MCP connection; retained snapshots and version-pinned dependency links protect in-flight reads. Tool registration, browser actions and verticals still require a host MCP reconnect for changed behavior or schemas.
|
|
8
9
|
* Authenticate to the MCP Registry only after the exact npm version becomes visible. Metadata validation stays unauthenticated; the short-lived OIDC credential no longer ages during propagation and can be obtained afresh on an immutable-tag recovery run.
|
|
9
10
|
* Recover a requested numeric comment permalink when an owned discussion row keeps its canonical ID on a nested element rather than the outer render wrapper. Require one unambiguous inner identity and its own body; retain parent links and declared-versus-delivered coverage. A measured public thread changes from zero structured comments to four source-bound replies through approved-browser continuation; absent and ambiguous IDs remain partial.
|
|
10
11
|
* Treat a numeric generic `#comment-`, `#discussioncomment-`, `#post-` or Lobsters-style `#c_` reply permalink as a request for that exact source-bound comment even without a separate comments flag. Missing rows remain partial; ordinary section fragments and non-generic providers keep their existing behavior.
|
|
@@ -437,6 +438,13 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
437
438
|
- Korean public API helpers now validate outbound URLs and redirects before fetching, blocking localhost, private, and reserved targets unless `network.allowPrivateHosts` is explicitly enabled.
|
|
438
439
|
- CI now declares read-only default repository permissions, Dependabot auto-merge pins the reusable workflow without forwarding all caller secrets, and the workflow check enforces those guards.
|
|
439
440
|
|
|
441
|
+
## [1.7.0](https://github.com/jojo-labs/smart-web/compare/v1.6.26...v1.7.0) (2026-10-04)
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
### Features
|
|
445
|
+
|
|
446
|
+
* hot-load staged smart-web release modules in active MCP sessions ([#792](https://github.com/jojo-labs/smart-web/issues/792)) ([8bda3a6](https://github.com/jojo-labs/smart-web/commit/8bda3a66a3c4259447aceb5b900c879ecb376a5c))
|
|
447
|
+
|
|
440
448
|
## [1.6.26](https://github.com/jojo-labs/smart-web/compare/v1.6.25...v1.6.26) (2026-10-04)
|
|
441
449
|
|
|
442
450
|
|
package/dist/dev-runtime.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { SmartWebRuntime } from "./mcp-server.js";
|
|
|
2
2
|
type LoaderOptions = {
|
|
3
3
|
importer?: (href: string) => Promise<Record<string, unknown>>;
|
|
4
4
|
};
|
|
5
|
+
export declare function resolveReleaseRuntimeDir(installedDistDir: string, env?: NodeJS.ProcessEnv): string;
|
|
5
6
|
export declare function createVersionedModuleLoader(baseDir: string, options?: LoaderOptions): (relativePath: string) => Promise<Record<string, unknown>>;
|
|
6
7
|
export declare function createReloadingRuntime(baseDir: string): SmartWebRuntime;
|
|
7
8
|
export {};
|
package/dist/dev-runtime.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import { copyFile, mkdtemp, mkdir, readdir,
|
|
1
|
+
import { copyFile, mkdtemp, mkdir, readdir, realpath, stat, symlink, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join, relative, resolve, dirname } from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { resolveSmartWebTempRoot } from "./runtime-temp.js";
|
|
5
|
+
export function resolveReleaseRuntimeDir(installedDistDir, env = process.env) {
|
|
6
|
+
const managed = env.SMART_WEB_RUNTIME_DIST_DIR;
|
|
7
|
+
if (!managed)
|
|
8
|
+
return installedDistDir;
|
|
9
|
+
if (!managed.startsWith("/"))
|
|
10
|
+
throw new Error("SMART_WEB_RUNTIME_DIST_DIR must be an absolute path");
|
|
11
|
+
return managed;
|
|
12
|
+
}
|
|
5
13
|
async function collectRuntimeFiles(rootDir, currentDir = rootDir) {
|
|
6
14
|
const entries = await readdir(currentDir, { withFileTypes: true });
|
|
7
15
|
const files = [];
|
|
@@ -39,9 +47,8 @@ async function createSnapshot(rootDir, files) {
|
|
|
39
47
|
const projectRoot = resolve(rootDir, "..");
|
|
40
48
|
const dependencyRoots = ["node_modules"];
|
|
41
49
|
for (const dependencyRoot of dependencyRoots) {
|
|
42
|
-
const source = resolve(projectRoot, dependencyRoot);
|
|
43
50
|
try {
|
|
44
|
-
await
|
|
51
|
+
const source = await realpath(resolve(projectRoot, dependencyRoot));
|
|
45
52
|
await symlink(source, resolve(snapshotDir, dependencyRoot), "junction");
|
|
46
53
|
}
|
|
47
54
|
catch {
|
|
@@ -55,11 +62,11 @@ export function createVersionedModuleLoader(baseDir, options) {
|
|
|
55
62
|
let snapshot;
|
|
56
63
|
return async function load(relativePath) {
|
|
57
64
|
const files = await collectRuntimeFiles(baseDir);
|
|
58
|
-
const fingerprint = await fingerprintRuntime(baseDir, files)
|
|
65
|
+
const fingerprint = `${await realpath(baseDir)}|${await fingerprintRuntime(baseDir, files)}`;
|
|
59
66
|
if (!snapshot || snapshot.fingerprint !== fingerprint) {
|
|
60
67
|
const dir = await createSnapshot(baseDir, files);
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
// A previous request may still import siblings from its captured module tree.
|
|
69
|
+
// Keep immutable snapshots until the process exits; the managed temp root prunes them.
|
|
63
70
|
snapshot = { fingerprint, dir, modules: new Map() };
|
|
64
71
|
}
|
|
65
72
|
const modulePath = resolve(snapshot.dir, relativePath);
|
package/dist/dev-runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-runtime.js","sourceRoot":"","sources":["../src/dev-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dev-runtime.js","sourceRoot":"","sources":["../src/dev-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/dev.js
CHANGED
|
@@ -3,14 +3,14 @@ import { readFileSync } from "node:fs";
|
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
-
import { createReloadingRuntime } from "./dev-runtime.js";
|
|
6
|
+
import { createReloadingRuntime, resolveReleaseRuntimeDir } from "./dev-runtime.js";
|
|
7
7
|
import { createSmartWebServer } from "./mcp-server.js";
|
|
8
8
|
import { sanitizeSmartWebTempEnv } from "./runtime-temp.js";
|
|
9
9
|
const packageVersion = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
10
10
|
const distDir = dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
sanitizeSmartWebTempEnv();
|
|
12
12
|
async function main() {
|
|
13
|
-
const runtime = createReloadingRuntime(distDir);
|
|
13
|
+
const runtime = createReloadingRuntime(resolveReleaseRuntimeDir(distDir));
|
|
14
14
|
const server = createSmartWebServer(`${packageVersion}-dev`, runtime);
|
|
15
15
|
const transport = new StdioServerTransport();
|
|
16
16
|
await server.connect(transport);
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiB,CAAA;AACtH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACvD,uBAAuB,EAAE,CAAA;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,cAAc,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smart-web-mcp",
|
|
3
3
|
"mcpName": "io.github.jojo-labs/smart-web",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.7.0",
|
|
5
5
|
"packageManager": "npm@11.9.0",
|
|
6
6
|
"description": "Local MCP for web search, direct-URL fetch, site crawling, docs export, and bounded smartbrowser local browser actions.",
|
|
7
7
|
"homepage": "https://github.com/jojo-labs/smart-web",
|