@defrex/autobuild 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/SPEC.md +323 -26
- package/bin/ab-build-runner.ts +8 -2
- package/docs/architecture.md +166 -14
- package/docs/assets/headline-wide.png +0 -0
- package/docs/configuration.md +175 -28
- package/docs/hosted-dispatcher.md +69 -13
- package/docs/operator-api.md +2 -2
- package/docs/remote-store-protocol.md +204 -16
- package/docs/remote-ticket-protocol.md +1 -1
- package/docs/setup.md +12 -9
- package/docs/website.md +14 -0
- package/package.json +45 -23
- package/packages/core/src/cli/artifact.ts +130 -6
- package/packages/core/src/cli/binary.ts +9 -1
- package/packages/core/src/cli/build-control.ts +110 -13
- package/packages/core/src/cli/context.ts +46 -0
- package/packages/core/src/cli/dashboard/facts.ts +215 -0
- package/packages/core/src/cli/dashboard/frame-parse.ts +223 -0
- package/packages/core/src/cli/dashboard/model.ts +141 -153
- package/packages/core/src/cli/dashboard/poll.ts +76 -12
- package/packages/core/src/cli/dashboard/render.ts +34 -5
- package/packages/core/src/cli/dispatch-frontend.ts +54 -5
- package/packages/core/src/cli/dispatch-process.ts +1 -13
- package/packages/core/src/cli/dispatch.ts +392 -75
- package/packages/core/src/cli/harvest.ts +122 -8
- package/packages/core/src/cli/help.ts +62 -9
- package/packages/core/src/cli/init-readiness-remote.ts +110 -0
- package/packages/core/src/cli/init-readiness-shared.ts +72 -0
- package/packages/core/src/cli/init-validation.ts +266 -222
- package/packages/core/src/cli/installation.ts +50 -8
- package/packages/core/src/cli/main.ts +70 -11
- package/packages/core/src/cli/mcp.ts +23 -1
- package/packages/core/src/cli/plugin.ts +7 -4
- package/packages/core/src/cli/remote-poll.ts +277 -0
- package/packages/core/src/cli/repo-state.ts +22 -0
- package/packages/core/src/cli/repository-status.ts +39 -1
- package/packages/core/src/cli/self-update.ts +77 -2
- package/packages/core/src/cli/status.ts +150 -28
- package/packages/core/src/cli/terminals.ts +2 -1
- package/packages/core/src/cli/ticket-assets.ts +247 -0
- package/packages/core/src/cli/ticket.ts +453 -8
- package/packages/core/src/cli/wait.ts +157 -41
- package/packages/core/src/cli/watch.ts +138 -168
- package/packages/core/src/config/live.ts +23 -0
- package/packages/core/src/config/pipeline-source.ts +388 -0
- package/packages/core/src/config/schema.ts +251 -19
- package/packages/core/src/events/catalog.ts +1 -0
- package/packages/core/src/events/globs.ts +47 -0
- package/packages/core/src/events/payloads.ts +52 -2
- package/packages/core/src/events/repository.ts +52 -1
- package/packages/core/src/events/sessions.ts +69 -10
- package/packages/core/src/events/workspace-remote.ts +12 -0
- package/packages/core/src/integration/harness.ts +115 -2
- package/packages/core/src/kernel/__snapshots__/reducer-registry.test.ts.snap +1369 -0
- package/packages/core/src/kernel/auto-merge-default.ts +157 -0
- package/packages/core/src/kernel/auto-merge.ts +99 -22
- package/packages/core/src/kernel/dispatch-settings.ts +42 -17
- package/packages/core/src/kernel/dispatch-status.ts +23 -0
- package/packages/core/src/kernel/engine.ts +9 -438
- package/packages/core/src/kernel/generators/build-log.ts +259 -0
- package/packages/core/src/kernel/generators/repository-journals.ts +206 -0
- package/packages/core/src/kernel/generators/session-log.ts +72 -0
- package/packages/core/src/kernel/harvest.ts +62 -18
- package/packages/core/src/kernel/incremental-contract.ts +75 -0
- package/packages/core/src/kernel/incremental-fixtures.ts +211 -0
- package/packages/core/src/kernel/incremental.ts +53 -0
- package/packages/core/src/kernel/log-index.ts +620 -0
- package/packages/core/src/kernel/phases.ts +16 -2
- package/packages/core/src/kernel/pr-attachments.ts +164 -46
- package/packages/core/src/kernel/reducer-registry.ts +164 -0
- package/packages/core/src/kernel/reducer.ts +254 -73
- package/packages/core/src/operator/annotations.ts +6 -0
- package/packages/core/src/operator/control.ts +19 -5
- package/packages/core/src/operator/index.ts +71 -6
- package/packages/core/src/operator/query.ts +253 -24
- package/packages/core/src/operator/read-view.ts +98 -0
- package/packages/core/src/operator/registry.ts +55 -10
- package/packages/core/src/operator/requests.ts +9 -6
- package/packages/core/src/operator/sandbox-host.ts +140 -0
- package/packages/core/src/operator/sandbox.ts +247 -14
- package/packages/core/src/operator/ticket-source-backend.ts +47 -0
- package/packages/core/src/orchestrator/approvals.ts +115 -0
- package/packages/core/src/orchestrator/conversation.ts +167 -0
- package/packages/core/src/orchestrator/model.ts +86 -0
- package/packages/core/src/orchestrator/prompt.ts +61 -0
- package/packages/core/src/orchestrator/tools.ts +117 -0
- package/packages/core/src/orchestrator/turn-runner.ts +457 -0
- package/packages/core/src/plugin-sdk/index.ts +51 -1
- package/packages/core/src/plugins/load.ts +135 -7
- package/packages/core/src/plugins/manifest.ts +183 -10
- package/packages/core/src/plugins/registry.ts +73 -4
- package/packages/core/src/ports/forge/create.ts +1 -1
- package/packages/core/src/ports/forge/fake.ts +31 -0
- package/packages/core/src/ports/forge/github-transport.ts +13 -2
- package/packages/core/src/ports/forge/github.ts +13 -2
- package/packages/core/src/ports/forge/local-git.ts +31 -1
- package/packages/core/src/ports/runner/claude.ts +2 -2
- package/packages/core/src/ports/runner/codex.ts +6 -2
- package/packages/core/src/ports/runner/fake.ts +7 -1
- package/packages/core/src/ports/runner/pi.ts +8 -6
- package/packages/core/src/ports/runner/provider-error.ts +13 -3
- package/packages/core/src/ports/tickets/fake.ts +5 -1
- package/packages/core/src/ports/tickets/file.ts +169 -48
- package/packages/core/src/ports/tickets/{remote-index.ts → hosted-index.ts} +3 -2
- package/packages/core/src/ports/tickets/linear.ts +33 -1
- package/packages/core/src/ports/tickets/operations.ts +1 -1
- package/packages/core/src/ports/tickets/remote.ts +8 -1
- package/packages/core/src/ports/types.ts +49 -3
- package/packages/core/src/ports/workspace/builtin-capabilities.ts +114 -0
- package/packages/core/src/ports/workspace/create.ts +74 -39
- package/packages/core/src/ports/workspace/distribution-archive.ts +171 -12
- package/packages/core/src/ports/workspace/fake.ts +169 -4
- package/packages/core/src/ports/workspace/git-worktree.ts +246 -26
- package/packages/core/src/ports/workspace/github-origin.ts +36 -0
- package/packages/core/src/ports/workspace/operator-sandbox.ts +7 -1
- package/packages/core/src/ports/workspace/provider-capabilities.ts +171 -0
- package/packages/core/src/ports/workspace/vercel-capabilities.ts +110 -0
- package/packages/core/src/ports/workspace/vercel-sandbox.ts +142 -114
- package/packages/core/src/processes/build-child.ts +17 -2
- package/packages/core/src/processes/build-execution-state.ts +68 -15
- package/packages/core/src/processes/build-runner.ts +238 -93
- package/packages/core/src/processes/dispatcher-selectors.ts +123 -0
- package/packages/core/src/processes/dispatcher.ts +501 -201
- package/packages/core/src/processes/execution-settlement.ts +72 -39
- package/packages/core/src/processes/harvest-child.ts +5 -0
- package/packages/core/src/processes/harvest-execution-state.ts +41 -29
- package/packages/core/src/processes/harvest-runner.ts +66 -19
- package/packages/core/src/processes/harvest.ts +196 -24
- package/packages/core/src/processes/infrastructure-failure-budget.ts +31 -18
- package/packages/core/src/processes/orchestrator-tick.ts +360 -0
- package/packages/core/src/processes/publication-state.ts +164 -52
- package/packages/core/src/processes/repo-view.ts +1436 -0
- package/packages/core/src/processes/sandbox-state.ts +36 -2
- package/packages/core/src/processes/tick-state.ts +33 -0
- package/packages/core/src/store/adapter.ts +41 -0
- package/packages/core/src/store/build-scope.ts +90 -0
- package/packages/core/src/store/contract.ts +1205 -0
- package/packages/core/src/store/digest.ts +102 -0
- package/packages/core/src/store/local/schema.ts +46 -2
- package/packages/core/src/store/local/store.ts +445 -4
- package/packages/core/src/store/memory.ts +246 -0
- package/packages/core/src/store/new-build.ts +17 -0
- package/packages/core/src/store/phase-session.ts +94 -0
- package/packages/core/src/store/remote/client.ts +310 -2
- package/packages/core/src/store/remote/index.ts +14 -2
- package/packages/core/src/store/remote/protocol.ts +115 -12
- package/packages/core/src/store/remote/version.ts +6 -2
- package/packages/core/src/store/repo-state-events.ts +205 -0
- package/packages/core/src/store/retention.ts +7 -0
- package/packages/core/src/store/session-handle.ts +94 -0
- package/packages/core/src/{sessions/reducer.ts → store/session-reducer.ts} +79 -19
- package/packages/core/src/store/snapshots.ts +88 -0
- package/packages/core/src/store/streams/session-writer.ts +42 -2
- package/packages/core/src/store/streams/wait.ts +4 -5
- package/packages/core/src/store/ticket-assets.ts +458 -0
- package/packages/core/src/store/types.ts +160 -1
- package/packages/core/src/testing/index.ts +59 -0
- package/skills/code-review/SKILL.md +5 -1
- package/skills/guide/SKILL.md +152 -40
- package/skills/guide/references/operator-api.md +2 -2
- package/skills/guide/references/plugin-authoring.md +17 -0
- package/skills/guide/references/remote-store-protocol.md +204 -16
- package/skills/guide/references/remote-ticket-protocol.md +1 -1
- package/skills/guide/references/setup.md +12 -9
- package/skills/implement/SKILL.md +3 -0
- package/skills/operate/SKILL.md +126 -0
- package/skills/plan/SKILL.md +4 -0
- package/skills/plan-review/SKILL.md +5 -1
- package/skills/spec/SKILL.md +46 -3
- package/skills/tickets/SKILL.md +57 -5
- package/packages/core/src/cli/dashboard/frame-image.ts +0 -373
- package/packages/core/src/cli/store-opening.contract.ts +0 -289
- package/packages/core/src/cli/testkit.ts +0 -194
- package/packages/core/src/markdown.ts +0 -67
- package/packages/core/src/operator/client.ts +0 -311
- package/packages/core/src/operator/server.ts +0 -616
- package/packages/core/src/operator/sessions.ts +0 -223
- package/packages/core/src/ports/runner/live-contract-fixture.ts +0 -176
- package/packages/core/src/ports/tickets/remote-server.ts +0 -185
- package/packages/core/src/store/remote/server.ts +0 -923
- package/packages/core/src/testing/store-failures.ts +0 -32
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* orphaned environment.
|
|
10
10
|
*/
|
|
11
11
|
import type { RepositoryEvent } from '../events/repository'
|
|
12
|
+
import { defineReducer, type IncrementalReducer } from '../kernel/incremental'
|
|
12
13
|
|
|
13
14
|
export type SandboxEnvironmentState = 'live' | 'stopped' | 'released'
|
|
14
15
|
|
|
@@ -22,6 +23,12 @@ export interface SandboxEnvironmentSnapshot {
|
|
|
22
23
|
* `[orchestrator].sandbox.idleMinutes`. */
|
|
23
24
|
lastEvidenceTs: string
|
|
24
25
|
sessionId?: string
|
|
26
|
+
/** The base branch head the fresh provision selected; carried forward
|
|
27
|
+
* through later lifecycle facts (the base head cannot change without a
|
|
28
|
+
* fresh provision, which overwrites it) — the publication precondition's
|
|
29
|
+
* reference point, read by the publish operation. Absent on snapshots
|
|
30
|
+
* provisioned before this field existed. */
|
|
31
|
+
baseSha?: string
|
|
25
32
|
}
|
|
26
33
|
|
|
27
34
|
type MutableSnapshot = {
|
|
@@ -31,6 +38,7 @@ type MutableSnapshot = {
|
|
|
31
38
|
state: SandboxEnvironmentState
|
|
32
39
|
lastEvidenceTs: string
|
|
33
40
|
sessionId?: string
|
|
41
|
+
baseSha?: string
|
|
34
42
|
}
|
|
35
43
|
|
|
36
44
|
/** Per-environment sandbox state, keyed deterministically by
|
|
@@ -38,7 +46,18 @@ type MutableSnapshot = {
|
|
|
38
46
|
* derived from both). Latest fact wins; `released` environments stay in the
|
|
39
47
|
* result with their closing evidence so callers can distinguish them. */
|
|
40
48
|
export function sandboxStates(events: readonly RepositoryEvent[]): SandboxEnvironmentSnapshot[] {
|
|
41
|
-
|
|
49
|
+
return sandboxStatesReducer.reduce(events)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** The carried accumulator: environments in `Map` insertion order (a re-set
|
|
53
|
+
* of an existing id keeps its position). */
|
|
54
|
+
export type SandboxStatesAcc = MutableSnapshot[]
|
|
55
|
+
|
|
56
|
+
/** Bump when `SandboxStatesAcc`'s shape or fold semantics change. */
|
|
57
|
+
export const SANDBOX_STATES_REDUCER_VERSION = 1
|
|
58
|
+
|
|
59
|
+
function foldSandboxStates(acc: SandboxStatesAcc, events: readonly RepositoryEvent[]): void {
|
|
60
|
+
const byEnvironment = new Map<string, MutableSnapshot>(acc.map((s) => [s.environmentId, s]))
|
|
42
61
|
for (const event of events) {
|
|
43
62
|
const ts = event.ts
|
|
44
63
|
if (event.type === 'orchestrator.sandbox.provisioned') {
|
|
@@ -49,6 +68,7 @@ export function sandboxStates(events: readonly RepositoryEvent[]): SandboxEnviro
|
|
|
49
68
|
state: 'live',
|
|
50
69
|
lastEvidenceTs: ts,
|
|
51
70
|
...(event.payload.sessionId !== undefined ? { sessionId: event.payload.sessionId } : {}),
|
|
71
|
+
...(event.payload.baseSha !== undefined ? { baseSha: event.payload.baseSha } : {}),
|
|
52
72
|
})
|
|
53
73
|
} else if (event.type === 'orchestrator.sandbox.resumed') {
|
|
54
74
|
const previous = byEnvironment.get(event.payload.environmentId)
|
|
@@ -63,6 +83,7 @@ export function sandboxStates(events: readonly RepositoryEvent[]): SandboxEnviro
|
|
|
63
83
|
: previous?.sessionId !== undefined
|
|
64
84
|
? { sessionId: previous.sessionId }
|
|
65
85
|
: {}),
|
|
86
|
+
...(previous?.baseSha !== undefined ? { baseSha: previous.baseSha } : {}),
|
|
66
87
|
})
|
|
67
88
|
} else if (event.type === 'orchestrator.sandbox.activity') {
|
|
68
89
|
const current = byEnvironment.get(event.payload.environmentId)
|
|
@@ -94,8 +115,21 @@ export function sandboxStates(events: readonly RepositoryEvent[]): SandboxEnviro
|
|
|
94
115
|
state: 'released',
|
|
95
116
|
lastEvidenceTs: ts,
|
|
96
117
|
...(existing?.sessionId !== undefined ? { sessionId: existing.sessionId } : {}),
|
|
118
|
+
...(existing?.baseSha !== undefined ? { baseSha: existing.baseSha } : {}),
|
|
97
119
|
})
|
|
98
120
|
}
|
|
99
121
|
}
|
|
100
|
-
|
|
122
|
+
acc.length = 0
|
|
123
|
+
acc.push(...byEnvironment.values())
|
|
101
124
|
}
|
|
125
|
+
|
|
126
|
+
export const sandboxStatesReducer: IncrementalReducer<
|
|
127
|
+
SandboxStatesAcc,
|
|
128
|
+
RepositoryEvent,
|
|
129
|
+
SandboxEnvironmentSnapshot[]
|
|
130
|
+
> = defineReducer({
|
|
131
|
+
version: SANDBOX_STATES_REDUCER_VERSION,
|
|
132
|
+
initial: (): SandboxStatesAcc => [],
|
|
133
|
+
fold: foldSandboxStates,
|
|
134
|
+
finish: (acc) => acc.map((s) => ({ ...s })),
|
|
135
|
+
})
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RepositoryEvent } from '../events/repository'
|
|
2
|
+
import { defineReducer } from '../kernel/incremental'
|
|
3
|
+
|
|
4
|
+
export const OPEN_TICK_REDUCER_VERSION = 1
|
|
5
|
+
|
|
6
|
+
/** Whether the dispatcher run's latest tick boundary (started, completed or
|
|
7
|
+
* failed) is a `dispatcher.tick-started`. A factory because the run id is a
|
|
8
|
+
* parameter of the projection; the accumulator holds only the last boundary
|
|
9
|
+
* type seen for that run. */
|
|
10
|
+
export function openTickReducer(run: string) {
|
|
11
|
+
return defineReducer<{ boundary?: string }, RepositoryEvent, boolean>({
|
|
12
|
+
version: OPEN_TICK_REDUCER_VERSION,
|
|
13
|
+
initial: () => ({}),
|
|
14
|
+
fold(acc, events) {
|
|
15
|
+
for (const event of events) {
|
|
16
|
+
if (
|
|
17
|
+
'run' in event.payload &&
|
|
18
|
+
event.payload.run === run &&
|
|
19
|
+
(event.type === 'dispatcher.tick-started' ||
|
|
20
|
+
event.type === 'dispatcher.tick-completed' ||
|
|
21
|
+
event.type === 'dispatcher.tick-failed')
|
|
22
|
+
) {
|
|
23
|
+
acc.boundary = event.type
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
finish: (acc) => acc.boundary === 'dispatcher.tick-started',
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function hasOpenTick(events: readonly RepositoryEvent[], run: string): boolean {
|
|
32
|
+
return openTickReducer(run).reduce(events)
|
|
33
|
+
}
|
|
@@ -16,8 +16,39 @@ export type {
|
|
|
16
16
|
SessionEventType,
|
|
17
17
|
SessionEventWrite,
|
|
18
18
|
} from '../events/sessions'
|
|
19
|
+
export {
|
|
20
|
+
DEFAULT_TICKET_ASSET_LIMITS,
|
|
21
|
+
effectiveTicketAssetLimits,
|
|
22
|
+
loadTicketAsset,
|
|
23
|
+
resolvePinnedAsset,
|
|
24
|
+
storeTicketAssetBlobs,
|
|
25
|
+
summarizeTicketAsset,
|
|
26
|
+
TICKET_ASSET_MAX_BYTES,
|
|
27
|
+
TICKET_ASSET_MAX_ENTRIES,
|
|
28
|
+
TicketAssetValidationError,
|
|
29
|
+
validateTicketAssetInput,
|
|
30
|
+
} from './ticket-assets'
|
|
31
|
+
export type {
|
|
32
|
+
TicketAsset,
|
|
33
|
+
TicketAssetContentEntry,
|
|
34
|
+
TicketAssetEntry,
|
|
35
|
+
TicketAssetEntryInput,
|
|
36
|
+
TicketAssetInput,
|
|
37
|
+
TicketAssetLayout,
|
|
38
|
+
TicketAssetLimits,
|
|
39
|
+
TicketAssetMeta,
|
|
40
|
+
TicketAssetSummary,
|
|
41
|
+
} from './ticket-assets'
|
|
42
|
+
export { validateCreatedEvent } from './new-build'
|
|
19
43
|
export { createBuildScopedStore } from './build-scope'
|
|
20
44
|
export { createSessionScopedStore } from './session-handle'
|
|
45
|
+
export { DIGEST_EVENT_TYPES, type DigestEventRow, reduceBuildDigest } from './digest'
|
|
46
|
+
export {
|
|
47
|
+
projectRepositoryStateEvents,
|
|
48
|
+
REPOSITORY_RUN_SCOPED_EVENT_TYPES,
|
|
49
|
+
REPOSITORY_STATE_EVENT_TYPES,
|
|
50
|
+
readRepoStateEventsWithAnchorRecheck,
|
|
51
|
+
} from './repo-state-events'
|
|
21
52
|
export {
|
|
22
53
|
DEFAULT_ARTIFACT_RETENTION_MAX_REVISIONS,
|
|
23
54
|
DISPATCHER_RETENTION_BUILD_KINDS,
|
|
@@ -61,6 +92,7 @@ export type {
|
|
|
61
92
|
ArtifactInput,
|
|
62
93
|
ArtifactMeta,
|
|
63
94
|
BlobStore,
|
|
95
|
+
BuildDigest,
|
|
64
96
|
BuildRecord,
|
|
65
97
|
BuildScopedStore,
|
|
66
98
|
BuildStore,
|
|
@@ -78,3 +110,12 @@ export type {
|
|
|
78
110
|
Unsubscribe,
|
|
79
111
|
} from './types'
|
|
80
112
|
export { normalizeOperator } from './types'
|
|
113
|
+
export {
|
|
114
|
+
loadReducerSnapshot,
|
|
115
|
+
persistReducerSnapshot,
|
|
116
|
+
reducerSnapshotWireSchema,
|
|
117
|
+
SNAPSHOT_REDUCER_NAME,
|
|
118
|
+
snapshotScopeKey,
|
|
119
|
+
snapshotSupersedes,
|
|
120
|
+
} from './snapshots'
|
|
121
|
+
export type { ReducerSnapshot, SnapshotScope } from './snapshots'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReducerSnapshot, SnapshotScope } from './snapshots'
|
|
1
2
|
import type { EventType } from '../events/payloads'
|
|
2
3
|
import type { EventWrite } from '../events/catalog'
|
|
3
4
|
import type { RepositoryEventType, RepositoryEventWrite } from '../events/repository'
|
|
@@ -13,6 +14,7 @@ import type {
|
|
|
13
14
|
Artifact,
|
|
14
15
|
ArtifactInput,
|
|
15
16
|
ArtifactMeta,
|
|
17
|
+
BuildDigest,
|
|
16
18
|
BuildRecord,
|
|
17
19
|
BuildScopedStore,
|
|
18
20
|
BuildStore,
|
|
@@ -25,6 +27,13 @@ import type {
|
|
|
25
27
|
SubscribeOptions,
|
|
26
28
|
Unsubscribe,
|
|
27
29
|
} from './types'
|
|
30
|
+
import type {
|
|
31
|
+
TicketAsset,
|
|
32
|
+
TicketAssetInput,
|
|
33
|
+
TicketAssetLimits,
|
|
34
|
+
TicketAssetMeta,
|
|
35
|
+
TicketAssetSummary,
|
|
36
|
+
} from './ticket-assets'
|
|
28
37
|
import type {
|
|
29
38
|
StreamChunk,
|
|
30
39
|
StreamOutcome,
|
|
@@ -179,6 +188,37 @@ export function createBuildScopedStore(store: BuildStore, scope: string): BuildS
|
|
|
179
188
|
getRepoEvents(repo: string, _sinceSeq?: number): Promise<RepositoryEvent[]> {
|
|
180
189
|
return Promise.reject(new BuildScopeError(scope, 'getRepoEvents', repo))
|
|
181
190
|
},
|
|
191
|
+
getRepoStateEvents(repo: string): Promise<RepositoryEvent[]> {
|
|
192
|
+
return Promise.reject(new BuildScopeError(scope, 'getRepoStateEvents', repo))
|
|
193
|
+
},
|
|
194
|
+
getRepoHighWater(repo: string): Promise<number> {
|
|
195
|
+
return Promise.reject(new BuildScopeError(scope, 'getRepoHighWater', repo))
|
|
196
|
+
},
|
|
197
|
+
async getReducerSnapshot(
|
|
198
|
+
target: SnapshotScope,
|
|
199
|
+
reducer: string,
|
|
200
|
+
version: number,
|
|
201
|
+
): Promise<ReducerSnapshot | null> {
|
|
202
|
+
if (target.kind !== 'build') {
|
|
203
|
+
throw new BuildScopeError(scope, 'getReducerSnapshot', target.repo)
|
|
204
|
+
}
|
|
205
|
+
own('getReducerSnapshot', target.slug)
|
|
206
|
+
return store.getReducerSnapshot(target, reducer, version)
|
|
207
|
+
},
|
|
208
|
+
async putReducerSnapshot(
|
|
209
|
+
target: SnapshotScope,
|
|
210
|
+
reducer: string,
|
|
211
|
+
snapshot: ReducerSnapshot,
|
|
212
|
+
): Promise<boolean> {
|
|
213
|
+
if (target.kind !== 'build') {
|
|
214
|
+
throw new BuildScopeError(scope, 'putReducerSnapshot', target.repo)
|
|
215
|
+
}
|
|
216
|
+
own('putReducerSnapshot', target.slug)
|
|
217
|
+
return store.putReducerSnapshot(target, reducer, snapshot)
|
|
218
|
+
},
|
|
219
|
+
getRepoBuildDigests(repo: string): Promise<Map<string, BuildDigest>> {
|
|
220
|
+
return Promise.reject(new BuildScopeError(scope, 'getRepoBuildDigests', repo))
|
|
221
|
+
},
|
|
182
222
|
putRepoArtifact(repo: string, _artifact: ArtifactInput): Promise<RepositoryArtifactMeta> {
|
|
183
223
|
return Promise.reject(new BuildScopeError(scope, 'putRepoArtifact', repo))
|
|
184
224
|
},
|
|
@@ -192,6 +232,49 @@ export function createBuildScopedStore(store: BuildStore, scope: string): BuildS
|
|
|
192
232
|
listRepoArtifacts(repo: string, _kind?: string): Promise<RepositoryArtifactMeta[]> {
|
|
193
233
|
return Promise.reject(new BuildScopeError(scope, 'listRepoArtifacts', repo))
|
|
194
234
|
},
|
|
235
|
+
ticketAssetLimits(repo: string): Promise<TicketAssetLimits> {
|
|
236
|
+
return Promise.reject(new BuildScopeError(scope, 'ticketAssetLimits', repo))
|
|
237
|
+
},
|
|
238
|
+
putTicketAsset(
|
|
239
|
+
repo: string,
|
|
240
|
+
_ticketId: string,
|
|
241
|
+
_asset: TicketAssetInput,
|
|
242
|
+
): Promise<TicketAssetMeta> {
|
|
243
|
+
return Promise.reject(new BuildScopeError(scope, 'putTicketAsset', repo))
|
|
244
|
+
},
|
|
245
|
+
getTicketAsset(
|
|
246
|
+
repo: string,
|
|
247
|
+
_ticketId: string,
|
|
248
|
+
_kind: string,
|
|
249
|
+
_name: string,
|
|
250
|
+
_rev?: number,
|
|
251
|
+
): Promise<TicketAsset | null> {
|
|
252
|
+
return Promise.reject(new BuildScopeError(scope, 'getTicketAsset', repo))
|
|
253
|
+
},
|
|
254
|
+
async getPinnedTicketAsset(
|
|
255
|
+
slug: string,
|
|
256
|
+
kind: string,
|
|
257
|
+
name: string,
|
|
258
|
+
rev?: number,
|
|
259
|
+
): Promise<TicketAsset | null> {
|
|
260
|
+
own('getPinnedTicketAsset', slug)
|
|
261
|
+
return store.getPinnedTicketAsset(slug, kind, name, rev)
|
|
262
|
+
},
|
|
263
|
+
listTicketAssets(
|
|
264
|
+
repo: string,
|
|
265
|
+
_ticketId: string,
|
|
266
|
+
_opts?: { revisions?: boolean },
|
|
267
|
+
): Promise<TicketAssetSummary[]> {
|
|
268
|
+
return Promise.reject(new BuildScopeError(scope, 'listTicketAssets', repo))
|
|
269
|
+
},
|
|
270
|
+
removeTicketAsset(
|
|
271
|
+
repo: string,
|
|
272
|
+
_ticketId: string,
|
|
273
|
+
_kind: string,
|
|
274
|
+
_name: string,
|
|
275
|
+
): Promise<TicketAssetMeta | null> {
|
|
276
|
+
return Promise.reject(new BuildScopeError(scope, 'removeTicketAsset', repo))
|
|
277
|
+
},
|
|
195
278
|
claimRepoLease(repo: string, _holder: string, _ttlMs: number): Promise<boolean> {
|
|
196
279
|
return Promise.reject(new BuildScopeError(scope, 'claimRepoLease', repo))
|
|
197
280
|
},
|
|
@@ -216,6 +299,13 @@ export function createBuildScopedStore(store: BuildStore, scope: string): BuildS
|
|
|
216
299
|
): Promise<SessionEventEnvelope<T>> {
|
|
217
300
|
return Promise.reject(new BuildScopeError(scope, 'appendSessionEvent', id))
|
|
218
301
|
},
|
|
302
|
+
appendSessionEventIfCurrent<T extends SessionEventType>(
|
|
303
|
+
id: string,
|
|
304
|
+
_expectedSeq: number,
|
|
305
|
+
_event: SessionEventWrite<T>,
|
|
306
|
+
): Promise<SessionEventEnvelope<T> | null> {
|
|
307
|
+
return Promise.reject(new BuildScopeError(scope, 'appendSessionEventIfCurrent', id))
|
|
308
|
+
},
|
|
219
309
|
getSessionEvents(id: string, _sinceSeq?: number): Promise<SessionEvent[]> {
|
|
220
310
|
return Promise.reject(new BuildScopeError(scope, 'getSessionEvents', id))
|
|
221
311
|
},
|