studiograph 1.3.48-next.76 → 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 +290 -38
  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 +33 -1
  36. package/dist/services/import-service.js +234 -48
  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/{BxqZoi16.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/{9wFWX30W.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/{BGQcC8WM.js → C9fPdp9e.js} +1 -1
  54. package/dist/web/_app/immutable/chunks/{CpjCnsRC2.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/{C3q48eWV.js → CMv-UMQD.js} +1 -1
  57. package/dist/web/_app/immutable/chunks/{14Ks5neZ.js → CO4LsWNt.js} +1 -1
  58. package/dist/web/_app/immutable/chunks/{DNod4IR72.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/{1TGSC9bG.js → D1AVtJaJ.js} +1 -1
  65. package/dist/web/_app/immutable/chunks/{CHdVOK6e.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/{f1DrsN7w.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/{Bzy2ehL_.js → DYbq0sax.js} +1 -1
  77. package/dist/web/_app/immutable/chunks/{hlnmlkiT.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/{DDQLyGcm.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/{BO35Fv1U.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/{1h1Q-dyp.js → j7kuJOP8.js} +1 -1
  91. package/dist/web/_app/immutable/chunks/{IXuV70l3.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.DbP3pP9I.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.CirGvHiz.js → 0.BMXqKYhl.js} +2 -2
  97. package/dist/web/_app/immutable/nodes/{1.kTjENnhN.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.DIQCUxzh.js → 11.BfZsU6Vh.js} +1 -1
  100. package/dist/web/_app/immutable/nodes/{12.DOlW7sto.js → 12.C5hRguPI.js} +1 -1
  101. package/dist/web/_app/immutable/nodes/{13.qikQg_xf.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.C1tDoWWj.js → 6.CF014BWC.js} +1 -1
  107. package/dist/web/_app/immutable/nodes/{7.ZR0ZhRen.js → 7.B6NRypBk.js} +1 -1
  108. package/dist/web/_app/immutable/nodes/{8.DUZm9iwH.js → 8.B4moM7KQ.js} +1 -1
  109. package/dist/web/_app/immutable/nodes/{9.BuV4JbTd.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/B-z4a3eR.js +0 -1
  117. package/dist/web/_app/immutable/chunks/B6o1oq9U2.js +0 -2
  118. package/dist/web/_app/immutable/chunks/BDCOho_G.js +0 -1
  119. package/dist/web/_app/immutable/chunks/Be0wk0_s2.js +0 -1
  120. package/dist/web/_app/immutable/chunks/C7o6G8Ak2.js +0 -1
  121. package/dist/web/_app/immutable/chunks/CHRfvdkq2.js +0 -1
  122. package/dist/web/_app/immutable/chunks/CSWuNPeq.js +0 -1
  123. package/dist/web/_app/immutable/chunks/CTFOXiYo.js +0 -1
  124. package/dist/web/_app/immutable/chunks/CXYTfe_P2.js +0 -1
  125. package/dist/web/_app/immutable/chunks/DBATbpMA.js +0 -2
  126. package/dist/web/_app/immutable/chunks/DDzRa0WU.js +0 -1
  127. package/dist/web/_app/immutable/chunks/DTnTQDdN.js +0 -1
  128. package/dist/web/_app/immutable/chunks/DYG9AA8k.js +0 -8
  129. package/dist/web/_app/immutable/chunks/DhikmMsg2.js +0 -1
  130. package/dist/web/_app/immutable/chunks/Pr10v8I7.js +0 -1
  131. package/dist/web/_app/immutable/chunks/q69OiNAp.js +0 -1
  132. package/dist/web/_app/immutable/entry/start.Cl9IsfI4.js +0 -1
  133. package/dist/web/_app/immutable/nodes/10.5xATla_3.js +0 -1
  134. package/dist/web/_app/immutable/nodes/2.CiklFX4J.js +0 -130
  135. package/dist/web/_app/immutable/nodes/3.Byts3_Iy.js +0 -2
  136. package/dist/web/_app/immutable/nodes/4.BWfkHbqv.js +0 -11
  137. package/dist/web/_app/immutable/nodes/5.tH1sz1qb.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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"}
@@ -8,15 +8,38 @@
8
8
  * - .pdf → note entity (extracts text via pdf-parse)
9
9
  */
10
10
  import { BaseGraphManager } from '../core/graph.js';
11
+ import type { GitUser } from './git.js';
11
12
  export interface ImportResult {
12
13
  entityId: string;
13
14
  entityType: string;
14
15
  status: 'created' | 'skipped' | 'error';
15
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[];
16
27
  }
17
28
  export interface ImportOptions {
18
29
  entityType?: string;
19
30
  entityId?: string;
31
+ /** Override commit author. When omitted, the import is committed under
32
+ * whatever default identity the underlying git service uses. */
33
+ user?: GitUser;
34
+ /** Repo-relative folder to create the entry in. Empty/undefined = repo
35
+ * root. Mirrors graph.create's folderPath option. */
36
+ folderPath?: string;
37
+ /** Commit message override. Defaults to a sensible auto-generated one. */
38
+ commitMessage?: string;
39
+ /** Defer the git commit. Defaults to true (preserves existing behavior
40
+ * where the agent tool batches commits). HTTP callers should pass false
41
+ * so each import lands as its own commit. */
42
+ skipCommit?: boolean;
20
43
  }
21
44
  export declare function isSupportedFile(filename: string): boolean;
22
45
  /**
@@ -26,6 +49,15 @@ export declare function isSupportedFile(filename: string): boolean;
26
49
  export declare function extractText(filename: string, content: string): Promise<string>;
27
50
  /**
28
51
  * Import a single file as a Studiograph entity.
29
- * 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.
30
62
  */
31
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,107 +162,175 @@ 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);
66
203
  }
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}` };
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
+ }
77
219
  }
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
+ }
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
- /** Import a .md file as a note entity. Parses frontmatter if present. */
88
- async function importMarkdown(graph, entityId, text, options) {
89
- const entityType = (options?.entityType ?? 'note');
236
+ /** Import a .md file. Frontmatter wins: if the file declares
237
+ * `entity_type`/`entity_id`, those are used; options.entityType/entityId
238
+ * are fallbacks; final fallback is `note` and the slugified filename.
239
+ * This preserves the explicit shape of structured markdown a user has
240
+ * already prepared (decks, references, datasets-by-hand, etc.) instead
241
+ * of overwriting it with a generic default. */
242
+ async function importMarkdown(graph, entityId, text, filename, options) {
90
243
  const parsed = matter(text);
244
+ const fmType = typeof parsed.data.entity_type === 'string' ? parsed.data.entity_type : undefined;
245
+ const fmId = typeof parsed.data.entity_id === 'string' ? parsed.data.entity_id : undefined;
246
+ const entityType = (fmType ?? options?.entityType ?? 'note');
247
+ const finalId = fmId ?? options?.entityId ?? entityId;
91
248
  const now = new Date().toISOString();
249
+ const userHandle = options?.user
250
+ ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
251
+ : 'import';
92
252
  const data = {
93
253
  ...parsed.data,
94
254
  entity_type: entityType,
95
- entity_id: entityId,
96
- name: parsed.data.name ?? parsed.data.title ?? formatName(entityId),
255
+ entity_id: finalId,
256
+ name: parsed.data.name ?? parsed.data.title ?? deriveImportName(filename, finalId),
97
257
  created_at: parsed.data.created_at ?? now,
98
258
  updated_at: now,
99
- created_by: 'import',
100
- updated_by: 'import',
259
+ // Only stamp created_by/updated_by when the source didn't declare them —
260
+ // preserves attribution for files exported from another workspace.
261
+ created_by: parsed.data.created_by ?? userHandle,
262
+ updated_by: userHandle,
101
263
  };
102
- await graph.create({
264
+ const created = await createWithCollisionRetry(graph, {
103
265
  entityType,
104
- entityId,
266
+ entityId: finalId,
105
267
  data,
106
268
  content: parsed.content.trim(),
107
- skipCommit: true,
269
+ folderPath: options?.folderPath,
270
+ user: options?.user,
271
+ commitMessage: options?.commitMessage ?? `Import ${entityType}: ${finalId}`,
272
+ skipCommit: options?.skipCommit ?? true,
108
273
  });
109
- return { entityId, entityType, status: 'created' };
274
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
110
275
  }
111
276
  /** Import a .txt file as a note entity. */
112
277
  async function importText(graph, entityId, text, filename, options) {
113
278
  const entityType = (options?.entityType ?? 'note');
114
279
  const now = new Date().toISOString();
115
- await graph.create({
280
+ const userHandle = options?.user
281
+ ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
282
+ : 'import';
283
+ const created = await createWithCollisionRetry(graph, {
116
284
  entityType,
117
285
  entityId,
118
286
  data: {
119
287
  entity_type: entityType,
120
288
  entity_id: entityId,
121
- name: formatName(entityId),
289
+ name: deriveImportName(filename, entityId),
122
290
  created_at: now,
123
291
  updated_at: now,
124
- created_by: 'import',
125
- updated_by: 'import',
292
+ created_by: userHandle,
293
+ updated_by: userHandle,
126
294
  },
127
295
  content: text.trim(),
128
- skipCommit: true,
296
+ folderPath: options?.folderPath,
297
+ user: options?.user,
298
+ commitMessage: options?.commitMessage ?? `Import note: ${entityId}`,
299
+ skipCommit: options?.skipCommit ?? true,
129
300
  });
130
- return { entityId, entityType, status: 'created' };
301
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
131
302
  }
132
303
  /** Import a .csv file as a dataset entity with inferred schema. */
133
304
  async function importCsv(graph, entityId, text, filename, options) {
134
305
  const entityType = (options?.entityType ?? 'dataset');
135
306
  const schema = inferCsvSchema(text);
307
+ if (schema.length === 0) {
308
+ return { entityId, entityType, status: 'error', error: 'CSV is empty or has no parseable header row' };
309
+ }
136
310
  const now = new Date().toISOString();
137
- await graph.create({
311
+ const userHandle = options?.user
312
+ ? (options.user.email?.split('@')[0] ?? options.user.name ?? 'import')
313
+ : 'import';
314
+ const created = await createWithCollisionRetry(graph, {
138
315
  entityType,
139
316
  entityId,
140
317
  data: {
141
318
  entity_type: entityType,
142
319
  entity_id: entityId,
143
- name: formatName(entityId),
320
+ name: deriveImportName(filename, entityId),
144
321
  schema,
145
322
  created_at: now,
146
323
  updated_at: now,
147
- created_by: 'import',
148
- updated_by: 'import',
324
+ created_by: userHandle,
325
+ updated_by: userHandle,
149
326
  },
150
327
  content: text.trim(),
151
- skipCommit: true,
328
+ folderPath: options?.folderPath,
329
+ user: options?.user,
330
+ commitMessage: options?.commitMessage ?? `Import dataset: ${entityId}`,
331
+ skipCommit: options?.skipCommit ?? true,
152
332
  });
153
- return { entityId, entityType, status: 'created' };
333
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
154
334
  }
155
335
  /** Import a .pdf file as a note entity. Extracts text via pdf-parse. */
156
336
  async function importPdf(graph, entityId, data, filename, options) {
@@ -164,22 +344,28 @@ async function importPdf(graph, entityId, data, filename, options) {
164
344
  }
165
345
  const entityType = (options?.entityType ?? 'note');
166
346
  const now = new Date().toISOString();
167
- 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, {
168
351
  entityType,
169
352
  entityId,
170
353
  data: {
171
354
  entity_type: entityType,
172
355
  entity_id: entityId,
173
- name: formatName(entityId),
356
+ name: deriveImportName(filename, entityId),
174
357
  created_at: now,
175
358
  updated_at: now,
176
- created_by: 'import',
177
- updated_by: 'import',
359
+ created_by: userHandle,
360
+ updated_by: userHandle,
178
361
  },
179
362
  content: text,
180
- skipCommit: true,
363
+ folderPath: options?.folderPath,
364
+ user: options?.user,
365
+ commitMessage: options?.commitMessage ?? `Import ${entityType}: ${entityId}`,
366
+ skipCommit: options?.skipCommit ?? true,
181
367
  });
182
- return { entityId, entityType, status: 'created' };
368
+ return { entityId: created.entityId, entityType, status: 'created', path: created.path };
183
369
  }
184
370
  /** Infer column schema from CSV content. */
185
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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"}