@plurnk/plurnk-service 1.4.0 → 1.6.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 +37 -31
- package/INSTALL.md +16 -11
- package/README.md +1 -0
- package/SPEC.md +631 -397
- package/dist/Paths.d.ts.map +1 -1
- package/dist/Paths.js +2 -3
- package/dist/Paths.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/content/edit-collision.d.ts +5 -0
- package/dist/content/edit-collision.d.ts.map +1 -0
- package/dist/content/edit-collision.js +14 -0
- package/dist/content/edit-collision.js.map +1 -0
- package/dist/content/edit-receipt.d.ts +3 -2
- package/dist/content/edit-receipt.d.ts.map +1 -1
- package/dist/content/edit-receipt.js +58 -13
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/index.d.ts +5 -1
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-anchors.d.ts +41 -0
- package/dist/content/line-anchors.d.ts.map +1 -0
- package/dist/content/line-anchors.js +191 -0
- package/dist/content/line-anchors.js.map +1 -0
- package/dist/content/line-marker.d.ts +7 -3
- package/dist/content/line-marker.d.ts.map +1 -1
- package/dist/content/line-marker.js +2 -1
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/matcher.d.ts +1 -1
- package/dist/content/matcher.d.ts.map +1 -1
- package/dist/content/matcher.js +2 -2
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/read-projector.d.ts +20 -0
- package/dist/content/read-projector.d.ts.map +1 -0
- package/dist/content/read-projector.js +122 -0
- package/dist/content/read-projector.js.map +1 -0
- package/dist/content/read-resolve.d.ts +2 -7
- package/dist/content/read-resolve.d.ts.map +1 -1
- package/dist/content/read-resolve.js +32 -107
- package/dist/content/read-resolve.js.map +1 -1
- package/dist/core/BranchReceipt.d.ts +0 -1
- package/dist/core/BranchReceipt.d.ts.map +1 -1
- package/dist/core/BranchReceipt.js +0 -3
- package/dist/core/BranchReceipt.js.map +1 -1
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +9 -2
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +3 -0
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +3 -3
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +4 -3
- package/dist/core/CoreSchemeServices.d.ts +10 -2
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +14 -8
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +656 -312
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/DurableStatement.d.ts.map +1 -1
- package/dist/core/DurableStatement.js +2 -0
- package/dist/core/DurableStatement.js.map +1 -1
- package/dist/core/Engine.d.ts +24 -18
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +620 -392
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +188 -119
- package/dist/core/ExecutableTools.d.ts +10 -0
- package/dist/core/ExecutableTools.d.ts.map +1 -0
- package/dist/core/ExecutableTools.js +41 -0
- package/dist/core/ExecutableTools.js.map +1 -0
- package/dist/core/ExecutorRegistry.d.ts +3 -3
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +2 -2
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/LogBody.d.ts +4 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +46 -2
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogEntryProjection.d.ts +14 -0
- package/dist/core/LogEntryProjection.d.ts.map +1 -0
- package/dist/core/LogEntryProjection.js +38 -0
- package/dist/core/LogEntryProjection.js.map +1 -0
- package/dist/core/LoopLifecycle.d.ts +1 -2
- package/dist/core/LoopLifecycle.d.ts.map +1 -1
- package/dist/core/LoopLifecycle.js +1 -4
- package/dist/core/LoopLifecycle.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +1 -4
- package/dist/core/ModelCall.d.ts +27 -0
- package/dist/core/ModelCall.d.ts.map +1 -0
- package/dist/core/ModelCall.js +125 -0
- package/dist/core/ModelCall.js.map +1 -0
- package/dist/core/PacketBuilder.d.ts +13 -12
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +146 -118
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.d.ts.map +1 -1
- package/dist/core/ProblemLog.js +1 -0
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +3 -4
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +23 -6
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.js +7 -7
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +5 -2
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +10 -7
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TerminalResult.d.ts +16 -0
- package/dist/core/TerminalResult.d.ts.map +1 -0
- package/dist/core/TerminalResult.js +49 -0
- package/dist/core/TerminalResult.js.map +1 -0
- package/dist/core/caps/CapsResolve.d.ts +5 -1
- package/dist/core/caps/CapsResolve.d.ts.map +1 -1
- package/dist/core/caps/CapsResolve.js +9 -5
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts +1 -1
- package/dist/core/caps/DbChannelCaps.d.ts.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +6 -4
- package/dist/core/caps/DbChannelCaps.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +2 -1
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +21 -8
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts +1 -1
- package/dist/core/caps/DbNotifyCaps.d.ts.map +1 -1
- package/dist/core/caps/DbNotifyCaps.js +6 -4
- package/dist/core/caps/DbNotifyCaps.js.map +1 -1
- package/dist/core/caps/DbProjectionCaps.d.ts +1 -0
- package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbProjectionCaps.js +29 -0
- package/dist/core/caps/DbProjectionCaps.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts +4 -6
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +27 -13
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +11 -3
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +10 -8
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/fork.d.ts.map +1 -1
- package/dist/core/fork.js +23 -7
- package/dist/core/fork.js.map +1 -1
- package/dist/core/fork.sql +35 -14
- package/dist/core/git-iso.d.ts +3 -2
- package/dist/core/git-iso.d.ts.map +1 -1
- package/dist/core/git-iso.js +27 -12
- package/dist/core/git-iso.js.map +1 -1
- 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 +87 -26
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.d.ts +8 -1
- package/dist/core/git-state.d.ts.map +1 -1
- package/dist/core/git-state.js +36 -17
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/namespace.d.ts +1 -0
- package/dist/core/namespace.d.ts.map +1 -1
- package/dist/core/namespace.js +20 -0
- package/dist/core/namespace.js.map +1 -1
- package/dist/core/optimistic-settlement.d.ts +2 -0
- package/dist/core/optimistic-settlement.d.ts.map +1 -0
- package/dist/core/optimistic-settlement.js +14 -0
- package/dist/core/optimistic-settlement.js.map +1 -0
- package/dist/core/packet-wire.d.ts +5 -2
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +318 -114
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/provider-accounting.d.ts +24 -0
- package/dist/core/provider-accounting.d.ts.map +1 -0
- package/dist/core/provider-accounting.js +76 -0
- package/dist/core/provider-accounting.js.map +1 -0
- package/dist/core/results.d.ts +4 -2
- package/dist/core/results.d.ts.map +1 -1
- package/dist/core/results.js +6 -0
- package/dist/core/results.js.map +1 -1
- package/dist/core/scheme-types.d.ts +0 -12
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/search-gate.d.ts +2 -2
- package/dist/core/search-gate.d.ts.map +1 -1
- package/dist/core/search-gate.js +8 -8
- package/dist/core/search-gate.js.map +1 -1
- package/dist/core/token-ruler.js +1 -1
- package/dist/core/token-ruler.js.map +1 -1
- package/dist/core/turn-scheduler.js +1 -1
- package/dist/core/turn-scheduler.js.map +1 -1
- package/dist/core/worker-ops.sql +4 -4
- package/dist/core/workspace-settings.js +1 -1
- package/dist/core/workspace-settings.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +349 -76
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +42 -16
- package/dist/schemes/Exec.d.ts +4 -4
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +167 -134
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.d.ts +4 -5
- package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +12 -20
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts +5 -6
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +35 -41
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +16 -5
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +229 -262
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +50 -27
- package/dist/schemes/Prompt.d.ts +3 -4
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +5 -5
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +4 -5
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +3 -3
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts +7 -7
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +99 -84
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +2 -2
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +29 -10
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +11 -17
- package/dist/schemes/_entry-find.d.ts +41 -14
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +159 -166
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +2 -21
- package/dist/schemes/_entry-graph.sql +1 -1
- package/dist/schemes/_entry-manifest.d.ts +5 -17
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +28 -24
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +13 -8
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +98 -119
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +31 -6
- package/dist/schemes/_entry-semantic.d.ts +5 -7
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +10 -31
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/_entry-semantic.sql +2 -2
- package/dist/schemes/_entry-send.js +4 -4
- package/dist/schemes/_entry-send.js.map +1 -1
- package/dist/schemes/_search-index.d.ts.map +1 -1
- package/dist/schemes/_search-index.js +16 -6
- package/dist/schemes/_search-index.js.map +1 -1
- package/dist/schemes/exec-abort.js +2 -2
- package/dist/schemes/exec-abort.js.map +1 -1
- package/dist/server/BranchBatches.d.ts +1 -0
- package/dist/server/BranchBatches.d.ts.map +1 -1
- package/dist/server/BranchBatches.js +1 -0
- package/dist/server/BranchBatches.js.map +1 -1
- package/dist/server/Daemon.d.ts +6 -8
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +238 -68
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DaemonModule.d.ts +3 -3
- package/dist/server/DaemonModule.d.ts.map +1 -1
- package/dist/server/branch-batch.sql +3 -1
- package/dist/server/client-input.d.ts +2 -1
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +7 -1
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/drain.sql +8 -7
- package/dist/server/envelope.d.ts +0 -2
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js +0 -1
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +3 -4
- package/dist/server/lifecycle-recovery.sql +44 -1
- package/dist/server/logEntry.d.ts +2 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +15 -2
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +5 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +13 -1
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +730 -221
- package/package.json +53 -46
- package/dist/core/BudgetOverflow.d.ts +0 -23
- package/dist/core/BudgetOverflow.d.ts.map +0 -1
- package/dist/core/BudgetOverflow.js +0 -61
- package/dist/core/BudgetOverflow.js.map +0 -1
- package/dist/core/caps/DbTagCaps.d.ts +0 -10
- package/dist/core/caps/DbTagCaps.d.ts.map +0 -1
- package/dist/core/caps/DbTagCaps.js +0 -44
- package/dist/core/caps/DbTagCaps.js.map +0 -1
- package/dist/matrix/live-specimen.d.ts +0 -9
- package/dist/matrix/live-specimen.d.ts.map +0 -1
- package/dist/matrix/live-specimen.js +0 -37
- package/dist/matrix/live-specimen.js.map +0 -1
package/dist/core/Engine.sql
CHANGED
|
@@ -5,7 +5,7 @@ SELECT status FROM loops WHERE id = $loop_id;
|
|
|
5
5
|
|
|
6
6
|
-- PREP: engine_worker_has_live_child
|
|
7
7
|
-- A non-terminal child worker (worker:// spawn/fork set parent_worker_id) — a "live thing the worker holds",
|
|
8
|
-
-- like an open stream. A SEND
|
|
8
|
+
-- like an open stream. A SEND signal 200 while one exists is a premature-terminate ({§send-premature-terminate}).
|
|
9
9
|
-- Live = a child whose LATEST loop is still pending/running/parked (100/102/202) — the SAME definition
|
|
10
10
|
-- engine_child_workers_live uses for the Active Child Workers orientation, so the 409 gate and the section the model
|
|
11
11
|
-- reads NEVER disagree: a refused termination is always backed by a child the model can SEE and KILL
|
|
@@ -67,6 +67,7 @@ LIMIT 1;
|
|
|
67
67
|
-- {§entry-owner} — one principal's entries (catalogRowsFor source for an owner-scoped FIND/foist):
|
|
68
68
|
-- the commons, a worker's own space, or a named space — exactly one owner's rows, its perspective.
|
|
69
69
|
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.tokens AS tokens, e.deep_hash,
|
|
70
|
+
d.parse_issues,
|
|
70
71
|
s.id AS subscription_id,
|
|
71
72
|
CASE WHEN s.closed_at IS NULL
|
|
72
73
|
THEN CAST(unixepoch('now') - unixepoch(s.opened_at) AS INTEGER)
|
|
@@ -75,6 +76,7 @@ SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, e
|
|
|
75
76
|
s.close_status
|
|
76
77
|
FROM entries e
|
|
77
78
|
JOIN entry_channels ec ON ec.entry_id = e.id
|
|
79
|
+
LEFT JOIN derivations d ON d.deep_hash = e.deep_hash
|
|
78
80
|
LEFT JOIN subscriptions s ON s.id = (
|
|
79
81
|
SELECT latest.id
|
|
80
82
|
FROM subscriptions latest
|
|
@@ -85,44 +87,28 @@ LEFT JOIN subscriptions s ON s.id = (
|
|
|
85
87
|
WHERE e.workspace_id = $workspace_id AND e.owner_id = $owner_id
|
|
86
88
|
ORDER BY e.updated_at ASC, e.id ASC, ec.name;
|
|
87
89
|
|
|
88
|
-
-- PREP: engine_list_owner_entry_tags
|
|
89
|
-
-- {§entry-owner} — (entry, tag) for one principal's entries (the owner-scoped catalog's tags field).
|
|
90
|
-
SELECT et.entry_id, et.tag
|
|
91
|
-
FROM entry_tags et
|
|
92
|
-
JOIN entries e ON e.id = et.entry_id
|
|
93
|
-
WHERE e.workspace_id = $workspace_id AND e.owner_id = $owner_id
|
|
94
|
-
ORDER BY et.entry_id, et.tag;
|
|
95
|
-
|
|
96
90
|
-- PREP: engine_next_turn_sequence
|
|
97
91
|
SELECT COALESCE(MAX(sequence), 0) + 1 AS next FROM turns WHERE loop_id = $loop_id;
|
|
98
92
|
|
|
99
93
|
-- PREP: engine_loop_usage
|
|
100
|
-
--
|
|
101
|
-
--
|
|
102
|
-
--
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
END AS cost_usd,
|
|
110
|
-
COALESCE((
|
|
111
|
-
SELECT json_group_array(json(cost.value))
|
|
112
|
-
FROM turns charged, json_each(charged.usage_cost) AS cost
|
|
113
|
-
WHERE charged.loop_id = $loop_id
|
|
114
|
-
), '[]') AS costs,
|
|
115
|
-
(
|
|
116
|
-
SELECT a.usage_prompt
|
|
117
|
-
FROM turn_attempts a
|
|
118
|
-
WHERE a.turn_id = (
|
|
94
|
+
-- Latest-turn gauge ({§tokenomics-client-gauge}), surfaced beside the derived
|
|
95
|
+
-- accounting projection on {§notifications-loop-terminated}. `context` is the
|
|
96
|
+
-- latest settled physical request on the latest turn; an absent input count is
|
|
97
|
+
-- unknown and does not fall back to older evidence.
|
|
98
|
+
SELECT (
|
|
99
|
+
SELECT pr.usage_input
|
|
100
|
+
FROM provider_requests pr
|
|
101
|
+
JOIN model_calls mc ON mc.id = pr.model_call_id
|
|
102
|
+
WHERE mc.turn_id = (
|
|
119
103
|
SELECT latest.id
|
|
120
104
|
FROM turns latest
|
|
121
105
|
WHERE latest.loop_id = $loop_id
|
|
122
106
|
ORDER BY latest.sequence DESC
|
|
123
107
|
LIMIT 1
|
|
124
108
|
)
|
|
125
|
-
|
|
109
|
+
AND mc.kind = 'emission'
|
|
110
|
+
AND pr.state = 'settled'
|
|
111
|
+
ORDER BY mc.sequence DESC, pr.sequence DESC
|
|
126
112
|
LIMIT 1
|
|
127
113
|
) AS context,
|
|
128
114
|
-- Latest turn's effective packet allowance; NULL when uncapped or unknown.
|
|
@@ -130,7 +116,23 @@ SELECT COALESCE(SUM(usage_prompt), 0) AS prompt,
|
|
|
130
116
|
(SELECT usage_prompt_budget FROM turns WHERE loop_id = $loop_id ORDER BY sequence DESC LIMIT 1) AS context_size,
|
|
131
117
|
-- Latest turn's opaque provider metadata. {§meta-passthrough}
|
|
132
118
|
(SELECT meta FROM turns WHERE loop_id = $loop_id ORDER BY sequence DESC LIMIT 1) AS meta
|
|
133
|
-
FROM
|
|
119
|
+
FROM loops
|
|
120
|
+
WHERE id = $loop_id;
|
|
121
|
+
|
|
122
|
+
-- PREP: engine_loop_provider_requests
|
|
123
|
+
-- Ordered cardinal accounting evidence. Aggregation belongs to the shared
|
|
124
|
+
-- provider accounting contract, not SQLite arithmetic or denormalized rows.
|
|
125
|
+
SELECT pr.provider, pr.model, pr.outcome, pr.status,
|
|
126
|
+
pr.usage_input, pr.usage_output, pr.usage_total,
|
|
127
|
+
pr.usage_input_no_cache, pr.usage_input_cache_read, pr.usage_input_cache_write,
|
|
128
|
+
pr.usage_output_text, pr.usage_output_reasoning,
|
|
129
|
+
pr.cost_kind, pr.cost_amount, pr.cost_currency, pr.cost_usd_equivalent,
|
|
130
|
+
pr.cost_source, pr.cost_reason
|
|
131
|
+
FROM provider_requests pr
|
|
132
|
+
JOIN model_calls mc ON mc.id = pr.model_call_id
|
|
133
|
+
JOIN turns t ON t.id = mc.turn_id
|
|
134
|
+
WHERE t.loop_id = $loop_id AND pr.state = 'settled'
|
|
135
|
+
ORDER BY t.sequence, mc.sequence, pr.sequence;
|
|
134
136
|
|
|
135
137
|
-- PREP: engine_loop_attributions
|
|
136
138
|
-- {§attribution} — derive the loop projection from exact response-attempt
|
|
@@ -143,9 +145,9 @@ FROM (
|
|
|
143
145
|
WHERE t.loop_id = $loop_id
|
|
144
146
|
UNION
|
|
145
147
|
SELECT value AS attribution
|
|
146
|
-
FROM
|
|
147
|
-
JOIN turns t ON t.id =
|
|
148
|
-
json_each(
|
|
148
|
+
FROM model_calls mc
|
|
149
|
+
JOIN turns t ON t.id = mc.turn_id,
|
|
150
|
+
json_each(mc.attributions)
|
|
149
151
|
WHERE t.loop_id = $loop_id
|
|
150
152
|
)
|
|
151
153
|
ORDER BY attribution;
|
|
@@ -170,59 +172,80 @@ VALUES ($loop_id, $sequence, 102)
|
|
|
170
172
|
RETURNING id;
|
|
171
173
|
|
|
172
174
|
-- PREP: engine_close_turn
|
|
173
|
-
-- Updates the turn with the response packet
|
|
174
|
-
--
|
|
175
|
-
-- engine_open_turn at runTurn boundaries.
|
|
175
|
+
-- Updates the turn with the response packet and terminal metadata once dispatch
|
|
176
|
+
-- is complete. Provider attempts own and materialize usage/cost above this path.
|
|
176
177
|
UPDATE turns SET
|
|
177
178
|
status = $status,
|
|
178
179
|
packet = $packet,
|
|
179
|
-
usage_prompt = $usage_prompt,
|
|
180
|
-
usage_completion = $usage_completion,
|
|
181
|
-
usage_reasoning = $usage_reasoning,
|
|
182
|
-
usage_cached = $usage_cached,
|
|
183
|
-
usage_cost = $usage_cost,
|
|
184
|
-
usage_cost_usd = $usage_cost_usd,
|
|
185
180
|
usage_prompt_budget = $usage_prompt_budget,
|
|
186
181
|
finish_reason = $finish_reason,
|
|
187
182
|
model = $model,
|
|
188
183
|
meta = $meta
|
|
189
184
|
WHERE id = $id;
|
|
190
185
|
|
|
191
|
-
-- PREP:
|
|
192
|
-
--
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
$
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
$
|
|
224
|
-
$
|
|
225
|
-
|
|
186
|
+
-- PREP: engine_open_model_call
|
|
187
|
+
-- Logical identity and request attribution become durable before provider I/O.
|
|
188
|
+
INSERT INTO model_calls (turn_id, sequence, kind, attributions, model)
|
|
189
|
+
VALUES ($turn_id, $sequence, $kind, $attributions, $model)
|
|
190
|
+
RETURNING id;
|
|
191
|
+
|
|
192
|
+
-- PREP: engine_observe_model_call_response
|
|
193
|
+
-- Preserve the logical response before call-specific interpretation. Physical
|
|
194
|
+
-- request accounting has already settled through its cardinal observer path.
|
|
195
|
+
UPDATE model_calls SET
|
|
196
|
+
state = 'response',
|
|
197
|
+
response = $response,
|
|
198
|
+
failure = $failure,
|
|
199
|
+
finish_reason = $finish_reason,
|
|
200
|
+
model = $model,
|
|
201
|
+
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
202
|
+
WHERE id = $id AND state = 'pending';
|
|
203
|
+
|
|
204
|
+
-- PREP: engine_fail_model_call
|
|
205
|
+
UPDATE model_calls SET
|
|
206
|
+
state = 'error',
|
|
207
|
+
failure = $failure,
|
|
208
|
+
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
209
|
+
WHERE id = $id AND state = 'pending';
|
|
210
|
+
|
|
211
|
+
-- PREP: engine_open_turn_attempt
|
|
212
|
+
INSERT INTO turn_attempts (model_call_id)
|
|
213
|
+
VALUES ($model_call_id)
|
|
214
|
+
RETURNING id;
|
|
215
|
+
|
|
216
|
+
-- PREP: engine_classify_turn_attempt_response
|
|
217
|
+
UPDATE turn_attempts SET
|
|
218
|
+
accepted = $accepted,
|
|
219
|
+
parse_errors = $parse_errors
|
|
220
|
+
WHERE id = $id AND accepted IS NULL;
|
|
221
|
+
|
|
222
|
+
-- PREP: engine_open_provider_request
|
|
223
|
+
-- The provider calls this immediately before physical I/O.
|
|
224
|
+
INSERT INTO provider_requests (model_call_id, sequence, provider, model)
|
|
225
|
+
VALUES ($model_call_id, $sequence, $provider, $model)
|
|
226
|
+
RETURNING id;
|
|
227
|
+
|
|
228
|
+
-- PREP: engine_settle_provider_request
|
|
229
|
+
UPDATE provider_requests SET
|
|
230
|
+
state = 'settled',
|
|
231
|
+
outcome = $outcome,
|
|
232
|
+
status = $status,
|
|
233
|
+
usage_input = $usage_input,
|
|
234
|
+
usage_output = $usage_output,
|
|
235
|
+
usage_total = $usage_total,
|
|
236
|
+
usage_input_no_cache = $usage_input_no_cache,
|
|
237
|
+
usage_input_cache_read = $usage_input_cache_read,
|
|
238
|
+
usage_input_cache_write = $usage_input_cache_write,
|
|
239
|
+
usage_output_text = $usage_output_text,
|
|
240
|
+
usage_output_reasoning = $usage_output_reasoning,
|
|
241
|
+
cost_kind = $cost_kind,
|
|
242
|
+
cost_amount = $cost_amount,
|
|
243
|
+
cost_currency = $cost_currency,
|
|
244
|
+
cost_usd_equivalent = $cost_usd_equivalent,
|
|
245
|
+
cost_source = $cost_source,
|
|
246
|
+
cost_reason = $cost_reason,
|
|
247
|
+
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
248
|
+
WHERE id = $id AND state = 'pending';
|
|
226
249
|
|
|
227
250
|
-- PREP: engine_list_workspace_entries
|
|
228
251
|
-- Every owner-held entry of a workspace — all schemes, all channels — for
|
|
@@ -298,8 +321,8 @@ WITH observation AS (
|
|
|
298
321
|
SELECT o.cursor, o.boundary,
|
|
299
322
|
ae.id AS event_id, ae.producer_worker_id, producer.name AS producer_worker_name,
|
|
300
323
|
ae.kind, ae.source,
|
|
301
|
-
ae.op, ae.scheme, ae.hostname, ae.pathname, ae.rx, ae.attrs,
|
|
302
|
-
ae.status_rx, ae.
|
|
324
|
+
ae.op, ae.scheme, ae.hostname, ae.pathname, ae.rx, ae.attrs, ae.tags,
|
|
325
|
+
ae.status_rx, ae.terminated_by
|
|
303
326
|
FROM observation o
|
|
304
327
|
LEFT JOIN ambient_events ae
|
|
305
328
|
ON ae.workspace_id = $workspace_id
|
|
@@ -325,6 +348,11 @@ INSERT INTO log_entries (
|
|
|
325
348
|
ON CONFLICT(worker_id, ambient_event_id) WHERE ambient_event_id IS NOT NULL DO NOTHING
|
|
326
349
|
RETURNING id;
|
|
327
350
|
|
|
351
|
+
-- PREP: engine_ambient_delta_id
|
|
352
|
+
-- Crash replay may find the observation row already inserted but its copied
|
|
353
|
+
-- classifications incomplete. Resolve that row so idempotent tag writes can finish.
|
|
354
|
+
SELECT id FROM log_entries WHERE worker_id = $worker_id AND ambient_event_id = $event_id;
|
|
355
|
+
|
|
328
356
|
-- PREP: engine_advance_ambient_cursor
|
|
329
357
|
-- Advance only from the snapshot that was actually materialized. A concurrent
|
|
330
358
|
-- pull winning the CAS is safe; a loser replays idempotently on its next turn.
|
|
@@ -338,10 +366,11 @@ RETURNING ambient_event_cursor;
|
|
|
338
366
|
|
|
339
367
|
-- PREP: engine_worker_stream_channels
|
|
340
368
|
-- {§exec-stream} — every stream channel the worker owns (an EXEC's stdout/stderr live on the
|
|
341
|
-
-- runtime-tag entry), with content + state + coordinate, so the per-turn injector can
|
|
342
|
-
-- channel's
|
|
369
|
+
-- runtime-tag entry), with content + mimetype + state + coordinate, so the per-turn injector can
|
|
370
|
+
-- publish the channel's next complete unit. Stays listed until its terminal observation is shown.
|
|
343
371
|
SELECT s.id AS subscription_id, e.scheme AS runtime, e.pathname AS coord,
|
|
344
|
-
ec.name AS channel, ec.content AS content, ec.
|
|
372
|
+
ec.name AS channel, ec.content AS content, ec.mimetype AS mimetype,
|
|
373
|
+
ec.state AS state, s.close_status AS close_status,
|
|
345
374
|
s.close_result AS close_result, s.published_channel AS published_channel
|
|
346
375
|
FROM subscriptions s
|
|
347
376
|
JOIN entries e ON e.id = s.entry_id
|
|
@@ -351,8 +380,8 @@ WHERE s.worker_id = $worker_id
|
|
|
351
380
|
ORDER BY s.id, ec.name;
|
|
352
381
|
|
|
353
382
|
-- PREP: engine_stream_cursor
|
|
354
|
-
-- {§exec-stream} —
|
|
355
|
-
--
|
|
383
|
+
-- {§exec-stream} — content offset already shown to the worker: the streamEnd recorded on its latest
|
|
384
|
+
-- foisted observation (the caller defaults to 0 when none exists yet).
|
|
356
385
|
SELECT attrs
|
|
357
386
|
FROM log_entries
|
|
358
387
|
WHERE worker_id = $worker_id AND origin = 'plurnk' AND op = 'READ'
|
|
@@ -360,21 +389,18 @@ WHERE worker_id = $worker_id AND origin = 'plurnk' AND op = 'READ'
|
|
|
360
389
|
ORDER BY id DESC LIMIT 1;
|
|
361
390
|
|
|
362
391
|
-- PREP: engine_insert_stream_delta
|
|
363
|
-
-- {§exec-stream} / {§env-delta} — materialize a channel's
|
|
392
|
+
-- {§exec-stream} / {§env-delta} — materialize a channel's next publishable content as a
|
|
364
393
|
-- foisted READ row (the model READs the stream it never typed). origin=plurnk; fragment is
|
|
365
|
-
-- the channel; attrs.streamEnd is the next turn's cursor; expanded=1
|
|
366
|
-
--
|
|
394
|
+
-- the channel; attrs.streamEnd is the next turn's cursor; expanded=1 for a terminal
|
|
395
|
+
-- observation, 0 for an ongoing observation. {§exec-stream}
|
|
367
396
|
INSERT INTO log_entries (
|
|
368
|
-
worker_id, loop_id, turn_id, sequence, origin, source,
|
|
397
|
+
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
369
398
|
op, scheme, pathname, fragment, tx, mimetype_tx, rx, mimetype_rx, status_rx, attrs, expanded
|
|
370
399
|
) VALUES (
|
|
371
|
-
$worker_id, $loop_id, $turn_id, $sequence, 'plurnk', NULL,
|
|
400
|
+
$worker_id, $loop_id, $turn_id, $sequence, 'plurnk', NULL, NULL,
|
|
372
401
|
'READ', $scheme, $pathname, $fragment, '', 'text/plain', $rx, 'application/json', $status, $attrs, $expanded
|
|
373
402
|
);
|
|
374
403
|
|
|
375
|
-
-- PREP: engine_entry_tags
|
|
376
|
-
SELECT tag FROM entry_tags WHERE entry_id = $entry_id ORDER BY tag;
|
|
377
|
-
|
|
378
404
|
-- PREP: engine_child_workers_live
|
|
379
405
|
-- The worker's LIVE child workers — latest loop non-terminal (100 pending / 102 processing / 202 parked).
|
|
380
406
|
-- Powers the Active Child Workers orienting section ({§child-orientation}): terse `* <status> worker://<name>`
|
|
@@ -401,11 +427,10 @@ ORDER BY e.pathname;
|
|
|
401
427
|
-- LogCoordinate pointers, forcing the model to confront failures instead of letting
|
|
402
428
|
-- them rot in log:///. Window = the current turn AND the immediately-prior one
|
|
403
429
|
-- (>= current_turn_seq - 1): prior-turn for action failures the model just caused,
|
|
404
|
-
-- current-turn so a
|
|
405
|
-
-- pre-generate then re-derived) surfaces THIS turn rather than a turn late.
|
|
430
|
+
-- current-turn so a pre-generate engine error surfaces THIS turn rather than a turn late.
|
|
406
431
|
-- {§operation-result-uniform-error-channel}
|
|
407
432
|
SELECT
|
|
408
|
-
le.op, le.sequence, le.status_rx, le.rx, le.mimetype_rx,
|
|
433
|
+
le.origin, le.op, le.attrs, le.sequence, le.status_rx, le.rx, le.mimetype_rx,
|
|
409
434
|
le.scheme, le.pathname,
|
|
410
435
|
t.sequence AS turn_seq, l.sequence AS loop_seq
|
|
411
436
|
FROM log_entries le
|
|
@@ -420,21 +445,39 @@ ORDER BY t.sequence, le.sequence;
|
|
|
420
445
|
|
|
421
446
|
-- TX: engine_grinder_fold_newest_turn
|
|
422
447
|
-- {§grinder-layer1-rollback} — THE DOCTRINE: the log is the model's memory and the model ALONE
|
|
423
|
-
-- curates it (FOLD/KILL). The grinder
|
|
424
|
-
--
|
|
425
|
-
--
|
|
426
|
-
--
|
|
448
|
+
-- curates it (FOLD/KILL). The grinder rolls back only context introduced by the newest turn
|
|
449
|
+
-- boundary: rows born in the immediately-prior/current turn plus exact older rows that a successful
|
|
450
|
+
-- OPEN in the immediately-prior turn transitioned from folded to open. The durable effect relation
|
|
451
|
+
-- owns that landed set; never re-run an authored glob/tag/matcher against later state. An OPEN no-op
|
|
452
|
+
-- contributes no older row. Turn 1 is the same rule (no prior turn; its foists are the newest).
|
|
427
453
|
-- Folded, never deleted; THREE exemptions ({§grinder-errors-exempt}): op='error',
|
|
428
454
|
-- the user prompt, and PLAN. The temporary set captures the
|
|
429
455
|
-- selection once so folding and additive `overflow` tagging cannot diverge.
|
|
430
456
|
CREATE TEMP TABLE IF NOT EXISTS engine_grinder_fold_set (id INTEGER PRIMARY KEY);
|
|
431
457
|
DELETE FROM engine_grinder_fold_set;
|
|
458
|
+
WITH previous_turn AS (
|
|
459
|
+
SELECT MAX(id) AS id FROM turns WHERE loop_id = $loop_id AND id < $turn_id
|
|
460
|
+
)
|
|
432
461
|
INSERT INTO engine_grinder_fold_set (id)
|
|
433
|
-
SELECT id
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
AND
|
|
437
|
-
|
|
462
|
+
SELECT boundary.id
|
|
463
|
+
FROM log_entries boundary
|
|
464
|
+
WHERE boundary.loop_id = $loop_id
|
|
465
|
+
AND boundary.expanded = 1
|
|
466
|
+
AND COALESCE(boundary.op, '') NOT IN ('error', 'PLAN')
|
|
467
|
+
AND COALESCE(boundary.scheme, '') != 'prompt' -- the task frame ({§prompt-self-only}); NULL-safe: a model-emission row's scheme is NULL
|
|
468
|
+
AND (boundary.turn_id = $turn_id OR boundary.turn_id = (SELECT id FROM previous_turn))
|
|
469
|
+
UNION
|
|
470
|
+
SELECT target.id
|
|
471
|
+
FROM log_curation_effects effect
|
|
472
|
+
JOIN log_entries operation ON operation.id = effect.operation_log_entry_id
|
|
473
|
+
JOIN log_entries target ON target.id = effect.target_log_entry_id
|
|
474
|
+
WHERE operation.turn_id = (SELECT id FROM previous_turn)
|
|
475
|
+
AND operation.op = 'OPEN'
|
|
476
|
+
AND operation.status_rx < 400
|
|
477
|
+
AND effect.expanded_before = 0
|
|
478
|
+
AND target.expanded = 1
|
|
479
|
+
AND COALESCE(target.op, '') NOT IN ('error', 'PLAN')
|
|
480
|
+
AND COALESCE(target.scheme, '') != 'prompt';
|
|
438
481
|
|
|
439
482
|
UPDATE log_entries SET expanded = 0
|
|
440
483
|
WHERE id IN (SELECT id FROM engine_grinder_fold_set);
|
|
@@ -445,7 +488,7 @@ SELECT id, 'overflow' FROM engine_grinder_fold_set;
|
|
|
445
488
|
DELETE FROM engine_grinder_fold_set;
|
|
446
489
|
|
|
447
490
|
-- PREP: engine_fold_log_entry
|
|
448
|
-
-- Fold one known log row by id. Model
|
|
491
|
+
-- Fold one known log row by id. Model-emission rows use this after insertion so
|
|
449
492
|
-- the complete admitted emission remains available without opening by default.
|
|
450
493
|
UPDATE log_entries SET expanded = 0 WHERE id = $id;
|
|
451
494
|
|
|
@@ -453,11 +496,12 @@ UPDATE log_entries SET expanded = 0 WHERE id = $id;
|
|
|
453
496
|
-- Render-time log-section assembly ({§body-projection}).
|
|
454
497
|
-- Yields log_entries for the whole worker — the conversation's working
|
|
455
498
|
-- memory carries across loops within a worker, not just the
|
|
456
|
-
-- current loop.
|
|
499
|
+
-- current loop. Coordinates append /<op> only for rows that represent an operation.
|
|
457
500
|
-- Status 202 entries in state='proposed' are model-invisible until resolved.
|
|
458
501
|
-- `expanded = 0` rows are FOLDED — listed but collapsed to their coordinate
|
|
459
502
|
-- (FOLD); the renderer elides the body. {§open-fold}: folded rows stay listed, re-OPENable.
|
|
460
503
|
SELECT
|
|
504
|
+
le.id,
|
|
461
505
|
l.sequence AS loop_seq,
|
|
462
506
|
t.sequence AS turn_seq,
|
|
463
507
|
le.sequence,
|
|
@@ -469,7 +513,13 @@ SELECT
|
|
|
469
513
|
le.query, le.fragment,
|
|
470
514
|
le.status_rx, le.rx, le.mimetype_rx,
|
|
471
515
|
le.tx, le.mimetype_tx,
|
|
472
|
-
le.state, le.outcome, le.expanded, le.source, le.attrs
|
|
516
|
+
le.state, le.outcome, le.expanded, le.source, le.attrs,
|
|
517
|
+
COALESCE((
|
|
518
|
+
SELECT json_group_array(ordered.tag)
|
|
519
|
+
FROM (
|
|
520
|
+
SELECT tag FROM log_tags WHERE log_entry_id = le.id ORDER BY tag
|
|
521
|
+
) ordered
|
|
522
|
+
), '[]') AS tags
|
|
473
523
|
FROM log_entries le
|
|
474
524
|
JOIN turns t ON t.id = le.turn_id
|
|
475
525
|
JOIN loops l ON l.id = le.loop_id
|
|
@@ -481,8 +531,8 @@ JOIN loops l ON l.id = le.loop_id
|
|
|
481
531
|
-- {§operation-result-uniform-error-channel}.
|
|
482
532
|
WHERE le.worker_id = $worker_id
|
|
483
533
|
AND NOT (le.status_rx = 202 AND le.state = 'proposed')
|
|
484
|
-
AND NOT (le.op IN ('OPEN', 'FOLD') AND le.status_rx < 400)
|
|
485
|
-
AND NOT (le.op = 'KILL' AND le.scheme = 'log' AND le.status_rx < 400)
|
|
534
|
+
AND NOT (COALESCE(le.op, '') IN ('OPEN', 'FOLD') AND le.status_rx < 400)
|
|
535
|
+
AND NOT (COALESCE(le.op, '') = 'KILL' AND le.scheme = 'log' AND le.status_rx < 400)
|
|
486
536
|
ORDER BY l.sequence, t.sequence, le.sequence;
|
|
487
537
|
|
|
488
538
|
-- PREP: engine_insert_log_entry
|
|
@@ -491,14 +541,14 @@ ORDER BY l.sequence, t.sequence, le.sequence;
|
|
|
491
541
|
-- triggers the proposal lifecycle (engine pauses dispatch; client resolves
|
|
492
542
|
-- via proposal resolution; entry transitions through engine_resolve_log_entry).
|
|
493
543
|
INSERT INTO log_entries (
|
|
494
|
-
worker_id, loop_id, turn_id, sequence, origin, source,
|
|
544
|
+
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
495
545
|
op, suffix, signal,
|
|
496
546
|
scheme, username, password, hostname, port,
|
|
497
547
|
pathname, query, fragment, lineMarker,
|
|
498
548
|
tx, mimetype_tx, rx, mimetype_rx, status_rx, tokens,
|
|
499
549
|
state, outcome, attrs
|
|
500
550
|
) VALUES (
|
|
501
|
-
$worker_id, $loop_id, $turn_id, $sequence, $origin, $source,
|
|
551
|
+
$worker_id, $loop_id, $turn_id, $sequence, $origin, $source, $model_call_id,
|
|
502
552
|
$op, $suffix, $signal,
|
|
503
553
|
$scheme, $username, $password, $hostname, $port,
|
|
504
554
|
$pathname, $query, $fragment, $lineMarker,
|
|
@@ -533,12 +583,15 @@ SELECT l.sequence AS loop_seq,
|
|
|
533
583
|
JOIN loops l ON l.id = le.loop_id
|
|
534
584
|
WHERE le.id = $id;
|
|
535
585
|
|
|
536
|
-
-- PREP:
|
|
537
|
-
-- {§send-premature-terminate} —
|
|
538
|
-
--
|
|
539
|
-
--
|
|
540
|
-
|
|
541
|
-
|
|
586
|
+
-- PREP: engine_turn_packet_boundaries
|
|
587
|
+
-- {§send-premature-terminate}/{§wait-obligation-matrix} — operations whose useful effect crosses
|
|
588
|
+
-- into the next packet: READ/FIND/OPEN/BARE results, plus successful FOLD context curation. Retrievals
|
|
589
|
+
-- block an explicit [200]; FOLD blocks only the empty-[202] inference because explicit final
|
|
590
|
+
-- housekeeping remains valid.
|
|
591
|
+
SELECT id, op FROM log_entries
|
|
592
|
+
WHERE turn_id = $turn_id
|
|
593
|
+
AND origin = 'model'
|
|
594
|
+
AND (op IN ('READ', 'FIND', 'OPEN', 'BARE') OR (op = 'FOLD' AND status_rx < 400));
|
|
542
595
|
|
|
543
596
|
-- PREP: engine_worker_has_undelivered_stream_term
|
|
544
597
|
-- A stream may finish between its EXEC and a same-turn SEND. It is then no longer
|
|
@@ -568,8 +621,8 @@ LIMIT 1;
|
|
|
568
621
|
-- errors the model cannot have seen (they land next packet). A [200] or already-drained [202] over
|
|
569
622
|
-- them concludes blind past a failure — refused 409; [499] abandons regardless (declaring failure
|
|
570
623
|
-- IS weighing it).
|
|
571
|
-
-- Actionless engine errors are excluded
|
|
572
|
-
--
|
|
624
|
+
-- Actionless engine errors are excluded because only model-authored failures can make
|
|
625
|
+
-- the model's concluding disposition blind. A model-authored statement that
|
|
573
626
|
-- failed grammar parsing is different: source='grammar' records a bounded operation failure
|
|
574
627
|
-- from the accepted emission, unseen until the next packet, so it gates completion like every
|
|
575
628
|
-- other failed model operation.
|
|
@@ -603,6 +656,22 @@ WITH RECURSIVE lineage(id, parent_worker_id) AS (
|
|
|
603
656
|
)
|
|
604
657
|
SELECT id FROM lineage WHERE parent_worker_id IS NULL;
|
|
605
658
|
|
|
659
|
+
-- PREP: engine_worker_provider_identity
|
|
660
|
+
-- Provider routing uses globally unique opaque identities, while all relational
|
|
661
|
+
-- ownership and client coordinates retain the local integer worker id.
|
|
662
|
+
-- {§worker-provider-identity} {§worker-primary}
|
|
663
|
+
WITH RECURSIVE lineage(id, parent_worker_id, provider_identity) AS (
|
|
664
|
+
SELECT id, parent_worker_id, provider_identity FROM workers WHERE id = $worker_id
|
|
665
|
+
UNION ALL
|
|
666
|
+
SELECT w.id, w.parent_worker_id, w.provider_identity
|
|
667
|
+
FROM workers w JOIN lineage l ON w.id = l.parent_worker_id
|
|
668
|
+
)
|
|
669
|
+
SELECT current.provider_identity AS worker_id,
|
|
670
|
+
root.provider_identity AS primary_worker_id
|
|
671
|
+
FROM workers current
|
|
672
|
+
JOIN lineage root ON root.parent_worker_id IS NULL
|
|
673
|
+
WHERE current.id = $worker_id;
|
|
674
|
+
|
|
606
675
|
-- PREP: engine_worker_has_undelivered_child_term
|
|
607
676
|
-- A child conclusion newer than the parent's observation cursor is complete but
|
|
608
677
|
-- not delivered. This is the same durable boundary the next packet consumes,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RuntimeInvocationDecl } from "@plurnk/plurnk-execs";
|
|
2
|
+
interface ExecutableTool {
|
|
3
|
+
readonly runtime: string;
|
|
4
|
+
readonly invocation: RuntimeInvocationDecl;
|
|
5
|
+
}
|
|
6
|
+
export default class ExecutableTools {
|
|
7
|
+
static render(tools: readonly ExecutableTool[]): string;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ExecutableTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutableTools.d.ts","sourceRoot":"","sources":["../../src/core/ExecutableTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,UAAU,cAAc;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC9C;AAqBD,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAyBtD;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const escapeCell = (value) => value.replaceAll("|", "\\|");
|
|
2
|
+
const bucket = (role, required, exclusive) => {
|
|
3
|
+
const marker = exclusive ? " ↔" : required ? "" : " ?";
|
|
4
|
+
return `${escapeCell(role)}${marker}`;
|
|
5
|
+
};
|
|
6
|
+
const code = (value) => {
|
|
7
|
+
const longest = Math.max(0, ...[...value.matchAll(/`+/g)].map((match) => match[0].length));
|
|
8
|
+
const fence = "`".repeat(longest + 1);
|
|
9
|
+
const padding = value.startsWith("`") || value.endsWith("`") ? " " : "";
|
|
10
|
+
return `${fence}${padding}${escapeCell(value)}${padding}${fence}`;
|
|
11
|
+
};
|
|
12
|
+
const example = (runtime, invocation) => {
|
|
13
|
+
const heading = `## EXEC0 [${runtime}]${invocation.example.target === undefined ? "" : ` (${invocation.example.target})`}`;
|
|
14
|
+
return [heading, invocation.example.body].filter((line) => line !== undefined).map((line) => code(line)).join("<br>");
|
|
15
|
+
};
|
|
16
|
+
export default class ExecutableTools {
|
|
17
|
+
static render(tools) {
|
|
18
|
+
if (tools.length === 0)
|
|
19
|
+
return "";
|
|
20
|
+
const rows = tools
|
|
21
|
+
.toSorted((left, right) => left.runtime.localeCompare(right.runtime))
|
|
22
|
+
.map(({ runtime, invocation }) => {
|
|
23
|
+
const exclusive = invocation.exclusive === true;
|
|
24
|
+
const target = invocation.target === undefined
|
|
25
|
+
? "—"
|
|
26
|
+
: bucket(`${invocation.target.role}${invocation.target.directory === "cwd" ? " or local directory with body" : ""}`, invocation.target.required, exclusive);
|
|
27
|
+
const body = bucket(invocation.body.role, invocation.body.required, exclusive);
|
|
28
|
+
return `| \`[${runtime}]\` | ${target} | ${body} | ${example(runtime, invocation)} |`;
|
|
29
|
+
});
|
|
30
|
+
return [
|
|
31
|
+
"YOU SHOULD use purpose-built Plurnk OPs when possible; use EXEC for scripts only when necessary.",
|
|
32
|
+
"",
|
|
33
|
+
"`?` optional · `↔` choose one · `—` unavailable · `<timeout,poll>` optional",
|
|
34
|
+
"",
|
|
35
|
+
"| `[executor]` | `(target)` | body | example |",
|
|
36
|
+
"| --- | --- | --- | --- |",
|
|
37
|
+
...rows,
|
|
38
|
+
].join("\n");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=ExecutableTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutableTools.js","sourceRoot":"","sources":["../../src/core/ExecutableTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChannelDecl, ExecArgs, ExecResult, Effect, RuntimeAvailability } from "@plurnk/plurnk-execs";
|
|
1
|
+
import type { ChannelDecl, ExecArgs, ExecResult, Effect, RuntimeAvailability, RuntimeInvocationDecl } from "@plurnk/plurnk-execs";
|
|
2
2
|
import { type PackageAttributions, type PluginAttribution, type PluginAttributionContext } from "@plurnk/plurnk-meta";
|
|
3
3
|
import type { SchemeManifest } from "./types.ts";
|
|
4
4
|
export interface Executor {
|
|
@@ -22,7 +22,7 @@ export interface RegistryEntry {
|
|
|
22
22
|
readonly executor: Executor;
|
|
23
23
|
readonly namespaceOwner: RuntimeNamespaceOwner;
|
|
24
24
|
readonly glyph: string;
|
|
25
|
-
readonly
|
|
25
|
+
readonly invocation: RuntimeInvocationDecl;
|
|
26
26
|
readonly documentation: string;
|
|
27
27
|
readonly available: boolean;
|
|
28
28
|
readonly detail: string | undefined;
|
|
@@ -41,7 +41,7 @@ export default class ExecutorRegistry {
|
|
|
41
41
|
registry: ReadonlyMap<string, {
|
|
42
42
|
runtime: string;
|
|
43
43
|
glyph: string;
|
|
44
|
-
|
|
44
|
+
invocation: RuntimeInvocationDecl;
|
|
45
45
|
documentation?: string;
|
|
46
46
|
packageName: string;
|
|
47
47
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorRegistry.d.ts","sourceRoot":"","sources":["../../src/core/ExecutorRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ExecutorRegistry.d.ts","sourceRoot":"","sources":["../../src/core/ExecutorRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,mBAAmB,EAEnB,qBAAqB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAa,EACT,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAChC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,IAAI,QAAQ,IAAI,cAAc,CAAC;IAC/B,IAAI,cAAc,IAAI,MAAM,CAAC;IAC7B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAGzC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAG1D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,MAAM,qBAAqB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAI5B,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;IAG3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAUD,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAIjC,YAAY,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,mBAAmB,GAAE,mBAA+B,EAG1G;IAOD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAGhD;IAED,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAOpE;IAUD,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAiBjE;IAED,OAAa,KAAK,CAAC,EAAE,cAAqB,EAAE,cAAqB,EAAE,GAAG,EAAE,UAAU,EAAE,IAAuD,EAAE,GAAE;QAC3I,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;YACvB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,qBAAqB,CAAC;gBAAC,aAAa,CAAC,EAAE,MAAM,CAAC;gBAAC,WAAW,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;YAClJ,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;YAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KACxC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CjC;IAiCD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE5C;IAKD,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAIrC;CACJ"}
|
|
@@ -76,7 +76,7 @@ export default class ExecutorRegistry {
|
|
|
76
76
|
}
|
|
77
77
|
// {§operator-config-git-ceiling} PLURNK_SERVICE_GIT_ALLOWED=0 must drop every
|
|
78
78
|
// Git-capability executor entirely: a denied host neither dispatches
|
|
79
|
-
//
|
|
79
|
+
// the Git/isogit EXEC runtimes nor teaches them through the tools sheet.
|
|
80
80
|
const gitDenied = process.env.PLURNK_SERVICE_GIT_ALLOWED !== "1";
|
|
81
81
|
const gitRuntimes = new Set(["git", "isogit"]);
|
|
82
82
|
const infos = [...discovered.values()].filter((info) => !(gitDenied && gitRuntimes.has(info.runtime)));
|
|
@@ -95,7 +95,7 @@ export default class ExecutorRegistry {
|
|
|
95
95
|
executor,
|
|
96
96
|
namespaceOwner: { kind: "package", name: info.packageName },
|
|
97
97
|
glyph: info.glyph,
|
|
98
|
-
|
|
98
|
+
invocation: info.invocation,
|
|
99
99
|
documentation: info.documentation ?? "",
|
|
100
100
|
available: availability.available,
|
|
101
101
|
detail: availability.detail,
|