@plurnk/plurnk-service 0.2.0 → 0.4.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 +98 -112
- package/dist/core/ChannelWrite.d.ts +10 -0
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/Engine.d.ts +10 -2
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +410 -113
- 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/line-marker.d.ts +23 -0
- package/dist/core/line-marker.d.ts.map +1 -0
- package/dist/core/line-marker.js +321 -0
- package/dist/core/line-marker.js.map +1 -0
- package/dist/core/matcher.d.ts +14 -0
- package/dist/core/matcher.d.ts.map +1 -0
- package/dist/core/matcher.js +195 -0
- package/dist/core/matcher.js.map +1 -0
- package/dist/core/mimetype-binary.d.ts +6 -0
- package/dist/core/mimetype-binary.d.ts.map +1 -0
- package/dist/core/mimetype-binary.js +82 -0
- package/dist/core/mimetype-binary.js.map +1 -0
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +174 -33
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/path-mimetype.d.ts +3 -0
- package/dist/core/path-mimetype.d.ts.map +1 -0
- package/dist/core/path-mimetype.js +47 -0
- package/dist/core/path-mimetype.js.map +1 -0
- package/dist/core/scheme-types.d.ts +5 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.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/Exec.d.ts +30 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +229 -6
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts +8 -4
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +184 -68
- 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 +9 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +120 -19
- 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 +5 -3
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +1 -0
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +64 -15
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +3 -0
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +269 -72
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-send.d.ts.map +1 -1
- package/dist/schemes/_entry-send.js +14 -7
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/server/ClientConnection.d.ts +3 -2
- package/dist/server/ClientConnection.d.ts.map +1 -1
- package/dist/server/ClientConnection.js +10 -2
- package/dist/server/ClientConnection.js.map +1 -1
- package/dist/server/Daemon.d.ts +40 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +319 -1
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/MethodRegistry.d.ts +29 -0
- package/dist/server/MethodRegistry.d.ts.map +1 -1
- package/dist/server/MethodRegistry.js.map +1 -1
- package/dist/server/dsl.d.ts +2 -2
- package/dist/server/dsl.d.ts.map +1 -1
- package/dist/server/dsl.js +10 -10
- package/dist/server/dsl.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/entry_read.js +5 -5
- package/dist/server/methods/entry_read.js.map +1 -1
- package/dist/server/methods/loop_cancel.d.ts +3 -0
- package/dist/server/methods/loop_cancel.d.ts.map +1 -0
- package/dist/server/methods/loop_cancel.js +27 -0
- package/dist/server/methods/loop_cancel.js.map +1 -0
- package/dist/server/methods/loop_run.d.ts.map +1 -1
- package/dist/server/methods/loop_run.js +53 -49
- package/dist/server/methods/loop_run.js.map +1 -1
- package/dist/server/methods/op_edit.js +3 -3
- package/dist/server/methods/op_edit.js.map +1 -1
- package/dist/server/methods/op_hide.js +3 -3
- package/dist/server/methods/op_hide.js.map +1 -1
- package/dist/server/methods/op_read.js +3 -3
- package/dist/server/methods/op_read.js.map +1 -1
- package/dist/server/methods/op_show.js +3 -3
- package/dist/server/methods/op_show.js.map +1 -1
- package/migrations/001_schema.sql +324 -0
- package/package.json +19 -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
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
-- INIT: schemes_providers
|
|
2
|
-
CREATE TABLE IF NOT EXISTS schemes (
|
|
3
|
-
name TEXT NOT NULL PRIMARY KEY CHECK (length(name) > 0),
|
|
4
|
-
model_visible INTEGER NOT NULL CHECK (model_visible IN (0, 1)),
|
|
5
|
-
category TEXT NOT NULL CHECK (length(category) > 0),
|
|
6
|
-
default_scope TEXT NOT NULL CHECK (default_scope IN ('agent', 'session')),
|
|
7
|
-
default_channel TEXT NOT NULL CHECK (length(default_channel) > 0),
|
|
8
|
-
channel_orientations TEXT CHECK (channel_orientations IS NULL OR json_valid(channel_orientations)),
|
|
9
|
-
writable_by TEXT NOT NULL CHECK (json_valid(writable_by)),
|
|
10
|
-
volatile INTEGER NOT NULL CHECK (volatile IN (0, 1)),
|
|
11
|
-
handler TEXT
|
|
12
|
-
) STRICT, WITHOUT ROWID;
|
|
13
|
-
|
|
14
|
-
CREATE TABLE IF NOT EXISTS providers (
|
|
15
|
-
id INTEGER NOT NULL PRIMARY KEY,
|
|
16
|
-
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
17
|
-
provider TEXT NOT NULL CHECK (length(provider) > 0),
|
|
18
|
-
family TEXT NOT NULL CHECK (length(family) > 0),
|
|
19
|
-
model TEXT NOT NULL CHECK (length(model) > 0),
|
|
20
|
-
contextSize INTEGER NOT NULL CHECK (contextSize >= 1),
|
|
21
|
-
currency TEXT NOT NULL CHECK (length(currency) = 3),
|
|
22
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
23
|
-
) STRICT;
|
|
24
|
-
|
|
25
|
-
CREATE INDEX IF NOT EXISTS providers_created_at ON providers (created_at);
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
-- INIT: cost_rollups
|
|
2
|
-
CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_insert_run
|
|
3
|
-
AFTER INSERT ON turns
|
|
4
|
-
BEGIN
|
|
5
|
-
UPDATE runs
|
|
6
|
-
SET cost_pico = cost_pico + NEW.usage_cost_pico
|
|
7
|
-
WHERE id = (SELECT run_id FROM loops WHERE id = NEW.loop_id);
|
|
8
|
-
END;
|
|
9
|
-
|
|
10
|
-
CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_insert_session
|
|
11
|
-
AFTER INSERT ON turns
|
|
12
|
-
BEGIN
|
|
13
|
-
UPDATE sessions
|
|
14
|
-
SET cost_pico = cost_pico + NEW.usage_cost_pico
|
|
15
|
-
WHERE id = (
|
|
16
|
-
SELECT r.session_id
|
|
17
|
-
FROM runs r
|
|
18
|
-
JOIN loops l ON l.run_id = r.id
|
|
19
|
-
WHERE l.id = NEW.loop_id
|
|
20
|
-
);
|
|
21
|
-
END;
|
|
22
|
-
|
|
23
|
-
CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_update_run
|
|
24
|
-
AFTER UPDATE OF usage_cost_pico ON turns
|
|
25
|
-
WHEN NEW.usage_cost_pico != OLD.usage_cost_pico
|
|
26
|
-
BEGIN
|
|
27
|
-
UPDATE runs
|
|
28
|
-
SET cost_pico = cost_pico + NEW.usage_cost_pico - OLD.usage_cost_pico
|
|
29
|
-
WHERE id = (SELECT run_id FROM loops WHERE id = NEW.loop_id);
|
|
30
|
-
END;
|
|
31
|
-
|
|
32
|
-
CREATE TRIGGER IF NOT EXISTS turns_cost_rollup_update_session
|
|
33
|
-
AFTER UPDATE OF usage_cost_pico ON turns
|
|
34
|
-
WHEN NEW.usage_cost_pico != OLD.usage_cost_pico
|
|
35
|
-
BEGIN
|
|
36
|
-
UPDATE sessions
|
|
37
|
-
SET cost_pico = cost_pico + NEW.usage_cost_pico - OLD.usage_cost_pico
|
|
38
|
-
WHERE id = (
|
|
39
|
-
SELECT r.session_id
|
|
40
|
-
FROM runs r
|
|
41
|
-
JOIN loops l ON l.run_id = r.id
|
|
42
|
-
WHERE l.id = NEW.loop_id
|
|
43
|
-
);
|
|
44
|
-
END;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
-- Subscription registry per SPEC §7.1.
|
|
2
|
-
-- Exists ONLY for cancellation routing: SEND[499](path) → lookup → scheme teardown.
|
|
3
|
-
-- Not for lifecycle tracking (log_entries carry that) or state coordination
|
|
4
|
-
-- (channel state column carries that).
|
|
5
|
-
-- Closed rows persist for forensics. Partial unique index enforces one active
|
|
6
|
-
-- subscription per (run, entry).
|
|
7
|
-
|
|
8
|
-
-- INIT: subscriptions
|
|
9
|
-
CREATE TABLE IF NOT EXISTS subscriptions (
|
|
10
|
-
id INTEGER NOT NULL PRIMARY KEY,
|
|
11
|
-
version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
|
|
12
|
-
run_id INTEGER NOT NULL,
|
|
13
|
-
entry_id INTEGER NOT NULL,
|
|
14
|
-
scheme TEXT NOT NULL CHECK (length(scheme) > 0),
|
|
15
|
-
handle TEXT NOT NULL CHECK (length(handle) > 0),
|
|
16
|
-
opened_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
17
|
-
closed_at TEXT,
|
|
18
|
-
close_status INTEGER CHECK (close_status IS NULL OR (close_status BETWEEN 100 AND 599)),
|
|
19
|
-
CHECK ((closed_at IS NULL AND close_status IS NULL)
|
|
20
|
-
OR (closed_at IS NOT NULL AND close_status IS NOT NULL)),
|
|
21
|
-
FOREIGN KEY (run_id) REFERENCES runs(id) ON DELETE CASCADE,
|
|
22
|
-
FOREIGN KEY (entry_id) REFERENCES entries(id) ON DELETE CASCADE
|
|
23
|
-
) STRICT;
|
|
24
|
-
|
|
25
|
-
-- One active subscription per (run_id, entry_id) — closed records don't block re-subscription.
|
|
26
|
-
CREATE UNIQUE INDEX IF NOT EXISTS subscriptions_active_one_per_entry
|
|
27
|
-
ON subscriptions (run_id, entry_id)
|
|
28
|
-
WHERE closed_at IS NULL;
|
|
29
|
-
|
|
30
|
-
-- Scheme-keyed lookup for "which scheme owns active subscriptions?" queries.
|
|
31
|
-
CREATE INDEX IF NOT EXISTS subscriptions_scheme_active
|
|
32
|
-
ON subscriptions (scheme)
|
|
33
|
-
WHERE closed_at IS NULL;
|
|
34
|
-
|
|
35
|
-
-- Forensic / time-window queries on opened_at.
|
|
36
|
-
CREATE INDEX IF NOT EXISTS subscriptions_opened_at ON subscriptions (opened_at);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
-- INIT: turn_call_metadata
|
|
2
|
-
-- Adds Turn-level call metadata fields per plurnk-grammar 0.6.0 Turn.json:
|
|
3
|
-
-- finish_reason and model are properties of the provider call, not the
|
|
4
|
-
-- model's emission payload. They belong on the Turn row alongside usage,
|
|
5
|
-
-- not nested into packet.assistant (which is "what the model said").
|
|
6
|
-
ALTER TABLE turns ADD COLUMN finish_reason TEXT;
|
|
7
|
-
ALTER TABLE turns ADD COLUMN model TEXT NOT NULL DEFAULT 'unknown' CHECK (length(model) >= 1);
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
-- INIT: proposal_lifecycle
|
|
2
|
-
-- log_entries gets the state⊥status lifecycle dimension. Status is the HTTP-
|
|
3
|
-
-- aligned outcome (200, 202, 400, etc.); state is where in the lifecycle the
|
|
4
|
-
-- entry lives. Most rows are 'resolved' immediately (status 200/4xx written
|
|
5
|
-
-- in one shot); side-effecting actions that propose first transition through
|
|
6
|
-
-- 'proposed' → 'resolved' (accepted) or 'proposed' → 'failed' (rejected) or
|
|
7
|
-
-- 'proposed' → 'cancelled' (loop aborted, timeout). Per rummy SPEC.
|
|
8
|
-
--
|
|
9
|
-
-- outcome is a short reason string when state ∈ {failed, cancelled}.
|
|
10
|
-
-- Opaque to most callers; a few plugins parse it (timeout, rejected,
|
|
11
|
-
-- loop_aborted, policy_veto, etc).
|
|
12
|
-
--
|
|
13
|
-
-- attrs is the proposal payload — opaque JSON the scheme supplies when
|
|
14
|
-
-- emitting status 202, retrieved by the client to render review UI, and
|
|
15
|
-
-- handed back to the scheme's applyResolution() on accept. File scheme uses
|
|
16
|
-
-- it for {path, patch_full, patched_full}; exec scheme uses {command, args,
|
|
17
|
-
-- cwd}; etc. Engine doesn't interpret the contents.
|
|
18
|
-
ALTER TABLE log_entries ADD COLUMN state TEXT NOT NULL DEFAULT 'resolved'
|
|
19
|
-
CHECK (state IN ('proposed', 'resolved', 'failed', 'cancelled'));
|
|
20
|
-
ALTER TABLE log_entries ADD COLUMN outcome TEXT;
|
|
21
|
-
ALTER TABLE log_entries ADD COLUMN attrs TEXT NOT NULL DEFAULT '{}'
|
|
22
|
-
CHECK (json_valid(attrs));
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
-- INIT: log_entries_lifecycle_columns
|
|
2
|
-
-- log_entries was append-only via the original log_entries_immutable trigger
|
|
3
|
-
-- (migration 006). The proposal lifecycle (task #42) needs to mutate state,
|
|
4
|
-
-- outcome, status_rx, and rx when a proposal resolves from 'proposed' to
|
|
5
|
-
-- 'resolved' / 'failed' / 'cancelled'. The other columns stay immutable
|
|
6
|
-
-- (audit invariant: the original action's identity and target never change).
|
|
7
|
-
--
|
|
8
|
-
-- Replaces the single blanket UPDATE trigger with a column-scoped one that
|
|
9
|
-
-- only fires when genuinely-immutable fields are touched.
|
|
10
|
-
DROP TRIGGER IF EXISTS log_entries_immutable;
|
|
11
|
-
|
|
12
|
-
CREATE TRIGGER log_entries_immutable_core
|
|
13
|
-
BEFORE UPDATE OF
|
|
14
|
-
run_id, loop_id, turn_id, action_index, at, origin,
|
|
15
|
-
op, suffix, signal,
|
|
16
|
-
target_scheme, target_username, target_password, target_hostname,
|
|
17
|
-
target_port, target_pathname, target_params, target_fragment,
|
|
18
|
-
lineMarker, tx, mimetype_tx, mimetype_rx, attrs
|
|
19
|
-
ON log_entries
|
|
20
|
-
BEGIN
|
|
21
|
-
SELECT RAISE(ABORT, 'log_entries core fields are immutable; only state/outcome/status_rx/rx may change (proposal lifecycle)');
|
|
22
|
-
END;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
-- INIT: loop_flags
|
|
2
|
-
-- Persists per-loop flags (mode, yolo, noWeb, noInteraction, noProposals)
|
|
3
|
-
-- declared in src/core/scheme-types.ts. Per-loop scope matches task #43's
|
|
4
|
-
-- design; runs may scope this longer in a future iteration.
|
|
5
|
-
--
|
|
6
|
-
-- Defaults to '{}' so existing loops read as all-false via the merge with
|
|
7
|
-
-- DEFAULT_LOOP_FLAGS in application code.
|
|
8
|
-
ALTER TABLE loops ADD COLUMN flags TEXT NOT NULL DEFAULT '{}'
|
|
9
|
-
CHECK (json_valid(flags));
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
-- INIT: sessions_project_root
|
|
2
|
-
-- Adds the workspace pointer column to sessions per AGENTS.md §Phase F.1.
|
|
3
|
-
-- Nullable: NULL = headless (engine runs entries-only, no disk side-effects);
|
|
4
|
-
-- non-null = absolute path to the client's source tree, supplied at
|
|
5
|
-
-- session.create or session.set_root. Server never guesses.
|
|
6
|
-
ALTER TABLE sessions ADD COLUMN project_root TEXT;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
-- INIT: persona_columns
|
|
2
|
-
-- Three-level persona cascade (issue #150). packet.system.persona is
|
|
3
|
-
-- resolved at packet-build time by taking the first non-null value of:
|
|
4
|
-
-- loops.persona > runs.persona > sessions.persona > PATHS.defaultPersona
|
|
5
|
-
--
|
|
6
|
-
-- Nullable everywhere; null means "fall through to the next level." The
|
|
7
|
-
-- file-based default catches the case where no level was set via RPC.
|
|
8
|
-
-- Persona content is text/markdown per @plurnk/plurnk-grammar Packet.json.
|
|
9
|
-
ALTER TABLE sessions ADD COLUMN persona TEXT;
|
|
10
|
-
ALTER TABLE runs ADD COLUMN persona TEXT;
|
|
11
|
-
ALTER TABLE loops ADD COLUMN persona TEXT;
|