opencode-anthropic-multi-account 0.2.14 → 0.2.16

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.
@@ -0,0 +1,114 @@
1
+ // src/scrub-template.ts
2
+ var HOST_CONTEXT_SECTION_NAMES = /* @__PURE__ */ new Set([
3
+ "environment",
4
+ "automemory",
5
+ "claudemd",
6
+ "useremail",
7
+ "currentdate",
8
+ "gitstatus"
9
+ ]);
10
+ var USER_PATH_REPLACEMENTS = [
11
+ {
12
+ pattern: /\/Users\/(?!user(?:\/|$))[A-Za-z0-9._-]+/g,
13
+ replacement: "/Users/user"
14
+ },
15
+ {
16
+ pattern: /\/home\/(?!user(?:\/|$))[A-Za-z0-9._-]+/g,
17
+ replacement: "/home/user"
18
+ },
19
+ {
20
+ pattern: /([A-Za-z]:\\Users\\)(?!user(?:\\|$))[A-Za-z0-9._-]+/g,
21
+ replacement: "$1user"
22
+ }
23
+ ];
24
+ var USER_PATH_HIT_PATTERNS = [
25
+ /\/Users\/(?!user(?:\/|$))[A-Za-z0-9._-]+(?:\/[^\s"'`<>)]*)?/g,
26
+ /\/home\/(?!user(?:\/|$))[A-Za-z0-9._-]+(?:\/[^\s"'`<>)]*)?/g,
27
+ /[A-Za-z]:\\Users\\(?!user(?:\\|$))[A-Za-z0-9._-]+(?:\\[^\s"'`<>)]*)?/g
28
+ ];
29
+ function normalizeSectionName(value) {
30
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "");
31
+ }
32
+ function isRecord(value) {
33
+ return typeof value === "object" && value !== null;
34
+ }
35
+ function cleanupRemovedSections(text) {
36
+ return text.replace(/\n{3,}/g, "\n\n").replace(/^(?:\s*\n)+/, "").replace(/(?:\n\s*)+$/, "");
37
+ }
38
+ function scrubText(text) {
39
+ let scrubbed = text;
40
+ for (const { pattern, replacement } of USER_PATH_REPLACEMENTS) {
41
+ scrubbed = scrubbed.replace(pattern, replacement);
42
+ }
43
+ return scrubbed;
44
+ }
45
+ function findUserPathHits(text) {
46
+ const hits = USER_PATH_HIT_PATTERNS.flatMap((pattern) => text.match(pattern) ?? []);
47
+ return [...new Set(hits)];
48
+ }
49
+ function removeHostContextSections(systemPrompt) {
50
+ const lines = systemPrompt.split("\n");
51
+ const keptLines = [];
52
+ let skippedHeadingDepth = null;
53
+ for (const line of lines) {
54
+ const headingMatch = line.match(/^\s{0,3}#{1,6}\s+(.+?)\s*$/);
55
+ if (headingMatch) {
56
+ const headingMarks = line.match(/^\s{0,3}(#{1,6})\s+/)?.[1];
57
+ const headingDepth = headingMarks?.length ?? 0;
58
+ const sectionName = normalizeSectionName(headingMatch[1] ?? "");
59
+ const startsSkippedSection = HOST_CONTEXT_SECTION_NAMES.has(sectionName);
60
+ if (startsSkippedSection) {
61
+ skippedHeadingDepth = headingDepth;
62
+ continue;
63
+ }
64
+ if (skippedHeadingDepth !== null && headingDepth > skippedHeadingDepth) {
65
+ continue;
66
+ }
67
+ skippedHeadingDepth = null;
68
+ keptLines.push(line);
69
+ continue;
70
+ }
71
+ if (skippedHeadingDepth !== null) {
72
+ continue;
73
+ }
74
+ keptLines.push(line);
75
+ }
76
+ return cleanupRemovedSections(keptLines.join("\n"));
77
+ }
78
+ function scrubObjectStrings(value) {
79
+ if (typeof value === "string") {
80
+ return scrubText(value);
81
+ }
82
+ if (Array.isArray(value)) {
83
+ return value.map((entry) => scrubObjectStrings(entry));
84
+ }
85
+ if (isRecord(value)) {
86
+ return Object.fromEntries(
87
+ Object.entries(value).map(([key, entry]) => [key, scrubObjectStrings(entry)])
88
+ );
89
+ }
90
+ return value;
91
+ }
92
+ function scrubTemplate(data, options) {
93
+ const systemPrompt = scrubText(removeHostContextSections(data.system_prompt));
94
+ const dropMcpTools = options?.dropMcpTools ?? true;
95
+ const tools = data.tools.filter((tool) => !dropMcpTools || !tool.name.startsWith("mcp__")).map((tool) => scrubObjectStrings(tool));
96
+ return {
97
+ ...data,
98
+ agent_identity: scrubText(data.agent_identity),
99
+ system_prompt: systemPrompt,
100
+ tools,
101
+ tool_names: tools.map((tool) => tool.name),
102
+ header_order: data.header_order ? [...data.header_order] : void 0,
103
+ header_values: data.header_values ? scrubObjectStrings(data.header_values) : void 0
104
+ };
105
+ }
106
+
107
+ export {
108
+ scrubText,
109
+ findUserPathHits,
110
+ removeHostContextSections,
111
+ scrubObjectStrings,
112
+ scrubTemplate
113
+ };
114
+ //# sourceMappingURL=chunk-IETVH43F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/scrub-template.ts"],"sourcesContent":["import type { TemplateData } from \"./fingerprint-capture\";\n\ninterface ScrubTemplateOptions {\n dropMcpTools?: boolean;\n}\n\nconst HOST_CONTEXT_SECTION_NAMES = new Set([\n \"environment\",\n \"automemory\",\n \"claudemd\",\n \"useremail\",\n \"currentdate\",\n \"gitstatus\",\n]);\n\nconst USER_PATH_REPLACEMENTS = [\n {\n pattern: /\\/Users\\/(?!user(?:\\/|$))[A-Za-z0-9._-]+/g,\n replacement: \"/Users/user\",\n },\n {\n pattern: /\\/home\\/(?!user(?:\\/|$))[A-Za-z0-9._-]+/g,\n replacement: \"/home/user\",\n },\n {\n pattern: /([A-Za-z]:\\\\Users\\\\)(?!user(?:\\\\|$))[A-Za-z0-9._-]+/g,\n replacement: \"$1user\",\n },\n] as const;\n\nconst USER_PATH_HIT_PATTERNS = [\n /\\/Users\\/(?!user(?:\\/|$))[A-Za-z0-9._-]+(?:\\/[^\\s\"'`<>)]*)?/g,\n /\\/home\\/(?!user(?:\\/|$))[A-Za-z0-9._-]+(?:\\/[^\\s\"'`<>)]*)?/g,\n /[A-Za-z]:\\\\Users\\\\(?!user(?:\\\\|$))[A-Za-z0-9._-]+(?:\\\\[^\\s\"'`<>)]*)?/g,\n] as const;\n\nfunction normalizeSectionName(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]+/g, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction cleanupRemovedSections(text: string): string {\n return text\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .replace(/^(?:\\s*\\n)+/, \"\")\n .replace(/(?:\\n\\s*)+$/, \"\");\n}\n\nexport function scrubText(text: string): string {\n let scrubbed = text;\n\n for (const { pattern, replacement } of USER_PATH_REPLACEMENTS) {\n scrubbed = scrubbed.replace(pattern, replacement);\n }\n\n return scrubbed;\n}\n\nexport function findUserPathHits(text: string): string[] {\n const hits = USER_PATH_HIT_PATTERNS.flatMap((pattern) => text.match(pattern) ?? []);\n return [...new Set(hits)];\n}\n\nexport function removeHostContextSections(systemPrompt: string): string {\n const lines = systemPrompt.split(\"\\n\");\n const keptLines: string[] = [];\n let skippedHeadingDepth: number | null = null;\n\n for (const line of lines) {\n const headingMatch = line.match(/^\\s{0,3}#{1,6}\\s+(.+?)\\s*$/);\n\n if (headingMatch) {\n const headingMarks = line.match(/^\\s{0,3}(#{1,6})\\s+/)?.[1];\n const headingDepth = headingMarks?.length ?? 0;\n const sectionName = normalizeSectionName(headingMatch[1] ?? \"\");\n const startsSkippedSection = HOST_CONTEXT_SECTION_NAMES.has(sectionName);\n\n if (startsSkippedSection) {\n skippedHeadingDepth = headingDepth;\n continue;\n }\n\n if (skippedHeadingDepth !== null && headingDepth > skippedHeadingDepth) {\n continue;\n }\n\n skippedHeadingDepth = null;\n keptLines.push(line);\n continue;\n }\n\n if (skippedHeadingDepth !== null) {\n continue;\n }\n\n keptLines.push(line);\n }\n\n return cleanupRemovedSections(keptLines.join(\"\\n\"));\n}\n\nexport function scrubObjectStrings(value: unknown): unknown {\n if (typeof value === \"string\") {\n return scrubText(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => scrubObjectStrings(entry));\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, scrubObjectStrings(entry)]),\n );\n }\n\n return value;\n}\n\nexport function scrubTemplate(data: TemplateData, options?: ScrubTemplateOptions): TemplateData {\n const systemPrompt = scrubText(removeHostContextSections(data.system_prompt));\n const dropMcpTools = options?.dropMcpTools ?? true;\n const tools = data.tools\n .filter((tool) => !dropMcpTools || !tool.name.startsWith(\"mcp__\"))\n .map((tool) => scrubObjectStrings(tool) as TemplateData[\"tools\"][number]);\n\n return {\n ...data,\n agent_identity: scrubText(data.agent_identity),\n system_prompt: systemPrompt,\n tools,\n tool_names: tools.map((tool) => tool.name),\n header_order: data.header_order ? [...data.header_order] : undefined,\n header_values: data.header_values\n ? scrubObjectStrings(data.header_values) as Record<string, string>\n : undefined,\n };\n}\n"],"mappings":"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","names":[]}