@inhuman.tools/plexus-expectations 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +144 -2
  3. package/dist/driver/ExpectationActor.d.ts +56 -0
  4. package/dist/driver/ExpectationActor.d.ts.map +1 -0
  5. package/dist/driver/ExpectationActor.js +210 -0
  6. package/dist/driver/ExpectationActor.js.map +1 -0
  7. package/dist/driver/PEWDriver.d.ts +144 -0
  8. package/dist/driver/PEWDriver.d.ts.map +1 -0
  9. package/dist/driver/PEWDriver.js +303 -0
  10. package/dist/driver/PEWDriver.js.map +1 -0
  11. package/dist/driver/actor-machine.d.ts +28 -0
  12. package/dist/driver/actor-machine.d.ts.map +1 -0
  13. package/dist/driver/actor-machine.js +50 -0
  14. package/dist/driver/actor-machine.js.map +1 -0
  15. package/dist/driver/connection-miss.d.ts +9 -0
  16. package/dist/driver/connection-miss.d.ts.map +1 -0
  17. package/dist/driver/connection-miss.js +13 -0
  18. package/dist/driver/connection-miss.js.map +1 -0
  19. package/dist/driver/index.d.ts +6 -0
  20. package/dist/driver/index.d.ts.map +1 -0
  21. package/dist/driver/index.js +5 -0
  22. package/dist/driver/index.js.map +1 -0
  23. package/dist/executor/index.d.ts +4 -0
  24. package/dist/executor/index.d.ts.map +1 -0
  25. package/dist/executor/index.js +4 -0
  26. package/dist/executor/index.js.map +1 -0
  27. package/dist/executor/kernel-intern.d.ts +16 -0
  28. package/dist/executor/kernel-intern.d.ts.map +1 -0
  29. package/dist/executor/kernel-intern.js +98 -0
  30. package/dist/executor/kernel-intern.js.map +1 -0
  31. package/dist/executor/orchestrator.d.ts +97 -0
  32. package/dist/executor/orchestrator.d.ts.map +1 -0
  33. package/dist/executor/orchestrator.js +465 -0
  34. package/dist/executor/orchestrator.js.map +1 -0
  35. package/dist/executor/types.d.ts +8 -0
  36. package/dist/executor/types.d.ts.map +1 -0
  37. package/dist/executor/types.js +2 -0
  38. package/dist/executor/types.js.map +1 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +2 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/schemas/connection.d.ts +4 -0
  44. package/dist/schemas/connection.d.ts.map +1 -0
  45. package/dist/schemas/connection.js +4 -0
  46. package/dist/schemas/connection.js.map +1 -0
  47. package/dist/schemas/index.d.ts +2 -0
  48. package/dist/schemas/index.d.ts.map +1 -0
  49. package/dist/schemas/index.js +2 -0
  50. package/dist/schemas/index.js.map +1 -0
  51. package/dist/shared/control.d.ts +4 -0
  52. package/dist/shared/control.d.ts.map +1 -0
  53. package/dist/shared/control.js +2 -0
  54. package/dist/shared/control.js.map +1 -0
  55. package/dist/shared/index.d.ts +7 -0
  56. package/dist/shared/index.d.ts.map +1 -0
  57. package/dist/shared/index.js +7 -0
  58. package/dist/shared/index.js.map +1 -0
  59. package/dist/shared/map-field-awareness.d.ts +19 -0
  60. package/dist/shared/map-field-awareness.d.ts.map +1 -0
  61. package/dist/shared/map-field-awareness.js +58 -0
  62. package/dist/shared/map-field-awareness.js.map +1 -0
  63. package/dist/shared/models/ConnectionSpec.d.ts +44 -0
  64. package/dist/shared/models/ConnectionSpec.d.ts.map +1 -0
  65. package/dist/shared/models/ConnectionSpec.js +180 -0
  66. package/dist/shared/models/ConnectionSpec.js.map +1 -0
  67. package/dist/shared/models/DriverSpec.d.ts +45 -0
  68. package/dist/shared/models/DriverSpec.d.ts.map +1 -0
  69. package/dist/shared/models/DriverSpec.js +221 -0
  70. package/dist/shared/models/DriverSpec.js.map +1 -0
  71. package/dist/shared/models/Job.d.ts +85 -0
  72. package/dist/shared/models/Job.d.ts.map +1 -0
  73. package/dist/shared/models/Job.js +261 -0
  74. package/dist/shared/models/Job.js.map +1 -0
  75. package/dist/shared/models/WorkContainer.d.ts +36 -0
  76. package/dist/shared/models/WorkContainer.d.ts.map +1 -0
  77. package/dist/shared/models/WorkContainer.js +140 -0
  78. package/dist/shared/models/WorkContainer.js.map +1 -0
  79. package/dist/shared/models/WorkExpectation.d.ts +63 -0
  80. package/dist/shared/models/WorkExpectation.d.ts.map +1 -0
  81. package/dist/shared/models/WorkExpectation.js +290 -0
  82. package/dist/shared/models/WorkExpectation.js.map +1 -0
  83. package/dist/shared/models/index.d.ts +7 -0
  84. package/dist/shared/models/index.d.ts.map +1 -0
  85. package/dist/shared/models/index.js +6 -0
  86. package/dist/shared/models/index.js.map +1 -0
  87. package/dist/shared/models/jsonRecord.d.ts +14 -0
  88. package/dist/shared/models/jsonRecord.d.ts.map +1 -0
  89. package/dist/shared/models/jsonRecord.js +46 -0
  90. package/dist/shared/models/jsonRecord.js.map +1 -0
  91. package/dist/shared/revalidation-demand.d.ts +27 -0
  92. package/dist/shared/revalidation-demand.d.ts.map +1 -0
  93. package/dist/shared/revalidation-demand.js +116 -0
  94. package/dist/shared/revalidation-demand.js.map +1 -0
  95. package/dist/shared/role.d.ts +12 -0
  96. package/dist/shared/role.d.ts.map +1 -0
  97. package/dist/shared/role.js +21 -0
  98. package/dist/shared/role.js.map +1 -0
  99. package/dist/shared/types.d.ts +43 -0
  100. package/dist/shared/types.d.ts.map +1 -0
  101. package/dist/shared/types.js +12 -0
  102. package/dist/shared/types.js.map +1 -0
  103. package/package.json +79 -3
  104. package/src/driver/ExpectationActor.ts +244 -0
  105. package/src/driver/PEWDriver.ts +302 -0
  106. package/src/driver/actor-machine.ts +54 -0
  107. package/src/driver/connection-miss.ts +13 -0
  108. package/src/driver/index.ts +5 -0
  109. package/src/executor/index.ts +3 -0
  110. package/src/executor/kernel-intern.ts +121 -0
  111. package/src/executor/orchestrator.ts +463 -0
  112. package/src/executor/types.ts +3 -0
  113. package/src/index.ts +1 -0
  114. package/src/schemas/connection.ts +4 -0
  115. package/src/schemas/index.ts +1 -0
  116. package/src/shared/control.ts +4 -0
  117. package/src/shared/index.ts +6 -0
  118. package/src/shared/map-field-awareness.ts +65 -0
  119. package/src/shared/models/ConnectionSpec.ts +84 -0
  120. package/src/shared/models/DriverSpec.ts +102 -0
  121. package/src/shared/models/Job.ts +192 -0
  122. package/src/shared/models/WorkContainer.ts +90 -0
  123. package/src/shared/models/WorkExpectation.ts +229 -0
  124. package/src/shared/models/index.ts +6 -0
  125. package/src/shared/models/jsonRecord.ts +49 -0
  126. package/src/shared/revalidation-demand.ts +121 -0
  127. package/src/shared/role.ts +32 -0
  128. package/src/shared/types.ts +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/executor/orchestrator.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultedMap } from \"@here.build/collections\";\nimport { action, autorun, comparer, computed, observable, type IReactionDisposer, reaction, toJS } from \"mobx\";\nimport invariant from \"tiny-invariant\";\n\nimport {\n acquireConnection,\n releaseConnection,\n} from \"./kernel-intern.js\";\nimport { ExpectationActor } from \"../driver/ExpectationActor.js\";\nimport {\n type ConnectionSecretsView,\n type DriverConnectionClass,\n extraLiveFromState,\n isDriverConnectionClass,\n type PEWDriver,\n} from \"../driver/PEWDriver.js\";\nimport { DriverSpec } from \"../shared/models/DriverSpec.js\";\nimport { Job } from \"../shared/models/Job.js\";\nimport { WorkContainer, walkWork } from \"../shared/models/WorkContainer.js\";\nimport { type AnyWorkExpectation, WorkExpectation, isTreeOrphan } from \"../shared/models/WorkExpectation.js\";\nimport { type KernelPlexus, type SessionPlexus } from \"../shared/types.js\";\n\n/** Class identity for `instanceof`. `registerExecutor` never constructs. */\nexport type JobConstructor<T extends Job = Job> = abstract new (...args: any[]) => T;\n\n/**\n * Seam: session work graph → honor (PEW) and claim (Job).\n *\n * Honor is reachable PEW → handle. Unstarted cancel writes the durable\n * ending here and must not poke `ensure` — MCP: an unstarted tool must not\n * spin the server. Do not call `Actor.complete` — unstarted Work has no\n * Actor. `handle` is not the sealer. License is phase 1 on an Approvable\n * leaf. A sealed parent is not honored (the\n * child is already ending in the agentic runtime, or must not start).\n *\n * INTERN TABLE IS NOT AN ATOM. `#connections` is a plain Map of kernel-interned\n * instances (one live driver per kernel connection id). Honor re-enters by\n * reading catalog `spec.readyState` and, once minted, `instance.readyState`.\n * `handle` only when `ready`.\n *\n * A rejected ensure/load memo IS the sticky failure (no hot loop).\n *\n * Honor and Job claim do not start in the constructor. PEW autorun used to\n * run during `super()`, so a readiness Promise after construct was not a\n * gate. Call {@link activate} after replicas are pinned and recovery ran.\n *\n * Import discipline: this module does not import harness or the session document.\n */\nexport abstract class Orchestrator<\n K extends KernelPlexus = KernelPlexus,\n S extends SessionPlexus = SessionPlexus,\n> implements Disposable {\n #disposed = false;\n #admissionStopped = false;\n readonly #activated = observable.box(false);\n readonly #disposeWork: () => void;\n /** Disposed with the orchestrator — a dead session must not keep writing the live kernel catalog. */\n readonly #mirrorDisposers: IReactionDisposer[] = [];\n readonly #processes = new Map<JobConstructor, () => void>();\n /** Execute (phase 2) — started BODY. */\n readonly #jobAbort = new Map<Job, AbortController>();\n /** In-flight license (phase 1). */\n readonly #guardAbort = new Map<Job, AbortController>();\n /**\n * Process-local: execute already claimed this job. Survives seal:false\n * so the starter does not re-run BODY. A new Orchestrator is empty —\n * bootstrap `orchestrated && !completed` runs execute once more.\n */\n readonly #bodyStarted = new WeakSet<Job>();\n /**\n * Origin-dispatched PEW skip. Lives here, not on the session subclass:\n * honor used to run during `super()`, and subclass fields are unassigned\n * then (JS). A child WeakSet made `shouldHonor` throw `undefined.has`.\n */\n protected readonly originCompletions = new WeakSet<WorkExpectation>();\n readonly #disposeAborts: () => void;\n\n constructor(\n public readonly kernel: K,\n public readonly session: S,\n ) {\n this.#mirrorDisposers.push(\n autorun(() => {\n if (this.#disposed || !this.#activated.get()) return;\n for (const name of Object.keys(this.drivers)) {\n // Driver discovery is intentionally eager so the kernel catalog can\n // expose class-side offers and live facts before a connection is\n // ensured. A session may not be able to load every driver in a\n // shared kernel, so consume a rejected discovery promise here; the\n // driver spec already carries the failure for interested readers.\n void this.#classes.get(name).catch(() => {});\n }\n }),\n );\n this.#disposeWork = autorun(() => {\n if (this.#disposed || !this.#activated.get()) return;\n for (const node of collectReachable(this.session.root)) {\n if (node.isDone || isTreeOrphan(node)) continue;\n if (!this.shouldHonor(node)) continue;\n const spec = this.connections[node.connectionId];\n if (spec === undefined) continue;\n void spec.readyState;\n const instance = this.#connections.get(node.connectionId);\n if (instance !== undefined) {\n if (instance.readyState === \"ready\") instance.handle(node);\n continue;\n }\n invariant(Object.hasOwn(this.connections, node.connectionId), `unknown connection ${node.connectionId}`);\n void this.ensure(node.connectionId);\n }\n });\n this.#disposeAborts = autorun(() => {\n if (this.#disposed || !this.#activated.get()) return;\n const live = new Set(this.reachableJobs);\n for (const [job, ac] of this.#jobAbort) {\n if (live.has(job) || ac.signal.aborted) continue;\n ac.abort();\n }\n for (const [job, ac] of this.#guardAbort) {\n if (live.has(job) || ac.signal.aborted) continue;\n ac.abort();\n }\n });\n }\n\n @computed\n protected get reachableJobs(): Job[] {\n const root = this.session.root;\n const jobs = new Set<Job>();\n if (root instanceof Job) jobs.add(root);\n if (root instanceof WorkContainer) {\n for (const job of Iterator.from(walkWork(root)).filter((node): node is Job => node instanceof Job)) {\n jobs.add(job);\n }\n }\n return [...jobs];\n }\n\n /**\n * Two functions. License (phase 1) returns `true` | `false` and writes\n * `orchestrationResult` (`orchestrated` follows). `true` → await execute\n * (phase 2). `false` → skip execute, `completed = true`. Bootstrap\n * `orchestrated && !completed` skips the license and runs execute.\n * `signal` aborts when the job leaves the graph or the orchestrator disposes.\n */\n registerExecutor<T extends Job>(\n Class: JobConstructor<T>,\n license: (job: T, orchestrator: this) => boolean | Promise<boolean>,\n execute: (job: T, signal: AbortSignal, orchestrator: this) => void | Promise<void>,\n options?: { readonly seal?: boolean },\n ): void {\n invariant(!this.#processes.has(Class), `Orchestrator: executor already registered for ${Class.name}`);\n const seal = options?.seal !== false;\n this.#processes.set(\n Class,\n autorun(() => {\n if (this.#disposed || !this.#activated.get()) return;\n for (const node of this.reachableJobs) {\n if (!(node instanceof Class)) continue;\n const job = node as T;\n if (job.completed || job.cancelled) continue;\n if (job.orchestrationResult === false) {\n job.markComplete();\n continue;\n }\n if (job.orchestrationResult === true) {\n this.#startExecute(job, execute, seal);\n continue;\n }\n if (this.#guardAbort.has(job) || this.#jobAbort.has(job)) continue;\n // Ordering is data on the job: wait here until every predecessor is released.\n if (!job.afterReleased) continue;\n this.#startGuard(job, license, execute, seal);\n }\n }),\n );\n }\n\n #startGuard<T extends Job>(\n job: T,\n license: (job: T, orchestrator: this) => boolean | Promise<boolean>,\n execute: (job: T, signal: AbortSignal, orchestrator: this) => void | Promise<void>,\n seal: boolean,\n ): void {\n const settle = action((ok: boolean) => {\n if (job.orchestrationResult !== null || job.completed || job.cancelled) return;\n job.orchestrationResult = ok;\n if (ok) {this.#startExecute(job, execute, seal);}\n else {job.markComplete();}\n });\n // A guard that threw never licensed the job: deny it with a crash receipt.\n const crashed = action((error: unknown) => {\n if (job.orchestrationResult !== null || job.completed || job.cancelled) return;\n this.#recordCrash(job, \"license\", error);\n job.orchestrationResult = false;\n job.markComplete();\n });\n try {\n const result = license(job, this);\n if (typeof result === \"boolean\") {\n settle(result);\n return;\n }\n const ac = new AbortController();\n this.#guardAbort.set(job, ac);\n void result.then(\n (ok) => {\n if (ac.signal.aborted) return;\n settle(ok);\n return ok;\n },\n (error: unknown) => {\n if (ac.signal.aborted) return;\n crashed(error);\n },\n ).finally(\n action(() => {\n this.#guardAbort.delete(job);\n }),\n );\n } catch (error) {\n crashed(error);\n }\n }\n\n #startExecute<T extends Job>(\n job: T,\n execute: (job: T, signal: AbortSignal, orchestrator: this) => void | Promise<void>,\n seal: boolean,\n ): void {\n if (this.#bodyStarted.has(job) || job.completed || job.cancelled) return;\n if (job.orchestrationResult !== true) return;\n this.#bodyStarted.add(job);\n action(() => {\n job.markStarted();\n })();\n const ac = new AbortController();\n this.#jobAbort.set(job, ac);\n void Promise.resolve()\n .then(() => execute(job, ac.signal, this))\n .then(\n () => false,\n (error: unknown) => {\n // An abort (cancel, park, leaving the graph) is not a crash: the aborter owns the ending.\n if (ac.signal.aborted || job.completed || job.cancelled) return false;\n action(() => this.#recordCrash(job, \"body\", error))();\n return true;\n },\n )\n .then(\n action((crashed: boolean) => {\n if (seal || crashed) job.markComplete();\n this.#jobAbort.delete(job);\n }),\n )\n .catch(() => {});\n }\n\n #recordCrash(job: Job, phase: \"license\" | \"body\", error: unknown): void {\n const detail = error instanceof Error ? error.message : String(error);\n job.crash = `${phase}: ${detail === \"\" ? \"unknown error\" : detail}`;\n try {\n this.stampCrash(job, phase, detail);\n } catch {\n /* the crash fact is already on the job; the receipt is best effort */\n }\n }\n\n /**\n * Host hook: a guard or body threw. `job.crash` is set; write the receipt\n * the job's joiners read (a tool outcome, a call failure). The orchestrator\n * completes the job right after.\n */\n protected stampCrash(_job: Job, _phase: \"license\" | \"body\", _detail: string): void {}\n\n /** In-flight claimed Jobs (handler has not `finally`'d). */\n protected inFlightJobs(): Iterable<Job> {\n return this.#jobAbort.keys();\n }\n\n /** Abort an in-flight executor. No-op if the job is not claimed here. */\n abortJob(job: Job, reason?: unknown): void {\n this.#jobAbort.get(job)?.abort(reason);\n }\n\n readonly #connections = new Map<string, PEWDriver>();\n readonly #classes = new DefaultedMap<string, Promise<DriverConnectionClass>>(this.#loadDriverClass.bind(this));\n readonly #ensured = new DefaultedMap<string, Promise<PEWDriver>>(this.#ensureConnection.bind(this));\n\n abstract loadDriverModule(driver: DriverSpec): Promise<DriverConnectionClass>;\n\n /**\n * Honor still `handle`s leftover attach PEW. Origin-dispatched completions\n * return false (PR4). Default true unless the node is in {@link originCompletions}.\n */\n protected shouldHonor(node: WorkExpectation): boolean {\n return !this.originCompletions.has(node);\n }\n\n /** Process-local. Secrets are never a Plexus field. */\n protected connectionSecrets(_connectionId: string): ConnectionSecretsView {\n return { get: () => undefined };\n }\n\n /** After bootstrap, before ensure settles. The session host binds the settings writer here. */\n protected attachConnection(_connectionId: string, _instance: PEWDriver): void {}\n\n connectionOf(expectation: WorkExpectation): PEWDriver | undefined {\n return this.#connections.get(expectation.connectionId);\n }\n\n actorOf<T extends AnyWorkExpectation>(expectation: T): ExpectationActor<T> | undefined {\n const connection = this.connectionOf(expectation);\n if (!connection?.has(expectation)) return undefined;\n return connection.resolveExpectation(expectation);\n }\n\n #loadDriverClass(driverName: string): Promise<DriverConnectionClass> {\n return (async () => {\n // JS: subclass fields (SessionOrchestrator.sessionDaemon) are unassigned during super().\n await Promise.resolve();\n const driver = this.drivers[driverName];\n invariant(driver !== undefined, `unknown driver ${driverName}`);\n try {\n const cls = await this.loadDriverModule(driver);\n invariant(isDriverConnectionClass(cls), \"loadDriverModule: result is not a PEWDriver class\");\n // Occupancy is kernel-plane: interned connections outlive a session wrap.\n cls.awareness = this.kernel.awareness;\n cls.driverName = driverName;\n const spec = this.drivers[driverName];\n if (spec !== undefined) {\n spec.stampLoad({\n readyState: \"ready\",\n error: \"\",\n offersJson: JSON.stringify(cls.offers),\n live: extraLiveFromState(cls.state),\n });\n // Offers are class state a driver may keep fresh (local detection). The\n // reaction also holds the observation that wakes a lazy `cls.offers`.\n this.#mirrorDisposers.push(\n reaction(\n () => toJS(cls.offers),\n (offers) => {\n if (!this.#disposed) spec.offers = offers;\n },\n { equals: comparer.structural },\n ),\n );\n }\n return cls;\n } catch (error) {\n const spec = this.drivers[driverName];\n if (spec !== undefined) spec.stampLoad({ readyState: \"failed\", error: String(error) });\n throw error;\n }\n })();\n }\n\n #ensureConnection(connectionId: string): Promise<PEWDriver> {\n const pending = (async () => {\n const driver = this.kernel.root.connections[connectionId]?.driver;\n invariant(driver !== undefined, `unknown driver for connection ${connectionId}`);\n const instance = await acquireConnection(this.kernel.root, this, connectionId, async () => {\n const cls = await this.#classes.get(driver.name);\n const minted = new cls(\n connectionId,\n // YAML: settings stamped onto the connection before ensure.\n this.kernel.root.connections[connectionId]?.configuration ?? {},\n this.connectionSecrets(connectionId),\n );\n action(() => {\n minted.awareness = this.kernel.awareness; // kernel occupancy, not session\n })();\n return minted;\n });\n action(() => {\n instance.awareness = this.kernel.awareness;\n })();\n this.#connections.set(connectionId, instance);\n await instance.ensureBootstrapStarted();\n this.attachConnection(connectionId, instance);\n return instance;\n })();\n void pending.then(undefined, () => {});\n return pending;\n }\n\n ensure(connectionId: string): Promise<PEWDriver> {\n return this.#ensured.get(connectionId);\n }\n\n /** True once the connection memo has been poked — without poking it. */\n protected isEnsured(connectionId: string): boolean {\n return this.#ensured.has(connectionId);\n }\n\n /** Intern-owner remint. Deletes the sticky `#ensured` memo. */\n forgetConnection(id: string): void {\n this.#ensured.delete(id);\n this.#connections.delete(id);\n releaseConnection(this.kernel.root, this, id);\n }\n\n /** True after {@link activate}; constructor and registerExecutor do not honor. */\n get activated(): boolean {\n return this.#activated.get();\n }\n\n /**\n * Start honor, Job claim, and driver discovery. Idempotent. No-op after\n * park/dispose — those already stopped admission.\n */\n activate(): void {\n if (this.#disposed || this.#admissionStopped) return;\n action(() => {\n this.#activated.set(true);\n })();\n }\n\n /**\n * Stop honor and new claim. In-flight BODY and live connections stay —\n * park waits dispatched MCP before {@link Symbol.dispose} releases them.\n */\n protected stopAdmission(): void {\n if (this.#admissionStopped) return;\n this.#admissionStopped = true;\n this.#disposeWork();\n for (const dispose of this.#processes.values()) dispose();\n this.#processes.clear();\n for (const ac of this.#guardAbort.values()) ac.abort(\"park\");\n }\n\n [Symbol.dispose](): void {\n if (this.#disposed) return;\n this.#disposed = true;\n this.stopAdmission();\n for (const ac of this.#jobAbort.values()) ac.abort();\n for (const ac of this.#guardAbort.values()) ac.abort();\n this.#disposeAborts();\n this.#jobAbort.clear();\n this.#guardAbort.clear();\n for (const id of this.#connections.keys()) releaseConnection(this.kernel.root, this, id);\n this.#connections.clear();\n for (const dispose of this.#mirrorDisposers.splice(0)) dispose();\n }\n\n get drivers() {\n return this.kernel.root.drivers;\n }\n\n get connections() {\n return this.kernel.root.connections;\n }\n}\n\nfunction collectReachable(root: unknown): Set<WorkExpectation> {\n if (!(root instanceof WorkContainer)) return new Set();\n const found = new Set<WorkExpectation>();\n for (const node of walkWork(root)) {\n if (node instanceof WorkExpectation) found.add(node);\n }\n return found;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export type Settlement<TResult> = {
2
+ readonly outcome: "complete";
3
+ readonly result: TResult;
4
+ } | {
5
+ readonly outcome: "fail";
6
+ readonly reason: unknown;
7
+ };
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executor/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,OAAO,IAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/executor/types.ts"],"names":[],"mappings":"","sourcesContent":["export type Settlement<TResult> =\n | { readonly outcome: \"complete\"; readonly result: TResult }\n | { readonly outcome: \"fail\"; readonly reason: unknown };\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./shared/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./shared/index.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./shared/index.js\";\n"]}
@@ -0,0 +1,4 @@
1
+ import { z } from "zod";
2
+ export declare const pewConfigurationSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3
+ export declare const pewSecretsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
4
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/schemas/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB,wCAAoC,CAAC;AACxE,eAAO,MAAM,gBAAgB,wCAAoC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { z } from "zod";
2
+ export const pewConfigurationSchema = z.record(z.string(), z.unknown());
3
+ export const pewSecretsSchema = z.record(z.string(), z.unknown());
4
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/schemas/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nexport const pewConfigurationSchema = z.record(z.string(), z.unknown());\nexport const pewSecretsSchema = z.record(z.string(), z.unknown());\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./connection.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./connection.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./connection.js\";\n"]}
@@ -0,0 +1,4 @@
1
+ /** `null` on the entity means not done. Cancel is `failed`, not a fourth state. */
2
+ export type ExpectationOutcome = "successful" | "failed";
3
+ export type EndCause = "settled" | "cancel" | "crash";
4
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/shared/control.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/shared/control.ts"],"names":[],"mappings":"","sourcesContent":["/** `null` on the entity means not done. Cancel is `failed`, not a fourth state. */\nexport type ExpectationOutcome = \"successful\" | \"failed\";\n\nexport type EndCause = \"settled\" | \"cancel\" | \"crash\";\n"]}
@@ -0,0 +1,7 @@
1
+ export * from "./models/index.js";
2
+ export * from "./revalidation-demand.js";
3
+ export * from "./control.js";
4
+ export * from "./map-field-awareness.js";
5
+ export * from "./role.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./models/index.js";
2
+ export * from "./revalidation-demand.js";
3
+ export * from "./control.js";
4
+ export * from "./map-field-awareness.js";
5
+ export * from "./role.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./models/index.js\";\nexport * from \"./revalidation-demand.js\";\nexport * from \"./control.js\";\nexport * from \"./map-field-awareness.js\";\nexport * from \"./role.js\";\nexport * from \"./types.js\";\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * One awareness field as a string-keyed map.
3
+ *
4
+ * Each client owns its map. A write patches the local map. A read is the
5
+ * first present entry across bases, local then others, so a peer's key is
6
+ * visible here. `undefined` means the key is absent; `""` and `null` are
7
+ * stored values.
8
+ *
9
+ * Callers read and write through this lens. A process-local map misses
10
+ * every peer entry.
11
+ */
12
+ import { FieldAwareness, type AwarenessShape, type PlexusAwareness, type ShapeOfAwareness } from "@here.build/plexus";
13
+ export declare class MapFieldAwareness<A extends PlexusAwareness<AwarenessShape> = PlexusAwareness, K extends string & keyof ShapeOfAwareness<A> = string & keyof ShapeOfAwareness<A>> extends FieldAwareness<A, K> {
14
+ #private;
15
+ mapGet(key: string): unknown;
16
+ mapSet(key: string, value: unknown): void;
17
+ mapDelete(key: string): void;
18
+ }
19
+ //# sourceMappingURL=map-field-awareness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-field-awareness.d.ts","sourceRoot":"","sources":["../../src/shared/map-field-awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,iBAAiB,CAC5B,CAAC,SAAS,eAAe,CAAC,cAAc,CAAC,GAAG,eAAe,EAC3D,CAAC,SAAS,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC,CACjF,SAAQ,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;;IAC5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU5B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAmB7B"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * One awareness field as a string-keyed map.
3
+ *
4
+ * Each client owns its map. A write patches the local map. A read is the
5
+ * first present entry across bases, local then others, so a peer's key is
6
+ * visible here. `undefined` means the key is absent; `""` and `null` are
7
+ * stored values.
8
+ *
9
+ * Callers read and write through this lens. A process-local map misses
10
+ * every peer entry.
11
+ */
12
+ import { FieldAwareness, } from "@here.build/plexus";
13
+ export class MapFieldAwareness extends FieldAwareness {
14
+ mapGet(key) {
15
+ const own = readAt(this.get(), key);
16
+ if (own !== undefined)
17
+ return own;
18
+ for (const id of this.clientIds) {
19
+ const value = readAt(this.getOther(id), key);
20
+ if (value !== undefined)
21
+ return value;
22
+ }
23
+ return undefined;
24
+ }
25
+ mapSet(key, value) {
26
+ this.#write({ ...this.#record(), [key]: value });
27
+ }
28
+ mapDelete(key) {
29
+ const current = this.#record();
30
+ if (!(key in current))
31
+ return;
32
+ delete current[key];
33
+ // An empty object is still a published value. The last delete leaves the lane null.
34
+ if (Object.keys(current).length === 0)
35
+ this.clear();
36
+ else
37
+ this.#write(current);
38
+ }
39
+ #record() {
40
+ const value = this.get();
41
+ if (!isRecord(value))
42
+ return {};
43
+ return { ...value };
44
+ }
45
+ /** `set` wants the lane's serializable value. The bag is a plain object. */
46
+ #write(bag) {
47
+ this.set(bag);
48
+ }
49
+ }
50
+ function isRecord(value) {
51
+ return value !== null && typeof value === "object" && !Array.isArray(value);
52
+ }
53
+ function readAt(value, key) {
54
+ if (!isRecord(value) || !(key in value))
55
+ return undefined;
56
+ return value[key];
57
+ }
58
+ //# sourceMappingURL=map-field-awareness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-field-awareness.js","sourceRoot":"","sources":["../../src/shared/map-field-awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,iBAGX,SAAQ,cAAoB;IAC5B,MAAM,CAAC,GAAW;QAChB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAc;QAChC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;YAAE,OAAO;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,oFAAoF;QACpF,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;YAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,MAAM,CAAC,GAA4B;QACjC,IAAI,CAAC,GAAG,CAAC,GAA6B,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,GAAW;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC","sourcesContent":["/**\n * One awareness field as a string-keyed map.\n *\n * Each client owns its map. A write patches the local map. A read is the\n * first present entry across bases, local then others, so a peer's key is\n * visible here. `undefined` means the key is absent; `\"\"` and `null` are\n * stored values.\n *\n * Callers read and write through this lens. A process-local map misses\n * every peer entry.\n */\nimport {\n FieldAwareness,\n type AwarenessShape,\n type PlexusAwareness,\n type ShapeOfAwareness,\n} from \"@here.build/plexus\";\n\nexport class MapFieldAwareness<\n A extends PlexusAwareness<AwarenessShape> = PlexusAwareness,\n K extends string & keyof ShapeOfAwareness<A> = string & keyof ShapeOfAwareness<A>,\n> extends FieldAwareness<A, K> {\n mapGet(key: string): unknown {\n const own = readAt(this.get(), key);\n if (own !== undefined) return own;\n for (const id of this.clientIds) {\n const value = readAt(this.getOther(id), key);\n if (value !== undefined) return value;\n }\n return undefined;\n }\n\n mapSet(key: string, value: unknown): void {\n this.#write({ ...this.#record(), [key]: value });\n }\n\n mapDelete(key: string): void {\n const current = this.#record();\n if (!(key in current)) return;\n delete current[key];\n // An empty object is still a published value. The last delete leaves the lane null.\n if (Object.keys(current).length === 0) this.clear();\n else this.#write(current);\n }\n\n #record(): Record<string, unknown> {\n const value = this.get();\n if (!isRecord(value)) return {};\n return { ...value };\n }\n\n /** `set` wants the lane's serializable value. The bag is a plain object. */\n #write(bag: Record<string, unknown>): void {\n this.set(bag as ShapeOfAwareness<A>[K]);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readAt(value: unknown, key: string): unknown {\n if (!isRecord(value) || !(key in value)) return undefined;\n return value[key];\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * YAML connection inventory. Settings ride a private synced bag; the public
3
+ * face is {@link configuration} (deep-readonly get, whole-bag set).
4
+ * Secrets never live here. PEW process facts are `readyState` / `error`
5
+ * plus {@link live}. YAML file fill does not touch process facts.
6
+ */
7
+ import { PlexusModel } from "@here.build/plexus";
8
+ import type { ReadyState, SpecCatalog } from "../types.js";
9
+ import { DriverSpec } from "./DriverSpec.js";
10
+ import { type LiveFacts } from "./jsonRecord.js";
11
+ export type ConfigurationAtom = string | number | boolean | null;
12
+ export type ConfigurationValue = ConfigurationAtom | readonly ConfigurationValue[] | {
13
+ readonly [key: string]: ConfigurationValue;
14
+ };
15
+ export type ConnectionConfiguration = {
16
+ readonly [key: string]: ConfigurationValue;
17
+ };
18
+ export declare class ConnectionSpec extends PlexusModel<SpecCatalog | null> {
19
+ #private;
20
+ get id(): string;
21
+ /** Only `failed` is a problem. */
22
+ get issue(): "failed" | false;
23
+ /** YAML `driver:` resolves to this entity. */
24
+ accessor driver: DriverSpec;
25
+ accessor name: string;
26
+ accessor annotation: string;
27
+ private accessor configurationMap;
28
+ /** PEW instance self-report. `null` = never ensured. YAML fill does not touch this. */
29
+ accessor readyState: ReadyState;
30
+ accessor error: string;
31
+ private accessor liveMap;
32
+ /** Frozen through; assign the whole bag to write. */
33
+ get configuration(): ConnectionConfiguration;
34
+ set configuration(settings: Readonly<Record<string, unknown>> | undefined);
35
+ get live(): LiveFacts;
36
+ set live(next: Readonly<Record<string, unknown>> | undefined);
37
+ /** Process self-report. YAML fill does not call this. */
38
+ stampProcess(next: {
39
+ readonly readyState: ReadyState;
40
+ readonly error: string;
41
+ readonly live: Readonly<Record<string, unknown>> | undefined;
42
+ }): void;
43
+ }
44
+ //# sourceMappingURL=ConnectionSpec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionSpec.d.ts","sourceRoot":"","sources":["../../../src/shared/models/ConnectionSpec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAW,MAAM,oBAAoB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,SAAS,kBAAkB,EAAE,GAC7B;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,uBAAuB,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAAC;AAErF,qBACa,cAAe,SAAQ,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;;IACjE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,kCAAkC;IAClC,IAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAE5B;IAED,8CAA8C;IACrC,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAM;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/E,uFAAuF;IAC9E,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAQ;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IAEtE,qDAAqD;IACrD,IACI,aAAa,IAAI,uBAAuB,CAE3C;IAED,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EAExE;IAOD,IACI,IAAI,IAAI,SAAS,CAEpB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EAE3D;IAOD,yDAAyD;IAEzD,YAAY,CAAC,IAAI,EAAE;QACjB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;KAC9D,GAAG,IAAI;CAKT"}
@@ -0,0 +1,180 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
36
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
37
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
38
+ };
39
+ /**
40
+ * YAML connection inventory. Settings ride a private synced bag; the public
41
+ * face is {@link configuration} (deep-readonly get, whole-bag set).
42
+ * Secrets never live here. PEW process facts are `readyState` / `error`
43
+ * plus {@link live}. YAML file fill does not touch process facts.
44
+ */
45
+ import { PlexusModel, syncing } from "@here.build/plexus";
46
+ import { computed } from "mobx";
47
+ import { readJsonRecord, writeJsonRecord } from "./jsonRecord.js";
48
+ let ConnectionSpec = (() => {
49
+ var _a, _b, _c, _d, _e;
50
+ let _classDecorators = [syncing("@inhuman.tools/plexus-expectations:ConnectionSpec")];
51
+ let _classDescriptor;
52
+ let _classExtraInitializers = [];
53
+ let _classThis;
54
+ let _classSuper = PlexusModel;
55
+ let _instanceExtraInitializers = [];
56
+ let _driver_decorators;
57
+ let _driver_initializers = [];
58
+ let _driver_extraInitializers = [];
59
+ let _name_decorators;
60
+ let _name_initializers = [];
61
+ let _name_extraInitializers = [];
62
+ let _annotation_decorators;
63
+ let _annotation_initializers = [];
64
+ let _annotation_extraInitializers = [];
65
+ let _configurationMap_decorators;
66
+ let _configurationMap_initializers = [];
67
+ let _configurationMap_extraInitializers = [];
68
+ let _readyState_decorators;
69
+ let _readyState_initializers = [];
70
+ let _readyState_extraInitializers = [];
71
+ let _error_decorators;
72
+ let _error_initializers = [];
73
+ let _error_extraInitializers = [];
74
+ let _liveMap_decorators;
75
+ let _liveMap_initializers = [];
76
+ let _liveMap_extraInitializers = [];
77
+ let _get_configuration_decorators;
78
+ let _private_writeConfiguration_decorators;
79
+ let _private_writeConfiguration_descriptor;
80
+ let _get_live_decorators;
81
+ let _private_writeLive_decorators;
82
+ let _private_writeLive_descriptor;
83
+ let _stampProcess_decorators;
84
+ var ConnectionSpec = class extends _classSuper {
85
+ static { _classThis = this; }
86
+ static {
87
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
88
+ _driver_decorators = [syncing];
89
+ _name_decorators = [syncing];
90
+ _annotation_decorators = [syncing];
91
+ _configurationMap_decorators = [(_a = syncing).record.bind(_a)];
92
+ _readyState_decorators = [syncing];
93
+ _error_decorators = [syncing];
94
+ _liveMap_decorators = [(_b = syncing).record.bind(_b)];
95
+ _get_configuration_decorators = [computed];
96
+ _private_writeConfiguration_decorators = [(_c = syncing).action.bind(_c)];
97
+ _get_live_decorators = [computed];
98
+ _private_writeLive_decorators = [(_d = syncing).action.bind(_d)];
99
+ _stampProcess_decorators = [(_e = syncing).action.bind(_e)];
100
+ __esDecorate(this, null, _driver_decorators, { kind: "accessor", name: "driver", static: false, private: false, access: { has: obj => "driver" in obj, get: obj => obj.driver, set: (obj, value) => { obj.driver = value; } }, metadata: _metadata }, _driver_initializers, _driver_extraInitializers);
101
+ __esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
102
+ __esDecorate(this, null, _annotation_decorators, { kind: "accessor", name: "annotation", static: false, private: false, access: { has: obj => "annotation" in obj, get: obj => obj.annotation, set: (obj, value) => { obj.annotation = value; } }, metadata: _metadata }, _annotation_initializers, _annotation_extraInitializers);
103
+ __esDecorate(this, null, _configurationMap_decorators, { kind: "accessor", name: "configurationMap", static: false, private: false, access: { has: obj => "configurationMap" in obj, get: obj => obj.configurationMap, set: (obj, value) => { obj.configurationMap = value; } }, metadata: _metadata }, _configurationMap_initializers, _configurationMap_extraInitializers);
104
+ __esDecorate(this, null, _readyState_decorators, { kind: "accessor", name: "readyState", static: false, private: false, access: { has: obj => "readyState" in obj, get: obj => obj.readyState, set: (obj, value) => { obj.readyState = value; } }, metadata: _metadata }, _readyState_initializers, _readyState_extraInitializers);
105
+ __esDecorate(this, null, _error_decorators, { kind: "accessor", name: "error", static: false, private: false, access: { has: obj => "error" in obj, get: obj => obj.error, set: (obj, value) => { obj.error = value; } }, metadata: _metadata }, _error_initializers, _error_extraInitializers);
106
+ __esDecorate(this, null, _liveMap_decorators, { kind: "accessor", name: "liveMap", static: false, private: false, access: { has: obj => "liveMap" in obj, get: obj => obj.liveMap, set: (obj, value) => { obj.liveMap = value; } }, metadata: _metadata }, _liveMap_initializers, _liveMap_extraInitializers);
107
+ __esDecorate(this, null, _get_configuration_decorators, { kind: "getter", name: "configuration", static: false, private: false, access: { has: obj => "configuration" in obj, get: obj => obj.configuration }, metadata: _metadata }, null, _instanceExtraInitializers);
108
+ __esDecorate(this, _private_writeConfiguration_descriptor = { value: __setFunctionName(function (settings) {
109
+ writeJsonRecord(this.configurationMap, settings);
110
+ }, "#writeConfiguration") }, _private_writeConfiguration_decorators, { kind: "method", name: "#writeConfiguration", static: false, private: true, access: { has: obj => #writeConfiguration in obj, get: obj => obj.#writeConfiguration }, metadata: _metadata }, null, _instanceExtraInitializers);
111
+ __esDecorate(this, null, _get_live_decorators, { kind: "getter", name: "live", static: false, private: false, access: { has: obj => "live" in obj, get: obj => obj.live }, metadata: _metadata }, null, _instanceExtraInitializers);
112
+ __esDecorate(this, _private_writeLive_descriptor = { value: __setFunctionName(function (next) {
113
+ writeJsonRecord(this.liveMap, next);
114
+ }, "#writeLive") }, _private_writeLive_decorators, { kind: "method", name: "#writeLive", static: false, private: true, access: { has: obj => #writeLive in obj, get: obj => obj.#writeLive }, metadata: _metadata }, null, _instanceExtraInitializers);
115
+ __esDecorate(this, null, _stampProcess_decorators, { kind: "method", name: "stampProcess", static: false, private: false, access: { has: obj => "stampProcess" in obj, get: obj => obj.stampProcess }, metadata: _metadata }, null, _instanceExtraInitializers);
116
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
117
+ ConnectionSpec = _classThis = _classDescriptor.value;
118
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
119
+ __runInitializers(_classThis, _classExtraInitializers);
120
+ }
121
+ get id() {
122
+ return this.parentFieldKey ?? "";
123
+ }
124
+ /** Only `failed` is a problem. */
125
+ get issue() {
126
+ return this.readyState === "failed" ? "failed" : false;
127
+ }
128
+ #driver_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _driver_initializers, void 0));
129
+ /** YAML `driver:` resolves to this entity. */
130
+ get driver() { return this.#driver_accessor_storage; }
131
+ set driver(value) { this.#driver_accessor_storage = value; }
132
+ #name_accessor_storage = (__runInitializers(this, _driver_extraInitializers), __runInitializers(this, _name_initializers, ""));
133
+ get name() { return this.#name_accessor_storage; }
134
+ set name(value) { this.#name_accessor_storage = value; }
135
+ #annotation_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _annotation_initializers, ""));
136
+ get annotation() { return this.#annotation_accessor_storage; }
137
+ set annotation(value) { this.#annotation_accessor_storage = value; }
138
+ #configurationMap_accessor_storage = (__runInitializers(this, _annotation_extraInitializers), __runInitializers(this, _configurationMap_initializers, {}));
139
+ get configurationMap() { return this.#configurationMap_accessor_storage; }
140
+ set configurationMap(value) { this.#configurationMap_accessor_storage = value; }
141
+ #readyState_accessor_storage = (__runInitializers(this, _configurationMap_extraInitializers), __runInitializers(this, _readyState_initializers, null));
142
+ /** PEW instance self-report. `null` = never ensured. YAML fill does not touch this. */
143
+ get readyState() { return this.#readyState_accessor_storage; }
144
+ set readyState(value) { this.#readyState_accessor_storage = value; }
145
+ #error_accessor_storage = (__runInitializers(this, _readyState_extraInitializers), __runInitializers(this, _error_initializers, ""));
146
+ get error() { return this.#error_accessor_storage; }
147
+ set error(value) { this.#error_accessor_storage = value; }
148
+ #liveMap_accessor_storage = (__runInitializers(this, _error_extraInitializers), __runInitializers(this, _liveMap_initializers, {}));
149
+ get liveMap() { return this.#liveMap_accessor_storage; }
150
+ set liveMap(value) { this.#liveMap_accessor_storage = value; }
151
+ /** Frozen through; assign the whole bag to write. */
152
+ get configuration() {
153
+ return readJsonRecord(this.configurationMap);
154
+ }
155
+ set configuration(settings) {
156
+ this.#writeConfiguration(settings);
157
+ }
158
+ get #writeConfiguration() { return _private_writeConfiguration_descriptor.value; }
159
+ get live() {
160
+ return readJsonRecord(this.liveMap);
161
+ }
162
+ set live(next) {
163
+ this.#writeLive(next);
164
+ }
165
+ get #writeLive() { return _private_writeLive_descriptor.value; }
166
+ /** Process self-report. YAML fill does not call this. */
167
+ stampProcess(next) {
168
+ this.readyState = next.readyState;
169
+ this.error = next.error;
170
+ this.live = next.live;
171
+ }
172
+ constructor() {
173
+ super(...arguments);
174
+ __runInitializers(this, _liveMap_extraInitializers);
175
+ }
176
+ };
177
+ return ConnectionSpec = _classThis;
178
+ })();
179
+ export { ConnectionSpec };
180
+ //# sourceMappingURL=ConnectionSpec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionSpec.js","sourceRoot":"","sources":["../../../src/shared/models/ConnectionSpec.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * YAML connection inventory. Settings ride a private synced bag; the public\n * face is {@link configuration} (deep-readonly get, whole-bag set).\n * Secrets never live here. PEW process facts are `readyState` / `error`\n * plus {@link live}. YAML file fill does not touch process facts.\n */\nimport { PlexusModel, syncing } from \"@here.build/plexus\";\nimport { computed } from \"mobx\";\n\nimport type { ReadyState, SpecCatalog } from \"../types.js\";\nimport { DriverSpec } from \"./DriverSpec.js\";\nimport { readJsonRecord, writeJsonRecord, type LiveFacts } from \"./jsonRecord.js\";\n\nexport type ConfigurationAtom = string | number | boolean | null;\nexport type ConfigurationValue =\n | ConfigurationAtom\n | readonly ConfigurationValue[]\n | { readonly [key: string]: ConfigurationValue };\nexport type ConnectionConfiguration = { readonly [key: string]: ConfigurationValue };\n\n@syncing(\"@inhuman.tools/plexus-expectations:ConnectionSpec\")\nexport class ConnectionSpec extends PlexusModel<SpecCatalog | null> {\n get id(): string {\n return (this.parentFieldKey as string | null) ?? \"\";\n }\n\n /** Only `failed` is a problem. */\n get issue(): \"failed\" | false {\n return this.readyState === \"failed\" ? \"failed\" : false;\n }\n\n /** YAML `driver:` resolves to this entity. */\n @syncing accessor driver!: DriverSpec;\n @syncing accessor name: string = \"\";\n @syncing accessor annotation: string = \"\";\n @syncing.record private accessor configurationMap: Record<string, string> = {};\n\n /** PEW instance self-report. `null` = never ensured. YAML fill does not touch this. */\n @syncing accessor readyState: ReadyState = null;\n @syncing accessor error: string = \"\";\n @syncing.record private accessor liveMap: Record<string, string> = {};\n\n /** Frozen through; assign the whole bag to write. */\n @computed\n get configuration(): ConnectionConfiguration {\n return readJsonRecord(this.configurationMap) as ConnectionConfiguration;\n }\n\n set configuration(settings: Readonly<Record<string, unknown>> | undefined) {\n this.#writeConfiguration(settings);\n }\n\n @syncing.action\n #writeConfiguration(settings: Readonly<Record<string, unknown>> | undefined): void {\n writeJsonRecord(this.configurationMap, settings);\n }\n\n @computed\n get live(): LiveFacts {\n return readJsonRecord(this.liveMap) as LiveFacts;\n }\n\n set live(next: Readonly<Record<string, unknown>> | undefined) {\n this.#writeLive(next);\n }\n\n @syncing.action\n #writeLive(next: Readonly<Record<string, unknown>> | undefined): void {\n writeJsonRecord(this.liveMap, next);\n }\n\n /** Process self-report. YAML fill does not call this. */\n @syncing.action\n stampProcess(next: {\n readonly readyState: ReadyState;\n readonly error: string;\n readonly live: Readonly<Record<string, unknown>> | undefined;\n }): void {\n this.readyState = next.readyState;\n this.error = next.error;\n this.live = next.live;\n }\n}\n\n"]}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Advertised driver inventory. `can` is a plexus list — file tokens, no load required.
3
+ * PEW process facts are `readyState` / `error` / `offersJson` plus {@link live}.
4
+ * YAML file fill does not touch process facts.
5
+ */
6
+ import { PlexusModel } from "@here.build/plexus";
7
+ import type { ReadyState, SpecCatalog } from "../types.js";
8
+ import { type LiveFacts } from "./jsonRecord.js";
9
+ /** How a new connection of this driver is offered, before the class loads. */
10
+ export type DriverMultiplicity = "add-by-default" | "add-as-secondary";
11
+ export declare class DriverSpec extends PlexusModel<SpecCatalog | null> {
12
+ #private;
13
+ accessor name: string;
14
+ accessor description: string;
15
+ accessor importPath: string;
16
+ /** Expectation kind names this driver handles. Not tool names. */
17
+ accessor abilityClaim: string[];
18
+ accessor multiplicity: DriverMultiplicity;
19
+ /** Module-load self-report. `null` = never loaded. YAML fill does not touch this. */
20
+ accessor readyState: ReadyState;
21
+ accessor error: string;
22
+ /** Offer list JSON. Null = no offers. */
23
+ private accessor offersJson;
24
+ private accessor liveMap;
25
+ get live(): LiveFacts;
26
+ set live(next: Readonly<Record<string, unknown>> | undefined);
27
+ /**
28
+ * Module-load self-report. Omitted `offersJson` / `live` stay
29
+ * (failure must not wipe a previous load).
30
+ */
31
+ stampLoad(next: {
32
+ readonly readyState: ReadyState;
33
+ readonly error: string;
34
+ readonly offersJson?: string | null;
35
+ readonly live?: Readonly<Record<string, unknown>>;
36
+ }): void;
37
+ /**
38
+ * Class-bootstrap offers. Null, blank, and the string `"null"` are no offers.
39
+ * A non-string cell or malformed JSON throws: a silent [] hides a driver defect.
40
+ */
41
+ get offers(): readonly object[];
42
+ set offers(next: readonly object[] | null);
43
+ }
44
+ export declare function readDriverOffers(raw: unknown): object[];
45
+ //# sourceMappingURL=DriverSpec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DriverSpec.d.ts","sourceRoot":"","sources":["../../../src/shared/models/DriverSpec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAW,MAAM,oBAAoB,CAAC;AAI1D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElF,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAEvE,qBACa,UAAW,SAAQ,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAM;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAM;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAM;IAC1C,kEAAkE;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IAC1C,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAsB;IAExE,qFAAqF;IAC5E,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAQ;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAM;IACrC,yCAAyC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IAEtE,IACI,IAAI,IAAI,SAAS,CAEpB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EAE3D;IAOD;;;OAGG;IAEH,SAAS,CAAC,IAAI,EAAE;QACd,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACnD,GAAG,IAAI;IAOR;;;OAGG;IACH,IACI,MAAM,IAAI,SAAS,MAAM,EAAE,CAE9B;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,EAExC;CAMF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAoBvD"}