agl 1.0.17 → 21.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 (277) hide show
  1. package/.smartconfig.json +55 -0
  2. package/changelog.md +1026 -0
  3. package/cli.js +14 -0
  4. package/dist_serve/bundle.js +44778 -0
  5. package/dist_serve/index.html +13 -0
  6. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  7. package/dist_ts/00_commitinfo_data.js +9 -0
  8. package/dist_ts/classes.authmodels.d.ts +126 -0
  9. package/dist_ts/classes.authmodels.js +1422 -0
  10. package/dist_ts/classes.authstore.d.ts +160 -0
  11. package/dist_ts/classes.authstore.js +2483 -0
  12. package/dist_ts/classes.browserresourcehost.d.ts +85 -0
  13. package/dist_ts/classes.browserresourcehost.js +912 -0
  14. package/dist_ts/classes.cli.d.ts +21 -0
  15. package/dist_ts/classes.cli.js +1082 -0
  16. package/dist_ts/classes.config.d.ts +23 -0
  17. package/dist_ts/classes.config.js +267 -0
  18. package/dist_ts/classes.controller.d.ts +523 -0
  19. package/dist_ts/classes.controller.js +10611 -0
  20. package/dist_ts/classes.controllermanagement.d.ts +32 -0
  21. package/dist_ts/classes.controllermanagement.js +222 -0
  22. package/dist_ts/classes.draftmanager.d.ts +30 -0
  23. package/dist_ts/classes.draftmanager.js +179 -0
  24. package/dist_ts/classes.embeddeddb.d.ts +30 -0
  25. package/dist_ts/classes.embeddeddb.js +159 -0
  26. package/dist_ts/classes.flexframedtransport.d.ts +56 -0
  27. package/dist_ts/classes.flexframedtransport.js +275 -0
  28. package/dist_ts/classes.flexmodels.private.d.ts +231 -0
  29. package/dist_ts/classes.flexmodels.private.js +985 -0
  30. package/dist_ts/classes.flexmodels.public.d.ts +207 -0
  31. package/dist_ts/classes.flexmodels.public.js +885 -0
  32. package/dist_ts/classes.flexprojectionreader.d.ts +89 -0
  33. package/dist_ts/classes.flexprojectionreader.js +580 -0
  34. package/dist_ts/classes.flexservice.d.ts +196 -0
  35. package/dist_ts/classes.flexservice.js +3704 -0
  36. package/dist_ts/classes.flexstore.d.ts +174 -0
  37. package/dist_ts/classes.flexstore.js +3400 -0
  38. package/dist_ts/classes.flexsupervisor.d.ts +105 -0
  39. package/dist_ts/classes.flexsupervisor.js +1191 -0
  40. package/dist_ts/classes.gitreversion.d.ts +431 -0
  41. package/dist_ts/classes.gitreversion.js +10592 -0
  42. package/dist_ts/classes.harnessoperationmanager.d.ts +113 -0
  43. package/dist_ts/classes.harnessoperationmanager.js +602 -0
  44. package/dist_ts/classes.opencodeclient.d.ts +146 -0
  45. package/dist_ts/classes.opencodeclient.js +3003 -0
  46. package/dist_ts/classes.opencodesupervisor.d.ts +60 -0
  47. package/dist_ts/classes.opencodesupervisor.js +1003 -0
  48. package/dist_ts/classes.passkeymanager.d.ts +34 -0
  49. package/dist_ts/classes.passkeymanager.js +456 -0
  50. package/dist_ts/classes.processinspection.d.ts +50 -0
  51. package/dist_ts/classes.processinspection.js +484 -0
  52. package/dist_ts/classes.resourcecoordinator.d.ts +64 -0
  53. package/dist_ts/classes.resourcecoordinator.js +294 -0
  54. package/dist_ts/classes.sessionintelligencereader.d.ts +13 -0
  55. package/dist_ts/classes.sessionintelligencereader.js +40 -0
  56. package/dist_ts/classes.systemmetricssampler.d.ts +53 -0
  57. package/dist_ts/classes.systemmetricssampler.js +168 -0
  58. package/dist_ts/classes.terminalmanager.d.ts +95 -0
  59. package/dist_ts/classes.terminalmanager.js +981 -0
  60. package/dist_ts/classes.terminalresourcehost.d.ts +20 -0
  61. package/dist_ts/classes.terminalresourcehost.js +84 -0
  62. package/dist_ts/classes.upgradecoordinator.d.ts +244 -0
  63. package/dist_ts/classes.upgradecoordinator.js +2155 -0
  64. package/dist_ts/classes.upgradetransaction.d.ts +92 -0
  65. package/dist_ts/classes.upgradetransaction.js +2125 -0
  66. package/dist_ts/classes.uploadmanager.d.ts +24 -0
  67. package/dist_ts/classes.uploadmanager.js +210 -0
  68. package/dist_ts/classes.validation.d.ts +91 -0
  69. package/dist_ts/classes.validation.js +1087 -0
  70. package/dist_ts/flexharness.child.d.ts +1 -0
  71. package/dist_ts/flexharness.child.js +28 -0
  72. package/dist_ts/functions.canonicaldirectory.d.ts +21 -0
  73. package/dist_ts/functions.canonicaldirectory.js +144 -0
  74. package/dist_ts/functions.controllerdataroot.d.ts +15 -0
  75. package/dist_ts/functions.controllerdataroot.js +76 -0
  76. package/dist_ts/functions.embeddeddb.d.ts +2 -0
  77. package/dist_ts/functions.embeddeddb.js +21 -0
  78. package/dist_ts/functions.flexcredentialstore.d.ts +16 -0
  79. package/dist_ts/functions.flexcredentialstore.js +93 -0
  80. package/dist_ts/functions.opencodeauth.d.ts +3 -0
  81. package/dist_ts/functions.opencodeauth.js +31 -0
  82. package/dist_ts/functions.runtimeenvironment.d.ts +2 -0
  83. package/dist_ts/functions.runtimeenvironment.js +79 -0
  84. package/dist_ts/functions.upgradefollower.d.ts +3 -0
  85. package/dist_ts/functions.upgradefollower.js +95 -0
  86. package/dist_ts/index.d.ts +24 -0
  87. package/dist_ts/index.js +25 -0
  88. package/dist_ts/interfaces.auth.d.ts +181 -0
  89. package/dist_ts/interfaces.auth.js +82 -0
  90. package/dist_ts/interfaces.config.d.ts +34 -0
  91. package/dist_ts/interfaces.config.js +2 -0
  92. package/dist_ts/interfaces.flexipc.d.ts +939 -0
  93. package/dist_ts/interfaces.flexipc.js +1492 -0
  94. package/dist_ts/interfaces.gitreversion.d.ts +246 -0
  95. package/dist_ts/interfaces.gitreversion.js +2 -0
  96. package/dist_ts/interfaces.lifecycle.d.ts +37 -0
  97. package/dist_ts/interfaces.lifecycle.js +2 -0
  98. package/dist_ts/interfaces.opencode.d.ts +101 -0
  99. package/dist_ts/interfaces.opencode.js +3 -0
  100. package/dist_ts/interfaces.projects.d.ts +156 -0
  101. package/dist_ts/interfaces.projects.js +5 -0
  102. package/dist_ts/plugins.d.ts +36 -0
  103. package/dist_ts/plugins.js +40 -0
  104. package/dist_ts_interfaces/index.d.ts +2 -0
  105. package/dist_ts_interfaces/index.js +3 -0
  106. package/dist_ts_interfaces/interfaces.d.ts +747 -0
  107. package/dist_ts_interfaces/interfaces.js +47 -0
  108. package/dist_ts_interfaces/plugins.d.ts +4 -0
  109. package/dist_ts_interfaces/plugins.js +3 -0
  110. package/dist_ts_interfaces/requests.d.ts +806 -0
  111. package/dist_ts_interfaces/requests.js +2 -0
  112. package/dist_ts_migration/classes.documentmigrationrunner.d.ts +8 -0
  113. package/dist_ts_migration/classes.documentmigrationrunner.js +24 -0
  114. package/dist_ts_migration/classes.flexmigrationrunner.d.ts +11 -0
  115. package/dist_ts_migration/classes.flexmigrationrunner.js +25 -0
  116. package/dist_ts_migration/classes.flexpostharnessmigrationrunner.d.ts +10 -0
  117. package/dist_ts_migration/classes.flexpostharnessmigrationrunner.js +15 -0
  118. package/dist_ts_migration/classes.migrationrunner.d.ts +8 -0
  119. package/dist_ts_migration/classes.migrationrunner.js +34 -0
  120. package/dist_ts_migration/index.d.ts +12 -0
  121. package/dist_ts_migration/index.js +13 -0
  122. package/dist_ts_migration/v10_flexharnessv3migration.d.ts +11 -0
  123. package/dist_ts_migration/v10_flexharnessv3migration.js +23 -0
  124. package/dist_ts_migration/v13_flexprojectionorder.d.ts +11 -0
  125. package/dist_ts_migration/v13_flexprojectionorder.js +23 -0
  126. package/dist_ts_migration/v16_flexprovidercredentials.d.ts +22 -0
  127. package/dist_ts_migration/v16_flexprovidercredentials.js +149 -0
  128. package/dist_ts_migration/v18_resourcelayout.d.ts +22 -0
  129. package/dist_ts_migration/v18_resourcelayout.js +23 -0
  130. package/dist_ts_migration/v18_resourcelayoutmigration.d.ts +6 -0
  131. package/dist_ts_migration/v18_resourcelayoutmigration.js +61 -0
  132. package/dist_ts_migration/v19_flexprojectmanagement.d.ts +11 -0
  133. package/dist_ts_migration/v19_flexprojectmanagement.js +21 -0
  134. package/dist_ts_migration/v1_embeddeddatabaselocation.d.ts +28 -0
  135. package/dist_ts_migration/v1_embeddeddatabaselocation.js +415 -0
  136. package/dist_ts_migration/v22_projectfilesystemidentitymigration.d.ts +7 -0
  137. package/dist_ts_migration/v22_projectfilesystemidentitymigration.js +105 -0
  138. package/dist_ts_migration/v2_controllerdataroot.d.ts +130 -0
  139. package/dist_ts_migration/v2_controllerdataroot.js +1887 -0
  140. package/dist_ts_migration/v6_protocoldocumentmigration.d.ts +7 -0
  141. package/dist_ts_migration/v6_protocoldocumentmigration.js +100 -0
  142. package/dist_ts_migration/v6_protocoldocuments.d.ts +7 -0
  143. package/dist_ts_migration/v6_protocoldocuments.js +138 -0
  144. package/html/index.html +13 -0
  145. package/{LICENSE → license.md} +2 -2
  146. package/package.json +86 -48
  147. package/readme.md +480 -0
  148. package/readme.plan.md +188 -0
  149. package/ts/00_commitinfo_data.ts +8 -0
  150. package/ts/classes.authmodels.ts +1245 -0
  151. package/ts/classes.authstore.ts +3274 -0
  152. package/ts/classes.browserresourcehost.ts +1205 -0
  153. package/ts/classes.cli.ts +1254 -0
  154. package/ts/classes.config.ts +351 -0
  155. package/ts/classes.controller.ts +14426 -0
  156. package/ts/classes.controllermanagement.ts +330 -0
  157. package/ts/classes.draftmanager.ts +232 -0
  158. package/ts/classes.embeddeddb.ts +166 -0
  159. package/ts/classes.flexframedtransport.ts +283 -0
  160. package/ts/classes.flexmodels.private.ts +823 -0
  161. package/ts/classes.flexmodels.public.ts +732 -0
  162. package/ts/classes.flexprojectionreader.ts +816 -0
  163. package/ts/classes.flexservice.ts +4302 -0
  164. package/ts/classes.flexstore.ts +4565 -0
  165. package/ts/classes.flexsupervisor.ts +1453 -0
  166. package/ts/classes.gitreversion.ts +13353 -0
  167. package/ts/classes.harnessoperationmanager.ts +870 -0
  168. package/ts/classes.opencodeclient.ts +4110 -0
  169. package/ts/classes.opencodesupervisor.ts +1280 -0
  170. package/ts/classes.passkeymanager.ts +570 -0
  171. package/ts/classes.processinspection.ts +623 -0
  172. package/ts/classes.resourcecoordinator.ts +436 -0
  173. package/ts/classes.sessionintelligencereader.ts +52 -0
  174. package/ts/classes.systemmetricssampler.ts +215 -0
  175. package/ts/classes.terminalmanager.ts +1207 -0
  176. package/ts/classes.terminalresourcehost.ts +122 -0
  177. package/ts/classes.upgradecoordinator.ts +2675 -0
  178. package/ts/classes.upgradetransaction.ts +2900 -0
  179. package/ts/classes.uploadmanager.ts +240 -0
  180. package/ts/classes.validation.ts +1409 -0
  181. package/ts/flexharness.child.ts +35 -0
  182. package/ts/functions.canonicaldirectory.ts +213 -0
  183. package/ts/functions.controllerdataroot.ts +107 -0
  184. package/ts/functions.embeddeddb.ts +22 -0
  185. package/ts/functions.flexcredentialstore.ts +128 -0
  186. package/ts/functions.opencodeauth.ts +34 -0
  187. package/ts/functions.runtimeenvironment.ts +90 -0
  188. package/ts/functions.upgradefollower.ts +115 -0
  189. package/ts/index.ts +36 -6
  190. package/ts/interfaces.auth.ts +316 -0
  191. package/ts/interfaces.config.ts +37 -0
  192. package/ts/interfaces.flexipc.ts +2586 -0
  193. package/ts/interfaces.gitreversion.ts +336 -0
  194. package/ts/interfaces.lifecycle.ts +46 -0
  195. package/ts/interfaces.opencode.ts +153 -0
  196. package/ts/interfaces.projects.ts +182 -0
  197. package/ts/plugins.ts +64 -0
  198. package/ts_interfaces/index.ts +2 -0
  199. package/ts_interfaces/interfaces.ts +827 -0
  200. package/ts_interfaces/plugins.ts +15 -0
  201. package/ts_interfaces/requests.ts +1186 -0
  202. package/ts_migration/classes.documentmigrationrunner.ts +32 -0
  203. package/ts_migration/classes.flexmigrationrunner.ts +33 -0
  204. package/ts_migration/classes.flexpostharnessmigrationrunner.ts +22 -0
  205. package/ts_migration/classes.migrationrunner.ts +40 -0
  206. package/ts_migration/index.ts +12 -0
  207. package/ts_migration/v10_flexharnessv3migration.ts +35 -0
  208. package/ts_migration/v13_flexprojectionorder.ts +33 -0
  209. package/ts_migration/v16_flexprovidercredentials.ts +196 -0
  210. package/ts_migration/v18_resourcelayout.ts +55 -0
  211. package/ts_migration/v18_resourcelayoutmigration.ts +68 -0
  212. package/ts_migration/v19_flexprojectmanagement.ts +28 -0
  213. package/ts_migration/v1_embeddeddatabaselocation.ts +560 -0
  214. package/ts_migration/v22_projectfilesystemidentitymigration.ts +121 -0
  215. package/ts_migration/v2_controllerdataroot.ts +2349 -0
  216. package/ts_migration/v6_protocoldocumentmigration.ts +144 -0
  217. package/ts_migration/v6_protocoldocuments.ts +198 -0
  218. package/ts_web/00_commitinfo_data.ts +8 -0
  219. package/ts_web/classes.controllersocketclient.ts +517 -0
  220. package/ts_web/classes.sessiondraftsync.ts +390 -0
  221. package/ts_web/elements.harnesscontrollerapp.ts +11494 -0
  222. package/ts_web/index.ts +2 -0
  223. package/ts_web/plugins.ts +31 -0
  224. package/.gitlab-ci.yml +0 -71
  225. package/.npmignore +0 -5
  226. package/README.md +0 -40
  227. package/dist/cli.js +0 -2
  228. package/dist/index.d.ts +0 -0
  229. package/dist/index.js +0 -9
  230. package/dist/mod_bundle/index.d.ts +0 -1
  231. package/dist/mod_bundle/index.js +0 -18
  232. package/dist/mod_bundle/mod.plugins.d.ts +0 -4
  233. package/dist/mod_bundle/mod.plugins.js +0 -11
  234. package/dist/mod_install/index.d.ts +0 -4
  235. package/dist/mod_install/index.js +0 -21
  236. package/dist/mod_install/mod.plugins.d.ts +0 -1
  237. package/dist/mod_install/mod.plugins.js +0 -7
  238. package/dist/mod_standard/index.d.ts +0 -4
  239. package/dist/mod_standard/index.js +0 -21
  240. package/dist/mod_standard/mod.browser.d.ts +0 -6
  241. package/dist/mod_standard/mod.browser.js +0 -14
  242. package/dist/mod_standard/mod.clean.d.ts +0 -4
  243. package/dist/mod_standard/mod.clean.js +0 -12
  244. package/dist/mod_standard/mod.compile.d.ts +0 -4
  245. package/dist/mod_standard/mod.compile.js +0 -21
  246. package/dist/mod_standard/mod.plugins.d.ts +0 -8
  247. package/dist/mod_standard/mod.plugins.js +0 -19
  248. package/dist/mod_standard/mod.test.d.ts +0 -4
  249. package/dist/mod_standard/mod.test.js +0 -12
  250. package/dist/plr.cli.d.ts +0 -3
  251. package/dist/plr.cli.js +0 -57
  252. package/dist/plr.config.d.ts +0 -11
  253. package/dist/plr.config.js +0 -26
  254. package/dist/plr.mods.d.ts +0 -17
  255. package/dist/plr.mods.js +0 -17
  256. package/dist/plr.paths.d.ts +0 -19
  257. package/dist/plr.paths.js +0 -26
  258. package/dist/plr.plugins.d.ts +0 -8
  259. package/dist/plr.plugins.js +0 -16
  260. package/npmextra.json +0 -10
  261. package/ts/mod_bundle/index.ts +0 -20
  262. package/ts/mod_bundle/mod.plugins.ts +0 -9
  263. package/ts/mod_install/index.ts +0 -20
  264. package/ts/mod_install/mod.plugins.ts +0 -1
  265. package/ts/mod_standard/index.ts +0 -23
  266. package/ts/mod_standard/mod.browser.ts +0 -17
  267. package/ts/mod_standard/mod.clean.ts +0 -13
  268. package/ts/mod_standard/mod.compile.ts +0 -23
  269. package/ts/mod_standard/mod.plugins.ts +0 -17
  270. package/ts/mod_standard/mod.test.ts +0 -13
  271. package/ts/plr.cli.ts +0 -60
  272. package/ts/plr.config.ts +0 -36
  273. package/ts/plr.mods.ts +0 -25
  274. package/ts/plr.paths.ts +0 -29
  275. package/ts/plr.plugins.ts +0 -17
  276. package/tslint.json +0 -3
  277. package/yarn.lock +0 -3464
@@ -0,0 +1,24 @@
1
+ import { type IControllerDraftAttachment } from '../dist_ts_interfaces/interfaces.js';
2
+ export interface IControllerUploadHandle {
3
+ id: string;
4
+ directory: string;
5
+ paths: string[];
6
+ promptSuffix: string;
7
+ bytes: number;
8
+ cleanup(): Promise<void>;
9
+ }
10
+ export declare class ControllerUploadManager {
11
+ private rootPromise?;
12
+ private readonly activeUploads;
13
+ private readonly pendingCreates;
14
+ private activeUploadCount;
15
+ private activeBytes;
16
+ private closed;
17
+ private closePromise?;
18
+ create(attachmentsArg: readonly IControllerDraftAttachment[]): Promise<IControllerUploadHandle | undefined>;
19
+ close(): Promise<void>;
20
+ private createReserved;
21
+ private closeInternal;
22
+ private ensureRoot;
23
+ private cleanup;
24
+ }
@@ -0,0 +1,210 @@
1
+ import * as plugins from './plugins.js';
2
+ import { controllerMaxAttachmentPromptSuffixBytes, controllerMaxDraftAttachmentBytes, controllerMaxDraftAttachmentTotalBytes, controllerMaxDraftAttachments, } from '../dist_ts_interfaces/interfaces.js';
3
+ const maximumActiveUploads = 64;
4
+ const maximumActiveUploadBytes = 64 * 1024 * 1024;
5
+ export class ControllerUploadManager {
6
+ rootPromise;
7
+ activeUploads = new Map();
8
+ pendingCreates = new Set();
9
+ activeUploadCount = 0;
10
+ activeBytes = 0;
11
+ closed = false;
12
+ closePromise;
13
+ create(attachmentsArg) {
14
+ if (attachmentsArg.length === 0)
15
+ return Promise.resolve(undefined);
16
+ if (this.closed)
17
+ throw new Error('The controller upload manager is closed.');
18
+ if (attachmentsArg.length > controllerMaxDraftAttachments) {
19
+ throw new Error('The attachment count exceeds the controller limit.');
20
+ }
21
+ if (this.activeUploadCount >= maximumActiveUploads) {
22
+ throw new Error('The controller has too many active uploads.');
23
+ }
24
+ const decoded = attachmentsArg.map((attachment, index) => {
25
+ if (attachment.name.length === 0
26
+ || attachment.name !== plugins.path.basename(attachment.name)
27
+ || Buffer.byteLength(attachment.name, 'utf8') > 255
28
+ // eslint-disable-next-line no-control-regex
29
+ || /[\x00-\x1f\x7f/\\]/.test(attachment.name)) {
30
+ throw new Error(`Attachment ${index + 1} has an unsafe file name.`);
31
+ }
32
+ if (attachment.mediaType.length === 0
33
+ || Buffer.byteLength(attachment.mediaType, 'utf8') > 129
34
+ // eslint-disable-next-line no-control-regex
35
+ || /[\x00-\x20\x7f]/.test(attachment.mediaType))
36
+ throw new Error(`Attachment ${index + 1} has an unsafe media type.`);
37
+ const data = Buffer.from(attachment.dataBase64, 'base64');
38
+ if (data.toString('base64') !== attachment.dataBase64) {
39
+ throw new Error(`Attachment ${index + 1} is not canonical base64.`);
40
+ }
41
+ if (data.byteLength !== attachment.size) {
42
+ throw new Error(`Attachment ${index + 1} size does not match its content.`);
43
+ }
44
+ if (data.byteLength > controllerMaxDraftAttachmentBytes) {
45
+ throw new Error(`Attachment ${index + 1} exceeds the controller byte limit.`);
46
+ }
47
+ return { attachment, data };
48
+ });
49
+ const bytes = decoded.reduce((sum, entry) => sum + entry.data.byteLength, 0);
50
+ if (bytes > controllerMaxDraftAttachmentTotalBytes) {
51
+ throw new Error('The attachments exceed the controller total byte limit.');
52
+ }
53
+ if (this.activeBytes + bytes > maximumActiveUploadBytes) {
54
+ throw new Error('The controller active upload byte limit is exhausted.');
55
+ }
56
+ this.activeUploadCount += 1;
57
+ this.activeBytes += bytes;
58
+ const createPromise = this.createReserved(decoded, bytes);
59
+ this.pendingCreates.add(createPromise);
60
+ void createPromise.finally(() => this.pendingCreates.delete(createPromise)).catch(() => undefined);
61
+ return createPromise;
62
+ }
63
+ async close() {
64
+ if (this.closePromise)
65
+ return this.closePromise;
66
+ this.closed = true;
67
+ const closePromise = this.closeInternal();
68
+ this.closePromise = closePromise;
69
+ try {
70
+ await closePromise;
71
+ }
72
+ catch (errorArg) {
73
+ if (this.closePromise === closePromise)
74
+ this.closePromise = undefined;
75
+ throw errorArg;
76
+ }
77
+ }
78
+ async createReserved(decodedArg, bytesArg) {
79
+ const id = plugins.crypto.randomBytes(16).toString('base64url');
80
+ let directory;
81
+ let admitted = false;
82
+ try {
83
+ const root = await this.ensureRoot();
84
+ directory = await plugins.fs.promises.mkdtemp(plugins.path.join(root, 'message-'));
85
+ await plugins.fs.promises.chmod(directory, 0o700);
86
+ const paths = [];
87
+ for (const [index, entry] of decodedArg.entries()) {
88
+ const filePath = plugins.path.join(directory, `${index + 1}-${entry.attachment.name}`);
89
+ const relative = plugins.path.relative(directory, filePath);
90
+ if (relative === '..'
91
+ || relative.startsWith(`..${plugins.path.sep}`)
92
+ || plugins.path.isAbsolute(relative))
93
+ throw new Error('An attachment path escaped its upload directory.');
94
+ const flags = plugins.fs.constants.O_WRONLY
95
+ | plugins.fs.constants.O_CREAT
96
+ | plugins.fs.constants.O_EXCL
97
+ | (plugins.fs.constants.O_NOFOLLOW ?? 0);
98
+ const file = await plugins.fs.promises.open(filePath, flags, 0o600);
99
+ try {
100
+ await file.writeFile(entry.data);
101
+ }
102
+ finally {
103
+ await file.close();
104
+ }
105
+ paths.push(filePath);
106
+ }
107
+ const promptSuffix = `\n\n[Attached files - stored on disk; read them with filesystem tools]\n${decodedArg
108
+ .map((entry, index) => `- ${paths[index]} (${entry.attachment.mediaType}, ${entry.data.byteLength} bytes)`)
109
+ .join('\n')}`;
110
+ if (Buffer.byteLength(promptSuffix, 'utf8') > controllerMaxAttachmentPromptSuffixBytes) {
111
+ throw new Error('The generated attachment prompt suffix exceeds its byte limit.');
112
+ }
113
+ const handle = {
114
+ id,
115
+ directory,
116
+ paths,
117
+ promptSuffix,
118
+ bytes: bytesArg,
119
+ cleanup: () => this.cleanup(id),
120
+ };
121
+ this.activeUploads.set(id, { handle });
122
+ admitted = true;
123
+ return handle;
124
+ }
125
+ finally {
126
+ if (!admitted) {
127
+ if (directory) {
128
+ await plugins.fs.promises.rm(directory, { recursive: true, force: true }).catch(() => undefined);
129
+ }
130
+ this.activeUploadCount -= 1;
131
+ this.activeBytes -= bytesArg;
132
+ }
133
+ }
134
+ }
135
+ async closeInternal() {
136
+ await Promise.allSettled([...this.pendingCreates]);
137
+ const results = await Promise.allSettled([...this.activeUploads.values()].map((entry) => entry.handle.cleanup()));
138
+ const errors = results
139
+ .filter((result) => result.status === 'rejected')
140
+ .map((result) => result.reason);
141
+ if (this.rootPromise) {
142
+ try {
143
+ const root = await this.rootPromise;
144
+ await plugins.fs.promises.rm(root, { recursive: true, force: true });
145
+ this.activeUploads.clear();
146
+ this.activeUploadCount = 0;
147
+ this.activeBytes = 0;
148
+ errors.length = 0;
149
+ }
150
+ catch (errorArg) {
151
+ errors.push(errorArg);
152
+ }
153
+ }
154
+ if (errors.length > 0)
155
+ throw new AggregateError(errors, 'Controller upload cleanup failed.');
156
+ }
157
+ async ensureRoot() {
158
+ if (!this.rootPromise) {
159
+ this.rootPromise = (async () => {
160
+ let root;
161
+ try {
162
+ root = await plugins.fs.promises.mkdtemp(plugins.path.join(plugins.os.tmpdir(), 'harness-controller-uploads-'));
163
+ await plugins.fs.promises.chmod(root, 0o700);
164
+ return await plugins.fs.promises.realpath(root);
165
+ }
166
+ catch (errorArg) {
167
+ if (root) {
168
+ await plugins.fs.promises.rm(root, { recursive: true, force: true })
169
+ .catch(() => undefined);
170
+ }
171
+ throw errorArg;
172
+ }
173
+ })();
174
+ }
175
+ const rootPromise = this.rootPromise;
176
+ try {
177
+ return await rootPromise;
178
+ }
179
+ catch (errorArg) {
180
+ if (this.rootPromise === rootPromise)
181
+ this.rootPromise = undefined;
182
+ throw errorArg;
183
+ }
184
+ }
185
+ async cleanup(idArg) {
186
+ const active = this.activeUploads.get(idArg);
187
+ if (!active)
188
+ return;
189
+ if (active.cleanupPromise)
190
+ return active.cleanupPromise;
191
+ const cleanupPromise = (async () => {
192
+ await plugins.fs.promises.rm(active.handle.directory, { recursive: true, force: true });
193
+ if (this.activeUploads.get(idArg) === active) {
194
+ this.activeUploads.delete(idArg);
195
+ this.activeUploadCount -= 1;
196
+ this.activeBytes -= active.handle.bytes;
197
+ }
198
+ })();
199
+ active.cleanupPromise = cleanupPromise;
200
+ try {
201
+ await cleanupPromise;
202
+ }
203
+ finally {
204
+ if (this.activeUploads.get(idArg) === active && active.cleanupPromise === cleanupPromise) {
205
+ active.cleanupPromise = undefined;
206
+ }
207
+ }
208
+ }
209
+ }
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy51cGxvYWRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy51cGxvYWRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx3Q0FBd0MsRUFDeEMsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsR0FFOUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBZ0JsRCxNQUFNLE9BQU8sdUJBQXVCO0lBQzFCLFdBQVcsQ0FBbUI7SUFDckIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQ2pELGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUN0RSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2YsWUFBWSxDQUFpQjtJQUU5QixNQUFNLENBQ1gsY0FBcUQ7UUFFckQsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM3RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsNkJBQTZCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZELElBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQzttQkFDekIsVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO21CQUMxRCxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRztnQkFDbkQsNENBQTRDO21CQUN6QyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUM3QyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFDRCxJQUNFLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7bUJBQzlCLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHO2dCQUN4RCw0Q0FBNEM7bUJBQ3pDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUN2RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsaUNBQWlDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssR0FBRyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDaEYsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksS0FBSyxHQUFHLHNDQUFzQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxHQUFHLHdCQUF3QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDdEUsTUFBTSxRQUFRLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUMxQixVQUdFLEVBQ0YsUUFBZ0I7UUFFaEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLElBQUksU0FBNkIsQ0FBQztRQUNsQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7WUFDM0IsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RCxJQUNFLFFBQVEsS0FBSyxJQUFJO3VCQUNkLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3VCQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztnQkFDdEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUTtzQkFDdkMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTztzQkFDNUIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTTtzQkFDM0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO3dCQUFTLENBQUM7b0JBQ1QsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsMkVBQTJFLFVBQVU7aUJBQ3ZHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxTQUFTLENBQUM7aUJBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsd0NBQXdDLEVBQUUsQ0FBQztnQkFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBNEI7Z0JBQ3RDLEVBQUU7Z0JBQ0YsU0FBUztnQkFDVCxLQUFLO2dCQUNMLFlBQVk7Z0JBQ1osS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2FBQ2hDLENBQUM7WUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25HLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQ3hFLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxPQUFPO2FBQ25CLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBbUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO2FBQ2pGLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzdCLElBQUksSUFBd0IsQ0FBQztnQkFDN0IsSUFBSSxDQUFDO29CQUNILElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSw2QkFBNkIsQ0FBQyxDQUN0RSxDQUFDO29CQUNGLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDN0MsT0FBTyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO29CQUNsQixJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOzZCQUNqRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzVCLENBQUM7b0JBQ0QsTUFBTSxRQUFRLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFdBQVcsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVztnQkFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztZQUNuRSxNQUFNLFFBQVEsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBYTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxNQUFNLENBQUMsY0FBYztZQUFFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUN4RCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNMLE1BQU0sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3ZDLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxDQUFDO1FBQ3ZCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQ3pGLE1BQU0sQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -0,0 +1,91 @@
1
+ import type * as interfaces from '../dist_ts_interfaces/index.js';
2
+ export declare const assertEmptyRequest: (valueArg: unknown) => Record<string, never>;
3
+ export declare const assertIdentifier: (valueArg: unknown, nameArg: string) => string;
4
+ export declare function assertControllerRuntimeId<THarnessId extends interfaces.TControllerHarnessId>(valueArg: unknown, nameArg: string, allowedHarnessIdsArg: readonly THarnessId[]): interfaces.IControllerRuntimeId & {
5
+ harnessId: THarnessId;
6
+ };
7
+ export declare function assertControllerRuntimeId(valueArg: unknown, nameArg: string, allowedHarnessIdsArg?: readonly interfaces.TControllerHarnessId[]): interfaces.IControllerRuntimeId;
8
+ export declare const assertSetupBeginRequest: (valueArg: unknown) => interfaces.IReq_ControllerSetupBegin["request"];
9
+ export declare const assertSetupFinishRequest: (valueArg: unknown) => interfaces.IReq_ControllerSetupFinish["request"];
10
+ export declare const assertAuthenticationFinishRequest: (valueArg: unknown) => interfaces.IReq_ControllerAuthenticationFinish["request"];
11
+ export declare const assertProjectListRequest: (valueArg: unknown) => Record<string, never>;
12
+ export declare const assertProjectRelativePath: (valueArg: unknown, nameArg: string) => string;
13
+ export declare const assertProjectCreateRequest: (valueArg: unknown) => interfaces.IReq_ControllerProjectCreate["request"];
14
+ export declare const assertAbsoluteProjectPath: (valueArg: unknown, nameArg: string) => string;
15
+ /**
16
+ * Accepts what a human types and returns the absolute directory to register:
17
+ * an absolute path is taken as-is (any location on disk), a relative path is
18
+ * resolved against the projects root.
19
+ */
20
+ export declare const resolveProjectPathInput: (pathArg: string, projectsRootArg: string) => string;
21
+ export interface IProjectSuggestParse {
22
+ /**
23
+ * Directory whose entries are being completed: absolute when the query was
24
+ * absolute, else relative to the projects root ('' meaning the root).
25
+ */
26
+ directoryPath: string;
27
+ prefix: string;
28
+ unmatchable: boolean;
29
+ /** The query was an absolute path; suggestions should be returned absolute. */
30
+ absolute: boolean;
31
+ }
32
+ export declare const assertProjectSuggestRequest: (valueArg: unknown) => IProjectSuggestParse;
33
+ export declare const assertProjectRemoveRequest: (valueArg: unknown) => interfaces.IReq_ControllerProjectRemove["request"];
34
+ export declare const assertProviderListRequest: (valueArg: unknown) => Record<string, never>;
35
+ export declare const assertProviderConnectionListRequest: (valueArg: unknown) => Record<string, never>;
36
+ export declare const assertProviderLoginBeginRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderLoginBegin["request"];
37
+ export declare const assertProviderLoginGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderLoginGet["request"];
38
+ export declare const assertProviderLoginCancelRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderLoginCancel["request"];
39
+ export declare const assertProviderConnectionLogoutRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderConnectionLogout["request"];
40
+ export declare const assertProviderConnectionRateLimitsGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderConnectionRateLimitsGet["request"];
41
+ export declare const assertProviderConnectionActivateOpenCodeRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderConnectionActivateOpenCode["request"];
42
+ export declare const assertProviderModelRefreshBeginRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderModelRefreshBegin["request"];
43
+ export declare const assertProviderModelRefreshGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerProviderModelRefreshGet["request"];
44
+ export declare const assertSettingsUpdateRequest: (valueArg: unknown) => interfaces.IReq_ControllerSettingsUpdate["request"];
45
+ export declare const assertSessionListRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionList["request"];
46
+ export declare const assertSlashListRequest: (valueArg: unknown) => interfaces.IReq_ControllerSlashList["request"];
47
+ export declare const assertSessionGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionGet["request"];
48
+ export declare const assertSessionAuxiliaryGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionAuxiliaryGet["request"];
49
+ export declare const assertSessionModelUpdateRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionModelUpdate["request"];
50
+ export declare const assertSessionScratchpadSaveRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionScratchpadSave["request"];
51
+ export declare const assertSessionIntelligenceAskRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionIntelligenceAsk["request"];
52
+ export declare const assertSessionMessagesPageRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionMessagesPage["request"];
53
+ export declare const assertSessionMessageGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionMessageGet["request"];
54
+ export declare const assertSessionCreateRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionCreate["request"];
55
+ export declare const assertTempPasswordLoginRequest: (valueArg: unknown) => interfaces.IReq_ControllerTempPasswordLogin["request"];
56
+ export declare const assertAuthResumeRequest: (valueArg: unknown) => interfaces.IReq_ControllerAuthResume["request"];
57
+ export declare const assertVariantName: (valueArg: unknown) => string;
58
+ export declare function assertModelChoice(valueArg: unknown, nameArg?: string): interfaces.TControllerModelChoice;
59
+ export declare const assertSessionDraftUpdateRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionDraftUpdate["request"];
60
+ export declare const assertSessionSendRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionSend["request"];
61
+ export declare const assertSlashExecuteRequest: (valueArg: unknown) => interfaces.IReq_ControllerSlashExecute["request"];
62
+ export declare const assertPermissionReplyRequest: (valueArg: unknown) => interfaces.IReq_ControllerPermissionReply["request"];
63
+ export declare const assertSessionGroupsGetRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionGroupsGet["request"];
64
+ export declare const assertSessionGroupsUpdateRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionGroupsUpdate["request"];
65
+ export declare const assertSessionYoloRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionYolo["request"];
66
+ export declare const assertControllerSessionTitle: (valueArg: unknown) => string;
67
+ export declare const assertSessionRenameRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionRename["request"];
68
+ export declare const assertSessionArchiveRequest: (valueArg: unknown) => interfaces.IReq_ControllerSessionArchive["request"];
69
+ export declare const assertTerminalListRequest: (valueArg: unknown) => interfaces.IReq_ControllerTerminalList["request"];
70
+ export declare const assertResourceListRequest: (valueArg: unknown) => interfaces.IReq_ControllerResourceList["request"];
71
+ export declare const assertResourceCreateRequest: (valueArg: unknown) => interfaces.IReq_ControllerResourceCreate["request"];
72
+ export declare const assertResourceRenameRequest: (valueArg: unknown) => interfaces.IReq_ControllerResourceRename["request"];
73
+ export declare const assertResourceAttachRequest: (valueArg: unknown) => interfaces.IReq_ControllerResourceAttach["request"];
74
+ export declare const assertResourceDetachRequest: (valueArg: unknown) => interfaces.IReq_ControllerResourceDetach["request"];
75
+ export declare const assertResourceTargetRequest: (valueArg: unknown, nameArg: string) => {
76
+ projectId: string;
77
+ resourceId: string;
78
+ };
79
+ export declare const assertBrowserViewOpenRequest: (valueArg: unknown) => interfaces.IReq_ControllerBrowserViewOpen["request"];
80
+ export declare const assertBrowserViewCloseRequest: (valueArg: unknown) => interfaces.IReq_ControllerBrowserViewClose["request"];
81
+ export declare const assertBrowserViewActivateRequest: (valueArg: unknown) => interfaces.IReq_ControllerBrowserViewActivate["request"];
82
+ export declare const assertBrowserViewOperateRequest: (valueArg: unknown) => interfaces.IReq_ControllerBrowserViewOperate["request"];
83
+ export declare const assertTerminalCreateRequest: (valueArg: unknown) => interfaces.IReq_ControllerTerminalCreate["request"];
84
+ export declare const assertTerminalRenameRequest: (valueArg: unknown) => interfaces.IReq_ControllerTerminalRename["request"];
85
+ export declare const assertTerminalTargetRequest: (valueArg: unknown, nameArg: string) => {
86
+ projectId: string;
87
+ terminalId: interfaces.TControllerTerminalId;
88
+ };
89
+ export declare const assertTerminalInputRequest: (valueArg: unknown) => interfaces.IReq_ControllerTerminalInput["request"];
90
+ export declare const assertTerminalResizeRequest: (valueArg: unknown) => interfaces.IReq_ControllerTerminalResize["request"];
91
+ export declare const assertQuestionReplyRequest: (valueArg: unknown) => interfaces.IReq_ControllerQuestionReply["request"];