@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,407 @@
|
|
|
1
|
+
// ── report_top_assets (T3, read-only) ────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Read-only distribution-insights tool. Ranks the workspace's "top
|
|
4
|
+
// performing" assets by composite distribution metrics — total views,
|
|
5
|
+
// share-link count, distinct creators, distinct collections — within an
|
|
6
|
+
// optional date / collection / creator scope.
|
|
7
|
+
//
|
|
8
|
+
// Differentiation from sibling tools:
|
|
9
|
+
// * `analyze_share_links` (T1) aggregates SHARE LINKS (the row itself).
|
|
10
|
+
// * `report_asset_activation` (T2) measures WORKSPACE COVERAGE
|
|
11
|
+
// (activation rate vs dormant count).
|
|
12
|
+
// * `report_top_assets` (T3) ranks PER-ASSET PERFORMANCE — which assets
|
|
13
|
+
// are the workhorses of distribution.
|
|
14
|
+
//
|
|
15
|
+
// Signal source:
|
|
16
|
+
// * Same as T2 — each share-link row references one or more `asset_ids`
|
|
17
|
+
// and carries `view_count`. Per-asset events are not exposed by the
|
|
18
|
+
// upstream surface, so views are inferred from the share-link
|
|
19
|
+
// view_count attributed to each covered asset.
|
|
20
|
+
// * Attribution choice: each share link's `view_count` is added in FULL
|
|
21
|
+
// to every asset it covers. This is the same convention T2 uses, and
|
|
22
|
+
// it matches the "demo collection" mental model — the share link is
|
|
23
|
+
// the unit of distribution; every asset in it benefits from the
|
|
24
|
+
// traffic.
|
|
25
|
+
//
|
|
26
|
+
// Type discipline: never uses `any`. Mirrors the T1/T2 enumerator/
|
|
27
|
+
// dashboard-reader factoring exactly so a cache wrapper (T5) can plug in
|
|
28
|
+
// around `reportTopAssets(...)` without touching the aggregation logic.
|
|
29
|
+
import { z } from 'zod';
|
|
30
|
+
import { createToolError } from '../../conventions/errors.js';
|
|
31
|
+
import { estimateTokens, HARD_CAP_TOKENS } from '../../conventions/response-budget.js';
|
|
32
|
+
// ── Tool description ────────────────────────────────────────────────
|
|
33
|
+
export const REPORT_TOP_ASSETS_DESCRIPTION = 'Read-only report ranking workspace assets by distribution performance. ' +
|
|
34
|
+
'For each asset that has been shared, returns total views, share-link ' +
|
|
35
|
+
'count, distinct creators / collections, first- and last-shared ' +
|
|
36
|
+
'timestamps, and mean views-per-share. Buckets the matching asset ' +
|
|
37
|
+
'population into high / medium / low performance tiers using P80 / ' +
|
|
38
|
+
'P50 view-count thresholds so the LLM can describe the long-tail ' +
|
|
39
|
+
'shape. Filters: optional date range (defaults to last 90 days), ' +
|
|
40
|
+
'collection scope, creator scope, sort_by, top_n. No mutation, no AI ' +
|
|
41
|
+
'prose.';
|
|
42
|
+
// ── Input schema ────────────────────────────────────────────────────
|
|
43
|
+
export const DEFAULT_TOP_N = 10;
|
|
44
|
+
export const MAX_TOP_N = 100;
|
|
45
|
+
/** Default look-back window when neither `date_from` nor `date_to` is set. */
|
|
46
|
+
export const DEFAULT_LOOKBACK_DAYS = 90;
|
|
47
|
+
export const SORT_BY_VALUES = [
|
|
48
|
+
'total_views',
|
|
49
|
+
'share_link_count',
|
|
50
|
+
'mean_views_per_share',
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* `date_from` / `date_to` are inclusive ISO-8601 date or datetime
|
|
54
|
+
* strings. If only a date is supplied (e.g. `2026-04-14`) it is
|
|
55
|
+
* interpreted as the start (00:00:00Z) for `date_from` or the end
|
|
56
|
+
* (23:59:59.999Z) for `date_to`. When BOTH are omitted, the analyzer
|
|
57
|
+
* defaults to the last {@link DEFAULT_LOOKBACK_DAYS} days — wider than
|
|
58
|
+
* T2's 30-day default because "top performers" is more interesting over
|
|
59
|
+
* a quarter than a month.
|
|
60
|
+
*/
|
|
61
|
+
export const ReportTopAssetsInputSchema = z
|
|
62
|
+
.object({
|
|
63
|
+
date_from: z
|
|
64
|
+
.string()
|
|
65
|
+
.min(1)
|
|
66
|
+
.refine((v) => !Number.isNaN(Date.parse(v)), {
|
|
67
|
+
message: 'date_from must be a valid ISO-8601 date or datetime string',
|
|
68
|
+
})
|
|
69
|
+
.optional(),
|
|
70
|
+
date_to: z
|
|
71
|
+
.string()
|
|
72
|
+
.min(1)
|
|
73
|
+
.refine((v) => !Number.isNaN(Date.parse(v)), {
|
|
74
|
+
message: 'date_to must be a valid ISO-8601 date or datetime string',
|
|
75
|
+
})
|
|
76
|
+
.optional(),
|
|
77
|
+
collection_id: z.string().min(1).optional(),
|
|
78
|
+
created_by_user_id: z.string().min(1).optional(),
|
|
79
|
+
sort_by: z.enum(SORT_BY_VALUES).default('total_views'),
|
|
80
|
+
top_n: z.number().int().min(1).max(MAX_TOP_N).default(DEFAULT_TOP_N),
|
|
81
|
+
})
|
|
82
|
+
.strict();
|
|
83
|
+
export class ReportTopAssetsTool {
|
|
84
|
+
deps;
|
|
85
|
+
name = 'report_top_assets';
|
|
86
|
+
description = REPORT_TOP_ASSETS_DESCRIPTION;
|
|
87
|
+
constructor(deps) {
|
|
88
|
+
this.deps = deps;
|
|
89
|
+
}
|
|
90
|
+
async run(rawInput = {}) {
|
|
91
|
+
let parsed;
|
|
92
|
+
try {
|
|
93
|
+
parsed = ReportTopAssetsInputSchema.parse(rawInput);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
error: createToolError('VALIDATION', err instanceof Error ? err.message : 'invalid input'),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Cross-field validation: when both bounds are set, from <= to.
|
|
102
|
+
if (parsed.date_from !== undefined && parsed.date_to !== undefined) {
|
|
103
|
+
const fromMs = Date.parse(parsed.date_from);
|
|
104
|
+
const toMs = Date.parse(parsed.date_to);
|
|
105
|
+
if (fromMs > toMs) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
error: createToolError('VALIDATION', 'date_from must be <= date_to'),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const enumerated = await this.deps.enumerator.enumerate();
|
|
113
|
+
if (!enumerated.ok) {
|
|
114
|
+
return { ok: false, error: enumerated.error };
|
|
115
|
+
}
|
|
116
|
+
const report = buildReport(enumerated.rows, enumerated.truncated, parsed);
|
|
117
|
+
return { ok: true, report };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function buildReportTopAssetsTool(deps) {
|
|
121
|
+
return new ReportTopAssetsTool(deps);
|
|
122
|
+
}
|
|
123
|
+
// ── Aggregation (pure) ──────────────────────────────────────────────
|
|
124
|
+
/**
|
|
125
|
+
* Build the top-assets report from a flat list of share-link rows. Pure
|
|
126
|
+
* function, exported for direct test access.
|
|
127
|
+
*/
|
|
128
|
+
export function buildReport(rows, enumeratorTruncated, input) {
|
|
129
|
+
// ── Resolve effective date range (defaults to last DEFAULT_LOOKBACK_DAYS) ──
|
|
130
|
+
const { effectiveFrom, effectiveTo } = resolveDateRange(input.date_from, input.date_to);
|
|
131
|
+
// ── Filter share-link rows ──
|
|
132
|
+
const matching = rows.filter((row) => {
|
|
133
|
+
if (input.collection_id !== undefined) {
|
|
134
|
+
if (row.collection_id !== input.collection_id)
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (input.created_by_user_id !== undefined) {
|
|
138
|
+
if (row.created_by_user_id !== input.created_by_user_id)
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
if (row.created_at === null)
|
|
142
|
+
return false;
|
|
143
|
+
const createdMs = Date.parse(row.created_at);
|
|
144
|
+
if (Number.isNaN(createdMs))
|
|
145
|
+
return false;
|
|
146
|
+
if (effectiveFrom !== null && createdMs < effectiveFrom)
|
|
147
|
+
return false;
|
|
148
|
+
if (effectiveTo !== null && createdMs > effectiveTo)
|
|
149
|
+
return false;
|
|
150
|
+
return true;
|
|
151
|
+
});
|
|
152
|
+
const assets = new Map();
|
|
153
|
+
for (const row of matching) {
|
|
154
|
+
if (row.created_at === null)
|
|
155
|
+
continue;
|
|
156
|
+
const createdMs = Date.parse(row.created_at);
|
|
157
|
+
if (Number.isNaN(createdMs))
|
|
158
|
+
continue;
|
|
159
|
+
for (const assetId of row.asset_ids) {
|
|
160
|
+
const existing = assets.get(assetId);
|
|
161
|
+
if (existing === undefined) {
|
|
162
|
+
const creators = new Set();
|
|
163
|
+
if (row.created_by_user_id !== null)
|
|
164
|
+
creators.add(row.created_by_user_id);
|
|
165
|
+
const collections = new Set();
|
|
166
|
+
if (row.collection_id !== null)
|
|
167
|
+
collections.add(row.collection_id);
|
|
168
|
+
assets.set(assetId, {
|
|
169
|
+
total_views: row.view_count,
|
|
170
|
+
share_link_count: 1,
|
|
171
|
+
creators,
|
|
172
|
+
collections,
|
|
173
|
+
first_shared_ms: createdMs,
|
|
174
|
+
first_shared_iso: row.created_at,
|
|
175
|
+
last_shared_ms: createdMs,
|
|
176
|
+
last_shared_iso: row.created_at,
|
|
177
|
+
title: row.title,
|
|
178
|
+
});
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
existing.total_views += row.view_count;
|
|
182
|
+
existing.share_link_count += 1;
|
|
183
|
+
if (row.created_by_user_id !== null) {
|
|
184
|
+
existing.creators.add(row.created_by_user_id);
|
|
185
|
+
}
|
|
186
|
+
if (row.collection_id !== null) {
|
|
187
|
+
existing.collections.add(row.collection_id);
|
|
188
|
+
}
|
|
189
|
+
if (createdMs < existing.first_shared_ms) {
|
|
190
|
+
existing.first_shared_ms = createdMs;
|
|
191
|
+
existing.first_shared_iso = row.created_at;
|
|
192
|
+
}
|
|
193
|
+
if (createdMs >= existing.last_shared_ms) {
|
|
194
|
+
existing.last_shared_ms = createdMs;
|
|
195
|
+
existing.last_shared_iso = row.created_at;
|
|
196
|
+
// Prefer non-null titles from the most-recent row.
|
|
197
|
+
if (row.title !== null)
|
|
198
|
+
existing.title = row.title;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ── Project entries (full list, before sort + slice) ──
|
|
203
|
+
const allEntries = [...assets.entries()].map(([id, state]) => ({
|
|
204
|
+
id,
|
|
205
|
+
title: state.title,
|
|
206
|
+
total_views: state.total_views,
|
|
207
|
+
share_link_count: state.share_link_count,
|
|
208
|
+
distinct_creators_count: state.creators.size,
|
|
209
|
+
distinct_collections_count: state.collections.size,
|
|
210
|
+
mean_views_per_share: state.share_link_count > 0
|
|
211
|
+
? state.total_views / state.share_link_count
|
|
212
|
+
: 0,
|
|
213
|
+
first_shared_at: state.first_shared_iso,
|
|
214
|
+
last_shared_at: state.last_shared_iso,
|
|
215
|
+
}));
|
|
216
|
+
// ── Totals ──
|
|
217
|
+
const matchedAssets = allEntries.length;
|
|
218
|
+
const totalShares = matching.length;
|
|
219
|
+
const totalViews = matching.reduce((acc, r) => acc + r.view_count, 0);
|
|
220
|
+
const meanViewsPerAsset = matchedAssets === 0 ? null : sumViews(allEntries) / matchedAssets;
|
|
221
|
+
const medianViewsPerAsset = matchedAssets === 0
|
|
222
|
+
? null
|
|
223
|
+
: computeMedian(allEntries.map((e) => e.total_views));
|
|
224
|
+
const totals = {
|
|
225
|
+
matched_assets: matchedAssets,
|
|
226
|
+
total_views: totalViews,
|
|
227
|
+
total_shares: totalShares,
|
|
228
|
+
mean_views_per_asset: meanViewsPerAsset,
|
|
229
|
+
median_views_per_asset: medianViewsPerAsset,
|
|
230
|
+
};
|
|
231
|
+
// ── Performance buckets ──
|
|
232
|
+
// Compute P80/P50 over the matched-asset total_views distribution.
|
|
233
|
+
const performanceBuckets = computePerformanceBuckets(allEntries.map((e) => e.total_views));
|
|
234
|
+
// ── Sort + top-N ──
|
|
235
|
+
const sorted = [...allEntries].sort((a, b) => compareEntries(a, b, input.sort_by));
|
|
236
|
+
const topAssets = sorted.slice(0, input.top_n);
|
|
237
|
+
const initial = {
|
|
238
|
+
filters: {
|
|
239
|
+
date_from: isoFromMs(effectiveFrom),
|
|
240
|
+
date_to: isoFromMs(effectiveTo),
|
|
241
|
+
collection_id: input.collection_id ?? null,
|
|
242
|
+
created_by_user_id: input.created_by_user_id ?? null,
|
|
243
|
+
sort_by: input.sort_by,
|
|
244
|
+
top_n: input.top_n,
|
|
245
|
+
},
|
|
246
|
+
totals,
|
|
247
|
+
performance_buckets: performanceBuckets,
|
|
248
|
+
top_assets: topAssets,
|
|
249
|
+
truncated: enumeratorTruncated,
|
|
250
|
+
};
|
|
251
|
+
if (enumeratorTruncated) {
|
|
252
|
+
initial.truncation_reason =
|
|
253
|
+
'Share-link enumerator stopped at its internal cap; report reflects a partial dataset.';
|
|
254
|
+
}
|
|
255
|
+
return enforceResponseBudget(initial);
|
|
256
|
+
}
|
|
257
|
+
// ── Helpers ─────────────────────────────────────────────────────────
|
|
258
|
+
function sumViews(entries) {
|
|
259
|
+
let total = 0;
|
|
260
|
+
for (const e of entries)
|
|
261
|
+
total += e.total_views;
|
|
262
|
+
return total;
|
|
263
|
+
}
|
|
264
|
+
function compareEntries(a, b, sortBy) {
|
|
265
|
+
// Primary key per `sort_by`, descending. Ties broken by total_views
|
|
266
|
+
// desc, then share_link_count desc, then id ascending so output is
|
|
267
|
+
// stable across runs.
|
|
268
|
+
const primaryDiff = primaryDiffFor(a, b, sortBy);
|
|
269
|
+
if (primaryDiff !== 0)
|
|
270
|
+
return primaryDiff;
|
|
271
|
+
if (b.total_views !== a.total_views)
|
|
272
|
+
return b.total_views - a.total_views;
|
|
273
|
+
if (b.share_link_count !== a.share_link_count) {
|
|
274
|
+
return b.share_link_count - a.share_link_count;
|
|
275
|
+
}
|
|
276
|
+
return a.id.localeCompare(b.id);
|
|
277
|
+
}
|
|
278
|
+
function primaryDiffFor(a, b, sortBy) {
|
|
279
|
+
if (sortBy === 'total_views')
|
|
280
|
+
return b.total_views - a.total_views;
|
|
281
|
+
if (sortBy === 'share_link_count') {
|
|
282
|
+
return b.share_link_count - a.share_link_count;
|
|
283
|
+
}
|
|
284
|
+
// mean_views_per_share
|
|
285
|
+
return b.mean_views_per_share - a.mean_views_per_share;
|
|
286
|
+
}
|
|
287
|
+
function resolveDateRange(rawFrom, rawTo) {
|
|
288
|
+
// Defaults: when both omitted, look back DEFAULT_LOOKBACK_DAYS from now.
|
|
289
|
+
if (rawFrom === undefined && rawTo === undefined) {
|
|
290
|
+
const nowMs = Date.now();
|
|
291
|
+
const fromMs = nowMs - DEFAULT_LOOKBACK_DAYS * 24 * 60 * 60 * 1000;
|
|
292
|
+
return { effectiveFrom: fromMs, effectiveTo: nowMs };
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
effectiveFrom: parseLowerBound(rawFrom),
|
|
296
|
+
effectiveTo: parseUpperBound(rawTo),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function parseLowerBound(value) {
|
|
300
|
+
if (value === undefined)
|
|
301
|
+
return null;
|
|
302
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
303
|
+
return Date.parse(`${value}T00:00:00.000Z`);
|
|
304
|
+
}
|
|
305
|
+
return Date.parse(value);
|
|
306
|
+
}
|
|
307
|
+
function parseUpperBound(value) {
|
|
308
|
+
if (value === undefined)
|
|
309
|
+
return null;
|
|
310
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
311
|
+
return Date.parse(`${value}T23:59:59.999Z`);
|
|
312
|
+
}
|
|
313
|
+
return Date.parse(value);
|
|
314
|
+
}
|
|
315
|
+
function isoFromMs(ms) {
|
|
316
|
+
if (ms === null)
|
|
317
|
+
return null;
|
|
318
|
+
return new Date(ms).toISOString();
|
|
319
|
+
}
|
|
320
|
+
function computeMedian(values) {
|
|
321
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
322
|
+
const n = sorted.length;
|
|
323
|
+
if (n === 0)
|
|
324
|
+
return 0;
|
|
325
|
+
const mid = Math.floor(n / 2);
|
|
326
|
+
if (n % 2 === 1)
|
|
327
|
+
return sorted[mid] ?? 0;
|
|
328
|
+
const left = sorted[mid - 1] ?? 0;
|
|
329
|
+
const right = sorted[mid] ?? 0;
|
|
330
|
+
return (left + right) / 2;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Linear-interpolation percentile (matches the Excel `PERCENTILE` /
|
|
334
|
+
* NumPy default convention). Returns `null` when the input is empty.
|
|
335
|
+
*
|
|
336
|
+
* `q` is in [0, 1].
|
|
337
|
+
*/
|
|
338
|
+
function percentile(values, q) {
|
|
339
|
+
if (values.length === 0)
|
|
340
|
+
return null;
|
|
341
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
342
|
+
if (sorted.length === 1)
|
|
343
|
+
return sorted[0] ?? null;
|
|
344
|
+
const rank = q * (sorted.length - 1);
|
|
345
|
+
const lo = Math.floor(rank);
|
|
346
|
+
const hi = Math.ceil(rank);
|
|
347
|
+
if (lo === hi)
|
|
348
|
+
return sorted[lo] ?? null;
|
|
349
|
+
const loVal = sorted[lo] ?? 0;
|
|
350
|
+
const hiVal = sorted[hi] ?? 0;
|
|
351
|
+
return loVal + (hiVal - loVal) * (rank - lo);
|
|
352
|
+
}
|
|
353
|
+
function computePerformanceBuckets(views) {
|
|
354
|
+
if (views.length === 0) {
|
|
355
|
+
return {
|
|
356
|
+
high: 0,
|
|
357
|
+
medium: 0,
|
|
358
|
+
low: 0,
|
|
359
|
+
thresholds: { p80_views: null, p50_views: null },
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
const p80 = percentile(views, 0.8);
|
|
363
|
+
const p50 = percentile(views, 0.5);
|
|
364
|
+
let high = 0;
|
|
365
|
+
let medium = 0;
|
|
366
|
+
let low = 0;
|
|
367
|
+
for (const v of views) {
|
|
368
|
+
if (p80 !== null && v >= p80) {
|
|
369
|
+
high += 1;
|
|
370
|
+
}
|
|
371
|
+
else if (p50 !== null && v >= p50) {
|
|
372
|
+
medium += 1;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
low += 1;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return {
|
|
379
|
+
high,
|
|
380
|
+
medium,
|
|
381
|
+
low,
|
|
382
|
+
thresholds: { p80_views: p80, p50_views: p50 },
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
// ── Response-budget enforcement ─────────────────────────────────────
|
|
386
|
+
const REDUCED_TOP_LIMIT = 10;
|
|
387
|
+
/**
|
|
388
|
+
* Aggregate reports tend to be small (totals + top-N + bucket counts),
|
|
389
|
+
* but a very large `top_n` could push us over budget. If the serialised
|
|
390
|
+
* report exceeds {@link HARD_CAP_TOKENS}, trim the top-asset list and
|
|
391
|
+
* mark `truncated: true`.
|
|
392
|
+
*/
|
|
393
|
+
function enforceResponseBudget(report) {
|
|
394
|
+
if (estimateTokens(JSON.stringify(report)) <= HARD_CAP_TOKENS) {
|
|
395
|
+
return report;
|
|
396
|
+
}
|
|
397
|
+
const trimmed = {
|
|
398
|
+
...report,
|
|
399
|
+
top_assets: report.top_assets.slice(0, REDUCED_TOP_LIMIT),
|
|
400
|
+
truncated: true,
|
|
401
|
+
truncation_reason: report.truncation_reason !== undefined
|
|
402
|
+
? `${report.truncation_reason} Additionally, the top-assets list was trimmed to fit the response budget.`
|
|
403
|
+
: 'Top-assets list was trimmed to fit the response budget.',
|
|
404
|
+
};
|
|
405
|
+
return trimmed;
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=report-top-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-top-assets.js","sourceRoot":"","sources":["../../../src/tools/insights/report-top-assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { CollageClient } from '../client.js';
|
|
3
|
+
export declare const ListCategoriesInputSchema: z.ZodObject<{
|
|
4
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
5
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
cursor?: string | undefined;
|
|
8
|
+
page_size?: number | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
cursor?: string | undefined;
|
|
11
|
+
page_size?: number | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export type ListCategoriesInput = z.infer<typeof ListCategoriesInputSchema>;
|
|
14
|
+
export declare const ListCategoriesOutputSchema: z.ZodObject<{
|
|
15
|
+
items: z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
|
|
17
|
+
workspace_id: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
|
|
18
|
+
user_id: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodNumber, z.ZodString]>>>;
|
|
19
|
+
parent_id: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodNumber, z.ZodString]>>>;
|
|
20
|
+
folder_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
21
|
+
category_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
|
+
integration_type: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
created_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodString, z.ZodString]>>>;
|
|
24
|
+
updated_at: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodString, z.ZodString]>>>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
workspace_id: string | number;
|
|
27
|
+
id: string | number;
|
|
28
|
+
folder_name?: string | null | undefined;
|
|
29
|
+
parent_id?: string | number | null | undefined;
|
|
30
|
+
user_id?: string | number | null | undefined;
|
|
31
|
+
created_at?: string | null | undefined;
|
|
32
|
+
updated_at?: string | null | undefined;
|
|
33
|
+
category_path?: string | null | undefined;
|
|
34
|
+
integration_type?: number | undefined;
|
|
35
|
+
}, {
|
|
36
|
+
workspace_id: string | number;
|
|
37
|
+
id: string | number;
|
|
38
|
+
folder_name?: string | null | undefined;
|
|
39
|
+
parent_id?: string | number | null | undefined;
|
|
40
|
+
user_id?: string | number | null | undefined;
|
|
41
|
+
created_at?: string | null | undefined;
|
|
42
|
+
updated_at?: string | null | undefined;
|
|
43
|
+
category_path?: string | null | undefined;
|
|
44
|
+
integration_type?: number | undefined;
|
|
45
|
+
}>, "many">;
|
|
46
|
+
next_cursor: z.ZodNullable<z.ZodString>;
|
|
47
|
+
total_estimate: z.ZodNullable<z.ZodNumber>;
|
|
48
|
+
request_id: z.ZodString;
|
|
49
|
+
}, "strip", z.ZodTypeAny, {
|
|
50
|
+
request_id: string;
|
|
51
|
+
items: {
|
|
52
|
+
workspace_id: string | number;
|
|
53
|
+
id: string | number;
|
|
54
|
+
folder_name?: string | null | undefined;
|
|
55
|
+
parent_id?: string | number | null | undefined;
|
|
56
|
+
user_id?: string | number | null | undefined;
|
|
57
|
+
created_at?: string | null | undefined;
|
|
58
|
+
updated_at?: string | null | undefined;
|
|
59
|
+
category_path?: string | null | undefined;
|
|
60
|
+
integration_type?: number | undefined;
|
|
61
|
+
}[];
|
|
62
|
+
next_cursor: string | null;
|
|
63
|
+
total_estimate: number | null;
|
|
64
|
+
}, {
|
|
65
|
+
request_id: string;
|
|
66
|
+
items: {
|
|
67
|
+
workspace_id: string | number;
|
|
68
|
+
id: string | number;
|
|
69
|
+
folder_name?: string | null | undefined;
|
|
70
|
+
parent_id?: string | number | null | undefined;
|
|
71
|
+
user_id?: string | number | null | undefined;
|
|
72
|
+
created_at?: string | null | undefined;
|
|
73
|
+
updated_at?: string | null | undefined;
|
|
74
|
+
category_path?: string | null | undefined;
|
|
75
|
+
integration_type?: number | undefined;
|
|
76
|
+
}[];
|
|
77
|
+
next_cursor: string | null;
|
|
78
|
+
total_estimate: number | null;
|
|
79
|
+
}>;
|
|
80
|
+
export type ListCategoriesOutput = z.infer<typeof ListCategoriesOutputSchema>;
|
|
81
|
+
/**
|
|
82
|
+
* Narrow client surface so tests can stub without the full CollageClient.
|
|
83
|
+
*/
|
|
84
|
+
export type ListCategoriesClient = Pick<CollageClient, 'listAllCategoriesRecursive'>;
|
|
85
|
+
export declare const LIST_CATEGORIES_DESCRIPTION: string;
|
|
86
|
+
export declare function buildListCategoriesHandler(client: ListCategoriesClient): (args: ListCategoriesInput) => Promise<{
|
|
87
|
+
isError: boolean;
|
|
88
|
+
content: {
|
|
89
|
+
type: "text";
|
|
90
|
+
text: string;
|
|
91
|
+
}[];
|
|
92
|
+
structuredContent: {
|
|
93
|
+
error: {
|
|
94
|
+
code: "UNAUTHORIZED" | "FORBIDDEN" | "NOT_FOUND" | "VALIDATION" | "RATE_LIMITED" | "UPSTREAM" | "CONFIRMATION_STALE" | "CONFIRMATION_MISSING" | "CONFIRMATION_STATE_DIVERGED" | "ENTITLEMENT" | "INTERNAL";
|
|
95
|
+
message: string;
|
|
96
|
+
retriable: boolean;
|
|
97
|
+
cause?: z.objectOutputType<{
|
|
98
|
+
upstream_status: z.ZodOptional<z.ZodNumber>;
|
|
99
|
+
request_id: z.ZodOptional<z.ZodString>;
|
|
100
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
101
|
+
};
|
|
102
|
+
request_id: string;
|
|
103
|
+
};
|
|
104
|
+
} | {
|
|
105
|
+
content: {
|
|
106
|
+
type: "text";
|
|
107
|
+
text: string;
|
|
108
|
+
}[];
|
|
109
|
+
structuredContent: {
|
|
110
|
+
request_id: string;
|
|
111
|
+
items: {
|
|
112
|
+
workspace_id: string | number;
|
|
113
|
+
id: string | number;
|
|
114
|
+
folder_name?: string | null | undefined;
|
|
115
|
+
parent_id?: string | number | null | undefined;
|
|
116
|
+
user_id?: string | number | null | undefined;
|
|
117
|
+
created_at?: string | null | undefined;
|
|
118
|
+
updated_at?: string | null | undefined;
|
|
119
|
+
category_path?: string | null | undefined;
|
|
120
|
+
integration_type?: number | undefined;
|
|
121
|
+
}[];
|
|
122
|
+
next_cursor: string | null;
|
|
123
|
+
total_estimate: number | null;
|
|
124
|
+
};
|
|
125
|
+
isError?: undefined;
|
|
126
|
+
}>;
|
|
127
|
+
//# sourceMappingURL=list-categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-categories.d.ts","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,eAAO,MAAM,yBAAyB;;;;;;;;;EAGpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,aAAa,EACb,4BAA4B,CAC7B,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAK1B,CAAC;AAEf,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,IACvD,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CxC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// ── list_categories (read-only) ──────────────────────────────────────
|
|
2
|
+
// Returns the workspace folder tree as a flat list with `parent_id`
|
|
3
|
+
// populated on every row (null for roots). Backed by
|
|
4
|
+
// CollageClient.listAllCategoriesRecursive(), which combines
|
|
5
|
+
// GET /digital-assets/category/all-category-list (roots only — upstream
|
|
6
|
+
// is flat-by-design) with GET /digital-assets/category/sub-category-list
|
|
7
|
+
// (per-parent children) so callers see the full tree, not just roots.
|
|
8
|
+
//
|
|
9
|
+
// Client-side cursor pagination keeps very large trees within the
|
|
10
|
+
// response token budget.
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { buildPaginatedResponse, clampPageSize, decodeCursor, } from '../conventions/pagination.js';
|
|
13
|
+
import { CategorySchema } from '../types.js';
|
|
14
|
+
export const ListCategoriesInputSchema = z.object({
|
|
15
|
+
cursor: z.string().optional(),
|
|
16
|
+
page_size: z.number().int().min(1).max(500).optional(),
|
|
17
|
+
});
|
|
18
|
+
export const ListCategoriesOutputSchema = z.object({
|
|
19
|
+
items: z.array(CategorySchema),
|
|
20
|
+
next_cursor: z.string().nullable(),
|
|
21
|
+
total_estimate: z.number().nullable(),
|
|
22
|
+
request_id: z.string(),
|
|
23
|
+
});
|
|
24
|
+
export const LIST_CATEGORIES_DESCRIPTION = 'List the full workspace folder tree (categories) as a flat list. Each ' +
|
|
25
|
+
'row carries the folder id, parent_id (null for roots), folder_name, and ' +
|
|
26
|
+
'category_path — sub-folders are included, not just roots. ' +
|
|
27
|
+
'Cursor-paginated so very large trees stay within the response budget. ' +
|
|
28
|
+
'Read-only.';
|
|
29
|
+
export function buildListCategoriesHandler(client) {
|
|
30
|
+
return async (args) => {
|
|
31
|
+
const pageSize = clampPageSize(args.page_size);
|
|
32
|
+
const offset = args.cursor !== undefined ? decodeCursor(args.cursor) : 0;
|
|
33
|
+
const result = await client.listAllCategoriesRecursive();
|
|
34
|
+
if (!result.ok) {
|
|
35
|
+
return {
|
|
36
|
+
isError: true,
|
|
37
|
+
content: [
|
|
38
|
+
{
|
|
39
|
+
type: 'text',
|
|
40
|
+
text: `list_categories failed: ${result.error.code} — ${result.error.message}`,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
structuredContent: {
|
|
44
|
+
error: result.error,
|
|
45
|
+
request_id: result.request_id,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const all = result.data;
|
|
50
|
+
const paged = buildPaginatedResponse(all.slice(offset, offset + pageSize), offset, pageSize, all.length);
|
|
51
|
+
const output = {
|
|
52
|
+
items: paged.items,
|
|
53
|
+
next_cursor: paged.next_cursor,
|
|
54
|
+
total_estimate: paged.total_estimate,
|
|
55
|
+
request_id: result.request_id,
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
content: [
|
|
59
|
+
{
|
|
60
|
+
type: 'text',
|
|
61
|
+
text: JSON.stringify(output, null, 2),
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
structuredContent: output,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=list-categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-categories.js","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,oEAAoE;AACpE,qDAAqD;AACrD,6DAA6D;AAC7D,wEAAwE;AACxE,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,kEAAkE;AAClE,yBAAyB;AAEzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAWH,MAAM,CAAC,MAAM,2BAA2B,GACtC,wEAAwE;IACxE,0EAA0E;IAC1E,4DAA4D;IAC5D,wEAAwE;IACxE,YAAY,CAAC;AAEf,MAAM,UAAU,0BAA0B,CAAC,MAA4B;IACrE,OAAO,KAAK,EAAE,IAAyB,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,0BAA0B,EAAE,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2BAA2B,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;qBAC/E;iBACF;gBACD,iBAAiB,EAAE;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B;aACF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAe,MAAM,CAAC,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,sBAAsB,CAClC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,EACpC,MAAM,EACN,QAAQ,EACR,GAAG,CAAC,MAAM,CACX,CAAC;QACF,MAAM,MAAM,GAAyB;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;YACD,iBAAiB,EAAE,MAAM;SAC1B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|