@bevel-software/platform-shared 0.14.0 → 0.19.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.
Files changed (73) hide show
  1. package/dist/auth/types.d.ts +12 -0
  2. package/dist/auth/types.d.ts.map +1 -1
  3. package/dist/git/pr.types.d.ts +75 -11
  4. package/dist/git/pr.types.d.ts.map +1 -1
  5. package/dist/git/types.d.ts +75 -2
  6. package/dist/git/types.d.ts.map +1 -1
  7. package/dist/index.d.ts +6 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +6 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/workflow/events.d.ts +39 -4
  12. package/dist/workflow/events.d.ts.map +1 -1
  13. package/dist/workflow/events.js.map +1 -1
  14. package/dist/workflow/interface.d.ts +137 -5
  15. package/dist/workflow/interface.d.ts.map +1 -1
  16. package/dist/workflow/types.d.ts +93 -0
  17. package/dist/workflow/types.d.ts.map +1 -1
  18. package/dist/workspace/access-verbs.d.ts +83 -0
  19. package/dist/workspace/access-verbs.d.ts.map +1 -0
  20. package/dist/workspace/access-verbs.js +110 -0
  21. package/dist/workspace/access-verbs.js.map +1 -0
  22. package/dist/workspace/agent-preamble.d.ts +33 -0
  23. package/dist/workspace/agent-preamble.d.ts.map +1 -0
  24. package/dist/workspace/agent-preamble.js +45 -0
  25. package/dist/workspace/agent-preamble.js.map +1 -0
  26. package/dist/workspace/entry-exists.d.ts +27 -0
  27. package/dist/workspace/entry-exists.d.ts.map +1 -0
  28. package/dist/workspace/entry-exists.js +33 -0
  29. package/dist/workspace/entry-exists.js.map +1 -0
  30. package/dist/workspace/filename.d.ts +15 -0
  31. package/dist/workspace/filename.d.ts.map +1 -1
  32. package/dist/workspace/filename.js +37 -3
  33. package/dist/workspace/filename.js.map +1 -1
  34. package/dist/workspace/frontmatter-carriers.d.ts +44 -0
  35. package/dist/workspace/frontmatter-carriers.d.ts.map +1 -0
  36. package/dist/workspace/frontmatter-carriers.js +52 -0
  37. package/dist/workspace/frontmatter-carriers.js.map +1 -0
  38. package/dist/workspace/frontmatter.d.ts +23 -4
  39. package/dist/workspace/frontmatter.d.ts.map +1 -1
  40. package/dist/workspace/frontmatter.js +59 -9
  41. package/dist/workspace/frontmatter.js.map +1 -1
  42. package/dist/workspace/kb-layout.d.ts +365 -19
  43. package/dist/workspace/kb-layout.d.ts.map +1 -1
  44. package/dist/workspace/kb-layout.js +619 -20
  45. package/dist/workspace/kb-layout.js.map +1 -1
  46. package/dist/workspace/placeholder.d.ts +21 -0
  47. package/dist/workspace/placeholder.d.ts.map +1 -0
  48. package/dist/workspace/placeholder.js +28 -0
  49. package/dist/workspace/placeholder.js.map +1 -0
  50. package/dist/workspace/platform-files.d.ts +105 -0
  51. package/dist/workspace/platform-files.d.ts.map +1 -0
  52. package/dist/workspace/platform-files.js +147 -0
  53. package/dist/workspace/platform-files.js.map +1 -0
  54. package/dist/workspace/types.d.ts +8 -0
  55. package/dist/workspace/types.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/auth/types.ts +12 -0
  58. package/src/git/pr.types.ts +77 -11
  59. package/src/git/types.ts +81 -3
  60. package/src/index.ts +6 -0
  61. package/src/workflow/events.ts +40 -3
  62. package/src/workflow/interface.ts +162 -6
  63. package/src/workflow/types.ts +70 -0
  64. package/src/workspace/access-verbs.ts +124 -0
  65. package/src/workspace/agent-preamble.ts +47 -0
  66. package/src/workspace/entry-exists.ts +36 -0
  67. package/src/workspace/filename.ts +38 -3
  68. package/src/workspace/frontmatter-carriers.ts +57 -0
  69. package/src/workspace/frontmatter.ts +57 -8
  70. package/src/workspace/kb-layout.ts +660 -24
  71. package/src/workspace/placeholder.ts +29 -0
  72. package/src/workspace/platform-files.ts +188 -0
  73. package/src/workspace/types.ts +8 -0
@@ -17,15 +17,24 @@
17
17
  * the final surface area.
18
18
  */
19
19
  import type { AuthUser } from '../auth/types.js';
20
- import type { AcquireLockResult, Branch, BranchWorkspaceStatus, CancelChangeRequestResult, Change, ChangeInput, ChangeRequest, ChangeRequestComment, ChangeRequestDetail, ChangeRequestState, ChangedFile, FileApproval, FileLock, MergeChangeRequestOutcome, OpenChangeRequestInput, PostChangeRequestCommentInput } from './types.js';
20
+ import type { ChangeRequestApplyFailureKind } from '../git/pr.types.js';
21
+ import type { AcquireLockResult, Branch, BranchSyncOutcome, BranchWorkspaceStatus, CancelChangeRequestResult, Change, ChangeInput, ChangeRequest, ChangeRequestComment, ChangeRequestDetail, ChangeRequestState, ChangedFile, FileApproval, FileLock, FolderChangeRequest, FolderChangeRequestRemoval, MergeBranchOutcome, MergeChangeRequestOutcome, OpenChangeRequestInput, PostChangeRequestCommentInput } from './types.js';
21
22
  export interface IWorkflowService {
23
+ /**
24
+ * `freshFetch` bypasses the fetch TTL; `strictFetch` makes a failed fetch
25
+ * throw instead of serving the stale refs — for a caller that uses the
26
+ * list to prove a branch ABSENT (a stale list proves nothing).
27
+ */
22
28
  listBranches(workspaceId: string, opts?: {
23
29
  freshFetch?: boolean;
30
+ strictFetch?: boolean;
24
31
  }): Promise<Branch[]>;
25
32
  /**
26
33
  * Create a new unprotected branch. Protected branches cannot be created
27
34
  * via the workflow — the protected set is bootstrapped from the KB repo's
28
- * initial state and never grown at runtime.
35
+ * initial state and never grown at runtime. Holds the branch-lifecycle
36
+ * lock for `name`, so creation is serialised with the branch's deletion
37
+ * and with the retirement of a stale clone under that name.
29
38
  */
30
39
  createBranch(workspaceId: string, name: string, fromBase?: string): Promise<Branch>;
31
40
  /**
@@ -70,6 +79,31 @@ export interface IWorkflowService {
70
79
  * `user` when provided (falls back to the recovery bot).
71
80
  */
72
81
  updateFromRemote(workspaceId: string, user?: AuthUser): Promise<void>;
82
+ /**
83
+ * The remote-sync step for ONE branch's clone, driven by a git host's
84
+ * webhook or a pipeline rather than by a person's save. Pulls with the same
85
+ * rebase-and-autostash `updateFromRemote` uses and, when HEAD moved,
86
+ * announces the new tree (`fs-tree-changed`, one `file-changed` per path)
87
+ * so open browsers, agents and the catalogues see it at once.
88
+ *
89
+ * On a conflict it does what `updateFromRemote` does — the divergence goes
90
+ * to the same background recovery ladder (attributed to the recovery bot,
91
+ * since no person triggered the sync) — and, because that is not resolved
92
+ * at request time, reports it as a `conflict` outcome naming the files, so
93
+ * the caller can fail and a person can step in if recovery does not clear
94
+ * it. Never throws for a per-branch failure; every failure is an outcome.
95
+ */
96
+ syncWorkspaceFromRemote(workspaceId: string): Promise<BranchSyncOutcome>;
97
+ /**
98
+ * Retire the clone of a branch the host has deleted (a `remote-gone`
99
+ * outcome). Runs under the branch-lifecycle lock — the one `createBranch`
100
+ * and `deleteBranch` hold, so no Hexis operation can recreate the branch
101
+ * while the clone is examined and removed — revalidates against origin
102
+ * first, and backs off while a clone of the branch is being bootstrapped.
103
+ * A branch recreated in the meantime therefore keeps its clone. Returns
104
+ * whether the clone was removed.
105
+ */
106
+ retireRemoteGoneClone(workspaceId: string): Promise<boolean>;
73
107
  /**
74
108
  * Hard-reset the workspace's checked-out branch to `origin/<branch>` (fetch
75
109
  * first), discarding any local divergence. Break-glass primitive for
@@ -140,6 +174,18 @@ export interface IWorkflowService {
140
174
  baseline: string | null;
141
175
  current: string | null;
142
176
  }>;
177
+ /**
178
+ * One file as it stood at a change request's fork point (`sha`, which must
179
+ * lie on the target branch's history) — the "before" side of the request
180
+ * dialog's diff. `null` when the path did not exist there. Access is the
181
+ * caller's to check.
182
+ */
183
+ fileAtForkPoint(workspaceId: string, baseBranch: string, sha: string, path: string): Promise<string | null>;
184
+ /**
185
+ * A change request's current fork point: the merge base of the freshly
186
+ * fetched target and source branches, or `null` when they share no history.
187
+ */
188
+ changeRequestForkPoint(workspaceId: string, baseBranch: string, headBranch: string): Promise<string | null>;
143
189
  /**
144
190
  * Try to acquire an edit lock on `(branch, path)` for the caller. Returns
145
191
  * `{ acquired: true, lock }` on success; `{ acquired: false, lock }` if
@@ -161,9 +207,36 @@ export interface IWorkflowService {
161
207
  * `releaseLockUntouched`) — `releaseLock` rejects rather than ever enqueue
162
208
  * a commit for a hold that was never allowed to write. Internal callers
163
209
  * only; never plumbed from a route.
210
+ *
211
+ * Every non-coordination acquire also passes the READ-BEFORE-WRITE gate, on
212
+ * every branch: the caller must be able to read the path (for a new path,
213
+ * where it lands), or the path must start a new folder directly under one
214
+ * of the three roots (knowledge, skills, plugins). Nothing is created,
215
+ * changed or removed where its author cannot see it, whatever write rules
216
+ * say; a refusal is an `AccessDeniedError` whose `access.unreadable` names
217
+ * the place. A write that passed only as a platform-file restore is not
218
+ * asked — that rescue exists for a destination whose rules deny the admin
219
+ * making it.
220
+ *
221
+ * `opts.platformRestore` CLAIMS that this acquire is the destination side of
222
+ * an admin putting a misplaced platform file back (`access.md`, `roles.yaml`,
223
+ * `.bevelignore`, the agent guide), and names the move's `source` — the path the
224
+ * file is coming FROM, in the same spelling as `path`.
225
+ *
226
+ * It is a claim, not an authorisation. The implementation re-asks both
227
+ * halves of it: that source→path is a restore at all (a misplaced copy
228
+ * going back under its own name, never the root's own copy coming out —
229
+ * `isPlatformRestoreShape`), and that the access module
230
+ * (`canRestorePlatformFile`) lets this caller land this exact path. Only
231
+ * both yeses let the acquire past the write gate, so a caller that omits or
232
+ * fakes the source gains nothing: the gate never takes the route's word for
233
+ * which move this is.
164
234
  */
165
235
  acquireLock(workspaceId: string, branch: string, path: string, user: AuthUser, opts?: {
166
236
  coordination?: boolean;
237
+ platformRestore?: {
238
+ source: string;
239
+ };
167
240
  }): Promise<AcquireLockResult>;
168
241
  /** Heartbeat to keep an acquired lock alive past its current TTL. */
169
242
  heartbeatLock(workspaceId: string, branch: string, path: string, user: AuthUser): Promise<FileLock>;
@@ -276,9 +349,12 @@ export interface IWorkflowService {
276
349
  */
277
350
  openChangeRequest(workspaceId: string, user: AuthUser, input: OpenChangeRequestInput): Promise<ChangeRequestDetail>;
278
351
  /**
279
- * Re-run `targetBranch → sourceBranch` merge on an existing change request.
280
- * Used when the target has advanced since the change request was opened.
281
- * Throws `NotImplementedWorkflowError` until the backing merge path lands.
352
+ * Re-run `targetBranch → sourceBranch` merge on an existing change request
353
+ * and push it — the request dialog's Update, offered when the target has
354
+ * advanced since the request was opened. Only the request's author or
355
+ * someone who may apply it (`viewerCanUpdate`) may run it (403 otherwise).
356
+ * A conflicting merge is aborted, leaving the branch exactly as it was, and
357
+ * surfaces as `ChangeRequestConflictsError` (409).
282
358
  */
283
359
  updateFromTarget(workspaceId: string, user: AuthUser, number: number): Promise<ChangeRequestDetail>;
284
360
  listComments(number: number): Promise<ChangeRequestComment[]>;
@@ -304,6 +380,20 @@ export interface IWorkflowService {
304
380
  * Returns true when this call closed it.
305
381
  */
306
382
  closeEmptyChangeRequest(number: number, user: AuthUser): Promise<boolean>;
383
+ /**
384
+ * The open change requests proposing files under a KB-repo-relative
385
+ * folder, each with whether the caller may take those files out of it
386
+ * (their own request, they are an admin, or they may write every file it
387
+ * proposes under the folder).
388
+ */
389
+ changeRequestsUnderFolder(folder: string, user: AuthUser): Promise<FolderChangeRequest[]>;
390
+ /**
391
+ * Take every file under the folder out of every open change request
392
+ * proposing one; a request left empty is withdrawn. All or nothing: refused
393
+ * (403), with nothing touched, when the caller may not act on even one of
394
+ * them.
395
+ */
396
+ removeFolderFromChangeRequests(folder: string, user: AuthUser): Promise<FolderChangeRequestRemoval[]>;
307
397
  /**
308
398
  * Close every open change request either of whose branches no longer exists
309
399
  * — source or target, since a proposal needs both ends. Such a request
@@ -342,5 +432,47 @@ export interface IWorkflowService {
342
432
  mergeChangeRequest(number: number, user: AuthUser, headSha: string, approvals: FileApproval[], state: ChangeRequestState, title: string, baseBranch: string, workspaceId: string, opts?: {
343
433
  bypass?: boolean;
344
434
  }): Promise<MergeChangeRequestOutcome>;
435
+ /** Start an apply attempt on a request; the token scopes `recordApplyFailure`. */
436
+ beginApplyAttempt(number: number): number;
437
+ /** End an attempt `beginApplyAttempt` started, whatever its outcome. */
438
+ endApplyAttempt(number: number, attempt: number): void;
439
+ /**
440
+ * Persist why an apply did not land on the (still open) request, and
441
+ * announce `change-request-apply-failed` to every session so the author and
442
+ * other viewers re-read it — not only the user who clicked. Resolves false,
443
+ * recording and announcing nothing, when `attempt` is no longer the latest
444
+ * or the request is no longer open.
445
+ */
446
+ recordApplyFailure(number: number, failure: {
447
+ reason: string;
448
+ kind: ChangeRequestApplyFailureKind;
449
+ at?: Date;
450
+ }, user: AuthUser, attempt: number): Promise<boolean>;
451
+ /**
452
+ * Merge `sourceBranch` into `targetBranch` directly, authored as `user`,
453
+ * and publish the target. The agent path for merging branches — it never
454
+ * lands a change request:
455
+ *
456
+ * - refused (`OpenChangeRequestBlocksMergeError`, naming the request) when
457
+ * a change request from `sourceBranch` into `targetBranch` is open; a
458
+ * person merges that one in the app. The reverse direction — the target
459
+ * into the source, the sync that keeps a draft current — is allowed.
460
+ * - refused (`WorkflowDomainError`, `kind: 'protected-merge-target'`,
461
+ * status 403, listing the denied paths) when `targetBranch` is protected
462
+ * and `user` could not commit every file the merge changes directly to
463
+ * it. Decided against the target commit the merge is built on, not a
464
+ * workspace `HEAD` that may be behind it.
465
+ * - refused (`WorkflowDomainError`, `kind: 'protected-merge-changes-roles'`,
466
+ * status 403) when `targetBranch` is protected and the merge would
467
+ * change its `roles.yaml` — whoever the caller is. Roles never change
468
+ * through a merge; a change request's merge restores the target's copy
469
+ * first, and this path refuses instead. Roles are changed in the app.
470
+ * - refused (`WorkflowDomainError`, `kind: 'merge-target-busy'`, status
471
+ * 409) when `targetBranch`'s workspace still holds unshared edits: the
472
+ * merge resets it to the published tip, which would discard them.
473
+ *
474
+ * Conflicts write nothing and come back as `conflicts-need-resolution`.
475
+ */
476
+ mergeBranch(user: AuthUser, sourceBranch: string, targetBranch: string): Promise<MergeBranchOutcome>;
345
477
  }
346
478
  //# sourceMappingURL=interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/workflow/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/workflow/interface.ts"],"names":[],"mappings":"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"}
@@ -104,6 +104,43 @@ export type MergeChangeRequestResult = MergePrResult;
104
104
  export type CancelChangeRequestResult = CancelPrResult;
105
105
  export type ChangeRequestComment = PrReviewComment;
106
106
  export type PostChangeRequestCommentInput = PostPrCommentInput;
107
+ /**
108
+ * One open change request proposing files under a folder, as a folder delete
109
+ * lists it. `mayRemove`: the caller may take those files out of it (their own,
110
+ * they are an admin, or they may write every file it proposes under the
111
+ * folder); a refusal always says why.
112
+ */
113
+ export type FolderChangeRequest = {
114
+ number: number;
115
+ title: string;
116
+ authorName: string | null;
117
+ /** The caller authored it. */
118
+ mine: boolean;
119
+ /** KB-repo-relative paths it proposes under the folder. */
120
+ paths: string[];
121
+ } & ({
122
+ mayRemove: true;
123
+ } | {
124
+ mayRemove: false;
125
+ reason: string;
126
+ });
127
+ /** What removing a folder's files did to one change request. */
128
+ export interface FolderChangeRequestRemoval {
129
+ number: number;
130
+ removedPaths: string[];
131
+ /** The request proposed nothing else, so it was withdrawn. */
132
+ withdrawn: boolean;
133
+ /**
134
+ * Files under the folder it still proposes: added while the removal ran,
135
+ * so never judged, and left alone.
136
+ */
137
+ stillProposed: string[];
138
+ /**
139
+ * It proposes nothing now but was kept open, because a save to its branch
140
+ * was still landing — withdrawing would have deleted that save.
141
+ */
142
+ keptForSaves: boolean;
143
+ }
107
144
  /**
108
145
  * Input for opening a new change request. The workflow auto-merges
109
146
  * `targetBranch` into `sourceBranch` as part of opening, so callers don't
@@ -137,4 +174,60 @@ export type MergeChangeRequestOutcome = {
137
174
  kind: 'conflicts-need-resolution';
138
175
  conflictedPaths: string[];
139
176
  };
177
+ /**
178
+ * What a direct branch-to-branch merge (`mergeBranch`) did: landed as `sha`
179
+ * on the target (the target's own tip when it already contained the source),
180
+ * or stopped on conflicts, nothing written.
181
+ */
182
+ export type MergeBranchOutcome = {
183
+ kind: 'merged';
184
+ sha: string;
185
+ } | {
186
+ kind: 'conflicts-need-resolution';
187
+ conflictedPaths: string[];
188
+ };
189
+ /**
190
+ * What a remote sync did to one branch's clone. One entry per branch in the
191
+ * `POST /api/sync` response, so a pipeline can read exactly which branch
192
+ * moved, which was already current, and which needs a person.
193
+ *
194
+ * - `updated` — the clone moved from `from` (null when it had no commits
195
+ * yet) to `to`.
196
+ * - `up-to-date` — origin had nothing new; `to` is the unchanged HEAD.
197
+ * - `not-cloned` — Hexis has no clone of this branch, so there is nothing
198
+ * to refresh (the first visit clones it fresh).
199
+ * - `remote-gone` — the branch no longer exists on the host; the stale clone
200
+ * is removed. Not a failure: a deleted branch has nothing
201
+ * to sync.
202
+ * - `conflict` — Hexis-side commits contradict what landed on the host.
203
+ * The clone is untouched; `error` is the message to show
204
+ * and `conflictedPaths` the files a person must reconcile.
205
+ * - `error` — the pull failed for another reason (origin unreachable,
206
+ * credential refused); `error` is the sanitised message.
207
+ */
208
+ export type BranchSyncOutcome = {
209
+ branch: string;
210
+ outcome: 'updated';
211
+ from: string | null;
212
+ to: string;
213
+ } | {
214
+ branch: string;
215
+ outcome: 'up-to-date';
216
+ to: string;
217
+ } | {
218
+ branch: string;
219
+ outcome: 'not-cloned';
220
+ } | {
221
+ branch: string;
222
+ outcome: 'remote-gone';
223
+ } | {
224
+ branch: string;
225
+ outcome: 'conflict';
226
+ conflictedPaths: string[];
227
+ error: string;
228
+ } | {
229
+ branch: string;
230
+ outcome: 'error';
231
+ error: string;
232
+ };
140
233
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
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,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,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,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;AACvD,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC;AACnD,MAAM,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAE/D;;;;;;;;;GASG;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;CACtB;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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * The access verbs and the ONE dependency graph between them.
3
+ *
4
+ * Shared so that everything that folds verbs — the resolver in core-backend,
5
+ * the eligible lists it serves, and the share dialog in core-frontend that
6
+ * renders and edits them — reads the same table. A second fold written out by
7
+ * hand somewhere else is how the sheet comes to show "Owner" for someone the
8
+ * resolver refuses, or writes a `read:` line under an `owner:` it just granted.
9
+ *
10
+ * `read` controls who may VIEW a path. It is default-deny: a path with no
11
+ * effective grant of any verb is not readable. `write` is editing (and, with
12
+ * it, approval rights), `download` is saving a copy, `owner` is the contact
13
+ * point for the node and the right to manage its access.
14
+ */
15
+ /**
16
+ * Verbs an `access.md` frontmatter can grant, each a list of principals
17
+ * optionally prefixed with `deny `. `AccessFile.entries` in the backend is
18
+ * statically keyed on this union; keep `Verb` and `KNOWN_VERBS` in lockstep.
19
+ */
20
+ export declare const KNOWN_VERBS: readonly ["read", "write", "download", "owner"];
21
+ export type Verb = (typeof KNOWN_VERBS)[number];
22
+ /**
23
+ * THE DEPENDENCY GRAPH — what holding each verb presupposes, declared once.
24
+ * `owner` presupposes `write` and `download`; `write` and `download` each
25
+ * presuppose `read`; `read` presupposes nothing. Everything about how verbs
26
+ * fold into one another is DERIVED from this table, in both directions:
27
+ *
28
+ * - a GRANT confers, downwards, every verb the granted one presupposes
29
+ * (`sourceVerbsFor`, `effectiveVerbs`): an owner may edit, save and open;
30
+ * an editor may open; someone trusted with a copy may open it;
31
+ * - a DENIAL strips, upwards, every verb that presupposes the denied one
32
+ * (`requiredVerbsFor`): nobody owns what they may not edit, and nobody
33
+ * edits or saves what they may not open.
34
+ *
35
+ * Neither converse is implied: a `deny write` says nothing about `read`, and a
36
+ * `read` grant confers no `write`. `write` and `download` are independent of
37
+ * each other. Add a verb, or change what one presupposes, HERE and nowhere
38
+ * else; every list and fold below follows.
39
+ */
40
+ export declare const VERB_REQUIRES: Readonly<Record<Verb, readonly Verb[]>>;
41
+ /**
42
+ * Verbs whose GRANT confers `verb`, target verb first: `verb` itself, then
43
+ * every verb that presupposes it, in `KNOWN_VERBS` order.
44
+ */
45
+ export declare function sourceVerbsFor(verb: Verb): Verb[];
46
+ /**
47
+ * Verbs whose DENIAL strips `verb`, target verb first: `verb` itself, then
48
+ * every verb it presupposes, in `KNOWN_VERBS` order.
49
+ */
50
+ export declare function requiredVerbsFor(verb: Verb): Verb[];
51
+ /**
52
+ * The verbs in the order a change to a principal's set has to be APPLIED:
53
+ * broadest first, so every verb comes before the verbs it presupposes (ties in
54
+ * `KNOWN_VERBS` order). Lowering must start at the top — denying `write` while
55
+ * an `owner:` grant still stands in the same file is refused as ineffective,
56
+ * since owner confers write; stripping owner first removes what was conferring
57
+ * it. Raising reads the same order for the opposite reason: granting `owner`
58
+ * first satisfies the rest in one line.
59
+ */
60
+ export declare const VERBS_BROADEST_FIRST: readonly Verb[];
61
+ /** One flag per verb: what a principal holds, or what a form has ticked. */
62
+ export type VerbSet = Record<Verb, boolean>;
63
+ /** A partial set — flags left out read as not held. */
64
+ export type VerbFlags = Partial<Record<Verb, boolean>>;
65
+ /**
66
+ * The grant fold, as a whole set: what a principal EFFECTIVELY holds given the
67
+ * verbs they are granted. Each verb is held when it, or any verb that
68
+ * presupposes it, is in `held`. Idempotent on an already-folded set.
69
+ */
70
+ export declare function effectiveVerbs(held: VerbFlags): VerbSet;
71
+ /**
72
+ * True when some OTHER verb in `held` confers `verb` — it is implied, not
73
+ * chosen, which is what a form renders as checked-and-disabled.
74
+ */
75
+ export declare function conferredByOthers(held: VerbFlags, verb: Verb): boolean;
76
+ /**
77
+ * The fewest grant lines that produce `held`: every held verb that no other
78
+ * held verb confers, broadest first. `{ owner }` is one line; `{ write, read,
79
+ * download }` is `write` and `download` (read rides on either); `{ read,
80
+ * download }` is `download` alone. A flag left out is not granted.
81
+ */
82
+ export declare function minimalGrantVerbs(held: VerbFlags): Verb[];
83
+ //# sourceMappingURL=access-verbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-verbs.d.ts","sourceRoot":"","sources":["../../src/workspace/access-verbs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,iDAAkD,CAAC;AAC3E,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC,CAKjE,CAAC;AAcF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAEjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAGnD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,IAAI,EAG/C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,uDAAuD;AACvD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAIvD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,CAEzD"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The access verbs and the ONE dependency graph between them.
3
+ *
4
+ * Shared so that everything that folds verbs — the resolver in core-backend,
5
+ * the eligible lists it serves, and the share dialog in core-frontend that
6
+ * renders and edits them — reads the same table. A second fold written out by
7
+ * hand somewhere else is how the sheet comes to show "Owner" for someone the
8
+ * resolver refuses, or writes a `read:` line under an `owner:` it just granted.
9
+ *
10
+ * `read` controls who may VIEW a path. It is default-deny: a path with no
11
+ * effective grant of any verb is not readable. `write` is editing (and, with
12
+ * it, approval rights), `download` is saving a copy, `owner` is the contact
13
+ * point for the node and the right to manage its access.
14
+ */
15
+ /**
16
+ * Verbs an `access.md` frontmatter can grant, each a list of principals
17
+ * optionally prefixed with `deny `. `AccessFile.entries` in the backend is
18
+ * statically keyed on this union; keep `Verb` and `KNOWN_VERBS` in lockstep.
19
+ */
20
+ export const KNOWN_VERBS = ['read', 'write', 'download', 'owner'];
21
+ /**
22
+ * THE DEPENDENCY GRAPH — what holding each verb presupposes, declared once.
23
+ * `owner` presupposes `write` and `download`; `write` and `download` each
24
+ * presuppose `read`; `read` presupposes nothing. Everything about how verbs
25
+ * fold into one another is DERIVED from this table, in both directions:
26
+ *
27
+ * - a GRANT confers, downwards, every verb the granted one presupposes
28
+ * (`sourceVerbsFor`, `effectiveVerbs`): an owner may edit, save and open;
29
+ * an editor may open; someone trusted with a copy may open it;
30
+ * - a DENIAL strips, upwards, every verb that presupposes the denied one
31
+ * (`requiredVerbsFor`): nobody owns what they may not edit, and nobody
32
+ * edits or saves what they may not open.
33
+ *
34
+ * Neither converse is implied: a `deny write` says nothing about `read`, and a
35
+ * `read` grant confers no `write`. `write` and `download` are independent of
36
+ * each other. Add a verb, or change what one presupposes, HERE and nowhere
37
+ * else; every list and fold below follows.
38
+ */
39
+ export const VERB_REQUIRES = {
40
+ read: [],
41
+ write: ['read'],
42
+ download: ['read'],
43
+ owner: ['write', 'download'],
44
+ };
45
+ /** `verb` and everything it presupposes, transitively. */
46
+ function presupposedBy(verb) {
47
+ const out = new Set();
48
+ const visit = (v) => {
49
+ if (out.has(v))
50
+ return;
51
+ out.add(v);
52
+ for (const dep of VERB_REQUIRES[v])
53
+ visit(dep);
54
+ };
55
+ visit(verb);
56
+ return out;
57
+ }
58
+ /**
59
+ * Verbs whose GRANT confers `verb`, target verb first: `verb` itself, then
60
+ * every verb that presupposes it, in `KNOWN_VERBS` order.
61
+ */
62
+ export function sourceVerbsFor(verb) {
63
+ return [verb, ...KNOWN_VERBS.filter((v) => v !== verb && presupposedBy(v).has(verb))];
64
+ }
65
+ /**
66
+ * Verbs whose DENIAL strips `verb`, target verb first: `verb` itself, then
67
+ * every verb it presupposes, in `KNOWN_VERBS` order.
68
+ */
69
+ export function requiredVerbsFor(verb) {
70
+ const needs = presupposedBy(verb);
71
+ return [verb, ...KNOWN_VERBS.filter((v) => v !== verb && needs.has(v))];
72
+ }
73
+ /**
74
+ * The verbs in the order a change to a principal's set has to be APPLIED:
75
+ * broadest first, so every verb comes before the verbs it presupposes (ties in
76
+ * `KNOWN_VERBS` order). Lowering must start at the top — denying `write` while
77
+ * an `owner:` grant still stands in the same file is refused as ineffective,
78
+ * since owner confers write; stripping owner first removes what was conferring
79
+ * it. Raising reads the same order for the opposite reason: granting `owner`
80
+ * first satisfies the rest in one line.
81
+ */
82
+ export const VERBS_BROADEST_FIRST = [...KNOWN_VERBS].sort((a, b) => presupposedBy(b).size - presupposedBy(a).size || KNOWN_VERBS.indexOf(a) - KNOWN_VERBS.indexOf(b));
83
+ /**
84
+ * The grant fold, as a whole set: what a principal EFFECTIVELY holds given the
85
+ * verbs they are granted. Each verb is held when it, or any verb that
86
+ * presupposes it, is in `held`. Idempotent on an already-folded set.
87
+ */
88
+ export function effectiveVerbs(held) {
89
+ const out = {};
90
+ for (const verb of KNOWN_VERBS)
91
+ out[verb] = sourceVerbsFor(verb).some((w) => held[w] === true);
92
+ return out;
93
+ }
94
+ /**
95
+ * True when some OTHER verb in `held` confers `verb` — it is implied, not
96
+ * chosen, which is what a form renders as checked-and-disabled.
97
+ */
98
+ export function conferredByOthers(held, verb) {
99
+ return sourceVerbsFor(verb).some((w) => w !== verb && held[w] === true);
100
+ }
101
+ /**
102
+ * The fewest grant lines that produce `held`: every held verb that no other
103
+ * held verb confers, broadest first. `{ owner }` is one line; `{ write, read,
104
+ * download }` is `write` and `download` (read rides on either); `{ read,
105
+ * download }` is `download` alone. A flag left out is not granted.
106
+ */
107
+ export function minimalGrantVerbs(held) {
108
+ return VERBS_BROADEST_FIRST.filter((verb) => held[verb] === true && !conferredByOthers(held, verb));
109
+ }
110
+ //# sourceMappingURL=access-verbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-verbs.js","sourceRoot":"","sources":["../../src/workspace/access-verbs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The rules about the deployment preamble's TEXT that both sides need to
3
+ * agree on: the file it lives in, the caps it is cut at, and what counts as a
4
+ * private comment inside it.
5
+ *
6
+ * These lived in the backend composer and were mirrored by hand in the
7
+ * frontend editor, whose own comment said so. The two are not free to differ:
8
+ * the editor decides what an admin is shown and what it writes back, the
9
+ * composer decides what agents receive, and a drift between them shows the
10
+ * admin one description while agents get another.
11
+ *
12
+ * Pure: no IO, no clock, no platform assumptions.
13
+ */
14
+ /** The repository-root file an admin edits. */
15
+ export declare const PREAMBLE_FILE = "mcp-description.md";
16
+ /** UTF-16 units of preamble sent on the handshake before the marker replaces the rest. */
17
+ export declare const PREAMBLE_CAP = 6000;
18
+ /** UTF-16 units of the whole tool prefix (fixed line included). */
19
+ export declare const TOOL_PREFIX_CAP = 300;
20
+ /**
21
+ * Remove every `<!-- … -->` block.
22
+ *
23
+ * A `<!--` that is never closed takes the rest of the text with it and is
24
+ * reported, so a caller can warn: that is the fail-closed half of the rule,
25
+ * and it is why an admin's private note cannot leak through the likeliest
26
+ * editing slip. The editor strips the same blocks to decide what to show, and
27
+ * closes an unterminated one when it writes back.
28
+ */
29
+ export declare function stripHtmlComments(text: string): {
30
+ text: string;
31
+ unterminated: boolean;
32
+ };
33
+ //# sourceMappingURL=agent-preamble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-preamble.d.ts","sourceRoot":"","sources":["../../src/workspace/agent-preamble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,0FAA0F;AAC1F,eAAO,MAAM,YAAY,OAAQ,CAAC;AAElC,mEAAmE;AACnE,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAcvF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The rules about the deployment preamble's TEXT that both sides need to
3
+ * agree on: the file it lives in, the caps it is cut at, and what counts as a
4
+ * private comment inside it.
5
+ *
6
+ * These lived in the backend composer and were mirrored by hand in the
7
+ * frontend editor, whose own comment said so. The two are not free to differ:
8
+ * the editor decides what an admin is shown and what it writes back, the
9
+ * composer decides what agents receive, and a drift between them shows the
10
+ * admin one description while agents get another.
11
+ *
12
+ * Pure: no IO, no clock, no platform assumptions.
13
+ */
14
+ /** The repository-root file an admin edits. */
15
+ export const PREAMBLE_FILE = 'mcp-description.md';
16
+ /** UTF-16 units of preamble sent on the handshake before the marker replaces the rest. */
17
+ export const PREAMBLE_CAP = 6_000;
18
+ /** UTF-16 units of the whole tool prefix (fixed line included). */
19
+ export const TOOL_PREFIX_CAP = 300;
20
+ /**
21
+ * Remove every `<!-- … -->` block.
22
+ *
23
+ * A `<!--` that is never closed takes the rest of the text with it and is
24
+ * reported, so a caller can warn: that is the fail-closed half of the rule,
25
+ * and it is why an admin's private note cannot leak through the likeliest
26
+ * editing slip. The editor strips the same blocks to decide what to show, and
27
+ * closes an unterminated one when it writes back.
28
+ */
29
+ export function stripHtmlComments(text) {
30
+ let out = '';
31
+ let from = 0;
32
+ for (;;) {
33
+ const open = text.indexOf('<!--', from);
34
+ if (open === -1) {
35
+ out += text.slice(from);
36
+ return { text: out, unterminated: false };
37
+ }
38
+ out += text.slice(from, open);
39
+ const close = text.indexOf('-->', open + 4);
40
+ if (close === -1)
41
+ return { text: out, unterminated: true };
42
+ from = close + 3;
43
+ }
44
+ }
45
+ //# sourceMappingURL=agent-preamble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-preamble.js","sourceRoot":"","sources":["../../src/workspace/agent-preamble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAElD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAElC,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YAChB,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC;QACD,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC3D,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}