twinny 0.0.0-dev.260525150705

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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +264 -0
  3. package/README.zh-CN.md +252 -0
  4. package/configs/banner.png +0 -0
  5. package/configs/logo.png +0 -0
  6. package/dist/app/caffeinate.d.ts +28 -0
  7. package/dist/app/caffeinate.js +96 -0
  8. package/dist/app/caffeinate.js.map +1 -0
  9. package/dist/app/daemon.d.ts +1 -0
  10. package/dist/app/daemon.js +44 -0
  11. package/dist/app/daemon.js.map +1 -0
  12. package/dist/app/lark-assets.d.ts +25 -0
  13. package/dist/app/lark-assets.js +108 -0
  14. package/dist/app/lark-assets.js.map +1 -0
  15. package/dist/app/startup-probe.d.ts +17 -0
  16. package/dist/app/startup-probe.js +90 -0
  17. package/dist/app/startup-probe.js.map +1 -0
  18. package/dist/app/wiring.d.ts +122 -0
  19. package/dist/app/wiring.js +694 -0
  20. package/dist/app/wiring.js.map +1 -0
  21. package/dist/cli/commands.d.ts +1 -0
  22. package/dist/cli/commands.js +47 -0
  23. package/dist/cli/commands.js.map +1 -0
  24. package/dist/cli/install-wizard.d.ts +41 -0
  25. package/dist/cli/install-wizard.js +629 -0
  26. package/dist/cli/install-wizard.js.map +1 -0
  27. package/dist/codex/appserver.d.ts +109 -0
  28. package/dist/codex/appserver.js +308 -0
  29. package/dist/codex/appserver.js.map +1 -0
  30. package/dist/codex/goal.d.ts +64 -0
  31. package/dist/codex/goal.js +433 -0
  32. package/dist/codex/goal.js.map +1 -0
  33. package/dist/codex/index.d.ts +6 -0
  34. package/dist/codex/index.js +7 -0
  35. package/dist/codex/index.js.map +1 -0
  36. package/dist/codex/protocol.d.ts +95 -0
  37. package/dist/codex/protocol.js +205 -0
  38. package/dist/codex/protocol.js.map +1 -0
  39. package/dist/codex/thread-name.d.ts +3 -0
  40. package/dist/codex/thread-name.js +27 -0
  41. package/dist/codex/thread-name.js.map +1 -0
  42. package/dist/codex/thread.d.ts +76 -0
  43. package/dist/codex/thread.js +80 -0
  44. package/dist/codex/thread.js.map +1 -0
  45. package/dist/codex/turn.d.ts +166 -0
  46. package/dist/codex/turn.js +746 -0
  47. package/dist/codex/turn.js.map +1 -0
  48. package/dist/config/bootstrap.d.ts +14 -0
  49. package/dist/config/bootstrap.js +56 -0
  50. package/dist/config/bootstrap.js.map +1 -0
  51. package/dist/config/index.d.ts +4 -0
  52. package/dist/config/index.js +5 -0
  53. package/dist/config/index.js.map +1 -0
  54. package/dist/config/loader.d.ts +49 -0
  55. package/dist/config/loader.js +467 -0
  56. package/dist/config/loader.js.map +1 -0
  57. package/dist/config/paths.d.ts +11 -0
  58. package/dist/config/paths.js +43 -0
  59. package/dist/config/paths.js.map +1 -0
  60. package/dist/config/secrets.d.ts +33 -0
  61. package/dist/config/secrets.js +85 -0
  62. package/dist/config/secrets.js.map +1 -0
  63. package/dist/conversation/manager.d.ts +701 -0
  64. package/dist/conversation/manager.js +7673 -0
  65. package/dist/conversation/manager.js.map +1 -0
  66. package/dist/conversation/queue.d.ts +8 -0
  67. package/dist/conversation/queue.js +28 -0
  68. package/dist/conversation/queue.js.map +1 -0
  69. package/dist/conversation/routing.d.ts +11 -0
  70. package/dist/conversation/routing.js +55 -0
  71. package/dist/conversation/routing.js.map +1 -0
  72. package/dist/errors.d.ts +6 -0
  73. package/dist/errors.js +17 -0
  74. package/dist/errors.js.map +1 -0
  75. package/dist/index.d.ts +3 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/lark/auth.d.ts +41 -0
  79. package/dist/lark/auth.js +132 -0
  80. package/dist/lark/auth.js.map +1 -0
  81. package/dist/lark/browser-auth.d.ts +68 -0
  82. package/dist/lark/browser-auth.js +258 -0
  83. package/dist/lark/browser-auth.js.map +1 -0
  84. package/dist/lark/cards.d.ts +140 -0
  85. package/dist/lark/cards.js +1150 -0
  86. package/dist/lark/cards.js.map +1 -0
  87. package/dist/lark/contact.d.ts +41 -0
  88. package/dist/lark/contact.js +122 -0
  89. package/dist/lark/contact.js.map +1 -0
  90. package/dist/lark/events.d.ts +65 -0
  91. package/dist/lark/events.js +218 -0
  92. package/dist/lark/events.js.map +1 -0
  93. package/dist/lark/files.d.ts +36 -0
  94. package/dist/lark/files.js +191 -0
  95. package/dist/lark/files.js.map +1 -0
  96. package/dist/lark/filters.d.ts +73 -0
  97. package/dist/lark/filters.js +678 -0
  98. package/dist/lark/filters.js.map +1 -0
  99. package/dist/lark/index.d.ts +10 -0
  100. package/dist/lark/index.js +11 -0
  101. package/dist/lark/index.js.map +1 -0
  102. package/dist/lark/messages.d.ts +87 -0
  103. package/dist/lark/messages.js +428 -0
  104. package/dist/lark/messages.js.map +1 -0
  105. package/dist/lark/openapi.d.ts +58 -0
  106. package/dist/lark/openapi.js +206 -0
  107. package/dist/lark/openapi.js.map +1 -0
  108. package/dist/lark/redactor.d.ts +5 -0
  109. package/dist/lark/redactor.js +68 -0
  110. package/dist/lark/redactor.js.map +1 -0
  111. package/dist/lark/types.d.ts +49 -0
  112. package/dist/lark/types.js +18 -0
  113. package/dist/lark/types.js.map +1 -0
  114. package/dist/launchd/install.d.ts +22 -0
  115. package/dist/launchd/install.js +114 -0
  116. package/dist/launchd/install.js.map +1 -0
  117. package/dist/launchd/plist.d.ts +10 -0
  118. package/dist/launchd/plist.js +61 -0
  119. package/dist/launchd/plist.js.map +1 -0
  120. package/dist/lock/index.d.ts +20 -0
  121. package/dist/lock/index.js +74 -0
  122. package/dist/lock/index.js.map +1 -0
  123. package/dist/main.d.ts +2 -0
  124. package/dist/main.js +11 -0
  125. package/dist/main.js.map +1 -0
  126. package/dist/markdown.d.ts +12 -0
  127. package/dist/markdown.js +149 -0
  128. package/dist/markdown.js.map +1 -0
  129. package/dist/observability/health.d.ts +25 -0
  130. package/dist/observability/health.js +187 -0
  131. package/dist/observability/health.js.map +1 -0
  132. package/dist/observability/logs.d.ts +10 -0
  133. package/dist/observability/logs.js +34 -0
  134. package/dist/observability/logs.js.map +1 -0
  135. package/dist/observability/system-notifications.d.ts +25 -0
  136. package/dist/observability/system-notifications.js +33 -0
  137. package/dist/observability/system-notifications.js.map +1 -0
  138. package/dist/profiles/guest.d.ts +19 -0
  139. package/dist/profiles/guest.js +241 -0
  140. package/dist/profiles/guest.js.map +1 -0
  141. package/dist/profiles/index.d.ts +5 -0
  142. package/dist/profiles/index.js +14 -0
  143. package/dist/profiles/index.js.map +1 -0
  144. package/dist/profiles/owner.d.ts +1 -0
  145. package/dist/profiles/owner.js +6 -0
  146. package/dist/profiles/owner.js.map +1 -0
  147. package/dist/store/db.d.ts +10 -0
  148. package/dist/store/db.js +29 -0
  149. package/dist/store/db.js.map +1 -0
  150. package/dist/store/index.d.ts +3 -0
  151. package/dist/store/index.js +4 -0
  152. package/dist/store/index.js.map +1 -0
  153. package/dist/store/migrations.d.ts +13 -0
  154. package/dist/store/migrations.js +79 -0
  155. package/dist/store/migrations.js.map +1 -0
  156. package/dist/store/repositories.d.ts +227 -0
  157. package/dist/store/repositories.js +1384 -0
  158. package/dist/store/repositories.js.map +1 -0
  159. package/dist/telemetry/client.d.ts +60 -0
  160. package/dist/telemetry/client.js +204 -0
  161. package/dist/telemetry/client.js.map +1 -0
  162. package/dist/telemetry/hash.d.ts +1 -0
  163. package/dist/telemetry/hash.js +8 -0
  164. package/dist/telemetry/hash.js.map +1 -0
  165. package/dist/telemetry/index.d.ts +4 -0
  166. package/dist/telemetry/index.js +5 -0
  167. package/dist/telemetry/index.js.map +1 -0
  168. package/dist/telemetry/posthog.d.ts +27 -0
  169. package/dist/telemetry/posthog.js +45 -0
  170. package/dist/telemetry/posthog.js.map +1 -0
  171. package/dist/telemetry/reporter.d.ts +13 -0
  172. package/dist/telemetry/reporter.js +29 -0
  173. package/dist/telemetry/reporter.js.map +1 -0
  174. package/dist/types.d.ts +330 -0
  175. package/dist/types.js +9 -0
  176. package/dist/types.js.map +1 -0
  177. package/dist/version.d.ts +1 -0
  178. package/dist/version.js +1 -0
  179. package/dist/version.js.map +1 -0
  180. package/dist/version.json +3 -0
  181. package/dist/workspace/index.d.ts +2 -0
  182. package/dist/workspace/index.js +3 -0
  183. package/dist/workspace/index.js.map +1 -0
  184. package/dist/workspace/manager.d.ts +14 -0
  185. package/dist/workspace/manager.js +69 -0
  186. package/dist/workspace/manager.js.map +1 -0
  187. package/dist/workspace/slug.d.ts +8 -0
  188. package/dist/workspace/slug.js +59 -0
  189. package/dist/workspace/slug.js.map +1 -0
  190. package/migrations/0001_initial.sql +102 -0
  191. package/package.json +85 -0
@@ -0,0 +1,191 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ export class LarkFileDownloader {
4
+ options;
5
+ constructor(options) {
6
+ this.options = options;
7
+ }
8
+ async downloadMessageResource(params) {
9
+ const response = await this.options.openApiClient.download(`/im/v1/messages/${encodePathSegment(params.messageId)}/resources/${encodePathSegment(params.fileKey)}`, {
10
+ method: "GET",
11
+ query: {
12
+ type: params.resourceType
13
+ }
14
+ });
15
+ await fs.mkdir(params.outputDir, { recursive: true });
16
+ const fileName = buildFileName(params, response.contentType, response.contentDisposition);
17
+ const { fileName: uniqueFileName, filePath } = await uniqueFileDestination(params.outputDir, fileName);
18
+ await fs.writeFile(filePath, response.body);
19
+ return {
20
+ resourceType: params.resourceType,
21
+ fileKey: params.fileKey,
22
+ fileName: uniqueFileName,
23
+ path: filePath,
24
+ size: response.body.byteLength,
25
+ contentType: response.contentType
26
+ };
27
+ }
28
+ async uploadImage(params) {
29
+ const fileName = sanitizeFileName(params.fileName ?? path.basename(params.filePath));
30
+ const body = await fs.readFile(params.filePath);
31
+ const raw = await this.options.openApiClient.uploadMultipart("/im/v1/images", { image_type: "message" }, [
32
+ {
33
+ fieldName: "image",
34
+ fileName,
35
+ body,
36
+ contentType: params.contentType ?? contentTypeForFileName(fileName)
37
+ }
38
+ ]);
39
+ const imageKey = extractNestedString(raw, "data", "image_key");
40
+ if (!imageKey) {
41
+ throw new Error("Lark image upload response did not include image_key");
42
+ }
43
+ return { imageKey, raw };
44
+ }
45
+ async uploadFile(params) {
46
+ const fileName = sanitizeFileName(params.fileName ?? path.basename(params.filePath));
47
+ const body = await fs.readFile(params.filePath);
48
+ const raw = await this.options.openApiClient.uploadMultipart("/im/v1/files", {
49
+ file_type: params.fileType ?? larkFileTypeForFileName(fileName),
50
+ file_name: fileName,
51
+ duration: params.durationMs
52
+ }, [
53
+ {
54
+ fieldName: "file",
55
+ fileName,
56
+ body,
57
+ contentType: params.contentType ?? contentTypeForFileName(fileName)
58
+ }
59
+ ]);
60
+ const fileKey = extractNestedString(raw, "data", "file_key");
61
+ if (!fileKey) {
62
+ throw new Error("Lark file upload response did not include file_key");
63
+ }
64
+ return { fileKey, raw };
65
+ }
66
+ }
67
+ function buildFileName(params, contentType, contentDisposition) {
68
+ const dispositionFileName = filenameFromContentDisposition(contentDisposition);
69
+ const baseName = sanitizeFileName(params.fileName ?? dispositionFileName ?? params.fileKey);
70
+ if (path.extname(baseName)) {
71
+ return baseName;
72
+ }
73
+ return `${baseName}${extensionForContentType(contentType)}`;
74
+ }
75
+ function filenameFromContentDisposition(contentDisposition) {
76
+ if (!contentDisposition) {
77
+ return undefined;
78
+ }
79
+ const utf8Match = /filename\*=UTF-8''([^;]+)/i.exec(contentDisposition);
80
+ if (utf8Match?.[1]) {
81
+ try {
82
+ return decodeURIComponent(utf8Match[1]);
83
+ }
84
+ catch {
85
+ return utf8Match[1];
86
+ }
87
+ }
88
+ const asciiMatch = /filename="?([^";]+)"?/i.exec(contentDisposition);
89
+ return asciiMatch?.[1];
90
+ }
91
+ async function uniqueFileDestination(outputDir, fileName) {
92
+ const extension = path.extname(fileName);
93
+ const stem = extension ? fileName.slice(0, -extension.length) : fileName;
94
+ for (let suffix = 1;; suffix += 1) {
95
+ const candidate = suffix === 1 ? fileName : `${stem}(${suffix})${extension}`;
96
+ const filePath = path.join(outputDir, candidate);
97
+ if (!(await pathExists(filePath))) {
98
+ return { fileName: candidate, filePath };
99
+ }
100
+ }
101
+ }
102
+ async function pathExists(filePath) {
103
+ try {
104
+ await fs.access(filePath);
105
+ return true;
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ function sanitizeFileName(value) {
112
+ const name = path.basename(value).replace(/[\u0000-\u001f\u007f]/g, "_").trim();
113
+ return name && name !== "." && name !== ".." ? name : "lark_file";
114
+ }
115
+ function extensionForContentType(contentType) {
116
+ const normalized = contentType?.split(";")[0]?.trim().toLowerCase();
117
+ switch (normalized) {
118
+ case "image/jpeg":
119
+ return ".jpg";
120
+ case "image/png":
121
+ return ".png";
122
+ case "image/gif":
123
+ return ".gif";
124
+ case "image/webp":
125
+ return ".webp";
126
+ case "application/pdf":
127
+ return ".pdf";
128
+ case "text/plain":
129
+ return ".txt";
130
+ default:
131
+ return "";
132
+ }
133
+ }
134
+ function contentTypeForFileName(fileName) {
135
+ switch (path.extname(fileName).toLowerCase()) {
136
+ case ".jpg":
137
+ case ".jpeg":
138
+ return "image/jpeg";
139
+ case ".png":
140
+ return "image/png";
141
+ case ".gif":
142
+ return "image/gif";
143
+ case ".webp":
144
+ return "image/webp";
145
+ case ".bmp":
146
+ return "image/bmp";
147
+ case ".mp4":
148
+ return "video/mp4";
149
+ case ".pdf":
150
+ return "application/pdf";
151
+ case ".txt":
152
+ return "text/plain";
153
+ default:
154
+ return undefined;
155
+ }
156
+ }
157
+ function larkFileTypeForFileName(fileName) {
158
+ switch (path.extname(fileName).toLowerCase()) {
159
+ case ".opus":
160
+ return "opus";
161
+ case ".mp4":
162
+ return "mp4";
163
+ case ".pdf":
164
+ return "pdf";
165
+ case ".doc":
166
+ case ".docx":
167
+ return "doc";
168
+ case ".xls":
169
+ case ".xlsx":
170
+ return "xls";
171
+ case ".ppt":
172
+ case ".pptx":
173
+ return "ppt";
174
+ default:
175
+ return "stream";
176
+ }
177
+ }
178
+ function extractNestedString(value, ...pathSegments) {
179
+ let current = value;
180
+ for (const segment of pathSegments) {
181
+ if (!current || typeof current !== "object" || Array.isArray(current)) {
182
+ return undefined;
183
+ }
184
+ current = current[segment];
185
+ }
186
+ return typeof current === "string" && current.trim() !== "" ? current : undefined;
187
+ }
188
+ function encodePathSegment(value) {
189
+ return encodeURIComponent(value);
190
+ }
191
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/lark/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { IncomingLarkBotMenuAction, IncomingLarkMessage, IncomingLarkMessageRecall, IncomingLarkMessageResource } from "../types.js";
2
+ export interface RawLarkMessageReceiveEvent {
3
+ event_id?: string;
4
+ uuid?: string;
5
+ create_time?: string;
6
+ sender?: {
7
+ sender_id?: {
8
+ open_id?: string;
9
+ user_id?: string;
10
+ union_id?: string;
11
+ };
12
+ name?: string;
13
+ sender_name?: string;
14
+ display_name?: string;
15
+ sender_display_name?: string;
16
+ sender_type?: string;
17
+ tenant_key?: string;
18
+ };
19
+ message?: {
20
+ message_id?: string;
21
+ root_id?: string;
22
+ parent_id?: string;
23
+ thread_id?: string;
24
+ create_time?: string;
25
+ chat_id?: string;
26
+ chat_type?: string;
27
+ message_type?: string;
28
+ mentions?: unknown;
29
+ content?: unknown;
30
+ };
31
+ }
32
+ export type LarkMessageIgnoreReason = "malformed_event" | "missing_sender_open_id" | "bot_self_message" | "unsupported_chat_type" | "missing_message_id";
33
+ export type LarkMessageChangeIgnoreReason = "malformed_event" | "missing_message_id";
34
+ export type LarkBotMenuIgnoreReason = "malformed_event" | "missing_event_key" | "unsupported_event_key" | "missing_operator_open_id";
35
+ export interface NormalizeLarkMessageOptions {
36
+ botOpenId?: string;
37
+ }
38
+ export type NormalizeLarkMessageResult = {
39
+ kind: "message";
40
+ message: IncomingLarkMessage;
41
+ } | {
42
+ kind: "ignored";
43
+ reason: LarkMessageIgnoreReason;
44
+ raw: unknown;
45
+ };
46
+ export type NormalizeLarkMessageRecallResult = {
47
+ kind: "recall";
48
+ recall: IncomingLarkMessageRecall;
49
+ } | {
50
+ kind: "ignored";
51
+ reason: LarkMessageChangeIgnoreReason;
52
+ raw: unknown;
53
+ };
54
+ export type NormalizeLarkBotMenuResult = {
55
+ kind: "bot_menu";
56
+ action: IncomingLarkBotMenuAction;
57
+ } | {
58
+ kind: "ignored";
59
+ reason: LarkBotMenuIgnoreReason;
60
+ raw: unknown;
61
+ };
62
+ export declare function normalizeIncomingLarkMessage(raw: unknown, options?: NormalizeLarkMessageOptions): IncomingLarkMessage | null;
63
+ export declare function normalizeIncomingLarkMessageWithReason(raw: unknown, options?: NormalizeLarkMessageOptions): NormalizeLarkMessageResult;
64
+ export declare function normalizeLarkBotMenuWithReason(raw: unknown): NormalizeLarkBotMenuResult;
65
+ export declare function normalizeLarkMessageRecallWithReason(raw: unknown): NormalizeLarkMessageRecallResult;
66
+ export interface NormalizedLarkMessageContent {
67
+ text: string | null;
68
+ resources: IncomingLarkMessageResource[];
69
+ rawForCodex: boolean;
70
+ }
71
+ export declare function normalizeLarkMessageContent(messageType: string, content: unknown): NormalizedLarkMessageContent;
72
+ export declare function stringifyRawLarkMessageForCodex(message: Record<string, unknown>): string;
73
+ export declare function normalizeTextContent(content: unknown): string | null;