@wowok/agent-mcp 2.7.0 → 2.7.2
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/config/index.js +1 -1
- package/dist/config/runtime.js +1 -238
- package/dist/customer/customer-advice.js +1 -130
- package/dist/customer/index.js +1 -11
- package/dist/customer/industry-risks.js +1 -438
- package/dist/customer/info-puzzle.js +1 -681
- package/dist/customer/order-monitor.js +1 -328
- package/dist/customer/order-strategy.js +1 -373
- package/dist/customer/post-purchase.js +1 -351
- package/dist/customer/preorder-compare.js +1 -34
- package/dist/customer/reminder-system.js +1 -316
- package/dist/customer/risk-assessment.d.ts +5 -1
- package/dist/customer/risk-assessment.js +1 -397
- package/dist/customer/types.js +1 -13
- package/dist/customer/user-preferences.js +1 -460
- package/dist/evaluation/arbitration-game.d.ts +23 -0
- package/dist/evaluation/arbitration-game.js +1 -0
- package/dist/evaluation/builtins/demand-match.d.ts +15 -0
- package/dist/evaluation/builtins/demand-match.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +3 -0
- package/dist/evaluation/builtins/index.js +1 -0
- package/dist/evaluation/builtins/service-risk.d.ts +6 -0
- package/dist/evaluation/builtins/service-risk.js +1 -0
- package/dist/evaluation/capability.d.ts +50 -0
- package/dist/evaluation/capability.js +1 -0
- package/dist/evaluation/composer.d.ts +13 -0
- package/dist/evaluation/composer.js +1 -0
- package/dist/evaluation/engine.d.ts +18 -0
- package/dist/evaluation/engine.js +1 -0
- package/dist/evaluation/extract.d.ts +30 -0
- package/dist/evaluation/extract.js +1 -0
- package/dist/evaluation/game-strategy.d.ts +27 -0
- package/dist/evaluation/game-strategy.js +1 -0
- package/dist/evaluation/gap.d.ts +2 -0
- package/dist/evaluation/gap.js +1 -0
- package/dist/evaluation/index.d.ts +12 -0
- package/dist/evaluation/index.js +1 -0
- package/dist/evaluation/node-game.d.ts +62 -0
- package/dist/evaluation/node-game.js +1 -0
- package/dist/evaluation/region.d.ts +10 -0
- package/dist/evaluation/region.js +1 -0
- package/dist/evaluation/types.d.ts +77 -0
- package/dist/evaluation/types.js +1 -0
- package/dist/evaluation/user-injection.d.ts +6 -0
- package/dist/evaluation/user-injection.js +1 -0
- package/dist/examples/education-contact-create.json +40 -0
- package/dist/examples/freelance-contact-create.json +40 -0
- package/dist/examples/insurance-machine-create.json +1 -1
- package/dist/examples/insurance-service-allocators.json +1 -1
- package/dist/examples/machine-publish.json +1 -1
- package/dist/examples/rental-ziroom-service-create.json +1 -1
- package/dist/examples/retail-adv-guard-messenger-proof-create.json +1 -1
- package/dist/examples/retail-myshop-service-create.json +1 -1
- package/dist/examples/retail-myshop-service-customer-required.json +1 -1
- package/dist/examples/subscription-contact-create.json +40 -0
- package/dist/examples/threebody-machine-create.json +1 -1
- package/dist/examples/travel-machine-create.json +1 -1
- package/dist/examples/travel-service-create.json +1 -1
- package/dist/experience/experience-reuse.js +1 -103
- package/dist/experience/index.js +1 -5
- package/dist/experience/intent-distill.js +1 -83
- package/dist/experience/realtime-feedback.js +1 -94
- package/dist/experience/types.js +1 -1
- package/dist/experience/user-profile.js +1 -171
- package/dist/extensions/business-modules.js +1 -287
- package/dist/extensions/capability-manifest.js +1 -781
- package/dist/extensions/constraint-registry.js +1 -198
- package/dist/extensions/index.js +1 -6
- package/dist/extensions/metric-registry.js +1 -257
- package/dist/extensions/mode-evaluator.js +1 -170
- package/dist/extensions/modes.js +1 -499
- package/dist/extensions/registry.js +1 -717
- package/dist/extensions/types.js +1 -1
- package/dist/harness/auto-escalation.js +1 -68
- package/dist/harness/checkpoint.js +1 -129
- package/dist/harness/index.js +1 -78
- package/dist/harness/plan.js +1 -276
- package/dist/harness/recover.js +1 -139
- package/dist/harness/types.js +1 -1
- package/dist/harness/verify.js +1 -237
- package/dist/index.js +1 -273
- package/dist/intent/enrich.d.ts +1 -0
- package/dist/intent/enrich.js +1 -0
- package/dist/intent/index.d.ts +23 -0
- package/dist/intent/index.js +1 -0
- package/dist/intent/matcher.d.ts +2 -0
- package/dist/intent/matcher.js +1 -0
- package/dist/intent/store.d.ts +19 -0
- package/dist/intent/store.js +1 -0
- package/dist/intent/types.d.ts +33 -0
- package/dist/intent/types.js +1 -0
- package/dist/knowledge/acquisition-flywheel.js +1 -192
- package/dist/knowledge/allocation-confirm.js +1 -534
- package/dist/knowledge/allocation-context.js +1 -249
- package/dist/knowledge/allocation-ledger.js +1 -463
- package/dist/knowledge/allocation-puzzle.js +1 -298
- package/dist/knowledge/allocation-risk.js +1 -568
- package/dist/knowledge/allocation-templates.js +1 -970
- package/dist/knowledge/allocation-translation.js +1 -585
- package/dist/knowledge/arb-risk.js +1 -210
- package/dist/knowledge/arbitration-confirm.js +1 -559
- package/dist/knowledge/arbitration-context.js +1 -505
- package/dist/knowledge/arbitration-ledger.js +1 -521
- package/dist/knowledge/arbitration-puzzle.js +1 -304
- package/dist/knowledge/arbitration-risk.js +1 -433
- package/dist/knowledge/arbitration-templates.js +1 -276
- package/dist/knowledge/arbitration-translation.js +1 -487
- package/dist/knowledge/arbitration-trust.js +1 -117
- package/dist/knowledge/audit-rules.js +1 -141
- package/dist/knowledge/bridge-risk.js +1 -263
- package/dist/knowledge/contact-risk.js +1 -200
- package/dist/knowledge/contact-templates.d.ts +27 -0
- package/dist/knowledge/contact-templates.js +1 -0
- package/dist/knowledge/demand-confirm.js +1 -206
- package/dist/knowledge/demand-matching.js +1 -132
- package/dist/knowledge/demand-risk.js +1 -240
- package/dist/knowledge/demand-translation.js +1 -354
- package/dist/knowledge/deployment-scanner.js +1 -823
- package/dist/knowledge/dynamic-pricing.js +1 -87
- package/dist/knowledge/examples-scanner-cli.js +1 -26
- package/dist/knowledge/examples-scanner.js +1 -825
- package/dist/knowledge/flywheel-loop.js +1 -404
- package/dist/knowledge/fund-layer.js +1 -973
- package/dist/knowledge/glossary.js +1 -211
- package/dist/knowledge/guard-confirm.js +1 -406
- package/dist/knowledge/guard-context.js +1 -287
- package/dist/knowledge/guard-design-patterns.js +1 -360
- package/dist/knowledge/guard-ledger.js +1 -260
- package/dist/knowledge/guard-lint.js +1 -670
- package/dist/knowledge/guard-migration.js +1 -228
- package/dist/knowledge/guard-puzzle.js +1 -805
- package/dist/knowledge/guard-render.js +1 -700
- package/dist/knowledge/guard-risk.js +1 -1879
- package/dist/knowledge/guard-submission-prompt.js +1 -171
- package/dist/knowledge/guard-templates.js +1 -1105
- package/dist/knowledge/guard-translation.js +1 -1119
- package/dist/knowledge/index.js +1 -436
- package/dist/knowledge/industry-evolution.js +1 -323
- package/dist/knowledge/industry-generalizer.js +1 -381
- package/dist/knowledge/industry-registry.js +1 -174
- package/dist/knowledge/intent-metrics.d.ts +4 -3
- package/dist/knowledge/intent-metrics.js +1 -566
- package/dist/knowledge/machine-confirm.js +1 -559
- package/dist/knowledge/machine-context.js +1 -833
- package/dist/knowledge/machine-ledger.js +1 -338
- package/dist/knowledge/machine-puzzle.js +1 -494
- package/dist/knowledge/machine-render.js +1 -565
- package/dist/knowledge/machine-risk.js +1 -670
- package/dist/knowledge/machine-templates.js +1 -1597
- package/dist/knowledge/machine-topology.js +1 -234
- package/dist/knowledge/machine-translation.js +1 -513
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -45
- package/dist/knowledge/mcp-schema-audit.d.ts +1 -1
- package/dist/knowledge/mcp-schema-audit.js +1 -773
- package/dist/knowledge/onchain-constants.js +1 -35
- package/dist/knowledge/order-confirm.js +1 -573
- package/dist/knowledge/order-context.js +1 -390
- package/dist/knowledge/order-ledger.js +1 -341
- package/dist/knowledge/order-puzzle.js +1 -255
- package/dist/knowledge/order-risk.js +1 -653
- package/dist/knowledge/order-templates.js +1 -368
- package/dist/knowledge/order-translation.js +1 -550
- package/dist/knowledge/overrides-loader.js +1 -65
- package/dist/knowledge/passport-confirm.js +1 -531
- package/dist/knowledge/passport-context.js +1 -306
- package/dist/knowledge/passport-ledger.js +1 -282
- package/dist/knowledge/passport-puzzle.js +1 -333
- package/dist/knowledge/passport-risk.js +1 -450
- package/dist/knowledge/passport-templates.js +1 -568
- package/dist/knowledge/passport-translation.js +1 -516
- package/dist/knowledge/payment-risk.js +1 -249
- package/dist/knowledge/permission-confirm.js +1 -426
- package/dist/knowledge/permission-context.js +1 -224
- package/dist/knowledge/permission-ledger.js +1 -403
- package/dist/knowledge/permission-puzzle.js +1 -173
- package/dist/knowledge/permission-risk.js +1 -411
- package/dist/knowledge/permission-templates.js +1 -234
- package/dist/knowledge/permission-translation.js +1 -350
- package/dist/knowledge/personal-risk.js +1 -212
- package/dist/knowledge/process-model.js +1 -160
- package/dist/knowledge/progress-confirm.js +1 -456
- package/dist/knowledge/progress-context.js +1 -452
- package/dist/knowledge/progress-ledger.js +1 -330
- package/dist/knowledge/progress-puzzle.js +1 -219
- package/dist/knowledge/progress-risk.js +1 -461
- package/dist/knowledge/progress-templates.js +1 -228
- package/dist/knowledge/progress-translation.js +1 -405
- package/dist/knowledge/proof-confirm.js +1 -187
- package/dist/knowledge/proof-risk.js +1 -207
- package/dist/knowledge/proof-translation.js +1 -283
- package/dist/knowledge/registrar-risk.js +1 -217
- package/dist/knowledge/repository-confirm.js +1 -286
- package/dist/knowledge/repository-risk.js +1 -373
- package/dist/knowledge/repository-translation.js +1 -445
- package/dist/knowledge/reputation-rules.js +1 -99
- package/dist/knowledge/resource-risk.js +1 -157
- package/dist/knowledge/reward-confirm.js +1 -526
- package/dist/knowledge/reward-context.js +1 -504
- package/dist/knowledge/reward-ledger.js +1 -502
- package/dist/knowledge/reward-puzzle.js +1 -300
- package/dist/knowledge/reward-risk.js +1 -627
- package/dist/knowledge/reward-templates.js +1 -197
- package/dist/knowledge/reward-translation.js +1 -501
- package/dist/knowledge/safety-rules.js +1 -404
- package/dist/knowledge/scenario-modes.js +1 -321
- package/dist/knowledge/service-confirm.js +1 -807
- package/dist/knowledge/service-context.js +1 -403
- package/dist/knowledge/service-ledger.js +1 -609
- package/dist/knowledge/service-puzzle.js +1 -236
- package/dist/knowledge/service-risk.js +1 -615
- package/dist/knowledge/service-templates.js +1 -456
- package/dist/knowledge/service-translation.js +1 -622
- package/dist/knowledge/template-registry.d.ts +1 -1
- package/dist/knowledge/template-registry.js +1 -341
- package/dist/knowledge/tool-constraints.js +1 -195
- package/dist/knowledge/tools-reference.js +1 -155
- package/dist/knowledge/treasury-confirm.js +1 -512
- package/dist/knowledge/treasury-context.js +1 -363
- package/dist/knowledge/treasury-ledger.js +1 -300
- package/dist/knowledge/treasury-puzzle.js +1 -216
- package/dist/knowledge/treasury-risk.js +1 -440
- package/dist/knowledge/treasury-templates.js +1 -358
- package/dist/knowledge/treasury-translation.js +1 -498
- package/dist/knowledge/trust-metrics.js +1 -198
- package/dist/knowledge/util-risk.js +1 -135
- package/dist/loop-engineering/aggregate.js +1 -132
- package/dist/loop-engineering/context-collect.js +1 -83
- package/dist/loop-engineering/diagnose.js +1 -273
- package/dist/loop-engineering/improve.js +1 -405
- package/dist/loop-engineering/index.js +1 -4
- package/dist/loop-engineering/pipeline.js +1 -56
- package/dist/mode-market/index.js +1 -3
- package/dist/mode-market/registry.js +1 -124
- package/dist/mode-market/review.js +1 -214
- package/dist/mode-market/submission.js +1 -85
- package/dist/participation/collaborator-interest.d.ts +23 -0
- package/dist/participation/collaborator-interest.js +1 -0
- package/dist/participation/customer-interest.d.ts +25 -0
- package/dist/participation/customer-interest.js +1 -0
- package/dist/participation/merchant-interest.js +1 -100
- package/dist/participation/radar-core.d.ts +13 -3
- package/dist/participation/radar-core.js +1 -269
- package/dist/participation/supplier-interest.d.ts +25 -0
- package/dist/participation/supplier-interest.js +1 -0
- package/dist/persona/analyzer.d.ts +16 -0
- package/dist/persona/analyzer.js +1 -0
- package/dist/persona/bridge.d.ts +5 -0
- package/dist/persona/bridge.js +1 -0
- package/dist/persona/defaults.d.ts +4 -0
- package/dist/persona/defaults.js +1 -0
- package/dist/persona/experience-bridge.d.ts +3 -0
- package/dist/persona/experience-bridge.js +1 -0
- package/dist/persona/index.d.ts +18 -0
- package/dist/persona/index.js +1 -0
- package/dist/persona/model.d.ts +7 -0
- package/dist/persona/model.js +1 -0
- package/dist/persona/store.d.ts +19 -0
- package/dist/persona/store.js +1 -0
- package/dist/persona/types.d.ts +45 -0
- package/dist/persona/types.js +1 -0
- package/dist/project/business-puzzle.js +1 -383
- package/dist/project/context-assembly.js +1 -254
- package/dist/project/deployment-bridge.js +1 -120
- package/dist/project/deployment-doc.js +1 -1126
- package/dist/project/edit-planner.js +1 -1342
- package/dist/project/evaluation.js +1 -2011
- package/dist/project/game-theory.js +1 -177
- package/dist/project/graph-builder.js +1 -656
- package/dist/project/graph.js +1 -340
- package/dist/project/handlers.d.ts +5 -0
- package/dist/project/handlers.js +1 -1762
- package/dist/project/index.d.ts +1 -0
- package/dist/project/index.js +1 -301
- package/dist/project/intent-analyzer.js +1 -149
- package/dist/project/machine-nodes.js +1 -36
- package/dist/project/merchant-guide.js +1 -264
- package/dist/project/migration.js +1 -125
- package/dist/project/mode-actions.js +1 -309
- package/dist/project/namespace.js +1 -206
- package/dist/project/participation-radar.js +1 -428
- package/dist/project/pipeline-actions.js +1 -109
- package/dist/project/project-store.js +1 -422
- package/dist/project/query.js +1 -153
- package/dist/project/reverse-mapping.d.ts +34 -0
- package/dist/project/reverse-mapping.js +1 -0
- package/dist/project/risk-aggregator.js +1 -295
- package/dist/project/rollback-policy.js +1 -290
- package/dist/project/semantic-assembler.js +1 -345
- package/dist/project/semantic-graph.js +1 -245
- package/dist/project/stage-gate.js +1 -369
- package/dist/project/substep-trace.js +1 -332
- package/dist/project/task-tracker.js +1 -78
- package/dist/role/derivation.d.ts +18 -0
- package/dist/role/derivation.js +1 -0
- package/dist/role/index.d.ts +5 -0
- package/dist/role/index.js +1 -0
- package/dist/role/model.d.ts +8 -0
- package/dist/role/model.js +1 -0
- package/dist/role/resolution.d.ts +11 -0
- package/dist/role/resolution.js +1 -0
- package/dist/role/types.d.ts +11 -0
- package/dist/role/types.js +1 -0
- package/dist/rules.d.ts +2 -0
- package/dist/rules.js +1 -9
- package/dist/safety/confirm-gate.js +1 -88
- package/dist/safety/index.js +1 -3
- package/dist/safety/preview.js +1 -52
- package/dist/schema/call/allocation.js +1 -34
- package/dist/schema/call/arbitration.js +1 -113
- package/dist/schema/call/base.d.ts +15 -15
- package/dist/schema/call/base.js +1 -370
- package/dist/schema/call/bridge-handler.js +1 -265
- package/dist/schema/call/bridge.d.ts +7 -7
- package/dist/schema/call/bridge.js +1 -458
- package/dist/schema/call/contact.js +1 -37
- package/dist/schema/call/demand.js +1 -47
- package/dist/schema/call/guard.js +1 -161
- package/dist/schema/call/handler.js +1 -322
- package/dist/schema/call/index.js +1 -20
- package/dist/schema/call/machine.js +1 -193
- package/dist/schema/call/order.js +1 -35
- package/dist/schema/call/payment.js +1 -37
- package/dist/schema/call/permission-handler.js +1 -54
- package/dist/schema/call/permission.js +1 -105
- package/dist/schema/call/personal.js +1 -78
- package/dist/schema/call/progress.js +1 -47
- package/dist/schema/call/proof.js +1 -33
- package/dist/schema/call/repository.js +1 -77
- package/dist/schema/call/reward.js +1 -30
- package/dist/schema/call/semantic.js +1 -1657
- package/dist/schema/call/service.js +1 -178
- package/dist/schema/call/treasury.js +1 -71
- package/dist/schema/common/index.js +1 -407
- package/dist/schema/config/index.js +1 -68
- package/dist/schema/evaluation/index.d.ts +4436 -0
- package/dist/schema/evaluation/index.js +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.js +1 -13
- package/dist/schema/intent-radar/index.d.ts +284 -0
- package/dist/schema/intent-radar/index.js +1 -0
- package/dist/schema/local/index.d.ts +21 -21
- package/dist/schema/local/index.js +1 -927
- package/dist/schema/local/wip.js +1 -187
- package/dist/schema/messenger/index.d.ts +7 -7
- package/dist/schema/messenger/index.js +1 -475
- package/dist/schema/operations.d.ts +7 -7
- package/dist/schema/operations.js +1 -520
- package/dist/schema/persona/index.d.ts +1985 -0
- package/dist/schema/persona/index.js +1 -0
- package/dist/schema/project/index.d.ts +96 -50
- package/dist/schema/project/index.js +1 -2057
- package/dist/schema/query/index.d.ts +423 -7
- package/dist/schema/query/index.js +1 -1640
- package/dist/schema/schema-query/index.js +1 -104
- package/dist/schema/schema-version.js +1 -76
- package/dist/schema/sync-layer4.d.ts +1 -1
- package/dist/schema/sync-layer4.js +1 -282
- package/dist/schema/task-status.d.ts +168 -0
- package/dist/schema/task-status.js +1 -0
- package/dist/schema/trust/index.js +1 -314
- package/dist/schema/utils/guard-parser.js +1 -419
- package/dist/schema/utils/guard-query-utils.js +1 -46
- package/dist/schema/utils/node-parser.js +1 -369
- package/dist/schema/utils/object-type-utils.js +1 -35
- package/dist/schema/utils/permission-index-utils.js +1 -7
- package/dist/schema/utils/permission-machine-check.js +1 -121
- package/dist/schema/utils/skills-recommendation.js +1 -77
- package/dist/schema-query/index.js +1 -810
- package/dist/schemas/account_operation.output.json +5 -2
- package/dist/schemas/bridge_operation.output.json +5 -2
- package/dist/schemas/evaluation_operation.output.json +782 -0
- package/dist/schemas/evaluation_operation.schema.json +990 -0
- package/dist/schemas/index.json +25 -1
- package/dist/schemas/intent_radar.output.json +232 -0
- package/dist/schemas/intent_radar.schema.json +138 -0
- package/dist/schemas/local_info_operation.output.json +5 -2
- package/dist/schemas/local_mark_operation.output.json +5 -2
- package/dist/schemas/messenger_operation.output.json +5 -2
- package/dist/schemas/onchain_events.output.json +5 -2
- package/dist/schemas/onchain_operations.output.json +5 -2
- package/dist/schemas/onchain_operations.schema.json +6 -6
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +2 -2
- package/dist/schemas/onchain_operations_service.schema.json +3 -3
- package/dist/schemas/onchain_table_data.output.json +6 -3
- package/dist/schemas/persona_operation.output.json +392 -0
- package/dist/schemas/persona_operation.schema.json +250 -0
- package/dist/schemas/project_operation.output.json +28 -8
- package/dist/schemas/query_task_status.output.json +115 -0
- package/dist/schemas/query_task_status.schema.json +24 -0
- package/dist/schemas/query_toolkit.output.json +9 -6
- package/dist/schemas/trust_score.schema.json +1 -1
- package/dist/schemas/wowok_buildin_info.output.json +132 -0
- package/dist/schemas/wowok_buildin_info.schema.json +14 -0
- package/dist/telemetry/index.js +1 -112
- package/dist/telemetry/redact.js +1 -23
- package/dist/telemetry/storage.js +1 -80
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -74
- package/dist/tools/handlers/evaluation.d.ts +2 -0
- package/dist/tools/handlers/evaluation.js +1 -0
- package/dist/tools/handlers/file-export.js +1 -90
- package/dist/tools/handlers/intent-radar.d.ts +2 -0
- package/dist/tools/handlers/intent-radar.js +1 -0
- package/dist/tools/handlers/local.js +1 -53
- package/dist/tools/handlers/messenger.js +1 -188
- package/dist/tools/handlers/onchain.js +1 -1082
- package/dist/tools/handlers/persona.d.ts +4 -0
- package/dist/tools/handlers/persona.js +1 -0
- package/dist/tools/handlers/project.js +1 -211
- package/dist/tools/handlers/query.js +1 -434
- package/dist/tools/handlers/schema-query.js +1 -176
- package/dist/tools/handlers/task-status.d.ts +0 -168
- package/dist/tools/handlers/task-status.js +1 -55
- package/dist/tools/handlers/trust.js +1 -380
- package/dist/tools/handlers/wip.js +1 -90
- package/dist/tools/index.js +1 -1306
- package/dist/tools/retry.js +1 -85
- package/dist/tools/rules-hook.js +1 -23
- package/dist/tools/shared.js +1 -130
- package/dist/tools/types.js +1 -1
- package/dist/tools/upgrade-check.d.ts +19 -0
- package/dist/tools/upgrade-check.js +1 -0
- package/dist/tools/wip-deploy-assist.d.ts +1 -1
- package/dist/tools/wip-deploy-assist.js +1 -278
- package/dist/tools/wrap.js +1 -500
- package/package.json +5 -3
|
@@ -1,405 +1 @@
|
|
|
1
|
-
import { getPendingSuggestions } from "../knowledge/flywheel-loop.js";
|
|
2
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, appendFileSync, readdirSync } from "fs";
|
|
3
|
-
import { join, dirname } from "path";
|
|
4
|
-
import { getWowMcpDir } from "@wowok/wowok";
|
|
5
|
-
function proposeErrorRuleAddition(diagnosis) {
|
|
6
|
-
const evidence = diagnosis.evidence;
|
|
7
|
-
const topMessages = evidence.top_error_messages || [];
|
|
8
|
-
const candidatePatterns = topMessages.slice(0, 3).map((m) => {
|
|
9
|
-
const msg = m.message.toLowerCase();
|
|
10
|
-
let pattern = msg
|
|
11
|
-
.replace(/0x[0-9a-f]+/gi, "0xADDR")
|
|
12
|
-
.replace(/\d+/g, "\\d+")
|
|
13
|
-
.replace(/[^\w\s\\]/g, " ")
|
|
14
|
-
.replace(/\s+/g, " ")
|
|
15
|
-
.trim();
|
|
16
|
-
if (pattern.length > 60)
|
|
17
|
-
pattern = pattern.slice(0, 60);
|
|
18
|
-
return { pattern, sample_count: m.count };
|
|
19
|
-
});
|
|
20
|
-
return {
|
|
21
|
-
proposal_id: `PROP-RULE-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
22
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
23
|
-
type: "error_rule_addition",
|
|
24
|
-
priority: diagnosis.severity,
|
|
25
|
-
automation: "semi",
|
|
26
|
-
apply_mode: "source_patch",
|
|
27
|
-
title: `Add ERROR_RULES entries for ${diagnosis.target}`,
|
|
28
|
-
description: `Generate new error classification rules to cover patterns currently falling into 'unknown'. AI should draft regex patterns; human reviewer validates accuracy and assigns correct error_code.`,
|
|
29
|
-
target: "ERROR_RULES",
|
|
30
|
-
proposed_change: {
|
|
31
|
-
action: "append",
|
|
32
|
-
rules: candidatePatterns.map((p) => ({
|
|
33
|
-
pattern: p.pattern,
|
|
34
|
-
error_code: "unknown",
|
|
35
|
-
retryable: false,
|
|
36
|
-
recovery_hint: "TODO: assign by reviewer",
|
|
37
|
-
sample_message: p.sample_count,
|
|
38
|
-
})),
|
|
39
|
-
note: "error_code must be assigned by human reviewer based on semantic analysis",
|
|
40
|
-
},
|
|
41
|
-
evidence: diagnosis.evidence,
|
|
42
|
-
review_status: "pending",
|
|
43
|
-
ab_test_recommended: true,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function proposeDescriptionRewrite(diagnosis) {
|
|
47
|
-
const evidence = diagnosis.evidence;
|
|
48
|
-
return {
|
|
49
|
-
proposal_id: `PROP-DESC-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
50
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
51
|
-
type: "description_rewrite",
|
|
52
|
-
priority: diagnosis.severity,
|
|
53
|
-
automation: "semi",
|
|
54
|
-
apply_mode: "config_override",
|
|
55
|
-
override_category: "descriptions",
|
|
56
|
-
title: `Rewrite description for ${evidence.tool_name || diagnosis.target}`,
|
|
57
|
-
description: `The semantic layer produces no summary for ${((1 - (evidence.semantic_hit_rate || 0)) * 100).toFixed(1)}% of calls to this tool. AI should rewrite the tool description and INTENT_RULES to improve coverage. A/B test before merging.`,
|
|
58
|
-
target: diagnosis.target,
|
|
59
|
-
proposed_change: {
|
|
60
|
-
action: "rewrite",
|
|
61
|
-
current_semantic_hit_rate: evidence.semantic_hit_rate,
|
|
62
|
-
target_semantic_hit_rate: 0.80,
|
|
63
|
-
rewrite_guidelines: [
|
|
64
|
-
"Follow 4-part format: Meaning + Constraint + Relation + Example",
|
|
65
|
-
"Add explicit intent signals to INTENT_RULES",
|
|
66
|
-
"Include concrete examples for common operation types",
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
evidence: diagnosis.evidence,
|
|
70
|
-
review_status: "pending",
|
|
71
|
-
ab_test_recommended: true,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function proposeSkillCreation(diagnosis) {
|
|
75
|
-
const evidence = diagnosis.evidence;
|
|
76
|
-
return {
|
|
77
|
-
proposal_id: `PROP-SKILL-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
78
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
79
|
-
type: "skill_creation",
|
|
80
|
-
priority: diagnosis.severity,
|
|
81
|
-
automation: "semi",
|
|
82
|
-
apply_mode: "source_patch",
|
|
83
|
-
title: `Create new Skill for '${evidence.operation_type}' operations`,
|
|
84
|
-
description: `This operation type has a ${(evidence.success_rate ? (1 - evidence.success_rate) * 100 : 0).toFixed(1)}% failure rate across ${evidence.total_calls} calls. A Skill with R1-R10 dialogue scripts, decision trees, and failure playbooks could guide users to success.`,
|
|
85
|
-
target: `wowok-${evidence.operation_type}-guide`,
|
|
86
|
-
proposed_change: {
|
|
87
|
-
action: "create",
|
|
88
|
-
skill_name: `wowok-${evidence.operation_type}-guide`,
|
|
89
|
-
skill_structure: {
|
|
90
|
-
sections: ["R1-R10 dialogues", "Decision trees", "Failure playbooks", "Tier layering"],
|
|
91
|
-
target_role: "provider",
|
|
92
|
-
loading: "on-demand",
|
|
93
|
-
},
|
|
94
|
-
top_errors: evidence.error_distribution,
|
|
95
|
-
},
|
|
96
|
-
evidence: diagnosis.evidence,
|
|
97
|
-
review_status: "pending",
|
|
98
|
-
ab_test_recommended: false,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function proposeRecoveryAdjustment(diagnosis) {
|
|
102
|
-
const evidence = diagnosis.evidence;
|
|
103
|
-
return {
|
|
104
|
-
proposal_id: `PROP-RECOV-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
105
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
106
|
-
type: "recovery_priority_adjustment",
|
|
107
|
-
priority: diagnosis.severity,
|
|
108
|
-
automation: "semi",
|
|
109
|
-
apply_mode: "config_override",
|
|
110
|
-
override_category: "recovery-priorities",
|
|
111
|
-
title: `Review recovery strategy for '${evidence.error_code}' errors`,
|
|
112
|
-
description: `Error code '${evidence.error_code}' accounts for ${evidence.count} failures (${((evidence.percentage || 0) * 100).toFixed(1)}%). The current recovery strategy may need tuning — consider increasing max_attempts, adjusting automation level, or addressing the root cause.`,
|
|
113
|
-
target: `RECOVERY_RULES['${evidence.error_code}']`,
|
|
114
|
-
proposed_change: {
|
|
115
|
-
action: "review_and_adjust",
|
|
116
|
-
current_strategy: "see RECOVERY_RULES table",
|
|
117
|
-
suggestions: [
|
|
118
|
-
"Increase max_attempts if failures are transient",
|
|
119
|
-
"Reduce max_attempts if failures are persistent (wastes user time)",
|
|
120
|
-
"Upgrade automation from 'semi' to 'full' if recovery is deterministic",
|
|
121
|
-
"Consider root-cause fix in description/rules to prevent the error",
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
evidence: diagnosis.evidence,
|
|
125
|
-
review_status: "pending",
|
|
126
|
-
ab_test_recommended: false,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
function proposeInvestigation(diagnosis) {
|
|
130
|
-
return {
|
|
131
|
-
proposal_id: `PROP-INV-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
132
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
133
|
-
type: "investigation",
|
|
134
|
-
priority: diagnosis.severity,
|
|
135
|
-
automation: "manual",
|
|
136
|
-
apply_mode: "source_patch",
|
|
137
|
-
title: diagnosis.title,
|
|
138
|
-
description: `Manual investigation required. ${diagnosis.description}`,
|
|
139
|
-
target: diagnosis.target,
|
|
140
|
-
proposed_change: {
|
|
141
|
-
action: "investigate",
|
|
142
|
-
steps: [
|
|
143
|
-
"Collect additional telemetry around the anomaly",
|
|
144
|
-
"Check if the issue is reproducible",
|
|
145
|
-
"Determine if the root cause is in the SDK, MCP layer, or user behavior",
|
|
146
|
-
],
|
|
147
|
-
},
|
|
148
|
-
evidence: diagnosis.evidence,
|
|
149
|
-
review_status: "pending",
|
|
150
|
-
ab_test_recommended: false,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
function proposeIndustryUpdate(diagnosis) {
|
|
154
|
-
const evidence = diagnosis.evidence;
|
|
155
|
-
const industry = evidence.industry ?? diagnosis.target.split(":")[1] ?? "unknown";
|
|
156
|
-
const pendingSuggestions = industry !== "unknown"
|
|
157
|
-
? getPendingSuggestions(industry)
|
|
158
|
-
: [];
|
|
159
|
-
const changes = pendingSuggestions.map((s) => ({
|
|
160
|
-
suggestion_type: s.suggestion_type,
|
|
161
|
-
field: s.field,
|
|
162
|
-
suggested_value: s.suggested_value,
|
|
163
|
-
evidence: s.evidence,
|
|
164
|
-
confidence: s.confidence,
|
|
165
|
-
priority: s.priority,
|
|
166
|
-
}));
|
|
167
|
-
const isHealthCritical = evidence.health_score !== undefined && evidence.health_score < 45;
|
|
168
|
-
const hasHighPrioritySuggestions = (evidence.high_priority_count ?? 0) > 0;
|
|
169
|
-
return {
|
|
170
|
-
proposal_id: `PROP-IND-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
171
|
-
source_diagnosis_id: diagnosis.diagnosis_id,
|
|
172
|
-
type: "industry_update_application",
|
|
173
|
-
priority: diagnosis.severity,
|
|
174
|
-
automation: isHealthCritical ? "semi" : "manual",
|
|
175
|
-
apply_mode: "config_override",
|
|
176
|
-
override_category: "industry-profiles",
|
|
177
|
-
title: `Apply ${pendingSuggestions.length} evolution suggestions for industry '${industry}'`,
|
|
178
|
-
description: `Industry '${industry}' has health anomaly (health score ${evidence.health_score ?? "N/A"}, level ${evidence.health_level ?? "N/A"}). ` +
|
|
179
|
-
`Has ${pendingSuggestions.length} pending evolution suggestions (${(evidence.high_priority_count ?? 0)} high priority). ` +
|
|
180
|
-
`Review and apply to drive industry cognition evolution. Weaknesses: ${(evidence.weaknesses ?? []).join("; ") || "none"}.`,
|
|
181
|
-
target: `industry:${industry}`,
|
|
182
|
-
proposed_change: {
|
|
183
|
-
action: "apply_industry_updates",
|
|
184
|
-
industry,
|
|
185
|
-
current_health_score: evidence.health_score,
|
|
186
|
-
current_health_level: evidence.health_level,
|
|
187
|
-
weaknesses: evidence.weaknesses ?? [],
|
|
188
|
-
recommendations: evidence.recommendations ?? [],
|
|
189
|
-
pending_suggestion_count: pendingSuggestions.length,
|
|
190
|
-
high_priority_count: evidence.high_priority_count ?? 0,
|
|
191
|
-
suggestions: changes,
|
|
192
|
-
auto_applicable_suggestions: changes.filter((c) => c.confidence >= 0.85 && c.priority === "high"),
|
|
193
|
-
apply_guidance: hasHighPrioritySuggestions
|
|
194
|
-
? "Prioritize reviewing high-priority suggestions; high-confidence (≥0.85) suggestions can be semi-automatically applied"
|
|
195
|
-
: "No high-priority suggestions, review via normal process",
|
|
196
|
-
},
|
|
197
|
-
evidence: diagnosis.evidence,
|
|
198
|
-
review_status: "pending",
|
|
199
|
-
ab_test_recommended: false,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
export function generateImprovements(report) {
|
|
203
|
-
const proposals = [];
|
|
204
|
-
for (const diagnosis of report.diagnoses) {
|
|
205
|
-
let proposal;
|
|
206
|
-
switch (diagnosis.proposed_improvement_type) {
|
|
207
|
-
case "rule_addition":
|
|
208
|
-
proposal = proposeErrorRuleAddition(diagnosis);
|
|
209
|
-
break;
|
|
210
|
-
case "description_rewrite":
|
|
211
|
-
proposal = proposeDescriptionRewrite(diagnosis);
|
|
212
|
-
break;
|
|
213
|
-
case "skill_creation":
|
|
214
|
-
proposal = proposeSkillCreation(diagnosis);
|
|
215
|
-
break;
|
|
216
|
-
case "recovery_priority_adjustment":
|
|
217
|
-
proposal = proposeRecoveryAdjustment(diagnosis);
|
|
218
|
-
break;
|
|
219
|
-
case "industry_update_application":
|
|
220
|
-
proposal = proposeIndustryUpdate(diagnosis);
|
|
221
|
-
break;
|
|
222
|
-
default:
|
|
223
|
-
proposal = proposeInvestigation(diagnosis);
|
|
224
|
-
}
|
|
225
|
-
proposals.push(proposal);
|
|
226
|
-
}
|
|
227
|
-
const p0Count = proposals.filter((p) => p.priority === "P0").length;
|
|
228
|
-
const semiCount = proposals.filter((p) => p.automation === "semi").length;
|
|
229
|
-
const abTestCount = proposals.filter((p) => p.ab_test_recommended).length;
|
|
230
|
-
const summary = `${proposals.length} proposals generated from ${report.total_diagnoses} diagnoses. ` +
|
|
231
|
-
`${p0Count} P0, ${semiCount} semi-automatic, ${abTestCount} recommend A/B testing. ` +
|
|
232
|
-
`All proposals require human review before application.`;
|
|
233
|
-
try {
|
|
234
|
-
persistImprovementQueue(proposals);
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
}
|
|
238
|
-
return {
|
|
239
|
-
report_id: `IMPROVE-REPORT-${Date.now()}`,
|
|
240
|
-
generated_date: new Date().toISOString(),
|
|
241
|
-
source_diagnosis_report_id: report.report_id,
|
|
242
|
-
total_proposals: proposals.length,
|
|
243
|
-
proposals,
|
|
244
|
-
summary,
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
function wowokRootDir() {
|
|
248
|
-
return getWowMcpDir();
|
|
249
|
-
}
|
|
250
|
-
function improvementQueuePath() {
|
|
251
|
-
return join(wowokRootDir(), "improvement-queue.jsonl");
|
|
252
|
-
}
|
|
253
|
-
function overridesDir() {
|
|
254
|
-
return join(wowokRootDir(), "overrides");
|
|
255
|
-
}
|
|
256
|
-
function patchesDir() {
|
|
257
|
-
return join(wowokRootDir(), "patches");
|
|
258
|
-
}
|
|
259
|
-
export function persistImprovementQueue(proposals) {
|
|
260
|
-
if (proposals.length === 0)
|
|
261
|
-
return 0;
|
|
262
|
-
const queuePath = improvementQueuePath();
|
|
263
|
-
mkdirSync(dirname(queuePath), { recursive: true });
|
|
264
|
-
const now = new Date().toISOString();
|
|
265
|
-
const lines = proposals.map((p) => JSON.stringify({ ...p, persisted_at: now }));
|
|
266
|
-
appendFileSync(queuePath, lines.join("\n") + "\n", "utf-8");
|
|
267
|
-
return proposals.length;
|
|
268
|
-
}
|
|
269
|
-
export function loadImprovementQueue(filter) {
|
|
270
|
-
const queuePath = improvementQueuePath();
|
|
271
|
-
if (!existsSync(queuePath))
|
|
272
|
-
return [];
|
|
273
|
-
const raw = readFileSync(queuePath, "utf-8");
|
|
274
|
-
const lines = raw.split("\n").filter((l) => l.trim().length > 0);
|
|
275
|
-
const proposals = [];
|
|
276
|
-
for (const line of lines) {
|
|
277
|
-
try {
|
|
278
|
-
const p = JSON.parse(line);
|
|
279
|
-
if (filter?.status && p.review_status !== filter.status)
|
|
280
|
-
continue;
|
|
281
|
-
if (filter?.type && p.type !== filter.type)
|
|
282
|
-
continue;
|
|
283
|
-
if (filter?.priority && p.priority !== filter.priority)
|
|
284
|
-
continue;
|
|
285
|
-
proposals.push(p);
|
|
286
|
-
}
|
|
287
|
-
catch {
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return proposals;
|
|
291
|
-
}
|
|
292
|
-
export function updateProposalReviewStatus(proposalId, newStatus) {
|
|
293
|
-
const all = loadImprovementQueue();
|
|
294
|
-
let updated;
|
|
295
|
-
const now = new Date().toISOString();
|
|
296
|
-
for (const p of all) {
|
|
297
|
-
if (p.proposal_id === proposalId) {
|
|
298
|
-
p.review_status = newStatus;
|
|
299
|
-
p.reviewed_at = now;
|
|
300
|
-
updated = p;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
if (!updated)
|
|
304
|
-
return undefined;
|
|
305
|
-
const queuePath = improvementQueuePath();
|
|
306
|
-
if (all.length === 0) {
|
|
307
|
-
writeFileSync(queuePath, "", "utf-8");
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
const lines = all.map((p) => JSON.stringify(p));
|
|
311
|
-
writeFileSync(queuePath, lines.join("\n") + "\n", "utf-8");
|
|
312
|
-
}
|
|
313
|
-
return updated;
|
|
314
|
-
}
|
|
315
|
-
export function applyConfigOverride(proposal) {
|
|
316
|
-
if (proposal.apply_mode !== "config_override") {
|
|
317
|
-
throw new Error(`Proposal ${proposal.proposal_id} has apply_mode=${proposal.apply_mode}, not config_override`);
|
|
318
|
-
}
|
|
319
|
-
if (!proposal.override_category) {
|
|
320
|
-
throw new Error(`Proposal ${proposal.proposal_id} has no override_category`);
|
|
321
|
-
}
|
|
322
|
-
const dir = overridesDir();
|
|
323
|
-
mkdirSync(dir, { recursive: true });
|
|
324
|
-
const filePath = join(dir, `${proposal.override_category}.json`);
|
|
325
|
-
let existing = {};
|
|
326
|
-
if (existsSync(filePath)) {
|
|
327
|
-
try {
|
|
328
|
-
existing = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
existing = {};
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
const merged = { ...existing, ...proposal.proposed_change, _last_applied_proposal: proposal.proposal_id, _last_applied_at: new Date().toISOString() };
|
|
335
|
-
writeFileSync(filePath, JSON.stringify(merged, null, 2), "utf-8");
|
|
336
|
-
return filePath;
|
|
337
|
-
}
|
|
338
|
-
export function produceSourcePatch(proposal) {
|
|
339
|
-
if (proposal.apply_mode !== "source_patch") {
|
|
340
|
-
throw new Error(`Proposal ${proposal.proposal_id} has apply_mode=${proposal.apply_mode}, not source_patch`);
|
|
341
|
-
}
|
|
342
|
-
const dir = patchesDir();
|
|
343
|
-
mkdirSync(dir, { recursive: true });
|
|
344
|
-
const baseName = `${proposal.proposal_id}.md`;
|
|
345
|
-
const filePath = join(dir, baseName);
|
|
346
|
-
const content = [
|
|
347
|
-
`# Source Patch Proposal: ${proposal.title}`,
|
|
348
|
-
"",
|
|
349
|
-
`- **Proposal ID**: ${proposal.proposal_id}`,
|
|
350
|
-
`- **Type**: ${proposal.type}`,
|
|
351
|
-
`- **Priority**: ${proposal.priority}`,
|
|
352
|
-
`- **Target**: ${proposal.target}`,
|
|
353
|
-
`- **Generated**: ${new Date().toISOString()}`,
|
|
354
|
-
"",
|
|
355
|
-
"## Description",
|
|
356
|
-
proposal.description,
|
|
357
|
-
"",
|
|
358
|
-
"## Proposed Change",
|
|
359
|
-
"```json",
|
|
360
|
-
JSON.stringify(proposal.proposed_change, null, 2),
|
|
361
|
-
"```",
|
|
362
|
-
"",
|
|
363
|
-
"## Evidence",
|
|
364
|
-
"```json",
|
|
365
|
-
JSON.stringify(proposal.evidence, null, 2),
|
|
366
|
-
"```",
|
|
367
|
-
"",
|
|
368
|
-
"## Application",
|
|
369
|
-
"This proposal requires manual review and merge into the MCP source code.",
|
|
370
|
-
"Do NOT auto-apply. After merging, republish the MCP server.",
|
|
371
|
-
"",
|
|
372
|
-
"## Override Whiteline (§4.4)",
|
|
373
|
-
"This proposal type is NOT in the config_override whitelist and must go",
|
|
374
|
-
"through source patch (risk rules, skill structure, schema fields).",
|
|
375
|
-
].join("\n");
|
|
376
|
-
writeFileSync(filePath, content, "utf-8");
|
|
377
|
-
return filePath;
|
|
378
|
-
}
|
|
379
|
-
export function getFlywheelConfigSummary() {
|
|
380
|
-
const all = loadImprovementQueue();
|
|
381
|
-
const overrideFiles = [];
|
|
382
|
-
const oDir = overridesDir();
|
|
383
|
-
if (existsSync(oDir)) {
|
|
384
|
-
try {
|
|
385
|
-
for (const f of readdirSync(oDir)) {
|
|
386
|
-
if (f.endsWith(".json"))
|
|
387
|
-
overrideFiles.push(f);
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
catch {
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
return {
|
|
394
|
-
queue_path: improvementQueuePath(),
|
|
395
|
-
overrides_dir: oDir,
|
|
396
|
-
patches_dir: patchesDir(),
|
|
397
|
-
total_proposals: all.length,
|
|
398
|
-
pending_count: all.filter((p) => p.review_status === "pending").length,
|
|
399
|
-
approved_count: all.filter((p) => p.review_status === "approved").length,
|
|
400
|
-
applied_count: all.filter((p) => p.review_status === "applied").length,
|
|
401
|
-
rejected_count: all.filter((p) => p.review_status === "rejected").length,
|
|
402
|
-
override_files: overrideFiles,
|
|
403
|
-
recent_proposals: all.slice(-5),
|
|
404
|
-
};
|
|
405
|
-
}
|
|
1
|
+
import{getPendingSuggestions}from'../knowledge/flywheel-loop.js';import{readFileSync,writeFileSync,existsSync,mkdirSync,appendFileSync,readdirSync}from'fs';import{join,dirname}from'path';import{getWowMcpDir}from'@wowok/wowok';function proposeErrorRuleAddition(a){const b=a['evidence'],c=b['top_error_messages']||[],d=c['slice'](0x0,0x3)['map'](e=>{const f=e['message']['toLowerCase']();let g=f['replace'](/0x[0-9a-f]+/gi,'0xADDR')['replace'](/\d+/g,'\x5cd+')['replace'](/[^\w\s\\]/g,'\x20')['replace'](/\s+/g,'\x20')['trim']();if(g['length']>0x3c)g=g['slice'](0x0,0x3c);return{'pattern':g,'sample_count':e['count']};});return{'proposal_id':'PROP-RULE-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'error_rule_addition','priority':a['severity'],'automation':'semi','apply_mode':'source_patch','title':'Add\x20ERROR_RULES\x20entries\x20for\x20'+a['target'],'description':'Generate\x20new\x20error\x20classification\x20rules\x20to\x20cover\x20patterns\x20currently\x20falling\x20into\x20\x27unknown\x27.\x20AI\x20should\x20draft\x20regex\x20patterns;\x20human\x20reviewer\x20validates\x20accuracy\x20and\x20assigns\x20correct\x20error_code.','target':'ERROR_RULES','proposed_change':{'action':'append','rules':d['map'](e=>({'pattern':e['pattern'],'error_code':'unknown','retryable':![],'recovery_hint':'TODO:\x20assign\x20by\x20reviewer','sample_message':e['sample_count']})),'note':'error_code\x20must\x20be\x20assigned\x20by\x20human\x20reviewer\x20based\x20on\x20semantic\x20analysis'},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':!![]};}function proposeDescriptionRewrite(a){const b=a['evidence'];return{'proposal_id':'PROP-DESC-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'description_rewrite','priority':a['severity'],'automation':'semi','apply_mode':'config_override','override_category':'descriptions','title':'Rewrite\x20description\x20for\x20'+(b['tool_name']||a['target']),'description':'The\x20semantic\x20layer\x20produces\x20no\x20summary\x20for\x20'+((0x1-(b['semantic_hit_rate']||0x0))*0x64)['toFixed'](0x1)+'%\x20of\x20calls\x20to\x20this\x20tool.\x20AI\x20should\x20rewrite\x20the\x20tool\x20description\x20and\x20INTENT_RULES\x20to\x20improve\x20coverage.\x20A/B\x20test\x20before\x20merging.','target':a['target'],'proposed_change':{'action':'rewrite','current_semantic_hit_rate':b['semantic_hit_rate'],'target_semantic_hit_rate':0.8,'rewrite_guidelines':['Follow\x204-part\x20format:\x20Meaning\x20+\x20Constraint\x20+\x20Relation\x20+\x20Example','Add\x20explicit\x20intent\x20signals\x20to\x20INTENT_RULES','Include\x20concrete\x20examples\x20for\x20common\x20operation\x20types']},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':!![]};}function proposeSkillCreation(a){const b=a['evidence'];return{'proposal_id':'PROP-SKILL-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'skill_creation','priority':a['severity'],'automation':'semi','apply_mode':'source_patch','title':'Create\x20new\x20Skill\x20for\x20\x27'+b['operation_type']+'\x27\x20operations','description':'This\x20operation\x20type\x20has\x20a\x20'+(b['success_rate']?(0x1-b['success_rate'])*0x64:0x0)['toFixed'](0x1)+'%\x20failure\x20rate\x20across\x20'+b['total_calls']+'\x20calls.\x20A\x20Skill\x20with\x20R1-R10\x20dialogue\x20scripts,\x20decision\x20trees,\x20and\x20failure\x20playbooks\x20could\x20guide\x20users\x20to\x20success.','target':'wowok-'+b['operation_type']+'-guide','proposed_change':{'action':'create','skill_name':'wowok-'+b['operation_type']+'-guide','skill_structure':{'sections':['R1-R10\x20dialogues','Decision\x20trees','Failure\x20playbooks','Tier\x20layering'],'target_role':'provider','loading':'on-demand'},'top_errors':b['error_distribution']},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':![]};}function proposeRecoveryAdjustment(a){const b=a['evidence'];return{'proposal_id':'PROP-RECOV-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'recovery_priority_adjustment','priority':a['severity'],'automation':'semi','apply_mode':'config_override','override_category':'recovery-priorities','title':'Review\x20recovery\x20strategy\x20for\x20\x27'+b['error_code']+'\x27\x20errors','description':'Error\x20code\x20\x27'+b['error_code']+'\x27\x20accounts\x20for\x20'+b['count']+'\x20failures\x20('+((b['percentage']||0x0)*0x64)['toFixed'](0x1)+'%).\x20The\x20current\x20recovery\x20strategy\x20may\x20need\x20tuning\x20—\x20consider\x20increasing\x20max_attempts,\x20adjusting\x20automation\x20level,\x20or\x20addressing\x20the\x20root\x20cause.','target':'RECOVERY_RULES[\x27'+b['error_code']+'\x27]','proposed_change':{'action':'review_and_adjust','current_strategy':'see\x20RECOVERY_RULES\x20table','suggestions':['Increase\x20max_attempts\x20if\x20failures\x20are\x20transient','Reduce\x20max_attempts\x20if\x20failures\x20are\x20persistent\x20(wastes\x20user\x20time)','Upgrade\x20automation\x20from\x20\x27semi\x27\x20to\x20\x27full\x27\x20if\x20recovery\x20is\x20deterministic','Consider\x20root-cause\x20fix\x20in\x20description/rules\x20to\x20prevent\x20the\x20error']},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':![]};}function proposeInvestigation(a){return{'proposal_id':'PROP-INV-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'investigation','priority':a['severity'],'automation':'manual','apply_mode':'source_patch','title':a['title'],'description':'Manual\x20investigation\x20required.\x20'+a['description'],'target':a['target'],'proposed_change':{'action':'investigate','steps':['Collect\x20additional\x20telemetry\x20around\x20the\x20anomaly','Check\x20if\x20the\x20issue\x20is\x20reproducible','Determine\x20if\x20the\x20root\x20cause\x20is\x20in\x20the\x20SDK,\x20MCP\x20layer,\x20or\x20user\x20behavior']},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':![]};}function proposeIndustryUpdate(a){const b=a['evidence'],c=b['industry']??a['target']['split'](':')[0x1]??'unknown',d=c!=='unknown'?getPendingSuggestions(c):[],e=d['map'](h=>({'suggestion_type':h['suggestion_type'],'field':h['field'],'suggested_value':h['suggested_value'],'evidence':h['evidence'],'confidence':h['confidence'],'priority':h['priority']})),f=b['health_score']!==undefined&&b['health_score']<0x2d,g=(b['high_priority_count']??0x0)>0x0;return{'proposal_id':'PROP-IND-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x6),'source_diagnosis_id':a['diagnosis_id'],'type':'industry_update_application','priority':a['severity'],'automation':f?'semi':'manual','apply_mode':'config_override','override_category':'industry-profiles','title':'Apply\x20'+d['length']+'\x20evolution\x20suggestions\x20for\x20industry\x20\x27'+c+'\x27','description':'Industry\x20\x27'+c+'\x27\x20has\x20health\x20anomaly\x20(health\x20score\x20'+(b['health_score']??'N/A')+',\x20level\x20'+(b['health_level']??'N/A')+').\x20'+('Has\x20'+d['length']+'\x20pending\x20evolution\x20suggestions\x20('+(b['high_priority_count']??0x0)+'\x20high\x20priority).\x20')+('Review\x20and\x20apply\x20to\x20drive\x20industry\x20cognition\x20evolution.\x20Weaknesses:\x20'+((b['weaknesses']??[])['join'](';\x20')||'none')+'.'),'target':'industry:'+c,'proposed_change':{'action':'apply_industry_updates','industry':c,'current_health_score':b['health_score'],'current_health_level':b['health_level'],'weaknesses':b['weaknesses']??[],'recommendations':b['recommendations']??[],'pending_suggestion_count':d['length'],'high_priority_count':b['high_priority_count']??0x0,'suggestions':e,'auto_applicable_suggestions':e['filter'](h=>h['confidence']>=0.85&&h['priority']==='high'),'apply_guidance':g?'Prioritize\x20reviewing\x20high-priority\x20suggestions;\x20high-confidence\x20(≥0.85)\x20suggestions\x20can\x20be\x20semi-automatically\x20applied':'No\x20high-priority\x20suggestions,\x20review\x20via\x20normal\x20process'},'evidence':a['evidence'],'review_status':'pending','ab_test_recommended':![]};}export function generateImprovements(a){const b=[];for(const g of a['diagnoses']){let h;switch(g['proposed_improvement_type']){case'rule_addition':h=proposeErrorRuleAddition(g);break;case'description_rewrite':h=proposeDescriptionRewrite(g);break;case'skill_creation':h=proposeSkillCreation(g);break;case'recovery_priority_adjustment':h=proposeRecoveryAdjustment(g);break;case'industry_update_application':h=proposeIndustryUpdate(g);break;default:h=proposeInvestigation(g);}b['push'](h);}const c=b['filter'](i=>i['priority']==='P0')['length'],d=b['filter'](i=>i['automation']==='semi')['length'],e=b['filter'](i=>i['ab_test_recommended'])['length'],f=b['length']+'\x20proposals\x20generated\x20from\x20'+a['total_diagnoses']+'\x20diagnoses.\x20'+(c+'\x20P0,\x20'+d+'\x20semi-automatic,\x20'+e+'\x20recommend\x20A/B\x20testing.\x20')+'All\x20proposals\x20require\x20human\x20review\x20before\x20application.';try{persistImprovementQueue(b);}catch{}return{'report_id':'IMPROVE-REPORT-'+Date['now'](),'generated_date':new Date()['toISOString'](),'source_diagnosis_report_id':a['report_id'],'total_proposals':b['length'],'proposals':b,'summary':f};}function wowokRootDir(){return getWowMcpDir();}function improvementQueuePath(){return join(wowokRootDir(),'improvement-queue.jsonl');}function overridesDir(){return join(wowokRootDir(),'overrides');}function patchesDir(){return join(wowokRootDir(),'patches');}export function persistImprovementQueue(a){if(a['length']===0x0)return 0x0;const b=improvementQueuePath();mkdirSync(dirname(b),{'recursive':!![]});const c=new Date()['toISOString'](),d=a['map'](e=>JSON['stringify']({...e,'persisted_at':c}));return appendFileSync(b,d['join']('\x0a')+'\x0a','utf-8'),a['length'];}export function loadImprovementQueue(a){const b=improvementQueuePath();if(!existsSync(b))return[];const c=readFileSync(b,'utf-8'),d=c['split']('\x0a')['filter'](f=>f['trim']()['length']>0x0),e=[];for(const f of d){try{const g=JSON['parse'](f);if(a?.['status']&&g['review_status']!==a['status'])continue;if(a?.['type']&&g['type']!==a['type'])continue;if(a?.['priority']&&g['priority']!==a['priority'])continue;e['push'](g);}catch{}}return e;}export function updateProposalReviewStatus(a,b){const c=loadImprovementQueue();let d;const e=new Date()['toISOString']();for(const g of c){g['proposal_id']===a&&(g['review_status']=b,g['reviewed_at']=e,d=g);}if(!d)return undefined;const f=improvementQueuePath();if(c['length']===0x0)writeFileSync(f,'','utf-8');else{const h=c['map'](i=>JSON['stringify'](i));writeFileSync(f,h['join']('\x0a')+'\x0a','utf-8');}return d;}export function applyConfigOverride(a){if(a['apply_mode']!=='config_override')throw new Error('Proposal\x20'+a['proposal_id']+'\x20has\x20apply_mode='+a['apply_mode']+',\x20not\x20config_override');if(!a['override_category'])throw new Error('Proposal\x20'+a['proposal_id']+'\x20has\x20no\x20override_category');const b=overridesDir();mkdirSync(b,{'recursive':!![]});const c=join(b,a['override_category']+'.json');let d={};if(existsSync(c))try{d=JSON['parse'](readFileSync(c,'utf-8'));}catch{d={};}const e={...d,...a['proposed_change'],'_last_applied_proposal':a['proposal_id'],'_last_applied_at':new Date()['toISOString']()};return writeFileSync(c,JSON['stringify'](e,null,0x2),'utf-8'),c;}export function produceSourcePatch(a){if(a['apply_mode']!=='source_patch')throw new Error('Proposal\x20'+a['proposal_id']+'\x20has\x20apply_mode='+a['apply_mode']+',\x20not\x20source_patch');const b=patchesDir();mkdirSync(b,{'recursive':!![]});const c=a['proposal_id']+'.md',d=join(b,c),e=['#\x20Source\x20Patch\x20Proposal:\x20'+a['title'],'','-\x20**Proposal\x20ID**:\x20'+a['proposal_id'],'-\x20**Type**:\x20'+a['type'],'-\x20**Priority**:\x20'+a['priority'],'-\x20**Target**:\x20'+a['target'],'-\x20**Generated**:\x20'+new Date()['toISOString'](),'','##\x20Description',a['description'],'','##\x20Proposed\x20Change','```json',JSON['stringify'](a['proposed_change'],null,0x2),'```','','##\x20Evidence','```json',JSON['stringify'](a['evidence'],null,0x2),'```','','##\x20Application','This\x20proposal\x20requires\x20manual\x20review\x20and\x20merge\x20into\x20the\x20MCP\x20source\x20code.','Do\x20NOT\x20auto-apply.\x20After\x20merging,\x20republish\x20the\x20MCP\x20server.','','##\x20Override\x20Whiteline\x20(§4.4)','This\x20proposal\x20type\x20is\x20NOT\x20in\x20the\x20config_override\x20whitelist\x20and\x20must\x20go','through\x20source\x20patch\x20(risk\x20rules,\x20skill\x20structure,\x20schema\x20fields).']['join']('\x0a');return writeFileSync(d,e,'utf-8'),d;}export function getFlywheelConfigSummary(){const a=loadImprovementQueue(),b=[],c=overridesDir();if(existsSync(c))try{for(const d of readdirSync(c)){if(d['endsWith']('.json'))b['push'](d);}}catch{}return{'queue_path':improvementQueuePath(),'overrides_dir':c,'patches_dir':patchesDir(),'total_proposals':a['length'],'pending_count':a['filter'](e=>e['review_status']==='pending')['length'],'approved_count':a['filter'](e=>e['review_status']==='approved')['length'],'applied_count':a['filter'](e=>e['review_status']==='applied')['length'],'rejected_count':a['filter'](e=>e['review_status']==='rejected')['length'],'override_files':b,'recent_proposals':a['slice'](-0x5)};}
|
|
@@ -1,56 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { aggregate } from "./aggregate.js";
|
|
3
|
-
import { diagnose } from "./diagnose.js";
|
|
4
|
-
import { generateImprovements } from "./improve.js";
|
|
5
|
-
async function loadTelemetryEvents() {
|
|
6
|
-
const storage = getStorage();
|
|
7
|
-
const rawEvents = await storage.query({});
|
|
8
|
-
return rawEvents;
|
|
9
|
-
}
|
|
10
|
-
async function runAggregateStage() {
|
|
11
|
-
const events = await loadTelemetryEvents();
|
|
12
|
-
return aggregate(events);
|
|
13
|
-
}
|
|
14
|
-
function runDiagnoseStage(stats) {
|
|
15
|
-
return diagnose(stats);
|
|
16
|
-
}
|
|
17
|
-
function runImproveStage(diagnosisReport) {
|
|
18
|
-
return generateImprovements(diagnosisReport);
|
|
19
|
-
}
|
|
20
|
-
export async function runLoopEngineeringPipeline() {
|
|
21
|
-
const runId = `LE-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
22
|
-
const runDate = new Date().toISOString();
|
|
23
|
-
try {
|
|
24
|
-
const aggregatedStats = await runAggregateStage();
|
|
25
|
-
const diagnosisReport = runDiagnoseStage(aggregatedStats);
|
|
26
|
-
const improvementReport = runImproveStage(diagnosisReport);
|
|
27
|
-
return {
|
|
28
|
-
pipeline_run_id: runId,
|
|
29
|
-
run_date: runDate,
|
|
30
|
-
stage: "complete",
|
|
31
|
-
aggregated_stats: aggregatedStats,
|
|
32
|
-
diagnosis_report: diagnosisReport,
|
|
33
|
-
improvement_report: improvementReport,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
return {
|
|
38
|
-
pipeline_run_id: runId,
|
|
39
|
-
run_date: runDate,
|
|
40
|
-
stage: "complete",
|
|
41
|
-
aggregated_stats: null,
|
|
42
|
-
diagnosis_report: null,
|
|
43
|
-
improvement_report: null,
|
|
44
|
-
error: error instanceof Error ? error.message : String(error),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export function runDiagnoseFromStats(stats) {
|
|
49
|
-
return runDiagnoseStage(stats);
|
|
50
|
-
}
|
|
51
|
-
export function runImproveFromDiagnoses(report) {
|
|
52
|
-
return runImproveStage(report);
|
|
53
|
-
}
|
|
54
|
-
export function runAggregateFromEvents(events) {
|
|
55
|
-
return aggregate(events);
|
|
56
|
-
}
|
|
1
|
+
import{getStorage}from'../telemetry/storage.js';import{aggregate}from'./aggregate.js';import{diagnose}from'./diagnose.js';import{generateImprovements}from'./improve.js';async function loadTelemetryEvents(){const a=getStorage(),b=await a['query']({});return b;}async function runAggregateStage(){const a=await loadTelemetryEvents();return aggregate(a);}function runDiagnoseStage(a){return diagnose(a);}function runImproveStage(a){return generateImprovements(a);}export async function runLoopEngineeringPipeline(){const a='LE-'+Date['now']()+'-'+Math['random']()['toString'](0x24)['slice'](0x2,0x8),b=new Date()['toISOString']();try{const c=await runAggregateStage(),d=runDiagnoseStage(c),e=runImproveStage(d);return{'pipeline_run_id':a,'run_date':b,'stage':'complete','aggregated_stats':c,'diagnosis_report':d,'improvement_report':e};}catch(f){return{'pipeline_run_id':a,'run_date':b,'stage':'complete','aggregated_stats':null,'diagnosis_report':null,'improvement_report':null,'error':f instanceof Error?f['message']:String(f)};}}export function runDiagnoseFromStats(a){return runDiagnoseStage(a);}export function runImproveFromDiagnoses(a){return runImproveStage(a);}export function runAggregateFromEvents(a){return aggregate(a);}
|
|
@@ -1,124 +1 @@
|
|
|
1
|
-
const registry = new
|
|
2
|
-
export function registerTemplate(entry) {
|
|
3
|
-
const fullEntry = {
|
|
4
|
-
...entry,
|
|
5
|
-
reviews: [],
|
|
6
|
-
install_count: 0,
|
|
7
|
-
average_rating: 0,
|
|
8
|
-
};
|
|
9
|
-
registry.set(entry.template_id, fullEntry);
|
|
10
|
-
return fullEntry;
|
|
11
|
-
}
|
|
12
|
-
export function getTemplate(id) {
|
|
13
|
-
return registry.get(id);
|
|
14
|
-
}
|
|
15
|
-
export function getTemplateByName(name) {
|
|
16
|
-
for (const entry of registry.values()) {
|
|
17
|
-
if (entry.name === name)
|
|
18
|
-
return entry;
|
|
19
|
-
}
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
export function listTemplates(filter) {
|
|
23
|
-
const entries = Array.from(registry.values());
|
|
24
|
-
if (!filter)
|
|
25
|
-
return entries;
|
|
26
|
-
return entries.filter((e) => {
|
|
27
|
-
if (filter.status && e.status !== filter.status)
|
|
28
|
-
return false;
|
|
29
|
-
if (filter.source && e.source !== filter.source)
|
|
30
|
-
return false;
|
|
31
|
-
if (filter.tag && !e.tags.includes(filter.tag))
|
|
32
|
-
return false;
|
|
33
|
-
return true;
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export function searchTemplates(query) {
|
|
37
|
-
const lower = query.toLowerCase();
|
|
38
|
-
return Array.from(registry.values()).filter((e) => {
|
|
39
|
-
return e.name.toLowerCase().includes(lower)
|
|
40
|
-
|| e.description.toLowerCase().includes(lower)
|
|
41
|
-
|| e.tags.some((t) => t.toLowerCase().includes(lower))
|
|
42
|
-
|| e.scenario.keywords.some((k) => k.toLowerCase().includes(lower));
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
export function updateTemplateStatus(id, status) {
|
|
46
|
-
const entry = registry.get(id);
|
|
47
|
-
if (!entry)
|
|
48
|
-
return undefined;
|
|
49
|
-
entry.status = status;
|
|
50
|
-
entry.last_updated = new Date().toISOString();
|
|
51
|
-
return entry;
|
|
52
|
-
}
|
|
53
|
-
export function recordInstall(id) {
|
|
54
|
-
const entry = registry.get(id);
|
|
55
|
-
if (!entry)
|
|
56
|
-
return undefined;
|
|
57
|
-
entry.install_count++;
|
|
58
|
-
return entry;
|
|
59
|
-
}
|
|
60
|
-
export function addReview(id, review) {
|
|
61
|
-
const entry = registry.get(id);
|
|
62
|
-
if (!entry)
|
|
63
|
-
return undefined;
|
|
64
|
-
const fullReview = {
|
|
65
|
-
...review,
|
|
66
|
-
timestamp: new Date().toISOString(),
|
|
67
|
-
};
|
|
68
|
-
entry.reviews.push(fullReview);
|
|
69
|
-
const totalRating = entry.reviews.reduce((sum, r) => sum + r.rating, 0);
|
|
70
|
-
entry.average_rating = totalRating / entry.reviews.length;
|
|
71
|
-
entry.last_updated = new Date().toISOString();
|
|
72
|
-
return entry;
|
|
73
|
-
}
|
|
74
|
-
export function getRegistryStats() {
|
|
75
|
-
const entries = Array.from(registry.values());
|
|
76
|
-
const approved = entries.filter((e) => e.status === "approved");
|
|
77
|
-
const pending = entries.filter((e) => e.status === "pending_review" || e.status === "in_review");
|
|
78
|
-
const community = entries.filter((e) => e.source === "community");
|
|
79
|
-
const official = entries.filter((e) => e.source === "official");
|
|
80
|
-
const totalInstalls = entries.reduce((sum, e) => sum + e.install_count, 0);
|
|
81
|
-
const ratedEntries = entries.filter((e) => e.reviews.length > 0);
|
|
82
|
-
const avgRating = ratedEntries.length > 0
|
|
83
|
-
? ratedEntries.reduce((sum, e) => sum + e.average_rating, 0) / ratedEntries.length
|
|
84
|
-
: 0;
|
|
85
|
-
return {
|
|
86
|
-
total_templates: entries.length,
|
|
87
|
-
approved_count: approved.length,
|
|
88
|
-
pending_count: pending.length,
|
|
89
|
-
community_count: community.length,
|
|
90
|
-
official_count: official.length,
|
|
91
|
-
total_installs: totalInstalls,
|
|
92
|
-
average_rating: avgRating,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
export function clearRegistry() {
|
|
96
|
-
registry.clear();
|
|
97
|
-
}
|
|
98
|
-
import { SCENARIO_REGISTRY } from "../harness/plan.js";
|
|
99
|
-
export function seedBuiltInTemplates() {
|
|
100
|
-
const builtIn = [
|
|
101
|
-
{ source: "official", author: "WoWok Team", tags: ["phase1", "service"] },
|
|
102
|
-
{ source: "official", author: "WoWok Team", tags: ["phase1", "rental"] },
|
|
103
|
-
{ source: "official", author: "WoWok Team", tags: ["phase2", "digital"] },
|
|
104
|
-
{ source: "official", author: "WoWok Team", tags: ["phase2", "travel"] },
|
|
105
|
-
{ source: "official", author: "WoWok Team", tags: ["fallback"] },
|
|
106
|
-
];
|
|
107
|
-
for (let i = 0; i < SCENARIO_REGISTRY.length && i < builtIn.length; i++) {
|
|
108
|
-
const scenario = SCENARIO_REGISTRY[i];
|
|
109
|
-
const meta = builtIn[i];
|
|
110
|
-
registerTemplate({
|
|
111
|
-
template_id: `builtin-${scenario.name}`,
|
|
112
|
-
name: scenario.name,
|
|
113
|
-
version: "1.0.0",
|
|
114
|
-
author: meta.author,
|
|
115
|
-
source: meta.source,
|
|
116
|
-
status: "approved",
|
|
117
|
-
submitted_date: "2026-07-14T00:00:00Z",
|
|
118
|
-
last_updated: "2026-07-14T00:00:00Z",
|
|
119
|
-
description: scenario.description,
|
|
120
|
-
tags: meta.tags,
|
|
121
|
-
scenario,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
1
|
+
const registry=new Map();export function registerTemplate(a){const b={...a,'reviews':[],'install_count':0x0,'average_rating':0x0};return registry['set'](a['template_id'],b),b;}export function getTemplate(a){return registry['get'](a);}export function getTemplateByName(a){for(const b of registry['values']()){if(b['name']===a)return b;}return undefined;}export function listTemplates(a){const b=Array['from'](registry['values']());if(!a)return b;return b['filter'](c=>{if(a['status']&&c['status']!==a['status'])return![];if(a['source']&&c['source']!==a['source'])return![];if(a['tag']&&!c['tags']['includes'](a['tag']))return![];return!![];});}export function searchTemplates(a){const b=a['toLowerCase']();return Array['from'](registry['values']())['filter'](c=>{return c['name']['toLowerCase']()['includes'](b)||c['description']['toLowerCase']()['includes'](b)||c['tags']['some'](d=>d['toLowerCase']()['includes'](b))||c['scenario']['keywords']['some'](d=>d['toLowerCase']()['includes'](b));});}export function updateTemplateStatus(a,b){const c=registry['get'](a);if(!c)return undefined;return c['status']=b,c['last_updated']=new Date()['toISOString'](),c;}export function recordInstall(a){const b=registry['get'](a);if(!b)return undefined;return b['install_count']++,b;}export function addReview(a,b){const c=registry['get'](a);if(!c)return undefined;const d={...b,'timestamp':new Date()['toISOString']()};c['reviews']['push'](d);const e=c['reviews']['reduce']((f,g)=>f+g['rating'],0x0);return c['average_rating']=e/c['reviews']['length'],c['last_updated']=new Date()['toISOString'](),c;}export function getRegistryStats(){const a=Array['from'](registry['values']()),b=a['filter'](i=>i['status']==='approved'),c=a['filter'](i=>i['status']==='pending_review'||i['status']==='in_review'),d=a['filter'](i=>i['source']==='community'),e=a['filter'](i=>i['source']==='official'),f=a['reduce']((i,j)=>i+j['install_count'],0x0),g=a['filter'](i=>i['reviews']['length']>0x0),h=g['length']>0x0?g['reduce']((i,j)=>i+j['average_rating'],0x0)/g['length']:0x0;return{'total_templates':a['length'],'approved_count':b['length'],'pending_count':c['length'],'community_count':d['length'],'official_count':e['length'],'total_installs':f,'average_rating':h};}export function clearRegistry(){registry['clear']();}import{SCENARIO_REGISTRY}from'../harness/plan.js';export function seedBuiltInTemplates(){const a=[{'source':'official','author':'WoWok\x20Team','tags':['phase1','service']},{'source':'official','author':'WoWok\x20Team','tags':['phase1','rental']},{'source':'official','author':'WoWok\x20Team','tags':['phase2','digital']},{'source':'official','author':'WoWok\x20Team','tags':['phase2','travel']},{'source':'official','author':'WoWok\x20Team','tags':['fallback']}];for(let b=0x0;b<SCENARIO_REGISTRY['length']&&b<a['length'];b++){const c=SCENARIO_REGISTRY[b],d=a[b];registerTemplate({'template_id':'builtin-'+c['name'],'name':c['name'],'version':'1.0.0','author':d['author'],'source':d['source'],'status':'approved','submitted_date':'2026-07-14T00:00:00Z','last_updated':'2026-07-14T00:00:00Z','description':c['description'],'tags':d['tags'],'scenario':c});}}
|