@plurnk/plurnk-service 0.56.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 -6
- package/SPEC.md +38 -22
- package/dist/content/matcher.d.ts +4 -0
- package/dist/content/matcher.d.ts.map +1 -1
- package/dist/content/matcher.js +22 -14
- package/dist/content/matcher.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +6 -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 +8 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +246 -70
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +4 -0
- 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/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-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +21 -37
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/session-settings.d.ts +1 -1
- package/dist/core/session-settings.d.ts.map +1 -1
- package/dist/core/session-settings.js +4 -4
- package/dist/core/session-settings.js.map +1 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +11 -3
- 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 +4 -5
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Run.d.ts +5 -1
- package/dist/schemes/Run.d.ts.map +1 -1
- package/dist/schemes/Run.js +36 -12
- 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 +67 -47
- package/dist/schemes/_entry-find.js.map +1 -1
- 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.map +1 -1
- package/dist/schemes/_entry-manifest.js +16 -3
- 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/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +7 -2
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/MethodRegistry.d.ts +1 -0
- package/dist/server/MethodRegistry.d.ts.map +1 -1
- 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/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/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.js +7 -7
- package/dist/server/methods/session_create.js.map +1 -1
- package/migrations/0000-00-00.01_schema.sql +11 -1
- package/package.json +5 -5
package/dist/schemes/Run.js
CHANGED
|
@@ -4,8 +4,9 @@ import EntryFind from "./_entry-find.js";
|
|
|
4
4
|
import { foldAuthorityIntoPath } from "../core/plurnk-uri.js";
|
|
5
5
|
// run:// — the run scheme: inter-run CONTROL (spawn/irc; COPY=fork is Engine.#handleCopy) AND
|
|
6
6
|
// run-scoped STORAGE (§run-scheme). The run is always the AUTHORITY: run://<name>/<path> is
|
|
7
|
-
// entry <path> owned by run <name>; run
|
|
8
|
-
// #extractTarget's authority-fold (Engine) so the
|
|
7
|
+
// entry <path> owned by run <name>; `run://self` is the current run, empty authority is invalid.
|
|
8
|
+
// Run is excluded from #extractTarget's authority-fold (Engine) so the authority stays the run
|
|
9
|
+
// name, never folded.
|
|
9
10
|
// - path present → storage: READ any run's entry by address (cross-run read ok); EDIT self
|
|
10
11
|
// only (cross-run write → 403 — a run reads a sister's notes, never writes them).
|
|
11
12
|
// - path absent → control on the run-as-actor: EDIT spawns a sister, SEND ircs one.
|
|
@@ -19,10 +20,10 @@ export default class Run {
|
|
|
19
20
|
writableBy: ["model", "client"],
|
|
20
21
|
volatile: false,
|
|
21
22
|
modelVisible: true,
|
|
22
|
-
example: "<<EDIT(run
|
|
23
|
+
example: "<<EDIT(run://self/todo.md):- [ ] investigate the timeout:EDIT",
|
|
23
24
|
};
|
|
24
|
-
// The run name from a run:// target's authority (hostname). "" =
|
|
25
|
-
// null when the target isn't a run:// url.
|
|
25
|
+
// The run name from a run:// target's authority (hostname). "self" = the current run;
|
|
26
|
+
// "" (empty authority) is invalid; null when the target isn't a run:// url.
|
|
26
27
|
static #authority(target) {
|
|
27
28
|
if (target === null || target.kind !== "url" || target.scheme !== "run")
|
|
28
29
|
return null;
|
|
@@ -58,7 +59,7 @@ export default class Run {
|
|
|
58
59
|
const entryPath = Run.#entryPath(statement.target);
|
|
59
60
|
if (entryPath === "") {
|
|
60
61
|
// Control: spawn the sister named by the authority. Self cannot be spawned.
|
|
61
|
-
if (authority === "" || authority === "
|
|
62
|
+
if (authority === "" || authority === "self")
|
|
62
63
|
return { status: 400, error: "run:// spawn cannot target self (run://<name>)" };
|
|
63
64
|
if (ctx.injectRun === undefined)
|
|
64
65
|
throw new Error("run.edit: injectRun capability absent");
|
|
@@ -74,12 +75,29 @@ export default class Run {
|
|
|
74
75
|
return { status: 200, body: authority };
|
|
75
76
|
}
|
|
76
77
|
// Storage: write a run-scope entry. Self only — cross-run write is denied (§run-scheme).
|
|
78
|
+
if (authority === "")
|
|
79
|
+
return { status: 400, error: "run:// requires a run name or 'self' (run://self/<path>)" };
|
|
77
80
|
const self = await Run.#selfName(ctx);
|
|
78
|
-
const owner = authority === "" ? self : authority;
|
|
81
|
+
const owner = authority === "self" ? self : authority;
|
|
79
82
|
if (owner !== self)
|
|
80
83
|
return { status: 403, error: "run:// write is self-only — read a sister's notes, never write them" };
|
|
81
84
|
return EntryOps.editSessionEntry(Run.#withOwner(statement, owner), ctx, Run.manifest);
|
|
82
85
|
}
|
|
86
|
+
// KILL a run-scope scratch ENTRY (path present). Self-only — deleting a sister's notes
|
|
87
|
+
// is a cross-run write, denied like EDIT (§run-scheme). The path-ABSENT KILL form is run
|
|
88
|
+
// cancellation, handled in Engine.#handleKill (it routes only entry-path KILLs here).
|
|
89
|
+
async deleteEntry(statement, ctx) {
|
|
90
|
+
const authority = Run.#authority(statement.target);
|
|
91
|
+
if (authority === null)
|
|
92
|
+
return { status: 400, error: "run:// requires a run target" };
|
|
93
|
+
if (authority === "")
|
|
94
|
+
return { status: 400, error: "run:// requires a run name or 'self' (run://self/<path>)" };
|
|
95
|
+
const self = await Run.#selfName(ctx);
|
|
96
|
+
const owner = authority === "self" ? self : authority;
|
|
97
|
+
if (owner !== self)
|
|
98
|
+
return { status: 403, error: "run:// kill is self-only — read a sister's notes, never delete them" };
|
|
99
|
+
return EntryOps.deleteSessionEntry(Run.#withOwner(statement, owner), ctx, Run.manifest);
|
|
100
|
+
}
|
|
83
101
|
async read(statement, ctx) {
|
|
84
102
|
const authority = Run.#authority(statement.target);
|
|
85
103
|
if (authority === null)
|
|
@@ -87,18 +105,22 @@ export default class Run {
|
|
|
87
105
|
const entryPath = Run.#entryPath(statement.target);
|
|
88
106
|
if (entryPath === "")
|
|
89
107
|
return { status: 400, content: null, mimetype: null, channel: null }; // a run is not READable, only its entries
|
|
108
|
+
if (authority === "")
|
|
109
|
+
return { status: 400, content: null, mimetype: null, channel: null }; // retired empty-authority form
|
|
90
110
|
// Cross-run READ is allowed — resolve self, fold the owner into the storage path.
|
|
91
|
-
const owner = authority === "" ? await Run.#selfName(ctx) : authority;
|
|
111
|
+
const owner = authority === "self" ? await Run.#selfName(ctx) : authority;
|
|
92
112
|
return EntryOps.readSessionEntry(Run.#withOwner(statement, owner), ctx, Run.manifest);
|
|
93
113
|
}
|
|
94
|
-
// §run-scheme — FIND a run's scratch. `run
|
|
114
|
+
// §run-scheme — FIND a run's scratch. `run://self/**` is self; `run://<name>/**` a sister
|
|
95
115
|
// (cross-run READ is allowed, so cross-run FIND is too). Resolve the owner and fold it into
|
|
96
116
|
// the scope pathname (`/<owner>/<rest>`) so EntryFind draws from that run's partition alone.
|
|
97
117
|
async find(statement, ctx) {
|
|
98
118
|
const authority = Run.#authority(statement.target);
|
|
99
119
|
if (authority === null)
|
|
100
|
-
return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0 };
|
|
101
|
-
|
|
120
|
+
return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
121
|
+
if (authority === "")
|
|
122
|
+
return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
|
|
123
|
+
const owner = authority === "self" ? await Run.#selfName(ctx) : authority;
|
|
102
124
|
const t = statement.target;
|
|
103
125
|
const folded = t !== null && t.kind === "url"
|
|
104
126
|
? { ...statement, target: { ...t, hostname: null, pathname: foldAuthorityIntoPath(owner, t.pathname) } }
|
|
@@ -109,10 +131,12 @@ export default class Run {
|
|
|
109
131
|
const authority = Run.#authority(statement.target);
|
|
110
132
|
if (authority === null)
|
|
111
133
|
return { status: 400, error: "run:// irc requires a run (run://<name>)" };
|
|
134
|
+
if (authority === "")
|
|
135
|
+
return { status: 400, error: "run:// irc requires a run name or 'self' (run://<name>)" };
|
|
112
136
|
if (ctx.injectRun === undefined)
|
|
113
137
|
throw new Error("run.send: injectRun capability absent");
|
|
114
138
|
let runId = ctx.runId;
|
|
115
|
-
if (authority !== ""
|
|
139
|
+
if (authority !== "self") {
|
|
116
140
|
const row = await ctx.db.run_resolve_by_name.get({ session_id: ctx.sessionId, name: authority });
|
|
117
141
|
if (row === undefined)
|
|
118
142
|
return { status: 404, error: `run://${authority} not found in this session` };
|
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;AAEvC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,8FAA8F;AAC9F,4FAA4F;AAC5F,
|
|
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
|
|
@@ -79,33 +80,38 @@ export default class EntryFind {
|
|
|
79
80
|
// tags) runs in SQL (find_session_entry_candidates); a content matcher then runs against
|
|
80
81
|
// each candidate's default-channel CONTENT (Matcher.matchAgainstContent → the mimetypes
|
|
81
82
|
// daughter) and INCLUDES/EXCLUDES the entry — 200 keeps it, 204/415/203 drop it, 400
|
|
82
|
-
// (malformed matcher) fails the whole op. Path-scoping stays in the (target).
|
|
83
|
-
//
|
|
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.
|
|
84
85
|
static async #matchPathnames(statement, ctx, manifest) {
|
|
85
86
|
if (statement.target === null)
|
|
86
|
-
return { status: 400,
|
|
87
|
+
return { status: 400, matches: [] };
|
|
87
88
|
// Scope by the manifest's persisted entries.scheme (storedScheme; absent →
|
|
88
89
|
// name). File sets storedScheme=null — bare rows.
|
|
89
90
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
90
91
|
if (statement.body !== null && statement.body.dialect === "semantic") {
|
|
91
|
-
// ~query: embed the query text, FTS-narrow by its terms, cosine-rank the
|
|
92
|
-
//
|
|
93
|
-
//
|
|
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.
|
|
94
95
|
const { mimetypes } = ctx;
|
|
95
96
|
if (mimetypes === undefined)
|
|
96
|
-
return { status: 501,
|
|
97
|
+
return { status: 501, matches: [] };
|
|
97
98
|
if (statement.lineMarker === null)
|
|
98
|
-
return { status: 400,
|
|
99
|
+
return { status: 400, matches: [] }; // ~query needs a rank marker, e.g. ~query<10>
|
|
99
100
|
const ranked = await EntrySemantic.rankSemantic(ctx.db, ctx.sessionId, scheme, mimetypes, statement.body.raw, LineMarkerOps.firstLast(statement.lineMarker));
|
|
100
101
|
if (ranked.status !== 200)
|
|
101
|
-
return { status: ranked.status,
|
|
102
|
-
|
|
103
|
-
// keeping the highest-ranked occurrence. The winning chunk's span is a READ.
|
|
104
|
-
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 } })) };
|
|
105
104
|
}
|
|
106
105
|
const scopePathname = EntryFind.#scopePathnameOf(statement);
|
|
107
|
-
//
|
|
108
|
-
|
|
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);
|
|
109
115
|
const tags = Array.isArray(statement.signal) ? statement.signal : []; // tag filter, AND semantics — §find-tag-filter-and-semantics
|
|
110
116
|
const tagsParam = tags.length > 0 ? JSON.stringify(tags) : "[]";
|
|
111
117
|
const { db, sessionId } = ctx;
|
|
@@ -129,46 +135,55 @@ export default class EntryFind {
|
|
|
129
135
|
re = new RegExp(statement.target.pattern, statement.target.flags || undefined);
|
|
130
136
|
}
|
|
131
137
|
catch {
|
|
132
|
-
return { status: 400,
|
|
138
|
+
return { status: 400, matches: [] };
|
|
133
139
|
}
|
|
134
140
|
candidates = candidates.filter((c) => re.test(c.pathname));
|
|
135
141
|
}
|
|
136
|
-
|
|
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;
|
|
137
145
|
if (statement.body === null) {
|
|
138
|
-
|
|
139
|
-
pathnames = candidates.map((c) => c.pathname);
|
|
146
|
+
matches = candidates.map((c) => ({ pathname: c.pathname, span: null }));
|
|
140
147
|
}
|
|
141
148
|
else if (statement.body.dialect === "graph") {
|
|
142
|
-
// @graph (plurnk-service#186): body is `@<sym` / `@>sym` / `@sym`.
|
|
143
|
-
//
|
|
144
|
-
//
|
|
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.
|
|
145
152
|
const inScope = new Set(candidates.map((c) => c.pathname));
|
|
146
153
|
const graph = await EntryGraph.match(ctx.db, ctx.sessionId, scheme, statement.body.raw);
|
|
147
154
|
if (graph.status !== 200)
|
|
148
|
-
return { status: graph.status,
|
|
149
|
-
|
|
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 } }));
|
|
150
157
|
}
|
|
151
158
|
else {
|
|
152
159
|
const { mimetypes } = ctx;
|
|
153
160
|
if (mimetypes === undefined)
|
|
154
161
|
throw new Error("EntryFind.#matchPathnames: body matcher requires the mimetypes capability in ctx");
|
|
155
|
-
|
|
162
|
+
matches = [];
|
|
156
163
|
for (const cand of candidates) {
|
|
157
164
|
const match = await Matcher.matchAgainstContent(statement.body, cand.content, cand.mimetype, mimetypes); // matcher runs on content — §find-glob-filter-on-content
|
|
158
165
|
if (match.status === 400)
|
|
159
|
-
return { status: 400,
|
|
166
|
+
return { status: 400, matches: [] };
|
|
160
167
|
if (match.status !== 200)
|
|
161
168
|
continue; // 204 no-match / 415 unsupported / 203 fallback → not a content hit
|
|
162
|
-
|
|
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 });
|
|
163
178
|
}
|
|
164
179
|
}
|
|
165
180
|
if (statement.lineMarker !== null) {
|
|
166
|
-
const page = EntryFind.#paginate(
|
|
181
|
+
const page = EntryFind.#paginate(matches, LineMarkerOps.firstLast(statement.lineMarker));
|
|
167
182
|
if (page.status !== 200)
|
|
168
|
-
return { status: page.status,
|
|
169
|
-
|
|
183
|
+
return { status: page.status, matches: [] };
|
|
184
|
+
matches = page.items ?? [];
|
|
170
185
|
}
|
|
171
|
-
return { status: 200,
|
|
186
|
+
return { status: 200, matches };
|
|
172
187
|
}
|
|
173
188
|
// FIND result = the scheme's catalog rows, filtered to the matched entries and kept in
|
|
174
189
|
// match order. A catalog row is exactly what the manifest catalogs (path + per-channel
|
|
@@ -177,29 +192,34 @@ export default class EntryFind {
|
|
|
177
192
|
static async findSessionEntries(statement, ctx, manifest) {
|
|
178
193
|
const match = await EntryFind.#matchPathnames(statement, ctx, manifest);
|
|
179
194
|
if (match.status !== 200)
|
|
180
|
-
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: [] };
|
|
181
196
|
const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
|
|
182
|
-
// The catalog row is keyed by its addressable path; align each
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
//
|
|
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).
|
|
186
201
|
// §run-scheme — a run-scope FIND aligns to the building run's OWN run-scope catalog rows
|
|
187
202
|
// (the owner prefix the candidate scope already enforced), never the session filesystem.
|
|
188
203
|
const runOwnerPrefix = manifest.scope === "run" ? EntryFind.#runOwnerPrefix(statement) : undefined;
|
|
189
204
|
const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, runOwnerPrefix)).map((r) => [r.path, r]));
|
|
190
205
|
const results = [];
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
+
}
|
|
195
219
|
}
|
|
196
|
-
// The matched set's content weight — the sum of every matched entry's live channel
|
|
197
|
-
// tokens. Self-describes the FIND ("N items holding T tokens"): the per-scheme roll-up
|
|
198
|
-
// in the turn-0 foist, the READ-cost of any search's hits before the model reads them.
|
|
199
|
-
const itemsTokenTotal = results.reduce((sum, r) => sum + Object.values(r.channels).reduce((s, c) => s + c.tokens, 0), 0);
|
|
200
220
|
// Compact JSON — the model parses it natively; the `null, 2` pretty-print was ~36%
|
|
201
221
|
// whitespace of the catalog body, tokens the wire doesn't need.
|
|
202
|
-
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 };
|
|
203
223
|
}
|
|
204
224
|
}
|
|
205
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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"}
|
|
@@ -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 @>.
|
|
@@ -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"}
|