@dsh-enhanced/lark-channel 0.1.48 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -8
- package/docs/rsi-setup.md +123 -11
- package/docs/setup.md +27 -14
- package/docs/supervised-growth.md +2 -0
- package/lib/adapter.d.ts +6 -0
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +79 -8
- package/lib/adapter.js.map +1 -1
- package/lib/business-cli-install.d.ts +9 -0
- package/lib/business-cli-install.d.ts.map +1 -0
- package/lib/business-cli-install.js +367 -0
- package/lib/business-cli-install.js.map +1 -0
- package/lib/business-environment.d.ts +2 -0
- package/lib/business-environment.d.ts.map +1 -0
- package/lib/business-environment.js +16 -0
- package/lib/business-environment.js.map +1 -0
- package/lib/business-skill.d.ts +32 -0
- package/lib/business-skill.d.ts.map +1 -0
- package/lib/business-skill.js +202 -0
- package/lib/business-skill.js.map +1 -0
- package/lib/rsi-authority-config.d.ts +29 -0
- package/lib/rsi-authority-config.d.ts.map +1 -0
- package/lib/rsi-authority-config.js +233 -0
- package/lib/rsi-authority-config.js.map +1 -0
- package/lib/rsi-authority-resources.d.ts +36 -0
- package/lib/rsi-authority-resources.d.ts.map +1 -0
- package/lib/rsi-authority-resources.js +139 -0
- package/lib/rsi-authority-resources.js.map +1 -0
- package/lib/rsi-authority-runtime.d.ts +50 -0
- package/lib/rsi-authority-runtime.d.ts.map +1 -0
- package/lib/rsi-authority-runtime.js +393 -0
- package/lib/rsi-authority-runtime.js.map +1 -0
- package/lib/rsi-bootstrap-manifest.d.ts +39 -0
- package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
- package/lib/rsi-bootstrap-manifest.js +366 -0
- package/lib/rsi-bootstrap-manifest.js.map +1 -0
- package/lib/rsi-bootstrap.d.ts +30 -0
- package/lib/rsi-bootstrap.d.ts.map +1 -0
- package/lib/rsi-bootstrap.js +363 -0
- package/lib/rsi-bootstrap.js.map +1 -0
- package/lib/rsi-build.d.ts +45 -0
- package/lib/rsi-build.d.ts.map +1 -0
- package/lib/rsi-build.js +404 -0
- package/lib/rsi-build.js.map +1 -0
- package/lib/rsi-creation-build.d.ts +47 -0
- package/lib/rsi-creation-build.d.ts.map +1 -0
- package/lib/rsi-creation-build.js +333 -0
- package/lib/rsi-creation-build.js.map +1 -0
- package/lib/rsi-host-authorities.d.ts +18 -0
- package/lib/rsi-host-authorities.d.ts.map +1 -0
- package/lib/rsi-host-authorities.js +129 -0
- package/lib/rsi-host-authorities.js.map +1 -0
- package/lib/rsi-host-update.d.ts +113 -0
- package/lib/rsi-host-update.d.ts.map +1 -0
- package/lib/rsi-host-update.js +316 -0
- package/lib/rsi-host-update.js.map +1 -0
- package/lib/rsi-install-inputs.d.ts +43 -0
- package/lib/rsi-install-inputs.d.ts.map +1 -0
- package/lib/rsi-install-inputs.js +342 -0
- package/lib/rsi-install-inputs.js.map +1 -0
- package/lib/rsi-install.d.ts +54 -0
- package/lib/rsi-install.d.ts.map +1 -0
- package/lib/rsi-install.js +404 -0
- package/lib/rsi-install.js.map +1 -0
- package/lib/rsi-local-activation.d.ts +78 -0
- package/lib/rsi-local-activation.d.ts.map +1 -0
- package/lib/rsi-local-activation.js +485 -0
- package/lib/rsi-local-activation.js.map +1 -0
- package/lib/rsi-local-cohort.d.ts +70 -0
- package/lib/rsi-local-cohort.d.ts.map +1 -0
- package/lib/rsi-local-cohort.js +781 -0
- package/lib/rsi-local-cohort.js.map +1 -0
- package/lib/rsi-local-install.d.ts +40 -0
- package/lib/rsi-local-install.d.ts.map +1 -0
- package/lib/rsi-local-install.js +221 -0
- package/lib/rsi-local-install.js.map +1 -0
- package/lib/rsi-local-pair-install.d.ts +38 -0
- package/lib/rsi-local-pair-install.d.ts.map +1 -0
- package/lib/rsi-local-pair-install.js +200 -0
- package/lib/rsi-local-pair-install.js.map +1 -0
- package/lib/rsi-local-profile-update.d.ts +25 -0
- package/lib/rsi-local-profile-update.d.ts.map +1 -0
- package/lib/rsi-local-profile-update.js +226 -0
- package/lib/rsi-local-profile-update.js.map +1 -0
- package/lib/rsi-local-resources.d.ts +37 -0
- package/lib/rsi-local-resources.d.ts.map +1 -0
- package/lib/rsi-local-resources.js +184 -0
- package/lib/rsi-local-resources.js.map +1 -0
- package/lib/rsi-local-roots-extension.d.ts +11 -0
- package/lib/rsi-local-roots-extension.d.ts.map +1 -0
- package/lib/rsi-local-roots-extension.js +31 -0
- package/lib/rsi-local-roots-extension.js.map +1 -0
- package/lib/rsi-local-update-build.d.ts +18 -0
- package/lib/rsi-local-update-build.d.ts.map +1 -0
- package/lib/rsi-local-update-build.js +37 -0
- package/lib/rsi-local-update-build.js.map +1 -0
- package/lib/rsi-local-update.d.ts +39 -0
- package/lib/rsi-local-update.d.ts.map +1 -0
- package/lib/rsi-local-update.js +205 -0
- package/lib/rsi-local-update.js.map +1 -0
- package/lib/rsi-memory-learning.d.ts +22 -0
- package/lib/rsi-memory-learning.d.ts.map +1 -0
- package/lib/rsi-memory-learning.js +76 -0
- package/lib/rsi-memory-learning.js.map +1 -0
- package/lib/rsi-owner-profile.d.ts +37 -0
- package/lib/rsi-owner-profile.d.ts.map +1 -0
- package/lib/rsi-owner-profile.js +178 -0
- package/lib/rsi-owner-profile.js.map +1 -0
- package/lib/rsi-plugin-creation.d.ts +31 -0
- package/lib/rsi-plugin-creation.d.ts.map +1 -0
- package/lib/rsi-plugin-creation.js +179 -0
- package/lib/rsi-plugin-creation.js.map +1 -0
- package/lib/rsi-profile.d.ts +23 -0
- package/lib/rsi-profile.d.ts.map +1 -1
- package/lib/rsi-profile.js +154 -43
- package/lib/rsi-profile.js.map +1 -1
- package/lib/rsi-release-build.d.ts +41 -0
- package/lib/rsi-release-build.d.ts.map +1 -0
- package/lib/rsi-release-build.js +223 -0
- package/lib/rsi-release-build.js.map +1 -0
- package/lib/rsi-service-environment.d.ts +6 -0
- package/lib/rsi-service-environment.d.ts.map +1 -0
- package/lib/rsi-service-environment.js +113 -0
- package/lib/rsi-service-environment.js.map +1 -0
- package/lib/rsi-service-setup.d.ts +10 -0
- package/lib/rsi-service-setup.d.ts.map +1 -0
- package/lib/rsi-service-setup.js +34 -0
- package/lib/rsi-service-setup.js.map +1 -0
- package/lib/rsi-setup.d.ts +35 -2
- package/lib/rsi-setup.d.ts.map +1 -1
- package/lib/rsi-setup.js +459 -32
- package/lib/rsi-setup.js.map +1 -1
- package/lib/rsi-source-maintenance.d.ts +25 -0
- package/lib/rsi-source-maintenance.d.ts.map +1 -0
- package/lib/rsi-source-maintenance.js +348 -0
- package/lib/rsi-source-maintenance.js.map +1 -0
- package/lib/rsi-source-update.d.ts +26 -0
- package/lib/rsi-source-update.d.ts.map +1 -0
- package/lib/rsi-source-update.js +276 -0
- package/lib/rsi-source-update.js.map +1 -0
- package/lib/rsi-source.d.ts +34 -0
- package/lib/rsi-source.d.ts.map +1 -0
- package/lib/rsi-source.js +375 -0
- package/lib/rsi-source.js.map +1 -0
- package/lib/rsi-systemd-bootstrap.d.ts +46 -0
- package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
- package/lib/rsi-systemd-bootstrap.js +271 -0
- package/lib/rsi-systemd-bootstrap.js.map +1 -0
- package/lib/sdk.d.ts.map +1 -1
- package/lib/sdk.js +26 -1
- package/lib/sdk.js.map +1 -1
- package/lib/setup-business.d.ts +49 -0
- package/lib/setup-business.d.ts.map +1 -0
- package/lib/setup-business.js +335 -0
- package/lib/setup-business.js.map +1 -0
- package/lib/setup-profile.d.ts +1 -1
- package/lib/setup-profile.d.ts.map +1 -1
- package/lib/setup-profile.js +25 -2
- package/lib/setup-profile.js.map +1 -1
- package/lib/setup.d.ts +12 -1
- package/lib/setup.d.ts.map +1 -1
- package/lib/setup.js +138 -34
- package/lib/setup.js.map +1 -1
- package/lib/systemd.d.ts +10 -0
- package/lib/systemd.d.ts.map +1 -1
- package/lib/systemd.js +23 -6
- package/lib/systemd.js.map +1 -1
- package/lib/types.d.ts +7 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +32 -20
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type MemoryLearningOwner } from '@dsh-enhanced/assistant-growth-contract';
|
|
2
|
+
import type { LearningConfig } from '@dsh-enhanced/assistant-memory-learning';
|
|
3
|
+
import type { MemoryReviewConfig } from '@dsh-enhanced/assistant-verifier';
|
|
4
|
+
import type { MemoryLearningAdoptionGrant } from '@dsh-enhanced/personal-memory';
|
|
5
|
+
export interface RsiMemoryLearningSetup {
|
|
6
|
+
learning: LearningConfig;
|
|
7
|
+
reviews: MemoryReviewConfig;
|
|
8
|
+
adoption: MemoryLearningAdoptionGrant;
|
|
9
|
+
limits: {
|
|
10
|
+
extractions: number;
|
|
11
|
+
scans: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Resolve optional public validators only inside the opted-in memory setup path. */
|
|
15
|
+
export declare function getRsiMemoryLearningValidators(): {
|
|
16
|
+
validateLearningConfig: typeof import('@dsh-enhanced/assistant-memory-learning').validateLearningConfig;
|
|
17
|
+
validateMemoryReviewConfig: typeof import('@dsh-enhanced/assistant-verifier').validateMemoryReviewConfig;
|
|
18
|
+
validateMemoryLearningAdoptionGrant: typeof import('@dsh-enhanced/personal-memory').validateMemoryLearningAdoptionGrant;
|
|
19
|
+
};
|
|
20
|
+
/** Validate one owner-bound, finite learning chain before any profile row is enabled. */
|
|
21
|
+
export declare function validateRsiMemoryLearningSetup(input: unknown, expectedOwner: MemoryLearningOwner, now?: number): RsiMemoryLearningSetup;
|
|
22
|
+
//# sourceMappingURL=rsi-memory-learning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-memory-learning.d.ts","sourceRoot":"","sources":["../src/rsi-memory-learning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmD,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AACnI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAEhF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,2BAA2B,CAAA;IACrC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAiBD,qFAAqF;AACrF,wBAAgB,8BAA8B,IAAI;IAChD,sBAAsB,EAAE,cAAc,yCAAyC,EAAE,sBAAsB,CAAA;IACvG,0BAA0B,EAAE,cAAc,kCAAkC,EAAE,0BAA0B,CAAA;IACxG,mCAAmC,EAAE,cAAc,+BAA+B,EAAE,mCAAmC,CAAA;CACxH,CASA;AASD,yFAAyF;AACzF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAC/F,GAAG,SAAa,GAAG,sBAAsB,CA4B1C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
3
|
+
import { growthObjectDigest, validateMemoryLearningOwner } from '@dsh-enhanced/assistant-growth-contract';
|
|
4
|
+
function fail(message) { throw new Error(`rsi memory learning: ${message}`); }
|
|
5
|
+
const requirePeer = createRequire(import.meta.url);
|
|
6
|
+
function installedPeer(name) {
|
|
7
|
+
try {
|
|
8
|
+
requirePeer.resolve(name);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (error.code === 'MODULE_NOT_FOUND'
|
|
12
|
+
|| error.code === 'ERR_MODULE_NOT_FOUND') {
|
|
13
|
+
fail(`opted-in memory learning requires installed peer ${name}`);
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
// Resolution above separates a missing direct peer from failures inside it.
|
|
18
|
+
return requirePeer(name);
|
|
19
|
+
}
|
|
20
|
+
/** Resolve optional public validators only inside the opted-in memory setup path. */
|
|
21
|
+
export function getRsiMemoryLearningValidators() {
|
|
22
|
+
const learning = installedPeer('@dsh-enhanced/assistant-memory-learning');
|
|
23
|
+
const verifier = installedPeer('@dsh-enhanced/assistant-verifier');
|
|
24
|
+
const memory = installedPeer('@dsh-enhanced/personal-memory');
|
|
25
|
+
if (typeof learning.validateLearningConfig !== 'function' || typeof verifier.validateMemoryReviewConfig !== 'function'
|
|
26
|
+
|| typeof memory.validateMemoryLearningAdoptionGrant !== 'function')
|
|
27
|
+
fail('installed memory validators are unavailable');
|
|
28
|
+
return { validateLearningConfig: learning.validateLearningConfig,
|
|
29
|
+
validateMemoryReviewConfig: verifier.validateMemoryReviewConfig,
|
|
30
|
+
validateMemoryLearningAdoptionGrant: memory.validateMemoryLearningAdoptionGrant };
|
|
31
|
+
}
|
|
32
|
+
function exactFields(value, fields) {
|
|
33
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)
|
|
34
|
+
|| Object.getPrototypeOf(value) !== Object.prototype)
|
|
35
|
+
return false;
|
|
36
|
+
const keys = Reflect.ownKeys(value);
|
|
37
|
+
return keys.length === fields.length && keys.every(key => typeof key === 'string' && fields.includes(key))
|
|
38
|
+
&& Object.values(Object.getOwnPropertyDescriptors(value)).every(field => field.enumerable && 'value' in field);
|
|
39
|
+
}
|
|
40
|
+
/** Validate one owner-bound, finite learning chain before any profile row is enabled. */
|
|
41
|
+
export function validateRsiMemoryLearningSetup(input, expectedOwner, now = Date.now()) {
|
|
42
|
+
if (!Number.isSafeInteger(now) || now < 0)
|
|
43
|
+
fail('invalid validation time');
|
|
44
|
+
const owner = validateMemoryLearningOwner(expectedOwner);
|
|
45
|
+
if (!exactFields(input, ['adoption', 'learning', 'limits', 'reviews']))
|
|
46
|
+
fail('invalid setup fields');
|
|
47
|
+
const group = input;
|
|
48
|
+
const { validateLearningConfig, validateMemoryReviewConfig, validateMemoryLearningAdoptionGrant } = getRsiMemoryLearningValidators();
|
|
49
|
+
const learning = validateLearningConfig(group.learning);
|
|
50
|
+
const reviews = validateMemoryReviewConfig(group.reviews);
|
|
51
|
+
const adoption = validateMemoryLearningAdoptionGrant(group.adoption);
|
|
52
|
+
for (const [label, candidate] of [['learning', learning.owner], ['reviews', reviews.owner], ['adoption', adoption.owner]]) {
|
|
53
|
+
if (!isDeepStrictEqual(candidate, owner))
|
|
54
|
+
fail(`${label} owner differs from current owner route`);
|
|
55
|
+
}
|
|
56
|
+
const authorities = [learning.authorityId, reviews.authorityId, adoption.authorityId];
|
|
57
|
+
if (authorities.includes(owner.authorityId) || new Set(authorities).size !== 3)
|
|
58
|
+
fail('learning authorities must be independent');
|
|
59
|
+
if (learning.expiresAt <= now || reviews.expiresAt <= now || adoption.expiresAt <= now
|
|
60
|
+
|| learning.expiresAt > reviews.expiresAt || learning.expiresAt > adoption.expiresAt)
|
|
61
|
+
fail('learning authority expiry is invalid');
|
|
62
|
+
const reviewDigest = growthObjectDigest(reviews);
|
|
63
|
+
if (learning.reviewAuthorityId !== reviews.authorityId || learning.reviewAuthorityDigest !== reviewDigest
|
|
64
|
+
|| adoption.reviewAuthorityId !== reviews.authorityId || adoption.reviewAuthorityDigest !== reviewDigest
|
|
65
|
+
|| learning.adoptionAuthorityId !== adoption.authorityId || learning.adoptionGrantDigest !== growthObjectDigest(adoption)) {
|
|
66
|
+
fail('learning authority digest binding differs');
|
|
67
|
+
}
|
|
68
|
+
const limits = group.limits;
|
|
69
|
+
if (!exactFields(limits, ['extractions', 'scans'])
|
|
70
|
+
|| !Number.isSafeInteger(limits.extractions) || limits.extractions < 1 || limits.extractions > learning.maxExtractions
|
|
71
|
+
|| !Number.isSafeInteger(limits.scans) || limits.scans < 1 || limits.scans > 10_000
|
|
72
|
+
|| learning.budgetAmount > limits.extractions || learning.scanBudgetAmount > limits.scans)
|
|
73
|
+
fail('invalid finite automation limits');
|
|
74
|
+
return { learning, reviews, adoption, limits: { extractions: limits.extractions, scans: limits.scans } };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=rsi-memory-learning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-memory-learning.js","sourceRoot":"","sources":["../src/rsi-memory-learning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ActiveLarkOwnerBinding } from '@dsh-enhanced/assistant-delivery';
|
|
2
|
+
import { listAutomationsLocally } from '@dsh-enhanced/assistant-automations';
|
|
3
|
+
/** Pure authority resolution. The caller adds a missing route only within its journaled compiler output. */
|
|
4
|
+
export declare function resolveRsiOwnerRoute(delivery: Record<string, any>, owner: ActiveLarkOwnerBinding, home: string, expectedId?: string): {
|
|
5
|
+
workspace: string;
|
|
6
|
+
preset: string;
|
|
7
|
+
principal: string;
|
|
8
|
+
authority: Record<string, any>;
|
|
9
|
+
created: boolean;
|
|
10
|
+
route: {
|
|
11
|
+
id: string;
|
|
12
|
+
authorityHash: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/** Resolve owner lookup independently of Recovery/Health/Heartbeat deployment. */
|
|
16
|
+
export declare function rsiOwnerBindingQuery(effective: string, home: string): {
|
|
17
|
+
account: string;
|
|
18
|
+
tenant: string;
|
|
19
|
+
workspace: string;
|
|
20
|
+
agentPreset: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function rsiDatabasePaths(effective: string, home: string): {
|
|
23
|
+
deliveryDatabasePath: string;
|
|
24
|
+
automationsDatabasePath: string;
|
|
25
|
+
};
|
|
26
|
+
export interface RsiAutomationInventory {
|
|
27
|
+
databasePath: string;
|
|
28
|
+
schedulerEnabled: boolean;
|
|
29
|
+
records: ReturnType<typeof listAutomationsLocally>;
|
|
30
|
+
}
|
|
31
|
+
export declare function rsiAutomationInventory(effective: string, home: string): RsiAutomationInventory;
|
|
32
|
+
export declare function rsiCoordinatorAutomationDatabasePath(home: string, profile: string): string;
|
|
33
|
+
export type RsiAutomationInventories = [RsiAutomationInventory, RsiAutomationInventory, RsiAutomationInventory, RsiAutomationInventory];
|
|
34
|
+
/** Capture both source ledgers and both destination ledgers. A coordinator switches to a private database. */
|
|
35
|
+
export declare function captureRsiAutomationInventories(inspect: (effective: string, home: string) => Promise<RsiAutomationInventory>, target: string, coordinator: string, home: string, profile: string): Promise<RsiAutomationInventories>;
|
|
36
|
+
export declare function assertRsiSchedulerActivation(inventories: RsiAutomationInventories, acknowledged: boolean): void;
|
|
37
|
+
//# sourceMappingURL=rsi-owner-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-owner-profile.d.ts","sourceRoot":"","sources":["../src/rsi-owner-profile.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC5H,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAkC5E,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;;;;;;;YAqCnG,MAAM;;;EACtC;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;EAKnE;AAYD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;EAG/D;AACD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,OAAO,CAAA;IACzB,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAA;CACnD;AAqBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAM9F;AACD,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1F;AACD,MAAM,MAAM,wBAAwB,GAAG,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;AACvI,8GAA8G;AAC9G,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,EACjI,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAOvG;AACD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,wBAAwB,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAQ/G"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { lstatSync, realpathSync } from 'node:fs';
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
5
|
+
import { externalPrincipalId, ownerRouteAuthorityHash } from '@dsh-enhanced/assistant-delivery';
|
|
6
|
+
import { listAutomationsLocally } from '@dsh-enhanced/assistant-automations';
|
|
7
|
+
import { isMap, isSeq, parseDocument, stringify } from 'yaml';
|
|
8
|
+
function fail(message) { throw new Error(`rsi owner profile: ${message}`); }
|
|
9
|
+
function text(value, label) {
|
|
10
|
+
if (typeof value !== 'string' || !value || value.trim() !== value)
|
|
11
|
+
fail(`invalid ${label}`);
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function path(value, home, label) {
|
|
15
|
+
const raw = text(value, label), expression = /^dshHomePath\((['"])([^'"\\]+)\1\)$/u.exec(raw);
|
|
16
|
+
const resolved = expression ? join(home, expression[2]) : raw;
|
|
17
|
+
if (expression && expression[2].split('/').some(part => !part || part === '.' || part === '..')
|
|
18
|
+
|| !isAbsolute(resolved) || resolve(resolved) !== resolved)
|
|
19
|
+
fail(`${label} must be a canonical path or bounded dshHomePath expression`);
|
|
20
|
+
return resolved;
|
|
21
|
+
}
|
|
22
|
+
function rows(effective) {
|
|
23
|
+
const document = parseDocument(effective, { uniqueKeys: true });
|
|
24
|
+
if (document.errors.length || !isSeq(document.contents))
|
|
25
|
+
fail('invalid effective YAML');
|
|
26
|
+
const result = new Map();
|
|
27
|
+
for (const item of document.contents.items) {
|
|
28
|
+
if (!isMap(item))
|
|
29
|
+
fail('invalid effective row');
|
|
30
|
+
const id = item.get('id');
|
|
31
|
+
if (typeof id !== 'string' || result.has(id))
|
|
32
|
+
fail('invalid or duplicate effective row');
|
|
33
|
+
result.set(id, item);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function config(entries, id) {
|
|
38
|
+
const entry = entries.get(id);
|
|
39
|
+
const value = entry?.get('config', true);
|
|
40
|
+
if (!entry || entry.get('disabled') === true || !isMap(value))
|
|
41
|
+
fail(`enabled ${id} config is required`);
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
/** Pure authority resolution. The caller adds a missing route only within its journaled compiler output. */
|
|
45
|
+
export function resolveRsiOwnerRoute(delivery, owner, home, expectedId) {
|
|
46
|
+
if (owner.status !== 'active' || owner.owner?.status !== 'active' || owner.owner.role !== 'owner'
|
|
47
|
+
|| !owner.owner.id || !isDeepStrictEqual(owner.owner.principal, owner.principal)
|
|
48
|
+
|| owner.conversation.channel !== 'lark' || owner.conversation.kind !== 'dm' || owner.principal.channel !== 'lark'
|
|
49
|
+
|| ![owner.version, owner.generation, owner.owner.version].every(value => Number.isSafeInteger(value) && value >= 1))
|
|
50
|
+
fail('active owner receipt is invalid');
|
|
51
|
+
const workspace = path(delivery.defaultWorkspace, home, 'Delivery workspace');
|
|
52
|
+
const preset = text(delivery.defaultAgentPreset, 'Delivery preset');
|
|
53
|
+
if (workspace !== owner.workspace || preset !== owner.agentPreset || delivery.policyRef !== undefined && delivery.policyRef !== owner.policyRef)
|
|
54
|
+
fail('owner binding differs from effective delivery scope');
|
|
55
|
+
const routes = delivery.ownerRoutes;
|
|
56
|
+
if (!Array.isArray(routes))
|
|
57
|
+
fail('Delivery owner routes are missing');
|
|
58
|
+
const ids = new Set();
|
|
59
|
+
for (const route of routes) {
|
|
60
|
+
if (!route || typeof route !== 'object' || Array.isArray(route))
|
|
61
|
+
fail('invalid owner route');
|
|
62
|
+
const id = text(route.id, 'owner route id');
|
|
63
|
+
if (ids.has(id))
|
|
64
|
+
fail('owner route id is duplicated');
|
|
65
|
+
ids.add(id);
|
|
66
|
+
}
|
|
67
|
+
const matching = routes.filter(route => isDeepStrictEqual(route.conversation, owner.conversation));
|
|
68
|
+
if (matching.length > 1)
|
|
69
|
+
fail('no unique effective route matches active owner');
|
|
70
|
+
let authority = matching[0];
|
|
71
|
+
if (authority) {
|
|
72
|
+
for (const key of ['principal', 'workspace', 'agentPreset', 'policyRef']) {
|
|
73
|
+
if (!isDeepStrictEqual(authority[key], owner[key]))
|
|
74
|
+
fail(`owner route ${key} conflicts with active owner`);
|
|
75
|
+
}
|
|
76
|
+
if (!Number.isSafeInteger(authority.minimumGeneration) || authority.minimumGeneration < 1
|
|
77
|
+
|| authority.minimumGeneration > owner.generation)
|
|
78
|
+
fail('owner route minimumGeneration conflicts with active owner');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const lineage = { owner: owner.owner.id, conversation: owner.conversation, principal: owner.principal,
|
|
82
|
+
workspace, agentPreset: preset, policyRef: owner.policyRef };
|
|
83
|
+
const id = `rsi-owner-${createHash('sha256').update(JSON.stringify(lineage)).digest('hex').slice(0, 32)}`;
|
|
84
|
+
if (ids.has(id))
|
|
85
|
+
fail('stable owner route id conflicts with an existing route');
|
|
86
|
+
authority = { id, conversation: owner.conversation, principal: owner.principal, workspace,
|
|
87
|
+
agentPreset: preset, policyRef: owner.policyRef, minimumGeneration: owner.generation };
|
|
88
|
+
}
|
|
89
|
+
if (expectedId !== undefined && authority.id !== expectedId)
|
|
90
|
+
fail('owner route id differs from frozen manifest');
|
|
91
|
+
return { workspace, preset, principal: externalPrincipalId(owner.principal), authority,
|
|
92
|
+
created: matching.length === 0,
|
|
93
|
+
route: { id: authority.id, authorityHash: ownerRouteAuthorityHash(authority) } };
|
|
94
|
+
}
|
|
95
|
+
/** Resolve owner lookup independently of Recovery/Health/Heartbeat deployment. */
|
|
96
|
+
export function rsiOwnerBindingQuery(effective, home) {
|
|
97
|
+
const entries = rows(effective), delivery = config(entries, 'dsh-enhanced-assistant-delivery'), lark = config(entries, 'dsh-enhanced-lark-channel');
|
|
98
|
+
return { account: text(lark.get('account'), 'Lark account'), tenant: text(lark.get('tenant'), 'Lark tenant'),
|
|
99
|
+
workspace: path(delivery.get('defaultWorkspace'), home, 'Delivery workspace'),
|
|
100
|
+
agentPreset: text(delivery.get('defaultAgentPreset'), 'Delivery preset') };
|
|
101
|
+
}
|
|
102
|
+
function automations(effective) {
|
|
103
|
+
const entries = rows(effective);
|
|
104
|
+
const standalone = entries.get('dsh-enhanced-assistant-automations'), personal = entries.get('dsh-enhanced-personal-assistant');
|
|
105
|
+
if (standalone && standalone.get('disabled') !== true) {
|
|
106
|
+
if (personal && personal.get('disabled') !== true)
|
|
107
|
+
fail('ambiguous standalone and embedded Automations providers');
|
|
108
|
+
return config(entries, 'dsh-enhanced-assistant-automations');
|
|
109
|
+
}
|
|
110
|
+
const value = config(entries, 'dsh-enhanced-personal-assistant').get('assistantAutomations', true);
|
|
111
|
+
if (!isMap(value))
|
|
112
|
+
fail('assistantAutomations config is required');
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
export function rsiDatabasePaths(effective, home) {
|
|
116
|
+
return { deliveryDatabasePath: path(config(rows(effective), 'dsh-enhanced-assistant-delivery').get('databasePath'), home, 'Delivery database'),
|
|
117
|
+
automationsDatabasePath: path(automations(effective).get('databasePath'), home, 'Automations database') };
|
|
118
|
+
}
|
|
119
|
+
function missingPrivateDatabase(databasePath) {
|
|
120
|
+
try {
|
|
121
|
+
lstatSync(databasePath);
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error.code !== 'ENOENT')
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
// A fresh coordinator has no database directory yet. Prove absence under a
|
|
129
|
+
// private physical ancestor without creating directories or masking symlinks.
|
|
130
|
+
let parent = dirname(databasePath);
|
|
131
|
+
for (;;) {
|
|
132
|
+
try {
|
|
133
|
+
const metadata = lstatSync(parent);
|
|
134
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink() || realpathSync(parent) !== parent
|
|
135
|
+
|| metadata.uid !== process.getuid?.() || (metadata.mode & 0o077) !== 0)
|
|
136
|
+
fail('missing Automations database has an unsafe parent');
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (error.code !== 'ENOENT')
|
|
141
|
+
throw error;
|
|
142
|
+
const next = dirname(parent);
|
|
143
|
+
if (next === parent)
|
|
144
|
+
fail('missing Automations database has no private parent');
|
|
145
|
+
parent = next;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export function rsiAutomationInventory(effective, home) {
|
|
150
|
+
const value = automations(effective), databasePath = path(value.get('databasePath'), home, 'Automations database');
|
|
151
|
+
const enabled = value.get('schedulerEnabled');
|
|
152
|
+
if (enabled !== undefined && typeof enabled !== 'boolean')
|
|
153
|
+
fail('invalid schedulerEnabled');
|
|
154
|
+
return { databasePath, schedulerEnabled: enabled === true,
|
|
155
|
+
records: missingPrivateDatabase(databasePath) ? [] : listAutomationsLocally(databasePath).filter(record => record.status !== 'deleted') };
|
|
156
|
+
}
|
|
157
|
+
export function rsiCoordinatorAutomationDatabasePath(home, profile) {
|
|
158
|
+
return join(home, 'rsi-coordinators', profile, 'automations.sqlite');
|
|
159
|
+
}
|
|
160
|
+
/** Capture both source ledgers and both destination ledgers. A coordinator switches to a private database. */
|
|
161
|
+
export async function captureRsiAutomationInventories(inspect, target, coordinator, home, profile) {
|
|
162
|
+
const current = await Promise.all([inspect(target, home), inspect(coordinator, home)]);
|
|
163
|
+
const planned = current.map((value, index) => stringify([{ id: 'dsh-enhanced-assistant-automations', config: {
|
|
164
|
+
databasePath: index === 0 ? value.databasePath : rsiCoordinatorAutomationDatabasePath(home, profile), schedulerEnabled: true,
|
|
165
|
+
} }]));
|
|
166
|
+
const next = await Promise.all(planned.map(value => inspect(value, home)));
|
|
167
|
+
return structuredClone([...current, ...next]);
|
|
168
|
+
}
|
|
169
|
+
export function assertRsiSchedulerActivation(inventories, acknowledged) {
|
|
170
|
+
for (let index = 0; index < 2; index++) {
|
|
171
|
+
const before = inventories[index], after = inventories[index + 2];
|
|
172
|
+
if (after.schedulerEnabled && (!before.schedulerEnabled || before.databasePath !== after.databasePath)
|
|
173
|
+
&& (before.records.length > 0 || after.records.length > 0) && !acknowledged) {
|
|
174
|
+
fail('existing active or paused Automations require --ack-existing-automations before scheduler activation');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=rsi-owner-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-owner-profile.js","sourceRoot":"","sources":["../src/rsi-owner-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAA+B,MAAM,kCAAkC,CAAA;AAC5H,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAgB,MAAM,MAAM,CAAA;AAE3E,SAAS,IAAI,CAAC,OAAe,IAAW,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;AAC1F,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK;QAAE,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAA;IAC3F,OAAO,KAAK,CAAA;AACd,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,IAAY,EAAE,KAAa;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7F,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAC9D,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;WAC3F,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAAE,IAAI,CAAC,GAAG,KAAK,6DAA6D,CAAC,CAAA;IACzI,OAAO,QAAQ,CAAA;AACjB,CAAC;AACD,SAAS,IAAI,CAAC,SAAiB;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACvF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC/C,MAAM,EAAE,GAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,oCAAoC,CAAC,CAAA;QACxF,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AACD,SAAS,MAAM,CAAC,OAA6B,EAAE,EAAU;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC7B,MAAM,KAAK,GAAY,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAA;IACvG,OAAO,KAAK,CAAA;AACd,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,oBAAoB,CAAC,QAA6B,EAAE,KAA6B,EAAE,IAAY,EAAE,UAAmB;IAClI,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;WAC5F,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;WAC7E,KAAK,CAAC,YAAY,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,KAAK,MAAM;WAC/G,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC/J,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAA;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAA;IACnE,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,MAAM,KAAK,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,qDAAqD,CAAC,CAAA;IAC5M,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAA;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,mCAAmC,CAAC,CAAA;IACrE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAC5F,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;QAC3C,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,8BAA8B,CAAC,CAAA;QACrD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;IAClG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC/E,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAoC,CAAA;IAC9D,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAU,EAAE,CAAC;YAClF,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAE,IAAI,CAAC,eAAe,GAAG,8BAA8B,CAAC,CAAA;QAC5G,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,iBAAiB,GAAG,CAAC;eACpF,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU;YAAE,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACxH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;YACnG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;QAC9D,MAAM,EAAE,GAAG,aAAa,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,EAAE,CAAA;QACxG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,wDAAwD,CAAC,CAAA;QAC/E,SAAS,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS;YACvF,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,CAAC,UAAU,EAAE,CAAA;IAC1F,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,UAAU;QAAE,IAAI,CAAC,6CAA6C,CAAC,CAAA;IAChH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS;QACpF,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC9B,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,EAAY,EAAE,aAAa,EAAE,uBAAuB,CAAC,SAA0D,CAAC,EAAE,EAAE,CAAA;AAC/I,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,IAAY;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAA;IACnJ,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;QAC1G,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC;QAC7E,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAA;AAC9E,CAAC;AACD,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IAC/H,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,yDAAyD,CAAC,CAAA;QAClH,OAAO,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAA;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;IAClG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,yCAAyC,CAAC,CAAA;IAClE,OAAO,KAAK,CAAA;AACd,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,IAAY;IAC9D,OAAO,EAAE,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,iCAAiC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC;QAC5I,uBAAuB,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,EAAE,CAAA;AAC7G,CAAC;AAMD,SAAS,sBAAsB,CAAC,YAAoB;IAClD,IAAI,CAAC;QAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;IAC7C,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAA;IAAC,CAAC;IACrF,2EAA2E;IAC3E,8EAA8E;IAC9E,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClC,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,MAAM;mBACtF,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,mDAAmD,CAAC,CAAA;YACpI,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAA;YACnE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAC5B,IAAI,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,oDAAoD,CAAC,CAAA;YAC/E,MAAM,GAAG,IAAI,CAAA;QACf,CAAC;IACH,CAAC;AACH,CAAC;AACD,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,IAAY;IACpE,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAA;IAClH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC7C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC3F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,KAAK,IAAI;QACvD,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAA;AAC7I,CAAC;AACD,MAAM,UAAU,oCAAoC,CAAC,IAAY,EAAE,OAAe;IAChF,OAAO,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAA;AACtE,CAAC;AAED,8GAA8G;AAC9G,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,OAA6E,EACjI,MAAc,EAAE,WAAmB,EAAE,IAAY,EAAE,OAAe;IAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,oCAAoC,EAAE,MAAM,EAAE;gBAC3G,YAAY,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,oCAAoC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,EAAE,IAAI;aAC7H,EAAE,CAAC,CAAC,CAAC,CAAA;IACN,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1E,OAAO,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAA6B,CAAA;AAC3E,CAAC;AACD,MAAM,UAAU,4BAA4B,CAAC,WAAqC,EAAE,YAAqB;IACvG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAE,EAAE,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QACnE,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;eACjG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9E,IAAI,CAAC,sGAAsG,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type CreationAcceptanceAuthorityRef } from '@dsh-enhanced/assistant-growth-contract';
|
|
2
|
+
import type { CreationReviewConfig } from '@dsh-enhanced/assistant-verifier';
|
|
3
|
+
import type { Config as ControlPlaneConfig, CreationCapabilityConfig, CreationCapabilityOwner } from '@dsh-enhanced/plugin-control-plane';
|
|
4
|
+
import type { RsiAuthorityResources } from './rsi-authority-resources.js';
|
|
5
|
+
import type { RsiCreationBuildEnvironment } from './rsi-creation-build.js';
|
|
6
|
+
export type SourceCreationGrant = NonNullable<NonNullable<ControlPlaneConfig['sourceJobs']>['creation']>;
|
|
7
|
+
export interface RsiPluginCreationSetup {
|
|
8
|
+
reviews: CreationReviewConfig;
|
|
9
|
+
creation: SourceCreationGrant;
|
|
10
|
+
capabilities: CreationCapabilityConfig;
|
|
11
|
+
verifications: {
|
|
12
|
+
authority: CreationAcceptanceAuthorityRef;
|
|
13
|
+
publicKey: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Optional peers are loaded only for an opted-in creation setup. */
|
|
17
|
+
export declare function getRsiPluginCreationValidators(): {
|
|
18
|
+
compileCreationReviewConfig: typeof import('@dsh-enhanced/assistant-verifier').compileCreationReviewConfig;
|
|
19
|
+
validateCreationCapabilityConfig: typeof import('@dsh-enhanced/plugin-control-plane').validateCreationCapabilityConfig;
|
|
20
|
+
};
|
|
21
|
+
/** Admission of a complete finite chain; no resource is created or reset here. */
|
|
22
|
+
export declare function validateRsiPluginCreationSetup(input: unknown, expectedOwner: CreationCapabilityOwner, now?: number): RsiPluginCreationSetup;
|
|
23
|
+
/** Compile one stable installation grant from the already prepared private identities. */
|
|
24
|
+
export declare function createRsiPluginCreationSetup(input: {
|
|
25
|
+
resources: RsiAuthorityResources;
|
|
26
|
+
build: RsiCreationBuildEnvironment;
|
|
27
|
+
owner: CreationCapabilityOwner;
|
|
28
|
+
expiresAt: number;
|
|
29
|
+
now: number;
|
|
30
|
+
}): RsiPluginCreationSetup;
|
|
31
|
+
//# sourceMappingURL=rsi-plugin-creation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-plugin-creation.d.ts","sourceRoot":"","sources":["../src/rsi-plugin-creation.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0C,KAAK,8BAA8B,EAAE,MAAM,yCAAyC,CAAA;AACrI,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,IAAI,kBAAkB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AACzI,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE1E,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AAExG,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,oBAAoB,CAAA;IAC7B,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,YAAY,EAAE,wBAAwB,CAAA;IACtC,aAAa,EAAE;QAAE,SAAS,EAAE,8BAA8B,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAChF;AAwBD,qEAAqE;AACrE,wBAAgB,8BAA8B,IAAI;IAChD,2BAA2B,EAAE,cAAc,kCAAkC,EAAE,2BAA2B,CAAA;IAC1G,gCAAgC,EAAE,cAAc,oCAAoC,EAAE,gCAAgC,CAAA;CACvH,CASA;AAcD,kFAAkF;AAClF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EACnG,GAAG,SAAa,GAAG,sBAAsB,CA2E1C;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,2BAA2B,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAC;IACrG,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAC/B,GAAG,sBAAsB,CAwCzB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { createPrivateKey, createPublicKey } from 'node:crypto';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
6
|
+
import { validateCreationAcceptanceAuthorityRef } from '@dsh-enhanced/assistant-growth-contract';
|
|
7
|
+
const limits = {
|
|
8
|
+
creates: 32, verifications: 32, adoptions: 32, cases: 4, tools: 8,
|
|
9
|
+
callsPerAdoption: 30, callRecords: 960, inputBytes: 65_536,
|
|
10
|
+
reviewInputBytes: 262_144, reviewOutputTokens: 8_192, reviewDurationMs: 300_000,
|
|
11
|
+
receiptTtlMs: 86_400_000, runnerDurationMs: 30_000,
|
|
12
|
+
reviewRuns: 160, adoptionRuns: 1_024,
|
|
13
|
+
retentionLifetimeMs: 30 * 86_400_000,
|
|
14
|
+
};
|
|
15
|
+
const uuid = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/u;
|
|
16
|
+
function fail(message) { throw new Error(`rsi plugin creation: ${message}`); }
|
|
17
|
+
const requirePeer = createRequire(import.meta.url);
|
|
18
|
+
function installedPeer(name) {
|
|
19
|
+
try {
|
|
20
|
+
requirePeer.resolve(name);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error.code === 'MODULE_NOT_FOUND'
|
|
24
|
+
|| error.code === 'ERR_MODULE_NOT_FOUND')
|
|
25
|
+
fail(`opted-in plugin creation requires installed peer ${name}`);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
return requirePeer(name);
|
|
29
|
+
}
|
|
30
|
+
/** Optional peers are loaded only for an opted-in creation setup. */
|
|
31
|
+
export function getRsiPluginCreationValidators() {
|
|
32
|
+
const verifier = installedPeer('@dsh-enhanced/assistant-verifier');
|
|
33
|
+
const controlPlane = installedPeer('@dsh-enhanced/plugin-control-plane');
|
|
34
|
+
if (typeof verifier.compileCreationReviewConfig !== 'function'
|
|
35
|
+
|| typeof controlPlane.validateCreationCapabilityConfig !== 'function') {
|
|
36
|
+
fail('installed creation validators are unavailable; update the verifier and control-plane peers');
|
|
37
|
+
}
|
|
38
|
+
return { compileCreationReviewConfig: verifier.compileCreationReviewConfig,
|
|
39
|
+
validateCreationCapabilityConfig: controlPlane.validateCreationCapabilityConfig };
|
|
40
|
+
}
|
|
41
|
+
function exact(value, fields) {
|
|
42
|
+
if (!value || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype)
|
|
43
|
+
return false;
|
|
44
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
45
|
+
return Reflect.ownKeys(value).length === fields.length
|
|
46
|
+
&& Object.keys(descriptors).sort().join('\0') === [...fields].sort().join('\0')
|
|
47
|
+
&& Object.values(descriptors).every(field => field.enumerable && 'value' in field);
|
|
48
|
+
}
|
|
49
|
+
function publicKeyAt(path) {
|
|
50
|
+
return createPublicKey(createPrivateKey(readFileSync(path))).export({ format: 'pem', type: 'spki' }).toString();
|
|
51
|
+
}
|
|
52
|
+
/** Admission of a complete finite chain; no resource is created or reset here. */
|
|
53
|
+
export function validateRsiPluginCreationSetup(input, expectedOwner, now = Date.now()) {
|
|
54
|
+
if (!Number.isSafeInteger(now) || now < 0)
|
|
55
|
+
fail('invalid validation time');
|
|
56
|
+
if (!exact(expectedOwner, ['authorityId', 'authorityHash', 'principalId', 'principalRecordId',
|
|
57
|
+
'principalVersion', 'workspace', 'agentPreset']))
|
|
58
|
+
fail('invalid expected owner');
|
|
59
|
+
if (!exact(input, ['reviews', 'creation', 'capabilities', 'verifications']))
|
|
60
|
+
fail('invalid setup fields');
|
|
61
|
+
const setup = input;
|
|
62
|
+
const validators = getRsiPluginCreationValidators();
|
|
63
|
+
const { config: reviews, authority, publicKey } = validators.compileCreationReviewConfig(setup.reviews);
|
|
64
|
+
validators.validateCreationCapabilityConfig(setup.capabilities);
|
|
65
|
+
const capabilities = structuredClone(setup.capabilities);
|
|
66
|
+
if (!isDeepStrictEqual(reviews.owner, expectedOwner) || !isDeepStrictEqual(capabilities.owner, expectedOwner)) {
|
|
67
|
+
fail('creation owner differs from current owner route');
|
|
68
|
+
}
|
|
69
|
+
if (!exact(setup.creation, ['id', 'expiresAt', 'maxCreates', 'namePrefix'])
|
|
70
|
+
|| typeof setup.creation.id !== 'string'
|
|
71
|
+
|| !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(setup.creation.id)
|
|
72
|
+
|| !Number.isSafeInteger(setup.creation.expiresAt)
|
|
73
|
+
|| setup.creation.expiresAt <= now
|
|
74
|
+
|| setup.creation.maxCreates !== limits.creates)
|
|
75
|
+
fail('invalid finite source creation grant');
|
|
76
|
+
const creation = structuredClone(setup.creation);
|
|
77
|
+
const installationId = creation.id.startsWith('creation-source-') ? creation.id.slice('creation-source-'.length) : '';
|
|
78
|
+
if (!uuid.test(installationId)
|
|
79
|
+
|| creation.namePrefix !== `owner-${installationId.slice(0, 8)}-`
|
|
80
|
+
|| reviews.namePrefix !== creation.namePrefix || capabilities.namePrefix !== creation.namePrefix) {
|
|
81
|
+
fail('creation namespace differs');
|
|
82
|
+
}
|
|
83
|
+
if (reviews.expiresAt !== creation.expiresAt || capabilities.expiresAt !== creation.expiresAt
|
|
84
|
+
|| reviews.runner.expiresAt !== creation.expiresAt || capabilities.runner.expiresAt !== creation.expiresAt) {
|
|
85
|
+
fail('creation authority expiry differs');
|
|
86
|
+
}
|
|
87
|
+
if (reviews.authorityId !== `creation-review-${installationId}`
|
|
88
|
+
|| capabilities.authorityId !== `creation-adoption-${installationId}`
|
|
89
|
+
|| reviews.keyId !== `${reviews.authorityId}-key` || capabilities.keyId !== `${capabilities.authorityId}-key`
|
|
90
|
+
|| new Set([creation.id, reviews.authorityId, capabilities.authorityId, expectedOwner.authorityId]).size !== 4
|
|
91
|
+
|| reviews.keyPath === capabilities.keyPath) {
|
|
92
|
+
fail('creation authorities must be independent');
|
|
93
|
+
}
|
|
94
|
+
const authorityRoot = dirname(dirname(reviews.keyPath));
|
|
95
|
+
if (reviews.keyPath !== join(authorityRoot, 'identities', 'review.pem')
|
|
96
|
+
|| capabilities.keyPath !== join(authorityRoot, 'identities', 'adoption.pem')
|
|
97
|
+
|| reviews.runner.stateRoot !== join(authorityRoot, 'state', 'creation-review-runner')
|
|
98
|
+
|| capabilities.runner.stateRoot !== join(authorityRoot, 'state', 'creation-adoption-runner')) {
|
|
99
|
+
fail('creation private roots differ from prepared identities');
|
|
100
|
+
}
|
|
101
|
+
if (reviews.maxVerifications !== limits.verifications || reviews.maxCases !== limits.cases
|
|
102
|
+
|| reviews.maxInputBytes !== limits.reviewInputBytes || reviews.maxOutputTokens !== limits.reviewOutputTokens
|
|
103
|
+
|| reviews.maxDurationMs !== limits.reviewDurationMs || reviews.receiptTtlMs !== limits.receiptTtlMs
|
|
104
|
+
|| capabilities.maxAdoptions !== limits.adoptions || capabilities.maxTools !== limits.tools
|
|
105
|
+
|| capabilities.maxCallsPerAdoption !== limits.callsPerAdoption
|
|
106
|
+
|| capabilities.maxCallRecords !== limits.callRecords || capabilities.maxInputBytes !== limits.inputBytes) {
|
|
107
|
+
fail('creation finite limits differ');
|
|
108
|
+
}
|
|
109
|
+
// Old manifests retain their original certificate-bound lifetime. A new
|
|
110
|
+
// installation explicitly grants bounded use after the authoring window.
|
|
111
|
+
if (capabilities.retention !== undefined
|
|
112
|
+
&& capabilities.retention.maximumLifetimeMs !== limits.retentionLifetimeMs) {
|
|
113
|
+
fail('creation retention lifetime differs');
|
|
114
|
+
}
|
|
115
|
+
if (reviews.runner.maxRuns !== limits.reviewRuns || reviews.runner.maxDurationMs !== limits.runnerDurationMs
|
|
116
|
+
|| reviews.runner.maxTotalDurationMs !== limits.reviewRuns * limits.runnerDurationMs
|
|
117
|
+
|| reviews.runner.maxOutputBytes !== 262_144
|
|
118
|
+
|| capabilities.runner.maxRuns !== limits.adoptionRuns || capabilities.runner.maxDurationMs !== limits.runnerDurationMs
|
|
119
|
+
|| capabilities.runner.maxTotalDurationMs !== 86_400_000 || capabilities.runner.maxOutputBytes !== 65_536
|
|
120
|
+
|| reviews.runner.maxRuns < reviews.maxVerifications * (reviews.maxCases + 1)
|
|
121
|
+
|| capabilities.runner.maxRuns < capabilities.maxAdoptions + capabilities.maxCallRecords
|
|
122
|
+
|| capabilities.maxCallRecords < capabilities.maxAdoptions * capabilities.maxCallsPerAdoption
|
|
123
|
+
|| reviews.runner.image !== capabilities.runner.image || reviews.runner.dockerPath !== capabilities.runner.dockerPath) {
|
|
124
|
+
fail('creation runner limits cannot cover finite grants');
|
|
125
|
+
}
|
|
126
|
+
if (!exact(setup.verifications, ['authority', 'publicKey']))
|
|
127
|
+
fail('invalid creation verification fields');
|
|
128
|
+
validateCreationAcceptanceAuthorityRef(setup.verifications.authority);
|
|
129
|
+
if (!isDeepStrictEqual(setup.verifications.authority, authority)
|
|
130
|
+
|| setup.verifications.publicKey !== publicKey)
|
|
131
|
+
fail('creation verification authority digest or key differs');
|
|
132
|
+
if (publicKeyAt(capabilities.keyPath) === publicKey)
|
|
133
|
+
fail('verification and adoption signing keys must be separate');
|
|
134
|
+
return { reviews, creation, capabilities, verifications: { authority, publicKey } };
|
|
135
|
+
}
|
|
136
|
+
/** Compile one stable installation grant from the already prepared private identities. */
|
|
137
|
+
export function createRsiPluginCreationSetup(input) {
|
|
138
|
+
const { resources, build, owner, expiresAt, now } = input;
|
|
139
|
+
if (resources?.schemaVersion !== 1 || build?.schemaVersion !== 1
|
|
140
|
+
|| !uuid.test(resources.installationId)
|
|
141
|
+
|| !Number.isSafeInteger(expiresAt) || expiresAt <= now)
|
|
142
|
+
fail('invalid installation or expiry');
|
|
143
|
+
const prefix = `owner-${resources.installationId.slice(0, 8)}-`;
|
|
144
|
+
const creation = { id: `creation-source-${resources.installationId}`, expiresAt,
|
|
145
|
+
maxCreates: limits.creates, namePrefix: prefix };
|
|
146
|
+
const reviews = {
|
|
147
|
+
authorityId: `creation-review-${resources.installationId}`, owner, namePrefix: prefix,
|
|
148
|
+
keyId: `creation-review-${resources.installationId}-key`, keyPath: resources.identities.review.keyPath,
|
|
149
|
+
expiresAt, maxVerifications: limits.verifications,
|
|
150
|
+
runner: { stateRoot: join(resources.stateRoot, 'creation-review-runner'), image: build.image,
|
|
151
|
+
dockerPath: build.dockerPath, expiresAt, maxRuns: limits.reviewRuns,
|
|
152
|
+
maxTotalDurationMs: limits.reviewRuns * limits.runnerDurationMs, maxDurationMs: limits.runnerDurationMs,
|
|
153
|
+
maxOutputBytes: 262_144 },
|
|
154
|
+
policy: 'Derive concrete held-out behavior cases from the current authenticated task and feedback. Independently check exact outputs and the checked source patch. Reject ambiguous behavior, unsafe scope, and missing evidence.',
|
|
155
|
+
maxInputBytes: limits.reviewInputBytes, maxOutputTokens: limits.reviewOutputTokens,
|
|
156
|
+
maxDurationMs: limits.reviewDurationMs, maxCases: limits.cases, receiptTtlMs: limits.receiptTtlMs,
|
|
157
|
+
};
|
|
158
|
+
const capabilities = {
|
|
159
|
+
authorityId: `creation-adoption-${resources.installationId}`,
|
|
160
|
+
keyId: `creation-adoption-${resources.installationId}-key`, keyPath: resources.identities.adoption.keyPath,
|
|
161
|
+
owner, namePrefix: prefix, expiresAt, maxAdoptions: limits.adoptions,
|
|
162
|
+
maxTools: limits.tools, maxCallsPerAdoption: limits.callsPerAdoption,
|
|
163
|
+
maxCallRecords: limits.callRecords, maxInputBytes: limits.inputBytes,
|
|
164
|
+
retention: { maximumLifetimeMs: limits.retentionLifetimeMs },
|
|
165
|
+
runner: { stateRoot: join(resources.stateRoot, 'creation-adoption-runner'), image: build.image,
|
|
166
|
+
dockerPath: build.dockerPath, expiresAt, maxRuns: limits.adoptionRuns,
|
|
167
|
+
maxTotalDurationMs: 86_400_000, maxDurationMs: limits.runnerDurationMs, maxOutputBytes: 65_536 },
|
|
168
|
+
};
|
|
169
|
+
const { compileCreationReviewConfig } = getRsiPluginCreationValidators();
|
|
170
|
+
const { authority, publicKey } = compileCreationReviewConfig(reviews);
|
|
171
|
+
const setup = validateRsiPluginCreationSetup({ reviews, creation, capabilities,
|
|
172
|
+
verifications: { authority, publicKey } }, owner, now);
|
|
173
|
+
if (setup.verifications.publicKey !== resources.identities.review.publicKeyPem
|
|
174
|
+
|| publicKeyAt(setup.capabilities.keyPath) !== resources.identities.adoption.publicKeyPem) {
|
|
175
|
+
fail('prepared signing identities differ');
|
|
176
|
+
}
|
|
177
|
+
return setup;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=rsi-plugin-creation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-plugin-creation.js","sourceRoot":"","sources":["../src/rsi-plugin-creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,sCAAsC,EAAuC,MAAM,yCAAyC,CAAA;AAerI,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IACjE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;IAC1D,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO;IAC/E,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM;IAClD,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;IACpC,mBAAmB,EAAE,EAAE,GAAG,UAAU;CAC5B,CAAA;AACV,MAAM,IAAI,GAAG,wEAAwE,CAAA;AAErF,SAAS,IAAI,CAAC,OAAe,IAAW,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAA,CAAC,CAAC;AAC5F,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAClD,SAAS,aAAa,CAAI,IAAY;IACpC,IAAI,CAAC;QAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAAC,CAAC;IACjC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,kBAAkB;eAC1D,KAA+B,CAAC,IAAI,KAAK,sBAAsB;YAAE,IAAI,CAAC,oDAAoD,IAAI,EAAE,CAAC,CAAA;QACvI,MAAM,KAAK,CAAA;IACb,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAM,CAAA;AAC/B,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,8BAA8B;IAI5C,MAAM,QAAQ,GAAG,aAAa,CAAoD,kCAAkC,CAAC,CAAA;IACrH,MAAM,YAAY,GAAG,aAAa,CAAsD,oCAAoC,CAAC,CAAA;IAC7H,IAAI,OAAO,QAAQ,CAAC,2BAA2B,KAAK,UAAU;WACzD,OAAO,YAAY,CAAC,gCAAgC,KAAK,UAAU,EAAE,CAAC;QACzE,IAAI,CAAC,4FAA4F,CAAC,CAAA;IACpG,CAAC;IACD,OAAO,EAAE,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B;QACxE,gCAAgC,EAAE,YAAY,CAAC,gCAAgC,EAAE,CAAA;AACrF,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,MAAyB;IACtD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IAClI,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAC3D,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;WACjD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;WAC5E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,IAAI,KAAK,CAAC,CAAA;AACtF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,eAAe,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;AACjH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,8BAA8B,CAAC,KAAc,EAAE,aAAsC,EACnG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAChB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,IAAI,CAAC,yBAAyB,CAAC,CAAA;IAC1E,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB;QAC3F,kBAAkB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAAE,IAAI,CAAC,wBAAwB,CAAC,CAAA;IAClF,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QAAE,IAAI,CAAC,sBAAsB,CAAC,CAAA;IACzG,MAAM,KAAK,GAAG,KAA+B,CAAA;IAC7C,MAAM,UAAU,GAAsD,8BAA8B,EAAE,CAAA;IACtG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACvG,UAAU,CAAC,gCAAgC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACxD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;QAC9G,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;WACtE,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ;WACrC,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;WAC3D,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;WAC/C,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG;WAC/B,KAAK,CAAC,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,OAAO;QAAE,IAAI,CAAC,sCAAsC,CAAC,CAAA;IAC/F,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;WACzB,QAAQ,CAAC,UAAU,KAAK,SAAS,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;WAC9D,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QACnG,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACpC,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;WACxF,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC7G,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,mBAAmB,cAAc,EAAE;WAC1D,YAAY,CAAC,WAAW,KAAK,qBAAqB,cAAc,EAAE;WAClE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO,CAAC,WAAW,MAAM,IAAI,YAAY,CAAC,KAAK,KAAK,GAAG,YAAY,CAAC,WAAW,MAAM;WAC1G,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;WAC3G,OAAO,CAAC,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,CAAC,0CAA0C,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IACvD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;WAClE,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC;WAC1E,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,wBAAwB,CAAC;WACnF,YAAY,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,0BAA0B,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,wDAAwD,CAAC,CAAA;IAChE,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK;WACrF,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,eAAe,KAAK,MAAM,CAAC,kBAAkB;WAC1G,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY;WACjG,YAAY,CAAC,YAAY,KAAK,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK;WACxF,YAAY,CAAC,mBAAmB,KAAK,MAAM,CAAC,gBAAgB;WAC5D,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC,aAAa,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5G,IAAI,CAAC,+BAA+B,CAAC,CAAA;IACvC,CAAC;IACD,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS;WACnC,YAAY,CAAC,SAAS,CAAC,iBAAiB,KAAK,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC7E,IAAI,CAAC,qCAAqC,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,gBAAgB;WACvG,OAAO,CAAC,MAAM,CAAC,kBAAkB,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;WACjF,OAAO,CAAC,MAAM,CAAC,cAAc,KAAK,OAAO;WACzC,YAAY,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,gBAAgB;WACpH,YAAY,CAAC,MAAM,CAAC,kBAAkB,KAAK,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,cAAc,KAAK,MAAM;WACtG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;WAC1E,YAAY,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,cAAc;WACrF,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,mBAAmB;WAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxH,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC3D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAAE,IAAI,CAAC,sCAAsC,CAAC,CAAA;IACzG,sCAAsC,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IACrE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;WAC3D,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,uDAAuD,CAAC,CAAA;IAC/G,IAAI,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,SAAS;QAAE,IAAI,CAAC,yDAAyD,CAAC,CAAA;IACpH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAA;AACrF,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,4BAA4B,CAAC,KAG5C;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IACzD,IAAI,SAAS,EAAE,aAAa,KAAK,CAAC,IAAI,KAAK,EAAE,aAAa,KAAK,CAAC;WAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;WACpC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,GAAG;QAAE,IAAI,CAAC,gCAAgC,CAAC,CAAA;IACjG,MAAM,MAAM,GAAG,SAAS,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA;IAC/D,MAAM,QAAQ,GAAwB,EAAE,EAAE,EAAE,mBAAmB,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS;QAClG,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;IAClD,MAAM,OAAO,GAAyB;QACpC,WAAW,EAAE,mBAAmB,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM;QACrF,KAAK,EAAE,mBAAmB,SAAS,CAAC,cAAc,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;QACtG,SAAS,EAAE,gBAAgB,EAAE,MAAM,CAAC,aAAa;QACjD,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;YAC1F,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU;YACnE,kBAAkB,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,CAAC,gBAAgB;YACvG,cAAc,EAAE,OAAO,EAAE;QAC3B,MAAM,EAAE,0NAA0N;QAClO,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,MAAM,CAAC,kBAAkB;QAClF,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY;KAClG,CAAA;IACD,MAAM,YAAY,GAA6B;QAC7C,WAAW,EAAE,qBAAqB,SAAS,CAAC,cAAc,EAAE;QAC5D,KAAK,EAAE,qBAAqB,SAAS,CAAC,cAAc,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO;QAC1G,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS;QACpE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,gBAAgB;QACpE,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU;QACpE,SAAS,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE;QAC5D,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;YAC5F,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY;YACrE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE;KACnG,CAAA;IACD,MAAM,EAAE,2BAA2B,EAAE,GAAG,8BAA8B,EAAE,CAAA;IACxE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,8BAA8B,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY;QAC5E,aAAa,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY;WACzE,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC5F,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|