@pome-sh/cli 0.21.9 → 0.21.11

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.
@@ -2,7 +2,7 @@ export { LINEAR_CHECKS } from './chunk-3QVSXFJI.js';
2
2
  import { MCP_PAGE_MAX, defaultSeedState, linearSeedSchema, notFound, badUserInput, MCP_PAGE_DEFAULT, DEFAULT_LINEAR_EMAIL, RELAY_PAGE_MAX, RELAY_PAGE_DEFAULT, STATE_EXPORT_CAP, parseSeed, DEFAULT_LINEAR_CLOCK, LINEAR_PROVIDER_TOKEN_PREFIX, DEFAULT_LINEAR_SID, DEFAULT_SCOPES, linearErrorEnvelope, unauthorizedEnvelope, unsupportedEnvelope, assertWebhookUrl, ACCESS_TOKEN_TTL_SECONDS, OAUTH_CODE_TTL_SECONDS, TITLE_MAX_BYTES, BODY_MAX_BYTES, LinearTwinError, GRAPHQL_QUERY_MAX_BYTES, GRAPHQL_SELECTION_DEPTH_MAX } from './chunk-ZKID2HS3.js';
3
3
  export { DEFAULT_LINEAR_CLOCK, DEFAULT_LINEAR_EMAIL, DEFAULT_LINEAR_PORT, DEFAULT_LINEAR_SID, DEFAULT_LINEAR_TOKEN, LINEAR_PROVIDER_TOKEN_PREFIX, LinearTwinError, STATE_EXPORT_CAP, assertWebhookUrl, defaultSeedState, linearErrorEnvelope, linearSeedSchema, loadSeedFromEnv, parseSeed, unauthorizedEnvelope, unsupportedEnvelope, webhookUrlError } from './chunk-ZKID2HS3.js';
4
4
  import './chunk-NY55QTVQ.js';
5
- import { openTwinDatabase, defineTwin, createApp } from './chunk-35TG2GHS.js';
5
+ import { loadMcpToolFixture, deriveMcpToolTable, openTwinDatabase, defineTwin, createApp } from './chunk-TV5S6WQV.js';
6
6
  import './chunk-VBATFCWR.js';
7
7
  import './chunk-SG6ZTIMT.js';
8
8
  import { createHmac, timingSafeEqual, createHash, randomBytes } from 'node:crypto';
@@ -2648,321 +2648,63 @@ function resolveLinearCredential(db, token2, nowIso) {
2648
2648
  };
2649
2649
  }
2650
2650
 
2651
- // ../packages/twin-linear/dist/fixtures/mcp-tools-list.canonical.json
2652
- var mcp_tools_list_canonical_default = {
2653
- result: {
2654
- tools: [
2655
- {
2656
- name: "list_issues",
2657
- description: 'List issues in the Linear workspace. For my issues, use "me" as the assignee.',
2658
- inputSchema: {
2659
- type: "object",
2660
- properties: {
2661
- team: { type: "string", description: "Team key or id" },
2662
- assignee: { type: "string", description: 'User email, id, or "me"' },
2663
- state: { type: "string", description: "Workflow state name or id" },
2664
- limit: { type: "number", description: "Max results (default 50, max 250)" },
2665
- cursor: { type: "string", description: "Pagination cursor" },
2666
- query: { type: "string", description: "Title/description search" }
2667
- },
2668
- additionalProperties: false
2669
- }
2670
- },
2671
- {
2672
- name: "get_issue",
2673
- description: "Retrieve detailed information about an issue by ID or identifier (e.g. ENG-1).",
2674
- inputSchema: {
2675
- type: "object",
2676
- properties: {
2677
- id: { type: "string", description: "Issue id or identifier" }
2678
- },
2679
- required: ["id"],
2680
- additionalProperties: false
2681
- }
2682
- },
2683
- {
2684
- name: "save_issue",
2685
- description: "Create or update a Linear issue. Omit id to create (title and team required); provide id for a partial update. Relation arrays (blocks/blockedBy/relatedTo) are append-only.",
2686
- inputSchema: {
2687
- type: "object",
2688
- properties: {
2689
- id: { type: "string", description: "Issue id or identifier (update)" },
2690
- title: { type: "string" },
2691
- team: { type: "string" },
2692
- description: { type: "string" },
2693
- assignee: { type: "string" },
2694
- state: { type: "string" },
2695
- priority: { type: "number" },
2696
- estimate: { type: ["number", "null"], description: "Estimate points; null clears on update" },
2697
- labels: { type: "array", items: { type: "string" } },
2698
- project: { type: "string" },
2699
- cycle: { type: "string" },
2700
- parentId: { type: ["string", "null"], description: "Parent issue id/identifier; null removes" },
2701
- blocks: { type: "array", items: { type: "string" }, description: "Append-only blocked issues" },
2702
- blockedBy: { type: "array", items: { type: "string" }, description: "Append-only blockers" },
2703
- relatedTo: { type: "array", items: { type: "string" }, description: "Append-only related issues" }
2704
- },
2705
- additionalProperties: false
2706
- }
2707
- },
2708
- {
2709
- name: "list_comments",
2710
- description: "List comments for a specific Linear issue.",
2711
- inputSchema: {
2712
- type: "object",
2713
- properties: {
2714
- issueId: { type: "string" },
2715
- limit: { type: "number" },
2716
- cursor: { type: "string" }
2717
- },
2718
- required: ["issueId"],
2719
- additionalProperties: false
2720
- }
2721
- },
2722
- {
2723
- name: "save_comment",
2724
- description: "Create or update a comment on a Linear issue. Provide id to edit. To reply in a thread, pass parentId (issueId optional when replying).",
2725
- inputSchema: {
2726
- type: "object",
2727
- properties: {
2728
- id: { type: "string", description: "Comment id (edit)" },
2729
- issueId: { type: "string" },
2730
- parentId: { type: "string", description: "Parent comment id for threaded replies" },
2731
- body: { type: "string" }
2732
- },
2733
- required: ["body"],
2734
- additionalProperties: false
2735
- }
2736
- },
2737
- {
2738
- name: "delete_comment",
2739
- description: "Delete a Linear comment by id.",
2740
- inputSchema: {
2741
- type: "object",
2742
- properties: {
2743
- id: { type: "string", description: "Comment ID" }
2744
- },
2745
- required: ["id"],
2746
- additionalProperties: false
2747
- }
2748
- },
2749
- {
2750
- name: "list_teams",
2751
- description: "List teams in the user's Linear workspace.",
2752
- inputSchema: {
2753
- type: "object",
2754
- properties: {
2755
- limit: { type: "number" },
2756
- cursor: { type: "string" }
2757
- },
2758
- additionalProperties: false
2759
- }
2760
- },
2761
- {
2762
- name: "get_team",
2763
- description: "Retrieve details of a specific Linear team.",
2764
- inputSchema: {
2765
- type: "object",
2766
- properties: {
2767
- query: { type: "string", description: "Team id, key, or name" }
2768
- },
2769
- required: ["query"],
2770
- additionalProperties: false
2771
- }
2772
- },
2773
- {
2774
- name: "list_users",
2775
- description: "Retrieve users in the Linear workspace.",
2776
- inputSchema: {
2777
- type: "object",
2778
- properties: {
2779
- limit: { type: "number" },
2780
- cursor: { type: "string" }
2781
- },
2782
- additionalProperties: false
2783
- }
2784
- },
2785
- {
2786
- name: "get_user",
2787
- description: "Retrieve details of a specific Linear user.",
2788
- inputSchema: {
2789
- type: "object",
2790
- properties: {
2791
- query: { type: "string", description: "User id, email, or name" }
2792
- },
2793
- required: ["query"],
2794
- additionalProperties: false
2795
- }
2796
- },
2797
- {
2798
- name: "list_issue_statuses",
2799
- description: "List available issue statuses in a Linear team.",
2800
- inputSchema: {
2801
- type: "object",
2802
- properties: {
2803
- team: { type: "string" }
2804
- },
2805
- required: ["team"],
2806
- additionalProperties: false
2807
- }
2808
- },
2809
- {
2810
- name: "get_issue_status",
2811
- description: "Retrieve detailed information about an issue status by name or ID.",
2812
- inputSchema: {
2813
- type: "object",
2814
- properties: {
2815
- id: { type: "string" },
2816
- name: { type: "string" },
2817
- team: { type: "string" }
2818
- },
2819
- additionalProperties: false
2820
- }
2821
- },
2822
- {
2823
- name: "list_issue_labels",
2824
- description: "List available issue labels in a Linear workspace or team.",
2825
- inputSchema: {
2826
- type: "object",
2827
- properties: {
2828
- team: { type: "string" },
2829
- limit: { type: "number" },
2830
- cursor: { type: "string" }
2831
- },
2832
- additionalProperties: false
2833
- }
2834
- },
2835
- {
2836
- name: "create_issue_label",
2837
- description: "Create a new Linear issue label.",
2838
- inputSchema: {
2839
- type: "object",
2840
- properties: {
2841
- name: { type: "string" },
2842
- color: { type: "string" },
2843
- description: { type: "string" },
2844
- team: { type: "string" }
2845
- },
2846
- required: ["name"],
2847
- additionalProperties: false
2848
- }
2849
- },
2850
- {
2851
- name: "list_projects",
2852
- description: "List projects in the user's Linear workspace.",
2853
- inputSchema: {
2854
- type: "object",
2855
- properties: {
2856
- team: { type: "string" },
2857
- limit: { type: "number" },
2858
- cursor: { type: "string" }
2859
- },
2860
- additionalProperties: false
2861
- }
2862
- },
2863
- {
2864
- name: "get_project",
2865
- description: "Retrieve details of a specific Linear project.",
2866
- inputSchema: {
2867
- type: "object",
2868
- properties: {
2869
- query: { type: "string" }
2870
- },
2871
- required: ["query"],
2872
- additionalProperties: false
2873
- }
2874
- },
2875
- {
2876
- name: "save_project",
2877
- description: "Create or update a Linear project. Omit id to create (name required); provide id for a partial update.",
2878
- inputSchema: {
2879
- type: "object",
2880
- properties: {
2881
- id: { type: "string" },
2882
- name: { type: "string" },
2883
- team: { type: "string" },
2884
- description: { type: "string" },
2885
- state: { type: "string" }
2886
- },
2887
- additionalProperties: false
2888
- }
2889
- },
2890
- {
2891
- name: "list_cycles",
2892
- description: "Retrieve cycles for a specific Linear team.",
2893
- inputSchema: {
2894
- type: "object",
2895
- properties: {
2896
- teamId: { type: "string" },
2897
- limit: { type: "number" },
2898
- cursor: { type: "string" }
2899
- },
2900
- required: ["teamId"],
2901
- additionalProperties: false
2902
- }
2903
- },
2904
- {
2905
- name: "search_documentation",
2906
- description: "Search Linear's documentation to learn about features and usage.",
2907
- inputSchema: {
2908
- type: "object",
2909
- properties: {
2910
- query: { type: "string" }
2911
- },
2912
- required: ["query"],
2913
- additionalProperties: false
2914
- }
2915
- },
2916
- {
2917
- name: "list_documents",
2918
- description: "List documents in the user's Linear workspace.",
2919
- inputSchema: {
2920
- type: "object",
2921
- properties: {
2922
- projectId: { type: "string" },
2923
- teamId: { type: "string" },
2924
- query: { type: "string" },
2925
- limit: { type: "number" },
2926
- cursor: { type: "string" }
2927
- },
2928
- additionalProperties: false
2929
- }
2930
- },
2931
- {
2932
- name: "get_document",
2933
- description: "Retrieve a Linear document by ID or slug.",
2934
- inputSchema: {
2935
- type: "object",
2936
- properties: {
2937
- id: { type: "string", description: "Document ID or slug" }
2938
- },
2939
- required: ["id"],
2940
- additionalProperties: false
2941
- }
2942
- },
2943
- {
2944
- name: "save_document",
2945
- description: "Create or update a Linear document. Omit id to create (title + exactly one parent required); provide id for a partial update.",
2946
- inputSchema: {
2947
- type: "object",
2948
- properties: {
2949
- id: { type: "string" },
2950
- title: { type: "string" },
2951
- content: { type: "string" },
2952
- project: { type: "string" },
2953
- team: { type: "string" },
2954
- issue: { type: "string" },
2955
- cycle: { type: "string" },
2956
- icon: { type: "string" },
2957
- color: { type: "string" }
2958
- },
2959
- additionalProperties: false
2960
- }
2961
- }
2962
- ]
2651
+ // ../packages/twin-linear/dist/fixtures/mcp-tools-list.meta.json
2652
+ var mcp_tools_list_meta_default = {
2653
+ twin: "linear",
2654
+ substrate: "twin-authored-from-vendor-docs",
2655
+ endpoint: "in-process://twin-linear/s/:sid/mcp",
2656
+ method: "tools/list",
2657
+ protocol: "JSON-RPC 2.0 over Streamable HTTP",
2658
+ protocolVersion: "2025-06-18",
2659
+ captureDate: "2026-08-06",
2660
+ rawFileSha256: "f764e11486c25738b1952b6e83e4919fcb84c3c36cd36ef801b326fb40ed111d",
2661
+ liveToolCount: 22,
2662
+ liveToolOrder: [
2663
+ "list_issues",
2664
+ "get_issue",
2665
+ "save_issue",
2666
+ "list_comments",
2667
+ "save_comment",
2668
+ "delete_comment",
2669
+ "list_teams",
2670
+ "get_team",
2671
+ "list_users",
2672
+ "get_user",
2673
+ "list_issue_statuses",
2674
+ "get_issue_status",
2675
+ "list_issue_labels",
2676
+ "create_issue_label",
2677
+ "list_projects",
2678
+ "get_project",
2679
+ "save_project",
2680
+ "list_cycles",
2681
+ "search_documentation",
2682
+ "list_documents",
2683
+ "get_document",
2684
+ "save_document"
2685
+ ],
2686
+ transcription: {
2687
+ readFrom: "twin-linear's own tools/list, booted on defaultSeedState() and driven through Hono's app.request, read immediately before this table became fixture-driven (F-1325)",
2688
+ contentOrigin: "the tool NAMES come from Linear's published MCP launch documentation; the inputSchemas are twin-owned Gate-1 fixtures, as this fixture's own notes have always admitted. The pre-F-1325 provenance read `source: documented_official_linear_mcp_launch_set`, which reads like a capture. It was never one.",
2689
+ comparedToUpstream: "never. https://mcp.linear.app/mcp is OAuth-gated, so F-1326 recorded the upstream golden as deferred (fixtures/mcp-tools-list/linear.status.json). Re-sourcing this table needs that token and belongs to F-1329, not here."
2690
+ },
2691
+ notes: [
2692
+ "Gate-1 Wave 4 expands Gate 0's 18-tool freeze: delete_comment plus documents list/get/save; save_issue estimate/parentId/relations; save_comment parentId.",
2693
+ "Documents, initiatives and milestones beyond this minimal set stay named gaps.",
2694
+ "GraphQL keeps issueCreate/issueUpdate for SDK parity; MCP follows the documented listing.",
2695
+ "This listing carries the generic outputSchema the twin serves on every tool. The pre-F-1325 canonical omitted it, so the committed oracle described less than the wire did.",
2696
+ "Seeded from the served table rather than from upstream on purpose. F-1325 is name-neutral by construction: every byte this twin serves is identical before and after it."
2697
+ ],
2698
+ canonicalFileSha256: "ff65fdd9e6085e255066e1cf0935993634131d862068d82e0f349c5e7882ff91",
2699
+ files: {
2700
+ raw: "mcp-tools-list.raw.json",
2701
+ canonical: "mcp-tools-list.canonical.json"
2963
2702
  }
2964
2703
  };
2965
2704
 
2705
+ // ../packages/twin-linear/dist/fixtures/mcp-tools-list.raw.json
2706
+ var mcp_tools_list_raw_default = { jsonrpc: "2.0", id: 1, result: { tools: [{ name: "list_issues", description: 'List issues in the Linear workspace. For my issues, use "me" as the assignee.', inputSchema: { type: "object", properties: { team: { type: "string", description: "Team key or id" }, assignee: { type: "string", description: 'User email, id, or "me"' }, state: { type: "string", description: "Workflow state name or id" }, limit: { type: "number", description: "Max results (default 50, max 250)" }, cursor: { type: "string", description: "Pagination cursor" }, query: { type: "string", description: "Title/description search" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_issue", description: "Retrieve detailed information about an issue by ID or identifier (e.g. ENG-1).", inputSchema: { type: "object", properties: { id: { type: "string", description: "Issue id or identifier" } }, required: ["id"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "save_issue", description: "Create or update a Linear issue. Omit id to create (title and team required); provide id for a partial update. Relation arrays (blocks/blockedBy/relatedTo) are append-only.", inputSchema: { type: "object", properties: { id: { type: "string", description: "Issue id or identifier (update)" }, title: { type: "string" }, team: { type: "string" }, description: { type: "string" }, assignee: { type: "string" }, state: { type: "string" }, priority: { type: "number" }, estimate: { type: ["number", "null"], description: "Estimate points; null clears on update" }, labels: { type: "array", items: { type: "string" } }, project: { type: "string" }, cycle: { type: "string" }, parentId: { type: ["string", "null"], description: "Parent issue id/identifier; null removes" }, blocks: { type: "array", items: { type: "string" }, description: "Append-only blocked issues" }, blockedBy: { type: "array", items: { type: "string" }, description: "Append-only blockers" }, relatedTo: { type: "array", items: { type: "string" }, description: "Append-only related issues" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_comments", description: "List comments for a specific Linear issue.", inputSchema: { type: "object", properties: { issueId: { type: "string" }, limit: { type: "number" }, cursor: { type: "string" } }, required: ["issueId"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "save_comment", description: "Create or update a comment on a Linear issue. Provide id to edit. To reply in a thread, pass parentId (issueId optional when replying).", inputSchema: { type: "object", properties: { id: { type: "string", description: "Comment id (edit)" }, issueId: { type: "string" }, parentId: { type: "string", description: "Parent comment id for threaded replies" }, body: { type: "string" } }, required: ["body"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "delete_comment", description: "Delete a Linear comment by id.", inputSchema: { type: "object", properties: { id: { type: "string", description: "Comment ID" } }, required: ["id"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_teams", description: "List teams in the user's Linear workspace.", inputSchema: { type: "object", properties: { limit: { type: "number" }, cursor: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_team", description: "Retrieve details of a specific Linear team.", inputSchema: { type: "object", properties: { query: { type: "string", description: "Team id, key, or name" } }, required: ["query"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_users", description: "Retrieve users in the Linear workspace.", inputSchema: { type: "object", properties: { limit: { type: "number" }, cursor: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_user", description: "Retrieve details of a specific Linear user.", inputSchema: { type: "object", properties: { query: { type: "string", description: "User id, email, or name" } }, required: ["query"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_issue_statuses", description: "List available issue statuses in a Linear team.", inputSchema: { type: "object", properties: { team: { type: "string" } }, required: ["team"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_issue_status", description: "Retrieve detailed information about an issue status by name or ID.", inputSchema: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, team: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_issue_labels", description: "List available issue labels in a Linear workspace or team.", inputSchema: { type: "object", properties: { team: { type: "string" }, limit: { type: "number" }, cursor: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "create_issue_label", description: "Create a new Linear issue label.", inputSchema: { type: "object", properties: { name: { type: "string" }, color: { type: "string" }, description: { type: "string" }, team: { type: "string" } }, required: ["name"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_projects", description: "List projects in the user's Linear workspace.", inputSchema: { type: "object", properties: { team: { type: "string" }, limit: { type: "number" }, cursor: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_project", description: "Retrieve details of a specific Linear project.", inputSchema: { type: "object", properties: { query: { type: "string" } }, required: ["query"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "save_project", description: "Create or update a Linear project. Omit id to create (name required); provide id for a partial update.", inputSchema: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, team: { type: "string" }, description: { type: "string" }, state: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_cycles", description: "Retrieve cycles for a specific Linear team.", inputSchema: { type: "object", properties: { teamId: { type: "string" }, limit: { type: "number" }, cursor: { type: "string" } }, required: ["teamId"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "search_documentation", description: "Search Linear's documentation to learn about features and usage.", inputSchema: { type: "object", properties: { query: { type: "string" } }, required: ["query"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "list_documents", description: "List documents in the user's Linear workspace.", inputSchema: { type: "object", properties: { projectId: { type: "string" }, teamId: { type: "string" }, query: { type: "string" }, limit: { type: "number" }, cursor: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "get_document", description: "Retrieve a Linear document by ID or slug.", inputSchema: { type: "object", properties: { id: { type: "string", description: "Document ID or slug" } }, required: ["id"], additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }, { name: "save_document", description: "Create or update a Linear document. Omit id to create (title + exactly one parent required); provide id for a partial update.", inputSchema: { type: "object", properties: { id: { type: "string" }, title: { type: "string" }, content: { type: "string" }, project: { type: "string" }, team: { type: "string" }, issue: { type: "string" }, cycle: { type: "string" }, icon: { type: "string" }, color: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", additionalProperties: true } }] } };
2707
+
2966
2708
  // ../packages/twin-linear/dist/src/identity.js
2967
2709
  function actorFromSession(session) {
2968
2710
  return {
@@ -3163,7 +2905,10 @@ function mcpPage(items, limit, cursor, binding) {
3163
2905
  }
3164
2906
 
3165
2907
  // ../packages/twin-linear/dist/src/mcp.js
3166
- var canonicalTools = mcp_tools_list_canonical_default.result.tools;
2908
+ var linearToolFixture = loadMcpToolFixture({
2909
+ raw: mcp_tools_list_raw_default,
2910
+ meta: mcp_tools_list_meta_default
2911
+ });
3167
2912
  function mutate(domain, ctx, op) {
3168
2913
  const before = domain.exportState();
3169
2914
  const result = op();
@@ -3560,25 +3305,15 @@ var implementations = {
3560
3305
  })
3561
3306
  }
3562
3307
  };
3563
- var genericOutputSchema = {
3564
- type: "object",
3565
- additionalProperties: true
3566
- };
3567
- var linearTools = canonicalTools.map((tool) => {
3568
- const impl = implementations[tool.name];
3569
- if (!impl)
3570
- throw new Error(`Missing MCP implementation for ${tool.name}`);
3571
- return {
3572
- name: tool.name,
3573
- description: tool.description,
3308
+ var boundImplementations = Object.fromEntries(Object.entries(implementations).map(([name, impl]) => [
3309
+ name,
3310
+ {
3574
3311
  schema: impl.schema,
3575
3312
  mutation: impl.mutation,
3576
- inputSchema: tool.inputSchema,
3577
- outputSchema: genericOutputSchema,
3578
- includeIsError: true,
3579
3313
  handler: (domain, args, ctx) => impl.handler(domain, args ?? {}, ctx)
3580
- };
3581
- });
3314
+ }
3315
+ ]));
3316
+ var linearTools = deriveMcpToolTable(linearToolFixture, boundImplementations, { includeIsError: true });
3582
3317
  var LINEAR_MCP_TOOL_COUNT = linearTools.length;
3583
3318
 
3584
3319
  // ../packages/twin-linear/dist/src/recording.js
@@ -5457,4 +5192,4 @@ function createLinearTwinApp(options = {}) {
5457
5192
  return withPublicOAuth(app, db);
5458
5193
  }
5459
5194
 
5460
- export { LINEAR_MCP_TOOL_COUNT, LinearDomain, createLinearTwinApp, createLinearTwinDefinition, exportLinearState, linearStateDelta, linearTools, looksLikeLinearToken, migrate, openLinearTwinDatabase, projectLinearRecording, registerLinearRoutes, resetDatabase, resolveLinearCredential, withPublicOAuth };
5195
+ export { LINEAR_MCP_TOOL_COUNT, LinearDomain, createLinearTwinApp, createLinearTwinDefinition, exportLinearState, linearStateDelta, linearToolFixture, linearTools, looksLikeLinearToken, migrate, openLinearTwinDatabase, projectLinearRecording, registerLinearRoutes, resetDatabase, resolveLinearCredential, withPublicOAuth };