bajaclaw 0.16.1 → 0.17.0
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.
- package/README.md +1 -1
- package/dist/channels/imessage.d.ts +7 -0
- package/dist/channels/imessage.js +88 -8
- package/dist/channels/imessage.js.map +1 -1
- package/helpers/bajaclaw-imessage-helper +0 -0
- package/helpers/imessage-typing.m +136 -0
- package/package.json +4 -2
- package/scripts/build-imessage-helper.mjs +103 -0
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
██╔══██╗██╔══██║██ ██║██╔══██║ ██║ ██║ ██╔══██║██║███╗██║
|
|
8
8
|
██████╔╝██║ ██║╚█████╔╝██║ ██║ ╚██████╗███████╗██║ ██║╚███╔███╔╝
|
|
9
9
|
╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝
|
|
10
|
-
autonomous agents on your terms · MIT · v0.
|
|
10
|
+
autonomous agents on your terms · MIT · v0.17.0
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## What BajaClaw is
|
|
@@ -26,6 +26,13 @@ export interface InboundIMessage {
|
|
|
26
26
|
service: string;
|
|
27
27
|
}
|
|
28
28
|
export declare function openChatDb(): Database.Database;
|
|
29
|
+
export declare function resolveTypingHelperPath(): string | null;
|
|
30
|
+
export interface TypingResult {
|
|
31
|
+
ok: boolean;
|
|
32
|
+
exitCode: number;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function sendTypingIndicator(handle: string, typing: boolean, log?: Logger): TypingResult;
|
|
29
36
|
export declare function fetchNewMessages(db: Database.Database, sinceRowId: number): InboundIMessage[];
|
|
30
37
|
export declare function buildSendAppleScript(handle: string, text: string): string;
|
|
31
38
|
export declare function sendViaAppleScript(handle: string, text: string, log?: Logger): Promise<void>;
|
|
@@ -18,12 +18,14 @@
|
|
|
18
18
|
// `[attachment]` markers; agents still see them and can ask the user
|
|
19
19
|
// to forward through another channel.
|
|
20
20
|
import { spawnSync } from "node:child_process";
|
|
21
|
-
import { existsSync, readFileSync, writeFileSync, renameSync, openSync, closeSync } from "node:fs";
|
|
21
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, openSync, closeSync, statSync } from "node:fs";
|
|
22
22
|
import { homedir } from "node:os";
|
|
23
|
-
import { join } from "node:path";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
24
|
+
import { fileURLToPath } from "node:url";
|
|
24
25
|
import Database from "better-sqlite3";
|
|
25
26
|
import { profileDir, ensureDir } from "../paths.js";
|
|
26
27
|
import { openDb } from "../db.js";
|
|
28
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
27
29
|
// Apple's CFAbsoluteTime epoch: 2001-01-01 00:00:00 UTC, in seconds
|
|
28
30
|
// since Unix epoch. chat.db stores message.date as nanoseconds since
|
|
29
31
|
// that moment (macOS 10.13+; older versions used seconds).
|
|
@@ -116,6 +118,56 @@ export function saveState(profile, state) {
|
|
|
116
118
|
export function openChatDb() {
|
|
117
119
|
return new Database(chatDbPath(), { readonly: true, fileMustExist: true });
|
|
118
120
|
}
|
|
121
|
+
// Native typing helper. Compiled from helpers/imessage-typing.m into a
|
|
122
|
+
// universal Mach-O binary shipped alongside bajaclaw. Calls IMCore's
|
|
123
|
+
// private setLocalUserIsTyping: to produce the "..." indicator on the
|
|
124
|
+
// recipient's device - something AppleScript can't do.
|
|
125
|
+
//
|
|
126
|
+
// Resolves to one of:
|
|
127
|
+
// - <repo>/helpers/bajaclaw-imessage-helper (dev checkout; src/channels -> up two)
|
|
128
|
+
// - <pkg>/helpers/bajaclaw-imessage-helper (installed; dist/channels -> up two)
|
|
129
|
+
// Both paths end up the same shape because `files` in package.json
|
|
130
|
+
// ships helpers/ verbatim next to dist/.
|
|
131
|
+
let cachedHelperPath;
|
|
132
|
+
export function resolveTypingHelperPath() {
|
|
133
|
+
if (cachedHelperPath !== undefined)
|
|
134
|
+
return cachedHelperPath;
|
|
135
|
+
// __dirname is <root>/dist/channels when installed, or <root>/src/channels
|
|
136
|
+
// via tsx. Either way, up two levels is the package root.
|
|
137
|
+
const root = join(__dirname, "..", "..");
|
|
138
|
+
const candidate = join(root, "helpers", "bajaclaw-imessage-helper");
|
|
139
|
+
try {
|
|
140
|
+
const st = statSync(candidate);
|
|
141
|
+
if (st.isFile()) {
|
|
142
|
+
// Strip the quarantine attribute npm applies to files downloaded
|
|
143
|
+
// in tarballs. Idempotent; no-op if absent. Ignored on failure.
|
|
144
|
+
spawnSync("xattr", ["-dr", "com.apple.quarantine", candidate], { stdio: "ignore" });
|
|
145
|
+
cachedHelperPath = candidate;
|
|
146
|
+
return candidate;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch { /* not present */ }
|
|
150
|
+
cachedHelperPath = null;
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
export function sendTypingIndicator(handle, typing, log) {
|
|
154
|
+
if (process.platform !== "darwin") {
|
|
155
|
+
return { ok: false, exitCode: -1, error: "unsupported-platform" };
|
|
156
|
+
}
|
|
157
|
+
const helper = resolveTypingHelperPath();
|
|
158
|
+
if (!helper) {
|
|
159
|
+
return { ok: false, exitCode: -1, error: "helper-not-found" };
|
|
160
|
+
}
|
|
161
|
+
const norm = normalizeHandle(handle);
|
|
162
|
+
const verb = typing ? "start" : "stop";
|
|
163
|
+
const r = spawnSync(helper, [verb, norm], { encoding: "utf8", timeout: 5000 });
|
|
164
|
+
if (r.status === 0) {
|
|
165
|
+
return { ok: true, exitCode: 0 };
|
|
166
|
+
}
|
|
167
|
+
const err = (r.stderr || "").trim();
|
|
168
|
+
log?.warn("gateway.imessage.typing-fail", { verb, handle: norm, status: r.status, err: err.slice(0, 200) });
|
|
169
|
+
return { ok: false, exitCode: r.status ?? -1, error: err };
|
|
170
|
+
}
|
|
119
171
|
// The inbound query. ROWID is monotonic and indexed, so "everything
|
|
120
172
|
// after the last one we saw" is an O(log n) lookup plus a sequential
|
|
121
173
|
// scan over only the new rows. Joins to handle.id for the sender
|
|
@@ -271,12 +323,40 @@ export async function startIMessage(profile, config, log, deps) {
|
|
|
271
323
|
// chatId here is the normalized handle string for the adapter.
|
|
272
324
|
await sendViaAppleScript(String(chatId), text, log);
|
|
273
325
|
},
|
|
274
|
-
startTyping: (
|
|
275
|
-
//
|
|
276
|
-
//
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
|
|
326
|
+
startTyping: (chatId) => {
|
|
327
|
+
// Native typing helper (helpers/bajaclaw-imessage-helper) speaks
|
|
328
|
+
// to IMCore directly to set the "..." indicator. AppleScript
|
|
329
|
+
// can't do this; our Obj-C helper calls setLocalUserIsTyping:
|
|
330
|
+
// on IMChat via the private framework.
|
|
331
|
+
//
|
|
332
|
+
// IMCore's typing flag auto-expires after ~60s on the receiver
|
|
333
|
+
// side (matches Messages.app's own heartbeat). We refresh every
|
|
334
|
+
// 30s to keep it lit until the cycle finishes. Each refresh is
|
|
335
|
+
// a sub-100ms spawn; cost is negligible.
|
|
336
|
+
//
|
|
337
|
+
// Graceful degradation: if the helper isn't installed or fails
|
|
338
|
+
// (missing TCC permission, no existing chat, Apple changed the
|
|
339
|
+
// private API), we log once and proceed silently - the adapter
|
|
340
|
+
// never blocks a reply because of a typing failure.
|
|
341
|
+
const handle = String(chatId);
|
|
342
|
+
const first = sendTypingIndicator(handle, true, log);
|
|
343
|
+
if (!first.ok) {
|
|
344
|
+
// Return a no-op stop fn; caller side doesn't care about the
|
|
345
|
+
// distinction as long as the method shape is preserved.
|
|
346
|
+
return () => { };
|
|
347
|
+
}
|
|
348
|
+
const timer = setInterval(() => {
|
|
349
|
+
const r = sendTypingIndicator(handle, true, log);
|
|
350
|
+
// If a refresh fails, stop trying - something changed
|
|
351
|
+
// (chat deleted, permission revoked). Next cycle will retry.
|
|
352
|
+
if (!r.ok)
|
|
353
|
+
clearInterval(timer);
|
|
354
|
+
}, 30_000);
|
|
355
|
+
return () => {
|
|
356
|
+
clearInterval(timer);
|
|
357
|
+
// Fire-and-forget stop; don't block reply routing on it.
|
|
358
|
+
sendTypingIndicator(handle, false, log);
|
|
359
|
+
};
|
|
280
360
|
},
|
|
281
361
|
stop: async () => {
|
|
282
362
|
stopped = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imessage.js","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"imessage.js","sourceRoot":"","sources":["../../src/channels/imessage.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// bajaclaw-imessage-helper
|
|
2
|
+
// ------------------------
|
|
3
|
+
// Narrow Objective-C helper that calls Apple's private IMCore framework
|
|
4
|
+
// to toggle the "typing..." indicator on an iMessage thread. AppleScript
|
|
5
|
+
// doesn't expose setLocalUserIsTyping: and there's no public path to it;
|
|
6
|
+
// this binary dlopens IMCore, looks up IMChatRegistry, finds the chat,
|
|
7
|
+
// and invokes the selector via NSInvocation.
|
|
8
|
+
//
|
|
9
|
+
// Usage:
|
|
10
|
+
// bajaclaw-imessage-helper start <handle-or-guid>
|
|
11
|
+
// bajaclaw-imessage-helper stop <handle-or-guid>
|
|
12
|
+
//
|
|
13
|
+
// Handle can be a phone number (E.164) or email. GUID can be the full
|
|
14
|
+
// chat guid (e.g. "iMessage;-;+15551234567") - we try both forms.
|
|
15
|
+
//
|
|
16
|
+
// Exit codes:
|
|
17
|
+
// 0 typing toggled
|
|
18
|
+
// 1 bad args
|
|
19
|
+
// 2 IMCore failed to load (framework path changed or TCC denied)
|
|
20
|
+
// 3 IMChatRegistry class not found (IMCore is loaded but symbol missing)
|
|
21
|
+
// 4 no chat found for the given handle (user must text first)
|
|
22
|
+
// 5 setLocalUserIsTyping: selector missing on IMChat
|
|
23
|
+
// 6 invocation failed (rare; caught and logged)
|
|
24
|
+
//
|
|
25
|
+
// Graceful-failure contract: any non-zero exit from this binary is
|
|
26
|
+
// treated as "typing unavailable" by the caller (src/channels/imessage.ts).
|
|
27
|
+
// The iMessage adapter never fails a send because of typing; it just
|
|
28
|
+
// skips the indicator and proceeds with the reply.
|
|
29
|
+
#import <Foundation/Foundation.h>
|
|
30
|
+
#import <dlfcn.h>
|
|
31
|
+
|
|
32
|
+
// Reverse-engineered private class declarations. Apple does not ship
|
|
33
|
+
// these headers; the symbols have been stable across macOS 10.14-15.
|
|
34
|
+
// If Apple renames any of these on a future macOS, this helper will
|
|
35
|
+
// fail with a clear exit code and the caller will skip typing.
|
|
36
|
+
@interface IMChatRegistry : NSObject
|
|
37
|
+
+ (instancetype)sharedInstance;
|
|
38
|
+
- (id)existingChatWithChatIdentifier:(NSString *)identifier;
|
|
39
|
+
- (id)existingChatForIMHandleID:(NSString *)handle;
|
|
40
|
+
@end
|
|
41
|
+
|
|
42
|
+
@interface IMChat : NSObject
|
|
43
|
+
- (void)setLocalUserIsTyping:(BOOL)typing;
|
|
44
|
+
- (NSString *)guid;
|
|
45
|
+
@end
|
|
46
|
+
|
|
47
|
+
static NSString * const IMCORE_PATH = @"/System/Library/PrivateFrameworks/IMCore.framework/IMCore";
|
|
48
|
+
|
|
49
|
+
static id findChat(id registry, NSString *target) {
|
|
50
|
+
// Try the most specific form first - a full chat identifier like
|
|
51
|
+
// "iMessage;-;+15551234567". If that fails, try the bare handle
|
|
52
|
+
// (which may work against some older registry lookup paths).
|
|
53
|
+
NSString *identifier = [NSString stringWithFormat:@"iMessage;-;%@", target];
|
|
54
|
+
id chat = [registry performSelector:@selector(existingChatWithChatIdentifier:) withObject:identifier];
|
|
55
|
+
if (chat) return chat;
|
|
56
|
+
|
|
57
|
+
chat = [registry performSelector:@selector(existingChatWithChatIdentifier:) withObject:target];
|
|
58
|
+
if (chat) return chat;
|
|
59
|
+
|
|
60
|
+
// Last resort: lookup by handle directly (not all macOS versions
|
|
61
|
+
// expose this selector; guarded by respondsToSelector:).
|
|
62
|
+
SEL handleSel = @selector(existingChatForIMHandleID:);
|
|
63
|
+
if ([registry respondsToSelector:handleSel]) {
|
|
64
|
+
chat = [registry performSelector:handleSel withObject:target];
|
|
65
|
+
if (chat) return chat;
|
|
66
|
+
}
|
|
67
|
+
return nil;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
int main(int argc, char *argv[]) {
|
|
71
|
+
@autoreleasepool {
|
|
72
|
+
if (argc < 3) {
|
|
73
|
+
fprintf(stderr, "usage: %s <start|stop> <handle-or-guid>\n", argv[0]);
|
|
74
|
+
return 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const char *cmd = argv[1];
|
|
78
|
+
BOOL typing;
|
|
79
|
+
if (strcmp(cmd, "start") == 0) typing = YES;
|
|
80
|
+
else if (strcmp(cmd, "stop") == 0) typing = NO;
|
|
81
|
+
else {
|
|
82
|
+
fprintf(stderr, "usage: %s <start|stop> <handle-or-guid>\n", argv[0]);
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
NSString *target = [NSString stringWithUTF8String:argv[2]];
|
|
87
|
+
|
|
88
|
+
// dlopen the private framework. Without this, NSClassFromString
|
|
89
|
+
// won't find IMChatRegistry because the framework isn't loaded
|
|
90
|
+
// by default in a vanilla Foundation process.
|
|
91
|
+
void *h = dlopen([IMCORE_PATH UTF8String], RTLD_NOW);
|
|
92
|
+
if (!h) {
|
|
93
|
+
fprintf(stderr, "ERROR: failed to load IMCore: %s\n", dlerror());
|
|
94
|
+
return 2;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Class regClass = NSClassFromString(@"IMChatRegistry");
|
|
98
|
+
if (!regClass) {
|
|
99
|
+
fprintf(stderr, "ERROR: IMChatRegistry class not found (IMCore loaded but symbol missing)\n");
|
|
100
|
+
return 3;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
id registry = [regClass performSelector:@selector(sharedInstance)];
|
|
104
|
+
if (!registry) {
|
|
105
|
+
fprintf(stderr, "ERROR: [IMChatRegistry sharedInstance] returned nil\n");
|
|
106
|
+
return 3;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
id chat = findChat(registry, target);
|
|
110
|
+
if (!chat) {
|
|
111
|
+
fprintf(stderr, "ERROR: no existing chat for '%s' - user must text first\n", argv[2]);
|
|
112
|
+
return 4;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
SEL sel = @selector(setLocalUserIsTyping:);
|
|
116
|
+
NSMethodSignature *sig = [chat methodSignatureForSelector:sel];
|
|
117
|
+
if (!sig) {
|
|
118
|
+
fprintf(stderr, "ERROR: setLocalUserIsTyping: not available on IMChat\n");
|
|
119
|
+
return 5;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
|
|
123
|
+
[inv setTarget:chat];
|
|
124
|
+
[inv setSelector:sel];
|
|
125
|
+
[inv setArgument:&typing atIndex:2];
|
|
126
|
+
@try {
|
|
127
|
+
[inv invoke];
|
|
128
|
+
} @catch (NSException *e) {
|
|
129
|
+
fprintf(stderr, "ERROR: invoke threw: %s\n", [[e reason] UTF8String] ?: "unknown");
|
|
130
|
+
return 6;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fprintf(stdout, "ok\n");
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bajaclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "BajaClaw - autonomous agents on your terms",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bajaclaw": {
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"bajaclaw": "bin/bajaclaw.js"
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
|
-
"build": "tsc -p tsconfig.json && node scripts/copy-static.js",
|
|
15
|
+
"build": "tsc -p tsconfig.json && node scripts/copy-static.js && node scripts/build-imessage-helper.mjs",
|
|
16
|
+
"build:helper": "node scripts/build-imessage-helper.mjs",
|
|
16
17
|
"dev": "tsx src/cli.ts",
|
|
17
18
|
"dashboard:dev": "tsx watch src/cli.ts dashboard",
|
|
18
19
|
"test": "node scripts/run-tests.js",
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
"files": [
|
|
24
25
|
"bin/",
|
|
25
26
|
"dist/",
|
|
27
|
+
"helpers/",
|
|
26
28
|
"scripts/",
|
|
27
29
|
"skills/",
|
|
28
30
|
"templates/"
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Compile helpers/imessage-typing.m into a universal macOS binary.
|
|
3
|
+
//
|
|
4
|
+
// Invoked at build time (npm run build) on macOS, and also manually via
|
|
5
|
+
// `node scripts/build-imessage-helper.mjs` for contributors. On non-mac
|
|
6
|
+
// platforms it's a no-op (logs and exits 0). The resulting binary lives
|
|
7
|
+
// at helpers/bajaclaw-imessage-helper (checked into git + shipped in the
|
|
8
|
+
// npm tarball so users don't need Xcode CLI Tools).
|
|
9
|
+
//
|
|
10
|
+
// Universal binary: we build arm64 + x86_64 and `lipo` them together so
|
|
11
|
+
// the same helper runs on every modern Mac. If either arch fails (e.g.
|
|
12
|
+
// Rosetta/cross-SDK not available), falls back to the host-native arch.
|
|
13
|
+
import { spawnSync } from "node:child_process";
|
|
14
|
+
import { existsSync, mkdirSync, renameSync, unlinkSync } from "node:fs";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
|
|
18
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const root = join(__dirname, "..");
|
|
20
|
+
const src = join(root, "helpers", "imessage-typing.m");
|
|
21
|
+
const out = join(root, "helpers", "bajaclaw-imessage-helper");
|
|
22
|
+
|
|
23
|
+
if (process.platform !== "darwin") {
|
|
24
|
+
console.log("[build-imessage-helper] skipping: not macOS");
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!existsSync(src)) {
|
|
29
|
+
console.error(`[build-imessage-helper] source missing: ${src}`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Need clang. `xcrun` finds it whether Xcode.app or Command Line Tools
|
|
34
|
+
// are installed. If neither, bail cleanly - the adapter falls back to
|
|
35
|
+
// no-op typing.
|
|
36
|
+
const xcrun = spawnSync("xcrun", ["--find", "clang"], { encoding: "utf8" });
|
|
37
|
+
if (xcrun.status !== 0) {
|
|
38
|
+
console.log("[build-imessage-helper] skipping: xcrun/clang not available (install Xcode Command Line Tools for native typing)");
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
const clang = xcrun.stdout.trim();
|
|
42
|
+
|
|
43
|
+
// Clang on macOS needs `-isysroot` pointing at the SDK or it can't find
|
|
44
|
+
// Foundation.h. `xcrun --show-sdk-path` gives us the right one whether
|
|
45
|
+
// the full Xcode.app or just CommandLineTools is installed.
|
|
46
|
+
const sdkProbe = spawnSync("xcrun", ["--sdk", "macosx", "--show-sdk-path"], { encoding: "utf8" });
|
|
47
|
+
if (sdkProbe.status !== 0) {
|
|
48
|
+
console.log("[build-imessage-helper] skipping: macOS SDK not found");
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
const sdkPath = sdkProbe.stdout.trim();
|
|
52
|
+
|
|
53
|
+
function compile(arch, outPath) {
|
|
54
|
+
const args = [
|
|
55
|
+
"-isysroot", sdkPath,
|
|
56
|
+
"-arch", arch,
|
|
57
|
+
"-framework", "Foundation",
|
|
58
|
+
"-ObjC",
|
|
59
|
+
"-fobjc-arc",
|
|
60
|
+
"-O2",
|
|
61
|
+
"-o", outPath,
|
|
62
|
+
src,
|
|
63
|
+
];
|
|
64
|
+
const r = spawnSync(clang, args, { stdio: "inherit" });
|
|
65
|
+
return r.status === 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
69
|
+
|
|
70
|
+
const tmpArm = out + ".arm64";
|
|
71
|
+
const tmpX86 = out + ".x86_64";
|
|
72
|
+
|
|
73
|
+
const armOk = compile("arm64", tmpArm);
|
|
74
|
+
const x86Ok = compile("x86_64", tmpX86);
|
|
75
|
+
|
|
76
|
+
if (armOk && x86Ok) {
|
|
77
|
+
// lipo into universal
|
|
78
|
+
const lipo = spawnSync("lipo", ["-create", tmpArm, tmpX86, "-output", out], { stdio: "inherit" });
|
|
79
|
+
try { unlinkSync(tmpArm); } catch { /* ignore */ }
|
|
80
|
+
try { unlinkSync(tmpX86); } catch { /* ignore */ }
|
|
81
|
+
if (lipo.status !== 0) {
|
|
82
|
+
console.error("[build-imessage-helper] lipo failed");
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
console.log(`[build-imessage-helper] built universal binary: ${out}`);
|
|
86
|
+
} else if (armOk) {
|
|
87
|
+
renameSync(tmpArm, out);
|
|
88
|
+
try { unlinkSync(tmpX86); } catch { /* ignore */ }
|
|
89
|
+
console.log(`[build-imessage-helper] built arm64 only: ${out}`);
|
|
90
|
+
} else if (x86Ok) {
|
|
91
|
+
renameSync(tmpX86, out);
|
|
92
|
+
try { unlinkSync(tmpArm); } catch { /* ignore */ }
|
|
93
|
+
console.log(`[build-imessage-helper] built x86_64 only: ${out}`);
|
|
94
|
+
} else {
|
|
95
|
+
console.error("[build-imessage-helper] both architectures failed to compile");
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Sanity: make sure it's executable and strip quarantine if present.
|
|
100
|
+
spawnSync("chmod", ["+x", out]);
|
|
101
|
+
spawnSync("xattr", ["-dr", "com.apple.quarantine", out]);
|
|
102
|
+
|
|
103
|
+
process.exit(0);
|