product-spec-mcp 0.3.28 → 0.3.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +17 -4
- package/docs/online-pm-gate.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -61,7 +61,7 @@ npm run dev
|
|
|
61
61
|
```bash
|
|
62
62
|
PRODUCT_SPEC_REMOTE_GATE_URL=https://gate.example.com/v1/pm-intent
|
|
63
63
|
PRODUCT_SPEC_REMOTE_GATE_TOKEN=replace-with-token
|
|
64
|
-
PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS=
|
|
64
|
+
PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS=10000
|
|
65
65
|
PRODUCT_SPEC_REMOTE_GATE_MODE=auto
|
|
66
66
|
PRODUCT_SPEC_TELEMETRY=off
|
|
67
67
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -23811,7 +23811,7 @@ function decideRecommendedDeployment(needType, technicalShape, maintenanceMode,
|
|
|
23811
23811
|
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
23812
23812
|
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
23813
23813
|
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
23814
|
-
if (technicalShape === "light_backend_json_sqlite") return "
|
|
23814
|
+
if (technicalShape === "light_backend_json_sqlite") return "unknown";
|
|
23815
23815
|
return "unknown";
|
|
23816
23816
|
}
|
|
23817
23817
|
function decideRoute(needType, technicalShape, maintenanceMode) {
|
|
@@ -23833,13 +23833,19 @@ function enforceHardRules(decision) {
|
|
|
23833
23833
|
needType: "multi_user_collaboration",
|
|
23834
23834
|
maintenanceMode: "runtime_collaboration",
|
|
23835
23835
|
technicalShape: "light_backend_json_sqlite",
|
|
23836
|
-
recommendedDeployment: decision.accessTopology
|
|
23836
|
+
recommendedDeployment: recommendedDeploymentForCollaboration(decision.accessTopology),
|
|
23837
23837
|
route: "spec_interrogate",
|
|
23838
23838
|
mustNotUse: Array.from(/* @__PURE__ */ new Set([...decision.mustNotUse, "static_display", "local_storage_only"]))
|
|
23839
23839
|
};
|
|
23840
23840
|
}
|
|
23841
23841
|
return decision;
|
|
23842
23842
|
}
|
|
23843
|
+
function recommendedDeploymentForCollaboration(accessTopology) {
|
|
23844
|
+
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
23845
|
+
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
23846
|
+
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
23847
|
+
return "unknown";
|
|
23848
|
+
}
|
|
23843
23849
|
function buildMustNotUse(needType, maintenanceMode) {
|
|
23844
23850
|
const items = [];
|
|
23845
23851
|
if (needType === "multi_user_collaboration") items.push("static_display", "local_storage_only");
|
|
@@ -27702,7 +27708,7 @@ async function callRemotePmIntentGate(message, context, localDecision) {
|
|
|
27702
27708
|
const url = process.env.PRODUCT_SPEC_REMOTE_GATE_URL;
|
|
27703
27709
|
if (!url) return null;
|
|
27704
27710
|
const controller = new AbortController();
|
|
27705
|
-
const timeout = Number(process.env.PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS ||
|
|
27711
|
+
const timeout = Number(process.env.PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS || 1e4);
|
|
27706
27712
|
const timer = setTimeout(() => controller.abort(), timeout);
|
|
27707
27713
|
try {
|
|
27708
27714
|
const response = await fetch(url, {
|
|
@@ -27874,6 +27880,7 @@ function enforceRemoteHardRules(remote, local) {
|
|
|
27874
27880
|
needType: "multi_user_collaboration",
|
|
27875
27881
|
maintenanceMode: "runtime_collaboration",
|
|
27876
27882
|
technicalShape: "light_backend_json_sqlite",
|
|
27883
|
+
recommendedDeployment: recommendedDeploymentForCollaboration2(remote.accessTopology),
|
|
27877
27884
|
route: "spec_interrogate",
|
|
27878
27885
|
mustNotUse: mergeStrings(remote.mustNotUse, ["static_display", "local_storage_only"])
|
|
27879
27886
|
};
|
|
@@ -27891,6 +27898,12 @@ function enforceRemoteHardRules(remote, local) {
|
|
|
27891
27898
|
}
|
|
27892
27899
|
return remote;
|
|
27893
27900
|
}
|
|
27901
|
+
function recommendedDeploymentForCollaboration2(accessTopology) {
|
|
27902
|
+
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
27903
|
+
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
27904
|
+
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
27905
|
+
return "unknown";
|
|
27906
|
+
}
|
|
27894
27907
|
function hasRouteShapeConflict(decision) {
|
|
27895
27908
|
return decision.route === "architecture_decide" && decision.technicalShape !== "static_page";
|
|
27896
27909
|
}
|
|
@@ -29682,7 +29695,7 @@ function registerProductSpecAssist(server) {
|
|
|
29682
29695
|
function createServer() {
|
|
29683
29696
|
const server = new McpServer({
|
|
29684
29697
|
name: "product-spec-mcp",
|
|
29685
|
-
version: "0.3.
|
|
29698
|
+
version: "0.3.29"
|
|
29686
29699
|
});
|
|
29687
29700
|
registerSpecInterrogate(server);
|
|
29688
29701
|
registerSpecCompile(server);
|
package/docs/online-pm-gate.md
CHANGED
|
@@ -7,7 +7,7 @@ P0 online gate is an HTTP classifier for low-confidence or conflicting local PM
|
|
|
7
7
|
```bash
|
|
8
8
|
PRODUCT_SPEC_REMOTE_GATE_URL=https://gate.example.com/v1/pm-intent
|
|
9
9
|
PRODUCT_SPEC_REMOTE_GATE_TOKEN=replace-with-token
|
|
10
|
-
PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS=
|
|
10
|
+
PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS=10000
|
|
11
11
|
PRODUCT_SPEC_REMOTE_GATE_MODE=auto
|
|
12
12
|
PRODUCT_SPEC_TELEMETRY=off
|
|
13
13
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "product-spec-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.29",
|
|
4
4
|
"description": "MCP Server for product specification - requirement interrogation, architecture decision, UI translation, debug guidance, and acceptance generation",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.cjs",
|