@cortexkit/opencode-magic-context 0.41.0 → 0.41.1

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/dist/config/schema/magic-context.d.ts +15 -0
  2. package/dist/config/schema/magic-context.d.ts.map +1 -1
  3. package/dist/{conflict-warning-hook-xj1r88a7.js → conflict-warning-hook-rf17b6et.js} +3 -3
  4. package/dist/{derive-budgets-3xfyphvk.js → derive-budgets-bb7mrpzs.js} +2 -2
  5. package/dist/features/magic-context/compartment-chunk-embedding.d.ts +12 -16
  6. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  7. package/dist/features/magic-context/context-authority.d.ts.map +1 -1
  8. package/dist/features/magic-context/memory/embedding-failure.d.ts +1 -1
  9. package/dist/features/magic-context/memory/embedding-failure.d.ts.map +1 -1
  10. package/dist/features/magic-context/memory/embedding-local.d.ts +12 -2
  11. package/dist/features/magic-context/memory/embedding-local.d.ts.map +1 -1
  12. package/dist/features/magic-context/memory/embedding-synapse.d.ts +10 -1
  13. package/dist/features/magic-context/memory/embedding-synapse.d.ts.map +1 -1
  14. package/dist/features/magic-context/memory/embedding.d.ts.map +1 -1
  15. package/dist/features/magic-context/memory/project-identity.d.ts +4 -0
  16. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  17. package/dist/features/magic-context/memory/transformers-web-entry.d.ts +2 -0
  18. package/dist/features/magic-context/memory/transformers-web-entry.d.ts.map +1 -0
  19. package/dist/features/magic-context/message-index.d.ts.map +1 -1
  20. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  21. package/dist/features/magic-context/search.d.ts +18 -0
  22. package/dist/features/magic-context/search.d.ts.map +1 -1
  23. package/dist/features/magic-context/storage-ops.d.ts +2 -0
  24. package/dist/features/magic-context/storage-ops.d.ts.map +1 -1
  25. package/dist/features/magic-context/storage.d.ts +1 -1
  26. package/dist/features/magic-context/storage.d.ts.map +1 -1
  27. package/dist/hooks/magic-context/boundary-execution.d.ts +3 -0
  28. package/dist/hooks/magic-context/boundary-execution.d.ts.map +1 -1
  29. package/dist/hooks/magic-context/format-embed-failure.d.ts.map +1 -1
  30. package/dist/hooks/magic-context/hook.d.ts +1 -3
  31. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  32. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +3 -0
  33. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  34. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  35. package/dist/{index-2bykz3bx.js → index-2d4kf2ve.js} +1 -1
  36. package/dist/{index-b4gv9f7g.js → index-4x691bz5.js} +87 -2
  37. package/dist/{index-knna83k0.js → index-9j3tx8hy.js} +1 -1
  38. package/dist/{index-jmwq2wxr.js → index-b9j85d29.js} +1 -1
  39. package/dist/{index-bf799gbq.js → index-d1mxrd3p.js} +0 -1
  40. package/dist/{index-w8rkbhn6.js → index-dh0vfghk.js} +318 -143
  41. package/dist/{index-dmgbar7r.js → index-eq9wr75c.js} +2 -2
  42. package/dist/{index-26ds03jd.js → index-vnz6jvdc.js} +1 -1
  43. package/dist/{index-x9dmzyp5.js → index-z893kjyt.js} +3 -3
  44. package/dist/{index-88za3sz8.js → index-zwjhba2r.js} +3 -3
  45. package/dist/index.js +366 -148
  46. package/dist/{model-resolution-jgrkt0z2.js → model-resolution-6w6wzw18.js} +1 -1
  47. package/dist/plugin/embedding-routing.d.ts.map +1 -1
  48. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  49. package/dist/{recomp-orchestrator-1w4xj6jt.js → recomp-orchestrator-w7xg48e3.js} +6 -6
  50. package/dist/{safe-notification-target-p0c0csxw.js → safe-notification-target-2a8py95v.js} +2 -2
  51. package/dist/{send-session-notification-kn34g7mx.js → send-session-notification-bw7eex6w.js} +3 -3
  52. package/dist/shared/logger.d.ts.map +1 -1
  53. package/dist/shared/model-resolution.d.ts.map +1 -1
  54. package/dist/shared/test-temp-dir.d.ts +40 -0
  55. package/dist/shared/test-temp-dir.d.ts.map +1 -0
  56. package/dist/{storage-meta-session-snbzd26z.js → storage-meta-session-gr4zn7sq.js} +3 -3
  57. package/dist/{task-config-ty08ptc2.js → task-config-gv6s04fp.js} +2 -2
  58. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  59. package/dist/transformers-web.js +24570 -0
  60. package/dist/transformers.node-b1wa0hgx.js +28808 -0
  61. package/package.json +7 -3
  62. package/src/config/index.test.ts +9 -4
  63. package/src/config/schema/magic-context.test.ts +20 -0
  64. package/src/config/schema/magic-context.ts +8 -0
  65. package/src/shared/conflict-detector.test.ts +6 -19
  66. package/src/shared/conflict-fixer.test.ts +5 -8
  67. package/src/shared/logger.test.ts +135 -40
  68. package/src/shared/logger.ts +115 -2
  69. package/src/shared/model-resolution.test.ts +4 -6
  70. package/src/shared/model-resolution.ts +0 -1
  71. package/src/shared/test-temp-dir.test.ts +57 -0
  72. package/src/shared/test-temp-dir.ts +165 -0
  73. /package/dist/{index-rpgg35ms.js → index-8sseka65.js} +0 -0
@@ -228,7 +228,6 @@ export function resolveOpenCodeAgentOverrides(agent: unknown): Record<string, un
228
228
 
229
229
  export function resolveHistorianAgentOverrides(agent: unknown): Record<string, unknown> {
230
230
  return {
231
- temperature: 0.1,
232
231
  maxTokens: 32_000,
233
232
  ...resolveOpenCodeAgentOverrides(agent),
234
233
  };
@@ -0,0 +1,57 @@
1
+ import { afterEach, describe, expect, it } from "bun:test";
2
+ import { existsSync, mkdirSync, utimesSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import {
5
+ cleanupTestTempDir,
6
+ createTestTempDir,
7
+ sweepStaleTestTempDirs,
8
+ withTestTempDir,
9
+ } from "./test-temp-dir";
10
+
11
+ const tempDirs: string[] = [];
12
+
13
+ afterEach(() => {
14
+ for (const directory of tempDirs.splice(0)) cleanupTestTempDir(directory);
15
+ });
16
+
17
+ function createFixtureRoot(): string {
18
+ const { dir } = createTestTempDir("mc-test-temp-dir-helper-");
19
+ tempDirs.push(dir);
20
+ return dir;
21
+ }
22
+
23
+ describe("test temp directories", () => {
24
+ it("removes a root when its fixture callback throws", () => {
25
+ let directory = "";
26
+
27
+ expect(() =>
28
+ withTestTempDir("mc-test-temp-dir-helper-", (tempDir) => {
29
+ directory = tempDir;
30
+ throw new Error("fixture setup failed");
31
+ }),
32
+ ).toThrow("fixture setup failed");
33
+
34
+ expect(existsSync(directory)).toBe(false);
35
+ });
36
+
37
+ it("sweeps only aged directories with recognized prefixes", () => {
38
+ const root = createFixtureRoot();
39
+ const staleRecognized = join(root, "mc-config-secret-stale");
40
+ const freshRecognized = join(root, "mc-config-secret-fresh");
41
+ const staleBystander = join(root, "unrelated-tool-stale");
42
+ const nowMs = Date.now();
43
+
44
+ for (const directory of [staleRecognized, freshRecognized, staleBystander]) {
45
+ mkdirSync(directory);
46
+ }
47
+ utimesSync(staleRecognized, new Date(nowMs - 7_200_000), new Date(nowMs - 7_200_000));
48
+ utimesSync(staleBystander, new Date(nowMs - 7_200_000), new Date(nowMs - 7_200_000));
49
+
50
+ const removed = sweepStaleTestTempDirs({ tempDir: root, nowMs });
51
+
52
+ expect(removed).toEqual([staleRecognized]);
53
+ expect(existsSync(staleRecognized)).toBe(false);
54
+ expect(existsSync(freshRecognized)).toBe(true);
55
+ expect(existsSync(staleBystander)).toBe(true);
56
+ });
57
+ });
@@ -0,0 +1,165 @@
1
+ import { mkdtempSync, readdirSync, rmSync, statSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { basename, dirname, join, resolve } from "node:path";
4
+
5
+ const STALE_TEMP_DIR_AGE_MS = 60 * 60 * 1000;
6
+
7
+ // Keep this list narrow: startup cleanup must never turn into a shared /tmp purge.
8
+ export const TEST_TEMP_DIR_PREFIXES = [
9
+ "mc-plugin-test-xdg-pid-",
10
+ "mc-pi-test-xdg-",
11
+ "mc-conflict-",
12
+ "mc-conflict-fixer-",
13
+ "mc-config-secret-",
14
+ "pi-reasoning-replay-",
15
+ "pi-session-api-test-",
16
+ "pi-symlink-test-",
17
+ "pi-running-vs-stale-",
18
+ "pi-dist-metadata-",
19
+ "pi-traversal-",
20
+ "pi-source-mode-",
21
+ "pi-source-missing-",
22
+ "pi-nonprefixed-",
23
+ "pi-default-cond-",
24
+ "pi-array-exports-",
25
+ "pi-extensionless-",
26
+ "pi-tsx-source-",
27
+ "pi-guidance-",
28
+ "pi-system-v2-",
29
+ "pi-no-guidance-",
30
+ "pi-guidance-dedup-",
31
+ "pi-noreduce-",
32
+ "pi-language-baseline-",
33
+ "pi-language-unset-",
34
+ "pi-language-set-",
35
+ "pi-a1-guidance-",
36
+ "pi-prompt-epoch-",
37
+ "pi-embedding-bootstrap-",
38
+ "pi-embedding-home-",
39
+ "magic-context-pi-latch-test-",
40
+ "magic-context-pi-index-test-",
41
+ "mc-test-temp-dir-helper-",
42
+ ] as const;
43
+
44
+ export type TestTempDirPrefix = (typeof TEST_TEMP_DIR_PREFIXES)[number];
45
+
46
+ type AfterAll = (callback: () => void) => void;
47
+ type SweepOptions = {
48
+ tempDir?: string;
49
+ nowMs?: number;
50
+ staleAgeMs?: number;
51
+ };
52
+
53
+ const registeredTempDirs = new Set<string>();
54
+ let lifecycleCleanupInstalled = false;
55
+
56
+ function hasRecognizedPrefix(name: string): boolean {
57
+ return TEST_TEMP_DIR_PREFIXES.some((prefix) => name.startsWith(prefix));
58
+ }
59
+
60
+ function isRegisteredTempDir(directory: string): boolean {
61
+ const resolvedDirectory = resolve(directory);
62
+ return (
63
+ registeredTempDirs.has(resolvedDirectory) &&
64
+ dirname(resolvedDirectory) === resolve(tmpdir()) &&
65
+ hasRecognizedPrefix(basename(resolvedDirectory))
66
+ );
67
+ }
68
+
69
+ /**
70
+ * Creates a test-owned root under the system temp directory. The returned cleanup
71
+ * only removes roots made by this module, so an accidental path cannot delete an
72
+ * unrelated temp directory.
73
+ */
74
+ export function createTestTempDir(
75
+ prefix: TestTempDirPrefix,
76
+ nameSuffix = "",
77
+ ): { dir: string; cleanup: () => void } {
78
+ const dir = resolve(mkdtempSync(join(tmpdir(), `${prefix}${nameSuffix}`)));
79
+ registeredTempDirs.add(dir);
80
+ return { dir, cleanup: () => cleanupTestTempDir(dir) };
81
+ }
82
+
83
+ /** Removes one registered test root and forgets it even when best-effort removal fails. */
84
+ export function cleanupTestTempDir(directory: string): void {
85
+ const resolvedDirectory = resolve(directory);
86
+ if (!isRegisteredTempDir(resolvedDirectory)) return;
87
+
88
+ registeredTempDirs.delete(resolvedDirectory);
89
+ try {
90
+ rmSync(resolvedDirectory, {
91
+ recursive: true,
92
+ force: true,
93
+ maxRetries: 10,
94
+ retryDelay: 100,
95
+ });
96
+ } catch {
97
+ // A process can still hold a file open on Windows. The next startup sweep retries it.
98
+ }
99
+ }
100
+
101
+ /** Removes every root registered by this process. Safe to call more than once. */
102
+ export function cleanupRegisteredTestTempDirs(): void {
103
+ for (const directory of [...registeredTempDirs]) cleanupTestTempDir(directory);
104
+ }
105
+
106
+ /**
107
+ * Runs a callback with a fresh root and removes that root even when the callback throws.
108
+ * This keeps small fixture builders from forgetting a failure-path cleanup.
109
+ */
110
+ export function withTestTempDir<T>(
111
+ prefix: TestTempDirPrefix,
112
+ callback: (directory: string) => T,
113
+ ): T {
114
+ const { dir, cleanup } = createTestTempDir(prefix);
115
+ try {
116
+ return callback(dir);
117
+ } finally {
118
+ cleanup();
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Installs both Bun's normal suite cleanup and an exit fallback for aborted runs.
124
+ * The callback is passed in so this utility remains usable from the test preload
125
+ * without making production code import bun:test.
126
+ */
127
+ export function installTestTempDirCleanup(afterAll: AfterAll): void {
128
+ if (lifecycleCleanupInstalled) return;
129
+ lifecycleCleanupInstalled = true;
130
+ afterAll(cleanupRegisteredTestTempDirs);
131
+ process.once("exit", cleanupRegisteredTestTempDirs);
132
+ }
133
+
134
+ /**
135
+ * Removes only old, recognized test roots from one temp directory. The scan does
136
+ * one directory read, ignores non-directories, and leaves fresh roots and every
137
+ * unrecognized name alone so concurrently running tools stay isolated.
138
+ */
139
+ export function sweepStaleTestTempDirs({
140
+ tempDir = tmpdir(),
141
+ nowMs = Date.now(),
142
+ staleAgeMs = STALE_TEMP_DIR_AGE_MS,
143
+ }: SweepOptions = {}): string[] {
144
+ let entries: Array<{ isDirectory(): boolean; name: string }>;
145
+ try {
146
+ entries = readdirSync(tempDir, { withFileTypes: true });
147
+ } catch {
148
+ return [];
149
+ }
150
+
151
+ const removed: string[] = [];
152
+ for (const entry of entries) {
153
+ if (!entry.isDirectory() || !hasRecognizedPrefix(entry.name)) continue;
154
+
155
+ const directory = join(tempDir, entry.name);
156
+ try {
157
+ if (nowMs - statSync(directory).mtimeMs <= staleAgeMs) continue;
158
+ rmSync(directory, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 });
159
+ removed.push(directory);
160
+ } catch {
161
+ // Temp cleanup is best-effort; a later test run retries busy directories.
162
+ }
163
+ }
164
+ return removed;
165
+ }
File without changes