@withpica/mcp-server 2.5.2 → 2.5.4
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/assets/fonts/GeistSans-Light.woff2 +0 -0
- package/assets/fonts/InstrumentSerif-Italic.woff2 +0 -0
- package/assets/fonts/InstrumentSerif-Regular.woff2 +0 -0
- package/dist/apps/briefing.d.ts +2 -0
- package/dist/apps/briefing.d.ts.map +1 -0
- package/dist/apps/briefing.js +308 -0
- package/dist/apps/briefing.js.map +1 -0
- package/dist/apps/generated/shared-bundle.d.ts +5 -0
- package/dist/apps/generated/shared-bundle.d.ts.map +1 -0
- package/dist/apps/generated/shared-bundle.js +7 -0
- package/dist/apps/generated/shared-bundle.js.map +1 -0
- package/dist/apps/shared.d.ts +4 -0
- package/dist/apps/shared.d.ts.map +1 -0
- package/dist/apps/shared.js +268 -0
- package/dist/apps/shared.js.map +1 -0
- package/dist/config.d.ts +3 -25
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -12
- package/dist/config.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/pica-sdk.d.ts +11 -0
- package/dist/pica-sdk.d.ts.map +1 -1
- package/dist/pica-sdk.js +16 -0
- package/dist/pica-sdk.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/index.d.ts +3 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +101 -53
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/llms-primer.d.ts +1 -1
- package/dist/resources/llms-primer.d.ts.map +1 -1
- package/dist/resources/llms-primer.js +4 -4
- package/dist/server-instructions.d.ts +9 -0
- package/dist/server-instructions.d.ts.map +1 -0
- package/dist/server-instructions.js +34 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +30 -8
- package/dist/server.js.map +1 -1
- package/dist/tools/agreement-types.d.ts +9 -19
- package/dist/tools/agreement-types.d.ts.map +1 -1
- package/dist/tools/agreement-types.js +201 -417
- package/dist/tools/agreement-types.js.map +1 -1
- package/dist/tools/agreements.d.ts +2 -3
- package/dist/tools/agreements.d.ts.map +1 -1
- package/dist/tools/agreements.js +71 -51
- package/dist/tools/agreements.js.map +1 -1
- package/dist/tools/app-tools.d.ts +18 -0
- package/dist/tools/app-tools.d.ts.map +1 -0
- package/dist/tools/app-tools.js +87 -0
- package/dist/tools/app-tools.js.map +1 -0
- package/dist/tools/assets.d.ts +1 -3
- package/dist/tools/assets.d.ts.map +1 -1
- package/dist/tools/assets.js +63 -45
- package/dist/tools/assets.js.map +1 -1
- package/dist/tools/audio-files.d.ts +2 -3
- package/dist/tools/audio-files.d.ts.map +1 -1
- package/dist/tools/audio-files.js +61 -33
- package/dist/tools/audio-files.js.map +1 -1
- package/dist/tools/auth.d.ts +20 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +195 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/collaborators.js +1 -1
- package/dist/tools/collaborators.js.map +1 -1
- package/dist/tools/credits.d.ts.map +1 -1
- package/dist/tools/credits.js +128 -18
- package/dist/tools/credits.js.map +1 -1
- package/dist/tools/dashboard.d.ts +1 -2
- package/dist/tools/dashboard.d.ts.map +1 -1
- package/dist/tools/dashboard.js +19 -27
- package/dist/tools/dashboard.js.map +1 -1
- package/dist/tools/duplicates.d.ts.map +1 -1
- package/dist/tools/duplicates.js +15 -0
- package/dist/tools/duplicates.js.map +1 -1
- package/dist/tools/enrichment.d.ts +0 -3
- package/dist/tools/enrichment.d.ts.map +1 -1
- package/dist/tools/enrichment.js +17 -120
- package/dist/tools/enrichment.js.map +1 -1
- package/dist/tools/import-documents.d.ts +3 -3
- package/dist/tools/import-documents.d.ts.map +1 -1
- package/dist/tools/import-documents.js +64 -50
- package/dist/tools/import-documents.js.map +1 -1
- package/dist/tools/import.d.ts +1 -0
- package/dist/tools/import.d.ts.map +1 -1
- package/dist/tools/import.js +63 -1
- package/dist/tools/import.js.map +1 -1
- package/dist/tools/index.d.ts +44 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +410 -81
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/metadata.d.ts +15 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +1057 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/people.d.ts +4 -12
- package/dist/tools/people.d.ts.map +1 -1
- package/dist/tools/people.js +148 -109
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/publishers.d.ts +16 -0
- package/dist/tools/publishers.d.ts.map +1 -0
- package/dist/tools/publishers.js +69 -0
- package/dist/tools/publishers.js.map +1 -0
- package/dist/tools/recordings.d.ts +8 -8
- package/dist/tools/recordings.d.ts.map +1 -1
- package/dist/tools/recordings.js +121 -48
- package/dist/tools/recordings.js.map +1 -1
- package/dist/tools/recovery-hints.d.ts +14 -0
- package/dist/tools/recovery-hints.d.ts.map +1 -0
- package/dist/tools/recovery-hints.js +277 -0
- package/dist/tools/recovery-hints.js.map +1 -0
- package/dist/tools/royalties.js +1 -1
- package/dist/tools/royalties.js.map +1 -1
- package/dist/tools/search.js +2 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/send.d.ts +1 -2
- package/dist/tools/send.d.ts.map +1 -1
- package/dist/tools/send.js +19 -27
- package/dist/tools/send.js.map +1 -1
- package/dist/tools/split-sheets.d.ts.map +1 -1
- package/dist/tools/split-sheets.js +12 -0
- package/dist/tools/split-sheets.js.map +1 -1
- package/dist/tools/works.d.ts +4 -12
- package/dist/tools/works.d.ts.map +1 -1
- package/dist/tools/works.js +201 -116
- package/dist/tools/works.js.map +1 -1
- package/dist/utils/audit.d.ts +28 -0
- package/dist/utils/audit.d.ts.map +1 -0
- package/dist/utils/audit.js +28 -0
- package/dist/utils/audit.js.map +1 -0
- package/dist/utils/confirmation.d.ts +12 -0
- package/dist/utils/confirmation.d.ts.map +1 -0
- package/dist/utils/confirmation.js +78 -0
- package/dist/utils/confirmation.js.map +1 -0
- package/dist/utils/credentials.d.ts +11 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +47 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/enrichment-format.d.ts +31 -0
- package/dist/utils/enrichment-format.d.ts.map +1 -0
- package/dist/utils/enrichment-format.js +69 -0
- package/dist/utils/enrichment-format.js.map +1 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +29 -5
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/formatting.d.ts +1 -0
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +30 -2
- package/dist/utils/formatting.js.map +1 -1
- package/package.json +3 -1
- package/scripts/bundle-apps.ts +61 -0
package/dist/tools/credits.js
CHANGED
|
@@ -24,7 +24,7 @@ export class CreditsTools {
|
|
|
24
24
|
definition: {
|
|
25
25
|
name: "pica_credits_list",
|
|
26
26
|
description: "Get all credits (collaborators, roles, and splits) for a specific work. Returns who wrote, composed, arranged, or produced the work and their percentage splits. " +
|
|
27
|
-
"→ then: pica_credits_update (fix credits),
|
|
27
|
+
"→ then: pica_credits_update (fix credits), pica_people_inspect (inspect a credited person)",
|
|
28
28
|
inputSchema: {
|
|
29
29
|
type: "object",
|
|
30
30
|
properties: {
|
|
@@ -41,9 +41,11 @@ export class CreditsTools {
|
|
|
41
41
|
{
|
|
42
42
|
definition: {
|
|
43
43
|
name: "pica_credits_update",
|
|
44
|
-
description: "Set credits on a work. Replaces all existing credits. Splits must total 100%.
|
|
44
|
+
description: "Set credits on a work. Replaces all existing credits. Splits must total 100%. " +
|
|
45
|
+
"15 roles: writer, composer, arranger, lyricist, producer, performer, engineer, mixer, mastering, owner, vocalist, instrumentalist, conductor, programmer, remixer. " +
|
|
46
|
+
"Supports publisher fields (publisher_name, publisher_ipi, publisher_split_percentage) and territory/rights metadata. " +
|
|
45
47
|
"IMPORTANT: After updating, call pica_credits_list to verify the credits actually persisted — silent failures are possible if roles are invalid. " +
|
|
46
|
-
"→ then: pica_credits_list (verify saved),
|
|
48
|
+
"→ then: pica_credits_list (verify saved), pica_works_inspect (check progress)",
|
|
47
49
|
inputSchema: {
|
|
48
50
|
type: "object",
|
|
49
51
|
properties: {
|
|
@@ -63,7 +65,7 @@ export class CreditsTools {
|
|
|
63
65
|
},
|
|
64
66
|
role: {
|
|
65
67
|
type: "string",
|
|
66
|
-
description: "
|
|
68
|
+
description: "Role: writer, composer, arranger, lyricist, producer, performer, engineer, mixer, mastering, owner, vocalist, instrumentalist, conductor, programmer, remixer",
|
|
67
69
|
enum: [
|
|
68
70
|
"writer",
|
|
69
71
|
"composer",
|
|
@@ -71,12 +73,56 @@ export class CreditsTools {
|
|
|
71
73
|
"lyricist",
|
|
72
74
|
"producer",
|
|
73
75
|
"performer",
|
|
76
|
+
"engineer",
|
|
77
|
+
"mixer",
|
|
78
|
+
"mastering",
|
|
79
|
+
"owner",
|
|
80
|
+
"vocalist",
|
|
81
|
+
"instrumentalist",
|
|
82
|
+
"conductor",
|
|
83
|
+
"programmer",
|
|
84
|
+
"remixer",
|
|
74
85
|
],
|
|
75
86
|
},
|
|
76
87
|
splits: {
|
|
77
88
|
type: "number",
|
|
78
89
|
description: "Percentage split (0-100). All splits must total 100%.",
|
|
79
90
|
},
|
|
91
|
+
publisher_name: {
|
|
92
|
+
type: "string",
|
|
93
|
+
description: "Publisher name for this credit (optional — for publishing credits)",
|
|
94
|
+
},
|
|
95
|
+
publisher_ipi: {
|
|
96
|
+
type: "string",
|
|
97
|
+
description: "Publisher's IPI number (9-11 digits)",
|
|
98
|
+
},
|
|
99
|
+
publisher_split_percentage: {
|
|
100
|
+
type: "number",
|
|
101
|
+
description: "Publisher's share percentage (0-100). Separate from writer split.",
|
|
102
|
+
},
|
|
103
|
+
territory: {
|
|
104
|
+
type: "array",
|
|
105
|
+
items: { type: "string" },
|
|
106
|
+
description: 'Territories where this credit applies (e.g., ["worldwide"], ["UK", "US"]). Default: ["worldwide"].',
|
|
107
|
+
},
|
|
108
|
+
rights_type: {
|
|
109
|
+
type: "string",
|
|
110
|
+
enum: [
|
|
111
|
+
"all",
|
|
112
|
+
"performing",
|
|
113
|
+
"mechanical",
|
|
114
|
+
"synchronization",
|
|
115
|
+
],
|
|
116
|
+
description: "Type of rights covered. Default: all.",
|
|
117
|
+
},
|
|
118
|
+
start_date: {
|
|
119
|
+
type: "string",
|
|
120
|
+
description: "When rights start (ISO date). Null = from inception.",
|
|
121
|
+
},
|
|
122
|
+
end_date: {
|
|
123
|
+
type: "string",
|
|
124
|
+
description: "When rights end (ISO date). Null = perpetual.",
|
|
125
|
+
},
|
|
80
126
|
},
|
|
81
127
|
required: ["person_id", "role", "splits"],
|
|
82
128
|
},
|
|
@@ -100,12 +146,14 @@ export class CreditsTools {
|
|
|
100
146
|
}
|
|
101
147
|
async listCredits(args) {
|
|
102
148
|
// Fetch both publishing collaborators and recording credits
|
|
103
|
-
const [
|
|
104
|
-
this.pica.credits
|
|
105
|
-
.listCollaborators(args.work_id)
|
|
106
|
-
.catch(() => ({ collaborators: [], count: 0 })),
|
|
149
|
+
const [collabSettled, creditsSettled] = await Promise.allSettled([
|
|
150
|
+
this.pica.credits.listCollaborators(args.work_id),
|
|
107
151
|
this.pica.credits.listForWork(args.work_id),
|
|
108
152
|
]);
|
|
153
|
+
const collaborators = collabSettled.status === "fulfilled"
|
|
154
|
+
? collabSettled.value
|
|
155
|
+
: { collaborators: [], count: 0 };
|
|
156
|
+
const recordingCredits = creditsSettled.status === "fulfilled" ? creditsSettled.value : [];
|
|
109
157
|
// Merge both into a single list
|
|
110
158
|
const collabArray = Array.isArray(collaborators)
|
|
111
159
|
? collaborators
|
|
@@ -139,18 +187,39 @@ export class CreditsTools {
|
|
|
139
187
|
"lyricist",
|
|
140
188
|
"arranger",
|
|
141
189
|
]);
|
|
142
|
-
const allCredits = args.credits.map((c) =>
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
190
|
+
const allCredits = args.credits.map((c) => {
|
|
191
|
+
const credit = {
|
|
192
|
+
person_id: c.person_id,
|
|
193
|
+
role: c.role,
|
|
194
|
+
splits: c.splits || 0,
|
|
195
|
+
};
|
|
196
|
+
if (c.publisher_name)
|
|
197
|
+
credit.publisher_name = c.publisher_name;
|
|
198
|
+
if (c.publisher_ipi)
|
|
199
|
+
credit.publisher_ipi = c.publisher_ipi;
|
|
200
|
+
if (c.publisher_split_percentage !== undefined)
|
|
201
|
+
credit.publisher_split_percentage = c.publisher_split_percentage;
|
|
202
|
+
if (c.territory)
|
|
203
|
+
credit.territory = c.territory;
|
|
204
|
+
if (c.rights_type)
|
|
205
|
+
credit.rights_type = c.rights_type;
|
|
206
|
+
if (c.start_date)
|
|
207
|
+
credit.start_date = c.start_date;
|
|
208
|
+
if (c.end_date)
|
|
209
|
+
credit.end_date = c.end_date;
|
|
210
|
+
return credit;
|
|
211
|
+
});
|
|
212
|
+
const publishingCredits = allCredits.filter((c) => PUBLISHING_ROLES.has(String(c.role || "writer")
|
|
213
|
+
.split(", ")[0]
|
|
214
|
+
.trim()));
|
|
215
|
+
const recordingCredits = allCredits.filter((c) => !PUBLISHING_ROLES.has(String(c.role || "writer")
|
|
216
|
+
.split(", ")[0]
|
|
217
|
+
.trim()));
|
|
149
218
|
let credits;
|
|
150
219
|
// Route to correct endpoint(s)
|
|
151
220
|
if (publishingCredits.length > 0 && recordingCredits.length > 0) {
|
|
152
|
-
// Mixed — call both endpoints
|
|
153
|
-
const [
|
|
221
|
+
// Mixed — call both endpoints, use allSettled so a partial failure is reported not silently swallowed
|
|
222
|
+
const [pubSettled, recSettled] = await Promise.allSettled([
|
|
154
223
|
this.pica.credits.updateCollaborators(args.work_id, {
|
|
155
224
|
credits: publishingCredits,
|
|
156
225
|
}),
|
|
@@ -158,7 +227,48 @@ export class CreditsTools {
|
|
|
158
227
|
credits: recordingCredits,
|
|
159
228
|
}),
|
|
160
229
|
]);
|
|
161
|
-
|
|
230
|
+
const pubResult = pubSettled.status === "fulfilled" ? pubSettled.value : null;
|
|
231
|
+
const recResult = recSettled.status === "fulfilled" ? recSettled.value : null;
|
|
232
|
+
const pubError = pubSettled.status === "rejected"
|
|
233
|
+
? pubSettled.reason
|
|
234
|
+
: null;
|
|
235
|
+
const recError = recSettled.status === "rejected"
|
|
236
|
+
? recSettled.reason
|
|
237
|
+
: null;
|
|
238
|
+
if (pubError && recError) {
|
|
239
|
+
return {
|
|
240
|
+
content: [
|
|
241
|
+
{
|
|
242
|
+
type: "text",
|
|
243
|
+
text: `both publishing and recording credits failed to save — publishing error: ${pubError?.message ?? pubError}, recording error: ${recError?.message ?? recError}`,
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
isError: true,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
if (pubError) {
|
|
250
|
+
return {
|
|
251
|
+
content: [
|
|
252
|
+
{
|
|
253
|
+
type: "text",
|
|
254
|
+
text: `recording credits updated, but publishing credits failed — ${pubError?.message ?? pubError}. retry the publishing portion.`,
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
isError: true,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
if (recError) {
|
|
261
|
+
return {
|
|
262
|
+
content: [
|
|
263
|
+
{
|
|
264
|
+
type: "text",
|
|
265
|
+
text: `publishing credits updated, but recording credits failed — ${recError?.message ?? recError}. retry the recording portion.`,
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
isError: true,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
credits = { collaborators: pubResult, credits: recResult };
|
|
162
272
|
}
|
|
163
273
|
else if (publishingCredits.length > 0) {
|
|
164
274
|
credits = await this.pica.credits.updateCollaborators(args.work_id, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/tools/credits.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAQ7D,OAAO,EAEL,aAAa,EACb,oBAAoB,EAEpB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,OAAO,YAAY;IACf,IAAI,CAAa;IAEzB,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,OAAO;YACL;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,sBAAsB;oBAC5B,WAAW,EACT,uEAAuE;wBACvE,+JAA+J;oBACjK,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;qBACf;iBACF;gBACD,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;aACrC;YACD;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,mBAAmB;oBACzB,WAAW,EACT,mKAAmK;wBACnK,
|
|
1
|
+
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/tools/credits.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,7 @@ export declare class DashboardTools {
|
|
|
10
10
|
definition: ToolDefinition;
|
|
11
11
|
executor: ToolExecutor;
|
|
12
12
|
}>;
|
|
13
|
-
private
|
|
14
|
-
private pendingDiscoveries;
|
|
13
|
+
private queryDiscoveries;
|
|
15
14
|
private reviewDiscovery;
|
|
16
15
|
private attentionItems;
|
|
17
16
|
private briefing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAOtE,qBAAa,cAAc;IACzB,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;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAOtE,qBAAa,cAAc;IACzB,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;YA2G3D,gBAAgB;YA8BhB,eAAe;YAaf,cAAc;YAYd,QAAQ;YAMR,KAAK;CAIpB"}
|
package/dist/tools/dashboard.js
CHANGED
|
@@ -10,16 +10,17 @@ export class DashboardTools {
|
|
|
10
10
|
// --- Discoveries ---
|
|
11
11
|
{
|
|
12
12
|
definition: {
|
|
13
|
-
name: "
|
|
14
|
-
description: "
|
|
15
|
-
"
|
|
16
|
-
"
|
|
13
|
+
name: "pica_discoveries_query",
|
|
14
|
+
description: "Query discoveries — system-computed findings like ISRC matches, " +
|
|
15
|
+
"duplicate detection, enrichment opportunities, and registration gaps. " +
|
|
16
|
+
"Filter by status to see all, pending (needing review), or reviewed items.",
|
|
17
17
|
inputSchema: {
|
|
18
18
|
type: "object",
|
|
19
19
|
properties: {
|
|
20
|
-
|
|
21
|
-
type: "
|
|
22
|
-
|
|
20
|
+
status: {
|
|
21
|
+
type: "string",
|
|
22
|
+
enum: ["all", "pending", "reviewed"],
|
|
23
|
+
description: "Filter by status: 'all' for everything, 'pending' for items needing review, 'reviewed' for already-handled (default: all)",
|
|
23
24
|
},
|
|
24
25
|
limit: {
|
|
25
26
|
type: "number",
|
|
@@ -28,19 +29,7 @@ export class DashboardTools {
|
|
|
28
29
|
},
|
|
29
30
|
},
|
|
30
31
|
},
|
|
31
|
-
executor: this.
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
definition: {
|
|
35
|
-
name: "pica_discoveries_pending",
|
|
36
|
-
description: "Get pending discoveries that need your review — " +
|
|
37
|
-
"accept or reject each one to update your catalog.",
|
|
38
|
-
inputSchema: {
|
|
39
|
-
type: "object",
|
|
40
|
-
properties: {},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
executor: this.pendingDiscoveries.bind(this),
|
|
32
|
+
executor: this.queryDiscoveries.bind(this),
|
|
44
33
|
},
|
|
45
34
|
{
|
|
46
35
|
definition: {
|
|
@@ -115,20 +104,23 @@ export class DashboardTools {
|
|
|
115
104
|
},
|
|
116
105
|
];
|
|
117
106
|
}
|
|
118
|
-
async
|
|
107
|
+
async queryDiscoveries(args) {
|
|
108
|
+
const status = args.status || "all";
|
|
109
|
+
// "pending" delegates to the dedicated pending endpoint
|
|
110
|
+
if (status === "pending") {
|
|
111
|
+
const result = await this.pica.dashboard.pendingDiscoveries();
|
|
112
|
+
const items = result?.data || result || [];
|
|
113
|
+
return formatStructuredList(Array.isArray(items) ? items : [], "pending discovery");
|
|
114
|
+
}
|
|
115
|
+
// "all" or "reviewed" use the general discoveries endpoint
|
|
119
116
|
const result = await this.pica.dashboard.discoveries({
|
|
120
|
-
unread:
|
|
117
|
+
unread: status === "all" ? undefined : false,
|
|
121
118
|
limit: args.limit,
|
|
122
119
|
});
|
|
123
120
|
const items = result?.data || result || [];
|
|
124
121
|
const unreadCount = result?.unreadCount ?? 0;
|
|
125
122
|
return formatStructuredList(Array.isArray(items) ? items : [], "discovery", { unreadCount });
|
|
126
123
|
}
|
|
127
|
-
async pendingDiscoveries(_args) {
|
|
128
|
-
const result = await this.pica.dashboard.pendingDiscoveries();
|
|
129
|
-
const items = result?.data || result || [];
|
|
130
|
-
return formatStructuredList(Array.isArray(items) ? items : [], "pending discovery");
|
|
131
|
-
}
|
|
132
124
|
async reviewDiscovery(args) {
|
|
133
125
|
const result = await this.pica.dashboard.reviewDiscovery(args.discovery_id, args.status);
|
|
134
126
|
return formatSuccess(`Discovery ${args.discovery_id} ${args.status}`, result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAQ7D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,OAAO,cAAc;IACjB,IAAI,CAAa;IAEzB,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,OAAO;YACL,sBAAsB;YACtB;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../../src/tools/duplicates.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAOtE,qBAAa,eAAe;IAC1B,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;YAuD3D,cAAc;YAKd,eAAe;
|
|
1
|
+
{"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../../src/tools/duplicates.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAOtE,qBAAa,eAAe;IAC1B,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;YAuD3D,cAAc;YAKd,eAAe;CA+B9B"}
|
package/dist/tools/duplicates.js
CHANGED
|
@@ -63,6 +63,21 @@ export class DuplicatesTools {
|
|
|
63
63
|
if (!args.loser_ids?.length) {
|
|
64
64
|
return formatValidationError({ loser_ids: "must be a non-empty array" });
|
|
65
65
|
}
|
|
66
|
+
const loserIds = args.loser_ids;
|
|
67
|
+
if (loserIds && loserIds.length > 25) {
|
|
68
|
+
return {
|
|
69
|
+
content: [{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: JSON.stringify({
|
|
72
|
+
error: "VALIDATION_ERROR",
|
|
73
|
+
message: `maximum 25 loser IDs per merge — received ${loserIds.length}`,
|
|
74
|
+
retry_safe: false,
|
|
75
|
+
suggestion: "split into multiple merge operations with 25 or fewer IDs each",
|
|
76
|
+
}, null, 2),
|
|
77
|
+
}],
|
|
78
|
+
isError: true,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
66
81
|
const result = await this.pica.duplicates.merge(args.entity_type, args.winner_id, args.loser_ids);
|
|
67
82
|
return formatSuccess(`Merged ${args.loser_ids.length} duplicate ${args.entity_type}(s) into ${args.winner_id}`, result);
|
|
68
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../../src/tools/duplicates.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAQ7D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,OAAO,eAAe;IAClB,IAAI,CAAa;IAEzB,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,OAAO;YACL;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,sBAAsB;oBAC5B,WAAW,EACT,kIAAkI;wBAClI,4DAA4D;oBAC9D,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;gCACzB,WAAW,EAAE,wCAAwC;6BACtD;yBACF;wBACD,QAAQ,EAAE,CAAC,aAAa,CAAC;qBAC1B;iBACF;gBACD,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;aACzC;YACD;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,uBAAuB;oBAC7B,WAAW,EACT,oJAAoJ;oBACtJ,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;gCACxB,WAAW,EAAE,yBAAyB;6BACvC;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,WAAW,EACT,kEAAkE;6BACrE;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACzB,WAAW,EACT,oEAAoE;6BACvE;yBACF;wBACD,QAAQ,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC;qBACpD;iBACF;gBACD,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAyB;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC5B,OAAO,qBAAqB,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAC7C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CACf,CAAC;QACF,OAAO,aAAa,CAClB,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,cAAc,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC,SAAS,EAAE,EACzF,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../../src/tools/duplicates.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,6 @@ export declare class EnrichmentTools {
|
|
|
10
10
|
definition: ToolDefinition;
|
|
11
11
|
executor: ToolExecutor;
|
|
12
12
|
}>;
|
|
13
|
-
private enrichWork;
|
|
14
|
-
private enrichPerson;
|
|
15
|
-
private enrichmentStatus;
|
|
16
13
|
private enrichmentCandidates;
|
|
17
14
|
private enrichWorkMlc;
|
|
18
15
|
private enrichWorkMusicBrainz;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment.d.ts","sourceRoot":"","sources":["../../src/tools/enrichment.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"enrichment.d.ts","sourceRoot":"","sources":["../../src/tools/enrichment.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAKtE,qBAAa,eAAe;IAC1B,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;YA4H3D,oBAAoB;YAOpB,aAAa;YAKb,qBAAqB;YASrB,iBAAiB;YAOjB,iBAAiB;YAuBjB,iBAAiB;CAMhC"}
|
package/dist/tools/enrichment.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
|
|
2
2
|
import { formatAsText, formatSuccess } from "../utils/formatting.js";
|
|
3
3
|
import { withCreditGate } from "../utils/credit-gate.js";
|
|
4
|
+
import { formatEnrichmentResult } from "../utils/enrichment-format.js";
|
|
4
5
|
export class EnrichmentTools {
|
|
5
6
|
pica;
|
|
6
7
|
constructor(pica) {
|
|
@@ -8,64 +9,11 @@ export class EnrichmentTools {
|
|
|
8
9
|
}
|
|
9
10
|
getTools() {
|
|
10
11
|
return [
|
|
11
|
-
{
|
|
12
|
-
definition: {
|
|
13
|
-
name: "pica_enrich_work",
|
|
14
|
-
description: "Trigger enrichment for a work (fetches data from MLC, MusicBrainz, etc.). " +
|
|
15
|
-
"→ then: pica_enrichment_status (check results), pica_work_completeness (verify improvement) Costs 1 pica credit (MLC lookup).",
|
|
16
|
-
inputSchema: {
|
|
17
|
-
type: "object",
|
|
18
|
-
properties: {
|
|
19
|
-
work_id: {
|
|
20
|
-
type: "string",
|
|
21
|
-
description: "The work ID to enrich",
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
required: ["work_id"],
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
executor: withCreditGate(this.pica, "external_mlc_lookup", "work enrichment (MLC)", this.enrichWork.bind(this)),
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
definition: {
|
|
31
|
-
name: "pica_enrich_person",
|
|
32
|
-
description: "Trigger enrichment for a person (fetches data from ISNI, MusicBrainz, etc.). " +
|
|
33
|
-
"→ then: pica_people_get_full (verify results) Costs 1 pica credit (MLC lookup). ISNI and MusicBrainz are free.",
|
|
34
|
-
inputSchema: {
|
|
35
|
-
type: "object",
|
|
36
|
-
properties: {
|
|
37
|
-
person_id: {
|
|
38
|
-
type: "string",
|
|
39
|
-
description: "The person ID to enrich",
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
required: ["person_id"],
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
executor: withCreditGate(this.pica, "external_mlc_lookup", "person enrichment", this.enrichPerson.bind(this)),
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
definition: {
|
|
49
|
-
name: "pica_enrichment_status",
|
|
50
|
-
description: "Check the enrichment status for a specific work (what sources have been checked, what data was found)",
|
|
51
|
-
inputSchema: {
|
|
52
|
-
type: "object",
|
|
53
|
-
properties: {
|
|
54
|
-
work_id: {
|
|
55
|
-
type: "string",
|
|
56
|
-
description: "The work ID to check",
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
required: ["work_id"],
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
executor: this.enrichmentStatus.bind(this),
|
|
63
|
-
},
|
|
64
12
|
{
|
|
65
13
|
definition: {
|
|
66
14
|
name: "pica_enrichment_candidates",
|
|
67
15
|
description: "Find works and people that are candidates for enrichment (missing external identifiers or metadata). " +
|
|
68
|
-
"→ then:
|
|
16
|
+
"→ then: pica_enrich_work_spotify (enrich from Spotify), pica_enrich_work_mlc (enrich from MLC)",
|
|
69
17
|
inputSchema: {
|
|
70
18
|
type: "object",
|
|
71
19
|
properties: {},
|
|
@@ -95,7 +43,7 @@ export class EnrichmentTools {
|
|
|
95
43
|
definition: {
|
|
96
44
|
name: "pica_enrich_work_musicbrainz",
|
|
97
45
|
description: "Look up MusicBrainz for release data, artist info, and cross-references for a work. " +
|
|
98
|
-
"Returns
|
|
46
|
+
"Returns release data, artist info, and cross-references.",
|
|
99
47
|
inputSchema: {
|
|
100
48
|
type: "object",
|
|
101
49
|
properties: {
|
|
@@ -113,7 +61,7 @@ export class EnrichmentTools {
|
|
|
113
61
|
definition: {
|
|
114
62
|
name: "pica_enrich_work_discogs",
|
|
115
63
|
description: "Search Discogs for release data, label, format, and catalogue numbers for a work. " +
|
|
116
|
-
"Returns a preview of matches
|
|
64
|
+
"Returns a preview of matches.",
|
|
117
65
|
inputSchema: {
|
|
118
66
|
type: "object",
|
|
119
67
|
properties: {
|
|
@@ -130,13 +78,9 @@ export class EnrichmentTools {
|
|
|
130
78
|
{
|
|
131
79
|
definition: {
|
|
132
80
|
name: "pica_enrich_work_spotify",
|
|
133
|
-
description: "Enrich
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"Matches tracks against existing catalog works, enriches matches, creates new works for unmatched tracks. " +
|
|
137
|
-
"Two-step: omit confirm to preview, set confirm: true to execute.\n" +
|
|
138
|
-
"• work_id + spotify_url — links the track URI to the work, then enriches it (no pre-link needed)\n\n" +
|
|
139
|
-
"→ then: pica_work_completeness (check gaps), pica_credits_update (add songwriting credits)",
|
|
81
|
+
description: "Enrich a work from Spotify — pulls track metadata, popularity, and streaming data. " +
|
|
82
|
+
"Optionally pass spotify_url to link the track URI before enriching. " +
|
|
83
|
+
"→ then: pica_works_inspect (check what changed), pica_credits_update (add credits)",
|
|
140
84
|
inputSchema: {
|
|
141
85
|
type: "object",
|
|
142
86
|
properties: {
|
|
@@ -146,15 +90,10 @@ export class EnrichmentTools {
|
|
|
146
90
|
},
|
|
147
91
|
spotify_url: {
|
|
148
92
|
type: "string",
|
|
149
|
-
description: "
|
|
150
|
-
"Examples: https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy, " +
|
|
151
|
-
"spotify:track:6rqhFgbbKwnb9MLmUQDhG6",
|
|
152
|
-
},
|
|
153
|
-
confirm: {
|
|
154
|
-
type: "boolean",
|
|
155
|
-
description: "For URL mode: set true to execute import/enrich. Omit or false to preview first.",
|
|
93
|
+
description: "Optional Spotify URL or URI to link before enriching",
|
|
156
94
|
},
|
|
157
95
|
},
|
|
96
|
+
required: ["work_id"],
|
|
158
97
|
},
|
|
159
98
|
},
|
|
160
99
|
executor: this.enrichWorkSpotify.bind(this),
|
|
@@ -179,79 +118,37 @@ export class EnrichmentTools {
|
|
|
179
118
|
},
|
|
180
119
|
];
|
|
181
120
|
}
|
|
182
|
-
async enrichWork(args) {
|
|
183
|
-
const result = await this.pica.enrichment.enrichWork(args.work_id);
|
|
184
|
-
return formatSuccess(`Enrichment triggered for work ${args.work_id}`, result);
|
|
185
|
-
}
|
|
186
|
-
async enrichPerson(args) {
|
|
187
|
-
const result = await this.pica.enrichment.enrichPerson(args.person_id);
|
|
188
|
-
return formatSuccess(`Enrichment triggered for person ${args.person_id}`, result);
|
|
189
|
-
}
|
|
190
|
-
async enrichmentStatus(args) {
|
|
191
|
-
const result = await this.pica.enrichment.getWorkEnrichmentStatus(args.work_id);
|
|
192
|
-
return formatAsText(result);
|
|
193
|
-
}
|
|
194
121
|
async enrichmentCandidates(_args) {
|
|
195
122
|
const result = await this.pica.enrichment.getCandidates();
|
|
196
123
|
return formatAsText(result);
|
|
197
124
|
}
|
|
198
125
|
async enrichWorkMlc(args) {
|
|
199
126
|
const result = await this.pica.enrichment.enrichWorkMlc(args.work_id);
|
|
200
|
-
return
|
|
127
|
+
return formatEnrichmentResult("work", args.work_id, "MLC", result);
|
|
201
128
|
}
|
|
202
129
|
async enrichWorkMusicBrainz(args) {
|
|
203
130
|
const result = await this.pica.enrichment.enrichWorkMusicBrainz(args.work_id);
|
|
204
|
-
return
|
|
131
|
+
return formatEnrichmentResult("work", args.work_id, "MusicBrainz", result);
|
|
205
132
|
}
|
|
206
133
|
async enrichWorkDiscogs(args) {
|
|
207
134
|
const result = await this.pica.enrichment.enrichWorkDiscogs(args.work_id);
|
|
208
|
-
return
|
|
135
|
+
return formatEnrichmentResult("work", args.work_id, "Discogs", result);
|
|
209
136
|
}
|
|
210
137
|
async enrichWorkSpotify(args) {
|
|
211
138
|
const workId = args.work_id;
|
|
212
139
|
const spotifyUrl = args.spotify_url;
|
|
213
|
-
|
|
214
|
-
if (
|
|
215
|
-
return {
|
|
216
|
-
content: [
|
|
217
|
-
{
|
|
218
|
-
type: "text",
|
|
219
|
-
text: "Either work_id or spotify_url is required.",
|
|
220
|
-
},
|
|
221
|
-
],
|
|
222
|
-
isError: true,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
// Mode 1: work_id + spotify_url — link the track URI then enrich
|
|
226
|
-
if (workId && spotifyUrl) {
|
|
140
|
+
// If spotify_url provided, link it to the work first, then enrich
|
|
141
|
+
if (spotifyUrl) {
|
|
227
142
|
const result = await this.pica.enrichment.linkAndEnrichSpotify(workId, spotifyUrl);
|
|
228
143
|
return formatSuccess(`Linked Spotify track and enriched work ${workId}`, result);
|
|
229
144
|
}
|
|
230
|
-
//
|
|
231
|
-
if (spotifyUrl) {
|
|
232
|
-
if (confirm) {
|
|
233
|
-
const result = await this.pica.enrichment.spotifyUrlExecute(spotifyUrl);
|
|
234
|
-
const data = result.data ?? result;
|
|
235
|
-
return formatSuccess(`Spotify import complete: ${data.worksCreated ?? 0} works created, ` +
|
|
236
|
-
`${data.worksEnriched ?? data.enrichResults?.length ?? 0} works enriched, ` +
|
|
237
|
-
`${data.duplicatesSkipped ?? 0} duplicates skipped`, data);
|
|
238
|
-
}
|
|
239
|
-
const result = await this.pica.enrichment.spotifyUrlPreview(spotifyUrl);
|
|
240
|
-
const data = result.data ?? result;
|
|
241
|
-
const trackCount = data.tracks?.length ?? 0;
|
|
242
|
-
const newCount = data.newTracks?.length ?? 0;
|
|
243
|
-
const dupCount = data.duplicates?.length ?? 0;
|
|
244
|
-
return formatSuccess(`Spotify preview: ${trackCount} tracks found. ` +
|
|
245
|
-
`${newCount} new (will be created), ${dupCount} already in catalog (will be enriched). ` +
|
|
246
|
-
`Call again with confirm: true to execute.`, data);
|
|
247
|
-
}
|
|
248
|
-
// Mode 3: work_id only — existing single-work enrichment
|
|
145
|
+
// work_id only — enrich from already-linked Spotify data
|
|
249
146
|
const result = await this.pica.enrichment.enrichWorkSpotify(workId);
|
|
250
|
-
return
|
|
147
|
+
return formatEnrichmentResult("work", workId, "Spotify", result);
|
|
251
148
|
}
|
|
252
149
|
async enrichWorkYouTube(args) {
|
|
253
150
|
const result = await this.pica.enrichment.enrichWorkYouTube(args.work_id);
|
|
254
|
-
return
|
|
151
|
+
return formatEnrichmentResult("work", args.work_id, "YouTube", result);
|
|
255
152
|
}
|
|
256
153
|
}
|
|
257
154
|
//# sourceMappingURL=enrichment.js.map
|