@plurnk/plurnk-service 3.1.0 → 3.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/.env.defaults +24 -19
- package/INSTALL.md +20 -1
- package/SPEC.md +448 -121
- package/dist/build-info.json +1 -1
- package/dist/completions/_plurnk-service +1 -1
- package/dist/completions/plurnk-service.bash +1 -1
- package/dist/completions/plurnk-service.fish +1 -0
- package/dist/content/path-mimetype.d.ts.map +1 -1
- package/dist/content/path-mimetype.js +2 -8
- package/dist/content/path-mimetype.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +22 -10
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts +1 -3
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +43 -46
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/{schemes/_derivation-use.d.ts → core/ContentUse.d.ts} +3 -3
- package/dist/core/ContentUse.d.ts.map +1 -0
- package/dist/{schemes/_derivation-use.js → core/ContentUse.js} +8 -7
- package/dist/core/ContentUse.js.map +1 -0
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +1 -0
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/DataStatementRunner.d.ts.map +1 -1
- package/dist/core/DataStatementRunner.js +8 -20
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +9 -1
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +151 -76
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/EditMutations.js +1 -1
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/Engine.d.ts +1 -1
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +3 -3
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/FileAddress.d.ts +12 -0
- package/dist/core/FileAddress.d.ts.map +1 -0
- package/dist/core/FileAddress.js +73 -0
- package/dist/core/FileAddress.js.map +1 -0
- package/dist/core/FilePublication.d.ts +15 -0
- package/dist/core/FilePublication.d.ts.map +1 -0
- package/dist/core/FilePublication.js +143 -0
- package/dist/core/FilePublication.js.map +1 -0
- package/dist/core/FileSnapshot.d.ts +26 -0
- package/dist/core/FileSnapshot.d.ts.map +1 -0
- package/dist/core/FileSnapshot.js +179 -0
- package/dist/core/FileSnapshot.js.map +1 -0
- package/dist/core/KillHandler.d.ts.map +1 -1
- package/dist/core/KillHandler.js +2 -1
- package/dist/core/KillHandler.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +3 -2
- package/dist/core/MembershipMaterialization.d.ts.map +1 -1
- package/dist/core/MembershipMaterialization.js +87 -143
- package/dist/core/MembershipMaterialization.js.map +1 -1
- package/dist/core/MutationEffects.d.ts +2 -1
- package/dist/core/MutationEffects.d.ts.map +1 -1
- package/dist/core/MutationEffects.js +14 -1
- package/dist/core/MutationEffects.js.map +1 -1
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +16 -13
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +22 -0
- package/dist/core/PathGlob.d.ts +6 -0
- package/dist/core/PathGlob.d.ts.map +1 -0
- package/dist/core/PathGlob.js +24 -0
- package/dist/core/PathGlob.js.map +1 -0
- package/dist/core/ProposalLifecycle.d.ts +3 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +46 -33
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProposalLifecycle.sql +4 -0
- package/dist/core/ResourceBindings.d.ts.map +1 -1
- package/dist/core/ResourceBindings.js +4 -3
- package/dist/core/ResourceBindings.js.map +1 -1
- package/dist/core/ResourceSelector.d.ts +1 -2
- package/dist/core/ResourceSelector.d.ts.map +1 -1
- package/dist/core/ResourceSelector.js +30 -9
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/ResourceTransfers.d.ts +1 -1
- package/dist/core/ResourceTransfers.d.ts.map +1 -1
- package/dist/core/ResourceTransfers.js +26 -11
- package/dist/core/ResourceTransfers.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +5 -3
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +6 -4
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/WorkerControlHandler.d.ts.map +1 -1
- package/dist/core/WorkerControlHandler.js +38 -2
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +2 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +7 -0
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/fork.sql +2 -2
- package/dist/core/git-membership.d.ts +1 -0
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +9 -11
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/glob_match.js +3 -3
- package/dist/core/glob_match.js.map +1 -1
- package/dist/core/mutation-types.d.ts +4 -0
- package/dist/core/mutation-types.d.ts.map +1 -1
- package/dist/core/namespace.d.ts +4 -1
- package/dist/core/namespace.d.ts.map +1 -1
- package/dist/core/namespace.js +14 -3
- package/dist/core/namespace.js.map +1 -1
- package/dist/core/packet-wire.d.ts +1 -1
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +17 -11
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +4 -3
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +24 -12
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +2 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/sqlite-synchronous.d.ts +2 -0
- package/dist/core/sqlite-synchronous.d.ts.map +1 -0
- package/dist/core/sqlite-synchronous.js +4 -0
- package/dist/core/sqlite-synchronous.js.map +1 -0
- package/dist/evidence/EvidenceReader.d.ts.map +1 -1
- package/dist/evidence/EvidenceReader.js +8 -1
- package/dist/evidence/EvidenceReader.js.map +1 -1
- package/dist/evidence/digest.sql +6 -1
- package/dist/man/plurnk-service.1 +35 -24
- package/dist/schemes/Env.d.ts +1 -1
- package/dist/schemes/Env.d.ts.map +1 -1
- package/dist/schemes/Env.js +2 -2
- package/dist/schemes/Env.js.map +1 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +5 -1
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecutionInput.d.ts +2 -1
- package/dist/schemes/ExecutionInput.d.ts.map +1 -1
- package/dist/schemes/ExecutionInput.js +44 -6
- package/dist/schemes/ExecutionInput.js.map +1 -1
- package/dist/schemes/File.d.ts +1 -0
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +246 -269
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +68 -8
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +24 -1
- package/dist/schemes/Worker.js +1 -1
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +2 -0
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +8 -5
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +15 -15
- package/dist/schemes/_entry-find.d.ts +1 -0
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +15 -10
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-manifest.d.ts +2 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +7 -5
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +9 -7
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_path-scope.d.ts.map +1 -1
- package/dist/schemes/_path-scope.js +12 -4
- package/dist/schemes/_path-scope.js.map +1 -1
- package/dist/schemes/_search-index.js +3 -3
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/exec-env.d.ts.map +1 -1
- package/dist/schemes/exec-env.js +7 -22
- package/dist/schemes/exec-env.js.map +1 -1
- package/dist/server/Daemon.d.ts +7 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +90 -69
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +3 -3
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +46 -5
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +19 -11
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +89 -45
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +2 -5
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +10 -6
- package/dist/server/FunctionalityManager.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +7 -8
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +94 -62
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/MessageAbandonment.d.ts +7 -0
- package/dist/server/MessageAbandonment.d.ts.map +1 -0
- package/dist/server/MessageAbandonment.js +57 -0
- package/dist/server/MessageAbandonment.js.map +1 -0
- package/dist/server/Retention.d.ts.map +1 -1
- package/dist/server/Retention.js +5 -5
- package/dist/server/Retention.js.map +1 -1
- package/dist/server/Retention.sql +49 -23
- package/dist/server/Rollback.d.ts +29 -0
- package/dist/server/Rollback.d.ts.map +1 -0
- package/dist/server/Rollback.js +111 -0
- package/dist/server/Rollback.js.map +1 -0
- package/dist/server/drain.sql +9 -0
- package/dist/server/lifecycle-recovery.sql +4 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +4 -0
- package/dist/service.js.map +1 -1
- package/docs/copy-move.md +3 -0
- package/docs/env.md +12 -6
- package/docs/members.md +30 -10
- package/migrations/023_file_revisions.sql +54 -0
- package/migrations/024_proposal_decisions.sql +34 -0
- package/migrations/025_response_retention.sql +30 -0
- package/migrations/026_message_obligations.sql +32 -0
- package/migrations/027_members_identity.sql +20 -0
- package/migrations/028_mutation_patch.sql +20 -0
- package/package.json +35 -34
- package/dist/schemes/_derivation-use.d.ts.map +0 -1
- package/dist/schemes/_derivation-use.js.map +0 -1
|
@@ -1,38 +1,63 @@
|
|
|
1
1
|
// {§members-functionality} — file membership as one workspace Functionality family. The model, the
|
|
2
|
-
// client, and the operator learn one surface (
|
|
2
|
+
// client, and the operator learn one surface ({§functionality-coordinator})
|
|
3
3
|
// for what the model may see, exactly as they do for skills and MCP servers. A definition is one
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
4
|
+
// shell-path glob, `!glob` excludes, and the glob is the definition's identity
|
|
5
|
+
// ({§functionality-addressing}): `add` names globs; enable, disable and remove name one. Definitions
|
|
6
|
+
// are workspace desired state and the membership overlay is their projection ({§members-projection})
|
|
7
|
+
// — the one truth every worker sees ({§membership-baseline}). A model's `add` is admitted against
|
|
8
|
+
// the service ceiling `PLURNK_SERVICE_MEMBERS_MODEL_SCOPE` (none < root < namespace) narrowed by the
|
|
9
|
+
// workspace.
|
|
8
10
|
import { stat } from "node:fs/promises";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
+
import { resolve } from "node:path";
|
|
12
|
+
import { PathSyntax } from "@plurnk/plurnk-contracts";
|
|
11
13
|
import { ConfigurationError, Knob, ResourceEnvironment } from "@plurnk/plurnk-meta";
|
|
12
14
|
import FileCreationPolicy from "../core/file-creation-policy.js";
|
|
13
15
|
import GitMembership from "../core/git-membership.js";
|
|
14
16
|
import Results, { OperationFailureError } from "../core/results.js";
|
|
15
17
|
import WorkspaceSettings from "../core/workspace-settings.js";
|
|
18
|
+
import PathGlob from "../core/PathGlob.js";
|
|
16
19
|
import Paths from "../Paths.js";
|
|
17
20
|
const MEMBERS_FAMILY = "members";
|
|
18
21
|
const MEMBERS_OWNER = "@plurnk/plurnk-core/members";
|
|
19
22
|
const PREFIX = "PLURNK_MEMBERS_";
|
|
20
23
|
const SCOPE_KEY = "PLURNK_SERVICE_MEMBERS_MODEL_SCOPE";
|
|
24
|
+
// The operator's environment alias ({§members-configuration}); a definition's own name is its glob.
|
|
21
25
|
const ALIAS = /^[a-z][a-z0-9-]*$/u;
|
|
22
|
-
|
|
26
|
+
// {§functionality-addressing} — the glob is the alias: one line, no surrounding whitespace.
|
|
27
|
+
const GLOB = /^\S(?:[^\n]*\S)?$/u;
|
|
23
28
|
const sampleSize = () => Knob.integer("PLURNK_SERVICE_MEMBERS_SAMPLE", 0);
|
|
24
|
-
|
|
25
|
-
//
|
|
29
|
+
const GLOB_DESCRIPTION = "A shell-path glob relative to the project root (`docs/**`, `*.md`, `../shared/*.json`). A leading `!` excludes matching members; an exclusion wins over every inclusion.";
|
|
30
|
+
// {§functionality-addressing} — what `add` takes: the globs, each one definition.
|
|
31
|
+
const ADD = Object.freeze({
|
|
32
|
+
type: "object",
|
|
33
|
+
additionalProperties: false,
|
|
34
|
+
required: ["files"],
|
|
35
|
+
properties: {
|
|
36
|
+
files: {
|
|
37
|
+
type: "array",
|
|
38
|
+
minItems: 1,
|
|
39
|
+
items: { type: "string", minLength: 1, description: GLOB_DESCRIPTION },
|
|
40
|
+
description: "The globs to add; each is one definition.",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
// What enable, disable and remove take: one definition's glob, as `list` shows it.
|
|
45
|
+
const SELECT = Object.freeze({
|
|
46
|
+
type: "object",
|
|
47
|
+
additionalProperties: false,
|
|
48
|
+
required: ["file"],
|
|
49
|
+
properties: {
|
|
50
|
+
file: { type: "string", minLength: 1, description: "The glob of one definition, as `list` shows it." },
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
// The exact definition the coordinator persists. Provenance is the coordinator's truth, never the
|
|
54
|
+
// caller's claim: `admit` stamps it from the caller.
|
|
26
55
|
const DEFINITION = Object.freeze({
|
|
27
56
|
type: "object",
|
|
28
57
|
additionalProperties: false,
|
|
29
58
|
required: ["glob"],
|
|
30
59
|
properties: {
|
|
31
|
-
glob: {
|
|
32
|
-
type: "string",
|
|
33
|
-
minLength: 1,
|
|
34
|
-
description: "A gitignore-style pattern relative to the project root (`docs/**`, `*.md`, `../shared/*.json`). A leading `!` excludes matching members; an exclusion wins over every inclusion.",
|
|
35
|
-
},
|
|
60
|
+
glob: { type: "string", minLength: 1, description: GLOB_DESCRIPTION },
|
|
36
61
|
provenance: {
|
|
37
62
|
type: "object",
|
|
38
63
|
readOnly: true,
|
|
@@ -47,23 +72,23 @@ const DEFINITION = Object.freeze({
|
|
|
47
72
|
const refuse = (code, status, detail, extensions = {}) => new OperationFailureError(Results.failure("members:functionality", code, status, detail, {}, { family: MEMBERS_FAMILY, retryable: false, ...extensions }));
|
|
48
73
|
const isExclusion = (glob) => glob.startsWith("!");
|
|
49
74
|
const patternOf = (glob) => (isExclusion(glob) ? glob.slice(1) : glob);
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
const folded = patternOf(glob).toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "").slice(0, 48);
|
|
53
|
-
const base = ALIAS.test(folded) ? folded : `p-${folded}`.replace(/-+$/u, "");
|
|
54
|
-
return isExclusion(glob) ? `no-${base}` : base;
|
|
55
|
-
};
|
|
56
|
-
// {§members-configuration}
|
|
75
|
+
// {§members-configuration} — each `PLURNK_MEMBERS_<alias>=<glob>` is one service definition named by
|
|
76
|
+
// its glob; the environment key is its provenance. Two keys naming one glob fail by name.
|
|
57
77
|
export const serviceMembers = (environ = process.env) => {
|
|
58
78
|
const environment = new ResourceEnvironment(PREFIX, { controls: [], settings: [] }, environ);
|
|
79
|
+
const declared = new Map();
|
|
59
80
|
return [...environment.definitions].map(([alias, { key, value }]) => {
|
|
60
81
|
const glob = value.trim();
|
|
61
82
|
if (!ALIAS.test(alias))
|
|
62
83
|
throw new ConfigurationError(key, `${key} names an invalid members alias '${alias}'.`);
|
|
63
84
|
if (patternOf(glob).length === 0)
|
|
64
85
|
throw new ConfigurationError(key, `${key} names no pattern.`);
|
|
86
|
+
const earlier = declared.get(glob);
|
|
87
|
+
if (earlier !== undefined)
|
|
88
|
+
throw new ConfigurationError(key, `${key} repeats the definition '${glob}' of ${earlier}.`);
|
|
89
|
+
declared.set(glob, key);
|
|
65
90
|
return {
|
|
66
|
-
alias,
|
|
91
|
+
alias: glob,
|
|
67
92
|
definition: { glob, provenance: { kind: "service-configuration" } },
|
|
68
93
|
enabled: environment.enabled(alias),
|
|
69
94
|
provenance: { kind: "environment", source: key },
|
|
@@ -87,26 +112,29 @@ const resolutionOf = (definition, overlay) => {
|
|
|
87
112
|
if (overlay === null)
|
|
88
113
|
return { effect, pattern, matched: 0, files: [], ignored: 0 };
|
|
89
114
|
if (effect === "exclude") {
|
|
90
|
-
const files = overlay.excluded.filter((path) =>
|
|
115
|
+
const files = overlay.excluded.filter((path) => PathGlob.matches(path, pattern));
|
|
91
116
|
return { effect, pattern, matched: files.length, files: files.slice(0, sampleSize()), ignored: 0 };
|
|
92
117
|
}
|
|
93
118
|
const members = new Set(overlay.members);
|
|
94
119
|
const files = (overlay.scans.get(pattern) ?? []).filter((path) => members.has(path));
|
|
95
|
-
const ignored = overlay.masked.filter((path) =>
|
|
120
|
+
const ignored = overlay.masked.filter((path) => PathGlob.matches(path, pattern)).length;
|
|
96
121
|
return { effect, pattern, matched: files.length, files: files.slice(0, sampleSize()), ignored };
|
|
97
122
|
};
|
|
123
|
+
// {§members-projection} — a definition's document is named by its glob, percent-encoded as one path
|
|
124
|
+
// segment: RFC 3986 unreserved characters and parentheses stay literal, everything else is `%XX`.
|
|
125
|
+
export const documentName = (glob) => encodeURIComponent(glob).replace(/[!'*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
98
126
|
// {§members-projection} — each enabled definition is one generated document under
|
|
99
127
|
// `worker:///_plurnk/members/`, surveyed at turn 0 like every family's enabled definitions:
|
|
100
128
|
// what the glob is, whose it is, and what it resolved to.
|
|
101
|
-
const membersDocument = (
|
|
129
|
+
const membersDocument = (definition, resolution) => {
|
|
102
130
|
const noun = resolution.effect === "exclude" ? "member" : "file";
|
|
103
131
|
const ignored = resolution.ignored > 0 ? ` (${count(resolution.ignored, "match")} ignored)` : "";
|
|
104
132
|
const kind = definition.provenance?.kind ?? "client-action";
|
|
105
133
|
const listed = resolution.files.map((file) => `\`${file}\``).join(", ") + (resolution.matched > resolution.files.length ? ", …" : "");
|
|
106
134
|
return {
|
|
107
|
-
pathname: `/members/${
|
|
135
|
+
pathname: `/members/${documentName(definition.glob)}.md`,
|
|
108
136
|
content: [
|
|
109
|
-
`#
|
|
137
|
+
`# \`${definition.glob}\``,
|
|
110
138
|
"",
|
|
111
139
|
"## Summary",
|
|
112
140
|
"",
|
|
@@ -114,7 +142,7 @@ const membersDocument = (alias, definition, resolution) => {
|
|
|
114
142
|
"",
|
|
115
143
|
"| Field | Value |",
|
|
116
144
|
"| --- | --- |",
|
|
117
|
-
`|
|
|
145
|
+
`| glob | \`${definition.glob}\` |`,
|
|
118
146
|
`| origin | ${kind === "service-configuration" ? "service" : "workspace"} |`,
|
|
119
147
|
`| provenance | ${kind} |`,
|
|
120
148
|
...(resolution.files.length === 0 ? [] : ["", `${resolution.effect === "exclude" ? "Excluded" : "Included"}: ${listed}`]),
|
|
@@ -137,7 +165,13 @@ export default class MembersFunctionality {
|
|
|
137
165
|
namespaceOwner = MEMBERS_OWNER;
|
|
138
166
|
summary = "Manage file membership";
|
|
139
167
|
definitionSchema = DEFINITION;
|
|
140
|
-
|
|
168
|
+
aliasPattern = GLOB;
|
|
169
|
+
addressing = {
|
|
170
|
+
add: ADD,
|
|
171
|
+
select: SELECT,
|
|
172
|
+
alias: (input) => input.file.trim(),
|
|
173
|
+
};
|
|
174
|
+
example = { files: ["docs/**"] };
|
|
141
175
|
docsDir = Paths.packageRoot;
|
|
142
176
|
discovery = {
|
|
143
177
|
inputs: ["query"],
|
|
@@ -168,15 +202,15 @@ export default class MembersFunctionality {
|
|
|
168
202
|
if (overlay === null) {
|
|
169
203
|
throw refuse("headless", 409, "The workspace has no project root, so there are no file members.", { recovery: "Open the workspace on a project root." });
|
|
170
204
|
}
|
|
171
|
-
return [isExclusion(glob) ||
|
|
205
|
+
return [isExclusion(glob) || PathSyntax.hasGlob(glob)
|
|
172
206
|
? await this.#preview(glob, overlay, identity.workspaceId)
|
|
173
207
|
: await this.#verdict(glob, overlay, identity.workspaceId)];
|
|
174
208
|
}
|
|
175
209
|
async #preview(glob, overlay, workspaceId) {
|
|
176
210
|
const pattern = patternOf(glob);
|
|
177
|
-
const candidate = { alias:
|
|
211
|
+
const candidate = { alias: glob, definition: { glob }, provenance: { kind: "preview", source: glob } };
|
|
178
212
|
if (isExclusion(glob)) {
|
|
179
|
-
const excluded = overlay.members.filter((path) =>
|
|
213
|
+
const excluded = overlay.members.filter((path) => PathGlob.matches(path, pattern));
|
|
180
214
|
return { ...candidate, summary: `would exclude ${count(excluded.length, "member")}${sample(excluded)}` };
|
|
181
215
|
}
|
|
182
216
|
const matched = await GitMembership.scanPattern(overlay.root, pattern, undefined);
|
|
@@ -189,7 +223,7 @@ export default class MembersFunctionality {
|
|
|
189
223
|
};
|
|
190
224
|
}
|
|
191
225
|
async #verdict(key, overlay, workspaceId) {
|
|
192
|
-
const candidate = { alias:
|
|
226
|
+
const candidate = { alias: key, definition: { glob: key } };
|
|
193
227
|
if (!(await isFile(resolve(overlay.root, key)))) {
|
|
194
228
|
return { ...candidate, provenance: { kind: "absent", source: key }, summary: "absent — no such file under the project root" };
|
|
195
229
|
}
|
|
@@ -200,7 +234,7 @@ export default class MembersFunctionality {
|
|
|
200
234
|
: definition !== undefined ? `included by \`${definition}\`` : "a creation record: plurnk wrote it";
|
|
201
235
|
return { ...candidate, provenance: { kind: "member", source: key }, summary: `member — ${via}` };
|
|
202
236
|
}
|
|
203
|
-
const exclusion = overlay.excludeGlobs.find((pattern) =>
|
|
237
|
+
const exclusion = overlay.excludeGlobs.find((pattern) => PathGlob.matches(key, pattern));
|
|
204
238
|
if (exclusion !== undefined) {
|
|
205
239
|
return { ...candidate, provenance: { kind: "excluded", source: key }, summary: `not a member — excluded by \`!${exclusion}\`` };
|
|
206
240
|
}
|
|
@@ -213,26 +247,23 @@ export default class MembersFunctionality {
|
|
|
213
247
|
}
|
|
214
248
|
return { ...candidate, provenance: { kind: "candidate", source: key }, summary: "not a member — untracked; add this definition to include it" };
|
|
215
249
|
}
|
|
250
|
+
// {§functionality-addressing} — every glob the body names is admitted, or none is: a bare `!`
|
|
251
|
+
// or a glob past the model's scope refuses the whole add. The same glob twice is one definition.
|
|
216
252
|
async admit(input, identity, caller = "action") {
|
|
217
|
-
const {
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
if (caller === "operation") {
|
|
233
|
-
const settings = await WorkspaceSettings.read(this.#db, identity.workspaceId);
|
|
234
|
-
const scope = FileCreationPolicy.effective(modelScope(this.#env), settings.membersModelScope);
|
|
235
|
-
if (!FileCreationPolicy.admits(scope, outsideRoot(pattern))) {
|
|
253
|
+
const { files } = input;
|
|
254
|
+
const scope = caller === "operation"
|
|
255
|
+
? FileCreationPolicy.effective(modelScope(this.#env), (await WorkspaceSettings.read(this.#db, identity.workspaceId)).membersModelScope)
|
|
256
|
+
: null;
|
|
257
|
+
const admitted = new Map();
|
|
258
|
+
for (const raw of files) {
|
|
259
|
+
const glob = raw.trim();
|
|
260
|
+
const pattern = patternOf(glob);
|
|
261
|
+
if (pattern.length === 0) {
|
|
262
|
+
throw refuse("definition-invalid", 400, `'${raw}' names no pattern; \`!\` alone excludes nothing.`, {
|
|
263
|
+
recovery: "Name a pattern such as `docs/**` or `!**/*.lock`.",
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
if (scope !== null && !FileCreationPolicy.admits(scope, outsideRoot(pattern))) {
|
|
236
267
|
throw refuse("model-scope", 403, scope === "none"
|
|
237
268
|
? "The model may not change membership here: the members scope is none."
|
|
238
269
|
: `The effective members scope '${scope}' does not admit '${glob}'.`, {
|
|
@@ -241,14 +272,15 @@ export default class MembersFunctionality {
|
|
|
241
272
|
recovery: "`git add` the file so git tracks it, or ask the operator to add it (/members add) or raise PLURNK_SERVICE_MEMBERS_MODEL_SCOPE.",
|
|
242
273
|
});
|
|
243
274
|
}
|
|
275
|
+
admitted.set(glob, {
|
|
276
|
+
alias: glob,
|
|
277
|
+
definition: {
|
|
278
|
+
glob,
|
|
279
|
+
provenance: { kind: caller === "operation" ? "model-proposal" : "client-action" },
|
|
280
|
+
},
|
|
281
|
+
});
|
|
244
282
|
}
|
|
245
|
-
return
|
|
246
|
-
alias: typeof alias === "string" && alias.length > 0 ? alias : aliasOf(glob),
|
|
247
|
-
definition: {
|
|
248
|
-
glob,
|
|
249
|
-
provenance: { kind: caller === "operation" ? "model-proposal" : "client-action" },
|
|
250
|
-
},
|
|
251
|
-
};
|
|
283
|
+
return [...admitted.values()];
|
|
252
284
|
}
|
|
253
285
|
// {§members-projection} — project this workspace's enabled definitions:
|
|
254
286
|
// inclusions union, an exclusion wins in resolution, and a
|
|
@@ -263,7 +295,7 @@ export default class MembersFunctionality {
|
|
|
263
295
|
for (const [alias, { definition }] of enabled) {
|
|
264
296
|
const resolution = resolutionOf(definition, overlay);
|
|
265
297
|
outcomes.set(alias, { state: "active", detail: resolution });
|
|
266
|
-
documents.push(membersDocument(
|
|
298
|
+
documents.push(membersDocument(definition, resolution));
|
|
267
299
|
}
|
|
268
300
|
return {
|
|
269
301
|
documents,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MembersFunctionality.js","sourceRoot":"","sources":["../../src/server/MembersFunctionality.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MembersFunctionality.js","sourceRoot":"","sources":["../../src/server/MembersFunctionality.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Db } from "../core/Db.ts";
|
|
2
|
+
import type Engine from "../core/Engine.ts";
|
|
3
|
+
export default class MessageAbandonment {
|
|
4
|
+
static detail(loopId: number, status: number): string;
|
|
5
|
+
static complete(engine: Engine, db: Db, workspaceId: number, workerId: number, loopId: number, status: number): Promise<number>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=MessageAbandonment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageAbandonment.d.ts","sourceRoot":"","sources":["../../src/server/MessageAbandonment.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAI5C,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;IAID,OAAa,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpI;CACJ"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// {§message-abandonment} — a loop that ends with another worker's message unanswered answers it 499 by the
|
|
2
|
+
// daemon's hand: one SEND to each message's address, in a maintenance turn of the loop that ended, so the
|
|
3
|
+
// sender wakes and reads the decline instead of waiting on a loop that is gone. No loop is opened: a cancelled
|
|
4
|
+
// scope stays cancelled ({§worker-lifecycle-no-resurrection}); the turn belongs to the ended loop.
|
|
5
|
+
import { PlurnkParser } from "@plurnk/plurnk-parser";
|
|
6
|
+
import Turn from "../core/Turn.js";
|
|
7
|
+
import TurnOps from "../core/TurnOps.js";
|
|
8
|
+
export default class MessageAbandonment {
|
|
9
|
+
static detail(loopId, status) {
|
|
10
|
+
return `Loop ${loopId} ended with status ${status}; this message was not answered.`;
|
|
11
|
+
}
|
|
12
|
+
// The messages the ended loop still holds without a completion, each completed 499 with the fact of the
|
|
13
|
+
// ending as the body. Returns how many were completed; none is the ordinary case.
|
|
14
|
+
static async complete(engine, db, workspaceId, workerId, loopId, status) {
|
|
15
|
+
const open = await db.drain_abandoned_messages.all({ loop_id: loopId });
|
|
16
|
+
if (open.length === 0)
|
|
17
|
+
return 0;
|
|
18
|
+
const text = open
|
|
19
|
+
.map(({ path }) => `\`\`\`\`SEND (${path}) [499]\n${MessageAbandonment.detail(loopId, status)}\n\`\`\`\``)
|
|
20
|
+
.join("\n\n");
|
|
21
|
+
const parsed = PlurnkParser.parseStatements(text, { executors: [] });
|
|
22
|
+
const statements = parsed.items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
|
|
23
|
+
if (statements.length !== open.length)
|
|
24
|
+
throw new Error(`message abandonment: ${open.length} messages, ${statements.length} completions parsed`);
|
|
25
|
+
const source = TurnOps.renderInternal(statements);
|
|
26
|
+
const admitted = TurnOps.parseInternal(source);
|
|
27
|
+
const { id: turnId } = await Turn.open(db, { loopId, producer: "_plurnk", kind: "maintenance" });
|
|
28
|
+
// The executor completes the turn it ran; only a turn it never finished is closed here, as failed.
|
|
29
|
+
let turnOpen = true;
|
|
30
|
+
try {
|
|
31
|
+
await engine.executeAdmittedTurn({
|
|
32
|
+
statements: admitted,
|
|
33
|
+
source,
|
|
34
|
+
emission: null,
|
|
35
|
+
origin: "_plurnk",
|
|
36
|
+
workspaceId,
|
|
37
|
+
workerId,
|
|
38
|
+
loopId,
|
|
39
|
+
turnId,
|
|
40
|
+
fromSequence: 1,
|
|
41
|
+
failOnOperationError: true,
|
|
42
|
+
});
|
|
43
|
+
turnOpen = false;
|
|
44
|
+
}
|
|
45
|
+
catch (cause) {
|
|
46
|
+
if (turnOpen) {
|
|
47
|
+
try {
|
|
48
|
+
await Turn.complete(db, turnId, 500);
|
|
49
|
+
}
|
|
50
|
+
catch { /* the executor may have closed it */ }
|
|
51
|
+
}
|
|
52
|
+
throw cause;
|
|
53
|
+
}
|
|
54
|
+
return open.length;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=MessageAbandonment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageAbandonment.js","sourceRoot":"","sources":["../../src/server/MessageAbandonment.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,0GAA0G;AAC1G,+GAA+G;AAC/G,mGAAmG;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,MAAc;QACxC,OAAO,QAAQ,MAAM,sBAAsB,MAAM,kCAAkC,CAAC;IACxF,CAAC;IAED,wGAAwG;IACxG,kFAAkF;IAClF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,EAAM,EAAE,WAAmB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;QAC/G,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI;aACZ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,IAAI,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;aACzG,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrG,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,MAAM,cAAc,UAAU,CAAC,MAAM,qBAAqB,CAAC,CAAC;QAChJ,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACjG,mGAAmG;QACnG,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,mBAAmB,CAAC;gBAC7B,UAAU,EAAE,QAAQ;gBACpB,MAAM;gBACN,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,SAAS;gBACjB,WAAW;gBACX,QAAQ;gBACR,MAAM;gBACN,MAAM;gBACN,YAAY,EAAE,CAAC;gBACf,oBAAoB,EAAE,IAAI;aAC7B,CAAC,CAAC;YACH,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Retention.d.ts","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAKhD,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,eAWrE,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,SAAS;;IAK1B,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAG1C;IAED,IAAI,MAAM,IAAI,eAAe,CAAyB;
|
|
1
|
+
{"version":3,"file":"Retention.d.ts","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAKhD,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,eAWrE,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,SAAS;;IAK1B,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAG1C;IAED,IAAI,MAAM,IAAI,eAAe,CAAyB;IAIhD,cAAc,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAQ/F;IASK,GAAG,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAe1M;IAeD,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAI7C;IAED,IAAI,IAAI,IAAI,CAGX;CACJ"}
|
package/dist/server/Retention.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Knob } from "@plurnk/plurnk-meta";
|
|
2
|
-
import
|
|
2
|
+
import ContentUse from "../core/ContentUse.js";
|
|
3
3
|
// SQLite's PRAGMA auto_vacuum codes for the modes the daemon manages.
|
|
4
4
|
const AUTO_VACUUM_CODE = Object.freeze({ none: 0, incremental: 2 });
|
|
5
5
|
export const retentionPolicy = (env = process.env) => ({
|
|
@@ -23,8 +23,6 @@ export default class Retention {
|
|
|
23
23
|
this.#policy = policy;
|
|
24
24
|
}
|
|
25
25
|
get policy() { return this.#policy; }
|
|
26
|
-
// One pass, in dependency order: compositions and response bodies retire first, then the
|
|
27
|
-
// items and derivations nothing references. Each statement is a no-op under the default policy.
|
|
28
26
|
// {§db-space-reclamation} — once per open: a database whose auto-vacuum mode differs from the
|
|
29
27
|
// policy's is converted (a mode change takes effect through one VACUUM). Runs before any drain.
|
|
30
28
|
async prepareStorage() {
|
|
@@ -45,15 +43,17 @@ export default class Retention {
|
|
|
45
43
|
throw new Error("page counts are unavailable");
|
|
46
44
|
return row;
|
|
47
45
|
}
|
|
46
|
+
// Release expired compositions and response bodies before collecting unreferenced content.
|
|
48
47
|
async run(now = Date.now()) {
|
|
49
48
|
const { retainPacketTurns, retainPacketMs, retainResponseTurns, retainResponseMs, collectPacketItems, collectDerivations, collectContents } = this.#policy;
|
|
50
49
|
const packets = await this.#db.retention_retire_packets.run({ keep_turns: retainPacketTurns, keep_ms: retainPacketMs, now_ms: now });
|
|
51
50
|
const responses = await this.#db.retention_retire_responses.run({ keep_turns: retainResponseTurns, keep_ms: retainResponseMs, now_ms: now });
|
|
52
51
|
const items = await this.#db.retention_collect_packet_items.run({ collect: collectPacketItems ? 1 : 0 });
|
|
53
|
-
const collected = await
|
|
52
|
+
const collected = await ContentUse.collect(this.#db, async () => {
|
|
54
53
|
const derivations = await this.#db.retention_collect_derivations.run({ collect: collectDerivations ? 1 : 0 });
|
|
55
54
|
const contents = await this.#db.retention_collect_contents.run({ collect: collectContents ? 1 : 0 });
|
|
56
|
-
|
|
55
|
+
const native = await this.#db.retention_collect_native_contents.run({ collect: collectContents ? 1 : 0 });
|
|
56
|
+
return { derivations: derivations.changes, contents: contents.changes + native.changes };
|
|
57
57
|
});
|
|
58
58
|
const reclaimedPages = await this.#reclaim();
|
|
59
59
|
// `.run`, not `.all`: `.all` is served by a read-only reader, and a checkpoint there is an I/O error.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Retention.js","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"Retention.js","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
-- Retention ({§retention-policy}): the operator's policy over what the database keeps, as set
|
|
2
|
-
-- statements run by Retention on the daemon's cadence and at shutdown.
|
|
3
|
-
--
|
|
2
|
+
-- statements run by Retention on the daemon's cadence and at shutdown. Packet compositions and
|
|
3
|
+
-- payloads expire independently of durable identities, decisions and accounting.
|
|
4
|
+
|
|
5
|
+
-- INIT: inference_payload_retirement
|
|
6
|
+
DROP TRIGGER IF EXISTS inference_payload_retirement;
|
|
7
|
+
CREATE TRIGGER inference_payload_retirement
|
|
8
|
+
AFTER UPDATE OF payloads_retired_at ON inference_calls
|
|
9
|
+
BEGIN
|
|
10
|
+
DELETE FROM model_call_responses WHERE id = NEW.id;
|
|
11
|
+
UPDATE provider_requests SET evidence = NULL
|
|
12
|
+
WHERE inference_call_id = NEW.id AND evidence IS NOT NULL;
|
|
13
|
+
END;
|
|
4
14
|
|
|
5
15
|
-- PREP: retention_retire_packets
|
|
6
16
|
-- A completed turn older than the policy — beyond the newest $keep_turns packet-bearing turns of
|
|
@@ -21,27 +31,25 @@ WHERE ($keep_turns >= 0 OR $keep_ms >= 0)
|
|
|
21
31
|
);
|
|
22
32
|
|
|
23
33
|
-- PREP: retention_retire_responses
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
)
|
|
44
|
-
);
|
|
34
|
+
-- Rank logical calls, not physical retries. Already retired calls retain their place
|
|
35
|
+
-- in that chronology; failed-only captures count too. Open work never expires.
|
|
36
|
+
WITH ranked AS MATERIALIZED (
|
|
37
|
+
SELECT ic.id, ic.state, t.completed_at, ic.payloads_retired_at,
|
|
38
|
+
row_number() OVER (PARTITION BY t.loop_id ORDER BY t.sequence DESC, ic.sequence DESC) AS ordinal
|
|
39
|
+
FROM inference_calls ic JOIN turns t ON t.id = ic.turn_id
|
|
40
|
+
WHERE ($keep_turns >= 0 OR $keep_ms >= 0)
|
|
41
|
+
AND (ic.payloads_retired_at IS NOT NULL
|
|
42
|
+
OR EXISTS (SELECT 1 FROM model_call_responses r WHERE r.id = ic.id)
|
|
43
|
+
OR EXISTS (SELECT 1 FROM provider_requests pr WHERE pr.inference_call_id = ic.id AND pr.evidence IS NOT NULL))
|
|
44
|
+
)
|
|
45
|
+
UPDATE inference_calls SET payloads_retired_at = strftime('%Y-%m-%dT%H:%M:%fZ', $now_ms / 1000.0, 'unixepoch')
|
|
46
|
+
WHERE id IN (
|
|
47
|
+
SELECT id FROM ranked
|
|
48
|
+
WHERE payloads_retired_at IS NULL AND state <> 'pending' AND completed_at IS NOT NULL
|
|
49
|
+
AND (($keep_turns >= 0 AND ordinal > $keep_turns)
|
|
50
|
+
OR ($keep_ms >= 0 AND unixepoch(completed_at) * 1000 < $now_ms - $keep_ms))
|
|
51
|
+
)
|
|
52
|
+
AND NOT EXISTS (SELECT 1 FROM provider_requests pr WHERE pr.inference_call_id = inference_calls.id AND pr.state = 'pending');
|
|
45
53
|
|
|
46
54
|
-- PREP: retention_collect_packet_items
|
|
47
55
|
-- {§packet-items}: an item no turn's composition references is transient data.
|
|
@@ -66,6 +74,24 @@ WHERE $collect = 1
|
|
|
66
74
|
AND NOT EXISTS (SELECT 1 FROM entry_channel_rows r WHERE r.content_id = contents.id)
|
|
67
75
|
AND NOT EXISTS (SELECT 1 FROM derivations d WHERE d.content_id = contents.id);
|
|
68
76
|
|
|
77
|
+
-- PREP: retention_collect_native_contents
|
|
78
|
+
-- {§native-content-lifetime}: curation flags never determine evidence ownership.
|
|
79
|
+
DELETE FROM native_contents
|
|
80
|
+
WHERE $collect = 1
|
|
81
|
+
AND hash NOT IN (
|
|
82
|
+
SELECT native_content_hash FROM log_entries WHERE native_content_hash IS NOT NULL
|
|
83
|
+
UNION
|
|
84
|
+
SELECT json_extract(a.value, '$.contentHash') FROM log_entries le,
|
|
85
|
+
json_each(CASE WHEN le.mimetype_rx = 'application/json' THEN le.rx ELSE '{}' END, '$.attachments') a
|
|
86
|
+
WHERE le.mimetype_rx = 'application/json' AND json_type(a.value, '$.contentHash') = 'text'
|
|
87
|
+
UNION
|
|
88
|
+
SELECT json_extract(a.value, '$.contentHash') FROM loop_messages m, json_each(m.evidence, '$.attachments') a
|
|
89
|
+
WHERE json_type(a.value, '$.contentHash') = 'text'
|
|
90
|
+
UNION
|
|
91
|
+
SELECT json_extract(a.value, '$.contentHash') FROM turns t, json_each(t.packet, '$.attachments') a
|
|
92
|
+
WHERE json_type(a.value, '$.contentHash') = 'text'
|
|
93
|
+
);
|
|
94
|
+
|
|
69
95
|
-- {§db-space-reclamation} The daemon keeps its own file healthy: freed pages go back to the OS.
|
|
70
96
|
|
|
71
97
|
-- PREP: retention_auto_vacuum_mode
|