@plurnk/plurnk-service 0.7.0 → 0.9.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/SPEC.md +116 -83
- package/bin/plurnk-service.ts +132 -0
- package/dist/Paths.d.ts +8 -0
- package/dist/Paths.d.ts.map +1 -0
- package/dist/Paths.js +47 -0
- package/dist/Paths.js.map +1 -0
- package/dist/content/index.d.ts +9 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +10 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/line-marker.d.ts +26 -0
- package/dist/content/line-marker.d.ts.map +1 -0
- package/dist/content/line-marker.js +323 -0
- package/dist/content/line-marker.js.map +1 -0
- package/dist/content/matcher.d.ts +15 -0
- package/dist/content/matcher.d.ts.map +1 -0
- package/dist/content/matcher.js +112 -0
- package/dist/content/matcher.js.map +1 -0
- package/dist/content/mimetype-binary.d.ts +9 -0
- package/dist/content/mimetype-binary.d.ts.map +1 -0
- package/dist/content/mimetype-binary.js +86 -0
- package/dist/content/mimetype-binary.js.map +1 -0
- package/dist/content/path-mimetype.d.ts +6 -0
- package/dist/content/path-mimetype.d.ts.map +1 -0
- package/dist/content/path-mimetype.js +49 -0
- package/dist/content/path-mimetype.js.map +1 -0
- package/dist/content/read-resolve.d.ts +20 -0
- package/dist/content/read-resolve.d.ts.map +1 -0
- package/dist/content/read-resolve.js +60 -0
- package/dist/content/read-resolve.js.map +1 -0
- package/dist/core/ChannelWrite.d.ts +35 -30
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +49 -41
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/Engine.d.ts +16 -10
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +309 -115
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/EnvFlags.d.ts +6 -3
- package/dist/core/EnvFlags.d.ts.map +1 -1
- package/dist/core/EnvFlags.js +62 -60
- package/dist/core/EnvFlags.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +26 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -0
- package/dist/core/ExecutorRegistry.js +99 -0
- package/dist/core/ExecutorRegistry.js.map +1 -0
- package/dist/core/PluginLoader.d.ts +6 -3
- package/dist/core/PluginLoader.d.ts.map +1 -1
- package/dist/core/PluginLoader.js +77 -73
- package/dist/core/PluginLoader.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +4 -2
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +23 -22
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +1 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +3 -3
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/git-membership.d.ts +8 -0
- package/dist/core/git-membership.d.ts.map +1 -0
- package/dist/core/git-membership.js +125 -0
- package/dist/core/git-membership.js.map +1 -0
- package/dist/core/packet-wire.d.ts +47 -6
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +376 -312
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/resolveForLoop.d.ts +16 -0
- package/dist/core/resolveForLoop.d.ts.map +1 -0
- package/dist/core/resolveForLoop.js +34 -0
- package/dist/core/resolveForLoop.js.map +1 -0
- package/dist/core/results.d.ts +40 -0
- package/dist/core/results.d.ts.map +1 -0
- package/dist/core/results.js +52 -0
- package/dist/core/results.js.map +1 -0
- package/dist/core/scheme-types.d.ts +7 -4
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js +4 -4
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +17 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -43
- package/dist/index.js.map +1 -1
- package/dist/schemes/EffectPolicy.d.ts +6 -0
- package/dist/schemes/EffectPolicy.d.ts.map +1 -0
- package/dist/schemes/EffectPolicy.js +18 -0
- package/dist/schemes/EffectPolicy.js.map +1 -0
- package/dist/schemes/Exec.d.ts +1 -0
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +86 -45
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts +0 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +32 -69
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Known.d.ts.map +1 -1
- package/dist/schemes/Known.js +13 -13
- package/dist/schemes/Known.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +8 -52
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Plurnk.d.ts.map +1 -1
- package/dist/schemes/Plurnk.js +13 -13
- package/dist/schemes/Plurnk.js.map +1 -1
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +13 -13
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Unknown.d.ts.map +1 -1
- package/dist/schemes/Unknown.js +13 -13
- package/dist/schemes/Unknown.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +5 -3
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +55 -50
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts +10 -3
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +99 -77
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-manifest.d.ts +6 -0
- package/dist/schemes/_entry-manifest.d.ts.map +1 -0
- package/dist/schemes/_entry-manifest.js +45 -0
- package/dist/schemes/_entry-manifest.js.map +1 -0
- package/dist/schemes/_entry-ops.d.ts +7 -4
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +198 -316
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-send.d.ts +4 -1
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +57 -55
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/server/ClientConnection.js +3 -3
- package/dist/server/ClientConnection.js.map +1 -1
- package/dist/server/Daemon.d.ts +5 -5
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +234 -176
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/clientTurn.d.ts +4 -1
- package/dist/server/clientTurn.d.ts.map +1 -1
- package/dist/server/clientTurn.js +19 -17
- package/dist/server/clientTurn.js.map +1 -1
- package/dist/server/dsl.d.ts +19 -16
- package/dist/server/dsl.d.ts.map +1 -1
- package/dist/server/dsl.js +127 -105
- package/dist/server/dsl.js.map +1 -1
- package/dist/server/envelope.d.ts +22 -19
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +116 -102
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/logEntry.d.ts +4 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +41 -39
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/methods/_dispatchAsClient.d.ts +3 -1
- package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
- package/dist/server/methods/_dispatchAsClient.js +31 -29
- package/dist/server/methods/_dispatchAsClient.js.map +1 -1
- package/dist/server/methods/discover.d.ts +3 -1
- package/dist/server/methods/discover.d.ts.map +1 -1
- package/dist/server/methods/discover.js +8 -6
- package/dist/server/methods/discover.js.map +1 -1
- package/dist/server/methods/entry_read.d.ts +4 -1
- package/dist/server/methods/entry_read.d.ts.map +1 -1
- package/dist/server/methods/entry_read.js +54 -52
- package/dist/server/methods/entry_read.js.map +1 -1
- package/dist/server/methods/log_read.d.ts +4 -1
- package/dist/server/methods/log_read.d.ts.map +1 -1
- package/dist/server/methods/log_read.js +38 -36
- package/dist/server/methods/log_read.js.map +1 -1
- package/dist/server/methods/loop_cancel.d.ts +3 -1
- package/dist/server/methods/loop_cancel.d.ts.map +1 -1
- package/dist/server/methods/loop_cancel.js +19 -17
- package/dist/server/methods/loop_cancel.js.map +1 -1
- package/dist/server/methods/loop_resolve.d.ts +3 -1
- package/dist/server/methods/loop_resolve.d.ts.map +1 -1
- package/dist/server/methods/loop_resolve.js +42 -40
- package/dist/server/methods/loop_resolve.js.map +1 -1
- package/dist/server/methods/loop_run.d.ts +3 -1
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +104 -102
- package/dist/server/methods/loop_run.js.map +1 -1
- package/dist/server/methods/op_copy.d.ts +3 -1
- package/dist/server/methods/op_copy.d.ts.map +1 -1
- package/dist/server/methods/op_copy.js +25 -23
- package/dist/server/methods/op_copy.js.map +1 -1
- package/dist/server/methods/op_dispatch.d.ts +3 -1
- package/dist/server/methods/op_dispatch.d.ts.map +1 -1
- package/dist/server/methods/op_dispatch.js +18 -16
- package/dist/server/methods/op_dispatch.js.map +1 -1
- package/dist/server/methods/op_edit.d.ts +3 -1
- package/dist/server/methods/op_edit.d.ts.map +1 -1
- package/dist/server/methods/op_edit.js +23 -21
- package/dist/server/methods/op_edit.js.map +1 -1
- package/dist/server/methods/op_exec.d.ts +3 -1
- package/dist/server/methods/op_exec.d.ts.map +1 -1
- package/dist/server/methods/op_exec.js +20 -18
- package/dist/server/methods/op_exec.js.map +1 -1
- package/dist/server/methods/op_find.d.ts +3 -1
- package/dist/server/methods/op_find.d.ts.map +1 -1
- package/dist/server/methods/op_find.js +23 -21
- package/dist/server/methods/op_find.js.map +1 -1
- package/dist/server/methods/op_hide.d.ts +3 -1
- package/dist/server/methods/op_hide.d.ts.map +1 -1
- package/dist/server/methods/op_hide.js +23 -21
- package/dist/server/methods/op_hide.js.map +1 -1
- package/dist/server/methods/op_move.d.ts +3 -1
- package/dist/server/methods/op_move.d.ts.map +1 -1
- package/dist/server/methods/op_move.js +23 -21
- package/dist/server/methods/op_move.js.map +1 -1
- package/dist/server/methods/op_parse.d.ts +3 -1
- package/dist/server/methods/op_parse.d.ts.map +1 -1
- package/dist/server/methods/op_parse.js +24 -22
- package/dist/server/methods/op_parse.js.map +1 -1
- package/dist/server/methods/op_read.d.ts +3 -1
- package/dist/server/methods/op_read.d.ts.map +1 -1
- package/dist/server/methods/op_read.js +23 -21
- package/dist/server/methods/op_read.js.map +1 -1
- package/dist/server/methods/op_send.d.ts +3 -1
- package/dist/server/methods/op_send.d.ts.map +1 -1
- package/dist/server/methods/op_send.js +22 -20
- package/dist/server/methods/op_send.js.map +1 -1
- package/dist/server/methods/op_show.d.ts +3 -1
- package/dist/server/methods/op_show.d.ts.map +1 -1
- package/dist/server/methods/op_show.js +23 -21
- package/dist/server/methods/op_show.js.map +1 -1
- package/dist/server/methods/ping.d.ts +3 -1
- package/dist/server/methods/ping.d.ts.map +1 -1
- package/dist/server/methods/ping.js +8 -6
- package/dist/server/methods/ping.js.map +1 -1
- package/dist/server/methods/providers_list.d.ts +3 -1
- package/dist/server/methods/providers_list.d.ts.map +1 -1
- package/dist/server/methods/providers_list.js +19 -17
- package/dist/server/methods/providers_list.js.map +1 -1
- package/dist/server/methods/session_attach.d.ts +3 -1
- package/dist/server/methods/session_attach.d.ts.map +1 -1
- package/dist/server/methods/session_attach.js +43 -41
- package/dist/server/methods/session_attach.js.map +1 -1
- package/dist/server/methods/session_create.d.ts +3 -1
- package/dist/server/methods/session_create.d.ts.map +1 -1
- package/dist/server/methods/session_create.js +51 -49
- package/dist/server/methods/session_create.js.map +1 -1
- package/dist/server/methods/session_list.d.ts +3 -1
- package/dist/server/methods/session_list.d.ts.map +1 -1
- package/dist/server/methods/session_list.js +9 -7
- package/dist/server/methods/session_list.js.map +1 -1
- package/dist/server/methods/session_runs.d.ts +3 -1
- package/dist/server/methods/session_runs.d.ts.map +1 -1
- package/dist/server/methods/session_runs.js +19 -17
- package/dist/server/methods/session_runs.js.map +1 -1
- package/dist/server/methods/session_set_persona.d.ts +3 -1
- package/dist/server/methods/session_set_persona.d.ts.map +1 -1
- package/dist/server/methods/session_set_persona.js +28 -26
- package/dist/server/methods/session_set_persona.js.map +1 -1
- package/dist/server/methods/session_set_root.d.ts +3 -1
- package/dist/server/methods/session_set_root.d.ts.map +1 -1
- package/dist/server/methods/session_set_root.js +31 -29
- package/dist/server/methods/session_set_root.js.map +1 -1
- package/dist/server/noProposals.d.ts +6 -0
- package/dist/server/noProposals.d.ts.map +1 -0
- package/dist/server/noProposals.js +37 -0
- package/dist/server/noProposals.js.map +1 -0
- package/dist/server/yolo.d.ts +3 -1
- package/dist/server/yolo.d.ts.map +1 -1
- package/dist/server/yolo.js +15 -13
- package/dist/server/yolo.js.map +1 -1
- package/package.json +71 -32
- package/bin/plurnk-service.js +0 -112
- /package/migrations/{001_schema.sql → 0000-00-00.01_schema.sql} +0 -0
|
@@ -1,90 +1,112 @@
|
|
|
1
1
|
// FIND helper for entry-bearing schemes (SPEC §6.6; plurnk.md FIND row).
|
|
2
|
+
// Shared by FIND and multi-entry SHOW/HIDE (EntryOps.#setSessionEntryVisibility).
|
|
2
3
|
//
|
|
3
|
-
// Slot semantics:
|
|
4
|
+
// Slot semantics (plurnk.md §"Body matcher dispatch (FIND, READ, SHOW, HIDE)"):
|
|
4
5
|
// target — required scope (path or glob); selects which entries are candidates
|
|
5
|
-
// body — matcher
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
6
|
+
// body — matcher (glob/regex/jsonpath/xpath). Runs against the entry's
|
|
7
|
+
// default-channel CONTENT, NOT the pathname — the same content match
|
|
8
|
+
// READ performs (Matcher.matchAgainstContent → the mimetypes
|
|
9
|
+
// daughter). e.g. `FIND(log://**/error):/timeout/i` selects logs
|
|
10
|
+
// whose content matches; `SHOW(countries/**):Paris*` selects entries
|
|
11
|
+
// whose content matches. The path-glob is the (target).
|
|
9
12
|
// signal — tag filter: candidate entry must have ALL listed tags
|
|
10
13
|
// <L> — results pagination: select results N..M from the matched list
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const total = items.length;
|
|
21
|
-
const { first, last } = marker;
|
|
22
|
-
if (last === null) {
|
|
23
|
-
if (first === 0 || first === -1)
|
|
24
|
-
return { status: 200, items: [] };
|
|
25
|
-
if (first > 0 && first <= total)
|
|
26
|
-
return { status: 200, items: [items[first - 1]] };
|
|
27
|
-
return { status: 416 };
|
|
14
|
+
import Matcher from "../content/matcher.js";
|
|
15
|
+
export default class EntryFind {
|
|
16
|
+
static #scopePathnameOf(statement) {
|
|
17
|
+
const path = statement.target;
|
|
18
|
+
if (path === null)
|
|
19
|
+
return null;
|
|
20
|
+
if (path.kind === "url")
|
|
21
|
+
return path.pathname;
|
|
22
|
+
return path.raw;
|
|
28
23
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return { status: 416 };
|
|
39
|
-
if (n > m)
|
|
40
|
-
return { status: 416 };
|
|
41
|
-
return { status: 200, items: items.slice(n - 1, m) };
|
|
42
|
-
};
|
|
43
|
-
export const findSessionEntries = async (statement, ctx, scheme) => {
|
|
44
|
-
if (statement.target === null)
|
|
45
|
-
return { status: 400, content: null, mimetype: null, results: [] };
|
|
46
|
-
let regexFilter = null;
|
|
47
|
-
let pathnameGlob = null;
|
|
48
|
-
if (statement.body !== null) {
|
|
49
|
-
if (statement.body.dialect === "glob") {
|
|
50
|
-
pathnameGlob = statement.body.raw;
|
|
24
|
+
static #paginate(items, marker) {
|
|
25
|
+
const total = items.length;
|
|
26
|
+
const { first, last } = marker;
|
|
27
|
+
if (last === null) {
|
|
28
|
+
if (first === 0 || first === -1)
|
|
29
|
+
return { status: 200, items: [] };
|
|
30
|
+
if (first > 0 && first <= total)
|
|
31
|
+
return { status: 200, items: [items[first - 1]] };
|
|
32
|
+
return { status: 416 };
|
|
51
33
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
34
|
+
let n = first;
|
|
35
|
+
let m = last;
|
|
36
|
+
if (n === 0)
|
|
37
|
+
n = 1;
|
|
38
|
+
if (m === -1)
|
|
39
|
+
m = total;
|
|
40
|
+
if (n < 1 || n > total)
|
|
41
|
+
return { status: 416 };
|
|
42
|
+
if (m < 1 || m > total)
|
|
43
|
+
return { status: 416 };
|
|
44
|
+
if (n > m)
|
|
45
|
+
return { status: 416 };
|
|
46
|
+
return { status: 200, items: items.slice(n - 1, m) };
|
|
47
|
+
}
|
|
48
|
+
// Resolve a matcher-bearing statement (FIND, or multi-entry SHOW/HIDE) to the
|
|
49
|
+
// matched session pathnames. Candidate selection (scope + tags) runs in SQL
|
|
50
|
+
// (find_session_entry_candidates); the body matcher then runs against each
|
|
51
|
+
// candidate's default-channel CONTENT via the mimetypes daughter
|
|
52
|
+
// (Matcher.matchAgainstContent) — 200 (hit) includes the entry, 204/415/203
|
|
53
|
+
// exclude it (no content hit), 400 (malformed matcher) fails the whole op.
|
|
54
|
+
// Path-scoping stays in the (target). Shared with EntryOps's multi-entry
|
|
55
|
+
// visibility.
|
|
56
|
+
static async matchPathnames(statement, ctx, manifest) {
|
|
57
|
+
if (statement.target === null)
|
|
58
|
+
return { status: 400, pathnames: [] };
|
|
59
|
+
if (statement.body !== null && statement.body.dialect === "rag") {
|
|
60
|
+
// RAG is a cross-entry semantic ranking (grammar 0.21.0: top-K via <L>),
|
|
61
|
+
// not a per-candidate content match — a service-side feature needing its
|
|
62
|
+
// own embedding/vector design. Defined but not built; parked.
|
|
63
|
+
return { status: 501, pathnames: [] };
|
|
64
|
+
}
|
|
65
|
+
const scopePathname = EntryFind.#scopePathnameOf(statement);
|
|
66
|
+
const scopeGlob = scopePathname !== null && scopePathname.length > 0 ? `${scopePathname}*` : null;
|
|
67
|
+
const tags = Array.isArray(statement.signal) ? statement.signal : [];
|
|
68
|
+
const tagsParam = tags.length > 0 ? JSON.stringify(tags) : "[]";
|
|
69
|
+
const { db, sessionId } = ctx;
|
|
70
|
+
const candidates = await db.find_session_entry_candidates.all({
|
|
71
|
+
session_id: sessionId,
|
|
72
|
+
scheme: manifest.name,
|
|
73
|
+
channel: manifest.defaultChannel,
|
|
74
|
+
scope_pathname: scopeGlob,
|
|
75
|
+
tags: tagsParam,
|
|
76
|
+
});
|
|
77
|
+
let pathnames;
|
|
78
|
+
if (statement.body === null) {
|
|
79
|
+
pathnames = candidates.map((c) => c.pathname);
|
|
59
80
|
}
|
|
60
81
|
else {
|
|
61
|
-
|
|
62
|
-
|
|
82
|
+
const { mimetypes } = ctx;
|
|
83
|
+
if (mimetypes === undefined)
|
|
84
|
+
throw new Error("EntryFind.matchPathnames: body matcher requires the mimetypes capability in ctx");
|
|
85
|
+
pathnames = [];
|
|
86
|
+
for (const cand of candidates) {
|
|
87
|
+
const match = await Matcher.matchAgainstContent(statement.body, cand.content, cand.mimetype, mimetypes);
|
|
88
|
+
if (match.status === 400)
|
|
89
|
+
return { status: 400, pathnames: [] };
|
|
90
|
+
if (match.status === 200)
|
|
91
|
+
pathnames.push(cand.pathname);
|
|
92
|
+
// 204 (no match) / 415 (dialect unsupported for this entry) /
|
|
93
|
+
// 203 (parse fallback) → not a content hit → excluded.
|
|
94
|
+
}
|
|
63
95
|
}
|
|
96
|
+
if (statement.lineMarker !== null) {
|
|
97
|
+
const page = EntryFind.#paginate(pathnames, statement.lineMarker);
|
|
98
|
+
if (page.status !== 200)
|
|
99
|
+
return { status: page.status, pathnames: [] };
|
|
100
|
+
pathnames = page.items ?? [];
|
|
101
|
+
}
|
|
102
|
+
return { status: 200, pathnames };
|
|
64
103
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
session_id: sessionId,
|
|
72
|
-
scheme,
|
|
73
|
-
scope_pathname: scopeGlob,
|
|
74
|
-
pathname_pattern: pathnameGlob,
|
|
75
|
-
tags: tagsParam,
|
|
76
|
-
});
|
|
77
|
-
let pathnames = rows.map((r) => r.pathname);
|
|
78
|
-
if (regexFilter !== null) {
|
|
79
|
-
pathnames = pathnames.filter((p) => regexFilter.test(p));
|
|
80
|
-
}
|
|
81
|
-
if (statement.lineMarker !== null) {
|
|
82
|
-
const page = paginate(pathnames, statement.lineMarker);
|
|
83
|
-
if (page.status !== 200)
|
|
84
|
-
return { status: page.status, content: null, mimetype: null, results: [] };
|
|
85
|
-
pathnames = page.items ?? [];
|
|
104
|
+
static async findSessionEntries(statement, ctx, manifest) {
|
|
105
|
+
const match = await EntryFind.matchPathnames(statement, ctx, manifest);
|
|
106
|
+
if (match.status !== 200)
|
|
107
|
+
return { status: match.status, content: null, mimetype: null, results: [] };
|
|
108
|
+
const results = match.pathnames.map((p) => `${manifest.name}://${p}`);
|
|
109
|
+
return { status: 200, content: results.join("\n"), mimetype: "text/plain", results };
|
|
86
110
|
}
|
|
87
|
-
|
|
88
|
-
return { status: 200, content: results.join("\n"), mimetype: "text/plain", results };
|
|
89
|
-
};
|
|
111
|
+
}
|
|
90
112
|
//# sourceMappingURL=_entry-find.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-find.js","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"_entry-find.js","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_entry-manifest.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-manifest.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,MAAM,CAAC,OAAO,OAAO,aAAa;;WAOjB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAkBnG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// The body of plurnk://manifest.json — the flat catalog of every entry the
|
|
2
|
+
// session holds, across all schemes (hidden ones included; engine_list_session_
|
|
3
|
+
// entries is not visibility-filtered, so the model sees what it could pull in).
|
|
4
|
+
// Each item: { path, shown, channels: { <name>: { mimetype, tokens, lines } } }.
|
|
5
|
+
// `shown` = the entry is in this run's index — the curation filter (jsonpath
|
|
6
|
+
// shown==false for the hidden inventory). `tokens` is the live provider's count,
|
|
7
|
+
// re-counted at render — the write-time snapshot is NOT trusted, since the model
|
|
8
|
+
// can change between loops and a stale tokenizer would make the catalog lie;
|
|
9
|
+
// `lines` is the content's extent from mimetypes' process() totalLines. The
|
|
10
|
+
// catalog never lists itself.
|
|
11
|
+
//
|
|
12
|
+
// Lives in the schemes/entry layer, not the engine: building a plurnk:// entry's
|
|
13
|
+
// content is the schemes' job; the engine only orchestrates the per-turn write
|
|
14
|
+
// (the same materialization pattern as git membership).
|
|
15
|
+
export default class EntryManifest {
|
|
16
|
+
static #MANIFEST_PATH = "plurnk://manifest.json";
|
|
17
|
+
static #toPath(scheme, pathname) {
|
|
18
|
+
return scheme === null ? pathname : `${scheme}://${pathname}`;
|
|
19
|
+
}
|
|
20
|
+
static async buildManifestBody(ctx, previewBudget) {
|
|
21
|
+
const { db, sessionId, runId, mimetypes, tokenize } = ctx;
|
|
22
|
+
if (mimetypes === undefined)
|
|
23
|
+
throw new Error("buildManifestBody: ctx.mimetypes is required for the lines (extent) field");
|
|
24
|
+
if (tokenize === undefined)
|
|
25
|
+
throw new Error("buildManifestBody: ctx.tokenize is required — depth is re-counted at render through the live provider, not read from the write-time snapshot");
|
|
26
|
+
const shownRows = await db.engine_shown_entries.all({ run_id: runId, session_id: sessionId });
|
|
27
|
+
const shown = new Set(shownRows.map((r) => EntryManifest.#toPath(r.scheme, r.pathname)));
|
|
28
|
+
const rows = await db.engine_list_session_entries.all({ session_id: sessionId });
|
|
29
|
+
const byEntry = new Map();
|
|
30
|
+
for (const r of rows) {
|
|
31
|
+
const path = EntryManifest.#toPath(r.scheme, r.pathname);
|
|
32
|
+
if (path === EntryManifest.#MANIFEST_PATH)
|
|
33
|
+
continue;
|
|
34
|
+
let entry = byEntry.get(path);
|
|
35
|
+
if (entry === undefined) {
|
|
36
|
+
entry = { path, shown: shown.has(path), channels: {} };
|
|
37
|
+
byEntry.set(path, entry);
|
|
38
|
+
}
|
|
39
|
+
const result = await mimetypes.process({ content: r.content, hint: r.mimetype }, { budget: previewBudget });
|
|
40
|
+
entry.channels[r.channel] = { mimetype: r.mimetype, tokens: tokenize(r.content), lines: result.totalLines };
|
|
41
|
+
}
|
|
42
|
+
return JSON.stringify([...byEntry.values()], null, 2);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=_entry-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_entry-manifest.js","sourceRoot":"","sources":["../../src/schemes/_entry-manifest.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,6EAA6E;AAC7E,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,8BAA8B;AAC9B,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,wDAAwD;AASxD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,cAAc,GAAG,wBAAwB,CAAC;IAEjD,MAAM,CAAC,OAAO,CAAC,MAAqB,EAAE,QAAgB;QAClD,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,QAAQ,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAwB,EAAE,aAAqB;QAC1E,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;QAC1D,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC1H,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8IAA8I,CAAC,CAAC;QAC5L,MAAM,SAAS,GAAG,MAAO,EAAE,CAAC,oBAAmC,CAAC,GAAG,CAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACxH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,IAAI,GAAG,MAAO,EAAE,CAAC,2BAA0C,CAAC,GAAG,CAAc,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,IAAI,KAAK,aAAa,CAAC,cAAc;gBAAE,SAAS;YACpD,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;YAC9G,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5G,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QAChH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC"}
|
|
@@ -17,8 +17,11 @@ export type ReadResult = {
|
|
|
17
17
|
export type ShowHideResult = {
|
|
18
18
|
status: number;
|
|
19
19
|
};
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
export default class EntryOps {
|
|
21
|
+
#private;
|
|
22
|
+
static editSessionEntry(statement: EditStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<EditResult>;
|
|
23
|
+
static readSessionEntry(statement: ReadStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<ReadResult>;
|
|
24
|
+
static showSessionEntry(statement: ShowStatement | HideStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<ShowHideResult>;
|
|
25
|
+
static hideSessionEntry(statement: ShowStatement | HideStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<ShowHideResult>;
|
|
26
|
+
}
|
|
24
27
|
//# sourceMappingURL=_entry-ops.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-ops.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"_entry-ops.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAanF,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAU5F,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1L,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,QAAQ;;WAoBZ,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;WA4GnH,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;WAgGnH,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;WAIvI,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAGvJ"}
|