@plurnk/plurnk-service 1.0.7 → 1.0.9
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 +6 -0
- package/SPEC.md +36 -19
- package/dist/core/ChannelWrite.d.ts +2 -1
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +2 -2
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +2 -1
- package/dist/core/Dispatcher.d.ts +8 -4
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +19 -7
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Engine.d.ts +1 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +111 -42
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +23 -12
- package/dist/core/Owner.d.ts +9 -0
- package/dist/core/Owner.d.ts.map +1 -0
- package/dist/core/Owner.js +49 -0
- package/dist/core/Owner.js.map +1 -0
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +51 -32
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PluginLoader.d.ts +2 -0
- package/dist/core/PluginLoader.d.ts.map +1 -1
- package/dist/core/PluginLoader.js +27 -1
- package/dist/core/PluginLoader.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +21 -2
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +7 -7
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +2 -1
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +5 -7
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +3 -3
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +6 -4
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/owner.sql +14 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +7 -8
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +2 -2
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +12 -13
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/zero-pin.d.ts +3 -0
- package/dist/core/zero-pin.d.ts.map +1 -0
- package/dist/core/zero-pin.js +16 -0
- package/dist/core/zero-pin.js.map +1 -0
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +6 -1
- package/dist/digest/Digest.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/schemes/Exec.d.ts +6 -0
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +33 -9
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +15 -4
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +4 -3
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.js +1 -1
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Prompt.d.ts +13 -0
- package/dist/schemes/Prompt.d.ts.map +1 -0
- package/dist/schemes/Prompt.js +40 -0
- package/dist/schemes/Prompt.js.map +1 -0
- package/dist/schemes/Worker.d.ts +6 -4
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +116 -72
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +3 -3
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +11 -7
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +8 -20
- package/dist/schemes/_entry-find.d.ts +1 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +12 -20
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +2 -24
- package/dist/schemes/_entry-manifest.d.ts +1 -1
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +11 -16
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +3 -3
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +24 -26
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +3 -14
- package/dist/schemes/_entry-send.d.ts +1 -1
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +5 -4
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +52 -10
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/drain.sql +35 -5
- package/dist/server/envelope.d.ts +1 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +15 -7
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +6 -0
- package/dist/server/exec-poll-backoff.d.ts +2 -0
- package/dist/server/exec-poll-backoff.d.ts.map +1 -0
- package/dist/server/exec-poll-backoff.js +6 -0
- package/dist/server/exec-poll-backoff.js.map +1 -0
- package/dist/server/loopDocs.js +2 -2
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/seam-entry-read.sql +3 -2
- package/migrations/0000-00-00.01_schema.sql +19 -6
- package/package.json +19 -16
- package/dist/schemes/Known.d.ts +0 -17
- package/dist/schemes/Known.d.ts.map +0 -1
- package/dist/schemes/Known.js +0 -40
- package/dist/schemes/Known.js.map +0 -1
- package/dist/schemes/Plurnk.d.ts +0 -17
- package/dist/schemes/Plurnk.d.ts.map +0 -1
- package/dist/schemes/Plurnk.js +0 -46
- package/dist/schemes/Plurnk.js.map +0 -1
- package/dist/schemes/Unknown.d.ts +0 -17
- package/dist/schemes/Unknown.d.ts.map +0 -1
- package/dist/schemes/Unknown.js +0 -39
- package/dist/schemes/Unknown.js.map +0 -1
package/dist/schemes/Worker.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { DEFAULT_LOOP_FLAGS } from "../core/scheme-types.js";
|
|
2
2
|
import EntryOps from "./_entry-ops.js";
|
|
3
3
|
import EntryFind from "./_entry-find.js";
|
|
4
|
-
import
|
|
4
|
+
import EntryCrud from "./_entry-crud.js";
|
|
5
|
+
import EntrySend from "./_entry-send.js";
|
|
6
|
+
import Owner from "../core/Owner.js";
|
|
5
7
|
// #379 (owner ruling) — a loop the ENGINE concluded (∅-collapse) or the CLIENT killed (cancel)
|
|
6
8
|
// must not present its last words as a deliverable: run42's workers parked on nothing, the
|
|
7
9
|
// collapse concluded them, and the parent COLLECTed 'Standing by for user input' as a status-200
|
|
@@ -14,145 +16,187 @@ export const markTerminal = (terminatedBy, message) => {
|
|
|
14
16
|
return `[ cancelled from outside the worker ]${message === null ? "" : ` ${message}`}`;
|
|
15
17
|
return message;
|
|
16
18
|
};
|
|
17
|
-
// worker:// —
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
19
|
+
// worker:// — THE knowledgebase scheme (#527) plus inter-worker CONTROL (irc=SEND; WORK/FORK are
|
|
20
|
+
// Dispatcher.#handleWorkerControl). The authority names the OWNER ({§worker-authority-carving}):
|
|
21
|
+
// worker:///plan.md — the COMMONS, the shared blackboard, the encouraged default
|
|
22
|
+
// worker://~/draft.md — the calling worker's own private space
|
|
23
|
+
// worker://<name>/result.md — a named worker's space, ancestry-gated read (owner + ancestors)
|
|
24
|
+
// worker://plurnk/docs/x.md — the kernel's published surface, world-readable
|
|
25
|
+
// Writes are self-and-commons only ({§worker-write-scoping}): a named authority is read-only to
|
|
26
|
+
// the model, so nothing worker-authored can ever land under another principal — worker://plurnk/
|
|
27
|
+
// included, which is what makes the kernel's surface the trust boundary with no guard to forget.
|
|
28
|
+
// Path-absent forms are control on the worker-as-actor: READ collects the deliverable, SEND ircs;
|
|
29
|
+
// WORK spawns / FORK forks (Dispatcher); EDIT on the bare entity is rejected.
|
|
26
30
|
export default class Worker {
|
|
27
31
|
static manifest = {
|
|
28
32
|
name: "worker",
|
|
29
33
|
channels: { body: "text/markdown" },
|
|
30
34
|
defaultChannel: "body",
|
|
31
35
|
category: "data",
|
|
32
|
-
scope: "
|
|
33
|
-
writableBy: ["model", "client"],
|
|
36
|
+
scope: "workspace",
|
|
37
|
+
writableBy: ["model", "client", "plurnk"], // the kernel authors worker://plurnk/ (docs); write-scoping still gates principals
|
|
34
38
|
volatile: false,
|
|
35
39
|
modelVisible: true,
|
|
36
|
-
example: "<<EDIT(worker
|
|
40
|
+
example: "<<EDIT(worker:///plan.md):- [ ] investigate the timeout:EDIT",
|
|
37
41
|
};
|
|
38
|
-
// The
|
|
39
|
-
//
|
|
42
|
+
// The authority from a worker:// target — "" for the empty (commons) form; null when the
|
|
43
|
+
// target isn't a worker:// url at all.
|
|
40
44
|
static #authority(target) {
|
|
41
45
|
if (target === null || target.kind !== "url" || target.scheme !== "worker")
|
|
42
46
|
return null;
|
|
43
47
|
return target.hostname ?? "";
|
|
44
48
|
}
|
|
45
|
-
// The entry path within the
|
|
46
|
-
//
|
|
49
|
+
// The entry path within the space — the target's pathname; "" / "/" mean no entry (the
|
|
50
|
+
// worker-as-actor / control form).
|
|
47
51
|
static #entryPath(target) {
|
|
48
52
|
if (target === null || target.kind !== "url")
|
|
49
53
|
return "";
|
|
50
54
|
const p = target.pathname ?? "";
|
|
51
55
|
return p === "/" ? "" : p;
|
|
52
56
|
}
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// {§worker-authority-carving} — resolve the authority to the owning principal. Empty = the
|
|
58
|
+
// commons (writable — the blackboard default); `~` = the caller (writable — own space); the
|
|
59
|
+
// kernel's surface is world-READABLE; any other name is ancestry-gated read ({§worker-read-scope}:
|
|
60
|
+
// the reader is the owner or an ancestor — oversight flows down the tree). Unknown name or
|
|
61
|
+
// unpermitted reader → null → 404, no existence leak. Writability is the {§worker-write-scoping}
|
|
62
|
+
// law: only `~` and the commons take model writes; owner_id is engine-stamped, never model-set.
|
|
63
|
+
static async #resolveAuthority(authority, ctx) {
|
|
64
|
+
if (authority === "")
|
|
65
|
+
return { ownerId: await Owner.commonsId(ctx.db, ctx.workspaceId), writable: true };
|
|
66
|
+
if (authority === "~")
|
|
67
|
+
return { ownerId: ctx.workerId, writable: true };
|
|
68
|
+
const named = await ctx.db.worker_resolve_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
|
|
69
|
+
if (named === undefined)
|
|
70
|
+
return null;
|
|
71
|
+
if (named.id === ctx.workerId)
|
|
72
|
+
return { ownerId: named.id, writable: true }; // naming yourself IS ~
|
|
73
|
+
if (authority === "plurnk")
|
|
74
|
+
return { ownerId: named.id, writable: false }; // the kernel's published surface
|
|
75
|
+
const permitted = await ctx.db.owner_is_ancestor_or_self.get({ owner_id: named.id, reader_id: ctx.workerId });
|
|
76
|
+
return permitted === undefined ? null : { ownerId: named.id, writable: false };
|
|
59
77
|
}
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
static #
|
|
78
|
+
// Hand the statement to the shared entry helpers authority-stripped: the owner rides the
|
|
79
|
+
// resolved owner_id, the storage pathname is the bare entry path — never authority-folded.
|
|
80
|
+
static #stripAuthority(statement) {
|
|
63
81
|
const t = statement.target;
|
|
64
82
|
if (t === null || t.kind !== "url")
|
|
65
83
|
return statement;
|
|
66
|
-
return { ...statement, target: { ...t, hostname:
|
|
84
|
+
return { ...statement, target: { ...t, hostname: null } };
|
|
67
85
|
}
|
|
68
86
|
async edit(statement, ctx) {
|
|
69
87
|
const authority = Worker.#authority(statement.target);
|
|
70
88
|
if (authority === null)
|
|
71
|
-
return { status: 400, error: "worker:// requires a worker target" };
|
|
89
|
+
return { status: 400, entryId: null, channel: null, error: "worker:// requires a worker target" };
|
|
72
90
|
const entryPath = Worker.#entryPath(statement.target);
|
|
73
|
-
// The worker ENTITY (path-absent worker://<name>) is not EDITable — EDIT is
|
|
74
|
-
// (grammar 0.74.55): WORK(worker://<name>) spawns a worker; FORK(worker://<name>) forks a
|
|
91
|
+
// The worker ENTITY (path-absent worker://<name>) is not EDITable — EDIT is entry only
|
|
92
|
+
// (grammar 0.74.55): WORK(worker://<name>) spawns a worker; FORK(worker://<name>) forks a branch.
|
|
75
93
|
if (entryPath === "")
|
|
76
|
-
return { status: 400, error: "worker:// entity is not editable — WORK(worker://<name>) to spawn a worker, FORK(worker://<name>) to fork a branch" };
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
return { status:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return { status: 403, error: "worker:// write is self-only — read a sister's notes, never write them" };
|
|
84
|
-
return EntryOps.editWorkspaceEntry(Worker.#withOwner(statement, owner), ctx, Worker.manifest);
|
|
94
|
+
return { status: 400, entryId: null, channel: null, error: "worker:// entity is not editable — WORK(worker://<name>) to spawn a worker, FORK(worker://<name>) to fork a branch" };
|
|
95
|
+
const resolved = await Worker.#resolveAuthority(authority, ctx);
|
|
96
|
+
if (resolved === null)
|
|
97
|
+
return { status: 404, entryId: null, channel: null, error: `worker://${authority} not found` };
|
|
98
|
+
if (!resolved.writable)
|
|
99
|
+
return { status: 403, entryId: null, channel: null, error: "a named worker's space is read-only — write to worker:///... (the commons) or worker://~/... (your own)" };
|
|
100
|
+
return EntryOps.editWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
|
|
85
101
|
}
|
|
86
|
-
// KILL
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
async deleteEntry(statement, ctx) {
|
|
102
|
+
// KILL an ENTRY (path present). Same write-scoping as EDIT: self + commons only. The
|
|
103
|
+
// path-ABSENT KILL form is worker cancellation, handled in Dispatcher.#handleKill.
|
|
104
|
+
async killEntry(statement, ctx) {
|
|
90
105
|
const authority = Worker.#authority(statement.target);
|
|
91
106
|
if (authority === null)
|
|
92
107
|
return { status: 400, error: "worker:// requires a worker target" };
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return EntryOps.deleteWorkspaceEntry(Worker.#withOwner(statement, owner), ctx, Worker.manifest);
|
|
108
|
+
const resolved = await Worker.#resolveAuthority(authority, ctx);
|
|
109
|
+
if (resolved === null)
|
|
110
|
+
return { status: 404, error: `worker://${authority} not found` };
|
|
111
|
+
if (!resolved.writable)
|
|
112
|
+
return { status: 403, error: "a named worker's space is read-only — KILL entries in worker:///... (the commons) or worker://~/... (your own)" };
|
|
113
|
+
return EntryOps.deleteWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
|
|
100
114
|
}
|
|
101
115
|
async read(statement, ctx) {
|
|
102
116
|
const authority = Worker.#authority(statement.target);
|
|
103
117
|
if (authority === null)
|
|
104
118
|
return { status: 400, content: null, mimetype: null, channel: null };
|
|
105
|
-
if (authority === "")
|
|
106
|
-
return { status: 400, content: null, mimetype: null, channel: null }; // empty-authority worker:/// is invalid
|
|
107
119
|
const entryPath = Worker.#entryPath(statement.target);
|
|
108
120
|
// Path-absent READ(worker://<name>) COLLECTS the worker's deliverable (§worker-scheme-collect, pull side):
|
|
109
121
|
// its latest loop's terminal message — the SEND[200] result, or an abandonment reason. A worker
|
|
110
122
|
// still running hasn't delivered yet → 425 steers the model to park until it does (the
|
|
111
123
|
// same deliverable the wake/collect-delta will push). The pull complements the push; neither is lost.
|
|
112
124
|
if (entryPath === "") {
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
if (authority === "" || authority === "~")
|
|
126
|
+
return { status: 400, content: null, mimetype: null, channel: null }; // collect names a WORKER
|
|
127
|
+
const row = await ctx.db.worker_deliverable_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
|
|
115
128
|
if (row === undefined)
|
|
116
|
-
return { status: 404, content: `worker://${
|
|
129
|
+
return { status: 404, content: `worker://${authority} not found in this workspace`, mimetype: "text/markdown", channel: null };
|
|
117
130
|
// §join-blocking-collect (#354) — a still-running worker is a BLOCKING JOIN: the READ
|
|
118
131
|
// arms the join (awaitWorker), and the turn's bare SEND[102] parks until the worker delivers.
|
|
119
132
|
// The model doesn't drive the park — the engine does (a blocking read() hiding the scheduler).
|
|
120
133
|
if (!Worker.#TERMINAL_LOOP.has(row.status))
|
|
121
|
-
return { status: 425, content: `[ worker '${
|
|
122
|
-
return { status: 200, content: markTerminal(row.terminated_by, row.terminal_message) ?? `[ worker '${
|
|
134
|
+
return { status: 425, content: `[ worker '${authority}' is still running — parking this turn until it delivers its result ]`, mimetype: "text/markdown", channel: null, awaitWorker: authority };
|
|
135
|
+
return { status: 200, content: markTerminal(row.terminated_by, row.terminal_message) ?? `[ worker '${authority}' concluded with no deliverable (status ${row.status}) ]`, mimetype: "text/markdown", channel: null };
|
|
123
136
|
}
|
|
124
|
-
// Path-present:
|
|
125
|
-
const
|
|
126
|
-
|
|
137
|
+
// Path-present: an entry read — commons / own / ancestry-gated named space.
|
|
138
|
+
const resolved = await Worker.#resolveAuthority(authority, ctx);
|
|
139
|
+
if (resolved === null)
|
|
140
|
+
return { status: 404, content: null, mimetype: null, channel: null };
|
|
141
|
+
return EntryOps.readWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
|
|
127
142
|
}
|
|
128
143
|
// Terminal loop statuses (§lifecycle-terms) — a loop here has DELIVERED; anything else is still running.
|
|
129
144
|
static #TERMINAL_LOOP = new Set([200, 413, 429, 499, 500, 504, 508]);
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
// the scope pathname (`/<owner>/<rest>`) so EntryFind draws from that worker's partition alone.
|
|
145
|
+
// FIND draws from the resolved principal's space alone: worker:///** the commons,
|
|
146
|
+
// worker://~/** your own, worker://<name>/** a named space (ancestry-gated like READ).
|
|
133
147
|
async find(statement, ctx) {
|
|
148
|
+
// A regex-kind target (#pattern#flags) has no authority slot — it draws from the commons.
|
|
149
|
+
if (statement.target !== null && statement.target.kind === "regex") {
|
|
150
|
+
return EntryFind.findWorkspaceEntries(statement, ctx, Worker.manifest, await Owner.commonsId(ctx.db, ctx.workspaceId));
|
|
151
|
+
}
|
|
134
152
|
const authority = Worker.#authority(statement.target);
|
|
135
153
|
if (authority === null)
|
|
136
154
|
return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
155
|
+
const resolved = await Worker.#resolveAuthority(authority, ctx);
|
|
156
|
+
if (resolved === null)
|
|
157
|
+
return { status: 404, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
158
|
+
const found = await EntryFind.findWorkspaceEntries(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
|
|
159
|
+
// The catalog renders the empty-authority form; a non-empty queried authority re-applies —
|
|
160
|
+
// in results AND the serialized content the packet renders — so every path the model sees
|
|
161
|
+
// is the address it typed (worker://~/x, worker://beta/x).
|
|
137
162
|
if (authority === "")
|
|
138
|
-
return
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
163
|
+
return found;
|
|
164
|
+
const reface = (p) => p.replace(/^worker:\/\/\//, `worker://${authority}/`);
|
|
165
|
+
const results = found.results.map((r) => ({ ...r, path: reface(r.path) }));
|
|
166
|
+
const content = found.content === null ? null : found.content.replaceAll("worker:///", `worker://${authority}/`);
|
|
167
|
+
return { ...found, results, content };
|
|
168
|
+
}
|
|
169
|
+
// The entry-copy seam ({§worker-authority-carving}) — pathname-keyed, COMMONS-scoped: the
|
|
170
|
+
// dispatcher refuses a non-empty authority upstream, so these faces only ever see worker:///….
|
|
171
|
+
async readEntry(pathname, ctx) {
|
|
172
|
+
return EntryCrud.readEntry(pathname, ctx, Worker.manifest.name);
|
|
173
|
+
}
|
|
174
|
+
async writeEntry(pathname, entry, ctx) {
|
|
175
|
+
return EntryCrud.writeEntry(pathname, entry, ctx, Worker.manifest.name);
|
|
176
|
+
}
|
|
177
|
+
async deleteEntry(pathname, ctx) {
|
|
178
|
+
return EntryCrud.deleteEntry(pathname, ctx, Worker.manifest.name);
|
|
145
179
|
}
|
|
146
180
|
async send(statement, ctx) {
|
|
147
181
|
const authority = Worker.#authority(statement.target);
|
|
148
182
|
if (authority === null)
|
|
149
183
|
return { status: 400, error: "worker:// irc requires a worker (worker://<name>)" };
|
|
184
|
+
// An ENTRY-path SEND is the entry-SEND law (410 deletes, 499 cancels, else 501) on the
|
|
185
|
+
// resolved principal; write-scoping holds — a named space takes no 410.
|
|
186
|
+
if (Worker.#entryPath(statement.target) !== "") {
|
|
187
|
+
const resolved = await Worker.#resolveAuthority(authority, ctx);
|
|
188
|
+
if (resolved === null)
|
|
189
|
+
return { status: 404, error: `worker://${authority} not found` };
|
|
190
|
+
if (!resolved.writable && statement.signal === 410)
|
|
191
|
+
return { status: 403, error: "a named worker's space is read-only" };
|
|
192
|
+
return EntrySend.sendToWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest.name, resolved.ownerId);
|
|
193
|
+
}
|
|
150
194
|
if (authority === "")
|
|
151
|
-
return { status: 400, error: "worker:// irc requires a worker
|
|
195
|
+
return { status: 400, error: "worker:// irc requires a worker (worker://<name>)" };
|
|
152
196
|
if (ctx.injectWorker === undefined)
|
|
153
197
|
throw new Error("run.send: injectWorker capability absent");
|
|
154
198
|
let workerId = ctx.workerId;
|
|
155
|
-
if (authority !== "
|
|
199
|
+
if (authority !== "~") {
|
|
156
200
|
const row = await ctx.db.worker_resolve_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
|
|
157
201
|
if (row === undefined)
|
|
158
202
|
return { status: 404, error: `worker://${authority} not found in this workspace` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/schemes/Worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/schemes/Worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,8 @@ export interface DeleteEntryResult {
|
|
|
24
24
|
attrs?: object;
|
|
25
25
|
}
|
|
26
26
|
export default class EntryCrud {
|
|
27
|
-
static readEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null): Promise<ReadEntryResult>;
|
|
28
|
-
static writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext, scheme: string | null): Promise<WriteEntryResult>;
|
|
29
|
-
static deleteEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null): Promise<DeleteEntryResult>;
|
|
27
|
+
static readEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<ReadEntryResult>;
|
|
28
|
+
static writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<WriteEntryResult>;
|
|
29
|
+
static deleteEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<DeleteEntryResult>;
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=_entry-crud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-crud.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-crud.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGtE,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACtF,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAIvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,OAAa,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAgBpI;IAED,OAAa,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4CxJ;IAED,OAAa,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASxI;CACJ"}
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
// cross-scheme orchestration of COPY/MOVE/SEND[410].
|
|
4
4
|
import EntrySemantic from "./_entry-semantic.js";
|
|
5
5
|
import { contentHash } from "../core/content-hash.js";
|
|
6
|
+
import Owner from "../core/Owner.js";
|
|
6
7
|
export default class EntryCrud {
|
|
7
|
-
static async readEntry(pathname, ctx, scheme) {
|
|
8
|
+
static async readEntry(pathname, ctx, scheme, ownerId) {
|
|
8
9
|
const { db, workspaceId } = ctx;
|
|
9
|
-
const
|
|
10
|
+
const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
|
|
11
|
+
const entry = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
|
|
10
12
|
if (entry === undefined)
|
|
11
13
|
return { status: 404, entry: null };
|
|
12
14
|
const channelRows = await db.crud_read_channels.all({ entry_id: entry.id });
|
|
@@ -18,15 +20,16 @@ export default class EntryCrud {
|
|
|
18
20
|
const tags = tagRows.map((r) => r.tag);
|
|
19
21
|
return { status: 200, entry: { channels, tags } };
|
|
20
22
|
}
|
|
21
|
-
static async writeEntry(pathname, entry, ctx, scheme) {
|
|
23
|
+
static async writeEntry(pathname, entry, ctx, scheme, ownerId) {
|
|
22
24
|
const { db, workspaceId, tokenize } = ctx;
|
|
23
25
|
if (tokenize === undefined)
|
|
24
26
|
throw new Error("writeEntry: ctx.tokenize is required for token accounting");
|
|
25
|
-
const
|
|
27
|
+
const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
|
|
28
|
+
const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
|
|
26
29
|
let entryId;
|
|
27
30
|
let created;
|
|
28
31
|
if (existing === undefined) {
|
|
29
|
-
const row = await db.crud_insert_workspace_entry.get({ workspace_id: workspaceId, scheme, pathname });
|
|
32
|
+
const row = await db.crud_insert_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
|
|
30
33
|
if (row === undefined)
|
|
31
34
|
throw new Error("writeEntry: insert returned no row");
|
|
32
35
|
entryId = row.id;
|
|
@@ -63,9 +66,10 @@ export default class EntryCrud {
|
|
|
63
66
|
await EntrySemantic.indexFts(db, entryId, body.content);
|
|
64
67
|
return { status: created ? 201 : 200, created, entryId };
|
|
65
68
|
}
|
|
66
|
-
static async deleteEntry(pathname, ctx, scheme) {
|
|
69
|
+
static async deleteEntry(pathname, ctx, scheme, ownerId) {
|
|
67
70
|
const { db, workspaceId } = ctx;
|
|
68
|
-
const
|
|
71
|
+
const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
|
|
72
|
+
const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
|
|
69
73
|
if (existing === undefined)
|
|
70
74
|
return { status: 404 };
|
|
71
75
|
await EntrySemantic.indexFts(db, existing.id, ""); // §semantic-fts-at-write — the keyword row dies with the entry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-crud.js","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wEAAwE;AACxE,qDAAqD;AAGrD,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-crud.js","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
-- for bare/absolute paths; storage normalizes its rows to scheme=NULL
|
|
7
7
|
-- (Engine.#extractTarget). SQL's `=` doesn't match NULL, so use `IS`.
|
|
8
8
|
SELECT id FROM entries
|
|
9
|
-
WHERE
|
|
9
|
+
WHERE workspace_id = $workspace_id AND owner_id = $owner_id AND scheme IS $scheme AND pathname = $pathname;
|
|
10
10
|
|
|
11
11
|
-- PREP: crud_read_channels
|
|
12
12
|
SELECT name, content, mimetype FROM entry_channels WHERE entry_id = $entry_id;
|
|
@@ -15,20 +15,8 @@ SELECT name, content, mimetype FROM entry_channels WHERE entry_id = $entry_id;
|
|
|
15
15
|
SELECT tag FROM entry_tags WHERE entry_id = $entry_id ORDER BY tag;
|
|
16
16
|
|
|
17
17
|
-- PREP: crud_insert_workspace_entry
|
|
18
|
-
INSERT INTO entries (
|
|
19
|
-
VALUES (
|
|
20
|
-
RETURNING id;
|
|
21
|
-
|
|
22
|
-
-- PREP: crud_find_worker_entry
|
|
23
|
-
-- Run-scope twin of crud_find_workspace_entry (§worker-scheme). A worker entry is keyed
|
|
24
|
-
-- (scope='worker', scheme='worker', pathname); the owning run rides the pathname's first
|
|
25
|
-
-- segment (the folded worker:// authority), so there is no worker_id column.
|
|
26
|
-
SELECT id FROM entries
|
|
27
|
-
WHERE scope = 'worker' AND workspace_id = $workspace_id AND scheme IS $scheme AND pathname = $pathname;
|
|
28
|
-
|
|
29
|
-
-- PREP: crud_insert_worker_entry
|
|
30
|
-
INSERT INTO entries (scope, workspace_id, scheme, pathname)
|
|
31
|
-
VALUES ('worker', $workspace_id, $scheme, $pathname)
|
|
18
|
+
INSERT INTO entries (workspace_id, owner_id, scheme, pathname)
|
|
19
|
+
VALUES ($workspace_id, $owner_id, $scheme, $pathname)
|
|
32
20
|
RETURNING id;
|
|
33
21
|
|
|
34
22
|
-- PREP: crud_register_workspace_member
|
|
@@ -37,9 +25,9 @@ RETURNING id;
|
|
|
37
25
|
-- is the membership marker the File read-gate checks and FIND globs by path.
|
|
38
26
|
-- Channel-less by design — disk stays the truth (D3). ON CONFLICT no-ops so
|
|
39
27
|
-- re-resolving membership each turn never duplicates or churns rows.
|
|
40
|
-
INSERT INTO entries (
|
|
41
|
-
VALUES (
|
|
42
|
-
ON CONFLICT (workspace_id, scheme, pathname)
|
|
28
|
+
INSERT INTO entries (workspace_id, owner_id, scheme, pathname, membership_origin)
|
|
29
|
+
VALUES ($workspace_id, $owner_id, $scheme, $pathname, $membership_origin)
|
|
30
|
+
ON CONFLICT (workspace_id, owner_id, scheme, pathname)
|
|
43
31
|
DO NOTHING
|
|
44
32
|
RETURNING id;
|
|
45
33
|
|
|
@@ -48,7 +36,7 @@ RETURNING id;
|
|
|
48
36
|
-- (mtime:size), read before materializing so an unchanged file short-circuits
|
|
49
37
|
-- before any content read. Null-aware scheme (file members store scheme=NULL).
|
|
50
38
|
SELECT id, synced_sig FROM entries
|
|
51
|
-
WHERE
|
|
39
|
+
WHERE workspace_id = $workspace_id AND owner_id = $owner_id AND scheme IS $scheme AND pathname = $pathname;
|
|
52
40
|
|
|
53
41
|
-- PREP: crud_set_synced_sig
|
|
54
42
|
-- Stamp the disk signature after a member materializes to disk truth; the next
|
|
@@ -85,7 +73,7 @@ DELETE FROM entries WHERE id = $entry_id;
|
|
|
85
73
|
-- ((git ls-files ∪ add) − ignore) and un-registers the difference, so entries ==
|
|
86
74
|
-- members. Model-created ('client') members are excluded — not git's to reclaim.
|
|
87
75
|
SELECT id, pathname FROM entries
|
|
88
|
-
WHERE
|
|
76
|
+
WHERE workspace_id = $workspace_id AND scheme IS NULL AND membership_origin IN ('git', 'constraint');
|
|
89
77
|
|
|
90
78
|
-- PREP: crud_insert_workspace_constraint
|
|
91
79
|
-- SPEC §membership constraint overlay — the client supersede. Idempotent per
|
|
@@ -28,6 +28,6 @@ export interface FindResult {
|
|
|
28
28
|
}
|
|
29
29
|
export default class EntryFind {
|
|
30
30
|
#private;
|
|
31
|
-
static findWorkspaceEntries(statement: FindStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<FindResult>;
|
|
31
|
+
static findWorkspaceEntries(statement: FindStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest, explicitOwnerId?: number): Promise<FindResult>;
|
|
32
32
|
}
|
|
33
33
|
//# sourceMappingURL=_entry-find.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUxE,MAAM,WAAW,KAAK;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AAEhH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;;IA2I1B,OAAa,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA8C7J;CACJ"}
|
|
@@ -19,16 +19,9 @@ import Matcher from "../content/matcher.js";
|
|
|
19
19
|
import { decodePathParens } from "../core/path-decode.js";
|
|
20
20
|
import EntryGraph from "./_entry-graph.js";
|
|
21
21
|
import EntryManifest from "./_entry-manifest.js";
|
|
22
|
+
import Owner from "../core/Owner.js";
|
|
22
23
|
import EntrySemantic from "./_entry-semantic.js";
|
|
23
24
|
export default class EntryFind {
|
|
24
|
-
// §worker-scheme — the owner-prefix glob (`/<owner>/*`) for a worker-scope FIND, from the target
|
|
25
|
-
// pathname Run.find already folded (`/<owner>/<rest>`). Bounds the catalog source to one worker's
|
|
26
|
-
// scratch — the building worker's own (self) or a named sister's.
|
|
27
|
-
static #workerOwnerPrefix(statement) {
|
|
28
|
-
const path = statement.target?.kind === "url" ? statement.target.pathname : "";
|
|
29
|
-
const owner = path.split("/").filter((s) => s.length > 0)[0];
|
|
30
|
-
return owner === undefined ? "/*" : `/${owner}/*`;
|
|
31
|
-
}
|
|
32
25
|
static #scopePathnameOf(statement) {
|
|
33
26
|
const path = statement.target;
|
|
34
27
|
if (path === null)
|
|
@@ -82,7 +75,7 @@ export default class EntryFind {
|
|
|
82
75
|
// daughter) and INCLUDES/EXCLUDES the entry — 200 keeps it, 204/415/203 drop it, 400
|
|
83
76
|
// (malformed matcher) fails the whole op. Path-scoping stays in the (target). Returns the
|
|
84
77
|
// matched pathnames plus `locations` — each content hit's source line(s), keyed by pathname.
|
|
85
|
-
static async #matchPathnames(statement, ctx, manifest) {
|
|
78
|
+
static async #matchPathnames(statement, ctx, manifest, explicitOwnerId) {
|
|
86
79
|
if (statement.target === null)
|
|
87
80
|
return { status: 400, matches: [] };
|
|
88
81
|
// Scope by the manifest's persisted entries.scheme (storedScheme; absent →
|
|
@@ -118,12 +111,12 @@ export default class EntryFind {
|
|
|
118
111
|
const tags = Array.isArray(statement.signal) ? statement.signal : []; // tag filter, AND semantics — §find-tag-filter-and-semantics
|
|
119
112
|
const tagsParam = tags.length > 0 ? JSON.stringify(tags) : "[]";
|
|
120
113
|
const { db, workspaceId } = ctx;
|
|
121
|
-
// Candidates are workspace-scoped — a FIND never reaches across workspaces
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
let candidates = await db[candidatesQuery].all({
|
|
114
|
+
// Candidates are workspace-scoped — a FIND never reaches across workspaces (§find-scoped-isolation)
|
|
115
|
+
// — and owner-keyed ({§entry-owner}): an owner-carved face passes its resolved owner; every
|
|
116
|
+
// other scheme draws from the commons.
|
|
117
|
+
let candidates = await db.find_workspace_entry_candidates.all({
|
|
126
118
|
workspace_id: workspaceId,
|
|
119
|
+
owner_id: explicitOwnerId ?? await Owner.commonsId(db, workspaceId),
|
|
127
120
|
scheme,
|
|
128
121
|
channel: manifest.defaultChannel,
|
|
129
122
|
scope_pathname: scopeGlob,
|
|
@@ -181,8 +174,8 @@ export default class EntryFind {
|
|
|
181
174
|
// match order. A catalog row is exactly what the manifest catalogs (path + per-channel
|
|
182
175
|
// {mimetype, tokens, lines}, tags, seconds) — FIND is the filtered, navigable slice of
|
|
183
176
|
// that catalog, rendered as a JSON array (application/json). §find-result-catalog-rows
|
|
184
|
-
static async findWorkspaceEntries(statement, ctx, manifest) {
|
|
185
|
-
const match = await EntryFind.#matchPathnames(statement, ctx, manifest);
|
|
177
|
+
static async findWorkspaceEntries(statement, ctx, manifest, explicitOwnerId) {
|
|
178
|
+
const match = await EntryFind.#matchPathnames(statement, ctx, manifest, explicitOwnerId);
|
|
186
179
|
if (match.status !== 200)
|
|
187
180
|
return { status: match.status, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
188
181
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
@@ -190,10 +183,9 @@ export default class EntryFind {
|
|
|
190
183
|
// the same EntryManifest.toPath the catalog uses (single source of truth). Match order is
|
|
191
184
|
// preserved (rank for ~semantic); a match whose entry has no row (e.g. the self-excluded
|
|
192
185
|
// manifest) drops out. Each match becomes ONE result item carrying its span (#286).
|
|
193
|
-
// §
|
|
194
|
-
//
|
|
195
|
-
const
|
|
196
|
-
const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, workerOwnerPrefix)).map((r) => [r.path, r]));
|
|
186
|
+
// {§entry-owner} — the alignment draws from the SAME owner the candidates matched, so a
|
|
187
|
+
// match never pairs with a coordinate-twin sibling's catalog metadata.
|
|
188
|
+
const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, explicitOwnerId ?? await Owner.commonsId(ctx.db, ctx.workspaceId))).map((r) => [r.path, r]));
|
|
197
189
|
const results = [];
|
|
198
190
|
const matches = [];
|
|
199
191
|
const seenPath = new Set();
|