@bevel-software/platform-shared 0.34.0 → 0.36.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/dist/git/pr.types.d.ts +1 -1
- package/dist/git/types.d.ts +4 -4
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/{workflow → version-control}/events.d.ts +7 -7
- package/dist/version-control/events.d.ts.map +1 -0
- package/dist/{workflow → version-control}/events.js +2 -2
- package/dist/version-control/events.js.map +1 -0
- package/dist/{workflow → version-control}/interface.d.ts +19 -27
- package/dist/{workflow → version-control}/interface.d.ts.map +1 -1
- package/dist/version-control/interface.js +14 -0
- package/dist/version-control/interface.js.map +1 -0
- package/dist/{workflow → version-control}/types.d.ts +18 -19
- package/dist/version-control/types.d.ts.map +1 -0
- package/dist/{workflow → version-control}/types.js +3 -3
- package/dist/version-control/types.js.map +1 -0
- package/dist/workspace/kb-layout.d.ts +6 -6
- package/dist/workspace/kb-layout.js +9 -9
- package/package.json +2 -2
- package/src/git/pr.types.ts +1 -1
- package/src/git/types.ts +5 -5
- package/src/index.ts +4 -4
- package/src/{workflow → version-control}/events.ts +9 -9
- package/src/{workflow → version-control}/interface.ts +20 -28
- package/src/{workflow → version-control}/types.ts +18 -19
- package/src/workspace/kb-layout.ts +9 -9
- package/dist/workflow/events.d.ts.map +0 -1
- package/dist/workflow/events.js.map +0 -1
- package/dist/workflow/interface.js +0 -20
- package/dist/workflow/interface.js.map +0 -1
- package/dist/workflow/types.d.ts.map +0 -1
- package/dist/workflow/types.js.map +0 -1
package/dist/git/pr.types.d.ts
CHANGED
|
@@ -443,7 +443,7 @@ export type UpdateChangeRequestInput = {
|
|
|
443
443
|
/**
|
|
444
444
|
* The fields of a `PATCH /api/workflow/change-requests/:number` body as the
|
|
445
445
|
* server receives them — any combination, since the body is untrusted JSON.
|
|
446
|
-
* `
|
|
446
|
+
* `VersionControlService.updateChangeRequest` checks the shape and refuses what
|
|
447
447
|
* {@link UpdateChangeRequestInput} rules out with a worded 400.
|
|
448
448
|
*/
|
|
449
449
|
export interface UpdateChangeRequestFields {
|
package/dist/git/types.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export type MergeIntoBranchOutcome = {
|
|
|
144
144
|
/**
|
|
145
145
|
* What a merge's `publish` may do while the merge still holds its workspace:
|
|
146
146
|
* `push` the branch, and `pullRebase` it onto its moved remote with the merge
|
|
147
|
-
* kept as a merge — the two moves every
|
|
147
|
+
* kept as a merge — the two moves every version-control push's cooperative recovery
|
|
148
148
|
* is made of, so that recovery can run inside the reservation unchanged.
|
|
149
149
|
*/
|
|
150
150
|
export interface ReservedPushOps {
|
|
@@ -166,7 +166,7 @@ export interface IGitService {
|
|
|
166
166
|
* anything is written. `publish`, when given, runs right after the merge
|
|
167
167
|
* commit, inside the same reservation, over the pushes it may make
|
|
168
168
|
* (`ReservedPushOps`): the caller brings the one push policy every
|
|
169
|
-
*
|
|
169
|
+
* version-control push takes, and whatever it throws leaves the merge commit on
|
|
170
170
|
* the local branch, unpublished, the checkout clean (a replay that
|
|
171
171
|
* conflicts undoes itself), a later call answering `nothing-to-merge`
|
|
172
172
|
* without pushing — the commit is published as any local commit is.
|
|
@@ -430,7 +430,7 @@ export interface IGitService {
|
|
|
430
430
|
* record the target tip, and reading that commit's change would answer with
|
|
431
431
|
* another request's files. It must be in the clone, have a second parent, and
|
|
432
432
|
* carry a subject naming this request; anything else rejects with
|
|
433
|
-
* `
|
|
433
|
+
* `VersionControlValidationError`, which every caller reads as "the file set could
|
|
434
434
|
* not be resolved" and answers fail-closed (no files, so author-only) rather
|
|
435
435
|
* than reaching for a fetch per request.
|
|
436
436
|
*
|
|
@@ -458,7 +458,7 @@ export interface IGitService {
|
|
|
458
458
|
* the head it was given against is not the detail's `headSha`, so answering
|
|
459
459
|
* the merge commit there would report every approval a merged request ever
|
|
460
460
|
* collected as stale. Same verification, same no-network contract and the same
|
|
461
|
-
* `
|
|
461
|
+
* `VersionControlValidationError` as {@link changedFilesOfAppliedChange}.
|
|
462
462
|
*/
|
|
463
463
|
appliedChangeShas(workspaceId: string, applied: AppliedChangeRef): Promise<{
|
|
464
464
|
baseSha: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export * from './git/protected.js';
|
|
|
19
19
|
export * from './git/branchAuthor.js';
|
|
20
20
|
export * from './git/review.types.js';
|
|
21
21
|
export * from './git/legacy-change-request-body.js';
|
|
22
|
-
export * from './
|
|
23
|
-
export * from './
|
|
24
|
-
export * from './
|
|
22
|
+
export * from './version-control/types.js';
|
|
23
|
+
export * from './version-control/interface.js';
|
|
24
|
+
export * from './version-control/events.js';
|
|
25
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,iBAAiB,CAAC;AAGhC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AAGpD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,iBAAiB,CAAC;AAGhC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AAGpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,8 +23,8 @@ export * from './git/protected.js';
|
|
|
23
23
|
export * from './git/branchAuthor.js';
|
|
24
24
|
export * from './git/review.types.js';
|
|
25
25
|
export * from './git/legacy-change-request-body.js';
|
|
26
|
-
//
|
|
27
|
-
export * from './
|
|
28
|
-
export * from './
|
|
29
|
-
export * from './
|
|
26
|
+
// Version control — abstraction layer over git/PR/change-request-review. See PLAN.md.
|
|
27
|
+
export * from './version-control/types.js';
|
|
28
|
+
export * from './version-control/interface.js';
|
|
29
|
+
export * from './version-control/events.js';
|
|
30
30
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAE1C,OAAO;AACP,cAAc,iBAAiB,CAAC;AAEhC,YAAY;AACZ,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,MAAM;AACN,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AAEpD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAE1C,OAAO;AACP,cAAc,iBAAiB,CAAC;AAEhC,YAAY;AACZ,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,MAAM;AACN,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AAEpD,sFAAsF;AACtF,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control event bus types — what the backend pushes over SSE to keep the
|
|
3
3
|
* frontend in sync with state changes, including those triggered by other
|
|
4
4
|
* users on the same branch or by the agent acting server-side.
|
|
5
5
|
*
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* **Identity + replay** — every event carries an `id` (monotonic int) and an
|
|
24
24
|
* ISO `ts`. Clients reconnecting with `Last-Event-ID: <id>` get the buffered
|
|
25
|
-
* tail replayed (server's ring buffer is finite — see `
|
|
25
|
+
* tail replayed (server's ring buffer is finite — see `VersionControlEventBus`).
|
|
26
26
|
* If `id` is older than what the buffer still has, the server sends a
|
|
27
27
|
* `{ kind: 'resync' }` instead so the client refetches the world cleanly.
|
|
28
28
|
*
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* (e.g. `file-changed` includes the new SHA — UI only refreshes if the open
|
|
33
33
|
* tab's SHA differs).
|
|
34
34
|
*/
|
|
35
|
-
export interface
|
|
35
|
+
export interface VersionControlEventEnvelope {
|
|
36
36
|
/** Monotonic, process-local. Used for `Last-Event-ID` replay. */
|
|
37
37
|
id: number;
|
|
38
38
|
/** ISO timestamp the event was emitted on the backend. */
|
|
@@ -345,14 +345,14 @@ export interface AgentConnectedEvent {
|
|
|
345
345
|
/** When the first request landed, ISO 8601. */
|
|
346
346
|
at: string;
|
|
347
347
|
}
|
|
348
|
-
export type
|
|
349
|
-
export type
|
|
348
|
+
export type VersionControlEventPayload = FileChangedEvent | LockAcquiredEvent | LockReleasedEvent | FsTreeChangedEvent | DocumentUnreadableEvent | GitSyncFailedEvent | GitSyncRecoveredEvent | BranchSwitchedEvent | AgentToolCallEvent | AgentConnectedEvent | ChangeRequestOpenedEvent | ChangeRequestMergedEvent | ChangeRequestRejectedEvent | ChangeRequestEditedEvent | ChangeRequestMergeFailedEvent | ChangeRequestApplyFailedEvent | ApprovalChangedEvent | HeartbeatEvent | ResyncEvent;
|
|
349
|
+
export type VersionControlEvent = VersionControlEventEnvelope & VersionControlEventPayload;
|
|
350
350
|
/** True for events scoped to a workspace — the focus filter applies. */
|
|
351
|
-
export declare function isWorkspaceScoped(e:
|
|
351
|
+
export declare function isWorkspaceScoped(e: VersionControlEventPayload): e is VersionControlEventPayload & {
|
|
352
352
|
workspaceId: string;
|
|
353
353
|
};
|
|
354
354
|
/** True for events scoped to a specific user — the user filter applies. */
|
|
355
|
-
export declare function isUserScoped(e:
|
|
355
|
+
export declare function isUserScoped(e: VersionControlEventPayload): e is VersionControlEventPayload & {
|
|
356
356
|
forUserId: string;
|
|
357
357
|
};
|
|
358
358
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/version-control/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control event bus types — what the backend pushes over SSE to keep the
|
|
3
3
|
* frontend in sync with state changes, including those triggered by other
|
|
4
4
|
* users on the same branch or by the agent acting server-side.
|
|
5
5
|
*
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* **Identity + replay** — every event carries an `id` (monotonic int) and an
|
|
24
24
|
* ISO `ts`. Clients reconnecting with `Last-Event-ID: <id>` get the buffered
|
|
25
|
-
* tail replayed (server's ring buffer is finite — see `
|
|
25
|
+
* tail replayed (server's ring buffer is finite — see `VersionControlEventBus`).
|
|
26
26
|
* If `id` is older than what the buffer still has, the server sends a
|
|
27
27
|
* `{ kind: 'resync' }` instead so the client refetches the world cleanly.
|
|
28
28
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/version-control/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAgXH,wEAAwE;AACxE,MAAM,UAAU,iBAAiB,CAC/B,CAA6B;IAE7B,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,cAAc;QACzB,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,qBAAqB;QAChC,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAChC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAC1B,CAA6B;IAE7B,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,6BAA6B,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `IVersionControlService` — the abstraction the rest of the app talks to instead
|
|
3
3
|
* of raw git/gh. See `bevel-platform/PLAN.md` for the motivation and the spec the
|
|
4
4
|
* methods here encode (protected branches, atomic per-file changes, file
|
|
5
5
|
* locks, change requests as branch-pair reconciliations).
|
|
6
6
|
*
|
|
7
|
-
* Naming convention: methods speak
|
|
7
|
+
* Naming convention: methods speak version-control vocabulary (`commitChange`,
|
|
8
8
|
* `openChangeRequest`, `acquireLock`), never git vocabulary (`commit`,
|
|
9
9
|
* `createPr`, no analogue for locks). Implementations may delegate to the
|
|
10
|
-
* existing git/PR/review
|
|
11
|
-
* `modules/
|
|
12
|
-
*
|
|
13
|
-
* Some methods on this interface have no backing service yet — file locks,
|
|
14
|
-
* `openChangeRequest`, `updateFromTarget`. The facade implementation throws
|
|
15
|
-
* `NotImplementedWorkflowError` from those until the underlying support
|
|
16
|
-
* lands. The interface defines them up-front so consumers can plan against
|
|
17
|
-
* the final surface area.
|
|
10
|
+
* existing git/PR/change-request-review services until those are folded into
|
|
11
|
+
* `modules/version-control`; callers should not depend on that fact.
|
|
18
12
|
*/
|
|
19
13
|
import type { AuthUser } from '../auth/types.js';
|
|
20
14
|
import type { ChangeRequestApplyFailureKind, UpdateChangeRequestFields } from '../git/pr.types.js';
|
|
21
15
|
import type { AcquireLockResult, Branch, BranchSyncOutcome, BranchWorkspaceStatus, CancelChangeRequestResult, Change, ChangeInput, ChangeRequest, ChangeRequestDetail, ChangeRequestUpdateResult, ChangeRequestState, ChangedFile, DeleteBranchPreview, DeleteBranchResult, FileApproval, FileLock, FolderChangeRequest, FolderChangeRequestRemoval, MergeBranchOutcome, MergeChangeRequestOutcome, OpenChangeRequestInput, UpdateBranchOutcome } from './types.js';
|
|
22
16
|
import type { BranchCounts, MergeResolution } from '../git/types.js';
|
|
23
|
-
export interface
|
|
17
|
+
export interface IVersionControlService {
|
|
24
18
|
/**
|
|
25
19
|
* `freshFetch` bypasses the fetch TTL; `strictFetch` makes a failed fetch
|
|
26
20
|
* throw instead of serving the stale refs — for a caller that uses the
|
|
@@ -32,7 +26,7 @@ export interface IWorkflowService {
|
|
|
32
26
|
}): Promise<Branch[]>;
|
|
33
27
|
/**
|
|
34
28
|
* Create a new unprotected branch. Protected branches cannot be created
|
|
35
|
-
* via
|
|
29
|
+
* via version control — the protected set is bootstrapped from the KB repo's
|
|
36
30
|
* initial state and never grown at runtime. Holds the branch-lifecycle
|
|
37
31
|
* lock for `name`, so creation is serialised with the branch's deletion
|
|
38
32
|
* and with the retirement of a stale clone under that name.
|
|
@@ -83,7 +77,7 @@ export interface IWorkflowService {
|
|
|
83
77
|
branchCounts(workspaceId: string): Promise<BranchCounts>;
|
|
84
78
|
/**
|
|
85
79
|
* Push the current branch upstream so other users (and change requests)
|
|
86
|
-
* can see the commits on it.
|
|
80
|
+
* can see the commits on it. Version-control term: "share current branch". The
|
|
87
81
|
* underlying implementation is `git push -u origin <branch>`.
|
|
88
82
|
*/
|
|
89
83
|
shareCurrentBranch(workspaceId: string, user: AuthUser): Promise<void>;
|
|
@@ -153,7 +147,7 @@ export interface IWorkflowService {
|
|
|
153
147
|
listPendingChangePaths(workspaceId: string): Promise<string[]>;
|
|
154
148
|
/**
|
|
155
149
|
* Commit one atomic change. The current backing implementation packs every
|
|
156
|
-
* dirty path in the working tree into the commit; the
|
|
150
|
+
* dirty path in the working tree into the commit; the version-control spec
|
|
157
151
|
* eventually constrains this to one file per change, enforced at the
|
|
158
152
|
* commit boundary. Until that lands, callers should already commit
|
|
159
153
|
* one-file-at-a-time by convention.
|
|
@@ -434,11 +428,9 @@ export interface IWorkflowService {
|
|
|
434
428
|
patches?: boolean;
|
|
435
429
|
}): Promise<ChangeRequestDetail | null>;
|
|
436
430
|
/**
|
|
437
|
-
* Open a new change request.
|
|
431
|
+
* Open a new change request. Auto-merges `targetBranch` into
|
|
438
432
|
* `sourceBranch` and surfaces the resulting diff as the changes to review.
|
|
439
|
-
*
|
|
440
|
-
* lands in the workflow module (today the agent shells `gh pr create`
|
|
441
|
-
* directly).
|
|
433
|
+
* A conflicting merge surfaces as `ChangeRequestConflictsError` (409).
|
|
442
434
|
*/
|
|
443
435
|
openChangeRequest(workspaceId: string, user: AuthUser, input: OpenChangeRequestInput): Promise<ChangeRequestDetail>;
|
|
444
436
|
/**
|
|
@@ -519,7 +511,7 @@ export interface IWorkflowService {
|
|
|
519
511
|
*/
|
|
520
512
|
rejectChangeRequest(number: number, user: AuthUser, state: ChangeRequestState, authorIdHash: string | null, baseBranch: string, workspaceId: string): Promise<CancelChangeRequestResult>;
|
|
521
513
|
/**
|
|
522
|
-
* Merge a change request. The
|
|
514
|
+
* Merge a change request. The version-control service tries a direct merge first; on
|
|
523
515
|
* conflicts it returns a `conflicts-need-resolution` outcome and the
|
|
524
516
|
* caller (typically the agent) is responsible for resolving them as new
|
|
525
517
|
* changes on the source branch. Once the source contains target cleanly,
|
|
@@ -527,7 +519,7 @@ export interface IWorkflowService {
|
|
|
527
519
|
*
|
|
528
520
|
* The hard merge invariant — only this method may invoke `gh pr merge` —
|
|
529
521
|
* is preserved through the facade by delegating to
|
|
530
|
-
* `
|
|
522
|
+
* `IChangeRequestReviewService.mergePr`.
|
|
531
523
|
*/
|
|
532
524
|
mergeChangeRequest(number: number, user: AuthUser, headSha: string, approvals: FileApproval[], state: ChangeRequestState, title: string, baseBranch: string, workspaceId: string, opts?: {
|
|
533
525
|
bypass?: boolean;
|
|
@@ -557,17 +549,17 @@ export interface IWorkflowService {
|
|
|
557
549
|
* a change request from `sourceBranch` into `targetBranch` is open; a
|
|
558
550
|
* person merges that one in the app. The reverse direction — the target
|
|
559
551
|
* into the source, the sync that keeps a draft current — is allowed.
|
|
560
|
-
* - refused (`
|
|
552
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-merge-target'`,
|
|
561
553
|
* status 403, listing the denied paths) when `targetBranch` is protected
|
|
562
554
|
* and `user` could not commit every file the merge changes directly to
|
|
563
555
|
* it. Decided against the target commit the merge is built on, not a
|
|
564
556
|
* workspace `HEAD` that may be behind it.
|
|
565
|
-
* - refused (`
|
|
557
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-merge-changes-roles'`,
|
|
566
558
|
* status 403) when `targetBranch` is protected and the merge would
|
|
567
559
|
* change its `roles.yaml` — whoever the caller is. Roles never change
|
|
568
560
|
* through a merge; a change request's merge restores the target's copy
|
|
569
561
|
* first, and this path refuses instead. Roles are changed in the app.
|
|
570
|
-
* - refused (`
|
|
562
|
+
* - refused (`VersionControlDomainError`, `kind: 'merge-target-busy'`, status
|
|
571
563
|
* 409) when `targetBranch`'s workspace still holds unshared edits: the
|
|
572
564
|
* merge resets it to the published tip, which would discard them.
|
|
573
565
|
*
|
|
@@ -591,18 +583,18 @@ export interface IWorkflowService {
|
|
|
591
583
|
* markers), the working tree untouched; a second call with a resolution
|
|
592
584
|
* per conflicted path lands the merge. See `IGitService.mergeIntoBranch`.
|
|
593
585
|
*
|
|
594
|
-
* - refused (`
|
|
586
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-update-target'`,
|
|
595
587
|
* 403) for a protected branch: those are updated through change requests.
|
|
596
|
-
* - refused (`
|
|
588
|
+
* - refused (`VersionControlValidationError`) when `from` is not on the shared
|
|
597
589
|
* repository, or when a resolution names a path that is not conflicted.
|
|
598
|
-
* - refused (`
|
|
590
|
+
* - refused (`VersionControlDomainError`, `kind: 'branch-busy'`, 409) while the
|
|
599
591
|
* workspace holds edits not committed yet: a merge over them could lose
|
|
600
592
|
* them.
|
|
601
593
|
* - `pending-commits` when writes on either branch are still being
|
|
602
594
|
* committed (waited for, up to 20 seconds); nothing merged.
|
|
603
595
|
* - `merged` means the merge commit is PUBLISHED: the push runs inside the
|
|
604
596
|
* merge's own reservation, through the cooperative recovery every
|
|
605
|
-
*
|
|
597
|
+
* version-control push takes — a push the host rejects because the branch
|
|
606
598
|
* moved is retried with the merge replayed on top. A replay that
|
|
607
599
|
* conflicts, or a host that refuses, throws the saved-locally hand-off
|
|
608
600
|
* (`PushNeedsAgentResolutionError`, its `path` the branch: no single
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/version-control/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `IVersionControlService` — the abstraction the rest of the app talks to instead
|
|
3
|
+
* of raw git/gh. See `bevel-platform/PLAN.md` for the motivation and the spec the
|
|
4
|
+
* methods here encode (protected branches, atomic per-file changes, file
|
|
5
|
+
* locks, change requests as branch-pair reconciliations).
|
|
6
|
+
*
|
|
7
|
+
* Naming convention: methods speak version-control vocabulary (`commitChange`,
|
|
8
|
+
* `openChangeRequest`, `acquireLock`), never git vocabulary (`commit`,
|
|
9
|
+
* `createPr`, no analogue for locks). Implementations may delegate to the
|
|
10
|
+
* existing git/PR/change-request-review services until those are folded into
|
|
11
|
+
* `modules/version-control`; callers should not depend on that fact.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/version-control/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control vocabulary — the abstraction our app speaks instead of raw git/gh.
|
|
3
3
|
*
|
|
4
4
|
* Most types here alias existing engineering types in `@bevel-software/platform-shared/git/*` so
|
|
5
|
-
* the
|
|
5
|
+
* the version-control layer is a single source of truth without duplicating the
|
|
6
6
|
* payload shapes our backend already produces. The point of the aliases is the
|
|
7
7
|
* *name*: callers depend on `Change` / `ChangeRequest` / `Branch`, never on
|
|
8
8
|
* `Commit` / `PullRequest` / `Branch` from the git module. When we eventually
|
|
9
|
-
* collapse `modules/git` and `modules/review
|
|
9
|
+
* collapse `modules/git` and `modules/change-request-review` into `modules/version-control`,
|
|
10
10
|
* the alias targets move with the implementation; the consumer-facing names
|
|
11
11
|
* don't need to.
|
|
12
12
|
*
|
|
@@ -20,7 +20,7 @@ export type Branch = BranchInfo;
|
|
|
20
20
|
/**
|
|
21
21
|
* Snapshot of the workspace tied to a branch — currently-checked-out branch,
|
|
22
22
|
* dirty bit, unshared commit count. Mirrors `WorkingTreeStatus` from the git
|
|
23
|
-
* module. Renames to `BranchWorkspaceStatus` in the
|
|
23
|
+
* module. Renames to `BranchWorkspaceStatus` in the version-control domain to signal
|
|
24
24
|
* "this describes the branch's workspace state", not raw git plumbing.
|
|
25
25
|
*/
|
|
26
26
|
export type BranchWorkspaceStatus = WorkingTreeStatus;
|
|
@@ -35,13 +35,13 @@ export type Change = CommitAttribution;
|
|
|
35
35
|
/**
|
|
36
36
|
* Input shape for committing a change. `summary` is required and single-line;
|
|
37
37
|
* `description` is optional and supports a multi-line body. Aliases
|
|
38
|
-
* `ShareChangesRequest` for now — once the
|
|
39
|
-
* gate end-to-end, this shape may grow
|
|
38
|
+
* `ShareChangesRequest` for now — once the version-control module owns the validator
|
|
39
|
+
* gate end-to-end, this shape may grow version-control-specific fields (lock token,
|
|
40
40
|
* forced single-path scope).
|
|
41
41
|
*/
|
|
42
42
|
export type ChangeInput = ShareChangesRequest;
|
|
43
43
|
/**
|
|
44
|
-
* A live edit lock on one (branch, path). Per the
|
|
44
|
+
* A live edit lock on one (branch, path). Per the version-control spec:
|
|
45
45
|
* - acquired on first edit in edit mode, or on agent write
|
|
46
46
|
* - per-(branch, path); the same file on another branch is independently lockable
|
|
47
47
|
* - autosave checkpoint timer extends the lock and produces intermediate changes
|
|
@@ -61,7 +61,7 @@ export interface FileLock {
|
|
|
61
61
|
/**
|
|
62
62
|
* How the lock was acquired. `'edit'` (the default when absent) is a normal
|
|
63
63
|
* write hold — the holder is editing and the release publishes their bytes.
|
|
64
|
-
* `'coordination'` is a pure-mutex hold (see `
|
|
64
|
+
* `'coordination'` is a pure-mutex hold (see `IVersionControlService.acquireLock`)
|
|
65
65
|
* that grants NO write authority: the write/checkpoint/commit-enqueue paths
|
|
66
66
|
* must refuse to treat it as write possession, even though its contention,
|
|
67
67
|
* TTL, and heartbeat surface is identical.
|
|
@@ -86,14 +86,13 @@ export type AcquireLockResult = {
|
|
|
86
86
|
lock: FileLock;
|
|
87
87
|
};
|
|
88
88
|
/**
|
|
89
|
-
* A change request is the reconciliation of two branches
|
|
90
|
-
*
|
|
91
|
-
* that from callers. `state` values map 1:1
|
|
89
|
+
* A change request is the reconciliation of two branches, kept as a
|
|
90
|
+
* `change_requests` row plus the two branches; it shares the pull-request
|
|
91
|
+
* shapes, and the alias hides that from callers. `state` values map 1:1
|
|
92
|
+
* (`open`/`merged`/`closed`).
|
|
92
93
|
*
|
|
93
|
-
*
|
|
94
|
-
* source first
|
|
95
|
-
* `openChangeRequest` on `IWorkflowService` currently throws
|
|
96
|
-
* `NotImplementedWorkflowError`.
|
|
94
|
+
* `openChangeRequest` on `IVersionControlService` auto-merges target →
|
|
95
|
+
* source first, so the request shows the post-merge diff.
|
|
97
96
|
*/
|
|
98
97
|
export type ChangeRequest = PullRequestSummary;
|
|
99
98
|
export type ChangeRequestDetail = PullRequestDetail;
|
|
@@ -158,9 +157,9 @@ export interface FolderChangeRequestRemoval {
|
|
|
158
157
|
keptForSaves: boolean;
|
|
159
158
|
}
|
|
160
159
|
/**
|
|
161
|
-
* Input for opening a new change request. The
|
|
160
|
+
* Input for opening a new change request. The version-control service auto-merges
|
|
162
161
|
* `targetBranch` into `sourceBranch` as part of opening, so callers don't
|
|
163
|
-
* pass a head SHA — the
|
|
162
|
+
* pass a head SHA — the version-control service resolves the head itself.
|
|
164
163
|
*
|
|
165
164
|
* `title` + `description` are the change request's metadata. The description
|
|
166
165
|
* is stored exactly as given and IS the request's body: Hexis appends nothing
|
|
@@ -184,11 +183,11 @@ export interface OpenChangeRequestInput {
|
|
|
184
183
|
};
|
|
185
184
|
}
|
|
186
185
|
/**
|
|
187
|
-
* Result of asking the
|
|
186
|
+
* Result of asking the version-control service to merge a change request. Mirrors
|
|
188
187
|
* `MergePrResult` — caller learns the resulting change (commit) sha and the
|
|
189
188
|
* timestamp the merge landed.
|
|
190
189
|
*
|
|
191
|
-
* When the merge attempt hits conflicts the
|
|
190
|
+
* When the merge attempt hits conflicts the version-control service falls back to an
|
|
192
191
|
* agent-driven resolution path; the caller does NOT get a `MergeChangeRequestResult`
|
|
193
192
|
* back in that case — they get a `ConflictPending` shape instead so the UI
|
|
194
193
|
* can route into the resolution flow.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/version-control/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control vocabulary — the abstraction our app speaks instead of raw git/gh.
|
|
3
3
|
*
|
|
4
4
|
* Most types here alias existing engineering types in `@bevel-software/platform-shared/git/*` so
|
|
5
|
-
* the
|
|
5
|
+
* the version-control layer is a single source of truth without duplicating the
|
|
6
6
|
* payload shapes our backend already produces. The point of the aliases is the
|
|
7
7
|
* *name*: callers depend on `Change` / `ChangeRequest` / `Branch`, never on
|
|
8
8
|
* `Commit` / `PullRequest` / `Branch` from the git module. When we eventually
|
|
9
|
-
* collapse `modules/git` and `modules/review
|
|
9
|
+
* collapse `modules/git` and `modules/change-request-review` into `modules/version-control`,
|
|
10
10
|
* the alias targets move with the implementation; the consumer-facing names
|
|
11
11
|
* don't need to.
|
|
12
12
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/version-control/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* ├── Plugins/ ← one folder per plugin: manifest, MCP servers, tools, links
|
|
11
11
|
* ├── Data/ ← agent-produced records; parsed like KnowledgeBase/
|
|
12
12
|
* ├── Agents/ ← .agent files — agent role configurations (not the graph)
|
|
13
|
-
* ├──
|
|
13
|
+
* ├── Workflows/ ← .workflow files — execution-layer processes (not the graph)
|
|
14
14
|
* ├── roles.yaml ← identity → role mapping
|
|
15
15
|
* └── access.md ← repo-root access-control rules
|
|
16
16
|
*
|
|
17
17
|
* RESERVED IS NOT THE SAME AS CREATED. Core seeds the first two only
|
|
18
|
-
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `
|
|
18
|
+
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `Workflows/` scaffold an
|
|
19
19
|
* agentic execution layer that a distribution layers on. Their names stay here
|
|
20
20
|
* regardless, because reserving a name is what stops a KB that HAS the folder
|
|
21
21
|
* from having it treated as ordinary content — the file tree would otherwise
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*
|
|
24
24
|
* These names are the single source of truth for both sides of the app:
|
|
25
25
|
* - Backend: the graph parser discovers its content under `KnowledgeBase/`
|
|
26
|
-
* and `Data/`; `Plugins/`, `Agents/`, `
|
|
26
|
+
* and `Data/`; `Plugins/`, `Agents/`, `Workflows/` (and anything else at
|
|
27
27
|
* the root) are ignored by parsing, validation, and the diagram.
|
|
28
28
|
* - Frontend: the file tree renders these root folders as distinct
|
|
29
29
|
* top-level sections.
|
|
@@ -446,15 +446,15 @@ export declare function isPersonalPluginDir(repoRelDir: string, layout: KbLayout
|
|
|
446
446
|
*/
|
|
447
447
|
export declare function pluginOfPath(repoRelativePath: string, layout: KbLayout): string | null;
|
|
448
448
|
/**
|
|
449
|
-
* Folder under the repo root for agent-produced records (
|
|
449
|
+
* Folder under the repo root for agent-produced records (workflow runs,
|
|
450
450
|
* work items, intermediate outputs). Parsed exactly like `KnowledgeBase/`:
|
|
451
451
|
* its direct subfolders are self-contained ontologies.
|
|
452
452
|
*/
|
|
453
453
|
export declare const DATA_DIR = "Data";
|
|
454
454
|
/** Folder under the repo root that holds `.agent` files — agent role configurations (not graph nodes). */
|
|
455
455
|
export declare const AGENTS_DIR = "Agents";
|
|
456
|
-
/** Folder under the repo root that holds `.
|
|
457
|
-
export declare const
|
|
456
|
+
/** Folder under the repo root that holds `.workflow` files — execution-layer processes (not graph nodes). */
|
|
457
|
+
export declare const WORKFLOWS_DIR = "Workflows";
|
|
458
458
|
/**
|
|
459
459
|
* Every reserved root name under `layout` — the set the file tree renders as
|
|
460
460
|
* its own sections rather than folding into Knowledge.
|
|
@@ -13,12 +13,12 @@ import { validateFilename } from './filename.js';
|
|
|
13
13
|
* ├── Plugins/ ← one folder per plugin: manifest, MCP servers, tools, links
|
|
14
14
|
* ├── Data/ ← agent-produced records; parsed like KnowledgeBase/
|
|
15
15
|
* ├── Agents/ ← .agent files — agent role configurations (not the graph)
|
|
16
|
-
* ├──
|
|
16
|
+
* ├── Workflows/ ← .workflow files — execution-layer processes (not the graph)
|
|
17
17
|
* ├── roles.yaml ← identity → role mapping
|
|
18
18
|
* └── access.md ← repo-root access-control rules
|
|
19
19
|
*
|
|
20
20
|
* RESERVED IS NOT THE SAME AS CREATED. Core seeds the first two only
|
|
21
|
-
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `
|
|
21
|
+
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `Workflows/` scaffold an
|
|
22
22
|
* agentic execution layer that a distribution layers on. Their names stay here
|
|
23
23
|
* regardless, because reserving a name is what stops a KB that HAS the folder
|
|
24
24
|
* from having it treated as ordinary content — the file tree would otherwise
|
|
@@ -26,7 +26,7 @@ import { validateFilename } from './filename.js';
|
|
|
26
26
|
*
|
|
27
27
|
* These names are the single source of truth for both sides of the app:
|
|
28
28
|
* - Backend: the graph parser discovers its content under `KnowledgeBase/`
|
|
29
|
-
* and `Data/`; `Plugins/`, `Agents/`, `
|
|
29
|
+
* and `Data/`; `Plugins/`, `Agents/`, `Workflows/` (and anything else at
|
|
30
30
|
* the root) are ignored by parsing, validation, and the diagram.
|
|
31
31
|
* - Frontend: the file tree renders these root folders as distinct
|
|
32
32
|
* top-level sections.
|
|
@@ -276,10 +276,10 @@ export function validateKbLayout(layout) {
|
|
|
276
276
|
}
|
|
277
277
|
// The fixed reserved roots are taken too: naming the skills folder `Data`
|
|
278
278
|
// would give one directory two reserved roles.
|
|
279
|
-
const fixed = [DATA_DIR, AGENTS_DIR,
|
|
279
|
+
const fixed = [DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR].map((n) => n.toLowerCase());
|
|
280
280
|
const clash = names.find((n) => fixed.includes(n));
|
|
281
281
|
if (clash)
|
|
282
|
-
return `"${clash}" is a reserved folder name (${[DATA_DIR, AGENTS_DIR,
|
|
282
|
+
return `"${clash}" is a reserved folder name (${[DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR].join(', ')}).`;
|
|
283
283
|
// Judged against the roots THIS layout declares, not the ones in effect: a
|
|
284
284
|
// save that renames the plugins folder and the guide together must be read
|
|
285
285
|
// as the pair it is.
|
|
@@ -673,21 +673,21 @@ export function pluginOfPath(repoRelativePath, layout) {
|
|
|
673
673
|
return segments.length >= 3 ? (segments[1] ?? null) : null;
|
|
674
674
|
}
|
|
675
675
|
/**
|
|
676
|
-
* Folder under the repo root for agent-produced records (
|
|
676
|
+
* Folder under the repo root for agent-produced records (workflow runs,
|
|
677
677
|
* work items, intermediate outputs). Parsed exactly like `KnowledgeBase/`:
|
|
678
678
|
* its direct subfolders are self-contained ontologies.
|
|
679
679
|
*/
|
|
680
680
|
export const DATA_DIR = 'Data';
|
|
681
681
|
/** Folder under the repo root that holds `.agent` files — agent role configurations (not graph nodes). */
|
|
682
682
|
export const AGENTS_DIR = 'Agents';
|
|
683
|
-
/** Folder under the repo root that holds `.
|
|
684
|
-
export const
|
|
683
|
+
/** Folder under the repo root that holds `.workflow` files — execution-layer processes (not graph nodes). */
|
|
684
|
+
export const WORKFLOWS_DIR = 'Workflows';
|
|
685
685
|
/**
|
|
686
686
|
* Every reserved root name under `layout` — the set the file tree renders as
|
|
687
687
|
* its own sections rather than folding into Knowledge.
|
|
688
688
|
*/
|
|
689
689
|
export function reservedRootDirNames(layout) {
|
|
690
|
-
return new Set([layout.knowledgeBaseDir, layout.skillsDir, layout.pluginsDir, DATA_DIR, AGENTS_DIR,
|
|
690
|
+
return new Set([layout.knowledgeBaseDir, layout.skillsDir, layout.pluginsDir, DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR]);
|
|
691
691
|
}
|
|
692
692
|
/**
|
|
693
693
|
* The roots anyone may start a new folder in — knowledge, skills and plugins
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bevel-software/platform-shared",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Shared types and pure domain utilities of the Bevel core platform (auth, workspace, git/
|
|
3
|
+
"version": "0.36.1",
|
|
4
|
+
"description": "Shared types and pure domain utilities of the Bevel core platform (auth, workspace, git/version-control contracts, branch registry).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
package/src/git/pr.types.ts
CHANGED
|
@@ -444,7 +444,7 @@ export type UpdateChangeRequestInput =
|
|
|
444
444
|
/**
|
|
445
445
|
* The fields of a `PATCH /api/workflow/change-requests/:number` body as the
|
|
446
446
|
* server receives them — any combination, since the body is untrusted JSON.
|
|
447
|
-
* `
|
|
447
|
+
* `VersionControlService.updateChangeRequest` checks the shape and refuses what
|
|
448
448
|
* {@link UpdateChangeRequestInput} rules out with a worded 400.
|
|
449
449
|
*/
|
|
450
450
|
export interface UpdateChangeRequestFields {
|
package/src/git/types.ts
CHANGED
|
@@ -166,7 +166,7 @@ export type MergeIntoBranchOutcome =
|
|
|
166
166
|
/**
|
|
167
167
|
* What a merge's `publish` may do while the merge still holds its workspace:
|
|
168
168
|
* `push` the branch, and `pullRebase` it onto its moved remote with the merge
|
|
169
|
-
* kept as a merge — the two moves every
|
|
169
|
+
* kept as a merge — the two moves every version-control push's cooperative recovery
|
|
170
170
|
* is made of, so that recovery can run inside the reservation unchanged.
|
|
171
171
|
*/
|
|
172
172
|
export interface ReservedPushOps {
|
|
@@ -187,7 +187,7 @@ export interface IGitService {
|
|
|
187
187
|
* anything is written. `publish`, when given, runs right after the merge
|
|
188
188
|
* commit, inside the same reservation, over the pushes it may make
|
|
189
189
|
* (`ReservedPushOps`): the caller brings the one push policy every
|
|
190
|
-
*
|
|
190
|
+
* version-control push takes, and whatever it throws leaves the merge commit on
|
|
191
191
|
* the local branch, unpublished, the checkout clean (a replay that
|
|
192
192
|
* conflicts undoes itself), a later call answering `nothing-to-merge`
|
|
193
193
|
* without pushing — the commit is published as any local commit is.
|
|
@@ -248,7 +248,7 @@ export interface IGitService {
|
|
|
248
248
|
name: string,
|
|
249
249
|
fromBase?: string,
|
|
250
250
|
): Promise<BranchInfo>;
|
|
251
|
-
// No `switchBranch` here on purpose — see the comment in
|
|
251
|
+
// No `switchBranch` here on purpose — see the comment in IVersionControlService.
|
|
252
252
|
// Branch is workspace identity under the per-branch workspace model.
|
|
253
253
|
/**
|
|
254
254
|
* Delete a branch. Removes the local ref (if present) AND the origin ref
|
|
@@ -491,7 +491,7 @@ export interface IGitService {
|
|
|
491
491
|
* record the target tip, and reading that commit's change would answer with
|
|
492
492
|
* another request's files. It must be in the clone, have a second parent, and
|
|
493
493
|
* carry a subject naming this request; anything else rejects with
|
|
494
|
-
* `
|
|
494
|
+
* `VersionControlValidationError`, which every caller reads as "the file set could
|
|
495
495
|
* not be resolved" and answers fail-closed (no files, so author-only) rather
|
|
496
496
|
* than reaching for a fetch per request.
|
|
497
497
|
*
|
|
@@ -523,7 +523,7 @@ export interface IGitService {
|
|
|
523
523
|
* the head it was given against is not the detail's `headSha`, so answering
|
|
524
524
|
* the merge commit there would report every approval a merged request ever
|
|
525
525
|
* collected as stale. Same verification, same no-network contract and the same
|
|
526
|
-
* `
|
|
526
|
+
* `VersionControlValidationError` as {@link changedFilesOfAppliedChange}.
|
|
527
527
|
*/
|
|
528
528
|
appliedChangeShas(
|
|
529
529
|
workspaceId: string,
|
package/src/index.ts
CHANGED
|
@@ -27,7 +27,7 @@ export * from './git/branchAuthor.js';
|
|
|
27
27
|
export * from './git/review.types.js';
|
|
28
28
|
export * from './git/legacy-change-request-body.js';
|
|
29
29
|
|
|
30
|
-
//
|
|
31
|
-
export * from './
|
|
32
|
-
export * from './
|
|
33
|
-
export * from './
|
|
30
|
+
// Version control — abstraction layer over git/PR/change-request-review. See PLAN.md.
|
|
31
|
+
export * from './version-control/types.js';
|
|
32
|
+
export * from './version-control/interface.js';
|
|
33
|
+
export * from './version-control/events.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control event bus types — what the backend pushes over SSE to keep the
|
|
3
3
|
* frontend in sync with state changes, including those triggered by other
|
|
4
4
|
* users on the same branch or by the agent acting server-side.
|
|
5
5
|
*
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* **Identity + replay** — every event carries an `id` (monotonic int) and an
|
|
24
24
|
* ISO `ts`. Clients reconnecting with `Last-Event-ID: <id>` get the buffered
|
|
25
|
-
* tail replayed (server's ring buffer is finite — see `
|
|
25
|
+
* tail replayed (server's ring buffer is finite — see `VersionControlEventBus`).
|
|
26
26
|
* If `id` is older than what the buffer still has, the server sends a
|
|
27
27
|
* `{ kind: 'resync' }` instead so the client refetches the world cleanly.
|
|
28
28
|
*
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* tab's SHA differs).
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
|
-
export interface
|
|
36
|
+
export interface VersionControlEventEnvelope {
|
|
37
37
|
/** Monotonic, process-local. Used for `Last-Event-ID` replay. */
|
|
38
38
|
id: number;
|
|
39
39
|
/** ISO timestamp the event was emitted on the backend. */
|
|
@@ -376,7 +376,7 @@ export interface AgentConnectedEvent {
|
|
|
376
376
|
|
|
377
377
|
// ── Union + helpers ──────────────────────────────────────────────────────────
|
|
378
378
|
|
|
379
|
-
export type
|
|
379
|
+
export type VersionControlEventPayload =
|
|
380
380
|
| FileChangedEvent
|
|
381
381
|
| LockAcquiredEvent
|
|
382
382
|
| LockReleasedEvent
|
|
@@ -397,12 +397,12 @@ export type WorkflowEventPayload =
|
|
|
397
397
|
| HeartbeatEvent
|
|
398
398
|
| ResyncEvent;
|
|
399
399
|
|
|
400
|
-
export type
|
|
400
|
+
export type VersionControlEvent = VersionControlEventEnvelope & VersionControlEventPayload;
|
|
401
401
|
|
|
402
402
|
/** True for events scoped to a workspace — the focus filter applies. */
|
|
403
403
|
export function isWorkspaceScoped(
|
|
404
|
-
e:
|
|
405
|
-
): e is
|
|
404
|
+
e: VersionControlEventPayload,
|
|
405
|
+
): e is VersionControlEventPayload & { workspaceId: string } {
|
|
406
406
|
return (
|
|
407
407
|
e.kind === 'file-changed' ||
|
|
408
408
|
e.kind === 'lock-acquired' ||
|
|
@@ -416,8 +416,8 @@ export function isWorkspaceScoped(
|
|
|
416
416
|
|
|
417
417
|
/** True for events scoped to a specific user — the user filter applies. */
|
|
418
418
|
export function isUserScoped(
|
|
419
|
-
e:
|
|
420
|
-
): e is
|
|
419
|
+
e: VersionControlEventPayload,
|
|
420
|
+
): e is VersionControlEventPayload & { forUserId: string } {
|
|
421
421
|
return (
|
|
422
422
|
e.kind === 'agent-tool-call' ||
|
|
423
423
|
e.kind === 'agent-connected' ||
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `IVersionControlService` — the abstraction the rest of the app talks to instead
|
|
3
3
|
* of raw git/gh. See `bevel-platform/PLAN.md` for the motivation and the spec the
|
|
4
4
|
* methods here encode (protected branches, atomic per-file changes, file
|
|
5
5
|
* locks, change requests as branch-pair reconciliations).
|
|
6
6
|
*
|
|
7
|
-
* Naming convention: methods speak
|
|
7
|
+
* Naming convention: methods speak version-control vocabulary (`commitChange`,
|
|
8
8
|
* `openChangeRequest`, `acquireLock`), never git vocabulary (`commit`,
|
|
9
9
|
* `createPr`, no analogue for locks). Implementations may delegate to the
|
|
10
|
-
* existing git/PR/review
|
|
11
|
-
* `modules/
|
|
12
|
-
*
|
|
13
|
-
* Some methods on this interface have no backing service yet — file locks,
|
|
14
|
-
* `openChangeRequest`, `updateFromTarget`. The facade implementation throws
|
|
15
|
-
* `NotImplementedWorkflowError` from those until the underlying support
|
|
16
|
-
* lands. The interface defines them up-front so consumers can plan against
|
|
17
|
-
* the final surface area.
|
|
10
|
+
* existing git/PR/change-request-review services until those are folded into
|
|
11
|
+
* `modules/version-control`; callers should not depend on that fact.
|
|
18
12
|
*/
|
|
19
13
|
|
|
20
14
|
import type { AuthUser } from '../auth/types.js';
|
|
@@ -45,7 +39,7 @@ import type {
|
|
|
45
39
|
} from './types.js';
|
|
46
40
|
import type { BranchCounts, MergeResolution } from '../git/types.js';
|
|
47
41
|
|
|
48
|
-
export interface
|
|
42
|
+
export interface IVersionControlService {
|
|
49
43
|
// ── Branches ──────────────────────────────────────────────────────────────
|
|
50
44
|
|
|
51
45
|
/**
|
|
@@ -56,7 +50,7 @@ export interface IWorkflowService {
|
|
|
56
50
|
listBranches(workspaceId: string, opts?: { freshFetch?: boolean; strictFetch?: boolean }): Promise<Branch[]>;
|
|
57
51
|
/**
|
|
58
52
|
* Create a new unprotected branch. Protected branches cannot be created
|
|
59
|
-
* via
|
|
53
|
+
* via version control — the protected set is bootstrapped from the KB repo's
|
|
60
54
|
* initial state and never grown at runtime. Holds the branch-lifecycle
|
|
61
55
|
* lock for `name`, so creation is serialised with the branch's deletion
|
|
62
56
|
* and with the retirement of a stale clone under that name.
|
|
@@ -119,7 +113,7 @@ export interface IWorkflowService {
|
|
|
119
113
|
// never dirty, so there is nothing for "undo my unsaved edits" to undo.
|
|
120
114
|
/**
|
|
121
115
|
* Push the current branch upstream so other users (and change requests)
|
|
122
|
-
* can see the commits on it.
|
|
116
|
+
* can see the commits on it. Version-control term: "share current branch". The
|
|
123
117
|
* underlying implementation is `git push -u origin <branch>`.
|
|
124
118
|
*/
|
|
125
119
|
shareCurrentBranch(workspaceId: string, user: AuthUser): Promise<void>;
|
|
@@ -196,7 +190,7 @@ export interface IWorkflowService {
|
|
|
196
190
|
|
|
197
191
|
/**
|
|
198
192
|
* Commit one atomic change. The current backing implementation packs every
|
|
199
|
-
* dirty path in the working tree into the commit; the
|
|
193
|
+
* dirty path in the working tree into the commit; the version-control spec
|
|
200
194
|
* eventually constrains this to one file per change, enforced at the
|
|
201
195
|
* commit boundary. Until that lands, callers should already commit
|
|
202
196
|
* one-file-at-a-time by convention.
|
|
@@ -310,7 +304,7 @@ export interface IWorkflowService {
|
|
|
310
304
|
headBranch: string,
|
|
311
305
|
): Promise<string | null>;
|
|
312
306
|
|
|
313
|
-
// ── File locks
|
|
307
|
+
// ── File locks ──────────────────────────────────────────────────────────────
|
|
314
308
|
|
|
315
309
|
// Every lock method below coordinates on ONE canonical identity per file:
|
|
316
310
|
// `x/a.md`, `./x/a.md` and `x//a.md` name the same lock, so a lock acquired
|
|
@@ -528,11 +522,9 @@ export interface IWorkflowService {
|
|
|
528
522
|
): Promise<ChangeRequestDetail | null>;
|
|
529
523
|
|
|
530
524
|
/**
|
|
531
|
-
* Open a new change request.
|
|
525
|
+
* Open a new change request. Auto-merges `targetBranch` into
|
|
532
526
|
* `sourceBranch` and surfaces the resulting diff as the changes to review.
|
|
533
|
-
*
|
|
534
|
-
* lands in the workflow module (today the agent shells `gh pr create`
|
|
535
|
-
* directly).
|
|
527
|
+
* A conflicting merge surfaces as `ChangeRequestConflictsError` (409).
|
|
536
528
|
*/
|
|
537
529
|
openChangeRequest(
|
|
538
530
|
workspaceId: string,
|
|
@@ -664,7 +656,7 @@ export interface IWorkflowService {
|
|
|
664
656
|
): Promise<CancelChangeRequestResult>;
|
|
665
657
|
|
|
666
658
|
/**
|
|
667
|
-
* Merge a change request. The
|
|
659
|
+
* Merge a change request. The version-control service tries a direct merge first; on
|
|
668
660
|
* conflicts it returns a `conflicts-need-resolution` outcome and the
|
|
669
661
|
* caller (typically the agent) is responsible for resolving them as new
|
|
670
662
|
* changes on the source branch. Once the source contains target cleanly,
|
|
@@ -672,7 +664,7 @@ export interface IWorkflowService {
|
|
|
672
664
|
*
|
|
673
665
|
* The hard merge invariant — only this method may invoke `gh pr merge` —
|
|
674
666
|
* is preserved through the facade by delegating to
|
|
675
|
-
* `
|
|
667
|
+
* `IChangeRequestReviewService.mergePr`.
|
|
676
668
|
*/
|
|
677
669
|
mergeChangeRequest(
|
|
678
670
|
number: number,
|
|
@@ -715,17 +707,17 @@ export interface IWorkflowService {
|
|
|
715
707
|
* a change request from `sourceBranch` into `targetBranch` is open; a
|
|
716
708
|
* person merges that one in the app. The reverse direction — the target
|
|
717
709
|
* into the source, the sync that keeps a draft current — is allowed.
|
|
718
|
-
* - refused (`
|
|
710
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-merge-target'`,
|
|
719
711
|
* status 403, listing the denied paths) when `targetBranch` is protected
|
|
720
712
|
* and `user` could not commit every file the merge changes directly to
|
|
721
713
|
* it. Decided against the target commit the merge is built on, not a
|
|
722
714
|
* workspace `HEAD` that may be behind it.
|
|
723
|
-
* - refused (`
|
|
715
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-merge-changes-roles'`,
|
|
724
716
|
* status 403) when `targetBranch` is protected and the merge would
|
|
725
717
|
* change its `roles.yaml` — whoever the caller is. Roles never change
|
|
726
718
|
* through a merge; a change request's merge restores the target's copy
|
|
727
719
|
* first, and this path refuses instead. Roles are changed in the app.
|
|
728
|
-
* - refused (`
|
|
720
|
+
* - refused (`VersionControlDomainError`, `kind: 'merge-target-busy'`, status
|
|
729
721
|
* 409) when `targetBranch`'s workspace still holds unshared edits: the
|
|
730
722
|
* merge resets it to the published tip, which would discard them.
|
|
731
723
|
*
|
|
@@ -750,18 +742,18 @@ export interface IWorkflowService {
|
|
|
750
742
|
* markers), the working tree untouched; a second call with a resolution
|
|
751
743
|
* per conflicted path lands the merge. See `IGitService.mergeIntoBranch`.
|
|
752
744
|
*
|
|
753
|
-
* - refused (`
|
|
745
|
+
* - refused (`VersionControlDomainError`, `kind: 'protected-update-target'`,
|
|
754
746
|
* 403) for a protected branch: those are updated through change requests.
|
|
755
|
-
* - refused (`
|
|
747
|
+
* - refused (`VersionControlValidationError`) when `from` is not on the shared
|
|
756
748
|
* repository, or when a resolution names a path that is not conflicted.
|
|
757
|
-
* - refused (`
|
|
749
|
+
* - refused (`VersionControlDomainError`, `kind: 'branch-busy'`, 409) while the
|
|
758
750
|
* workspace holds edits not committed yet: a merge over them could lose
|
|
759
751
|
* them.
|
|
760
752
|
* - `pending-commits` when writes on either branch are still being
|
|
761
753
|
* committed (waited for, up to 20 seconds); nothing merged.
|
|
762
754
|
* - `merged` means the merge commit is PUBLISHED: the push runs inside the
|
|
763
755
|
* merge's own reservation, through the cooperative recovery every
|
|
764
|
-
*
|
|
756
|
+
* version-control push takes — a push the host rejects because the branch
|
|
765
757
|
* moved is retried with the merge replayed on top. A replay that
|
|
766
758
|
* conflicts, or a host that refuses, throws the saved-locally hand-off
|
|
767
759
|
* (`PushNeedsAgentResolutionError`, its `path` the branch: no single
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Version-control vocabulary — the abstraction our app speaks instead of raw git/gh.
|
|
3
3
|
*
|
|
4
4
|
* Most types here alias existing engineering types in `@bevel-software/platform-shared/git/*` so
|
|
5
|
-
* the
|
|
5
|
+
* the version-control layer is a single source of truth without duplicating the
|
|
6
6
|
* payload shapes our backend already produces. The point of the aliases is the
|
|
7
7
|
* *name*: callers depend on `Change` / `ChangeRequest` / `Branch`, never on
|
|
8
8
|
* `Commit` / `PullRequest` / `Branch` from the git module. When we eventually
|
|
9
|
-
* collapse `modules/git` and `modules/review
|
|
9
|
+
* collapse `modules/git` and `modules/change-request-review` into `modules/version-control`,
|
|
10
10
|
* the alias targets move with the implementation; the consumer-facing names
|
|
11
11
|
* don't need to.
|
|
12
12
|
*
|
|
@@ -40,7 +40,7 @@ export type Branch = BranchInfo;
|
|
|
40
40
|
/**
|
|
41
41
|
* Snapshot of the workspace tied to a branch — currently-checked-out branch,
|
|
42
42
|
* dirty bit, unshared commit count. Mirrors `WorkingTreeStatus` from the git
|
|
43
|
-
* module. Renames to `BranchWorkspaceStatus` in the
|
|
43
|
+
* module. Renames to `BranchWorkspaceStatus` in the version-control domain to signal
|
|
44
44
|
* "this describes the branch's workspace state", not raw git plumbing.
|
|
45
45
|
*/
|
|
46
46
|
export type BranchWorkspaceStatus = WorkingTreeStatus;
|
|
@@ -59,8 +59,8 @@ export type Change = CommitAttribution;
|
|
|
59
59
|
/**
|
|
60
60
|
* Input shape for committing a change. `summary` is required and single-line;
|
|
61
61
|
* `description` is optional and supports a multi-line body. Aliases
|
|
62
|
-
* `ShareChangesRequest` for now — once the
|
|
63
|
-
* gate end-to-end, this shape may grow
|
|
62
|
+
* `ShareChangesRequest` for now — once the version-control module owns the validator
|
|
63
|
+
* gate end-to-end, this shape may grow version-control-specific fields (lock token,
|
|
64
64
|
* forced single-path scope).
|
|
65
65
|
*/
|
|
66
66
|
export type ChangeInput = ShareChangesRequest;
|
|
@@ -68,7 +68,7 @@ export type ChangeInput = ShareChangesRequest;
|
|
|
68
68
|
// ── File locks (new — no git counterpart) ────────────────────────────────────
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
* A live edit lock on one (branch, path). Per the
|
|
71
|
+
* A live edit lock on one (branch, path). Per the version-control spec:
|
|
72
72
|
* - acquired on first edit in edit mode, or on agent write
|
|
73
73
|
* - per-(branch, path); the same file on another branch is independently lockable
|
|
74
74
|
* - autosave checkpoint timer extends the lock and produces intermediate changes
|
|
@@ -88,7 +88,7 @@ export interface FileLock {
|
|
|
88
88
|
/**
|
|
89
89
|
* How the lock was acquired. `'edit'` (the default when absent) is a normal
|
|
90
90
|
* write hold — the holder is editing and the release publishes their bytes.
|
|
91
|
-
* `'coordination'` is a pure-mutex hold (see `
|
|
91
|
+
* `'coordination'` is a pure-mutex hold (see `IVersionControlService.acquireLock`)
|
|
92
92
|
* that grants NO write authority: the write/checkpoint/commit-enqueue paths
|
|
93
93
|
* must refuse to treat it as write possession, even though its contention,
|
|
94
94
|
* TTL, and heartbeat surface is identical.
|
|
@@ -113,14 +113,13 @@ export type AcquireLockResult =
|
|
|
113
113
|
// ── Change Requests ──────────────────────────────────────────────────────────
|
|
114
114
|
|
|
115
115
|
/**
|
|
116
|
-
* A change request is the reconciliation of two branches
|
|
117
|
-
*
|
|
118
|
-
* that from callers. `state` values map 1:1
|
|
116
|
+
* A change request is the reconciliation of two branches, kept as a
|
|
117
|
+
* `change_requests` row plus the two branches; it shares the pull-request
|
|
118
|
+
* shapes, and the alias hides that from callers. `state` values map 1:1
|
|
119
|
+
* (`open`/`merged`/`closed`).
|
|
119
120
|
*
|
|
120
|
-
*
|
|
121
|
-
* source first
|
|
122
|
-
* `openChangeRequest` on `IWorkflowService` currently throws
|
|
123
|
-
* `NotImplementedWorkflowError`.
|
|
121
|
+
* `openChangeRequest` on `IVersionControlService` auto-merges target →
|
|
122
|
+
* source first, so the request shows the post-merge diff.
|
|
124
123
|
*/
|
|
125
124
|
export type ChangeRequest = PullRequestSummary;
|
|
126
125
|
export type ChangeRequestDetail = PullRequestDetail;
|
|
@@ -182,9 +181,9 @@ export interface FolderChangeRequestRemoval {
|
|
|
182
181
|
}
|
|
183
182
|
|
|
184
183
|
/**
|
|
185
|
-
* Input for opening a new change request. The
|
|
184
|
+
* Input for opening a new change request. The version-control service auto-merges
|
|
186
185
|
* `targetBranch` into `sourceBranch` as part of opening, so callers don't
|
|
187
|
-
* pass a head SHA — the
|
|
186
|
+
* pass a head SHA — the version-control service resolves the head itself.
|
|
188
187
|
*
|
|
189
188
|
* `title` + `description` are the change request's metadata. The description
|
|
190
189
|
* is stored exactly as given and IS the request's body: Hexis appends nothing
|
|
@@ -206,11 +205,11 @@ export interface OpenChangeRequestInput {
|
|
|
206
205
|
}
|
|
207
206
|
|
|
208
207
|
/**
|
|
209
|
-
* Result of asking the
|
|
208
|
+
* Result of asking the version-control service to merge a change request. Mirrors
|
|
210
209
|
* `MergePrResult` — caller learns the resulting change (commit) sha and the
|
|
211
210
|
* timestamp the merge landed.
|
|
212
211
|
*
|
|
213
|
-
* When the merge attempt hits conflicts the
|
|
212
|
+
* When the merge attempt hits conflicts the version-control service falls back to an
|
|
214
213
|
* agent-driven resolution path; the caller does NOT get a `MergeChangeRequestResult`
|
|
215
214
|
* back in that case — they get a `ConflictPending` shape instead so the UI
|
|
216
215
|
* can route into the resolution flow.
|
|
@@ -14,12 +14,12 @@ import { validateFilename } from './filename.js';
|
|
|
14
14
|
* ├── Plugins/ ← one folder per plugin: manifest, MCP servers, tools, links
|
|
15
15
|
* ├── Data/ ← agent-produced records; parsed like KnowledgeBase/
|
|
16
16
|
* ├── Agents/ ← .agent files — agent role configurations (not the graph)
|
|
17
|
-
* ├──
|
|
17
|
+
* ├── Workflows/ ← .workflow files — execution-layer processes (not the graph)
|
|
18
18
|
* ├── roles.yaml ← identity → role mapping
|
|
19
19
|
* └── access.md ← repo-root access-control rules
|
|
20
20
|
*
|
|
21
21
|
* RESERVED IS NOT THE SAME AS CREATED. Core seeds the first two only
|
|
22
|
-
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `
|
|
22
|
+
* (`CORE_REQUIRED_DIRS`); `Data/`, `Agents/` and `Workflows/` scaffold an
|
|
23
23
|
* agentic execution layer that a distribution layers on. Their names stay here
|
|
24
24
|
* regardless, because reserving a name is what stops a KB that HAS the folder
|
|
25
25
|
* from having it treated as ordinary content — the file tree would otherwise
|
|
@@ -27,7 +27,7 @@ import { validateFilename } from './filename.js';
|
|
|
27
27
|
*
|
|
28
28
|
* These names are the single source of truth for both sides of the app:
|
|
29
29
|
* - Backend: the graph parser discovers its content under `KnowledgeBase/`
|
|
30
|
-
* and `Data/`; `Plugins/`, `Agents/`, `
|
|
30
|
+
* and `Data/`; `Plugins/`, `Agents/`, `Workflows/` (and anything else at
|
|
31
31
|
* the root) are ignored by parsing, validation, and the diagram.
|
|
32
32
|
* - Frontend: the file tree renders these root folders as distinct
|
|
33
33
|
* top-level sections.
|
|
@@ -302,9 +302,9 @@ export function validateKbLayout(layout: KbLayout): string | null {
|
|
|
302
302
|
}
|
|
303
303
|
// The fixed reserved roots are taken too: naming the skills folder `Data`
|
|
304
304
|
// would give one directory two reserved roles.
|
|
305
|
-
const fixed = [DATA_DIR, AGENTS_DIR,
|
|
305
|
+
const fixed = [DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR].map((n) => n.toLowerCase());
|
|
306
306
|
const clash = names.find((n) => fixed.includes(n));
|
|
307
|
-
if (clash) return `"${clash}" is a reserved folder name (${[DATA_DIR, AGENTS_DIR,
|
|
307
|
+
if (clash) return `"${clash}" is a reserved folder name (${[DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR].join(', ')}).`;
|
|
308
308
|
// Judged against the roots THIS layout declares, not the ones in effect: a
|
|
309
309
|
// save that renames the plugins folder and the guide together must be read
|
|
310
310
|
// as the pair it is.
|
|
@@ -716,7 +716,7 @@ export function pluginOfPath(repoRelativePath: string, layout: KbLayout): string
|
|
|
716
716
|
}
|
|
717
717
|
|
|
718
718
|
/**
|
|
719
|
-
* Folder under the repo root for agent-produced records (
|
|
719
|
+
* Folder under the repo root for agent-produced records (workflow runs,
|
|
720
720
|
* work items, intermediate outputs). Parsed exactly like `KnowledgeBase/`:
|
|
721
721
|
* its direct subfolders are self-contained ontologies.
|
|
722
722
|
*/
|
|
@@ -725,15 +725,15 @@ export const DATA_DIR = 'Data';
|
|
|
725
725
|
/** Folder under the repo root that holds `.agent` files — agent role configurations (not graph nodes). */
|
|
726
726
|
export const AGENTS_DIR = 'Agents';
|
|
727
727
|
|
|
728
|
-
/** Folder under the repo root that holds `.
|
|
729
|
-
export const
|
|
728
|
+
/** Folder under the repo root that holds `.workflow` files — execution-layer processes (not graph nodes). */
|
|
729
|
+
export const WORKFLOWS_DIR = 'Workflows';
|
|
730
730
|
|
|
731
731
|
/**
|
|
732
732
|
* Every reserved root name under `layout` — the set the file tree renders as
|
|
733
733
|
* its own sections rather than folding into Knowledge.
|
|
734
734
|
*/
|
|
735
735
|
export function reservedRootDirNames(layout: KbLayout): ReadonlySet<string> {
|
|
736
|
-
return new Set([layout.knowledgeBaseDir, layout.skillsDir, layout.pluginsDir, DATA_DIR, AGENTS_DIR,
|
|
736
|
+
return new Set([layout.knowledgeBaseDir, layout.skillsDir, layout.pluginsDir, DATA_DIR, AGENTS_DIR, WORKFLOWS_DIR]);
|
|
737
737
|
}
|
|
738
738
|
|
|
739
739
|
/**
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/workflow/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/workflow/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAgXH,wEAAwE;AACxE,MAAM,UAAU,iBAAiB,CAC/B,CAAuB;IAEvB,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,cAAc;QACzB,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,qBAAqB;QAChC,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAChC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAC1B,CAAuB;IAEvB,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAC5B,CAAC,CAAC,IAAI,KAAK,6BAA6B,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `IWorkflowService` — the abstraction the rest of the app talks to instead
|
|
3
|
-
* of raw git/gh. See `bevel-platform/PLAN.md` for the motivation and the spec the
|
|
4
|
-
* methods here encode (protected branches, atomic per-file changes, file
|
|
5
|
-
* locks, change requests as branch-pair reconciliations).
|
|
6
|
-
*
|
|
7
|
-
* Naming convention: methods speak workflow vocabulary (`commitChange`,
|
|
8
|
-
* `openChangeRequest`, `acquireLock`), never git vocabulary (`commit`,
|
|
9
|
-
* `createPr`, no analogue for locks). Implementations may delegate to the
|
|
10
|
-
* existing git/PR/review-workflow services until those are folded into
|
|
11
|
-
* `modules/workflow`; callers should not depend on that fact.
|
|
12
|
-
*
|
|
13
|
-
* Some methods on this interface have no backing service yet — file locks,
|
|
14
|
-
* `openChangeRequest`, `updateFromTarget`. The facade implementation throws
|
|
15
|
-
* `NotImplementedWorkflowError` from those until the underlying support
|
|
16
|
-
* lands. The interface defines them up-front so consumers can plan against
|
|
17
|
-
* the final surface area.
|
|
18
|
-
*/
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=interface.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/workflow/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAI5B,qDAAqD;AACrD,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAItD;;;;;;GAMG;AACH,MAAM,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAI9C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAC/B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAIxC;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAC/C,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,GAAG;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AACzF,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAClD,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAC7C,MAAM,MAAM,wBAAwB,GAAG,aAAa,CAAC;AACrD,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8BAA8B;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,2DAA2D;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,GAAG,CAAC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjE,gEAAgE;AAChE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAErE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3G;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAC3B,sBAAsB,GACtB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3G;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC1G,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,sHAAsH;AACtH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|