@vibesdotdev/integrations-penpot 0.0.0-stage → 1.0.0-rc.2

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.
Files changed (63) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +46 -2
  3. package/dist/client/index.d.ts +5 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/index.js +5 -0
  6. package/dist/client/index.js.map +1 -0
  7. package/dist/client/penpot-api.d.ts +70 -0
  8. package/dist/client/penpot-api.d.ts.map +1 -0
  9. package/dist/client/penpot-api.js +241 -0
  10. package/dist/client/penpot-api.js.map +1 -0
  11. package/dist/client/penpot-client.d.ts +50 -0
  12. package/dist/client/penpot-client.d.ts.map +1 -0
  13. package/dist/client/penpot-client.descriptor.d.ts +4 -0
  14. package/dist/client/penpot-client.descriptor.d.ts.map +1 -0
  15. package/dist/client/penpot-client.descriptor.js +6 -0
  16. package/dist/client/penpot-client.descriptor.js.map +1 -0
  17. package/dist/client/penpot-client.js +52 -0
  18. package/dist/client/penpot-client.js.map +1 -0
  19. package/dist/config/penpot.config.descriptor.d.ts +50 -0
  20. package/dist/config/penpot.config.descriptor.d.ts.map +1 -0
  21. package/dist/config/penpot.config.descriptor.js +56 -0
  22. package/dist/config/penpot.config.descriptor.js.map +1 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +7 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/plugin.d.ts +4 -0
  28. package/dist/plugin.d.ts.map +1 -0
  29. package/dist/plugin.js +18 -0
  30. package/dist/plugin.js.map +1 -0
  31. package/dist/schemas/board.d.ts +37 -0
  32. package/dist/schemas/board.d.ts.map +1 -0
  33. package/dist/schemas/board.js +20 -0
  34. package/dist/schemas/board.js.map +1 -0
  35. package/dist/schemas/catalog.d.ts +129 -0
  36. package/dist/schemas/catalog.d.ts.map +1 -0
  37. package/dist/schemas/catalog.js +82 -0
  38. package/dist/schemas/catalog.js.map +1 -0
  39. package/dist/schemas/sync.d.ts +212 -0
  40. package/dist/schemas/sync.d.ts.map +1 -0
  41. package/dist/schemas/sync.js +23 -0
  42. package/dist/schemas/sync.js.map +1 -0
  43. package/dist/schemas/transport.d.ts +169 -0
  44. package/dist/schemas/transport.d.ts.map +1 -0
  45. package/dist/schemas/transport.js +93 -0
  46. package/dist/schemas/transport.js.map +1 -0
  47. package/dist/sync/penpot.sync-endpoint.descriptor.d.ts +14 -0
  48. package/dist/sync/penpot.sync-endpoint.descriptor.d.ts.map +1 -0
  49. package/dist/sync/penpot.sync-endpoint.descriptor.js +10 -0
  50. package/dist/sync/penpot.sync-endpoint.descriptor.js.map +1 -0
  51. package/dist/sync/penpot.sync-endpoint.impl.d.ts +31 -0
  52. package/dist/sync/penpot.sync-endpoint.impl.d.ts.map +1 -0
  53. package/dist/sync/penpot.sync-endpoint.impl.js +98 -0
  54. package/dist/sync/penpot.sync-endpoint.impl.js.map +1 -0
  55. package/dist/tokens/apply-penpot-catalog.d.ts +7 -0
  56. package/dist/tokens/apply-penpot-catalog.d.ts.map +1 -0
  57. package/dist/tokens/apply-penpot-catalog.js +40 -0
  58. package/dist/tokens/apply-penpot-catalog.js.map +1 -0
  59. package/dist/tokens/plugin.d.ts +4 -0
  60. package/dist/tokens/plugin.d.ts.map +1 -0
  61. package/dist/tokens/plugin.js +13 -0
  62. package/dist/tokens/plugin.js.map +1 -0
  63. package/package.json +73 -4
@@ -0,0 +1,98 @@
1
+ import { CapabilityError } from '@vibesdotdev/kernel';
2
+ import { getVibesClient } from '@vibesdotdev/kernel/client';
3
+ import { createRuntimeImplementation } from '@vibesdotdev/kernel/factory';
4
+ import { hashSyncMappingData } from '@vibesdotdev/sync/mapping';
5
+ import * as z from 'zod/v4';
6
+ import { PenpotCatalogSchema, parseBoundary } from "../schemas/transport.js";
7
+ import { PenpotPresetMetadataSchema, PenpotProjectionDataSchema, PenpotProjectionRecordSchema, PenpotSyncApplySchema, PenpotSyncPullSchema } from "../schemas/sync.js";
8
+ const ENDPOINT_ID = 'sync.endpoint.vibes.design-tokens.penpot';
9
+ function canonicalKey(presetId) { return `design-tokens:penpot:${presetId}`; }
10
+ /** Standalone compatibility entrypoint; hosts normally resolve sync/endpoint. */
11
+ export class PenpotDesignTokensSyncEndpoint {
12
+ resolveTransport;
13
+ constructor(resolveTransport) {
14
+ this.resolveTransport = resolveTransport;
15
+ }
16
+ async pull(input) {
17
+ const value = parseBoundary(PenpotSyncPullSchema, input, 'penpot-sync-input-invalid');
18
+ const transport = await this.resolveTransport();
19
+ const catalogs = parseBoundary(z.array(PenpotCatalogSchema), await transport.pullTokens({ fileId: value.containerId }));
20
+ const identities = new Set();
21
+ for (const catalog of catalogs) {
22
+ if (identities.has(catalog.presetId))
23
+ throw new CapabilityError('Penpot returned duplicate catalog identities.', 'CONFLICT', {
24
+ reason: 'penpot-catalog-duplicate'
25
+ });
26
+ identities.add(catalog.presetId);
27
+ }
28
+ const offset = value.cursor ?? 0;
29
+ if (offset > catalogs.length)
30
+ throw new CapabilityError('Penpot sync cursor is outside the catalog.', 'INVALID_INPUT', {
31
+ reason: 'penpot-sync-cursor-invalid'
32
+ });
33
+ const page = catalogs.slice(offset, offset + value.limit);
34
+ const records = [];
35
+ for (const catalog of page) {
36
+ const data = { dtcg: catalog.dtcg };
37
+ records.push({
38
+ id: catalog.presetId, canonicalKey: canonicalKey(catalog.presetId),
39
+ revision: catalog.updatedAt, updatedAt: catalog.updatedAt,
40
+ contentHash: await hashSyncMappingData(data), deleted: false, data,
41
+ metadata: { endpointId: ENDPOINT_ID, provider: 'penpot', fileId: value.containerId, presetId: catalog.presetId }
42
+ });
43
+ }
44
+ const nextOffset = offset + page.length;
45
+ const hasMore = nextOffset < catalogs.length;
46
+ return { records, cursor: hasMore ? String(nextOffset) : undefined, hasMore };
47
+ }
48
+ async apply(input) {
49
+ const value = parseBoundary(PenpotSyncApplySchema, input, 'penpot-sync-input-invalid');
50
+ // Prepare every operation before the first remote write.
51
+ const writes = value.operations.map(operation => {
52
+ if (operation.type !== 'upsert')
53
+ throw new CapabilityError('Penpot supports catalog upserts only.', 'INVALID_INPUT', {
54
+ reason: 'penpot-operation-unsupported'
55
+ });
56
+ const record = parseBoundary(PenpotProjectionRecordSchema, operation.record, 'penpot-sync-record-invalid');
57
+ const metadata = parseBoundary(PenpotPresetMetadataSchema, record.metadata);
58
+ const projection = PenpotProjectionDataSchema.safeParse(record.data);
59
+ return {
60
+ canonicalKey: operation.canonicalKey,
61
+ presetId: operation.destinationRecord?.id ?? metadata.presetId ?? record.id,
62
+ dtcg: projection.success ? projection.data.dtcg : record.data,
63
+ updatedAt: record.updatedAt
64
+ };
65
+ });
66
+ const transport = await this.resolveTransport();
67
+ const results = [];
68
+ for (const write of writes) {
69
+ let catalog;
70
+ try {
71
+ catalog = parseBoundary(PenpotCatalogSchema, await transport.pushTokens({
72
+ fileId: value.containerId, presetId: write.presetId, dtcg: write.dtcg, updatedAt: write.updatedAt
73
+ }));
74
+ }
75
+ catch (cause) {
76
+ throw new CapabilityError('Penpot catalog write failed.', 'UNAVAILABLE', { reason: 'penpot-sync-write-failed', cause });
77
+ }
78
+ if (catalog.presetId !== write.presetId)
79
+ throw new CapabilityError('Penpot acknowledged a different catalog.', 'CONFLICT', {
80
+ reason: 'penpot-destination-mismatch'
81
+ });
82
+ results.push({
83
+ canonicalKey: write.canonicalKey, success: true, outcome: 'applied',
84
+ recordId: catalog.presetId, revision: catalog.updatedAt
85
+ });
86
+ }
87
+ return results;
88
+ }
89
+ }
90
+ class RuntimePenpotDesignTokensSyncEndpoint extends PenpotDesignTokensSyncEndpoint {
91
+ constructor(_descriptor, context) {
92
+ super(() => getVibesClient('integrations-penpot', context.runtime));
93
+ }
94
+ }
95
+ export default createRuntimeImplementation({
96
+ kind: 'sync/endpoint', id: ENDPOINT_ID, implementation: RuntimePenpotDesignTokensSyncEndpoint
97
+ });
98
+ //# sourceMappingURL=penpot.sync-endpoint.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"penpot.sync-endpoint.impl.js","sourceRoot":"","sources":["../../src/sync/penpot.sync-endpoint.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ApplyPenpotCatalogResult, PenpotTokenCatalogHost } from '../schemas/catalog.ts';
2
+ export type { ApplyPenpotCatalogResult, PenpotApplyTokenType, PenpotCatalogTheme, PenpotCatalogTokenSet, PenpotTokenCatalogHost, TokensStudioMetadata, TokensStudioTheme } from '../schemas/catalog.ts';
3
+ export declare const DEFAULT_ACTIVE_THEME_GROUP = "Appearance";
4
+ export declare const DEFAULT_ACTIVE_THEME_NAME = "Vibes \u00B7 Dark";
5
+ /** Validate the complete replacement before touching mutable host collections. */
6
+ export declare function applyPenpotCatalog(json: unknown, catalog: PenpotTokenCatalogHost): ApplyPenpotCatalogResult;
7
+ //# sourceMappingURL=apply-penpot-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-penpot-catalog.d.ts","sourceRoot":"","sources":["../../src/tokens/apply-penpot-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE9F,YAAY,EACX,wBAAwB,EAAE,oBAAoB,EAAE,kBAAkB,EAClE,qBAAqB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EACtF,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,eAAe,CAAC;AACvD,eAAO,MAAM,yBAAyB,sBAAiB,CAAC;AAExD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,wBAAwB,CA8B3G"}
@@ -0,0 +1,40 @@
1
+ import { CatalogApplicationSchema } from "../schemas/catalog.js";
2
+ import { CapabilityError } from '@vibesdotdev/kernel';
3
+ export const DEFAULT_ACTIVE_THEME_GROUP = 'Appearance';
4
+ export const DEFAULT_ACTIVE_THEME_NAME = 'Vibes · Dark';
5
+ /** Validate the complete replacement before touching mutable host collections. */
6
+ export function applyPenpotCatalog(json, catalog) {
7
+ const parsed = CatalogApplicationSchema.safeParse(json);
8
+ if (!parsed.success)
9
+ throw new CapabilityError('Penpot catalog replacement is invalid.', 'INVALID_INPUT', {
10
+ reason: 'penpot-catalog-invalid', cause: parsed.error
11
+ });
12
+ const document = parsed.data;
13
+ // Host remove() mutates these collections; snapshot both before removal.
14
+ const themes = Array.from(catalog.themes);
15
+ const sets = Array.from(catalog.sets);
16
+ for (const theme of themes)
17
+ theme.remove();
18
+ for (const set of sets)
19
+ set.remove();
20
+ let tokenCount = 0;
21
+ for (const [name, tokens] of document.sets) {
22
+ const set = catalog.addSet({ name, active: false });
23
+ for (const token of tokens) {
24
+ set.addToken(token);
25
+ tokenCount += 1;
26
+ }
27
+ }
28
+ for (const theme of document.themes) {
29
+ const created = catalog.addTheme({ group: theme.group, name: theme.name });
30
+ for (const [name, state] of Object.entries(theme.selectedTokenSets ?? {})) {
31
+ if (state === 'enabled')
32
+ created.addSet(name);
33
+ }
34
+ }
35
+ const activeThemes = document.activeThemes;
36
+ for (const theme of activeThemes)
37
+ catalog.activateTheme(theme);
38
+ return { setCount: document.sets.size, themeCount: document.themes.length, tokenCount, activeThemes };
39
+ }
40
+ //# sourceMappingURL=apply-penpot-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-penpot-catalog.js","sourceRoot":"","sources":["../../src/tokens/apply-penpot-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,IAAa,EAAE,OAA+B;IAChF,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,eAAe,CAAC,wCAAwC,EAAE,eAAe,EAAE;YACzG,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;SACrD,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,yEAAyE;IACzE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,IAAI,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,YAAY;QAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACvG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ApplyPenpotCatalogResult, type PenpotTokenCatalogHost } from './apply-penpot-catalog.ts';
2
+ /** Thin house-plugin entry: apply Tokens Studio JSON to a TokenCatalog host. */
3
+ export declare function applyHousePluginCatalog(catalog: PenpotTokenCatalogHost, tokensStudioJson: unknown): ApplyPenpotCatalogResult;
4
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/tokens/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,MAAM,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,sBAAsB,EAC/B,gBAAgB,EAAE,OAAO,GACvB,wBAAwB,CAM1B"}
@@ -0,0 +1,13 @@
1
+ import { CapabilityError } from '@vibesdotdev/kernel';
2
+ import { JsonSchema } from "../schemas/transport.js";
3
+ import { applyPenpotCatalog } from "./apply-penpot-catalog.js";
4
+ /** Thin house-plugin entry: apply Tokens Studio JSON to a TokenCatalog host. */
5
+ export function applyHousePluginCatalog(catalog, tokensStudioJson) {
6
+ const parsed = JsonSchema.safeParse(tokensStudioJson);
7
+ if (!parsed.success)
8
+ throw new CapabilityError('Tokens Studio input is invalid.', 'INVALID_INPUT', {
9
+ reason: 'penpot-catalog-invalid', cause: parsed.error
10
+ });
11
+ return applyPenpotCatalog(parsed.data, catalog);
12
+ }
13
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/tokens/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACN,kBAAkB,EAGlB,MAAM,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CACtC,OAA+B,EAC/B,gBAAyB;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,eAAe,CAAC,iCAAiC,EAAE,eAAe,EAAE;YAClG,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;SACrD,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,75 @@
1
1
  {
2
2
  "name": "@vibesdotdev/integrations-penpot",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.0-rc.2",
4
+ "dependencies": {
5
+ "@vibesdotdev/config": "^1.0.0-rc.5",
6
+ "@vibesdotdev/kernel": "^1.0.0-rc.8",
7
+ "zod": "^4.6.7"
8
+ },
9
+ "peerDependencies": {
10
+ "@vibesdotdev/sync": "^1.0.0-rc.0"
11
+ },
12
+ "main": "./dist/index.js",
13
+ "exports": {
14
+ ".": {
15
+ "bun": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./plugin": {
21
+ "bun": "./dist/plugin.js",
22
+ "types": "./dist/plugin.d.ts",
23
+ "import": "./dist/plugin.js",
24
+ "default": "./dist/plugin.js"
25
+ },
26
+ "./sync": {
27
+ "bun": "./dist/sync/penpot.sync-endpoint.impl.js",
28
+ "types": "./dist/sync/penpot.sync-endpoint.impl.d.ts",
29
+ "import": "./dist/sync/penpot.sync-endpoint.impl.js",
30
+ "default": "./dist/sync/penpot.sync-endpoint.impl.js"
31
+ },
32
+ "./client": {
33
+ "bun": "./dist/client/index.js",
34
+ "types": "./dist/client/index.d.ts",
35
+ "import": "./dist/client/index.js",
36
+ "default": "./dist/client/index.js"
37
+ }
38
+ },
39
+ "scripts": {
40
+ "lint": "node ../../node_modules/@vibesdotdev/internal-oxlint-toolchain/ratchet.mjs .",
41
+ "test": "${BUN:-bun} test src",
42
+ "check": "${BUN:-bun} --bun tsc -p tsconfig.json --noEmit",
43
+ "build": "tsc -p tsconfig.build.json"
44
+ },
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "ssh://git@git.vibes.dev/vibesdotdev/integrations.git",
48
+ "directory": "integrations/penpot"
49
+ },
50
+ "publishConfig": {
51
+ "registry": "https://packages.vibes.dev",
52
+ "access": "public"
53
+ },
54
+ "vibes": {
55
+ "visibility": "public",
56
+ "registry": {
57
+ "repositoryId": "70be51c9-5ab7-4d7e-9f47-801cb17720d8",
58
+ "directory": "integrations/penpot"
59
+ }
60
+ },
61
+ "type": "module",
62
+ "types": "./dist/index.d.ts",
63
+ "license": "BUSL-1.1",
64
+ "files": [
65
+ "dist",
66
+ "README.md",
67
+ "LICENSE"
68
+ ],
69
+ "gitHead": "fd24c5c4d0c5ae2a7b0af8a7714675b55cac1368",
70
+ "_vibes_source": {
71
+ "repo": "ssh://git@git.vibes.dev/vibesdotdev/integrations.git",
72
+ "sha": "fd24c5c4d0c5ae2a7b0af8a7714675b55cac1368",
73
+ "workspaceDigest": "sha256:e67aee5c8f9c861cbab377ca3b1dd6ade9345a74bff14ebb246ef27c526a1d8e"
74
+ }
75
+ }