@withpica/mcp-server 2.50.0 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.claude/settings.local.json +5 -0
  2. package/CHANGELOG.md +0 -25
  3. package/dist/prompts/index.d.ts +0 -32
  4. package/dist/prompts/index.d.ts.map +1 -1
  5. package/dist/prompts/index.js +0 -235
  6. package/dist/prompts/index.js.map +1 -1
  7. package/dist/server.d.ts +0 -26
  8. package/dist/server.d.ts.map +1 -1
  9. package/dist/server.js +10 -108
  10. package/dist/server.js.map +1 -1
  11. package/dist/tools/agent-identity.d.ts.map +1 -1
  12. package/dist/tools/agent-identity.js +0 -15
  13. package/dist/tools/agent-identity.js.map +1 -1
  14. package/dist/tools/agreement-types.d.ts.map +1 -1
  15. package/dist/tools/agreement-types.js +0 -24
  16. package/dist/tools/agreement-types.js.map +1 -1
  17. package/dist/tools/agreements.d.ts.map +1 -1
  18. package/dist/tools/agreements.js +3 -21
  19. package/dist/tools/agreements.js.map +1 -1
  20. package/dist/tools/analytics.d.ts.map +1 -1
  21. package/dist/tools/analytics.js +1 -19
  22. package/dist/tools/analytics.js.map +1 -1
  23. package/dist/tools/app-tools.d.ts.map +1 -1
  24. package/dist/tools/app-tools.js +2 -11
  25. package/dist/tools/app-tools.js.map +1 -1
  26. package/dist/tools/assets.d.ts.map +1 -1
  27. package/dist/tools/assets.js +0 -33
  28. package/dist/tools/assets.js.map +1 -1
  29. package/dist/tools/audio-files.d.ts +0 -5
  30. package/dist/tools/audio-files.d.ts.map +1 -1
  31. package/dist/tools/audio-files.js +0 -91
  32. package/dist/tools/audio-files.js.map +1 -1
  33. package/dist/tools/audit.d.ts.map +1 -1
  34. package/dist/tools/audit.js +2 -11
  35. package/dist/tools/audit.js.map +1 -1
  36. package/dist/tools/auth.d.ts.map +1 -1
  37. package/dist/tools/auth.js +0 -6
  38. package/dist/tools/auth.js.map +1 -1
  39. package/dist/tools/bulk.d.ts.map +1 -1
  40. package/dist/tools/bulk.js +0 -6
  41. package/dist/tools/bulk.js.map +1 -1
  42. package/dist/tools/calendar.d.ts.map +1 -1
  43. package/dist/tools/calendar.js +0 -3
  44. package/dist/tools/calendar.js.map +1 -1
  45. package/dist/tools/collaborators.d.ts.map +1 -1
  46. package/dist/tools/collaborators.js +3 -24
  47. package/dist/tools/collaborators.js.map +1 -1
  48. package/dist/tools/comparisons.d.ts.map +1 -1
  49. package/dist/tools/comparisons.js +0 -6
  50. package/dist/tools/comparisons.js.map +1 -1
  51. package/dist/tools/credits.d.ts +0 -18
  52. package/dist/tools/credits.d.ts.map +1 -1
  53. package/dist/tools/credits.js +4 -344
  54. package/dist/tools/credits.js.map +1 -1
  55. package/dist/tools/custody.d.ts.map +1 -1
  56. package/dist/tools/custody.js +2 -23
  57. package/dist/tools/custody.js.map +1 -1
  58. package/dist/tools/dashboard.d.ts.map +1 -1
  59. package/dist/tools/dashboard.js +7 -43
  60. package/dist/tools/dashboard.js.map +1 -1
  61. package/dist/tools/directory.d.ts.map +1 -1
  62. package/dist/tools/directory.js +0 -3
  63. package/dist/tools/directory.js.map +1 -1
  64. package/dist/tools/discovery.d.ts.map +1 -1
  65. package/dist/tools/discovery.js +7 -86
  66. package/dist/tools/discovery.js.map +1 -1
  67. package/dist/tools/disputes.d.ts.map +1 -1
  68. package/dist/tools/disputes.js +1 -4
  69. package/dist/tools/disputes.js.map +1 -1
  70. package/dist/tools/documents.d.ts.map +1 -1
  71. package/dist/tools/documents.js +0 -3
  72. package/dist/tools/documents.js.map +1 -1
  73. package/dist/tools/duplicates.d.ts.map +1 -1
  74. package/dist/tools/duplicates.js +0 -6
  75. package/dist/tools/duplicates.js.map +1 -1
  76. package/dist/tools/enrichment.d.ts.map +1 -1
  77. package/dist/tools/enrichment.js +0 -33
  78. package/dist/tools/enrichment.js.map +1 -1
  79. package/dist/tools/exports.d.ts.map +1 -1
  80. package/dist/tools/exports.js +3 -18
  81. package/dist/tools/exports.js.map +1 -1
  82. package/dist/tools/feedback.d.ts.map +1 -1
  83. package/dist/tools/feedback.js +0 -3
  84. package/dist/tools/feedback.js.map +1 -1
  85. package/dist/tools/files.d.ts +30 -0
  86. package/dist/tools/files.d.ts.map +1 -0
  87. package/dist/tools/files.js +98 -0
  88. package/dist/tools/files.js.map +1 -0
  89. package/dist/tools/groups.d.ts.map +1 -1
  90. package/dist/tools/groups.js +0 -12
  91. package/dist/tools/groups.js.map +1 -1
  92. package/dist/tools/import-documents.d.ts.map +1 -1
  93. package/dist/tools/import-documents.js +1 -10
  94. package/dist/tools/import-documents.js.map +1 -1
  95. package/dist/tools/import.d.ts.map +1 -1
  96. package/dist/tools/import.js +3 -36
  97. package/dist/tools/import.js.map +1 -1
  98. package/dist/tools/index.d.ts +4 -99
  99. package/dist/tools/index.d.ts.map +1 -1
  100. package/dist/tools/index.js +105 -182
  101. package/dist/tools/index.js.map +1 -1
  102. package/dist/tools/integrations.d.ts.map +1 -1
  103. package/dist/tools/integrations.js +8 -28
  104. package/dist/tools/integrations.js.map +1 -1
  105. package/dist/tools/labels.d.ts.map +1 -1
  106. package/dist/tools/labels.js +0 -3
  107. package/dist/tools/labels.js.map +1 -1
  108. package/dist/tools/licensing.d.ts.map +1 -1
  109. package/dist/tools/licensing.js +0 -15
  110. package/dist/tools/licensing.js.map +1 -1
  111. package/dist/tools/memory.d.ts.map +1 -1
  112. package/dist/tools/memory.js +3 -15
  113. package/dist/tools/memory.js.map +1 -1
  114. package/dist/tools/metadata.d.ts.map +1 -1
  115. package/dist/tools/metadata.js +15 -64
  116. package/dist/tools/metadata.js.map +1 -1
  117. package/dist/tools/multimedia.d.ts.map +1 -1
  118. package/dist/tools/multimedia.js +0 -15
  119. package/dist/tools/multimedia.js.map +1 -1
  120. package/dist/tools/my-reported-issues.d.ts.map +1 -1
  121. package/dist/tools/my-reported-issues.js +0 -3
  122. package/dist/tools/my-reported-issues.js.map +1 -1
  123. package/dist/tools/notes.d.ts.map +1 -1
  124. package/dist/tools/notes.js +0 -12
  125. package/dist/tools/notes.js.map +1 -1
  126. package/dist/tools/notifications.d.ts.map +1 -1
  127. package/dist/tools/notifications.js +1 -25
  128. package/dist/tools/notifications.js.map +1 -1
  129. package/dist/tools/onboarding.d.ts.map +1 -1
  130. package/dist/tools/onboarding.js +0 -3
  131. package/dist/tools/onboarding.js.map +1 -1
  132. package/dist/tools/people.d.ts.map +1 -1
  133. package/dist/tools/people.js +1 -16
  134. package/dist/tools/people.js.map +1 -1
  135. package/dist/tools/projects.d.ts.map +1 -1
  136. package/dist/tools/projects.js +0 -18
  137. package/dist/tools/projects.js.map +1 -1
  138. package/dist/tools/publishers.d.ts.map +1 -1
  139. package/dist/tools/publishers.js +0 -6
  140. package/dist/tools/publishers.js.map +1 -1
  141. package/dist/tools/recordings.d.ts.map +1 -1
  142. package/dist/tools/recordings.js +0 -15
  143. package/dist/tools/recordings.js.map +1 -1
  144. package/dist/tools/recovery-hints.d.ts.map +1 -1
  145. package/dist/tools/recovery-hints.js +2 -28
  146. package/dist/tools/recovery-hints.js.map +1 -1
  147. package/dist/tools/release-rich.d.ts.map +1 -1
  148. package/dist/tools/release-rich.js +2 -4
  149. package/dist/tools/release-rich.js.map +1 -1
  150. package/dist/tools/releases.d.ts.map +1 -1
  151. package/dist/tools/releases.js +0 -55
  152. package/dist/tools/releases.js.map +1 -1
  153. package/dist/tools/report-issue.d.ts.map +1 -1
  154. package/dist/tools/report-issue.js +0 -3
  155. package/dist/tools/report-issue.js.map +1 -1
  156. package/dist/tools/royalties.d.ts.map +1 -1
  157. package/dist/tools/royalties.js +3 -18
  158. package/dist/tools/royalties.js.map +1 -1
  159. package/dist/tools/search.d.ts.map +1 -1
  160. package/dist/tools/search.js +1 -10
  161. package/dist/tools/search.js.map +1 -1
  162. package/dist/tools/send.d.ts.map +1 -1
  163. package/dist/tools/send.js +0 -9
  164. package/dist/tools/send.js.map +1 -1
  165. package/dist/tools/sessions.d.ts.map +1 -1
  166. package/dist/tools/sessions.js +0 -12
  167. package/dist/tools/sessions.js.map +1 -1
  168. package/dist/tools/settings.d.ts.map +1 -1
  169. package/dist/tools/settings.js +3 -30
  170. package/dist/tools/settings.js.map +1 -1
  171. package/dist/tools/share-links.d.ts.map +1 -1
  172. package/dist/tools/share-links.js +0 -15
  173. package/dist/tools/share-links.js.map +1 -1
  174. package/dist/tools/signup.d.ts.map +1 -1
  175. package/dist/tools/signup.js +0 -3
  176. package/dist/tools/signup.js.map +1 -1
  177. package/dist/tools/split-sheets.d.ts.map +1 -1
  178. package/dist/tools/split-sheets.js +1 -22
  179. package/dist/tools/split-sheets.js.map +1 -1
  180. package/dist/tools/storage-config.d.ts.map +1 -1
  181. package/dist/tools/storage-config.js +0 -6
  182. package/dist/tools/storage-config.js.map +1 -1
  183. package/dist/tools/subscription.d.ts.map +1 -1
  184. package/dist/tools/subscription.js +10 -9
  185. package/dist/tools/subscription.js.map +1 -1
  186. package/dist/tools/sync-placements.d.ts.map +1 -1
  187. package/dist/tools/sync-placements.js +2 -20
  188. package/dist/tools/sync-placements.js.map +1 -1
  189. package/dist/tools/team.d.ts.map +1 -1
  190. package/dist/tools/team.js +0 -15
  191. package/dist/tools/team.js.map +1 -1
  192. package/dist/tools/telegram.d.ts.map +1 -1
  193. package/dist/tools/telegram.js +0 -9
  194. package/dist/tools/telegram.js.map +1 -1
  195. package/dist/tools/uploads.d.ts.map +1 -1
  196. package/dist/tools/uploads.js +0 -6
  197. package/dist/tools/uploads.js.map +1 -1
  198. package/dist/tools/works.d.ts.map +1 -1
  199. package/dist/tools/works.js +3 -37
  200. package/dist/tools/works.js.map +1 -1
  201. package/package.json +4 -4
  202. package/server.json +2 -2
  203. package/dist/prompts/creator-question-atlas.d.ts +0 -48
  204. package/dist/prompts/creator-question-atlas.d.ts.map +0 -1
  205. package/dist/prompts/creator-question-atlas.js +0 -601
  206. package/dist/prompts/creator-question-atlas.js.map +0 -1
  207. package/dist/tools/access-simulate.d.ts +0 -23
  208. package/dist/tools/access-simulate.d.ts.map +0 -1
  209. package/dist/tools/access-simulate.js +0 -165
  210. package/dist/tools/access-simulate.js.map +0 -1
  211. package/dist/tools/explainability.d.ts +0 -24
  212. package/dist/tools/explainability.d.ts.map +0 -1
  213. package/dist/tools/explainability.js +0 -137
  214. package/dist/tools/explainability.js.map +0 -1
  215. package/dist/tools/my-recent-questions.d.ts +0 -25
  216. package/dist/tools/my-recent-questions.d.ts.map +0 -1
  217. package/dist/tools/my-recent-questions.js +0 -186
  218. package/dist/tools/my-recent-questions.js.map +0 -1
  219. package/dist/tools/share-send.d.ts +0 -28
  220. package/dist/tools/share-send.d.ts.map +0 -1
  221. package/dist/tools/share-send.js +0 -131
  222. package/dist/tools/share-send.js.map +0 -1
  223. package/dist/tools/sharing.d.ts +0 -29
  224. package/dist/tools/sharing.d.ts.map +0 -1
  225. package/dist/tools/sharing.js +0 -131
  226. package/dist/tools/sharing.js.map +0 -1
@@ -1,131 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatStructured, formatSuccess } from "@withpica/mcp-utils";
3
- export class ShareSendTools {
4
- pica;
5
- constructor(pica) {
6
- this.pica = pica;
7
- }
8
- getTools() {
9
- return [
10
- {
11
- definition: {
12
- name: "pica_share_send",
13
- tier: "write",
14
- workflows: "infrastructure",
15
- vernacular_kind: "creator-entry",
16
- description: "Use when the user asks: 'send this song to my publisher', " +
17
- "'share this work with sarah', 'email the report to my manager', " +
18
- "'shoot this over to <name>', 'forward to <email>'. " +
19
- "Sends a withPICA-branded email containing a scoped, expirable " +
20
- "share-link to a named recipient. Recipients can be PICA users, " +
21
- "existing org collaborators (people you've credited on works), " +
22
- "or any external email address. " +
23
- "First send to a NEW external email returns " +
24
- "FIRST_EXTERNAL_SEND_CONFIRMATION_REQUIRED — re-call with " +
25
- "confirm_first_external_send: true to proceed (deliberate friction " +
26
- "against typo-driven phishing). Sender capped at 20 external " +
27
- "sends / 24h. Recipient capped at 20 marketing+share emails / 30d " +
28
- "via marketing-guard. Email From is always noreply@withpica.com; " +
29
- "Reply-to is the sender's email; recipient can report unwanted " +
30
- "contact via a footer link in the email. v1 supports entity_type " +
31
- "= 'work' only (other types declared but reserved).",
32
- inputSchema: {
33
- type: "object",
34
- properties: {
35
- entity_type: {
36
- type: "string",
37
- enum: ["recording", "work", "audio_file", "document"],
38
- description: "Asset class. v1: only 'work' is supported; other values return ENTITY_TYPE_NOT_SUPPORTED.",
39
- },
40
- entity_id: {
41
- type: "string",
42
- description: "UUID of the asset being shared.",
43
- },
44
- recipient: {
45
- type: "object",
46
- description: "Who to send to. { kind: 'user_id' | 'collaborator_id' | 'email', value: <id-or-email> }. Internal users and existing org collaborators are detected automatically when kind='email'; otherwise the address is classified external and goes through the first-send confirmation + marketing-guard.",
47
- properties: {
48
- kind: {
49
- type: "string",
50
- enum: ["user_id", "collaborator_id", "email"],
51
- description: "user_id = existing PICA user; collaborator_id = a person from the sender's org; email = arbitrary address (internal user / collaborator detected automatically; otherwise classified external).",
52
- },
53
- value: { type: "string" },
54
- },
55
- required: ["kind", "value"],
56
- },
57
- note: {
58
- type: "string",
59
- description: "Optional message from the sender (≤500 chars). Rendered in italic above the share-link CTA.",
60
- },
61
- expires_in_days: {
62
- type: "number",
63
- description: "Share-link TTL in days. Default 30, max 90.",
64
- },
65
- scope: {
66
- type: "string",
67
- enum: ["view", "view+download"],
68
- description: "Default 'view'. 'view+download' allows the recipient to download attached files.",
69
- },
70
- confirm_first_external_send: {
71
- type: "boolean",
72
- description: "Required on the second call when the first attempt returned FIRST_EXTERNAL_SEND_CONFIRMATION_REQUIRED — confirms the recipient address is correct.",
73
- },
74
- },
75
- required: ["entity_type", "entity_id", "recipient"],
76
- },
77
- annotations: { destructiveHint: true, openWorldHint: true },
78
- },
79
- executor: this.shareSend.bind(this),
80
- },
81
- ];
82
- }
83
- async shareSend(args) {
84
- try {
85
- const result = await this.pica.shareSend.send({
86
- entity_type: args.entity_type,
87
- entity_id: args.entity_id,
88
- recipient: args.recipient,
89
- note: args.note,
90
- expires_in_days: args.expires_in_days,
91
- scope: args.scope,
92
- confirm_first_external_send: args.confirm_first_external_send === true ? true : undefined,
93
- });
94
- return formatSuccess(`shared via withPICA — ${result.recipient_resolution.classification}`, result);
95
- }
96
- catch (e) {
97
- const errCode = e?.error_code ?? e?.code ?? "SHARE_SEND_ERROR";
98
- const status = e?.status ?? e?.statusCode;
99
- return formatStructured({
100
- error: e?.message ?? String(e),
101
- error_code: errCode,
102
- ...(typeof status === "number" ? { status } : {}),
103
- suggestion: suggestionFor(errCode),
104
- next_tool: "pica_share_send",
105
- }, "pica_share_send — error");
106
- }
107
- }
108
- }
109
- function suggestionFor(code) {
110
- switch (code) {
111
- case "FIRST_EXTERNAL_SEND_CONFIRMATION_REQUIRED":
112
- return "First time sending to this external address. Confirm the recipient is correct, then re-call with confirm_first_external_send: true.";
113
- case "ROLE_ADDRESS_REJECTED":
114
- return "The address looks like a role/system inbox (noreply@, postmaster@, abuse@, etc). Pick the recipient's personal email instead.";
115
- case "RECIPIENT_VOLUME_EXCEEDED":
116
- return "Recipient is at withPICA's 30-day inbound volume limit. Wait for the window to clear, or contact them via another channel.";
117
- case "SENDER_RATE_LIMIT_EXCEEDED":
118
- return "You've sent 20+ external shares in the last 24h. Wait an hour and retry, or send to internal collaborators in the meantime.";
119
- case "ENTITY_NOT_FOUND":
120
- return "The asset wasn't found in your catalog. Verify entity_id with pica_works_get.";
121
- case "ENTITY_TYPE_NOT_SUPPORTED":
122
- return "v1 supports entity_type='work' only. Recording/audio_file/document share-send is on the roadmap.";
123
- case "FORBIDDEN":
124
- return "You're not a member of the asset's organisation. Switch context with pica_organisations_switch or share an asset you own.";
125
- case "RECIPIENT_NOT_FOUND":
126
- return "The recipient lookup failed. For collaborator_id, verify it's in your current org. For user_id, confirm the user exists.";
127
- default:
128
- return "Re-check the entity_id, recipient shape, and confirm_first_external_send flag against the tool description.";
129
- }
130
- }
131
- //# sourceMappingURL=share-send.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-send.js","sourceRoot":"","sources":["../../src/tools/share-send.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Sharing MCP Tools — ADR-232 § Decision 2
3
- *
4
- * pica_share_trace — explainability aggregator. Returns the unioned
5
- * chain of reasons a viewer can see an entity, ranked by directness:
6
- *
7
- * 1. org_membership (viewer is in the calling org)
8
- * 2. custody_chain (viewer's org is on the work's custody chain)
9
- * 3. share_link (an active link grants viewer access)
10
- * 4. cross_org_grant (viewer's org has an ADR-204 grant)
11
- *
12
- * Two-axis access control:
13
- * - Caller NOT owner of entity → 403 INSUFFICIENT_SCOPE (don't leak
14
- * ownership existence). AC-3.
15
- * - Caller IS owner but viewer can't see → has_access:false with
16
- * reasons:[]. Don't leak why. AC-4.
17
- */
18
- import { PicaClient } from "@withpica/mcp-sdk";
19
- import type { ToolDefinition, ToolExecutor } from "./index.js";
20
- export declare class SharingTools {
21
- private pica;
22
- constructor(pica: PicaClient);
23
- getTools(): Array<{
24
- definition: ToolDefinition;
25
- executor: ToolExecutor;
26
- }>;
27
- private shareTrace;
28
- }
29
- //# sourceMappingURL=sharing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sharing.d.ts","sourceRoot":"","sources":["../../src/tools/sharing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAG3E,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YA4D3D,UAAU;CA4EzB"}
@@ -1,131 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatSuccess } from "@withpica/mcp-utils";
3
- export class SharingTools {
4
- pica;
5
- constructor(pica) {
6
- this.pica = pica;
7
- }
8
- getTools() {
9
- return [
10
- {
11
- definition: {
12
- name: "pica_share_trace",
13
- tier: "read",
14
- description: "Use when the user asks: 'why does Tony have access to this song?', 'who can see this work?', 'how did this person see my recording?'. " +
15
- "Returns the chain of reasons a viewer (user or org) can see an entity. " +
16
- "Composes four substrates — org membership, custody chain, share links, cross-org grants — and ranks reasons by directness. " +
17
- "Two-axis access: 403 INSUFFICIENT_SCOPE if you don't own the entity; has_access:false with reasons:[] when you DO own it but the viewer can't see. " +
18
- "→ then: pica_share_links_list / pica_share_links_revoke (revoke a share_link reason), pica_works_inspect / pica_recordings_inspect (verify state)",
19
- workflows: "infrastructure",
20
- vernacular_kind: "creator-entry",
21
- inputSchema: {
22
- type: "object",
23
- properties: {
24
- entity_type: {
25
- type: "string",
26
- enum: ["work", "recording", "person"],
27
- description: "What kind of entity to trace access to. Persons only support the org_membership substrate (no work-scoped reasons apply).",
28
- },
29
- entity_id: {
30
- type: "string",
31
- description: "UUID of the work, recording, or person.",
32
- },
33
- viewer_user_id: {
34
- type: "string",
35
- description: "UUID of the user whose access we're tracing. Supply EITHER viewer_user_id OR viewer_org_id, not both.",
36
- },
37
- viewer_org_id: {
38
- type: "string",
39
- description: "UUID of the org whose access we're tracing. Supply EITHER viewer_user_id OR viewer_org_id, not both.",
40
- },
41
- },
42
- required: ["entity_type", "entity_id"],
43
- },
44
- nextSteps: [
45
- {
46
- tool: "pica_share_links_list",
47
- reason: "When the trace surfaces a share_link reason, list links for the work to find the right one to revoke.",
48
- when: "on_success",
49
- },
50
- {
51
- tool: "pica_works_inspect",
52
- reason: "Inspect the work to see related metadata when investigating sharing.",
53
- when: "on_success",
54
- },
55
- ],
56
- },
57
- executor: this.shareTrace.bind(this),
58
- },
59
- ];
60
- }
61
- async shareTrace(args) {
62
- const entityType = args.entity_type;
63
- const entityId = args.entity_id;
64
- const viewerUserId = args.viewer_user_id;
65
- const viewerOrgId = args.viewer_org_id;
66
- if (!entityType ||
67
- !["work", "recording", "person"].includes(entityType)) {
68
- return {
69
- content: [
70
- {
71
- type: "text",
72
- text: "entity_type must be 'work', 'recording', or 'person'.",
73
- },
74
- ],
75
- isError: true,
76
- };
77
- }
78
- if (!entityId) {
79
- return {
80
- content: [{ type: "text", text: "entity_id is required." }],
81
- isError: true,
82
- };
83
- }
84
- if (Boolean(viewerUserId) === Boolean(viewerOrgId)) {
85
- return {
86
- content: [
87
- {
88
- type: "text",
89
- text: "supply exactly one of viewer_user_id or viewer_org_id.",
90
- },
91
- ],
92
- isError: true,
93
- };
94
- }
95
- try {
96
- const result = await this.pica.shareTrace.trace({
97
- entity_type: entityType,
98
- entity_id: entityId,
99
- viewer_user_id: viewerUserId,
100
- viewer_org_id: viewerOrgId,
101
- });
102
- const verdict = result.has_access
103
- ? `Access via ${result.reasons.length} reason${result.reasons.length === 1 ? "" : "s"} (most-direct: ${result.reasons[0]?.kind})`
104
- : "No access — viewer cannot see this entity";
105
- return formatSuccess(verdict, result);
106
- }
107
- catch (err) {
108
- const errorMessage = err instanceof Error ? err.message : String(err);
109
- // 403 INSUFFICIENT_SCOPE bubbles up as a fetch error from the
110
- // SDK — surface it without leaking entity existence.
111
- if (/INSUFFICIENT_SCOPE|insufficient_scope|403/i.test(errorMessage)) {
112
- return {
113
- content: [
114
- {
115
- type: "text",
116
- text: `entity is not in scope for this organisation — only the entity's owning org can trace its sharing graph.`,
117
- },
118
- ],
119
- isError: true,
120
- };
121
- }
122
- return {
123
- content: [
124
- { type: "text", text: `Failed to trace sharing: ${errorMessage}` },
125
- ],
126
- isError: true,
127
- };
128
- }
129
- }
130
- }
131
- //# sourceMappingURL=sharing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../src/tools/sharing.ts"],"names":[],"mappings":"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"}