@cortexkit/opencode-magic-context 0.49.28 → 0.49.30
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.
- package/dist/auto-search-worker.js +3 -3
- package/dist/chunk-embedding-write-worker.js +1 -1
- package/dist/config/commit-retention-recovery.d.ts +9 -0
- package/dist/config/commit-retention-recovery.d.ts.map +1 -0
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/live-child-output-cap.d.ts.map +1 -1
- package/dist/config/live-run-config.d.ts.map +1 -1
- package/dist/config/project-security.d.ts +1 -0
- package/dist/config/project-security.d.ts.map +1 -1
- package/dist/{conflict-warning-hook-tgnw019g.js → conflict-warning-hook-xgskea1v.js} +3 -3
- package/dist/{context-dxfztzsd.js → context-vnfr6d7t.js} +210 -50
- package/dist/{embedding-backfill-cwnyr4fj.js → embedding-backfill-mms9nb0h.js} +2 -2
- package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify-diff.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
- package/dist/features/magic-context/git-commits/indexer.d.ts +2 -0
- package/dist/features/magic-context/git-commits/indexer.d.ts.map +1 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts +3 -1
- package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
- package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
- package/dist/features/magic-context/work-metrics.d.ts +5 -3
- package/dist/features/magic-context/work-metrics.d.ts.map +1 -1
- package/dist/hooks/magic-context/apply-operations.d.ts +2 -0
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +5 -1
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
- package/dist/hooks/magic-context/history-boundary-repair.d.ts +1 -1
- package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts +3 -1
- package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-slot.d.ts +7 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-db.d.ts +3 -2
- package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
- package/dist/hooks/magic-context/replay-committed-drops.d.ts.map +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts +1 -1
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform.d.ts.map +1 -1
- package/dist/{index-yzjhx10y.js → index-0fe4q77z.js} +12 -6
- package/dist/{index-89k1w6x2.js → index-3jmx3fae.js} +2 -2
- package/dist/{index-7gbcg8xv.js → index-4s4zq97n.js} +1 -1
- package/dist/{index-31y1mznz.js → index-69gd2scx.js} +4 -4
- package/dist/{index-n8qmmd7f.js → index-adr4vfys.js} +3 -3
- package/dist/{index-k9jx7ma9.js → index-ekzzw66a.js} +328 -249
- package/dist/{index-tvzvjggy.js → index-gkee6p4g.js} +1 -1
- package/dist/{index-a2fz9hpa.js → index-gxkhzmjq.js} +4 -2
- package/dist/{index-4cpc59jv.js → index-hbt0sbv2.js} +1 -1
- package/dist/{index-dcqk0y27.js → index-k0dpkyn7.js} +139 -28
- package/dist/{index-t3rbb8wr.js → index-pe6b4bhs.js} +1 -1
- package/dist/{index-4ypqzvhf.js → index-vnn5405n.js} +1 -1
- package/dist/{index-dzfevacx.js → index-vtz789ex.js} +10 -6
- package/dist/{index-fq2p158w.js → index-vzz570j8.js} +13 -7
- package/dist/{index-077ht5cq.js → index-waktfbjy.js} +1 -1
- package/dist/{index-v0dhhxsq.js → index-y1qwzvxn.js} +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -30
- package/dist/{message-index-bounded-7ayzb2ah.js → message-index-bounded-zq7a5nm6.js} +3 -3
- package/dist/migration-worker.js +1 -1
- package/dist/plugin/dream-timer.d.ts.map +1 -1
- package/dist/plugin/embedding-bootstrap-helpers.d.ts +5 -1
- package/dist/plugin/embedding-bootstrap-helpers.d.ts.map +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
- package/dist/plugin/rpc-handlers.d.ts.map +1 -1
- package/dist/{project-embedding-registry-94nncs5g.js → project-embedding-registry-cg281d9j.js} +1 -1
- package/dist/raw-ordinal-warmup-worker.js +2 -2
- package/dist/{read-session-chunk-jzb6w9w5.js → read-session-chunk-1ndphmb8.js} +2 -2
- package/dist/{recomp-orchestrator-02sa2ngr.js → recomp-orchestrator-w3pjp33d.js} +10 -10
- package/dist/{search-archive-q1vw7zg4.js → search-archive-sr07c6aj.js} +3 -3
- package/dist/{search-spq6nfyf.js → search-fbaz1m8r.js} +7 -7
- package/dist/{send-session-notification-afzzqy5b.js → send-session-notification-vz86nt79.js} +2 -2
- package/dist/shared/marker-only-text.d.ts +2 -0
- package/dist/shared/marker-only-text.d.ts.map +1 -0
- package/dist/{transform-postprocess-phase-6menyyxc.js → transform-postprocess-phase-6ccazq85.js} +10 -10
- package/dist/v2/auto-search-worker.js +3 -3
- package/dist/v2/chunk-embedding-write-worker.js +1 -1
- package/dist/v2/{context-0qhz1nnj.js → context-wx4sfhgr.js} +345 -102
- package/dist/v2/{embedding-backfill-rh5dgsva.js → embedding-backfill-35k6czrr.js} +2 -2
- package/dist/v2/hidden-child-cleanup.d.ts.map +1 -1
- package/dist/v2/hidden-child-native.d.ts.map +1 -1
- package/dist/v2/hidden-completion.d.ts.map +1 -1
- package/dist/v2/hooks/context.d.ts.map +1 -1
- package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
- package/dist/v2/hooks/store.d.ts.map +1 -1
- package/dist/v2/{message-index-bounded-n09b74vr.js → message-index-bounded-jvgz7vk9.js} +3 -3
- package/dist/v2/message-times.d.ts +17 -0
- package/dist/v2/message-times.d.ts.map +1 -0
- package/dist/v2/migration-worker.js +1 -1
- package/dist/v2/{project-embedding-registry-6pak822h.js → project-embedding-registry-p1p10ks7.js} +1 -1
- package/dist/v2/raw-ordinal-warmup-worker.js +2 -2
- package/dist/v2/{read-session-chunk-vpt69tw9.js → read-session-chunk-djzgm4jg.js} +2 -2
- package/dist/v2/{recomp-orchestrator-txsmbnvw.js → recomp-orchestrator-wb28kr9k.js} +10 -10
- package/dist/v2/{search-archive-t9bcz4ht.js → search-archive-n3dhns4r.js} +3 -3
- package/dist/v2/{search-dcy9b6gd.js → search-q3jjw6zp.js} +7 -7
- package/dist/v2/{send-session-notification-vdsgnf4c.js → send-session-notification-x5nzy34v.js} +2 -2
- package/dist/v2/{server-txbc3czn.js → server-42nebt63.js} +10 -6
- package/dist/v2/{server-94wk1ey3.js → server-835q39kd.js} +45 -5
- package/dist/v2/{server-3vhxy2k5.js → server-a7x00tw8.js} +5 -5
- package/dist/v2/{server-e3hc93wk.js → server-d01pe8q5.js} +1 -1
- package/dist/v2/{server-z2n2xaeh.js → server-hwag0khr.js} +1 -1
- package/dist/v2/{server-jj9qye8y.js → server-k33t88h3.js} +97 -25
- package/dist/v2/{server-6avtp9jp.js → server-p0snacz3.js} +1 -1
- package/dist/v2/{server-z3mk9jdc.js → server-ph300d6m.js} +1 -1
- package/dist/v2/{server-6v3cdzsx.js → server-qc915kw2.js} +1 -1
- package/dist/v2/{server-xkvxss5g.js → server-rb8m4vry.js} +12 -6
- package/dist/v2/{server-zmcrvpm3.js → server-rr4cbkr0.js} +2 -2
- package/dist/v2/{server-yqek3s4k.js → server-zh3esb0z.js} +4 -2
- package/dist/v2/server.js +3 -3
- package/dist/v2/store-reader.d.ts +14 -2
- package/dist/v2/store-reader.d.ts.map +1 -1
- package/dist/v2/{wrapup-orchestrator-gjkszser.js → wrapup-orchestrator-2t0pdqzm.js} +10 -10
- package/dist/{wrapup-orchestrator-n5h5sr1x.js → wrapup-orchestrator-kjmkms5g.js} +11 -11
- package/package.json +1 -1
- package/src/config/commit-retention-recovery.ts +34 -0
- package/src/config/index.ts +22 -2
- package/src/config/live-child-output-cap.test.ts +28 -0
- package/src/config/live-child-output-cap.ts +2 -0
- package/src/config/live-run-config.test.ts +44 -1
- package/src/config/live-run-config.ts +8 -1
- package/src/config/project-config-trust-boundary.test.ts +57 -0
- package/src/config/project-security.ts +6 -2
- package/src/shared/marker-only-text.ts +8 -0
- package/src/shared/windows-hidden-spawns.test.ts +133 -23
|
@@ -24,11 +24,11 @@ var [
|
|
|
24
24
|
{ Database, registerSqliteDiagnosticSink },
|
|
25
25
|
{ log }
|
|
26
26
|
] = await Promise.all([
|
|
27
|
-
import("./embedding-backfill-
|
|
27
|
+
import("./embedding-backfill-mms9nb0h.js"),
|
|
28
28
|
import("./embedding-cache-mgyr73ef.js"),
|
|
29
29
|
import("./storage-memory-e6a7mb0k.js"),
|
|
30
|
-
import("./project-embedding-registry-
|
|
31
|
-
import("./search-
|
|
30
|
+
import("./project-embedding-registry-cg281d9j.js"),
|
|
31
|
+
import("./search-fbaz1m8r.js"),
|
|
32
32
|
import("./compartment-chunk-embedding-qgp0tbf7.js"),
|
|
33
33
|
import("./embedding-activity-g1dhes6g.js"),
|
|
34
34
|
import("./harness-e4avh192.js"),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MagicContextConfig } from "./schema/magic-context";
|
|
2
|
+
type CommitIndexing = MagicContextConfig["memory"]["git_commit_indexing"];
|
|
3
|
+
/** Keep a defaulted cap useful for bounded reads without letting it delete stored history. */
|
|
4
|
+
export declare function applyCommitRetentionRecovery(config: MagicContextConfig, recoveredFieldPaths: readonly string[], warnings: string[]): void;
|
|
5
|
+
export declare function isCommitRetentionPaused(settings: CommitIndexing): boolean;
|
|
6
|
+
/** Live sampling copies settings objects; recovery state must follow the sampled cap. */
|
|
7
|
+
export declare function copyCommitRetentionRecovery(from: CommitIndexing, to: CommitIndexing): void;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=commit-retention-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-retention-recovery.d.ts","sourceRoot":"","sources":["../../src/config/commit-retention-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,KAAK,cAAc,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAI1E,8FAA8F;AAC9F,wBAAgB,4BAA4B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,QAAQ,EAAE,MAAM,EAAE,GACnB,IAAI,CAYN;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEzE;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI,CAG1F"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export interface LoadResultDetailed {
|
|
|
34
34
|
message: string;
|
|
35
35
|
}>;
|
|
36
36
|
recoveredTopLevelKeys: string[];
|
|
37
|
+
recoveredFieldPaths: string[];
|
|
37
38
|
configParseFailures: ConfigParseFailure[];
|
|
38
39
|
warningDetails: ConfigWarningDetail[];
|
|
39
40
|
cacheTtlConfigured: boolean;
|
|
@@ -62,7 +63,7 @@ export declare function formatProtectedTokensBelowMinWarning(value: number): str
|
|
|
62
63
|
export declare function misplacedAgentModelWarnings(rawConfig: Record<string, unknown>): string[];
|
|
63
64
|
export declare function resetProtectedTagsDeprecationWarningForTest(): void;
|
|
64
65
|
export declare function warnProtectedTagsDeprecationOnce(): void;
|
|
65
|
-
export declare function parsePluginConfig(rawConfig: Record<string, unknown>, recoveredTopLevelKeys?: string[]): MagicContextPluginConfig & {
|
|
66
|
+
export declare function parsePluginConfig(rawConfig: Record<string, unknown>, recoveredTopLevelKeys?: string[], recoveredFieldPaths?: string[]): MagicContextPluginConfig & {
|
|
66
67
|
configWarnings?: string[];
|
|
67
68
|
};
|
|
68
69
|
export declare function loadPluginConfig(directory: string): MagicContextPluginConfig & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAC3B,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAC3B,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAyBpE,OAAO,EACH,KAAK,kBAAkB,EAG1B,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAChE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CACZ,MAAM,EACN;QACI,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACrB,CACJ,CAAC;CACL;AAwCD,MAAM,MAAM,WAAW,GACjB,IAAI,GACJ,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,iBAAiB,GACjB,sBAAsB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,wBAAwB,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACjE,6EAA6E;IAC7E,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE;QACL,UAAU,EAAE,WAAW,CAAC;QACxB,aAAa,EAAE,WAAW,CAAC;KAC9B,CAAC;IACF,oBAAoB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9F,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AA2ND;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAsBxF;AAED,wBAAgB,2CAA2C,IAAI,IAAI,CAElE;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAOvD;AAED,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,qBAAqB,GAAE,MAAM,EAAO,EACpC,mBAAmB,GAAE,MAAM,EAAO,GACnC,wBAAwB,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAsN1D;AAyBD,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,GAClB,wBAAwB,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAY1D;AAwDD,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,MAAM,EACjB,mBAAmB,UAAO,GAC3B,kBAAkB,CAwOpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-child-output-cap.d.ts","sourceRoot":"","sources":["../../src/config/live-child-output-cap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAGhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,QAEpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,QAEzD;AAED,oGAAoG;AACpG,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EACjE,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,CAAC,GACf,wBAAwB,
|
|
1
|
+
{"version":3,"file":"live-child-output-cap.d.ts","sourceRoot":"","sources":["../../src/config/live-child-output-cap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAGhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,QAEpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,QAEzD;AAED,oGAAoG;AACpG,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EACjE,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,CAAC,GACf,wBAAwB,CAc1B;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,kBAAkB,EACtE,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,CAAC;iBAKC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,UACnC;QAAE,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;sBAwBjC,MAAM;EAK/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-run-config.d.ts","sourceRoot":"","sources":["../../src/config/live-run-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"live-run-config.d.ts","sourceRoot":"","sources":["../../src/config/live-run-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAmCnF;AAsBD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAWhG;AAED,eAAO,MAAM,kBAAkB,yBAAmB,CAAC;AACnD,eAAO,MAAM,gBAAgB,yBAAmB,CAAC;AAIjD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,8CA4BnF;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,0DAE1D"}
|
|
@@ -110,6 +110,7 @@ export declare function restoreTrustedValuesOverInvalidProjectValues(args: {
|
|
|
110
110
|
}): {
|
|
111
111
|
warnings: string[];
|
|
112
112
|
restoredTopLevelKeys: string[];
|
|
113
|
+
restoredFieldPaths: string[];
|
|
113
114
|
};
|
|
114
115
|
/**
|
|
115
116
|
* Rebuild the merged `command` block so a repository may only ADD commands.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-security.d.ts","sourceRoot":"","sources":["../../src/config/project-security.ts"],"names":[],"mappings":"AA0FA,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU/E;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,SAAS,MAAM,EAC/D,MAAM,EAAE,CAAC,EACT,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACjD,CAAC,CAmBH;AAED,wBAAgB,+BAA+B,CAC3C,MAAM,EAAE,MAAM,GACf,4BAA4B,GAAG,SAAS,CAE1C;AAsKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA0P5F;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACrD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,EAAE;QACf,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;CACL,GAAG,MAAM,EAAE,CA6KX;AA2BD,wBAAgB,mCAAmC,CAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,EAAE,CAsCV;AAED,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,SAAS,WAAW,EAAE,CAAC;AA2ErD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4CAA4C,CAAC,IAAI,EAAE;IAC/D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,eAAe,EAAE,CAAC;CACnF,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"project-security.d.ts","sourceRoot":"","sources":["../../src/config/project-security.ts"],"names":[],"mappings":"AA0FA,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU/E;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,SAAS,MAAM,EAC/D,MAAM,EAAE,CAAC,EACT,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACjD,CAAC,CAmBH;AAED,wBAAgB,+BAA+B,CAC3C,MAAM,EAAE,MAAM,GACf,4BAA4B,GAAG,SAAS,CAE1C;AAsKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA0P5F;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACrD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,EAAE;QACf,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;CACL,GAAG,MAAM,EAAE,CA6KX;AA2BD,wBAAgB,mCAAmC,CAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,EAAE,CAsCV;AAED,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,SAAS,WAAW,EAAE,CAAC;AA2ErD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4CAA4C,CAAC,IAAI,EAAE;IAC/D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,eAAe,EAAE,CAAC;CACnF,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCvF;AAqBD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,GAAG,MAAM,EAAE,CA8CX"}
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
cleanupConflictWarnings2,
|
|
5
5
|
sendSchemaFenceWarning2,
|
|
6
6
|
sendStartupAnnouncement2
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-gkee6p4g.js";
|
|
8
8
|
import"./index-4pnsgvfk.js";
|
|
9
9
|
import"./index-sd3egckz.js";
|
|
10
|
-
import"./index-
|
|
10
|
+
import"./index-waktfbjy.js";
|
|
11
11
|
import"./index-qt1qqasc.js";
|
|
12
|
-
import"./index-
|
|
12
|
+
import"./index-y1qwzvxn.js";
|
|
13
13
|
import"./index-rrv26qjz.js";
|
|
14
14
|
import"./index-58e3y90n.js";
|
|
15
15
|
import"./index-rverk2vz.js";
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
releaseCompartmentLeaseBestEffort,
|
|
13
13
|
isCompartmentLeaseHeld,
|
|
14
14
|
queueM0Mutation,
|
|
15
|
-
getCompartments,
|
|
16
15
|
getUncoveredCompartmentEndsThrough,
|
|
17
16
|
providerResponseFailed,
|
|
18
17
|
isSuccessfulProviderCompletion,
|
|
@@ -65,7 +64,7 @@ import {
|
|
|
65
64
|
rebaseSessionCoordinatesAsync,
|
|
66
65
|
resolveOpenCodeProtectedTailBoundary,
|
|
67
66
|
getActiveCompartmentRun
|
|
68
|
-
} from "./index-
|
|
67
|
+
} from "./index-k0dpkyn7.js";
|
|
69
68
|
import"./index-sd3egckz.js";
|
|
70
69
|
import {
|
|
71
70
|
getHarness2
|
|
@@ -157,7 +156,7 @@ import {
|
|
|
157
156
|
applyJsonSchemaParameterDescriptions,
|
|
158
157
|
MagicContextRpcServer,
|
|
159
158
|
subagentTemperature
|
|
160
|
-
} from "./index-
|
|
159
|
+
} from "./index-ekzzw66a.js";
|
|
161
160
|
import {
|
|
162
161
|
resolveHistorianModel2
|
|
163
162
|
} from "./index-5kym00ag.js";
|
|
@@ -172,7 +171,7 @@ import {
|
|
|
172
171
|
openDatabaseAsync,
|
|
173
172
|
isDatabasePersisted,
|
|
174
173
|
getDatabasePersistenceError
|
|
175
|
-
} from "./index-
|
|
174
|
+
} from "./index-hbt0sbv2.js";
|
|
176
175
|
import {
|
|
177
176
|
setHomeProjectPermission,
|
|
178
177
|
resolveProjectIdentityForSession,
|
|
@@ -202,9 +201,11 @@ import {
|
|
|
202
201
|
preloadTokenizer,
|
|
203
202
|
estimateTokens
|
|
204
203
|
} from "./index-b88dwwrh.js";
|
|
205
|
-
import
|
|
204
|
+
import {
|
|
205
|
+
getTableColumnNames
|
|
206
|
+
} from "./index-xrnsygfq.js";
|
|
206
207
|
import"./index-58e3y90n.js";
|
|
207
|
-
import"./index-
|
|
208
|
+
import"./index-y1qwzvxn.js";
|
|
208
209
|
import {
|
|
209
210
|
needsBlockedRead,
|
|
210
211
|
markHostUnservedRow,
|
|
@@ -240,19 +241,19 @@ import {
|
|
|
240
241
|
cleanUserText2,
|
|
241
242
|
readRawSessionMessageIdOrdinalsForRange2,
|
|
242
243
|
readRawSessionMessageOrdinalById2
|
|
243
|
-
} from "./index-
|
|
244
|
+
} from "./index-0fe4q77z.js";
|
|
244
245
|
import {
|
|
245
246
|
BoundedSessionMap,
|
|
246
247
|
recordToolDefinitionSet,
|
|
247
248
|
getCurrentToolSetHash
|
|
248
249
|
} from "./index-s1n8dd2n.js";
|
|
249
|
-
import"./index-
|
|
250
|
+
import"./index-4s4zq97n.js";
|
|
250
251
|
import"./index-v15ne3a3.js";
|
|
251
252
|
import {
|
|
252
253
|
invalidateAutoEmbedSession,
|
|
253
254
|
clearEmbedSessionState,
|
|
254
255
|
retainProjectEmbedding2
|
|
255
|
-
} from "./index-
|
|
256
|
+
} from "./index-gxkhzmjq.js";
|
|
256
257
|
import"./index-wfybj1dw.js";
|
|
257
258
|
import {
|
|
258
259
|
deleteChunkEmbedBackoffForSession2
|
|
@@ -264,7 +265,7 @@ import"./index-fb3zxn06.js";
|
|
|
264
265
|
import {
|
|
265
266
|
renderUserFacingFailure,
|
|
266
267
|
userFacingFailureCode
|
|
267
|
-
} from "./index-
|
|
268
|
+
} from "./index-pe6b4bhs.js";
|
|
268
269
|
import {
|
|
269
270
|
createTagger,
|
|
270
271
|
cavemanWordRulesForLanguage,
|
|
@@ -273,29 +274,29 @@ import {
|
|
|
273
274
|
EmergencyFailClosedError,
|
|
274
275
|
DegradedPassRefusalError,
|
|
275
276
|
isSyntheticHeadMessage2
|
|
276
|
-
} from "./index-
|
|
277
|
+
} from "./index-vzz570j8.js";
|
|
277
278
|
import"./index-qgh1qwjj.js";
|
|
278
279
|
import"./index-qt1qqasc.js";
|
|
279
280
|
import"./index-kfyb3k6n.js";
|
|
280
281
|
import"./index-4dhv7mqz.js";
|
|
281
282
|
import"./index-51rdvtkz.js";
|
|
282
|
-
import"./index-
|
|
283
|
+
import"./index-vnn5405n.js";
|
|
283
284
|
import"./index-jjvbk92s.js";
|
|
284
285
|
import {
|
|
285
286
|
pushNotification2,
|
|
286
287
|
isTuiConnected2
|
|
287
288
|
} from "./index-x8a7jmkh.js";
|
|
288
289
|
import"./index-rrv26qjz.js";
|
|
289
|
-
import"./index-
|
|
290
|
-
import"./index-
|
|
291
|
-
import"./index-
|
|
290
|
+
import"./index-waktfbjy.js";
|
|
291
|
+
import"./index-vtz789ex.js";
|
|
292
|
+
import"./index-adr4vfys.js";
|
|
292
293
|
import"./index-gp3kcpc4.js";
|
|
293
294
|
import {
|
|
294
295
|
detectConflicts
|
|
295
296
|
} from "./index-4pnsgvfk.js";
|
|
296
297
|
import"./index-fmsr7v69.js";
|
|
297
298
|
import"./index-kaqs6h31.js";
|
|
298
|
-
import"./index-
|
|
299
|
+
import"./index-3jmx3fae.js";
|
|
299
300
|
import {
|
|
300
301
|
isDreamerRunnable,
|
|
301
302
|
isSmartNoteSurfaceAvailable,
|
|
@@ -313,6 +314,26 @@ import"./index-t5pck3ss.js";
|
|
|
313
314
|
import { setTimeout as delay } from "node:timers/promises";
|
|
314
315
|
|
|
315
316
|
// src/hooks/magic-context/history-boundary-repair.ts
|
|
317
|
+
function readStoreBoundaries(db, sessionId) {
|
|
318
|
+
const columns = getTableColumnNames(db, "compartments");
|
|
319
|
+
const numbers = ["id", "sequence", "start_message", "end_message", "created_at"];
|
|
320
|
+
const strings = ["session_id", "start_message_id", "end_message_id", "title", "content"];
|
|
321
|
+
const predicates = [...numbers, ...strings].every((column) => columns.has(column)) ? [
|
|
322
|
+
...numbers.map((column) => `typeof(${column}) IN ('integer', 'real')`),
|
|
323
|
+
...strings.map((column) => `typeof(${column}) = 'text'`)
|
|
324
|
+
] : ["0"];
|
|
325
|
+
for (const column of ["p1", "p2", "p3", "p4", "episode_type"]) {
|
|
326
|
+
if (columns.has(column))
|
|
327
|
+
predicates.push(`typeof(${column}) IN ('text', 'null')`);
|
|
328
|
+
}
|
|
329
|
+
for (const column of ["importance", "legacy"]) {
|
|
330
|
+
if (columns.has(column))
|
|
331
|
+
predicates.push(`typeof(${column}) IN ('integer', 'real', 'null')`);
|
|
332
|
+
}
|
|
333
|
+
return db.prepare(`SELECT sequence, ${columns.has("end_message_id") ? "end_message_id" : "NULL"} AS endMessageId
|
|
334
|
+
FROM compartments WHERE session_id = ? AND ${predicates.join(" AND ")}
|
|
335
|
+
ORDER BY sequence ASC`).all(sessionId);
|
|
336
|
+
}
|
|
316
337
|
function readBaseline(db, sessionId) {
|
|
317
338
|
const row = db.prepare("SELECT cached_m0_bytes IS NOT NULL AS hasM0, cached_m0_last_baseline_end_message_id AS boundary FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
318
339
|
return {
|
|
@@ -379,7 +400,7 @@ function dropCompartmentsAfter(db, sessionId, anchor, holderId, activeBranch = f
|
|
|
379
400
|
}
|
|
380
401
|
function repairMissingHistoryBoundary(args) {
|
|
381
402
|
const { db, sessionId, isInHostStore, scope = "store" } = args;
|
|
382
|
-
const compartments = scope === "active-branch" ? db.prepare("SELECT sequence, COALESCE(end_message_id, '') AS endMessageId FROM compartments WHERE session_id = ? ORDER BY sequence").all(sessionId) :
|
|
403
|
+
const compartments = scope === "active-branch" ? db.prepare("SELECT sequence, COALESCE(end_message_id, '') AS endMessageId FROM compartments WHERE session_id = ? ORDER BY sequence").all(sessionId) : readStoreBoundaries(db, sessionId);
|
|
383
404
|
let latestIndex = compartments.length - 1;
|
|
384
405
|
while (latestIndex >= 0 && !compartments[latestIndex]?.endMessageId)
|
|
385
406
|
latestIndex -= 1;
|
|
@@ -423,7 +444,7 @@ function repairMissingHistoryBoundary(args) {
|
|
|
423
444
|
let dropped;
|
|
424
445
|
let anchorForDrop = anchor;
|
|
425
446
|
try {
|
|
426
|
-
if (
|
|
447
|
+
if (anchor) {
|
|
427
448
|
const row = db.prepare("SELECT end_message AS endMessage FROM compartments WHERE session_id = ? AND sequence = ?").get(sessionId, anchor.sequence);
|
|
428
449
|
if (!row)
|
|
429
450
|
return { kind: "unresolved", reason: "busy", missingEndMessageId: missing };
|
|
@@ -2451,6 +2472,7 @@ function createNativeHiddenChildren(host, removeSession, options) {
|
|
|
2451
2472
|
const inFlight = removing.get(child.id);
|
|
2452
2473
|
if (inFlight)
|
|
2453
2474
|
return inFlight;
|
|
2475
|
+
options.log(`[magic-context] hidden child ${child.id} removing`);
|
|
2454
2476
|
const done = (async () => {
|
|
2455
2477
|
try {
|
|
2456
2478
|
let timer;
|
|
@@ -2465,6 +2487,7 @@ function createNativeHiddenChildren(host, removeSession, options) {
|
|
|
2465
2487
|
if (timer)
|
|
2466
2488
|
clearTimeout(timer);
|
|
2467
2489
|
}
|
|
2490
|
+
options.log(`[magic-context] hidden child ${child.id} removed`);
|
|
2468
2491
|
} catch (error) {
|
|
2469
2492
|
if (isSessionNotFound(error))
|
|
2470
2493
|
return;
|
|
@@ -2476,14 +2499,19 @@ function createNativeHiddenChildren(host, removeSession, options) {
|
|
|
2476
2499
|
removing.set(child.id, done);
|
|
2477
2500
|
return done;
|
|
2478
2501
|
};
|
|
2479
|
-
const
|
|
2502
|
+
const noteCreated = (sessionID, role, parentID) => {
|
|
2503
|
+
options.log(`[magic-context] hidden child ${sessionID} created role=${role} parent=${parentID} keep_subagents=${options.keepSubagents}`);
|
|
2504
|
+
};
|
|
2505
|
+
const confirmPlacement = async (sessionID, parentID, role) => {
|
|
2480
2506
|
let stored;
|
|
2481
2507
|
try {
|
|
2482
2508
|
stored = await host.get({ sessionID });
|
|
2483
2509
|
} catch (error) {
|
|
2510
|
+
noteCreated(sessionID, role, "unknown");
|
|
2484
2511
|
options.log(`[magic-context] could not read back hidden child ${sessionID} to confirm its parent: ${errorText(error)}`);
|
|
2485
2512
|
return;
|
|
2486
2513
|
}
|
|
2514
|
+
noteCreated(sessionID, role, stored.parentID ?? "none");
|
|
2487
2515
|
const directory = stored.location?.directory;
|
|
2488
2516
|
if (options.directory !== undefined && directory !== undefined && !sameProjectDirectory(directory, options.directory)) {
|
|
2489
2517
|
throw new HiddenCompletionRefusal("hidden_prompt_unrecognized", `hidden child ${sessionID} is bound to ${directory}, not to this instance's ${options.directory}. Reopen the parent session in ${directory}, then run /ctx-recomp so its owning instance can rebuild history.`, true);
|
|
@@ -2512,11 +2540,13 @@ function createNativeHiddenChildren(host, removeSession, options) {
|
|
|
2512
2540
|
};
|
|
2513
2541
|
if (parentID) {
|
|
2514
2542
|
try {
|
|
2515
|
-
await confirmPlacement(created.id, parentID);
|
|
2543
|
+
await confirmPlacement(created.id, parentID, role);
|
|
2516
2544
|
} catch (error) {
|
|
2517
2545
|
await remove(child);
|
|
2518
2546
|
throw error;
|
|
2519
2547
|
}
|
|
2548
|
+
} else {
|
|
2549
|
+
noteCreated(created.id, role, "none");
|
|
2520
2550
|
}
|
|
2521
2551
|
return child;
|
|
2522
2552
|
};
|
|
@@ -2525,16 +2555,22 @@ function createNativeHiddenChildren(host, removeSession, options) {
|
|
|
2525
2555
|
open: create,
|
|
2526
2556
|
create,
|
|
2527
2557
|
retire(child) {
|
|
2528
|
-
if (
|
|
2558
|
+
if (kept(child)) {
|
|
2559
|
+
options.log(`[magic-context] hidden child ${child.id} kept (keep_subagents)`);
|
|
2560
|
+
} else {
|
|
2529
2561
|
remove(child);
|
|
2562
|
+
}
|
|
2530
2563
|
},
|
|
2531
2564
|
async finish(child, retired) {
|
|
2532
2565
|
if (retired) {
|
|
2533
2566
|
await removing.get(child.id);
|
|
2534
2567
|
return;
|
|
2535
2568
|
}
|
|
2536
|
-
if (
|
|
2569
|
+
if (kept(child)) {
|
|
2570
|
+
options.log(`[magic-context] hidden child ${child.id} kept (keep_subagents)`);
|
|
2571
|
+
} else {
|
|
2537
2572
|
await remove(child);
|
|
2573
|
+
}
|
|
2538
2574
|
},
|
|
2539
2575
|
updateModel: (child, model) => ({ ...child, model }),
|
|
2540
2576
|
markEverSettled: (child) => ({ ...child, ever_settled: true })
|
|
@@ -2581,6 +2617,7 @@ async function cleanupLegacyHiddenChildren(db, remove, note, options = {}) {
|
|
|
2581
2617
|
timer = setTimeout(() => reject(new Error("session.remove timed out")), Math.min(options.timeoutMs ?? 1000, Math.max(1, deadline - now())));
|
|
2582
2618
|
})
|
|
2583
2619
|
]);
|
|
2620
|
+
note(`[magic-context] legacy hidden child ${child.id} removed`);
|
|
2584
2621
|
} catch (error) {
|
|
2585
2622
|
if (!isSessionNotFound(error))
|
|
2586
2623
|
throw error;
|
|
@@ -2669,6 +2706,16 @@ function toolResultText(result) {
|
|
|
2669
2706
|
`);
|
|
2670
2707
|
return text.length > 0 ? text : undefined;
|
|
2671
2708
|
}
|
|
2709
|
+
function sumRowUsage(rows) {
|
|
2710
|
+
const count = (value) => typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
2711
|
+
return rows.reduce((total, row) => ({
|
|
2712
|
+
input: total.input + count(row.data.tokens?.input),
|
|
2713
|
+
output: total.output + count(row.data.tokens?.output),
|
|
2714
|
+
cacheRead: total.cacheRead + count(row.data.tokens?.cache?.read),
|
|
2715
|
+
cacheWrite: total.cacheWrite + count(row.data.tokens?.cache?.write),
|
|
2716
|
+
...total.reasoning !== undefined || row.data.tokens?.reasoning !== undefined ? { reasoning: (total.reasoning ?? 0) + count(row.data.tokens?.reasoning) } : {}
|
|
2717
|
+
}), { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 });
|
|
2718
|
+
}
|
|
2672
2719
|
function toolLoopMessages(attempt, rows) {
|
|
2673
2720
|
const messages = attempt.observedMessages ?? [];
|
|
2674
2721
|
const results = new Map;
|
|
@@ -2861,6 +2908,10 @@ function createLateHiddenExecutor(current) {
|
|
|
2861
2908
|
open: (run) => wired().open(run),
|
|
2862
2909
|
attempt: (handle, request) => wired().attempt(handle, request),
|
|
2863
2910
|
collect: (handle, limit) => wired().collect(handle, limit),
|
|
2911
|
+
collectPartial: (handle, limit) => {
|
|
2912
|
+
const executor = wired();
|
|
2913
|
+
return executor.collectPartial?.(handle, limit) ?? executor.collect(handle, limit);
|
|
2914
|
+
},
|
|
2864
2915
|
close: (handle, settlement) => wired().close(handle, settlement)
|
|
2865
2916
|
};
|
|
2866
2917
|
}
|
|
@@ -2950,9 +3001,32 @@ async function createV2HiddenCompletionExecutor(host, options) {
|
|
|
2950
3001
|
});
|
|
2951
3002
|
run.child = lifecycle.updateModel(run.child, requested);
|
|
2952
3003
|
};
|
|
3004
|
+
const partialCompletion = (run) => {
|
|
3005
|
+
const attempt = run.attempt;
|
|
3006
|
+
const rows = attempt ? withReader(options.openReader, (reader) => {
|
|
3007
|
+
const latest = reader.latestAssistant(run.child.id);
|
|
3008
|
+
return (reader.assistantSince?.(run.child.id, attempt.baseline) ?? (latest ? [latest] : [])).filter((row) => row.seq > attempt.baseline);
|
|
3009
|
+
}) : [];
|
|
3010
|
+
const usage = sumRowUsage(rows);
|
|
3011
|
+
return {
|
|
3012
|
+
text: rows.map(assistantText).filter(Boolean).join(`
|
|
3013
|
+
`) || null,
|
|
3014
|
+
messages: attempt ? toolLoopMessages(attempt.child, rows) : [],
|
|
3015
|
+
usage,
|
|
3016
|
+
tokenLog: runTokenLog(usage),
|
|
3017
|
+
lengthCapped: false
|
|
3018
|
+
};
|
|
3019
|
+
};
|
|
2953
3020
|
const retire = (run, reason) => {
|
|
2954
3021
|
if (run.retired)
|
|
2955
3022
|
return;
|
|
3023
|
+
if (hiddenToolLoop(run.identity) && !run.completion) {
|
|
3024
|
+
try {
|
|
3025
|
+
run.partialCompletion = partialCompletion(run);
|
|
3026
|
+
} catch (error) {
|
|
3027
|
+
note(`[magic-context] could not read interrupted child output: ${String(error)}`);
|
|
3028
|
+
}
|
|
3029
|
+
}
|
|
2956
3030
|
lifecycle.retire(run.child, reason);
|
|
2957
3031
|
run.retired = true;
|
|
2958
3032
|
};
|
|
@@ -3083,6 +3157,8 @@ async function createV2HiddenCompletionExecutor(host, options) {
|
|
|
3083
3157
|
shaped: false,
|
|
3084
3158
|
budget: run.budget
|
|
3085
3159
|
};
|
|
3160
|
+
run.partialCompletion = undefined;
|
|
3161
|
+
run.attempt = { child: attempt, baseline };
|
|
3086
3162
|
options.hook.registerAttempt(marker, attempt);
|
|
3087
3163
|
const deadline = Date.now() + run.identity.timeoutMs;
|
|
3088
3164
|
const budget = run.budget;
|
|
@@ -3218,19 +3294,14 @@ async function createV2HiddenCompletionExecutor(host, options) {
|
|
|
3218
3294
|
const tokenNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
3219
3295
|
const steps = withReader(options.openReader, (reader) => reader.assistantSince?.(run.child.id, baseline) ?? [row]).filter((step) => step.seq > baseline && step.seq <= row.seq);
|
|
3220
3296
|
const reportedUsage = steps.some((step) => tokenNumber(step.data.tokens?.input) !== undefined || tokenNumber(step.data.tokens?.output) !== undefined);
|
|
3221
|
-
const usage = steps
|
|
3222
|
-
input: total.input + (tokenNumber(step.data.tokens?.input) ?? 0),
|
|
3223
|
-
output: total.output + (tokenNumber(step.data.tokens?.output) ?? 0),
|
|
3224
|
-
cacheRead: total.cacheRead + (tokenNumber(step.data.tokens?.cache?.read) ?? 0),
|
|
3225
|
-
cacheWrite: total.cacheWrite + (tokenNumber(step.data.tokens?.cache?.write) ?? 0)
|
|
3226
|
-
}), { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 });
|
|
3297
|
+
const usage = sumRowUsage(steps);
|
|
3227
3298
|
if (request.signal?.aborted || run.retired || Date.now() >= deadline) {
|
|
3228
3299
|
await interruptAndRetire(run, "prompt-aborted-or-timeout");
|
|
3229
3300
|
throw new Error(request.signal?.aborted ? "Hidden completion prompt aborted" : "Hidden completion prompt timed out");
|
|
3230
3301
|
}
|
|
3231
3302
|
run.completion = {
|
|
3232
3303
|
text,
|
|
3233
|
-
tokenLog: runTokenLog(tokens, run.identity.maxOutputTokens, row.data.finish),
|
|
3304
|
+
tokenLog: runTokenLog(reportedUsage ? usage : tokens, run.identity.maxOutputTokens, row.data.finish),
|
|
3234
3305
|
...hiddenToolLoop(run.identity) ? { messages: toolLoopMessages(attempt, steps) } : {},
|
|
3235
3306
|
reasoning: text ? null : assistantReasoning(row),
|
|
3236
3307
|
usage: reportedUsage ? usage : meter(system, promptText(request), text ?? ""),
|
|
@@ -3279,6 +3350,12 @@ async function createV2HiddenCompletionExecutor(host, options) {
|
|
|
3279
3350
|
throw new Error("Hidden completion has no settled output");
|
|
3280
3351
|
return completion;
|
|
3281
3352
|
},
|
|
3353
|
+
async collectPartial(handle) {
|
|
3354
|
+
const run = runs.get(handle);
|
|
3355
|
+
if (!run)
|
|
3356
|
+
throw new Error("Hidden completion handle is closed");
|
|
3357
|
+
return run.completion ?? run.partialCompletion ?? partialCompletion(run);
|
|
3358
|
+
},
|
|
3282
3359
|
async close(handle, settlement) {
|
|
3283
3360
|
if (!handle)
|
|
3284
3361
|
return;
|
|
@@ -3343,6 +3420,96 @@ class HiddenModelActivity {
|
|
|
3343
3420
|
}
|
|
3344
3421
|
}
|
|
3345
3422
|
|
|
3423
|
+
// src/v2/message-times.ts
|
|
3424
|
+
function isSettled(entry, readAt) {
|
|
3425
|
+
return (entry.version.type === "user" || entry.time.completed !== undefined) && typeof entry.version.updated === "number" && Number.isFinite(entry.version.updated) && entry.version.updated <= readAt - 1000;
|
|
3426
|
+
}
|
|
3427
|
+
function sameVersion(a, b) {
|
|
3428
|
+
return a.type === b.type && a.seq === b.seq && a.created === b.created && a.updated === b.updated;
|
|
3429
|
+
}
|
|
3430
|
+
|
|
3431
|
+
class V2MessageTimesCache {
|
|
3432
|
+
capacity;
|
|
3433
|
+
sessions = new Map;
|
|
3434
|
+
constructor(capacity = 64) {
|
|
3435
|
+
this.capacity = capacity;
|
|
3436
|
+
}
|
|
3437
|
+
delete(sessionID) {
|
|
3438
|
+
this.sessions.delete(sessionID);
|
|
3439
|
+
}
|
|
3440
|
+
deleteMessage(sessionID, messageID) {
|
|
3441
|
+
this.sessions.get(sessionID)?.entries.delete(messageID);
|
|
3442
|
+
}
|
|
3443
|
+
clear() {
|
|
3444
|
+
this.sessions.clear();
|
|
3445
|
+
}
|
|
3446
|
+
pass(sessionID) {
|
|
3447
|
+
const previous = this.sessions.get(sessionID);
|
|
3448
|
+
const current = { entries: new Map };
|
|
3449
|
+
this.sessions.delete(sessionID);
|
|
3450
|
+
this.sessions.set(sessionID, current);
|
|
3451
|
+
while (this.sessions.size > this.capacity) {
|
|
3452
|
+
const oldest = this.sessions.keys().next().value;
|
|
3453
|
+
if (oldest === undefined)
|
|
3454
|
+
break;
|
|
3455
|
+
this.sessions.delete(oldest);
|
|
3456
|
+
}
|
|
3457
|
+
const passTimes = new Map;
|
|
3458
|
+
return (reader, ids) => {
|
|
3459
|
+
const missing = [...new Set(ids)].filter((id) => !passTimes.has(id));
|
|
3460
|
+
if (missing.length > 0) {
|
|
3461
|
+
const readAt = Date.now();
|
|
3462
|
+
const identity = reader.hostIdentity();
|
|
3463
|
+
current.identity = identity;
|
|
3464
|
+
const reusable = previous?.identity === identity ? previous.entries : undefined;
|
|
3465
|
+
const known = [];
|
|
3466
|
+
const refresh = [];
|
|
3467
|
+
let first = Infinity;
|
|
3468
|
+
let last = -Infinity;
|
|
3469
|
+
for (const id of missing) {
|
|
3470
|
+
const entry = reusable?.get(id);
|
|
3471
|
+
if (entry && isSettled(entry, readAt)) {
|
|
3472
|
+
known.push(id);
|
|
3473
|
+
first = Math.min(first, entry.version.seq);
|
|
3474
|
+
last = Math.max(last, entry.version.seq);
|
|
3475
|
+
} else
|
|
3476
|
+
refresh.push(id);
|
|
3477
|
+
}
|
|
3478
|
+
const versions = reader.messageTimeVersions(sessionID, known, { first, last });
|
|
3479
|
+
for (const id of known) {
|
|
3480
|
+
const version = versions.get(id);
|
|
3481
|
+
const cached = reusable?.get(id);
|
|
3482
|
+
if (!version) {
|
|
3483
|
+
passTimes.set(id, null);
|
|
3484
|
+
} else if (cached && sameVersion(cached.version, version) && (version.type === "user" || cached.time.completed !== undefined)) {
|
|
3485
|
+
current.entries.set(id, cached);
|
|
3486
|
+
passTimes.set(id, cached.time);
|
|
3487
|
+
} else
|
|
3488
|
+
refresh.push(id);
|
|
3489
|
+
}
|
|
3490
|
+
const times = reader.messageTimes(sessionID, refresh, versions);
|
|
3491
|
+
for (const id of refresh) {
|
|
3492
|
+
const time = times.get(id);
|
|
3493
|
+
const version = versions.get(id);
|
|
3494
|
+
passTimes.set(id, time ?? null);
|
|
3495
|
+
if (time && version) {
|
|
3496
|
+
const entry = { version, time };
|
|
3497
|
+
if (isSettled(entry, readAt))
|
|
3498
|
+
current.entries.set(id, entry);
|
|
3499
|
+
}
|
|
3500
|
+
}
|
|
3501
|
+
}
|
|
3502
|
+
const result = new Map;
|
|
3503
|
+
for (const id of ids) {
|
|
3504
|
+
const time = passTimes.get(id);
|
|
3505
|
+
if (time)
|
|
3506
|
+
result.set(id, { ...time });
|
|
3507
|
+
}
|
|
3508
|
+
return result;
|
|
3509
|
+
};
|
|
3510
|
+
}
|
|
3511
|
+
}
|
|
3512
|
+
|
|
3346
3513
|
// src/v2/hooks/channel2.ts
|
|
3347
3514
|
import { randomBytes } from "node:crypto";
|
|
3348
3515
|
var pendingCandidates = new WeakMap;
|
|
@@ -3739,11 +3906,7 @@ function registerV2DreamScheduleTimer(args) {
|
|
|
3739
3906
|
embeddingConfig: config.embedding,
|
|
3740
3907
|
transformMode: config.transform_mode,
|
|
3741
3908
|
moduleClient: createDreamTimerModuleClient(args.rustModeModuleClient),
|
|
3742
|
-
gitCommitIndexing: gitCommitIndexing?.enabled ?
|
|
3743
|
-
enabled: true,
|
|
3744
|
-
since_days: gitCommitIndexing.since_days,
|
|
3745
|
-
max_commits: gitCommitIndexing.max_commits
|
|
3746
|
-
} : undefined,
|
|
3909
|
+
gitCommitIndexing: gitCommitIndexing?.enabled ? gitCommitIndexing : undefined,
|
|
3747
3910
|
ensureRegistered: args.ensureRegistered ?? ensureProjectRegisteredFromOpenCodeDirectory
|
|
3748
3911
|
}).catch((error) => {
|
|
3749
3912
|
log2(`[magic-context] v2 dream timer registration failed (continuing without it): ${error}`);
|
|
@@ -4315,7 +4478,7 @@ function projectRawMessages(rows, ordinalFor) {
|
|
|
4315
4478
|
const message = {
|
|
4316
4479
|
id: row.id,
|
|
4317
4480
|
ordinal: ordinalFor(row, index),
|
|
4318
|
-
role: row.type === "assistant" ? "assistant" : "user",
|
|
4481
|
+
role: row.type === "assistant" ? "assistant" : row.type === "system" ? "system" : "user",
|
|
4319
4482
|
createdAt: row.time_created ?? row.data.time?.created,
|
|
4320
4483
|
parts: row.type === "assistant" ? (row.data.content ?? []).map((part) => {
|
|
4321
4484
|
if (part.type !== "tool")
|
|
@@ -5032,6 +5195,7 @@ function coveredInstructionRows(reader, sessionID, throughSeq, model) {
|
|
|
5032
5195
|
async function registerContext(context) {
|
|
5033
5196
|
const directory = context.location.directory;
|
|
5034
5197
|
const config = loadPluginConfigDetailed(directory).config;
|
|
5198
|
+
log2(`[magic-context] OpenCode 2 keep_subagents=${config.keep_subagents === true}`);
|
|
5035
5199
|
setHomeProjectPermission(config.allow_home_project);
|
|
5036
5200
|
if (!config.enabled)
|
|
5037
5201
|
return;
|
|
@@ -5164,6 +5328,7 @@ async function registerContext(context) {
|
|
|
5164
5328
|
});
|
|
5165
5329
|
let hiddenAgentsReady;
|
|
5166
5330
|
const readerPool = new V2StoreReaderPool;
|
|
5331
|
+
const messageTimesCache = new V2MessageTimesCache;
|
|
5167
5332
|
const openStoreReader = () => readerPool.open(gaDatabasePath(getDataDir(), process.env.OPENCODE_CHANNEL ?? "latest"));
|
|
5168
5333
|
const createHiddenExecutor = async (database) => {
|
|
5169
5334
|
await cleanupLegacyOnce(database);
|
|
@@ -5527,6 +5692,12 @@ async function registerContext(context) {
|
|
|
5527
5692
|
if (event.type?.startsWith("session.revert.") || event.type === "session.message.content.updated") {
|
|
5528
5693
|
nativeFoldReplay?.onEvent(event);
|
|
5529
5694
|
restoredRows.forget(sessionID);
|
|
5695
|
+
messageTimesCache.delete(sessionID);
|
|
5696
|
+
}
|
|
5697
|
+
if (event.type === "session.step.started" || event.type === "session.step.ended" || event.type === "session.step.failed") {
|
|
5698
|
+
const messageID = event.data.assistantMessageID;
|
|
5699
|
+
if (typeof messageID === "string")
|
|
5700
|
+
messageTimesCache.deleteMessage(sessionID, messageID);
|
|
5530
5701
|
}
|
|
5531
5702
|
if (event.type === "session.error" || event.type === "session.execution.failed") {
|
|
5532
5703
|
const error = hiddenTerminalError(event);
|
|
@@ -5565,6 +5736,7 @@ async function registerContext(context) {
|
|
|
5565
5736
|
rawProviders.get(sessionID)?.();
|
|
5566
5737
|
rawProviders.delete(sessionID);
|
|
5567
5738
|
usage.delete(sessionID);
|
|
5739
|
+
messageTimesCache.delete(sessionID);
|
|
5568
5740
|
hiddenSessionErrors.delete(sessionID);
|
|
5569
5741
|
storageNoticeBySession.delete(sessionID);
|
|
5570
5742
|
liveModels.delete(sessionID);
|
|
@@ -5859,22 +6031,9 @@ async function registerContext(context) {
|
|
|
5859
6031
|
}
|
|
5860
6032
|
await dropStorageNotices(draft.messages, isMagicContextSynthetic);
|
|
5861
6033
|
const hostMessagesAtEntry = [...draft.messages];
|
|
5862
|
-
const
|
|
6034
|
+
const cachedTimes = messageTimesCache.pass(draft.sessionID);
|
|
5863
6035
|
const readTimes = (reader, messages) => {
|
|
5864
|
-
|
|
5865
|
-
const missing = ids.filter((id) => !passTimes.has(id));
|
|
5866
|
-
if (missing.length > 0) {
|
|
5867
|
-
const read = reader.messageTimes(draft.sessionID, missing);
|
|
5868
|
-
for (const id of missing)
|
|
5869
|
-
passTimes.set(id, read.get(id) ?? null);
|
|
5870
|
-
}
|
|
5871
|
-
const times = new Map;
|
|
5872
|
-
for (const id of ids) {
|
|
5873
|
-
const time = passTimes.get(id);
|
|
5874
|
-
if (time)
|
|
5875
|
-
times.set(id, time);
|
|
5876
|
-
}
|
|
5877
|
-
return times;
|
|
6036
|
+
return cachedTimes(reader, timeIds(messages));
|
|
5878
6037
|
};
|
|
5879
6038
|
liveModels.set(draft.sessionID, {
|
|
5880
6039
|
providerID: draft.model.providerID,
|
|
@@ -6399,6 +6558,7 @@ async function registerContext(context) {
|
|
|
6399
6558
|
}, 0));
|
|
6400
6559
|
return {
|
|
6401
6560
|
async dispose() {
|
|
6561
|
+
messageTimesCache.clear();
|
|
6402
6562
|
usageController.abort();
|
|
6403
6563
|
await hiddenCompletionExecutor?.dispose();
|
|
6404
6564
|
await usageDone;
|