@cliangdev/conductor 0.18.0 → 0.20.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/assets/claude/skills/conductor-publisher/SKILL.md +130 -0
- package/assets/cli-manifest.json +70 -6
- package/dist/lib/mp4-probe.d.ts +20 -0
- package/dist/lib/mp4-probe.d.ts.map +1 -0
- package/dist/lib/mp4-probe.js +163 -0
- package/dist/lib/mp4-probe.js.map +1 -0
- package/dist/lib/plugin-assets.d.ts.map +1 -1
- package/dist/lib/plugin-assets.js +1 -0
- package/dist/lib/plugin-assets.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +197 -29
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/tools/issues.d.ts.map +1 -1
- package/dist/mcp/tools/issues.js +6 -10
- package/dist/mcp/tools/issues.js.map +1 -1
- package/dist/mcp/tools/marketing.d.ts +8 -2
- package/dist/mcp/tools/marketing.d.ts.map +1 -1
- package/dist/mcp/tools/marketing.js +99 -9
- package/dist/mcp/tools/marketing.js.map +1 -1
- package/dist/mcp/tools/posts.d.ts +149 -0
- package/dist/mcp/tools/posts.d.ts.map +1 -0
- package/dist/mcp/tools/posts.js +447 -0
- package/dist/mcp/tools/posts.js.map +1 -0
- package/dist/mcp/tools/workflows.d.ts.map +1 -1
- package/dist/mcp/tools/workflows.js +5 -0
- package/dist/mcp/tools/workflows.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,11 @@ export interface PublishTargetSelection {
|
|
|
6
6
|
* destination — the one a human posts by hand — of which there is exactly one per platform.
|
|
7
7
|
*/
|
|
8
8
|
connectionId?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* The surface this destination publishes to: feed (default), reel or story. From that platform's
|
|
11
|
+
* `formats` in list_publish_targets — selecting one it does not offer is refused.
|
|
12
|
+
*/
|
|
13
|
+
format?: 'feed' | 'reel' | 'story';
|
|
9
14
|
publishOptions?: Record<string, unknown>;
|
|
10
15
|
/**
|
|
11
16
|
* Copy for this destination alone, replacing the Post's caption here. Omitted means the Post's own —
|
|
@@ -36,8 +41,9 @@ export declare function setPublishTargets(params: {
|
|
|
36
41
|
*/
|
|
37
42
|
export declare function uploadAsset(params: {
|
|
38
43
|
issueId: string;
|
|
39
|
-
filePath
|
|
40
|
-
|
|
44
|
+
filePath?: string;
|
|
45
|
+
url?: string;
|
|
46
|
+
type?: string;
|
|
41
47
|
label?: string;
|
|
42
48
|
width?: number;
|
|
43
49
|
height?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/marketing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"marketing.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/marketing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AA+DrC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAqBD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC;AAwDD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,sBAAsB,EAAE,CAAA;CAAE,EAC9D,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAYlC;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,EACD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBlC;AAgHD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACtF,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAalC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import {
|
|
1
|
+
import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { basename, extname, join } from 'node:path';
|
|
4
|
+
import { probeVideo } from '../../lib/mp4-probe.js';
|
|
3
5
|
import { apiGet, apiPost, apiPut, apiDelete, putBytes } from '../api.js';
|
|
4
6
|
/**
|
|
5
7
|
* The publishing pipeline for a Post, end to end from an agent: which connected accounts a project can
|
|
@@ -57,12 +59,61 @@ function missingVideoMeasurements(contentType, asset) {
|
|
|
57
59
|
return ['width', 'height', 'durationSeconds'].filter((field) => asset[field] === undefined || asset[field] === null);
|
|
58
60
|
}
|
|
59
61
|
export async function listPublishTargets(params, config) {
|
|
60
|
-
const
|
|
62
|
+
const accounts = await apiGet(`${V2_PROJECT(config)}/publish-targets`, config);
|
|
61
63
|
if (!params.issueId) {
|
|
62
|
-
return {
|
|
64
|
+
return { accounts };
|
|
63
65
|
}
|
|
64
66
|
const selected = await apiGet(`${workItemBase(config, params.issueId)}/publish-targets`, config);
|
|
65
|
-
return {
|
|
67
|
+
return { accounts, selected };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The asset type a file on this Work Item is recorded under when the caller did not say: the first one
|
|
71
|
+
* its Workflow declares. The UI makes the same choice — on a publishing Workflow the type changes nothing
|
|
72
|
+
* a person can see, and asking an agent to name `instagram_post` for a file bound for Facebook was the
|
|
73
|
+
* kind of magic string that made the pipeline hard to drive.
|
|
74
|
+
*/
|
|
75
|
+
async function defaultAssetType(config, issueId) {
|
|
76
|
+
const item = await apiGet(workItemBase(config, issueId), config);
|
|
77
|
+
const slug = item.workflow;
|
|
78
|
+
const workflows = await apiGet(`/api/v1/projects/${config.projectId}/workflows?lifecycle=true`, config);
|
|
79
|
+
const bound = (Array.isArray(workflows) ? workflows : []).find((w) => w['slug'] === slug);
|
|
80
|
+
const def = bound?.['definition'];
|
|
81
|
+
const types = def?.['asset_types'] ?? [];
|
|
82
|
+
if (types.length === 0) {
|
|
83
|
+
throw new Error(`Workflow ${slug ?? '(unknown)'} declares no asset types, so a file cannot be attached to this Work Item.`);
|
|
84
|
+
}
|
|
85
|
+
return types[0];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Fetches a public URL to a temp file so it can go through the same mint → PUT → confirm path a local file
|
|
89
|
+
* does. The server never fetches a URL itself; this runs on the machine the MCP server runs on.
|
|
90
|
+
*/
|
|
91
|
+
async function downloadToTemp(url) {
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = new URL(url);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw new Error(`"${url}" is not a valid URL`);
|
|
98
|
+
}
|
|
99
|
+
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
100
|
+
throw new Error(`Only http(s) URLs can be fetched, not ${parsed.protocol}`);
|
|
101
|
+
}
|
|
102
|
+
const response = await fetch(parsed);
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
throw new Error(`Fetching ${url} failed: HTTP ${response.status}`);
|
|
105
|
+
}
|
|
106
|
+
const dir = await mkdtemp(join(tmpdir(), 'conductor-media-'));
|
|
107
|
+
let name = basename(parsed.pathname) || 'download';
|
|
108
|
+
const headerType = response.headers.get('content-type')?.split(';')[0]?.trim().toLowerCase() ?? null;
|
|
109
|
+
if (!extname(name) && headerType) {
|
|
110
|
+
const ext = Object.entries(MEDIA_TYPES).find(([, type]) => type === headerType)?.[0];
|
|
111
|
+
if (ext)
|
|
112
|
+
name += ext;
|
|
113
|
+
}
|
|
114
|
+
const filePath = join(dir, name);
|
|
115
|
+
await writeFile(filePath, new Uint8Array(await response.arrayBuffer()));
|
|
116
|
+
return { filePath, contentType: headerType, cleanup: () => rm(dir, { recursive: true, force: true }) };
|
|
66
117
|
}
|
|
67
118
|
export async function setPublishTargets(params, config) {
|
|
68
119
|
if (!Array.isArray(params.targets)) {
|
|
@@ -81,6 +132,27 @@ export async function setPublishTargets(params, config) {
|
|
|
81
132
|
* did create.
|
|
82
133
|
*/
|
|
83
134
|
export async function uploadAsset(params, config) {
|
|
135
|
+
if (!params.filePath && !params.url) {
|
|
136
|
+
throw new Error('Pass filePath (a file on this machine) or url (a public http(s) URL).');
|
|
137
|
+
}
|
|
138
|
+
let filePath = params.filePath;
|
|
139
|
+
let cleanup;
|
|
140
|
+
let fetchedType = null;
|
|
141
|
+
if (!params.filePath && params.url) {
|
|
142
|
+
const downloaded = await downloadToTemp(params.url);
|
|
143
|
+
filePath = downloaded.filePath;
|
|
144
|
+
cleanup = downloaded.cleanup;
|
|
145
|
+
fetchedType = downloaded.contentType;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
return await uploadFile({ ...params, filePath, type: params.type ?? (await defaultAssetType(config, params.issueId)) }, fetchedType, config);
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
if (cleanup)
|
|
152
|
+
await cleanup();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function uploadFile(params, fetchedType, config) {
|
|
84
156
|
let bytes;
|
|
85
157
|
try {
|
|
86
158
|
bytes = new Uint8Array(await readFile(params.filePath));
|
|
@@ -89,17 +161,35 @@ export async function uploadAsset(params, config) {
|
|
|
89
161
|
throw new Error(`Cannot read "${params.filePath}": ${err instanceof Error ? err.message : String(err)}`);
|
|
90
162
|
}
|
|
91
163
|
const filename = basename(params.filePath);
|
|
92
|
-
const
|
|
164
|
+
const guessed = mediaTypeFor(filename);
|
|
165
|
+
const contentType = guessed === DEFAULT_MEDIA_TYPE && fetchedType ? fetchedType : guessed;
|
|
93
166
|
const base = workItemBase(config, params.issueId);
|
|
167
|
+
// A video's measurements come from the client — the server has no container parser by design — and
|
|
168
|
+
// the approval gate blocks without them. Measure here, the way the browser does, unless the caller
|
|
169
|
+
// already did; a caller's numbers always win.
|
|
170
|
+
let width = params.width;
|
|
171
|
+
let height = params.height;
|
|
172
|
+
let durationSeconds = params.durationSeconds;
|
|
173
|
+
if (contentType.startsWith('video/') && (width == null || height == null || durationSeconds == null)) {
|
|
174
|
+
try {
|
|
175
|
+
const probe = await probeVideo(params.filePath);
|
|
176
|
+
width = width ?? probe.width ?? undefined;
|
|
177
|
+
height = height ?? probe.height ?? undefined;
|
|
178
|
+
durationSeconds = durationSeconds ?? probe.durationSeconds ?? undefined;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Unreadable container: fall through and let the read-back warning say what is missing.
|
|
182
|
+
}
|
|
183
|
+
}
|
|
94
184
|
const ticket = await apiPost(`${base}/assets/uploads`, {
|
|
95
185
|
type: params.type,
|
|
96
186
|
label: params.label,
|
|
97
187
|
filename,
|
|
98
188
|
contentType,
|
|
99
189
|
sizeBytes: bytes.byteLength,
|
|
100
|
-
width
|
|
101
|
-
height
|
|
102
|
-
durationSeconds
|
|
190
|
+
width,
|
|
191
|
+
height,
|
|
192
|
+
durationSeconds,
|
|
103
193
|
}, config);
|
|
104
194
|
try {
|
|
105
195
|
await putBytes(ticket.uploadUrl, contentType, bytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing.js","sourceRoot":"","sources":["../../../src/mcp/tools/marketing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"marketing.js","sourceRoot":"","sources":["../../../src/mcp/tools/marketing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Config } from '../config.js';
|
|
2
|
+
export interface MediaInput {
|
|
3
|
+
/** A file on this machine. */
|
|
4
|
+
path?: string;
|
|
5
|
+
/** A public URL — fetched here, on the machine the server runs on, then uploaded like a local file. */
|
|
6
|
+
url?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
durationSeconds?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface TargetInput {
|
|
13
|
+
platform: string;
|
|
14
|
+
/** The connected account's label as list_publish_targets shows it, or its connectionId. Omitted = manual. */
|
|
15
|
+
account?: string;
|
|
16
|
+
/** feed (default), reel or story — from that platform's `formats` in list_publish_targets. */
|
|
17
|
+
format?: 'feed' | 'reel' | 'story';
|
|
18
|
+
captionOverride?: string;
|
|
19
|
+
/** Indexes into `media` (0-based) or asset ids. Order is content. */
|
|
20
|
+
assetIds?: Array<string | number>;
|
|
21
|
+
options?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface CreatePostParams {
|
|
24
|
+
text: string;
|
|
25
|
+
title?: string;
|
|
26
|
+
media?: MediaInput[];
|
|
27
|
+
targets: TargetInput[];
|
|
28
|
+
scheduledFor?: string;
|
|
29
|
+
timezone?: string;
|
|
30
|
+
submit?: boolean;
|
|
31
|
+
reviewers?: string[];
|
|
32
|
+
workflow?: string;
|
|
33
|
+
}
|
|
34
|
+
interface AccountOption {
|
|
35
|
+
platform: string;
|
|
36
|
+
connectionId: string | null;
|
|
37
|
+
label: string;
|
|
38
|
+
lane: string;
|
|
39
|
+
healthStatus?: string | null;
|
|
40
|
+
optionKeys?: string[];
|
|
41
|
+
formats?: string[];
|
|
42
|
+
}
|
|
43
|
+
interface Finding {
|
|
44
|
+
code: string;
|
|
45
|
+
message: string;
|
|
46
|
+
targetId?: string | null;
|
|
47
|
+
}
|
|
48
|
+
interface Preflight {
|
|
49
|
+
publishing: boolean;
|
|
50
|
+
ready: boolean;
|
|
51
|
+
blockers: Finding[];
|
|
52
|
+
warnings: Finding[];
|
|
53
|
+
nextTransition?: {
|
|
54
|
+
to: string;
|
|
55
|
+
label?: string | null;
|
|
56
|
+
requiresReview: boolean;
|
|
57
|
+
} | null;
|
|
58
|
+
consent: {
|
|
59
|
+
required: boolean;
|
|
60
|
+
verdict: string;
|
|
61
|
+
};
|
|
62
|
+
review: {
|
|
63
|
+
gated: boolean;
|
|
64
|
+
assignedReviewers: number;
|
|
65
|
+
satisfied: boolean;
|
|
66
|
+
reviewerRole?: string | null;
|
|
67
|
+
};
|
|
68
|
+
earliestFireTime?: string | null;
|
|
69
|
+
}
|
|
70
|
+
interface WorkflowSummary {
|
|
71
|
+
slug: string;
|
|
72
|
+
noun?: string;
|
|
73
|
+
types: string[];
|
|
74
|
+
assetTypes: string[];
|
|
75
|
+
statuses: unknown[];
|
|
76
|
+
}
|
|
77
|
+
export declare function getPreflight(config: Config, postId: string): Promise<Preflight>;
|
|
78
|
+
/**
|
|
79
|
+
* The Workflow whose items publish: the one whose asset types name a platform the project can publish
|
|
80
|
+
* to. With one such Workflow it is chosen silently; with several the caller has to say, because a Post
|
|
81
|
+
* on the wrong lifecycle is not a small mistake.
|
|
82
|
+
*/
|
|
83
|
+
export declare function pickPublishingWorkflow(config: Config, accounts: AccountOption[], slug?: string): Promise<WorkflowSummary>;
|
|
84
|
+
/** The next quarter-hour at or after `earliest`, so "no time given" lands on a tidy calendar slot. */
|
|
85
|
+
export declare function nextQuarterHour(earliest: Date): Date;
|
|
86
|
+
/**
|
|
87
|
+
* Assigns reviewers by name, email or id. Only members holding the REVIEWER role can be assigned — the
|
|
88
|
+
* backend refuses anyone else — so a wrong role is reported by name rather than as a bare 4xx.
|
|
89
|
+
*/
|
|
90
|
+
export declare function assignReviewers(config: Config, postId: string, reviewers: string[]): Promise<{
|
|
91
|
+
assigned: Array<{
|
|
92
|
+
userId: string;
|
|
93
|
+
name: string | null;
|
|
94
|
+
}>;
|
|
95
|
+
problems: string[];
|
|
96
|
+
}>;
|
|
97
|
+
/**
|
|
98
|
+
* The one call. Creates the Post, uploads its media (from paths or URLs, measuring video here), chooses
|
|
99
|
+
* its destinations by account name, schedules it at the server's earliest acceptable time when none is
|
|
100
|
+
* given, and — unless told not to — submits it for review with the named reviewers. Returns the
|
|
101
|
+
* confirmation table plus whatever the gate still wants.
|
|
102
|
+
*/
|
|
103
|
+
export declare function createPost(params: CreatePostParams, config: Config): Promise<Record<string, unknown>>;
|
|
104
|
+
/** Where a Post stands: status, every destination's outcome, and what the gate still wants. Always live. */
|
|
105
|
+
export declare function getPostStatus(params: {
|
|
106
|
+
postId: string;
|
|
107
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
108
|
+
/** Hands a Post to review: assigns the named reviewers, then takes the move the preflight names. */
|
|
109
|
+
export declare function submitPost(params: {
|
|
110
|
+
postId: string;
|
|
111
|
+
reviewers?: string[];
|
|
112
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
113
|
+
/** Posts across every publishing Workflow, with each one's destinations, newest schedule first. */
|
|
114
|
+
export declare function listPosts(params: {
|
|
115
|
+
status?: string;
|
|
116
|
+
since?: string;
|
|
117
|
+
until?: string;
|
|
118
|
+
platform?: string;
|
|
119
|
+
limit?: number;
|
|
120
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
121
|
+
/**
|
|
122
|
+
* Records a review verdict as the caller's user. The backend requires an assigned reviewer holding the
|
|
123
|
+
* REVIEWER role (or an ADMIN who was assigned) — a project API key cannot review, and a user key without
|
|
124
|
+
* the role is refused; both come back as the server's own message. Approval on MARKETING schedules the
|
|
125
|
+
* Post in the same request; `autoTransition` says how far it got.
|
|
126
|
+
*/
|
|
127
|
+
export declare function submitReview(params: {
|
|
128
|
+
postId: string;
|
|
129
|
+
verdict: 'approve' | 'request_changes' | string;
|
|
130
|
+
summary?: string;
|
|
131
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
132
|
+
/** What happened to a Post after it went out: each destination's counters, as the feeds read them back. */
|
|
133
|
+
export declare function getPostAnalytics(params: {
|
|
134
|
+
postId: string;
|
|
135
|
+
since?: string;
|
|
136
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
137
|
+
/** The project's best-performing destinations by one metric — views by default. */
|
|
138
|
+
export declare function listTopPosts(params: {
|
|
139
|
+
metric?: string;
|
|
140
|
+
platform?: string;
|
|
141
|
+
since?: string;
|
|
142
|
+
limit?: number;
|
|
143
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
144
|
+
/** Every Asset on a Work Item — the ids set_publish_targets.assetIds wants. */
|
|
145
|
+
export declare function listAssets(params: {
|
|
146
|
+
issueId: string;
|
|
147
|
+
}, config: Config): Promise<Record<string, unknown>>;
|
|
148
|
+
export {};
|
|
149
|
+
//# sourceMappingURL=posts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/posts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AA0BrC,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,6GAA6G;IAC7G,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,UAAU,SAAS;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;IACtF,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACvG,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAgCD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAErF;AAOD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,CAqB1B;AAkCD,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAQpD;AAcD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8B3F;AAsCD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4G3G;AAoDD,4GAA4G;AAC5G,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGhH;AAED,oGAAoG;AACpG,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAChD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgBlC;AAED,mGAAmG;AACnG,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9F,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6ClC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,iBAAiB,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7F,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiBlC;AAUD,2GAA2G;AAC3G,wBAAsB,gBAAgB,CACpC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAalC;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9E,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASlC;AAED,+EAA+E;AAC/E,wBAAsB,UAAU,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAG9G"}
|