mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-14 13:22:37 +00:00
The daemon imports the plugin SDK at runtime, but the workspace was named @paseo/plugin and marked private, so it was never published. 0.5.0-beta.1 shipped @getpaseo/server depending on a package that does not exist and `npm install @getpaseo/cli@beta` failed with a 404 for every user. Two things hid it. sync-workspace-versions only rewrites deps matching @getpaseo/*, so the "*" range on @paseo/plugin survived untouched into the published tarball. And `npm pack --dry-run`, which is all release:check and CI run, lists files without ever resolving the dependency graph. Renaming to @getpaseo/plugin rather than publishing the old name: @paseo is not our scope on npm, so that name could never have been published at all. The rename also brings the package under the version-sync filter, which is what pins it correctly from here on. Plugins scaffolded against the old name still import @paseo/plugin. Both spellings resolve through plugin-sdk-specifiers.ts, tagged COMPAT with a removal date, so existing plugins keep loading. This does not repair 0.5.0-beta.1 — a published tarball's dependencies cannot be changed. The package publishes with the next release.
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { z } from "zod";
|
|
import type { AgentAttachment } from "@getpaseo/protocol/messages";
|
|
import { PluginAttachmentItemSchema, type PluginAttachmentItem } from "@getpaseo/plugin";
|
|
import type { UserComposerAttachment } from "@/attachments/types";
|
|
|
|
export const PluginResourceComposerAttachmentSchema = z.object({
|
|
kind: z.literal("plugin_resource"),
|
|
pluginId: z.string().min(1),
|
|
sourceId: z.string().min(1),
|
|
sourceTitle: z.string().min(1),
|
|
sourceIcon: z.string().min(1),
|
|
item: PluginAttachmentItemSchema,
|
|
});
|
|
|
|
export type PluginResourceComposerAttachment = z.infer<
|
|
typeof PluginResourceComposerAttachmentSchema
|
|
>;
|
|
|
|
export interface PluginResourceSourceIdentity {
|
|
pluginId: string;
|
|
sourceId: string;
|
|
sourceTitle: string;
|
|
sourceIcon: string;
|
|
}
|
|
|
|
export function createPluginResourceAttachment(
|
|
source: PluginResourceSourceIdentity,
|
|
item: PluginAttachmentItem,
|
|
): PluginResourceComposerAttachment {
|
|
return {
|
|
kind: "plugin_resource",
|
|
...source,
|
|
item,
|
|
};
|
|
}
|
|
|
|
export function togglePluginResourceAttachment(
|
|
current: UserComposerAttachment[],
|
|
attachment: PluginResourceComposerAttachment,
|
|
): UserComposerAttachment[] {
|
|
const matches = (candidate: UserComposerAttachment) =>
|
|
candidate.kind === "plugin_resource" &&
|
|
candidate.pluginId === attachment.pluginId &&
|
|
candidate.sourceId === attachment.sourceId &&
|
|
candidate.item.id === attachment.item.id;
|
|
if (current.some(matches)) {
|
|
return current.filter((candidate) => !matches(candidate));
|
|
}
|
|
return [...current, attachment];
|
|
}
|
|
|
|
export function pluginResourceAttachmentToAgentAttachment(
|
|
attachment: PluginResourceComposerAttachment,
|
|
): AgentAttachment {
|
|
return {
|
|
type: "text",
|
|
mimeType: "text/plain",
|
|
title: `${attachment.item.identifier} ${attachment.item.title}`,
|
|
text: attachment.item.text,
|
|
externalResource: {
|
|
provider: attachment.pluginId,
|
|
providerLabel: attachment.sourceTitle,
|
|
resourceType: attachment.item.resourceType,
|
|
id: attachment.item.id,
|
|
identifier: attachment.item.identifier,
|
|
title: attachment.item.title,
|
|
url: attachment.item.url,
|
|
},
|
|
};
|
|
}
|