studiograph 1.3.48-next.77 → 1.3.48-next.78

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 (141) hide show
  1. package/dist/agent/prompts/entity-types-section.d.ts +8 -0
  2. package/dist/agent/prompts/entity-types-section.js +27 -2
  3. package/dist/agent/prompts/entity-types-section.js.map +1 -1
  4. package/dist/agent/tools/folder-tools.js +18 -7
  5. package/dist/agent/tools/folder-tools.js.map +1 -1
  6. package/dist/agent/tools/graph-tools.js +65 -9
  7. package/dist/agent/tools/graph-tools.js.map +1 -1
  8. package/dist/cli/commands/index.js +1 -1
  9. package/dist/cli/commands/index.js.map +1 -1
  10. package/dist/core/entity-types-catalog.js +2 -0
  11. package/dist/core/entity-types-catalog.js.map +1 -1
  12. package/dist/core/graph.d.ts +106 -2
  13. package/dist/core/graph.js +281 -10
  14. package/dist/core/graph.js.map +1 -1
  15. package/dist/core/validation.d.ts +85 -4
  16. package/dist/core/validation.js +34 -3
  17. package/dist/core/validation.js.map +1 -1
  18. package/dist/core/workspace-manager.js +3 -1
  19. package/dist/core/workspace-manager.js.map +1 -1
  20. package/dist/mcp/tools.js +6 -1
  21. package/dist/mcp/tools.js.map +1 -1
  22. package/dist/server/routes/asset-api.js +29 -7
  23. package/dist/server/routes/asset-api.js.map +1 -1
  24. package/dist/server/routes/graph-api.js +256 -45
  25. package/dist/server/routes/graph-api.js.map +1 -1
  26. package/dist/services/asset-upload-service.d.ts +53 -0
  27. package/dist/services/asset-upload-service.js +199 -0
  28. package/dist/services/asset-upload-service.js.map +1 -0
  29. package/dist/services/assets/base.d.ts +15 -0
  30. package/dist/services/assets/base.js +63 -0
  31. package/dist/services/assets/base.js.map +1 -1
  32. package/dist/services/assets/index.d.ts +17 -0
  33. package/dist/services/assets/index.js +17 -0
  34. package/dist/services/assets/index.js.map +1 -1
  35. package/dist/services/import-service.d.ts +20 -1
  36. package/dist/services/import-service.js +190 -35
  37. package/dist/services/import-service.js.map +1 -1
  38. package/dist/services/vector-service.d.ts +20 -2
  39. package/dist/services/vector-service.js +46 -5
  40. package/dist/services/vector-service.js.map +1 -1
  41. package/dist/web/_app/immutable/assets/0.C-U08O83.css +2 -0
  42. package/dist/web/_app/immutable/assets/2.D4UyD6ef.css +1 -0
  43. package/dist/web/_app/immutable/assets/{4.DMWmOCtr.css → 4.CMuW9ER9.css} +1 -1
  44. package/dist/web/_app/immutable/chunks/{B2MhjR4K.js → B2dQ_HtA.js} +1 -1
  45. package/dist/web/_app/immutable/chunks/{CbChB7Sk.js → BVG-59G_.js} +1 -1
  46. package/dist/web/_app/immutable/chunks/{CcKbicMh.js → BYMboxS1.js} +1 -1
  47. package/dist/web/_app/immutable/chunks/BcnRmtrP2.js +1 -0
  48. package/dist/web/_app/immutable/chunks/Bi49oCkW.js +1 -0
  49. package/dist/web/_app/immutable/chunks/{Bdr7RoI1.js → BkG8IWXL.js} +1 -1
  50. package/dist/web/_app/immutable/chunks/BljXMCRN2.js +1 -0
  51. package/dist/web/_app/immutable/chunks/C1eadUOT.js +1 -0
  52. package/dist/web/_app/immutable/chunks/{DgmiIA_n.js → C7ZXf1Ei.js} +1 -1
  53. package/dist/web/_app/immutable/chunks/{he436Z7O.js → C9fPdp9e.js} +1 -1
  54. package/dist/web/_app/immutable/chunks/{DYw6aCAA2.js → CABEPnKi2.js} +1 -1
  55. package/dist/web/_app/immutable/chunks/{C4o1fi_w.js → CFFhRHgg.js} +1 -1
  56. package/dist/web/_app/immutable/chunks/{DB38-mVP.js → CMv-UMQD.js} +1 -1
  57. package/dist/web/_app/immutable/chunks/{C-MyzyGb.js → CO4LsWNt.js} +1 -1
  58. package/dist/web/_app/immutable/chunks/{CQPEqD942.js → CXGYcrGq2.js} +1 -1
  59. package/dist/web/_app/immutable/chunks/ClxmxcVF.js +1 -0
  60. package/dist/web/_app/immutable/chunks/Co7pw0iy.js +1 -0
  61. package/dist/web/_app/immutable/chunks/Cu_13EXg.js +8 -0
  62. package/dist/web/_app/immutable/chunks/{DxmEO50C.js → Cy1yuSCN.js} +1 -1
  63. package/dist/web/_app/immutable/chunks/{_VOdw24P.js → CzT0T6FJ.js} +1 -1
  64. package/dist/web/_app/immutable/chunks/{Bl_v2-kF.js → D1AVtJaJ.js} +1 -1
  65. package/dist/web/_app/immutable/chunks/{CCXj03fW.js → D6ObqpSX.js} +1 -1
  66. package/dist/web/_app/immutable/chunks/DBMIhZt72.js +1 -0
  67. package/dist/web/_app/immutable/chunks/{CUVp7kiS.js → DFE7ldAP.js} +1 -1
  68. package/dist/web/_app/immutable/chunks/{DAQ0s979.js → DKDDh_Qn.js} +1 -1
  69. package/dist/web/_app/immutable/chunks/DNneJjJN.js +1 -0
  70. package/dist/web/_app/immutable/chunks/{r4OgPVQH.js → DOastlFY.js} +1 -1
  71. package/dist/web/_app/immutable/chunks/DPHJu-Bj.js +5 -0
  72. package/dist/web/_app/immutable/chunks/{D00taIEV.js → DQKT4stP.js} +1 -1
  73. package/dist/web/_app/immutable/chunks/DQe4a6BS.js +1 -0
  74. package/dist/web/_app/immutable/chunks/{Ce2P7b-X.js → DQpUZZbo.js} +1 -1
  75. package/dist/web/_app/immutable/chunks/DVxZLm0W.js +2 -0
  76. package/dist/web/_app/immutable/chunks/{BWPBe1t_.js → DYbq0sax.js} +1 -1
  77. package/dist/web/_app/immutable/chunks/{CjDvXCxV.js → Ddr2JLfY.js} +1 -1
  78. package/dist/web/_app/immutable/chunks/DeQkDfnZ.js +1 -0
  79. package/dist/web/_app/immutable/chunks/Df-4W2cE2.js +2 -0
  80. package/dist/web/_app/immutable/chunks/{e9oCENPh.js → Dfu55H0O.js} +1 -1
  81. package/dist/web/_app/immutable/chunks/{7tAv3Zey.js → DhERF52D.js} +1 -1
  82. package/dist/web/_app/immutable/chunks/{C2UI_KQ1.js → Dt_-Caf8.js} +1 -1
  83. package/dist/web/_app/immutable/chunks/DxS997Bi.js +1 -0
  84. package/dist/web/_app/immutable/chunks/{ChPgixWE.js → P-vv4BQi2.js} +1 -1
  85. package/dist/web/_app/immutable/chunks/{Fgrpvl6l.js → UqWZFiDw.js} +1 -1
  86. package/dist/web/_app/immutable/chunks/{DPXpm86N.js → ZhCPwTv_.js} +1 -1
  87. package/dist/web/_app/immutable/chunks/anxNIaXZ.js +1 -0
  88. package/dist/web/_app/immutable/chunks/{DuaBraCb.js → dTznEU-N.js} +4 -4
  89. package/dist/web/_app/immutable/chunks/{wY5DYt0W.js → iqOW8ttz.js} +1 -1
  90. package/dist/web/_app/immutable/chunks/{DQ86iS7p.js → j7kuJOP8.js} +1 -1
  91. package/dist/web/_app/immutable/chunks/{PySYLKbq.js → mbVGz96e.js} +1 -1
  92. package/dist/web/_app/immutable/chunks/rmFsC7j32.js +1 -0
  93. package/dist/web/_app/immutable/chunks/{CLBsX7ax.js → sdhQg9Jq.js} +1 -1
  94. package/dist/web/_app/immutable/entry/{app.DN1UaKFY.js → app.BUM2MbTk.js} +2 -2
  95. package/dist/web/_app/immutable/entry/start.BObvxb93.js +1 -0
  96. package/dist/web/_app/immutable/nodes/{0.B4kzM-PX.js → 0.BMXqKYhl.js} +2 -2
  97. package/dist/web/_app/immutable/nodes/{1.BFSzcxgp.js → 1.QaGjZyIl.js} +1 -1
  98. package/dist/web/_app/immutable/nodes/10.F1nNX_z9.js +1 -0
  99. package/dist/web/_app/immutable/nodes/{11.DL-1uGFV.js → 11.BfZsU6Vh.js} +1 -1
  100. package/dist/web/_app/immutable/nodes/{12.BaxGfUVt.js → 12.C5hRguPI.js} +1 -1
  101. package/dist/web/_app/immutable/nodes/{13.DnuNEtfe.js → 13.BqOI1wyC.js} +1 -1
  102. package/dist/web/_app/immutable/nodes/2.CCWtRh8O.js +130 -0
  103. package/dist/web/_app/immutable/nodes/3.DDPCGvvJ.js +2 -0
  104. package/dist/web/_app/immutable/nodes/4.BhR6-Pss.js +11 -0
  105. package/dist/web/_app/immutable/nodes/5.DkAirE7a.js +1 -0
  106. package/dist/web/_app/immutable/nodes/{6.CX3g0XIN.js → 6.CF014BWC.js} +1 -1
  107. package/dist/web/_app/immutable/nodes/{7.Crv4XWO2.js → 7.B6NRypBk.js} +1 -1
  108. package/dist/web/_app/immutable/nodes/{8.2aJyTu75.js → 8.B4moM7KQ.js} +1 -1
  109. package/dist/web/_app/immutable/nodes/{9.lbjYEmw7.js → 9.DVcGpCuy.js} +1 -1
  110. package/dist/web/_app/version.json +1 -1
  111. package/dist/web/index.html +16 -16
  112. package/package.json +1 -1
  113. package/dist/web/_app/immutable/assets/0.DNW-Nd5m.css +0 -2
  114. package/dist/web/_app/immutable/assets/2.R677OFd1.css +0 -1
  115. package/dist/web/_app/immutable/chunks/-jdP5JqO.js +0 -5
  116. package/dist/web/_app/immutable/chunks/9lbhMmvd.js +0 -1
  117. package/dist/web/_app/immutable/chunks/B-z4a3eR.js +0 -1
  118. package/dist/web/_app/immutable/chunks/BDCOho_G.js +0 -1
  119. package/dist/web/_app/immutable/chunks/BDgHxF8Y.js +0 -8
  120. package/dist/web/_app/immutable/chunks/BynMq22o.js +0 -1
  121. package/dist/web/_app/immutable/chunks/C7o6G8Ak2.js +0 -1
  122. package/dist/web/_app/immutable/chunks/CDDIrInV2.js +0 -2
  123. package/dist/web/_app/immutable/chunks/CHRfvdkq2.js +0 -1
  124. package/dist/web/_app/immutable/chunks/CIwAM5f0.js +0 -2
  125. package/dist/web/_app/immutable/chunks/CSWuNPeq.js +0 -1
  126. package/dist/web/_app/immutable/chunks/CTFOXiYo.js +0 -1
  127. package/dist/web/_app/immutable/chunks/CXYTfe_P2.js +0 -1
  128. package/dist/web/_app/immutable/chunks/CbCiZ2mS2.js +0 -1
  129. package/dist/web/_app/immutable/chunks/Cjw6nw-K.js +0 -1
  130. package/dist/web/_app/immutable/chunks/DDzRa0WU.js +0 -1
  131. package/dist/web/_app/immutable/chunks/DhikmMsg2.js +0 -1
  132. package/dist/web/_app/immutable/entry/start.B318VXx4.js +0 -1
  133. package/dist/web/_app/immutable/nodes/10.Bj0EQP8T.js +0 -1
  134. package/dist/web/_app/immutable/nodes/2.Gew8dws6.js +0 -130
  135. package/dist/web/_app/immutable/nodes/3.CWR6Ua2L.js +0 -2
  136. package/dist/web/_app/immutable/nodes/4.ArX8Iovt.js +0 -11
  137. package/dist/web/_app/immutable/nodes/5.Cg8S9qNq.js +0 -1
  138. /package/dist/web/_app/immutable/chunks/{D5VdX2NC.js → CQwUl_3l.js} +0 -0
  139. /package/dist/web/_app/immutable/chunks/{EdMwt2az.js → CvZmtMIf.js} +0 -0
  140. /package/dist/web/_app/immutable/chunks/{CUyyAHze.js → Dn6yJ9ZG.js} +0 -0
  141. /package/dist/web/_app/immutable/chunks/{DXeZwJCC2.js → rsjIo1y12.js} +0 -0
@@ -51,6 +51,69 @@ export function detectContentType(filename) {
51
51
  const ext = filename.split('.').pop()?.toLowerCase() || '';
52
52
  return CONTENT_TYPES[ext] || 'application/octet-stream';
53
53
  }
54
+ /**
55
+ * Map a filename to the high-level `asset_kind` written into the asset
56
+ * entity's frontmatter. Drives icon and viewer selection; coarser than
57
+ * MIME so the UI doesn't need to enumerate every format. The kind set
58
+ * is canonical in `ASSET_KINDS` in src/core/validation.ts.
59
+ */
60
+ export function detectAssetKind(filename) {
61
+ const ext = filename.split('.').pop()?.toLowerCase() || '';
62
+ if (IMAGE_EXTS.has(ext))
63
+ return 'image';
64
+ if (VIDEO_EXTS.has(ext))
65
+ return 'video';
66
+ if (AUDIO_EXTS.has(ext))
67
+ return 'audio';
68
+ if (ext === 'pdf')
69
+ return 'pdf';
70
+ if (INDESIGN_EXTS.has(ext))
71
+ return 'indesign';
72
+ if (ext === 'sketch')
73
+ return 'sketch';
74
+ if (ext === 'psd')
75
+ return 'psd';
76
+ if (ext === 'ai')
77
+ return 'illustrator';
78
+ if (ext === 'fig')
79
+ return 'figma';
80
+ if (OFFICE_EXTS.has(ext))
81
+ return 'office';
82
+ if (ARCHIVE_EXTS.has(ext))
83
+ return 'archive';
84
+ return 'other';
85
+ }
86
+ // SVG is intentionally excluded — see docs/asset-architecture.md §security.
87
+ // Stored XSS risk: SVG can contain <script> and the GET /api/assets/* route
88
+ // serves files inline with `Content-Type: image/svg+xml`, which executes in
89
+ // the app origin. Users who need vector assets can paste source into a note
90
+ // or embed via the editor's per-entity attach (which also blocks SVG).
91
+ const IMAGE_EXTS = new Set(['jpg', 'jpeg', 'png', 'gif', 'webp', 'avif', 'heic']);
92
+ const VIDEO_EXTS = new Set(['mp4', 'mov', 'webm', 'avi', 'mkv', 'm4v']);
93
+ const AUDIO_EXTS = new Set(['mp3', 'wav', 'm4a', 'ogg', 'flac', 'aac']);
94
+ const INDESIGN_EXTS = new Set(['indd', 'idml']);
95
+ const OFFICE_EXTS = new Set(['docx', 'doc', 'xlsx', 'xls', 'pptx', 'ppt', 'key', 'pages', 'numbers']);
96
+ const ARCHIVE_EXTS = new Set(['zip', 'tar', 'gz', '7z', 'rar']);
97
+ /**
98
+ * Extension set the asset upload route accepts. Excludes the structured
99
+ * formats handled elsewhere (.md/.txt/.csv → direct write, .docx →
100
+ * mammoth workstream, .html → bookmark importer).
101
+ */
102
+ export const ASSET_UPLOAD_EXTENSIONS = new Set([
103
+ ...IMAGE_EXTS,
104
+ ...VIDEO_EXTS,
105
+ ...AUDIO_EXTS,
106
+ 'pdf',
107
+ ...INDESIGN_EXTS,
108
+ 'sketch', 'psd', 'ai', 'fig',
109
+ // .docx is intentionally excluded — handled by the mammoth workstream.
110
+ 'xlsx', 'xls', 'pptx', 'ppt', 'key', 'pages', 'numbers',
111
+ ...ARCHIVE_EXTS,
112
+ ]);
113
+ export function isAssetUploadExtension(filename) {
114
+ const ext = filename.split('.').pop()?.toLowerCase() || '';
115
+ return ASSET_UPLOAD_EXTENSIONS.has(ext);
116
+ }
54
117
  /**
55
118
  * Determine media type from content type
56
119
  */
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/services/assets/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/services/assets/base.ts"],"names":[],"mappings":"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"}
@@ -39,3 +39,20 @@ export declare class AssetService {
39
39
  */
40
40
  getInfo(entityType: string, entityId: string, filename: string, keyPrefix?: string): Promise<AssetInfo | null>;
41
41
  }
42
+ /**
43
+ * Convert an `AssetInfo` returned by a backend into the URL stored in
44
+ * an entity's `asset_url` (or used as the `src` of an inline embed).
45
+ *
46
+ * R2 returns a fully-qualified `https://…` public URL; use it directly.
47
+ * Local backend returns either `file://…` or a relative path; rewrite to
48
+ * the workspace's HTTP serving route at `/api/assets/{type}/{id}/{file}`
49
+ * so the same URL works for the browser regardless of backend.
50
+ *
51
+ * Centralised here because three different call sites used to inline this
52
+ * ternary, and getting it wrong silently breaks image rendering.
53
+ */
54
+ export declare function publicUrlFor(asset: {
55
+ url: string;
56
+ path: string;
57
+ filename: string;
58
+ }, entityType: string, entityId: string): string;
@@ -93,4 +93,21 @@ export class AssetService {
93
93
  return assets.find(a => a.filename === filename) || null;
94
94
  }
95
95
  }
96
+ /**
97
+ * Convert an `AssetInfo` returned by a backend into the URL stored in
98
+ * an entity's `asset_url` (or used as the `src` of an inline embed).
99
+ *
100
+ * R2 returns a fully-qualified `https://…` public URL; use it directly.
101
+ * Local backend returns either `file://…` or a relative path; rewrite to
102
+ * the workspace's HTTP serving route at `/api/assets/{type}/{id}/{file}`
103
+ * so the same URL works for the browser regardless of backend.
104
+ *
105
+ * Centralised here because three different call sites used to inline this
106
+ * ternary, and getting it wrong silently breaks image rendering.
107
+ */
108
+ export function publicUrlFor(asset, entityType, entityId) {
109
+ if (asset.url.startsWith('http'))
110
+ return asset.path; // R2 returns full URL in `path`
111
+ return `/api/assets/${entityType}/${entityId}/${asset.filename}`;
112
+ }
96
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/assets/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/assets/index.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,16 @@ export interface ImportResult {
14
14
  entityType: string;
15
15
  status: 'created' | 'skipped' | 'error';
16
16
  error?: string;
17
+ /** Absolute path of the written file. Set when status === 'created' so
18
+ * batch callers can collect paths to commit in one transaction.
19
+ * Undefined for 'skipped' / 'error'. */
20
+ path?: string;
21
+ /** Absolute paths of any per-folder display-name sidecars written for this
22
+ * import (one per source-segment that carried casing the slug fallback
23
+ * can't recover). Empty when the source path was already kebab. Batch
24
+ * callers should pass these to commitPending() under `extraPaths` so the
25
+ * sidecars land in the same commit as the entity files. */
26
+ sidecarPaths?: string[];
17
27
  }
18
28
  export interface ImportOptions {
19
29
  entityType?: string;
@@ -39,6 +49,15 @@ export declare function isSupportedFile(filename: string): boolean;
39
49
  export declare function extractText(filename: string, content: string): Promise<string>;
40
50
  /**
41
51
  * Import a single file as a Studiograph entity.
42
- * Does NOT commit — caller should commit after batch imports.
52
+ *
53
+ * The `filename` may include a relative directory portion (e.g.
54
+ * `decks/2025-q1/talk.md`); the directory is slugified and combined with
55
+ * `options.folderPath` (the caller's chosen destination subfolder) to
56
+ * produce the final on-disk location. This preserves user-organized
57
+ * folder structure when a folder is dropped onto the import zone.
58
+ *
59
+ * Collisions on `(entity_type, entity_id)` are auto-suffixed (`talk` →
60
+ * `talk-2` → `talk-3` …) rather than skipped, so dropping a folder twice
61
+ * never silently swallows files.
43
62
  */
44
63
  export declare function importFile(graph: BaseGraphManager, filename: string, content: Buffer | string, options?: ImportOptions): Promise<ImportResult>;
@@ -7,12 +7,124 @@
7
7
  * - .csv → dataset entity (infers column schema)
8
8
  * - .pdf → note entity (extracts text via pdf-parse)
9
9
  */
10
- import { extname, basename } from 'path';
10
+ import { extname, basename, dirname } from 'path';
11
11
  import matter from 'gray-matter';
12
12
  /** Convert a string to kebab-case for use as an entity ID. */
13
13
  function slugify(str) {
14
14
  return str.toLowerCase().trim().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
15
15
  }
16
+ /** Convert a relative directory path (`'My Documents/Q1 Reports'`) into a
17
+ * kebab-case folder path (`'my-documents/q1-reports'`). Empty / `'.'`
18
+ * yields `''`. Each segment is slugified independently so multi-segment
19
+ * paths keep their structure. */
20
+ function slugifyFolderPath(dir) {
21
+ if (!dir || dir === '.')
22
+ return '';
23
+ return dir
24
+ .split(/[/\\]/)
25
+ .map(slugify)
26
+ .filter(Boolean)
27
+ .join('/');
28
+ }
29
+ /** Convert kebab-case slug to the title-cased fallback the UI uses when no
30
+ * sidecar override is present. Mirrors `toDisplayName(slug)` in
31
+ * workspace.svelte.ts so we only persist a sidecar when the user's original
32
+ * segment carries information the fallback can't recover (`Schema_OS`,
33
+ * `HR`, `Q1 Reports`). Skipping look-alikes keeps the manifest sparse. */
34
+ function toDisplayFallback(slug) {
35
+ return slug
36
+ .split('-')
37
+ .map(s => s.charAt(0).toUpperCase() + s.slice(1))
38
+ .join(' ');
39
+ }
40
+ /** Pick the best `name` fallback for an imported entity when the source
41
+ * carries no frontmatter `name`/`title`. Mirrors the sparse rule used for
42
+ * folder display sidecars: prefer the original filename stem only when it
43
+ * carries casing the slug → title-case fallback can't recover (e.g.
44
+ * "Schema_OS.md" → slug "schema-os" → fallback "Schema Os" ≠ original).
45
+ * Otherwise stick with the title-case fallback so kebab and already
46
+ * title-cased filenames keep producing the same display they do today.
47
+ *
48
+ * When the entity_id was explicitly overridden (frontmatter / options) so
49
+ * that finalId differs from the natural slug of the filename, the explicit
50
+ * id is the source of truth — don't substitute the original stem. */
51
+ function deriveImportName(filename, finalId) {
52
+ const ext = extname(filename);
53
+ const originalStem = basename(filename, ext);
54
+ const naturalSlug = slugify(originalStem);
55
+ const slugFallbackName = formatName(finalId);
56
+ if (finalId !== naturalSlug)
57
+ return slugFallbackName;
58
+ if (originalStem === naturalSlug)
59
+ return slugFallbackName;
60
+ if (originalStem === slugFallbackName)
61
+ return slugFallbackName;
62
+ return originalStem;
63
+ }
64
+ /** Walk an original directory string and the slug it produced, emitting a
65
+ * per-segment list of {full slug-path, original segment string} for any
66
+ * segment whose original differs from the slug fallback. The full slug-path
67
+ * is repo-relative within `targetFolderPath` (the caller's chosen base), so
68
+ * the returned paths are ready to pass to `recordFolderDisplays`. */
69
+ function deriveFolderDisplays(originalDir, targetFolderPath) {
70
+ if (!originalDir || originalDir === '.')
71
+ return [];
72
+ const originalSegments = originalDir.split(/[/\\]/).filter(Boolean);
73
+ const result = [];
74
+ let acc = targetFolderPath ?? '';
75
+ for (const original of originalSegments) {
76
+ const slug = slugify(original);
77
+ if (!slug)
78
+ continue;
79
+ acc = acc ? `${acc}/${slug}` : slug;
80
+ // Two skip conditions:
81
+ // 1. original === slug — already kebab on disk; no info to preserve.
82
+ // 2. original === fallback — title-case fallback already round-trips.
83
+ // Only when both fail does the original carry casing the fallback can't
84
+ // recover (e.g. "Schema_OS", "HR", "iOS"), and we persist it.
85
+ if (original !== slug && original !== toDisplayFallback(slug)) {
86
+ result.push({ path: acc, display_name: original });
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+ /** Combine a target folder path (e.g. caller's chosen subfolder) with a
92
+ * per-file relative directory. Either or both may be empty. */
93
+ function joinFolderPaths(...parts) {
94
+ return parts.filter((p) => Boolean(p)).join('/');
95
+ }
96
+ /** Create an entity, auto-suffixing the entity_id on `(type, id)` collisions
97
+ * (`foo` → `foo-2` → `foo-3` …) up to `maxAttempts` tries. The base id
98
+ * comes through unchanged when there's no collision. Returns the id that
99
+ * was actually used. */
100
+ async function createWithCollisionRetry(graph, options, maxAttempts = 50) {
101
+ let suffix = 0;
102
+ while (true) {
103
+ const entityId = suffix === 0 ? options.entityId : `${options.entityId}-${suffix + 1}`;
104
+ try {
105
+ const created = await graph.create({
106
+ ...options,
107
+ entityId,
108
+ data: { ...options.data, entity_id: entityId },
109
+ });
110
+ return { entityId, path: created.path };
111
+ }
112
+ catch (err) {
113
+ const msg = err instanceof Error ? err.message : String(err);
114
+ if (!msg.includes('already exists') || suffix >= maxAttempts)
115
+ throw err;
116
+ suffix++;
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * Extensions importFile handles directly. Binary asset extensions
122
+ * (.indd, .sketch, .psd, .ai, .fig, .pptx, …) are NOT in this set —
123
+ * they go through `uploadAsset` in the route layer instead. .pdf stays
124
+ * here for backwards compatibility (the agent tool still uses importFile
125
+ * to import a PDF as a `note` entity); the web import dispatcher routes
126
+ * .pdf to the asset path before reaching importFile.
127
+ */
16
128
  const SUPPORTED_EXTENSIONS = new Set(['.md', '.txt', '.csv', '.pdf', '.docx', '.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg']);
17
129
  export function isSupportedFile(filename) {
18
130
  return SUPPORTED_EXTENSIONS.has(extname(filename).toLowerCase());
@@ -50,38 +162,75 @@ export async function extractText(filename, content) {
50
162
  }
51
163
  /**
52
164
  * Import a single file as a Studiograph entity.
53
- * Does NOT commit — caller should commit after batch imports.
165
+ *
166
+ * The `filename` may include a relative directory portion (e.g.
167
+ * `decks/2025-q1/talk.md`); the directory is slugified and combined with
168
+ * `options.folderPath` (the caller's chosen destination subfolder) to
169
+ * produce the final on-disk location. This preserves user-organized
170
+ * folder structure when a folder is dropped onto the import zone.
171
+ *
172
+ * Collisions on `(entity_type, entity_id)` are auto-suffixed (`talk` →
173
+ * `talk-2` → `talk-3` …) rather than skipped, so dropping a folder twice
174
+ * never silently swallows files.
54
175
  */
55
176
  export async function importFile(graph, filename, content, options) {
56
177
  const ext = extname(filename).toLowerCase();
57
- const entityId = options?.entityId ?? slugify(basename(filename, ext));
58
- if (!entityId) {
178
+ const baseId = options?.entityId ?? slugify(basename(filename, ext));
179
+ if (!baseId) {
59
180
  return { entityId: '', entityType: '', status: 'error', error: 'Could not generate entity ID from filename' };
60
181
  }
182
+ // Combine the caller's target folder with the file's own relative
183
+ // directory. e.g. importing `decks/talk.md` into target `2025-q1` →
184
+ // final folderPath `2025-q1/decks`. Directory segments from the source
185
+ // are slugified to match the workspace's kebab-case folder convention.
186
+ const fileDir = dirname(filename);
187
+ const fileSlugDir = slugifyFolderPath(fileDir);
188
+ const combinedFolderPath = joinFolderPaths(options?.folderPath, fileSlugDir);
189
+ const innerOptions = { ...options, folderPath: combinedFolderPath || undefined };
190
+ // Capture original-casing display names for each source segment that the
191
+ // slug can't round-trip ("Schema_OS" → "schema-os" → "Schema Os" ≠
192
+ // original). These are written as per-folder sidecars after the entity
193
+ // lands so the import path is the only place that auto-populates them.
194
+ // First-writer-wins inside recordFolderDisplays — re-importing a folder
195
+ // with the same shape never clobbers a manual rename.
196
+ const folderDisplays = deriveFolderDisplays(fileDir, options?.folderPath);
61
197
  try {
198
+ let result;
62
199
  // PDF needs binary data — handle before text conversion
63
200
  if (ext === '.pdf') {
64
201
  const buf = typeof content === 'string' ? Buffer.from(content, 'base64') : content;
65
- return await importPdf(graph, entityId, buf, filename, options);
202
+ result = await importPdf(graph, baseId, buf, filename, innerOptions);
203
+ }
204
+ else {
205
+ const text = typeof content === 'string' ? content : content.toString('utf-8');
206
+ switch (ext) {
207
+ case '.md':
208
+ result = await importMarkdown(graph, baseId, text, filename, innerOptions);
209
+ break;
210
+ case '.txt':
211
+ result = await importText(graph, baseId, text, filename, innerOptions);
212
+ break;
213
+ case '.csv':
214
+ result = await importCsv(graph, baseId, text, filename, innerOptions);
215
+ break;
216
+ default:
217
+ return { entityId: baseId, entityType: '', status: 'error', error: `Unsupported file type: ${ext}` };
218
+ }
66
219
  }
67
- const text = typeof content === 'string' ? content : content.toString('utf-8');
68
- switch (ext) {
69
- case '.md':
70
- return await importMarkdown(graph, entityId, text, options);
71
- case '.txt':
72
- return await importText(graph, entityId, text, filename, options);
73
- case '.csv':
74
- return await importCsv(graph, entityId, text, filename, options);
75
- default:
76
- return { entityId, entityType: '', status: 'error', error: `Unsupported file type: ${ext}` };
220
+ // Sidecar pass: only after the entity write succeeds. Folder existence
221
+ // is guaranteed at this point — graph.create()'s mkdir -p semantics
222
+ // produced the directories we're writing into.
223
+ if (result.status === 'created' && folderDisplays.length > 0) {
224
+ const sidecarPaths = graph.recordFolderDisplays(folderDisplays);
225
+ if (sidecarPaths.length > 0) {
226
+ result = { ...result, sidecarPaths };
227
+ }
77
228
  }
229
+ return result;
78
230
  }
79
231
  catch (err) {
80
232
  const msg = err instanceof Error ? err.message : String(err);
81
- if (msg.includes('already exists')) {
82
- return { entityId, entityType: options?.entityType ?? 'note', status: 'skipped', error: 'Entity already exists' };
83
- }
84
- return { entityId, entityType: options?.entityType ?? 'note', status: 'error', error: msg };
233
+ return { entityId: baseId, entityType: options?.entityType ?? 'note', status: 'error', error: msg };
85
234
  }
86
235
  }
87
236
  /** Import a .md file. Frontmatter wins: if the file declares
@@ -90,7 +239,7 @@ export async function importFile(graph, filename, content, options) {
90
239
  * This preserves the explicit shape of structured markdown a user has
91
240
  * already prepared (decks, references, datasets-by-hand, etc.) instead
92
241
  * of overwriting it with a generic default. */
93
- async function importMarkdown(graph, entityId, text, options) {
242
+ async function importMarkdown(graph, entityId, text, filename, options) {
94
243
  const parsed = matter(text);
95
244
  const fmType = typeof parsed.data.entity_type === 'string' ? parsed.data.entity_type : undefined;
96
245
  const fmId = typeof parsed.data.entity_id === 'string' ? parsed.data.entity_id : undefined;
@@ -104,7 +253,7 @@ async function importMarkdown(graph, entityId, text, options) {
104
253
  ...parsed.data,
105
254
  entity_type: entityType,
106
255
  entity_id: finalId,
107
- name: parsed.data.name ?? parsed.data.title ?? formatName(finalId),
256
+ name: parsed.data.name ?? parsed.data.title ?? deriveImportName(filename, finalId),
108
257
  created_at: parsed.data.created_at ?? now,
109
258
  updated_at: now,
110
259
  // Only stamp created_by/updated_by when the source didn't declare them —
@@ -112,7 +261,7 @@ async function importMarkdown(graph, entityId, text, options) {
112
261
  created_by: parsed.data.created_by ?? userHandle,
113
262
  updated_by: userHandle,
114
263
  };
115
- await graph.create({
264
+ const created = await createWithCollisionRetry(graph, {
116
265
  entityType,
117
266
  entityId: finalId,
118
267
  data,
@@ -122,7 +271,7 @@ async function importMarkdown(graph, entityId, text, options) {
122
271
  commitMessage: options?.commitMessage ?? `Import ${entityType}: ${finalId}`,
123
272
  skipCommit: options?.skipCommit ?? true,
124
273
  });
125
- return { entityId: finalId, entityType, status: 'created' };
274
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
126
275
  }
127
276
  /** Import a .txt file as a note entity. */
128
277
  async function importText(graph, entityId, text, filename, options) {
@@ -131,13 +280,13 @@ async function importText(graph, entityId, text, filename, options) {
131
280
  const userHandle = options?.user
132
281
  ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
133
282
  : 'import';
134
- await graph.create({
283
+ const created = await createWithCollisionRetry(graph, {
135
284
  entityType,
136
285
  entityId,
137
286
  data: {
138
287
  entity_type: entityType,
139
288
  entity_id: entityId,
140
- name: formatName(entityId),
289
+ name: deriveImportName(filename, entityId),
141
290
  created_at: now,
142
291
  updated_at: now,
143
292
  created_by: userHandle,
@@ -149,7 +298,7 @@ async function importText(graph, entityId, text, filename, options) {
149
298
  commitMessage: options?.commitMessage ?? `Import note: ${entityId}`,
150
299
  skipCommit: options?.skipCommit ?? true,
151
300
  });
152
- return { entityId, entityType, status: 'created' };
301
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
153
302
  }
154
303
  /** Import a .csv file as a dataset entity with inferred schema. */
155
304
  async function importCsv(graph, entityId, text, filename, options) {
@@ -162,13 +311,13 @@ async function importCsv(graph, entityId, text, filename, options) {
162
311
  const userHandle = options?.user
163
312
  ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
164
313
  : 'import';
165
- await graph.create({
314
+ const created = await createWithCollisionRetry(graph, {
166
315
  entityType,
167
316
  entityId,
168
317
  data: {
169
318
  entity_type: entityType,
170
319
  entity_id: entityId,
171
- name: formatName(entityId),
320
+ name: deriveImportName(filename, entityId),
172
321
  schema,
173
322
  created_at: now,
174
323
  updated_at: now,
@@ -181,7 +330,7 @@ async function importCsv(graph, entityId, text, filename, options) {
181
330
  commitMessage: options?.commitMessage ?? `Import dataset: ${entityId}`,
182
331
  skipCommit: options?.skipCommit ?? true,
183
332
  });
184
- return { entityId, entityType, status: 'created' };
333
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
185
334
  }
186
335
  /** Import a .pdf file as a note entity. Extracts text via pdf-parse. */
187
336
  async function importPdf(graph, entityId, data, filename, options) {
@@ -195,22 +344,28 @@ async function importPdf(graph, entityId, data, filename, options) {
195
344
  }
196
345
  const entityType = (options?.entityType ?? 'note');
197
346
  const now = new Date().toISOString();
198
- await graph.create({
347
+ const userHandle = options?.user
348
+ ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
349
+ : 'import';
350
+ const created = await createWithCollisionRetry(graph, {
199
351
  entityType,
200
352
  entityId,
201
353
  data: {
202
354
  entity_type: entityType,
203
355
  entity_id: entityId,
204
- name: formatName(entityId),
356
+ name: deriveImportName(filename, entityId),
205
357
  created_at: now,
206
358
  updated_at: now,
207
- created_by: 'import',
208
- updated_by: 'import',
359
+ created_by: userHandle,
360
+ updated_by: userHandle,
209
361
  },
210
362
  content: text,
211
- skipCommit: true,
363
+ folderPath: options?.folderPath,
364
+ user: options?.user,
365
+ commitMessage: options?.commitMessage ?? `Import ${entityType}: ${entityId}`,
366
+ skipCommit: options?.skipCommit ?? true,
212
367
  });
213
- return { entityId, entityType, status: 'created' };
368
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
214
369
  }
215
370
  /** Infer column schema from CSV content. */
216
371
  function inferCsvSchema(csv) {
@@ -1 +1 @@
1
- {"version":3,"file":"import-service.js","sourceRoot":"","sources":["../../src/services/import-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-service.js","sourceRoot":"","sources":["../../src/services/import-service.ts"],"names":[],"mappings":"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"}
@@ -25,11 +25,24 @@ export interface VectorSearchResult {
25
25
  export declare class VectorService {
26
26
  private dbPath;
27
27
  private voyageApiKey?;
28
+ private workspaceRoot?;
28
29
  private db?;
29
30
  private table?;
30
31
  private lastIndexedPath;
31
32
  private initialized;
32
- constructor(dbPath: string, voyageApiKey?: string);
33
+ constructor(dbPath: string, voyageApiKey?: string, workspaceRoot?: string);
34
+ /**
35
+ * For asset entities backed by a PDF, the binary's extracted text
36
+ * lives in a sidecar at `<workspace>/.studiograph/assets-text/asset/<id>.txt`
37
+ * (written at upload time by `uploadAsset`). Returns the contents so
38
+ * `buildEntityText` can fold the PDF into the embedding/FTS input. The
39
+ * markdown body of an asset entity is intentionally light — without
40
+ * this, PDF assets would be effectively invisible to RAG.
41
+ *
42
+ * Best-effort: missing sidecar / read errors return null. Asset stays
43
+ * indexed by frontmatter alone.
44
+ */
45
+ private readPdfSidecar;
33
46
  /**
34
47
  * Open/create the LanceDB table and ensure the FTS index exists.
35
48
  * Call once before using the service.
@@ -83,6 +96,11 @@ export declare function reindexWorkspace(workspacePath: string, repos: Array<{
83
96
  /**
84
97
  * Build a text representation of an entity for FTS/embedding.
85
98
  * Combines entity type, key frontmatter fields, and markdown body.
99
+ *
100
+ * `extraText` is appended after the body — used by VectorService to
101
+ * fold PDF sidecar text into asset-entity embeddings. Kept as a plain
102
+ * string parameter (not file IO) so this stays pure and unit-testable.
103
+ *
86
104
  * Exported for testing.
87
105
  */
88
- export declare function buildEntityText(entity: EntityFile): string;
106
+ export declare function buildEntityText(entity: EntityFile, extraText?: string): string;