@unified-product-graph/mcp-server 0.8.6 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/TOOLS.md +6 -4
- package/dist/index.js +202 -25
- package/dist/index.js.map +1 -1
- package/dist/tools-manifest.json +44 -41
- package/package.json +2 -1
- package/skills/upg-prioritise/SKILL.md +23 -8
package/dist/tools-manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "2",
|
|
3
3
|
"package": "@unified-product-graph/mcp-server",
|
|
4
|
-
"package_version": "0.8.
|
|
4
|
+
"package_version": "0.8.7",
|
|
5
5
|
"tool_count": 96,
|
|
6
6
|
"domains": [
|
|
7
7
|
"context",
|
|
@@ -2145,17 +2145,20 @@
|
|
|
2145
2145
|
]
|
|
2146
2146
|
},
|
|
2147
2147
|
"throws": [
|
|
2148
|
-
"textError on a missing/unknown framework_id."
|
|
2148
|
+
"textError on a missing/unknown framework_id, or when no requested\nentity resolves (no dangling exercise is left behind)."
|
|
2149
2149
|
],
|
|
2150
2150
|
"examples": [],
|
|
2151
2151
|
"warnings": [],
|
|
2152
2152
|
"see": [
|
|
2153
2153
|
"score_entity"
|
|
2154
2154
|
],
|
|
2155
|
-
"source": "src/tools/frameworks.ts:
|
|
2155
|
+
"source": "src/tools/frameworks.ts:25",
|
|
2156
2156
|
"symbol": "applyFramework",
|
|
2157
|
-
"returns": "JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id }], warnings }
|
|
2158
|
-
"return_shape": "{ exercise_id, exercise, included: [{ edge_id, entity_id }], warnings }",
|
|
2157
|
+
"returns": "JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id, edge_type }], warnings }`\n(the shared cross-surface envelope; identical to CLI `apply --json`).",
|
|
2158
|
+
"return_shape": "{ exercise_id, exercise, included: [{ edge_id, entity_id, edge_type }], warnings }",
|
|
2159
|
+
"return_notes": [
|
|
2160
|
+
"(the shared cross-surface envelope; identical to CLI `apply --json`)."
|
|
2161
|
+
],
|
|
2159
2162
|
"atomicity": "atomic."
|
|
2160
2163
|
},
|
|
2161
2164
|
{
|
|
@@ -2191,7 +2194,7 @@
|
|
|
2191
2194
|
"inspect",
|
|
2192
2195
|
"validate_graph"
|
|
2193
2196
|
],
|
|
2194
|
-
"source": "src/tools/spec.ts:
|
|
2197
|
+
"source": "src/tools/spec.ts:1463",
|
|
2195
2198
|
"symbol": "getAntiPattern",
|
|
2196
2199
|
"returns": "JSON: `UPGCuratedAntiPattern`",
|
|
2197
2200
|
"return_notes": [
|
|
@@ -2320,7 +2323,7 @@
|
|
|
2320
2323
|
"list_domains",
|
|
2321
2324
|
"get_domain_guide"
|
|
2322
2325
|
],
|
|
2323
|
-
"source": "src/tools/spec.ts:
|
|
2326
|
+
"source": "src/tools/spec.ts:1919",
|
|
2324
2327
|
"symbol": "getDomainRing",
|
|
2325
2328
|
"returns": "JSON: the full `UPGDomainRing` record.",
|
|
2326
2329
|
"return_notes": [
|
|
@@ -2361,7 +2364,7 @@
|
|
|
2361
2364
|
"list_edge_migrations",
|
|
2362
2365
|
"rename_edge_type"
|
|
2363
2366
|
],
|
|
2364
|
-
"source": "src/tools/spec.ts:
|
|
2367
|
+
"source": "src/tools/spec.ts:915",
|
|
2365
2368
|
"symbol": "getEdgeType",
|
|
2366
2369
|
"returns": "JSON: `{ type, forward_verb, reverse_verb, classification, source_type, target_type }`",
|
|
2367
2370
|
"return_shape": "{ type, forward_verb, reverse_verb, classification, source_type, target_type }",
|
|
@@ -2400,7 +2403,7 @@
|
|
|
2400
2403
|
"get_entity_schema",
|
|
2401
2404
|
"list_type_migrations"
|
|
2402
2405
|
],
|
|
2403
|
-
"source": "src/tools/spec.ts:
|
|
2406
|
+
"source": "src/tools/spec.ts:1378",
|
|
2404
2407
|
"symbol": "getEntityMeta",
|
|
2405
2408
|
"returns": "JSON: `EntityTypeMeta & { domain_id: string | null }`",
|
|
2406
2409
|
"return_notes": [
|
|
@@ -2441,7 +2444,7 @@
|
|
|
2441
2444
|
"get_playbook",
|
|
2442
2445
|
"get_approach"
|
|
2443
2446
|
],
|
|
2444
|
-
"source": "src/tools/spec.ts:
|
|
2447
|
+
"source": "src/tools/spec.ts:848",
|
|
2445
2448
|
"symbol": "getFramework",
|
|
2446
2449
|
"returns": "JSON: the full `UPGFramework` record.",
|
|
2447
2450
|
"return_notes": [
|
|
@@ -2482,7 +2485,7 @@
|
|
|
2482
2485
|
"get_framework",
|
|
2483
2486
|
"list_entity_types"
|
|
2484
2487
|
],
|
|
2485
|
-
"source": "src/tools/spec.ts:
|
|
2488
|
+
"source": "src/tools/spec.ts:1172",
|
|
2486
2489
|
"symbol": "getLensTool",
|
|
2487
2490
|
"returns": "JSON: `{ ...UPGLens, visible_types: string[] }`",
|
|
2488
2491
|
"return_shape": "{...UPGLens, visible_types: string[] }",
|
|
@@ -2518,7 +2521,7 @@
|
|
|
2518
2521
|
"get_entity_meta",
|
|
2519
2522
|
"get_entity_schema"
|
|
2520
2523
|
],
|
|
2521
|
-
"source": "src/tools/spec.ts:
|
|
2524
|
+
"source": "src/tools/spec.ts:1789",
|
|
2522
2525
|
"symbol": "getLifecycle",
|
|
2523
2526
|
"returns": "JSON: the full `UPGLifecycle` record, or a descriptive message.",
|
|
2524
2527
|
"return_notes": [
|
|
@@ -2600,7 +2603,7 @@
|
|
|
2600
2603
|
"get_playbook",
|
|
2601
2604
|
"list_lenses"
|
|
2602
2605
|
],
|
|
2603
|
-
"source": "src/tools/spec.ts:
|
|
2606
|
+
"source": "src/tools/spec.ts:974",
|
|
2604
2607
|
"symbol": "getRegion",
|
|
2605
2608
|
"returns": "JSON: the full `UPGRegion` record.",
|
|
2606
2609
|
"return_notes": [
|
|
@@ -2641,7 +2644,7 @@
|
|
|
2641
2644
|
"get_entity_meta",
|
|
2642
2645
|
"list_entity_types"
|
|
2643
2646
|
],
|
|
2644
|
-
"source": "src/tools/spec.ts:
|
|
2647
|
+
"source": "src/tools/spec.ts:996",
|
|
2645
2648
|
"symbol": "getRegionForEntity",
|
|
2646
2649
|
"returns": "JSON: the full `UPGRegion` record.",
|
|
2647
2650
|
"return_notes": [
|
|
@@ -2672,7 +2675,7 @@
|
|
|
2672
2675
|
"list_scales",
|
|
2673
2676
|
"get_entity_schema"
|
|
2674
2677
|
],
|
|
2675
|
-
"source": "src/tools/spec.ts:
|
|
2678
|
+
"source": "src/tools/spec.ts:1835",
|
|
2676
2679
|
"symbol": "getScale",
|
|
2677
2680
|
"returns": "JSON: the full `UPGScaleDefinition` record including all points.",
|
|
2678
2681
|
"return_notes": [
|
|
@@ -2703,7 +2706,7 @@
|
|
|
2703
2706
|
"list_edge_types",
|
|
2704
2707
|
"list_regions"
|
|
2705
2708
|
],
|
|
2706
|
-
"source": "src/tools/spec.ts:
|
|
2709
|
+
"source": "src/tools/spec.ts:1024",
|
|
2707
2710
|
"symbol": "getSpecVersion",
|
|
2708
2711
|
"returns": "JSON: `{ upg_version, markdown_format_version, entity_count, edge_count, domain_count, region_count }`",
|
|
2709
2712
|
"return_shape": "{ upg_version, markdown_format_version, entity_count, edge_count, domain_count, region_count }",
|
|
@@ -2749,7 +2752,7 @@
|
|
|
2749
2752
|
"get_entity_meta",
|
|
2750
2753
|
"list_frameworks"
|
|
2751
2754
|
],
|
|
2752
|
-
"source": "src/tools/spec.ts:
|
|
2755
|
+
"source": "src/tools/spec.ts:1240",
|
|
2753
2756
|
"symbol": "getTypeLabel",
|
|
2754
2757
|
"returns": "JSON: `{ ...UPGTypeLabel, resolved_label: string }`",
|
|
2755
2758
|
"return_shape": "{...UPGTypeLabel, resolved_label: string }",
|
|
@@ -2788,7 +2791,7 @@
|
|
|
2788
2791
|
"get_entity_meta",
|
|
2789
2792
|
"create_node"
|
|
2790
2793
|
],
|
|
2791
|
-
"source": "src/tools/spec.ts:
|
|
2794
|
+
"source": "src/tools/spec.ts:1270",
|
|
2792
2795
|
"symbol": "getValidChildrenTool",
|
|
2793
2796
|
"returns": "JSON: `{ parent_type, valid_children: string[] }`",
|
|
2794
2797
|
"return_shape": "{ parent_type, valid_children: string[] }",
|
|
@@ -2891,7 +2894,7 @@
|
|
|
2891
2894
|
"inspect",
|
|
2892
2895
|
"get_domain_guide"
|
|
2893
2896
|
],
|
|
2894
|
-
"source": "src/tools/spec.ts:
|
|
2897
|
+
"source": "src/tools/spec.ts:1421",
|
|
2895
2898
|
"symbol": "listAntiPatterns",
|
|
2896
2899
|
"returns": "JSON: `{ total, count, next_cursor?, anti_patterns: UPGCuratedAntiPattern[] }`",
|
|
2897
2900
|
"return_shape": "{ total, count, next_cursor?, anti_patterns: UPGCuratedAntiPattern[] }",
|
|
@@ -2992,7 +2995,7 @@
|
|
|
2992
2995
|
"list_domains",
|
|
2993
2996
|
"list_anti_patterns"
|
|
2994
2997
|
],
|
|
2995
|
-
"source": "src/tools/spec.ts:
|
|
2998
|
+
"source": "src/tools/spec.ts:1510",
|
|
2996
2999
|
"symbol": "listBenchmarks",
|
|
2997
3000
|
"returns": "JSON: `{ kind, total, count, benchmarks: ... }`",
|
|
2998
3001
|
"return_shape": "{ kind, total, count, benchmarks:... }",
|
|
@@ -3020,7 +3023,7 @@
|
|
|
3020
3023
|
"list_portfolio_cross_edges",
|
|
3021
3024
|
"migrate_cross_edges"
|
|
3022
3025
|
],
|
|
3023
|
-
"source": "src/tools/spec.ts:
|
|
3026
|
+
"source": "src/tools/spec.ts:1110",
|
|
3024
3027
|
"symbol": "listCrossEdgeTypes",
|
|
3025
3028
|
"returns": "JSON: `{ count, types: readonly UPGCrossEdgeType[] }`",
|
|
3026
3029
|
"return_shape": "{ count, types: readonly UPGCrossEdgeType[] }",
|
|
@@ -3048,7 +3051,7 @@
|
|
|
3048
3051
|
"list_domains",
|
|
3049
3052
|
"get_domain_guide"
|
|
3050
3053
|
],
|
|
3051
|
-
"source": "src/tools/spec.ts:
|
|
3054
|
+
"source": "src/tools/spec.ts:1898",
|
|
3052
3055
|
"symbol": "listDomainRings",
|
|
3053
3056
|
"returns": "JSON: `{ rings: UPGDomainRing[], total: number }`",
|
|
3054
3057
|
"return_shape": "{ rings: UPGDomainRing[], total: number }",
|
|
@@ -3118,7 +3121,7 @@
|
|
|
3118
3121
|
"list_edge_types",
|
|
3119
3122
|
"validate_graph"
|
|
3120
3123
|
],
|
|
3121
|
-
"source": "src/tools/spec.ts:
|
|
3124
|
+
"source": "src/tools/spec.ts:1682",
|
|
3122
3125
|
"symbol": "listEdgeMigrations",
|
|
3123
3126
|
"returns": "JSON: `{ migrations: [{ kind, from, to?, since }], total: number }`",
|
|
3124
3127
|
"return_shape": "{ migrations: [{ kind, from, to?, since }], total: number }",
|
|
@@ -3157,7 +3160,7 @@
|
|
|
3157
3160
|
"list_edge_migrations",
|
|
3158
3161
|
"create_edge"
|
|
3159
3162
|
],
|
|
3160
|
-
"source": "src/tools/spec.ts:
|
|
3163
|
+
"source": "src/tools/spec.ts:896",
|
|
3161
3164
|
"symbol": "listEdgeTypes",
|
|
3162
3165
|
"returns": "JSON: `{ count, edges: Array<{ type, forward_verb, reverse_verb, classification, source_type, target_type }> }`",
|
|
3163
3166
|
"return_shape": "{ count, edges: Array<{ type, forward_verb, reverse_verb, classification, source_type, target_type }> }",
|
|
@@ -3215,7 +3218,7 @@
|
|
|
3215
3218
|
"list_type_migrations",
|
|
3216
3219
|
"list_domains"
|
|
3217
3220
|
],
|
|
3218
|
-
"source": "src/tools/spec.ts:
|
|
3221
|
+
"source": "src/tools/spec.ts:1322",
|
|
3219
3222
|
"symbol": "listEntityTypes",
|
|
3220
3223
|
"returns": "JSON: `{ total, count, next_cursor?, types: Array<EntityTypeMeta & { domain_id: string | null }> }`",
|
|
3221
3224
|
"return_shape": "{ total, count, next_cursor?, types: Array<EntityTypeMeta & { domain_id: string | null }> }",
|
|
@@ -3242,7 +3245,7 @@
|
|
|
3242
3245
|
"list_frameworks",
|
|
3243
3246
|
"list_framework_structure_patterns"
|
|
3244
3247
|
],
|
|
3245
|
-
"source": "src/tools/spec.ts:
|
|
3248
|
+
"source": "src/tools/spec.ts:1854",
|
|
3246
3249
|
"symbol": "listFrameworkCategories",
|
|
3247
3250
|
"returns": "JSON: `{ categories: string[], total: number }`",
|
|
3248
3251
|
"return_shape": "{ categories: string[], total: number }",
|
|
@@ -3270,7 +3273,7 @@
|
|
|
3270
3273
|
"list_framework_categories",
|
|
3271
3274
|
"get_framework"
|
|
3272
3275
|
],
|
|
3273
|
-
"source": "src/tools/spec.ts:
|
|
3276
|
+
"source": "src/tools/spec.ts:1875",
|
|
3274
3277
|
"symbol": "listFrameworkStructurePatterns",
|
|
3275
3278
|
"returns": "JSON: `{ patterns: string[], total: number }`",
|
|
3276
3279
|
"return_shape": "{ patterns: string[], total: number }",
|
|
@@ -3278,7 +3281,7 @@
|
|
|
3278
3281
|
},
|
|
3279
3282
|
{
|
|
3280
3283
|
"name": "list_frameworks",
|
|
3281
|
-
"description": "List the canonical `UPGFramework` definitions
|
|
3284
|
+
"description": "List the canonical `UPGFramework` definitions: the curated, famous product frameworks that anchor the public catalog (spanning strategy, discovery, prioritisation, design, growth, engineering, and reflection classics). Returns a lightweight summary per framework (id, name, category, description, tags, approach_ids, structure_pattern); call `get_framework(id)` for the full record. Paginated (default 50, max 200). Cursor is opaque: pass `next_cursor` from a previous response. Optional `category` is exact-match against `UPGFramework.category` and applies before pagination.",
|
|
3282
3285
|
"domain": "spec",
|
|
3283
3286
|
"inputSchema": {
|
|
3284
3287
|
"type": "object",
|
|
@@ -3313,10 +3316,10 @@
|
|
|
3313
3316
|
"prioritise",
|
|
3314
3317
|
"list_approaches"
|
|
3315
3318
|
],
|
|
3316
|
-
"source": "src/tools/spec.ts:
|
|
3319
|
+
"source": "src/tools/spec.ts:798",
|
|
3317
3320
|
"symbol": "listFrameworks",
|
|
3318
|
-
"returns": "JSON: `{ total, count, next_cursor?, frameworks:
|
|
3319
|
-
"return_shape": "{ total, count, next_cursor?, frameworks:
|
|
3321
|
+
"returns": "JSON: `{ total, count, next_cursor?, frameworks: Array<{ id, name, category, description, tags, approach_ids, structure_pattern }> }`",
|
|
3322
|
+
"return_shape": "{ total, count, next_cursor?, frameworks: Array<{ id, name, category, description, tags, approach_ids, structure_pattern }> }",
|
|
3320
3323
|
"atomicity": "atomic (read-only)"
|
|
3321
3324
|
},
|
|
3322
3325
|
{
|
|
@@ -3342,7 +3345,7 @@
|
|
|
3342
3345
|
"list_playbooks",
|
|
3343
3346
|
"list_frameworks"
|
|
3344
3347
|
],
|
|
3345
|
-
"source": "src/tools/spec.ts:
|
|
3348
|
+
"source": "src/tools/spec.ts:1139",
|
|
3346
3349
|
"symbol": "listLenses",
|
|
3347
3350
|
"returns": "JSON: `{ count, lenses: Array<{ id, name, description, icon, audience, perspective, framework_id?, playbook_id?, visible_domain_count, intelligence_prompt_count }> }`",
|
|
3348
3351
|
"return_shape": "{ count, lenses: Array<{ id, name, description, icon, audience, perspective, framework_id?, playbook_id?, visible_domain_count, intelligence_prompt_count }> }",
|
|
@@ -3379,7 +3382,7 @@
|
|
|
3379
3382
|
"list_entity_types",
|
|
3380
3383
|
"get_entity_meta"
|
|
3381
3384
|
],
|
|
3382
|
-
"source": "src/tools/spec.ts:
|
|
3385
|
+
"source": "src/tools/spec.ts:1747",
|
|
3383
3386
|
"symbol": "listLifecycles",
|
|
3384
3387
|
"returns": "JSON: `{ lifecycles, total, free_types: string[], planned_types: string[] }`",
|
|
3385
3388
|
"return_shape": "{ lifecycles, total, free_types: string[], planned_types: string[] }",
|
|
@@ -3450,7 +3453,7 @@
|
|
|
3450
3453
|
"list_domain_rings",
|
|
3451
3454
|
"create_product"
|
|
3452
3455
|
],
|
|
3453
|
-
"source": "src/tools/spec.ts:
|
|
3456
|
+
"source": "src/tools/spec.ts:1618",
|
|
3454
3457
|
"symbol": "listProductStages",
|
|
3455
3458
|
"returns": "JSON: `{ count, stages: readonly UPGProductStage[] }`",
|
|
3456
3459
|
"return_shape": "{ count, stages: readonly UPGProductStage[] }",
|
|
@@ -3479,7 +3482,7 @@
|
|
|
3479
3482
|
"list_domains",
|
|
3480
3483
|
"list_playbooks"
|
|
3481
3484
|
],
|
|
3482
|
-
"source": "src/tools/spec.ts:
|
|
3485
|
+
"source": "src/tools/spec.ts:942",
|
|
3483
3486
|
"symbol": "listRegions",
|
|
3484
3487
|
"returns": "JSON: `{ count, regions: Array<{ id, label, order, shape, mental_model, anchor_type, composes_atomic_domains, entity_count, intra_edge_count, boundary_edge_count }> }`",
|
|
3485
3488
|
"return_shape": "{ count, regions: Array<{ id, label, order, shape, mental_model, anchor_type, composes_atomic_domains, entity_count, intra_edge_count, boundary_edge_count }> }",
|
|
@@ -3506,7 +3509,7 @@
|
|
|
3506
3509
|
"get_scale",
|
|
3507
3510
|
"get_entity_schema"
|
|
3508
3511
|
],
|
|
3509
|
-
"source": "src/tools/spec.ts:
|
|
3512
|
+
"source": "src/tools/spec.ts:1820",
|
|
3510
3513
|
"symbol": "listScales",
|
|
3511
3514
|
"returns": "JSON: `{ scales: UPGScaleDefinition[], total: number }`",
|
|
3512
3515
|
"return_shape": "{ scales: UPGScaleDefinition[], total: number }",
|
|
@@ -3535,7 +3538,7 @@
|
|
|
3535
3538
|
"migrate_type",
|
|
3536
3539
|
"validate_graph"
|
|
3537
3540
|
],
|
|
3538
|
-
"source": "src/tools/spec.ts:
|
|
3541
|
+
"source": "src/tools/spec.ts:1719",
|
|
3539
3542
|
"symbol": "listSplitMigrations",
|
|
3540
3543
|
"returns": "JSON: `{ splits: [...], total: number }`",
|
|
3541
3544
|
"return_shape": "{ splits: [...], total: number }",
|
|
@@ -3572,7 +3575,7 @@
|
|
|
3572
3575
|
"list_entity_types",
|
|
3573
3576
|
"get_entity_meta"
|
|
3574
3577
|
],
|
|
3575
|
-
"source": "src/tools/spec.ts:
|
|
3578
|
+
"source": "src/tools/spec.ts:1205",
|
|
3576
3579
|
"symbol": "listTypeLabels",
|
|
3577
3580
|
"returns": "JSON: `{ total, count, next_cursor?, labels: UPGTypeLabel[] }`",
|
|
3578
3581
|
"return_shape": "{ total, count, next_cursor?, labels: UPGTypeLabel[] }",
|
|
@@ -3608,7 +3611,7 @@
|
|
|
3608
3611
|
"validate_graph",
|
|
3609
3612
|
"list_entity_types"
|
|
3610
3613
|
],
|
|
3611
|
-
"source": "src/tools/spec.ts:
|
|
3614
|
+
"source": "src/tools/spec.ts:1651",
|
|
3612
3615
|
"symbol": "listTypeMigrations",
|
|
3613
3616
|
"returns": "JSON: `{ migrations: [{ from, to, since }], total: number }`",
|
|
3614
3617
|
"return_shape": "{ migrations: [{ from, to, since }], total: number }",
|
|
@@ -3794,7 +3797,7 @@
|
|
|
3794
3797
|
"create_edge",
|
|
3795
3798
|
"trace"
|
|
3796
3799
|
],
|
|
3797
|
-
"source": "src/tools/spec.ts:
|
|
3800
|
+
"source": "src/tools/spec.ts:1078",
|
|
3798
3801
|
"symbol": "resolveEdgeForPair",
|
|
3799
3802
|
"returns": "JSON: `{ source_type, target_type, edge_type: string | null,\nanchor_hint?, alternate_anchors?, adjacent_edges? }`",
|
|
3800
3803
|
"return_shape": "{ source_type, target_type, edge_type: string | null, anchor_hint?, alternate_anchors?, adjacent_edges? }",
|
|
@@ -3838,7 +3841,7 @@
|
|
|
3838
3841
|
"see": [
|
|
3839
3842
|
"apply_framework"
|
|
3840
3843
|
],
|
|
3841
|
-
"source": "src/tools/frameworks.ts:
|
|
3844
|
+
"source": "src/tools/frameworks.ts:55",
|
|
3842
3845
|
"symbol": "scoreEntity",
|
|
3843
3846
|
"returns": "JSON: `{ edge, warnings }`.",
|
|
3844
3847
|
"return_shape": "{ edge, warnings }",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unified-product-graph/mcp-server",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.7",
|
|
4
4
|
"description": "Local MCP server for .upg files. Read and write product knowledge graphs offline.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "The Product Creator <hello@theproductcreator.com>",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"generate-tools:check": "tsx scripts/generate-tool-reference.ts --check",
|
|
46
46
|
"test": "vitest run",
|
|
47
47
|
"test:watch": "vitest",
|
|
48
|
+
"smoke": "node scripts/upg-smoke.mjs --file test-fixtures/sample.upg",
|
|
48
49
|
"lint": "eslint src/",
|
|
49
50
|
"type-check": "tsc --noEmit",
|
|
50
51
|
"prepublishOnly": "npm run build"
|
|
@@ -20,7 +20,8 @@ This is the home of the **Prioritise** approach. Where Inspect tells you *what's
|
|
|
20
20
|
Use the `mcp__unified-product-graph__*` MCP tools:
|
|
21
21
|
- **Read candidates:** `list_nodes`, `search_nodes`, `get_node`, `get_product_context`
|
|
22
22
|
- **Approach + frameworks:** `get_approach({ approach_id: "prioritise" })`, `get_framework({ framework_id: "..." })`
|
|
23
|
-
- **
|
|
23
|
+
- **Run + record a framework (the result lives on the graph):** `apply_framework` (creates the exercise and pulls candidates in), `score_entity` (records each candidate's result on its edge). On the CLI: `upg apply <framework> [ids...]`, `upg score <exercise> <entity> --data '{...}'`, and `upg show <exercise>` to read the scores back.
|
|
24
|
+
- **Capture a decision (optional):** `create_node`, `update_node`, `create_edge`
|
|
24
25
|
|
|
25
26
|
## The Prioritisation Frameworks
|
|
26
27
|
|
|
@@ -152,18 +153,32 @@ Always add a one-sentence interpretation below the output: what does the ranking
|
|
|
152
153
|
|
|
153
154
|
### Step 5: Capture the Results
|
|
154
155
|
|
|
155
|
-
Prioritisation that stays in a conversation dies.
|
|
156
|
+
Prioritisation that stays in a conversation dies. The scoring run you just
|
|
157
|
+
facilitated is itself a first-class object: a **framework exercise**. Running a
|
|
158
|
+
framework over a set of candidates creates a `framework_exercise` node, and each
|
|
159
|
+
candidate's result is recorded on an `includes` edge from the exercise to that
|
|
160
|
+
entity. The score lives on the **edge**, not the candidate node, so the same
|
|
161
|
+
feature can be a "must" in one exercise and a "could" in another, and the entity
|
|
162
|
+
stays clean and queryable.
|
|
156
163
|
|
|
157
|
-
|
|
164
|
+
Record the run (confirm before writing):
|
|
158
165
|
|
|
159
|
-
|
|
166
|
+
- **MCP:** `apply_framework({ framework_id, entity_ids, title })` to create the
|
|
167
|
+
exercise and pull the candidates in, then `score_entity({ exercise_id,
|
|
168
|
+
entity_id, values })` per candidate. `values` is the result you computed, e.g.
|
|
169
|
+
`{ "moscow": "must" }` or `{ "reach": 4, "impact": 5, "confidence": 3, "effort": 2 }`.
|
|
170
|
+
- **CLI:** `upg apply <framework> <id...> --title "..."`, then
|
|
171
|
+
`upg score <exercise> <entity> --data '{...}'`; read it back with
|
|
172
|
+
`upg show <exercise>`.
|
|
173
|
+
|
|
174
|
+
You can also capture the *decision* the ranking led to, which is distinct from the
|
|
175
|
+
scores themselves:
|
|
160
176
|
|
|
161
177
|
| What to capture | How |
|
|
162
178
|
|-----------------|-----|
|
|
163
|
-
|
|
|
164
|
-
|
|
|
165
|
-
| A now-explicit "Won't do" item | `create_node`
|
|
166
|
-
| The full scoring run, for reference | Add as a `note` field on a `decision` node |
|
|
179
|
+
| The scoring run (every candidate's result) | `apply_framework` + `score_entity` (above) |
|
|
180
|
+
| A prioritisation decision (chosen framework + what you will do) | `create_node` type `decision`, linked to the exercise and the top candidates |
|
|
181
|
+
| A now-explicit "Won't do" item | `create_node` type `decision`, note the rationale for deferral |
|
|
167
182
|
|
|
168
183
|
Always confirm before writing. Never silently mutate graph nodes.
|
|
169
184
|
|