@amaster.ai/pi-attachments 0.1.1-beta.0 → 0.1.1

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/README.md +50 -27
  2. package/dist/classify.d.ts +18 -7
  3. package/dist/classify.d.ts.map +1 -1
  4. package/dist/classify.js +235 -92
  5. package/dist/classify.js.map +1 -1
  6. package/dist/extension.d.ts +22 -0
  7. package/dist/extension.d.ts.map +1 -0
  8. package/dist/extension.js +359 -0
  9. package/dist/extension.js.map +1 -0
  10. package/dist/index.d.ts +2 -7
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -5
  13. package/dist/index.js.map +1 -1
  14. package/package.json +32 -5
  15. package/preview.png +0 -0
  16. package/dist/diagnostics.d.ts +0 -8
  17. package/dist/diagnostics.d.ts.map +0 -1
  18. package/dist/diagnostics.js +0 -30
  19. package/dist/diagnostics.js.map +0 -1
  20. package/dist/http.d.ts +0 -10
  21. package/dist/http.d.ts.map +0 -1
  22. package/dist/http.js +0 -44
  23. package/dist/http.js.map +0 -1
  24. package/dist/local-store.d.ts +0 -20
  25. package/dist/local-store.d.ts.map +0 -1
  26. package/dist/local-store.js +0 -121
  27. package/dist/local-store.js.map +0 -1
  28. package/dist/multipart.d.ts +0 -9
  29. package/dist/multipart.d.ts.map +0 -1
  30. package/dist/multipart.js +0 -48
  31. package/dist/multipart.js.map +0 -1
  32. package/dist/normalize.d.ts +0 -7
  33. package/dist/normalize.d.ts.map +0 -1
  34. package/dist/normalize.js +0 -83
  35. package/dist/normalize.js.map +0 -1
  36. package/dist/parser.d.ts +0 -12
  37. package/dist/parser.d.ts.map +0 -1
  38. package/dist/parser.js +0 -168
  39. package/dist/parser.js.map +0 -1
  40. package/dist/prompt.d.ts +0 -10
  41. package/dist/prompt.d.ts.map +0 -1
  42. package/dist/prompt.js +0 -38
  43. package/dist/prompt.js.map +0 -1
  44. package/dist/remote-fetch.d.ts +0 -10
  45. package/dist/remote-fetch.d.ts.map +0 -1
  46. package/dist/remote-fetch.js +0 -35
  47. package/dist/remote-fetch.js.map +0 -1
  48. package/dist/routes.d.ts +0 -14
  49. package/dist/routes.d.ts.map +0 -1
  50. package/dist/routes.js +0 -91
  51. package/dist/routes.js.map +0 -1
  52. package/dist/service.d.ts +0 -9
  53. package/dist/service.d.ts.map +0 -1
  54. package/dist/service.js +0 -140
  55. package/dist/service.js.map +0 -1
  56. package/dist/types.d.ts +0 -85
  57. package/dist/types.d.ts.map +0 -1
  58. package/dist/types.js +0 -2
  59. package/dist/types.js.map +0 -1
  60. package/dist/upload-proxy.d.ts +0 -19
  61. package/dist/upload-proxy.d.ts.map +0 -1
  62. package/dist/upload-proxy.js +0 -105
  63. package/dist/upload-proxy.js.map +0 -1
@@ -1,121 +0,0 @@
1
- import { createHash, randomUUID } from 'node:crypto';
2
- import { copyFile, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import { mimeTypeFromFileName } from './classify.js';
6
- export class LocalAttachmentStore {
7
- rootDir;
8
- constructor(rootDir) {
9
- this.rootDir = rootDir;
10
- }
11
- async putFile(input) {
12
- const sourcePath = fileURLToPathIfNeeded(input.sourcePath);
13
- const sourceStat = await stat(sourcePath);
14
- if (!sourceStat.isFile()) {
15
- throw new Error(`attachment source is not a file: ${input.sourcePath}`);
16
- }
17
- const name = sanitizeFileName(input.name ?? path.basename(sourcePath));
18
- const attachmentId = randomUUID();
19
- const dir = this.attachmentDir(input.sessionId, attachmentId);
20
- await mkdir(dir, { recursive: true });
21
- const targetPath = path.join(dir, name);
22
- await copyFile(sourcePath, targetPath);
23
- const record = createRecord({
24
- attachmentId,
25
- name,
26
- size: sourceStat.size,
27
- path: targetPath,
28
- ...optionalMimeType(input.mimeType ?? mimeTypeFromFileName(name)),
29
- });
30
- await writeRecord(dir, record);
31
- return record;
32
- }
33
- async putBuffer(input) {
34
- const name = sanitizeFileName(input.name);
35
- const attachmentId = randomUUID();
36
- const dir = this.attachmentDir(input.sessionId, attachmentId);
37
- await mkdir(dir, { recursive: true });
38
- const targetPath = path.join(dir, name);
39
- await writeFile(targetPath, input.data);
40
- const record = createRecord({
41
- attachmentId,
42
- name,
43
- size: input.data.byteLength,
44
- path: targetPath,
45
- ...optionalMimeType(input.mimeType ?? mimeTypeFromFileName(name)),
46
- });
47
- await writeRecord(dir, record);
48
- return record;
49
- }
50
- async readRecord(attachmentId) {
51
- const safeId = sanitizeId(attachmentId);
52
- const candidates = await findRecordCandidates(this.rootDir, safeId);
53
- for (const candidate of candidates) {
54
- try {
55
- const parsed = JSON.parse(await readFile(candidate, 'utf8'));
56
- if (parsed.attachmentId === attachmentId) {
57
- return parsed;
58
- }
59
- }
60
- catch {
61
- // Keep looking for another candidate.
62
- }
63
- }
64
- throw new Error(`stored attachment not found: ${attachmentId}`);
65
- }
66
- attachmentDir(sessionId, attachmentId) {
67
- const sessionPart = sanitizeId(sessionId ?? 'global');
68
- const hash = createHash('sha256').update(attachmentId).digest('hex').slice(0, 8);
69
- return path.join(this.rootDir, sessionPart, `${hash}-${sanitizeId(attachmentId)}`);
70
- }
71
- }
72
- function createRecord(input) {
73
- return {
74
- attachmentId: input.attachmentId,
75
- name: input.name,
76
- ...(input.mimeType ? { mimeType: input.mimeType } : {}),
77
- size: input.size,
78
- path: input.path,
79
- createdAt: new Date().toISOString(),
80
- };
81
- }
82
- async function writeRecord(dir, record) {
83
- await writeFile(path.join(dir, 'attachment.json'), `${JSON.stringify(record, null, 2)}\n`, 'utf8');
84
- }
85
- async function findRecordCandidates(rootDir, attachmentId) {
86
- const { readdir } = await import('node:fs/promises');
87
- const result = [];
88
- try {
89
- for (const sessionEntry of await readdir(rootDir, { withFileTypes: true })) {
90
- if (!sessionEntry.isDirectory())
91
- continue;
92
- const sessionDir = path.join(rootDir, sessionEntry.name);
93
- for (const attachmentEntry of await readdir(sessionDir, { withFileTypes: true })) {
94
- if (attachmentEntry.isDirectory() && attachmentEntry.name.endsWith(`-${attachmentId}`)) {
95
- result.push(path.join(sessionDir, attachmentEntry.name, 'attachment.json'));
96
- }
97
- }
98
- }
99
- }
100
- catch {
101
- return [];
102
- }
103
- return result;
104
- }
105
- function sanitizeFileName(value) {
106
- const base = path
107
- .basename(value)
108
- .replace(/[^\w .@()+=[\]-]/g, '_')
109
- .trim();
110
- return base || 'attachment';
111
- }
112
- function optionalMimeType(mimeType) {
113
- return mimeType ? { mimeType } : {};
114
- }
115
- function sanitizeId(value) {
116
- return value.replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 160) || 'attachment';
117
- }
118
- function fileURLToPathIfNeeded(value) {
119
- return value.startsWith('file://') ? fileURLToPath(value) : value;
120
- }
121
- //# sourceMappingURL=local-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,KAKb;QACC,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,YAAY;YACZ,IAAI;YACJ,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU;YAChB,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAClE,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAKf;QACC,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,YAAY;YACZ,IAAI;YACJ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,UAAU;YAChB,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAClE,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAAoB;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAA2B,CAAC;gBACvF,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;oBACzC,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IAEO,aAAa,CAAC,SAA6B,EAAE,YAAoB;QACvE,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAMrB;IACC,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,MAA8B;IACpE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EACjC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtC,MAAM,CACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAAe,EAAE,YAAoB;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,KAAK,MAAM,YAAY,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAAE,SAAS;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,eAAe,IAAI,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACjF,IAAI,eAAe,CAAC,WAAW,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,CAAC;oBACvF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,IAAI,GAAG,IAAI;SACd,QAAQ,CAAC,KAAK,CAAC;SACf,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,IAAI,EAAE,CAAC;IACV,OAAO,IAAI,IAAI,YAAY,CAAC;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B;IACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC"}
@@ -1,9 +0,0 @@
1
- export type MultipartFile = {
2
- fieldName: string;
3
- fileName: string;
4
- contentType?: string;
5
- data: Buffer;
6
- };
7
- export declare function parseMultipartBoundary(contentType: string | string[] | undefined): string | undefined;
8
- export declare function parseMultipartFiles(body: Buffer, boundary: string): MultipartFile[];
9
- //# sourceMappingURL=multipart.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multipart.d.ts","sourceRoot":"","sources":["../src/multipart.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CA8BnF"}
package/dist/multipart.js DELETED
@@ -1,48 +0,0 @@
1
- export function parseMultipartBoundary(contentType) {
2
- const value = Array.isArray(contentType) ? contentType[0] : contentType;
3
- const match = value?.match(/(?:^|;)\s*boundary=(?:"([^"]+)"|([^;]+))/i);
4
- return match?.[1] ?? match?.[2]?.trim();
5
- }
6
- export function parseMultipartFiles(body, boundary) {
7
- const marker = `--${boundary}`;
8
- const text = body.toString('binary');
9
- const parts = text.split(marker).slice(1, -1);
10
- const files = [];
11
- for (const part of parts) {
12
- const trimmed = part.replace(/^\r?\n/, '');
13
- const separator = trimmed.indexOf('\r\n\r\n');
14
- if (separator < 0) {
15
- continue;
16
- }
17
- const rawHeaders = trimmed.slice(0, separator);
18
- const contentStart = separator + 4;
19
- const rawContent = trimmed.slice(contentStart).replace(/\r\n$/, '');
20
- const headers = parsePartHeaders(rawHeaders);
21
- const disposition = headers.get('content-disposition') ?? '';
22
- const name = disposition.match(/name="([^"]+)"/)?.[1];
23
- const fileName = disposition.match(/filename="([^"]*)"/)?.[1];
24
- if (!name || !fileName) {
25
- continue;
26
- }
27
- const contentType = headers.get('content-type');
28
- files.push({
29
- fieldName: name,
30
- fileName,
31
- ...(contentType ? { contentType } : {}),
32
- data: Buffer.from(rawContent, 'binary'),
33
- });
34
- }
35
- return files;
36
- }
37
- function parsePartHeaders(value) {
38
- const headers = new Map();
39
- for (const line of value.split(/\r?\n/)) {
40
- const separator = line.indexOf(':');
41
- if (separator <= 0) {
42
- continue;
43
- }
44
- headers.set(line.slice(0, separator).trim().toLowerCase(), line.slice(separator + 1).trim());
45
- }
46
- return headers;
47
- }
48
- //# sourceMappingURL=multipart.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multipart.js","sourceRoot":"","sources":["../src/multipart.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { NormalizedAttachment } from './types.js';
2
- export declare class AttachmentValidationError extends Error {
3
- readonly statusCode: number;
4
- constructor(message: string, statusCode?: number);
5
- }
6
- export declare function normalizeAttachments(value: unknown, maxCount: number): NormalizedAttachment[];
7
- //# sourceMappingURL=normalize.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyC,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBAAa,yBAA0B,SAAQ,KAAK;IAGhD,QAAQ,CAAC,UAAU;gBADnB,OAAO,EAAE,MAAM,EACN,UAAU,SAAM;CAK5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAW7F"}
package/dist/normalize.js DELETED
@@ -1,83 +0,0 @@
1
- export class AttachmentValidationError extends Error {
2
- statusCode;
3
- constructor(message, statusCode = 400) {
4
- super(message);
5
- this.statusCode = statusCode;
6
- this.name = 'AttachmentValidationError';
7
- }
8
- }
9
- export function normalizeAttachments(value, maxCount) {
10
- if (value === undefined) {
11
- return [];
12
- }
13
- if (!Array.isArray(value)) {
14
- throw new AttachmentValidationError('attachments must be an array');
15
- }
16
- if (value.length > maxCount) {
17
- throw new AttachmentValidationError(`attachments must include at most ${maxCount} files`);
18
- }
19
- return value.map((raw, index) => normalizeAttachment(raw, index));
20
- }
21
- function normalizeAttachment(value, index) {
22
- if (!value || typeof value !== 'object') {
23
- throw new AttachmentValidationError(`attachment ${index + 1} must be an object`);
24
- }
25
- const candidate = value;
26
- const id = trimToUndefined(candidate.id);
27
- const name = trimToUndefined(candidate.name);
28
- if (!id) {
29
- throw new AttachmentValidationError(`attachment ${index + 1} id is required`);
30
- }
31
- if (!name) {
32
- throw new AttachmentValidationError(`attachment ${index + 1} name is required`);
33
- }
34
- const source = normalizeSource(candidate.source, index);
35
- const mimeType = trimToUndefined(candidate.mimeType);
36
- const size = typeof candidate.size === 'number' && Number.isFinite(candidate.size)
37
- ? Math.max(0, Math.floor(candidate.size))
38
- : undefined;
39
- return {
40
- id,
41
- name,
42
- ...(mimeType ? { mimeType } : {}),
43
- ...(size !== undefined ? { size } : {}),
44
- source,
45
- };
46
- }
47
- function normalizeSource(value, index) {
48
- if (!value || typeof value !== 'object') {
49
- throw new AttachmentValidationError(`attachment ${index + 1} source is required`);
50
- }
51
- const source = value;
52
- if (source.kind === 'inlineText') {
53
- if (typeof source.text !== 'string') {
54
- throw new AttachmentValidationError(`attachment ${index + 1} inline text is required`);
55
- }
56
- return {
57
- kind: 'inlineText',
58
- text: source.text,
59
- ...(typeof source.truncated === 'boolean' ? { truncated: source.truncated } : {}),
60
- };
61
- }
62
- if (source.kind === 'remoteObject') {
63
- const url = trimToUndefined(typeof source.url === 'string' ? source.url : undefined);
64
- if (!url) {
65
- throw new AttachmentValidationError(`attachment ${index + 1} remote url is required`);
66
- }
67
- const key = trimToUndefined(typeof source.key === 'string' ? source.key : undefined);
68
- return { kind: 'remoteObject', url, ...(key ? { key } : {}) };
69
- }
70
- if (source.kind === 'storedFile') {
71
- const attachmentId = trimToUndefined(typeof source.attachmentId === 'string' ? source.attachmentId : undefined);
72
- if (!attachmentId) {
73
- throw new AttachmentValidationError(`attachment ${index + 1} stored attachment id is required`);
74
- }
75
- return { kind: 'storedFile', attachmentId };
76
- }
77
- throw new AttachmentValidationError(`attachment ${index + 1} source kind is invalid`);
78
- }
79
- function trimToUndefined(value) {
80
- const trimmed = value?.trim();
81
- return trimmed ? trimmed : undefined;
82
- }
83
- //# sourceMappingURL=normalize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import type { ParseAttachmentInput, ParsedAttachment } from './types.js';
2
- export interface AttachmentParser {
3
- parse(input: ParseAttachmentInput): Promise<ParsedAttachment>;
4
- }
5
- export declare class BasicAttachmentParser implements AttachmentParser {
6
- parse(input: ParseAttachmentInput): Promise<ParsedAttachment>;
7
- }
8
- export declare class LiteParseAttachmentParser implements AttachmentParser {
9
- private readonly fallback;
10
- parse(input: ParseAttachmentInput): Promise<ParsedAttachment>;
11
- }
12
- //# sourceMappingURL=parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/D;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IACtD,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAkBpE;AAED,qBAAa,yBAA0B,YAAW,gBAAgB;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IAElD,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA2BpE"}
package/dist/parser.js DELETED
@@ -1,168 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import JSZip from 'jszip';
3
- import { isTextLikeAttachment } from './classify.js';
4
- export class BasicAttachmentParser {
5
- async parse(input) {
6
- if (isPptxAttachment(input.name, input.mimeType)) {
7
- return parsePptxText(input.path);
8
- }
9
- if (isLegacyPptAttachment(input.name, input.mimeType)) {
10
- return parseLegacyPptText(input.path);
11
- }
12
- if (!isTextLikeAttachment(input.name, input.mimeType)) {
13
- throw new Error(`No basic parser available for ${input.name}`);
14
- }
15
- const raw = await readFile(input.path, 'utf8');
16
- if (isDelimitedFile(input.name, input.mimeType)) {
17
- return {
18
- text: delimitedTextToMarkdown(raw, input.name.toLowerCase().endsWith('.tsv') ? '\t' : ','),
19
- };
20
- }
21
- return { text: raw };
22
- }
23
- }
24
- export class LiteParseAttachmentParser {
25
- fallback = new BasicAttachmentParser();
26
- async parse(input) {
27
- if (isPptxAttachment(input.name, input.mimeType)) {
28
- return parsePptxText(input.path);
29
- }
30
- if (isTextLikeAttachment(input.name, input.mimeType)) {
31
- return this.fallback.parse(input);
32
- }
33
- const { LiteParse } = await import('@llamaindex/liteparse');
34
- const parser = new LiteParse({
35
- outputFormat: input.format ?? 'text',
36
- ocrEnabled: input.ocr !== 'off',
37
- maxPages: input.maxPages,
38
- preciseBoundingBox: input.format === 'json',
39
- });
40
- try {
41
- const result = await parser.parse(input.path, true);
42
- return {
43
- text: result.text,
44
- pageCount: result.pages.length,
45
- };
46
- }
47
- catch (error) {
48
- if (isLegacyPptAttachment(input.name, input.mimeType)) {
49
- return parseLegacyPptText(input.path);
50
- }
51
- throw error;
52
- }
53
- }
54
- }
55
- function isDelimitedFile(name, mimeType) {
56
- const lowerMime = mimeType?.toLowerCase();
57
- return (lowerMime === 'text/csv' ||
58
- lowerMime === 'application/csv' ||
59
- lowerMime === 'text/tab-separated-values' ||
60
- /\.(csv|tsv)$/i.test(name));
61
- }
62
- function isPptxAttachment(name, mimeType) {
63
- const lowerMime = mimeType?.split(';')[0]?.trim().toLowerCase();
64
- return (lowerMime === 'application/vnd.openxmlformats-officedocument.presentationml.presentation' ||
65
- /\.pptx$/i.test(name));
66
- }
67
- function isLegacyPptAttachment(name, mimeType) {
68
- const lowerMime = mimeType?.split(';')[0]?.trim().toLowerCase();
69
- return lowerMime === 'application/vnd.ms-powerpoint' || /\.ppt$/i.test(name);
70
- }
71
- async function parsePptxText(filePath) {
72
- const zip = await JSZip.loadAsync(await readFile(filePath));
73
- const slideEntries = Object.values(zip.files)
74
- .filter((entry) => /^ppt\/slides\/slide\d+\.xml$/i.test(entry.name))
75
- .sort((a, b) => slideNumber(a.name) - slideNumber(b.name));
76
- const slides = [];
77
- for (const entry of slideEntries) {
78
- const xml = await entry.async('text');
79
- const textRuns = extractPresentationText(xml);
80
- const text = textRuns.join('\n').trim();
81
- if (text) {
82
- slides.push(`Slide ${slideNumber(entry.name)}:\n${text}`);
83
- }
84
- }
85
- return {
86
- text: slides.join('\n\n') || '[No readable text found in presentation slides]',
87
- pageCount: slideEntries.length,
88
- };
89
- }
90
- async function parseLegacyPptText(filePath) {
91
- const data = await readFile(filePath);
92
- const text = data
93
- .toString('latin1')
94
- .match(/[ -~\t]{4,}/g)
95
- ?.map((value) => value.trim())
96
- .filter((value, index, all) => value.length > 3 && all.indexOf(value) === index)
97
- .slice(0, 400)
98
- .join('\n') ?? '';
99
- return {
100
- text: text || '[No readable text found in legacy PowerPoint file]',
101
- };
102
- }
103
- function slideNumber(name) {
104
- return Number(name.match(/slide(\d+)\.xml$/i)?.[1] ?? 0);
105
- }
106
- function extractPresentationText(xml) {
107
- return [...xml.matchAll(/<a:t[^>]*>([\s\S]*?)<\/a:t>/g)]
108
- .map((match) => decodeXmlText(match[1] ?? '').trim())
109
- .filter(Boolean);
110
- }
111
- function decodeXmlText(value) {
112
- return value
113
- .replace(/&lt;/g, '<')
114
- .replace(/&gt;/g, '>')
115
- .replace(/&quot;/g, '"')
116
- .replace(/&apos;/g, "'")
117
- .replace(/&amp;/g, '&');
118
- }
119
- function delimitedTextToMarkdown(value, delimiter) {
120
- const rows = value
121
- .split(/\r?\n/)
122
- .filter((line) => line.length > 0)
123
- .map((line) => splitDelimitedLine(line, delimiter));
124
- if (rows.length === 0) {
125
- return '';
126
- }
127
- const width = Math.max(...rows.map((row) => row.length), 1);
128
- const normalized = rows.map((row) => Array.from({ length: width }, (_value, index) => formatMarkdownCell(row[index])));
129
- const header = normalized[0] ?? [];
130
- const body = normalized.slice(1);
131
- return [
132
- `| ${header.join(' | ')} |`,
133
- `| ${header.map(() => '---').join(' | ')} |`,
134
- ...body.map((row) => `| ${row.join(' | ')} |`),
135
- ].join('\n');
136
- }
137
- function splitDelimitedLine(line, delimiter) {
138
- const cells = [];
139
- let current = '';
140
- let quoted = false;
141
- for (let index = 0; index < line.length; index += 1) {
142
- const char = line[index];
143
- if (char === '"') {
144
- if (quoted && line[index + 1] === '"') {
145
- current += '"';
146
- index += 1;
147
- }
148
- else {
149
- quoted = !quoted;
150
- }
151
- continue;
152
- }
153
- if (!quoted && char === delimiter) {
154
- cells.push(current);
155
- current = '';
156
- continue;
157
- }
158
- current += char;
159
- }
160
- cells.push(current);
161
- return cells;
162
- }
163
- function formatMarkdownCell(value) {
164
- return String(value ?? '')
165
- .replace(/\r?\n/g, ' ')
166
- .replace(/\|/g, '\\|');
167
- }
168
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAOrD,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,KAAK,CAAC,KAA2B;QACrC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO;gBACL,IAAI,EAAE,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;aAC3F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,yBAAyB;IACnB,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAExD,KAAK,CAAC,KAAK,CAAC,KAA2B;QACrC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM;YACpC,UAAU,EAAE,KAAK,CAAC,GAAG,KAAK,KAAK;YAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,kBAAkB,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,QAA4B;IACjE,MAAM,SAAS,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC1C,OAAO,CACL,SAAS,KAAK,UAAU;QACxB,SAAS,KAAK,iBAAiB;QAC/B,SAAS,KAAK,2BAA2B;QACzC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAA4B;IAClE,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,OAAO,CACL,SAAS,KAAK,2EAA2E;QACzF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,QAA4B;IACvE,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,OAAO,SAAS,KAAK,+BAA+B,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,iDAAiD;QAC9E,SAAS,EAAE,YAAY,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GACR,IAAI;SACD,QAAQ,CAAC,QAAQ,CAAC;SAClB,KAAK,CAAC,cAAc,CAAC;QACtB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;SAC/E,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,OAAO;QACL,IAAI,EAAE,IAAI,IAAI,oDAAoD;KACnE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACpD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,SAAiB;IAC/D,MAAM,IAAI,GAAG,KAAK;SACf,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACjF,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO;QACL,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC3B,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC5C,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,SAAiB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtC,OAAO,IAAI,GAAG,CAAC;gBACf,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,MAAM,CAAC;YACnB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC"}
package/dist/prompt.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import type { PreparedAttachmentBundle } from './types.js';
2
- export declare function renderAttachmentPrompt(message: string, bundle: PreparedAttachmentBundle): string;
3
- export declare function attachmentHeader(input: {
4
- index: number;
5
- name: string;
6
- mimeType?: string;
7
- size?: number;
8
- }): string;
9
- export declare function truncateText(value: string, maxChars: number): string;
10
- //# sourceMappingURL=prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAuBhG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAQT;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE"}
package/dist/prompt.js DELETED
@@ -1,38 +0,0 @@
1
- export function renderAttachmentPrompt(message, bundle) {
2
- if (bundle.attachments.length === 0) {
3
- return message;
4
- }
5
- const blocks = bundle.promptBlocks.length > 0 ? bundle.promptBlocks : ['No attachment content was available.'];
6
- const currentTurnImageGuidance = bundle.images.length > 0
7
- ? [
8
- 'Current-turn image inputs are attached as model-visible image content.',
9
- 'Ignore stale earlier statements that images were unsupported, unavailable, or could only be inspected with file tools.',
10
- ].join(' ')
11
- : undefined;
12
- return [
13
- message,
14
- '',
15
- 'Uploaded attachments for this turn:',
16
- currentTurnImageGuidance,
17
- blocks.join('\n\n---\n\n'),
18
- ]
19
- .filter(Boolean)
20
- .join('\n')
21
- .trim();
22
- }
23
- export function attachmentHeader(input) {
24
- return [
25
- `Attachment ${input.index + 1}: ${input.name}`,
26
- input.mimeType ? `mimeType=${input.mimeType}` : undefined,
27
- input.size !== undefined ? `size=${input.size}` : undefined,
28
- ]
29
- .filter(Boolean)
30
- .join(' ');
31
- }
32
- export function truncateText(value, maxChars) {
33
- if (value.length <= maxChars) {
34
- return value;
35
- }
36
- return `${value.slice(0, maxChars)}\n\n[truncated after ${maxChars} characters]`;
37
- }
38
- //# sourceMappingURL=prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,MAAgC;IACtF,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GACV,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC;IAClG,MAAM,wBAAwB,GAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC;YACE,wEAAwE;YACxE,wHAAwH;SACzH,CAAC,IAAI,CAAC,GAAG,CAAC;QACb,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACL,OAAO;QACP,EAAE;QACF,qCAAqC;QACrC,wBAAwB;QACxB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;KAC3B;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAKhC;IACC,OAAO;QACL,cAAc,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE;QAC9C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;QACzD,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,QAAgB;IAC1D,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,wBAAwB,QAAQ,cAAc,CAAC;AACnF,CAAC"}
@@ -1,10 +0,0 @@
1
- export declare function fetchRemoteAttachment(input: {
2
- url: string;
3
- fallbackMimeType?: string;
4
- maxBytes: number;
5
- timeoutMs: number;
6
- }): Promise<{
7
- data: Buffer;
8
- mimeType?: string;
9
- }>;
10
- //# sourceMappingURL=remote-fetch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-fetch.d.ts","sourceRoot":"","sources":["../src/remote-fetch.ts"],"names":[],"mappings":"AAAA,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/C"}
@@ -1,35 +0,0 @@
1
- export async function fetchRemoteAttachment(input) {
2
- const controller = new AbortController();
3
- const timer = setTimeout(() => controller.abort(), input.timeoutMs);
4
- try {
5
- const response = await fetch(input.url, { signal: controller.signal });
6
- if (!response.ok) {
7
- throw new Error(`HTTP ${response.status}`);
8
- }
9
- const contentLength = Number(response.headers.get('content-length') ?? 0);
10
- if (contentLength > input.maxBytes) {
11
- throw new Error(`attachment exceeds ${input.maxBytes} bytes`);
12
- }
13
- const data = Buffer.from(await response.arrayBuffer());
14
- if (data.byteLength > input.maxBytes) {
15
- throw new Error(`attachment exceeds ${input.maxBytes} bytes`);
16
- }
17
- const mimeType = trimToUndefined(response.headers.get('content-type')?.split(';')[0]) ??
18
- input.fallbackMimeType;
19
- return { data, ...(mimeType ? { mimeType } : {}) };
20
- }
21
- catch (error) {
22
- if (error instanceof Error && error.name === 'AbortError') {
23
- throw new Error(`attachment fetch timed out after ${input.timeoutMs}ms`);
24
- }
25
- throw error;
26
- }
27
- finally {
28
- clearTimeout(timer);
29
- }
30
- }
31
- function trimToUndefined(value) {
32
- const trimmed = value?.trim();
33
- return trimmed ? trimmed : undefined;
34
- }
35
- //# sourceMappingURL=remote-fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-fetch.js","sourceRoot":"","sources":["../src/remote-fetch.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAK3C;IACC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,QAAQ,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,QAAQ,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,QAAQ,GACZ,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,KAAK,CAAC,gBAAgB,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC"}
package/dist/routes.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { IncomingMessage, ServerResponse } from 'node:http';
2
- import type { AttachmentService } from './service.js';
3
- import type { AttachmentContext } from './types.js';
4
- import { type AttachmentUploadAuth } from './upload-proxy.js';
5
- export declare function handleAttachmentRoutes(input: {
6
- request: IncomingMessage;
7
- response: ServerResponse;
8
- url: URL;
9
- service: AttachmentService;
10
- uploadAuth: AttachmentUploadAuth;
11
- maxUploadBodyBytes: number;
12
- context: AttachmentContext;
13
- }): Promise<boolean>;
14
- //# sourceMappingURL=routes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,KAAK,oBAAoB,EAAyB,MAAM,mBAAmB,CAAC;AAErF,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,oBAAoB,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GAAG,OAAO,CAAC,OAAO,CAAC,CAmEnB"}