@seat-mesh/core 1.0.14 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/role-index.d.ts +23 -1
- package/dist/runtime/role-index.d.ts.map +1 -1
- package/dist/runtime/role-index.js +160 -29
- package/dist/runtime/role-index.js.map +1 -1
- package/dist/runtime/role-migrate-util.d.ts +3 -0
- package/dist/runtime/role-migrate-util.d.ts.map +1 -0
- package/dist/runtime/role-migrate-util.js +26 -0
- package/dist/runtime/role-migrate-util.js.map +1 -0
- package/dist/runtime/role-migrate.d.ts +38 -0
- package/dist/runtime/role-migrate.d.ts.map +1 -0
- package/dist/runtime/role-migrate.js +283 -0
- package/dist/runtime/role-migrate.js.map +1 -0
- package/dist/runtime/role-pack.d.ts +44 -0
- package/dist/runtime/role-pack.d.ts.map +1 -0
- package/dist/runtime/role-pack.js +148 -0
- package/dist/runtime/role-pack.js.map +1 -0
- package/dist/runtime/role-pack.test.d.ts +2 -0
- package/dist/runtime/role-pack.test.d.ts.map +1 -0
- package/dist/runtime/role-pack.test.js +84 -0
- package/dist/runtime/role-pack.test.js.map +1 -0
- package/package.json +1 -1
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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`
|
|
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":"
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
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 ${
|
|
165
|
+
throw new Error(`role extends cycle at ${key}`);
|
|
69
166
|
}
|
|
70
167
|
visiting.add(key);
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
80
|
-
|
|
81
|
-
|
|
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,
|
|
215
|
+
merged = mergeRoleIndex({}, { ...merged, kind: "common", locked: lockedSections });
|
|
85
216
|
}
|
|
86
217
|
else {
|
|
87
|
-
const
|
|
88
|
-
if (
|
|
89
|
-
const common = loadRoleFileChain(rolesDir, "common",
|
|
90
|
-
merged = mergeRoleIndex(common, {
|
|
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,
|
|
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`
|
|
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,
|
|
246
|
+
const merged = loadRoleFileChain(rolesDir, columnId, new Set(), overlayPath);
|
|
115
247
|
merged.kind = seatKind;
|
|
116
248
|
return merged;
|
|
117
249
|
}
|
|
118
|
-
const
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"role-index.js","sourceRoot":"","sources":["../../src/runtime/role-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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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"}
|