@wowok/agent-mcp 2.5.5 → 2.6.1

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.
Files changed (146) hide show
  1. package/README.md +5 -3
  2. package/dist/config/runtime.js +3 -6
  3. package/dist/extensions/capability-manifest.d.ts +125 -0
  4. package/dist/extensions/capability-manifest.js +594 -0
  5. package/dist/extensions/constraint-registry.d.ts +24 -0
  6. package/dist/extensions/constraint-registry.js +196 -0
  7. package/dist/extensions/index.d.ts +12 -0
  8. package/dist/extensions/index.js +6 -0
  9. package/dist/extensions/metric-registry.d.ts +26 -0
  10. package/dist/extensions/metric-registry.js +257 -0
  11. package/dist/extensions/mode-evaluator.d.ts +15 -0
  12. package/dist/extensions/mode-evaluator.js +170 -0
  13. package/dist/extensions/modes.d.ts +2 -0
  14. package/dist/extensions/modes.js +407 -0
  15. package/dist/extensions/registry.d.ts +48 -0
  16. package/dist/extensions/registry.js +629 -0
  17. package/dist/extensions/types.d.ts +218 -0
  18. package/dist/extensions/types.js +1 -0
  19. package/dist/harness/checkpoint.js +2 -2
  20. package/dist/knowledge/deployment-scanner.d.ts +3 -0
  21. package/dist/knowledge/deployment-scanner.js +64 -3
  22. package/dist/knowledge/flywheel-loop.js +2 -5
  23. package/dist/knowledge/guard-risk.d.ts +13 -0
  24. package/dist/knowledge/guard-risk.js +57 -0
  25. package/dist/knowledge/guard-templates.js +278 -0
  26. package/dist/knowledge/machine-templates.js +20 -1
  27. package/dist/knowledge/overrides-loader.js +2 -4
  28. package/dist/knowledge/progress-ledger.js +3 -0
  29. package/dist/knowledge/progress-translation.js +5 -1
  30. package/dist/knowledge/service-confirm.d.ts +14 -5
  31. package/dist/knowledge/service-confirm.js +116 -8
  32. package/dist/knowledge/tool-constraints.js +6 -2
  33. package/dist/loop-engineering/improve.js +2 -4
  34. package/dist/project/deployment-bridge.d.ts +5 -0
  35. package/dist/project/deployment-bridge.js +119 -0
  36. package/dist/project/deployment-doc.d.ts +3 -0
  37. package/dist/project/deployment-doc.js +72 -10
  38. package/dist/project/evaluation.d.ts +2 -0
  39. package/dist/project/evaluation.js +578 -86
  40. package/dist/project/graph-builder.d.ts +4 -1
  41. package/dist/project/graph-builder.js +141 -63
  42. package/dist/project/graph.d.ts +1 -0
  43. package/dist/project/handlers.d.ts +221 -5
  44. package/dist/project/handlers.js +933 -14
  45. package/dist/project/index.js +2 -6
  46. package/dist/project/project-store.js +2 -5
  47. package/dist/project/stage-gate.d.ts +4 -0
  48. package/dist/project/stage-gate.js +64 -5
  49. package/dist/project/task-tracker.d.ts +26 -0
  50. package/dist/project/task-tracker.js +78 -0
  51. package/dist/safety/preview.js +16 -0
  52. package/dist/schema/call/allocation.d.ts +16 -16
  53. package/dist/schema/call/base.d.ts +21 -13
  54. package/dist/schema/call/base.js +27 -6
  55. package/dist/schema/call/bridge.d.ts +5 -5
  56. package/dist/schema/call/bridge.js +3 -1
  57. package/dist/schema/call/demand.d.ts +23 -31
  58. package/dist/schema/call/guard.js +1 -1
  59. package/dist/schema/call/machine.d.ts +402 -376
  60. package/dist/schema/call/order.d.ts +149 -228
  61. package/dist/schema/call/order.js +7 -3
  62. package/dist/schema/call/payment.d.ts +183 -3
  63. package/dist/schema/call/payment.js +21 -3
  64. package/dist/schema/call/personal.d.ts +241 -52
  65. package/dist/schema/call/progress.d.ts +53 -61
  66. package/dist/schema/call/progress.js +18 -4
  67. package/dist/schema/call/repository.d.ts +23 -31
  68. package/dist/schema/call/semantic.d.ts +1 -1
  69. package/dist/schema/call/semantic.js +30 -1
  70. package/dist/schema/call/service.d.ts +95 -119
  71. package/dist/schema/call/service.js +22 -1
  72. package/dist/schema/common/index.d.ts +11 -2
  73. package/dist/schema/common/index.js +43 -14
  74. package/dist/schema/config/index.d.ts +12 -12
  75. package/dist/schema/local/index.d.ts +140 -143
  76. package/dist/schema/local/index.js +44 -23
  77. package/dist/schema/messenger/index.d.ts +290 -62
  78. package/dist/schema/messenger/index.js +2 -2
  79. package/dist/schema/operations.d.ts +680 -545
  80. package/dist/schema/operations.js +22 -0
  81. package/dist/schema/project/index.d.ts +2064 -84
  82. package/dist/schema/project/index.js +354 -12
  83. package/dist/schema/query/index.d.ts +715 -354
  84. package/dist/schema/query/index.js +164 -31
  85. package/dist/schema/schema-query/index.d.ts +15 -3
  86. package/dist/schema/schema-query/index.js +23 -5
  87. package/dist/schema/trust/index.d.ts +8 -8
  88. package/dist/schema/utils/node-parser.js +7 -4
  89. package/dist/schema-query/index.d.ts +7 -1
  90. package/dist/schema-query/index.js +204 -4
  91. package/dist/schemas/account_operation.output.json +14 -22
  92. package/dist/schemas/account_operation.schema.json +11 -25
  93. package/dist/schemas/bridge_operation.output.json +6 -0
  94. package/dist/schemas/bridge_operation.schema.json +1 -1
  95. package/dist/schemas/guard-templates.json +379 -0
  96. package/dist/schemas/guard2file.schema.json +1 -1
  97. package/dist/schemas/index.json +1 -1
  98. package/dist/schemas/local_info_operation.output.json +6 -0
  99. package/dist/schemas/local_mark_operation.output.json +7 -1
  100. package/dist/schemas/local_mark_operation.schema.json +1 -1
  101. package/dist/schemas/machineNode2file.schema.json +1 -1
  102. package/dist/schemas/messenger_operation.schema.json +10 -10
  103. package/dist/schemas/onchain_events.output.json +1 -1
  104. package/dist/schemas/onchain_operations.schema.json +348 -296
  105. package/dist/schemas/onchain_operations_allocation.schema.json +34 -25
  106. package/dist/schemas/onchain_operations_arbitration.schema.json +8 -8
  107. package/dist/schemas/onchain_operations_contact.schema.json +8 -8
  108. package/dist/schemas/onchain_operations_demand.schema.json +8 -8
  109. package/dist/schemas/onchain_operations_gen_passport.schema.json +14 -14
  110. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  111. package/dist/schemas/onchain_operations_guard.schema.json +1 -1
  112. package/dist/schemas/onchain_operations_machine.schema.json +41 -33
  113. package/dist/schemas/onchain_operations_order.schema.json +71 -77
  114. package/dist/schemas/onchain_operations_payment.schema.json +141 -111
  115. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  116. package/dist/schemas/onchain_operations_personal.schema.json +7 -7
  117. package/dist/schemas/onchain_operations_progress.schema.json +8 -8
  118. package/dist/schemas/onchain_operations_proof.schema.json +7 -7
  119. package/dist/schemas/onchain_operations_repository.schema.json +8 -8
  120. package/dist/schemas/onchain_operations_reward.schema.json +10 -10
  121. package/dist/schemas/onchain_operations_service.schema.json +46 -35
  122. package/dist/schemas/onchain_operations_treasury.schema.json +8 -8
  123. package/dist/schemas/onchain_table_data.output.json +33 -25
  124. package/dist/schemas/onchain_table_data.schema.json +12 -12
  125. package/dist/schemas/project_operation.output.json +1352 -20
  126. package/dist/schemas/project_operation.schema.json +53 -4
  127. package/dist/schemas/query_toolkit.output.json +111 -82
  128. package/dist/schemas/query_toolkit.schema.json +9 -13
  129. package/dist/schemas/schema_query.output.json +7 -3
  130. package/dist/schemas/schema_query.schema.json +17 -3
  131. package/dist/telemetry/storage.js +2 -2
  132. package/dist/tools/handlers/local.js +20 -5
  133. package/dist/tools/handlers/onchain.js +36 -0
  134. package/dist/tools/handlers/project.js +72 -1
  135. package/dist/tools/handlers/query.js +27 -0
  136. package/dist/tools/handlers/schema-query.js +19 -0
  137. package/dist/tools/handlers/task-status.d.ts +170 -0
  138. package/dist/tools/handlers/task-status.js +55 -0
  139. package/dist/tools/handlers/wip.js +47 -1
  140. package/dist/tools/index.js +212 -8
  141. package/dist/tools/retry.d.ts +8 -0
  142. package/dist/tools/retry.js +85 -0
  143. package/dist/tools/wip-deploy-assist.d.ts +28 -0
  144. package/dist/tools/wip-deploy-assist.js +278 -0
  145. package/package.json +2 -2
  146. package/dist/schemas/guard-node-examples.md +0 -199
@@ -0,0 +1,119 @@
1
+ import { LocalProject } from "@wowok/wowok";
2
+ import { generateDeploymentDoc, validateDeploymentDoc } from "./deployment-doc.js";
3
+ export async function generateDeploymentDocFromProject(projectId, network, detailLevel) {
4
+ const project = await LocalProject.Instance().getProject(projectId);
5
+ if (!project) {
6
+ throw new Error(`Project not found: ${projectId}`);
7
+ }
8
+ const objects = await LocalProject.Instance().listObjects(projectId);
9
+ const graphEdges = await LocalProject.Instance().getGraph(projectId);
10
+ const evaluations = await LocalProject.Instance().listEvaluations(projectId, { evalType: "risk" });
11
+ const validObjects = objects.filter((o) => {
12
+ if (o.objectType === null || o.objectType === undefined)
13
+ return false;
14
+ if (o.objectName && /^0x[0-9a-fA-F]{40,}$/.test(o.objectName))
15
+ return false;
16
+ const meta = (o.metadata ?? {});
17
+ const typeRaw = meta.type_raw;
18
+ if (typeRaw && typeRaw.includes("dynamic_field::Field<"))
19
+ return false;
20
+ return true;
21
+ });
22
+ const deployObjects = validObjects.map((o) => {
23
+ const objectType = o.objectType;
24
+ const meta = (o.metadata ?? {});
25
+ const status = meta.status ??
26
+ (o.objectAddress.startsWith("draft:") ? "draft" : "deployed");
27
+ const config = meta.config ?? undefined;
28
+ const publishRequired = meta.publish_required ??
29
+ (objectType === "service" || objectType === "machine");
30
+ return {
31
+ entry_id: `${objectType}:${o.objectName || o.objectAddress || o.id}`,
32
+ object_type: normalizeObjectType(objectType),
33
+ name: o.objectName || o.objectAddress || o.id,
34
+ reused_from: status === "deployed" && o.objectAddress.startsWith("0x")
35
+ ? o.objectAddress : undefined,
36
+ publish_required: publishRequired,
37
+ description: meta.description ??
38
+ (status === "draft" ? "[蓝图] 待上链" : "[已上链]"),
39
+ config,
40
+ status,
41
+ };
42
+ });
43
+ const addrToEntryId = new Map();
44
+ for (const o of validObjects) {
45
+ const objectType = o.objectType;
46
+ const entryId = `${objectType}:${o.objectName || o.objectAddress || o.id}`;
47
+ if (o.objectAddress) {
48
+ addrToEntryId.set(o.objectAddress, entryId);
49
+ }
50
+ if (o.objectName) {
51
+ addrToEntryId.set(o.objectName, entryId);
52
+ }
53
+ addrToEntryId.set(entryId, entryId);
54
+ }
55
+ const deployEdges = graphEdges.map((e) => ({
56
+ from: addrToEntryId.get(e.sourceObject) ?? e.sourceObject,
57
+ to: addrToEntryId.get(e.targetObject) ?? e.targetObject,
58
+ edge_kind: e.relationshipType,
59
+ field_path: e.fieldName || "",
60
+ required_at_publish: e.edgeSource === "internal",
61
+ }));
62
+ const steps = buildTopoSteps(deployObjects, deployEdges, network);
63
+ const riskEval = evaluations[0];
64
+ const risk_status = riskEval
65
+ ? (riskEval.score !== null && riskEval.score < 50 ? "RISK_BLOCKED" : "RISK_PASSED")
66
+ : undefined;
67
+ const riskDetails = riskEval?.details;
68
+ const risk_critical_count = riskDetails?.critical_count;
69
+ const risk_high_count = riskDetails?.high_count;
70
+ const input = {
71
+ project_prefix: project.prefix,
72
+ business_intent: project.description || project.name,
73
+ industry: project.industry || "general",
74
+ version: project.currentVersion || "v1",
75
+ objects: deployObjects,
76
+ edges: deployEdges,
77
+ steps,
78
+ risk_status,
79
+ risk_critical_count,
80
+ risk_high_count,
81
+ detail_level: detailLevel,
82
+ };
83
+ const markdown = generateDeploymentDoc(input);
84
+ const validation = validateDeploymentDoc(input);
85
+ return { markdown, validation };
86
+ }
87
+ function normalizeObjectType(raw) {
88
+ const lower = raw.toLowerCase();
89
+ if (lower === "arbitration")
90
+ return "arb";
91
+ return lower;
92
+ }
93
+ function buildTopoSteps(objects, edges, network) {
94
+ const typeOrder = {
95
+ permission: 1, treasury: 2, allocation: 3, guard: 4,
96
+ service: 10, machine: 11, progress: 12,
97
+ order: 20, arb: 22,
98
+ reward: 30, proof: 32,
99
+ repository: 40, demand: 41, contact: 42,
100
+ personal: 51, payment: 52,
101
+ };
102
+ const sorted = [...objects].sort((a, b) => {
103
+ const oa = typeOrder[a.object_type] ?? 99;
104
+ const ob = typeOrder[b.object_type] ?? 99;
105
+ return oa - ob;
106
+ });
107
+ return sorted.map((obj, i) => ({
108
+ step: i + 1,
109
+ object_type: obj.object_type,
110
+ operation: obj.publish_required ? "publish" : "create",
111
+ substep_count: 1,
112
+ depends_on: edges
113
+ .filter((e) => e.to === obj.entry_id)
114
+ .map((e) => sorted.findIndex((o) => o.entry_id === e.from) + 1)
115
+ .filter((n) => n > 0),
116
+ entry_id: obj.entry_id,
117
+ network_phase: network,
118
+ }));
119
+ }
@@ -7,6 +7,8 @@ export interface DeploymentObject {
7
7
  reused_from?: string;
8
8
  publish_required: boolean;
9
9
  description?: string;
10
+ config?: Record<string, unknown>;
11
+ status?: "draft" | "deployed";
10
12
  }
11
13
  export interface DeploymentDagEdge {
12
14
  from: string;
@@ -45,6 +47,7 @@ export interface DeploymentDocInput {
45
47
  risk_status?: "RISK_PASSED" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
46
48
  risk_critical_count?: number;
47
49
  risk_high_count?: number;
50
+ detail_level?: "summary" | "detailed" | "full";
48
51
  }
49
52
  export interface DeploymentDocValidationResult {
50
53
  valid: boolean;
@@ -75,33 +75,56 @@ function renderMeta(input) {
75
75
  }
76
76
  function renderODG(input) {
77
77
  const lines = ["## 1. Object Dependency Graph (ODG)", ""];
78
+ const detailLevel = input.detail_level ?? "summary";
78
79
  lines.push("### 1.1 Object List");
79
80
  lines.push("");
80
- lines.push(tableHeader([
81
- "entry_id", "object_type", "name", "reused_from", "publish_required", "description",
82
- ]));
81
+ const showDescription = detailLevel !== "summary";
82
+ if (showDescription) {
83
+ lines.push(tableHeader([
84
+ "entry_id", "object_type", "name", "reused_from", "publish_required", "description",
85
+ ]));
86
+ }
87
+ else {
88
+ lines.push(tableHeader([
89
+ "entry_id", "object_type", "name", "reused_from", "publish_required",
90
+ ]));
91
+ }
83
92
  for (const o of input.objects) {
84
- lines.push(tableRow([
93
+ const row = [
85
94
  o.entry_id,
86
95
  o.object_type,
87
96
  o.name,
88
97
  o.reused_from ?? "",
89
98
  String(o.publish_required),
90
- o.description ?? "",
91
- ]));
99
+ ];
100
+ if (showDescription)
101
+ row.push(o.description ?? "");
102
+ lines.push(tableRow(row));
92
103
  }
93
104
  lines.push("");
105
+ if (!showDescription) {
106
+ lines.push("_Use `detail_level='detailed'` or `'full'` to include object descriptions._");
107
+ lines.push("");
108
+ }
94
109
  lines.push("### 1.2 Dependencies");
95
110
  lines.push("");
96
111
  lines.push(tableHeader([
97
112
  "from", "to", "edge_kind", "field_path", "required_at_publish",
98
113
  ]));
99
- for (const e of input.edges) {
114
+ const visibleEdges = detailLevel === "summary"
115
+ ? input.edges.filter((e) => e.required_at_publish)
116
+ : input.edges;
117
+ for (const e of visibleEdges) {
100
118
  lines.push(tableRow([
101
119
  e.from, e.to, e.edge_kind, e.field_path, String(e.required_at_publish),
102
120
  ]));
103
121
  }
104
122
  lines.push("");
123
+ if (detailLevel === "summary" && input.edges.length > visibleEdges.length) {
124
+ lines.push(`_Showing ${visibleEdges.length} of ${input.edges.length} edges (required_at_publish only). ` +
125
+ `Use \`detail_level='detailed'\` or \`'full'\` to see all edges._`);
126
+ lines.push("");
127
+ }
105
128
  if (input.scenarios && input.scenarios.length > 0) {
106
129
  lines.push("### 1.3 Scenario Matrix");
107
130
  lines.push("");
@@ -160,19 +183,56 @@ function renderNetworkSection(sectionNum, network, input) {
160
183
  lines.push(tableRow(["gas_budget", "100000000"]));
161
184
  lines.push(tableRow(["account", `${input.project_prefix}_merchant_${network}`]));
162
185
  lines.push(tableRow(["dry_run", "false"]));
186
+ lines.push(tableRow(["detail_level", input.detail_level ?? "summary"]));
163
187
  lines.push("");
164
188
  lines.push(`### ${sectionNum}.2 ${network} JSON Operation Sequence`);
165
189
  lines.push("");
190
+ const detailLevel = input.detail_level ?? "summary";
166
191
  for (const step of input.steps) {
167
192
  if (step.network_phase !== "both" && step.network_phase !== network)
168
193
  continue;
194
+ const obj = input.objects.find(o => o.entry_id === step.entry_id);
195
+ const isDraft = obj?.status === "draft";
196
+ const objName = objectNameForStep(step, input);
197
+ const objectData = {
198
+ name: objName,
199
+ replaceExistName: network === "testnet",
200
+ };
201
+ if (isDraft && obj?.config) {
202
+ const summaryFields = new Set([
203
+ "name", "replaceExistName",
204
+ "machine", "permission", "buy_guard", "order_allocators",
205
+ "publish", "pause",
206
+ ]);
207
+ const detailedFields = new Set([
208
+ "sales", "arbitrations", "rewards",
209
+ "repositories", "discount", "discount_destroy",
210
+ ]);
211
+ for (const [k, v] of Object.entries(obj.config)) {
212
+ if (k === "name" || k === "replaceExistName")
213
+ continue;
214
+ if (detailLevel === "full") {
215
+ objectData[k] = v;
216
+ }
217
+ else if (detailLevel === "detailed"
218
+ && (summaryFields.has(k) || detailedFields.has(k))) {
219
+ objectData[k] = v;
220
+ }
221
+ else if (detailLevel === "summary" && summaryFields.has(k)) {
222
+ objectData[k] = v;
223
+ }
224
+ }
225
+ }
169
226
  const block = {
170
227
  step: step.step,
171
228
  operation: "onchain_operations",
172
229
  operation_type: step.object_type,
173
230
  data: {
174
- object: { name: objectNameForStep(step, input), replaceExistName: network === "testnet" },
175
- description: stepDescription(step),
231
+ object: objectData,
232
+ description: isDraft
233
+ ? `${stepDescription(step)} [蓝图:基于 ${input.industry} 行业模板生成]`
234
+ : stepDescription(step),
235
+ status: isDraft ? "draft" : "deployed",
176
236
  },
177
237
  env: {
178
238
  account: `${input.project_prefix}_merchant_${network}`,
@@ -427,7 +487,9 @@ function runDCheck(item, input) {
427
487
  }
428
488
  for (const p of publishSteps) {
429
489
  const created = createByType.get(p.object_type);
430
- if (created === undefined || created > p.step) {
490
+ if (created === undefined)
491
+ continue;
492
+ if (created > p.step) {
431
493
  return { status: "FAIL", notes: `publish ${p.step} before create for ${p.object_type}` };
432
494
  }
433
495
  }
@@ -30,6 +30,8 @@ export interface EvaluationInput {
30
30
  objectCache: Map<string, ObjectCacheEntry>;
31
31
  reputation?: Map<string, ReputationData>;
32
32
  }
33
+ export declare function getNumberField(data: Record<string, unknown> | null, field: string): number;
34
+ export declare function getMachineNodeCount(data: Record<string, unknown> | null): number;
33
35
  export declare function runEvaluation(input: EvaluationInput, evaluationType: EvaluationType, llmPrompt?: string): EvaluationResult;
34
36
  export interface ProjectComparisonEntry {
35
37
  projectId: string;