@plurnk/plurnk-service 0.50.0 → 0.52.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 +2 -2
- package/SPEC.md +15 -5
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +73 -54
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +4 -6
- package/dist/core/git-membership.js +1 -1
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/run-ops.sql +5 -0
- package/dist/core/session-settings.d.ts +4 -0
- package/dist/core/session-settings.d.ts.map +1 -1
- package/dist/core/session-settings.js +8 -0
- package/dist/core/session-settings.js.map +1 -1
- package/dist/schemes/Plurnk.js +1 -1
- package/dist/schemes/Plurnk.js.map +1 -1
- package/dist/schemes/Run.d.ts +4 -2
- package/dist/schemes/Run.d.ts.map +1 -1
- package/dist/schemes/Run.js +86 -51
- package/dist/schemes/Run.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +12 -0
- package/dist/schemes/_entry-find.d.ts +3 -17
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +67 -65
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-graph.d.ts +0 -6
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +0 -8
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +0 -10
- package/dist/schemes/_entry-manifest.d.ts +13 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +84 -89
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +14 -6
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +11 -0
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +6 -5
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +9 -0
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/methods/session_create.js +4 -4
- package/dist/server/methods/session_create.js.map +1 -1
- package/migrations/0000-00-00.01_schema.sql +3 -1
- package/package.json +4 -4
- package/requirements.md +11 -3
package/dist/schemes/Run.js
CHANGED
|
@@ -1,76 +1,111 @@
|
|
|
1
1
|
import RunCap from "../core/run-cap.js";
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
2
|
+
import EntryOps from "./_entry-ops.js";
|
|
3
|
+
// run:// — the run scheme: inter-run CONTROL (spawn/irc; COPY=fork is Engine.#handleCopy) AND
|
|
4
|
+
// run-scoped STORAGE (§run-scheme). The run is always the AUTHORITY: run://<name>/<path> is
|
|
5
|
+
// entry <path> owned by run <name>; run:/// (empty authority) is self. Run is excluded from
|
|
6
|
+
// #extractTarget's authority-fold (Engine) so the empty-authority=self signal survives.
|
|
7
|
+
// - path present → storage: READ any run's entry by address (cross-run read ok); EDIT self
|
|
8
|
+
// only (cross-run write → 403 — a run reads a sister's notes, never writes them).
|
|
9
|
+
// - path absent → control on the run-as-actor: EDIT spawns a sister, SEND ircs one.
|
|
8
10
|
export default class Run {
|
|
9
|
-
// A control scheme — no entry channels. `category` is "data" only because
|
|
10
|
-
// SchemeManifest offers no control/process value; the field is descriptive
|
|
11
|
-
// and read nowhere (raised with plurnk-schemes). writableBy gates who may
|
|
12
|
-
// emit run:// ops (§scheme-surface-writableby-403).
|
|
13
11
|
static manifest = {
|
|
14
12
|
name: "run",
|
|
15
|
-
channels: {},
|
|
16
|
-
defaultChannel: "",
|
|
13
|
+
channels: { body: "text/markdown" },
|
|
14
|
+
defaultChannel: "body",
|
|
17
15
|
category: "data",
|
|
18
|
-
scope: "
|
|
16
|
+
scope: "run",
|
|
19
17
|
writableBy: ["model", "client"],
|
|
20
18
|
volatile: false,
|
|
21
19
|
modelVisible: true,
|
|
22
|
-
example: "<<EDIT(run:///
|
|
20
|
+
example: "<<EDIT(run:///todo.md):- [ ] ship #270:EDIT",
|
|
23
21
|
};
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
22
|
+
// The run name from a run:// target's authority (hostname). "" = self (empty authority);
|
|
23
|
+
// null when the target isn't a run:// url.
|
|
24
|
+
static #authority(target) {
|
|
25
|
+
if (target === null || target.kind !== "url" || target.scheme !== "run")
|
|
26
|
+
return null;
|
|
27
|
+
return target.hostname ?? "";
|
|
28
|
+
}
|
|
29
|
+
// The entry path within the run — the target's pathname; "" / "/" mean no entry (the
|
|
30
|
+
// run-as-actor / control form).
|
|
31
|
+
static #entryPath(target) {
|
|
32
|
+
if (target === null || target.kind !== "url")
|
|
33
|
+
return "";
|
|
34
|
+
const p = target.pathname ?? "";
|
|
35
|
+
return p === "/" ? "" : p;
|
|
36
|
+
}
|
|
37
|
+
// The acting run's own name — for self-resolution and the cross-run-write gate.
|
|
38
|
+
static async #selfName(ctx) {
|
|
39
|
+
const row = await ctx.db.run_name_by_id.get({ run_id: ctx.runId });
|
|
41
40
|
if (row === undefined)
|
|
42
|
-
throw new Error("run
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
throw new Error("run: acting run has no name");
|
|
42
|
+
return row.name;
|
|
43
|
+
}
|
|
44
|
+
// Clone a statement with its target's authority (hostname) set to the resolved owner, so
|
|
45
|
+
// the shared entry helper folds it into the storage path (/<owner>/<entry>).
|
|
46
|
+
static #withOwner(statement, owner) {
|
|
47
|
+
const t = statement.target;
|
|
48
|
+
if (t === null || t.kind !== "url")
|
|
49
|
+
return statement;
|
|
50
|
+
return { ...statement, target: { ...t, hostname: owner } };
|
|
51
|
+
}
|
|
52
|
+
async edit(statement, ctx) {
|
|
53
|
+
const authority = Run.#authority(statement.target);
|
|
54
|
+
if (authority === null)
|
|
55
|
+
return { status: 400, error: "run:// requires a run target" };
|
|
56
|
+
const entryPath = Run.#entryPath(statement.target);
|
|
57
|
+
if (entryPath === "") {
|
|
58
|
+
// Control: spawn the sister named by the authority. Self cannot be spawned.
|
|
59
|
+
if (authority === "" || authority === ".")
|
|
60
|
+
return { status: 400, error: "run:// spawn cannot target self (run://<name>)" };
|
|
61
|
+
if (ctx.injectRun === undefined)
|
|
62
|
+
throw new Error("run.edit: injectRun capability absent");
|
|
63
|
+
const denied = await RunCap.deny(ctx.db, ctx.sessionId);
|
|
64
|
+
if (denied !== null)
|
|
65
|
+
return denied;
|
|
66
|
+
const row = await ctx.db.fork_insert_run.get({
|
|
67
|
+
session_id: ctx.sessionId, name: authority, parent_run_id: ctx.runId, origin: ctx.writer,
|
|
68
|
+
});
|
|
69
|
+
if (row === undefined)
|
|
70
|
+
throw new Error("run.edit: run insert returned no row");
|
|
71
|
+
await ctx.injectRun({ sessionId: ctx.sessionId, runId: row.id, prompt: statement.body ?? "" });
|
|
72
|
+
return { status: 200, body: authority };
|
|
73
|
+
}
|
|
74
|
+
// Storage: write a run-scope entry. Self only — cross-run write is denied (§run-scheme).
|
|
75
|
+
const self = await Run.#selfName(ctx);
|
|
76
|
+
const owner = authority === "" ? self : authority;
|
|
77
|
+
if (owner !== self)
|
|
78
|
+
return { status: 403, error: "run:// write is self-only — read a sister's notes, never write them" };
|
|
79
|
+
return EntryOps.editSessionEntry(Run.#withOwner(statement, owner), ctx, Run.manifest);
|
|
80
|
+
}
|
|
81
|
+
async read(statement, ctx) {
|
|
82
|
+
const authority = Run.#authority(statement.target);
|
|
83
|
+
if (authority === null)
|
|
84
|
+
return { status: 400, content: null, mimetype: null, channel: null };
|
|
85
|
+
const entryPath = Run.#entryPath(statement.target);
|
|
86
|
+
if (entryPath === "")
|
|
87
|
+
return { status: 400, content: null, mimetype: null, channel: null }; // a run is not READable, only its entries
|
|
88
|
+
// Cross-run READ is allowed — resolve self, fold the owner into the storage path.
|
|
89
|
+
const owner = authority === "" ? await Run.#selfName(ctx) : authority;
|
|
90
|
+
return EntryOps.readSessionEntry(Run.#withOwner(statement, owner), ctx, Run.manifest);
|
|
45
91
|
}
|
|
46
|
-
// SEND(run:///<name>):hint — irc; deliver the hint to an existing sister run.
|
|
47
|
-
// `run:///.` messages self.
|
|
48
92
|
async send(statement, ctx) {
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
return { status: 400, error: "run:// irc requires a run
|
|
93
|
+
const authority = Run.#authority(statement.target);
|
|
94
|
+
if (authority === null)
|
|
95
|
+
return { status: 400, error: "run:// irc requires a run (run://<name>)" };
|
|
52
96
|
if (ctx.injectRun === undefined)
|
|
53
97
|
throw new Error("run.send: injectRun capability absent");
|
|
54
98
|
let runId = ctx.runId;
|
|
55
|
-
if (
|
|
56
|
-
const row = await ctx.db.run_resolve_by_name.get({ session_id: ctx.sessionId, name });
|
|
99
|
+
if (authority !== "" && authority !== ".") {
|
|
100
|
+
const row = await ctx.db.run_resolve_by_name.get({ session_id: ctx.sessionId, name: authority });
|
|
57
101
|
if (row === undefined)
|
|
58
|
-
return { status: 404, error: `run
|
|
102
|
+
return { status: 404, error: `run://${authority} not found in this session` };
|
|
59
103
|
runId = row.id;
|
|
60
104
|
}
|
|
61
|
-
// SEND's body is a SendBody { raw, json } (or a bare string in some forms);
|
|
62
|
-
// the irc message is its raw text.
|
|
63
105
|
const body = statement.body;
|
|
64
106
|
const prompt = body === null ? "" : typeof body === "string" ? body : body.raw;
|
|
65
107
|
await ctx.injectRun({ sessionId: ctx.sessionId, runId, prompt });
|
|
66
108
|
return { status: 200 };
|
|
67
109
|
}
|
|
68
|
-
// The run name from a run:// target: pathname sans leading slash(es). null
|
|
69
|
-
// when the target isn't a run:// url; "" / "." denote self.
|
|
70
|
-
static #runName(target) {
|
|
71
|
-
if (target === null || target.kind !== "url" || target.scheme !== "run")
|
|
72
|
-
return null;
|
|
73
|
-
return target.pathname.replace(/^\/+/, "");
|
|
74
|
-
}
|
|
75
110
|
}
|
|
76
111
|
//# sourceMappingURL=Run.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"Run.js","sourceRoot":"","sources":["../../src/schemes/Run.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,18 @@ INSERT INTO entries (scope, session_id, scheme, pathname)
|
|
|
19
19
|
VALUES ('session', $session_id, $scheme, $pathname)
|
|
20
20
|
RETURNING id;
|
|
21
21
|
|
|
22
|
+
-- PREP: crud_find_run_entry
|
|
23
|
+
-- Run-scope twin of crud_find_session_entry (§run-scheme). A run entry is keyed
|
|
24
|
+
-- (scope='run', scheme='run', pathname); the owning run rides the pathname's first
|
|
25
|
+
-- segment (the folded run:// authority), so there is no run_id column.
|
|
26
|
+
SELECT id FROM entries
|
|
27
|
+
WHERE scope = 'run' AND session_id = $session_id AND scheme IS $scheme AND pathname = $pathname;
|
|
28
|
+
|
|
29
|
+
-- PREP: crud_insert_run_entry
|
|
30
|
+
INSERT INTO entries (scope, session_id, scheme, pathname)
|
|
31
|
+
VALUES ('run', $session_id, $scheme, $pathname)
|
|
32
|
+
RETURNING id;
|
|
33
|
+
|
|
22
34
|
-- PREP: crud_register_session_member
|
|
23
35
|
-- Idempotent bare-membership insert (SPEC §membership D4 — git ls-files membership).
|
|
24
36
|
-- A git-tracked file is a session member by virtue of being tracked; the row
|
|
@@ -1,28 +1,14 @@
|
|
|
1
|
-
import type { FindStatement
|
|
2
|
-
import type { Db } from "../core/Db.ts";
|
|
1
|
+
import type { FindStatement } from "@plurnk/plurnk-grammar";
|
|
3
2
|
import type { PlurnkSchemeContext, SchemeManifest } from "../core/scheme-types.ts";
|
|
3
|
+
import { type CatalogEntry } from "./_entry-manifest.ts";
|
|
4
4
|
export interface FindResult {
|
|
5
5
|
status: number;
|
|
6
6
|
content: string | null;
|
|
7
7
|
mimetype: string | null;
|
|
8
|
-
results:
|
|
9
|
-
}
|
|
10
|
-
export interface Finding {
|
|
11
|
-
path: string;
|
|
12
|
-
extent: {
|
|
13
|
-
first: number;
|
|
14
|
-
last: number;
|
|
15
|
-
} | null;
|
|
16
|
-
symbol?: string;
|
|
17
|
-
content?: string;
|
|
8
|
+
results: CatalogEntry[];
|
|
18
9
|
}
|
|
19
10
|
export default class EntryFind {
|
|
20
11
|
#private;
|
|
21
|
-
static matchFindings(statement: FindStatement | OpenStatement | FoldStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<{
|
|
22
|
-
status: number;
|
|
23
|
-
findings: Finding[];
|
|
24
|
-
}>;
|
|
25
|
-
static findingsForMatch(db: Db, entryId: number, path: string, lines: readonly number[]): Promise<Finding[]>;
|
|
26
12
|
static findSessionEntries(statement: FindStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<FindResult>;
|
|
27
13
|
}
|
|
28
14
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAgBA,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;AAGxE,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,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;;WAgIb,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAgBrI"}
|
|
@@ -1,20 +1,23 @@
|
|
|
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
|
+
// filtered to the statement's matches. A matcher (glob/regex/jsonpath/xpath/~semantic/
|
|
4
|
+
// @graph) decides WHICH entries appear; it never reshapes a row (there is no per-match
|
|
5
|
+
// extent — match-location is a READ, not a FIND field). The result is a JSON array of
|
|
6
|
+
// catalog rows: the per-scheme slice of the catalog (§find-result-catalog-rows).
|
|
3
7
|
//
|
|
4
8
|
// Slot semantics (plurnk.md §"Body matcher dispatch (FIND, READ, OPEN, FOLD)"):
|
|
5
9
|
// target — required scope (path or glob); selects which entries are candidates
|
|
6
|
-
// body — matcher (glob/regex/jsonpath/xpath).
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// whose content matches; `OPEN(countries/**):Paris*` selects entries
|
|
11
|
-
// whose content matches. The path-glob is the (target).
|
|
10
|
+
// body — matcher (glob/regex/jsonpath/xpath/~semantic/@graph). A content matcher
|
|
11
|
+
// runs against the entry's default-channel CONTENT (Matcher.matchAgainstContent
|
|
12
|
+
// → the mimetypes daughter) and INCLUDES/EXCLUDES the entry — e.g.
|
|
13
|
+
// `FIND(log:///**/error):/timeout/i` keeps logs whose content matches.
|
|
12
14
|
// signal — tag filter: candidate entry must have ALL listed tags
|
|
13
15
|
// <L> — results pagination: select results N..M from the matched list
|
|
14
16
|
import { LineMarkerOps } from "../content/index.js";
|
|
15
17
|
import Matcher from "../content/matcher.js";
|
|
16
18
|
import { decodePathParens } from "../core/path-decode.js";
|
|
17
19
|
import EntryGraph from "./_entry-graph.js";
|
|
20
|
+
import EntryManifest from "./_entry-manifest.js";
|
|
18
21
|
import EntrySemantic from "./_entry-semantic.js";
|
|
19
22
|
export default class EntryFind {
|
|
20
23
|
static #scopePathnameOf(statement) {
|
|
@@ -53,35 +56,44 @@ export default class EntryFind {
|
|
|
53
56
|
return { status: 416 };
|
|
54
57
|
return { status: 200, items: items.slice(n - 1, m) };
|
|
55
58
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
static #unique(xs) {
|
|
60
|
+
const seen = new Set();
|
|
61
|
+
const out = [];
|
|
62
|
+
for (const x of xs)
|
|
63
|
+
if (!seen.has(x)) {
|
|
64
|
+
seen.add(x);
|
|
65
|
+
out.push(x);
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
// Resolve a FIND to its matched session PATHNAMES — entry-level, unique, in result
|
|
70
|
+
// order (rank for ~semantic, candidate order otherwise). Candidate selection (scope +
|
|
71
|
+
// tags) runs in SQL (find_session_entry_candidates); a content matcher then runs against
|
|
72
|
+
// each candidate's default-channel CONTENT (Matcher.matchAgainstContent → the mimetypes
|
|
73
|
+
// 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). The matched
|
|
75
|
+
// SET is what FIND returns; the match LOCATION (which line/symbol) is a READ concern.
|
|
76
|
+
static async #matchPathnames(statement, ctx, manifest) {
|
|
64
77
|
if (statement.target === null)
|
|
65
|
-
return { status: 400,
|
|
78
|
+
return { status: 400, pathnames: [] };
|
|
66
79
|
// Scope by the manifest's persisted entries.scheme (storedScheme; absent →
|
|
67
80
|
// name). File sets storedScheme=null — bare rows.
|
|
68
81
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
69
|
-
const addr = (pathname) => `${manifest.name}://${pathname}`;
|
|
70
82
|
if (statement.body !== null && statement.body.dialect === "semantic") {
|
|
71
83
|
// ~query: embed the query text, FTS-narrow by its terms, cosine-rank the
|
|
72
84
|
// narrowed set, top-K. 501 when no embeddings handler is installed (the
|
|
73
85
|
// channel degrades to empty bytes). <L> carries K.
|
|
74
86
|
const { mimetypes } = ctx;
|
|
75
87
|
if (mimetypes === undefined)
|
|
76
|
-
return { status: 501,
|
|
88
|
+
return { status: 501, pathnames: [] };
|
|
77
89
|
if (statement.lineMarker === null)
|
|
78
|
-
return { status: 400,
|
|
90
|
+
return { status: 400, pathnames: [] }; // ~query needs a top-K, e.g. ~query<10>
|
|
79
91
|
const ranked = await EntrySemantic.rankSemantic(ctx.db, ctx.sessionId, scheme, mimetypes, statement.body.raw, LineMarkerOps.firstLast(statement.lineMarker));
|
|
80
92
|
if (ranked.status !== 200)
|
|
81
|
-
return { status: ranked.status,
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
return { status: 200,
|
|
93
|
+
return { status: ranked.status, pathnames: [] };
|
|
94
|
+
// Rank order; a chunk-ranked list can repeat an entry across chunks → dedupe,
|
|
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)) };
|
|
85
97
|
}
|
|
86
98
|
const scopePathname = EntryFind.#scopePathnameOf(statement);
|
|
87
99
|
// grammar 0.46 regex-in-path: a `#pattern#flags` target filters by regex over the pathname (below), so it takes no scope-prefix glob.
|
|
@@ -106,14 +118,14 @@ export default class EntryFind {
|
|
|
106
118
|
re = new RegExp(statement.target.pattern, statement.target.flags || undefined);
|
|
107
119
|
}
|
|
108
120
|
catch {
|
|
109
|
-
return { status: 400,
|
|
121
|
+
return { status: 400, pathnames: [] };
|
|
110
122
|
}
|
|
111
123
|
candidates = candidates.filter((c) => re.test(c.pathname));
|
|
112
124
|
}
|
|
113
|
-
let
|
|
125
|
+
let pathnames;
|
|
114
126
|
if (statement.body === null) {
|
|
115
|
-
// No body matcher —
|
|
116
|
-
|
|
127
|
+
// No body matcher — every in-scope candidate is in the result.
|
|
128
|
+
pathnames = candidates.map((c) => c.pathname);
|
|
117
129
|
}
|
|
118
130
|
else if (statement.body.dialect === "graph") {
|
|
119
131
|
// @graph (plurnk-service#186): body is `@<sym` / `@>sym` / `@sym`.
|
|
@@ -122,62 +134,52 @@ export default class EntryFind {
|
|
|
122
134
|
const inScope = new Set(candidates.map((c) => c.pathname));
|
|
123
135
|
const graph = await EntryGraph.match(ctx.db, ctx.sessionId, scheme, statement.body.raw);
|
|
124
136
|
if (graph.status !== 200)
|
|
125
|
-
return { status: graph.status,
|
|
126
|
-
|
|
137
|
+
return { status: graph.status, pathnames: [] };
|
|
138
|
+
pathnames = graph.pathnames.filter((p) => inScope.has(p));
|
|
127
139
|
}
|
|
128
140
|
else {
|
|
129
141
|
const { mimetypes } = ctx;
|
|
130
142
|
if (mimetypes === undefined)
|
|
131
|
-
throw new Error("EntryFind
|
|
132
|
-
|
|
143
|
+
throw new Error("EntryFind.#matchPathnames: body matcher requires the mimetypes capability in ctx");
|
|
144
|
+
pathnames = [];
|
|
133
145
|
for (const cand of candidates) {
|
|
134
146
|
const match = await Matcher.matchAgainstContent(statement.body, cand.content, cand.mimetype, mimetypes); // matcher runs on content — §find-glob-filter-on-content
|
|
135
147
|
if (match.status === 400)
|
|
136
|
-
return { status: 400,
|
|
148
|
+
return { status: 400, pathnames: [] };
|
|
137
149
|
if (match.status !== 200)
|
|
138
150
|
continue; // 204 no-match / 415 unsupported / 203 fallback → not a content hit
|
|
139
|
-
//
|
|
140
|
-
findings.push(...await EntryFind.findingsForMatch(db, cand.entry_id, addr(cand.pathname), match.lines ?? []));
|
|
151
|
+
pathnames.push(cand.pathname); // a content hit includes the entry — entry-level, no extent
|
|
141
152
|
}
|
|
142
153
|
}
|
|
143
154
|
if (statement.lineMarker !== null) {
|
|
144
|
-
const page = EntryFind.#paginate(
|
|
155
|
+
const page = EntryFind.#paginate(pathnames, LineMarkerOps.firstLast(statement.lineMarker));
|
|
145
156
|
if (page.status !== 200)
|
|
146
|
-
return { status: page.status,
|
|
147
|
-
|
|
157
|
+
return { status: page.status, pathnames: [] };
|
|
158
|
+
pathnames = page.items ?? [];
|
|
148
159
|
}
|
|
149
|
-
return { status: 200,
|
|
150
|
-
}
|
|
151
|
-
// Project Findings — resolve a matched entry's hit lines to findings: each line maps to
|
|
152
|
-
// its smallest enclosing symbol (the structural unit it belongs to), or to the line
|
|
153
|
-
// itself when no symbol covers it. Deduped by extent — many hits in one function
|
|
154
|
-
// collapse to one finding. Phase 2b wires this into the FIND result shape.
|
|
155
|
-
static async findingsForMatch(db, entryId, path, lines) {
|
|
156
|
-
const findings = [];
|
|
157
|
-
const seen = new Set();
|
|
158
|
-
for (const line of lines) {
|
|
159
|
-
const sym = await EntryGraph.enclosingSymbol(db, entryId, line);
|
|
160
|
-
const extent = sym === null ? { first: line, last: line } : { first: sym.line, last: sym.endLine };
|
|
161
|
-
const key = `${extent.first}-${extent.last}`;
|
|
162
|
-
if (seen.has(key))
|
|
163
|
-
continue;
|
|
164
|
-
seen.add(key);
|
|
165
|
-
findings.push(sym === null ? { path, extent } : { path, extent, symbol: sym.name });
|
|
166
|
-
}
|
|
167
|
-
return findings;
|
|
160
|
+
return { status: 200, pathnames };
|
|
168
161
|
}
|
|
162
|
+
// FIND result = the scheme's catalog rows, filtered to the matched entries and kept in
|
|
163
|
+
// match order. A catalog row is exactly what the manifest catalogs (path + per-channel
|
|
164
|
+
// {mimetype, tokens, lines}, tags, seconds) — FIND is the filtered, navigable slice of
|
|
165
|
+
// that catalog, rendered as a JSON array (application/json). §find-result-catalog-rows
|
|
169
166
|
static async findSessionEntries(statement, ctx, manifest) {
|
|
170
|
-
const match = await EntryFind
|
|
167
|
+
const match = await EntryFind.#matchPathnames(statement, ctx, manifest);
|
|
171
168
|
if (match.status !== 200)
|
|
172
169
|
return { status: match.status, content: null, mimetype: null, results: [] };
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
170
|
+
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
171
|
+
// The catalog row is keyed by its addressable path; align each matched pathname to
|
|
172
|
+
// its row through the same EntryManifest.toPath the catalog uses (single source of
|
|
173
|
+
// truth). Match order is preserved (rank for ~semantic); a pathname with no row
|
|
174
|
+
// (e.g. the self-excluded manifest) drops out.
|
|
175
|
+
const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme)).map((r) => [r.path, r]));
|
|
176
|
+
const results = [];
|
|
177
|
+
for (const pathname of match.pathnames) {
|
|
178
|
+
const row = byPath.get(EntryManifest.toPath(scheme, pathname));
|
|
179
|
+
if (row !== undefined)
|
|
180
|
+
results.push(row);
|
|
181
|
+
}
|
|
182
|
+
return { status: 200, content: JSON.stringify(results, null, 2), mimetype: "application/json", results };
|
|
181
183
|
}
|
|
182
184
|
}
|
|
183
185
|
//# 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,
|
|
1
|
+
{"version":3,"file":"_entry-find.js","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,5 @@ export default class EntryGraph {
|
|
|
7
7
|
status: number;
|
|
8
8
|
pathnames: string[];
|
|
9
9
|
}>;
|
|
10
|
-
static enclosingSymbol(db: Db, entryId: number, line: number): Promise<{
|
|
11
|
-
name: string;
|
|
12
|
-
kind: string;
|
|
13
|
-
line: number;
|
|
14
|
-
endLine: number;
|
|
15
|
-
} | null>;
|
|
16
10
|
}
|
|
17
11
|
//# 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;WAmBH,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,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,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;WAmBH,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,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA0CtI"}
|
|
@@ -52,14 +52,6 @@ export default class EntryGraph {
|
|
|
52
52
|
set.add(p);
|
|
53
53
|
return { status: 200, pathnames: [...set].sort() };
|
|
54
54
|
}
|
|
55
|
-
// Project Findings — the smallest symbol_def enclosing a line: the structural unit a
|
|
56
|
-
// match at line N belongs to (a finding IS its enclosing function/class/heading,
|
|
57
|
-
// addressed by <L>). null when no symbol covers the line — then the extent is the
|
|
58
|
-
// match line itself.
|
|
59
|
-
static async enclosingSymbol(db, entryId, line) {
|
|
60
|
-
const row = await db.graph_enclosing_symbol.get({ entry_id: entryId, line });
|
|
61
|
-
return row === undefined ? null : { name: row.name, kind: row.kind, line: row.line, endLine: row.end_line ?? row.line };
|
|
62
|
-
}
|
|
63
55
|
static async #referrers(db, sessionId, scheme, name) {
|
|
64
56
|
const rows = await db.graph_referrers.all({ session_id: sessionId, scheme, name });
|
|
65
57
|
return rows.map((r) => r.pathname);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-graph.js","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"_entry-graph.js","sourceRoot":"","sources":["../../src/schemes/_entry-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,16 +14,6 @@ DELETE FROM symbol_refs WHERE entry_id = $entry_id;
|
|
|
14
14
|
INSERT INTO symbol_defs (session_id, entry_id, name, kind, container, line, end_line)
|
|
15
15
|
VALUES ($session_id, $entry_id, $name, $kind, $container, $line, $end_line);
|
|
16
16
|
|
|
17
|
-
-- PREP: graph_enclosing_symbol
|
|
18
|
-
-- Project Findings — the smallest symbol_def covering a line: the structural unit a match
|
|
19
|
-
-- at line N belongs to (function/class/heading). Ties → tightest span; a point symbol
|
|
20
|
-
-- (NULL end_line) covers only its own line.
|
|
21
|
-
SELECT name, kind, line, end_line
|
|
22
|
-
FROM symbol_defs
|
|
23
|
-
WHERE entry_id = $entry_id AND line <= $line AND COALESCE(end_line, line) >= $line
|
|
24
|
-
ORDER BY (COALESCE(end_line, line) - line) ASC
|
|
25
|
-
LIMIT 1;
|
|
26
|
-
|
|
27
17
|
-- PREP: graph_insert_ref
|
|
28
18
|
INSERT INTO symbol_refs (session_id, entry_id, name, kind, container, line, col)
|
|
29
19
|
VALUES ($session_id, $entry_id, $name, $kind, $container, $line, $col);
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { PlurnkSchemeContext } from "../core/scheme-types.ts";
|
|
2
|
+
export type CatalogEntry = {
|
|
3
|
+
path: string;
|
|
4
|
+
seconds?: number;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
channels: Record<string, {
|
|
7
|
+
mimetype: string;
|
|
8
|
+
tokens: number;
|
|
9
|
+
lines: number;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
2
12
|
export default class EntryManifest {
|
|
3
|
-
|
|
4
|
-
static
|
|
13
|
+
static toPath(scheme: string | null, pathname: string): string;
|
|
14
|
+
static catalogRowsFor(ctx: PlurnkSchemeContext, schemeFilter?: string | null): Promise<CatalogEntry[]>;
|
|
15
|
+
static maintainDerivations(ctx: PlurnkSchemeContext): Promise<void>;
|
|
5
16
|
}
|
|
6
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":"
|
|
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;AAUnE,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;WAUjD,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;WA4C/F,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CA2C5E"}
|