@songsid/agend 2.2.0-beta.5 → 2.2.0-beta.7
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/dist/agent-cli-instructions.md +6 -2
- package/dist/agent-cli.js +9 -5
- package/dist/agent-cli.js.map +1 -1
- package/dist/backend/claude-carry.d.ts +22 -0
- package/dist/backend/claude-carry.js +170 -0
- package/dist/backend/claude-carry.js.map +1 -0
- package/dist/backend/claude-code.d.ts +16 -0
- package/dist/backend/claude-code.js +92 -2
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +7 -0
- package/dist/backend/credential-profile.js +7 -1
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/kiro.js +5 -2
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.d.ts +67 -0
- package/dist/backend/muse.js +370 -44
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +7 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/background-work-ended.d.ts +18 -0
- package/dist/background-work-ended.js +30 -0
- package/dist/background-work-ended.js.map +1 -0
- package/dist/channel/adapters/discord.js +12 -1
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +4 -5
- package/dist/channel/adapters/telegram.js +39 -17
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-edit-errors.d.ts +5 -0
- package/dist/channel/message-edit-errors.js +24 -0
- package/dist/channel/message-edit-errors.js.map +1 -0
- package/dist/channel/types.d.ts +3 -0
- package/dist/cli.js +25 -10
- package/dist/cli.js.map +1 -1
- package/dist/cross-instance-envelope.js +2 -0
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +6 -0
- package/dist/daemon.js +165 -54
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +27 -0
- package/dist/delivery-outbox.js +175 -6
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-context.d.ts +4 -1
- package/dist/fleet-manager.d.ts +110 -6
- package/dist/fleet-manager.js +558 -100
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +44 -9
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +14 -1
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +4 -0
- package/dist/human-delivery-receipts.d.ts +83 -0
- package/dist/human-delivery-receipts.js +194 -0
- package/dist/human-delivery-receipts.js.map +1 -0
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.js +1 -1
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +22 -2
- package/dist/locale.js.map +1 -1
- package/dist/needs-you-hub.js +2 -0
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +6 -0
- package/dist/needs-you-live.js +23 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/outbound-handlers.d.ts +10 -0
- package/dist/outbound-handlers.js +39 -14
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +15 -13
- package/dist/outbound-schemas.js +5 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-link-progress.d.ts +1 -1
- package/dist/public-link-progress.js +8 -2
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.d.ts +2 -1
- package/dist/public-preview.js +8 -5
- package/dist/public-preview.js.map +1 -1
- package/dist/public-web-link.d.ts +4 -1
- package/dist/public-web-link.js +27 -10
- package/dist/public-web-link.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +3 -0
- package/dist/reply-buttons-controller.js +3 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/restart-progress.d.ts +4 -0
- package/dist/restart-progress.js +7 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/service-installer.d.ts +31 -0
- package/dist/service-installer.js +41 -2
- package/dist/service-installer.js.map +1 -1
- package/dist/topic-commands.d.ts +3 -2
- package/dist/topic-commands.js +17 -5
- package/dist/topic-commands.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -15
- package/dist/tunnel/cloudflared.js +36 -1
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/types.d.ts +5 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/ui/chat-strings.js +8 -2
- package/dist/ui/chat-thread.js +24 -4
- package/dist/ui/chat-time.js +80 -0
- package/dist/ui/preview-panel.js +7 -1
- package/dist/ui/preview.js +5 -1
- package/dist/ui/shared/app-stream.js +21 -4
- package/dist/ui/shared/app.css +9 -3
- package/dist/ui/shared/usage-dialog.js +10 -1
- package/dist/update-install.d.ts +6 -2
- package/dist/update-install.js +8 -2
- package/dist/update-install.js.map +1 -1
- package/dist/update-marker.d.ts +11 -0
- package/dist/update-marker.js +12 -0
- package/dist/update-marker.js.map +1 -1
- package/dist/web-api.d.ts +5 -1
- package/dist/web-api.js +8 -1
- package/dist/web-api.js.map +1 -1
- package/dist/web-commands.d.ts +2 -2
- package/dist/web-commands.js +3 -2
- package/dist/web-commands.js.map +1 -1
- package/dist/web-reply-files.d.ts +45 -0
- package/dist/web-reply-files.js +223 -0
- package/dist/web-reply-files.js.map +1 -0
- package/dist/web-server-drain.d.ts +10 -0
- package/dist/web-server-drain.js +50 -0
- package/dist/web-server-drain.js.map +1 -0
- package/dist/web-upload.d.ts +17 -4
- package/dist/web-upload.js +64 -13
- package/dist/web-upload.js.map +1 -1
- package/package.json +1 -1
- package/templates/launchd.plist.ejs +3 -1
- package/templates/systemd.service.ejs +2 -1
|
@@ -23,8 +23,8 @@ agend-agent reply "text" [FILE…] [--sticker ID] # Reply to user (files; up t
|
|
|
23
23
|
agend-agent react EMOJI MESSAGE_ID # React to a message
|
|
24
24
|
agend-agent edit MESSAGE_ID "text" # Edit a message you sent
|
|
25
25
|
agend-agent download FILE_ID # Fetch an attachment (attachment_file_id)
|
|
26
|
-
agend-agent send TARGET "message"
|
|
27
|
-
agend-agent delegate TARGET "task"
|
|
26
|
+
agend-agent send TARGET "message" [--forward ID…] # Explicit original-reference grants
|
|
27
|
+
agend-agent delegate TARGET "task" [--forward ID…] # Assign work; every hop needs a grant
|
|
28
28
|
agend-agent report TARGET "summary" [CORRELATION_ID] # Report results (echo the request's correlation_id)
|
|
29
29
|
agend-agent ask TARGET "question" # Request info
|
|
30
30
|
agend-agent broadcast "message" # Message all agents
|
|
@@ -66,3 +66,7 @@ An `uncertain` result may already have reached the target; do not resend blindly
|
|
|
66
66
|
`.`; if it fails, put the failure in the final text so the operator can diagnose it.
|
|
67
67
|
- Task flow: `agend-agent delegate` → silent work → `agend-agent report`. Zero messages in between.
|
|
68
68
|
- Never send acknowledgment-only messages. Only send messages with actionable content.
|
|
69
|
+
|
|
70
|
+
## Verify relayed human consent
|
|
71
|
+
|
|
72
|
+
Use the original `verification_id` / `[agend-human-id:…]`, not the platform reply `message_id`. The sender must explicitly include `--forward ID` on send/delegate for each hop. Check with `agend-agent delivery-status --message-id ID`: require delivered with an owned proof_kind, original content for the exact resource, and the authorized origin platform/adapter/user_id. Agent summaries and copied headers are not human origin. Web actor identity is unknown; `/raw` and historical relays have no positive human receipt. A hidden/expired/absent lookup cannot prove consent; uncertain must never trigger a resend. Native acceptance is not consumption.
|
package/dist/agent-cli.js
CHANGED
|
@@ -91,11 +91,15 @@ async function main() {
|
|
|
91
91
|
break;
|
|
92
92
|
// Communication
|
|
93
93
|
case "send":
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
case "delegate": {
|
|
95
|
+
const { flags, positional } = splitFlags(rest, ["--forward"]);
|
|
96
|
+
args = op === "send"
|
|
97
|
+
? { instance_name: positional[0], message: positional[1] ?? "", request_kind: positional[2] }
|
|
98
|
+
: { target_instance: positional[0], task: positional[1] ?? "", success_criteria: positional[2], context: positional[3] };
|
|
99
|
+
if (flags["--forward"])
|
|
100
|
+
args.forwards = flags["--forward"];
|
|
98
101
|
break;
|
|
102
|
+
}
|
|
99
103
|
case "report":
|
|
100
104
|
args = { target_instance: rest[0], summary: rest[1] ?? "", correlation_id: rest[2], artifacts: rest[3] };
|
|
101
105
|
break;
|
|
@@ -105,7 +109,7 @@ async function main() {
|
|
|
105
109
|
case "delivery-status": {
|
|
106
110
|
for (let i = 0; i < rest.length; i++) {
|
|
107
111
|
const key = rest[i].replace(/^--/, "").replaceAll("-", "_");
|
|
108
|
-
if (!["delivery_id", "operation_id", "correlation_id", "limit", "cursor"].includes(key)) {
|
|
112
|
+
if (!["delivery_id", "operation_id", "correlation_id", "message_id", "limit", "cursor"].includes(key)) {
|
|
109
113
|
die(`Unknown delivery-status option: ${rest[i]}`);
|
|
110
114
|
}
|
|
111
115
|
const value = rest[++i];
|
package/dist/agent-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type CarryResult = {
|
|
2
|
+
carried: true;
|
|
3
|
+
sessionId: string;
|
|
4
|
+
bytes: number;
|
|
5
|
+
ms: number;
|
|
6
|
+
replacedOlderCopy: boolean;
|
|
7
|
+
} | {
|
|
8
|
+
carried: false;
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
export interface CarryRequest {
|
|
12
|
+
/** The instance's session id (`<instanceDir>/session-id`), as read. */
|
|
13
|
+
sessionId: string | null | undefined;
|
|
14
|
+
workingDirectory: string;
|
|
15
|
+
/** Config dirs as the CLI sees them (claudeConfigDirFor): the one being left, the one being switched to. */
|
|
16
|
+
fromConfigDir: string;
|
|
17
|
+
toConfigDir: string;
|
|
18
|
+
now?: () => number;
|
|
19
|
+
/** Free bytes on the target's filesystem; injectable for tests. */
|
|
20
|
+
freeBytes?: (dir: string) => Promise<number>;
|
|
21
|
+
}
|
|
22
|
+
export declare function carryClaudeConversation(req: CarryRequest): Promise<CarryResult>;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1753: carry a Claude Code conversation across a credential-profile switch.
|
|
3
|
+
*
|
|
4
|
+
* Each profile is its own `CLAUDE_CONFIG_DIR`, and a conversation is a transcript under it:
|
|
5
|
+
* `<config>/projects/<cwd key>/<session id>.jsonl`, with its `<session id>/` folder (subagents, tool results) beside it.
|
|
6
|
+
* The new profile has no conversation for this directory, so a switch used to start fresh with a handover. Copying the
|
|
7
|
+
* session into the new profile and making it the newest there lets the relaunch's `--continue` pick it up — verified on
|
|
8
|
+
* a real account with claude 2.1.296 (#1753).
|
|
9
|
+
*
|
|
10
|
+
* Copy, never move: the old profile keeps its original untouched, so switching back still has it. Everything is written
|
|
11
|
+
* under a temporary name and renamed into place, so claude never sees a half-copied transcript. A failure says why, and
|
|
12
|
+
* the caller then starts fresh with a handover, as before. Up to the rename into place the target is left as it was;
|
|
13
|
+
* the one step after it (dating the copy as the newest) can fail with the copy already there — or, switching back,
|
|
14
|
+
* already in place of the older one — which the fresh start leaves unused.
|
|
15
|
+
*/
|
|
16
|
+
import { constants as fsConstants } from "node:fs";
|
|
17
|
+
import { copyFile, cp, mkdir, open, readdir, rename, rm, stat, statfs, utimes } from "node:fs/promises";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { claudeProjectKey } from "./claude-code.js";
|
|
20
|
+
const SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
21
|
+
/** Room kept free beyond the copy itself. */
|
|
22
|
+
const SPACE_MARGIN = 64 * 1024 * 1024;
|
|
23
|
+
/** How much of an existing copy is compared, at its start and at its end, to tell an older copy from another history. */
|
|
24
|
+
const PREFIX_PROBE = 64 * 1024;
|
|
25
|
+
async function defaultFreeBytes(dir) {
|
|
26
|
+
const s = await statfs(dir);
|
|
27
|
+
return Number(s.bavail) * Number(s.bsize);
|
|
28
|
+
}
|
|
29
|
+
async function sizeOf(path) {
|
|
30
|
+
try {
|
|
31
|
+
return (await stat(path)).size;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function treeBytes(dir) {
|
|
38
|
+
let total = 0;
|
|
39
|
+
let entries;
|
|
40
|
+
try {
|
|
41
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
for (const e of entries) {
|
|
47
|
+
const p = join(dir, e.name);
|
|
48
|
+
if (e.isDirectory())
|
|
49
|
+
total += await treeBytes(p);
|
|
50
|
+
else if (e.isFile())
|
|
51
|
+
total += (await sizeOf(p)) ?? 0;
|
|
52
|
+
}
|
|
53
|
+
return total;
|
|
54
|
+
}
|
|
55
|
+
async function readAt(path, offset, length) {
|
|
56
|
+
const fh = await open(path, "r");
|
|
57
|
+
try {
|
|
58
|
+
const buf = Buffer.alloc(length);
|
|
59
|
+
const { bytesRead } = await fh.read(buf, 0, length, offset);
|
|
60
|
+
return buf.subarray(0, bytesRead);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await fh.close();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Is `target` an older copy of `source` — the same conversation, cut shorter? (Switching back: A → B → A finds A's
|
|
68
|
+
* original, which B's copy has since grown past.) Its start and its end must match the source at the same offsets.
|
|
69
|
+
*/
|
|
70
|
+
async function isOlderCopy(target, targetSize, source, sourceSize) {
|
|
71
|
+
if (targetSize > sourceSize)
|
|
72
|
+
return false;
|
|
73
|
+
const head = Math.min(PREFIX_PROBE, targetSize);
|
|
74
|
+
const tailAt = Math.max(0, targetSize - PREFIX_PROBE);
|
|
75
|
+
const [th, sh, tt, st] = await Promise.all([
|
|
76
|
+
readAt(target, 0, head), readAt(source, 0, head),
|
|
77
|
+
readAt(target, tailAt, targetSize - tailAt), readAt(source, tailAt, targetSize - tailAt),
|
|
78
|
+
]);
|
|
79
|
+
return th.equals(sh) && tt.equals(st);
|
|
80
|
+
}
|
|
81
|
+
/** The newest mtime (ms) among the other transcripts in the target's project folder. */
|
|
82
|
+
async function newestOtherTranscript(dir, except) {
|
|
83
|
+
let newest = 0;
|
|
84
|
+
try {
|
|
85
|
+
for (const e of await readdir(dir, { withFileTypes: true })) {
|
|
86
|
+
if (!e.isFile() || !e.name.endsWith(".jsonl") || e.name === except)
|
|
87
|
+
continue;
|
|
88
|
+
const m = (await stat(join(dir, e.name))).mtimeMs;
|
|
89
|
+
if (m > newest)
|
|
90
|
+
newest = m;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch { /* no folder yet */ }
|
|
94
|
+
return newest;
|
|
95
|
+
}
|
|
96
|
+
export async function carryClaudeConversation(req) {
|
|
97
|
+
const started = performance.now();
|
|
98
|
+
const sid = (req.sessionId ?? "").trim();
|
|
99
|
+
if (!SESSION_ID.test(sid))
|
|
100
|
+
return { carried: false, reason: "no session id to carry" };
|
|
101
|
+
if (!req.workingDirectory.trim())
|
|
102
|
+
return { carried: false, reason: "no working directory" };
|
|
103
|
+
if (req.fromConfigDir === req.toConfigDir)
|
|
104
|
+
return { carried: false, reason: "same config dir" };
|
|
105
|
+
const key = claudeProjectKey(req.workingDirectory);
|
|
106
|
+
const fromDir = join(req.fromConfigDir, "projects", key);
|
|
107
|
+
const toDir = join(req.toConfigDir, "projects", key);
|
|
108
|
+
const name = `${sid}.jsonl`;
|
|
109
|
+
const source = join(fromDir, name), target = join(toDir, name);
|
|
110
|
+
const sourceSize = await sizeOf(source);
|
|
111
|
+
if (sourceSize === null)
|
|
112
|
+
return { carried: false, reason: "the session's transcript is not in the old profile" };
|
|
113
|
+
const targetSize = await sizeOf(target);
|
|
114
|
+
let replacedOlderCopy = false;
|
|
115
|
+
if (targetSize !== null) {
|
|
116
|
+
if (!await isOlderCopy(target, targetSize, source, sourceSize).catch(() => false)) {
|
|
117
|
+
return { carried: false, reason: "the new profile already holds a different version of this conversation" };
|
|
118
|
+
}
|
|
119
|
+
replacedOlderCopy = true;
|
|
120
|
+
}
|
|
121
|
+
const folderBytes = await treeBytes(join(fromDir, sid));
|
|
122
|
+
const needed = sourceSize + folderBytes + SPACE_MARGIN;
|
|
123
|
+
try {
|
|
124
|
+
await mkdir(toDir, { recursive: true });
|
|
125
|
+
const free = await (req.freeBytes ?? defaultFreeBytes)(toDir);
|
|
126
|
+
if (free < needed)
|
|
127
|
+
return { carried: false, reason: `not enough free space (${needed} bytes needed, ${free} free)` };
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
return { carried: false, reason: `the new profile's folder is not usable: ${err.message}` };
|
|
131
|
+
}
|
|
132
|
+
const tag = `.carry-${process.pid}-${Math.floor(started)}`;
|
|
133
|
+
const tmpFile = join(toDir, `.${name}${tag}`);
|
|
134
|
+
const tmpFolder = join(toDir, `.${sid}${tag}`);
|
|
135
|
+
try {
|
|
136
|
+
// A copy-on-write clone where the filesystem has one (btrfs, xfs, APFS), a plain copy elsewhere.
|
|
137
|
+
await copyFile(source, tmpFile, fsConstants.COPYFILE_FICLONE);
|
|
138
|
+
// The session's folder first, so the transcript never appears before the files it refers to.
|
|
139
|
+
if (await sizeOf(join(fromDir, sid)) !== null) {
|
|
140
|
+
await cp(join(fromDir, sid), tmpFolder, { recursive: true, errorOnExist: false, force: true });
|
|
141
|
+
if (await sizeOf(join(toDir, sid)) === null)
|
|
142
|
+
await rename(tmpFolder, join(toDir, sid));
|
|
143
|
+
else {
|
|
144
|
+
// Switching back: the folder is there already. It takes the copy's files; its own extra files stay.
|
|
145
|
+
await cp(tmpFolder, join(toDir, sid), { recursive: true, errorOnExist: false, force: true });
|
|
146
|
+
await rm(tmpFolder, { recursive: true, force: true });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
await rename(tmpFile, target);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
await rm(tmpFile, { force: true }).catch(() => undefined);
|
|
153
|
+
await rm(tmpFolder, { recursive: true, force: true }).catch(() => undefined);
|
|
154
|
+
return { carried: false, reason: `copy failed: ${err.message}` };
|
|
155
|
+
}
|
|
156
|
+
// Newest in its folder, so `--continue` picks it — even past another transcript dated ahead of this clock.
|
|
157
|
+
const now = (req.now ?? Date.now)();
|
|
158
|
+
const mtime = Math.max(now, (await newestOtherTranscript(toDir, name)) + 1_000);
|
|
159
|
+
try {
|
|
160
|
+
await utimes(target, mtime / 1000, mtime / 1000);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
return { carried: false, reason: `could not date the copy as the newest: ${err.message}` };
|
|
164
|
+
}
|
|
165
|
+
// `/rewind` reaches edits from before the switch: the session's file history, merged, never overwriting. Best effort.
|
|
166
|
+
await cp(join(req.fromConfigDir, "file-history", sid), join(req.toConfigDir, "file-history", sid), { recursive: true, errorOnExist: false, force: false })
|
|
167
|
+
.catch(() => undefined);
|
|
168
|
+
return { carried: true, sessionId: sid, bytes: sourceSize + folderBytes, ms: Math.round(performance.now() - started), replacedOlderCopy };
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=claude-carry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-carry.js","sourceRoot":"","sources":["../../src/backend/claude-carry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAkBpD,MAAM,UAAU,GAAG,iEAAiE,CAAC;AACrF,6CAA6C;AAC7C,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,yHAAyH;AACzH,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QAAC,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAClF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,KAAK,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;aAC5C,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;IAChE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,UAAkB,EAAE,MAAc,EAAE,UAAkB;IAC/F,IAAI,UAAU,GAAG,UAAU;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;QAChD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;KACzF,CAAC,CAAC;IACH,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,MAAc;IAC9D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YAC7E,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClD,IAAI,CAAC,GAAG,MAAM;gBAAE,MAAM,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAiB;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACvF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC5F,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,WAAW;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChG,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;IAEjH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,wEAAwE,EAAE,CAAC;QAC9G,CAAC;QACD,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,IAAI,GAAG,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,MAAM,kBAAkB,IAAI,QAAQ,EAAE,CAAC;IACvH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA4C,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IACzG,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,iGAAiG;QACjG,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9D,6FAA6F;QAC7F,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/F,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;iBAClF,CAAC;gBACJ,oGAAoG;gBACpG,MAAM,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7F,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAiB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,2GAA2G;IAC3G,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAChF,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA2C,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IACxG,CAAC;IAED,sHAAsH;IACtH,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SACvJ,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;AAC5I,CAAC"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { type CliBackend, type CliBackendConfig, type ErrorPattern, type InputBox, type RuntimeDialog, type StartupDialog } from "./types.js";
|
|
2
2
|
/** Mirror Claude Code's ~/.claude/projects key for a working directory. Exported for the detection-signal seam. */
|
|
3
3
|
export declare function claudeProjectKey(cwd: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* #1754: the directory Claude Code keys a project's auto-memory by — the repository's own root, which for a git
|
|
6
|
+
* worktree is the main checkout's (its memory sits under `projects/<that root's key>/memory/`, shared by every worktree),
|
|
7
|
+
* and for a directory outside any repository the directory itself. Read from the files git leaves (`.git` as a folder,
|
|
8
|
+
* or a worktree's `.git` file → its `commondir`), never by running git: this runs at an instance's launch.
|
|
9
|
+
*/
|
|
10
|
+
export declare function claudeMemoryRoot(cwd: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* #1754: a named profile is its own `projects/`, so Claude Code's auto-memory for this project would start empty there
|
|
13
|
+
* and stay apart from every other instance's. Memory is knowledge, not an account — shared like the instructions,
|
|
14
|
+
* agents and skills are (#1699 (a)): `<profile>/projects/<repo key>/memory` becomes a link to the shared one
|
|
15
|
+
* (`<shared config>/projects/<repo key>/memory`). Transcripts beside it stay the profile's own.
|
|
16
|
+
* Never replaces anything real: a non-empty memory folder in the profile is left as it is (and said so); an empty one
|
|
17
|
+
* — what claude makes before it has written anything — gives way to the link. Returns what it found or did.
|
|
18
|
+
*/
|
|
19
|
+
export declare function linkSharedClaudeMemory(profileDir: string, workingDirectory: string, sharedConfigDir?: string): "linked" | "already-linked" | "kept-own" | "kept-other-link" | "failed";
|
|
4
20
|
/**
|
|
5
21
|
* #1699: the config dir of a NAMED credential profile — the one string every writer and reader of that profile uses
|
|
6
22
|
* (claude names its macOS Keychain item after it). Null for no profile.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EFFORT_CAPABILITIES } from "./effort-metadata.js";
|
|
2
|
-
import { dirname, join, resolve } from "node:path";
|
|
3
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
+
import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmdirSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { credentialHomeSpec, credentialProfileHome, prepareCredentialProfileHome, resolveCredentialProfile } from "./credential-profile.js";
|
|
@@ -27,6 +27,94 @@ export function claudeProjectKey(cwd) {
|
|
|
27
27
|
}
|
|
28
28
|
return `${sanitized.slice(0, 200)}-${Math.abs(hash).toString(36)}`;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* #1754: the directory Claude Code keys a project's auto-memory by — the repository's own root, which for a git
|
|
32
|
+
* worktree is the main checkout's (its memory sits under `projects/<that root's key>/memory/`, shared by every worktree),
|
|
33
|
+
* and for a directory outside any repository the directory itself. Read from the files git leaves (`.git` as a folder,
|
|
34
|
+
* or a worktree's `.git` file → its `commondir`), never by running git: this runs at an instance's launch.
|
|
35
|
+
*/
|
|
36
|
+
export function claudeMemoryRoot(cwd) {
|
|
37
|
+
let dir = resolve(cwd);
|
|
38
|
+
try {
|
|
39
|
+
dir = realpathSync(dir);
|
|
40
|
+
}
|
|
41
|
+
catch { /* as given */ }
|
|
42
|
+
for (let at = dir;; at = dirname(at)) {
|
|
43
|
+
const dotGit = join(at, ".git");
|
|
44
|
+
let st;
|
|
45
|
+
try {
|
|
46
|
+
st = statSync(dotGit);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
st = null;
|
|
50
|
+
}
|
|
51
|
+
if (st?.isDirectory())
|
|
52
|
+
return at;
|
|
53
|
+
if (st?.isFile()) {
|
|
54
|
+
try {
|
|
55
|
+
const gitdir = /^gitdir:\s*(.+)$/m.exec(readFileSync(dotGit, "utf-8"))?.[1]?.trim();
|
|
56
|
+
if (gitdir) {
|
|
57
|
+
const worktreeGitDir = resolve(at, gitdir);
|
|
58
|
+
const common = resolve(worktreeGitDir, readFileSync(join(worktreeGitDir, "commondir"), "utf-8").trim());
|
|
59
|
+
if (basename(common) === ".git")
|
|
60
|
+
return dirname(common);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch { /* a submodule or an unusual layout: this directory is its own root */ }
|
|
64
|
+
return at;
|
|
65
|
+
}
|
|
66
|
+
if (dirname(at) === at)
|
|
67
|
+
return dir;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* #1754: a named profile is its own `projects/`, so Claude Code's auto-memory for this project would start empty there
|
|
72
|
+
* and stay apart from every other instance's. Memory is knowledge, not an account — shared like the instructions,
|
|
73
|
+
* agents and skills are (#1699 (a)): `<profile>/projects/<repo key>/memory` becomes a link to the shared one
|
|
74
|
+
* (`<shared config>/projects/<repo key>/memory`). Transcripts beside it stay the profile's own.
|
|
75
|
+
* Never replaces anything real: a non-empty memory folder in the profile is left as it is (and said so); an empty one
|
|
76
|
+
* — what claude makes before it has written anything — gives way to the link. Returns what it found or did.
|
|
77
|
+
*/
|
|
78
|
+
export function linkSharedClaudeMemory(profileDir, workingDirectory, sharedConfigDir = claudeConfigDirFor(null)) {
|
|
79
|
+
const key = claudeProjectKey(claudeMemoryRoot(workingDirectory));
|
|
80
|
+
const shared = join(sharedConfigDir, "projects", key, "memory");
|
|
81
|
+
const target = join(profileDir, "projects", key, "memory");
|
|
82
|
+
try {
|
|
83
|
+
let existing;
|
|
84
|
+
try {
|
|
85
|
+
existing = lstatSync(target);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
existing = null;
|
|
89
|
+
}
|
|
90
|
+
if (existing?.isSymbolicLink()) {
|
|
91
|
+
if (resolve(dirname(target), readlinkSync(target)) !== resolve(shared))
|
|
92
|
+
return "kept-other-link";
|
|
93
|
+
// Ours — but it may point at nothing yet (linked before the shared side was made, or that side since removed):
|
|
94
|
+
// the shared folder must be there for a note to land. A file in its place throws (EEXIST): the failure path below.
|
|
95
|
+
mkdirSync(shared, { recursive: true });
|
|
96
|
+
return "already-linked";
|
|
97
|
+
}
|
|
98
|
+
if (existing?.isDirectory()) {
|
|
99
|
+
if (readdirSync(target).length > 0) {
|
|
100
|
+
console.warn(`[agend] a credential profile has its own Claude memory, so it is not linked to the shared one: ${target}`);
|
|
101
|
+
return "kept-own";
|
|
102
|
+
}
|
|
103
|
+
rmdirSync(target);
|
|
104
|
+
}
|
|
105
|
+
else if (existing) {
|
|
106
|
+
return "kept-own";
|
|
107
|
+
}
|
|
108
|
+
mkdirSync(shared, { recursive: true });
|
|
109
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
110
|
+
symlinkSync(shared, target, "dir");
|
|
111
|
+
return "linked";
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.warn(`[agend] could not link a credential profile's Claude memory to the shared one (${err.message}): ${target}`);
|
|
115
|
+
return "failed";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
30
118
|
/**
|
|
31
119
|
* #1699: the config dir of a NAMED credential profile — the one string every writer and reader of that profile uses
|
|
32
120
|
* (claude names its macOS Keychain item after it). Null for no profile.
|
|
@@ -884,6 +972,8 @@ export class ClaudeCodeBackend {
|
|
|
884
972
|
const profileDir = claudeProfileConfigDir(config.backendOptions);
|
|
885
973
|
if (profileDir) {
|
|
886
974
|
prepareCredentialProfileHome(credentialHomeSpec("claude-code"), profileDir);
|
|
975
|
+
// #1754: the project's auto-memory is the shared one, as on the default login.
|
|
976
|
+
linkSharedClaudeMemory(profileDir, config.workingDirectory, credentialHomeSpec("claude-code").sharedRoot());
|
|
887
977
|
envPrefix.push(`CLAUDE_CONFIG_DIR=${shellQuote(profileDir)}`);
|
|
888
978
|
}
|
|
889
979
|
if (process.env.ANTHROPIC_BASE_URL)
|