@plurnk/plurnk-service 0.2.0 → 0.3.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 +67 -90
- package/dist/core/Engine.d.ts +1 -1
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +172 -82
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/ProviderRegistry.d.ts +1 -1
- package/dist/core/ProviderRegistry.d.ts.map +1 -1
- package/dist/core/ProviderRegistry.js.map +1 -1
- package/dist/core/packet-wire.js +94 -29
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/providers/Mock.d.ts +2 -2
- package/dist/providers/Mock.d.ts.map +1 -1
- package/dist/providers/Mock.js.map +1 -1
- package/dist/schemes/File.d.ts +4 -4
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +79 -47
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Known.js +1 -1
- package/dist/schemes/Known.js.map +1 -1
- package/dist/schemes/Log.d.ts +7 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +41 -9
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Plurnk.d.ts +15 -1
- package/dist/schemes/Plurnk.d.ts.map +1 -1
- package/dist/schemes/Plurnk.js +50 -8
- package/dist/schemes/Plurnk.js.map +1 -1
- package/dist/schemes/Skill.js +1 -1
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Unknown.js +1 -1
- package/dist/schemes/Unknown.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +3 -3
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +2 -18
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/server/ClientConnection.d.ts.map +1 -1
- package/dist/server/ClientConnection.js +6 -1
- package/dist/server/ClientConnection.js.map +1 -1
- package/dist/server/envelope.d.ts +2 -1
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +11 -8
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/logEntry.d.ts +9 -9
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +10 -10
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
- package/dist/server/methods/_dispatchAsClient.js +7 -2
- package/dist/server/methods/_dispatchAsClient.js.map +1 -1
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +7 -2
- package/dist/server/methods/loop_run.js.map +1 -1
- package/migrations/001_schema.sql +324 -0
- package/package.json +18 -12
- package/migrations/001_sessions.sql +0 -11
- package/migrations/002_runs.sql +0 -16
- package/migrations/003_loops.sql +0 -12
- package/migrations/004_turns.sql +0 -18
- package/migrations/005_entries.sql +0 -44
- package/migrations/006_log_entries.sql +0 -51
- package/migrations/007_visibility.sql +0 -10
- package/migrations/008_schemes_providers.sql +0 -25
- package/migrations/009_cost_rollups.sql +0 -44
- package/migrations/010_subscriptions.sql +0 -36
- package/migrations/011_turn_call_metadata.sql +0 -7
- package/migrations/012_proposal_lifecycle.sql +0 -22
- package/migrations/013_log_entries_lifecycle_columns.sql +0 -22
- package/migrations/014_loop_flags.sql +0 -9
- package/migrations/015_sessions_project_root.sql +0 -6
- package/migrations/016_persona_columns.sql +0 -11
package/dist/core/packet-wire.js
CHANGED
|
@@ -55,46 +55,111 @@ export const packetToWireMessages = (packet) => [
|
|
|
55
55
|
{ role: "system", content: renderSystemContent(packet.system) },
|
|
56
56
|
{ role: "user", content: renderUserContent(packet.user) },
|
|
57
57
|
];
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
58
|
+
// Number each line of body as `<N>:\t<line>` — mirrors rummy
|
|
59
|
+
// plugins/helpers.js numberLines. The leading digit prevents column-zero
|
|
60
|
+
// fence collisions and gives the model line refs for free (`READ<42-46>`).
|
|
61
|
+
const numberLines = (body, start = 1) => {
|
|
62
|
+
if (!body)
|
|
63
|
+
return "";
|
|
64
|
+
const trailingNewline = body.endsWith("\n");
|
|
65
|
+
const source = trailingNewline ? body.slice(0, -1) : body;
|
|
66
|
+
const numbered = source.split("\n").map((line, i) => `${start + i}:\t${line}`).join("\n");
|
|
67
|
+
return trailingNewline ? `${numbered}\n` : numbered;
|
|
68
|
+
};
|
|
69
|
+
// Stable JSON: keys sorted alphabetically so the same meta produces the
|
|
70
|
+
// same string across turns — prefix-cache friendly. Mirrors rummy
|
|
71
|
+
// plugins/helpers.js canonicalJson.
|
|
72
|
+
const canonicalJson = (obj) => {
|
|
73
|
+
const keys = Object.keys(obj).sort();
|
|
74
|
+
const sorted = {};
|
|
75
|
+
for (const k of keys)
|
|
76
|
+
sorted[k] = obj[k];
|
|
77
|
+
return JSON.stringify(sorted);
|
|
78
|
+
};
|
|
79
|
+
// Heredoc block for one channel of one entry. Fence is `URI#channel`
|
|
80
|
+
// (plurnk-grammar-native form) so model emissions and entry projections
|
|
81
|
+
// share one syntax. When `channel` is null/empty the fence is path-only —
|
|
82
|
+
// this is the default-channel convention: the absence of `#channel` is
|
|
83
|
+
// the addressing of the scheme's default channel, not a missing field.
|
|
84
|
+
// Body is line-numbered.
|
|
85
|
+
const renderHeredoc = (uri, channel, body) => {
|
|
86
|
+
const fence = channel ? `${uri}#${channel}` : uri;
|
|
87
|
+
const numbered = numberLines(body);
|
|
88
|
+
return `<<${fence}:\n${numbered}\n:${fence}`;
|
|
89
|
+
};
|
|
90
|
+
// Render a (scheme, pathname) tuple as the URI the model should SEE.
|
|
91
|
+
// Null scheme → bare pathname. The `file` scheme never reaches this
|
|
92
|
+
// function because Engine.#extractTarget normalizes it to null at the
|
|
93
|
+
// storage boundary; storage and wire output are uniform on this.
|
|
94
|
+
const renderModelUri = (scheme, pathname) => {
|
|
95
|
+
const path = pathname ?? "";
|
|
96
|
+
if (scheme === null || scheme === undefined)
|
|
97
|
+
return path;
|
|
98
|
+
return `${scheme}://${path}`;
|
|
99
|
+
};
|
|
100
|
+
// Render one Index entry → `* {meta}` line followed by per-channel
|
|
101
|
+
// heredoc blocks. meta describes the entry; nested `channels` carries
|
|
102
|
+
// per-channel mimetype/tokens so the model doesn't have to READ to
|
|
103
|
+
// learn the shape of a channel's content.
|
|
61
104
|
const renderIndexEntries = (entries) => entries.map((e) => {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
105
|
+
const uri = renderModelUri(e.scheme, e.pathname);
|
|
106
|
+
const defaultChannel = e.defaultChannel ?? "";
|
|
107
|
+
const meta = { path: uri };
|
|
108
|
+
if (Array.isArray(e.tags) && e.tags.length > 0)
|
|
109
|
+
meta.tags = e.tags;
|
|
110
|
+
const channelsMeta = {};
|
|
111
|
+
const blocks = [];
|
|
112
|
+
for (const [channelName, ch] of Object.entries(e.channels ?? {})) {
|
|
113
|
+
const content = ch?.content;
|
|
114
|
+
if (typeof content !== "string")
|
|
115
|
+
continue;
|
|
116
|
+
const channelInfo = {};
|
|
117
|
+
if (typeof ch.mimetype === "string")
|
|
118
|
+
channelInfo.mimetype = ch.mimetype;
|
|
119
|
+
if (typeof ch.tokens === "number")
|
|
120
|
+
channelInfo.tokens = ch.tokens;
|
|
121
|
+
channelsMeta[channelName] = channelInfo;
|
|
122
|
+
const fenceChannel = channelName === defaultChannel ? null : channelName;
|
|
123
|
+
blocks.push(renderHeredoc(uri, fenceChannel, content));
|
|
71
124
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return
|
|
125
|
+
if (Object.keys(channelsMeta).length > 0)
|
|
126
|
+
meta.channels = channelsMeta;
|
|
127
|
+
return blocks.length > 0
|
|
128
|
+
? `* ${canonicalJson(meta)}\n${blocks.join("\n")}`
|
|
129
|
+
: `* ${canonicalJson(meta)}`;
|
|
75
130
|
}).join("\n\n");
|
|
76
|
-
// Render one Log entry →
|
|
77
|
-
//
|
|
131
|
+
// Render one Log entry → `* {meta}` line followed by the response body.
|
|
132
|
+
// URI is `log://<coordinate>/<op>` per SPEC §10 — the trailing /op is
|
|
133
|
+
// wire-rendering self-documentation derived from the row's `op` field
|
|
134
|
+
// (parsing the URI accepts it or omits it; identification is by
|
|
135
|
+
// coordinate). Log entries are single-payload by nature — fence carries
|
|
136
|
+
// no `#channel` (matches the default-channel convention).
|
|
78
137
|
const renderLogEntries = (entries) => entries.map((e) => {
|
|
79
138
|
const coordinate = e.coordinate ?? "?";
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
139
|
+
const opSuffix = typeof e.op === "string" && e.op.length > 0 ? `/${e.op}` : "";
|
|
140
|
+
const uri = `log://${coordinate}${opSuffix}`;
|
|
141
|
+
const meta = {};
|
|
142
|
+
if (typeof e.origin === "string")
|
|
143
|
+
meta.origin = e.origin;
|
|
144
|
+
if (typeof e.op === "string")
|
|
145
|
+
meta.op = e.op;
|
|
146
|
+
if (typeof e.status === "number")
|
|
147
|
+
meta.status = e.status;
|
|
148
|
+
const path = renderLogPath(e.target);
|
|
149
|
+
if (path !== null)
|
|
150
|
+
meta.path = path;
|
|
83
151
|
const rxBody = typeof e.rx === "string" ? e.rx : JSON.stringify(e.rx);
|
|
84
|
-
return
|
|
152
|
+
return `* ${canonicalJson(meta)}\n${renderHeredoc(uri, null, rxBody)}`;
|
|
85
153
|
}).join("\n\n");
|
|
86
|
-
const
|
|
154
|
+
const renderLogPath = (target) => {
|
|
87
155
|
if (target === null || target === undefined)
|
|
88
|
-
return
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
if (scheme !== null && scheme !== undefined)
|
|
92
|
-
return `${scheme}://${pathname}`;
|
|
93
|
-
return pathname.length > 0 ? pathname : "—";
|
|
156
|
+
return null;
|
|
157
|
+
const path = renderModelUri(target.scheme, target.pathname);
|
|
158
|
+
return path.length > 0 ? path : null;
|
|
94
159
|
};
|
|
95
160
|
// Render TelemetryError[] → bullet list. v0 schema is open per Packet.json
|
|
96
161
|
// ("Inner shapes intentionally open at v0; consumers populate as needs
|
|
97
162
|
// solidify"), so this just emits each error as a JSON line until the
|
|
98
163
|
// shape settles.
|
|
99
|
-
const renderTelemetryErrors = (errors) => errors.map((e) =>
|
|
164
|
+
const renderTelemetryErrors = (errors) => errors.map((e) => `* ${canonicalJson(e)}`).join("\n");
|
|
100
165
|
//# sourceMappingURL=packet-wire.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet-wire.js","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"packet-wire.js","sourceRoot":"","sources":["../../src/core/packet-wire.js"],"names":[],"mappings":"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"}
|
package/dist/providers/Mock.d.ts
CHANGED
|
@@ -23,10 +23,10 @@ declare const DEFAULT_USAGE: ProviderUsage;
|
|
|
23
23
|
export default class Mock implements Provider {
|
|
24
24
|
#private;
|
|
25
25
|
constructor({ contextSize, responses }: {
|
|
26
|
-
contextSize: number;
|
|
26
|
+
contextSize: number | null;
|
|
27
27
|
responses: MockResponse[];
|
|
28
28
|
});
|
|
29
|
-
get contextSize(): number;
|
|
29
|
+
get contextSize(): number | null;
|
|
30
30
|
get model(): string;
|
|
31
31
|
countTokens(text: string): number;
|
|
32
32
|
costFor(_usage: ProviderUsage): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mock.d.ts","sourceRoot":"","sources":["../../src/providers/Mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE9F,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAKrF,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAIF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAEpF,QAAA,MAAM,aAAa,EAAE,aAAiE,CAAC;AAEvF,MAAM,CAAC,OAAO,OAAO,IAAK,YAAW,QAAQ;;gBAI7B,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"Mock.d.ts","sourceRoot":"","sources":["../../src/providers/Mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE9F,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAKrF,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAIF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAEpF,QAAA,MAAM,aAAa,EAAE,aAAiE,CAAC;AAEvF,MAAM,CAAC,OAAO,OAAO,IAAK,YAAW,QAAQ;;gBAI7B,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,YAAY,EAAE,CAAA;KAAE;IAKjG,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAA8B;IAC9D,IAAI,KAAK,IAAI,MAAM,CAAmB;IAItC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IAEhC,QAAQ,CAAC,CAAC,EAAE;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,qBAAqB,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAe1I,IAAI,SAAS,IAAI,MAAM,CAA+B;CACzD;AAED,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mock.js","sourceRoot":"","sources":["../../src/providers/Mock.ts"],"names":[],"mappings":"AA0BA,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEvF,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,YAAY,
|
|
1
|
+
{"version":3,"file":"Mock.js","sourceRoot":"","sources":["../../src/providers/Mock.ts"],"names":[],"mappings":"AA0BA,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEvF,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,YAAY,CAAgB;IAC5B,MAAM,CAAiB;IAEvB,YAAY,EAAE,WAAW,EAAE,SAAS,EAA6D;QAC7F,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,WAAW,KAAoB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAa,OAAO,MAAM,CAAC,CAAC,CAAC;IAEtC,sEAAsE;IACtE,8BAA8B;IAC9B,WAAW,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,MAAqB,IAAY,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpD,KAAK,CAAC,QAAQ,CAAC,CAAoD;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC7F,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,MAAM,SAAS,GAA0B;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,aAAa;YAC/B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM;YACtC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,MAAM;YACxB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;CACzD;AAED,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
|
package/dist/schemes/File.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ type EditResult = {
|
|
|
14
14
|
type ApplyArgs = {
|
|
15
15
|
attrs: {
|
|
16
16
|
path?: string;
|
|
17
|
+
canonical?: string;
|
|
17
18
|
patched?: string;
|
|
18
19
|
[k: string]: unknown;
|
|
19
20
|
};
|
|
@@ -25,11 +26,10 @@ type ApplyResult = {
|
|
|
25
26
|
body?: string;
|
|
26
27
|
};
|
|
27
28
|
export default class File {
|
|
28
|
-
#private;
|
|
29
29
|
static manifest: SchemeManifest;
|
|
30
|
-
read(statement: ReadStatement,
|
|
31
|
-
edit(statement: EditStatement,
|
|
32
|
-
applyResolution(args: ApplyArgs): Promise<ApplyResult>;
|
|
30
|
+
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
|
|
31
|
+
edit(statement: EditStatement, ctx: PlurnkSchemeContext): Promise<EditResult>;
|
|
32
|
+
applyResolution(args: ApplyArgs, ctx: PlurnkSchemeContext): Promise<ApplyResult>;
|
|
33
33
|
}
|
|
34
34
|
export {};
|
|
35
35
|
//# sourceMappingURL=File.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnF,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACtF,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACzH,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmCvE,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAY7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB7E,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAsD7E,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;CAkDzF"}
|
package/dist/schemes/File.js
CHANGED
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
import { readFile, realpath, writeFile } from "node:fs/promises";
|
|
2
2
|
import { resolve, relative, isAbsolute } from "node:path";
|
|
3
3
|
import { createPatch } from "diff";
|
|
4
|
+
import { writeEntry } from "./_entry-crud.js";
|
|
5
|
+
// Workspace root for file ops is sourced from `sessions.project_root`,
|
|
6
|
+
// supplied by the client at session.create or session.set_root (issue
|
|
7
|
+
// #150 wired the RPC; F.1 added the column). Server doesn't guess —
|
|
8
|
+
// the client owns workspace identity. If a session is headless
|
|
9
|
+
// (project_root=null), file ops fail at 400; the client either supplies
|
|
10
|
+
// a root or the op isn't appropriate for this session.
|
|
11
|
+
const loadSessionRoot = async (db, sessionId) => {
|
|
12
|
+
const row = await db.envelope_get_session.get({ id: sessionId });
|
|
13
|
+
return row?.project_root ?? null;
|
|
14
|
+
};
|
|
15
|
+
// Resolve + workspace-root containment check. Returns the canonical
|
|
16
|
+
// path on success; classified error on absence/traversal. Used by read.
|
|
17
|
+
const resolveContained = async (pathname, root) => {
|
|
18
|
+
const requested = isAbsolute(pathname) ? pathname : resolve(root, pathname);
|
|
19
|
+
let canonical;
|
|
20
|
+
try {
|
|
21
|
+
canonical = await realpath(requested);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (err.code === "ENOENT") {
|
|
25
|
+
return { error: "not-found" };
|
|
26
|
+
}
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
const rel = relative(root, canonical);
|
|
30
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
31
|
+
return { error: "traversal" };
|
|
32
|
+
return { canonical, root };
|
|
33
|
+
};
|
|
4
34
|
export default class File {
|
|
5
35
|
static manifest = {
|
|
6
36
|
name: "file",
|
|
@@ -15,41 +45,7 @@ export default class File {
|
|
|
15
45
|
proposes: true, // file writes go through proposal lifecycle (task #42)
|
|
16
46
|
},
|
|
17
47
|
};
|
|
18
|
-
|
|
19
|
-
#resolveWorkspaceRoot() {
|
|
20
|
-
if (this.#workspaceRoot !== null)
|
|
21
|
-
return this.#workspaceRoot;
|
|
22
|
-
const root = process.env.PLURNK_WORKSPACE_ROOT;
|
|
23
|
-
if (root === undefined || root === "")
|
|
24
|
-
return null;
|
|
25
|
-
this.#workspaceRoot = resolve(root);
|
|
26
|
-
return this.#workspaceRoot;
|
|
27
|
-
}
|
|
28
|
-
// Resolve + workspace-root containment check. Returns null on absence;
|
|
29
|
-
// throws on traversal escape. Used by both read and edit.
|
|
30
|
-
async #resolveContained(pathname) {
|
|
31
|
-
const root = this.#resolveWorkspaceRoot();
|
|
32
|
-
if (root === null)
|
|
33
|
-
return { error: "no-root" };
|
|
34
|
-
const requested = isAbsolute(pathname) ? pathname : resolve(root, pathname);
|
|
35
|
-
let canonical;
|
|
36
|
-
try {
|
|
37
|
-
canonical = await realpath(requested);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
if (err.code === "ENOENT") {
|
|
41
|
-
// For edit, missing target is OK — we'll write it. Caller
|
|
42
|
-
// distinguishes by checking error === "not-found".
|
|
43
|
-
return { error: "not-found" };
|
|
44
|
-
}
|
|
45
|
-
throw err;
|
|
46
|
-
}
|
|
47
|
-
const rel = relative(root, canonical);
|
|
48
|
-
if (rel.startsWith("..") || isAbsolute(rel))
|
|
49
|
-
return { error: "traversal" };
|
|
50
|
-
return { canonical, root };
|
|
51
|
-
}
|
|
52
|
-
async read(statement, _ctx) {
|
|
48
|
+
async read(statement, ctx) {
|
|
53
49
|
if (statement.path === null)
|
|
54
50
|
return { status: 400, content: null, mimetype: null };
|
|
55
51
|
if (statement.lineMarker !== null)
|
|
@@ -58,11 +54,12 @@ export default class File {
|
|
|
58
54
|
return { status: 501, content: null, mimetype: null };
|
|
59
55
|
if (Array.isArray(statement.signal) && statement.signal.length > 0)
|
|
60
56
|
return { status: 501, content: null, mimetype: null };
|
|
57
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
58
|
+
if (root === null)
|
|
59
|
+
return { status: 400, content: null, mimetype: null };
|
|
61
60
|
const pathname = statement.path.kind === "url" ? statement.path.pathname : statement.path.raw;
|
|
62
|
-
const resolved = await
|
|
61
|
+
const resolved = await resolveContained(pathname, root);
|
|
63
62
|
if ("error" in resolved) {
|
|
64
|
-
if (resolved.error === "no-root")
|
|
65
|
-
return { status: 400, content: null, mimetype: null };
|
|
66
63
|
if (resolved.error === "not-found")
|
|
67
64
|
return { status: 404, content: null, mimetype: null };
|
|
68
65
|
return { status: 403, content: null, mimetype: null }; // traversal
|
|
@@ -74,15 +71,16 @@ export default class File {
|
|
|
74
71
|
// with a udiff body for client review + attrs carrying the full patched
|
|
75
72
|
// content. Engine writes the proposed log entry, pauses dispatch, and
|
|
76
73
|
// calls applyResolution() (below) after the proposal accepts.
|
|
77
|
-
async edit(statement,
|
|
74
|
+
async edit(statement, ctx) {
|
|
78
75
|
if (statement.path === null)
|
|
79
76
|
return { status: 400, error: "EDIT requires a path" };
|
|
80
77
|
if (statement.lineMarker !== null)
|
|
81
78
|
return { status: 501, error: "lineMarker-based edits not yet supported" };
|
|
79
|
+
const root = await loadSessionRoot(ctx.db, ctx.sessionId);
|
|
80
|
+
if (root === null) {
|
|
81
|
+
return { status: 400, error: "session has no project_root; client must call session.create({projectRoot}) or session.set_root({projectRoot}) before file ops" };
|
|
82
|
+
}
|
|
82
83
|
const pathname = statement.path.kind === "url" ? statement.path.pathname : statement.path.raw;
|
|
83
|
-
const root = this.#resolveWorkspaceRoot();
|
|
84
|
-
if (root === null)
|
|
85
|
-
return { status: 400, error: "PLURNK_WORKSPACE_ROOT must be set" };
|
|
86
84
|
// Containment check (canonical path inside workspace). For edits,
|
|
87
85
|
// a not-found target is fine — we're proposing to create or
|
|
88
86
|
// overwrite. Traversal escape is fatal.
|
|
@@ -120,22 +118,29 @@ export default class File {
|
|
|
120
118
|
};
|
|
121
119
|
}
|
|
122
120
|
// applyResolution — called by Engine.dispatch after a proposed log
|
|
123
|
-
// entry resolves with decision=accept.
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
|
|
121
|
+
// entry resolves with decision=accept. Two responsibilities:
|
|
122
|
+
// 1. Write the patched content to disk.
|
|
123
|
+
// 2. Register an entries+visibility row so the file appears in
|
|
124
|
+
// the next packet's # Plurnk System Index. Without (2), the
|
|
125
|
+
// model has no artifact of completion to read and tends to
|
|
126
|
+
// re-EDIT the same file across turns. The index is what tells
|
|
127
|
+
// the model "your prior work landed."
|
|
128
|
+
async applyResolution(args, ctx) {
|
|
127
129
|
const { attrs, body } = args;
|
|
128
130
|
const canonical = attrs.canonical;
|
|
131
|
+
const relPath = attrs.path;
|
|
129
132
|
const patched = body ?? attrs.patched;
|
|
130
133
|
if (typeof canonical !== "string" || canonical.length === 0) {
|
|
131
134
|
return { status: 500, outcome: "applyResolution: missing attrs.canonical" };
|
|
132
135
|
}
|
|
136
|
+
if (typeof relPath !== "string" || relPath.length === 0) {
|
|
137
|
+
return { status: 500, outcome: "applyResolution: missing attrs.path" };
|
|
138
|
+
}
|
|
133
139
|
if (typeof patched !== "string") {
|
|
134
140
|
return { status: 500, outcome: "applyResolution: missing patched content" };
|
|
135
141
|
}
|
|
136
142
|
try {
|
|
137
143
|
await writeFile(canonical, patched, "utf8");
|
|
138
|
-
return { status: 200 };
|
|
139
144
|
}
|
|
140
145
|
catch (err) {
|
|
141
146
|
return {
|
|
@@ -144,6 +149,33 @@ export default class File {
|
|
|
144
149
|
body: err instanceof Error ? err.message : String(err),
|
|
145
150
|
};
|
|
146
151
|
}
|
|
152
|
+
// Register the file as an indexed entry so the next packet's
|
|
153
|
+
// # Plurnk System Index shows it under file://<relPath> with
|
|
154
|
+
// the body content visible. mimetype is best-effort by file
|
|
155
|
+
// extension; .md → text/markdown, anything else → text/plain.
|
|
156
|
+
const mimetype = relPath.endsWith(".md") ? "text/markdown" : "text/plain";
|
|
157
|
+
try {
|
|
158
|
+
// scheme=null: the "file" scheme is a routing internal only;
|
|
159
|
+
// never stored. Entries.scheme stays NULL for filesystem rows
|
|
160
|
+
// so render-time bare-path output requires no special case.
|
|
161
|
+
await writeEntry(relPath, {
|
|
162
|
+
channels: { body: { content: patched, mimetype } },
|
|
163
|
+
tags: [],
|
|
164
|
+
}, ctx, null);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
// Disk write succeeded; entry registration failed. Surface
|
|
168
|
+
// the write as 200 (file is on disk) but log the failure —
|
|
169
|
+
// index just won't reflect it until next time.
|
|
170
|
+
// (Could harden to roll back the file write; for v0,
|
|
171
|
+
// disk-truth-of-record wins.)
|
|
172
|
+
return {
|
|
173
|
+
status: 200,
|
|
174
|
+
outcome: "indexed_failed",
|
|
175
|
+
body: err instanceof Error ? err.message : String(err),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return { status: 200 };
|
|
147
179
|
}
|
|
148
180
|
}
|
|
149
181
|
//# sourceMappingURL=File.js.map
|
package/dist/schemes/File.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/schemes/File.ts"],"names":[],"mappings":"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"}
|
package/dist/schemes/Known.js
CHANGED
|
@@ -5,7 +5,7 @@ import { findSessionEntries } from "./_entry-find.js";
|
|
|
5
5
|
export default class Known {
|
|
6
6
|
static manifest = {
|
|
7
7
|
name: "known",
|
|
8
|
-
channels: { body: "text/markdown"
|
|
8
|
+
channels: { body: "text/markdown" },
|
|
9
9
|
defaultChannel: "body",
|
|
10
10
|
category: "data",
|
|
11
11
|
scope: "session",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Known.js","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,MAAM,CAAC,QAAQ,GAAmB;QAC9B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE
|
|
1
|
+
{"version":3,"file":"Known.js","sourceRoot":"","sources":["../../src/schemes/Known.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,MAAM,CAAC,QAAQ,GAAmB;QAC9B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACnC,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/B,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;KACrB,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwC,EAAE,GAAwB;QACzE,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwC,EAAE,GAAwB;QACzE,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAwB;QACtD,OAAO,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAgB,EAAE,GAAwB;QACzE,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAwB;QACxD,OAAO,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAwB,EAAE,GAAwB;QACzD,OAAO,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC"}
|
package/dist/schemes/Log.d.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import type { ReadStatement } from "@plurnk/plurnk-grammar";
|
|
1
|
+
import type { HideStatement, ReadStatement, ShowStatement } from "@plurnk/plurnk-grammar";
|
|
2
2
|
import type { SchemeManifest, PlurnkSchemeContext } from "../core/scheme-types.ts";
|
|
3
3
|
type ReadResult = {
|
|
4
4
|
status: number;
|
|
5
5
|
content: string | null;
|
|
6
6
|
mimetype: string | null;
|
|
7
7
|
};
|
|
8
|
+
type ShowHideResult = {
|
|
9
|
+
status: number;
|
|
10
|
+
};
|
|
8
11
|
export default class Log {
|
|
12
|
+
#private;
|
|
9
13
|
static manifest: SchemeManifest;
|
|
10
14
|
read(statement: ReadStatement, ctx: PlurnkSchemeContext): Promise<ReadResult>;
|
|
15
|
+
show(statement: ShowStatement, ctx: PlurnkSchemeContext): Promise<ShowHideResult>;
|
|
16
|
+
hide(statement: HideStatement, ctx: PlurnkSchemeContext): Promise<ShowHideResult>;
|
|
11
17
|
}
|
|
12
18
|
export {};
|
|
13
19
|
//# sourceMappingURL=Log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Log.d.ts","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE1F,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACtF,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiBzC,MAAM,CAAC,OAAO,OAAO,GAAG;;IACpB,MAAM,CAAC,QAAQ,EAAE,cAAc,CAS7B;IAEI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2B7E,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjF,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;CAmB1F"}
|
package/dist/schemes/Log.js
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
// log://<loop_seq>/<turn_seq>/<sequence>[/<op>] — the trailing /op segment
|
|
2
|
+
// is wire-rendering self-documentation derived from the row's `op` field;
|
|
3
|
+
// parsing accepts it (or omits it) and identifies the row by coordinate.
|
|
4
|
+
const COORDINATE = /^(\d+)\/(\d+)\/(\d+)(?:\/([A-Z]+))?$/;
|
|
5
|
+
const parseCoordinate = (pathname) => {
|
|
6
|
+
const match = COORDINATE.exec(pathname);
|
|
7
|
+
if (match === null)
|
|
8
|
+
return null;
|
|
9
|
+
return {
|
|
10
|
+
loopSeq: Number(match[1]),
|
|
11
|
+
turnSeq: Number(match[2]),
|
|
12
|
+
sequence: Number(match[3]),
|
|
13
|
+
};
|
|
14
|
+
};
|
|
2
15
|
export default class Log {
|
|
3
16
|
static manifest = {
|
|
4
17
|
name: "log",
|
|
@@ -6,7 +19,7 @@ export default class Log {
|
|
|
6
19
|
defaultChannel: "",
|
|
7
20
|
category: "logging",
|
|
8
21
|
scope: "session",
|
|
9
|
-
writableBy: ["system"], // engine-only writes; model & client read
|
|
22
|
+
writableBy: ["system"], // engine-only writes; model & client read + show/hide
|
|
10
23
|
volatile: false,
|
|
11
24
|
modelVisible: true,
|
|
12
25
|
};
|
|
@@ -21,18 +34,37 @@ export default class Log {
|
|
|
21
34
|
if (Array.isArray(statement.signal) && statement.signal.length > 0)
|
|
22
35
|
return { status: 501, content: null, mimetype: null };
|
|
23
36
|
const pathname = statement.path.kind === "url" ? statement.path.pathname : statement.path.raw;
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
37
|
+
const coord = parseCoordinate(pathname);
|
|
38
|
+
if (coord === null)
|
|
26
39
|
return { status: 400, content: null, mimetype: null };
|
|
27
|
-
const
|
|
28
|
-
const turnSeq = Number(match[2]);
|
|
29
|
-
const actionIndex = Number(match[3]);
|
|
30
|
-
const row = await db.log_read_by_coordinate.get({ run_id: runId, loop_seq: loopSeq, turn_seq: turnSeq, action_index: actionIndex });
|
|
40
|
+
const row = await db.log_read_by_coordinate.get({ run_id: runId, loop_seq: coord.loopSeq, turn_seq: coord.turnSeq, sequence: coord.sequence });
|
|
31
41
|
if (row === undefined)
|
|
32
42
|
return { status: 404, content: null, mimetype: null };
|
|
33
|
-
const target = row.
|
|
43
|
+
const target = row.scheme !== null ? `${row.scheme}://${row.pathname ?? ""}` : (row.pathname ?? "(no path)");
|
|
34
44
|
const summary = `${row.op} ${target}\nstatus: ${row.status_rx}\nresponse: ${row.rx}`;
|
|
35
45
|
return { status: 200, content: summary, mimetype: "text/plain" };
|
|
36
46
|
}
|
|
47
|
+
async show(statement, ctx) {
|
|
48
|
+
return this.#setIndexed(statement, ctx, 1);
|
|
49
|
+
}
|
|
50
|
+
async hide(statement, ctx) {
|
|
51
|
+
return this.#setIndexed(statement, ctx, 0);
|
|
52
|
+
}
|
|
53
|
+
async #setIndexed(statement, ctx, indexed) {
|
|
54
|
+
if (statement.path === null)
|
|
55
|
+
return { status: 400 };
|
|
56
|
+
if (statement.lineMarker !== null)
|
|
57
|
+
return { status: 501 };
|
|
58
|
+
const { db, runId } = ctx;
|
|
59
|
+
const pathname = statement.path.kind === "url" ? statement.path.pathname : statement.path.raw;
|
|
60
|
+
const coord = parseCoordinate(pathname);
|
|
61
|
+
if (coord === null)
|
|
62
|
+
return { status: 400 };
|
|
63
|
+
const updated = await db.log_set_indexed.get({
|
|
64
|
+
run_id: runId, loop_seq: coord.loopSeq, turn_seq: coord.turnSeq,
|
|
65
|
+
sequence: coord.sequence, indexed,
|
|
66
|
+
});
|
|
67
|
+
return { status: updated === undefined ? 404 : 200 };
|
|
68
|
+
}
|
|
37
69
|
}
|
|
38
70
|
//# sourceMappingURL=Log.js.map
|
package/dist/schemes/Log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Log.js","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Log.js","sourceRoot":"","sources":["../../src/schemes/Log.ts"],"names":[],"mappings":"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"}
|