@plurnk/plurnk-service 1.0.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.
- package/.env.defaults +208 -0
- package/INSTALL.md +69 -0
- package/LICENSE +21 -0
- package/README.md +46 -0
- package/SPEC.md +1511 -0
- package/dist/Paths.d.ts +13 -0
- package/dist/Paths.d.ts.map +1 -0
- package/dist/Paths.js +60 -0
- package/dist/Paths.js.map +1 -0
- package/dist/content/edited-span.d.ts +2 -0
- package/dist/content/edited-span.d.ts.map +1 -0
- package/dist/content/edited-span.js +33 -0
- package/dist/content/edited-span.js.map +1 -0
- package/dist/content/index.d.ts +10 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +11 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/line-marker.d.ts +15 -0
- package/dist/content/line-marker.d.ts.map +1 -0
- package/dist/content/line-marker.js +21 -0
- package/dist/content/line-marker.js.map +1 -0
- package/dist/content/matcher.d.ts +44 -0
- package/dist/content/matcher.d.ts.map +1 -0
- package/dist/content/matcher.js +126 -0
- package/dist/content/matcher.js.map +1 -0
- package/dist/content/mimetype-binary.d.ts +8 -0
- package/dist/content/mimetype-binary.d.ts.map +1 -0
- package/dist/content/mimetype-binary.js +17 -0
- package/dist/content/mimetype-binary.js.map +1 -0
- package/dist/content/path-mimetype.d.ts +5 -0
- package/dist/content/path-mimetype.d.ts.map +1 -0
- package/dist/content/path-mimetype.js +15 -0
- package/dist/content/path-mimetype.js.map +1 -0
- package/dist/content/read-resolve.d.ts +20 -0
- package/dist/content/read-resolve.d.ts.map +1 -0
- package/dist/content/read-resolve.js +68 -0
- package/dist/content/read-resolve.js.map +1 -0
- package/dist/core/ChannelWrite.d.ts +100 -0
- package/dist/core/ChannelWrite.d.ts.map +1 -0
- package/dist/core/ChannelWrite.js +112 -0
- package/dist/core/ChannelWrite.js.map +1 -0
- package/dist/core/ChannelWrite.sql +84 -0
- package/dist/core/Db.d.ts +14 -0
- package/dist/core/Db.d.ts.map +1 -0
- package/dist/core/Db.js +7 -0
- package/dist/core/Db.js.map +1 -0
- package/dist/core/Dispatcher.d.ts +67 -0
- package/dist/core/Dispatcher.d.ts.map +1 -0
- package/dist/core/Dispatcher.js +1021 -0
- package/dist/core/Dispatcher.js.map +1 -0
- package/dist/core/Engine.d.ts +113 -0
- package/dist/core/Engine.d.ts.map +1 -0
- package/dist/core/Engine.js +1410 -0
- package/dist/core/Engine.js.map +1 -0
- package/dist/core/Engine.sql +538 -0
- package/dist/core/EnvFlags.d.ts +13 -0
- package/dist/core/EnvFlags.d.ts.map +1 -0
- package/dist/core/EnvFlags.js +84 -0
- package/dist/core/EnvFlags.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +45 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -0
- package/dist/core/ExecutorRegistry.js +128 -0
- package/dist/core/ExecutorRegistry.js.map +1 -0
- package/dist/core/PacketBuilder.d.ts +67 -0
- package/dist/core/PacketBuilder.d.ts.map +1 -0
- package/dist/core/PacketBuilder.js +524 -0
- package/dist/core/PacketBuilder.js.map +1 -0
- package/dist/core/PluginLoader.d.ts +17 -0
- package/dist/core/PluginLoader.d.ts.map +1 -0
- package/dist/core/PluginLoader.js +97 -0
- package/dist/core/PluginLoader.js.map +1 -0
- package/dist/core/ProposalLifecycle.d.ts +59 -0
- package/dist/core/ProposalLifecycle.d.ts.map +1 -0
- package/dist/core/ProposalLifecycle.js +215 -0
- package/dist/core/ProposalLifecycle.js.map +1 -0
- package/dist/core/ProviderInstantiate.d.ts +9 -0
- package/dist/core/ProviderInstantiate.d.ts.map +1 -0
- package/dist/core/ProviderInstantiate.js +156 -0
- package/dist/core/ProviderInstantiate.js.map +1 -0
- package/dist/core/SchemeRegistry.d.ts +26 -0
- package/dist/core/SchemeRegistry.d.ts.map +1 -0
- package/dist/core/SchemeRegistry.js +205 -0
- package/dist/core/SchemeRegistry.js.map +1 -0
- package/dist/core/StrikeRail.d.ts +28 -0
- package/dist/core/StrikeRail.d.ts.map +1 -0
- package/dist/core/StrikeRail.js +165 -0
- package/dist/core/StrikeRail.js.map +1 -0
- package/dist/core/TelemetryChannel.d.ts +37 -0
- package/dist/core/TelemetryChannel.d.ts.map +1 -0
- package/dist/core/TelemetryChannel.js +77 -0
- package/dist/core/TelemetryChannel.js.map +1 -0
- package/dist/core/TokenGauge.d.ts +16 -0
- package/dist/core/TokenGauge.d.ts.map +1 -0
- package/dist/core/TokenGauge.js +58 -0
- package/dist/core/TokenGauge.js.map +1 -0
- package/dist/core/caps/CapsResolve.d.ts +5 -0
- package/dist/core/caps/CapsResolve.d.ts.map +1 -0
- package/dist/core/caps/CapsResolve.js +13 -0
- package/dist/core/caps/CapsResolve.js.map +1 -0
- package/dist/core/caps/DbChannelCaps.d.ts +16 -0
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -0
- package/dist/core/caps/DbChannelCaps.js +41 -0
- package/dist/core/caps/DbChannelCaps.js.map +1 -0
- package/dist/core/caps/DbEntryCaps.d.ts +19 -0
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -0
- package/dist/core/caps/DbEntryCaps.js +28 -0
- package/dist/core/caps/DbEntryCaps.js.map +1 -0
- package/dist/core/caps/DbNotifyCaps.d.ts +8 -0
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -0
- package/dist/core/caps/DbNotifyCaps.js +35 -0
- package/dist/core/caps/DbNotifyCaps.js.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts +10 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.js +86 -0
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -0
- package/dist/core/caps/DbTagCaps.d.ts +17 -0
- package/dist/core/caps/DbTagCaps.d.ts.map +1 -0
- package/dist/core/caps/DbTagCaps.js +37 -0
- package/dist/core/caps/DbTagCaps.js.map +1 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts +18 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -0
- package/dist/core/caps/SchemeCtxImpl.js +42 -0
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -0
- package/dist/core/env-defaults.d.ts +19 -0
- package/dist/core/env-defaults.d.ts.map +1 -0
- package/dist/core/env-defaults.js +89 -0
- package/dist/core/env-defaults.js.map +1 -0
- package/dist/core/fork.d.ts +6 -0
- package/dist/core/fork.d.ts.map +1 -0
- package/dist/core/fork.js +84 -0
- package/dist/core/fork.js.map +1 -0
- package/dist/core/fork.sql +85 -0
- package/dist/core/git-membership.d.ts +23 -0
- package/dist/core/git-membership.d.ts.map +1 -0
- package/dist/core/git-membership.js +366 -0
- package/dist/core/git-membership.js.map +1 -0
- package/dist/core/git-state.d.ts +15 -0
- package/dist/core/git-state.d.ts.map +1 -0
- package/dist/core/git-state.js +67 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/packet-inject.d.ts +5 -0
- package/dist/core/packet-inject.d.ts.map +1 -0
- package/dist/core/packet-inject.js +48 -0
- package/dist/core/packet-inject.js.map +1 -0
- package/dist/core/packet-wire.d.ts +46 -0
- package/dist/core/packet-wire.d.ts.map +1 -0
- package/dist/core/packet-wire.js +453 -0
- package/dist/core/packet-wire.js.map +1 -0
- package/dist/core/path-decode.d.ts +2 -0
- package/dist/core/path-decode.d.ts.map +1 -0
- package/dist/core/path-decode.js +8 -0
- package/dist/core/path-decode.js.map +1 -0
- package/dist/core/plugin-attribution.d.ts +5 -0
- package/dist/core/plugin-attribution.d.ts.map +1 -0
- package/dist/core/plugin-attribution.js +39 -0
- package/dist/core/plugin-attribution.js.map +1 -0
- package/dist/core/plurnk-uri.d.ts +7 -0
- package/dist/core/plurnk-uri.d.ts.map +1 -0
- package/dist/core/plurnk-uri.js +52 -0
- package/dist/core/plurnk-uri.js.map +1 -0
- package/dist/core/resolveForLoop.d.ts +5 -0
- package/dist/core/resolveForLoop.d.ts.map +1 -0
- package/dist/core/resolveForLoop.js +12 -0
- package/dist/core/resolveForLoop.js.map +1 -0
- package/dist/core/results.d.ts +12 -0
- package/dist/core/results.d.ts.map +1 -0
- package/dist/core/results.js +27 -0
- package/dist/core/results.js.map +1 -0
- package/dist/core/run-cap.d.ts +8 -0
- package/dist/core/run-cap.d.ts.map +1 -0
- package/dist/core/run-cap.js +20 -0
- package/dist/core/run-cap.js.map +1 -0
- package/dist/core/run-ops.sql +43 -0
- package/dist/core/scheme-types.d.ts +45 -0
- package/dist/core/scheme-types.d.ts.map +1 -0
- package/dist/core/scheme-types.js +6 -0
- package/dist/core/scheme-types.js.map +1 -0
- package/dist/core/session-settings.d.ts +23 -0
- package/dist/core/session-settings.d.ts.map +1 -0
- package/dist/core/session-settings.js +55 -0
- package/dist/core/session-settings.js.map +1 -0
- package/dist/core/teaching.d.ts +3 -0
- package/dist/core/teaching.d.ts.map +1 -0
- package/dist/core/teaching.js +13 -0
- package/dist/core/teaching.js.map +1 -0
- package/dist/core/types.d.ts +3 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/digest/Digest.d.ts +20 -0
- package/dist/digest/Digest.d.ts.map +1 -0
- package/dist/digest/Digest.js +451 -0
- package/dist/digest/Digest.js.map +1 -0
- package/dist/digest/Digest.sql +1 -0
- package/dist/digest/digest.sql +55 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/schemes/EffectPolicy.d.ts +6 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -0
- package/dist/schemes/EffectPolicy.js +18 -0
- package/dist/schemes/EffectPolicy.js.map +1 -0
- package/dist/schemes/Exec.d.ts +39 -0
- package/dist/schemes/Exec.d.ts.map +1 -0
- package/dist/schemes/Exec.js +510 -0
- package/dist/schemes/Exec.js.map +1 -0
- package/dist/schemes/ExecOutputScheme.d.ts +20 -0
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -0
- package/dist/schemes/ExecOutputScheme.js +39 -0
- package/dist/schemes/ExecOutputScheme.js.map +1 -0
- package/dist/schemes/File.d.ts +42 -0
- package/dist/schemes/File.d.ts.map +1 -0
- package/dist/schemes/File.js +356 -0
- package/dist/schemes/File.js.map +1 -0
- package/dist/schemes/Known.d.ts +17 -0
- package/dist/schemes/Known.d.ts.map +1 -0
- package/dist/schemes/Known.js +40 -0
- package/dist/schemes/Known.js.map +1 -0
- package/dist/schemes/Log.d.ts +22 -0
- package/dist/schemes/Log.d.ts.map +1 -0
- package/dist/schemes/Log.js +269 -0
- package/dist/schemes/Log.js.map +1 -0
- package/dist/schemes/Log.sql +59 -0
- package/dist/schemes/Plurnk.d.ts +17 -0
- package/dist/schemes/Plurnk.d.ts.map +1 -0
- package/dist/schemes/Plurnk.js +46 -0
- package/dist/schemes/Plurnk.js.map +1 -0
- package/dist/schemes/Run.d.ts +25 -0
- package/dist/schemes/Run.d.ts.map +1 -0
- package/dist/schemes/Run.js +172 -0
- package/dist/schemes/Run.js.map +1 -0
- package/dist/schemes/Skill.d.ts +17 -0
- package/dist/schemes/Skill.d.ts.map +1 -0
- package/dist/schemes/Skill.js +40 -0
- package/dist/schemes/Skill.js.map +1 -0
- package/dist/schemes/Unknown.d.ts +17 -0
- package/dist/schemes/Unknown.d.ts.map +1 -0
- package/dist/schemes/Unknown.js +39 -0
- package/dist/schemes/Unknown.js.map +1 -0
- package/dist/schemes/_entry-chunk.d.ts +11 -0
- package/dist/schemes/_entry-chunk.d.ts.map +1 -0
- package/dist/schemes/_entry-chunk.js +100 -0
- package/dist/schemes/_entry-chunk.js.map +1 -0
- package/dist/schemes/_entry-crud.d.ts +31 -0
- package/dist/schemes/_entry-crud.d.ts.map +1 -0
- package/dist/schemes/_entry-crud.js +77 -0
- package/dist/schemes/_entry-crud.js.map +1 -0
- package/dist/schemes/_entry-crud.sql +101 -0
- package/dist/schemes/_entry-find.d.ts +32 -0
- package/dist/schemes/_entry-find.d.ts.map +1 -0
- package/dist/schemes/_entry-find.js +226 -0
- package/dist/schemes/_entry-find.js.map +1 -0
- package/dist/schemes/_entry-find.sql +54 -0
- package/dist/schemes/_entry-graph.d.ts +16 -0
- package/dist/schemes/_entry-graph.d.ts.map +1 -0
- package/dist/schemes/_entry-graph.js +94 -0
- package/dist/schemes/_entry-graph.js.map +1 -0
- package/dist/schemes/_entry-graph.sql +52 -0
- package/dist/schemes/_entry-manifest.d.ts +25 -0
- package/dist/schemes/_entry-manifest.d.ts.map +1 -0
- package/dist/schemes/_entry-manifest.js +266 -0
- package/dist/schemes/_entry-manifest.js.map +1 -0
- package/dist/schemes/_entry-ops.d.ts +32 -0
- package/dist/schemes/_entry-ops.d.ts.map +1 -0
- package/dist/schemes/_entry-ops.js +216 -0
- package/dist/schemes/_entry-ops.js.map +1 -0
- package/dist/schemes/_entry-ops.sql +31 -0
- package/dist/schemes/_entry-semantic.d.ts +38 -0
- package/dist/schemes/_entry-semantic.d.ts.map +1 -0
- package/dist/schemes/_entry-semantic.js +202 -0
- package/dist/schemes/_entry-semantic.js.map +1 -0
- package/dist/schemes/_entry-semantic.sql +95 -0
- package/dist/schemes/_entry-send.d.ts +11 -0
- package/dist/schemes/_entry-send.d.ts.map +1 -0
- package/dist/schemes/_entry-send.js +66 -0
- package/dist/schemes/_entry-send.js.map +1 -0
- package/dist/schemes/cosine.d.ts +4 -0
- package/dist/schemes/cosine.d.ts.map +1 -0
- package/dist/schemes/cosine.js +9 -0
- package/dist/schemes/cosine.js.map +1 -0
- package/dist/schemes/exec-abort.d.ts +15 -0
- package/dist/schemes/exec-abort.d.ts.map +1 -0
- package/dist/schemes/exec-abort.js +29 -0
- package/dist/schemes/exec-abort.js.map +1 -0
- package/dist/schemes/exec-env.d.ts +5 -0
- package/dist/schemes/exec-env.d.ts.map +1 -0
- package/dist/schemes/exec-env.js +34 -0
- package/dist/schemes/exec-env.js.map +1 -0
- package/dist/server/Daemon.d.ts +244 -0
- package/dist/server/Daemon.d.ts.map +1 -0
- package/dist/server/Daemon.js +1119 -0
- package/dist/server/Daemon.js.map +1 -0
- package/dist/server/client-input.d.ts +11 -0
- package/dist/server/client-input.d.ts.map +1 -0
- package/dist/server/client-input.js +145 -0
- package/dist/server/client-input.js.map +1 -0
- package/dist/server/clientTurn.d.ts +6 -0
- package/dist/server/clientTurn.d.ts.map +1 -0
- package/dist/server/clientTurn.js +23 -0
- package/dist/server/clientTurn.js.map +1 -0
- package/dist/server/clientTurn.sql +10 -0
- package/dist/server/dispatch-as-plurnk.d.ts +7 -0
- package/dist/server/dispatch-as-plurnk.d.ts.map +1 -0
- package/dist/server/dispatch-as-plurnk.js +23 -0
- package/dist/server/dispatch-as-plurnk.js.map +1 -0
- package/dist/server/drain.sql +124 -0
- package/dist/server/envelope.d.ts +53 -0
- package/dist/server/envelope.d.ts.map +1 -0
- package/dist/server/envelope.js +172 -0
- package/dist/server/envelope.js.map +1 -0
- package/dist/server/envelope.sql +76 -0
- package/dist/server/logEntry.d.ts +35 -0
- package/dist/server/logEntry.d.ts.map +1 -0
- package/dist/server/logEntry.js +49 -0
- package/dist/server/logEntry.js.map +1 -0
- package/dist/server/logEntry.sql +10 -0
- package/dist/server/loopDocs.d.ts +6 -0
- package/dist/server/loopDocs.d.ts.map +1 -0
- package/dist/server/loopDocs.js +22 -0
- package/dist/server/loopDocs.js.map +1 -0
- package/dist/server/noProposals.d.ts +6 -0
- package/dist/server/noProposals.d.ts.map +1 -0
- package/dist/server/noProposals.js +37 -0
- package/dist/server/noProposals.js.map +1 -0
- package/dist/server/seam-entry-read.sql +21 -0
- package/dist/server/seam-log-read.sql +21 -0
- package/dist/server/seam-loop.sql +9 -0
- package/dist/server/seam-proposal-list.sql +13 -0
- package/dist/server/version-info.d.ts +14 -0
- package/dist/server/version-info.d.ts.map +1 -0
- package/dist/server/version-info.js +69 -0
- package/dist/server/version-info.js.map +1 -0
- package/dist/server/yolo.d.ts +6 -0
- package/dist/server/yolo.d.ts.map +1 -0
- package/dist/server/yolo.js +64 -0
- package/dist/server/yolo.js.map +1 -0
- package/dist/service.d.ts +6 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +309 -0
- package/dist/service.js.map +1 -0
- package/migrations/0000-00-00.01_schema.sql +500 -0
- package/package.json +86 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FindStatement, ReadStatement } from "@plurnk/plurnk-grammar";
|
|
2
|
+
import type { PlurnkSchemeContext, SchemeManifest } from "../core/scheme-types.ts";
|
|
3
|
+
import type { Executor } from "../core/ExecutorRegistry.ts";
|
|
4
|
+
import type Exec from "./Exec.ts";
|
|
5
|
+
import { type ReadResult } from "./_entry-ops.ts";
|
|
6
|
+
import { type FindResult } from "./_entry-find.ts";
|
|
7
|
+
import { type ReadEntryResult } from "./_entry-crud.ts";
|
|
8
|
+
export default class ExecOutputScheme {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(executor: Executor, exec: Exec);
|
|
11
|
+
get manifest(): SchemeManifest;
|
|
12
|
+
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
|
|
13
|
+
find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
|
|
14
|
+
readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
|
|
15
|
+
kill(pathname: string, signal: number | null, ctx: PlurnkSchemeContext): Promise<{
|
|
16
|
+
status: number;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ExecOutputScheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecOutputScheme.d.ts","sourceRoot":"","sources":["../../src/schemes/ExecOutputScheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYnE,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAGjC,YAAY,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAGzC;IAED,IAAI,QAAQ,IAAI,cAAc,CAAoC;IAE5D,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAIK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpF;IAIK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAEzH;CACJ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import EntryOps from "./_entry-ops.js";
|
|
2
|
+
import EntryFind from "./_entry-find.js";
|
|
3
|
+
import EntryCrud from "./_entry-crud.js";
|
|
4
|
+
// #240 — an executor IS a scheme; its output lives at <tag>://. Each discovered
|
|
5
|
+
// executor registers this face under its runtime tag, so READ/FIND <tag>://<coord>
|
|
6
|
+
// read PRIOR output, scoped to the tag's stored entries via the executor's OWN
|
|
7
|
+
// manifest (name = the tag) — fixing the latent mis-scope where the shared `exec`
|
|
8
|
+
// handler read under scheme="exec" while output persists under scheme=<tag>. The
|
|
9
|
+
// face never executes (the run stays on EXEC); process-KILL by coordinate and the
|
|
10
|
+
// COPY/MOVE source-read are the only cross-cutting bits — KILL delegates to the one
|
|
11
|
+
// Exec handler that owns the spawn-abort state, the source-read is tag-scoped here.
|
|
12
|
+
// Every tag — sh, search, sqlite, MCP — reads through this one uniform path; an executor
|
|
13
|
+
// is a pure PRODUCER (run() writes channels), never a read/find face (execs#13).
|
|
14
|
+
export default class ExecOutputScheme {
|
|
15
|
+
#executor;
|
|
16
|
+
#exec;
|
|
17
|
+
constructor(executor, exec) {
|
|
18
|
+
this.#executor = executor;
|
|
19
|
+
this.#exec = exec;
|
|
20
|
+
}
|
|
21
|
+
get manifest() { return this.#executor.manifest; }
|
|
22
|
+
async read(statement, ctx) {
|
|
23
|
+
return EntryOps.readSessionEntry(statement, ctx, this.#executor.manifest);
|
|
24
|
+
}
|
|
25
|
+
async find(statement, ctx) {
|
|
26
|
+
return EntryFind.findSessionEntries(statement, ctx, this.#executor.manifest);
|
|
27
|
+
}
|
|
28
|
+
// COPY/MOVE source — read the output entry by pathname, tag-scoped (not via the
|
|
29
|
+
// shared Exec handler, which would scope to scheme="exec" and 404).
|
|
30
|
+
async readEntry(pathname, ctx) {
|
|
31
|
+
return EntryCrud.readEntry(pathname, ctx, this.#executor.manifest.name);
|
|
32
|
+
}
|
|
33
|
+
// Process-KILL by coordinate — the spawn-abort state (#activeAborts) lives on the
|
|
34
|
+
// one Exec handler, so the per-tag face delegates to it.
|
|
35
|
+
async kill(pathname, signal, ctx) {
|
|
36
|
+
return this.#exec.kill(pathname, signal, ctx);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ExecOutputScheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecOutputScheme.js","sourceRoot":"","sources":["../../src/schemes/ExecOutputScheme.ts"],"names":[],"mappings":"AAIA,OAAO,QAA6B,MAAM,iBAAiB,CAAC;AAC5D,OAAO,SAA8B,MAAM,kBAAkB,CAAC;AAC9D,OAAO,SAAmC,MAAM,kBAAkB,CAAC;AAEnE,gFAAgF;AAChF,mFAAmF;AACnF,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,yFAAyF;AACzF,iFAAiF;AACjF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,YAAY,QAAkB,EAAE,IAAU;QACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAqB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElE,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,gFAAgF;IAChF,oEAAoE;IACpE,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAwB;QACtD,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,kFAAkF;IAClF,yDAAyD;IACzD,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,MAAqB,EAAE,GAAwB;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;CACJ"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { EditStatement, ReadStatement, FindStatement } from "@plurnk/plurnk-grammar";
|
|
2
|
+
import type { SchemeManifest, PlurnkSchemeContext } from "../core/scheme-types.ts";
|
|
3
|
+
import type { ReadResult } from "./_entry-ops.ts";
|
|
4
|
+
import type { FindResult } from "./_entry-find.ts";
|
|
5
|
+
import type { ReadEntryResult, EntryData, WriteEntryResult, DeleteEntryResult } from "./_entry-crud.ts";
|
|
6
|
+
type EditResult = {
|
|
7
|
+
status: number;
|
|
8
|
+
body?: string;
|
|
9
|
+
attrs?: object;
|
|
10
|
+
error?: string;
|
|
11
|
+
};
|
|
12
|
+
type ApplyArgs = {
|
|
13
|
+
attrs: {
|
|
14
|
+
path?: string;
|
|
15
|
+
canonical?: string;
|
|
16
|
+
patched?: string;
|
|
17
|
+
span?: string;
|
|
18
|
+
deletePath?: string;
|
|
19
|
+
baseSig?: string | null;
|
|
20
|
+
existed?: boolean;
|
|
21
|
+
[k: string]: unknown;
|
|
22
|
+
};
|
|
23
|
+
body?: string;
|
|
24
|
+
};
|
|
25
|
+
type ApplyResult = {
|
|
26
|
+
status: number;
|
|
27
|
+
outcome?: string;
|
|
28
|
+
body?: string;
|
|
29
|
+
};
|
|
30
|
+
export default class File {
|
|
31
|
+
#private;
|
|
32
|
+
static manifest: SchemeManifest;
|
|
33
|
+
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
|
|
34
|
+
find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
|
|
35
|
+
readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
|
|
36
|
+
edit(statement: EditStatement, ctx: PlurnkSchemeContext): Promise<EditResult>;
|
|
37
|
+
writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext): Promise<WriteEntryResult>;
|
|
38
|
+
applyResolution(args: ApplyArgs, ctx: PlurnkSchemeContext): Promise<ApplyResult>;
|
|
39
|
+
deleteEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<DeleteEntryResult>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=File.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAc,MAAM,wBAAwB,CAAC;AAGtG,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQxG,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACzM,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA+CvE,MAAM,CAAC,OAAO,OAAO,IAAI;;IACrB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAY7B;IAOI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAQlF;IAiCK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAMlF;IAKK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAMpF;IA0DK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0BlF;IAQK,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CASxG;IAUK,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4FrF;IAMK,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOxF;CACJ"}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { mkdir, realpath, rm, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, relative, isAbsolute, join, matchesGlob, sep } from "node:path";
|
|
3
|
+
import { createPatch } from "diff";
|
|
4
|
+
import { decodePathParens } from "../core/path-decode.js";
|
|
5
|
+
import EntryOps from "./_entry-ops.js";
|
|
6
|
+
import EntryFind from "./_entry-find.js";
|
|
7
|
+
import EntryCrud from "./_entry-crud.js";
|
|
8
|
+
import { LineMarkerOps, MimetypeBinary, editedSpan } from "../content/index.js";
|
|
9
|
+
// Workspace root for file ops is sourced from `sessions.project_root`,
|
|
10
|
+
// supplied by the client at session.create (headless is forever; issue
|
|
11
|
+
// #150 wired the RPC; F.1 added the column). Server doesn't guess —
|
|
12
|
+
// the client owns workspace identity. If a session is headless
|
|
13
|
+
// (project_root=null), file ops fail at 400; the client either supplies
|
|
14
|
+
// a root or the op isn't appropriate for this session.
|
|
15
|
+
const loadSessionRoot = async (db, sessionId) => {
|
|
16
|
+
const row = await db.envelope_get_session.get({ id: sessionId });
|
|
17
|
+
return row?.project_root ?? null;
|
|
18
|
+
};
|
|
19
|
+
// The model may hand us an absolute disk path (echoed from exec/build output) instead of the
|
|
20
|
+
// workspace-relative key it sees in the manifest. An absolute path UNDER the project root
|
|
21
|
+
// normalizes back to its relative key — so it resolves to the member, not a 404 (READ) or a
|
|
22
|
+
// wrong CREATE nested under root (EDIT). Outside-root absolutes don't arise: the model only
|
|
23
|
+
// ever sees those members as their `../`-relative keys, never an absolute form.
|
|
24
|
+
const toWorkspaceRelative = (pathname, root) => pathname === root || pathname.startsWith(root + sep) ? `/${relative(root, pathname)}` : pathname;
|
|
25
|
+
// Detect mimetype from a file's path. Routes through the Mimetypes service
|
|
26
|
+
// when available; falls back to the text primitive (text/markdown). The
|
|
27
|
+
// `MimetypeBinary.normalizeAutoTextMimetype` wrapper ensures text/plain returned by the
|
|
28
|
+
// service is normalized to text/markdown — plurnk-service never auto-
|
|
29
|
+
// derives text/plain (see mimetype-binary.ts MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE).
|
|
30
|
+
const detectFileMimetype = async (canonical, ctx) => {
|
|
31
|
+
if (ctx.mimetypes !== undefined) {
|
|
32
|
+
const detected = await ctx.mimetypes.detect({ path: canonical });
|
|
33
|
+
return MimetypeBinary.normalizeAutoTextMimetype(detected);
|
|
34
|
+
}
|
|
35
|
+
return MimetypeBinary.TEXT_PRIMITIVE_MIMETYPE;
|
|
36
|
+
};
|
|
37
|
+
// SECURITY — File is entry-backed, identical to Known: read()/find()/readEntry()
|
|
38
|
+
// delegate to the shared Entry* helpers over the membership-materialized entries
|
|
39
|
+
// (scheme=null). The membership gate is now ENTRY-EXISTENCE — a non-member has no
|
|
40
|
+
// entry, so read/find/readEntry 404 it for free, the same invariant Known runs on
|
|
41
|
+
// (a gitignored `.env` is never a member → never an entry → never readable). Disk
|
|
42
|
+
// I/O is confined to the two edges that own it: the git-membership materialize-IN
|
|
43
|
+
// and edit()/applyResolution()'s proposal-gated write-OUT (§membership), where the
|
|
44
|
+
// containment/traversal checks live.
|
|
45
|
+
//
|
|
46
|
+
// writeEntry() is the proposal-gated write-back: a COPY/MOVE *into* file:/// is a disk
|
|
47
|
+
// write, so it flows through the SAME §membership gate as EDIT (#resolveWriteTarget) — a
|
|
48
|
+
// 202 proposal, then applyResolution() writes on accept — never an ungated overwrite (the
|
|
49
|
+
// `.env`-wipe this guard prevents). COPY/MOVE *from* file:/// is readEntry (read-only).
|
|
50
|
+
export default class File {
|
|
51
|
+
static manifest = {
|
|
52
|
+
name: "file",
|
|
53
|
+
storedScheme: null, // file rows persist bare (entries.scheme = NULL); renders as a bare path
|
|
54
|
+
channels: {}, // dynamic mimetype per file extension
|
|
55
|
+
defaultChannel: "body",
|
|
56
|
+
category: "data",
|
|
57
|
+
scope: "session",
|
|
58
|
+
writableBy: ["model", "client", "plugin"],
|
|
59
|
+
volatile: false,
|
|
60
|
+
modelVisible: true,
|
|
61
|
+
example: "<<READ(README.md)::READ",
|
|
62
|
+
documentation: "The project's workspace files (git-tracked members, shown as bare paths) — THE TASK'S FILES: when asked to change the project, EDIT these, not your notes or scratch. READ and FIND them like any entry; EDIT proposes a diff for review and only writes to disk once accepted — the review is normal, not a refusal, so propose the edit rather than working around it. Non-members are invisible, so you can't read or clobber a file outside the tracked surface.",
|
|
63
|
+
};
|
|
64
|
+
// Entry-backed, identical to Known (the unified-addressing promise): read the
|
|
65
|
+
// membership-materialized entry (scheme=null) through the shared helper. <L> /
|
|
66
|
+
// body / binary-415 / tag-404 are all handled there; a non-member has no entry
|
|
67
|
+
// → 404, the same gate Known runs on. Disk is reached only at the materialize
|
|
68
|
+
// and write-back edges (git-membership, applyResolution) — never on a read.
|
|
69
|
+
async read(statement, ctx) {
|
|
70
|
+
const r = await EntryOps.readSessionEntry(statement, ctx, File.manifest);
|
|
71
|
+
if (r.status !== 404)
|
|
72
|
+
return r;
|
|
73
|
+
// 404 fallback: the model may have used an absolute disk path (echoed from exec/build
|
|
74
|
+
// output) instead of the relative key it sees. Normalize + retry — an absolute-under-
|
|
75
|
+
// root member then resolves; anything else keeps the 404. No cost on the hit path.
|
|
76
|
+
const normalized = File.#normalizeFileTarget(statement, await loadSessionRoot(ctx.db, ctx.sessionId));
|
|
77
|
+
return normalized === statement ? r : EntryOps.readSessionEntry(normalized, ctx, File.manifest);
|
|
78
|
+
}
|
|
79
|
+
static #normalizeFileTarget(statement, root) {
|
|
80
|
+
const t = statement.target;
|
|
81
|
+
if (root === null || t === null)
|
|
82
|
+
return statement;
|
|
83
|
+
// A bare member parses as a LocalPath (`notes.md` / `/notes.md` → raw); a scheme'd
|
|
84
|
+
// one as a UrlPath (pathname). Normalize whichever the grammar produced to the `/rel`
|
|
85
|
+
// member key — the LOCAL form is what the model actually emits. regex isn't a path.
|
|
86
|
+
if (t.kind === "url") {
|
|
87
|
+
const norm = File.#toMemberKey(t.pathname, root);
|
|
88
|
+
return norm === t.pathname ? statement : { ...statement, target: { ...t, pathname: norm } };
|
|
89
|
+
}
|
|
90
|
+
if (t.kind === "local") {
|
|
91
|
+
const norm = File.#toMemberKey(t.raw, root);
|
|
92
|
+
return norm === t.raw ? statement : { ...statement, target: { ...t, raw: norm } };
|
|
93
|
+
}
|
|
94
|
+
return statement;
|
|
95
|
+
}
|
|
96
|
+
// Map any path form the model might type to its namespace member key `/rel`, so READ
|
|
97
|
+
// resolves a member the way writeEntry does (the parity that was missing — READ only
|
|
98
|
+
// normalized absolute disk paths). Two forms collapse to `/rel`: an absolute path under
|
|
99
|
+
// root (echoed from exec output) and a namespace-relative path — bare `notes.md`,
|
|
100
|
+
// `/notes.md`, or `sub/x`, which is what the model naturally copies from the catalog.
|
|
101
|
+
// A path escaping root is left unchanged → it stays a 404, so the membership boundary
|
|
102
|
+
// holds (the entry-existence gate has the final say; no disk is touched on a read).
|
|
103
|
+
static #toMemberKey(pathname, root) {
|
|
104
|
+
const abs = toWorkspaceRelative(pathname, root);
|
|
105
|
+
if (abs !== pathname)
|
|
106
|
+
return abs;
|
|
107
|
+
const relBare = relative(root, join(root, pathname));
|
|
108
|
+
return relBare === "" || relBare.startsWith("..") || isAbsolute(relBare) ? pathname : `/${relBare}`;
|
|
109
|
+
}
|
|
110
|
+
async find(statement, ctx) {
|
|
111
|
+
// Normalize the model-typed path to the `/rel` member key BEFORE the candidate
|
|
112
|
+
// glob — the parity READ/EDIT already have (§scheme-address). Without it a bare
|
|
113
|
+
// `notes.md` globs `notes.md*` and misses the canonical-stored `/notes.md`.
|
|
114
|
+
const normalized = File.#normalizeFileTarget(statement, await loadSessionRoot(ctx.db, ctx.sessionId));
|
|
115
|
+
return EntryFind.findSessionEntries(normalized, ctx, File.manifest);
|
|
116
|
+
}
|
|
117
|
+
// COPY/MOVE FROM file:/// — read-only, gated by entry-existence (a non-member
|
|
118
|
+
// has no entry → 404). The write-back side (writeEntry) is deliberately absent;
|
|
119
|
+
// see the SECURITY note above.
|
|
120
|
+
async readEntry(pathname, ctx) {
|
|
121
|
+
// §scheme-address — normalize the model-typed path (bare `brief.md`) to its `/rel` member key,
|
|
122
|
+
// the same parity READ/EDIT/deleteEntry have. Without it a COPY/MOVE FROM a bare file path
|
|
123
|
+
// misses the canonical-stored member and 404s a source that plainly exists.
|
|
124
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
125
|
+
return EntryCrud.readEntry(root === null ? pathname : File.#toMemberKey(pathname, root), ctx, null);
|
|
126
|
+
}
|
|
127
|
+
// §membership disk-write gate, shared by edit() and writeEntry() (the COPY/MOVE
|
|
128
|
+
// dest). Resolves the canonical path; enforces containment (traversal → 403),
|
|
129
|
+
// membership (existing non-member → 403, the `.env` protection), the read-only
|
|
130
|
+
// overlay (→ 403), and binary (→ 415); reads current content for the diff. A
|
|
131
|
+
// not-found path is fine — we propose to CREATE. ONE home for the gate: an edit
|
|
132
|
+
// and a copy into file:/// are the same disk write under the same review.
|
|
133
|
+
// §membership-edit-membership-gate — membership/containment/read-only/binary gate before any disk write
|
|
134
|
+
async #resolveWriteTarget(pathname, ctx) {
|
|
135
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
136
|
+
if (root === null)
|
|
137
|
+
return { ok: false, status: 400, error: "session has no project_root (headless is forever) — file ops need a session created with projectRoot" };
|
|
138
|
+
// An absolute disk path the model echoed → its relative key, so EDIT hits the member
|
|
139
|
+
// instead of proposing a wrong CREATE nested under root (the fileExists=false path).
|
|
140
|
+
pathname = toWorkspaceRelative(pathname, root);
|
|
141
|
+
let canonical;
|
|
142
|
+
// pathname is namespace-absolute (`/note`); join roots it at the workspace
|
|
143
|
+
// root — the leading slash is the namespace origin, not a filesystem path.
|
|
144
|
+
const requested = join(root, pathname);
|
|
145
|
+
let fileExists = true;
|
|
146
|
+
try {
|
|
147
|
+
canonical = await realpath(requested);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (err.code !== "ENOENT")
|
|
151
|
+
throw err;
|
|
152
|
+
canonical = requested;
|
|
153
|
+
fileExists = false;
|
|
154
|
+
}
|
|
155
|
+
const relBare = relative(root, canonical);
|
|
156
|
+
if (relBare.startsWith("..") || isAbsolute(relBare))
|
|
157
|
+
return { ok: false, status: 403, error: "path escapes workspace root" };
|
|
158
|
+
const rel = `/${relBare}`; // namespace-absolute entry key — matches the parser + membership storage
|
|
159
|
+
let original = "";
|
|
160
|
+
let baseSig = null; // the snapshot signature the proposal is computed against; null = create (assumed-absent)
|
|
161
|
+
if (fileExists) {
|
|
162
|
+
const member = await ctx.db.crud_get_member_sig.get({ session_id: ctx.sessionId, scheme: null, pathname: rel });
|
|
163
|
+
if (member === undefined)
|
|
164
|
+
return { ok: false, status: 403, error: "path is outside your workspace surface" };
|
|
165
|
+
const viewGlobs = (await ctx.db.crud_list_session_constraints.all({ session_id: ctx.sessionId }))
|
|
166
|
+
.filter((c) => c.effect === "view").map((c) => c.glob);
|
|
167
|
+
if (viewGlobs.some((g) => matchesGlob(relBare, g)))
|
|
168
|
+
return { ok: false, status: 403, error: "member is read-only" }; // view = read-only member, 403 on edit — §membership-overlay-view
|
|
169
|
+
// The diff base is the entry's snapshot — the body channel the model READ — not a fresh
|
|
170
|
+
// disk read. EDIT is naive against the view the model saw; the write-side CAS (applyResolution)
|
|
171
|
+
// guards the landing. baseSig is that snapshot's stat, carried with the proposal so a sibling
|
|
172
|
+
// run's reconcile can't advance it under the paused proposal. §membership-edit-write-cas
|
|
173
|
+
const snapshot = await ctx.db.ops_read_channel.get({ session_id: ctx.sessionId, scheme: null, pathname: rel, channel: "body" });
|
|
174
|
+
original = snapshot?.content ?? "";
|
|
175
|
+
baseSig = member.synced_sig;
|
|
176
|
+
}
|
|
177
|
+
const mimetype = await detectFileMimetype(canonical, ctx);
|
|
178
|
+
if (MimetypeBinary.isBinaryMimetype(mimetype))
|
|
179
|
+
return { ok: false, status: 415, error: `cannot write binary mimetype \`${mimetype}\`` };
|
|
180
|
+
return { ok: true, canonical, rel, fileExists, original, mimetype, baseSig };
|
|
181
|
+
}
|
|
182
|
+
// Edit op (task #42 canonical proposal consumer). Returns status=202
|
|
183
|
+
// with a udiff body for client review + attrs carrying the full patched
|
|
184
|
+
// content. Engine writes the proposed log entry, pauses dispatch, and
|
|
185
|
+
// calls applyResolution() (below) after the proposal accepts.
|
|
186
|
+
async edit(statement, ctx) {
|
|
187
|
+
if (statement.target === null)
|
|
188
|
+
return { status: 400, error: "EDIT requires a path" };
|
|
189
|
+
const pathname = statement.target.kind === "regex" ? statement.target.raw
|
|
190
|
+
: decodePathParens(statement.target.kind === "url" ? statement.target.pathname : statement.target.raw); // #239 item 4
|
|
191
|
+
const target = await this.#resolveWriteTarget(pathname, ctx);
|
|
192
|
+
if (!target.ok)
|
|
193
|
+
return { status: target.status, error: target.error };
|
|
194
|
+
const { canonical, rel, fileExists, original, mimetype, baseSig } = target;
|
|
195
|
+
// `<L>` line marker dispatches on file mimetype: JSON →
|
|
196
|
+
// LineMarkerOps.applyJsonItemEdit (structural item edit); otherwise →
|
|
197
|
+
// LineMarkerOps.applyLineMarkerEdit (line edit). On a non-existent file,
|
|
198
|
+
// body becomes content regardless of marker (per "Resolved ambiguities" §scheme).
|
|
199
|
+
const body = statement.body ?? "";
|
|
200
|
+
let patched;
|
|
201
|
+
if (statement.lineMarker !== null && fileExists) {
|
|
202
|
+
const result = MimetypeBinary.isJsonMimetype(mimetype)
|
|
203
|
+
? LineMarkerOps.applyJsonItemEdit(original, statement.lineMarker, body)
|
|
204
|
+
: LineMarkerOps.applyLineMarkerEdit(original, statement.lineMarker, body);
|
|
205
|
+
if (result.status !== 200)
|
|
206
|
+
return { status: result.status, error: result.error };
|
|
207
|
+
patched = result.result ?? "";
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
patched = body;
|
|
211
|
+
}
|
|
212
|
+
const patch = createPatch(rel, original, patched, "current", "proposed");
|
|
213
|
+
return { status: 202, body: patch, attrs: { path: rel, canonical, patch, patched, span: editedSpan(original, patched), baseSig, existed: fileExists } };
|
|
214
|
+
}
|
|
215
|
+
// COPY/MOVE INTO file:/// — the dest write. Same §membership gate as edit, same 202
|
|
216
|
+
// proposal + applyResolution path: a copy onto disk is a disk write and earns
|
|
217
|
+
// the identical human review. Dispatcher.#copyOrchestration propagates this 202;
|
|
218
|
+
// ProposalLifecycle.runApply routes the accept back here via the dest scheme;
|
|
219
|
+
// applyResolution() writes the file + registers the entry. The copied content
|
|
220
|
+
// is the source's body channel (full replacement — files are body-only).
|
|
221
|
+
async writeEntry(pathname, entry, ctx) {
|
|
222
|
+
const bodyChannel = entry.channels.body;
|
|
223
|
+
if (bodyChannel === undefined)
|
|
224
|
+
return { status: 400, created: false, entryId: null };
|
|
225
|
+
const target = await this.#resolveWriteTarget(pathname, ctx);
|
|
226
|
+
if (!target.ok)
|
|
227
|
+
return { status: target.status, created: false, entryId: null };
|
|
228
|
+
const { canonical, rel, fileExists, original, baseSig } = target;
|
|
229
|
+
const patched = bodyChannel.content;
|
|
230
|
+
const patch = createPatch(rel, original, patched, "current", "proposed");
|
|
231
|
+
return { status: 202, created: !fileExists, entryId: null, body: patch, attrs: { path: rel, canonical, patch, patched, span: editedSpan(original, patched), baseSig, existed: fileExists } };
|
|
232
|
+
}
|
|
233
|
+
// applyResolution — called by Engine.dispatch after a proposed log
|
|
234
|
+
// entry resolves with decision=accept. Two responsibilities:
|
|
235
|
+
// 1. Write the patched content to disk.
|
|
236
|
+
// 2. Register the file as an entry so it appears in the manifest and the
|
|
237
|
+
// model can READ its full landed work.
|
|
238
|
+
// The accepted result returns the editedSpan diff as its body, so the EDIT row
|
|
239
|
+
// itself carries the line-numbered confirmation of what changed — parity with the
|
|
240
|
+
// entry-scheme EDIT's span; default-folding reclaims it at the next turn boundary.
|
|
241
|
+
async applyResolution(args, ctx) {
|
|
242
|
+
const { attrs, body } = args;
|
|
243
|
+
// Delete-apply (deferred behind review — the KILL proposal, or the MOVE source-delete gated by
|
|
244
|
+
// its dest proposal): unlink the host file + deregister the entry on accept. A real unlink
|
|
245
|
+
// failure surfaces as 500, never a silent noop; ENOENT ⇒ file already gone, still deregister.
|
|
246
|
+
if (typeof attrs.deletePath === "string") {
|
|
247
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
248
|
+
if (root === null)
|
|
249
|
+
return { status: 500, outcome: "no project_root" };
|
|
250
|
+
try {
|
|
251
|
+
await rm(join(root, attrs.deletePath));
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
if (err.code !== "ENOENT")
|
|
255
|
+
return { status: 500, outcome: "delete_failed", body: err instanceof Error ? err.message : String(err) };
|
|
256
|
+
}
|
|
257
|
+
await EntryCrud.deleteEntry(attrs.deletePath, ctx, null);
|
|
258
|
+
return { status: 200 };
|
|
259
|
+
}
|
|
260
|
+
const canonical = attrs.canonical;
|
|
261
|
+
const relPath = attrs.path;
|
|
262
|
+
const patched = body ?? attrs.patched;
|
|
263
|
+
if (typeof canonical !== "string" || canonical.length === 0) {
|
|
264
|
+
return { status: 500, outcome: "applyResolution: missing attrs.canonical" };
|
|
265
|
+
}
|
|
266
|
+
if (typeof relPath !== "string" || relPath.length === 0) {
|
|
267
|
+
return { status: 500, outcome: "applyResolution: missing attrs.path" };
|
|
268
|
+
}
|
|
269
|
+
if (typeof patched !== "string") {
|
|
270
|
+
return { status: 500, outcome: "applyResolution: missing patched content" };
|
|
271
|
+
}
|
|
272
|
+
// CAS — the write-side twin of #materializeMember's read-gate (synced_sig === sig). The
|
|
273
|
+
// proposal was computed against the snapshot (body + baseSig); if disk drifted out-of-band
|
|
274
|
+
// since propose, the full-blob write would clobber it. Refuse and surface a write_conflict —
|
|
275
|
+
// the next reconcile narrates disk truth via FsDivergence; the model re-reads + re-proposes.
|
|
276
|
+
// No clever re-diff, no clobber. §membership-edit-write-cas
|
|
277
|
+
const baseSig = (args.attrs.baseSig ?? null);
|
|
278
|
+
const existed = args.attrs.existed === true; // proposal targeted an existing member (edit) vs a fresh create
|
|
279
|
+
let currentSig = null;
|
|
280
|
+
try {
|
|
281
|
+
const st = await stat(canonical);
|
|
282
|
+
currentSig = `${st.mtimeMs}:${st.size}`;
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
if (err.code !== "ENOENT")
|
|
286
|
+
throw err;
|
|
287
|
+
}
|
|
288
|
+
// Edit → CAS on the snapshot signature (a null baseSig is an un-materialized member with no
|
|
289
|
+
// recorded snapshot — no baseline to guard, so the write proceeds). Create → the proposal
|
|
290
|
+
// assumed an absent path, so any file present now is the conflict.
|
|
291
|
+
const conflict = existed ? (baseSig !== null && currentSig !== baseSig) : (currentSig !== null);
|
|
292
|
+
if (conflict) {
|
|
293
|
+
return { status: 409, outcome: `write_conflict: ${relPath} changed on disk since the proposal (expected ${existed ? baseSig : "absent"}, found ${currentSig ?? "absent"}) — re-read and re-propose` };
|
|
294
|
+
}
|
|
295
|
+
try {
|
|
296
|
+
// A write into a not-yet-existing subtree creates it — an accepted proposal must not
|
|
297
|
+
// die on a missing parent dir (the fan-out digest: tasks/… write_failed on ENOENT).
|
|
298
|
+
await mkdir(dirname(canonical), { recursive: true });
|
|
299
|
+
await writeFile(canonical, patched, "utf8");
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
return {
|
|
303
|
+
status: 500,
|
|
304
|
+
outcome: "write_failed",
|
|
305
|
+
body: err instanceof Error ? err.message : String(err),
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
// Register the file as an entry so it appears in the manifest
|
|
309
|
+
// under file:///<relPath> and is READ-able. mimetype is best-effort
|
|
310
|
+
// by file extension; .md → text/markdown, anything else → text/plain.
|
|
311
|
+
const mimetype = relPath.endsWith(".md") ? "text/markdown" : "text/plain";
|
|
312
|
+
try {
|
|
313
|
+
// scheme=null: the "file" scheme is a routing internal only;
|
|
314
|
+
// never stored. Entries.scheme stays NULL for filesystem rows
|
|
315
|
+
// so render-time bare-path output requires no special case.
|
|
316
|
+
const { entryId } = await EntryCrud.writeEntry(relPath, {
|
|
317
|
+
channels: { body: { content: patched, mimetype } },
|
|
318
|
+
tags: [],
|
|
319
|
+
}, ctx, null);
|
|
320
|
+
// Restamp synced_sig to the landed write so the next reconcile recognizes our own
|
|
321
|
+
// write as the synced state — not an FsDivergence narrated back at the model.
|
|
322
|
+
if (entryId !== null) {
|
|
323
|
+
const landed = await stat(canonical);
|
|
324
|
+
await ctx.db.crud_set_synced_sig.run({ entry_id: entryId, synced_sig: `${landed.mtimeMs}:${landed.size}` });
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
// Disk write succeeded; entry registration failed. Surface
|
|
329
|
+
// the write as 200 (file is on disk) but log the failure —
|
|
330
|
+
// the manifest just won't reflect it until next time.
|
|
331
|
+
// (Could harden to roll back the file write; for v0,
|
|
332
|
+
// disk-truth-of-record wins.)
|
|
333
|
+
return {
|
|
334
|
+
status: 200,
|
|
335
|
+
outcome: "materialize_failed",
|
|
336
|
+
body: err instanceof Error ? err.message : String(err),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
return { status: 200, body: attrs.span };
|
|
340
|
+
}
|
|
341
|
+
// deleteEntry — the KILL / MOVE-source counterpart of writeEntry. Deleting a host file is
|
|
342
|
+
// DESTRUCTIVE, so it PROPOSES for review (202), exactly as edit() does — never an ungated unlink.
|
|
343
|
+
// §membership — only a MEMBER reaches the proposal; a non-member is invisible (404), so untracked
|
|
344
|
+
// disk is never probed or touched. applyResolution unlinks + deregisters on accept.
|
|
345
|
+
async deleteEntry(pathname, ctx) {
|
|
346
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
347
|
+
if (root === null)
|
|
348
|
+
return { status: 400 };
|
|
349
|
+
const rel = File.#toMemberKey(pathname, root);
|
|
350
|
+
const member = await ctx.db.crud_find_session_entry.get({ session_id: ctx.sessionId, scheme: null, pathname: rel });
|
|
351
|
+
if (member === undefined)
|
|
352
|
+
return { status: 404 };
|
|
353
|
+
return { status: 202, attrs: { deletePath: rel } };
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=File.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SchemeManifest, PlurnkSchemeContext } from "../core/scheme-types.ts";
|
|
2
|
+
import type { EditStatement, FindStatement, ReadStatement, SendStatement } from "@plurnk/plurnk-grammar";
|
|
3
|
+
import type { EditResult, ReadResult } from "./_entry-ops.ts";
|
|
4
|
+
import type { EntryData, ReadEntryResult, WriteEntryResult, DeleteEntryResult } from "./_entry-crud.ts";
|
|
5
|
+
import type { SendResult } from "./_entry-send.ts";
|
|
6
|
+
import type { FindResult } from "./_entry-find.ts";
|
|
7
|
+
export default class Known {
|
|
8
|
+
static manifest: SchemeManifest;
|
|
9
|
+
edit(statement: EditStatement, ctx: PlurnkSchemeContext): Promise<EditResult>;
|
|
10
|
+
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
|
|
11
|
+
readEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<ReadEntryResult>;
|
|
12
|
+
writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext): Promise<WriteEntryResult>;
|
|
13
|
+
deleteEntry(pathname: string, ctx: PlurnkSchemeContext): Promise<DeleteEntryResult>;
|
|
14
|
+
send(statement: SendStatement, ctx: PlurnkSchemeContext): Promise<SendResult>;
|
|
15
|
+
find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=Known.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Known.d.ts","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKzG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,KAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAU7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpF;IAEK,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAExG;IAEK,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAExF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF;CACJ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import EntryOps from "./_entry-ops.js";
|
|
2
|
+
import EntryCrud from "./_entry-crud.js";
|
|
3
|
+
import EntrySend from "./_entry-send.js";
|
|
4
|
+
import EntryFind from "./_entry-find.js";
|
|
5
|
+
export default class Known {
|
|
6
|
+
// A scheme declares its manifest — channels, default channel, scope, writableBy. §scheme-manifest-manifest
|
|
7
|
+
static manifest = {
|
|
8
|
+
name: "known",
|
|
9
|
+
channels: { body: "text/markdown" },
|
|
10
|
+
defaultChannel: "body",
|
|
11
|
+
category: "data",
|
|
12
|
+
scope: "session",
|
|
13
|
+
writableBy: ["model", "client"],
|
|
14
|
+
volatile: false,
|
|
15
|
+
modelVisible: true,
|
|
16
|
+
example: "<<EDIT(known:///plan.md):- [ ] step:EDIT",
|
|
17
|
+
};
|
|
18
|
+
async edit(statement, ctx) {
|
|
19
|
+
return EntryOps.editSessionEntry(statement, ctx, Known.manifest);
|
|
20
|
+
}
|
|
21
|
+
async read(statement, ctx) {
|
|
22
|
+
return EntryOps.readSessionEntry(statement, ctx, Known.manifest);
|
|
23
|
+
}
|
|
24
|
+
async readEntry(pathname, ctx) {
|
|
25
|
+
return EntryCrud.readEntry(pathname, ctx, Known.manifest.name);
|
|
26
|
+
}
|
|
27
|
+
async writeEntry(pathname, entry, ctx) {
|
|
28
|
+
return EntryCrud.writeEntry(pathname, entry, ctx, Known.manifest.name);
|
|
29
|
+
}
|
|
30
|
+
async deleteEntry(pathname, ctx) {
|
|
31
|
+
return EntryCrud.deleteEntry(pathname, ctx, Known.manifest.name);
|
|
32
|
+
}
|
|
33
|
+
async send(statement, ctx) {
|
|
34
|
+
return EntrySend.sendToSessionEntry(statement, ctx, Known.manifest.name);
|
|
35
|
+
}
|
|
36
|
+
async find(statement, ctx) {
|
|
37
|
+
return EntryFind.findSessionEntries(statement, ctx, Known.manifest);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Known.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Known.js","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,2GAA2G;IAC3G,MAAM,CAAC,QAAQ,GAAmB;QAC9B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACnC,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/B,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,0CAA0C;KACtD,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAwB;QACtD,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAgB,EAAE,GAAwB;QACzE,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAwB;QACxD,OAAO,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FindStatement, FoldStatement, OpenStatement, ReadStatement } from "@plurnk/plurnk-grammar";
|
|
2
|
+
import type { SchemeManifest, PlurnkSchemeContext, SchemeReadResult } from "../core/scheme-types.ts";
|
|
3
|
+
import type { FindResult } from "./_entry-find.ts";
|
|
4
|
+
type OpenFoldResult = {
|
|
5
|
+
status: number;
|
|
6
|
+
matched?: number;
|
|
7
|
+
error?: string;
|
|
8
|
+
};
|
|
9
|
+
export default class Log {
|
|
10
|
+
#private;
|
|
11
|
+
static manifest: SchemeManifest;
|
|
12
|
+
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<SchemeReadResult>;
|
|
13
|
+
find(statement: FindStatement, ctx: PlurnkSchemeContext): Promise<FindResult>;
|
|
14
|
+
open(statement: OpenStatement, ctx: PlurnkSchemeContext): Promise<OpenFoldResult>;
|
|
15
|
+
fold(statement: FoldStatement, ctx: PlurnkSchemeContext): Promise<OpenFoldResult>;
|
|
16
|
+
kill(pathname: string, _signal: number | null, ctx: PlurnkSchemeContext): Promise<{
|
|
17
|
+
status: number;
|
|
18
|
+
error?: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=Log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGzG,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGrG,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAErE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAoE3E,MAAM,CAAC,OAAO,OAAO,GAAG;;IACpB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAc7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgCxF;IAQK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDlF;IAEK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEtF;IAGK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEtF;IA6DK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAK1H;CACJ"}
|