product-spec-mcp 0.3.29 → 0.3.30
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/dist/index.cjs +571 -327
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -21147,6 +21147,60 @@ var TechnicalProfileSchema = external_exports.object({
|
|
|
21147
21147
|
)
|
|
21148
21148
|
});
|
|
21149
21149
|
|
|
21150
|
+
// src/schemas/pmIntentDecision.schema.ts
|
|
21151
|
+
var PmIntentDecisionSchema = external_exports.object({
|
|
21152
|
+
needType: external_exports.enum([
|
|
21153
|
+
"static_display",
|
|
21154
|
+
"personal_local_tool",
|
|
21155
|
+
"multi_user_collaboration",
|
|
21156
|
+
"content_marketing_site",
|
|
21157
|
+
"data_visualization_site",
|
|
21158
|
+
"transaction_workflow",
|
|
21159
|
+
"content_knowledge",
|
|
21160
|
+
"ai_automation",
|
|
21161
|
+
"unknown"
|
|
21162
|
+
]),
|
|
21163
|
+
usageScope: external_exports.enum(["self", "fixed_group", "public_audience", "unknown"]),
|
|
21164
|
+
maintenanceMode: external_exports.enum([
|
|
21165
|
+
"agent_assisted",
|
|
21166
|
+
"manual_files",
|
|
21167
|
+
"web_admin",
|
|
21168
|
+
"visitor_submission",
|
|
21169
|
+
"runtime_collaboration",
|
|
21170
|
+
"unknown"
|
|
21171
|
+
]),
|
|
21172
|
+
accessTopology: external_exports.enum(["single_device", "lan_only", "internet_ip", "public_domain", "unknown"]),
|
|
21173
|
+
technicalShape: external_exports.enum([
|
|
21174
|
+
"static_page",
|
|
21175
|
+
"local_storage_tool",
|
|
21176
|
+
"local_json_import_export",
|
|
21177
|
+
"static_json_data_page",
|
|
21178
|
+
"light_backend_json_sqlite",
|
|
21179
|
+
"full_backend_saas",
|
|
21180
|
+
"unknown"
|
|
21181
|
+
]),
|
|
21182
|
+
recommendedDeployment: external_exports.enum([
|
|
21183
|
+
"static_only",
|
|
21184
|
+
"local_browser_only",
|
|
21185
|
+
"static_hosting_with_agent_updates",
|
|
21186
|
+
"local_lan_server_sqlite",
|
|
21187
|
+
"cheap_vps_sqlite_by_ip",
|
|
21188
|
+
"vps_domain_https",
|
|
21189
|
+
"unknown"
|
|
21190
|
+
]),
|
|
21191
|
+
route: external_exports.enum(["spec_compile", "spec_interrogate", "architecture_decide"]),
|
|
21192
|
+
confidence: external_exports.enum(["high", "medium", "low"]),
|
|
21193
|
+
strongSignals: external_exports.array(external_exports.string()),
|
|
21194
|
+
weakSignals: external_exports.array(external_exports.string()),
|
|
21195
|
+
coreObjects: external_exports.array(external_exports.string()),
|
|
21196
|
+
states: external_exports.array(external_exports.string()),
|
|
21197
|
+
actions: external_exports.array(external_exports.string()),
|
|
21198
|
+
mustNotUse: external_exports.array(external_exports.string()),
|
|
21199
|
+
boundaryQuestionIds: external_exports.array(external_exports.string()),
|
|
21200
|
+
defaultAssumptions: external_exports.array(external_exports.string()),
|
|
21201
|
+
source: external_exports.enum(["local_rule", "online_llm", "merged"])
|
|
21202
|
+
});
|
|
21203
|
+
|
|
21150
21204
|
// src/schemas/outputs/specInterrogate.output.ts
|
|
21151
21205
|
var SpecInterrogateOutputSchema = external_exports.object({
|
|
21152
21206
|
readiness: external_exports.object({
|
|
@@ -21180,7 +21234,8 @@ var SpecInterrogateOutputSchema = external_exports.object({
|
|
|
21180
21234
|
suggestedNextTool: external_exports.enum(["spec_compile", "spec_interrogate"]),
|
|
21181
21235
|
reason: external_exports.string()
|
|
21182
21236
|
}),
|
|
21183
|
-
technicalProfile: TechnicalProfileSchema.optional()
|
|
21237
|
+
technicalProfile: TechnicalProfileSchema.optional(),
|
|
21238
|
+
pmIntentDecision: PmIntentDecisionSchema.optional()
|
|
21184
21239
|
});
|
|
21185
21240
|
|
|
21186
21241
|
// src/core/contextSignals.ts
|
|
@@ -23315,7 +23370,7 @@ ${acceptance.platform}
|
|
|
23315
23370
|
}
|
|
23316
23371
|
|
|
23317
23372
|
// src/core/structuredResultBuilder.ts
|
|
23318
|
-
function buildInterrogateStructuredOutput(readiness, clarification, technicalProfile) {
|
|
23373
|
+
function buildInterrogateStructuredOutput(readiness, clarification, technicalProfile, pmIntentDecision) {
|
|
23319
23374
|
const canProceed = readiness.status !== "Not Ready";
|
|
23320
23375
|
return {
|
|
23321
23376
|
readiness: {
|
|
@@ -23333,7 +23388,8 @@ function buildInterrogateStructuredOutput(readiness, clarification, technicalPro
|
|
|
23333
23388
|
suggestedNextTool: canProceed ? "spec_compile" : "spec_interrogate",
|
|
23334
23389
|
reason: canProceed ? readiness.status === "Build Ready" ? "\u4FE1\u606F\u5145\u8DB3\uFF0C\u53EF\u4EE5\u751F\u6210\u6B63\u5F0F\u89C4\u683C" : "\u4FE1\u606F\u90E8\u5206\u5B8C\u6574\uFF0C\u53EF\u4EE5\u751F\u6210\u8349\u6848" : "\u4FE1\u606F\u4E0D\u8DB3\uFF0C\u9700\u8981\u5148\u56DE\u7B54\u8FFD\u95EE"
|
|
23335
23390
|
},
|
|
23336
|
-
technicalProfile
|
|
23391
|
+
technicalProfile,
|
|
23392
|
+
pmIntentDecision
|
|
23337
23393
|
};
|
|
23338
23394
|
}
|
|
23339
23395
|
function buildCompileStructuredOutput(mode, readiness, spec, confirmation, clarification) {
|
|
@@ -23483,97 +23539,512 @@ function buildDebugGuideStructuredOutput(guide) {
|
|
|
23483
23539
|
};
|
|
23484
23540
|
}
|
|
23485
23541
|
|
|
23486
|
-
// src/
|
|
23487
|
-
function
|
|
23488
|
-
const
|
|
23489
|
-
|
|
23490
|
-
|
|
23491
|
-
|
|
23492
|
-
|
|
23493
|
-
|
|
23494
|
-
|
|
23495
|
-
|
|
23496
|
-
|
|
23497
|
-
|
|
23498
|
-
|
|
23499
|
-
|
|
23542
|
+
// src/core/pmIntentGate.ts
|
|
23543
|
+
function decidePmIntent(rawText, context = {}) {
|
|
23544
|
+
const text = `${rawText} ${JSON.stringify(context)}`;
|
|
23545
|
+
const strongSignals = collectSignals(text, strongSignalMap);
|
|
23546
|
+
const weakSignals = collectSignals(text, weakSignalMap);
|
|
23547
|
+
const usageScope = decideUsageScope(text);
|
|
23548
|
+
const preliminaryNeedType = decideNeedType(text, strongSignals);
|
|
23549
|
+
const maintenanceMode = decideMaintenanceMode(text, preliminaryNeedType);
|
|
23550
|
+
const accessTopology = decideAccessTopology(text, usageScope, maintenanceMode);
|
|
23551
|
+
const needType = preliminaryNeedType;
|
|
23552
|
+
const technicalShape = decideTechnicalShape(text, needType, maintenanceMode);
|
|
23553
|
+
const recommendedDeployment = decideRecommendedDeployment(needType, technicalShape, maintenanceMode, accessTopology);
|
|
23554
|
+
const route = decideRoute(needType, technicalShape, maintenanceMode);
|
|
23555
|
+
const confidence = decideConfidence(needType, strongSignals, weakSignals);
|
|
23556
|
+
return enforceHardRules({
|
|
23557
|
+
needType,
|
|
23558
|
+
usageScope,
|
|
23559
|
+
maintenanceMode,
|
|
23560
|
+
accessTopology,
|
|
23561
|
+
technicalShape,
|
|
23562
|
+
recommendedDeployment,
|
|
23563
|
+
route,
|
|
23564
|
+
confidence,
|
|
23565
|
+
strongSignals,
|
|
23566
|
+
weakSignals,
|
|
23567
|
+
coreObjects: extractCoreObjects(text, needType),
|
|
23568
|
+
states: extractStates(text, needType),
|
|
23569
|
+
actions: extractActions(text, needType),
|
|
23570
|
+
mustNotUse: buildMustNotUse(needType, maintenanceMode),
|
|
23571
|
+
boundaryQuestionIds: buildBoundaryQuestionIds(needType, maintenanceMode, accessTopology),
|
|
23572
|
+
defaultAssumptions: buildDefaultAssumptions(needType, usageScope, maintenanceMode, accessTopology, recommendedDeployment),
|
|
23573
|
+
source: "local_rule"
|
|
23574
|
+
});
|
|
23575
|
+
}
|
|
23576
|
+
function decideNeedType(text, strongSignals) {
|
|
23577
|
+
if (hasAny2(text, ["AI", "ai", "LLM", "llm", "GPT", "gpt", "\u5927\u6A21\u578B", "\u6A21\u578B\u63A5\u53E3", "API Key", "DeepSeek", "OpenAI"]) && !isNegated(text, ["AI", "\u6A21\u578B"])) {
|
|
23578
|
+
return "ai_automation";
|
|
23579
|
+
}
|
|
23580
|
+
if (hasAny2(text, ["\u652F\u4ED8", "\u8BA2\u5355", "\u552E\u5356", "\u8D2D\u4E70", "\u62A5\u540D", "\u9884\u7EA6", "\u6536\u6B3E", "\u5BFC\u51FA Excel", "\u5BFC\u51FA"])) {
|
|
23581
|
+
return "transaction_workflow";
|
|
23582
|
+
}
|
|
23583
|
+
if (hasAny2(text, ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA\u5171\u7528", "\u5171\u7528", "\u5171\u4EAB", "\u534F\u4F5C", "\u76F8\u4E92\u5B89\u6392", "\u8BA4\u9886", "\u5206\u914D\u4EFB\u52A1", "\u56E2\u961F\u5F85\u529E"])) {
|
|
23584
|
+
return "multi_user_collaboration";
|
|
23585
|
+
}
|
|
23586
|
+
if (hasAny2(text, ["xlsx", "XLSX", "Excel", "csv", "CSV", "\u56FE\u8868", "\u6570\u636E\u6E32\u67D3", "\u53EF\u89C6\u5316", "\u4EEA\u8868\u76D8"]) && hasAny2(text, ["\u6587\u4EF6", "\u6570\u636E", "\u6E32\u67D3", "\u56FE\u8868", "\u4E0A\u4F20", "\u63D0\u4F9B"])) {
|
|
23587
|
+
return "data_visualization_site";
|
|
23588
|
+
}
|
|
23589
|
+
if (hasAny2(text, ["\u5065\u8EAB\u623F", "\u9910\u5385", "\u5496\u5561\u5E97", "\u5DE5\u4F5C\u5BA4", "\u95E8\u5E97", "\u672C\u5730\u670D\u52A1", "GEO", "geo", "SEO", "seo", "\u4FC3\u9500", "\u6559\u7EC3", "Q&A", "FAQ", "\u7167\u7247", "\u7528\u6237\u53CD\u9988"])) {
|
|
23590
|
+
return "content_marketing_site";
|
|
23591
|
+
}
|
|
23592
|
+
if (hasAny2(text, ["\u77E5\u8BC6\u5E93", "\u6587\u6863\u7BA1\u7406", "\u8D44\u6599\u5E93", "\u56E2\u961F\u6587\u6863"])) {
|
|
23593
|
+
return "content_knowledge";
|
|
23594
|
+
}
|
|
23595
|
+
if (hasAny2(text, ["\u836F\u54C1", "\u98DF\u6750", "\u8BFB\u4E66", "\u8BA2\u9605", "\u690D\u7269", "\u88C5\u5907", "\u6E05\u5355", "\u8BB0\u5F55", "\u63D0\u9192", "\u5E93\u5B58", "\u4FDD\u8D28\u671F"]) && !strongSignals.includes("\u591A\u4EBA")) {
|
|
23596
|
+
return "personal_local_tool";
|
|
23597
|
+
}
|
|
23598
|
+
if (hasAny2(text, ["\u4F5C\u54C1\u96C6", "\u4E2A\u4EBA\u4E3B\u9875", "\u5B98\u7F51", "\u4ECB\u7ECD\u9875", "\u516C\u53F8\u4ECB\u7ECD", "\u8054\u7CFB\u65B9\u5F0F"]) && !hasAny2(text, ["\u63D0\u4EA4", "\u4E0A\u4F20", "\u7F16\u8F91", "\u7EF4\u62A4", "\u6570\u636E", "\u4EFB\u52A1", "\u8BA4\u9886"])) {
|
|
23599
|
+
return "static_display";
|
|
23600
|
+
}
|
|
23601
|
+
return "unknown";
|
|
23602
|
+
}
|
|
23603
|
+
function decideUsageScope(text) {
|
|
23604
|
+
if (hasAny2(text, ["\u516C\u5F00", "\u8BBF\u5BA2", "\u5BA2\u6237", "\u7528\u6237", "\u4F1A\u5458", "\u5B98\u7F51", "\u7F51\u7AD9", "\u95E8\u5E97", "\u5065\u8EAB\u623F", "\u9910\u5385", "\u5DE5\u4F5C\u5BA4"])) return "public_audience";
|
|
23605
|
+
if (hasAny2(text, ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA", "\u5BB6\u5EAD", "\u540C\u4E8B", "\u56E2\u961F", "\u5171\u7528", "\u5171\u4EAB"])) return "fixed_group";
|
|
23606
|
+
if (hasAny2(text, ["\u81EA\u5DF1", "\u81EA\u7528", "\u4E2A\u4EBA", "\u6211\u7528", "\u6211\u81EA\u5DF1"])) return "self";
|
|
23607
|
+
return "unknown";
|
|
23608
|
+
}
|
|
23609
|
+
function decideMaintenanceMode(text, needType) {
|
|
23610
|
+
if (hasAny2(text, ["\u8BBF\u5BA2\u63D0\u4EA4", "\u7528\u6237\u63D0\u4EA4", "\u5728\u7EBF\u63D0\u4EA4", "\u63D0\u4EA4\u53CD\u9988", "\u63D0\u4EA4\u8BC4\u8BBA", "\u9884\u7EA6\u4F53\u9A8C", "\u62A5\u540D"])) return "visitor_submission";
|
|
23611
|
+
if (hasAny2(text, ["\u8BA4\u9886", "\u76F8\u4E92\u5B89\u6392", "\u534F\u4F5C", "\u5206\u914D\u4EFB\u52A1", "\u591A\u4EBA\u4EFB\u52A1", "\u5171\u4EAB\u4EFB\u52A1"])) return "runtime_collaboration";
|
|
23612
|
+
if (hasAny2(text, ["\u540E\u53F0", "\u7BA1\u7406\u540E\u53F0", "\u7F51\u9875\u91CC\u7F16\u8F91", "\u7F51\u9875\u4E0A\u4F20", "\u4E0A\u4F20\u6309\u94AE", "\u767B\u5F55\u540E\u7F16\u8F91", "CMS", "cms"])) return "web_admin";
|
|
23613
|
+
if (hasAny2(text, ["data.json", "markdown", "Markdown", "md \u6587\u4EF6", "\u624B\u52A8\u6539\u6587\u4EF6"])) return "manual_files";
|
|
23614
|
+
if (hasAny2(text, ["Agent", "agent", "\u6BCF\u6B21\u6211\u63D0\u4F9B", "\u6211\u63D0\u4F9B\u65B0\u7684", "\u4F20\u5F88\u591A", "\u4E0D\u5B9A\u671F\u7EF4\u62A4", "\u91CD\u65B0\u90E8\u7F72"])) return "agent_assisted";
|
|
23615
|
+
if (needType === "content_marketing_site" || needType === "data_visualization_site" || needType === "static_display") return "agent_assisted";
|
|
23616
|
+
return "unknown";
|
|
23617
|
+
}
|
|
23618
|
+
function decideAccessTopology(text, usageScope, maintenanceMode) {
|
|
23619
|
+
if (hasAny2(text, ["\u540C\u4E00 Wi-Fi", "\u540C\u4E00\u4E2A Wi-Fi", "\u5C40\u57DF\u7F51", "\u5185\u7F51", "\u5BB6\u91CC\u7F51\u7EDC"])) return "lan_only";
|
|
23620
|
+
if (hasAny2(text, ["\u5916\u51FA", "\u516C\u7F51 IP", "\u516C\u7F51ip", "IP \u5730\u5740", "\u670D\u52A1\u5668", "VPS", "vps"])) return "internet_ip";
|
|
23621
|
+
if (hasAny2(text, ["\u57DF\u540D", "HTTPS", "https", "\u5907\u6848", "\u516C\u5F00\u7F51\u7AD9", "\u5B98\u7F51"])) return "public_domain";
|
|
23622
|
+
if (usageScope === "self" && maintenanceMode !== "runtime_collaboration") return "single_device";
|
|
23623
|
+
if (usageScope === "public_audience") return "public_domain";
|
|
23624
|
+
return "unknown";
|
|
23625
|
+
}
|
|
23626
|
+
function decideTechnicalShape(text, needType, maintenanceMode) {
|
|
23627
|
+
if (needType === "ai_automation") return "full_backend_saas";
|
|
23628
|
+
if (needType === "transaction_workflow") return hasAny2(text, ["\u652F\u4ED8", "\u8BA2\u5355", "\u6536\u8D39"]) ? "full_backend_saas" : "light_backend_json_sqlite";
|
|
23629
|
+
if (needType === "multi_user_collaboration") return "light_backend_json_sqlite";
|
|
23630
|
+
if (needType === "content_marketing_site") {
|
|
23631
|
+
return maintenanceMode === "web_admin" || maintenanceMode === "visitor_submission" ? "light_backend_json_sqlite" : "static_json_data_page";
|
|
23632
|
+
}
|
|
23633
|
+
if (needType === "data_visualization_site") {
|
|
23634
|
+
return maintenanceMode === "web_admin" || maintenanceMode === "visitor_submission" ? "light_backend_json_sqlite" : "static_json_data_page";
|
|
23635
|
+
}
|
|
23636
|
+
if (needType === "content_knowledge") {
|
|
23637
|
+
return maintenanceMode === "agent_assisted" || maintenanceMode === "manual_files" ? "static_json_data_page" : "light_backend_json_sqlite";
|
|
23638
|
+
}
|
|
23639
|
+
if (needType === "personal_local_tool") return "local_storage_tool";
|
|
23640
|
+
if (needType === "static_display") return "static_page";
|
|
23641
|
+
return "unknown";
|
|
23642
|
+
}
|
|
23643
|
+
function decideRecommendedDeployment(needType, technicalShape, maintenanceMode, accessTopology) {
|
|
23644
|
+
if (technicalShape === "static_page") return "static_only";
|
|
23645
|
+
if (technicalShape === "local_storage_tool" || technicalShape === "local_json_import_export") return "local_browser_only";
|
|
23646
|
+
if (maintenanceMode === "agent_assisted" && ["content_marketing_site", "data_visualization_site", "content_knowledge"].includes(needType)) {
|
|
23647
|
+
return "static_hosting_with_agent_updates";
|
|
23648
|
+
}
|
|
23649
|
+
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
23650
|
+
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
23651
|
+
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
23652
|
+
if (technicalShape === "light_backend_json_sqlite") return "unknown";
|
|
23653
|
+
return "unknown";
|
|
23654
|
+
}
|
|
23655
|
+
function decideRoute(needType, technicalShape, maintenanceMode) {
|
|
23656
|
+
if (needType === "personal_local_tool") return "spec_compile";
|
|
23657
|
+
if (["static_page", "static_json_data_page"].includes(technicalShape) && maintenanceMode === "agent_assisted") return "spec_compile";
|
|
23658
|
+
return "spec_interrogate";
|
|
23659
|
+
}
|
|
23660
|
+
function decideConfidence(needType, strongSignals, weakSignals) {
|
|
23661
|
+
if (needType === "unknown") return "low";
|
|
23662
|
+
if (strongSignals.length >= 2) return "high";
|
|
23663
|
+
if (strongSignals.length === 1 || weakSignals.length >= 2) return "medium";
|
|
23664
|
+
return "medium";
|
|
23665
|
+
}
|
|
23666
|
+
function enforceHardRules(decision) {
|
|
23667
|
+
const hasRuntimeCollaboration = decision.needType === "multi_user_collaboration" || decision.maintenanceMode === "runtime_collaboration" || decision.strongSignals.some((signal) => ["\u591A\u4EBA", "\u5171\u4EAB", "\u534F\u4F5C", "\u8BA4\u9886", "\u76F8\u4E92\u5B89\u6392"].includes(signal));
|
|
23668
|
+
if (hasRuntimeCollaboration && decision.technicalShape !== "light_backend_json_sqlite") {
|
|
23500
23669
|
return {
|
|
23501
|
-
|
|
23502
|
-
|
|
23670
|
+
...decision,
|
|
23671
|
+
needType: "multi_user_collaboration",
|
|
23672
|
+
maintenanceMode: "runtime_collaboration",
|
|
23673
|
+
technicalShape: "light_backend_json_sqlite",
|
|
23674
|
+
recommendedDeployment: recommendedDeploymentForCollaboration(decision.accessTopology),
|
|
23675
|
+
route: "spec_interrogate",
|
|
23676
|
+
mustNotUse: Array.from(/* @__PURE__ */ new Set([...decision.mustNotUse, "static_display", "local_storage_only"]))
|
|
23503
23677
|
};
|
|
23504
|
-
}
|
|
23505
|
-
|
|
23506
|
-
"spec_interrogate",
|
|
23507
|
-
{
|
|
23508
|
-
title: "\u9700\u6C42\u8FFD\u95EE",
|
|
23509
|
-
description: "\u5206\u6790\u7528\u6237\u7684\u539F\u59CB idea \u6216\u9875\u9762\u4FEE\u6539\u9700\u6C42\uFF0C\u5224\u65AD\u4FE1\u606F\u662F\u5426\u8DB3\u591F\u8FDB\u5165\u5F00\u53D1\u9636\u6BB5\u3002\u5F53\u4FE1\u606F\u7F3A\u5931\u8F83\u591A\u65F6\uFF0C\u8F93\u51FA\u8FFD\u95EE\u95EE\u9898\u6E05\u5355\u3002",
|
|
23510
|
-
inputSchema: SpecInterrogateInputSchema.shape,
|
|
23511
|
-
outputSchema: SpecInterrogateOutputSchema.shape
|
|
23512
|
-
},
|
|
23513
|
-
handler
|
|
23514
|
-
);
|
|
23678
|
+
}
|
|
23679
|
+
return decision;
|
|
23515
23680
|
}
|
|
23516
|
-
|
|
23517
|
-
|
|
23518
|
-
|
|
23519
|
-
|
|
23520
|
-
|
|
23521
|
-
|
|
23522
|
-
|
|
23523
|
-
|
|
23524
|
-
|
|
23525
|
-
|
|
23526
|
-
|
|
23527
|
-
needType
|
|
23528
|
-
|
|
23529
|
-
|
|
23530
|
-
|
|
23531
|
-
|
|
23532
|
-
|
|
23533
|
-
"
|
|
23534
|
-
|
|
23535
|
-
|
|
23536
|
-
"
|
|
23537
|
-
|
|
23538
|
-
|
|
23539
|
-
|
|
23540
|
-
|
|
23541
|
-
|
|
23542
|
-
"
|
|
23543
|
-
|
|
23544
|
-
|
|
23545
|
-
|
|
23546
|
-
]
|
|
23547
|
-
|
|
23548
|
-
|
|
23549
|
-
|
|
23550
|
-
|
|
23551
|
-
"
|
|
23552
|
-
|
|
23553
|
-
|
|
23554
|
-
"
|
|
23555
|
-
|
|
23556
|
-
|
|
23557
|
-
|
|
23558
|
-
|
|
23559
|
-
|
|
23560
|
-
|
|
23561
|
-
|
|
23562
|
-
|
|
23563
|
-
"
|
|
23564
|
-
"
|
|
23565
|
-
|
|
23566
|
-
|
|
23567
|
-
|
|
23568
|
-
|
|
23569
|
-
|
|
23570
|
-
|
|
23571
|
-
|
|
23572
|
-
|
|
23573
|
-
|
|
23574
|
-
|
|
23575
|
-
|
|
23576
|
-
|
|
23681
|
+
function recommendedDeploymentForCollaboration(accessTopology) {
|
|
23682
|
+
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
23683
|
+
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
23684
|
+
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
23685
|
+
return "unknown";
|
|
23686
|
+
}
|
|
23687
|
+
function buildMustNotUse(needType, maintenanceMode) {
|
|
23688
|
+
const items = [];
|
|
23689
|
+
if (needType === "multi_user_collaboration") items.push("static_display", "local_storage_only");
|
|
23690
|
+
if (needType === "content_marketing_site" || needType === "data_visualization_site") items.push("admin_backend_by_default", "database_by_default");
|
|
23691
|
+
if (maintenanceMode === "agent_assisted") items.push("web_admin_cms_by_default");
|
|
23692
|
+
if (needType === "transaction_workflow") items.push("local_storage_only");
|
|
23693
|
+
if (needType === "ai_automation") items.push("frontend_api_key");
|
|
23694
|
+
return Array.from(new Set(items));
|
|
23695
|
+
}
|
|
23696
|
+
function buildBoundaryQuestionIds(needType, maintenanceMode, accessTopology) {
|
|
23697
|
+
if (needType === "multi_user_collaboration") {
|
|
23698
|
+
return ["access_topology", "public_ip_acceptance", "claim_rule", "time_conflict_rule"];
|
|
23699
|
+
}
|
|
23700
|
+
if (needType === "content_marketing_site") {
|
|
23701
|
+
return ["maintenance_mode", "geo_goal", "visitor_submission", "image_volume"];
|
|
23702
|
+
}
|
|
23703
|
+
if (needType === "data_visualization_site") {
|
|
23704
|
+
return ["data_update_mode", "audience_scope", "history_versions"];
|
|
23705
|
+
}
|
|
23706
|
+
if (needType === "content_knowledge") {
|
|
23707
|
+
return maintenanceMode === "agent_assisted" ? ["maintenance_mode", "visibility_scope"] : ["editor_roles", "permission_rule", "version_history"];
|
|
23708
|
+
}
|
|
23709
|
+
if (needType === "unknown") return ["usage_scope", "maintenance_mode", "data_flow"];
|
|
23710
|
+
if (accessTopology === "unknown" && needType !== "personal_local_tool") return ["access_topology"];
|
|
23711
|
+
return [];
|
|
23712
|
+
}
|
|
23713
|
+
function buildDefaultAssumptions(needType, usageScope, maintenanceMode, accessTopology, deployment) {
|
|
23714
|
+
const items = [`\u4F7F\u7528\u8303\u56F4\uFF1A${usageScope}`, `\u7EF4\u62A4\u65B9\u5F0F\uFF1A${maintenanceMode}`, `\u8BBF\u95EE\u65B9\u5F0F\uFF1A${accessTopology}`, `\u63A8\u8350\u90E8\u7F72\uFF1A${deployment}`];
|
|
23715
|
+
if (needType === "content_marketing_site" || needType === "data_visualization_site") {
|
|
23716
|
+
items.push("\u5185\u5BB9\u6216\u6570\u636E\u7ECF\u5E38\u66F4\u65B0\u65F6\uFF0CMVP \u9ED8\u8BA4\u4F18\u5148\u7531 Agent \u66F4\u65B0\u5185\u5BB9\u6587\u4EF6\u5E76\u91CD\u65B0\u90E8\u7F72\uFF0C\u4E0D\u9ED8\u8BA4\u5EFA\u8BBE\u7F51\u9875\u540E\u53F0\u3002");
|
|
23717
|
+
}
|
|
23718
|
+
if (needType === "multi_user_collaboration") {
|
|
23719
|
+
items.push("\u591A\u4EBA\u534F\u4F5C\u5148\u786E\u8BA4\u5C40\u57DF\u7F51\u662F\u5426\u8DB3\u591F\uFF1B\u4E0D\u76F4\u63A5\u9ED8\u8BA4\u516C\u7F51\u670D\u52A1\u5668\u3001\u57DF\u540D\u6216\u5907\u6848\u3002");
|
|
23720
|
+
}
|
|
23721
|
+
return items;
|
|
23722
|
+
}
|
|
23723
|
+
function extractCoreObjects(text, needType) {
|
|
23724
|
+
if (needType === "multi_user_collaboration") return ["\u7528\u6237", "\u4EFB\u52A1", "\u65E5\u7A0B\u9879"];
|
|
23725
|
+
if (needType === "content_marketing_site") return ["Q&A", "\u7167\u7247", "\u7528\u6237\u53CD\u9988", "\u4FC3\u9500\u6D3B\u52A8", "\u6559\u7EC3\u4FE1\u606F"].filter((item) => text.includes(item.replace("\u4FE1\u606F", "")) || item === "Q&A");
|
|
23726
|
+
if (needType === "data_visualization_site") return ["xlsx \u6587\u4EF6", "\u6570\u636E\u8868", "\u56FE\u8868\u914D\u7F6E", "\u6E32\u67D3\u7ED3\u679C"];
|
|
23727
|
+
if (needType === "personal_local_tool") {
|
|
23728
|
+
if (text.includes("\u836F")) return ["\u836F\u54C1"];
|
|
23729
|
+
if (text.includes("\u98DF\u6750")) return ["\u98DF\u6750"];
|
|
23730
|
+
return ["\u8BB0\u5F55"];
|
|
23731
|
+
}
|
|
23732
|
+
return [];
|
|
23733
|
+
}
|
|
23734
|
+
function extractStates(text, needType) {
|
|
23735
|
+
const states = [];
|
|
23736
|
+
if (needType === "multi_user_collaboration") states.push("\u5F85\u8BA4\u9886", "\u5DF2\u8BA4\u9886", "\u5DF2\u5B8C\u6210", "\u53D6\u6D88");
|
|
23737
|
+
if (hasAny2(text, ["\u8FC7\u671F", "\u4E34\u671F", "\u5230\u671F"])) states.push("\u6B63\u5E38", "\u4E34\u671F", "\u5DF2\u8FC7\u671F");
|
|
23738
|
+
return Array.from(new Set(states));
|
|
23739
|
+
}
|
|
23740
|
+
function extractActions(text, needType) {
|
|
23741
|
+
if (needType === "multi_user_collaboration") return ["\u5B89\u6392\u4EFB\u52A1", "\u8BA4\u9886\u4EFB\u52A1", "\u67E5\u770B\u65E5\u7A0B\u51B2\u7A81"];
|
|
23742
|
+
if (needType === "content_marketing_site") return ["\u66F4\u65B0\u5185\u5BB9", "\u53D1\u5E03\u4FC3\u9500", "\u7EF4\u62A4\u56FE\u7247\u548C FAQ"];
|
|
23743
|
+
if (needType === "data_visualization_site") return ["\u89E3\u6790 xlsx", "\u66F4\u65B0\u56FE\u8868\u6570\u636E", "\u6E32\u67D3\u7ED3\u679C"];
|
|
23744
|
+
return [];
|
|
23745
|
+
}
|
|
23746
|
+
var strongSignalMap = {
|
|
23747
|
+
\u591A\u4EBA: ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA\u5171\u7528", "\u5171\u7528", "\u5171\u4EAB"],
|
|
23748
|
+
\u534F\u4F5C: ["\u534F\u4F5C", "\u76F8\u4E92\u5B89\u6392", "\u8BA4\u9886", "\u5206\u914D\u4EFB\u52A1"],
|
|
23749
|
+
\u6743\u9650: ["\u6743\u9650", "\u767B\u5F55", "\u540E\u53F0", "\u7BA1\u7406\u5458", "\u5BA1\u6279", "\u5BA1\u6838"],
|
|
23750
|
+
\u516C\u5F00\u63D0\u4EA4: ["\u8BBF\u5BA2\u63D0\u4EA4", "\u7528\u6237\u63D0\u4EA4", "\u5728\u7EBF\u63D0\u4EA4", "\u63D0\u4EA4\u53CD\u9988"],
|
|
23751
|
+
\u4EA4\u6613: ["\u652F\u4ED8", "\u8BA2\u5355", "\u552E\u5356", "\u8D2D\u4E70", "\u62A5\u540D", "\u9884\u7EA6"],
|
|
23752
|
+
AI: ["AI", "ai", "API Key", "\u6A21\u578B\u63A5\u53E3", "\u5927\u6A21\u578B"]
|
|
23753
|
+
};
|
|
23754
|
+
var weakSignalMap = {
|
|
23755
|
+
\u5C55\u793A: ["\u5C55\u793A", "\u7F51\u7AD9", "\u9875\u9762"],
|
|
23756
|
+
\u89C6\u89C9: ["\u9875\u9762\u9AD8\u7EA7", "\u597D\u770B", "\u7F8E\u89C2"],
|
|
23757
|
+
\u7BA1\u7406: ["\u7BA1\u7406", "\u7EF4\u62A4", "\u5185\u5BB9\u591A"],
|
|
23758
|
+
\u5217\u8868: ["\u5217\u8868", "\u67E5\u770B", "\u7B5B\u9009", "\u65E5\u7A0B", "\u72B6\u6001"]
|
|
23759
|
+
};
|
|
23760
|
+
function collectSignals(text, map) {
|
|
23761
|
+
return Object.entries(map).filter(([, signals]) => hasAny2(text, signals)).map(([label]) => label);
|
|
23762
|
+
}
|
|
23763
|
+
function hasAny2(text, signals) {
|
|
23764
|
+
return signals.some((signal) => text.includes(signal));
|
|
23765
|
+
}
|
|
23766
|
+
function isNegated(text, signals) {
|
|
23767
|
+
return signals.some((signal) => new RegExp(`(\u4E0D\u63A5|\u4E0D\u505A|\u4E0D\u7528|\u65E0\u9700|\u4E0D\u9700\u8981|\u6682\u4E0D|\u5148\u4E0D).{0,8}${signal}`, "i").test(text));
|
|
23768
|
+
}
|
|
23769
|
+
|
|
23770
|
+
// src/core/pmGateClarification.ts
|
|
23771
|
+
function shouldUsePmGateClarification(decision) {
|
|
23772
|
+
return [
|
|
23773
|
+
"personal_local_tool",
|
|
23774
|
+
"multi_user_collaboration",
|
|
23775
|
+
"content_marketing_site",
|
|
23776
|
+
"data_visualization_site"
|
|
23777
|
+
].includes(decision.needType);
|
|
23778
|
+
}
|
|
23779
|
+
function buildPmGateClarification(decision) {
|
|
23780
|
+
const questions = questionsForDecision(decision);
|
|
23781
|
+
return {
|
|
23782
|
+
missingFields: questions.map((question) => question.field),
|
|
23783
|
+
questions,
|
|
23784
|
+
defaultAssumptions: Object.fromEntries(questions.map((question) => [question.field, question.defaultAssumption]))
|
|
23785
|
+
};
|
|
23786
|
+
}
|
|
23787
|
+
function formatPmGateInterrogatePrelude(decision) {
|
|
23788
|
+
return `# PM Gate \u5224\u65AD\uFF1A${needTypeTitle(decision.needType)}
|
|
23789
|
+
|
|
23790
|
+
- **\u9700\u6C42\u95E8:** ${decision.needType}
|
|
23791
|
+
- **\u4F7F\u7528\u8303\u56F4:** ${decision.usageScope}
|
|
23792
|
+
- **\u7EF4\u62A4\u65B9\u5F0F:** ${decision.maintenanceMode}
|
|
23793
|
+
- **\u8BBF\u95EE\u65B9\u5F0F:** ${decision.accessTopology}
|
|
23794
|
+
- **\u6280\u672F\u5F62\u6001:** ${decision.technicalShape}
|
|
23795
|
+
- **\u63A8\u8350\u90E8\u7F72:** ${decision.recommendedDeployment}
|
|
23796
|
+
- **\u5F3A\u4FE1\u53F7:** ${decision.strongSignals.join("\u3001") || "\u65E0"}
|
|
23797
|
+
- **\u5F31\u4FE1\u53F7:** ${decision.weakSignals.join("\u3001") || "\u65E0"}
|
|
23798
|
+
- **\u4E0D\u8981\u9ED8\u8BA4\u4F7F\u7528:** ${decision.mustNotUse.join("\u3001") || "\u65E0"}
|
|
23799
|
+
|
|
23800
|
+
${decision.defaultAssumptions.map((item) => `- ${item}`).join("\n")}
|
|
23801
|
+
|
|
23802
|
+
> \u5148\u786E\u8BA4\u4F7F\u7528\u8303\u56F4\u3001\u7EF4\u62A4\u65B9\u5F0F\u548C\u8BBF\u95EE\u8FB9\u754C\uFF1B\u4E0D\u8981\u5957\u7528\u65E0\u5173 domain \u6A21\u677F\u3002
|
|
23803
|
+
`;
|
|
23804
|
+
}
|
|
23805
|
+
function questionsForDecision(decision) {
|
|
23806
|
+
switch (decision.needType) {
|
|
23807
|
+
case "personal_local_tool":
|
|
23808
|
+
return personalLocalToolQuestions();
|
|
23809
|
+
case "multi_user_collaboration":
|
|
23810
|
+
return multiUserCollaborationQuestions();
|
|
23811
|
+
case "content_marketing_site":
|
|
23812
|
+
return contentMarketingQuestions();
|
|
23813
|
+
case "data_visualization_site":
|
|
23814
|
+
return dataVisualizationQuestions();
|
|
23815
|
+
default:
|
|
23816
|
+
return [];
|
|
23817
|
+
}
|
|
23818
|
+
}
|
|
23819
|
+
function personalLocalToolQuestions() {
|
|
23820
|
+
return [
|
|
23821
|
+
{
|
|
23822
|
+
field: "record_fields",
|
|
23823
|
+
question: "\u6BCF\u6761\u8BB0\u5F55\u8981\u4FDD\u5B58\u54EA\u4E9B\u4FE1\u606F\uFF1F",
|
|
23824
|
+
example: "\u6BD4\u5982\u836F\u54C1\u540D\u3001\u5206\u7C7B\u3001\u6570\u91CF\u3001\u5355\u4F4D\u3001\u6709\u6548\u671F\u3001\u5B58\u653E\u4F4D\u7F6E\u3001\u72B6\u6001\u3001\u5907\u6CE8\u3002",
|
|
23825
|
+
whyImportant: "\u51B3\u5B9A\u8868\u5355\u5B57\u6BB5\u3001\u5217\u8868\u5217\u548C\u63D0\u9192\u8BA1\u7B97\uFF0C\u4E0D\u9700\u8981\u56E0\u6B64\u5347\u7EA7\u5230\u540E\u53F0\u3002",
|
|
23826
|
+
options: ["\u540D\u79F0 + \u65E5\u671F + \u72B6\u6001 + \u5907\u6CE8", "\u518D\u52A0\u6570\u91CF/\u5355\u4F4D/\u5206\u7C7B/\u4F4D\u7F6E", "\u6211\u4F1A\u81EA\u5B9A\u4E49\u5B57\u6BB5"],
|
|
23827
|
+
defaultAssumption: "\u540D\u79F0\u3001\u65E5\u671F\u3001\u72B6\u6001\u3001\u5907\u6CE8\uFF1B\u836F\u54C1\u7C7B\u9ED8\u8BA4\u518D\u52A0\u6570\u91CF\u3001\u5206\u7C7B\u548C\u5B58\u653E\u4F4D\u7F6E",
|
|
23828
|
+
priority: "P0"
|
|
23829
|
+
},
|
|
23830
|
+
{
|
|
23831
|
+
field: "data_storage",
|
|
23832
|
+
question: "\u6570\u636E\u4FDD\u5B58\u5728\u54EA\u91CC\uFF1F",
|
|
23833
|
+
example: "\u6BD4\u5982\u6D4F\u89C8\u5668 localStorage\uFF0C\u672C\u673A JSON \u5907\u4EFD\uFF0C\u6216\u4EE5\u540E\u518D\u8003\u8651\u591A\u4EBA\u540C\u6B65\u3002",
|
|
23834
|
+
whyImportant: "\u4E2A\u4EBA\u6216\u5BB6\u5EAD\u81EA\u7528\u5DE5\u5177\u9ED8\u8BA4\u4E0D\u9700\u8981\u670D\u52A1\u5668\u6570\u636E\u5E93\u3002",
|
|
23835
|
+
options: ["\u6D4F\u89C8\u5668 localStorage", "JSON/CSV \u5BFC\u5165\u5BFC\u51FA\u5907\u4EFD", "\u4EE5\u540E\u518D\u8003\u8651\u591A\u4EBA\u540C\u6B65"],
|
|
23836
|
+
defaultAssumption: "\u6D4F\u89C8\u5668 localStorage\uFF0C\u652F\u6301 JSON \u5BFC\u5165\u5BFC\u51FA\u5907\u4EFD",
|
|
23837
|
+
priority: "P0"
|
|
23838
|
+
},
|
|
23839
|
+
{
|
|
23840
|
+
field: "operations",
|
|
23841
|
+
question: "\u7B2C\u4E00\u7248\u9700\u8981\u54EA\u4E9B\u64CD\u4F5C\uFF1F",
|
|
23842
|
+
example: "\u6BD4\u5982\u65B0\u589E\u3001\u7F16\u8F91\u3001\u5220\u9664\u3001\u641C\u7D22\u7B5B\u9009\u3001\u4E34\u671F/\u8FC7\u671F\u72B6\u6001\u5217\u8868\u3002",
|
|
23843
|
+
whyImportant: "\u9501\u5B9A MVP\uFF0C\u4E0D\u628A\u6E05\u5355\u5DE5\u5177\u6269\u6210\u540E\u53F0\u7CFB\u7EDF\u3002",
|
|
23844
|
+
options: ["\u65B0\u589E/\u7F16\u8F91/\u5220\u9664 + \u641C\u7D22\u7B5B\u9009", "\u518D\u52A0\u4E34\u671F/\u8FC7\u671F\u63D0\u9192", "\u518D\u52A0\u7EDF\u8BA1\u548C\u5BFC\u5165\u5BFC\u51FA"],
|
|
23845
|
+
defaultAssumption: "\u65B0\u589E/\u7F16\u8F91/\u5220\u9664 + \u641C\u7D22\u7B5B\u9009 + \u9875\u9762\u5185\u4E34\u671F/\u8FC7\u671F\u63D0\u9192",
|
|
23846
|
+
priority: "P0"
|
|
23847
|
+
},
|
|
23848
|
+
{
|
|
23849
|
+
field: "account_scope",
|
|
23850
|
+
question: "\u9700\u8981\u767B\u5F55\u3001\u540E\u53F0\u6216\u7BA1\u7406\u5458\u5417\uFF1F",
|
|
23851
|
+
example: "\u6BD4\u5982\u5B8C\u5168\u4E0D\u7528\u767B\u5F55\uFF0C\u5BB6\u5EAD\u7535\u8111\u672C\u5730\u7528\uFF1B\u6216\u4EE5\u540E\u518D\u505A\u591A\u4EBA\u8D26\u53F7\u3002",
|
|
23852
|
+
whyImportant: "\u51B3\u5B9A\u662F\u5426\u5F15\u5165\u540E\u7AEF\u3001\u9274\u6743\u548C\u670D\u52A1\u5668\u6210\u672C\u3002",
|
|
23853
|
+
options: ["\u4E0D\u9700\u8981\uFF0C\u6D4F\u89C8\u5668\u672C\u5730\u7528", "\u53EA\u52A0\u672C\u5730\u8BBF\u95EE\u5BC6\u7801", "\u9700\u8981\u591A\u4EBA\u8D26\u53F7/\u540E\u53F0"],
|
|
23854
|
+
defaultAssumption: "\u4E0D\u9700\u8981\u767B\u5F55\u3001\u540E\u53F0\u6216\u7BA1\u7406\u5458",
|
|
23855
|
+
priority: "P0"
|
|
23856
|
+
}
|
|
23857
|
+
];
|
|
23858
|
+
}
|
|
23859
|
+
function multiUserCollaborationQuestions() {
|
|
23860
|
+
return [
|
|
23861
|
+
{
|
|
23862
|
+
field: "access_topology",
|
|
23863
|
+
question: "\u4F60\u4EEC\u53EA\u5728\u540C\u4E00 Wi-Fi/\u5C40\u57DF\u7F51\u4F7F\u7528\uFF0C\u8FD8\u662F\u5916\u51FA\u4E5F\u8981\u8BBF\u95EE\uFF1F",
|
|
23864
|
+
example: "\u6BD4\u5982\u5BBF\u820D\u540C\u4E00 Wi-Fi \u5185\u7528\uFF0C\u6216\u4EBA\u5728\u5916\u9762\u4E5F\u8981\u7528\u624B\u673A\u6253\u5F00\u3002",
|
|
23865
|
+
whyImportant: "\u5148\u51B3\u5B9A\u672C\u5730\u5C40\u57DF\u7F51\u670D\u52A1\u3001\u4F4E\u4EF7 VPS\uFF0C\u8FD8\u662F\u57DF\u540D + HTTPS\u3002",
|
|
23866
|
+
options: ["\u53EA\u5728\u540C\u4E00 Wi-Fi/\u5C40\u57DF\u7F51", "\u5916\u51FA\u4E5F\u8981\u8BBF\u95EE", "\u8981\u6B63\u5F0F\u57DF\u540D + HTTPS"],
|
|
23867
|
+
defaultAssumption: "\u5148\u786E\u8BA4\u8BBF\u95EE\u8303\u56F4\uFF0C\u4E0D\u76F4\u63A5\u9ED8\u8BA4\u516C\u7F51\u670D\u52A1\u5668",
|
|
23868
|
+
priority: "P0"
|
|
23869
|
+
},
|
|
23870
|
+
{
|
|
23871
|
+
field: "public_ip_acceptance",
|
|
23872
|
+
question: "\u5982\u679C\u5916\u51FA\u4E5F\u8981\u8BBF\u95EE\uFF0C\u80FD\u5426\u63A5\u53D7\u5148\u7528\u51E0\u5341\u5143/\u5E74\u7684\u516C\u7F51 VPS + IP \u5730\u5740\uFF1F",
|
|
23873
|
+
example: "\u6BD4\u5982\u5148\u901A\u8FC7 http://\u670D\u52A1\u5668IP \u6253\u5F00\uFF0C\u8DD1\u901A\u540E\u518D\u8003\u8651\u57DF\u540D\u548C\u5907\u6848\u3002",
|
|
23874
|
+
whyImportant: "\u56FA\u5B9A\u5C0F\u56E2\u961F MVP \u53EF\u4EE5\u5148\u907F\u5F00\u57DF\u540D\u3001\u8BC1\u4E66\u3001\u5907\u6848\u548C\u590D\u6742\u8FD0\u7EF4\u3002",
|
|
23875
|
+
options: ["\u80FD\u63A5\u53D7 IP \u8BBF\u95EE", "\u5FC5\u987B\u57DF\u540D + HTTPS", "\u5148\u53EA\u505A\u5C40\u57DF\u7F51"],
|
|
23876
|
+
defaultAssumption: "\u56FA\u5B9A\u5C0F\u7EC4\u5916\u51FA\u8BBF\u95EE\u65F6\uFF0C\u9ED8\u8BA4\u4F4E\u4EF7 VPS + SQLite + IP \u5730\u5740",
|
|
23877
|
+
priority: "P0"
|
|
23878
|
+
},
|
|
23879
|
+
{
|
|
23880
|
+
field: "claim_rule",
|
|
23881
|
+
question: "\u522B\u4EBA\u5B89\u6392\u7ED9\u6211\u7684\u4EFB\u52A1\uFF0C\u5FC5\u987B\u6211\u8BA4\u9886\u540E\u624D\u8FDB\u5165\u65E5\u7A0B\u5417\uFF1F",
|
|
23882
|
+
example: "\u6BD4\u5982\u5BA4\u53CB\u5B89\u6392\u540E\u5148\u663E\u793A\u5F85\u8BA4\u9886\uFF0C\u81EA\u5DF1\u7ED9\u81EA\u5DF1\u7684\u4EFB\u52A1\u76F4\u63A5\u751F\u6548\u3002",
|
|
23883
|
+
whyImportant: "\u51B3\u5B9A\u4EFB\u52A1\u72B6\u6001\u673A\u548C\u901A\u77E5/\u63D0\u9192\u903B\u8F91\u3002",
|
|
23884
|
+
options: ["\u5FC5\u987B\u8BA4\u9886\u540E\u751F\u6548", "\u521B\u5EFA\u540E\u8FDB\u5165\u5BF9\u65B9\u65E5\u7A0B\u4F46\u6807\u5F85\u786E\u8BA4", "\u521B\u5EFA\u540E\u76F4\u63A5\u751F\u6548"],
|
|
23885
|
+
defaultAssumption: "\u522B\u4EBA\u5B89\u6392\u7684\u4EFB\u52A1\u9700\u8981\u8BA4\u9886\uFF1B\u81EA\u5DF1\u5B89\u6392\u7ED9\u81EA\u5DF1\u7684\u4EFB\u52A1\u76F4\u63A5\u751F\u6548",
|
|
23886
|
+
priority: "P0"
|
|
23887
|
+
},
|
|
23888
|
+
{
|
|
23889
|
+
field: "time_conflict_rule",
|
|
23890
|
+
question: "\u540C\u4E00\u65F6\u95F4\u591A\u4E2A\u4EFB\u52A1\u51B2\u7A81\u65F6\uFF0C\u662F\u5E76\u6392\u5C55\u793A\u9AD8\u4EAE\uFF0C\u8FD8\u662F\u76F4\u63A5\u963B\u6B62\u5B89\u6392\uFF1F",
|
|
23891
|
+
example: "\u6BD4\u5982\u540C\u4E00\u5C0F\u65F6\u4E24\u4E2A\u4EFB\u52A1\u90FD\u663E\u793A\u5728\u65E5\u7A0B\u683C\u5B50\u91CC\uFF0C\u5E76\u7528\u7EA2\u8272\u63D0\u793A\u51B2\u7A81\u3002",
|
|
23892
|
+
whyImportant: "\u51B3\u5B9A\u65E5\u7A0B\u89C6\u56FE\u4EA4\u4E92\uFF0C\u662F\u63D0\u9192\u578B\u8FD8\u662F\u62E6\u622A\u578B\u3002",
|
|
23893
|
+
options: ["\u5E76\u6392\u5C55\u793A + \u9AD8\u4EAE\u51B2\u7A81", "\u963B\u6B62\u5B89\u6392", "\u53EA\u63D0\u793A\u4F46\u5141\u8BB8\u4FDD\u5B58"],
|
|
23894
|
+
defaultAssumption: "\u5E76\u6392\u5C55\u793A\u5E76\u9AD8\u4EAE\u51B2\u7A81\uFF0C\u4E0D\u9ED8\u8BA4\u963B\u6B62\u5B89\u6392",
|
|
23895
|
+
priority: "P1"
|
|
23896
|
+
}
|
|
23897
|
+
];
|
|
23898
|
+
}
|
|
23899
|
+
function contentMarketingQuestions() {
|
|
23900
|
+
return [
|
|
23901
|
+
{
|
|
23902
|
+
field: "maintenance_mode",
|
|
23903
|
+
question: "\u5185\u5BB9\u66F4\u65B0\u662F\u4EA4\u7ED9 Agent \u6539\u6587\u4EF6\u5E76\u91CD\u65B0\u90E8\u7F72\uFF0C\u8FD8\u662F\u9700\u8981\u4F60\u5728\u7F51\u9875\u540E\u53F0\u81EA\u5DF1\u7F16\u8F91\uFF1F",
|
|
23904
|
+
example: "\u6BD4\u5982\u4F60\u628A\u65B0\u7167\u7247\u548C\u4FC3\u9500\u6587\u6848\u53D1\u7ED9 Agent\uFF1B\u6216\u7F51\u9875\u91CC\u767B\u5F55\u540E\u4E0A\u4F20\u56FE\u7247\u3002",
|
|
23905
|
+
whyImportant: "\u5185\u5BB9\u7ECF\u5E38\u6539\u4E0D\u7B49\u4E8E\u5FC5\u987B\u505A\u540E\u53F0\u3002",
|
|
23906
|
+
options: ["Agent \u4EE3\u7EF4\u62A4\u5E76\u91CD\u65B0\u90E8\u7F72", "\u6211\u624B\u52A8\u6539 Markdown/data.json", "\u7F51\u9875\u540E\u53F0\u7F16\u8F91\u548C\u4E0A\u4F20"],
|
|
23907
|
+
defaultAssumption: "\u5148\u6309 Agent \u4EE3\u7EF4\u62A4\u5185\u5BB9\u6587\u4EF6\u5E76\u91CD\u65B0\u90E8\u7F72",
|
|
23908
|
+
priority: "P0"
|
|
23909
|
+
},
|
|
23910
|
+
{
|
|
23911
|
+
field: "visitor_submission",
|
|
23912
|
+
question: "\u8BBF\u5BA2\u9700\u8981\u5728\u7F51\u7AD9\u4E0A\u63D0\u4EA4\u53CD\u9988\u3001\u9884\u7EA6\u6216\u62A5\u540D\u5417\uFF1F",
|
|
23913
|
+
example: "\u6BD4\u5982\u7528\u6237\u8BC4\u4EF7\u53EA\u662F\u4F60\u6574\u7406\u540E\u5C55\u793A\uFF0C\u8FD8\u662F\u8BBF\u5BA2\u80FD\u76F4\u63A5\u63D0\u4EA4\u8868\u5355\u3002",
|
|
23914
|
+
whyImportant: "\u8BBF\u5BA2\u63D0\u4EA4\u4F1A\u89E6\u53D1\u540E\u7AEF\u3001\u5BA1\u6838\u3001\u9632\u5783\u573E\u548C\u901A\u77E5\u3002",
|
|
23915
|
+
options: ["\u4E0D\u9700\u8981\u8BBF\u5BA2\u63D0\u4EA4", "\u53EA\u5C55\u793A\u4F60\u6574\u7406\u7684\u53CD\u9988", "\u9700\u8981\u8BBF\u5BA2\u5728\u7EBF\u63D0\u4EA4"],
|
|
23916
|
+
defaultAssumption: "\u4E0D\u505A\u8BBF\u5BA2\u63D0\u4EA4\uFF0C\u53EA\u5C55\u793A\u7EF4\u62A4\u540E\u7684\u5185\u5BB9",
|
|
23917
|
+
priority: "P0"
|
|
23918
|
+
},
|
|
23919
|
+
{
|
|
23920
|
+
field: "geo_goal",
|
|
23921
|
+
question: "GEO/SEO \u91CD\u70B9\u670D\u52A1\u54EA\u4E2A\u672C\u5730\u66DD\u5149\u76EE\u6807\uFF1F",
|
|
23922
|
+
example: "\u6BD4\u5982\u9644\u8FD1\u5065\u8EAB\u623F\u641C\u7D22\u3001\u79C1\u6559\u5173\u952E\u8BCD\u3001\u56E2\u8BFE\u4FC3\u9500\u3001\u54C1\u724C\u95EE\u7B54\u3002",
|
|
23923
|
+
whyImportant: "\u51B3\u5B9A\u9875\u9762\u7ED3\u6784\u3001FAQ\u3001schema \u548C\u5185\u5BB9\u680F\u76EE\u4F18\u5148\u7EA7\u3002",
|
|
23924
|
+
options: ["\u672C\u5730\u641C\u7D22\u66DD\u5149", "\u95EE\u7B54\u5185\u5BB9\u8986\u76D6", "\u4FC3\u9500\u6D3B\u52A8\u8F6C\u5316"],
|
|
23925
|
+
defaultAssumption: "\u672C\u5730\u670D\u52A1\u5B98\u7F51 + FAQ + \u6559\u7EC3/\u8BFE\u7A0B/\u4FC3\u9500\u7ED3\u6784\u5316\u5185\u5BB9",
|
|
23926
|
+
priority: "P1"
|
|
23927
|
+
}
|
|
23928
|
+
];
|
|
23929
|
+
}
|
|
23930
|
+
function dataVisualizationQuestions() {
|
|
23931
|
+
return [
|
|
23932
|
+
{
|
|
23933
|
+
field: "data_update_mode",
|
|
23934
|
+
question: "\u65B0 xlsx \u662F\u4EA4\u7ED9 Agent \u66F4\u65B0\u7F51\u7AD9\uFF0C\u8FD8\u662F\u7F51\u7AD9\u91CC\u8981\u6709\u4E0A\u4F20\u6309\u94AE\uFF1F",
|
|
23935
|
+
example: "\u6BD4\u5982\u6BCF\u6B21\u628A Excel \u53D1\u7ED9 Agent \u91CD\u65B0\u751F\u6210 data.json\uFF0C\u6216\u7528\u6237\u5728\u7F51\u9875\u91CC\u4E0A\u4F20\u3002",
|
|
23936
|
+
whyImportant: "Agent \u66F4\u65B0\u53EF\u4EE5\u4FDD\u6301\u9759\u6001\u7AD9\uFF1B\u7F51\u9875\u4E0A\u4F20\u624D\u9700\u8981\u66F4\u591A\u8FD0\u884C\u65F6\u903B\u8F91\u3002",
|
|
23937
|
+
options: ["\u4EA4\u7ED9 Agent \u66F4\u65B0\u5E76\u91CD\u65B0\u90E8\u7F72", "\u6D4F\u89C8\u5668\u5185\u4E0A\u4F20\u89E3\u6790", "\u540E\u7AEF\u7EDF\u4E00\u4E0A\u4F20\u4FDD\u5B58"],
|
|
23938
|
+
defaultAssumption: "Agent \u89E3\u6790 xlsx \u751F\u6210 data.json/chart config\uFF0C\u518D\u91CD\u65B0\u90E8\u7F72\u9759\u6001\u56FE\u8868\u7AD9",
|
|
23939
|
+
priority: "P0"
|
|
23940
|
+
},
|
|
23941
|
+
{
|
|
23942
|
+
field: "audience_scope",
|
|
23943
|
+
question: "\u56FE\u8868\u53EA\u7ED9\u81EA\u5DF1\u770B\uFF0C\u8FD8\u662F\u516C\u5F00\u7ED9\u522B\u4EBA\u770B\uFF1F",
|
|
23944
|
+
example: "\u6BD4\u5982\u672C\u5730\u6253\u5F00\u67E5\u770B\uFF0C\u6216\u90E8\u7F72\u5230\u516C\u5F00\u7F51\u5740\u7ED9\u5BA2\u6237/\u56E2\u961F\u770B\u3002",
|
|
23945
|
+
whyImportant: "\u51B3\u5B9A\u90E8\u7F72\u3001\u6743\u9650\u548C\u662F\u5426\u9700\u8981\u7EDF\u4E00\u5728\u7EBF\u6570\u636E\u6E90\u3002",
|
|
23946
|
+
options: ["\u53EA\u7ED9\u81EA\u5DF1\u770B", "\u516C\u5F00\u53EA\u8BFB\u5C55\u793A", "\u56FA\u5B9A\u56E2\u961F\u53EF\u8BBF\u95EE"],
|
|
23947
|
+
defaultAssumption: "\u9ED8\u8BA4\u9759\u6001\u53EA\u8BFB\u5C55\u793A\uFF0C\u4E0D\u9ED8\u8BA4\u767B\u5F55\u548C\u540E\u53F0",
|
|
23948
|
+
priority: "P0"
|
|
23949
|
+
},
|
|
23950
|
+
{
|
|
23951
|
+
field: "history_versions",
|
|
23952
|
+
question: "\u9700\u8981\u4FDD\u7559\u5386\u53F2\u7248\u672C\uFF0C\u8FD8\u662F\u53EA\u5C55\u793A\u6700\u65B0\u7ED3\u679C\uFF1F",
|
|
23953
|
+
example: "\u6BD4\u5982\u53EA\u66FF\u6362\u6700\u65B0\u6570\u636E\uFF0C\u6216\u4FDD\u7559\u6BCF\u6708 Excel \u5BF9\u6BD4\u8D8B\u52BF\u3002",
|
|
23954
|
+
whyImportant: "\u51B3\u5B9A\u6570\u636E\u6587\u4EF6\u7ED3\u6784\u548C\u662F\u5426\u9700\u8981\u7248\u672C\u7BA1\u7406\u3002",
|
|
23955
|
+
options: ["\u53EA\u5C55\u793A\u6700\u65B0", "\u4FDD\u7559\u5386\u53F2\u7248\u672C", "\u540E\u7EED\u518D\u52A0"],
|
|
23956
|
+
defaultAssumption: "MVP \u53EA\u5C55\u793A\u6700\u65B0\u7ED3\u679C",
|
|
23957
|
+
priority: "P1"
|
|
23958
|
+
}
|
|
23959
|
+
];
|
|
23960
|
+
}
|
|
23961
|
+
function needTypeTitle(needType) {
|
|
23962
|
+
const titles = {
|
|
23963
|
+
static_display: "\u9759\u6001\u5C55\u793A\u7F51\u7AD9",
|
|
23964
|
+
personal_local_tool: "\u4E2A\u4EBA\u672C\u5730\u5DE5\u5177",
|
|
23965
|
+
multi_user_collaboration: "\u591A\u4EBA\u534F\u4F5C\u5DE5\u5177",
|
|
23966
|
+
content_marketing_site: "\u5185\u5BB9\u8425\u9500\u7F51\u7AD9",
|
|
23967
|
+
data_visualization_site: "\u6570\u636E\u56FE\u8868\u7F51\u7AD9",
|
|
23968
|
+
transaction_workflow: "\u4EA4\u6613/\u5C65\u7EA6\u6D41\u7A0B",
|
|
23969
|
+
content_knowledge: "\u5185\u5BB9/\u77E5\u8BC6\u7BA1\u7406",
|
|
23970
|
+
ai_automation: "AI \u81EA\u52A8\u5316\u4EA7\u54C1",
|
|
23971
|
+
unknown: "\u4EA7\u54C1\u5F00\u53D1"
|
|
23972
|
+
};
|
|
23973
|
+
return titles[needType];
|
|
23974
|
+
}
|
|
23975
|
+
|
|
23976
|
+
// src/tools/specInterrogate.ts
|
|
23977
|
+
function registerSpecInterrogate(server) {
|
|
23978
|
+
const handler = async (input) => {
|
|
23979
|
+
const readiness = calculateReadiness(input.raw_idea, input.known_context);
|
|
23980
|
+
const technicalProfile = buildTechnicalProfile(input.raw_idea, input.known_context || {});
|
|
23981
|
+
const pmIntentDecision = decidePmIntent(input.raw_idea, input.known_context || {});
|
|
23982
|
+
const usePmGate = input.scenario !== "modify_ui" && shouldUsePmGateClarification(pmIntentDecision);
|
|
23983
|
+
const clarification = usePmGate ? buildPmGateClarification(pmIntentDecision) : generateClarification(
|
|
23984
|
+
input.raw_idea,
|
|
23985
|
+
readiness,
|
|
23986
|
+
input.scenario,
|
|
23987
|
+
input.target_platform,
|
|
23988
|
+
input.strictness,
|
|
23989
|
+
input.known_context
|
|
23990
|
+
);
|
|
23991
|
+
const baseMarkdown = formatInterrogateResult(readiness, clarification);
|
|
23992
|
+
const markdown = usePmGate ? `${formatPmGateInterrogatePrelude(pmIntentDecision)}
|
|
23993
|
+
${baseMarkdown}` : baseMarkdown;
|
|
23994
|
+
const structuredContent = buildInterrogateStructuredOutput(
|
|
23995
|
+
readiness,
|
|
23996
|
+
clarification,
|
|
23997
|
+
technicalProfile,
|
|
23998
|
+
usePmGate ? pmIntentDecision : void 0
|
|
23999
|
+
);
|
|
24000
|
+
return {
|
|
24001
|
+
content: [{ type: "text", text: markdown }],
|
|
24002
|
+
structuredContent
|
|
24003
|
+
};
|
|
24004
|
+
};
|
|
24005
|
+
server.registerTool(
|
|
24006
|
+
"spec_interrogate",
|
|
24007
|
+
{
|
|
24008
|
+
title: "\u9700\u6C42\u8FFD\u95EE",
|
|
24009
|
+
description: "\u5206\u6790\u7528\u6237\u7684\u539F\u59CB idea \u6216\u9875\u9762\u4FEE\u6539\u9700\u6C42\uFF0C\u5224\u65AD\u4FE1\u606F\u662F\u5426\u8DB3\u591F\u8FDB\u5165\u5F00\u53D1\u9636\u6BB5\u3002\u5F53\u4FE1\u606F\u7F3A\u5931\u8F83\u591A\u65F6\uFF0C\u8F93\u51FA\u8FFD\u95EE\u95EE\u9898\u6E05\u5355\u3002",
|
|
24010
|
+
inputSchema: SpecInterrogateInputSchema.shape,
|
|
24011
|
+
outputSchema: SpecInterrogateOutputSchema.shape
|
|
24012
|
+
},
|
|
24013
|
+
handler
|
|
24014
|
+
);
|
|
24015
|
+
}
|
|
24016
|
+
|
|
24017
|
+
// src/schemas/coercion.ts
|
|
24018
|
+
var looseBoolean = external_exports.preprocess((value) => {
|
|
24019
|
+
if (typeof value !== "string") return value;
|
|
24020
|
+
const normalized = value.trim().toLowerCase();
|
|
24021
|
+
if (normalized === "true") return true;
|
|
24022
|
+
if (normalized === "false") return false;
|
|
24023
|
+
return value;
|
|
24024
|
+
}, external_exports.boolean());
|
|
24025
|
+
var looseNumber = external_exports.preprocess((value) => {
|
|
24026
|
+
if (typeof value !== "string") return value;
|
|
24027
|
+
const normalized = value.trim();
|
|
24028
|
+
if (normalized === "") return value;
|
|
24029
|
+
const parsed = Number(normalized);
|
|
24030
|
+
return Number.isFinite(parsed) ? parsed : value;
|
|
24031
|
+
}, external_exports.number());
|
|
24032
|
+
function looseStringArray(description) {
|
|
24033
|
+
return external_exports.preprocess((value) => {
|
|
24034
|
+
if (Array.isArray(value)) return value;
|
|
24035
|
+
if (value && typeof value === "object" && "item" in value && Array.isArray(value.item)) {
|
|
24036
|
+
return value.item;
|
|
24037
|
+
}
|
|
24038
|
+
return value;
|
|
24039
|
+
}, external_exports.array(external_exports.string())).describe(description);
|
|
24040
|
+
}
|
|
24041
|
+
|
|
24042
|
+
// src/schemas/specCompile.schema.ts
|
|
24043
|
+
var SpecCompileInputSchema = external_exports.object({
|
|
24044
|
+
raw_idea: external_exports.string().describe("\u7528\u6237\u539F\u59CB\u60F3\u6CD5"),
|
|
24045
|
+
answers: external_exports.record(external_exports.string(), external_exports.any()).optional().describe("\u7528\u6237\u5BF9\u8FFD\u95EE\u7684\u56DE\u7B54"),
|
|
24046
|
+
allow_assumptions: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(true).describe("\u662F\u5426\u5141\u8BB8\u4F7F\u7528\u9ED8\u8BA4\u5047\u8BBE"),
|
|
24047
|
+
min_readiness_score: external_exports.union([external_exports.number(), looseNumber]).optional().default(70).describe("\u6700\u4F4E\u53EF\u63A5\u53D7\u7684 readiness \u5206\u6570")
|
|
23577
24048
|
});
|
|
23578
24049
|
|
|
23579
24050
|
// src/schemas/outputs/specCompile.output.ts
|
|
@@ -23701,234 +24172,6 @@ function addIf(items, label, condition) {
|
|
|
23701
24172
|
if (condition) items.push(label);
|
|
23702
24173
|
}
|
|
23703
24174
|
|
|
23704
|
-
// src/core/pmIntentGate.ts
|
|
23705
|
-
function decidePmIntent(rawText, context = {}) {
|
|
23706
|
-
const text = `${rawText} ${JSON.stringify(context)}`;
|
|
23707
|
-
const strongSignals = collectSignals(text, strongSignalMap);
|
|
23708
|
-
const weakSignals = collectSignals(text, weakSignalMap);
|
|
23709
|
-
const usageScope = decideUsageScope(text);
|
|
23710
|
-
const preliminaryNeedType = decideNeedType(text, strongSignals);
|
|
23711
|
-
const maintenanceMode = decideMaintenanceMode(text, preliminaryNeedType);
|
|
23712
|
-
const accessTopology = decideAccessTopology(text, usageScope, maintenanceMode);
|
|
23713
|
-
const needType = preliminaryNeedType;
|
|
23714
|
-
const technicalShape = decideTechnicalShape(text, needType, maintenanceMode);
|
|
23715
|
-
const recommendedDeployment = decideRecommendedDeployment(needType, technicalShape, maintenanceMode, accessTopology);
|
|
23716
|
-
const route = decideRoute(needType, technicalShape, maintenanceMode);
|
|
23717
|
-
const confidence = decideConfidence(needType, strongSignals, weakSignals);
|
|
23718
|
-
return enforceHardRules({
|
|
23719
|
-
needType,
|
|
23720
|
-
usageScope,
|
|
23721
|
-
maintenanceMode,
|
|
23722
|
-
accessTopology,
|
|
23723
|
-
technicalShape,
|
|
23724
|
-
recommendedDeployment,
|
|
23725
|
-
route,
|
|
23726
|
-
confidence,
|
|
23727
|
-
strongSignals,
|
|
23728
|
-
weakSignals,
|
|
23729
|
-
coreObjects: extractCoreObjects(text, needType),
|
|
23730
|
-
states: extractStates(text, needType),
|
|
23731
|
-
actions: extractActions(text, needType),
|
|
23732
|
-
mustNotUse: buildMustNotUse(needType, maintenanceMode),
|
|
23733
|
-
boundaryQuestionIds: buildBoundaryQuestionIds(needType, maintenanceMode, accessTopology),
|
|
23734
|
-
defaultAssumptions: buildDefaultAssumptions(needType, usageScope, maintenanceMode, accessTopology, recommendedDeployment),
|
|
23735
|
-
source: "local_rule"
|
|
23736
|
-
});
|
|
23737
|
-
}
|
|
23738
|
-
function decideNeedType(text, strongSignals) {
|
|
23739
|
-
if (hasAny2(text, ["AI", "ai", "LLM", "llm", "GPT", "gpt", "\u5927\u6A21\u578B", "\u6A21\u578B\u63A5\u53E3", "API Key", "DeepSeek", "OpenAI"]) && !isNegated(text, ["AI", "\u6A21\u578B"])) {
|
|
23740
|
-
return "ai_automation";
|
|
23741
|
-
}
|
|
23742
|
-
if (hasAny2(text, ["\u652F\u4ED8", "\u8BA2\u5355", "\u552E\u5356", "\u8D2D\u4E70", "\u62A5\u540D", "\u9884\u7EA6", "\u6536\u6B3E", "\u5BFC\u51FA Excel", "\u5BFC\u51FA"])) {
|
|
23743
|
-
return "transaction_workflow";
|
|
23744
|
-
}
|
|
23745
|
-
if (hasAny2(text, ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA\u5171\u7528", "\u5171\u7528", "\u5171\u4EAB", "\u534F\u4F5C", "\u76F8\u4E92\u5B89\u6392", "\u8BA4\u9886", "\u5206\u914D\u4EFB\u52A1", "\u56E2\u961F\u5F85\u529E"])) {
|
|
23746
|
-
return "multi_user_collaboration";
|
|
23747
|
-
}
|
|
23748
|
-
if (hasAny2(text, ["xlsx", "XLSX", "Excel", "csv", "CSV", "\u56FE\u8868", "\u6570\u636E\u6E32\u67D3", "\u53EF\u89C6\u5316", "\u4EEA\u8868\u76D8"]) && hasAny2(text, ["\u6587\u4EF6", "\u6570\u636E", "\u6E32\u67D3", "\u56FE\u8868", "\u4E0A\u4F20", "\u63D0\u4F9B"])) {
|
|
23749
|
-
return "data_visualization_site";
|
|
23750
|
-
}
|
|
23751
|
-
if (hasAny2(text, ["\u5065\u8EAB\u623F", "\u9910\u5385", "\u5496\u5561\u5E97", "\u5DE5\u4F5C\u5BA4", "\u95E8\u5E97", "\u672C\u5730\u670D\u52A1", "GEO", "geo", "SEO", "seo", "\u4FC3\u9500", "\u6559\u7EC3", "Q&A", "FAQ", "\u7167\u7247", "\u7528\u6237\u53CD\u9988"])) {
|
|
23752
|
-
return "content_marketing_site";
|
|
23753
|
-
}
|
|
23754
|
-
if (hasAny2(text, ["\u77E5\u8BC6\u5E93", "\u6587\u6863\u7BA1\u7406", "\u8D44\u6599\u5E93", "\u56E2\u961F\u6587\u6863"])) {
|
|
23755
|
-
return "content_knowledge";
|
|
23756
|
-
}
|
|
23757
|
-
if (hasAny2(text, ["\u836F\u54C1", "\u98DF\u6750", "\u8BFB\u4E66", "\u8BA2\u9605", "\u690D\u7269", "\u88C5\u5907", "\u6E05\u5355", "\u8BB0\u5F55", "\u63D0\u9192", "\u5E93\u5B58", "\u4FDD\u8D28\u671F"]) && !strongSignals.includes("\u591A\u4EBA")) {
|
|
23758
|
-
return "personal_local_tool";
|
|
23759
|
-
}
|
|
23760
|
-
if (hasAny2(text, ["\u4F5C\u54C1\u96C6", "\u4E2A\u4EBA\u4E3B\u9875", "\u5B98\u7F51", "\u4ECB\u7ECD\u9875", "\u516C\u53F8\u4ECB\u7ECD", "\u8054\u7CFB\u65B9\u5F0F"]) && !hasAny2(text, ["\u63D0\u4EA4", "\u4E0A\u4F20", "\u7F16\u8F91", "\u7EF4\u62A4", "\u6570\u636E", "\u4EFB\u52A1", "\u8BA4\u9886"])) {
|
|
23761
|
-
return "static_display";
|
|
23762
|
-
}
|
|
23763
|
-
return "unknown";
|
|
23764
|
-
}
|
|
23765
|
-
function decideUsageScope(text) {
|
|
23766
|
-
if (hasAny2(text, ["\u516C\u5F00", "\u8BBF\u5BA2", "\u5BA2\u6237", "\u7528\u6237", "\u4F1A\u5458", "\u5B98\u7F51", "\u7F51\u7AD9", "\u95E8\u5E97", "\u5065\u8EAB\u623F", "\u9910\u5385", "\u5DE5\u4F5C\u5BA4"])) return "public_audience";
|
|
23767
|
-
if (hasAny2(text, ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA", "\u5BB6\u5EAD", "\u540C\u4E8B", "\u56E2\u961F", "\u5171\u7528", "\u5171\u4EAB"])) return "fixed_group";
|
|
23768
|
-
if (hasAny2(text, ["\u81EA\u5DF1", "\u81EA\u7528", "\u4E2A\u4EBA", "\u6211\u7528", "\u6211\u81EA\u5DF1"])) return "self";
|
|
23769
|
-
return "unknown";
|
|
23770
|
-
}
|
|
23771
|
-
function decideMaintenanceMode(text, needType) {
|
|
23772
|
-
if (hasAny2(text, ["\u8BBF\u5BA2\u63D0\u4EA4", "\u7528\u6237\u63D0\u4EA4", "\u5728\u7EBF\u63D0\u4EA4", "\u63D0\u4EA4\u53CD\u9988", "\u63D0\u4EA4\u8BC4\u8BBA", "\u9884\u7EA6\u4F53\u9A8C", "\u62A5\u540D"])) return "visitor_submission";
|
|
23773
|
-
if (hasAny2(text, ["\u8BA4\u9886", "\u76F8\u4E92\u5B89\u6392", "\u534F\u4F5C", "\u5206\u914D\u4EFB\u52A1", "\u591A\u4EBA\u4EFB\u52A1", "\u5171\u4EAB\u4EFB\u52A1"])) return "runtime_collaboration";
|
|
23774
|
-
if (hasAny2(text, ["\u540E\u53F0", "\u7BA1\u7406\u540E\u53F0", "\u7F51\u9875\u91CC\u7F16\u8F91", "\u7F51\u9875\u4E0A\u4F20", "\u4E0A\u4F20\u6309\u94AE", "\u767B\u5F55\u540E\u7F16\u8F91", "CMS", "cms"])) return "web_admin";
|
|
23775
|
-
if (hasAny2(text, ["data.json", "markdown", "Markdown", "md \u6587\u4EF6", "\u624B\u52A8\u6539\u6587\u4EF6"])) return "manual_files";
|
|
23776
|
-
if (hasAny2(text, ["Agent", "agent", "\u6BCF\u6B21\u6211\u63D0\u4F9B", "\u6211\u63D0\u4F9B\u65B0\u7684", "\u4F20\u5F88\u591A", "\u4E0D\u5B9A\u671F\u7EF4\u62A4", "\u91CD\u65B0\u90E8\u7F72"])) return "agent_assisted";
|
|
23777
|
-
if (needType === "content_marketing_site" || needType === "data_visualization_site" || needType === "static_display") return "agent_assisted";
|
|
23778
|
-
return "unknown";
|
|
23779
|
-
}
|
|
23780
|
-
function decideAccessTopology(text, usageScope, maintenanceMode) {
|
|
23781
|
-
if (hasAny2(text, ["\u540C\u4E00 Wi-Fi", "\u540C\u4E00\u4E2A Wi-Fi", "\u5C40\u57DF\u7F51", "\u5185\u7F51", "\u5BB6\u91CC\u7F51\u7EDC"])) return "lan_only";
|
|
23782
|
-
if (hasAny2(text, ["\u5916\u51FA", "\u516C\u7F51 IP", "\u516C\u7F51ip", "IP \u5730\u5740", "\u670D\u52A1\u5668", "VPS", "vps"])) return "internet_ip";
|
|
23783
|
-
if (hasAny2(text, ["\u57DF\u540D", "HTTPS", "https", "\u5907\u6848", "\u516C\u5F00\u7F51\u7AD9", "\u5B98\u7F51"])) return "public_domain";
|
|
23784
|
-
if (usageScope === "self" && maintenanceMode !== "runtime_collaboration") return "single_device";
|
|
23785
|
-
if (usageScope === "public_audience") return "public_domain";
|
|
23786
|
-
return "unknown";
|
|
23787
|
-
}
|
|
23788
|
-
function decideTechnicalShape(text, needType, maintenanceMode) {
|
|
23789
|
-
if (needType === "ai_automation") return "full_backend_saas";
|
|
23790
|
-
if (needType === "transaction_workflow") return hasAny2(text, ["\u652F\u4ED8", "\u8BA2\u5355", "\u6536\u8D39"]) ? "full_backend_saas" : "light_backend_json_sqlite";
|
|
23791
|
-
if (needType === "multi_user_collaboration") return "light_backend_json_sqlite";
|
|
23792
|
-
if (needType === "content_marketing_site") {
|
|
23793
|
-
return maintenanceMode === "web_admin" || maintenanceMode === "visitor_submission" ? "light_backend_json_sqlite" : "static_json_data_page";
|
|
23794
|
-
}
|
|
23795
|
-
if (needType === "data_visualization_site") {
|
|
23796
|
-
return maintenanceMode === "web_admin" || maintenanceMode === "visitor_submission" ? "light_backend_json_sqlite" : "static_json_data_page";
|
|
23797
|
-
}
|
|
23798
|
-
if (needType === "content_knowledge") {
|
|
23799
|
-
return maintenanceMode === "agent_assisted" || maintenanceMode === "manual_files" ? "static_json_data_page" : "light_backend_json_sqlite";
|
|
23800
|
-
}
|
|
23801
|
-
if (needType === "personal_local_tool") return "local_storage_tool";
|
|
23802
|
-
if (needType === "static_display") return "static_page";
|
|
23803
|
-
return "unknown";
|
|
23804
|
-
}
|
|
23805
|
-
function decideRecommendedDeployment(needType, technicalShape, maintenanceMode, accessTopology) {
|
|
23806
|
-
if (technicalShape === "static_page") return "static_only";
|
|
23807
|
-
if (technicalShape === "local_storage_tool" || technicalShape === "local_json_import_export") return "local_browser_only";
|
|
23808
|
-
if (maintenanceMode === "agent_assisted" && ["content_marketing_site", "data_visualization_site", "content_knowledge"].includes(needType)) {
|
|
23809
|
-
return "static_hosting_with_agent_updates";
|
|
23810
|
-
}
|
|
23811
|
-
if (accessTopology === "lan_only") return "local_lan_server_sqlite";
|
|
23812
|
-
if (accessTopology === "internet_ip") return "cheap_vps_sqlite_by_ip";
|
|
23813
|
-
if (accessTopology === "public_domain") return "vps_domain_https";
|
|
23814
|
-
if (technicalShape === "light_backend_json_sqlite") return "unknown";
|
|
23815
|
-
return "unknown";
|
|
23816
|
-
}
|
|
23817
|
-
function decideRoute(needType, technicalShape, maintenanceMode) {
|
|
23818
|
-
if (needType === "personal_local_tool") return "spec_compile";
|
|
23819
|
-
if (["static_page", "static_json_data_page"].includes(technicalShape) && maintenanceMode === "agent_assisted") return "spec_compile";
|
|
23820
|
-
return "spec_interrogate";
|
|
23821
|
-
}
|
|
23822
|
-
function decideConfidence(needType, strongSignals, weakSignals) {
|
|
23823
|
-
if (needType === "unknown") return "low";
|
|
23824
|
-
if (strongSignals.length >= 2) return "high";
|
|
23825
|
-
if (strongSignals.length === 1 || weakSignals.length >= 2) return "medium";
|
|
23826
|
-
return "medium";
|
|
23827
|
-
}
|
|
23828
|
-
function enforceHardRules(decision) {
|
|
23829
|
-
const hasRuntimeCollaboration = decision.needType === "multi_user_collaboration" || decision.maintenanceMode === "runtime_collaboration" || decision.strongSignals.some((signal) => ["\u591A\u4EBA", "\u5171\u4EAB", "\u534F\u4F5C", "\u8BA4\u9886", "\u76F8\u4E92\u5B89\u6392"].includes(signal));
|
|
23830
|
-
if (hasRuntimeCollaboration && decision.technicalShape !== "light_backend_json_sqlite") {
|
|
23831
|
-
return {
|
|
23832
|
-
...decision,
|
|
23833
|
-
needType: "multi_user_collaboration",
|
|
23834
|
-
maintenanceMode: "runtime_collaboration",
|
|
23835
|
-
technicalShape: "light_backend_json_sqlite",
|
|
23836
|
-
recommendedDeployment: recommendedDeploymentForCollaboration(decision.accessTopology),
|
|
23837
|
-
route: "spec_interrogate",
|
|
23838
|
-
mustNotUse: Array.from(/* @__PURE__ */ new Set([...decision.mustNotUse, "static_display", "local_storage_only"]))
|
|
23839
|
-
};
|
|
23840
|
-
}
|
|
23841
|
-
return decision;
|
|
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
|
-
}
|
|
23849
|
-
function buildMustNotUse(needType, maintenanceMode) {
|
|
23850
|
-
const items = [];
|
|
23851
|
-
if (needType === "multi_user_collaboration") items.push("static_display", "local_storage_only");
|
|
23852
|
-
if (needType === "content_marketing_site" || needType === "data_visualization_site") items.push("admin_backend_by_default", "database_by_default");
|
|
23853
|
-
if (maintenanceMode === "agent_assisted") items.push("web_admin_cms_by_default");
|
|
23854
|
-
if (needType === "transaction_workflow") items.push("local_storage_only");
|
|
23855
|
-
if (needType === "ai_automation") items.push("frontend_api_key");
|
|
23856
|
-
return Array.from(new Set(items));
|
|
23857
|
-
}
|
|
23858
|
-
function buildBoundaryQuestionIds(needType, maintenanceMode, accessTopology) {
|
|
23859
|
-
if (needType === "multi_user_collaboration") {
|
|
23860
|
-
return ["access_topology", "public_ip_acceptance", "claim_rule", "time_conflict_rule"];
|
|
23861
|
-
}
|
|
23862
|
-
if (needType === "content_marketing_site") {
|
|
23863
|
-
return ["maintenance_mode", "geo_goal", "visitor_submission", "image_volume"];
|
|
23864
|
-
}
|
|
23865
|
-
if (needType === "data_visualization_site") {
|
|
23866
|
-
return ["data_update_mode", "audience_scope", "history_versions"];
|
|
23867
|
-
}
|
|
23868
|
-
if (needType === "content_knowledge") {
|
|
23869
|
-
return maintenanceMode === "agent_assisted" ? ["maintenance_mode", "visibility_scope"] : ["editor_roles", "permission_rule", "version_history"];
|
|
23870
|
-
}
|
|
23871
|
-
if (needType === "unknown") return ["usage_scope", "maintenance_mode", "data_flow"];
|
|
23872
|
-
if (accessTopology === "unknown" && needType !== "personal_local_tool") return ["access_topology"];
|
|
23873
|
-
return [];
|
|
23874
|
-
}
|
|
23875
|
-
function buildDefaultAssumptions(needType, usageScope, maintenanceMode, accessTopology, deployment) {
|
|
23876
|
-
const items = [`\u4F7F\u7528\u8303\u56F4\uFF1A${usageScope}`, `\u7EF4\u62A4\u65B9\u5F0F\uFF1A${maintenanceMode}`, `\u8BBF\u95EE\u65B9\u5F0F\uFF1A${accessTopology}`, `\u63A8\u8350\u90E8\u7F72\uFF1A${deployment}`];
|
|
23877
|
-
if (needType === "content_marketing_site" || needType === "data_visualization_site") {
|
|
23878
|
-
items.push("\u5185\u5BB9\u6216\u6570\u636E\u7ECF\u5E38\u66F4\u65B0\u65F6\uFF0CMVP \u9ED8\u8BA4\u4F18\u5148\u7531 Agent \u66F4\u65B0\u5185\u5BB9\u6587\u4EF6\u5E76\u91CD\u65B0\u90E8\u7F72\uFF0C\u4E0D\u9ED8\u8BA4\u5EFA\u8BBE\u7F51\u9875\u540E\u53F0\u3002");
|
|
23879
|
-
}
|
|
23880
|
-
if (needType === "multi_user_collaboration") {
|
|
23881
|
-
items.push("\u591A\u4EBA\u534F\u4F5C\u5148\u786E\u8BA4\u5C40\u57DF\u7F51\u662F\u5426\u8DB3\u591F\uFF1B\u4E0D\u76F4\u63A5\u9ED8\u8BA4\u516C\u7F51\u670D\u52A1\u5668\u3001\u57DF\u540D\u6216\u5907\u6848\u3002");
|
|
23882
|
-
}
|
|
23883
|
-
return items;
|
|
23884
|
-
}
|
|
23885
|
-
function extractCoreObjects(text, needType) {
|
|
23886
|
-
if (needType === "multi_user_collaboration") return ["\u7528\u6237", "\u4EFB\u52A1", "\u65E5\u7A0B\u9879"];
|
|
23887
|
-
if (needType === "content_marketing_site") return ["Q&A", "\u7167\u7247", "\u7528\u6237\u53CD\u9988", "\u4FC3\u9500\u6D3B\u52A8", "\u6559\u7EC3\u4FE1\u606F"].filter((item) => text.includes(item.replace("\u4FE1\u606F", "")) || item === "Q&A");
|
|
23888
|
-
if (needType === "data_visualization_site") return ["xlsx \u6587\u4EF6", "\u6570\u636E\u8868", "\u56FE\u8868\u914D\u7F6E", "\u6E32\u67D3\u7ED3\u679C"];
|
|
23889
|
-
if (needType === "personal_local_tool") {
|
|
23890
|
-
if (text.includes("\u836F")) return ["\u836F\u54C1"];
|
|
23891
|
-
if (text.includes("\u98DF\u6750")) return ["\u98DF\u6750"];
|
|
23892
|
-
return ["\u8BB0\u5F55"];
|
|
23893
|
-
}
|
|
23894
|
-
return [];
|
|
23895
|
-
}
|
|
23896
|
-
function extractStates(text, needType) {
|
|
23897
|
-
const states = [];
|
|
23898
|
-
if (needType === "multi_user_collaboration") states.push("\u5F85\u8BA4\u9886", "\u5DF2\u8BA4\u9886", "\u5DF2\u5B8C\u6210", "\u53D6\u6D88");
|
|
23899
|
-
if (hasAny2(text, ["\u8FC7\u671F", "\u4E34\u671F", "\u5230\u671F"])) states.push("\u6B63\u5E38", "\u4E34\u671F", "\u5DF2\u8FC7\u671F");
|
|
23900
|
-
return Array.from(new Set(states));
|
|
23901
|
-
}
|
|
23902
|
-
function extractActions(text, needType) {
|
|
23903
|
-
if (needType === "multi_user_collaboration") return ["\u5B89\u6392\u4EFB\u52A1", "\u8BA4\u9886\u4EFB\u52A1", "\u67E5\u770B\u65E5\u7A0B\u51B2\u7A81"];
|
|
23904
|
-
if (needType === "content_marketing_site") return ["\u66F4\u65B0\u5185\u5BB9", "\u53D1\u5E03\u4FC3\u9500", "\u7EF4\u62A4\u56FE\u7247\u548C FAQ"];
|
|
23905
|
-
if (needType === "data_visualization_site") return ["\u89E3\u6790 xlsx", "\u66F4\u65B0\u56FE\u8868\u6570\u636E", "\u6E32\u67D3\u7ED3\u679C"];
|
|
23906
|
-
return [];
|
|
23907
|
-
}
|
|
23908
|
-
var strongSignalMap = {
|
|
23909
|
-
\u591A\u4EBA: ["\u591A\u4EBA", "\u5BA4\u53CB", "\u5BB6\u4EBA\u5171\u7528", "\u5171\u7528", "\u5171\u4EAB"],
|
|
23910
|
-
\u534F\u4F5C: ["\u534F\u4F5C", "\u76F8\u4E92\u5B89\u6392", "\u8BA4\u9886", "\u5206\u914D\u4EFB\u52A1"],
|
|
23911
|
-
\u6743\u9650: ["\u6743\u9650", "\u767B\u5F55", "\u540E\u53F0", "\u7BA1\u7406\u5458", "\u5BA1\u6279", "\u5BA1\u6838"],
|
|
23912
|
-
\u516C\u5F00\u63D0\u4EA4: ["\u8BBF\u5BA2\u63D0\u4EA4", "\u7528\u6237\u63D0\u4EA4", "\u5728\u7EBF\u63D0\u4EA4", "\u63D0\u4EA4\u53CD\u9988"],
|
|
23913
|
-
\u4EA4\u6613: ["\u652F\u4ED8", "\u8BA2\u5355", "\u552E\u5356", "\u8D2D\u4E70", "\u62A5\u540D", "\u9884\u7EA6"],
|
|
23914
|
-
AI: ["AI", "ai", "API Key", "\u6A21\u578B\u63A5\u53E3", "\u5927\u6A21\u578B"]
|
|
23915
|
-
};
|
|
23916
|
-
var weakSignalMap = {
|
|
23917
|
-
\u5C55\u793A: ["\u5C55\u793A", "\u7F51\u7AD9", "\u9875\u9762"],
|
|
23918
|
-
\u89C6\u89C9: ["\u9875\u9762\u9AD8\u7EA7", "\u597D\u770B", "\u7F8E\u89C2"],
|
|
23919
|
-
\u7BA1\u7406: ["\u7BA1\u7406", "\u7EF4\u62A4", "\u5185\u5BB9\u591A"],
|
|
23920
|
-
\u5217\u8868: ["\u5217\u8868", "\u67E5\u770B", "\u7B5B\u9009", "\u65E5\u7A0B", "\u72B6\u6001"]
|
|
23921
|
-
};
|
|
23922
|
-
function collectSignals(text, map) {
|
|
23923
|
-
return Object.entries(map).filter(([, signals]) => hasAny2(text, signals)).map(([label]) => label);
|
|
23924
|
-
}
|
|
23925
|
-
function hasAny2(text, signals) {
|
|
23926
|
-
return signals.some((signal) => text.includes(signal));
|
|
23927
|
-
}
|
|
23928
|
-
function isNegated(text, signals) {
|
|
23929
|
-
return signals.some((signal) => new RegExp(`(\u4E0D\u63A5|\u4E0D\u505A|\u4E0D\u7528|\u65E0\u9700|\u4E0D\u9700\u8981|\u6682\u4E0D|\u5148\u4E0D).{0,8}${signal}`, "i").test(text));
|
|
23930
|
-
}
|
|
23931
|
-
|
|
23932
24175
|
// src/core/promptBuilder.ts
|
|
23933
24176
|
function buildSpec(rawIdea, context, readiness) {
|
|
23934
24177
|
const assumptions = [];
|
|
@@ -25555,8 +25798,8 @@ function registerSpecCompile(server) {
|
|
|
25555
25798
|
var ArchitectureDecideInputSchema = external_exports.object({
|
|
25556
25799
|
product_type: external_exports.string().describe("\u4EA7\u54C1\u7C7B\u578B\u63CF\u8FF0"),
|
|
25557
25800
|
platform: external_exports.enum(["web", "mini_program", "app", "backend"]).describe("\u76EE\u6807\u5E73\u53F0"),
|
|
25558
|
-
features:
|
|
25559
|
-
commercial_intent: external_exports.boolean().optional().default(false).describe("\u662F\u5426\u6709\u5546\u4E1A\u5316\u610F\u56FE"),
|
|
25801
|
+
features: looseStringArray("\u529F\u80FD\u5217\u8868"),
|
|
25802
|
+
commercial_intent: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(false).describe("\u662F\u5426\u6709\u5546\u4E1A\u5316\u610F\u56FE"),
|
|
25560
25803
|
expected_users: external_exports.enum(["individual", "small_team", "enterprise", "massive"]).optional().default("individual").describe("\u9884\u671F\u7528\u6237\u89C4\u6A21")
|
|
25561
25804
|
});
|
|
25562
25805
|
|
|
@@ -26631,11 +26874,11 @@ function registerDebugGuide(server) {
|
|
|
26631
26874
|
// src/schemas/acceptanceGenerate.schema.ts
|
|
26632
26875
|
var AcceptanceGenerateInputSchema = external_exports.object({
|
|
26633
26876
|
product_type: external_exports.string().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
26634
|
-
features:
|
|
26877
|
+
features: looseStringArray("\u529F\u80FD\u5217\u8868"),
|
|
26635
26878
|
platform: external_exports.enum(["web", "mini_program", "app", "backend"]).describe("\u76EE\u6807\u5E73\u53F0"),
|
|
26636
|
-
has_backend: external_exports.boolean().optional().default(false).describe("\u662F\u5426\u6709\u540E\u7AEF"),
|
|
26637
|
-
has_payment: external_exports.boolean().optional().default(false).describe("\u662F\u5426\u6D89\u53CA\u652F\u4ED8"),
|
|
26638
|
-
has_auth: external_exports.boolean().optional().default(false).describe("\u662F\u5426\u6D89\u53CA\u9274\u6743")
|
|
26879
|
+
has_backend: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(false).describe("\u662F\u5426\u6709\u540E\u7AEF"),
|
|
26880
|
+
has_payment: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(false).describe("\u662F\u5426\u6D89\u53CA\u652F\u4ED8"),
|
|
26881
|
+
has_auth: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(false).describe("\u662F\u5426\u6D89\u53CA\u9274\u6743")
|
|
26639
26882
|
});
|
|
26640
26883
|
|
|
26641
26884
|
// src/schemas/outputs/acceptanceGenerate.output.ts
|
|
@@ -27579,7 +27822,7 @@ var ProductSpecAssistInputSchema = external_exports.object({
|
|
|
27579
27822
|
known_context: external_exports.record(external_exports.string(), external_exports.unknown()).optional().describe("\u5DF2\u6709\u4E0A\u4E0B\u6587"),
|
|
27580
27823
|
preferred_platform: external_exports.enum(["web", "mini_program", "app", "backend", "unknown"]).optional().default("unknown").describe("\u7528\u6237\u5DF2\u77E5\u5E73\u53F0"),
|
|
27581
27824
|
strictness: external_exports.enum(["light", "normal", "grill"]).optional().default("normal").describe("\u8FFD\u95EE\u5F3A\u5EA6"),
|
|
27582
|
-
auto_execute: external_exports.boolean().optional().default(true).describe("\u662F\u5426\u5141\u8BB8\u81EA\u52A8\u8C03\u7528\u5BF9\u5E94 engine")
|
|
27825
|
+
auto_execute: external_exports.union([external_exports.boolean(), looseBoolean]).optional().default(true).describe("\u662F\u5426\u5141\u8BB8\u81EA\u52A8\u8C03\u7528\u5BF9\u5E94 engine")
|
|
27583
27826
|
});
|
|
27584
27827
|
|
|
27585
27828
|
// src/schemas/outputs/productSpecAssist.output.ts
|
|
@@ -28107,6 +28350,7 @@ function handleBuildProduct(message, knownContext, strictness, autoExecute, rout
|
|
|
28107
28350
|
quickQuestions,
|
|
28108
28351
|
agentGuidance: [
|
|
28109
28352
|
"\u9762\u5411\u5C0F\u767D\u672C\u5730\u5DE5\u5177\u65F6\uFF0C\u4E0D\u8981\u628A quickQuestions \u539F\u6837\u629B\u7ED9\u7528\u6237\uFF0C\u4E5F\u4E0D\u8981\u8981\u6C42\u7528\u6237\u56DE\u7B54\u7C7B\u4F3C\u201CB + a\u201D\u7684\u7ED3\u6784\u5316\u9009\u9879\uFF1B\u5DF2\u751F\u6210 MVP \u8349\u6848\uFF0C\u6700\u591A\u95EE\u4E00\u53E5\u81EA\u7136\u8BED\u8A00\u786E\u8BA4\u3002\u9875\u9762\u9AD8\u7EA7\u611F\u53EA\u5F71\u54CD UI\uFF0C\u4E0D\u8981\u56E0\u6B64\u7EA0\u504F\u6210\u540E\u7AEF\u3001\u767B\u5F55\u3001\u591A\u7AEF\u540C\u6B65\u6216\u670D\u52A1\u5668\u6570\u636E\u5E93\u3002",
|
|
28353
|
+
"\u5F53\u524D nextAction \u662F confirm_spec\uFF0C\u8868\u793A\u8349\u6848\u5DF2\u7ECF\u751F\u6210\uFF1B\u4E0D\u8981\u518D\u8C03\u7528 spec_interrogate\u3001spec_compile \u6216 architecture_decide \u6765\u91CD\u590D\u8FFD\u95EE\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u4FEE\u6539\u89C4\u683C\u3002",
|
|
28110
28354
|
"\u4E0D\u8981\u628A\u7528\u6237\u7AEF\u767B\u5F55\u548C\u540E\u53F0\u7BA1\u7406\u5458\u767B\u5F55\u5408\u5E76\u6210\u540C\u4E00\u4E2A\u5B57\u6BB5\u3002",
|
|
28111
28355
|
"\u5982\u679C\u7528\u6237\u53EA\u9700\u8981\u5BFC\u51FA\uFF0C\u4E0D\u8981\u64C5\u81EA\u6269\u5C55\u6210\u5B8C\u6574\u540E\u53F0\u7BA1\u7406\u7CFB\u7EDF\u3002",
|
|
28112
28356
|
"\u672A\u547D\u4E2D\u7A33\u5B9A domain pack \u65F6\uFF0C\u5E94\u4F7F\u7528 generic MVP \u8349\u6848\uFF0C\u4E0D\u8981\u5957\u7528\u62A5\u540D\u3001\u7535\u5546\u3001\u9884\u7EA6\u3001\u5185\u5BB9\u793E\u533A\u3001\u5DE5\u5355\u3001\u77E5\u8BC6\u5E93\u6216 CRM \u6A21\u677F\u3002"
|
|
@@ -29695,7 +29939,7 @@ function registerProductSpecAssist(server) {
|
|
|
29695
29939
|
function createServer() {
|
|
29696
29940
|
const server = new McpServer({
|
|
29697
29941
|
name: "product-spec-mcp",
|
|
29698
|
-
version: "0.3.
|
|
29942
|
+
version: "0.3.30"
|
|
29699
29943
|
});
|
|
29700
29944
|
registerSpecInterrogate(server);
|
|
29701
29945
|
registerSpecCompile(server);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "product-spec-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.30",
|
|
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",
|