@plurnk/plurnk-service 1.5.0 → 1.6.1
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 +22 -27
- package/INSTALL.md +22 -17
- package/README.md +1 -1
- package/SPEC.md +505 -362
- 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 +4 -1
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -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/read-projector.d.ts +7 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +46 -10
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/read-resolve.js +3 -3
- package/dist/content/read-resolve.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.js +1 -1
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +3 -3
- package/dist/core/CoreSchemeServices.d.ts +1 -1
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +1 -1
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts +15 -5
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +220 -978
- 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 +18 -43
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +90 -1554
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +192 -112
- 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 +3 -0
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +21 -5
- 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/ModelCall.d.ts +27 -0
- package/dist/core/ModelCall.d.ts.map +1 -0
- package/dist/core/ModelCall.js +127 -0
- package/dist/core/ModelCall.js.map +1 -0
- package/dist/core/PacketBuilder.d.ts +14 -25
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +170 -244
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/ProblemLog.d.ts +1 -1
- package/dist/core/ProblemLog.d.ts.map +1 -1
- package/dist/core/ProblemLog.js +15 -3
- package/dist/core/ProblemLog.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts +2 -2
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +17 -9
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +25 -8
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ResourceMutations.d.ts +73 -0
- package/dist/core/ResourceMutations.d.ts.map +1 -0
- package/dist/core/ResourceMutations.js +1142 -0
- package/dist/core/ResourceMutations.js.map +1 -0
- package/dist/core/SchemeRegistry.js +10 -10
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/StoredPacket.d.ts +2 -2
- package/dist/core/StoredPacket.js +7 -7
- package/dist/core/StrikeRail.d.ts +0 -1
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +6 -4
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +72 -0
- package/dist/core/TurnRunner.d.ts.map +1 -0
- package/dist/core/TurnRunner.js +1730 -0
- package/dist/core/TurnRunner.js.map +1 -0
- package/dist/core/caps/CapsResolve.js +1 -1
- package/dist/core/caps/CapsResolve.js.map +1 -1
- package/dist/core/caps/DbChannelCaps.js +4 -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 +8 -5
- package/dist/core/caps/DbEntryCaps.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/SchemeCtxImpl.d.ts +5 -2
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +6 -4
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/content-hash.js +2 -2
- package/dist/core/content-hash.js.map +1 -1
- package/dist/core/content-weight.d.ts +2 -0
- package/dist/core/content-weight.d.ts.map +1 -0
- package/dist/core/content-weight.js +4 -0
- package/dist/core/content-weight.js.map +1 -0
- package/dist/core/content_weight.d.ts +4 -0
- package/dist/core/content_weight.d.ts.map +1 -0
- package/dist/core/content_weight.js +6 -0
- package/dist/core/content_weight.js.map +1 -0
- 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 +38 -17
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +1 -2
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/git-state.js +1 -1
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/packet-wire.d.ts +6 -3
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +257 -99
- 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/scheme-types.d.ts +1 -1
- package/dist/core/scheme-types.d.ts.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/turn-scheduler.js +1 -1
- package/dist/core/turn-scheduler.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +221 -110
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +40 -18
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +136 -110
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecOutputScheme.js +1 -1
- package/dist/schemes/ExecOutputScheme.js.map +1 -1
- package/dist/schemes/File.d.ts +5 -4
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +25 -23
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts +11 -0
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +172 -107
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +48 -32
- package/dist/schemes/Prompt.d.ts +3 -3
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +4 -1
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +4 -4
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +3 -0
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts +4 -4
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +11 -7
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts +0 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +19 -13
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-crud.sql +4 -16
- package/dist/schemes/_entry-find.d.ts +17 -16
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +58 -52
- 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 +32 -28
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts +5 -4
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +89 -49
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-ops.sql +30 -4
- 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 +10 -2
- 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/Daemon.d.ts +7 -42
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +139 -900
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +117 -0
- package/dist/server/DrainSupervisor.d.ts.map +1 -0
- package/dist/server/DrainSupervisor.js +802 -0
- package/dist/server/DrainSupervisor.js.map +1 -0
- package/dist/server/drain.sql +2 -2
- package/dist/server/envelope.d.ts +0 -2
- package/dist/server/envelope.d.ts.map +1 -1
- package/dist/server/envelope.js.map +1 -1
- package/dist/server/envelope.sql +2 -2
- package/dist/server/lifecycle-recovery.sql +28 -15
- package/dist/server/logEntry.d.ts +2 -1
- package/dist/server/logEntry.d.ts.map +1 -1
- package/dist/server/logEntry.js +14 -2
- package/dist/server/logEntry.js.map +1 -1
- package/dist/server/logEntry.sql +5 -1
- package/dist/server/seam-entry-read.sql +2 -2
- package/dist/service.js +1 -1
- package/dist/service.js.map +1 -1
- package/migrations/001_schema.sql +622 -216
- package/package.json +39 -34
- package/dist/core/BudgetOverflow.d.ts +0 -20
- package/dist/core/BudgetOverflow.d.ts.map +0 -1
- package/dist/core/BudgetOverflow.js +0 -49
- 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 -46
- package/dist/core/caps/DbTagCaps.js.map +0 -1
- package/dist/core/ruler_count.d.ts +0 -4
- package/dist/core/ruler_count.d.ts.map +0 -1
- package/dist/core/ruler_count.js +0 -7
- package/dist/core/ruler_count.js.map +0 -1
- package/dist/core/token-ruler.d.ts +0 -2
- package/dist/core/token-ruler.d.ts.map +0 -1
- package/dist/core/token-ruler.js +0 -5
- package/dist/core/token-ruler.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
|
|
@@ -66,7 +66,8 @@ LIMIT 1;
|
|
|
66
66
|
-- PREP: engine_list_owner_entries
|
|
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
|
-
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.
|
|
69
|
+
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight, 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,51 +87,59 @@ 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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
) AS
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
(SELECT
|
|
94
|
+
-- Latest-turn gauge ({§tokenomics-client-gauge}), surfaced beside the derived
|
|
95
|
+
-- accounting projection on {§notifications-loop-terminated}. Physical usage
|
|
96
|
+
-- and capacity bind to the same latest completed emission call. A preflight
|
|
97
|
+
-- rejection has capacity evidence but no physical input usage; neither fact
|
|
98
|
+
-- falls back to an earlier call or turn.
|
|
99
|
+
WITH latest_turn AS (
|
|
100
|
+
SELECT id, packet, usage_curation_budget, meta
|
|
101
|
+
FROM turns
|
|
102
|
+
WHERE loop_id = $loop_id
|
|
103
|
+
ORDER BY sequence DESC
|
|
104
|
+
LIMIT 1
|
|
105
|
+
), latest_emission AS (
|
|
106
|
+
SELECT mc.id, mc.capacity
|
|
107
|
+
FROM model_calls mc
|
|
108
|
+
JOIN latest_turn turn ON turn.id = mc.turn_id
|
|
109
|
+
WHERE mc.kind = 'emission' AND mc.state != 'pending'
|
|
110
|
+
ORDER BY mc.sequence DESC
|
|
111
|
+
LIMIT 1
|
|
112
|
+
)
|
|
113
|
+
SELECT (
|
|
114
|
+
SELECT pr.usage_input
|
|
115
|
+
FROM provider_requests pr
|
|
116
|
+
WHERE pr.model_call_id = (SELECT id FROM latest_emission)
|
|
117
|
+
AND pr.state = 'settled'
|
|
118
|
+
ORDER BY pr.sequence DESC
|
|
119
|
+
LIMIT 1
|
|
120
|
+
) AS context_tokens,
|
|
121
|
+
(SELECT json_extract(packet, '$.weight') FROM latest_turn) AS curation_weight,
|
|
122
|
+
(SELECT usage_curation_budget FROM latest_turn) AS curation_budget,
|
|
123
|
+
(SELECT json_extract(capacity, '$.inputCapacity') FROM latest_emission) AS context_capacity,
|
|
130
124
|
-- Latest turn's opaque provider metadata. {§meta-passthrough}
|
|
131
|
-
(SELECT meta FROM
|
|
132
|
-
FROM
|
|
125
|
+
(SELECT meta FROM latest_turn) AS meta
|
|
126
|
+
FROM loops
|
|
127
|
+
WHERE id = $loop_id;
|
|
128
|
+
|
|
129
|
+
-- PREP: engine_loop_provider_requests
|
|
130
|
+
-- Ordered cardinal accounting evidence. Aggregation belongs to the shared
|
|
131
|
+
-- provider accounting contract, not SQLite arithmetic or denormalized rows.
|
|
132
|
+
SELECT pr.provider, pr.model, pr.outcome, pr.status,
|
|
133
|
+
pr.usage_input, pr.usage_output, pr.usage_total,
|
|
134
|
+
pr.usage_input_no_cache, pr.usage_input_cache_read, pr.usage_input_cache_write,
|
|
135
|
+
pr.usage_output_text, pr.usage_output_reasoning,
|
|
136
|
+
pr.cost_kind, pr.cost_amount, pr.cost_currency, pr.cost_usd_equivalent,
|
|
137
|
+
pr.cost_source, pr.cost_reason
|
|
138
|
+
FROM provider_requests pr
|
|
139
|
+
JOIN model_calls mc ON mc.id = pr.model_call_id
|
|
140
|
+
JOIN turns t ON t.id = mc.turn_id
|
|
141
|
+
WHERE t.loop_id = $loop_id AND pr.state = 'settled'
|
|
142
|
+
ORDER BY t.sequence, mc.sequence, pr.sequence;
|
|
133
143
|
|
|
134
144
|
-- PREP: engine_loop_attributions
|
|
135
145
|
-- {§attribution} — derive the loop projection from exact response-attempt
|
|
@@ -142,9 +152,9 @@ FROM (
|
|
|
142
152
|
WHERE t.loop_id = $loop_id
|
|
143
153
|
UNION
|
|
144
154
|
SELECT value AS attribution
|
|
145
|
-
FROM
|
|
146
|
-
JOIN turns t ON t.id =
|
|
147
|
-
json_each(
|
|
155
|
+
FROM model_calls mc
|
|
156
|
+
JOIN turns t ON t.id = mc.turn_id,
|
|
157
|
+
json_each(mc.attributions)
|
|
148
158
|
WHERE t.loop_id = $loop_id
|
|
149
159
|
)
|
|
150
160
|
ORDER BY attribution;
|
|
@@ -174,54 +184,75 @@ RETURNING id;
|
|
|
174
184
|
UPDATE turns SET
|
|
175
185
|
status = $status,
|
|
176
186
|
packet = $packet,
|
|
177
|
-
|
|
187
|
+
usage_curation_budget = $usage_curation_budget,
|
|
178
188
|
finish_reason = $finish_reason,
|
|
179
189
|
model = $model,
|
|
180
190
|
meta = $meta
|
|
181
191
|
WHERE id = $id;
|
|
182
192
|
|
|
183
|
-
-- PREP:
|
|
184
|
-
--
|
|
185
|
-
INSERT INTO
|
|
186
|
-
VALUES ($turn_id, $sequence, $attributions, $model)
|
|
193
|
+
-- PREP: engine_open_model_call
|
|
194
|
+
-- Logical identity and request attribution become durable before provider I/O.
|
|
195
|
+
INSERT INTO model_calls (turn_id, sequence, kind, attributions, model)
|
|
196
|
+
VALUES ($turn_id, $sequence, $kind, $attributions, $model)
|
|
187
197
|
RETURNING id;
|
|
188
198
|
|
|
189
|
-
-- PREP:
|
|
190
|
-
-- Preserve the response
|
|
191
|
-
--
|
|
192
|
-
UPDATE
|
|
199
|
+
-- PREP: engine_observe_model_call_response
|
|
200
|
+
-- Preserve the logical response before call-specific interpretation. Physical
|
|
201
|
+
-- request accounting has already settled through its cardinal observer path.
|
|
202
|
+
UPDATE model_calls SET
|
|
193
203
|
state = 'response',
|
|
194
204
|
response = $response,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
usage_reasoning = $usage_reasoning,
|
|
198
|
-
usage_cached = $usage_cached,
|
|
199
|
-
usage_cost = $usage_cost,
|
|
200
|
-
usage_cost_usd = NULL,
|
|
205
|
+
failure = $failure,
|
|
206
|
+
capacity = $capacity,
|
|
201
207
|
finish_reason = $finish_reason,
|
|
202
208
|
model = $model,
|
|
203
209
|
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
204
210
|
WHERE id = $id AND state = 'pending';
|
|
205
211
|
|
|
212
|
+
-- PREP: engine_fail_model_call
|
|
213
|
+
UPDATE model_calls SET
|
|
214
|
+
state = 'error',
|
|
215
|
+
failure = $failure,
|
|
216
|
+
capacity = $capacity,
|
|
217
|
+
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
218
|
+
WHERE id = $id AND state = 'pending';
|
|
219
|
+
|
|
220
|
+
-- PREP: engine_open_turn_attempt
|
|
221
|
+
INSERT INTO turn_attempts (model_call_id)
|
|
222
|
+
VALUES ($model_call_id)
|
|
223
|
+
RETURNING id;
|
|
224
|
+
|
|
206
225
|
-- PREP: engine_classify_turn_attempt_response
|
|
207
226
|
UPDATE turn_attempts SET
|
|
208
227
|
accepted = $accepted,
|
|
209
|
-
parse_errors = $parse_errors
|
|
210
|
-
|
|
211
|
-
usage_cost = $usage_cost,
|
|
212
|
-
usage_cost_usd = $usage_cost_usd
|
|
213
|
-
WHERE id = $id AND state = 'response';
|
|
228
|
+
parse_errors = $parse_errors
|
|
229
|
+
WHERE id = $id AND accepted IS NULL;
|
|
214
230
|
|
|
215
|
-
-- PREP:
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
231
|
+
-- PREP: engine_open_provider_request
|
|
232
|
+
-- The provider calls this immediately before physical I/O.
|
|
233
|
+
INSERT INTO provider_requests (model_call_id, sequence, provider, model)
|
|
234
|
+
VALUES ($model_call_id, $sequence, $provider, $model)
|
|
235
|
+
RETURNING id;
|
|
236
|
+
|
|
237
|
+
-- PREP: engine_settle_provider_request
|
|
238
|
+
UPDATE provider_requests SET
|
|
239
|
+
state = 'settled',
|
|
240
|
+
outcome = $outcome,
|
|
241
|
+
status = $status,
|
|
242
|
+
usage_input = $usage_input,
|
|
243
|
+
usage_output = $usage_output,
|
|
244
|
+
usage_total = $usage_total,
|
|
245
|
+
usage_input_no_cache = $usage_input_no_cache,
|
|
246
|
+
usage_input_cache_read = $usage_input_cache_read,
|
|
247
|
+
usage_input_cache_write = $usage_input_cache_write,
|
|
248
|
+
usage_output_text = $usage_output_text,
|
|
249
|
+
usage_output_reasoning = $usage_output_reasoning,
|
|
250
|
+
cost_kind = $cost_kind,
|
|
251
|
+
cost_amount = $cost_amount,
|
|
252
|
+
cost_currency = $cost_currency,
|
|
253
|
+
cost_usd_equivalent = $cost_usd_equivalent,
|
|
254
|
+
cost_source = $cost_source,
|
|
255
|
+
cost_reason = $cost_reason,
|
|
225
256
|
completed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
226
257
|
WHERE id = $id AND state = 'pending';
|
|
227
258
|
|
|
@@ -232,7 +263,7 @@ WHERE id = $id AND state = 'pending';
|
|
|
232
263
|
-- The latest subscription carries stream lifecycle into the catalog. `seconds`
|
|
233
264
|
-- is the live age of an open stream; close_status is the exact terminal status
|
|
234
265
|
-- of a closed one. Entries with no subscription remain ordinary static entries.
|
|
235
|
-
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.
|
|
266
|
+
SELECT e.id AS entry_id, e.scheme, e.pathname, ec.name AS channel, ec.content, ec.mimetype, ec.weight AS weight, e.deep_hash,
|
|
236
267
|
s.id AS subscription_id,
|
|
237
268
|
CASE WHEN s.closed_at IS NULL
|
|
238
269
|
THEN CAST(unixepoch('now') - unixepoch(s.opened_at) AS INTEGER)
|
|
@@ -299,7 +330,7 @@ WITH observation AS (
|
|
|
299
330
|
SELECT o.cursor, o.boundary,
|
|
300
331
|
ae.id AS event_id, ae.producer_worker_id, producer.name AS producer_worker_name,
|
|
301
332
|
ae.kind, ae.source,
|
|
302
|
-
ae.op, ae.scheme, ae.hostname, ae.pathname, ae.rx, ae.attrs,
|
|
333
|
+
ae.op, ae.scheme, ae.hostname, ae.pathname, ae.rx, ae.attrs, ae.tags,
|
|
303
334
|
ae.status_rx, ae.terminated_by
|
|
304
335
|
FROM observation o
|
|
305
336
|
LEFT JOIN ambient_events ae
|
|
@@ -317,15 +348,20 @@ ORDER BY ae.id;
|
|
|
317
348
|
INSERT INTO log_entries (
|
|
318
349
|
worker_id, loop_id, turn_id, sequence, origin, source, ambient_event_id,
|
|
319
350
|
op, scheme, hostname, pathname, tx, mimetype_tx,
|
|
320
|
-
rx, mimetype_rx, status_rx, expanded, attrs
|
|
351
|
+
rx, mimetype_rx, status_rx, weight, expanded, attrs
|
|
321
352
|
) VALUES (
|
|
322
353
|
$worker_id, $loop_id, $turn_id, $sequence, 'plurnk', $source, $event_id,
|
|
323
354
|
$op, $scheme, $hostname, $pathname, '', 'text/plain',
|
|
324
|
-
$rx, $mimetype_rx, $status, $expanded, $attrs
|
|
355
|
+
$rx, $mimetype_rx, $status, $weight, $expanded, $attrs
|
|
325
356
|
)
|
|
326
357
|
ON CONFLICT(worker_id, ambient_event_id) WHERE ambient_event_id IS NOT NULL DO NOTHING
|
|
327
358
|
RETURNING id;
|
|
328
359
|
|
|
360
|
+
-- PREP: engine_ambient_delta_id
|
|
361
|
+
-- Crash replay may find the observation row already inserted but its copied
|
|
362
|
+
-- classifications incomplete. Resolve that row so idempotent tag writes can finish.
|
|
363
|
+
SELECT id FROM log_entries WHERE worker_id = $worker_id AND ambient_event_id = $event_id;
|
|
364
|
+
|
|
329
365
|
-- PREP: engine_advance_ambient_cursor
|
|
330
366
|
-- Advance only from the snapshot that was actually materialized. A concurrent
|
|
331
367
|
-- pull winning the CAS is safe; a loser replays idempotently on its next turn.
|
|
@@ -367,16 +403,13 @@ ORDER BY id DESC LIMIT 1;
|
|
|
367
403
|
-- the channel; attrs.streamEnd is the next turn's cursor; expanded=1 for a terminal
|
|
368
404
|
-- observation, 0 for an ongoing observation. {§exec-stream}
|
|
369
405
|
INSERT INTO log_entries (
|
|
370
|
-
worker_id, loop_id, turn_id, sequence, origin, source,
|
|
371
|
-
op, scheme, pathname, fragment, tx, mimetype_tx, rx, mimetype_rx, status_rx, attrs, expanded
|
|
406
|
+
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
407
|
+
op, scheme, pathname, fragment, tx, mimetype_tx, rx, mimetype_rx, status_rx, weight, attrs, expanded
|
|
372
408
|
) VALUES (
|
|
373
|
-
$worker_id, $loop_id, $turn_id, $sequence, 'plurnk', NULL,
|
|
374
|
-
'READ', $scheme, $pathname, $fragment, '', 'text/plain', $rx, 'application/json', $status, $attrs, $expanded
|
|
409
|
+
$worker_id, $loop_id, $turn_id, $sequence, 'plurnk', NULL, NULL,
|
|
410
|
+
'READ', $scheme, $pathname, $fragment, '', 'text/plain', $rx, 'application/json', $status, $weight, $attrs, $expanded
|
|
375
411
|
);
|
|
376
412
|
|
|
377
|
-
-- PREP: engine_entry_tags
|
|
378
|
-
SELECT tag FROM entry_tags WHERE entry_id = $entry_id ORDER BY tag;
|
|
379
|
-
|
|
380
413
|
-- PREP: engine_child_workers_live
|
|
381
414
|
-- The worker's LIVE child workers — latest loop non-terminal (100 pending / 102 processing / 202 parked).
|
|
382
415
|
-- Powers the Active Child Workers orienting section ({§child-orientation}): terse `* <status> worker://<name>`
|
|
@@ -403,11 +436,10 @@ ORDER BY e.pathname;
|
|
|
403
436
|
-- LogCoordinate pointers, forcing the model to confront failures instead of letting
|
|
404
437
|
-- them rot in log:///. Window = the current turn AND the immediately-prior one
|
|
405
438
|
-- (>= current_turn_seq - 1): prior-turn for action failures the model just caused,
|
|
406
|
-
-- current-turn so a
|
|
407
|
-
-- pre-generate then re-derived) surfaces THIS turn rather than a turn late.
|
|
439
|
+
-- current-turn so a pre-generate engine error surfaces THIS turn rather than a turn late.
|
|
408
440
|
-- {§operation-result-uniform-error-channel}
|
|
409
441
|
SELECT
|
|
410
|
-
le.op, le.sequence, le.status_rx, le.rx, le.mimetype_rx,
|
|
442
|
+
le.origin, le.op, le.attrs, le.sequence, le.status_rx, le.rx, le.mimetype_rx,
|
|
411
443
|
le.scheme, le.pathname,
|
|
412
444
|
t.sequence AS turn_seq, l.sequence AS loop_seq
|
|
413
445
|
FROM log_entries le
|
|
@@ -422,21 +454,39 @@ ORDER BY t.sequence, le.sequence;
|
|
|
422
454
|
|
|
423
455
|
-- TX: engine_grinder_fold_newest_turn
|
|
424
456
|
-- {§grinder-layer1-rollback} — THE DOCTRINE: the log is the model's memory and the model ALONE
|
|
425
|
-
-- curates it (FOLD/KILL). The grinder
|
|
426
|
-
--
|
|
427
|
-
--
|
|
428
|
-
--
|
|
457
|
+
-- curates it (FOLD/KILL). The grinder rolls back only context introduced by the newest turn
|
|
458
|
+
-- boundary: rows born in the immediately-prior/current turn plus exact older rows that a successful
|
|
459
|
+
-- OPEN in the immediately-prior turn transitioned from folded to open. The durable effect relation
|
|
460
|
+
-- owns that landed set; never re-run an authored glob/tag/matcher against later state. An OPEN no-op
|
|
461
|
+
-- contributes no older row. Turn 1 is the same rule (no prior turn; its foists are the newest).
|
|
429
462
|
-- Folded, never deleted; THREE exemptions ({§grinder-errors-exempt}): op='error',
|
|
430
463
|
-- the user prompt, and PLAN. The temporary set captures the
|
|
431
464
|
-- selection once so folding and additive `overflow` tagging cannot diverge.
|
|
432
465
|
CREATE TEMP TABLE IF NOT EXISTS engine_grinder_fold_set (id INTEGER PRIMARY KEY);
|
|
433
466
|
DELETE FROM engine_grinder_fold_set;
|
|
467
|
+
WITH previous_turn AS (
|
|
468
|
+
SELECT MAX(id) AS id FROM turns WHERE loop_id = $loop_id AND id < $turn_id
|
|
469
|
+
)
|
|
434
470
|
INSERT INTO engine_grinder_fold_set (id)
|
|
435
|
-
SELECT id
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
AND
|
|
439
|
-
|
|
471
|
+
SELECT boundary.id
|
|
472
|
+
FROM log_entries boundary
|
|
473
|
+
WHERE boundary.loop_id = $loop_id
|
|
474
|
+
AND boundary.expanded = 1
|
|
475
|
+
AND COALESCE(boundary.op, '') NOT IN ('error', 'PLAN')
|
|
476
|
+
AND COALESCE(boundary.scheme, '') != 'prompt' -- the task frame ({§prompt-self-only}); NULL-safe: a model-emission row's scheme is NULL
|
|
477
|
+
AND (boundary.turn_id = $turn_id OR boundary.turn_id = (SELECT id FROM previous_turn))
|
|
478
|
+
UNION
|
|
479
|
+
SELECT target.id
|
|
480
|
+
FROM log_curation_effects effect
|
|
481
|
+
JOIN log_entries operation ON operation.id = effect.operation_log_entry_id
|
|
482
|
+
JOIN log_entries target ON target.id = effect.target_log_entry_id
|
|
483
|
+
WHERE operation.turn_id = (SELECT id FROM previous_turn)
|
|
484
|
+
AND operation.op = 'OPEN'
|
|
485
|
+
AND operation.status_rx < 400
|
|
486
|
+
AND effect.expanded_before = 0
|
|
487
|
+
AND target.expanded = 1
|
|
488
|
+
AND COALESCE(target.op, '') NOT IN ('error', 'PLAN')
|
|
489
|
+
AND COALESCE(target.scheme, '') != 'prompt';
|
|
440
490
|
|
|
441
491
|
UPDATE log_entries SET expanded = 0
|
|
442
492
|
WHERE id IN (SELECT id FROM engine_grinder_fold_set);
|
|
@@ -472,7 +522,13 @@ SELECT
|
|
|
472
522
|
le.query, le.fragment,
|
|
473
523
|
le.status_rx, le.rx, le.mimetype_rx,
|
|
474
524
|
le.tx, le.mimetype_tx,
|
|
475
|
-
le.state, le.outcome, le.expanded, le.source, le.attrs
|
|
525
|
+
le.state, le.outcome, le.expanded, le.source, le.weight, le.attrs,
|
|
526
|
+
COALESCE((
|
|
527
|
+
SELECT json_group_array(ordered.tag)
|
|
528
|
+
FROM (
|
|
529
|
+
SELECT tag FROM log_tags WHERE log_entry_id = le.id ORDER BY tag
|
|
530
|
+
) ordered
|
|
531
|
+
), '[]') AS tags
|
|
476
532
|
FROM log_entries le
|
|
477
533
|
JOIN turns t ON t.id = le.turn_id
|
|
478
534
|
JOIN loops l ON l.id = le.loop_id
|
|
@@ -494,18 +550,18 @@ ORDER BY l.sequence, t.sequence, le.sequence;
|
|
|
494
550
|
-- triggers the proposal lifecycle (engine pauses dispatch; client resolves
|
|
495
551
|
-- via proposal resolution; entry transitions through engine_resolve_log_entry).
|
|
496
552
|
INSERT INTO log_entries (
|
|
497
|
-
worker_id, loop_id, turn_id, sequence, origin, source,
|
|
553
|
+
worker_id, loop_id, turn_id, sequence, origin, source, model_call_id,
|
|
498
554
|
op, suffix, signal,
|
|
499
555
|
scheme, username, password, hostname, port,
|
|
500
556
|
pathname, query, fragment, lineMarker,
|
|
501
|
-
tx, mimetype_tx, rx, mimetype_rx, status_rx,
|
|
557
|
+
tx, mimetype_tx, rx, mimetype_rx, status_rx, weight,
|
|
502
558
|
state, outcome, attrs
|
|
503
559
|
) VALUES (
|
|
504
|
-
$worker_id, $loop_id, $turn_id, $sequence, $origin, $source,
|
|
560
|
+
$worker_id, $loop_id, $turn_id, $sequence, $origin, $source, $model_call_id,
|
|
505
561
|
$op, $suffix, $signal,
|
|
506
562
|
$scheme, $username, $password, $hostname, $port,
|
|
507
563
|
$pathname, $query, $fragment, $lineMarker,
|
|
508
|
-
$tx, $mimetype_tx, $rx, $mimetype_rx, $status_rx, $
|
|
564
|
+
$tx, $mimetype_tx, $rx, $mimetype_rx, $status_rx, $weight,
|
|
509
565
|
$state, $outcome, $attrs
|
|
510
566
|
)
|
|
511
567
|
RETURNING id;
|
|
@@ -519,6 +575,7 @@ UPDATE log_entries
|
|
|
519
575
|
outcome = $outcome,
|
|
520
576
|
status_rx = $status_rx,
|
|
521
577
|
rx = $rx,
|
|
578
|
+
weight = $weight,
|
|
522
579
|
deep_hash = NULL
|
|
523
580
|
WHERE id = $id
|
|
524
581
|
AND state = 'proposed';
|
|
@@ -530,18 +587,25 @@ UPDATE log_entries
|
|
|
530
587
|
SELECT l.sequence AS loop_seq,
|
|
531
588
|
t.sequence AS turn_seq,
|
|
532
589
|
le.sequence AS sequence,
|
|
533
|
-
le.op AS op
|
|
590
|
+
le.op AS op,
|
|
591
|
+
le.attrs AS attrs,
|
|
592
|
+
le.tx AS tx,
|
|
593
|
+
le.mimetype_tx AS mimetype_tx,
|
|
594
|
+
le.mimetype_rx AS mimetype_rx
|
|
534
595
|
FROM log_entries le
|
|
535
596
|
JOIN turns t ON t.id = le.turn_id
|
|
536
597
|
JOIN loops l ON l.id = le.loop_id
|
|
537
598
|
WHERE le.id = $id;
|
|
538
599
|
|
|
539
|
-
-- PREP:
|
|
540
|
-
-- {§send-premature-terminate} —
|
|
541
|
-
--
|
|
542
|
-
--
|
|
543
|
-
|
|
544
|
-
|
|
600
|
+
-- PREP: engine_turn_packet_boundaries
|
|
601
|
+
-- {§send-premature-terminate}/{§wait-obligation-matrix} — operations whose useful effect crosses
|
|
602
|
+
-- into the next packet: READ/FIND/OPEN/BARE results, plus successful FOLD context curation. Retrievals
|
|
603
|
+
-- block an explicit [200]; FOLD blocks only the empty-[202] inference because explicit final
|
|
604
|
+
-- housekeeping remains valid.
|
|
605
|
+
SELECT id, op FROM log_entries
|
|
606
|
+
WHERE turn_id = $turn_id
|
|
607
|
+
AND origin = 'model'
|
|
608
|
+
AND (op IN ('READ', 'FIND', 'OPEN', 'BARE') OR (op = 'FOLD' AND status_rx < 400));
|
|
545
609
|
|
|
546
610
|
-- PREP: engine_worker_has_undelivered_stream_term
|
|
547
611
|
-- A stream may finish between its EXEC and a same-turn SEND. It is then no longer
|
|
@@ -571,8 +635,8 @@ LIMIT 1;
|
|
|
571
635
|
-- errors the model cannot have seen (they land next packet). A [200] or already-drained [202] over
|
|
572
636
|
-- them concludes blind past a failure — refused 409; [499] abandons regardless (declaring failure
|
|
573
637
|
-- IS weighing it).
|
|
574
|
-
-- Actionless engine errors are excluded
|
|
575
|
-
--
|
|
638
|
+
-- Actionless engine errors are excluded because only model-authored failures can make
|
|
639
|
+
-- the model's concluding disposition blind. A model-authored statement that
|
|
576
640
|
-- failed grammar parsing is different: source='grammar' records a bounded operation failure
|
|
577
641
|
-- from the accepted emission, unseen until the next packet, so it gates completion like every
|
|
578
642
|
-- other failed model operation.
|
|
@@ -606,6 +670,22 @@ WITH RECURSIVE lineage(id, parent_worker_id) AS (
|
|
|
606
670
|
)
|
|
607
671
|
SELECT id FROM lineage WHERE parent_worker_id IS NULL;
|
|
608
672
|
|
|
673
|
+
-- PREP: engine_worker_provider_identity
|
|
674
|
+
-- Provider routing uses globally unique opaque identities, while all relational
|
|
675
|
+
-- ownership and client coordinates retain the local integer worker id.
|
|
676
|
+
-- {§worker-provider-identity} {§worker-primary}
|
|
677
|
+
WITH RECURSIVE lineage(id, parent_worker_id, provider_identity) AS (
|
|
678
|
+
SELECT id, parent_worker_id, provider_identity FROM workers WHERE id = $worker_id
|
|
679
|
+
UNION ALL
|
|
680
|
+
SELECT w.id, w.parent_worker_id, w.provider_identity
|
|
681
|
+
FROM workers w JOIN lineage l ON w.id = l.parent_worker_id
|
|
682
|
+
)
|
|
683
|
+
SELECT current.provider_identity AS worker_id,
|
|
684
|
+
root.provider_identity AS primary_worker_id
|
|
685
|
+
FROM workers current
|
|
686
|
+
JOIN lineage root ON root.parent_worker_id IS NULL
|
|
687
|
+
WHERE current.id = $worker_id;
|
|
688
|
+
|
|
609
689
|
-- PREP: engine_worker_has_undelivered_child_term
|
|
610
690
|
-- A child conclusion newer than the parent's observation cursor is complete but
|
|
611
691
|
-- 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":"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"}
|
|
@@ -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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorRegistry.js","sourceRoot":"","sources":["../../src/core/ExecutorRegistry.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ExecutorRegistry.js","sourceRoot":"","sources":["../../src/core/ExecutorRegistry.ts"],"names":[],"mappings":"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"}
|