@farmslot/protocol 0.73.2 → 0.74.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.
- package/CHANGELOG.md +22 -8
- package/README.md +9 -0
- package/dist/client-cache/cache.d.ts +4 -0
- package/dist/client-cache/cache.d.ts.map +1 -0
- package/dist/client-cache/cache.js +1102 -0
- package/dist/client-cache/cache.js.map +1 -0
- package/dist/client-cache/collector-admission.d.ts +29 -0
- package/dist/client-cache/collector-admission.d.ts.map +1 -0
- package/dist/client-cache/collector-admission.js +183 -0
- package/dist/client-cache/collector-admission.js.map +1 -0
- package/dist/client-cache/command-method.d.ts +5 -0
- package/dist/client-cache/command-method.d.ts.map +1 -0
- package/dist/client-cache/command-method.js +2 -0
- package/dist/client-cache/command-method.js.map +1 -0
- package/dist/client-cache/conformance.d.ts +36 -0
- package/dist/client-cache/conformance.d.ts.map +1 -0
- package/dist/client-cache/conformance.js +578 -0
- package/dist/client-cache/conformance.js.map +1 -0
- package/dist/client-cache/content.d.ts +29 -0
- package/dist/client-cache/content.d.ts.map +1 -0
- package/dist/client-cache/content.js +101 -0
- package/dist/client-cache/content.js.map +1 -0
- package/dist/client-cache/d07-domains.d.ts +17 -0
- package/dist/client-cache/d07-domains.d.ts.map +1 -0
- package/dist/client-cache/d07-domains.js +111 -0
- package/dist/client-cache/d07-domains.js.map +1 -0
- package/dist/client-cache/diff-apply.d.ts +29 -0
- package/dist/client-cache/diff-apply.d.ts.map +1 -0
- package/dist/client-cache/diff-apply.js +206 -0
- package/dist/client-cache/diff-apply.js.map +1 -0
- package/dist/client-cache/index.d.ts +14 -10
- package/dist/client-cache/index.d.ts.map +1 -1
- package/dist/client-cache/index.js +14 -1
- package/dist/client-cache/index.js.map +1 -1
- package/dist/client-cache/keys.d.ts +126 -0
- package/dist/client-cache/keys.d.ts.map +1 -0
- package/dist/client-cache/keys.js +25 -0
- package/dist/client-cache/keys.js.map +1 -0
- package/dist/client-cache/native-history.d.ts +64 -0
- package/dist/client-cache/native-history.d.ts.map +1 -0
- package/dist/client-cache/native-history.js +285 -0
- package/dist/client-cache/native-history.js.map +1 -0
- package/dist/client-cache/prefetch.d.ts +50 -0
- package/dist/client-cache/prefetch.d.ts.map +1 -0
- package/dist/client-cache/prefetch.js +507 -0
- package/dist/client-cache/prefetch.js.map +1 -0
- package/dist/client-cache/registry.d.ts +1365 -0
- package/dist/client-cache/registry.d.ts.map +1 -0
- package/dist/client-cache/registry.js +1038 -0
- package/dist/client-cache/registry.js.map +1 -0
- package/dist/client-cache/run-list-versions.d.ts +70 -0
- package/dist/client-cache/run-list-versions.d.ts.map +1 -0
- package/dist/client-cache/run-list-versions.js +309 -0
- package/dist/client-cache/run-list-versions.js.map +1 -0
- package/dist/client-cache/store.d.ts +128 -0
- package/dist/client-cache/store.d.ts.map +1 -0
- package/dist/client-cache/store.js +190 -0
- package/dist/client-cache/store.js.map +1 -0
- package/dist/client-cache/transport.d.ts +27 -0
- package/dist/client-cache/transport.d.ts.map +1 -0
- package/dist/client-cache/transport.js +56 -0
- package/dist/client-cache/transport.js.map +1 -0
- package/dist/client-cache/types.d.ts +116 -0
- package/dist/client-cache/types.d.ts.map +1 -0
- package/dist/client-cache/types.js +2 -0
- package/dist/client-cache/types.js.map +1 -0
- package/dist/client-cache/upstream-retention.d.ts +6 -0
- package/dist/client-cache/upstream-retention.d.ts.map +1 -0
- package/dist/client-cache/upstream-retention.js +28 -0
- package/dist/client-cache/upstream-retention.js.map +1 -0
- package/dist/client-cache/workspace-retention.d.ts +7 -0
- package/dist/client-cache/workspace-retention.d.ts.map +1 -0
- package/dist/client-cache/workspace-retention.js +46 -0
- package/dist/client-cache/workspace-retention.js.map +1 -0
- package/dist/contracts/acceptance-registration.d.ts +0 -6
- package/dist/contracts/acceptance-registration.d.ts.map +1 -1
- package/dist/contracts/provider-accounts.d.ts +31 -0
- package/dist/contracts/provider-accounts.d.ts.map +1 -1
- package/dist/contracts/provider-accounts.js +209 -1
- package/dist/contracts/provider-accounts.js.map +1 -1
- package/dist/contracts/run-bundles.d.ts.map +1 -1
- package/dist/contracts/run-bundles.js +2 -0
- package/dist/contracts/run-bundles.js.map +1 -1
- package/dist/contracts/runs.d.ts +5 -20
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +5 -21
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/worker-terminal.d.ts +0 -3
- package/dist/contracts/worker-terminal.d.ts.map +1 -1
- package/dist/contracts/worker-terminal.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/person-session-client.d.ts +4 -1
- package/dist/person-session-client.d.ts.map +1 -1
- package/dist/person-session-client.js.map +1 -1
- package/dist/rpc/auth.d.ts +17 -0
- package/dist/rpc/auth.d.ts.map +1 -1
- package/dist/rpc/auth.js.map +1 -1
- package/dist/rpc/config.d.ts +2 -0
- package/dist/rpc/config.d.ts.map +1 -1
- package/dist/rpc/config.js.map +1 -1
- package/dist/rpc/fs.d.ts +110 -4
- package/dist/rpc/fs.d.ts.map +1 -1
- package/dist/rpc/fs.js +7 -1
- package/dist/rpc/fs.js.map +1 -1
- package/dist/rpc/gateway.d.ts +3 -0
- package/dist/rpc/gateway.d.ts.map +1 -1
- package/dist/rpc/git.d.ts +42 -0
- package/dist/rpc/git.d.ts.map +1 -1
- package/dist/rpc/index.d.ts +1 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -0
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/native-session.d.ts +2 -0
- package/dist/rpc/native-session.d.ts.map +1 -1
- package/dist/rpc/native-session.js.map +1 -1
- package/dist/rpc/nodes.d.ts +2 -0
- package/dist/rpc/nodes.d.ts.map +1 -1
- package/dist/rpc/nodes.js.map +1 -1
- package/dist/rpc/pr-observations.d.ts +22 -0
- package/dist/rpc/pr-observations.d.ts.map +1 -0
- package/dist/rpc/pr-observations.js +104 -0
- package/dist/rpc/pr-observations.js.map +1 -0
- package/dist/rpc/pr.d.ts +9 -0
- package/dist/rpc/pr.d.ts.map +1 -1
- package/dist/rpc/pr.js +1 -1
- package/dist/rpc/pr.js.map +1 -1
- package/dist/rpc/principal.d.ts +2 -0
- package/dist/rpc/principal.d.ts.map +1 -1
- package/dist/rpc/registry.d.ts +1 -0
- package/dist/rpc/registry.d.ts.map +1 -1
- package/dist/rpc/registry.js +2 -0
- package/dist/rpc/registry.js.map +1 -1
- package/dist/rpc/resource-observers.d.ts +32 -0
- package/dist/rpc/resource-observers.d.ts.map +1 -0
- package/dist/rpc/resource-observers.js +2 -0
- package/dist/rpc/resource-observers.js.map +1 -0
- package/dist/rpc/run.d.ts +23 -0
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/run.js.map +1 -1
- package/dist/rpc/runner-models.d.ts +15 -0
- package/dist/rpc/runner-models.d.ts.map +1 -1
- package/dist/rpc/runner-models.js +91 -0
- package/dist/rpc/runner-models.js.map +1 -1
- package/dist/runs/review-diff-identity.d.ts +15 -0
- package/dist/runs/review-diff-identity.d.ts.map +1 -0
- package/dist/runs/review-diff-identity.js +47 -0
- package/dist/runs/review-diff-identity.js.map +1 -0
- package/dist/runs/run-list-filter.d.ts +33 -0
- package/dist/runs/run-list-filter.d.ts.map +1 -0
- package/dist/runs/run-list-filter.js +116 -0
- package/dist/runs/run-list-filter.js.map +1 -0
- package/dist/runs/run-list-observation.d.ts +5 -0
- package/dist/runs/run-list-observation.d.ts.map +1 -0
- package/dist/runs/run-list-observation.js +36 -0
- package/dist/runs/run-list-observation.js.map +1 -0
- package/dist/runs/run-list-view.d.ts +6 -2
- package/dist/runs/run-list-view.d.ts.map +1 -1
- package/dist/runs/run-list-view.js +10 -4
- package/dist/runs/run-list-view.js.map +1 -1
- package/dist/slots/cancelled-run-slot.d.ts +2 -1
- package/dist/slots/cancelled-run-slot.d.ts.map +1 -1
- package/dist/sources/client.d.ts +10 -1
- package/dist/sources/client.d.ts.map +1 -1
- package/dist/sources/client.js +23 -4
- package/dist/sources/client.js.map +1 -1
- package/dist/sources/controller.d.ts +13 -14
- package/dist/sources/controller.d.ts.map +1 -1
- package/dist/sources/controller.js +87 -82
- package/dist/sources/controller.js.map +1 -1
- package/dist/sources/status-view.d.ts +2 -0
- package/dist/sources/status-view.d.ts.map +1 -1
- package/dist/sources/status-view.js +13 -0
- package/dist/sources/status-view.js.map +1 -1
- package/dist/transport/events.d.ts +1 -4
- package/dist/transport/events.d.ts.map +1 -1
- package/dist/transport/events.js +1 -0
- package/dist/transport/events.js.map +1 -1
- package/dist/transport/frames.d.ts +6 -0
- package/dist/transport/frames.d.ts.map +1 -1
- package/dist/transport/frames.js.map +1 -1
- package/dist/transport/observations.d.ts +24 -0
- package/dist/transport/observations.d.ts.map +1 -0
- package/dist/transport/observations.js +2 -0
- package/dist/transport/observations.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/sources/changes.d.ts +0 -37
- package/dist/sources/changes.d.ts.map +0 -1
- package/dist/sources/changes.js +0 -79
- package/dist/sources/changes.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/** Experimental ADR-071 keys. IDs identify resources; keys never contain filesystem paths. */
|
|
2
|
+
export type ResourceKey = {
|
|
3
|
+
family: 'sources';
|
|
4
|
+
scope: 'farm';
|
|
5
|
+
} | {
|
|
6
|
+
family: 'runs';
|
|
7
|
+
scope: 'farm';
|
|
8
|
+
project?: string;
|
|
9
|
+
} | {
|
|
10
|
+
family: 'run';
|
|
11
|
+
runId: string;
|
|
12
|
+
} | {
|
|
13
|
+
family: 'family';
|
|
14
|
+
familyId: string;
|
|
15
|
+
} | {
|
|
16
|
+
family: 'decisions';
|
|
17
|
+
scope: 'farm';
|
|
18
|
+
} | {
|
|
19
|
+
family: 'decision';
|
|
20
|
+
decisionId: string;
|
|
21
|
+
} | {
|
|
22
|
+
family: 'gate' | 'package';
|
|
23
|
+
runId: string;
|
|
24
|
+
decisionId?: string;
|
|
25
|
+
} | {
|
|
26
|
+
family: 'slots';
|
|
27
|
+
scope: 'farm';
|
|
28
|
+
project?: string;
|
|
29
|
+
nodeId?: string;
|
|
30
|
+
} | {
|
|
31
|
+
family: 'slot';
|
|
32
|
+
slotId: string;
|
|
33
|
+
} | {
|
|
34
|
+
family: 'node' | 'workers';
|
|
35
|
+
scope: 'farm';
|
|
36
|
+
} | {
|
|
37
|
+
family: 'node' | 'pressure' | 'workers';
|
|
38
|
+
nodeId: string;
|
|
39
|
+
} | {
|
|
40
|
+
family: 'review';
|
|
41
|
+
runId: string;
|
|
42
|
+
reviewId?: string;
|
|
43
|
+
} | {
|
|
44
|
+
family: 'artifacts';
|
|
45
|
+
runId: string;
|
|
46
|
+
invocationId?: string;
|
|
47
|
+
} | {
|
|
48
|
+
family: 'progress';
|
|
49
|
+
runId: string;
|
|
50
|
+
contextId?: string;
|
|
51
|
+
} | {
|
|
52
|
+
family: 'capabilities';
|
|
53
|
+
nodeId?: string;
|
|
54
|
+
slotId?: string;
|
|
55
|
+
} | {
|
|
56
|
+
family: 'capability';
|
|
57
|
+
capabilityId: string;
|
|
58
|
+
} | {
|
|
59
|
+
family: 'workspace';
|
|
60
|
+
slotId: string;
|
|
61
|
+
runId?: string;
|
|
62
|
+
} | {
|
|
63
|
+
family: 'workspace';
|
|
64
|
+
nodeId: string;
|
|
65
|
+
ownerId: string;
|
|
66
|
+
sessionId: string;
|
|
67
|
+
contextId?: string;
|
|
68
|
+
} | {
|
|
69
|
+
family: 'workspace';
|
|
70
|
+
nodeId: string;
|
|
71
|
+
ownerId: string;
|
|
72
|
+
workspaceId: string;
|
|
73
|
+
} | {
|
|
74
|
+
family: 'native-session';
|
|
75
|
+
nodeId: string;
|
|
76
|
+
ownerId: string;
|
|
77
|
+
sessionId?: string;
|
|
78
|
+
workerId?: string;
|
|
79
|
+
} | {
|
|
80
|
+
family: 'profiles';
|
|
81
|
+
nodeId: string;
|
|
82
|
+
ownerId: string;
|
|
83
|
+
} | {
|
|
84
|
+
family: 'native-session' | 'profiles';
|
|
85
|
+
scope: 'owner';
|
|
86
|
+
ownerId: string;
|
|
87
|
+
} | {
|
|
88
|
+
family: 'configuration' | 'pr-automation' | 'analytics';
|
|
89
|
+
scope: 'farm';
|
|
90
|
+
project?: string;
|
|
91
|
+
} | {
|
|
92
|
+
family: 'planning';
|
|
93
|
+
collection: 'backlog' | 'roadmap' | 'work-graphs' | 'dispatch-queue';
|
|
94
|
+
project?: string;
|
|
95
|
+
itemId?: string;
|
|
96
|
+
} | {
|
|
97
|
+
family: 'assessment';
|
|
98
|
+
scope: 'farm';
|
|
99
|
+
assessmentId?: string;
|
|
100
|
+
} | {
|
|
101
|
+
family: 'copilot';
|
|
102
|
+
ownerId: string;
|
|
103
|
+
sessionId?: string;
|
|
104
|
+
} | {
|
|
105
|
+
family: 'gateway-update';
|
|
106
|
+
scope: 'gateway';
|
|
107
|
+
} | {
|
|
108
|
+
family: 'upstream';
|
|
109
|
+
integration: 'github' | 'packages' | 'providers';
|
|
110
|
+
queryId: string;
|
|
111
|
+
};
|
|
112
|
+
export type ResourceRevision = number;
|
|
113
|
+
export interface ResourceDependency {
|
|
114
|
+
key: ResourceKey;
|
|
115
|
+
revision: ResourceRevision;
|
|
116
|
+
}
|
|
117
|
+
export interface ResourceReadStamp {
|
|
118
|
+
epoch: string;
|
|
119
|
+
dependencies: ResourceDependency[];
|
|
120
|
+
}
|
|
121
|
+
/** Canonical JSON for query parameters and typed resource keys. Arrays retain their order. */
|
|
122
|
+
export declare function canonicalResourceJson(value: unknown): string;
|
|
123
|
+
export declare function resourceKeyId(key: ResourceKey): string;
|
|
124
|
+
/** Busy observations have one gateway publication cadence, shared by all readers. */
|
|
125
|
+
export declare const RESOURCE_PUBLISH_INTERVAL_MS: Partial<Record<ResourceKey['family'], number>>;
|
|
126
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/client-cache/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Canonical JSON for query parameters and typed resource keys. Arrays retain their order. */
|
|
2
|
+
export function canonicalResourceJson(value) {
|
|
3
|
+
if (value === null || typeof value !== 'object')
|
|
4
|
+
return JSON.stringify(value) ?? 'null';
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return `[${value.map(canonicalResourceJson).join(',')}]`;
|
|
7
|
+
const object = value;
|
|
8
|
+
return `{${Object.keys(object)
|
|
9
|
+
.sort()
|
|
10
|
+
.filter((key) => object[key] !== undefined)
|
|
11
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalResourceJson(object[key])}`)
|
|
12
|
+
.join(',')}}`;
|
|
13
|
+
}
|
|
14
|
+
export function resourceKeyId(key) {
|
|
15
|
+
return canonicalResourceJson(key);
|
|
16
|
+
}
|
|
17
|
+
/** Busy observations have one gateway publication cadence, shared by all readers. */
|
|
18
|
+
export const RESOURCE_PUBLISH_INTERVAL_MS = {
|
|
19
|
+
workspace: 200,
|
|
20
|
+
workers: 200,
|
|
21
|
+
copilot: 200,
|
|
22
|
+
progress: 200,
|
|
23
|
+
'native-session': 200,
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/client-cache/keys.ts"],"names":[],"mappings":"AAsDA,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IACxF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnF,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC3B,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;SAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SAC5E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,4BAA4B,GAAmD;IAC1F,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,gBAAgB,EAAE,GAAG;CACtB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { NativeSessionEvent, NativeSessionReadResult, NativeSessionTargetParams } from '../rpc/native-session.js';
|
|
2
|
+
import { type ResourceQuery } from './registry.js';
|
|
3
|
+
import type { ResourceReadResult } from './types.js';
|
|
4
|
+
export interface NativeTimelineEntry {
|
|
5
|
+
key: number;
|
|
6
|
+
kind: 'user' | 'assistant' | 'tool' | 'status';
|
|
7
|
+
event: NativeSessionEvent;
|
|
8
|
+
text: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function nativeTimeline(events: NativeSessionEvent[]): NativeTimelineEntry[];
|
|
11
|
+
/** Client projection metadata. Never sent as a native RPC parameter. */
|
|
12
|
+
export interface NativeHistorySnapshot extends NativeSessionReadResult {
|
|
13
|
+
historyRead: {
|
|
14
|
+
pageReadCount: number;
|
|
15
|
+
pageAfters: number[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare const NATIVE_HISTORY_MESSAGES = 200;
|
|
19
|
+
export declare const NATIVE_HISTORY_SESSIONS = 10;
|
|
20
|
+
/** One durable observation per opened session/binding, never per cursor page. */
|
|
21
|
+
export declare function nativeHistoryQuery(target: NativeSessionTargetParams, ownerId: string): ResourceQuery<NativeHistorySnapshot>;
|
|
22
|
+
export declare function nativeObservationQuery<T>(method: string, params: unknown, ownerId: string): ResourceQuery<T>;
|
|
23
|
+
/** Merge fragments before bounding logical timeline entries. Never slice the raw event tail. */
|
|
24
|
+
export declare function retainNativeMessages(events: NativeSessionEvent[]): NativeSessionEvent[];
|
|
25
|
+
export declare function sameNativeHistoryIdentity(a: NativeSessionReadResult, b: NativeSessionReadResult): boolean;
|
|
26
|
+
export interface NativeHistoryReader {
|
|
27
|
+
(params: NativeSessionTargetParams & {
|
|
28
|
+
after?: number;
|
|
29
|
+
limit: number;
|
|
30
|
+
}, signal: AbortSignal): Promise<ResourceReadResult<NativeSessionReadResult>>;
|
|
31
|
+
}
|
|
32
|
+
/** Called inside the existing cache's single in-flight read and authority/store fences.
|
|
33
|
+
* Cursor drains remain read-only. Neither receipts nor pending intents are dispatched here.
|
|
34
|
+
*/
|
|
35
|
+
export declare function readNativeHistory(target: NativeSessionTargetParams, previous: NativeSessionReadResult | undefined, request: NativeHistoryReader, signal: AbortSignal): Promise<ResourceReadResult<NativeHistorySnapshot>>;
|
|
36
|
+
/** Dependencies are scoped to the authenticated reader's authorized native view.
|
|
37
|
+
* The gateway stamps and invalidates these aliases only after handler-level authorization.
|
|
38
|
+
* Cross-node inventories use an explicit owner collection, never a wildcard node.
|
|
39
|
+
*/
|
|
40
|
+
export declare function nativeObservationDependencies(method: string, params: unknown, ownerId: string): {
|
|
41
|
+
family: "profiles" | "native-session";
|
|
42
|
+
scope: "owner";
|
|
43
|
+
ownerId: string;
|
|
44
|
+
}[] | {
|
|
45
|
+
family: "profiles";
|
|
46
|
+
nodeId: string;
|
|
47
|
+
ownerId: string;
|
|
48
|
+
}[] | {
|
|
49
|
+
workerId?: string | undefined;
|
|
50
|
+
sessionId?: string | undefined;
|
|
51
|
+
family: "native-session";
|
|
52
|
+
nodeId: string;
|
|
53
|
+
ownerId: string;
|
|
54
|
+
}[];
|
|
55
|
+
/** Reject cursor/limit variants at registration. They belong only to readNativeHistory. */
|
|
56
|
+
export declare function nativeHistoryParams(value: unknown): NativeSessionTargetParams;
|
|
57
|
+
/** Durable retention counts sessions, while in-memory observation identity keeps the lease pin. */
|
|
58
|
+
export declare function nativeHistoryStorageId(query: Pick<ResourceQuery, 'id' | 'method' | 'params'>): string;
|
|
59
|
+
export declare function storedNativeHistoryMatches(target: NativeSessionTargetParams, value: unknown): value is NativeSessionReadResult;
|
|
60
|
+
export declare function nativeHistoryCanAct(observation: {
|
|
61
|
+
status: string;
|
|
62
|
+
data?: NativeSessionReadResult;
|
|
63
|
+
} | undefined, rendered: NativeSessionReadResult | undefined, connected: boolean): boolean;
|
|
64
|
+
//# sourceMappingURL=native-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-history.d.ts","sourceRoot":"","sources":["../../src/client-cache/native-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,KAAK,aAAa,EAA0C,MAAM,eAAe,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,mBAAmB,EAAE,CAyElF;AAED,wEAAwE;AACxE,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,WAAW,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9D;AAED,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,GACd,aAAa,CAAC,qBAAqB,CAAC,CAMtC;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,GACd,aAAa,CAAC,CAAC,CAAC,CAElB;AAED,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE,CAkBvF;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,uBAAuB,EAC1B,CAAC,EAAE,uBAAuB,GACzB,OAAO,CAcT;AAmBD,MAAM,WAAW,mBAAmB;IAClC,CACE,MAAM,EAAE,yBAAyB,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACrE,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAC;CACzD;AASD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,EAC7C,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC,CAyEpD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;IA4B7F;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAqB7E;AAED,mGAAmG;AACnG,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,GACrD,MAAM,CAIR;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAalC;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,uBAAuB,CAAA;CAAE,GAAG,SAAS,EAC3E,QAAQ,EAAE,uBAAuB,GAAG,SAAS,EAC7C,SAAS,EAAE,OAAO,GACjB,OAAO,CAQT"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { Methods } from '../rpc/registry.js';
|
|
2
|
+
import { resourceQuery } from './registry.js';
|
|
3
|
+
export function nativeTimeline(events) {
|
|
4
|
+
const entries = [];
|
|
5
|
+
const userCommands = new Set();
|
|
6
|
+
const tools = new Map();
|
|
7
|
+
const prompts = new Map();
|
|
8
|
+
for (const event of events) {
|
|
9
|
+
if ((event.type === 'command.submitted' || event.type === 'command.accepted') &&
|
|
10
|
+
event.commandId &&
|
|
11
|
+
event.text !== undefined &&
|
|
12
|
+
!prompts.has(event.commandId))
|
|
13
|
+
prompts.set(event.commandId, event);
|
|
14
|
+
}
|
|
15
|
+
for (const event of events) {
|
|
16
|
+
if (event.commandId && !userCommands.has(event.commandId)) {
|
|
17
|
+
const prompt = prompts.get(event.commandId);
|
|
18
|
+
if (prompt) {
|
|
19
|
+
userCommands.add(event.commandId);
|
|
20
|
+
entries.push({ key: prompt.sequence, kind: 'user', event: prompt, text: prompt.text });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (event.type === 'text.delta') {
|
|
24
|
+
const last = entries.at(-1);
|
|
25
|
+
if (last?.kind === 'assistant' &&
|
|
26
|
+
last.event.commandId === event.commandId &&
|
|
27
|
+
last.event.generation === event.generation) {
|
|
28
|
+
last.text += event.text ?? '';
|
|
29
|
+
}
|
|
30
|
+
else
|
|
31
|
+
entries.push({ key: event.sequence, kind: 'assistant', event, text: event.text ?? '' });
|
|
32
|
+
}
|
|
33
|
+
else if (event.type === 'tool.started' || event.type === 'tool.completed') {
|
|
34
|
+
const identity = event.nativeId && JSON.stringify([event.generation, event.commandId, event.nativeId]);
|
|
35
|
+
const previous = identity ? tools.get(identity) : undefined;
|
|
36
|
+
if (previous) {
|
|
37
|
+
const completed = previous.event.type === 'tool.completed' ? previous.event : event;
|
|
38
|
+
const started = event.type === 'tool.started' ? event : previous.event;
|
|
39
|
+
previous.event = {
|
|
40
|
+
...completed,
|
|
41
|
+
tool: {
|
|
42
|
+
...started.tool,
|
|
43
|
+
...completed.tool,
|
|
44
|
+
name: started.tool?.name ?? completed.tool?.name ?? 'Tool',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const entry = {
|
|
50
|
+
key: event.sequence,
|
|
51
|
+
kind: 'tool',
|
|
52
|
+
event,
|
|
53
|
+
text: event.tool?.name ?? 'Tool',
|
|
54
|
+
};
|
|
55
|
+
entries.push(entry);
|
|
56
|
+
if (identity)
|
|
57
|
+
tools.set(identity, entry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (['turn.completed', 'session.closed', 'error'].includes(event.type)) {
|
|
61
|
+
entries.push({
|
|
62
|
+
key: event.sequence,
|
|
63
|
+
kind: 'status',
|
|
64
|
+
event,
|
|
65
|
+
text: event.text ??
|
|
66
|
+
(event.type === 'session.closed'
|
|
67
|
+
? `Session ${event.status ?? 'closed'}`
|
|
68
|
+
: event.type === 'error'
|
|
69
|
+
? 'Runner error'
|
|
70
|
+
: `Turn ${event.status ?? 'completed'}`),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return entries;
|
|
75
|
+
}
|
|
76
|
+
export const NATIVE_HISTORY_MESSAGES = 200;
|
|
77
|
+
export const NATIVE_HISTORY_SESSIONS = 10;
|
|
78
|
+
/** One durable observation per opened session/binding, never per cursor page. */
|
|
79
|
+
export function nativeHistoryQuery(target, ownerId) {
|
|
80
|
+
return nativeObservationQuery(Methods.NATIVE_SESSION_READ, nativeHistoryParams(target), ownerId);
|
|
81
|
+
}
|
|
82
|
+
export function nativeObservationQuery(method, params, ownerId) {
|
|
83
|
+
return resourceQuery(method, params, ownerId);
|
|
84
|
+
}
|
|
85
|
+
/** Merge fragments before bounding logical timeline entries. Never slice the raw event tail. */
|
|
86
|
+
export function retainNativeMessages(events) {
|
|
87
|
+
const timeline = nativeTimeline(events);
|
|
88
|
+
let messages = 0;
|
|
89
|
+
let start = timeline.length;
|
|
90
|
+
while (start > 0 && messages < NATIVE_HISTORY_MESSAGES) {
|
|
91
|
+
start--;
|
|
92
|
+
if (timeline[start].kind === 'user' || timeline[start].kind === 'assistant')
|
|
93
|
+
messages++;
|
|
94
|
+
}
|
|
95
|
+
let statuses = 0;
|
|
96
|
+
const retained = timeline
|
|
97
|
+
.slice(start)
|
|
98
|
+
.reverse()
|
|
99
|
+
.filter((entry) => entry.kind !== 'status' || ++statuses <= NATIVE_HISTORY_MESSAGES)
|
|
100
|
+
.reverse();
|
|
101
|
+
return retained.map((entry) => ({
|
|
102
|
+
...entry.event,
|
|
103
|
+
...(entry.kind === 'assistant' || entry.kind === 'user' ? { text: entry.text } : {}),
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
export function sameNativeHistoryIdentity(a, b) {
|
|
107
|
+
const identity = (page) => JSON.stringify([
|
|
108
|
+
page.session.id,
|
|
109
|
+
page.session.executionNodeId,
|
|
110
|
+
page.session.ownerPrincipalId,
|
|
111
|
+
page.session.profileId,
|
|
112
|
+
page.session.accountContextId,
|
|
113
|
+
page.session.nativeSessionId,
|
|
114
|
+
page.session.generation,
|
|
115
|
+
page.session.workerLeaseId,
|
|
116
|
+
page.scope?.leaseId,
|
|
117
|
+
]);
|
|
118
|
+
return identity(a) === identity(b);
|
|
119
|
+
}
|
|
120
|
+
/** A paged observation can claim only the minimum revision sampled across its pages. */
|
|
121
|
+
function intersectStamps(a, b) {
|
|
122
|
+
if (!a || !b || a.epoch !== b.epoch)
|
|
123
|
+
return undefined;
|
|
124
|
+
return {
|
|
125
|
+
epoch: a.epoch,
|
|
126
|
+
dependencies: a.dependencies.flatMap((left) => {
|
|
127
|
+
const right = b.dependencies.find((item) => JSON.stringify(item.key) === JSON.stringify(left.key));
|
|
128
|
+
return right ? [{ key: left.key, revision: Math.min(left.revision, right.revision) }] : [];
|
|
129
|
+
}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function assertHistoryNotAborted(signal) {
|
|
133
|
+
if (!signal.aborted)
|
|
134
|
+
return;
|
|
135
|
+
// Mobile signals support aborted but can lack the newer method and reason.
|
|
136
|
+
if (signal.reason !== undefined)
|
|
137
|
+
throw signal.reason;
|
|
138
|
+
throw Object.assign(new Error('Native history read aborted.'), { name: 'AbortError' });
|
|
139
|
+
}
|
|
140
|
+
/** Called inside the existing cache's single in-flight read and authority/store fences.
|
|
141
|
+
* Cursor drains remain read-only. Neither receipts nor pending intents are dispatched here.
|
|
142
|
+
*/
|
|
143
|
+
export async function readNativeHistory(target, previous, request, signal) {
|
|
144
|
+
let retained = previous;
|
|
145
|
+
let cursor = previous?.cursor;
|
|
146
|
+
let stamp;
|
|
147
|
+
let first = true;
|
|
148
|
+
const previousRead = previous?.historyRead;
|
|
149
|
+
let pageReadCount = previousRead?.pageReadCount ?? 0;
|
|
150
|
+
let pageAfters = previousRead?.pageAfters ?? [];
|
|
151
|
+
for (let pages = 0; pages < 1000; pages++) {
|
|
152
|
+
assertHistoryNotAborted(signal);
|
|
153
|
+
const reply = await request({ ...target, ...(cursor === undefined ? {} : { after: cursor }), limit: 200 }, signal);
|
|
154
|
+
assertHistoryNotAborted(signal);
|
|
155
|
+
pageReadCount++;
|
|
156
|
+
pageAfters = [...pageAfters.slice(-19), cursor ?? reply.data.scope?.startAfter ?? 0];
|
|
157
|
+
const page = reply.data;
|
|
158
|
+
if (page.session.id !== target.sessionId ||
|
|
159
|
+
page.session.executionNodeId !== (target.executionNodeId ?? 'local'))
|
|
160
|
+
throw Object.assign(new Error('Native history returned another session or node.'), {
|
|
161
|
+
code: 'NOT_FOUND',
|
|
162
|
+
});
|
|
163
|
+
if (target.worker &&
|
|
164
|
+
(page.scope?.leaseId !== target.worker.leaseId ||
|
|
165
|
+
page.session.workerLeaseId !== target.worker.leaseId ||
|
|
166
|
+
page.session.generation !== target.worker.generation))
|
|
167
|
+
throw Object.assign(new Error('Native worker history binding changed.'), {
|
|
168
|
+
code: 'NOT_FOUND',
|
|
169
|
+
});
|
|
170
|
+
if (retained && !sameNativeHistoryIdentity(retained, page)) {
|
|
171
|
+
throw Object.assign(new Error('Native session identity changed. Reopen it explicitly.'), {
|
|
172
|
+
code: 'NOT_FOUND',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (retained?.scope &&
|
|
176
|
+
page.scope &&
|
|
177
|
+
(retained.scope.startAfter !== page.scope.startAfter ||
|
|
178
|
+
page.scope.endAt < retained.scope.endAt ||
|
|
179
|
+
(retained.scope.released &&
|
|
180
|
+
(!page.scope.released || page.scope.endAt !== retained.scope.endAt))))
|
|
181
|
+
throw Object.assign(new Error('Native task history boundaries changed.'), {
|
|
182
|
+
code: 'NOT_FOUND',
|
|
183
|
+
});
|
|
184
|
+
let next = cursor ?? page.scope?.startAfter ?? 0;
|
|
185
|
+
const fresh = [];
|
|
186
|
+
for (const event of page.events) {
|
|
187
|
+
if (event.sessionId !== target.sessionId)
|
|
188
|
+
throw new Error('Native event belongs to another session.');
|
|
189
|
+
if (event.sequence <= next)
|
|
190
|
+
continue;
|
|
191
|
+
if (event.sequence !== next + 1)
|
|
192
|
+
throw new Error('Native history has a gap.');
|
|
193
|
+
next = event.sequence;
|
|
194
|
+
fresh.push(event);
|
|
195
|
+
}
|
|
196
|
+
if (page.cursor !== next || (page.hasMore && next === (cursor ?? page.scope?.startAfter ?? 0)))
|
|
197
|
+
throw new Error('Native history cursor did not advance consistently.');
|
|
198
|
+
stamp = first ? reply.resourceState : intersectStamps(stamp, reply.resourceState);
|
|
199
|
+
first = false;
|
|
200
|
+
retained = { ...page, events: retainNativeMessages([...(retained?.events ?? []), ...fresh]) };
|
|
201
|
+
cursor = page.cursor;
|
|
202
|
+
if (!page.hasMore)
|
|
203
|
+
return {
|
|
204
|
+
data: { ...retained, historyRead: { pageReadCount, pageAfters } },
|
|
205
|
+
resourceState: stamp,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
throw new Error('Native history exceeded the bounded page drain. Retry the read explicitly.');
|
|
209
|
+
}
|
|
210
|
+
/** Dependencies are scoped to the authenticated reader's authorized native view.
|
|
211
|
+
* The gateway stamps and invalidates these aliases only after handler-level authorization.
|
|
212
|
+
* Cross-node inventories use an explicit owner collection, never a wildcard node.
|
|
213
|
+
*/
|
|
214
|
+
export function nativeObservationDependencies(method, params, ownerId) {
|
|
215
|
+
const target = (params ?? {});
|
|
216
|
+
if (!ownerId)
|
|
217
|
+
throw new Error('Native observations require the saved authenticated owner.');
|
|
218
|
+
const profiles = method === Methods.NATIVE_PROFILE_LIST || method === Methods.NATIVE_PROFILE_STATUS;
|
|
219
|
+
if (!target.executionNodeId && method !== Methods.NATIVE_SESSION_READ)
|
|
220
|
+
return [
|
|
221
|
+
{
|
|
222
|
+
family: profiles ? 'profiles' : 'native-session',
|
|
223
|
+
scope: 'owner',
|
|
224
|
+
ownerId,
|
|
225
|
+
},
|
|
226
|
+
];
|
|
227
|
+
const nodeId = target.executionNodeId ?? 'local';
|
|
228
|
+
if (profiles)
|
|
229
|
+
return [{ family: 'profiles', nodeId, ownerId }];
|
|
230
|
+
return [
|
|
231
|
+
{
|
|
232
|
+
family: 'native-session',
|
|
233
|
+
nodeId,
|
|
234
|
+
ownerId,
|
|
235
|
+
...(target.sessionId ? { sessionId: target.sessionId } : {}),
|
|
236
|
+
...(target.worker ? { workerId: target.worker.runId } : {}),
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
}
|
|
240
|
+
/** Reject cursor/limit variants at registration. They belong only to readNativeHistory. */
|
|
241
|
+
export function nativeHistoryParams(value) {
|
|
242
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
243
|
+
throw new Error('Native history requires a target.');
|
|
244
|
+
const target = value;
|
|
245
|
+
if (Object.keys(value).some((key) => !['sessionId', 'executionNodeId', 'worker'].includes(key)))
|
|
246
|
+
throw new Error('Native history observations cannot contain cursors or page limits.');
|
|
247
|
+
if (!target.sessionId || typeof target.sessionId !== 'string')
|
|
248
|
+
throw new Error('Native history requires sessionId.');
|
|
249
|
+
if (target.worker &&
|
|
250
|
+
['runId', 'contextId', 'generation', 'leaseId'].some((key) => typeof Reflect.get(target.worker, key) !== 'string' || !Reflect.get(target.worker, key)))
|
|
251
|
+
throw new Error('Native worker history requires the complete pinned binding.');
|
|
252
|
+
return {
|
|
253
|
+
sessionId: target.sessionId,
|
|
254
|
+
executionNodeId: target.executionNodeId ?? 'local',
|
|
255
|
+
...(target.worker ? { worker: target.worker } : {}),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/** Durable retention counts sessions, while in-memory observation identity keeps the lease pin. */
|
|
259
|
+
export function nativeHistoryStorageId(query) {
|
|
260
|
+
if (query.method !== Methods.NATIVE_SESSION_READ)
|
|
261
|
+
return query.id;
|
|
262
|
+
const target = nativeHistoryParams(query.params);
|
|
263
|
+
return `${Methods.NATIVE_SESSION_READ}:${JSON.stringify({ executionNodeId: target.executionNodeId, sessionId: target.sessionId })}`;
|
|
264
|
+
}
|
|
265
|
+
export function storedNativeHistoryMatches(target, value) {
|
|
266
|
+
if (!value || typeof value !== 'object')
|
|
267
|
+
return false;
|
|
268
|
+
const page = value;
|
|
269
|
+
return (page.session?.id === target.sessionId &&
|
|
270
|
+
page.session.executionNodeId === (target.executionNodeId ?? 'local') &&
|
|
271
|
+
Array.isArray(page.events) &&
|
|
272
|
+
Number.isSafeInteger(page.cursor) &&
|
|
273
|
+
(!target.worker ||
|
|
274
|
+
(page.scope?.leaseId === target.worker.leaseId &&
|
|
275
|
+
page.session.workerLeaseId === target.worker.leaseId &&
|
|
276
|
+
page.session.generation === target.worker.generation)));
|
|
277
|
+
}
|
|
278
|
+
export function nativeHistoryCanAct(observation, rendered, connected) {
|
|
279
|
+
return (connected &&
|
|
280
|
+
observation?.status === 'ready' &&
|
|
281
|
+
!!rendered &&
|
|
282
|
+
observation.data === rendered &&
|
|
283
|
+
!rendered.hasMore);
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=native-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-history.js","sourceRoot":"","sources":["../../src/client-cache/native-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Run } from '../contracts/runs.js';
|
|
2
|
+
import type { GitDiffResult } from '../rpc/git.js';
|
|
3
|
+
import { type ResourceQuery } from './registry.js';
|
|
4
|
+
import type { GatewayResourceCache, ResourceCacheTransport } from './types.js';
|
|
5
|
+
/** A pending gate or an active run the client lists. */
|
|
6
|
+
export interface ContentPrefetchTarget {
|
|
7
|
+
runId: string;
|
|
8
|
+
gate: boolean;
|
|
9
|
+
/** Orders runs of the same kind, most recent first. */
|
|
10
|
+
updatedAt?: string | number;
|
|
11
|
+
}
|
|
12
|
+
/** A retained run artifact, read from `/api/run-artifact` with its bundle digest. */
|
|
13
|
+
export interface ContentPrefetchArtifact {
|
|
14
|
+
runId: string;
|
|
15
|
+
path: string;
|
|
16
|
+
bundleDigest?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ContentPrefetchOptions {
|
|
19
|
+
/** The cache's transport: connection, capabilities and resource changes. */
|
|
20
|
+
transport: Pick<ResourceCacheTransport, 'getConnection' | 'onConnectionChange' | 'onResourceChanged'>;
|
|
21
|
+
cache: Pick<GatewayResourceCache, 'retry' | 'readContent' | 'storeContent' | 'retainContent' | 'contentWriteToken'>;
|
|
22
|
+
/** Plain RPC for reads that are not stored queries: `git.show`, `git.log` and frozen `git.diff`. */
|
|
23
|
+
request<T>(method: string, params: unknown, signal: AbortSignal): Promise<T>;
|
|
24
|
+
/** Raw bytes. An authorization refusal rejects with `code: 'AUTH_FORBIDDEN'`. */
|
|
25
|
+
readArtifact(artifact: ContentPrefetchArtifact, signal: AbortSignal): Promise<Uint8Array>;
|
|
26
|
+
/** The run's project default branch, for an active run without a stack base (`activeRunDiffBase`). */
|
|
27
|
+
defaultBranch?(run: Run): string | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface ContentPrefetcher {
|
|
30
|
+
/** Replaces the listed runs; a run no longer listed stops. */
|
|
31
|
+
setTargets(targets: readonly ContentPrefetchTarget[]): void;
|
|
32
|
+
dispose(): void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The base an active run's diff compares with, in the gateway's `publicationBaseForRun` order:
|
|
36
|
+
* the stack base, then the run's project default branch, then `main`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function activeRunDiffBase<R extends Pick<Run, 'stack'>>(run: R, defaultBranch?: (run: R) => string | undefined): string;
|
|
39
|
+
/** The active-run diff prefetch keeps: merge-base to worktree, with untracked files. */
|
|
40
|
+
export declare function activeRunDiffQuery(params: {
|
|
41
|
+
slotId: string;
|
|
42
|
+
runId: string;
|
|
43
|
+
base: string;
|
|
44
|
+
}): ResourceQuery<GitDiffResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Experimental Prefetch rules 1 to 6: fills the content cache for pending gates and active runs.
|
|
47
|
+
* It reads only while the connection advertises `capabilities.batchedContent`, and never on a timer.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createContentPrefetcher(options: ContentPrefetchOptions): ContentPrefetcher;
|
|
50
|
+
//# sourceMappingURL=prefetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../../src/client-cache/prefetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0C,GAAG,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAoC,MAAM,eAAe,CAAC;AAUrF,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,eAAe,CAAC;AAElE,OAAO,KAAK,EACV,oBAAoB,EAEpB,sBAAsB,EAIvB,MAAM,YAAY,CAAC;AAEpB,wDAAwD;AACxD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,qFAAqF;AACrF,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,SAAS,EAAE,IAAI,CACb,sBAAsB,EACtB,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAC7D,CAAC;IACF,KAAK,EAAE,IAAI,CACT,oBAAoB,EACpB,OAAO,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,mBAAmB,CACjF,CAAC;IACF,oGAAoG;IACpG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,iFAAiF;IACjF,YAAY,CAAC,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1F,sGAAsG;IACtG,aAAa,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,UAAU,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAC5D,OAAO,IAAI,IAAI,CAAC;CACjB;AAkED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,GAC7C,MAAM,CAER;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,aAAa,CAAC,aAAa,CAAC,CAM/B;AAsBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,iBAAiB,CA+d1F"}
|