@plurnk/plurnk-service 0.55.0 → 0.57.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.example +9 -14
- package/SPEC.md +133 -99
- package/dist/content/matcher.d.ts +4 -0
- package/dist/content/matcher.d.ts.map +1 -1
- package/dist/content/matcher.js +73 -92
- package/dist/content/matcher.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +7 -1
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +8 -2
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +12 -2
- package/dist/core/Engine.d.ts +9 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +345 -104
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +44 -2
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +6 -1
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +20 -4
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +29 -0
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +40 -4
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/packet-inject.d.ts +2 -0
- package/dist/core/packet-inject.d.ts.map +1 -1
- package/dist/core/packet-inject.js +28 -1
- package/dist/core/packet-inject.js.map +1 -1
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +32 -28
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/session-settings.d.ts +1 -6
- package/dist/core/session-settings.d.ts.map +1 -1
- package/dist/core/session-settings.js +4 -13
- package/dist/core/session-settings.js.map +1 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +41 -7
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +2 -1
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +9 -6
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +4 -0
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +35 -19
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +14 -11
- package/dist/schemes/Run.d.ts +7 -1
- package/dist/schemes/Run.d.ts.map +1 -1
- package/dist/schemes/Run.js +49 -9
- package/dist/schemes/Run.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts +16 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +84 -50
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +23 -0
- package/dist/schemes/_entry-graph.d.ts +6 -1
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +35 -22
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +9 -7
- 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 +38 -7
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +5 -0
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +14 -0
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-semantic.d.ts +1 -1
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +15 -12
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/exec-abort.d.ts +4 -0
- package/dist/schemes/exec-abort.d.ts.map +1 -1
- package/dist/schemes/exec-abort.js +6 -0
- package/dist/schemes/exec-abort.js.map +1 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +133 -19
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/MethodRegistry.d.ts +2 -0
- package/dist/server/MethodRegistry.d.ts.map +1 -1
- package/dist/server/drain.sql +17 -5
- package/dist/server/dsl.d.ts +9 -1
- package/dist/server/dsl.d.ts.map +1 -1
- package/dist/server/dsl.js +31 -4
- package/dist/server/dsl.js.map +1 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +0 -9
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +3 -1
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/methods/log_read.d.ts.map +1 -1
- package/dist/server/methods/log_read.js +7 -1
- package/dist/server/methods/log_read.js.map +1 -1
- package/dist/server/methods/log_read.sql +17 -7
- package/dist/server/methods/op_look.d.ts +5 -0
- package/dist/server/methods/op_look.d.ts.map +1 -0
- package/dist/server/methods/op_look.js +30 -0
- package/dist/server/methods/op_look.js.map +1 -0
- package/dist/server/methods/op_parse.d.ts.map +1 -1
- package/dist/server/methods/op_parse.js +7 -2
- package/dist/server/methods/op_parse.js.map +1 -1
- package/dist/server/methods/session_constraints.js +1 -1
- package/dist/server/methods/session_constraints.js.map +1 -1
- package/dist/server/methods/session_create.d.ts.map +1 -1
- package/dist/server/methods/session_create.js +7 -14
- package/dist/server/methods/session_create.js.map +1 -1
- package/docs/run.md +3 -1
- package/migrations/0000-00-00.01_schema.sql +21 -1
- package/package.json +10 -10
- package/requirements.md +4 -0
package/dist/schemes/Run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Run.js","sourceRoot":"","sources":["../../src/schemes/Run.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Run.js","sourceRoot":"","sources":["../../src/schemes/Run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
import type { FindStatement } from "@plurnk/plurnk-grammar";
|
|
2
2
|
import type { PlurnkSchemeContext, SchemeManifest } from "../core/scheme-types.ts";
|
|
3
3
|
import { type CatalogEntry } from "./_entry-manifest.ts";
|
|
4
|
+
export interface Match {
|
|
5
|
+
pathname: string;
|
|
6
|
+
span: {
|
|
7
|
+
lineStart: number;
|
|
8
|
+
lineEnd: number;
|
|
9
|
+
} | null;
|
|
10
|
+
}
|
|
11
|
+
export type MatchItem = CatalogEntry & {
|
|
12
|
+
matchSpan?: {
|
|
13
|
+
lineStart: number;
|
|
14
|
+
lineEnd: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
4
17
|
export interface FindResult {
|
|
5
18
|
status: number;
|
|
6
19
|
content: string | null;
|
|
7
20
|
mimetype: string | null;
|
|
8
|
-
results:
|
|
21
|
+
results: MatchItem[];
|
|
9
22
|
itemsTokenTotal: number;
|
|
23
|
+
pathnames: string[];
|
|
24
|
+
matches: Match[];
|
|
10
25
|
}
|
|
11
26
|
export default class EntryFind {
|
|
12
27
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"
|
|
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;AAKxE,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;CAAE;AAEjG,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE9F,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;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;;WAsJb,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CA8BrI"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// FIND helper for entry-bearing schemes (SPEC §find; plurnk.md FIND row).
|
|
2
2
|
// FIND resolves to the scheme's CATALOG ROWS — the very rows the manifest catalogs —
|
|
3
3
|
// filtered to the statement's matches. A matcher (glob/regex/jsonpath/xpath/~semantic/
|
|
4
|
-
// @graph) decides WHICH entries appear
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// @graph) decides WHICH entries appear. A CONTENT matcher also stamps each row with
|
|
5
|
+
// `matchLines` — the source line(s) where it hit (plurnk.md:31: FIND returns the matching
|
|
6
|
+
// rows with the match lines in the metadata; the line CONTENT is a READ). The result is a
|
|
7
|
+
// JSON array of catalog rows: the per-scheme slice of the catalog (§find-result-catalog-rows).
|
|
7
8
|
//
|
|
8
9
|
// Slot semantics (plurnk.md §"Body matcher dispatch (FIND, READ, OPEN, FOLD)"):
|
|
9
10
|
// target — required scope (path or glob); selects which entries are candidates
|
|
@@ -20,6 +21,14 @@ import EntryGraph from "./_entry-graph.js";
|
|
|
20
21
|
import EntryManifest from "./_entry-manifest.js";
|
|
21
22
|
import EntrySemantic from "./_entry-semantic.js";
|
|
22
23
|
export default class EntryFind {
|
|
24
|
+
// §run-scheme — the owner-prefix glob (`/<owner>/*`) for a run-scope FIND, from the target
|
|
25
|
+
// pathname Run.find already folded (`/<owner>/<rest>`). Bounds the catalog source to one run's
|
|
26
|
+
// scratch — the building run's own (self) or a named sister's.
|
|
27
|
+
static #runOwnerPrefix(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
|
+
}
|
|
23
32
|
static #scopePathnameOf(statement) {
|
|
24
33
|
const path = statement.target;
|
|
25
34
|
if (path === null)
|
|
@@ -71,38 +80,46 @@ export default class EntryFind {
|
|
|
71
80
|
// tags) runs in SQL (find_session_entry_candidates); a content matcher then runs against
|
|
72
81
|
// each candidate's default-channel CONTENT (Matcher.matchAgainstContent → the mimetypes
|
|
73
82
|
// daughter) and INCLUDES/EXCLUDES the entry — 200 keeps it, 204/415/203 drop it, 400
|
|
74
|
-
// (malformed matcher) fails the whole op. Path-scoping stays in the (target).
|
|
75
|
-
//
|
|
83
|
+
// (malformed matcher) fails the whole op. Path-scoping stays in the (target). Returns the
|
|
84
|
+
// matched pathnames plus `locations` — each content hit's source line(s), keyed by pathname.
|
|
76
85
|
static async #matchPathnames(statement, ctx, manifest) {
|
|
77
86
|
if (statement.target === null)
|
|
78
|
-
return { status: 400,
|
|
87
|
+
return { status: 400, matches: [] };
|
|
79
88
|
// Scope by the manifest's persisted entries.scheme (storedScheme; absent →
|
|
80
89
|
// name). File sets storedScheme=null — bare rows.
|
|
81
90
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
82
91
|
if (statement.body !== null && statement.body.dialect === "semantic") {
|
|
83
|
-
// ~query: embed the query text, FTS-narrow by its terms, cosine-rank the
|
|
84
|
-
//
|
|
85
|
-
//
|
|
92
|
+
// ~query: embed the query text, FTS-narrow by its terms, cosine-rank the narrowed
|
|
93
|
+
// set, top-K CHUNKS. Each ranked chunk is a (file, span) item — a file may appear
|
|
94
|
+
// more than once (#286, no dedup). 501 when no embeddings handler is installed. <L> carries the rank marker.
|
|
86
95
|
const { mimetypes } = ctx;
|
|
87
96
|
if (mimetypes === undefined)
|
|
88
|
-
return { status: 501,
|
|
97
|
+
return { status: 501, matches: [] };
|
|
89
98
|
if (statement.lineMarker === null)
|
|
90
|
-
return { status: 400,
|
|
99
|
+
return { status: 400, matches: [] }; // ~query needs a rank marker, e.g. ~query<10>
|
|
91
100
|
const ranked = await EntrySemantic.rankSemantic(ctx.db, ctx.sessionId, scheme, mimetypes, statement.body.raw, LineMarkerOps.firstLast(statement.lineMarker));
|
|
92
101
|
if (ranked.status !== 200)
|
|
93
|
-
return { status: ranked.status,
|
|
94
|
-
|
|
95
|
-
// keeping the highest-ranked occurrence. The winning chunk's span is a READ.
|
|
96
|
-
return { status: 200, pathnames: EntryFind.#unique(ranked.results.map((x) => x.pathname)) };
|
|
102
|
+
return { status: ranked.status, matches: [] };
|
|
103
|
+
return { status: 200, matches: ranked.results.map((x) => ({ pathname: x.pathname, span: { lineStart: x.lineStart, lineEnd: x.lineEnd } })) };
|
|
97
104
|
}
|
|
98
105
|
const scopePathname = EntryFind.#scopePathnameOf(statement);
|
|
99
|
-
//
|
|
100
|
-
|
|
106
|
+
// The target's GLOB scope. A FOLDER (trailing slash, incl. the scheme root `/`) expands to
|
|
107
|
+
// its contents — append `*`; a bare ENTRY path stays exact (one entry); an explicit glob
|
|
108
|
+
// passes through literally. The `*` is folderhood, not a blanket prefix — so FIND(README.md)
|
|
109
|
+
// is the one entry, uniform with READ's target contract (#286). grammar 0.46 regex-in-path:
|
|
110
|
+
// a `#pattern#flags` target filters by regex over the pathname (below), no scope glob.
|
|
111
|
+
// §find-scope-prefix-filter
|
|
112
|
+
const scopeGlob = statement.target.kind === "regex" || scopePathname === null || scopePathname.length === 0
|
|
113
|
+
? null
|
|
114
|
+
: (scopePathname.endsWith("/") ? `${scopePathname}*` : scopePathname);
|
|
101
115
|
const tags = Array.isArray(statement.signal) ? statement.signal : []; // tag filter, AND semantics — §find-tag-filter-and-semantics
|
|
102
116
|
const tagsParam = tags.length > 0 ? JSON.stringify(tags) : "[]";
|
|
103
117
|
const { db, sessionId } = ctx;
|
|
104
|
-
// Candidates are session-scoped — a FIND never reaches across sessions. §find-scoped-isolation
|
|
105
|
-
|
|
118
|
+
// Candidates are session-scoped — a FIND never reaches across sessions. §find-scoped-isolation.
|
|
119
|
+
// §run-scheme — a run-scope scheme (manifest.scope==='run', today run://) draws from the run
|
|
120
|
+
// partition instead; the owner narrowing rides scopeGlob (Run.find folds `/<owner>/*` in).
|
|
121
|
+
const candidatesQuery = manifest.scope === "run" ? "find_run_entry_candidates" : "find_session_entry_candidates";
|
|
122
|
+
let candidates = await db[candidatesQuery].all({
|
|
106
123
|
session_id: sessionId,
|
|
107
124
|
scheme,
|
|
108
125
|
channel: manifest.defaultChannel,
|
|
@@ -118,46 +135,55 @@ export default class EntryFind {
|
|
|
118
135
|
re = new RegExp(statement.target.pattern, statement.target.flags || undefined);
|
|
119
136
|
}
|
|
120
137
|
catch {
|
|
121
|
-
return { status: 400,
|
|
138
|
+
return { status: 400, matches: [] };
|
|
122
139
|
}
|
|
123
140
|
candidates = candidates.filter((c) => re.test(c.pathname));
|
|
124
141
|
}
|
|
125
|
-
|
|
142
|
+
// Every dialect resolves to (file, span) items — one per match (#286). A body-less FIND
|
|
143
|
+
// selects the whole entry (span: null); a matcher selects spans within it.
|
|
144
|
+
let matches;
|
|
126
145
|
if (statement.body === null) {
|
|
127
|
-
|
|
128
|
-
pathnames = candidates.map((c) => c.pathname);
|
|
146
|
+
matches = candidates.map((c) => ({ pathname: c.pathname, span: null }));
|
|
129
147
|
}
|
|
130
148
|
else if (statement.body.dialect === "graph") {
|
|
131
|
-
// @graph (plurnk-service#186): body is `@<sym` / `@>sym` / `@sym`.
|
|
132
|
-
//
|
|
133
|
-
//
|
|
149
|
+
// @graph (plurnk-service#186): body is `@<sym` / `@>sym` / `@sym`. EntryGraph resolves
|
|
150
|
+
// the relation across (session, scheme), each as a (file, span); intersect with the
|
|
151
|
+
// in-scope candidates (target glob + tags) for the final set.
|
|
134
152
|
const inScope = new Set(candidates.map((c) => c.pathname));
|
|
135
153
|
const graph = await EntryGraph.match(ctx.db, ctx.sessionId, scheme, statement.body.raw);
|
|
136
154
|
if (graph.status !== 200)
|
|
137
|
-
return { status: graph.status,
|
|
138
|
-
|
|
155
|
+
return { status: graph.status, matches: [] };
|
|
156
|
+
matches = graph.matches.filter((m) => inScope.has(m.pathname)).map((m) => ({ pathname: m.pathname, span: { lineStart: m.lineStart, lineEnd: m.lineEnd } }));
|
|
139
157
|
}
|
|
140
158
|
else {
|
|
141
159
|
const { mimetypes } = ctx;
|
|
142
160
|
if (mimetypes === undefined)
|
|
143
161
|
throw new Error("EntryFind.#matchPathnames: body matcher requires the mimetypes capability in ctx");
|
|
144
|
-
|
|
162
|
+
matches = [];
|
|
145
163
|
for (const cand of candidates) {
|
|
146
164
|
const match = await Matcher.matchAgainstContent(statement.body, cand.content, cand.mimetype, mimetypes); // matcher runs on content — §find-glob-filter-on-content
|
|
147
165
|
if (match.status === 400)
|
|
148
|
-
return { status: 400,
|
|
166
|
+
return { status: 400, matches: [] };
|
|
149
167
|
if (match.status !== 200)
|
|
150
168
|
continue; // 204 no-match / 415 unsupported / 203 fallback → not a content hit
|
|
151
|
-
|
|
169
|
+
const spans = match.spans ?? [];
|
|
170
|
+
// A matched-but-span-less hit (e.g. an xpath computed scalar — count()) still includes
|
|
171
|
+
// the entry; it has no source location, so the item carries the whole entry (span null).
|
|
172
|
+
if (spans.length === 0) {
|
|
173
|
+
matches.push({ pathname: cand.pathname, span: null });
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
for (const span of spans)
|
|
177
|
+
matches.push({ pathname: cand.pathname, span });
|
|
152
178
|
}
|
|
153
179
|
}
|
|
154
180
|
if (statement.lineMarker !== null) {
|
|
155
|
-
const page = EntryFind.#paginate(
|
|
181
|
+
const page = EntryFind.#paginate(matches, LineMarkerOps.firstLast(statement.lineMarker));
|
|
156
182
|
if (page.status !== 200)
|
|
157
|
-
return { status: page.status,
|
|
158
|
-
|
|
183
|
+
return { status: page.status, matches: [] };
|
|
184
|
+
matches = page.items ?? [];
|
|
159
185
|
}
|
|
160
|
-
return { status: 200,
|
|
186
|
+
return { status: 200, matches };
|
|
161
187
|
}
|
|
162
188
|
// FIND result = the scheme's catalog rows, filtered to the matched entries and kept in
|
|
163
189
|
// match order. A catalog row is exactly what the manifest catalogs (path + per-channel
|
|
@@ -166,26 +192,34 @@ export default class EntryFind {
|
|
|
166
192
|
static async findSessionEntries(statement, ctx, manifest) {
|
|
167
193
|
const match = await EntryFind.#matchPathnames(statement, ctx, manifest);
|
|
168
194
|
if (match.status !== 200)
|
|
169
|
-
return { status: match.status, content: null, mimetype: null, results: [], itemsTokenTotal: 0 };
|
|
195
|
+
return { status: match.status, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
170
196
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
171
|
-
// The catalog row is keyed by its addressable path; align each
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
197
|
+
// The catalog row is keyed by its addressable path; align each match to its row through
|
|
198
|
+
// the same EntryManifest.toPath the catalog uses (single source of truth). Match order is
|
|
199
|
+
// preserved (rank for ~semantic); a match whose entry has no row (e.g. the self-excluded
|
|
200
|
+
// manifest) drops out. Each match becomes ONE result item carrying its span (#286).
|
|
201
|
+
// §run-scheme — a run-scope FIND aligns to the building run's OWN run-scope catalog rows
|
|
202
|
+
// (the owner prefix the candidate scope already enforced), never the session filesystem.
|
|
203
|
+
const runOwnerPrefix = manifest.scope === "run" ? EntryFind.#runOwnerPrefix(statement) : undefined;
|
|
204
|
+
const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, runOwnerPrefix)).map((r) => [r.path, r]));
|
|
176
205
|
const results = [];
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
206
|
+
const matches = [];
|
|
207
|
+
const seenPath = new Set();
|
|
208
|
+
let itemsTokenTotal = 0; // content weight summed per UNIQUE entry (items repeat a file across its matches)
|
|
209
|
+
for (const m of match.matches) {
|
|
210
|
+
const row = byPath.get(EntryManifest.toPath(scheme, m.pathname));
|
|
211
|
+
if (row === undefined)
|
|
212
|
+
continue;
|
|
213
|
+
results.push(m.span !== null ? { ...row, matchSpan: m.span } : row);
|
|
214
|
+
matches.push(m);
|
|
215
|
+
if (!seenPath.has(m.pathname)) {
|
|
216
|
+
seenPath.add(m.pathname);
|
|
217
|
+
itemsTokenTotal += Object.values(row.channels).reduce((s, c) => s + c.tokens, 0);
|
|
218
|
+
}
|
|
181
219
|
}
|
|
182
|
-
// The matched set's content weight — the sum of every matched entry's live channel
|
|
183
|
-
// tokens. Self-describes the FIND ("N items holding T tokens"): the per-scheme roll-up
|
|
184
|
-
// in the turn-0 foist, the READ-cost of any search's hits before the model reads them.
|
|
185
|
-
const itemsTokenTotal = results.reduce((sum, r) => sum + Object.values(r.channels).reduce((s, c) => s + c.tokens, 0), 0);
|
|
186
220
|
// Compact JSON — the model parses it natively; the `null, 2` pretty-print was ~36%
|
|
187
221
|
// whitespace of the catalog body, tokens the wire doesn't need.
|
|
188
|
-
return { status: 200, content: JSON.stringify(results), mimetype: "application/json", results, itemsTokenTotal };
|
|
222
|
+
return { status: 200, content: JSON.stringify(results), mimetype: "application/json", results, itemsTokenTotal, pathnames: [...seenPath], matches };
|
|
189
223
|
}
|
|
190
224
|
}
|
|
191
225
|
//# sourceMappingURL=_entry-find.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-find.js","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qFAAqF;AACrF,uFAAuF;AACvF,
|
|
1
|
+
{"version":3,"file":"_entry-find.js","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,3 +29,26 @@ WHERE e.scope = 'session'
|
|
|
29
29
|
)
|
|
30
30
|
)
|
|
31
31
|
ORDER BY e.pathname;
|
|
32
|
+
|
|
33
|
+
-- PREP: find_run_entry_candidates
|
|
34
|
+
-- §run-scheme — run-scope FIND, byte-identical to find_session_entry_candidates BUT scope='run'.
|
|
35
|
+
-- The owner narrowing rides $scope_pathname (Run.find folds the owner into the prefix glob —
|
|
36
|
+
-- `/<owner>/*`), so a run reaches only its own (self) or a named sister's scratch. Additive: the
|
|
37
|
+
-- session query above is untouched (§run-scheme Inc-1).
|
|
38
|
+
SELECT e.id AS entry_id, e.pathname, ec.content, ec.mimetype
|
|
39
|
+
FROM entries e
|
|
40
|
+
JOIN entry_channels ec ON ec.entry_id = e.id AND ec.name = $channel
|
|
41
|
+
WHERE e.scope = 'run'
|
|
42
|
+
AND e.session_id = $session_id
|
|
43
|
+
AND e.scheme IS $scheme
|
|
44
|
+
AND ($scope_pathname IS NULL OR e.pathname GLOB $scope_pathname)
|
|
45
|
+
AND (
|
|
46
|
+
json_array_length(COALESCE($tags, '[]')) = 0
|
|
47
|
+
OR e.id IN (
|
|
48
|
+
SELECT entry_id FROM entry_tags
|
|
49
|
+
WHERE tag IN (SELECT value FROM json_each(COALESCE($tags, '[]')))
|
|
50
|
+
GROUP BY entry_id
|
|
51
|
+
HAVING COUNT(DISTINCT tag) = json_array_length(COALESCE($tags, '[]'))
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
ORDER BY e.pathname;
|
|
@@ -5,7 +5,12 @@ export default class EntryGraph {
|
|
|
5
5
|
static populateFrom(db: Db, sessionId: number, entryId: number, symbols: readonly MimeSymbol[], references: readonly MimeRef[]): Promise<void>;
|
|
6
6
|
static match(db: Db, sessionId: number, scheme: string | null, raw: string): Promise<{
|
|
7
7
|
status: number;
|
|
8
|
-
|
|
8
|
+
matches: GraphMatch[];
|
|
9
9
|
}>;
|
|
10
10
|
}
|
|
11
|
+
export interface GraphMatch {
|
|
12
|
+
pathname: string;
|
|
13
|
+
lineStart: number;
|
|
14
|
+
lineEnd: number;
|
|
15
|
+
}
|
|
11
16
|
//# sourceMappingURL=_entry-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-graph.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,UAAU;;WAId,YAAY,CACrB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC1C,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAC/D,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-graph.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,UAAU;;WAId,YAAY,CACrB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC1C,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAC/D,OAAO,CAAC,IAAI,CAAC;WAqBH,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAuDxI;AAID,MAAM,WAAW,UAAU;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE"}
|
|
@@ -28,40 +28,54 @@ export default class EntryGraph {
|
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
// Resolve a FIND graph-dialect body (`@<sym` / `@>sym` / `@sym`) to
|
|
32
|
-
//
|
|
31
|
+
// Resolve a FIND graph-dialect body (`@<sym` / `@>sym` / `@sym`) to matches within
|
|
32
|
+
// (session, scheme). Each match is a (pathname, span) — the reference's line (@<) or
|
|
33
|
+
// the symbol's def span (@> / def side of @) — so a matcher resolves to (file, span)
|
|
34
|
+
// uniformly with every other dialect (#286). Malformed → 400.
|
|
33
35
|
static async match(db, sessionId, scheme, raw) {
|
|
34
36
|
const m = /^@([<>]?)(.+)$/.exec(raw.trim());
|
|
35
37
|
if (m === null)
|
|
36
|
-
return { status: 400,
|
|
38
|
+
return { status: 400, matches: [] };
|
|
37
39
|
const direction = m[1];
|
|
38
40
|
const name = m[2].trim();
|
|
39
41
|
if (name.length === 0)
|
|
40
|
-
return { status: 400,
|
|
42
|
+
return { status: 400, matches: [] };
|
|
41
43
|
if (direction === "<")
|
|
42
|
-
return { status: 200,
|
|
44
|
+
return { status: 200, matches: await EntryGraph.#referrers(db, sessionId, scheme, name) };
|
|
43
45
|
if (direction === ">")
|
|
44
|
-
return { status: 200,
|
|
45
|
-
// @sym neighborhood: the def ∪ referrers ∪ referents, deduped.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
return { status: 200, matches: await EntryGraph.#referents(db, sessionId, scheme, name) };
|
|
47
|
+
// @sym neighborhood: the def ∪ referrers ∪ referents, deduped by (pathname, span).
|
|
48
|
+
return {
|
|
49
|
+
status: 200,
|
|
50
|
+
matches: EntryGraph.#dedupe([
|
|
51
|
+
...await EntryGraph.#defs(db, sessionId, scheme, name),
|
|
52
|
+
...await EntryGraph.#referrers(db, sessionId, scheme, name),
|
|
53
|
+
...await EntryGraph.#referents(db, sessionId, scheme, name),
|
|
54
|
+
]),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
static #dedupe(matches) {
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const out = [];
|
|
60
|
+
for (const m of matches) {
|
|
61
|
+
const key = `${m.pathname}\0${m.lineStart}\0${m.lineEnd}`;
|
|
62
|
+
if (!seen.has(key)) {
|
|
63
|
+
seen.add(key);
|
|
64
|
+
out.push(m);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out.sort((a, b) => a.pathname.localeCompare(b.pathname) || a.lineStart - b.lineStart);
|
|
54
68
|
}
|
|
55
69
|
static async #referrers(db, sessionId, scheme, name) {
|
|
56
70
|
const rows = await db.graph_referrers.all({ session_id: sessionId, scheme, name });
|
|
57
|
-
return rows.map((r) => r.pathname);
|
|
71
|
+
return rows.map((r) => ({ pathname: r.pathname, lineStart: r.line, lineEnd: r.end_line }));
|
|
58
72
|
}
|
|
59
73
|
static async #defs(db, sessionId, scheme, name) {
|
|
60
74
|
const rows = await db.graph_def_pathnames_by_name.all({ session_id: sessionId, scheme, name });
|
|
61
|
-
return rows.map((r) => r.pathname);
|
|
75
|
+
return rows.map((r) => ({ pathname: r.pathname, lineStart: r.line, lineEnd: r.end_line }));
|
|
62
76
|
}
|
|
63
77
|
// @>sym: sym's def(s) → the target names those defs reference → those targets'
|
|
64
|
-
// defining entries. The def's full qualified path is the @> join key (#186).
|
|
78
|
+
// defining entries (with their def spans). The def's full qualified path is the @> join key (#186).
|
|
65
79
|
static async #referents(db, sessionId, scheme, name) {
|
|
66
80
|
const defs = await db.graph_resolve_def.all({ session_id: sessionId, name });
|
|
67
81
|
const targets = new Set();
|
|
@@ -71,11 +85,10 @@ export default class EntryGraph {
|
|
|
71
85
|
for (const r of refs)
|
|
72
86
|
targets.add(r.name);
|
|
73
87
|
}
|
|
74
|
-
const out =
|
|
88
|
+
const out = [];
|
|
75
89
|
for (const t of targets)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return [...out].sort();
|
|
90
|
+
out.push(...await EntryGraph.#defs(db, sessionId, scheme, t));
|
|
91
|
+
return EntryGraph.#dedupe(out);
|
|
79
92
|
}
|
|
80
93
|
}
|
|
81
94
|
//# sourceMappingURL=_entry-graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-graph.js","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,iFAAiF;AACjF,qFAAqF;AACrF,6EAA6E;AAC7E,sFAAsF;AACtF,EAAE;AACF,mFAAmF;AACnF,6FAA6F;AAC7F,sFAAsF;AACtF,oEAAoE;AAKpE,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,4EAA4E;IAC5E,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,CAAC,KAAK,CAAC,YAAY,CACrB,EAAM,EAAE,SAAiB,EAAE,OAAe,EAC1C,OAA8B,EAAE,UAA8B;QAE9D,MAAO,EAAE,CAAC,iBAAgC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtE,MAAO,EAAE,CAAC,iBAAgC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,MAAO,EAAE,CAAC,gBAA+B,CAAC,GAAG,CAAC;gBAC1C,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACpE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;aAC5E,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,MAAO,EAAE,CAAC,gBAA+B,CAAC,GAAG,CAAC;gBAC1C,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACpE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;aACtE,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"_entry-graph.js","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,19 +19,21 @@ INSERT INTO symbol_refs (session_id, entry_id, name, kind, container, line, col)
|
|
|
19
19
|
VALUES ($session_id, $entry_id, $name, $kind, $container, $line, $col);
|
|
20
20
|
|
|
21
21
|
-- PREP: graph_referrers
|
|
22
|
-
-- @<sym — entries (scheme-scoped) that reference sym
|
|
23
|
-
|
|
22
|
+
-- @<sym — entries (scheme-scoped) that reference sym, with each reference's line
|
|
23
|
+
-- (#286: a matcher resolves to (file, span) — one item per reference occurrence).
|
|
24
|
+
SELECT DISTINCT e.pathname, r.line AS line, r.line AS end_line
|
|
24
25
|
FROM symbol_refs r JOIN entries e ON e.id = r.entry_id
|
|
25
26
|
WHERE r.session_id = $session_id AND e.scheme IS $scheme AND r.name = $name
|
|
26
|
-
ORDER BY e.pathname;
|
|
27
|
+
ORDER BY e.pathname, r.line;
|
|
27
28
|
|
|
28
29
|
-- PREP: graph_def_pathnames_by_name
|
|
29
|
-
-- Resolve a name → the defining entries' pathnames (scheme-scoped). Serves
|
|
30
|
-
-- target resolution and @'s neighborhood def lookup.
|
|
31
|
-
|
|
30
|
+
-- Resolve a name → the defining entries' pathnames + def span (scheme-scoped). Serves
|
|
31
|
+
-- @>'s target resolution and @'s neighborhood def lookup. end_line falls back to line
|
|
32
|
+
-- when a def has no end (#286: the symbol's line..end_line is its (file, span)).
|
|
33
|
+
SELECT DISTINCT e.pathname, d.line AS line, COALESCE(d.end_line, d.line) AS end_line
|
|
32
34
|
FROM symbol_defs d JOIN entries e ON e.id = d.entry_id
|
|
33
35
|
WHERE d.session_id = $session_id AND e.scheme IS $scheme AND d.name = $name
|
|
34
|
-
ORDER BY e.pathname;
|
|
36
|
+
ORDER BY e.pathname, d.line;
|
|
35
37
|
|
|
36
38
|
-- PREP: graph_resolve_def
|
|
37
39
|
-- sym → its def(s): (entry_id, container) to compose the qualified path for @>.
|
|
@@ -11,7 +11,7 @@ export type CatalogEntry = {
|
|
|
11
11
|
};
|
|
12
12
|
export default class EntryManifest {
|
|
13
13
|
static toPath(scheme: string | null, pathname: string): string;
|
|
14
|
-
static catalogRowsFor(ctx: PlurnkSchemeContext, schemeFilter?: string | null): Promise<CatalogEntry[]>;
|
|
14
|
+
static catalogRowsFor(ctx: PlurnkSchemeContext, schemeFilter?: string | null, runOwnerPrefix?: string): Promise<CatalogEntry[]>;
|
|
15
15
|
static maintainDerivations(ctx: PlurnkSchemeContext): Promise<void>;
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=_entry-manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-manifest.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-manifest.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-manifest.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-manifest.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAanE,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAE9J,MAAM,CAAC,OAAO,OAAO,aAAa;IAG9B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;WAqBjD,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;WAiDxH,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAwD5E"}
|