opencode-graphiti 0.0.0-development

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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/esm/_dnt.polyfills.d.ts +166 -0
  4. package/esm/_dnt.polyfills.d.ts.map +1 -0
  5. package/esm/_dnt.polyfills.js +177 -0
  6. package/esm/_dnt.shims.d.ts +6 -0
  7. package/esm/_dnt.shims.d.ts.map +1 -0
  8. package/esm/_dnt.shims.js +61 -0
  9. package/esm/deno.d.ts +45 -0
  10. package/esm/deno.d.ts.map +1 -0
  11. package/esm/deno.js +39 -0
  12. package/esm/mod.d.ts +3 -0
  13. package/esm/mod.d.ts.map +1 -0
  14. package/esm/mod.js +2 -0
  15. package/esm/package.json +3 -0
  16. package/esm/src/config.d.ts +20 -0
  17. package/esm/src/config.d.ts.map +1 -0
  18. package/esm/src/config.js +246 -0
  19. package/esm/src/handlers/chat.d.ts +14 -0
  20. package/esm/src/handlers/chat.d.ts.map +1 -0
  21. package/esm/src/handlers/chat.js +60 -0
  22. package/esm/src/handlers/compacting.d.ts +9 -0
  23. package/esm/src/handlers/compacting.d.ts.map +1 -0
  24. package/esm/src/handlers/compacting.js +30 -0
  25. package/esm/src/handlers/event.d.ts +22 -0
  26. package/esm/src/handlers/event.d.ts.map +1 -0
  27. package/esm/src/handlers/event.js +287 -0
  28. package/esm/src/handlers/messages.d.ts +9 -0
  29. package/esm/src/handlers/messages.d.ts.map +1 -0
  30. package/esm/src/handlers/messages.js +93 -0
  31. package/esm/src/index.d.ts +5 -0
  32. package/esm/src/index.d.ts.map +1 -0
  33. package/esm/src/index.js +153 -0
  34. package/esm/src/services/batch-drain.d.ts +23 -0
  35. package/esm/src/services/batch-drain.d.ts.map +1 -0
  36. package/esm/src/services/batch-drain.js +217 -0
  37. package/esm/src/services/connection-manager.d.ts +104 -0
  38. package/esm/src/services/connection-manager.d.ts.map +1 -0
  39. package/esm/src/services/connection-manager.js +621 -0
  40. package/esm/src/services/constants.d.ts +7 -0
  41. package/esm/src/services/constants.d.ts.map +1 -0
  42. package/esm/src/services/constants.js +6 -0
  43. package/esm/src/services/context-limit.d.ts +3 -0
  44. package/esm/src/services/context-limit.d.ts.map +1 -0
  45. package/esm/src/services/context-limit.js +44 -0
  46. package/esm/src/services/event-extractor.d.ts +29 -0
  47. package/esm/src/services/event-extractor.d.ts.map +1 -0
  48. package/esm/src/services/event-extractor.js +659 -0
  49. package/esm/src/services/graphiti-async.d.ts +22 -0
  50. package/esm/src/services/graphiti-async.d.ts.map +1 -0
  51. package/esm/src/services/graphiti-async.js +219 -0
  52. package/esm/src/services/graphiti-mcp.d.ts +57 -0
  53. package/esm/src/services/graphiti-mcp.d.ts.map +1 -0
  54. package/esm/src/services/graphiti-mcp.js +194 -0
  55. package/esm/src/services/logger.d.ts +9 -0
  56. package/esm/src/services/logger.d.ts.map +1 -0
  57. package/esm/src/services/logger.js +104 -0
  58. package/esm/src/services/opencode-warning.d.ts +8 -0
  59. package/esm/src/services/opencode-warning.d.ts.map +1 -0
  60. package/esm/src/services/opencode-warning.js +104 -0
  61. package/esm/src/services/redis-cache.d.ts +27 -0
  62. package/esm/src/services/redis-cache.d.ts.map +1 -0
  63. package/esm/src/services/redis-cache.js +215 -0
  64. package/esm/src/services/redis-client.d.ts +89 -0
  65. package/esm/src/services/redis-client.d.ts.map +1 -0
  66. package/esm/src/services/redis-client.js +906 -0
  67. package/esm/src/services/redis-events.d.ts +46 -0
  68. package/esm/src/services/redis-events.d.ts.map +1 -0
  69. package/esm/src/services/redis-events.js +517 -0
  70. package/esm/src/services/redis-snapshot.d.ts +16 -0
  71. package/esm/src/services/redis-snapshot.d.ts.map +1 -0
  72. package/esm/src/services/redis-snapshot.js +184 -0
  73. package/esm/src/services/render-utils.d.ts +23 -0
  74. package/esm/src/services/render-utils.d.ts.map +1 -0
  75. package/esm/src/services/render-utils.js +149 -0
  76. package/esm/src/services/runtime-teardown.d.ts +23 -0
  77. package/esm/src/services/runtime-teardown.d.ts.map +1 -0
  78. package/esm/src/services/runtime-teardown.js +119 -0
  79. package/esm/src/services/sdk-normalize.d.ts +55 -0
  80. package/esm/src/services/sdk-normalize.d.ts.map +1 -0
  81. package/esm/src/services/sdk-normalize.js +61 -0
  82. package/esm/src/session.d.ts +74 -0
  83. package/esm/src/session.d.ts.map +1 -0
  84. package/esm/src/session.js +694 -0
  85. package/esm/src/types/index.d.ts +120 -0
  86. package/esm/src/types/index.d.ts.map +1 -0
  87. package/esm/src/types/index.js +28 -0
  88. package/esm/src/utils.d.ts +27 -0
  89. package/esm/src/utils.d.ts.map +1 -0
  90. package/esm/src/utils.js +76 -0
  91. package/package.json +59 -0
  92. package/script/_dnt.polyfills.d.ts +166 -0
  93. package/script/_dnt.polyfills.d.ts.map +1 -0
  94. package/script/_dnt.polyfills.js +180 -0
  95. package/script/_dnt.shims.d.ts +6 -0
  96. package/script/_dnt.shims.d.ts.map +1 -0
  97. package/script/_dnt.shims.js +65 -0
  98. package/script/deno.d.ts +45 -0
  99. package/script/deno.d.ts.map +1 -0
  100. package/script/deno.js +41 -0
  101. package/script/mod.d.ts +3 -0
  102. package/script/mod.d.ts.map +1 -0
  103. package/script/mod.js +6 -0
  104. package/script/package.json +3 -0
  105. package/script/src/config.d.ts +20 -0
  106. package/script/src/config.d.ts.map +1 -0
  107. package/script/src/config.js +256 -0
  108. package/script/src/handlers/chat.d.ts +14 -0
  109. package/script/src/handlers/chat.d.ts.map +1 -0
  110. package/script/src/handlers/chat.js +63 -0
  111. package/script/src/handlers/compacting.d.ts +9 -0
  112. package/script/src/handlers/compacting.d.ts.map +1 -0
  113. package/script/src/handlers/compacting.js +33 -0
  114. package/script/src/handlers/event.d.ts +22 -0
  115. package/script/src/handlers/event.d.ts.map +1 -0
  116. package/script/src/handlers/event.js +290 -0
  117. package/script/src/handlers/messages.d.ts +9 -0
  118. package/script/src/handlers/messages.d.ts.map +1 -0
  119. package/script/src/handlers/messages.js +96 -0
  120. package/script/src/index.d.ts +5 -0
  121. package/script/src/index.d.ts.map +1 -0
  122. package/script/src/index.js +159 -0
  123. package/script/src/services/batch-drain.d.ts +23 -0
  124. package/script/src/services/batch-drain.d.ts.map +1 -0
  125. package/script/src/services/batch-drain.js +221 -0
  126. package/script/src/services/connection-manager.d.ts +104 -0
  127. package/script/src/services/connection-manager.d.ts.map +1 -0
  128. package/script/src/services/connection-manager.js +635 -0
  129. package/script/src/services/constants.d.ts +7 -0
  130. package/script/src/services/constants.d.ts.map +1 -0
  131. package/script/src/services/constants.js +9 -0
  132. package/script/src/services/context-limit.d.ts +3 -0
  133. package/script/src/services/context-limit.d.ts.map +1 -0
  134. package/script/src/services/context-limit.js +47 -0
  135. package/script/src/services/event-extractor.d.ts +29 -0
  136. package/script/src/services/event-extractor.d.ts.map +1 -0
  137. package/script/src/services/event-extractor.js +669 -0
  138. package/script/src/services/graphiti-async.d.ts +22 -0
  139. package/script/src/services/graphiti-async.d.ts.map +1 -0
  140. package/script/src/services/graphiti-async.js +223 -0
  141. package/script/src/services/graphiti-mcp.d.ts +57 -0
  142. package/script/src/services/graphiti-mcp.d.ts.map +1 -0
  143. package/script/src/services/graphiti-mcp.js +198 -0
  144. package/script/src/services/logger.d.ts +9 -0
  145. package/script/src/services/logger.d.ts.map +1 -0
  146. package/script/src/services/logger.js +142 -0
  147. package/script/src/services/opencode-warning.d.ts +8 -0
  148. package/script/src/services/opencode-warning.d.ts.map +1 -0
  149. package/script/src/services/opencode-warning.js +114 -0
  150. package/script/src/services/redis-cache.d.ts +27 -0
  151. package/script/src/services/redis-cache.d.ts.map +1 -0
  152. package/script/src/services/redis-cache.js +219 -0
  153. package/script/src/services/redis-client.d.ts +89 -0
  154. package/script/src/services/redis-client.d.ts.map +1 -0
  155. package/script/src/services/redis-client.js +943 -0
  156. package/script/src/services/redis-events.d.ts +46 -0
  157. package/script/src/services/redis-events.d.ts.map +1 -0
  158. package/script/src/services/redis-events.js +535 -0
  159. package/script/src/services/redis-snapshot.d.ts +16 -0
  160. package/script/src/services/redis-snapshot.d.ts.map +1 -0
  161. package/script/src/services/redis-snapshot.js +189 -0
  162. package/script/src/services/render-utils.d.ts +23 -0
  163. package/script/src/services/render-utils.d.ts.map +1 -0
  164. package/script/src/services/render-utils.js +165 -0
  165. package/script/src/services/runtime-teardown.d.ts +23 -0
  166. package/script/src/services/runtime-teardown.d.ts.map +1 -0
  167. package/script/src/services/runtime-teardown.js +155 -0
  168. package/script/src/services/sdk-normalize.d.ts +55 -0
  169. package/script/src/services/sdk-normalize.d.ts.map +1 -0
  170. package/script/src/services/sdk-normalize.js +67 -0
  171. package/script/src/session.d.ts +74 -0
  172. package/script/src/session.d.ts.map +1 -0
  173. package/script/src/session.js +698 -0
  174. package/script/src/types/index.d.ts +120 -0
  175. package/script/src/types/index.d.ts.map +1 -0
  176. package/script/src/types/index.js +33 -0
  177. package/script/src/utils.d.ts +27 -0
  178. package/script/src/utils.d.ts.map +1 -0
  179. package/script/src/utils.js +87 -0
@@ -0,0 +1,120 @@
1
+ /** Redis hot-tier configuration. */
2
+ export interface RedisConfig {
3
+ endpoint: string;
4
+ batchSize: number;
5
+ batchMaxBytes: number;
6
+ sessionTtlSeconds: number;
7
+ cacheTtlSeconds: number;
8
+ drainRetryMax: number;
9
+ }
10
+ /** Legacy nested FalkorDB compatibility config. */
11
+ export interface FalkorDbConfig {
12
+ redisEndpoint?: string;
13
+ batchSize?: number;
14
+ batchMaxBytes?: number;
15
+ sessionTtlSeconds?: number;
16
+ cacheTtlSeconds?: number;
17
+ drainRetryMax?: number;
18
+ }
19
+ /** Graphiti async-tier configuration. */
20
+ export interface GraphitiServiceConfig {
21
+ endpoint: string;
22
+ groupIdPrefix: string;
23
+ driftThreshold: number;
24
+ }
25
+ /** Plugin configuration for hot-tier + Graphiti async integration. */
26
+ export interface GraphitiConfig {
27
+ redis: RedisConfig;
28
+ graphiti: GraphitiServiceConfig;
29
+ falkordb?: FalkorDbConfig;
30
+ endpoint?: string;
31
+ groupIdPrefix?: string;
32
+ driftThreshold?: number;
33
+ }
34
+ /** A fact retrieved from the Graphiti knowledge graph. */
35
+ export interface GraphitiFact {
36
+ uuid: string;
37
+ fact: string;
38
+ valid_at?: string;
39
+ invalid_at?: string;
40
+ source_node?: {
41
+ name: string;
42
+ uuid: string;
43
+ };
44
+ target_node?: {
45
+ name: string;
46
+ uuid: string;
47
+ };
48
+ }
49
+ /** A node retrieved from the Graphiti knowledge graph. */
50
+ export interface GraphitiNode {
51
+ uuid: string;
52
+ name: string;
53
+ summary?: string;
54
+ labels?: string[];
55
+ }
56
+ /** A recent episode retrieved from Graphiti memory. */
57
+ export interface GraphitiEpisode {
58
+ uuid: string;
59
+ name: string;
60
+ content: string;
61
+ source?: string;
62
+ sourceDescription?: string;
63
+ created_at?: string;
64
+ labels?: string[];
65
+ }
66
+ export type EventCategory = "task.create" | "task.update" | "task.complete" | "decision" | "preference" | "rule.load" | "file.read" | "file.write" | "file.edit" | "file.search" | "cwd.change" | "env.change" | "git.activity" | "error" | "subagent.start" | "subagent.finish" | "integration.call" | "intent" | "data.import" | "discovery" | "message" | "session.meta";
67
+ export type SessionEventSourceKind = "user-request" | "assistant-response" | "tool-activity" | "system-state";
68
+ export interface SessionEvent {
69
+ id: string;
70
+ ts: number;
71
+ category: EventCategory;
72
+ priority: 0 | 1 | 2 | 3 | 4;
73
+ role: "user" | "assistant" | "tool" | "system";
74
+ summary: string;
75
+ body?: string;
76
+ detail?: string;
77
+ continuityText?: string;
78
+ keywords?: string[];
79
+ sourceKind?: SessionEventSourceKind;
80
+ refs?: string[];
81
+ metadata?: Record<string, unknown>;
82
+ }
83
+ export declare const getSessionEventPrimaryText: (event: SessionEvent, fallback?: string) => string;
84
+ export declare const getSessionEventRecallText: (event: SessionEvent) => string;
85
+ export interface PersistentMemoryCacheEntry {
86
+ query: string;
87
+ refreshedAt: number;
88
+ nodes: GraphitiNode[];
89
+ episodeSummaries?: string[];
90
+ nodeRefs: string[];
91
+ }
92
+ export interface PersistentMemoryCacheMeta {
93
+ lastQuery?: string;
94
+ lastRefresh?: number;
95
+ }
96
+ export type CacheRefreshClassification = "miss" | "stale" | "primer-only" | "aligned" | "drifted";
97
+ export interface CacheRefreshDecision {
98
+ classification: CacheRefreshClassification;
99
+ shouldRefresh: boolean;
100
+ similarity: number;
101
+ threshold: number;
102
+ cachedQuery: string | null;
103
+ }
104
+ export interface DrainQueueEntry {
105
+ sessionId: string;
106
+ groupId: string;
107
+ event: SessionEvent;
108
+ }
109
+ export interface ClaimedDrainBatch {
110
+ claimToken: string;
111
+ claimKey: string;
112
+ lockTtlSeconds: number;
113
+ entries: DrainQueueEntry[];
114
+ }
115
+ export interface PreparedSessionMemory {
116
+ envelope: string;
117
+ nodeRefs: string[];
118
+ refreshDecision: CacheRefreshDecision;
119
+ }
120
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSessionEventRecallText = exports.getSessionEventPrimaryText = void 0;
4
+ const compactEventText = (values) => [...new Set(values.map((value) => value?.trim()).filter(Boolean))]
5
+ .join(" ")
6
+ .trim();
7
+ const metadataRecallText = (metadata) => {
8
+ if (!metadata)
9
+ return "";
10
+ const values = [];
11
+ for (const [key, value] of Object.entries(metadata).filter(([, value]) => typeof value === "string" || typeof value === "number" ||
12
+ typeof value === "boolean")) {
13
+ if (/^(eventType|tool|integration|cwd|status|result|reason)$/i.test(key)) {
14
+ values.push(String(value));
15
+ }
16
+ }
17
+ return values.join(" ");
18
+ };
19
+ const getSessionEventPrimaryText = (event, fallback) => event.continuityText?.trim() || event.detail?.trim() ||
20
+ event.summary.trim() ||
21
+ event.body?.trim() || fallback || "";
22
+ exports.getSessionEventPrimaryText = getSessionEventPrimaryText;
23
+ const getSessionEventRecallText = (event) => compactEventText([
24
+ event.summary,
25
+ event.continuityText,
26
+ event.detail,
27
+ event.refs?.join(" "),
28
+ event.keywords?.join(" "),
29
+ metadataRecallText(event.metadata),
30
+ event.category,
31
+ event.sourceKind,
32
+ ]);
33
+ exports.getSessionEventRecallText = getSessionEventRecallText;
@@ -0,0 +1,27 @@
1
+ import type { Part } from "@opencode-ai/sdk";
2
+ /**
3
+ * Build a sanitized Graphiti group ID from a prefix and project directory.
4
+ */
5
+ export declare const makeGroupId: (prefix?: string, directory?: string) => string;
6
+ /**
7
+ * Build a sanitized Graphiti group ID from a prefix and user home directory.
8
+ */
9
+ export declare const makeUserGroupId: (prefix?: string, directory?: string) => string;
10
+ /**
11
+ * Narrow an OpenCode Part to a non-synthetic text part.
12
+ */
13
+ export declare const isTextPart: (value: unknown) => value is Part & {
14
+ type: "text";
15
+ text: string;
16
+ };
17
+ /**
18
+ * Extract and join text from OpenCode message parts.
19
+ */
20
+ export declare const extractTextFromParts: (parts: Part[]) => string;
21
+ /**
22
+ * Truncate `text` to at most `budget` characters without cutting mid-line.
23
+ * Prefers to break at the last newline within the budget window; falls back
24
+ * to a raw slice only when the candidate contains no newline.
25
+ */
26
+ export declare const truncateAtLineBoundary: (text: string, budget: number) => string;
27
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA0C7C;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,YAAW,MAAsB,KAChC,MAMF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,YAAW,MAAsB,KAChC,MAQF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAAI,GAAG;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAMd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,IAAI,EAAE,KAAG,MACe,CAAC;AAErE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,KACb,MAKF,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.truncateAtLineBoundary = exports.extractTextFromParts = exports.isTextPart = exports.makeUserGroupId = exports.makeGroupId = void 0;
7
+ const node_os_1 = __importDefault(require("node:os"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_process_1 = __importDefault(require("node:process"));
10
+ const getPathBasename = (value) => {
11
+ const trimmed = value.trim();
12
+ if (!trimmed)
13
+ return "";
14
+ const normalized = trimmed.replaceAll("\\", "/");
15
+ return node_path_1.default.posix.basename(normalized);
16
+ };
17
+ const getProjectName = (directory) => getPathBasename(directory) || "default";
18
+ const toPascalCaseSegment = (value) => {
19
+ const words = value.match(/[\p{L}\p{N}]+/gu) ?? [];
20
+ const pascal = words.map((word) => {
21
+ if (!word)
22
+ return "";
23
+ const [first = "", ...rest] = Array.from(word);
24
+ return first.toLocaleUpperCase() + rest.join("").toLocaleLowerCase();
25
+ }).join("");
26
+ return pascal || "Default";
27
+ };
28
+ const sanitizeGroupSegment = (value) => value.replace(/[^A-Za-z0-9_]/g, "_");
29
+ const sanitizeProjectSegment = (value) => value.replace(/[^\p{L}\p{N}_]/gu, "_");
30
+ const getHomeDirectory = () => {
31
+ try {
32
+ return node_os_1.default.homedir();
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ };
38
+ const getUserName = () => getPathBasename(getHomeDirectory() ?? "") || undefined;
39
+ /**
40
+ * Build a sanitized Graphiti group ID from a prefix and project directory.
41
+ */
42
+ const makeGroupId = (prefix, directory = node_process_1.default.cwd()) => {
43
+ const projectName = sanitizeProjectSegment(toPascalCaseSegment(getProjectName(directory)));
44
+ const prefixPart = prefix ? `${sanitizeGroupSegment(prefix)}_` : "";
45
+ return `${prefixPart}${projectName}__main`;
46
+ };
47
+ exports.makeGroupId = makeGroupId;
48
+ /**
49
+ * Build a sanitized Graphiti group ID from a prefix and user home directory.
50
+ */
51
+ const makeUserGroupId = (prefix, directory = node_process_1.default.cwd()) => {
52
+ const projectName = sanitizeProjectSegment(toPascalCaseSegment(getProjectName(directory)));
53
+ const userName = getUserName() ?? "unknown";
54
+ const prefixPart = prefix ? `${sanitizeGroupSegment(prefix)}_` : "";
55
+ const userSegment = sanitizeGroupSegment(userName);
56
+ return `${prefixPart}${projectName}__user_${userSegment}`;
57
+ };
58
+ exports.makeUserGroupId = makeUserGroupId;
59
+ /**
60
+ * Narrow an OpenCode Part to a non-synthetic text part.
61
+ */
62
+ const isTextPart = (value) => {
63
+ if (!value || typeof value !== "object")
64
+ return false;
65
+ const part = value;
66
+ return part.type === "text" && typeof part.text === "string" &&
67
+ !part.synthetic;
68
+ };
69
+ exports.isTextPart = isTextPart;
70
+ /**
71
+ * Extract and join text from OpenCode message parts.
72
+ */
73
+ const extractTextFromParts = (parts) => parts.filter(exports.isTextPart).map((part) => part.text).join(" ").trim();
74
+ exports.extractTextFromParts = extractTextFromParts;
75
+ /**
76
+ * Truncate `text` to at most `budget` characters without cutting mid-line.
77
+ * Prefers to break at the last newline within the budget window; falls back
78
+ * to a raw slice only when the candidate contains no newline.
79
+ */
80
+ const truncateAtLineBoundary = (text, budget) => {
81
+ if (text.length <= budget)
82
+ return text;
83
+ const candidate = text.slice(0, budget);
84
+ const lastNl = candidate.lastIndexOf("\n");
85
+ return lastNl > 0 ? candidate.slice(0, lastNl) : candidate;
86
+ };
87
+ exports.truncateAtLineBoundary = truncateAtLineBoundary;