tim-hooks 0.1.0-beta.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.
Files changed (73) hide show
  1. package/README.md +31 -0
  2. package/dist/cadence-runner.d.ts +11 -0
  3. package/dist/cadence-runner.d.ts.map +1 -0
  4. package/dist/cadence-runner.js +30 -0
  5. package/dist/cadence-runner.js.map +1 -0
  6. package/dist/cadence.d.ts +10 -0
  7. package/dist/cadence.d.ts.map +1 -0
  8. package/dist/cadence.js +36 -0
  9. package/dist/cadence.js.map +1 -0
  10. package/dist/checkpoint.d.ts +56 -0
  11. package/dist/checkpoint.d.ts.map +1 -0
  12. package/dist/checkpoint.js +232 -0
  13. package/dist/checkpoint.js.map +1 -0
  14. package/dist/claude-stop.d.ts +32 -0
  15. package/dist/claude-stop.d.ts.map +1 -0
  16. package/dist/claude-stop.js +213 -0
  17. package/dist/claude-stop.js.map +1 -0
  18. package/dist/constants.d.ts +5 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/constants.js +8 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/delta.d.ts +7 -0
  23. package/dist/delta.d.ts.map +1 -0
  24. package/dist/delta.js +53 -0
  25. package/dist/delta.js.map +1 -0
  26. package/dist/hooks.d.ts +39 -0
  27. package/dist/hooks.d.ts.map +1 -0
  28. package/dist/hooks.js +136 -0
  29. package/dist/hooks.js.map +1 -0
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +88 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/marker.d.ts +179 -0
  35. package/dist/marker.d.ts.map +1 -0
  36. package/dist/marker.js +590 -0
  37. package/dist/marker.js.map +1 -0
  38. package/dist/phantom-recovery.d.ts +13 -0
  39. package/dist/phantom-recovery.d.ts.map +1 -0
  40. package/dist/phantom-recovery.js +113 -0
  41. package/dist/phantom-recovery.js.map +1 -0
  42. package/dist/project-creation.d.ts +48 -0
  43. package/dist/project-creation.d.ts.map +1 -0
  44. package/dist/project-creation.js +265 -0
  45. package/dist/project-creation.js.map +1 -0
  46. package/dist/prompt-submit.d.ts +16 -0
  47. package/dist/prompt-submit.d.ts.map +1 -0
  48. package/dist/prompt-submit.js +69 -0
  49. package/dist/prompt-submit.js.map +1 -0
  50. package/dist/rebalance.d.ts +17 -0
  51. package/dist/rebalance.d.ts.map +1 -0
  52. package/dist/rebalance.js +91 -0
  53. package/dist/rebalance.js.map +1 -0
  54. package/dist/session-hooks.d.ts +53 -0
  55. package/dist/session-hooks.d.ts.map +1 -0
  56. package/dist/session-hooks.js +167 -0
  57. package/dist/session-hooks.js.map +1 -0
  58. package/dist/update-check.d.ts +5 -0
  59. package/dist/update-check.d.ts.map +1 -0
  60. package/dist/update-check.js +66 -0
  61. package/dist/update-check.js.map +1 -0
  62. package/package.json +24 -0
  63. package/scripts/README-hermes-statusline.md +47 -0
  64. package/scripts/hermes-cli-tim-statusline.patch +75 -0
  65. package/scripts/lib/resolve-tim-cli.sh +30 -0
  66. package/scripts/post-commit.sh +30 -0
  67. package/scripts/tim-claude-session-start.sh +26 -0
  68. package/scripts/tim-cursor-inject.sh +17 -0
  69. package/scripts/tim-hermes-session-cache.sh +32 -0
  70. package/scripts/tim-hermes-statusline.sh +28 -0
  71. package/scripts/tim-post-commit.sh +14 -0
  72. package/scripts/tim-session-start.sh +104 -0
  73. package/scripts/tim-statusline.sh +16 -0
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MAX_EXCHANGE_CHARS = exports.MAX_TRANSCRIPT_BYTES = void 0;
37
+ exports.readLastExchange = readLastExchange;
38
+ exports.runClaudeStop = runClaudeStop;
39
+ exports.stopExchangeCount = stopExchangeCount;
40
+ const node_crypto_1 = require("node:crypto");
41
+ const fs = __importStar(require("node:fs"));
42
+ const tim_store_1 = require("tim-store");
43
+ const cadence_runner_js_1 = require("./cadence-runner.js");
44
+ const marker_js_1 = require("./marker.js");
45
+ exports.MAX_TRANSCRIPT_BYTES = 1024 * 1024;
46
+ exports.MAX_EXCHANGE_CHARS = 64 * 1024;
47
+ function bounded(text, max = exports.MAX_EXCHANGE_CHARS) {
48
+ const chars = Array.from(text);
49
+ if (chars.length <= max)
50
+ return text;
51
+ return chars.slice(0, max).join('');
52
+ }
53
+ function extractText(content) {
54
+ if (typeof content === 'string') {
55
+ const trimmed = content.trim();
56
+ return trimmed ? content : null;
57
+ }
58
+ if (!Array.isArray(content))
59
+ return null;
60
+ const parts = [];
61
+ for (const block of content) {
62
+ if (!block || typeof block !== 'object')
63
+ continue;
64
+ const record = block;
65
+ if (record.type === 'text' && typeof record.text === 'string' && record.text.trim()) {
66
+ parts.push(record.text);
67
+ }
68
+ }
69
+ if (parts.length === 0)
70
+ return null;
71
+ return parts.join('\n');
72
+ }
73
+ function messageRole(record) {
74
+ if (record.type === 'user' || record.type === 'assistant') {
75
+ return record.type;
76
+ }
77
+ const message = record.message;
78
+ if (message && typeof message === 'object' && !Array.isArray(message)) {
79
+ const role = message.role;
80
+ if (role === 'user' || role === 'assistant')
81
+ return role;
82
+ }
83
+ return null;
84
+ }
85
+ function messageContent(record) {
86
+ const message = record.message;
87
+ if (message && typeof message === 'object' && !Array.isArray(message)) {
88
+ return message.content;
89
+ }
90
+ return record.content;
91
+ }
92
+ function turnIdentity(userUuid, assistantUuid, user, assistant) {
93
+ if (userUuid && assistantUuid)
94
+ return `${userUuid}\0${assistantUuid}`;
95
+ return (0, node_crypto_1.createHash)('sha256').update(`${user}\0${assistant}`).digest('hex');
96
+ }
97
+ /**
98
+ * Read a Claude Code transcript JSONL and return the last genuine user/assistant turn.
99
+ * Skips isMeta, tool-only assistants, malformed lines, and files over the byte bound.
100
+ */
101
+ function readLastExchange(transcriptPath, maxBytes = exports.MAX_TRANSCRIPT_BYTES) {
102
+ let stat;
103
+ try {
104
+ stat = fs.statSync(transcriptPath);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ if (!stat.isFile() || stat.size <= 0 || stat.size > maxBytes)
110
+ return null;
111
+ let raw;
112
+ try {
113
+ raw = fs.readFileSync(transcriptPath, 'utf8');
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ if (Buffer.byteLength(raw, 'utf8') > maxBytes)
119
+ return null;
120
+ let lastUser = null;
121
+ let lastTurn = null;
122
+ for (const line of raw.split(/\r?\n/)) {
123
+ if (!line.trim())
124
+ continue;
125
+ let record;
126
+ try {
127
+ const value = JSON.parse(line);
128
+ if (!value || typeof value !== 'object' || Array.isArray(value))
129
+ continue;
130
+ record = value;
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (record.isMeta === true)
136
+ continue;
137
+ const role = messageRole(record);
138
+ if (!role)
139
+ continue;
140
+ const text = extractText(messageContent(record));
141
+ if (!text)
142
+ continue;
143
+ const uuid = typeof record.uuid === 'string' ? record.uuid : null;
144
+ if (role === 'user') {
145
+ lastUser = { text, uuid };
146
+ continue;
147
+ }
148
+ if (role === 'assistant' && lastUser) {
149
+ lastTurn = {
150
+ user: lastUser.text,
151
+ assistant: text,
152
+ identity: turnIdentity(lastUser.uuid, uuid, lastUser.text, text),
153
+ };
154
+ lastUser = null;
155
+ }
156
+ }
157
+ return lastTurn;
158
+ }
159
+ async function ensureSessionForStop(store, sessions, sessionId, cwd) {
160
+ const existing = await store.read(sessionId);
161
+ if (existing?.metadata.kind === 'session')
162
+ return true;
163
+ const marker = (0, marker_js_1.findMarker)(cwd)?.marker;
164
+ if (!marker?.project)
165
+ return false;
166
+ try {
167
+ await sessions.startProjectSession({
168
+ sessionId,
169
+ projectId: marker.project,
170
+ agentName: 'claude',
171
+ cwd,
172
+ harness: 'claude-code',
173
+ });
174
+ return true;
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ async function runClaudeStop(store, payload, options) {
181
+ const sessionId = typeof payload.session_id === 'string' ? payload.session_id.trim() : '';
182
+ const transcriptPath = typeof payload.transcript_path === 'string' ? payload.transcript_path.trim() : '';
183
+ if (!sessionId || !transcriptPath)
184
+ return { logged: false };
185
+ const turn = readLastExchange(transcriptPath, exports.MAX_TRANSCRIPT_BYTES);
186
+ if (!turn)
187
+ return { logged: false };
188
+ const key = (0, node_crypto_1.createHash)('sha256')
189
+ .update(`${sessionId}\0${turn.identity}`)
190
+ .digest('hex');
191
+ const sessions = new tim_store_1.SessionManager(store);
192
+ const ready = await ensureSessionForStop(store, sessions, sessionId, options.cwd);
193
+ if (!ready)
194
+ return { logged: false };
195
+ let logged;
196
+ try {
197
+ logged = await sessions.logExchangeOnce(sessionId, key, [
198
+ { role: 'user', content: bounded(turn.user) },
199
+ { role: 'agent', content: bounded(turn.assistant) },
200
+ ]);
201
+ }
202
+ catch {
203
+ return { logged: false };
204
+ }
205
+ if (logged.length === 0)
206
+ return { logged: false, duplicate: true };
207
+ return { logged: true, ...(await (0, cadence_runner_js_1.afterExchangeLogged)(store, sessionId, options.cwd)) };
208
+ }
209
+ /** Test helper: expose counters after stop logging. */
210
+ async function stopExchangeCount(store, sessionId) {
211
+ return (await (0, tim_store_1.deriveCounters)(store, sessionId)).exchangeCount;
212
+ }
213
+ //# sourceMappingURL=claude-stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-stop.js","sourceRoot":"","sources":["../src/claude-stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Shared summarizer timing — single source for lock TTL vs CLI timeout. */
2
+ export declare const DEFAULT_SUMMARIZER_TIMEOUT_SEC = 600;
3
+ /** Lock must outlive the longest legal summarizer run (+ SIGTERM tail). */
4
+ export declare const LOCK_TTL_MS: number;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,2EAA2E;AAC3E,eAAO,MAAM,WAAW,QAAgD,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOCK_TTL_MS = exports.DEFAULT_SUMMARIZER_TIMEOUT_SEC = void 0;
4
+ /** Shared summarizer timing — single source for lock TTL vs CLI timeout. */
5
+ exports.DEFAULT_SUMMARIZER_TIMEOUT_SEC = 600;
6
+ /** Lock must outlive the longest legal summarizer run (+ SIGTERM tail). */
7
+ exports.LOCK_TTL_MS = (exports.DEFAULT_SUMMARIZER_TIMEOUT_SEC + 120) * 1000;
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC/D,QAAA,8BAA8B,GAAG,GAAG,CAAC;AAElD,2EAA2E;AAC9D,QAAA,WAAW,GAAG,CAAC,sCAA8B,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TimStore } from 'tim-store';
2
+ export interface DeltaBriefingOptions {
3
+ timeoutMs?: number;
4
+ sessionId?: string;
5
+ }
6
+ export declare function getDeltaBriefing(store: TimStore, projectId: string, opts?: DeltaBriefingOptions): Promise<string | null>;
7
+ //# sourceMappingURL=delta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../src/delta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAK1C,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsDD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
package/dist/delta.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDeltaBriefing = getDeltaBriefing;
4
+ const DEFAULT_TIMEOUT_MS = 500;
5
+ const MAX_LINES = 5;
6
+ function formatDeltaBlock(delta) {
7
+ const lines = [
8
+ `[Since last session] ${delta.created.length} new, ${delta.updated.length} updated, ${delta.deleted.length} deleted`,
9
+ ];
10
+ const highlights = [...delta.created, ...delta.updated, ...delta.deleted]
11
+ .slice(0, MAX_LINES - 1)
12
+ .map(e => {
13
+ const kind = typeof e.metadata.kind === 'string' ? e.metadata.kind : 'entry';
14
+ const title = e.title?.trim() || kind;
15
+ return `• ${title}`;
16
+ });
17
+ lines.push(...highlights);
18
+ return lines.slice(0, MAX_LINES).join('\n');
19
+ }
20
+ async function computeDeltaBriefing(store, projectId, sessionId) {
21
+ const projEntry = await store.read(projectId, { includeChildren: false });
22
+ if (!projEntry || projEntry.metadata.kind !== 'project')
23
+ return null;
24
+ const prev = await store.getPreviousSession(projEntry.id, sessionId ?? null);
25
+ const cutoff = prev
26
+ ? prev.updatedAt
27
+ : new Date(Date.now() - 7 * 86400_000).toISOString();
28
+ const delta = await store.getChangedSince(projEntry.id, cutoff);
29
+ const total = delta.created.length + delta.updated.length + delta.deleted.length;
30
+ if (total === 0)
31
+ return null;
32
+ return formatDeltaBlock(delta);
33
+ }
34
+ /**
35
+ * Short delta block for SessionStart briefing. Returns null when nothing
36
+ * changed or on timeout/error — never throws.
37
+ */
38
+ function raceWithTimeout(promise, timeoutMs) {
39
+ return new Promise((resolve) => {
40
+ const timer = setTimeout(() => resolve(null), timeoutMs);
41
+ promise.then((v) => { clearTimeout(timer); resolve(v); }, () => { clearTimeout(timer); resolve(null); });
42
+ });
43
+ }
44
+ async function getDeltaBriefing(store, projectId, opts = {}) {
45
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
46
+ try {
47
+ return await raceWithTimeout(computeDeltaBriefing(store, projectId, opts.sessionId), timeoutMs);
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../src/delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { HooksConfig } from 'tim-core';
2
+ import type { TimStore } from 'tim-store';
3
+ export interface HookEnv {
4
+ TIM_SESSION_ID?: string;
5
+ TIM_CWD?: string;
6
+ TIM_AGENT?: string;
7
+ TIM_HARNESS?: string;
8
+ [key: string]: string | undefined;
9
+ }
10
+ export interface RunHooksOptions {
11
+ scripts?: string | string[];
12
+ env?: HookEnv;
13
+ timeoutMs?: number;
14
+ cwd?: string;
15
+ }
16
+ export interface HookRunResult {
17
+ script: string;
18
+ exitCode: number | null;
19
+ signal: NodeJS.Signals | null;
20
+ timedOut: boolean;
21
+ error?: string;
22
+ }
23
+ export declare function runHookScript(script: string, options?: Omit<RunHooksOptions, 'scripts'>): Promise<HookRunResult>;
24
+ export declare function runHooks(options?: RunHooksOptions): Promise<HookRunResult[]>;
25
+ export declare function runConfiguredHooks(hookName: keyof Pick<HooksConfig, 'sessionStart' | 'sessionEnd'>, hooksConfig: HooksConfig | undefined, env: HookEnv): Promise<HookRunResult[]>;
26
+ interface EmbeddingOptions {
27
+ batchSize?: number;
28
+ model?: string;
29
+ }
30
+ /**
31
+ * Background hook: finds unembedded content entries and computes their
32
+ * vectors via fastembed (local ONNX). Runs in the summarizer-style
33
+ * fallback chain — best-effort, never blocks user flows.
34
+ *
35
+ * Set TIM_EMBEDDING_DISABLED=1 to skip entirely.
36
+ */
37
+ export declare function embedUnembeddedEntries(store: TimStore, opts?: EmbeddingOptions): Promise<number>;
38
+ export {};
39
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,OAAO;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAM,GAC7C,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAkBtF;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,YAAY,CAAC,EAChE,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,aAAa,EAAE,CAAC,CAY1B;AAED,UAAU,gBAAgB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,QAAQ,EACf,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
package/dist/hooks.js ADDED
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runHookScript = runHookScript;
4
+ exports.runHooks = runHooks;
5
+ exports.runConfiguredHooks = runConfiguredHooks;
6
+ exports.embedUnembeddedEntries = embedUnembeddedEntries;
7
+ const child_process_1 = require("child_process");
8
+ const tim_core_1 = require("tim-core");
9
+ async function runHookScript(script, options = {}) {
10
+ const timeoutMs = options.timeoutMs ?? 30_000;
11
+ const env = { ...process.env, ...options.env };
12
+ return new Promise((resolve) => {
13
+ const child = (0, child_process_1.spawn)(script, {
14
+ shell: true,
15
+ env,
16
+ cwd: options.cwd,
17
+ stdio: 'ignore',
18
+ });
19
+ let timedOut = false;
20
+ const timer = setTimeout(() => {
21
+ timedOut = true;
22
+ child.kill('SIGTERM');
23
+ }, timeoutMs);
24
+ child.on('error', (err) => {
25
+ clearTimeout(timer);
26
+ resolve({
27
+ script,
28
+ exitCode: null,
29
+ signal: null,
30
+ timedOut: false,
31
+ error: err.message,
32
+ });
33
+ });
34
+ child.on('close', (exitCode, signal) => {
35
+ clearTimeout(timer);
36
+ resolve({
37
+ script,
38
+ exitCode,
39
+ signal,
40
+ timedOut,
41
+ });
42
+ });
43
+ });
44
+ }
45
+ async function runHooks(options = {}) {
46
+ const scripts = (0, tim_core_1.normalizeHookScripts)(options.scripts);
47
+ const results = [];
48
+ for (const script of scripts) {
49
+ const result = await runHookScript(script, options);
50
+ results.push(result);
51
+ if (result.error) {
52
+ console.error(`[tim-hooks] hook failed to start (${script}): ${result.error}`);
53
+ }
54
+ else if (result.timedOut) {
55
+ console.error(`[tim-hooks] hook timed out (${script}) after ${options.timeoutMs ?? 30_000}ms`);
56
+ }
57
+ else if (result.exitCode !== 0) {
58
+ console.error(`[tim-hooks] hook exited with code ${result.exitCode} (${script})`);
59
+ }
60
+ }
61
+ return results;
62
+ }
63
+ async function runConfiguredHooks(hookName, hooksConfig, env) {
64
+ if (hooksConfig?.enabled === false) {
65
+ return [];
66
+ }
67
+ const scripts = hooksConfig?.[hookName];
68
+ return runHooks({
69
+ scripts,
70
+ env,
71
+ timeoutMs: hooksConfig?.timeoutMs ?? 30_000,
72
+ cwd: env.TIM_CWD,
73
+ });
74
+ }
75
+ function resolveEmbeddingModel(name) {
76
+ if (name === 'all-MiniLM-L6-v2')
77
+ return 'fast-all-MiniLM-L6-v2';
78
+ return name;
79
+ }
80
+ function resolveEmbeddingModelEnum(name, EmbeddingModel) {
81
+ const resolved = resolveEmbeddingModel(name);
82
+ const match = Object.values(EmbeddingModel).find(v => v === resolved);
83
+ return (match ?? EmbeddingModel.AllMiniLML6V2);
84
+ }
85
+ /**
86
+ * Background hook: finds unembedded content entries and computes their
87
+ * vectors via fastembed (local ONNX). Runs in the summarizer-style
88
+ * fallback chain — best-effort, never blocks user flows.
89
+ *
90
+ * Set TIM_EMBEDDING_DISABLED=1 to skip entirely.
91
+ */
92
+ async function embedUnembeddedEntries(store, opts = {}) {
93
+ if (process.env.TIM_EMBEDDING_DISABLED === '1')
94
+ return 0;
95
+ const batchSize = opts.batchSize ?? (Number(process.env.TIM_EMBEDDING_BATCH_SIZE) || 32);
96
+ const modelName = resolveEmbeddingModel(opts.model ?? process.env.TIM_EMBEDDING_MODEL ?? 'all-MiniLM-L6-v2');
97
+ let entries;
98
+ try {
99
+ entries = await store.getUnembedded(batchSize);
100
+ }
101
+ catch {
102
+ return 0;
103
+ }
104
+ if (entries.length === 0)
105
+ return 0;
106
+ try {
107
+ const { EmbeddingModel, FlagEmbedding } = await loadFastembed();
108
+ const modelEnum = resolveEmbeddingModelEnum(modelName, EmbeddingModel);
109
+ const embedder = await FlagEmbedding.init({ model: modelEnum });
110
+ const texts = entries.map(e => e.content.slice(0, 2000));
111
+ const gen = embedder.embed(texts, batchSize);
112
+ const batch = await gen.next();
113
+ const vectors = batch.value;
114
+ if (!vectors)
115
+ return 0;
116
+ let embedded = 0;
117
+ for (let i = 0; i < entries.length; i++) {
118
+ try {
119
+ store.setVectors(entries[i].id, new Float32Array(vectors[i]), modelName);
120
+ embedded++;
121
+ }
122
+ catch {
123
+ // individual entry failure — continue with next
124
+ }
125
+ }
126
+ return embedded;
127
+ }
128
+ catch (err) {
129
+ console.debug('[tim-hooks] embedUnembeddedEntries: embedding not available:', err.message);
130
+ return 0;
131
+ }
132
+ }
133
+ async function loadFastembed() {
134
+ return import('fastembed');
135
+ }
136
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { runHookScript, runHooks, runConfiguredHooks, embedUnembeddedEntries, type HookEnv, type HookRunResult, type RunHooksOptions, } from './hooks.js';
2
+ export { runCheckpoint, runSessionStart, runSessionEnd, loadProjectContext, getActiveProjectLabel, type SessionEndOptions, type SessionStartResult, } from './checkpoint.js';
3
+ export { getDeltaBriefing, type DeltaBriefingOptions } from './delta.js';
4
+ export { getCheckpointEveryN, getBriefingMaxTokens, shouldAutoCheckpoint, checkpointCadenceReminder, DEFAULT_CHECKPOINT_EVERY_N, DEFAULT_BRIEFING_MAX_TOKENS, } from './cadence.js';
5
+ export { afterExchangeLogged, type CadenceResult } from './cadence-runner.js';
6
+ export { runPromptSubmit, type PromptSubmitParams, type PromptSubmitResult, } from './prompt-submit.js';
7
+ export { runClaudeStop, readLastExchange, MAX_TRANSCRIPT_BYTES, MAX_EXCHANGE_CHARS, type ClaudeStopPayload, type ClaudeStopResult, } from './claude-stop.js';
8
+ export { readMarker, writeMarker, writeMarkerAtomic, writeMarkerExclusive, ExclusiveMarkerConflictError, rotateMarkerSession, detectProject, discoverMarker, findMarker, findMarkerOptionsFromEnv, DEFAULT_MARKER_DISCOVERY_POLICY, CWD_ONLY_MARKER_DISCOVERY_POLICY, buildLoadDirective, buildSessionDirective, reconcileMarker, syncNearestProjectMarker, validateMarkerAgainstStore, validateProjectLabel, isUnsafeMarkerDir, INBOX_LABEL, acquireLock, releaseLock, markerPath, canonicalProjectPath, CANONICAL_PROJECT_FILENAME, MARKER_FILENAME, MARKER_VERSION, MARKER_LOCK, LOCK_TTL_MS, isSessionLocked, type ProjectMarker, type ProjectMarkerInput, type MarkerLocation, type FindMarkerOptions, type MarkerDiscoveryPolicy, } from './marker.js';
9
+ export { rebalanceBatch, type RebalanceResult, type RebalanceSkip, } from './rebalance.js';
10
+ export { onSessionStop, maybeSpawnSummarizer, buildSummarizerCommand, spawnSummarizer, detachedSpawner, summarizerLogPath, DEFAULT_SUMMARIZER_TIMEOUT_SEC, type SpawnContext, type Spawner, type SessionStopResult, type SessionStopReason, type MaybeSpawnSummarizerOptions, } from './session-hooks.js';
11
+ export { MODE_ERROR, validateMode, canonicalDirectory, createProjectCoordinated, recoverProjectBinding, ProjectCreationPartialFailureError, type ProjectCreationArgs, type MemoryOnlyProjectCreationResult, type BoundProjectCreationResult, type ProjectCreationResult, type ProjectCreationDeps, type RecoverProjectBindingArgs, type RecoverProjectBindingResult, } from './project-creation.js';
12
+ export { repairPhantomProjectBinding, formatUnboundProjectLabel, stripUnboundProjectSuffix, isUnboundProjectLabel, markerWithRepairedProject, } from './phantom-recovery.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,+BAA+B,EAC/B,gCAAgC,EAChC,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,8BAA8B,EAC9B,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,GACjC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kCAAkC,EAClC,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,GACjC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MARKER_LOCK = exports.MARKER_VERSION = exports.MARKER_FILENAME = exports.CANONICAL_PROJECT_FILENAME = exports.canonicalProjectPath = exports.markerPath = exports.releaseLock = exports.acquireLock = exports.INBOX_LABEL = exports.isUnsafeMarkerDir = exports.validateProjectLabel = exports.validateMarkerAgainstStore = exports.syncNearestProjectMarker = exports.reconcileMarker = exports.buildSessionDirective = exports.buildLoadDirective = exports.CWD_ONLY_MARKER_DISCOVERY_POLICY = exports.DEFAULT_MARKER_DISCOVERY_POLICY = exports.findMarkerOptionsFromEnv = exports.findMarker = exports.discoverMarker = exports.detectProject = exports.rotateMarkerSession = exports.ExclusiveMarkerConflictError = exports.writeMarkerExclusive = exports.writeMarkerAtomic = exports.writeMarker = exports.readMarker = exports.MAX_EXCHANGE_CHARS = exports.MAX_TRANSCRIPT_BYTES = exports.readLastExchange = exports.runClaudeStop = exports.runPromptSubmit = exports.afterExchangeLogged = exports.DEFAULT_BRIEFING_MAX_TOKENS = exports.DEFAULT_CHECKPOINT_EVERY_N = exports.checkpointCadenceReminder = exports.shouldAutoCheckpoint = exports.getBriefingMaxTokens = exports.getCheckpointEveryN = exports.getDeltaBriefing = exports.getActiveProjectLabel = exports.loadProjectContext = exports.runSessionEnd = exports.runSessionStart = exports.runCheckpoint = exports.embedUnembeddedEntries = exports.runConfiguredHooks = exports.runHooks = exports.runHookScript = void 0;
4
+ exports.markerWithRepairedProject = exports.isUnboundProjectLabel = exports.stripUnboundProjectSuffix = exports.formatUnboundProjectLabel = exports.repairPhantomProjectBinding = exports.ProjectCreationPartialFailureError = exports.recoverProjectBinding = exports.createProjectCoordinated = exports.canonicalDirectory = exports.validateMode = exports.MODE_ERROR = exports.DEFAULT_SUMMARIZER_TIMEOUT_SEC = exports.summarizerLogPath = exports.detachedSpawner = exports.spawnSummarizer = exports.buildSummarizerCommand = exports.maybeSpawnSummarizer = exports.onSessionStop = exports.rebalanceBatch = exports.isSessionLocked = exports.LOCK_TTL_MS = void 0;
5
+ var hooks_js_1 = require("./hooks.js");
6
+ Object.defineProperty(exports, "runHookScript", { enumerable: true, get: function () { return hooks_js_1.runHookScript; } });
7
+ Object.defineProperty(exports, "runHooks", { enumerable: true, get: function () { return hooks_js_1.runHooks; } });
8
+ Object.defineProperty(exports, "runConfiguredHooks", { enumerable: true, get: function () { return hooks_js_1.runConfiguredHooks; } });
9
+ Object.defineProperty(exports, "embedUnembeddedEntries", { enumerable: true, get: function () { return hooks_js_1.embedUnembeddedEntries; } });
10
+ var checkpoint_js_1 = require("./checkpoint.js");
11
+ Object.defineProperty(exports, "runCheckpoint", { enumerable: true, get: function () { return checkpoint_js_1.runCheckpoint; } });
12
+ Object.defineProperty(exports, "runSessionStart", { enumerable: true, get: function () { return checkpoint_js_1.runSessionStart; } });
13
+ Object.defineProperty(exports, "runSessionEnd", { enumerable: true, get: function () { return checkpoint_js_1.runSessionEnd; } });
14
+ Object.defineProperty(exports, "loadProjectContext", { enumerable: true, get: function () { return checkpoint_js_1.loadProjectContext; } });
15
+ Object.defineProperty(exports, "getActiveProjectLabel", { enumerable: true, get: function () { return checkpoint_js_1.getActiveProjectLabel; } });
16
+ var delta_js_1 = require("./delta.js");
17
+ Object.defineProperty(exports, "getDeltaBriefing", { enumerable: true, get: function () { return delta_js_1.getDeltaBriefing; } });
18
+ var cadence_js_1 = require("./cadence.js");
19
+ Object.defineProperty(exports, "getCheckpointEveryN", { enumerable: true, get: function () { return cadence_js_1.getCheckpointEveryN; } });
20
+ Object.defineProperty(exports, "getBriefingMaxTokens", { enumerable: true, get: function () { return cadence_js_1.getBriefingMaxTokens; } });
21
+ Object.defineProperty(exports, "shouldAutoCheckpoint", { enumerable: true, get: function () { return cadence_js_1.shouldAutoCheckpoint; } });
22
+ Object.defineProperty(exports, "checkpointCadenceReminder", { enumerable: true, get: function () { return cadence_js_1.checkpointCadenceReminder; } });
23
+ Object.defineProperty(exports, "DEFAULT_CHECKPOINT_EVERY_N", { enumerable: true, get: function () { return cadence_js_1.DEFAULT_CHECKPOINT_EVERY_N; } });
24
+ Object.defineProperty(exports, "DEFAULT_BRIEFING_MAX_TOKENS", { enumerable: true, get: function () { return cadence_js_1.DEFAULT_BRIEFING_MAX_TOKENS; } });
25
+ var cadence_runner_js_1 = require("./cadence-runner.js");
26
+ Object.defineProperty(exports, "afterExchangeLogged", { enumerable: true, get: function () { return cadence_runner_js_1.afterExchangeLogged; } });
27
+ var prompt_submit_js_1 = require("./prompt-submit.js");
28
+ Object.defineProperty(exports, "runPromptSubmit", { enumerable: true, get: function () { return prompt_submit_js_1.runPromptSubmit; } });
29
+ var claude_stop_js_1 = require("./claude-stop.js");
30
+ Object.defineProperty(exports, "runClaudeStop", { enumerable: true, get: function () { return claude_stop_js_1.runClaudeStop; } });
31
+ Object.defineProperty(exports, "readLastExchange", { enumerable: true, get: function () { return claude_stop_js_1.readLastExchange; } });
32
+ Object.defineProperty(exports, "MAX_TRANSCRIPT_BYTES", { enumerable: true, get: function () { return claude_stop_js_1.MAX_TRANSCRIPT_BYTES; } });
33
+ Object.defineProperty(exports, "MAX_EXCHANGE_CHARS", { enumerable: true, get: function () { return claude_stop_js_1.MAX_EXCHANGE_CHARS; } });
34
+ var marker_js_1 = require("./marker.js");
35
+ Object.defineProperty(exports, "readMarker", { enumerable: true, get: function () { return marker_js_1.readMarker; } });
36
+ Object.defineProperty(exports, "writeMarker", { enumerable: true, get: function () { return marker_js_1.writeMarker; } });
37
+ Object.defineProperty(exports, "writeMarkerAtomic", { enumerable: true, get: function () { return marker_js_1.writeMarkerAtomic; } });
38
+ Object.defineProperty(exports, "writeMarkerExclusive", { enumerable: true, get: function () { return marker_js_1.writeMarkerExclusive; } });
39
+ Object.defineProperty(exports, "ExclusiveMarkerConflictError", { enumerable: true, get: function () { return marker_js_1.ExclusiveMarkerConflictError; } });
40
+ Object.defineProperty(exports, "rotateMarkerSession", { enumerable: true, get: function () { return marker_js_1.rotateMarkerSession; } });
41
+ Object.defineProperty(exports, "detectProject", { enumerable: true, get: function () { return marker_js_1.detectProject; } });
42
+ Object.defineProperty(exports, "discoverMarker", { enumerable: true, get: function () { return marker_js_1.discoverMarker; } });
43
+ Object.defineProperty(exports, "findMarker", { enumerable: true, get: function () { return marker_js_1.findMarker; } });
44
+ Object.defineProperty(exports, "findMarkerOptionsFromEnv", { enumerable: true, get: function () { return marker_js_1.findMarkerOptionsFromEnv; } });
45
+ Object.defineProperty(exports, "DEFAULT_MARKER_DISCOVERY_POLICY", { enumerable: true, get: function () { return marker_js_1.DEFAULT_MARKER_DISCOVERY_POLICY; } });
46
+ Object.defineProperty(exports, "CWD_ONLY_MARKER_DISCOVERY_POLICY", { enumerable: true, get: function () { return marker_js_1.CWD_ONLY_MARKER_DISCOVERY_POLICY; } });
47
+ Object.defineProperty(exports, "buildLoadDirective", { enumerable: true, get: function () { return marker_js_1.buildLoadDirective; } });
48
+ Object.defineProperty(exports, "buildSessionDirective", { enumerable: true, get: function () { return marker_js_1.buildSessionDirective; } });
49
+ Object.defineProperty(exports, "reconcileMarker", { enumerable: true, get: function () { return marker_js_1.reconcileMarker; } });
50
+ Object.defineProperty(exports, "syncNearestProjectMarker", { enumerable: true, get: function () { return marker_js_1.syncNearestProjectMarker; } });
51
+ Object.defineProperty(exports, "validateMarkerAgainstStore", { enumerable: true, get: function () { return marker_js_1.validateMarkerAgainstStore; } });
52
+ Object.defineProperty(exports, "validateProjectLabel", { enumerable: true, get: function () { return marker_js_1.validateProjectLabel; } });
53
+ Object.defineProperty(exports, "isUnsafeMarkerDir", { enumerable: true, get: function () { return marker_js_1.isUnsafeMarkerDir; } });
54
+ Object.defineProperty(exports, "INBOX_LABEL", { enumerable: true, get: function () { return marker_js_1.INBOX_LABEL; } });
55
+ Object.defineProperty(exports, "acquireLock", { enumerable: true, get: function () { return marker_js_1.acquireLock; } });
56
+ Object.defineProperty(exports, "releaseLock", { enumerable: true, get: function () { return marker_js_1.releaseLock; } });
57
+ Object.defineProperty(exports, "markerPath", { enumerable: true, get: function () { return marker_js_1.markerPath; } });
58
+ Object.defineProperty(exports, "canonicalProjectPath", { enumerable: true, get: function () { return marker_js_1.canonicalProjectPath; } });
59
+ Object.defineProperty(exports, "CANONICAL_PROJECT_FILENAME", { enumerable: true, get: function () { return marker_js_1.CANONICAL_PROJECT_FILENAME; } });
60
+ Object.defineProperty(exports, "MARKER_FILENAME", { enumerable: true, get: function () { return marker_js_1.MARKER_FILENAME; } });
61
+ Object.defineProperty(exports, "MARKER_VERSION", { enumerable: true, get: function () { return marker_js_1.MARKER_VERSION; } });
62
+ Object.defineProperty(exports, "MARKER_LOCK", { enumerable: true, get: function () { return marker_js_1.MARKER_LOCK; } });
63
+ Object.defineProperty(exports, "LOCK_TTL_MS", { enumerable: true, get: function () { return marker_js_1.LOCK_TTL_MS; } });
64
+ Object.defineProperty(exports, "isSessionLocked", { enumerable: true, get: function () { return marker_js_1.isSessionLocked; } });
65
+ var rebalance_js_1 = require("./rebalance.js");
66
+ Object.defineProperty(exports, "rebalanceBatch", { enumerable: true, get: function () { return rebalance_js_1.rebalanceBatch; } });
67
+ var session_hooks_js_1 = require("./session-hooks.js");
68
+ Object.defineProperty(exports, "onSessionStop", { enumerable: true, get: function () { return session_hooks_js_1.onSessionStop; } });
69
+ Object.defineProperty(exports, "maybeSpawnSummarizer", { enumerable: true, get: function () { return session_hooks_js_1.maybeSpawnSummarizer; } });
70
+ Object.defineProperty(exports, "buildSummarizerCommand", { enumerable: true, get: function () { return session_hooks_js_1.buildSummarizerCommand; } });
71
+ Object.defineProperty(exports, "spawnSummarizer", { enumerable: true, get: function () { return session_hooks_js_1.spawnSummarizer; } });
72
+ Object.defineProperty(exports, "detachedSpawner", { enumerable: true, get: function () { return session_hooks_js_1.detachedSpawner; } });
73
+ Object.defineProperty(exports, "summarizerLogPath", { enumerable: true, get: function () { return session_hooks_js_1.summarizerLogPath; } });
74
+ Object.defineProperty(exports, "DEFAULT_SUMMARIZER_TIMEOUT_SEC", { enumerable: true, get: function () { return session_hooks_js_1.DEFAULT_SUMMARIZER_TIMEOUT_SEC; } });
75
+ var project_creation_js_1 = require("./project-creation.js");
76
+ Object.defineProperty(exports, "MODE_ERROR", { enumerable: true, get: function () { return project_creation_js_1.MODE_ERROR; } });
77
+ Object.defineProperty(exports, "validateMode", { enumerable: true, get: function () { return project_creation_js_1.validateMode; } });
78
+ Object.defineProperty(exports, "canonicalDirectory", { enumerable: true, get: function () { return project_creation_js_1.canonicalDirectory; } });
79
+ Object.defineProperty(exports, "createProjectCoordinated", { enumerable: true, get: function () { return project_creation_js_1.createProjectCoordinated; } });
80
+ Object.defineProperty(exports, "recoverProjectBinding", { enumerable: true, get: function () { return project_creation_js_1.recoverProjectBinding; } });
81
+ Object.defineProperty(exports, "ProjectCreationPartialFailureError", { enumerable: true, get: function () { return project_creation_js_1.ProjectCreationPartialFailureError; } });
82
+ var phantom_recovery_js_1 = require("./phantom-recovery.js");
83
+ Object.defineProperty(exports, "repairPhantomProjectBinding", { enumerable: true, get: function () { return phantom_recovery_js_1.repairPhantomProjectBinding; } });
84
+ Object.defineProperty(exports, "formatUnboundProjectLabel", { enumerable: true, get: function () { return phantom_recovery_js_1.formatUnboundProjectLabel; } });
85
+ Object.defineProperty(exports, "stripUnboundProjectSuffix", { enumerable: true, get: function () { return phantom_recovery_js_1.stripUnboundProjectSuffix; } });
86
+ Object.defineProperty(exports, "isUnboundProjectLabel", { enumerable: true, get: function () { return phantom_recovery_js_1.isUnboundProjectLabel; } });
87
+ Object.defineProperty(exports, "markerWithRepairedProject", { enumerable: true, get: function () { return phantom_recovery_js_1.markerWithRepairedProject; } });
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,uCAQoB;AAPlB,yGAAA,aAAa,OAAA;AACb,oGAAA,QAAQ,OAAA;AACR,8GAAA,kBAAkB,OAAA;AAClB,kHAAA,sBAAsB,OAAA;AAMxB,iDAQyB;AAPvB,8GAAA,aAAa,OAAA;AACb,gHAAA,eAAe,OAAA;AACf,8GAAA,aAAa,OAAA;AACb,mHAAA,kBAAkB,OAAA;AAClB,sHAAA,qBAAqB,OAAA;AAKvB,uCAAyE;AAAhE,4GAAA,gBAAgB,OAAA;AAEzB,2CAOsB;AANpB,iHAAA,mBAAmB,OAAA;AACnB,kHAAA,oBAAoB,OAAA;AACpB,kHAAA,oBAAoB,OAAA;AACpB,uHAAA,yBAAyB,OAAA;AACzB,wHAAA,0BAA0B,OAAA;AAC1B,yHAAA,2BAA2B,OAAA;AAG7B,yDAA8E;AAArE,wHAAA,mBAAmB,OAAA;AAE5B,uDAI4B;AAH1B,mHAAA,eAAe,OAAA;AAKjB,mDAO0B;AANxB,+GAAA,aAAa,OAAA;AACb,kHAAA,gBAAgB,OAAA;AAChB,sHAAA,oBAAoB,OAAA;AACpB,oHAAA,kBAAkB,OAAA;AAKpB,yCAoCqB;AAnCnB,uGAAA,UAAU,OAAA;AACV,wGAAA,WAAW,OAAA;AACX,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AACpB,yHAAA,4BAA4B,OAAA;AAC5B,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA;AACV,qHAAA,wBAAwB,OAAA;AACxB,4HAAA,+BAA+B,OAAA;AAC/B,6HAAA,gCAAgC,OAAA;AAChC,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,qHAAA,wBAAwB,OAAA;AACxB,uHAAA,0BAA0B,OAAA;AAC1B,iHAAA,oBAAoB,OAAA;AACpB,8GAAA,iBAAiB,OAAA;AACjB,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AACX,uGAAA,UAAU,OAAA;AACV,iHAAA,oBAAoB,OAAA;AACpB,uHAAA,0BAA0B,OAAA;AAC1B,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AACX,4GAAA,eAAe,OAAA;AAQjB,+CAIwB;AAHtB,8GAAA,cAAc,OAAA;AAKhB,uDAa4B;AAZ1B,iHAAA,aAAa,OAAA;AACb,wHAAA,oBAAoB,OAAA;AACpB,0HAAA,sBAAsB,OAAA;AACtB,mHAAA,eAAe,OAAA;AACf,mHAAA,eAAe,OAAA;AACf,qHAAA,iBAAiB,OAAA;AACjB,kIAAA,8BAA8B,OAAA;AAQhC,6DAc+B;AAb7B,iHAAA,UAAU,OAAA;AACV,mHAAA,YAAY,OAAA;AACZ,yHAAA,kBAAkB,OAAA;AAClB,+HAAA,wBAAwB,OAAA;AACxB,4HAAA,qBAAqB,OAAA;AACrB,yIAAA,kCAAkC,OAAA;AAUpC,6DAM+B;AAL7B,kIAAA,2BAA2B,OAAA;AAC3B,gIAAA,yBAAyB,OAAA;AACzB,gIAAA,yBAAyB,OAAA;AACzB,4HAAA,qBAAqB,OAAA;AACrB,gIAAA,yBAAyB,OAAA"}