@collage-dam/mcp-server 0.1.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.
- package/.env.example +56 -0
- package/CHANGELOG.md +90 -0
- package/LICENSE +21 -0
- package/README.md +512 -0
- package/dist/client.d.ts +497 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +1162 -0
- package/dist/client.js.map +1 -0
- package/dist/conventions/confirmation.d.ts +89 -0
- package/dist/conventions/confirmation.d.ts.map +1 -0
- package/dist/conventions/confirmation.js +132 -0
- package/dist/conventions/confirmation.js.map +1 -0
- package/dist/conventions/dry-run/batch-executor.d.ts +36 -0
- package/dist/conventions/dry-run/batch-executor.d.ts.map +1 -0
- package/dist/conventions/dry-run/batch-executor.js +89 -0
- package/dist/conventions/dry-run/batch-executor.js.map +1 -0
- package/dist/conventions/dry-run/diff-renderer.d.ts +34 -0
- package/dist/conventions/dry-run/diff-renderer.d.ts.map +1 -0
- package/dist/conventions/dry-run/diff-renderer.js +158 -0
- package/dist/conventions/dry-run/diff-renderer.js.map +1 -0
- package/dist/conventions/dry-run/index.d.ts +13 -0
- package/dist/conventions/dry-run/index.d.ts.map +1 -0
- package/dist/conventions/dry-run/index.js +10 -0
- package/dist/conventions/dry-run/index.js.map +1 -0
- package/dist/conventions/dry-run/mutating-tool.d.ts +64 -0
- package/dist/conventions/dry-run/mutating-tool.d.ts.map +1 -0
- package/dist/conventions/dry-run/mutating-tool.js +88 -0
- package/dist/conventions/dry-run/mutating-tool.js.map +1 -0
- package/dist/conventions/dry-run/summary.d.ts +66 -0
- package/dist/conventions/dry-run/summary.d.ts.map +1 -0
- package/dist/conventions/dry-run/summary.js +185 -0
- package/dist/conventions/dry-run/summary.js.map +1 -0
- package/dist/conventions/dry-run/types.d.ts +597 -0
- package/dist/conventions/dry-run/types.d.ts.map +1 -0
- package/dist/conventions/dry-run/types.js +108 -0
- package/dist/conventions/dry-run/types.js.map +1 -0
- package/dist/conventions/dry-run/with-dry-run.d.ts +66 -0
- package/dist/conventions/dry-run/with-dry-run.d.ts.map +1 -0
- package/dist/conventions/dry-run/with-dry-run.js +219 -0
- package/dist/conventions/dry-run/with-dry-run.js.map +1 -0
- package/dist/conventions/env.d.ts +49 -0
- package/dist/conventions/env.d.ts.map +1 -0
- package/dist/conventions/env.js +84 -0
- package/dist/conventions/env.js.map +1 -0
- package/dist/conventions/errors.d.ts +68 -0
- package/dist/conventions/errors.d.ts.map +1 -0
- package/dist/conventions/errors.js +81 -0
- package/dist/conventions/errors.js.map +1 -0
- package/dist/conventions/logger.d.ts +28 -0
- package/dist/conventions/logger.d.ts.map +1 -0
- package/dist/conventions/logger.js +105 -0
- package/dist/conventions/logger.js.map +1 -0
- package/dist/conventions/pagination.d.ts +37 -0
- package/dist/conventions/pagination.d.ts.map +1 -0
- package/dist/conventions/pagination.js +53 -0
- package/dist/conventions/pagination.js.map +1 -0
- package/dist/conventions/rate-limiter.d.ts +54 -0
- package/dist/conventions/rate-limiter.d.ts.map +1 -0
- package/dist/conventions/rate-limiter.js +143 -0
- package/dist/conventions/rate-limiter.js.map +1 -0
- package/dist/conventions/response-budget.d.ts +66 -0
- package/dist/conventions/response-budget.d.ts.map +1 -0
- package/dist/conventions/response-budget.js +89 -0
- package/dist/conventions/response-budget.js.map +1 -0
- package/dist/conventions/schema-version.d.ts +27 -0
- package/dist/conventions/schema-version.d.ts.map +1 -0
- package/dist/conventions/schema-version.js +29 -0
- package/dist/conventions/schema-version.js.map +1 -0
- package/dist/conventions/state-store-redis.d.ts +32 -0
- package/dist/conventions/state-store-redis.d.ts.map +1 -0
- package/dist/conventions/state-store-redis.js +77 -0
- package/dist/conventions/state-store-redis.js.map +1 -0
- package/dist/conventions/state-store.d.ts +46 -0
- package/dist/conventions/state-store.d.ts.map +1 -0
- package/dist/conventions/state-store.js +105 -0
- package/dist/conventions/state-store.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +421 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/collection-audit.d.ts +13 -0
- package/dist/prompts/collection-audit.d.ts.map +1 -0
- package/dist/prompts/collection-audit.js +168 -0
- package/dist/prompts/collection-audit.js.map +1 -0
- package/dist/prompts/create-distribution.d.ts +15 -0
- package/dist/prompts/create-distribution.d.ts.map +1 -0
- package/dist/prompts/create-distribution.js +111 -0
- package/dist/prompts/create-distribution.js.map +1 -0
- package/dist/prompts/helpers.d.ts +20 -0
- package/dist/prompts/helpers.d.ts.map +1 -0
- package/dist/prompts/helpers.js +53 -0
- package/dist/prompts/helpers.js.map +1 -0
- package/dist/prompts/library-health-audit.d.ts +13 -0
- package/dist/prompts/library-health-audit.d.ts.map +1 -0
- package/dist/prompts/library-health-audit.js +131 -0
- package/dist/prompts/library-health-audit.js.map +1 -0
- package/dist/prompts/usage-insights.d.ts +13 -0
- package/dist/prompts/usage-insights.d.ts.map +1 -0
- package/dist/prompts/usage-insights.js +98 -0
- package/dist/prompts/usage-insights.js.map +1 -0
- package/dist/prompts/wrap-prompt-as-tool.d.ts +48 -0
- package/dist/prompts/wrap-prompt-as-tool.d.ts.map +1 -0
- package/dist/prompts/wrap-prompt-as-tool.js +61 -0
- package/dist/prompts/wrap-prompt-as-tool.js.map +1 -0
- package/dist/resources/asset-by-id.d.ts +4 -0
- package/dist/resources/asset-by-id.d.ts.map +1 -0
- package/dist/resources/asset-by-id.js +27 -0
- package/dist/resources/asset-by-id.js.map +1 -0
- package/dist/resources/collections.d.ts +5 -0
- package/dist/resources/collections.d.ts.map +1 -0
- package/dist/resources/collections.js +48 -0
- package/dist/resources/collections.js.map +1 -0
- package/dist/resources/custom-fields.d.ts +4 -0
- package/dist/resources/custom-fields.d.ts.map +1 -0
- package/dist/resources/custom-fields.js +30 -0
- package/dist/resources/custom-fields.js.map +1 -0
- package/dist/resources/folders.d.ts +5 -0
- package/dist/resources/folders.d.ts.map +1 -0
- package/dist/resources/folders.js +73 -0
- package/dist/resources/folders.js.map +1 -0
- package/dist/resources/helpers.d.ts +17 -0
- package/dist/resources/helpers.d.ts.map +1 -0
- package/dist/resources/helpers.js +59 -0
- package/dist/resources/helpers.js.map +1 -0
- package/dist/resources/portals.d.ts +5 -0
- package/dist/resources/portals.d.ts.map +1 -0
- package/dist/resources/portals.js +81 -0
- package/dist/resources/portals.js.map +1 -0
- package/dist/resources/recent-and-dashboard.d.ts +5 -0
- package/dist/resources/recent-and-dashboard.d.ts.map +1 -0
- package/dist/resources/recent-and-dashboard.js +42 -0
- package/dist/resources/recent-and-dashboard.js.map +1 -0
- package/dist/tools/asset-selection.d.ts +102 -0
- package/dist/tools/asset-selection.d.ts.map +1 -0
- package/dist/tools/asset-selection.js +133 -0
- package/dist/tools/asset-selection.js.map +1 -0
- package/dist/tools/audit/audit-folder-structure.d.ts +108 -0
- package/dist/tools/audit/audit-folder-structure.d.ts.map +1 -0
- package/dist/tools/audit/audit-folder-structure.js +260 -0
- package/dist/tools/audit/audit-folder-structure.js.map +1 -0
- package/dist/tools/audit/audit-naming-conventions.d.ts +83 -0
- package/dist/tools/audit/audit-naming-conventions.d.ts.map +1 -0
- package/dist/tools/audit/audit-naming-conventions.js +238 -0
- package/dist/tools/audit/audit-naming-conventions.js.map +1 -0
- package/dist/tools/audit/audit-tagging-hygiene.d.ts +77 -0
- package/dist/tools/audit/audit-tagging-hygiene.d.ts.map +1 -0
- package/dist/tools/audit/audit-tagging-hygiene.js +402 -0
- package/dist/tools/audit/audit-tagging-hygiene.js.map +1 -0
- package/dist/tools/audit/detect-duplicates.d.ts +62 -0
- package/dist/tools/audit/detect-duplicates.d.ts.map +1 -0
- package/dist/tools/audit/detect-duplicates.js +0 -0
- package/dist/tools/audit/detect-duplicates.js.map +1 -0
- package/dist/tools/audit/types.d.ts +526 -0
- package/dist/tools/audit/types.d.ts.map +1 -0
- package/dist/tools/audit/types.js +188 -0
- package/dist/tools/audit/types.js.map +1 -0
- package/dist/tools/bulk-move-assets.d.ts +78 -0
- package/dist/tools/bulk-move-assets.d.ts.map +1 -0
- package/dist/tools/bulk-move-assets.js +122 -0
- package/dist/tools/bulk-move-assets.js.map +1 -0
- package/dist/tools/bulk-normalize-filenames.d.ts +62 -0
- package/dist/tools/bulk-normalize-filenames.d.ts.map +1 -0
- package/dist/tools/bulk-normalize-filenames.js +237 -0
- package/dist/tools/bulk-normalize-filenames.js.map +1 -0
- package/dist/tools/bulk-rename-assets.d.ts +79 -0
- package/dist/tools/bulk-rename-assets.d.ts.map +1 -0
- package/dist/tools/bulk-rename-assets.js +139 -0
- package/dist/tools/bulk-rename-assets.js.map +1 -0
- package/dist/tools/bulk-tags.d.ts +107 -0
- package/dist/tools/bulk-tags.d.ts.map +1 -0
- package/dist/tools/bulk-tags.js +220 -0
- package/dist/tools/bulk-tags.js.map +1 -0
- package/dist/tools/client-adapters.d.ts +76 -0
- package/dist/tools/client-adapters.d.ts.map +1 -0
- package/dist/tools/client-adapters.js +648 -0
- package/dist/tools/client-adapters.js.map +1 -0
- package/dist/tools/collection-membership.d.ts +90 -0
- package/dist/tools/collection-membership.d.ts.map +1 -0
- package/dist/tools/collection-membership.js +195 -0
- package/dist/tools/collection-membership.js.map +1 -0
- package/dist/tools/create-collection.d.ts +63 -0
- package/dist/tools/create-collection.d.ts.map +1 -0
- package/dist/tools/create-collection.js +151 -0
- package/dist/tools/create-collection.js.map +1 -0
- package/dist/tools/create-folder.d.ts +46 -0
- package/dist/tools/create-folder.d.ts.map +1 -0
- package/dist/tools/create-folder.js +83 -0
- package/dist/tools/create-folder.js.map +1 -0
- package/dist/tools/create-share-link.d.ts +107 -0
- package/dist/tools/create-share-link.d.ts.map +1 -0
- package/dist/tools/create-share-link.js +239 -0
- package/dist/tools/create-share-link.js.map +1 -0
- package/dist/tools/get-asset-details.d.ts +401 -0
- package/dist/tools/get-asset-details.d.ts.map +1 -0
- package/dist/tools/get-asset-details.js +56 -0
- package/dist/tools/get-asset-details.js.map +1 -0
- package/dist/tools/get-collection.d.ts +126 -0
- package/dist/tools/get-collection.d.ts.map +1 -0
- package/dist/tools/get-collection.js +52 -0
- package/dist/tools/get-collection.js.map +1 -0
- package/dist/tools/get-embed-code.d.ts +195 -0
- package/dist/tools/get-embed-code.d.ts.map +1 -0
- package/dist/tools/get-embed-code.js +214 -0
- package/dist/tools/get-embed-code.js.map +1 -0
- package/dist/tools/insights/analyze-share-links.d.ts +159 -0
- package/dist/tools/insights/analyze-share-links.d.ts.map +1 -0
- package/dist/tools/insights/analyze-share-links.js +314 -0
- package/dist/tools/insights/analyze-share-links.js.map +1 -0
- package/dist/tools/insights/insight-cache.d.ts +36 -0
- package/dist/tools/insights/insight-cache.d.ts.map +1 -0
- package/dist/tools/insights/insight-cache.js +98 -0
- package/dist/tools/insights/insight-cache.js.map +1 -0
- package/dist/tools/insights/report-asset-activation.d.ts +149 -0
- package/dist/tools/insights/report-asset-activation.d.ts.map +1 -0
- package/dist/tools/insights/report-asset-activation.js +380 -0
- package/dist/tools/insights/report-asset-activation.js.map +1 -0
- package/dist/tools/insights/report-stale-assets.d.ts +120 -0
- package/dist/tools/insights/report-stale-assets.d.ts.map +1 -0
- package/dist/tools/insights/report-stale-assets.js +281 -0
- package/dist/tools/insights/report-stale-assets.js.map +1 -0
- package/dist/tools/insights/report-top-assets.d.ts +139 -0
- package/dist/tools/insights/report-top-assets.d.ts.map +1 -0
- package/dist/tools/insights/report-top-assets.js +407 -0
- package/dist/tools/insights/report-top-assets.js.map +1 -0
- package/dist/tools/list-categories.d.ts +127 -0
- package/dist/tools/list-categories.d.ts.map +1 -0
- package/dist/tools/list-categories.js +68 -0
- package/dist/tools/list-categories.js.map +1 -0
- package/dist/tools/list-collections.d.ts +127 -0
- package/dist/tools/list-collections.d.ts.map +1 -0
- package/dist/tools/list-collections.js +53 -0
- package/dist/tools/list-collections.js.map +1 -0
- package/dist/tools/list-custom-fields.d.ts +125 -0
- package/dist/tools/list-custom-fields.d.ts.map +1 -0
- package/dist/tools/list-custom-fields.js +51 -0
- package/dist/tools/list-custom-fields.js.map +1 -0
- package/dist/tools/list-share-links.d.ts +192 -0
- package/dist/tools/list-share-links.d.ts.map +1 -0
- package/dist/tools/list-share-links.js +92 -0
- package/dist/tools/list-share-links.js.map +1 -0
- package/dist/tools/list-workspaces.d.ts +88 -0
- package/dist/tools/list-workspaces.d.ts.map +1 -0
- package/dist/tools/list-workspaces.js +71 -0
- package/dist/tools/list-workspaces.js.map +1 -0
- package/dist/tools/move-asset.d.ts +48 -0
- package/dist/tools/move-asset.d.ts.map +1 -0
- package/dist/tools/move-asset.js +85 -0
- package/dist/tools/move-asset.js.map +1 -0
- package/dist/tools/rename-asset.d.ts +88 -0
- package/dist/tools/rename-asset.d.ts.map +1 -0
- package/dist/tools/rename-asset.js +100 -0
- package/dist/tools/rename-asset.js.map +1 -0
- package/dist/tools/rename-folder.d.ts +55 -0
- package/dist/tools/rename-folder.d.ts.map +1 -0
- package/dist/tools/rename-folder.js +101 -0
- package/dist/tools/rename-folder.js.map +1 -0
- package/dist/tools/revoke-share-link.d.ts +55 -0
- package/dist/tools/revoke-share-link.d.ts.map +1 -0
- package/dist/tools/revoke-share-link.js +77 -0
- package/dist/tools/revoke-share-link.js.map +1 -0
- package/dist/tools/search/facets.d.ts +34 -0
- package/dist/tools/search/facets.d.ts.map +1 -0
- package/dist/tools/search/facets.js +147 -0
- package/dist/tools/search/facets.js.map +1 -0
- package/dist/tools/search/filter-builder.d.ts +33 -0
- package/dist/tools/search/filter-builder.d.ts.map +1 -0
- package/dist/tools/search/filter-builder.js +111 -0
- package/dist/tools/search/filter-builder.js.map +1 -0
- package/dist/tools/search/search-assets.d.ts +41 -0
- package/dist/tools/search/search-assets.d.ts.map +1 -0
- package/dist/tools/search/search-assets.js +162 -0
- package/dist/tools/search/search-assets.js.map +1 -0
- package/dist/tools/search/search-collections.d.ts +35 -0
- package/dist/tools/search/search-collections.d.ts.map +1 -0
- package/dist/tools/search/search-collections.js +103 -0
- package/dist/tools/search/search-collections.js.map +1 -0
- package/dist/tools/search/types.d.ts +1047 -0
- package/dist/tools/search/types.d.ts.map +1 -0
- package/dist/tools/search/types.js +216 -0
- package/dist/tools/search/types.js.map +1 -0
- package/dist/tools/update-asset-metadata.d.ts +78 -0
- package/dist/tools/update-asset-metadata.d.ts.map +1 -0
- package/dist/tools/update-asset-metadata.js +203 -0
- package/dist/tools/update-asset-metadata.js.map +1 -0
- package/dist/tools/update-collection.d.ts +69 -0
- package/dist/tools/update-collection.d.ts.map +1 -0
- package/dist/tools/update-collection.js +142 -0
- package/dist/tools/update-collection.js.map +1 -0
- package/dist/tools/view-category-contents.d.ts +231 -0
- package/dist/tools/view-category-contents.d.ts.map +1 -0
- package/dist/tools/view-category-contents.js +97 -0
- package/dist/tools/view-category-contents.js.map +1 -0
- package/dist/types.d.ts +1326 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +288 -0
- package/dist/types.js.map +1 -0
- package/dist/typesense.d.ts +84 -0
- package/dist/typesense.d.ts.map +1 -0
- package/dist/typesense.js +243 -0
- package/dist/typesense.js.map +1 -0
- package/docs/api-field-verification.md +244 -0
- package/docs/deployment-runbook.md +446 -0
- package/docs/security-review.md +195 -0
- package/docs/typesense-filter-schema.md +262 -0
- package/docs/verified-endpoints.md +38 -0
- package/package.json +72 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// ── bulk_set_tags / bulk_add_tags / bulk_remove_tags ─────────────────
|
|
2
|
+
// Three separate `MutatingTool` subclasses sharing a common selection
|
|
3
|
+
// resolver, planning skeleton, and per-item executor. Each tool computes
|
|
4
|
+
// the eventual tag set per asset deterministically in `plan()` so the
|
|
5
|
+
// preview shows exactly what will land.
|
|
6
|
+
//
|
|
7
|
+
// set — replaces the current tag set with `tags`
|
|
8
|
+
// add — union(current, tags)
|
|
9
|
+
// remove — current \ tags
|
|
10
|
+
//
|
|
11
|
+
// All three default to a chunk size of 50 and surface aggregate
|
|
12
|
+
// overwrite-risk flags via `summary.ts` (extended in T4).
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { MutatingTool, } from '../conventions/dry-run/index.js';
|
|
15
|
+
import { createToolError } from '../conventions/errors.js';
|
|
16
|
+
import { AssetSelectionSchema, resolveAssetSelection, } from './asset-selection.js';
|
|
17
|
+
// ── Shared Input ─────────────────────────────────────────────────────
|
|
18
|
+
const TagSchema = z.string().min(1).max(255);
|
|
19
|
+
export const BulkTagsInputSchema = z.object({
|
|
20
|
+
selection: AssetSelectionSchema,
|
|
21
|
+
tags: z.array(TagSchema).min(1).max(500),
|
|
22
|
+
});
|
|
23
|
+
export const BULK_SET_TAGS_DESCRIPTION = 'Replace the tag set on every asset matched by `selection` with the ' +
|
|
24
|
+
'provided `tags`. Two-step: first call returns a preview plus a ' +
|
|
25
|
+
'confirmation_token; second call (with the token) executes the change in ' +
|
|
26
|
+
'batches of 50 and returns a per-item ledger. Selection accepts query, ' +
|
|
27
|
+
'ids, or collection_id (exactly one).';
|
|
28
|
+
export const BULK_ADD_TAGS_DESCRIPTION = 'Add `tags` to the tag set on every asset matched by `selection` (union, ' +
|
|
29
|
+
'duplicates ignored). Two-step preview/confirm flow.';
|
|
30
|
+
export const BULK_REMOVE_TAGS_DESCRIPTION = 'Remove `tags` from the tag set on every asset matched by `selection`. ' +
|
|
31
|
+
'Tags not present on an asset are ignored. Two-step preview/confirm flow.';
|
|
32
|
+
function applyOp(current, inputTags, op) {
|
|
33
|
+
if (op === 'set') {
|
|
34
|
+
return dedupePreserveOrder(inputTags);
|
|
35
|
+
}
|
|
36
|
+
if (op === 'add') {
|
|
37
|
+
return dedupePreserveOrder([...current, ...inputTags]);
|
|
38
|
+
}
|
|
39
|
+
// remove
|
|
40
|
+
const drop = new Set(inputTags);
|
|
41
|
+
return current.filter((t) => !drop.has(t));
|
|
42
|
+
}
|
|
43
|
+
function dedupePreserveOrder(tags) {
|
|
44
|
+
const seen = new Set();
|
|
45
|
+
const out = [];
|
|
46
|
+
for (const tag of tags) {
|
|
47
|
+
if (!seen.has(tag)) {
|
|
48
|
+
seen.add(tag);
|
|
49
|
+
out.push(tag);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
class BulkTagsTool extends MutatingTool {
|
|
55
|
+
chunkSize = 50;
|
|
56
|
+
client;
|
|
57
|
+
search;
|
|
58
|
+
collections;
|
|
59
|
+
constructor(deps) {
|
|
60
|
+
super(deps);
|
|
61
|
+
this.client = deps.client;
|
|
62
|
+
this.search = deps.search;
|
|
63
|
+
this.collections = deps.collections;
|
|
64
|
+
}
|
|
65
|
+
async plan(input) {
|
|
66
|
+
const resolved = await resolveAssetSelection(input.selection, {
|
|
67
|
+
search: this.search,
|
|
68
|
+
collections: this.collections,
|
|
69
|
+
});
|
|
70
|
+
if (!resolved.ok) {
|
|
71
|
+
throw new Error(`selection failed: ${resolved.error.code} — ${resolved.error.message}`);
|
|
72
|
+
}
|
|
73
|
+
const changes = [];
|
|
74
|
+
let overwriteCount = 0;
|
|
75
|
+
let noopCount = 0;
|
|
76
|
+
let nonExistentRemovals = 0;
|
|
77
|
+
let dataLossOnSet = 0;
|
|
78
|
+
for (const id of resolved.asset_ids) {
|
|
79
|
+
const snapshot = pickSnapshot(resolved.snapshots.get(id));
|
|
80
|
+
let currentTags;
|
|
81
|
+
if (snapshot !== null) {
|
|
82
|
+
currentTags = snapshot;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const fetched = await this.client.getCurrentTags(id);
|
|
86
|
+
if (!fetched.ok) {
|
|
87
|
+
throw new Error(`failed to read current tags for asset ${id}: ${fetched.error.code} — ${fetched.error.message}`);
|
|
88
|
+
}
|
|
89
|
+
currentTags = fetched.tags;
|
|
90
|
+
}
|
|
91
|
+
const nextTags = applyOp(currentTags, input.tags, this.op);
|
|
92
|
+
const isNoop = sameTagSet(currentTags, nextTags);
|
|
93
|
+
if (isNoop)
|
|
94
|
+
noopCount++;
|
|
95
|
+
// Overwrite/data-loss bookkeeping per operation.
|
|
96
|
+
if (this.op === 'set') {
|
|
97
|
+
// Anything in current that won't survive in next == overwrite.
|
|
98
|
+
const next = new Set(nextTags);
|
|
99
|
+
const lost = currentTags.filter((t) => !next.has(t)).length;
|
|
100
|
+
if (lost > 0) {
|
|
101
|
+
overwriteCount++;
|
|
102
|
+
dataLossOnSet += lost;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (this.op === 'add') {
|
|
106
|
+
// No data loss on add. Track partial-overlap as informational.
|
|
107
|
+
}
|
|
108
|
+
else if (this.op === 'remove') {
|
|
109
|
+
const cur = new Set(currentTags);
|
|
110
|
+
const present = input.tags.filter((t) => cur.has(t)).length;
|
|
111
|
+
if (present === 0)
|
|
112
|
+
nonExistentRemovals++;
|
|
113
|
+
}
|
|
114
|
+
changes.push({
|
|
115
|
+
id,
|
|
116
|
+
operation: 'update',
|
|
117
|
+
before: { tags: currentTags },
|
|
118
|
+
after: { tags: nextTags },
|
|
119
|
+
metadata: { next_tags: nextTags },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const riskFlags = [];
|
|
123
|
+
if (resolved.asset_ids.length === 0) {
|
|
124
|
+
riskFlags.push({
|
|
125
|
+
code: 'empty_selection',
|
|
126
|
+
severity: 'warning',
|
|
127
|
+
message: 'selection matched zero assets',
|
|
128
|
+
count: 0,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (noopCount > 0) {
|
|
132
|
+
riskFlags.push({
|
|
133
|
+
code: 'noop_tag_change',
|
|
134
|
+
severity: 'info',
|
|
135
|
+
message: 'tag operation is a no-op (no change)',
|
|
136
|
+
count: noopCount,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (overwriteCount > 0) {
|
|
140
|
+
riskFlags.push({
|
|
141
|
+
code: 'tag_overwrite',
|
|
142
|
+
severity: 'critical',
|
|
143
|
+
message: `set will overwrite existing tags on ${overwriteCount} asset${overwriteCount === 1 ? '' : 's'}`,
|
|
144
|
+
count: overwriteCount,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (nonExistentRemovals > 0) {
|
|
148
|
+
riskFlags.push({
|
|
149
|
+
code: 'remove_missing_tag',
|
|
150
|
+
severity: 'info',
|
|
151
|
+
message: 'no requested tag was present on the asset',
|
|
152
|
+
count: nonExistentRemovals,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
changes,
|
|
157
|
+
riskFlags,
|
|
158
|
+
extraAggregates: {
|
|
159
|
+
selected: resolved.asset_ids.length,
|
|
160
|
+
noops: noopCount,
|
|
161
|
+
overwrites: overwriteCount,
|
|
162
|
+
tags_lost: dataLossOnSet,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
apply = async (change) => {
|
|
167
|
+
const before = change.before?.['tags'] ?? [];
|
|
168
|
+
const after = change.after?.['tags'] ?? [];
|
|
169
|
+
const result = await this.client.setTags(change.id, after);
|
|
170
|
+
if (!result.ok) {
|
|
171
|
+
return { ok: false, error: result.error };
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
ok: true,
|
|
175
|
+
result: { asset_id: change.id, before_tags: before, after_tags: after },
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// ── Concrete Subclasses ──────────────────────────────────────────────
|
|
180
|
+
export class BulkSetTagsTool extends BulkTagsTool {
|
|
181
|
+
name = 'bulk_set_tags';
|
|
182
|
+
op = 'set';
|
|
183
|
+
}
|
|
184
|
+
export class BulkAddTagsTool extends BulkTagsTool {
|
|
185
|
+
name = 'bulk_add_tags';
|
|
186
|
+
op = 'add';
|
|
187
|
+
}
|
|
188
|
+
export class BulkRemoveTagsTool extends BulkTagsTool {
|
|
189
|
+
name = 'bulk_remove_tags';
|
|
190
|
+
op = 'remove';
|
|
191
|
+
}
|
|
192
|
+
export function buildBulkSetTagsTool(deps) {
|
|
193
|
+
return new BulkSetTagsTool(deps);
|
|
194
|
+
}
|
|
195
|
+
export function buildBulkAddTagsTool(deps) {
|
|
196
|
+
return new BulkAddTagsTool(deps);
|
|
197
|
+
}
|
|
198
|
+
export function buildBulkRemoveTagsTool(deps) {
|
|
199
|
+
return new BulkRemoveTagsTool(deps);
|
|
200
|
+
}
|
|
201
|
+
export { createToolError };
|
|
202
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
203
|
+
function pickSnapshot(asset) {
|
|
204
|
+
if (asset === undefined)
|
|
205
|
+
return null;
|
|
206
|
+
if (asset.tags === undefined)
|
|
207
|
+
return null;
|
|
208
|
+
return [...asset.tags];
|
|
209
|
+
}
|
|
210
|
+
function sameTagSet(a, b) {
|
|
211
|
+
if (a.length !== b.length)
|
|
212
|
+
return false;
|
|
213
|
+
const sa = new Set(a);
|
|
214
|
+
for (const tag of b) {
|
|
215
|
+
if (!sa.has(tag))
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=bulk-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-tags.js","sourceRoot":"","sources":["../../src/tools/bulk-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { CollageClient } from '../client.js';
|
|
2
|
+
import type { AssetEnumerator, AuditAsset } from './audit/audit-tagging-hygiene.js';
|
|
3
|
+
import type { RenameAssetClient } from './rename-asset.js';
|
|
4
|
+
import type { UpdateAssetMetadataClient } from './update-asset-metadata.js';
|
|
5
|
+
import type { BulkTagsClient } from './bulk-tags.js';
|
|
6
|
+
import type { CreateCollectionClient } from './create-collection.js';
|
|
7
|
+
import type { UpdateCollectionClient } from './update-collection.js';
|
|
8
|
+
import type { CollectionMembershipClient } from './collection-membership.js';
|
|
9
|
+
import type { CreateFolderClient } from './create-folder.js';
|
|
10
|
+
import type { RenameFolderClient } from './rename-folder.js';
|
|
11
|
+
import type { MoveAssetClient } from './move-asset.js';
|
|
12
|
+
import type { AssetSearchAdapter } from './asset-selection.js';
|
|
13
|
+
import type { CollageSearchClient } from '../typesense.js';
|
|
14
|
+
import { type ShareLinkEnumerator } from './insights/analyze-share-links.js';
|
|
15
|
+
/**
|
|
16
|
+
* Backed by `CollageClient.enumerateAssets()` which iterates folders via
|
|
17
|
+
* `view-files-with-category`. Workspace-wide flat enumeration is otherwise
|
|
18
|
+
* Typesense-only.
|
|
19
|
+
*
|
|
20
|
+
* Returns a typed `UPSTREAM` error if folder listing 402s (current
|
|
21
|
+
* BREZ-workspace state) — the audit tool surfaces that to the caller as
|
|
22
|
+
* a structured failure instead of an empty result.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildAssetEnumerator(client: CollageClient): AssetEnumerator;
|
|
25
|
+
/** Helper for tests / future swap-in: enumerator backed by an in-memory list. */
|
|
26
|
+
export declare function fixedAssetEnumerator(assets: ReadonlyArray<AuditAsset>): AssetEnumerator;
|
|
27
|
+
/**
|
|
28
|
+
* Default unavailable adapter — kept for tests and for the
|
|
29
|
+
* pre-Typesense-provisioned mode.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildSearchAdapter(_client: CollageClient): AssetSearchAdapter;
|
|
32
|
+
/**
|
|
33
|
+
* Search adapter backed by the Collage Nuxt search proxy. Bridges the
|
|
34
|
+
* bulk-tag tools' `AssetSearchAdapter` interface to the workspace-scoped
|
|
35
|
+
* `search_assets` runner. Returns up to the first page (per_page=250) of
|
|
36
|
+
* hits, projected down to the `ResolvedAsset` shape expected by the
|
|
37
|
+
* resolver. The `tags` array is only present when the index actually
|
|
38
|
+
* has tags indexed for the row — empty when the indexer has not yet
|
|
39
|
+
* caught up.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildTypesenseSearchAdapter(searchClient: CollageSearchClient, workspaceId: string): AssetSearchAdapter;
|
|
42
|
+
export declare function buildRenameAssetClient(client: CollageClient): RenameAssetClient;
|
|
43
|
+
/**
|
|
44
|
+
* `view-detail` carries `display_file_name` and `description` directly. We
|
|
45
|
+
* map `display_file_name` onto the tool's `title` slot (the
|
|
46
|
+
* Admin-Frontend rename UI does the same — there is no separate "title"
|
|
47
|
+
* column in `digital_assets`).
|
|
48
|
+
*
|
|
49
|
+
* Custom fields come from a separate `get-custom-fields` call, projected
|
|
50
|
+
* by `name` (with `field_name` as fallback) into `Record<string, CustomFieldValue>`.
|
|
51
|
+
* Update side: we re-fetch the same projection, overwrite each `value` for
|
|
52
|
+
* the requested keys, and POST the full array back via `update-custom-fields`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildUpdateAssetMetadataClient(client: CollageClient): UpdateAssetMetadataClient;
|
|
55
|
+
/**
|
|
56
|
+
* Tag read uses `view-detail.tags` (array of `{id, tag_name}`). Write side:
|
|
57
|
+
* `setTags` is a full-replace — diff against current, add new via
|
|
58
|
+
* `add-tags-to-multiple-file`, remove others via
|
|
59
|
+
* `delete-tag-from-multiple-file` (called once per removed tag because the
|
|
60
|
+
* upstream takes a single `tag_name` per request).
|
|
61
|
+
*/
|
|
62
|
+
export declare function buildBulkTagsClient(client: CollageClient): BulkTagsClient;
|
|
63
|
+
export declare function buildCreateCollectionClient(client: CollageClient): CreateCollectionClient;
|
|
64
|
+
export declare function buildUpdateCollectionClient(client: CollageClient): UpdateCollectionClient;
|
|
65
|
+
export declare function buildCollectionMembershipClient(client: CollageClient): CollectionMembershipClient;
|
|
66
|
+
import type { CreateShareLinkClient } from './create-share-link.js';
|
|
67
|
+
import type { RevokeShareLinkClient } from './revoke-share-link.js';
|
|
68
|
+
export declare function buildCreateShareLinkClient(client: CollageClient): CreateShareLinkClient;
|
|
69
|
+
export declare function buildRevokeShareLinkClient(client: CollageClient): RevokeShareLinkClient;
|
|
70
|
+
export declare function buildCreateFolderClient(client: CollageClient): CreateFolderClient;
|
|
71
|
+
export declare function buildRenameFolderClient(client: CollageClient): RenameFolderClient;
|
|
72
|
+
export declare function buildMoveAssetClient(client: CollageClient): MoveAssetClient;
|
|
73
|
+
export declare function buildShareLinkAnalyticsEnumerator(client: Pick<CollageClient, 'listShareLinks'>): ShareLinkEnumerator;
|
|
74
|
+
import type { DashboardCommonDataReader } from './insights/report-asset-activation.js';
|
|
75
|
+
export declare function buildDashboardCommonDataReader(client: Pick<CollageClient, 'getDashboardCommonData'>): DashboardCommonDataReader;
|
|
76
|
+
//# sourceMappingURL=client-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-adapters.d.ts","sourceRoot":"","sources":["../../src/tools/client-adapters.ts"],"names":[],"mappings":"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"}
|