@tickernelz/paperclip-pro-plugin-workspace-diff 2026.925.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.
@@ -0,0 +1,8 @@
1
+ export declare function resolveDefaultBaseRef(input: {
2
+ workspaceBaseRef?: unknown;
3
+ projectWorkspaceDefaultRef?: unknown;
4
+ projectWorkspaceRepoRef?: unknown;
5
+ }): string | null;
6
+ declare const plugin: import("@tickernelz/paperclip-pro-plugin-sdk").PaperclipPlugin;
7
+ export default plugin;
8
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAeA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,GAAG,MAAM,GAAG,IAAI,CAIhB;AAqBD,QAAA,MAAM,MAAM,gEA4DV,CAAC;eAEY,MAAM"}
package/dist/worker.js ADDED
@@ -0,0 +1,89 @@
1
+ import { definePlugin, runWorker } from "@tickernelz/paperclip-pro-plugin-sdk";
2
+ import { workspaceDiffQuerySchema } from "./contracts.js";
3
+ import { workspaceDiffService } from "./workspace-diff.js";
4
+ const PLUGIN_NAME = "workspace-diff";
5
+ function readString(value) {
6
+ return typeof value === "string" ? value.trim() : "";
7
+ }
8
+ function readOptionalString(value) {
9
+ const trimmed = readString(value);
10
+ return trimmed || null;
11
+ }
12
+ export function resolveDefaultBaseRef(input) {
13
+ return readOptionalString(input.workspaceBaseRef)
14
+ ?? readOptionalString(input.projectWorkspaceDefaultRef)
15
+ ?? readOptionalString(input.projectWorkspaceRepoRef);
16
+ }
17
+ async function resolveProjectWorkspaceDefaultBaseRef(input) {
18
+ if (!input.projectId)
19
+ return null;
20
+ const workspaces = await input.ctx.projects.listWorkspaces(input.projectId, input.companyId);
21
+ const projectWorkspace = input.projectWorkspaceId
22
+ ? workspaces.find((candidate) => candidate.id === input.projectWorkspaceId)
23
+ : workspaces.find((candidate) => candidate.isPrimary) ?? workspaces[0] ?? null;
24
+ return projectWorkspace
25
+ ? resolveDefaultBaseRef({
26
+ projectWorkspaceDefaultRef: projectWorkspace.defaultRef,
27
+ projectWorkspaceRepoRef: projectWorkspace.repoRef,
28
+ })
29
+ : null;
30
+ }
31
+ const plugin = definePlugin({
32
+ async setup(ctx) {
33
+ ctx.logger.info(`${PLUGIN_NAME} plugin setup`);
34
+ const workspaceDiff = workspaceDiffService();
35
+ ctx.data.register("workspace-diff", async (params) => {
36
+ const workspaceId = readString(params.workspaceId);
37
+ const companyId = readString(params.companyId);
38
+ if (!workspaceId || !companyId) {
39
+ throw new Error("workspaceId and companyId are required");
40
+ }
41
+ if (params.entityType === "project_workspace") {
42
+ const projectId = readString(params.projectId);
43
+ if (!projectId) {
44
+ throw new Error("projectId is required for project workspace diffs");
45
+ }
46
+ const workspaces = await ctx.projects.listWorkspaces(projectId, companyId);
47
+ const workspace = workspaces.find((candidate) => candidate.id === workspaceId);
48
+ if (!workspace) {
49
+ throw new Error("Workspace not found");
50
+ }
51
+ return workspaceDiff.getDiff({
52
+ id: workspace.id,
53
+ companyId,
54
+ cwd: workspace.path,
55
+ baseRef: resolveDefaultBaseRef({
56
+ projectWorkspaceDefaultRef: workspace.defaultRef,
57
+ projectWorkspaceRepoRef: workspace.repoRef,
58
+ }),
59
+ }, workspaceDiffQuerySchema.parse(params));
60
+ }
61
+ const workspace = await ctx.executionWorkspaces.get(workspaceId, companyId);
62
+ if (!workspace) {
63
+ throw new Error("Workspace not found");
64
+ }
65
+ let projectWorkspaceDefaultBaseRef = null;
66
+ if (!readOptionalString(workspace.baseRef)) {
67
+ projectWorkspaceDefaultBaseRef = await resolveProjectWorkspaceDefaultBaseRef({
68
+ ctx,
69
+ projectId: workspace.projectId || readString(params.projectId),
70
+ companyId,
71
+ projectWorkspaceId: workspace.projectWorkspaceId,
72
+ });
73
+ }
74
+ return workspaceDiff.getDiff({
75
+ ...workspace,
76
+ baseRef: resolveDefaultBaseRef({
77
+ workspaceBaseRef: workspace.baseRef,
78
+ projectWorkspaceDefaultRef: projectWorkspaceDefaultBaseRef,
79
+ }),
80
+ }, workspaceDiffQuerySchema.parse(params));
81
+ });
82
+ },
83
+ async onHealth() {
84
+ return { status: "ok", message: `${PLUGIN_NAME} ready` };
85
+ },
86
+ });
87
+ export default plugin;
88
+ runWorker(plugin, import.meta.url);
89
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PluginExecutionWorkspaceMetadata } from "@tickernelz/paperclip-pro-plugin-sdk";
2
+ import type { WorkspaceDiffCaps, WorkspaceDiffQueryOptions, WorkspaceDiffResponse } from "./contracts.js";
3
+ export declare const WORKSPACE_DIFF_CAPS: WorkspaceDiffCaps;
4
+ type WorkspaceDiffTarget = Pick<PluginExecutionWorkspaceMetadata, "id" | "companyId" | "cwd" | "baseRef">;
5
+ export declare function workspaceDiffService(): {
6
+ getDiff(workspace: WorkspaceDiffTarget, query: WorkspaceDiffQueryOptions): Promise<WorkspaceDiffResponse>;
7
+ };
8
+ export {};
9
+ //# sourceMappingURL=workspace-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-diff.d.ts","sourceRoot":"","sources":["../src/workspace-diff.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AAC7F,OAAO,KAAK,EACV,iBAAiB,EAKjB,yBAAyB,EACzB,qBAAqB,EAGtB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAC;AAsBF,KAAK,mBAAmB,GAAG,IAAI,CAAC,gCAAgC,EAAE,IAAI,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;AAmsB1G,wBAAgB,oBAAoB;IAE1B,OAAO,YAAY,mBAAmB,SAAS,yBAAyB,GAAG,OAAO,CAAC,qBAAqB,CAAC;EAwFlH"}