@plurnk/plurnk-service 1.21.0 → 1.22.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 +15 -6
- package/INSTALL.md +2 -2
- package/README.md +1 -1
- package/SPEC.md +329 -228
- package/dist/build-info.json +1 -1
- package/dist/content/edit-receipt.js +4 -3
- package/dist/content/edit-receipt.js.map +1 -1
- package/dist/content/index.d.ts +2 -7
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +2 -5
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-anchors.d.ts.map +1 -1
- package/dist/content/line-anchors.js +46 -15
- package/dist/content/line-anchors.js.map +1 -1
- package/dist/content/line-marker.d.ts +1 -0
- package/dist/content/line-marker.d.ts.map +1 -1
- package/dist/content/line-marker.js +2 -0
- 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 +7 -9
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/pattern-edits.d.ts +6 -0
- package/dist/content/pattern-edits.d.ts.map +1 -1
- package/dist/content/pattern-edits.js +14 -0
- package/dist/content/pattern-edits.js.map +1 -1
- package/dist/content/read-projector.d.ts.map +1 -1
- package/dist/content/read-projector.js +2 -1
- package/dist/content/read-projector.js.map +1 -1
- package/dist/content/scope-format.d.ts +2 -2
- package/dist/content/scope-format.d.ts.map +1 -1
- package/dist/content/scope-format.js.map +1 -1
- package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
- package/dist/core/AdmittedTurnExecutor.js +5 -2
- package/dist/core/AdmittedTurnExecutor.js.map +1 -1
- package/dist/core/DataStatementRunner.js +1 -1
- package/dist/core/DataStatementRunner.js.map +1 -1
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +1 -0
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Dispatcher.sql +1 -1
- package/dist/core/EditMutations.js +4 -4
- package/dist/core/EditMutations.js.map +1 -1
- package/dist/core/EditSequence.d.ts.map +1 -1
- package/dist/core/EditSequence.js +2 -1
- package/dist/core/EditSequence.js.map +1 -1
- package/dist/core/Engine.d.ts +4 -1
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +7 -2
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/ExecutorRegistry.d.ts +1 -0
- package/dist/core/ExecutorRegistry.d.ts.map +1 -1
- package/dist/core/ExecutorRegistry.js +4 -0
- package/dist/core/ExecutorRegistry.js.map +1 -1
- package/dist/core/FabricatedLog.d.ts +8 -0
- package/dist/core/FabricatedLog.d.ts.map +1 -0
- package/dist/core/FabricatedLog.js +16 -0
- package/dist/core/FabricatedLog.js.map +1 -0
- package/dist/core/KnownToxins.d.ts +0 -1
- package/dist/core/KnownToxins.d.ts.map +1 -1
- package/dist/core/KnownToxins.js +3 -12
- package/dist/core/KnownToxins.js.map +1 -1
- package/dist/core/LogBody.d.ts.map +1 -1
- package/dist/core/LogBody.js +3 -2
- package/dist/core/LogBody.js.map +1 -1
- package/dist/core/LogVisibility.d.ts +3 -1
- package/dist/core/LogVisibility.d.ts.map +1 -1
- package/dist/core/LogVisibility.js +30 -16
- package/dist/core/LogVisibility.js.map +1 -1
- package/dist/core/LoopDriver.d.ts.map +1 -1
- package/dist/core/LoopDriver.js +2 -3
- package/dist/core/LoopDriver.js.map +1 -1
- package/dist/core/LoopOutcome.d.ts +0 -1
- package/dist/core/LoopOutcome.d.ts.map +1 -1
- package/dist/core/LoopOutcome.js +1 -1
- package/dist/core/LoopOutcome.js.map +1 -1
- package/dist/core/OutsideEvent.d.ts +10 -0
- package/dist/core/OutsideEvent.d.ts.map +1 -0
- package/dist/core/OutsideEvent.js +5 -0
- package/dist/core/OutsideEvent.js.map +1 -0
- package/dist/core/PacketBuilder.js +2 -2
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PatternSelection.d.ts +1 -1
- package/dist/core/PatternSelection.d.ts.map +1 -1
- package/dist/core/PatternSelection.js +8 -6
- package/dist/core/PatternSelection.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +2 -4
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +4 -4
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +24 -25
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/ProviderRecovery.d.ts +1 -1
- package/dist/core/ProviderRecovery.d.ts.map +1 -1
- package/dist/core/ProviderRecovery.js +3 -1
- package/dist/core/ProviderRecovery.js.map +1 -1
- package/dist/core/ResourceSelector.js +1 -1
- package/dist/core/ResourceSelector.js.map +1 -1
- package/dist/core/StoredPacket.d.ts +1 -1
- package/dist/core/StoredPacket.d.ts.map +1 -1
- package/dist/core/StoredPacket.js +6 -15
- package/dist/core/StoredPacket.js.map +1 -1
- package/dist/core/StrikeRail.d.ts +2 -0
- package/dist/core/StrikeRail.d.ts.map +1 -1
- package/dist/core/StrikeRail.js +7 -1
- package/dist/core/StrikeRail.js.map +1 -1
- package/dist/core/Turn.d.ts +1 -1
- package/dist/core/Turn.d.ts.map +1 -1
- package/dist/core/Turn.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +1 -4
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/TurnMaterialization.d.ts.map +1 -1
- package/dist/core/TurnMaterialization.js +5 -7
- package/dist/core/TurnMaterialization.js.map +1 -1
- package/dist/core/TurnRunner.d.ts +5 -1
- package/dist/core/TurnRunner.d.ts.map +1 -1
- package/dist/core/TurnRunner.js +108 -23
- package/dist/core/TurnRunner.js.map +1 -1
- package/dist/core/WorkerControlHandler.d.ts.map +1 -1
- package/dist/core/WorkerControlHandler.js +6 -1
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/WorkerName.sql +2 -2
- package/dist/core/attachments.d.ts +0 -3
- package/dist/core/attachments.d.ts.map +1 -1
- package/dist/core/attachments.js +3 -3
- package/dist/core/attachments.js.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +1 -2
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/fork.sql +2 -2
- package/dist/core/packet-wire.d.ts +1 -2
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +51 -54
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +0 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +1 -1
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/worker-ops.sql +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +33 -60
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/DigestEvidence.d.ts +9 -0
- package/dist/digest/DigestEvidence.d.ts.map +1 -0
- package/dist/digest/DigestEvidence.js +52 -0
- package/dist/digest/DigestEvidence.js.map +1 -0
- package/dist/digest/DigestRender.d.ts +1 -1
- package/dist/digest/DigestRender.d.ts.map +1 -1
- package/dist/digest/DigestRender.js +115 -66
- package/dist/digest/DigestRender.js.map +1 -1
- package/dist/digest/DigestRequiem.d.ts.map +1 -1
- package/dist/digest/DigestRequiem.js +56 -47
- package/dist/digest/DigestRequiem.js.map +1 -1
- package/dist/digest/digest-paths.d.ts.map +1 -1
- package/dist/digest/digest-paths.js +5 -14
- package/dist/digest/digest-paths.js.map +1 -1
- package/dist/digest/digest-rows.d.ts +10 -9
- package/dist/digest/digest-rows.d.ts.map +1 -1
- package/dist/digest/digest.sql +15 -11
- package/dist/schemes/EffectPolicy.js +1 -1
- package/dist/schemes/EffectPolicy.js.map +1 -1
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +26 -6
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecScratch.d.ts +10 -0
- package/dist/schemes/ExecScratch.d.ts.map +1 -0
- package/dist/schemes/ExecScratch.js +43 -0
- package/dist/schemes/ExecScratch.js.map +1 -0
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +39 -5
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +5 -4
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/TurnSource.js +2 -2
- package/dist/schemes/TurnSource.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +6 -3
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +2 -3
- 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 +2 -1
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-fts.d.ts +1 -0
- package/dist/schemes/_entry-fts.d.ts.map +1 -1
- package/dist/schemes/_entry-fts.js +34 -2
- package/dist/schemes/_entry-fts.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +3 -2
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_path-scope.d.ts.map +1 -1
- package/dist/schemes/_path-scope.js +2 -3
- package/dist/schemes/_path-scope.js.map +1 -1
- package/dist/server/Daemon.d.ts +25 -13
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +89 -58
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +3 -3
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +3 -3
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/EnvFunctionality.d.ts +0 -1
- package/dist/server/EnvFunctionality.d.ts.map +1 -1
- package/dist/server/EnvFunctionality.js +1 -1
- package/dist/server/EnvFunctionality.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +0 -9
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/WorkerModelResolver.d.ts +8 -8
- package/dist/server/WorkerModelResolver.d.ts.map +1 -1
- package/dist/server/WorkerModelResolver.js +46 -45
- package/dist/server/WorkerModelResolver.js.map +1 -1
- package/dist/server/client-input.d.ts +1 -0
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +7 -0
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/drain.sql +6 -6
- package/dist/server/envelope.sql +6 -6
- package/dist/server/loopDocs.js +1 -1
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/model-catalog.js +2 -2
- package/dist/server/model-catalog.js.map +1 -1
- package/dist/server/model-route.d.ts +2 -2
- package/dist/server/model-route.d.ts.map +1 -1
- package/dist/server/model-route.js +5 -5
- package/dist/server/model-route.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +41 -6
- package/dist/service.js.map +1 -1
- package/dist/share/Share.d.ts +15 -0
- package/dist/share/Share.d.ts.map +1 -0
- package/dist/share/Share.js +106 -0
- package/dist/share/Share.js.map +1 -0
- package/dist/share/share.sql +6 -0
- package/migrations/001_workspaces.sql +2 -2
- package/migrations/002_workers.sql +4 -6
- package/migrations/003_loops.sql +2 -2
- package/migrations/004_inference.sql +2 -2
- package/migrations/005_entries.sql +2 -2
- package/migrations/006_log.sql +2 -2
- package/migrations/007_subscriptions.sql +2 -2
- package/migrations/008_interactions.sql +2 -2
- package/migrations/009_effort.sql +7 -0
- package/migrations/010_outside_text.sql +41 -0
- package/migrations/011_settled.sql +133 -0
- package/package.json +42 -37
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
-- MIGRATE: 11 settled
|
|
2
|
+
-- Released in 1.22.0 and frozen ({§db-migrations}): a shape change is the next MIGRATE version, never an edit here.
|
|
3
|
+
-- #883: two guards are redeclared so each invariant is stated once in SQL ({§validation-topology}).
|
|
4
|
+
-- No table is rebuilt: `subscriptions` is the parent of `subscription_publications` (ON DELETE
|
|
5
|
+
-- CASCADE, itself the parent of `log_entries.subscription_publication_id`), and a DROP TABLE
|
|
6
|
+
-- under the foreign keys sqlrite keeps on inside the migration transaction would perform the
|
|
7
|
+
-- implicit delete that cascades through both. A guard is shape ({§db-schema-baseline}), so its
|
|
8
|
+
-- redeclaration is DROP then CREATE here, verbatim but for the rule.
|
|
9
|
+
--
|
|
10
|
+
-- The settled-result invariant, in words: a settled result is a JSON object whose integer
|
|
11
|
+
-- `status` is 200..599 and never 202; below 400 it carries no `problem`; at 400 and above it
|
|
12
|
+
-- carries a `problem` object whose integer `status` equals the result's and whose `type`,
|
|
13
|
+
-- `title` and `detail` are non-empty strings. Chapter 5 states it as the CHECK
|
|
14
|
+
-- `entry_channel_producer_result_contract` over `producer_result` (where NULL is the implicit
|
|
15
|
+
-- 200); chapter 7's `subscriptions_result_contract_update` stated a weaker rule over
|
|
16
|
+
-- `close_result` (no 202 exclusion, no `type`/`title`/`detail`). Both tables store the result as
|
|
17
|
+
-- JSON text, so the expression below is chapter 5's text with `NEW.close_result` in place of
|
|
18
|
+
-- `producer_result`; the one shape difference is that `subscriptions` stores the status beside
|
|
19
|
+
-- the JSON, so the guard also asserts `$.status = NEW.close_status`, and NULL is "not settled"
|
|
20
|
+
-- (the all-null arm), never an implicit 200.
|
|
21
|
+
DROP TRIGGER IF EXISTS subscriptions_result_contract_update;
|
|
22
|
+
CREATE TRIGGER IF NOT EXISTS subscriptions_result_contract_update
|
|
23
|
+
BEFORE UPDATE OF closed_at, close_status, close_result, channel_results ON subscriptions
|
|
24
|
+
WHEN NOT (
|
|
25
|
+
(NEW.closed_at IS NULL AND NEW.close_status IS NULL AND NEW.close_result IS NULL AND NEW.channel_results IS NULL)
|
|
26
|
+
OR (
|
|
27
|
+
NEW.closed_at IS NOT NULL
|
|
28
|
+
AND NEW.close_status IS NOT NULL
|
|
29
|
+
AND NEW.close_result IS NOT NULL
|
|
30
|
+
AND NEW.channel_results IS NOT NULL
|
|
31
|
+
AND json_valid(NEW.channel_results)
|
|
32
|
+
AND json_type(NEW.channel_results) = 'object'
|
|
33
|
+
AND CASE
|
|
34
|
+
WHEN NOT json_valid(NEW.close_result) THEN 0
|
|
35
|
+
ELSE
|
|
36
|
+
json_type(NEW.close_result) IS 'object'
|
|
37
|
+
AND json_type(NEW.close_result, '$.status') IS 'integer'
|
|
38
|
+
AND json_extract(NEW.close_result, '$.status') BETWEEN 200 AND 599
|
|
39
|
+
AND json_extract(NEW.close_result, '$.status') != 202
|
|
40
|
+
AND json_extract(NEW.close_result, '$.status') = NEW.close_status
|
|
41
|
+
AND CASE
|
|
42
|
+
WHEN json_extract(NEW.close_result, '$.status') < 400 THEN
|
|
43
|
+
json_type(NEW.close_result, '$.problem') IS NULL
|
|
44
|
+
ELSE
|
|
45
|
+
json_type(NEW.close_result, '$.problem') IS 'object'
|
|
46
|
+
AND json_type(NEW.close_result, '$.problem.status') IS 'integer'
|
|
47
|
+
AND json_extract(NEW.close_result, '$.problem.status')
|
|
48
|
+
= json_extract(NEW.close_result, '$.status')
|
|
49
|
+
AND json_type(NEW.close_result, '$.problem.type') IS 'text'
|
|
50
|
+
AND length(json_extract(NEW.close_result, '$.problem.type')) > 0
|
|
51
|
+
AND json_type(NEW.close_result, '$.problem.title') IS 'text'
|
|
52
|
+
AND length(json_extract(NEW.close_result, '$.problem.title')) > 0
|
|
53
|
+
AND json_type(NEW.close_result, '$.problem.detail') IS 'text'
|
|
54
|
+
AND length(json_extract(NEW.close_result, '$.problem.detail')) > 0
|
|
55
|
+
END
|
|
56
|
+
END
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
BEGIN
|
|
60
|
+
SELECT RAISE(ABORT, 'subscription terminal result violates the operation-result contract');
|
|
61
|
+
END;
|
|
62
|
+
|
|
63
|
+
-- {§logical-line-count}: `entry_channels.lines` mirrors `TextCoordinates.lineCount`, which breaks a
|
|
64
|
+
-- line on LF, on CRLF and on a lone CR; chapter 5's write path counted LF only. The exact count
|
|
65
|
+
-- is the number of line breaks — LF count plus lone-CR count, where lone CR = CR count − CRLF
|
|
66
|
+
-- count — plus one for a final line the content does not terminate:
|
|
67
|
+
-- length(c) - length(replace(c, char(10), ''))
|
|
68
|
+
-- + length(c) - length(replace(c, char(13), ''))
|
|
69
|
+
-- - (length(c) - length(replace(c, char(13) || char(10), ''))) / 2
|
|
70
|
+
-- + CASE WHEN substr(c, -1) IN (char(10), char(13)) THEN 0 ELSE 1 END
|
|
71
|
+
-- and empty content has no line. The view's INSTEAD OF write path is redeclared with that
|
|
72
|
+
-- expression; every other line is chapter 5's.
|
|
73
|
+
DROP TRIGGER IF EXISTS entry_channels_insert;
|
|
74
|
+
CREATE TRIGGER IF NOT EXISTS entry_channels_insert
|
|
75
|
+
INSTEAD OF INSERT ON entry_channels
|
|
76
|
+
BEGIN
|
|
77
|
+
SELECT RAISE(ABORT, 'a channel requires content') WHERE NEW.content IS NULL;
|
|
78
|
+
SELECT RAISE(ABORT, 'content_hash does not match content')
|
|
79
|
+
WHERE NEW.content_hash IS NOT NULL AND NEW.content_hash IS NOT sha256(NEW.content);
|
|
80
|
+
INSERT INTO contents (hash, content)
|
|
81
|
+
SELECT COALESCE(NEW.content_hash, sha256(NEW.content)), NEW.content
|
|
82
|
+
WHERE COALESCE(NEW.state, 'static') <> 'active'
|
|
83
|
+
ON CONFLICT (hash) DO NOTHING;
|
|
84
|
+
INSERT INTO entry_channel_rows (entry_id, name, content_id, buffer, mimetype, weight, lines, deep_hash, state, producer_result)
|
|
85
|
+
VALUES (
|
|
86
|
+
NEW.entry_id, NEW.name,
|
|
87
|
+
CASE WHEN COALESCE(NEW.state, 'static') <> 'active'
|
|
88
|
+
THEN (SELECT id FROM contents WHERE hash = COALESCE(NEW.content_hash, sha256(NEW.content))) END,
|
|
89
|
+
CASE WHEN COALESCE(NEW.state, 'static') = 'active' THEN NEW.content END,
|
|
90
|
+
NEW.mimetype, COALESCE(NEW.weight, 0),
|
|
91
|
+
CASE WHEN length(NEW.content) = 0 THEN 0
|
|
92
|
+
ELSE length(NEW.content) - length(replace(NEW.content, char(10), ''))
|
|
93
|
+
+ length(NEW.content) - length(replace(NEW.content, char(13), ''))
|
|
94
|
+
- (length(NEW.content) - length(replace(NEW.content, char(13) || char(10), ''))) / 2
|
|
95
|
+
+ CASE WHEN substr(NEW.content, -1) IN (char(10), char(13)) THEN 0 ELSE 1 END END,
|
|
96
|
+
NEW.deep_hash, COALESCE(NEW.state, 'static'), NEW.producer_result
|
|
97
|
+
);
|
|
98
|
+
END;
|
|
99
|
+
|
|
100
|
+
DROP TRIGGER IF EXISTS entry_channels_update;
|
|
101
|
+
CREATE TRIGGER IF NOT EXISTS entry_channels_update
|
|
102
|
+
INSTEAD OF UPDATE ON entry_channels
|
|
103
|
+
BEGIN
|
|
104
|
+
SELECT RAISE(ABORT, 'a channel is addressed by (entry_id, name)')
|
|
105
|
+
WHERE NEW.entry_id IS NOT OLD.entry_id OR NEW.name IS NOT OLD.name;
|
|
106
|
+
SELECT RAISE(ABORT, 'a channel requires content') WHERE NEW.content IS NULL;
|
|
107
|
+
SELECT RAISE(ABORT, 'content_hash does not match content')
|
|
108
|
+
WHERE NEW.content_hash IS NOT NULL AND NEW.content_hash IS NOT OLD.content_hash
|
|
109
|
+
AND NEW.content_hash IS NOT sha256(NEW.content);
|
|
110
|
+
INSERT INTO contents (hash, content)
|
|
111
|
+
SELECT sha256(NEW.content), NEW.content
|
|
112
|
+
WHERE NEW.state <> 'active' AND (NEW.content IS NOT OLD.content OR OLD.state = 'active')
|
|
113
|
+
ON CONFLICT (hash) DO NOTHING;
|
|
114
|
+
UPDATE entry_channel_rows
|
|
115
|
+
SET content_id = CASE WHEN NEW.state <> 'active'
|
|
116
|
+
THEN (SELECT id FROM contents WHERE hash = sha256(NEW.content)) END,
|
|
117
|
+
buffer = CASE WHEN NEW.state = 'active' THEN NEW.content END,
|
|
118
|
+
lines = CASE WHEN length(NEW.content) = 0 THEN 0
|
|
119
|
+
ELSE length(NEW.content) - length(replace(NEW.content, char(10), ''))
|
|
120
|
+
+ length(NEW.content) - length(replace(NEW.content, char(13), ''))
|
|
121
|
+
- (length(NEW.content) - length(replace(NEW.content, char(13) || char(10), ''))) / 2
|
|
122
|
+
+ CASE WHEN substr(NEW.content, -1) IN (char(10), char(13)) THEN 0 ELSE 1 END END
|
|
123
|
+
WHERE entry_id = OLD.entry_id AND name = OLD.name
|
|
124
|
+
AND (NEW.content IS NOT OLD.content OR (NEW.state = 'active') IS NOT (OLD.state = 'active'));
|
|
125
|
+
UPDATE entry_channel_rows
|
|
126
|
+
SET mimetype = NEW.mimetype, weight = NEW.weight, state = NEW.state, producer_result = NEW.producer_result
|
|
127
|
+
WHERE entry_id = OLD.entry_id AND name = OLD.name
|
|
128
|
+
AND (NEW.mimetype IS NOT OLD.mimetype OR NEW.weight IS NOT OLD.weight
|
|
129
|
+
OR NEW.state IS NOT OLD.state OR NEW.producer_result IS NOT OLD.producer_result);
|
|
130
|
+
UPDATE entry_channel_rows
|
|
131
|
+
SET deep_hash = NEW.deep_hash
|
|
132
|
+
WHERE entry_id = OLD.entry_id AND name = OLD.name AND NEW.deep_hash IS NOT OLD.deep_hash;
|
|
133
|
+
END;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "Plurnk agent runtime — the server / engine / core. Implements the @plurnk/plurnk-contracts contract.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plurnk",
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
"types": "./dist/digest/Digest.d.ts",
|
|
26
26
|
"default": "./dist/digest/Digest.js"
|
|
27
27
|
},
|
|
28
|
+
"./share": {
|
|
29
|
+
"types": "./dist/share/Share.d.ts",
|
|
30
|
+
"default": "./dist/share/Share.js"
|
|
31
|
+
},
|
|
28
32
|
"./package.json": "./package.json"
|
|
29
33
|
},
|
|
30
34
|
"bin": {
|
|
@@ -61,7 +65,7 @@
|
|
|
61
65
|
"fixture:demo": "node --conditions=plurnk-dev test/demo/_fixture.ts",
|
|
62
66
|
"test": "npm run test:lint && npm run test:unit && npm run test:intg",
|
|
63
67
|
"digest:missing": "node --conditions=plurnk-dev bin/digest-missing.ts",
|
|
64
|
-
"
|
|
68
|
+
"share": "node --conditions=plurnk-dev src/service.ts share",
|
|
65
69
|
"build:clean": "rm -rf dist",
|
|
66
70
|
"build:dist": "tsc -p tsconfig.build.json",
|
|
67
71
|
"build:sql": "node --conditions=plurnk-dev scripts/copy-sql.mjs",
|
|
@@ -86,24 +90,24 @@
|
|
|
86
90
|
"@opentelemetry/resources": "^2.11.0",
|
|
87
91
|
"@opentelemetry/sdk-metrics": "^2.11.0",
|
|
88
92
|
"@opentelemetry/sdk-trace-base": "^2.11.0",
|
|
89
|
-
"@plurnk/plurnk-a2a": "1.
|
|
90
|
-
"@plurnk/plurnk-agui": "1.
|
|
91
|
-
"@plurnk/plurnk-contracts": "1.
|
|
92
|
-
"@plurnk/plurnk-parser": "1.
|
|
93
|
-
"@plurnk/plurnk-schedule": "1.
|
|
94
|
-
"@plurnk/plurnk-execs": "1.
|
|
95
|
-
"@plurnk/plurnk-execs-common": "1.
|
|
96
|
-
"@plurnk/plurnk-execs-jq": "1.
|
|
97
|
-
"@plurnk/plurnk-execs-sqlite": "1.
|
|
98
|
-
"@plurnk/plurnk-hooks": "1.
|
|
99
|
-
"@plurnk/plurnk-mcp": "1.
|
|
100
|
-
"@plurnk/plurnk-meta": "1.
|
|
101
|
-
"@plurnk/plurnk-agent-skills": "1.
|
|
102
|
-
"@plurnk/plurnk-mimetypes": "1.
|
|
103
|
-
"@plurnk/plurnk-mimetypes-application-ipynb": "1.
|
|
104
|
-
"@plurnk/plurnk-mimetypes-application-json": "1.
|
|
105
|
-
"@plurnk/plurnk-mimetypes-application-jsonl": "1.
|
|
106
|
-
"@plurnk/plurnk-mimetypes-application-xml": "1.
|
|
93
|
+
"@plurnk/plurnk-a2a": "1.22.0",
|
|
94
|
+
"@plurnk/plurnk-agui": "1.22.0",
|
|
95
|
+
"@plurnk/plurnk-contracts": "1.22.0",
|
|
96
|
+
"@plurnk/plurnk-parser": "1.22.0",
|
|
97
|
+
"@plurnk/plurnk-schedule": "1.22.0",
|
|
98
|
+
"@plurnk/plurnk-execs": "1.22.0",
|
|
99
|
+
"@plurnk/plurnk-execs-common": "1.22.0",
|
|
100
|
+
"@plurnk/plurnk-execs-jq": "1.22.0",
|
|
101
|
+
"@plurnk/plurnk-execs-sqlite": "1.22.0",
|
|
102
|
+
"@plurnk/plurnk-hooks": "1.22.0",
|
|
103
|
+
"@plurnk/plurnk-mcp": "1.22.0",
|
|
104
|
+
"@plurnk/plurnk-meta": "1.22.0",
|
|
105
|
+
"@plurnk/plurnk-agent-skills": "1.22.0",
|
|
106
|
+
"@plurnk/plurnk-mimetypes": "1.22.0",
|
|
107
|
+
"@plurnk/plurnk-mimetypes-application-ipynb": "1.22.0",
|
|
108
|
+
"@plurnk/plurnk-mimetypes-application-json": "1.22.0",
|
|
109
|
+
"@plurnk/plurnk-mimetypes-application-jsonl": "1.22.0",
|
|
110
|
+
"@plurnk/plurnk-mimetypes-application-xml": "1.22.0",
|
|
107
111
|
"@plurnk/plurnk-mimetypes-grammar-bash": "1.16.2",
|
|
108
112
|
"@plurnk/plurnk-mimetypes-grammar-c": "1.16.2",
|
|
109
113
|
"@plurnk/plurnk-mimetypes-grammar-cpp": "1.16.2",
|
|
@@ -130,29 +134,30 @@
|
|
|
130
134
|
"@plurnk/plurnk-mimetypes-grammar-typescript": "1.16.2",
|
|
131
135
|
"@plurnk/plurnk-mimetypes-grammar-yaml": "1.16.2",
|
|
132
136
|
"@plurnk/plurnk-mimetypes-grammar-zig": "1.16.2",
|
|
133
|
-
"@plurnk/plurnk-mimetypes-application-pdf": "1.
|
|
134
|
-
"@plurnk/plurnk-mimetypes-image": "1.
|
|
135
|
-
"@plurnk/plurnk-mimetypes-audio": "1.
|
|
136
|
-
"@plurnk/plurnk-mimetypes-text-csv": "1.
|
|
137
|
-
"@plurnk/plurnk-mimetypes-text-diff": "1.
|
|
138
|
-
"@plurnk/plurnk-mimetypes-text-dotenv": "1.
|
|
139
|
-
"@plurnk/plurnk-mimetypes-text-html": "1.
|
|
140
|
-
"@plurnk/plurnk-mimetypes-text-ini": "1.
|
|
141
|
-
"@plurnk/plurnk-mimetypes-text-markdown": "1.
|
|
142
|
-
"@plurnk/plurnk-mimetypes-text-plain": "1.
|
|
143
|
-
"@plurnk/plurnk-models": "1.
|
|
144
|
-
"@plurnk/plurnk-providers": "1.
|
|
145
|
-
"@plurnk/plurnk-schemes": "1.
|
|
146
|
-
"@plurnk/plurnk-schemes-http": "1.
|
|
137
|
+
"@plurnk/plurnk-mimetypes-application-pdf": "1.22.0",
|
|
138
|
+
"@plurnk/plurnk-mimetypes-image": "1.22.0",
|
|
139
|
+
"@plurnk/plurnk-mimetypes-audio": "1.22.0",
|
|
140
|
+
"@plurnk/plurnk-mimetypes-text-csv": "1.22.0",
|
|
141
|
+
"@plurnk/plurnk-mimetypes-text-diff": "1.22.0",
|
|
142
|
+
"@plurnk/plurnk-mimetypes-text-dotenv": "1.22.0",
|
|
143
|
+
"@plurnk/plurnk-mimetypes-text-html": "1.22.0",
|
|
144
|
+
"@plurnk/plurnk-mimetypes-text-ini": "1.22.0",
|
|
145
|
+
"@plurnk/plurnk-mimetypes-text-markdown": "1.22.0",
|
|
146
|
+
"@plurnk/plurnk-mimetypes-text-plain": "1.22.0",
|
|
147
|
+
"@plurnk/plurnk-models": "1.22.0",
|
|
148
|
+
"@plurnk/plurnk-providers": "1.22.0",
|
|
149
|
+
"@plurnk/plurnk-schemes": "1.22.0",
|
|
150
|
+
"@plurnk/plurnk-schemes-http": "1.22.0",
|
|
147
151
|
"@plurnk/plurnk-schemes-http-tavily": "^1.19.1",
|
|
148
152
|
"@possumtech/sqlrite": "^6.5.3",
|
|
149
|
-
"diff": "^9.0.0"
|
|
150
|
-
"yaml": "^2.9.0"
|
|
153
|
+
"diff": "^9.0.0"
|
|
151
154
|
},
|
|
152
155
|
"devDependencies": {
|
|
156
|
+
"@a2a-js/sdk": "1.2.1",
|
|
153
157
|
"@modelcontextprotocol/server": "2.0.0",
|
|
154
158
|
"@opentelemetry/core": "^2.11.0",
|
|
155
|
-
"
|
|
159
|
+
"marked": "^18.0.14",
|
|
160
|
+
"zod": "4.6.5"
|
|
156
161
|
},
|
|
157
162
|
"homepage": "https://github.com/plurnk/plurnk-service/tree/main/plurnk-core#readme",
|
|
158
163
|
"bugs": {
|