agl 22.0.0 → 22.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/changelog.md +20 -0
  2. package/dist_serve/bundle.js +520 -509
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/classes.authstore.d.ts +1 -2
  5. package/dist_ts/classes.authstore.js +1 -6
  6. package/dist_ts/classes.cli.d.ts +4 -2
  7. package/dist_ts/classes.cli.js +161 -68
  8. package/dist_ts/classes.controller.js +68 -30
  9. package/dist_ts/classes.upgradecoordinator.d.ts +39 -1
  10. package/dist_ts/classes.upgradecoordinator.js +740 -74
  11. package/dist_ts/classes.upgradetransaction.d.ts +68 -1
  12. package/dist_ts/classes.upgradetransaction.js +383 -223
  13. package/dist_ts_migration/classes.documentmigrationrunner.js +3 -1
  14. package/dist_ts_migration/index.d.ts +2 -0
  15. package/dist_ts_migration/index.js +3 -1
  16. package/dist_ts_migration/v24_legacyterminallayout.d.ts +18 -0
  17. package/dist_ts_migration/v24_legacyterminallayout.js +79 -0
  18. package/dist_ts_migration/v24_legacyterminallayoutmigration.d.ts +6 -0
  19. package/dist_ts_migration/v24_legacyterminallayoutmigration.js +67 -0
  20. package/package.json +1 -1
  21. package/readme.md +255 -378
  22. package/ts/00_commitinfo_data.ts +1 -1
  23. package/ts/classes.authstore.ts +0 -15
  24. package/ts/classes.cli.ts +184 -83
  25. package/ts/classes.controller.ts +79 -33
  26. package/ts/classes.upgradecoordinator.ts +876 -74
  27. package/ts/classes.upgradetransaction.ts +574 -250
  28. package/ts_migration/classes.documentmigrationrunner.ts +2 -0
  29. package/ts_migration/index.ts +2 -0
  30. package/ts_migration/v24_legacyterminallayout.ts +131 -0
  31. package/ts_migration/v24_legacyterminallayoutmigration.ts +88 -0
  32. package/ts_web/00_commitinfo_data.ts +1 -1
  33. package/ts_web/elements.harnesscontrollerapp.ts +32 -2
@@ -3,6 +3,7 @@ import { ProtocolV6DocumentMigration } from './v6_protocoldocumentmigration.js';
3
3
  import { ProtocolV18ResourceLayoutMigration } from './v18_resourcelayoutmigration.js';
4
4
  import { ProtocolV22ProjectFilesystemIdentityMigration } from './v22_projectfilesystemidentitymigration.js';
5
5
  import { RuntimeConfigV23Migration } from './v23_runtimeconfig.js';
6
+ import { LegacyTerminalLayoutV24Migration } from './v24_legacyterminallayoutmigration.js';
6
7
  export class PostDatabaseDocumentMigrationRunner {
7
8
  database;
8
9
  migrations;
@@ -10,6 +11,7 @@ export class PostDatabaseDocumentMigrationRunner {
10
11
  this.database = database;
11
12
  this.migrations = [
12
13
  new RuntimeConfigV23Migration(this.database),
14
+ new LegacyTerminalLayoutV24Migration(this.database),
13
15
  new ProtocolV6DocumentMigration(this.database),
14
16
  new ProtocolV18ResourceLayoutMigration(this.database),
15
17
  ];
@@ -23,4 +25,4 @@ export class PostDatabaseDocumentMigrationRunner {
23
25
  await new ProtocolV22ProjectFilesystemIdentityMigration(this.database, controllerIdArg).run();
24
26
  }
25
27
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kb2N1bWVudG1pZ3JhdGlvbnJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX21pZ3JhdGlvbi9jbGFzc2VzLmRvY3VtZW50bWlncmF0aW9ucnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDNUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFNbkUsTUFBTSxPQUFPLG1DQUFtQztJQUdqQjtJQUZaLFVBQVUsQ0FBdUI7SUFFbEQsWUFBNkIsUUFBbUQ7UUFBbkQsYUFBUSxHQUFSLFFBQVEsQ0FBMkM7UUFDOUUsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDNUMsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLElBQUksa0NBQWtDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHO1FBQ2QsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEMsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsNEJBQTRCLENBQUMsZUFBdUI7UUFDL0QsTUFBTSxJQUFJLDZDQUE2QyxDQUNyRCxJQUFJLENBQUMsUUFBUSxFQUNiLGVBQWUsQ0FDaEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNWLENBQUM7Q0FDRiJ9
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kb2N1bWVudG1pZ3JhdGlvbnJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX21pZ3JhdGlvbi9jbGFzc2VzLmRvY3VtZW50bWlncmF0aW9ucnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDNUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFNMUYsTUFBTSxPQUFPLG1DQUFtQztJQUdqQjtJQUZaLFVBQVUsQ0FBdUI7SUFFbEQsWUFBNkIsUUFBbUQ7UUFBbkQsYUFBUSxHQUFSLFFBQVEsQ0FBMkM7UUFDOUUsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDNUMsSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ25ELElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM5QyxJQUFJLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRztRQUNkLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLGVBQXVCO1FBQy9ELE1BQU0sSUFBSSw2Q0FBNkMsQ0FDckQsSUFBSSxDQUFDLFFBQVEsRUFDYixlQUFlLENBQ2hCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDVixDQUFDO0NBQ0YifQ==
@@ -12,3 +12,5 @@ export * from './v19_flexprojectmanagement.js';
12
12
  export * from './v22_projectfilesystemidentitymigration.js';
13
13
  export * from './v23_runtimeconfig.js';
14
14
  export * from './v23_aglhome.js';
15
+ export * from './v24_legacyterminallayout.js';
16
+ export * from './v24_legacyterminallayoutmigration.js';
@@ -12,4 +12,6 @@ export * from './v19_flexprojectmanagement.js';
12
12
  export * from './v22_projectfilesystemidentitymigration.js';
13
13
  export * from './v23_runtimeconfig.js';
14
14
  export * from './v23_aglhome.js';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19taWdyYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDIn0=
15
+ export * from './v24_legacyterminallayout.js';
16
+ export * from './v24_legacyterminallayoutmigration.js';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19taWdyYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx3Q0FBd0MsQ0FBQyJ9
@@ -0,0 +1,18 @@
1
+ export interface IV24LegacySessionGroup {
2
+ id: string;
3
+ name: string;
4
+ sessionIds: unknown[];
5
+ }
6
+ export interface IV24LegacySessionGroupsDocument {
7
+ id: string;
8
+ controllerId: string;
9
+ projectId: string;
10
+ groups: IV24LegacySessionGroup[];
11
+ ungroupedSessionIds?: unknown[];
12
+ revision?: number;
13
+ }
14
+ export interface IV24LayoutMigrationResult {
15
+ document: IV24LegacySessionGroupsDocument;
16
+ migrated: boolean;
17
+ }
18
+ export declare const migrateV24LegacyTerminalLayoutDocument: (valueArg: unknown) => IV24LayoutMigrationResult;
@@ -0,0 +1,79 @@
1
+ const legacyOpenCodePtyIdPattern = /^pty_[0-9a-f]{12}[0-9A-Za-z]{14}$/;
2
+ const legacyControllerTerminalIdPattern = /^terminal_[A-Za-z0-9_-]{22}$/;
3
+ const isPlainObject = (valueArg) => {
4
+ if (typeof valueArg !== 'object' || valueArg === null || Array.isArray(valueArg))
5
+ return false;
6
+ const prototype = Object.getPrototypeOf(valueArg);
7
+ return prototype === Object.prototype || prototype === null;
8
+ };
9
+ const hasExactKeys = (valueArg, requiredArg, optionalArg = []) => {
10
+ const allowed = new Set([...requiredArg, ...optionalArg]);
11
+ return requiredArg.every((key) => Object.hasOwn(valueArg, key))
12
+ && Object.keys(valueArg).every((key) => allowed.has(key));
13
+ };
14
+ const isCanonicalControllerTerminalId = (valueArg) => {
15
+ if (!legacyControllerTerminalIdPattern.test(valueArg))
16
+ return false;
17
+ const suffix = valueArg.slice('terminal_'.length);
18
+ const decoded = Buffer.from(suffix, 'base64url');
19
+ return decoded.length === 16 && decoded.toString('base64url') === suffix;
20
+ };
21
+ const isLegacyTerminalNativeId = (valueArg) => (typeof valueArg === 'string'
22
+ && (legacyOpenCodePtyIdPattern.test(valueArg)
23
+ || isCanonicalControllerTerminalId(valueArg)));
24
+ const isLegacyTerminalLayoutReference = (valueArg) => {
25
+ if (typeof valueArg === 'string')
26
+ return isLegacyTerminalNativeId(valueArg);
27
+ if (!isPlainObject(valueArg)
28
+ || Object.keys(valueArg).length !== 2
29
+ || !Object.hasOwn(valueArg, 'harnessId')
30
+ || !Object.hasOwn(valueArg, 'nativeId')
31
+ || typeof valueArg.nativeId !== 'string')
32
+ return false;
33
+ if (valueArg.harnessId === 'controller')
34
+ return true;
35
+ return valueArg.harnessId === 'opencode' && isLegacyTerminalNativeId(valueArg.nativeId);
36
+ };
37
+ export const migrateV24LegacyTerminalLayoutDocument = (valueArg) => {
38
+ if (!isPlainObject(valueArg)
39
+ || !hasExactKeys(valueArg, ['id', 'controllerId', 'projectId', 'groups'], ['ungroupedSessionIds', 'revision'])
40
+ || !Array.isArray(valueArg.groups)) {
41
+ throw new Error('Invalid legacy terminal layout migration document.');
42
+ }
43
+ const sourceGroups = valueArg.groups;
44
+ const groups = sourceGroups.map((groupArg) => {
45
+ if (!isPlainObject(groupArg)
46
+ || !hasExactKeys(groupArg, ['id', 'name', 'sessionIds'])
47
+ || !Array.isArray(groupArg.sessionIds)) {
48
+ throw new Error('Invalid legacy terminal layout group.');
49
+ }
50
+ return {
51
+ ...groupArg,
52
+ sessionIds: groupArg.sessionIds.filter((sessionId) => (!isLegacyTerminalLayoutReference(sessionId))),
53
+ };
54
+ });
55
+ const hasUngroupedSessionIds = Object.hasOwn(valueArg, 'ungroupedSessionIds');
56
+ if (hasUngroupedSessionIds && !Array.isArray(valueArg.ungroupedSessionIds)) {
57
+ throw new Error('Invalid legacy terminal ungrouped layout list.');
58
+ }
59
+ const ungroupedSessionIds = hasUngroupedSessionIds
60
+ ? valueArg.ungroupedSessionIds.filter((sessionId) => (!isLegacyTerminalLayoutReference(sessionId)))
61
+ : undefined;
62
+ const migrated = groups.some((group, index) => (group.sessionIds.length !== sourceGroups[index].sessionIds.length)) || (hasUngroupedSessionIds
63
+ && ungroupedSessionIds.length !== valueArg.ungroupedSessionIds.length);
64
+ if (!migrated) {
65
+ return {
66
+ document: valueArg,
67
+ migrated: false,
68
+ };
69
+ }
70
+ return {
71
+ document: {
72
+ ...valueArg,
73
+ groups,
74
+ ...(hasUngroupedSessionIds ? { ungroupedSessionIds } : {}),
75
+ },
76
+ migrated: true,
77
+ };
78
+ };
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjI0X2xlZ2FjeXRlcm1pbmFsbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfbWlncmF0aW9uL3YyNF9sZWdhY3l0ZXJtaW5hbGxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0saUNBQWlDLEdBQUcsOEJBQThCLENBQUM7QUFzQnpFLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBaUIsRUFBdUIsRUFBRTtJQUMvRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDL0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FDbkIsUUFBaUIsRUFDakIsV0FBOEIsRUFDOUIsY0FBaUMsRUFBRSxFQUMxQixFQUFFO0lBQ1gsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQztBQUVGLE1BQU0sK0JB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
@@ -0,0 +1,6 @@
1
+ import * as plugins from '../dist_ts/plugins.js';
2
+ export declare class LegacyTerminalLayoutV24Migration {
3
+ private readonly database;
4
+ constructor(database: plugins.smartdata.SmartdataDb | undefined);
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,67 @@
1
+ import * as plugins from '../dist_ts/plugins.js';
2
+ import { assertControllerSessionGroupsDocument, ControllerSessionGroupsModel, } from '../dist_ts/classes.authmodels.js';
3
+ import { AuthError } from '../dist_ts/interfaces.auth.js';
4
+ import { migrateProtocolV6SessionGroupsDocument } from './v6_protocoldocuments.js';
5
+ import { migrateV24LegacyTerminalLayoutDocument } from './v24_legacyterminallayout.js';
6
+ const migrationPageLimit = 128;
7
+ const persistedBodyFromRawDocument = (valueArg) => {
8
+ const body = { ...valueArg };
9
+ delete body._id;
10
+ delete body._smartdataRevision;
11
+ return body;
12
+ };
13
+ const assertProtocolV6NormalizableLayout = (valueArg) => {
14
+ const normalized = migrateProtocolV6SessionGroupsDocument(valueArg);
15
+ assertControllerSessionGroupsDocument(normalized.document);
16
+ };
17
+ export class LegacyTerminalLayoutV24Migration {
18
+ database;
19
+ constructor(database) {
20
+ this.database = database;
21
+ }
22
+ async run() {
23
+ if (!this.database) {
24
+ throw new AuthError('not_initialized', 'The authentication store database is unavailable.');
25
+ }
26
+ const collection = ControllerSessionGroupsModel.collection.mongoDbCollection;
27
+ let lastId;
28
+ while (true) {
29
+ const cursor = collection.find(lastId ? { _id: { $gt: lastId } } : {})
30
+ .sort({ _id: 1 })
31
+ .limit(migrationPageLimit);
32
+ let documents;
33
+ try {
34
+ documents = await cursor.toArray();
35
+ }
36
+ finally {
37
+ await cursor.close();
38
+ }
39
+ for (const raw of documents) {
40
+ const migration = migrateV24LegacyTerminalLayoutDocument(persistedBodyFromRawDocument(raw));
41
+ if (!migration.migrated)
42
+ continue;
43
+ assertProtocolV6NormalizableLayout(migration.document);
44
+ const selector = raw._smartdataRevision === undefined
45
+ ? { _id: raw._id, _smartdataRevision: { $exists: false } }
46
+ : { _id: raw._id, _smartdataRevision: raw._smartdataRevision };
47
+ const replaced = await collection.findOneAndReplace(selector, { _id: raw._id, ...migration.document, _smartdataRevision: plugins.crypto.randomUUID() }, { returnDocument: 'after', includeResultMetadata: false, upsert: false });
48
+ if (!replaced) {
49
+ const concurrent = await collection.findOne({ _id: raw._id });
50
+ if (!concurrent) {
51
+ throw new AuthError('concurrent_change', 'The legacy terminal layout migration changed concurrently.');
52
+ }
53
+ const remaining = migrateV24LegacyTerminalLayoutDocument(persistedBodyFromRawDocument(concurrent));
54
+ assertProtocolV6NormalizableLayout(remaining.document);
55
+ if (remaining.migrated) {
56
+ throw new AuthError('concurrent_change', 'The legacy terminal layout migration changed concurrently.');
57
+ }
58
+ }
59
+ }
60
+ const last = documents.at(-1);
61
+ if (!last || documents.length < migrationPageLimit)
62
+ break;
63
+ lastId = last._id;
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjI0X2xlZ2FjeXRlcm1pbmFsbGF5b3V0bWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfbWlncmF0aW9uL3YyNF9sZWdhY3l0ZXJtaW5hbGxheW91dG1pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsNEJBQTRCLEdBQzdCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3ZGLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0sNEJBQTRCLEdBQUcsQ0FDbkMsUUFBaUMsRUFDQSxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDL0IsT0FBTyxJQUFrRCxDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLE1BQU0sa0NBQWtDLEdBQUcsQ0FDekMsUUFBeUMsRUFDbkMsRUFBRTtJQUNSLE1BQU0sVUFBVSxHQUFHLHNDQUFzQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLHFDQUFxQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sZ0NBQWdDO0lBQ2Q7SUFBN0IsWUFBNkIsUUFBbUQ7UUFBbkQsYUFBUSxHQUFSLFFBQVEsQ0FBMkM7SUFBRyxDQUFDO0lBRTdFLEtBQUssQ0FBQyxHQUFHO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agl",
3
- "version": "22.0.0",
3
+ "version": "22.0.2",
4
4
  "controllerUpgradeManagementVersion": 2,
5
5
  "private": false,
6
6
  "description": "Agent Gateway Layer for OpenCode and FlexHarness sessions",