@xemahq/opencode-xema-plugin 0.2.0 → 0.3.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.
@@ -1,20 +0,0 @@
1
- import { type InvocationContext, type InvocationRole } from './context.js';
2
- export interface SessionState {
3
- ctx: InvocationContext;
4
- }
5
- export declare class ContextMissingError extends Error {
6
- readonly workspaceDir: string;
7
- readonly code = "XEMA_CONTEXT_MISSING";
8
- constructor(workspaceDir: string);
9
- }
10
- export declare class RoleNotAllowedError extends Error {
11
- readonly role: InvocationRole;
12
- readonly toolName: string;
13
- readonly allowedTools: string[];
14
- readonly code = "XEMA_ROLE_NOT_ALLOWED";
15
- constructor(role: InvocationRole, toolName: string, allowedTools: string[]);
16
- }
17
- export declare function loadSessionState(workspaceDir: string): SessionState;
18
- export declare function ensureRoleAllowed(ctx: InvocationContext, toolName: string): void;
19
- export declare function loadSessionStateForTool(workspaceDir: string, toolName: string): SessionState;
20
- //# sourceMappingURL=session-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../src/session-state.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;aAEhB,YAAY,EAAE,MAAM;IADhD,QAAQ,CAAC,IAAI,0BAA0B;gBACX,YAAY,EAAE,MAAM;CAOjD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,IAAI,EAAE,cAAc;aACpB,QAAQ,EAAE,MAAM;aAChB,YAAY,EAAE,MAAM,EAAE;IAJxC,QAAQ,CAAC,IAAI,2BAA2B;gBAEtB,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE;CAOzC;AASD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAMnE;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,MAAM,GACf,IAAI,CASN;AAMD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,YAAY,CAId"}
@@ -1,43 +0,0 @@
1
- import { readInvocationContext, } from './context.js';
2
- export class ContextMissingError extends Error {
3
- workspaceDir;
4
- code = 'XEMA_CONTEXT_MISSING';
5
- constructor(workspaceDir) {
6
- super(`/workspace/context.json not found in ${workspaceDir}. The xema plugin ` +
7
- `cannot operate without invocation context — the orchestrator must ` +
8
- `write context.json before the agent starts.`);
9
- this.workspaceDir = workspaceDir;
10
- }
11
- }
12
- export class RoleNotAllowedError extends Error {
13
- role;
14
- toolName;
15
- allowedTools;
16
- code = 'XEMA_ROLE_NOT_ALLOWED';
17
- constructor(role, toolName, allowedTools) {
18
- super(`Role "${role}" is not allowed to call "${toolName}". Allowed tools ` +
19
- `for this role: [${allowedTools.join(', ')}].`);
20
- this.role = role;
21
- this.toolName = toolName;
22
- this.allowedTools = allowedTools;
23
- }
24
- }
25
- export function loadSessionState(workspaceDir) {
26
- const ctx = readInvocationContext(workspaceDir);
27
- if (!ctx) {
28
- throw new ContextMissingError(workspaceDir);
29
- }
30
- return { ctx };
31
- }
32
- export function ensureRoleAllowed(ctx, toolName) {
33
- const allowed = ctx.authority.allowedXemaTools;
34
- if (!allowed.includes(toolName)) {
35
- throw new RoleNotAllowedError(ctx.invocation.role, toolName, [...allowed].sort((a, b) => a.localeCompare(b)));
36
- }
37
- }
38
- export function loadSessionStateForTool(workspaceDir, toolName) {
39
- const state = loadSessionState(workspaceDir);
40
- ensureRoleAllowed(state.ctx, toolName);
41
- return state;
42
- }
43
- //# sourceMappingURL=session-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../src/session-state.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AAMtB,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAEhB;IADnB,IAAI,GAAG,sBAAsB,CAAC;IACvC,YAA4B,YAAoB;QAC9C,KAAK,CACH,wCAAwC,YAAY,oBAAoB;YACtE,oEAAoE;YACpE,6CAA6C,CAChD,CAAC;QALwB,iBAAY,GAAZ,YAAY,CAAQ;IAMhD,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG1B;IACA;IACA;IAJT,IAAI,GAAG,uBAAuB,CAAC;IACxC,YACkB,IAAoB,EACpB,QAAgB,EAChB,YAAsB;QAEtC,KAAK,CACH,SAAS,IAAI,6BAA6B,QAAQ,mBAAmB;YACnE,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACjD,CAAC;QAPc,SAAI,GAAJ,IAAI,CAAgB;QACpB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,iBAAY,GAAZ,YAAY,CAAU;IAMxC,CAAC;CACF;AASD,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,MAAM,GAAG,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,QAAgB;IAEhB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,mBAAmB,CAC3B,GAAG,CAAC,UAAU,CAAC,IAAI,EACnB,QAAQ,EACR,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,QAAgB;IAEhB,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,2 +0,0 @@
1
- export { loadSessionStateForTool } from '../session-state.js';
2
- //# sourceMappingURL=runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/tools/runtime.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { loadSessionStateForTool } from '../session-state.js';
2
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/tools/runtime.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function readServiceToken(): string;
2
- export declare function serviceTokenAuthorizationHeader(): string;
3
- //# sourceMappingURL=service-token.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-token.d.ts","sourceRoot":"","sources":["../../src/tools/service-token.ts"],"names":[],"mappings":"AAkCA,wBAAgB,gBAAgB,IAAI,MAAM,CAyBzC;AAMD,wBAAgB,+BAA+B,IAAI,MAAM,CAExD"}
@@ -1,31 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- function serviceTokenPath() {
3
- return process.env['XEMA_SERVICE_TOKEN_PATH']?.trim() || '/run/xema/service-token';
4
- }
5
- export function readServiceToken() {
6
- const path = serviceTokenPath();
7
- let raw;
8
- try {
9
- raw = readFileSync(path, 'utf8');
10
- }
11
- catch (err) {
12
- const code = err.code;
13
- if (code === 'ENOENT') {
14
- throw new Error(`Worker service token file is missing at ${path}. workspace-proxy ` +
15
- 'must write the per-allocation Keycloak JWT (via the session ' +
16
- 'bundle or PUT /control/service-token) before xema_* tools run.');
17
- }
18
- const message = err instanceof Error ? err.message : String(err);
19
- throw new Error(`Failed to read worker service token at ${path}: ${message}`);
20
- }
21
- const token = raw.trim();
22
- if (!token) {
23
- throw new Error(`Worker service token file at ${path} is empty. workspace-proxy ` +
24
- 'must write a non-empty per-allocation Keycloak JWT.');
25
- }
26
- return token;
27
- }
28
- export function serviceTokenAuthorizationHeader() {
29
- return `Bearer ${readServiceToken()}`;
30
- }
31
- //# sourceMappingURL=service-token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-token.js","sourceRoot":"","sources":["../../src/tools/service-token.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,IAAI,yBAAyB,CAAC;AACrF,CAAC;AAQD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,oBAAoB;gBACjE,8DAA8D;gBAC9D,gEAAgE,CACnE,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,6BAA6B;YAC/D,qDAAqD,CACxD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,MAAM,UAAU,+BAA+B;IAC7C,OAAO,UAAU,gBAAgB,EAAE,EAAE,CAAC;AACxC,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function writeOutputFile(workspaceDir: string, relativePath: string, content: string): void;
2
- export declare function toJsonString(value: unknown): string;
3
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD"}
@@ -1,11 +0,0 @@
1
- import { mkdirSync, writeFileSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
3
- export function writeOutputFile(workspaceDir, relativePath, content) {
4
- const fullPath = join(workspaceDir, relativePath);
5
- mkdirSync(dirname(fullPath), { recursive: true });
6
- writeFileSync(fullPath, content, 'utf-8');
7
- }
8
- export function toJsonString(value) {
9
- return JSON.stringify(value, null, 2);
10
- }
11
- //# sourceMappingURL=shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,YAAoB,EACpB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -1,31 +0,0 @@
1
- import { z } from 'zod';
2
- export declare function buildXemaMemorySetTool(workspaceDir: string): import("../opencode-types.js").ToolDefinition<{
3
- content: z.ZodString;
4
- kind: z.ZodDefault<z.ZodEnum<{
5
- GENERAL: "GENERAL";
6
- DECISION: "DECISION";
7
- CONSTRAINT: "CONSTRAINT";
8
- PATTERN: "PATTERN";
9
- LESSON: "LESSON";
10
- EPISODIC: "EPISODIC";
11
- PROCEDURAL: "PROCEDURAL";
12
- CORRECTION: "CORRECTION";
13
- }>>;
14
- tag: z.ZodOptional<z.ZodString>;
15
- importance: z.ZodOptional<z.ZodNumber>;
16
- }>;
17
- export declare function buildXemaMemoryGetTool(workspaceDir: string): import("../opencode-types.js").ToolDefinition<{
18
- kind: z.ZodOptional<z.ZodEnum<{
19
- GENERAL: "GENERAL";
20
- DECISION: "DECISION";
21
- CONSTRAINT: "CONSTRAINT";
22
- PATTERN: "PATTERN";
23
- LESSON: "LESSON";
24
- EPISODIC: "EPISODIC";
25
- PROCEDURAL: "PROCEDURAL";
26
- CORRECTION: "CORRECTION";
27
- }>>;
28
- tag: z.ZodOptional<z.ZodString>;
29
- limit: z.ZodDefault<z.ZodNumber>;
30
- }>;
31
- //# sourceMappingURL=xema-memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xema-memory.d.ts","sourceRoot":"","sources":["../../src/tools/xema-memory.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2IxB,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM;;;;;;;;;;;;;;GAsC1D;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM;;;;;;;;;;;;;GAiC1D"}
@@ -1,157 +0,0 @@
1
- import { z } from 'zod';
2
- import { tool } from '../opencode-types.js';
3
- import { loadSessionStateForTool } from './runtime.js';
4
- import { serviceTokenAuthorizationHeader } from './service-token.js';
5
- import { toJsonString } from './shared.js';
6
- const MEMORY_KINDS = [
7
- 'GENERAL',
8
- 'DECISION',
9
- 'CONSTRAINT',
10
- 'PATTERN',
11
- 'LESSON',
12
- 'EPISODIC',
13
- 'PROCEDURAL',
14
- 'CORRECTION',
15
- ];
16
- const SET_ARGS = {
17
- content: z
18
- .string()
19
- .min(5)
20
- .describe('The memory statement. A short fact / preference / lesson phrased as ' +
21
- 'a complete sentence. Avoid ephemeral context ("just now the user said"); ' +
22
- 'memory persists across turns.'),
23
- kind: z
24
- .enum(MEMORY_KINDS)
25
- .default('GENERAL')
26
- .describe('Kind of memory. Use DECISION for choices made, CONSTRAINT for ' +
27
- 'hard limits, LESSON for insights from failures, PATTERN for ' +
28
- 'recurring structures, CORRECTION when overriding a prior memory, ' +
29
- 'GENERAL otherwise.'),
30
- tag: z
31
- .string()
32
- .optional()
33
- .describe('Optional short tag that appears in the originRef so the memory can ' +
34
- 'later be recalled by the same tag (e.g. "preferences", "style").'),
35
- importance: z
36
- .number()
37
- .int()
38
- .min(1)
39
- .max(4)
40
- .optional()
41
- .describe('1=LOW, 2=NORMAL (default), 3=HIGH, 4=CRITICAL.'),
42
- };
43
- const GET_ARGS = {
44
- kind: z
45
- .enum(MEMORY_KINDS)
46
- .optional()
47
- .describe('Filter to a specific kind. Omit for all.'),
48
- tag: z
49
- .string()
50
- .optional()
51
- .describe('Filter to memories written with this tag. Matches on originRef suffix.'),
52
- limit: z
53
- .number()
54
- .int()
55
- .min(1)
56
- .max(50)
57
- .default(20)
58
- .describe('Maximum number of memories to return.'),
59
- };
60
- function resolveMemoryApiCtx(workspaceDir, toolName) {
61
- const state = loadSessionStateForTool(workspaceDir, toolName);
62
- const baseUrl = process.env.MEMORY_API_URL?.trim();
63
- if (!baseUrl) {
64
- throw new Error('MEMORY_API_URL is not configured on this worker. The operator must ' +
65
- 'set it for xema_memory_* tools to work.');
66
- }
67
- const project = state.ctx.project;
68
- if (!project || !project.projectId) {
69
- throw new Error('Session memory requires a projectId in context.json; this session is ' +
70
- 'not bound to a project (orgId-only). Skip xema_memory_* tools here.');
71
- }
72
- const sessionId = state.ctx.invocation.sessionId ?? state.ctx.invocation.runId ?? 'no-session';
73
- return {
74
- baseUrl: baseUrl.replace(/\/+$/, ''),
75
- orgId: project.orgId,
76
- projectId: project.projectId,
77
- actorId: `xema:${state.ctx.invocation.role}`,
78
- sessionId,
79
- role: state.ctx.invocation.role,
80
- };
81
- }
82
- function memoryApiHeaders(ctx) {
83
- return {
84
- 'Content-Type': 'application/json',
85
- Authorization: serviceTokenAuthorizationHeader(),
86
- 'x-xema-org-id': ctx.orgId,
87
- 'x-project-id': ctx.projectId,
88
- 'x-actor-type': 'agent',
89
- 'x-actor-id': ctx.actorId,
90
- };
91
- }
92
- export function buildXemaMemorySetTool(workspaceDir) {
93
- return tool({
94
- description: 'Persist a project-scoped memory that survives context compaction and ' +
95
- 'future sessions. Use sparingly — for durable preferences, decisions, ' +
96
- 'lessons, or patterns worth recalling next time. Do NOT use for ' +
97
- 'conversational context or task-local notes.',
98
- args: SET_ARGS,
99
- async execute(args) {
100
- const ctx = resolveMemoryApiCtx(workspaceDir, 'xema_memory_set');
101
- const originRef = args.tag
102
- ? `session:${ctx.sessionId}:${args.tag}`
103
- : `session:${ctx.sessionId}`;
104
- const body = {
105
- content: args.content,
106
- type: args.kind ?? 'GENERAL',
107
- source: ctx.actorId,
108
- originType: 'SESSION',
109
- originRef,
110
- };
111
- if (args.importance !== undefined)
112
- body.importance = args.importance;
113
- const res = await fetch(`${ctx.baseUrl}/memories`, {
114
- method: 'POST',
115
- headers: memoryApiHeaders(ctx),
116
- body: JSON.stringify(body),
117
- signal: AbortSignal.timeout(10_000),
118
- });
119
- if (!res.ok) {
120
- const errText = await res.text().catch(() => '');
121
- throw new Error(`memory-api rejected write (${res.status}): ${errText.slice(0, 400)}`);
122
- }
123
- const stored = (await res.json().catch(() => null));
124
- return toJsonString({ stored, originRef });
125
- },
126
- });
127
- }
128
- export function buildXemaMemoryGetTool(workspaceDir) {
129
- return tool({
130
- description: 'Recall project-scoped memories written by earlier sessions or by ' +
131
- 'xema_memory_set. Returns the most relevant items subject to an ' +
132
- 'optional kind or tag filter. Read this BEFORE large decisions so ' +
133
- 'prior lessons and preferences inform the work.',
134
- args: GET_ARGS,
135
- async execute(args) {
136
- const ctx = resolveMemoryApiCtx(workspaceDir, 'xema_memory_get');
137
- const params = new URLSearchParams();
138
- params.set('limit', String(args.limit ?? 20));
139
- if (args.kind)
140
- params.set('type', args.kind);
141
- if (args.tag)
142
- params.set('originRefContains', `:${args.tag}`);
143
- const res = await fetch(`${ctx.baseUrl}/memories?${params.toString()}`, {
144
- method: 'GET',
145
- headers: memoryApiHeaders(ctx),
146
- signal: AbortSignal.timeout(10_000),
147
- });
148
- if (!res.ok) {
149
- const errText = await res.text().catch(() => '');
150
- throw new Error(`memory-api rejected read (${res.status}): ${errText.slice(0, 400)}`);
151
- }
152
- const raw = (await res.json().catch(() => null));
153
- return toJsonString(raw ?? []);
154
- },
155
- });
156
- }
157
- //# sourceMappingURL=xema-memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xema-memory.js","sourceRoot":"","sources":["../../src/tools/xema-memory.ts"],"names":[],"mappings":"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"}