stitchkit 0.104.2 → 0.105.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +401 -13
- package/darwin-native.cjs +4 -2
- package/dist/agent-runtime/browser-control-contract.d.ts +32 -2
- package/dist/agent-runtime/browser-control-contract.d.ts.map +1 -1
- package/dist/agent-runtime/browser-controller.d.ts +21 -3
- package/dist/agent-runtime/browser-controller.d.ts.map +1 -1
- package/dist/agent-runtime/coding-shell-process.d.ts.map +1 -1
- package/dist/agent-runtime/coding-tool-refusals.d.ts +1 -0
- package/dist/agent-runtime/coding-tool-refusals.d.ts.map +1 -1
- package/dist/agent-runtime/coding-tool-shell.d.ts.map +1 -1
- package/dist/agent-runtime/compaction.d.ts.map +1 -1
- package/dist/agent-runtime/contained-write.d.ts.map +1 -1
- package/dist/agent-runtime/control-schema.d.ts +48 -1
- package/dist/agent-runtime/control-schema.d.ts.map +1 -1
- package/dist/agent-runtime/deferred-tool-search.d.ts +3 -2
- package/dist/agent-runtime/deferred-tool-search.d.ts.map +1 -1
- package/dist/agent-runtime/harness-control.d.ts.map +1 -1
- package/dist/agent-runtime/harness-realtime.d.ts +34 -4
- package/dist/agent-runtime/harness-realtime.d.ts.map +1 -1
- package/dist/agent-runtime/runtime-recovery.d.ts.map +1 -1
- package/dist/agent-runtime/runtime-state.d.ts.map +1 -1
- package/dist/agent-runtime/sandbox-contract.d.ts.map +1 -1
- package/dist/agent-runtime/sandbox-process-owner.d.ts +9 -1
- package/dist/agent-runtime/sandbox-process-owner.d.ts.map +1 -1
- package/dist/agent-runtime/sandbox.d.ts +32 -1
- package/dist/agent-runtime/sandbox.d.ts.map +1 -1
- package/dist/agent-runtime/schedule-records.d.ts.map +1 -1
- package/dist/agent-runtime/schedules.d.ts.map +1 -1
- package/dist/agent-runtime/store-events.d.ts +9 -4
- package/dist/agent-runtime/store-events.d.ts.map +1 -1
- package/dist/agent-runtime/testing.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-contract.d.ts +50 -0
- package/dist/application/diagnostic-journal-contract.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-generations.d.ts +24 -0
- package/dist/application/diagnostic-journal-generations.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-manager.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-open.d.ts +10 -0
- package/dist/application/diagnostic-journal-open.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-quarantine.d.ts +28 -0
- package/dist/application/diagnostic-journal-quarantine.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-read-contract.d.ts +73 -3
- package/dist/application/diagnostic-journal-read-contract.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-reader.d.ts +17 -2
- package/dist/application/diagnostic-journal-reader.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-recovery.d.ts +18 -2
- package/dist/application/diagnostic-journal-recovery.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-storage.d.ts +6 -2
- package/dist/application/diagnostic-journal-storage.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-tail.d.ts +12 -0
- package/dist/application/diagnostic-journal-tail.d.ts.map +1 -0
- package/dist/application/diagnostic-journal.d.ts +3 -0
- package/dist/application/diagnostic-journal.d.ts.map +1 -1
- package/dist/application/directory-inbox-accept.d.ts +3 -3
- package/dist/application/directory-inbox-accept.d.ts.map +1 -1
- package/dist/application/directory-inbox-contract.d.ts +38 -10
- package/dist/application/directory-inbox-contract.d.ts.map +1 -1
- package/dist/application/directory-inbox-delivery.d.ts +3 -3
- package/dist/application/directory-inbox-delivery.d.ts.map +1 -1
- package/dist/application/directory-inbox-files.d.ts +17 -2
- package/dist/application/directory-inbox-files.d.ts.map +1 -1
- package/dist/application/directory-inbox-state.d.ts +1 -1
- package/dist/application/directory-inbox-state.d.ts.map +1 -1
- package/dist/application/directory-inbox.d.ts +1 -1
- package/dist/application/directory-inbox.d.ts.map +1 -1
- package/dist/application/file-state-store.d.ts +21 -1
- package/dist/application/file-state-store.d.ts.map +1 -1
- package/dist/application/grammy.d.ts.map +1 -1
- package/dist/application/kernel-contract.d.ts.map +1 -1
- package/dist/application/revision-signal.d.ts.map +1 -1
- package/dist/application/state-store.d.ts +3 -0
- package/dist/application/state-store.d.ts.map +1 -1
- package/dist/browser/api-error.d.ts +38 -0
- package/dist/browser/api-error.d.ts.map +1 -0
- package/dist/browser/chunked-upload.d.ts.map +1 -1
- package/dist/browser/client-executors.d.ts.map +1 -1
- package/dist/browser/client-url.d.ts.map +1 -1
- package/dist/browser/contract-stream.d.ts.map +1 -1
- package/dist/browser/http.d.ts +0 -25
- package/dist/browser/http.d.ts.map +1 -1
- package/dist/browser/resumable.d.ts.map +1 -1
- package/dist/contract/define-validation.d.ts +0 -1
- package/dist/contract/define-validation.d.ts.map +1 -1
- package/dist/contract/define.d.ts.map +1 -1
- package/dist/contract/errors-factory.d.ts.map +1 -1
- package/dist/contract/errors.d.ts +15 -18
- package/dist/contract/errors.d.ts.map +1 -1
- package/dist/contract/normalize.d.ts.map +1 -1
- package/dist/durability/effect.d.ts.map +1 -1
- package/dist/durability/scheduler.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime/browser.js +29 -18
- package/dist/entrypoints/agent-runtime/coding-tools.js +8 -7
- package/dist/entrypoints/agent-runtime/harness.js +15 -14
- package/dist/entrypoints/agent-runtime/realtime.d.ts +1 -1
- package/dist/entrypoints/agent-runtime/realtime.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime/realtime.js +119 -54
- package/dist/entrypoints/agent-runtime/sandbox.js +23 -17
- package/dist/entrypoints/agent-runtime/sqlite/bun.js +4 -3
- package/dist/entrypoints/agent-runtime/sqlite/node.js +4 -3
- package/dist/entrypoints/agent-runtime/testing.js +8 -6
- package/dist/entrypoints/agent-runtime.js +37 -38
- package/dist/entrypoints/application/diagnostic-journal.js +305 -111
- package/dist/entrypoints/application/directory-inbox.js +174 -77
- package/dist/entrypoints/application/grammy.js +5 -2
- package/dist/entrypoints/application/opentelemetry.js +2 -2
- package/dist/entrypoints/application.d.ts +2 -2
- package/dist/entrypoints/application.d.ts.map +1 -1
- package/dist/entrypoints/application.js +17 -8
- package/dist/entrypoints/cli/publish.d.ts +16 -0
- package/dist/entrypoints/cli/publish.d.ts.map +1 -0
- package/dist/entrypoints/cli/publish.js +527 -0
- package/dist/entrypoints/cli.d.ts +1 -2
- package/dist/entrypoints/cli.d.ts.map +1 -1
- package/dist/entrypoints/cli.js +59 -966
- package/dist/entrypoints/contract.js +3 -3
- package/dist/entrypoints/files/packaging.js +161 -66
- package/dist/entrypoints/files.d.ts +1 -0
- package/dist/entrypoints/files.d.ts.map +1 -1
- package/dist/entrypoints/files.js +17 -10
- package/dist/entrypoints/index.d.ts +2 -1
- package/dist/entrypoints/index.d.ts.map +1 -1
- package/dist/entrypoints/index.js +31 -60
- package/dist/entrypoints/node.js +8 -8
- package/dist/entrypoints/observability.js +3 -3
- package/dist/entrypoints/primitives.js +67 -83
- package/dist/entrypoints/process.d.ts +1 -1
- package/dist/entrypoints/process.d.ts.map +1 -1
- package/dist/entrypoints/process.js +2 -2
- package/dist/entrypoints/react.js +4 -2
- package/dist/entrypoints/remote.js +37 -13
- package/dist/entrypoints/server.js +18 -16
- package/dist/entrypoints/telegram/screens.js +5 -3
- package/dist/entrypoints/telegram.js +31 -46
- package/dist/entrypoints/testing.d.ts +1 -1
- package/dist/entrypoints/testing.d.ts.map +1 -1
- package/dist/entrypoints/testing.js +444 -448
- package/dist/entrypoints/tools/connections.js +268 -105
- package/dist/entrypoints/tools/contract.js +2 -2
- package/dist/entrypoints/tools/invoker.js +8 -7
- package/dist/entrypoints/tools/mcp.d.ts +2 -2
- package/dist/entrypoints/tools/mcp.d.ts.map +1 -1
- package/dist/entrypoints/tools/mcp.js +10 -9
- package/dist/entrypoints/tools.d.ts +0 -1
- package/dist/entrypoints/tools.d.ts.map +1 -1
- package/dist/entrypoints/tools.js +118 -53
- package/dist/entrypoints/tracking.js +2 -3
- package/dist/files/boundary.d.ts +2 -2
- package/dist/files/boundary.d.ts.map +1 -1
- package/dist/files/chunk-spool.d.ts.map +1 -1
- package/dist/files/file-io.d.ts +2 -2
- package/dist/files/file-io.d.ts.map +1 -1
- package/dist/files/native-packaging-layout.d.ts +50 -4
- package/dist/files/native-packaging-layout.d.ts.map +1 -1
- package/dist/files/native-packaging.d.ts +78 -17
- package/dist/files/native-packaging.d.ts.map +1 -1
- package/dist/{index-r5hsgkz5.js → index-0gs4ymfj.js} +6 -3
- package/dist/{index-zax7resm.js → index-0gxvns6s.js} +1 -13
- package/dist/index-0s4xebbg.js +8 -0
- package/dist/{index-r4r70zmh.js → index-12zsej7b.js} +5 -2
- package/dist/{index-269zqj8m.js → index-1ptj98e0.js} +28 -12
- package/dist/{index-kemm0ej5.js → index-1pwwan01.js} +65 -22
- package/dist/{index-vgkbcnkc.js → index-299sm5tr.js} +1 -1
- package/dist/{index-2vnh05w4.js → index-2k91mewf.js} +31 -74
- package/dist/{index-wh0ecvyk.js → index-37asdw3a.js} +1 -1
- package/dist/index-3h0ztg0z.js +285 -0
- package/dist/{index-g95fk660.js → index-4vsby8n8.js} +8 -15
- package/dist/index-556g5hsh.js +17 -0
- package/dist/{index-f330qqyg.js → index-5c26631f.js} +244 -67
- package/dist/{index-adhgd4pe.js → index-5p55xreg.js} +2 -2
- package/dist/index-5w6t91ze.js +47 -0
- package/dist/{index-9pw0a51a.js → index-6yxhe58g.js} +40 -7
- package/dist/{index-6d9xaxw1.js → index-8ks9b85e.js} +33 -5
- package/dist/{index-bhb950qs.js → index-916yh4e2.js} +25 -12
- package/dist/index-9tqbxv5p.js +44 -0
- package/dist/{index-5csmzesf.js → index-azx12jgv.js} +4 -3
- package/dist/{index-mbnnw3f2.js → index-b0kddvzw.js} +15 -5
- package/dist/{index-n5yqxd3d.js → index-b0w7rbpt.js} +23 -2
- package/dist/index-b56nnscm.js +132 -0
- package/dist/{index-0ndk4555.js → index-c0hffcmj.js} +2 -2
- package/dist/{index-pptyv13k.js → index-c17xcx4k.js} +42 -6
- package/dist/index-cazts87s.js +105 -0
- package/dist/{index-g2j7pnak.js → index-cmzvhhtd.js} +5 -2
- package/dist/{index-ssmd41kh.js → index-d2h99n7d.js} +1 -1
- package/dist/{index-z94wht4y.js → index-dky0dcmf.js} +34 -5
- package/dist/index-drs41arz.js +455 -0
- package/dist/{index-za6j7nwy.js → index-dsnjzb62.js} +104 -51
- package/dist/index-eemvahkc.js +21 -0
- package/dist/{index-fa4wg312.js → index-f199nfq5.js} +10 -6
- package/dist/{index-ck71tbcf.js → index-fsw1ybf3.js} +11 -15
- package/dist/{index-fk18k56k.js → index-gr5g3xfw.js} +11 -18
- package/dist/{index-jn9g8xdt.js → index-hjvje0pf.js} +6 -4
- package/dist/index-j4zh647a.js +59 -0
- package/dist/{index-x928baz2.js → index-j9gxbztg.js} +18 -14
- package/dist/index-kfjkb396.js +37 -0
- package/dist/{index-6drst9sg.js → index-ksfagmyz.js} +45 -345
- package/dist/index-m616f0yz.js +120 -0
- package/dist/{index-fm1c1a08.js → index-m6w6jtda.js} +40 -21
- package/dist/{index-bakgedh8.js → index-msfpyy2f.js} +2 -4
- package/dist/{index-ywppsaby.js → index-n1nszyk0.js} +23 -34
- package/dist/{index-v14qqmys.js → index-n4689krb.js} +1 -1
- package/dist/{index-a0zzh8ak.js → index-pz3y6b6g.js} +3 -3
- package/dist/{index-43p08g7t.js → index-pzb63z66.js} +12 -8
- package/dist/{index-h97tqqp1.js → index-qaet40b2.js} +5 -3
- package/dist/{index-t1sr4aks.js → index-qaqbdm7s.js} +52 -6
- package/dist/{index-77nxk6ay.js → index-r393tnfp.js} +16 -10
- package/dist/{index-kb8styz3.js → index-rpzewktb.js} +15 -5
- package/dist/{index-27a2pj09.js → index-sj28htvf.js} +1 -1
- package/dist/{index-hbd32c6a.js → index-w8etpm8j.js} +38 -89
- package/dist/{index-2hyavjjj.js → index-wbhdzxar.js} +3 -3
- package/dist/{index-4e0ah203.js → index-wdy68sh6.js} +47 -24
- package/dist/{index-hp9d77wk.js → index-x7w1z6pf.js} +15 -4
- package/dist/{index-ptn0g0gj.js → index-y7k2cdgv.js} +21 -20
- package/dist/{index-20yvtn9a.js → index-yt7gyg5x.js} +1 -1
- package/dist/{index-cvda079a.js → index-yvfk3y36.js} +12 -2
- package/dist/{index-5z6jn897.js → index-z23rfxhj.js} +1 -1
- package/dist/internal/abort-race.d.ts +8 -2
- package/dist/internal/abort-race.d.ts.map +1 -1
- package/dist/internal/atomic-file.d.ts +55 -9
- package/dist/internal/atomic-file.d.ts.map +1 -1
- package/dist/internal/atomic-publication.d.ts +39 -4
- package/dist/internal/atomic-publication.d.ts.map +1 -1
- package/dist/internal/atomic-staging.d.ts +47 -0
- package/dist/internal/atomic-staging.d.ts.map +1 -0
- package/dist/internal/bounded-file-read.d.ts +19 -11
- package/dist/internal/bounded-file-read.d.ts.map +1 -1
- package/dist/internal/bounded-lines.d.ts.map +1 -1
- package/dist/internal/close-after.d.ts +11 -0
- package/dist/internal/close-after.d.ts.map +1 -0
- package/dist/internal/deadline.d.ts +10 -0
- package/dist/internal/deadline.d.ts.map +1 -1
- package/dist/internal/exclusive-lock-read.d.ts +10 -12
- package/dist/internal/exclusive-lock-read.d.ts.map +1 -1
- package/dist/internal/exclusive-lock.d.ts +2 -2
- package/dist/internal/exclusive-lock.d.ts.map +1 -1
- package/dist/internal/file-observation.d.ts +14 -0
- package/dist/internal/file-observation.d.ts.map +1 -0
- package/dist/internal/json-data.d.ts +22 -5
- package/dist/internal/json-data.d.ts.map +1 -1
- package/dist/internal/positive-integer.d.ts +9 -0
- package/dist/internal/positive-integer.d.ts.map +1 -0
- package/dist/internal/process-instance.d.ts +35 -5
- package/dist/internal/process-instance.d.ts.map +1 -1
- package/dist/internal/secure-fetch.d.ts.map +1 -1
- package/dist/internal/timers.d.ts +11 -0
- package/dist/internal/timers.d.ts.map +1 -0
- package/dist/internal/with-exclusive-lock.d.ts +5 -4
- package/dist/internal/with-exclusive-lock.d.ts.map +1 -1
- package/dist/observability/bounded-sink.d.ts.map +1 -1
- package/dist/primitives/canonical-json.d.ts +23 -2
- package/dist/primitives/canonical-json.d.ts.map +1 -1
- package/dist/primitives/delivery.d.ts.map +1 -1
- package/dist/primitives/index.d.ts +1 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/money.d.ts.map +1 -1
- package/dist/process/cleanup.d.ts +7 -2
- package/dist/process/cleanup.d.ts.map +1 -1
- package/dist/process/command-lifetime.d.ts +6 -1
- package/dist/process/command-lifetime.d.ts.map +1 -1
- package/dist/process/command-owner.d.ts +1 -0
- package/dist/process/command-owner.d.ts.map +1 -1
- package/dist/process/command.d.ts +4 -0
- package/dist/process/command.d.ts.map +1 -1
- package/dist/process/contract.d.ts +68 -2
- package/dist/process/contract.d.ts.map +1 -1
- package/dist/process/group.d.ts +42 -3
- package/dist/process/group.d.ts.map +1 -1
- package/dist/process/launch.d.ts +12 -1
- package/dist/process/launch.d.ts.map +1 -1
- package/dist/process/terminate.d.ts +40 -0
- package/dist/process/terminate.d.ts.map +1 -0
- package/dist/react/query-client.d.ts.map +1 -1
- package/dist/realtime/rejection.d.ts.map +1 -1
- package/dist/server/contract-stream.d.ts.map +1 -1
- package/dist/server/handler-state.d.ts.map +1 -1
- package/dist/server/implement.d.ts.map +1 -1
- package/dist/server/request-body.d.ts +0 -1
- package/dist/server/request-body.d.ts.map +1 -1
- package/dist/server/unix-client.d.ts.map +1 -1
- package/dist/telegram/broadcast-delivery.d.ts.map +1 -1
- package/dist/telegram/broadcast-failure.d.ts +10 -2
- package/dist/telegram/broadcast-failure.d.ts.map +1 -1
- package/dist/telegram/operator-channel.d.ts.map +1 -1
- package/dist/telegram/screens/outcome.d.ts.map +1 -1
- package/dist/testing/surface-conformance.d.ts +1 -1
- package/dist/testing/surface-conformance.d.ts.map +1 -1
- package/dist/testing/surface-manifest.d.ts +0 -6
- package/dist/testing/surface-manifest.d.ts.map +1 -1
- package/dist/tools/agent.d.ts +1 -1
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/cli/args.d.ts +1 -1
- package/dist/tools/cli/args.d.ts.map +1 -1
- package/dist/tools/cli/help.d.ts.map +1 -1
- package/dist/tools/cli/invoke.d.ts +2 -2
- package/dist/tools/cli/invoke.d.ts.map +1 -1
- package/dist/tools/cli/profile.d.ts.map +1 -1
- package/dist/tools/cli/publication-assets.d.ts.map +1 -1
- package/dist/tools/cli/publication-contract.d.ts +8 -0
- package/dist/tools/cli/publication-contract.d.ts.map +1 -1
- package/dist/tools/cli/publication-control.d.ts.map +1 -1
- package/dist/tools/cli/publication-storage.d.ts +23 -2
- package/dist/tools/cli/publication-storage.d.ts.map +1 -1
- package/dist/tools/cli/publication.d.ts +8 -1
- package/dist/tools/cli/publication.d.ts.map +1 -1
- package/dist/tools/connections/errors.d.ts +18 -6
- package/dist/tools/connections/errors.d.ts.map +1 -1
- package/dist/tools/connections/limits.d.ts +8 -2
- package/dist/tools/connections/limits.d.ts.map +1 -1
- package/dist/tools/connections/mcp-client.d.ts.map +1 -1
- package/dist/tools/connections/mcp-envelope.d.ts.map +1 -1
- package/dist/tools/connections/openapi.d.ts.map +1 -1
- package/dist/tools/connections/schema-budget.d.ts +1 -1
- package/dist/tools/connections/schema-budget.d.ts.map +1 -1
- package/dist/tools/connections/sse-session.d.ts.map +1 -1
- package/dist/tools/execute-args.d.ts.map +1 -1
- package/dist/tools/execute-result.d.ts.map +1 -1
- package/dist/tools/internal/surface-projector.d.ts +17 -3
- package/dist/tools/internal/surface-projector.d.ts.map +1 -1
- package/dist/tools/internal/tool-error-projection.d.ts +16 -0
- package/dist/tools/internal/tool-error-projection.d.ts.map +1 -0
- package/dist/tools/internal/tool-view.d.ts.map +1 -1
- package/dist/tools/invoker.d.ts.map +1 -1
- package/dist/tools/list-names.d.ts +3 -2
- package/dist/tools/list-names.d.ts.map +1 -1
- package/dist/tools/manifest.d.ts +3 -2
- package/dist/tools/manifest.d.ts.map +1 -1
- package/dist/tools/mcp/handler.d.ts +7 -0
- package/dist/tools/mcp/handler.d.ts.map +1 -1
- package/dist/tools/mcp/mount.d.ts +18 -2
- package/dist/tools/mcp/mount.d.ts.map +1 -1
- package/dist/tools/mcp/prepare.d.ts +3 -3
- package/dist/tools/mcp/prepare.d.ts.map +1 -1
- package/dist/tools/mcp/register.d.ts.map +1 -1
- package/dist/tools/mcp/runtime-tools.d.ts.map +1 -1
- package/dist/tools/mcp/stdio-signals.d.ts +14 -0
- package/dist/tools/mcp/stdio-signals.d.ts.map +1 -1
- package/dist/tools/mcp/stdio.d.ts +7 -0
- package/dist/tools/mcp/stdio.d.ts.map +1 -1
- package/dist/tools/operations/async-operation-runtime-tools.d.ts.map +1 -1
- package/dist/tools/operations/async-operation-runtime-types.d.ts +3 -3
- package/dist/tools/operations/async-operation-runtime-types.d.ts.map +1 -1
- package/dist/tools/operations/define-wait-tool.d.ts +1 -1
- package/dist/tools/operations/define-wait-tool.d.ts.map +1 -1
- package/dist/tools/operations/wait-core.d.ts +0 -6
- package/dist/tools/operations/wait-core.d.ts.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/remote.d.ts +1 -1
- package/dist/tools/remote.d.ts.map +1 -1
- package/dist/tools/{runtime-tool-execution.d.ts → runtime-tool-declaration.d.ts} +32 -9
- package/dist/tools/runtime-tool-declaration.d.ts.map +1 -0
- package/dist/tools/runtime-tool-mcp.d.ts +6 -15
- package/dist/tools/runtime-tool-mcp.d.ts.map +1 -1
- package/dist/tools/runtime-tool.d.ts +14 -12
- package/dist/tools/runtime-tool.d.ts.map +1 -1
- package/dist/tools/schema/coerce.d.ts +4 -0
- package/dist/tools/schema/coerce.d.ts.map +1 -1
- package/dist/tools/schema/flatten-join.d.ts.map +1 -1
- package/dist/tools/surface.d.ts +7 -11
- package/dist/tools/surface.d.ts.map +1 -1
- package/dist/tools/transfer/define-download-tool.d.ts +1 -1
- package/dist/tools/transfer/define-download-tool.d.ts.map +1 -1
- package/dist/tools/transfer/define-upload-tool.d.ts +1 -1
- package/dist/tools/transfer/define-upload-tool.d.ts.map +1 -1
- package/dist/tools/transfer/define-view-file-tool.d.ts +1 -1
- package/dist/tools/transfer/define-view-file-tool.d.ts.map +1 -1
- package/dist/tools/transfer/managed-file-error.d.ts.map +1 -1
- package/dist/tools/transfer/view-file-contract.d.ts.map +1 -1
- package/dist/tools/transfer/view-file.d.ts +1 -1
- package/dist/tools/transfer/view-file.d.ts.map +1 -1
- package/dist/tools/transports.d.ts +3 -2
- package/dist/tools/transports.d.ts.map +1 -1
- package/llms/agent-runtime-browser.txt +10 -4
- package/llms/agent-runtime-harness.txt +32 -31
- package/llms/agent-runtime-react.txt +1 -1
- package/llms/agent-runtime-realtime.txt +14 -5
- package/llms/agent-runtime-sandbox.txt +3 -11
- package/llms/agent-runtime.3.txt +2 -2
- package/llms/agent-runtime.txt +0 -9
- package/llms/application.2.txt +3 -12
- package/llms/application.3.txt +7 -4
- package/llms/application.txt +44 -15
- package/llms/cli-publish.txt +29 -0
- package/llms/cli.2.txt +9 -11
- package/llms/cli.txt +26 -14
- package/llms/declaration.txt +0 -9
- package/llms/files-packaging.txt +18 -8
- package/llms/files.txt +4 -2
- package/llms/geo.txt +0 -9
- package/llms/live.txt +4 -13
- package/llms/observability.txt +31 -5
- package/llms/primitives.txt +38 -20
- package/llms/process.txt +324 -160
- package/llms/react-keyboard.txt +0 -9
- package/llms/react.txt +0 -18
- package/llms/server.4.txt +1 -1
- package/llms/server.5.txt +1 -1
- package/llms/server.txt +1 -1
- package/llms/stitchkit.txt +6 -7
- package/llms/telegram-screens.txt +2 -2
- package/llms/testing.txt +0 -1
- package/llms/tools-mcp.txt +2 -3
- package/llms/tools.2.txt +12 -0
- package/llms/tools.3.txt +5 -6
- package/llms/tools.txt +6 -4
- package/llms/upgrading-0.37.0-0.50.0.txt +947 -0
- package/llms/{upgrading-0.44.0-0.61.0.txt → upgrading-0.53.0-0.67.0.txt} +576 -506
- package/llms/{upgrading-0.62.0-0.80.0.txt → upgrading-0.68.0-0.94.0.txt} +562 -576
- package/llms/{upgrading-0.81.0-0.104.0.txt → upgrading-0.95.0-0.105.0.txt} +452 -567
- package/llms/upgrading.txt +4 -4
- package/llms-full.txt +1068 -412
- package/llms.txt +24 -24
- package/native-assets.json +11 -3
- package/package.json +6 -6
- package/dist/agent-runtime/harness-tools.d.ts +0 -11
- package/dist/agent-runtime/harness-tools.d.ts.map +0 -1
- package/dist/entrypoints/agent-runtime/harness-tools.d.ts +0 -2
- package/dist/entrypoints/agent-runtime/harness-tools.d.ts.map +0 -1
- package/dist/entrypoints/agent-runtime/harness-tools.js +0 -32
- package/dist/index-1a6jtnd9.js +0 -88
- package/dist/index-8a9ksm91.js +0 -95
- package/dist/index-a3wma1hk.js +0 -48
- package/dist/index-jd470k6q.js +0 -109
- package/dist/index-n1dqr7gf.js +0 -20
- package/dist/index-nggfa2yn.js +0 -34
- package/dist/index-s4evrmp5.js +0 -98
- package/dist/index-ze1eph1k.js +0 -20
- package/dist/tools/connections/error-projection.d.ts +0 -4
- package/dist/tools/connections/error-projection.d.ts.map +0 -1
- package/dist/tools/runtime-tool-execution.d.ts.map +0 -1
- package/llms/agent-runtime-harness-tools.txt +0 -25
- package/llms/upgrading-0.37.0-0.44.0.txt +0 -444
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* synchronous `rename` on a loaded machine was measured holding a consumer's
|
|
21
21
|
* main thread for ~15 s — every timer and request of a daemon stood still.
|
|
22
22
|
*/
|
|
23
|
+
import { type AtomicPublishOptions } from './atomic-publication.js';
|
|
23
24
|
/** Options of {@link writeFileAtomic} and {@link writeFileAtomicSync}. */
|
|
24
25
|
export interface WriteFileAtomicOptions {
|
|
25
26
|
/**
|
|
@@ -31,29 +32,74 @@ export interface WriteFileAtomicOptions {
|
|
|
31
32
|
mode?: number;
|
|
32
33
|
/** Replace by default; false atomically refuses any existing file or link. */
|
|
33
34
|
replace?: boolean;
|
|
34
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* `'file'` (the default) fsyncs the bytes before publication; `'directory'`
|
|
37
|
+
* also fsyncs the parent after it; `'none'` does neither.
|
|
38
|
+
*/
|
|
35
39
|
durability?: 'none' | 'file' | 'directory';
|
|
36
40
|
}
|
|
41
|
+
/** The staged file as a writer sees it; a `FileHandle` satisfies it. */
|
|
42
|
+
export interface StagedFile {
|
|
43
|
+
write(bytes: Uint8Array, offset: number, length: number): Promise<{
|
|
44
|
+
bytesWritten: number;
|
|
45
|
+
}>;
|
|
46
|
+
chmod(mode: number): Promise<void>;
|
|
47
|
+
sync(): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
/** Write every byte of `bytes`; a short write continues and a write of zero bytes is an error. */
|
|
51
|
+
export declare function writeAllBytes(file: StagedFile, bytes: Uint8Array): Promise<void>;
|
|
37
52
|
/**
|
|
38
53
|
* Write `data` to `target` atomically: a reader sees the old contents or the
|
|
39
54
|
* new ones, never part of either, and the new file has `mode` from its first
|
|
40
55
|
* visible moment. A failure before publication leaves the target untouched. Directory-sync or
|
|
41
56
|
* staging-link cleanup failure after publication throws AtomicFilePublicationError
|
|
42
57
|
* with published=true; do not blindly repeat an external action.
|
|
58
|
+
*
|
|
59
|
+
* The bytes are staged in the target's directory under a name {@link isAtomicStagingName}
|
|
60
|
+
* recognises (`.stitchkit-<24 hex>.tmp`, a stable public contract). A process killed before
|
|
61
|
+
* publication leaves that file behind and no later write removes it: recognising and sweeping
|
|
62
|
+
* abandoned staging ({@link sweepAtomicStaging}) is the caller's responsibility.
|
|
43
63
|
*/
|
|
44
64
|
export declare function writeFileAtomic(target: string, data: Uint8Array | string, options?: WriteFileAtomicOptions): Promise<void>;
|
|
45
65
|
interface AtomicFileWriteIO {
|
|
46
|
-
open(path: string, flags: 'wx', mode: number): Promise<
|
|
47
|
-
writeFile(bytes: Uint8Array): Promise<void>;
|
|
48
|
-
chmod(mode: number): Promise<void>;
|
|
49
|
-
sync(): Promise<void>;
|
|
50
|
-
close(): Promise<void>;
|
|
51
|
-
}>;
|
|
66
|
+
open(path: string, flags: 'wx', mode: number): Promise<StagedFile>;
|
|
52
67
|
unlink(path: string): Promise<void>;
|
|
53
|
-
publish(staged: string, target: string,
|
|
68
|
+
publish(staged: string, target: string, options: AtomicPublishOptions): Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
/** How the staged bytes of one atomic write are produced and vetted. */
|
|
71
|
+
export interface AtomicFileStage<T> {
|
|
72
|
+
/** Fills the staged file; a throw discards the staging, and the result is what the write returns once published. */
|
|
73
|
+
fill(file: StagedFile): Promise<T>;
|
|
74
|
+
/** Receives a failure to remove the staging file after a failed write. */
|
|
75
|
+
onCleanupError?(error: unknown): void;
|
|
54
76
|
}
|
|
55
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* The one staging sequence behind every asynchronous atomic write: exclusive
|
|
79
|
+
* create, fill, chmod, fsync, publication, and removal of the
|
|
80
|
+
* staging file on any failure. Also the internal syscall seam for
|
|
81
|
+
* publication-order and precommit fault controls.
|
|
82
|
+
*/
|
|
83
|
+
export declare function writeAtomicFileStaged<T>(target: string, stage: AtomicFileStage<T>, options: WriteFileAtomicOptions, io?: AtomicFileWriteIO): Promise<T>;
|
|
84
|
+
/** {@link writeAtomicFileStaged} for bytes already in memory. */
|
|
56
85
|
export declare function writeAtomicFileData(target: string, data: Uint8Array | string, options: WriteFileAtomicOptions, io?: AtomicFileWriteIO): Promise<void>;
|
|
86
|
+
/** The staged file of the synchronous form. */
|
|
87
|
+
interface StagedFileSync {
|
|
88
|
+
write(bytes: Uint8Array, offset: number, length: number): number;
|
|
89
|
+
chmod(mode: number): void;
|
|
90
|
+
sync(): void;
|
|
91
|
+
close(): void;
|
|
92
|
+
}
|
|
93
|
+
interface AtomicFileWriteSyncIO {
|
|
94
|
+
open(path: string, flags: 'wx', mode: number): StagedFileSync;
|
|
95
|
+
unlink(path: string): void;
|
|
96
|
+
publish(staged: string, target: string, options: AtomicPublishOptions): void;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The synchronous form of {@link writeFileAtomic}, with the same guarantees in
|
|
100
|
+
* the same order, and the same internal syscall seam.
|
|
101
|
+
*/
|
|
102
|
+
export declare function writeAtomicFileDataSync(target: string, data: Uint8Array | string, options: WriteFileAtomicOptions, io?: AtomicFileWriteSyncIO): void;
|
|
57
103
|
/** The synchronous form of {@link writeFileAtomic}, with the same guarantees in the same order. */
|
|
58
104
|
export declare function writeFileAtomicSync(target: string, data: Uint8Array | string, options?: WriteFileAtomicOptions): void;
|
|
59
105
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-file.d.ts","sourceRoot":"","sources":["../../src/internal/atomic-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"atomic-file.d.ts","sourceRoot":"","sources":["../../src/internal/atomic-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,sBAAsB,CAAC;AAI9B,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CAC5C;AAQD,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kGAAkG;AAClG,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,oHAAoH;IACpH,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,0EAA0E;IAC1E,cAAc,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACvC;AAQD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,GAAE,iBAAgE,GACnE,OAAO,CAAC,CAAC,CAAC,CAwBZ;AAED,iEAAiE;AACjE,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,CAAC,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,+CAA+C;AAC/C,UAAU,cAAc;IACtB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACjE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;CACf;AAED,UAAU,qBAAqB;IAC7B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC9E;AAgBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,GAAE,qBAAkC,GACrC,IAAI,CAmCN;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,MAAM,EACzB,OAAO,GAAE,sBAA2B,GACnC,IAAI,CAEN"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when the new file is already in place but a follow-up step (`phase`) failed; the
|
|
3
|
+
* content is published, so do not treat this as a failed write.
|
|
4
|
+
*/
|
|
2
5
|
export declare class AtomicFilePublicationError extends Error {
|
|
3
6
|
readonly phase: 'cleanup' | 'directory-sync' | 'directory-close';
|
|
4
7
|
readonly published = true;
|
|
5
8
|
constructor(phase: 'cleanup' | 'directory-sync' | 'directory-close', cause: unknown);
|
|
6
9
|
}
|
|
7
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Native publication syscalls; injectable only at this internal IO boundary for fault
|
|
12
|
+
* controls.
|
|
13
|
+
*/
|
|
8
14
|
export interface PublicationIO {
|
|
9
15
|
rename(from: string, to: string): Promise<void>;
|
|
10
16
|
link(from: string, to: string): Promise<void>;
|
|
@@ -14,6 +20,35 @@ export interface PublicationIO {
|
|
|
14
20
|
close(): Promise<void>;
|
|
15
21
|
}>;
|
|
16
22
|
}
|
|
17
|
-
|
|
18
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The synchronous counterpart of {@link PublicationIO}, with the same fault-control role.
|
|
25
|
+
*/
|
|
26
|
+
export interface PublicationSyncIO {
|
|
27
|
+
rename(from: string, to: string): void;
|
|
28
|
+
link(from: string, to: string): void;
|
|
29
|
+
unlink(path: string): void;
|
|
30
|
+
open(path: string, flags: 'r'): {
|
|
31
|
+
sync(): void;
|
|
32
|
+
close(): void;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Directory fsync needs a directory descriptor, which Windows does not provide. */
|
|
36
|
+
export declare function assertDirectoryDurability(): void;
|
|
37
|
+
/** Make a rename, link or unlink inside `path` durable: the one directory fsync. */
|
|
38
|
+
export declare function syncDirectory(path: string, io?: PublicationIO): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* How far an atomic write is made durable: `'none'` neither syncs the bytes nor the parent,
|
|
41
|
+
* `'file'` syncs the staged bytes before publication, `'directory'` also syncs the parent after it.
|
|
42
|
+
*/
|
|
43
|
+
export type AtomicDurability = 'none' | 'file' | 'directory';
|
|
44
|
+
/**
|
|
45
|
+
* How one staged file becomes the target: `replace` overwrites, otherwise an existing target
|
|
46
|
+
* is refused.
|
|
47
|
+
*/
|
|
48
|
+
export interface AtomicPublishOptions {
|
|
49
|
+
readonly replace: boolean;
|
|
50
|
+
readonly durability: AtomicDurability;
|
|
51
|
+
}
|
|
52
|
+
export declare function publishAtomicFile(staged: string, target: string, { replace, durability }: AtomicPublishOptions, io?: PublicationIO): Promise<void>;
|
|
53
|
+
export declare function publishAtomicFileSync(staged: string, target: string, { replace, durability }: AtomicPublishOptions, io?: PublicationSyncIO): void;
|
|
19
54
|
//# sourceMappingURL=atomic-publication.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-publication.d.ts","sourceRoot":"","sources":["../../src/internal/atomic-publication.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"atomic-publication.d.ts","sourceRoot":"","sources":["../../src/internal/atomic-publication.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;aAGjC,KAAK,EAAE,SAAS,GAAG,gBAAgB,GAAG,iBAAiB;IAFzE,QAAQ,CAAC,SAAS,QAAQ;IAC1B,YACkB,KAAK,EAAE,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,EACvE,KAAK,EAAE,OAAO,EAIf;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5F;AAGD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG;QAAE,IAAI,IAAI,IAAI,CAAC;QAAC,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC;CACjE;AAWD,oFAAoF;AACpF,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAED,oFAAoF;AACpF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,aAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3F;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,oBAAoB,EAC7C,EAAE,GAAE,aAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,oBAAoB,EAC7C,EAAE,GAAE,iBAA8B,GACjC,IAAI,CA+BN"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one name every staged file of an atomic write carries, and the means to
|
|
3
|
+
* recognise and remove the ones a killed process left behind.
|
|
4
|
+
*
|
|
5
|
+
* A staging file lives in the target's own directory until it is renamed or
|
|
6
|
+
* linked onto the target. A process killed between the exclusive create and
|
|
7
|
+
* the publication (SIGKILL, OOM, power loss) leaves it there, and no later
|
|
8
|
+
* write of this library touches it: its name is random, so nothing could tell
|
|
9
|
+
* an abandoned one from a write in flight except its age. That judgement is the
|
|
10
|
+
* caller's, so the caller is given the predicate and an age-bounded sweep.
|
|
11
|
+
*
|
|
12
|
+
* The name form is a public contract: `.stitchkit-` + 24 lowercase hex digits +
|
|
13
|
+
* `.tmp`. The writer and the predicate are built from the constants below, so
|
|
14
|
+
* they cannot disagree; changing the form is a breaking change of
|
|
15
|
+
* `stitchkit/files`.
|
|
16
|
+
*/
|
|
17
|
+
/** A fresh staging file name; fixed length, so a long target name cannot push it past NAME_MAX. */
|
|
18
|
+
export declare function stagingName(): string;
|
|
19
|
+
/** A fresh staging path beside `target`: the rename onto it must not cross a filesystem. */
|
|
20
|
+
export declare function stagingPath(target: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* True when `name` (a directory entry, not a path) is the staging file of an atomic write
|
|
23
|
+
* of this library. The form is a stable public contract; changing it is a breaking change.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isAtomicStagingName(name: string): boolean;
|
|
26
|
+
/** Options of {@link sweepAtomicStaging}. */
|
|
27
|
+
export interface SweepAtomicStagingOptions {
|
|
28
|
+
/** The directory to sweep; its subdirectories are never entered. */
|
|
29
|
+
directory: string;
|
|
30
|
+
/**
|
|
31
|
+
* Only a staging file whose last modification is older than this many milliseconds is
|
|
32
|
+
* removed. Required and positive: it must exceed the longest write in flight, or the
|
|
33
|
+
* sweep removes the staging of a write that is still running.
|
|
34
|
+
*/
|
|
35
|
+
olderThanMs: number;
|
|
36
|
+
/** Stops the sweep between entries; files already removed stay removed. */
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove the abandoned staging files of atomic writes from one directory and return their
|
|
41
|
+
* names. Only regular files matching {@link isAtomicStagingName} and older than `olderThanMs`
|
|
42
|
+
* are removed; a symlink, a directory or any other entry is left alone, and nothing is
|
|
43
|
+
* followed or recursed into. A `directory` that does not exist holds nothing to sweep and
|
|
44
|
+
* yields `[]`; any other listing failure (a file in its place, a denied read) throws.
|
|
45
|
+
*/
|
|
46
|
+
export declare function sweepAtomicStaging(options: SweepAtomicStagingOptions): Promise<string[]>;
|
|
47
|
+
//# sourceMappingURL=atomic-staging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-staging.d.ts","sourceRoot":"","sources":["../../src/internal/atomic-staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,mGAAmG;AACnG,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,6CAA6C;AAC7C,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAQD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BnB"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
ino: number;
|
|
4
|
-
size: number;
|
|
5
|
-
nlink: number;
|
|
6
|
-
mtimeMs: number;
|
|
7
|
-
ctimeMs: number;
|
|
8
|
-
}
|
|
1
|
+
import { type FileHandle } from 'node:fs/promises';
|
|
2
|
+
import type { FileObservation } from './file-observation.js';
|
|
9
3
|
interface FileReadStat extends FileObservation {
|
|
10
4
|
isFile(): boolean;
|
|
11
5
|
}
|
|
@@ -19,15 +13,29 @@ interface FileReadDescriptor {
|
|
|
19
13
|
export declare class BoundedFileReadError extends Error {
|
|
20
14
|
readonly code: 'FILE_UNSUPPORTED' | 'FILE_NOT_REGULAR' | 'FILE_UNSAFE_LINK' | 'FILE_TOO_LARGE' | 'FILE_CHANGED';
|
|
21
15
|
readonly observation?: FileObservation | undefined;
|
|
22
|
-
constructor(code: 'FILE_UNSUPPORTED' | 'FILE_NOT_REGULAR' | 'FILE_UNSAFE_LINK' | 'FILE_TOO_LARGE' | 'FILE_CHANGED', message: string, observation?: FileObservation | undefined);
|
|
16
|
+
constructor(code: 'FILE_UNSUPPORTED' | 'FILE_NOT_REGULAR' | 'FILE_UNSAFE_LINK' | 'FILE_TOO_LARGE' | 'FILE_CHANGED', message: string, observation?: FileObservation | undefined, options?: ErrorOptions);
|
|
23
17
|
}
|
|
24
|
-
export interface
|
|
18
|
+
export interface FileOpenOptions {
|
|
19
|
+
/** Refuse a symlink at the leaf: the open itself does not follow it. Without it a symlink is followed. */
|
|
25
20
|
rejectSymlinks?: boolean;
|
|
21
|
+
/** Require descriptor nlink===1; transient publication links are also refused. */
|
|
26
22
|
singleLink?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface BoundedFileReadOptions extends FileOpenOptions {
|
|
27
25
|
stable?: boolean;
|
|
28
26
|
signal?: AbortSignal;
|
|
29
27
|
}
|
|
30
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Open a regular file by descriptor for a caller that streams it; the caller closes the
|
|
30
|
+
* handle.
|
|
31
|
+
*/
|
|
32
|
+
export declare function openRegularFile(target: string, options?: FileOpenOptions): Promise<{
|
|
33
|
+
handle: FileHandle;
|
|
34
|
+
before: FileObservation;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* The descriptor decides kind/link/stability; bytes are capped before allocation grows.
|
|
38
|
+
*/
|
|
31
39
|
export declare function readBoundedFile(target: string, maxBytes: number, options?: BoundedFileReadOptions, openDescriptor?: (path: string, flags: number) => Promise<FileReadDescriptor>): Promise<{
|
|
32
40
|
bytes: Uint8Array;
|
|
33
41
|
observation: FileObservation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-file-read.d.ts","sourceRoot":"","sources":["../../src/internal/bounded-file-read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bounded-file-read.d.ts","sourceRoot":"","sources":["../../src/internal/bounded-file-read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU,YAAa,SAAQ,eAAe;IAC5C,MAAM,IAAI,OAAO,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,IAAI,EACT,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc;IAElB,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe;IARxC,YACW,IAAI,EACT,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,EAClB,OAAO,EAAE,MAAM,EACN,WAAW,CAAC,EAAE,eAAe,YAAA,EACtC,OAAO,CAAC,EAAE,YAAY,EAIvB;CACF;AAWD,MAAM,WAAW,eAAe;IAC9B,0GAA0G;IAC1G,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAyDD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CAE1D;AASD;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,EACpC,cAAc,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAQ,GAClF,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,CAAC,CAiC9D;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F,EACD,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-lines.d.ts","sourceRoot":"","sources":["../../src/internal/bounded-lines.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bounded-lines.d.ts","sourceRoot":"","sources":["../../src/internal/bounded-lines.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,yBAAyB,QAAc,CAAC;AAgBrD,yEAAyE;AACzE,wBAAuB,oBAAoB,CACzC,QAAQ,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,mBAAmB,UAAQ,GAC1B,cAAc,CAAC,MAAM,CAAC,CAqCxB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `run` with a handle that is closed afterwards on every path. A failure of
|
|
3
|
+
* `run` is the one reported; a close failure is reported only when `run`
|
|
4
|
+
* succeeded, because the first cause is the one a caller can act on.
|
|
5
|
+
*/
|
|
6
|
+
export declare function closeAfter<T>(handle: {
|
|
7
|
+
close(): Promise<void>;
|
|
8
|
+
}, run: () => Promise<T>): Promise<T>;
|
|
9
|
+
/** The synchronous form of {@link closeAfter}, with the same error order. */
|
|
10
|
+
export declare function closeAfterSync<T>(close: () => void, run: () => T): T;
|
|
11
|
+
//# sourceMappingURL=close-after.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-after.d.ts","sourceRoot":"","sources":["../../src/internal/close-after.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAClC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAcpE"}
|
|
@@ -14,4 +14,14 @@ export declare function withDeadline(value: unknown, timeoutMs: number): Promise
|
|
|
14
14
|
} | {
|
|
15
15
|
settled: false;
|
|
16
16
|
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Run `body` under the caller's signal and a deadline.
|
|
19
|
+
*
|
|
20
|
+
* One implementation of "caller signal plus timer": the signal handed to `body` aborts
|
|
21
|
+
* with the caller's own reason, or with `makeReason()` when `timeoutMs` passes. `body` owns its own cleanup, so the returned promise settles only when `body` does; a
|
|
22
|
+
* body that may ignore its signal wraps the wait it cannot trust in `raceAbort`. The caller's
|
|
23
|
+
* signal is only read, never changed. The timer is cleared on every outcome and is a normal
|
|
24
|
+
* (referenced) timer, so a pending wait keeps the process alive until its deadline.
|
|
25
|
+
*/
|
|
26
|
+
export declare function withSignalDeadline<T>(timeoutMs: number, caller: AbortSignal | undefined, makeReason: () => unknown, body: (signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
17
27
|
//# sourceMappingURL=deadline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deadline.d.ts","sourceRoot":"","sources":["../../src/internal/deadline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deadline.d.ts","sourceRoot":"","sources":["../../src/internal/deadline.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC,CAiBjE;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,OAAO,EACzB,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC,CAaZ"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
stat(): Promise<Stats>;
|
|
4
|
-
read(buffer: Buffer, offset: number, length: number, position: number): Promise<{
|
|
5
|
-
bytesRead: number;
|
|
6
|
-
}>;
|
|
7
|
-
close(): Promise<void>;
|
|
8
|
-
}
|
|
1
|
+
import { readBoundedFile } from './bounded-file-read.js';
|
|
2
|
+
import type { FileObservation } from './file-observation.js';
|
|
9
3
|
export declare class LockRecordError extends Error {
|
|
10
4
|
readonly code: 'LOCK_UNSAFE_RECORD' | 'LOCK_RECORD_CHANGED' | 'LOCK_RECORD_TOO_LARGE';
|
|
11
5
|
name: string;
|
|
12
6
|
constructor(code: 'LOCK_UNSAFE_RECORD' | 'LOCK_RECORD_CHANGED' | 'LOCK_RECORD_TOO_LARGE', message: string);
|
|
13
7
|
}
|
|
14
|
-
/** A descriptor-bound observation
|
|
15
|
-
export declare function readLockRecord(path: string, openDescriptor
|
|
8
|
+
/** A descriptor-bound observation of a lock file: a regular, single-link, stable, capped read. */
|
|
9
|
+
export declare function readLockRecord(path: string, { openDescriptor, signal, singleLink, }?: {
|
|
10
|
+
openDescriptor?: Parameters<typeof readBoundedFile>[3];
|
|
11
|
+
signal?: AbortSignal;
|
|
12
|
+
/** `false` only for a lock whose second name was proven to be its own staging file. */
|
|
13
|
+
singleLink?: boolean;
|
|
14
|
+
}): Promise<{
|
|
16
15
|
text: string;
|
|
17
|
-
info:
|
|
16
|
+
info: FileObservation;
|
|
18
17
|
}>;
|
|
19
|
-
export {};
|
|
20
18
|
//# sourceMappingURL=exclusive-lock-read.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exclusive-lock-read.d.ts","sourceRoot":"","sources":["../../src/internal/exclusive-lock-read.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"exclusive-lock-read.d.ts","sourceRoot":"","sources":["../../src/internal/exclusive-lock-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1D,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,uBAAuB;IAF9E,IAAI,SAAqB;IAClC,YACW,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,uBAAuB,EACrF,OAAO,EAAE,MAAM,EAGhB;CACF;AAUD,kGAAkG;AAClG,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,EACE,cAAc,EACd,MAAM,EACN,UAAiB,GAClB,GAAE;IACD,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAiBlD"}
|
|
@@ -43,8 +43,8 @@ export interface ExclusiveLockAttemptOptions {
|
|
|
43
43
|
readonly reclaim: boolean;
|
|
44
44
|
readonly machineIdentity?: string;
|
|
45
45
|
/**
|
|
46
|
-
* How old a lock with no readable owner must be before it is taken. Absent
|
|
47
|
-
*
|
|
46
|
+
* How old a lock file with no readable owner must be before it is taken. Absent
|
|
47
|
+
* or `null`, such a file is never taken: it may belong to a live older writer.
|
|
48
48
|
*/
|
|
49
49
|
readonly ownerlessGraceMs?: number | null;
|
|
50
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exclusive-lock.d.ts","sourceRoot":"","sources":["../../src/internal/exclusive-lock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exclusive-lock.d.ts","sourceRoot":"","sources":["../../src/internal/exclusive-lock.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,oBAAoB,CAAC;AAG5B,gDAAgD;AAChD,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;iBAO5B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,wCAAwC;AACxC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,yEAAyE;IACzE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,uFAAuF;IACvF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IACE,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC;CAC7C,CAAC;AA8VN;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,2BAA2B,EACpC,KAAK,SAAI,GACR,OAAO,CAAC,oBAAoB,CAAC,CAgC/B;AAED,gFAAgF;AAChF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File metadata (device, inode, size, link count, times) captured at one moment, used to tell
|
|
3
|
+
* whether a file changed between reads. It lives apart from the descriptor readers so the public
|
|
4
|
+
* declarations that name it do not pull in a file-handle type.
|
|
5
|
+
*/
|
|
6
|
+
export interface FileObservation {
|
|
7
|
+
dev: number;
|
|
8
|
+
ino: number;
|
|
9
|
+
size: number;
|
|
10
|
+
nlink: number;
|
|
11
|
+
mtimeMs: number;
|
|
12
|
+
ctimeMs: number;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=file-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-observation.d.ts","sourceRoot":"","sources":["../../src/internal/file-observation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Why `canonicalJson` refused a value. `depth`, `nodes` and `bytes` are the
|
|
3
|
+
* caller's limits being exceeded; `cycle`, `negative-zero` and `not-json` say
|
|
4
|
+
* the value is not JSON data at all.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export type CanonicalJsonRefusal = 'cycle' | 'negative-zero' | 'depth' | 'nodes' | 'bytes' | 'not-json';
|
|
7
|
+
export interface JsonDataLimits {
|
|
7
8
|
maxDepth: number;
|
|
8
9
|
maxNodes: number;
|
|
9
10
|
maxBytes?: number;
|
|
10
11
|
omitObjectUndefined: boolean;
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Read the value as `z.json()` does: `-0` is admitted as `0` and an own
|
|
14
|
+
* `__proto__` member is dropped. The agent store's digests were taken that way.
|
|
15
|
+
*/
|
|
16
|
+
zodJson?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Predicate form of {@link jsonDataRefusal}. */
|
|
19
|
+
export declare function isJsonData(value: unknown, limits: JsonDataLimits, snapshot?: {
|
|
12
20
|
value?: unknown;
|
|
13
21
|
}): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Shared descriptor traversal; `undefined` admits the value and a reason names the first refusal.
|
|
24
|
+
* A snapshot sink captures admitted data without rereading the caller;
|
|
25
|
+
* predicate-only validation allocates no payload copy and skips absent byte accounting.
|
|
26
|
+
* Limits bound admitted data, not arbitrary JavaScript executed inside Proxy traps.
|
|
27
|
+
*/
|
|
28
|
+
export declare function jsonDataRefusal(value: unknown, limits: JsonDataLimits, snapshot?: {
|
|
29
|
+
value?: unknown;
|
|
30
|
+
}): CanonicalJsonRefusal | undefined;
|
|
14
31
|
//# sourceMappingURL=json-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-data.d.ts","sourceRoot":"","sources":["../../src/internal/json-data.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"json-data.d.ts","sourceRoot":"","sources":["../../src/internal/json-data.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,eAAe,GACf,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,oBAAoB,GAAG,SAAS,CA4GlC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refuse a limit that is not a positive safe integer; `undefined` means "not set" and passes.
|
|
3
|
+
*
|
|
4
|
+
* The one place the rule and its message live. `name` is the full subject of the
|
|
5
|
+
* message ("maxBytes", "Contract \"x\" maxJsonBodyBytes"); `errorType` is the error
|
|
6
|
+
* class the owning API already throws.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertPositiveSafeInteger(name: string, value: number | undefined, errorType?: new (message: string) => Error): void;
|
|
9
|
+
//# sourceMappingURL=positive-integer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positive-integer.d.ts","sourceRoot":"","sources":["../../src/internal/positive-integer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,GAAE,KAAK,OAAO,EAAE,MAAM,KAAK,KAAiB,GACpD,IAAI,CAIN"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Identity of one running process (boot id, PID namespace, start tick); a bare PID can be
|
|
4
|
+
* reused, this triple cannot.
|
|
5
|
+
*/
|
|
2
6
|
export declare const ProcessInstanceSchema: z.ZodObject<{
|
|
3
7
|
platform: z.ZodEnum<{
|
|
4
8
|
darwin: "darwin";
|
|
@@ -8,8 +12,14 @@ export declare const ProcessInstanceSchema: z.ZodObject<{
|
|
|
8
12
|
namespace: z.ZodString;
|
|
9
13
|
startId: z.ZodString;
|
|
10
14
|
}, z.core.$strict>;
|
|
15
|
+
/**
|
|
16
|
+
* A process identity to store next to its PID, so a later check can tell the same process from
|
|
17
|
+
* a reused PID.
|
|
18
|
+
*/
|
|
11
19
|
export type ProcessInstance = z.infer<typeof ProcessInstanceSchema>;
|
|
12
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* An unavailable observation preserves its native or validation cause; it never proves death.
|
|
22
|
+
*/
|
|
13
23
|
declare const ProcessInstanceObservationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
14
24
|
state: z.ZodLiteral<"observed">;
|
|
15
25
|
instance: z.ZodObject<{
|
|
@@ -25,11 +35,23 @@ declare const ProcessInstanceObservationSchema: z.ZodDiscriminatedUnion<[z.ZodOb
|
|
|
25
35
|
state: z.ZodLiteral<"unavailable">;
|
|
26
36
|
cause: z.ZodUnknown;
|
|
27
37
|
}, z.core.$strip>], "state">;
|
|
38
|
+
/**
|
|
39
|
+
* Result of `observeProcessInstance`: `observed` with the identity, or `unavailable` with the
|
|
40
|
+
* cause; unavailable never proves the process is dead.
|
|
41
|
+
*/
|
|
28
42
|
export type ProcessInstanceObservation = z.infer<typeof ProcessInstanceObservationSchema>;
|
|
43
|
+
/**
|
|
44
|
+
* Reads the identity of a running process on Linux or macOS; resolves `unavailable` instead of
|
|
45
|
+
* throwing when the platform cannot say, and rejects an invalid PID.
|
|
46
|
+
*/
|
|
29
47
|
export declare function observeProcessInstance(pid: number): Promise<ProcessInstanceObservation>;
|
|
30
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* /proc stat field 22 follows a command name that may itself contain spaces and parentheses.
|
|
50
|
+
*/
|
|
31
51
|
export declare function linuxProcessStart(stat: string, pid: number): string | null;
|
|
32
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* @internal procRoot permits kernel-format fixtures without changing a real process or boot.
|
|
54
|
+
*/
|
|
33
55
|
export declare function readProcessInstance(pid: number, procRoot?: string): Promise<ProcessInstance | null>;
|
|
34
56
|
/** @internal The fixture root is never a public owner option. */
|
|
35
57
|
export declare function observeProcessInstanceAt(pid: number, procRoot: string): Promise<ProcessInstanceObservation>;
|
|
@@ -49,15 +71,23 @@ declare const ProcessOwnerEvidenceSchema: z.ZodObject<{
|
|
|
49
71
|
}>;
|
|
50
72
|
cause: z.ZodOptional<z.ZodUnknown>;
|
|
51
73
|
}, z.core.$strip>;
|
|
74
|
+
/**
|
|
75
|
+
* What `probeProcessOwner` found: whether the PID is alive and whether it is still the
|
|
76
|
+
* recorded process; only `identity: 'matched'` means the same process.
|
|
77
|
+
*/
|
|
52
78
|
export type ProcessOwnerEvidence = z.infer<typeof ProcessOwnerEvidenceSchema>;
|
|
53
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Compare identities only inside one machine (the caller establishes that boundary).
|
|
81
|
+
*/
|
|
54
82
|
export declare function probeProcessOwner(pid: number, recorded: ProcessInstance | null | undefined): Promise<ProcessOwnerEvidence>;
|
|
55
83
|
interface ProcessOwnerProbes {
|
|
56
84
|
read(pid: number): Promise<ProcessInstance | null>;
|
|
57
85
|
liveness(pid: number): Promise<'alive' | 'gone'>;
|
|
58
86
|
observe?(pid: number): Promise<ProcessInstanceObservation>;
|
|
59
87
|
}
|
|
60
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* @internal Injection is for kernel-format controls, not a public ownership assertion.
|
|
90
|
+
*/
|
|
61
91
|
export declare function probeProcessOwnerWith(pid: number, recorded: ProcessInstance | null | undefined, probes?: ProcessOwnerProbes): Promise<ProcessOwnerEvidence>;
|
|
62
92
|
export {};
|
|
63
93
|
//# sourceMappingURL=process-instance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-instance.d.ts","sourceRoot":"","sources":["../../src/internal/process-instance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process-instance.d.ts","sourceRoot":"","sources":["../../src/internal/process-instance.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;kBAOvB,CAAC;AACZ;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,QAAA,MAAM,gCAAgC;;;;;;;;;;;;;;4BAGpC,CAAC;AAIH;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,0BAA0B,CAAC,CAGrC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,SAAU,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGjC;AAED,iEAAiE;AACjE,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,0BAA0B,CAAC,CAsDrC;AAED,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAQ/B;AAED,UAAU,kBAAkB;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC5C,MAAM,GAAE,kBAA2E,GAClF,OAAO,CAAC,oBAAoB,CAAC,CAuC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-fetch.d.ts","sourceRoot":"","sources":["../../src/internal/secure-fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secure-fetch.d.ts","sourceRoot":"","sources":["../../src/internal/secure-fetch.ts"],"names":[],"mappings":"AAkEA,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CA8D/C;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,OAAO,EACrB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAiDnB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;CACV;AAED;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,2BAA2B;CACzC;AA8CD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAkFjC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBnF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The longest delay a timer can wait (2^31 - 1 ms, about 24.8 days); a longer one fires at once. */
|
|
2
|
+
export declare const MAX_TIMER_MS = 2147483647;
|
|
3
|
+
/**
|
|
4
|
+
* Wait `ms`, or reject with the signal's reason as soon as `signal` aborts.
|
|
5
|
+
*
|
|
6
|
+
* One abortable pause for every retry, backoff and poll loop. The timer is cleared
|
|
7
|
+
* on abort and the listener is removed on completion, so a cancelled wait leaves
|
|
8
|
+
* nothing behind.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=timers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../src/internal/timers.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,eAAO,MAAM,YAAY,aAAgB,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
|
|
@@ -27,10 +27,11 @@ export interface ExclusiveLockOptions {
|
|
|
27
27
|
*/
|
|
28
28
|
machineIdentity?: string;
|
|
29
29
|
/**
|
|
30
|
-
* How old a lock with no readable owner must be before it is taken — the one
|
|
31
|
-
*
|
|
32
|
-
* file
|
|
33
|
-
*
|
|
30
|
+
* How old a lock file with no readable owner must be before it is taken — the one case
|
|
31
|
+
* where time decides. This library publishes a lock only with its owner record complete,
|
|
32
|
+
* so such a file is one an older writer left behind. Unset: the lock is never taken by age,
|
|
33
|
+
* while an abandoned empty reclaim guard is taken after 5 000 ms. A number governs both;
|
|
34
|
+
* `null` refuses both.
|
|
34
35
|
*/
|
|
35
36
|
ownerlessGraceMs?: number | null;
|
|
36
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-exclusive-lock.d.ts","sourceRoot":"","sources":["../../src/internal/with-exclusive-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"with-exclusive-lock.d.ts","sourceRoot":"","sources":["../../src/internal/with-exclusive-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gIAAgI;IAChI,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,qEAAqE;AACrE,qBAAa,kBAAmB,SAAQ,KAAK;IAGzC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,WAAW;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IALnC,IAAI,SAAwB;IACrC,YACW,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,WAAW,EACnD,KAAK,EAAE,MAAM;IACtB,wFAAwF;IAC/E,MAAM,EAAE,kBAAkB,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAG9B;CACF;AA2BD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC5C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,CAAC,CA2FZ"}
|