@seat-mesh/core 1.0.14 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -23,6 +23,8 @@ export * from "./profile/profile.js";
23
23
  export * from "./profile/profile-edit.js";
24
24
  export * from "./paths/runtime-paths.js";
25
25
  export * from "./runtime/role-index.js";
26
+ export * from "./runtime/role-pack.js";
27
+ export * from "./runtime/role-migrate.js";
26
28
  export * from "./chatroom/index.js";
27
29
  export * from "./jsonl/index.js";
28
30
  export * from "./chatfile/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ export * from "./profile/profile.js";
23
23
  export * from "./profile/profile-edit.js";
24
24
  export * from "./paths/runtime-paths.js";
25
25
  export * from "./runtime/role-index.js";
26
+ export * from "./runtime/role-pack.js";
27
+ export * from "./runtime/role-migrate.js";
26
28
  export * from "./chatroom/index.js";
27
29
  export * from "./jsonl/index.js";
28
30
  export * from "./chatfile/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
@@ -28,16 +28,38 @@ export interface RoleIndex {
28
28
  guards?: RoleAllowDeny;
29
29
  /** Attached-external (seatmesh func) allow/deny per role. */
30
30
  funcs?: RoleAllowDeny;
31
+ /** Engine-owned sections from vendor (informational; set on load). */
32
+ locked?: string[];
31
33
  }
34
+ /**
35
+ * Merge user extend onto vendor with locked-section rules:
36
+ * - locked `policies`: vendor ids win; extend may only add new ids
37
+ * - locked `banner` / `read_first` / `files` / `inject`: union (append); extend cannot clear
38
+ * - locked `guards`/`funcs`: deny accumulates; allow from extend only if section unlocked
39
+ * - unlocked sections: child wins (same as mergeRoleIndex)
40
+ */
41
+ export declare function mergeExtendRespectingLocked(vendor: RoleIndex, extend: Partial<RoleIndex>, lockedSections: string[]): RoleIndex;
32
42
  /**
33
43
  * True when `id` is usable for this merged role: explicit deny always wins;
34
44
  * otherwise an explicit allow list restricts to just that list; with neither,
35
45
  * default to allowed (profile-level `external.default` is the real gate for funcs).
36
46
  */
37
47
  export declare function roleAllows(rule: RoleAllowDeny | undefined, id: string): boolean;
48
+ /**
49
+ * Resolve which yaml files define a role kind:
50
+ * 1. `_vendor/<name>.yaml` + optional `<name>.extend.yaml` (1.1+)
51
+ * 2. legacy flat `<name>.yaml` (1.0)
52
+ */
53
+ export declare function resolveRoleSources(rolesDir: string, name: string): {
54
+ vendor?: string;
55
+ extend?: string;
56
+ legacy?: string;
57
+ mode: "vendor+extend" | "legacy" | "missing";
58
+ };
38
59
  /**
39
60
  * Pane column id -> merged role index.
40
- * 1. Seat kind file (`manager.yaml`) with optional `extends:` chain (+ implicit common).
61
+ * 1. Seat kind file (`_vendor/manager.yaml` + `manager.extend.yaml`, or legacy flat)
62
+ * with optional `extends:` chain (+ implicit common).
41
63
  * 2. Optional column overlay `.sm/roles/columns/<columnId>.yaml` with `extends: manager` (etc.).
42
64
  * Never load `roles/<columnId>.yaml` as a kind — use `columns/<columnId>.yaml`.
43
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"role-index.d.ts","sourceRoot":"","sources":["../../src/runtime/role-index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAuCD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAK/E;AA8DD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAa7E;AAMD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACjC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACvD,MAAM,CA0CR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAcpC"}
1
+ {"version":3,"file":"role-index.d.ts","sourceRoot":"","sources":["../../src/runtime/role-index.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AA6CD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAC1B,cAAc,EAAE,MAAM,EAAE,GACvB,SAAS,CA8CX;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAK/E;AA6BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAA;CAAE,CAgBrG;AAwFD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAY7E;AAMD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACjC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACvD,MAAM,CA0CR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAcpC"}
@@ -2,6 +2,7 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import YAML from "yaml";
4
4
  import { seatKindFromId } from "../schema/seat-kind.js";
5
+ import { DEFAULT_LOCKED_SECTIONS_1_1, lockedSectionsFromYaml, roleExtendPath, roleLegacyFlatPath, roleVendorPath, stripRoleMetaKeys, vendorRolesDir, } from "./role-pack.js";
5
6
  /** Deny accumulates from base; child role's own allow list wins over base's allow. */
6
7
  function mergeAllowDeny(base, role) {
7
8
  if (!base && !role)
@@ -35,6 +36,60 @@ function mergeRoleIndex(base, role) {
35
36
  vars: { ...(base.vars ?? {}), ...(role.vars ?? {}) },
36
37
  guards: mergeAllowDeny(base.guards, role.guards),
37
38
  funcs: mergeAllowDeny(base.funcs, role.funcs),
39
+ locked: role.locked ?? base.locked,
40
+ };
41
+ }
42
+ /**
43
+ * Merge user extend onto vendor with locked-section rules:
44
+ * - locked `policies`: vendor ids win; extend may only add new ids
45
+ * - locked `banner` / `read_first` / `files` / `inject`: union (append); extend cannot clear
46
+ * - locked `guards`/`funcs`: deny accumulates; allow from extend only if section unlocked
47
+ * - unlocked sections: child wins (same as mergeRoleIndex)
48
+ */
49
+ export function mergeExtendRespectingLocked(vendor, extend, lockedSections) {
50
+ const locked = new Set(lockedSections.map((s) => s.trim()).filter(Boolean));
51
+ const policyById = new Map();
52
+ for (const p of vendor.policies ?? [])
53
+ policyById.set(p.id, p);
54
+ for (const p of extend.policies ?? []) {
55
+ if (locked.has("policies") && policyById.has(p.id))
56
+ continue;
57
+ policyById.set(p.id, p);
58
+ }
59
+ const readFirst = [
60
+ ...(vendor.read_first ?? []),
61
+ ...(extend.read_first ?? []),
62
+ ].filter((item, _i, arr) => {
63
+ // dedupe by path, first wins (vendor)
64
+ return arr.findIndex((x) => x.path === item.path) === arr.indexOf(item);
65
+ });
66
+ const banners = [...(vendor.banner ?? []), ...(extend.banner ?? [])];
67
+ const files = [...new Set([...(vendor.files ?? []), ...(extend.files ?? [])])];
68
+ const inject = [...(vendor.inject ?? []), ...(extend.inject ?? [])];
69
+ let guards = vendor.guards;
70
+ let funcs = vendor.funcs;
71
+ if (extend.guards) {
72
+ guards = locked.has("guards")
73
+ ? mergeAllowDeny(vendor.guards, { deny: extend.guards.deny })
74
+ : mergeAllowDeny(vendor.guards, extend.guards);
75
+ }
76
+ if (extend.funcs) {
77
+ funcs = locked.has("funcs")
78
+ ? mergeAllowDeny(vendor.funcs, { deny: extend.funcs.deny })
79
+ : mergeAllowDeny(vendor.funcs, extend.funcs);
80
+ }
81
+ return {
82
+ kind: extend.kind ?? vendor.kind,
83
+ extends: extend.extends ?? vendor.extends,
84
+ banner: banners,
85
+ read_first: readFirst,
86
+ policies: [...policyById.values()],
87
+ files,
88
+ inject,
89
+ vars: { ...(vendor.vars ?? {}), ...(extend.vars ?? {}) },
90
+ guards,
91
+ funcs,
92
+ locked: lockedSections,
38
93
  };
39
94
  }
40
95
  /**
@@ -55,54 +110,131 @@ export function roleAllows(rule, id) {
55
110
  function normalizeRoleKind(kind) {
56
111
  return kind === "master" ? "manager" : kind;
57
112
  }
58
- function roleYamlPath(rolesDir, name) {
59
- return path.join(rolesDir, `${name}.yaml`);
60
- }
61
113
  function columnOverlayPath(rolesDir, columnId) {
62
114
  return path.join(rolesDir, "columns", `${columnId}.yaml`);
63
115
  }
64
- /** Load one yaml file and merge its `extends` chain (child wins on conflicts). */
65
- function loadRoleFileChain(rolesDir, name, filePath, visiting) {
66
- const key = `${filePath}`;
116
+ function toRoleIndex(name, raw) {
117
+ const cleaned = stripRoleMetaKeys(raw);
118
+ const locked = lockedSectionsFromYaml(raw);
119
+ return {
120
+ kind: cleaned.kind ?? name,
121
+ extends: cleaned.extends,
122
+ banner: cleaned.banner,
123
+ read_first: cleaned.read_first,
124
+ policies: cleaned.policies,
125
+ files: cleaned.files,
126
+ inject: cleaned.inject,
127
+ vars: cleaned.vars,
128
+ guards: cleaned.guards,
129
+ funcs: cleaned.funcs,
130
+ locked: locked.length ? locked : undefined,
131
+ };
132
+ }
133
+ /**
134
+ * Resolve which yaml files define a role kind:
135
+ * 1. `_vendor/<name>.yaml` + optional `<name>.extend.yaml` (1.1+)
136
+ * 2. legacy flat `<name>.yaml` (1.0)
137
+ */
138
+ export function resolveRoleSources(rolesDir, name) {
139
+ const vendor = roleVendorPath(rolesDir, name);
140
+ const extend = roleExtendPath(rolesDir, name);
141
+ const legacy = roleLegacyFlatPath(rolesDir, name);
142
+ if (fs.existsSync(vendor)) {
143
+ return {
144
+ vendor,
145
+ extend: fs.existsSync(extend) ? extend : undefined,
146
+ mode: "vendor+extend",
147
+ };
148
+ }
149
+ if (fs.existsSync(legacy)) {
150
+ return { legacy, mode: "legacy" };
151
+ }
152
+ // extend-only is invalid without vendor
153
+ return { mode: "missing" };
154
+ }
155
+ function loadYamlRole(filePath, name) {
156
+ const raw = YAML.parse(fs.readFileSync(filePath, "utf8"));
157
+ return toRoleIndex(name, raw ?? {});
158
+ }
159
+ /** Load one role name: vendor(+extend) or legacy flat, then merge extends chain. */
160
+ function loadRoleFileChain(rolesDir, name, visiting,
161
+ /** Explicit path for column overlays (user files under roles/columns/). */
162
+ explicitPath) {
163
+ const key = explicitPath ?? `role:${name}`;
67
164
  if (visiting.has(key)) {
68
- throw new Error(`role extends cycle at ${filePath}`);
165
+ throw new Error(`role extends cycle at ${key}`);
69
166
  }
70
167
  visiting.add(key);
71
- if (!fs.existsSync(filePath)) {
72
- throw new Error(`role index missing: ${filePath}`);
168
+ let self;
169
+ let lockedSections = [];
170
+ if (explicitPath) {
171
+ if (!fs.existsSync(explicitPath)) {
172
+ throw new Error(`role index missing: ${explicitPath}`);
173
+ }
174
+ self = loadYamlRole(explicitPath, name);
175
+ lockedSections = self.locked ?? [];
73
176
  }
74
- const raw = YAML.parse(fs.readFileSync(filePath, "utf8"));
75
- const extendsName = raw.extends?.trim();
76
- let merged = { kind: raw.kind ?? name };
177
+ else {
178
+ const src = resolveRoleSources(rolesDir, name);
179
+ if (src.mode === "missing") {
180
+ throw new Error(`role index missing: ${roleVendorPath(rolesDir, name)} (or legacy ${roleLegacyFlatPath(rolesDir, name)})`);
181
+ }
182
+ if (src.mode === "legacy") {
183
+ self = loadYamlRole(src.legacy, name);
184
+ lockedSections = self.locked ?? [];
185
+ }
186
+ else {
187
+ const vendor = loadYamlRole(src.vendor, name);
188
+ lockedSections =
189
+ vendor.locked?.length
190
+ ? vendor.locked
191
+ : fs.existsSync(vendorRolesDir(rolesDir))
192
+ ? [...DEFAULT_LOCKED_SECTIONS_1_1]
193
+ : [];
194
+ if (src.extend) {
195
+ const ext = loadYamlRole(src.extend, name);
196
+ self = mergeExtendRespectingLocked(vendor, ext, lockedSections);
197
+ }
198
+ else {
199
+ self = { ...vendor, locked: lockedSections };
200
+ }
201
+ }
202
+ }
203
+ const extendsName = self.extends?.trim();
204
+ let merged = { ...self, kind: self.kind ?? name, locked: lockedSections };
77
205
  if (extendsName) {
78
206
  const parentNorm = normalizeRoleKind(extendsName);
79
- const parentPath = roleYamlPath(rolesDir, parentNorm);
80
- const parent = loadRoleFileChain(rolesDir, parentNorm, parentPath, visiting);
81
- merged = mergeRoleIndex(parent, { ...merged, ...stripExtends(raw), kind: raw.kind ?? name });
207
+ const parent = loadRoleFileChain(rolesDir, parentNorm, visiting);
208
+ merged = mergeRoleIndex(parent, {
209
+ ...merged,
210
+ kind: self.kind ?? name,
211
+ locked: lockedSections,
212
+ });
82
213
  }
83
214
  else if (name === "common") {
84
- merged = mergeRoleIndex({}, { ...merged, ...stripExtends(raw), kind: "common" });
215
+ merged = mergeRoleIndex({}, { ...merged, kind: "common", locked: lockedSections });
85
216
  }
86
217
  else {
87
- const commonPath = roleYamlPath(rolesDir, "common");
88
- if (fs.existsSync(commonPath)) {
89
- const common = loadRoleFileChain(rolesDir, "common", commonPath, visiting);
90
- merged = mergeRoleIndex(common, { ...merged, ...stripExtends(raw), kind: raw.kind ?? name });
218
+ const commonSrc = resolveRoleSources(rolesDir, "common");
219
+ if (commonSrc.mode !== "missing") {
220
+ const common = loadRoleFileChain(rolesDir, "common", visiting);
221
+ merged = mergeRoleIndex(common, {
222
+ ...merged,
223
+ kind: self.kind ?? name,
224
+ locked: lockedSections,
225
+ });
91
226
  }
92
227
  else {
93
- merged = mergeRoleIndex({}, { ...merged, ...stripExtends(raw), kind: raw.kind ?? name });
228
+ merged = mergeRoleIndex({}, { ...merged, kind: self.kind ?? name, locked: lockedSections });
94
229
  }
95
230
  }
96
231
  visiting.delete(key);
97
232
  return merged;
98
233
  }
99
- function stripExtends(raw) {
100
- const { extends: _e, ...rest } = raw;
101
- return rest;
102
- }
103
234
  /**
104
235
  * Pane column id -> merged role index.
105
- * 1. Seat kind file (`manager.yaml`) with optional `extends:` chain (+ implicit common).
236
+ * 1. Seat kind file (`_vendor/manager.yaml` + `manager.extend.yaml`, or legacy flat)
237
+ * with optional `extends:` chain (+ implicit common).
106
238
  * 2. Optional column overlay `.sm/roles/columns/<columnId>.yaml` with `extends: manager` (etc.).
107
239
  * Never load `roles/<columnId>.yaml` as a kind — use `columns/<columnId>.yaml`.
108
240
  */
@@ -111,12 +243,11 @@ export function loadRoleIndex(rolesDir, paneRoleId) {
111
243
  const seatKind = seatKindFromId(columnId);
112
244
  const overlayPath = columnOverlayPath(rolesDir, columnId);
113
245
  if (columnId !== seatKind && fs.existsSync(overlayPath)) {
114
- const merged = loadRoleFileChain(rolesDir, columnId, overlayPath, new Set());
246
+ const merged = loadRoleFileChain(rolesDir, columnId, new Set(), overlayPath);
115
247
  merged.kind = seatKind;
116
248
  return merged;
117
249
  }
118
- const kindPath = roleYamlPath(rolesDir, seatKind);
119
- const merged = loadRoleFileChain(rolesDir, seatKind, kindPath, new Set());
250
+ const merged = loadRoleFileChain(rolesDir, seatKind, new Set());
120
251
  merged.kind = seatKind;
121
252
  return merged;
122
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"role-index.js","sourceRoot":"","sources":["../../src/runtime/role-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAuCxD,sFAAsF;AACtF,SAAS,cAAc,CAAC,IAAoB,EAAE,IAAoB;IAChE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,IAAwB,EAAE,IAAe;IAC/D,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACrE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ;QACxC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACxD,UAAU,EAAE,gBAAgB;QAC5B,QAAQ;QACR,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QACpD,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAChD,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAA+B,EAAE,EAAU;IACpE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAY;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,kFAAkF;AAClF,SAAS,iBAAiB,CACxB,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,QAAqB;IAErB,MAAM,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC;IAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAa,CAAC;IACtE,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,MAAM,GAAc,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAEnD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3E,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,GAAa;IACjC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,UAAkB;IAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1E,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,IAA4B;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAgB,EAChB,OAA+B,EAAE,EACjC,OAAsD,EAAE;IAExD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CACR,UAAU,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9G,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,QAAQ,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,UAAU,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAgB,EAChB,SAAiB;IAEjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;QAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5C,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"role-index.js","sourceRoot":"","sources":["../../src/runtime/role-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** JSON deep-equal for role yaml promotion (order-insensitive on plain objects). */
2
+ export declare function deepEqualJson(a: unknown, b: unknown): boolean;
3
+ //# sourceMappingURL=role-migrate-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-migrate-util.d.ts","sourceRoot":"","sources":["../../src/runtime/role-migrate-util.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAkB7D"}
@@ -0,0 +1,26 @@
1
+ /** JSON deep-equal for role yaml promotion (order-insensitive on plain objects). */
2
+ export function deepEqualJson(a, b) {
3
+ if (a === b)
4
+ return true;
5
+ if (typeof a !== typeof b)
6
+ return false;
7
+ if (a == null || b == null)
8
+ return a === b;
9
+ if (Array.isArray(a) && Array.isArray(b)) {
10
+ if (a.length !== b.length)
11
+ return false;
12
+ return a.every((x, i) => deepEqualJson(x, b[i]));
13
+ }
14
+ if (typeof a === "object" && typeof b === "object") {
15
+ const ao = a;
16
+ const bo = b;
17
+ const keys = new Set([...Object.keys(ao), ...Object.keys(bo)]);
18
+ for (const k of keys) {
19
+ if (!deepEqualJson(ao[k], bo[k]))
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+ //# sourceMappingURL=role-migrate-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-migrate-util.js","sourceRoot":"","sources":["../../src/runtime/role-migrate-util.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,CAAU,EAAE,CAAU;IAClD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { CURRENT_ROLE_PACK_VERSION, inspectRolePack, type RolePackStatus } from "./role-pack.js";
2
+ export interface RoleMigrateStep {
3
+ from: string;
4
+ to: string;
5
+ description: string;
6
+ up: (ctx: RoleMigrateCtx) => void;
7
+ down: (ctx: RoleMigrateCtx) => void;
8
+ }
9
+ export interface RoleMigrateCtx {
10
+ rolesDir: string;
11
+ /** Engine template roles dir (packages/cli/templates/init/roles). */
12
+ templateRolesDir: string;
13
+ dryRun: boolean;
14
+ log: (line: string) => void;
15
+ touched: string[];
16
+ }
17
+ export interface RoleMigrateResult {
18
+ from: string | null;
19
+ to: string;
20
+ direction: "up" | "down" | "noop";
21
+ steps: string[];
22
+ touched: string[];
23
+ status: RolePackStatus;
24
+ }
25
+ export declare function listRoleMigrateSteps(): {
26
+ from: string;
27
+ to: string;
28
+ description: string;
29
+ }[];
30
+ export declare function runRolePackMigrate(opts: {
31
+ rolesDir: string;
32
+ templateRolesDir: string;
33
+ to?: string;
34
+ dryRun?: boolean;
35
+ log?: (line: string) => void;
36
+ }): RoleMigrateResult;
37
+ export { CURRENT_ROLE_PACK_VERSION, inspectRolePack };
38
+ //# sourceMappingURL=role-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-migrate.d.ts","sourceRoot":"","sources":["../../src/runtime/role-migrate.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,yBAAyB,EAIzB,eAAe,EAWf,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACxB;AAqOD,wBAAgB,oBAAoB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAE1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,GAAG,iBAAiB,CAkEpB;AAED,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Role-pack migrators — move profiles between pack versions (up or down).
3
+ * Each step is registered once; migrate walks the path.
4
+ */
5
+ import fs from "node:fs";
6
+ import path from "node:path";
7
+ import YAML from "yaml";
8
+ import { CURRENT_ROLE_PACK_VERSION, ROLE_KINDS, compareRolePackVersion, extendStubBody, inspectRolePack, installedRolePackVersion, parseRoleYamlFile, roleExtendPath, roleLegacyFlatPath, rolePackManifestPath, roleVendorDocsDir, roleVendorPath, stripRoleMetaKeys, vendorRolesDir, writeRolePackManifest, } from "./role-pack.js";
9
+ import { deepEqualJson } from "./role-migrate-util.js";
10
+ function copyFile(src, dest, dryRun, touched) {
11
+ if (!fs.existsSync(src))
12
+ return;
13
+ if (dryRun) {
14
+ touched.push(dest);
15
+ return;
16
+ }
17
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
18
+ fs.copyFileSync(src, dest);
19
+ touched.push(dest);
20
+ }
21
+ function writeText(dest, body, dryRun, touched) {
22
+ if (dryRun) {
23
+ touched.push(dest);
24
+ return;
25
+ }
26
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
27
+ fs.writeFileSync(dest, body, "utf8");
28
+ touched.push(dest);
29
+ }
30
+ function syncVendorFromTemplate(ctx) {
31
+ const srcRoot = ctx.templateRolesDir;
32
+ if (!fs.existsSync(srcRoot)) {
33
+ ctx.log(`WARN: template roles missing at ${srcRoot}`);
34
+ return;
35
+ }
36
+ // yaml kinds + ROLE_PACK.json
37
+ for (const ent of fs.readdirSync(srcRoot, { withFileTypes: true })) {
38
+ if (ent.name === "extend")
39
+ continue; // stubs handled separately
40
+ const src = path.join(srcRoot, ent.name);
41
+ const dest = path.join(vendorRolesDir(ctx.rolesDir), ent.name);
42
+ if (ent.isDirectory()) {
43
+ syncTree(src, dest, ctx);
44
+ continue;
45
+ }
46
+ copyFile(src, dest, ctx.dryRun, ctx.touched);
47
+ }
48
+ }
49
+ function syncTree(srcDir, destDir, ctx) {
50
+ if (!fs.existsSync(srcDir))
51
+ return;
52
+ for (const ent of fs.readdirSync(srcDir, { withFileTypes: true })) {
53
+ const src = path.join(srcDir, ent.name);
54
+ const dest = path.join(destDir, ent.name);
55
+ if (ent.isDirectory()) {
56
+ syncTree(src, dest, ctx);
57
+ continue;
58
+ }
59
+ copyFile(src, dest, ctx.dryRun, ctx.touched);
60
+ }
61
+ }
62
+ /**
63
+ * Diff legacy flat yaml vs vendor: anything not equal goes into extend
64
+ * (so user customizations survive the 1.0 → 1.1 lift).
65
+ */
66
+ function promoteLegacyFlatToExtend(ctx) {
67
+ for (const kind of ROLE_KINDS) {
68
+ const flat = roleLegacyFlatPath(ctx.rolesDir, kind);
69
+ const vendor = roleVendorPath(ctx.rolesDir, kind);
70
+ const extend = roleExtendPath(ctx.rolesDir, kind);
71
+ if (!fs.existsSync(flat)) {
72
+ if (!fs.existsSync(extend)) {
73
+ writeText(extend, extendStubBody(kind, CURRENT_ROLE_PACK_VERSION), ctx.dryRun, ctx.touched);
74
+ }
75
+ continue;
76
+ }
77
+ if (fs.existsSync(extend)) {
78
+ ctx.log(`keep existing ${path.basename(extend)}`);
79
+ continue;
80
+ }
81
+ if (!fs.existsSync(vendor)) {
82
+ // no vendor yet — copy flat aside as extend after vendor sync
83
+ const raw = parseRoleYamlFile(flat);
84
+ const body = `# Migrated from legacy ${kind}.yaml (role-pack 1.0 → 1.1)\n` +
85
+ YAML.stringify(stripRoleMetaKeys(raw));
86
+ writeText(extend, body, ctx.dryRun, ctx.touched);
87
+ continue;
88
+ }
89
+ const flatRaw = stripRoleMetaKeys(parseRoleYamlFile(flat));
90
+ const vendorRaw = stripRoleMetaKeys(parseRoleYamlFile(vendor));
91
+ if (deepEqualJson(flatRaw, vendorRaw)) {
92
+ writeText(extend, extendStubBody(kind, CURRENT_ROLE_PACK_VERSION), ctx.dryRun, ctx.touched);
93
+ ctx.log(`${kind}: flat matched vendor → empty extend stub`);
94
+ continue;
95
+ }
96
+ // Keep full flat as extend — locked merge will preserve vendor ids.
97
+ const body = `# Migrated from legacy ${kind}.yaml (role-pack 1.0 → 1.1)\n` +
98
+ `# Locked vendor policy ids / banners stay engine-owned; extras below apply.\n` +
99
+ YAML.stringify(flatRaw);
100
+ writeText(extend, body, ctx.dryRun, ctx.touched);
101
+ ctx.log(`${kind}: promoted flat → ${path.basename(extend)}`);
102
+ }
103
+ }
104
+ function archiveLegacyFlat(ctx) {
105
+ const archiveDir = path.join(ctx.rolesDir, "_legacy_flat");
106
+ for (const kind of ROLE_KINDS) {
107
+ const flat = roleLegacyFlatPath(ctx.rolesDir, kind);
108
+ if (!fs.existsSync(flat))
109
+ continue;
110
+ const dest = path.join(archiveDir, `${kind}.yaml`);
111
+ if (ctx.dryRun) {
112
+ ctx.touched.push(dest);
113
+ continue;
114
+ }
115
+ fs.mkdirSync(archiveDir, { recursive: true });
116
+ fs.renameSync(flat, dest);
117
+ ctx.touched.push(dest);
118
+ ctx.log(`archived legacy ${kind}.yaml → _legacy_flat/`);
119
+ }
120
+ }
121
+ /** Flatten vendor+extend back to flat kind.yaml (1.1 → 1.0). */
122
+ function flattenToLegacy(ctx) {
123
+ for (const kind of ROLE_KINDS) {
124
+ const vendor = roleVendorPath(ctx.rolesDir, kind);
125
+ const extend = roleExtendPath(ctx.rolesDir, kind);
126
+ const flat = roleLegacyFlatPath(ctx.rolesDir, kind);
127
+ if (!fs.existsSync(vendor) && !fs.existsSync(extend))
128
+ continue;
129
+ const merged = fs.existsSync(vendor)
130
+ ? stripRoleMetaKeys(parseRoleYamlFile(vendor))
131
+ : {};
132
+ if (fs.existsSync(extend)) {
133
+ const ext = stripRoleMetaKeys(parseRoleYamlFile(extend));
134
+ // shallow merge lists by replace-with-concat for known keys
135
+ for (const [k, v] of Object.entries(ext)) {
136
+ if (Array.isArray(merged[k]) && Array.isArray(v)) {
137
+ merged[k] = [...merged[k], ...v];
138
+ }
139
+ else if (v && typeof v === "object" && !Array.isArray(v) && merged[k] && typeof merged[k] === "object") {
140
+ merged[k] = { ...merged[k], ...v };
141
+ }
142
+ else {
143
+ merged[k] = v;
144
+ }
145
+ }
146
+ }
147
+ writeText(flat, YAML.stringify(merged), ctx.dryRun, ctx.touched);
148
+ }
149
+ }
150
+ const STEPS = [
151
+ {
152
+ from: "1.0.0",
153
+ to: "1.1.0",
154
+ description: "vendor+extend layout, locked sections, base role MDs",
155
+ up(ctx) {
156
+ syncVendorFromTemplate(ctx);
157
+ promoteLegacyFlatToExtend(ctx);
158
+ archiveLegacyFlat(ctx);
159
+ writeRolePackManifest(ctx.rolesDir, {
160
+ version: "1.1.0",
161
+ notes: "Locked _vendor roles + *.extend.yaml; docs under _vendor/docs/",
162
+ locked_sections: ["banner", "read_first", "policies"],
163
+ kinds: [...ROLE_KINDS],
164
+ }, ctx.dryRun);
165
+ ctx.touched.push(rolePackManifestPath(ctx.rolesDir));
166
+ },
167
+ down(ctx) {
168
+ flattenToLegacy(ctx);
169
+ // leave _vendor in place but stamp 1.0 so old tools expecting flat work
170
+ writeRolePackManifest(ctx.rolesDir, {
171
+ version: "1.0.0",
172
+ notes: "Flattened for legacy loaders (flat roles/*.yaml)",
173
+ }, ctx.dryRun);
174
+ ctx.touched.push(rolePackManifestPath(ctx.rolesDir));
175
+ },
176
+ },
177
+ ];
178
+ function normalizePackVersion(v) {
179
+ if (!v)
180
+ return "1.0.0";
181
+ // treat any 1.0.x profile without ROLE_PACK as 1.0.0
182
+ if (v.startsWith("1.0."))
183
+ return "1.0.0";
184
+ return v;
185
+ }
186
+ function pathBetween(from, to) {
187
+ if (from === to)
188
+ return [];
189
+ const direction = compareRolePackVersion(from, to) < 0 ? "up" : "down";
190
+ if (direction === "up") {
191
+ const out = [];
192
+ let cur = from;
193
+ while (compareRolePackVersion(cur, to) < 0) {
194
+ const step = STEPS.find((s) => s.from === cur);
195
+ if (!step) {
196
+ throw new Error(`no role-pack migrate step upward from ${cur} toward ${to}`);
197
+ }
198
+ out.push(step);
199
+ cur = step.to;
200
+ if (out.length > 20)
201
+ throw new Error("role-pack migrate path too long");
202
+ }
203
+ return out;
204
+ }
205
+ const out = [];
206
+ let cur = from;
207
+ while (compareRolePackVersion(cur, to) > 0) {
208
+ const step = STEPS.find((s) => s.to === cur);
209
+ if (!step) {
210
+ throw new Error(`no role-pack migrate step downward from ${cur} toward ${to}`);
211
+ }
212
+ out.push(step);
213
+ cur = step.from;
214
+ if (out.length > 20)
215
+ throw new Error("role-pack migrate path too long");
216
+ }
217
+ return out;
218
+ }
219
+ export function listRoleMigrateSteps() {
220
+ return STEPS.map((s) => ({ from: s.from, to: s.to, description: s.description }));
221
+ }
222
+ export function runRolePackMigrate(opts) {
223
+ const to = normalizePackVersion(opts.to ?? CURRENT_ROLE_PACK_VERSION);
224
+ const fromRaw = installedRolePackVersion(opts.rolesDir);
225
+ // No manifest + legacy flat → 1.0.0; no manifest + vendor only → still migrate to stamp
226
+ const from = normalizePackVersion(fromRaw ?? (fs.existsSync(roleLegacyFlatPath(opts.rolesDir, "common")) ? "1.0.0" : "1.0.0"));
227
+ const log = opts.log ?? (() => { });
228
+ const dryRun = Boolean(opts.dryRun);
229
+ const touched = [];
230
+ const ctx = {
231
+ rolesDir: opts.rolesDir,
232
+ templateRolesDir: opts.templateRolesDir,
233
+ dryRun,
234
+ log,
235
+ touched,
236
+ };
237
+ if (from === to && !inspectRolePack(opts.rolesDir, to).needsMigrate) {
238
+ return {
239
+ from: fromRaw,
240
+ to,
241
+ direction: "noop",
242
+ steps: [],
243
+ touched: [],
244
+ status: inspectRolePack(opts.rolesDir, to),
245
+ };
246
+ }
247
+ // Force re-apply when target==installed but vendor/docs/extend incomplete.
248
+ const steps = from === to
249
+ ? STEPS.filter((s) => s.to === to)
250
+ : pathBetween(from, to);
251
+ const direction = from === to
252
+ ? "up"
253
+ : compareRolePackVersion(from, to) < 0
254
+ ? "up"
255
+ : "down";
256
+ const stepNames = [];
257
+ for (const step of steps) {
258
+ const label = `${step.from}→${step.to}`;
259
+ stepNames.push(label);
260
+ log(`role-pack migrate ${direction} ${label}: ${step.description}`);
261
+ if (direction === "up")
262
+ step.up(ctx);
263
+ else
264
+ step.down(ctx);
265
+ }
266
+ // Ensure docs exist after up
267
+ if (direction === "up" && !dryRun) {
268
+ const docs = roleVendorDocsDir(opts.rolesDir);
269
+ if (!fs.existsSync(docs)) {
270
+ syncVendorFromTemplate(ctx);
271
+ }
272
+ }
273
+ return {
274
+ from: fromRaw,
275
+ to,
276
+ direction: stepNames.length ? direction : "noop",
277
+ steps: stepNames,
278
+ touched,
279
+ status: inspectRolePack(opts.rolesDir, to),
280
+ };
281
+ }
282
+ export { CURRENT_ROLE_PACK_VERSION, inspectRolePack };
283
+ //# sourceMappingURL=role-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-migrate.js","sourceRoot":"","sources":["../../src/runtime/role-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export declare const ROLE_PACK_FILENAME = "ROLE_PACK.json";
2
+ export declare const CURRENT_ROLE_PACK_VERSION = "1.1.0";
3
+ export declare const ROLE_KINDS: readonly ["common", "manager", "secretary", "worker", "mini"];
4
+ export type RoleKindName = (typeof ROLE_KINDS)[number];
5
+ export interface RolePackManifest {
6
+ version: string;
7
+ /** Human notes for this pack. */
8
+ notes?: string;
9
+ /** Section names that are engine-owned in every vendor role yaml. */
10
+ locked_sections?: string[];
11
+ kinds?: string[];
12
+ }
13
+ export interface RolePackStatus {
14
+ rolesDir: string;
15
+ installed: string | null;
16
+ target: string;
17
+ needsMigrate: boolean;
18
+ hasVendor: boolean;
19
+ hasLegacyFlat: boolean;
20
+ extendFiles: string[];
21
+ missingVendor: string[];
22
+ missingDocs: string[];
23
+ }
24
+ export declare function vendorRolesDir(rolesDir: string): string;
25
+ export declare function rolePackManifestPath(rolesDir: string): string;
26
+ export declare function roleExtendPath(rolesDir: string, kind: string): string;
27
+ export declare function roleLegacyFlatPath(rolesDir: string, kind: string): string;
28
+ export declare function roleVendorPath(rolesDir: string, kind: string): string;
29
+ export declare function roleVendorDocsDir(rolesDir: string): string;
30
+ export declare function readRolePackManifest(rolesDir: string): RolePackManifest | null;
31
+ export declare function writeRolePackManifest(rolesDir: string, manifest: RolePackManifest, dryRun?: boolean): void;
32
+ export declare function installedRolePackVersion(rolesDir: string): string | null;
33
+ /** Compare dotted versions: -1 if a<b, 0 equal, 1 if a>b. */
34
+ export declare function compareRolePackVersion(a: string, b: string): number;
35
+ export declare function inspectRolePack(rolesDir: string, target?: string): RolePackStatus;
36
+ /** Parse locked section list from a vendor role yaml body. */
37
+ export declare function lockedSectionsFromYaml(raw: Record<string, unknown>): string[];
38
+ /** Strip engine-only keys before merge into RoleIndex. */
39
+ export declare function stripRoleMetaKeys(raw: Record<string, unknown>): Record<string, unknown>;
40
+ export declare function parseRoleYamlFile(filePath: string): Record<string, unknown>;
41
+ /** Default locked sections for pack 1.1.0 when yaml omits `locked:`. */
42
+ export declare const DEFAULT_LOCKED_SECTIONS_1_1: readonly ["banner", "read_first", "policies"];
43
+ export declare function extendStubBody(kind: string, packVersion: string): string;
44
+ //# sourceMappingURL=role-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-pack.d.ts","sourceRoot":"","sources":["../../src/runtime/role-pack.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AACnD,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD,eAAO,MAAM,UAAU,+DAAgE,CAAC;AACxF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ9E;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,UAAQ,GACb,IAAI,CAKN;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,SAA4B,GACjC,cAAc,CAuChB;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAW7E;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI3E;AAED,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,+CAI9B,CAAC;AAEX,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAaxE"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Role pack versioning — locked `_vendor` templates + up/down migrators.
3
+ * Pack version is independent of CLI patch; bumps with role schema releases (1.1.x).
4
+ */
5
+ import fs from "node:fs";
6
+ import path from "node:path";
7
+ import YAML from "yaml";
8
+ export const ROLE_PACK_FILENAME = "ROLE_PACK.json";
9
+ export const CURRENT_ROLE_PACK_VERSION = "1.1.0";
10
+ export const ROLE_KINDS = ["common", "manager", "secretary", "worker", "mini"];
11
+ export function vendorRolesDir(rolesDir) {
12
+ return path.join(rolesDir, "_vendor");
13
+ }
14
+ export function rolePackManifestPath(rolesDir) {
15
+ return path.join(vendorRolesDir(rolesDir), ROLE_PACK_FILENAME);
16
+ }
17
+ export function roleExtendPath(rolesDir, kind) {
18
+ return path.join(rolesDir, `${kind}.extend.yaml`);
19
+ }
20
+ export function roleLegacyFlatPath(rolesDir, kind) {
21
+ return path.join(rolesDir, `${kind}.yaml`);
22
+ }
23
+ export function roleVendorPath(rolesDir, kind) {
24
+ return path.join(vendorRolesDir(rolesDir), `${kind}.yaml`);
25
+ }
26
+ export function roleVendorDocsDir(rolesDir) {
27
+ return path.join(vendorRolesDir(rolesDir), "docs");
28
+ }
29
+ export function readRolePackManifest(rolesDir) {
30
+ const p = rolePackManifestPath(rolesDir);
31
+ if (!fs.existsSync(p))
32
+ return null;
33
+ try {
34
+ return JSON.parse(fs.readFileSync(p, "utf8"));
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ export function writeRolePackManifest(rolesDir, manifest, dryRun = false) {
41
+ const dest = rolePackManifestPath(rolesDir);
42
+ if (dryRun)
43
+ return;
44
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
45
+ fs.writeFileSync(dest, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
46
+ }
47
+ export function installedRolePackVersion(rolesDir) {
48
+ return readRolePackManifest(rolesDir)?.version ?? null;
49
+ }
50
+ /** Compare dotted versions: -1 if a<b, 0 equal, 1 if a>b. */
51
+ export function compareRolePackVersion(a, b) {
52
+ const pa = a.split(".").map((x) => Number.parseInt(x, 10) || 0);
53
+ const pb = b.split(".").map((x) => Number.parseInt(x, 10) || 0);
54
+ const n = Math.max(pa.length, pb.length);
55
+ for (let i = 0; i < n; i++) {
56
+ const da = pa[i] ?? 0;
57
+ const db = pb[i] ?? 0;
58
+ if (da < db)
59
+ return -1;
60
+ if (da > db)
61
+ return 1;
62
+ }
63
+ return 0;
64
+ }
65
+ export function inspectRolePack(rolesDir, target = CURRENT_ROLE_PACK_VERSION) {
66
+ const installed = installedRolePackVersion(rolesDir);
67
+ const vendor = vendorRolesDir(rolesDir);
68
+ const hasVendor = fs.existsSync(vendor);
69
+ const missingVendor = [];
70
+ const missingDocs = [];
71
+ let hasLegacyFlat = false;
72
+ const extendFiles = [];
73
+ for (const kind of ROLE_KINDS) {
74
+ if (!fs.existsSync(roleVendorPath(rolesDir, kind)))
75
+ missingVendor.push(kind);
76
+ if (fs.existsSync(roleLegacyFlatPath(rolesDir, kind)))
77
+ hasLegacyFlat = true;
78
+ if (fs.existsSync(roleExtendPath(rolesDir, kind))) {
79
+ extendFiles.push(`${kind}.extend.yaml`);
80
+ }
81
+ }
82
+ const docsDir = roleVendorDocsDir(rolesDir);
83
+ for (const kind of [...ROLE_KINDS, "EXTEND"]) {
84
+ const name = kind === "EXTEND" ? "EXTEND.md" : `${kind}.md`;
85
+ if (!fs.existsSync(path.join(docsDir, name)))
86
+ missingDocs.push(name);
87
+ }
88
+ const needsMigrate = !installed ||
89
+ compareRolePackVersion(installed, target) !== 0 ||
90
+ missingVendor.length > 0 ||
91
+ (hasLegacyFlat && extendFiles.length === 0);
92
+ return {
93
+ rolesDir,
94
+ installed,
95
+ target,
96
+ needsMigrate,
97
+ hasVendor,
98
+ hasLegacyFlat,
99
+ extendFiles,
100
+ missingVendor,
101
+ missingDocs,
102
+ };
103
+ }
104
+ /** Parse locked section list from a vendor role yaml body. */
105
+ export function lockedSectionsFromYaml(raw) {
106
+ const locked = raw.locked;
107
+ if (Array.isArray(locked)) {
108
+ return locked.map((x) => String(x).trim()).filter(Boolean);
109
+ }
110
+ if (locked && typeof locked === "object" && Array.isArray(locked.sections)) {
111
+ return (locked.sections)
112
+ .map((x) => String(x).trim())
113
+ .filter(Boolean);
114
+ }
115
+ return [];
116
+ }
117
+ /** Strip engine-only keys before merge into RoleIndex. */
118
+ export function stripRoleMetaKeys(raw) {
119
+ const { locked: _l, role_pack: _rp, schema_version: _sv, ...rest } = raw;
120
+ return rest;
121
+ }
122
+ export function parseRoleYamlFile(filePath) {
123
+ const raw = YAML.parse(fs.readFileSync(filePath, "utf8"));
124
+ if (!raw || typeof raw !== "object")
125
+ return {};
126
+ return raw;
127
+ }
128
+ /** Default locked sections for pack 1.1.0 when yaml omits `locked:`. */
129
+ export const DEFAULT_LOCKED_SECTIONS_1_1 = [
130
+ "banner",
131
+ "read_first",
132
+ "policies",
133
+ ];
134
+ export function extendStubBody(kind, packVersion) {
135
+ return `# USER — never overwritten by \`seatmesh update\` / role-pack migrate.
136
+ # Locked vendor sections (see roles/_vendor/${kind}.yaml \`locked:\`) keep engine entries.
137
+ # Append banners / read_first / files, or add new policy ids only.
138
+ # role_pack: ${packVersion}
139
+ #
140
+ # Example:
141
+ # banner:
142
+ # - "project=my hub note"
143
+ # policies:
144
+ # - id: my_playbook
145
+ # path: .agent/PLAYBOOK.md
146
+ `;
147
+ }
148
+ //# sourceMappingURL=role-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-pack.js","sourceRoot":"","sources":["../../src/runtime/role-pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=role-pack.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-pack.test.d.ts","sourceRoot":"","sources":["../../src/runtime/role-pack.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it } from "vitest";
5
+ import { loadRoleIndex, mergeExtendRespectingLocked } from "./role-index.js";
6
+ import { runRolePackMigrate } from "./role-migrate.js";
7
+ describe("mergeExtendRespectingLocked", () => {
8
+ const vendor = {
9
+ kind: "manager",
10
+ banner: ["engine=banner"],
11
+ policies: [
12
+ { id: "peer", cmd: "vendor-peer" },
13
+ { id: "minis", cmd: "vendor-minis" },
14
+ ],
15
+ read_first: [{ path: ".sm/AGENTS.md" }],
16
+ };
17
+ it("keeps vendor policy ids when policies locked; allows new ids", () => {
18
+ const merged = mergeExtendRespectingLocked(vendor, {
19
+ policies: [
20
+ { id: "peer", cmd: "user-override-peer" },
21
+ { id: "my_playbook", path: ".agent/X.md" },
22
+ ],
23
+ banner: ["project=hub"],
24
+ }, ["banner", "read_first", "policies"]);
25
+ expect(merged.policies?.find((p) => p.id === "peer")?.cmd).toBe("vendor-peer");
26
+ expect(merged.policies?.find((p) => p.id === "my_playbook")?.path).toBe(".agent/X.md");
27
+ expect(merged.banner).toEqual(["engine=banner", "project=hub"]);
28
+ });
29
+ it("allows policy override when policies unlocked", () => {
30
+ const merged = mergeExtendRespectingLocked(vendor, { policies: [{ id: "peer", cmd: "user-peer" }] }, ["banner"]);
31
+ expect(merged.policies?.find((p) => p.id === "peer")?.cmd).toBe("user-peer");
32
+ });
33
+ });
34
+ describe("loadRoleIndex vendor+extend", () => {
35
+ it("loads _vendor + extend and ignores legacy flat when vendor present", () => {
36
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "sm-role-v-"));
37
+ const rolesDir = path.join(root, "roles");
38
+ const vendor = path.join(rolesDir, "_vendor");
39
+ fs.mkdirSync(vendor, { recursive: true });
40
+ fs.writeFileSync(path.join(vendor, "common.yaml"), `locked: [banner, policies]\nbanner:\n - "common=v"\n`);
41
+ fs.writeFileSync(path.join(vendor, "worker.yaml"), `kind: worker\nextends: common\nlocked: [banner, policies]\npolicies:\n - id: peer\n cmd: vendor\n`);
42
+ fs.writeFileSync(path.join(rolesDir, "worker.extend.yaml"), `policies:\n - id: peer\n cmd: hacked\n - id: extra\n text: ok\nbanner:\n - "ext=1"\n`);
43
+ fs.writeFileSync(path.join(rolesDir, "worker.yaml"), `kind: worker\nbanner:\n - "legacy=no"\n`);
44
+ const index = loadRoleIndex(rolesDir, "worker");
45
+ expect(index.banner).toContain("common=v");
46
+ expect(index.banner).toContain("ext=1");
47
+ expect(index.banner).not.toContain("legacy=no");
48
+ expect(index.policies?.find((p) => p.id === "peer")?.cmd).toBe("vendor");
49
+ expect(index.policies?.find((p) => p.id === "extra")?.text).toBe("ok");
50
+ expect(index.locked).toContain("policies");
51
+ });
52
+ });
53
+ describe("role-pack migrate up/down", () => {
54
+ it("1.0 flat → 1.1 vendor+extend → down flattens", () => {
55
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "sm-role-m-"));
56
+ const rolesDir = path.join(root, "roles");
57
+ fs.mkdirSync(rolesDir, { recursive: true });
58
+ fs.writeFileSync(path.join(rolesDir, "common.yaml"), `banner:\n - "user=common"\n`);
59
+ fs.writeFileSync(path.join(rolesDir, "worker.yaml"), `kind: worker\nextends: common\npolicies:\n - id: my_custom\n text: keep-me\n`);
60
+ const tpl = path.resolve(process.cwd(), "packages/cli/templates/init/roles");
61
+ expect(fs.existsSync(path.join(tpl, "ROLE_PACK.json"))).toBe(true);
62
+ const up = runRolePackMigrate({
63
+ rolesDir,
64
+ templateRolesDir: tpl,
65
+ to: "1.1.0",
66
+ log: () => { },
67
+ });
68
+ expect(up.direction).toBe("up");
69
+ expect(fs.existsSync(path.join(rolesDir, "_vendor", "ROLE_PACK.json"))).toBe(true);
70
+ expect(fs.existsSync(path.join(rolesDir, "worker.extend.yaml"))).toBe(true);
71
+ expect(fs.existsSync(path.join(rolesDir, "_legacy_flat", "worker.yaml"))).toBe(true);
72
+ const index = loadRoleIndex(rolesDir, "worker");
73
+ expect(index.policies?.some((p) => p.id === "my_custom")).toBe(true);
74
+ const down = runRolePackMigrate({
75
+ rolesDir,
76
+ templateRolesDir: tpl,
77
+ to: "1.0.0",
78
+ log: () => { },
79
+ });
80
+ expect(down.direction).toBe("down");
81
+ expect(fs.existsSync(path.join(rolesDir, "worker.yaml"))).toBe(true);
82
+ });
83
+ });
84
+ //# sourceMappingURL=role-pack.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-pack.test.js","sourceRoot":"","sources":["../../src/runtime/role-pack.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seat-mesh/core",
3
- "version": "1.0.14",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",