bazilion 0.16.0 → 0.18.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/dist/cli.js +672 -87
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +3759 -432
- package/dist/daemon.js.map +1 -1
- package/dist/migrations/0001_init.sql +169 -0
- package/dist/web/client/assets/ChatPane-CAYS_fIQ.js +76 -0
- package/dist/web/client/assets/ConfirmDialog-BzIiABOP.js +1 -0
- package/dist/web/client/assets/{FieldRow-DJ2Gx4Du.js → FieldRow-W_54rw5c.js} +1 -1
- package/dist/web/client/assets/ProductionTeamPolicyEditor-DNXVX8Lz.js +7 -0
- package/dist/web/client/assets/ProfileCommunicationEditor-DN0fOzqn.js +1 -0
- package/dist/web/client/assets/{ResultSourceConversation-CtzJ8QA-.js → ResultSourceConversation-DoU4tOWc.js} +1 -1
- package/dist/web/client/assets/TeamTabs-BmTZRI4T.js +1 -0
- package/dist/web/client/assets/TemplatesTabs-Bs_OXKwx.js +1 -0
- package/dist/web/client/assets/{UnsavedChangesGuard-BCsLw-mU.js → UnsavedChangesGuard-CPRtFReU.js} +1 -1
- package/dist/web/client/assets/{_id-DxopIW-y.js → _id-CxAB4TDr.js} +1 -1
- package/dist/web/client/assets/_id-DL4tJFQB.js +1 -0
- package/dist/web/client/assets/{_id-BEDmIXVf.js → _id-DR9eFC17.js} +1 -1
- package/dist/web/client/assets/{_id-BFM_tn_s.js → _id-Dbmei5tg.js} +1 -1
- package/dist/web/client/assets/{_id-B5Ov7cdO.js → _id-ybF-pqmr.js} +1 -1
- package/dist/web/client/assets/activity-oUyy77jD.js +1 -0
- package/dist/web/client/assets/{agents-CMPOFcs-.js → agents-D_TrEqAg.js} +1 -1
- package/dist/web/client/assets/{agents-O4soKZND.js → agents-DkjJp7JP.js} +1 -1
- package/dist/web/client/assets/{approvals-CwDu_lrA.js → approvals-DhOerWdt.js} +1 -1
- package/dist/web/client/assets/{attention-BY8MMuM_.js → attention-DGwiF-Jy.js} +1 -1
- package/dist/web/client/assets/chevron-right-DSa4xPTs.js +1 -0
- package/dist/web/client/assets/config-BJ2ZzHPR.js +3 -0
- package/dist/web/client/assets/createServerFn-Dzfjt7mA.js +3 -0
- package/dist/web/client/assets/git-review-presentation-CzHQulDk.js +1 -0
- package/dist/web/client/assets/{inbox-CWXql0K3.js → inbox-BUElnGep.js} +1 -1
- package/dist/web/client/assets/index-Bi-HxcPG.js +50 -0
- package/dist/web/client/assets/{learning-DAm4dyyc.js → learning-BiTHNwB3.js} +1 -1
- package/dist/web/client/assets/login-BmcZvAH2.js +1 -0
- package/dist/web/client/assets/{mcp-loLB0wuh.js → mcp-Cwk9V82W.js} +1 -1
- package/dist/web/client/assets/{members-BJ0ikkTl.js → members-CHDNabFh.js} +1 -1
- package/dist/web/client/assets/{memory-Drn9Gv53.js → memory-Cx_Fpd4e.js} +1 -1
- package/dist/web/client/assets/policy-C0nMdwcG.js +1 -0
- package/dist/web/client/assets/{results-9exU6f7m.js → results-Bz3jASs-.js} +1 -1
- package/dist/web/client/assets/review-AK9WGmpv.js +1 -0
- package/dist/web/client/assets/routes-DsMY_6oy.js +1 -0
- package/dist/web/client/assets/{services-BLso1BhA.js → services-DItA6fJ7.js} +1 -1
- package/dist/web/client/assets/{skills-BodqX3OI.js → skills-DbNV2vgL.js} +1 -1
- package/dist/web/client/assets/{styles-d1yjBpud.css → styles-C6br2xxl.css} +1 -1
- package/dist/web/client/assets/{teams-ByQedXZi.js → teams-D83scDxw.js} +1 -1
- package/dist/web/client/assets/{teams-SYsF1bOR.js → teams-DAny1ypN.js} +1 -1
- package/dist/web/client/assets/{telegram-DC9PLFbB.js → telegram-BOmf9vUh.js} +1 -1
- package/dist/web/client/assets/{tokens-DGy8Ijpo.js → tokens-DBGH6Bw5.js} +1 -1
- package/dist/web/client/assets/{triggers-BXpVmHDG.js → triggers-D1_pseI3.js} +1 -1
- package/dist/web/client/assets/verifications-CBTo-FyV.js +2 -0
- package/dist/web/client/assets/welcome-DAfPOm15.js +1 -0
- package/dist/web/client/assets/x-CWY-gUaM.js +1 -0
- package/dist/web/server/assets/{ChatPane-CS5oI7ef.js → ChatPane-DybH39WK.js} +301 -14
- package/dist/web/server/assets/{ResultSourceConversation-BpVWBRYq.js → ResultSourceConversation-BmXTcEOA.js} +1 -1
- package/dist/web/server/assets/{TeamTabs-TCKjCvMA.js → TeamTabs-Dg4v6x0-.js} +8 -0
- package/dist/web/server/assets/{_id-DtIYuJJX.js → _id--onriuvj.js} +1 -1
- package/dist/web/server/assets/{_id-DOnInzLb.js → _id--zoh1vv7.js} +1 -1
- package/dist/web/server/assets/{_id-CeyHEsCZ.js → _id-6p-mDmI8.js} +1 -1
- package/dist/web/server/assets/{_id-5pgKoid8.js → _id-BN1BPEDI.js} +1 -1
- package/dist/web/server/assets/{_id-DFHB9JFQ.js → _id-BYKpT2Tu.js} +1 -1
- package/dist/web/server/assets/{_id-B_-CDHOi2.js → _id-BqWTB8Wl.js} +1 -1
- package/dist/web/server/assets/{_id-BnqodC1c2.js → _id-C_2er0_G.js} +3 -3
- package/dist/web/server/assets/{_id-BG2nkGxa.js → _id-DptBl3X8.js} +1 -1
- package/dist/web/server/assets/{_id-DwZXhLlL.js → _id-EAjRXNbD.js} +2 -2
- package/dist/web/server/assets/{_id-DrB9uR1b.js → _id-dUnXL-My2.js} +1 -1
- package/dist/web/server/assets/{_tanstack-start-manifest_v-D7gKv6m6.js → _tanstack-start-manifest_v-B3M-dfRO.js} +108 -84
- package/dist/web/server/assets/{activity-0VUkStOu.js → activity-C5jpoEQI.js} +1 -1
- package/dist/web/server/assets/{activity-C88qrNqv.js → activity-Cu7zKPGD.js} +1 -1
- package/dist/web/server/assets/{activity-5fWKPDxj.js → activity-Dn50vkQP.js} +2 -2
- package/dist/web/server/assets/{agents-CSXLaM2W.js → agents-RE6aYOb-.js} +1 -1
- package/dist/web/server/assets/{agents-C86K6HvS.js → agents-nAOx_H7s.js} +1 -1
- package/dist/web/server/assets/{approvals-C3MysI6l.js → approvals-DhHxIDrL.js} +1 -1
- package/dist/web/server/assets/{attention-DLeLCKah.js → attention-CBWzWRni.js} +1 -1
- package/dist/web/server/assets/{auth-CDZp9aEk.js → auth-tB3i6cFd.js} +1 -1
- package/dist/web/server/assets/{config-BVTHvljR.js → config-D1k_tTAw.js} +1 -1
- package/dist/web/server/assets/{daemon-client-xWyYKAcx.js → daemon-client-C7qjQ2iO.js} +45 -0
- package/dist/web/server/assets/git-review-BB3M9nYg.js +26 -0
- package/dist/web/server/assets/git-review-Bf5ABFJg.js +179 -0
- package/dist/web/server/assets/git-review-presentation-TJiHJhen.js +81 -0
- package/dist/web/server/assets/{inbox-PQTrjtOw.js → inbox-Dw4pTevh.js} +1 -1
- package/dist/web/server/assets/{learning-K0cmDsZR.js → learning-CF8ZzFVD.js} +1 -1
- package/dist/web/server/assets/{mcp-Rtraochg.js → mcp-D5dmBT82.js} +1 -1
- package/dist/web/server/assets/{members-CD3GiTfF.js → members-Bd0OtiTr.js} +1 -1
- package/dist/web/server/assets/{members-grAKFWgv.js → members-CvwEN9pm.js} +1 -1
- package/dist/web/server/assets/{members-cc5SeEaW.js → members-xSXoYUOd.js} +2 -2
- package/dist/web/server/assets/{memory-egFpBD1g.js → memory-CcPK7um7.js} +1 -1
- package/dist/web/server/assets/{memory-C5i_GxlY.js → memory-UP6AsRkO.js} +2 -2
- package/dist/web/server/assets/{memory-CVqnyUaM.js → memory-lo2vHRNw.js} +1 -1
- package/dist/web/server/assets/{policy-bLKwvnja.js → policy-B62WXIFo.js} +1 -1
- package/dist/web/server/assets/{policy-Dgjb0_gK.js → policy-Bze9Krhg.js} +2 -2
- package/dist/web/server/assets/{policy-ooSBgiDS.js → policy-Dh6wd2wN.js} +1 -1
- package/dist/web/server/assets/{results-N-kP4iFT.js → results-BFqs2iOu.js} +1 -1
- package/dist/web/server/assets/{results-DXdYtHaq.js → results-BWnu3gXP.js} +1 -1
- package/dist/web/server/assets/{results-CfNsFncJ.js → results-CzZk50Fu.js} +3 -3
- package/dist/web/server/assets/review-DUe3vHPU.js +393 -0
- package/dist/web/server/assets/review-c_-cFi7H.js +14 -0
- package/dist/web/server/assets/{router-B6g_s7W3.js → router-Deq94UJQ.js} +41 -27
- package/dist/web/server/assets/{routes-pcRy_Sf8.js → routes-B6x3pEW8.js} +1 -1
- package/dist/web/server/assets/{routes-BqSaZvlu.js → routes-CVKkvFVv.js} +1 -1
- package/dist/web/server/assets/{routes-Dsh8F_7i.js → routes-DsUzzxk4.js} +2 -2
- package/dist/web/server/assets/{services-DlZA8fRL.js → services-CEr61xb5.js} +1 -1
- package/dist/web/server/assets/{skills-i2duvgW-.js → skills-BImC3LTO.js} +1 -1
- package/dist/web/server/assets/{teams-6RYIj1Xm.js → teams-8zEIo08E.js} +1 -1
- package/dist/web/server/assets/{teams-B1AI3NfN.js → teams-D-yaAWLV.js} +1 -1
- package/dist/web/server/assets/{telegram-C4q0YTVn.js → telegram-CGl_LFtJ.js} +1 -1
- package/dist/web/server/assets/{tokens-RFquA2Bx.js → tokens-cB-uf7qm.js} +1 -1
- package/dist/web/server/assets/{triggers-DVD-iE-N.js → triggers-CtSj79L0.js} +1 -1
- package/dist/web/server/assets/verification-B5QjcpIo.js +97 -0
- package/dist/web/server/assets/verifications-BfQsfwSE.js +268 -0
- package/dist/web/server/assets/verifications-CUq_6ZqL.js +26 -0
- package/dist/web/server/server.js +72 -28
- package/dist/worker.js +470 -79
- package/dist/worker.js.map +1 -1
- package/package.json +3 -3
- package/dist/web/client/assets/ChatPane-CQZzxOir.js +0 -76
- package/dist/web/client/assets/ConfirmDialog-MicTTwdy.js +0 -1
- package/dist/web/client/assets/ProductionTeamPolicyEditor-DqUnN_ce.js +0 -7
- package/dist/web/client/assets/ProfileCommunicationEditor-DArXub0b.js +0 -1
- package/dist/web/client/assets/TeamTabs-DbIk5vvT.js +0 -1
- package/dist/web/client/assets/TemplatesTabs-CatJIjGi.js +0 -1
- package/dist/web/client/assets/_id-CrnEVcw8.js +0 -1
- package/dist/web/client/assets/activity-CrG8Bg60.js +0 -1
- package/dist/web/client/assets/chevron-right-Cf6vKeLq.js +0 -1
- package/dist/web/client/assets/config-Cn4iBJFz.js +0 -3
- package/dist/web/client/assets/index-Bq2zrG2_.js +0 -52
- package/dist/web/client/assets/login-BsABI8Ux.js +0 -1
- package/dist/web/client/assets/policy-pQadZyk0.js +0 -1
- package/dist/web/client/assets/routes-jw1PuqiR.js +0 -1
- package/dist/web/client/assets/welcome-BKsnsCxJ.js +0 -1
- package/dist/web/client/assets/x-BK4xNCzS.js +0 -1
|
@@ -744,3 +744,172 @@ CREATE TABLE coding_commands (
|
|
|
744
744
|
UNIQUE(agent_id, turn_id, tool_call_id)
|
|
745
745
|
);
|
|
746
746
|
CREATE INDEX coding_command_history ON coding_commands(team_id, created_at, id);
|
|
747
|
+
|
|
748
|
+
-- BAZ-041: bounded retained diagnostic evidence, subordinate to its receipt.
|
|
749
|
+
-- Text lives in the database so the encrypted backup contract carries it, and its
|
|
750
|
+
-- original expiry, without a side store. A row without retained bytes is a truthful
|
|
751
|
+
-- tombstone: expired (past its own window) or deleted (deliberately erased).
|
|
752
|
+
-- Quota eviction drops the row instead, which clients read as unavailable.
|
|
753
|
+
CREATE TABLE coding_command_logs (
|
|
754
|
+
command_id TEXT PRIMARY KEY REFERENCES coding_commands(id) ON DELETE CASCADE,
|
|
755
|
+
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
756
|
+
agent_id TEXT NOT NULL,
|
|
757
|
+
turn_id TEXT NOT NULL,
|
|
758
|
+
tool_call_id TEXT NOT NULL,
|
|
759
|
+
state TEXT NOT NULL CHECK (state IN ('retained', 'expired', 'deleted')),
|
|
760
|
+
text TEXT,
|
|
761
|
+
byte_length INTEGER NOT NULL CHECK (byte_length BETWEEN 0 AND 2097152),
|
|
762
|
+
observed_bytes INTEGER NOT NULL CHECK (observed_bytes >= 0),
|
|
763
|
+
redacted INTEGER NOT NULL DEFAULT 0 CHECK (redacted IN (0, 1)),
|
|
764
|
+
-- Explicit: redaction can shorten or lengthen bytes, so truncation is never
|
|
765
|
+
-- inferred by comparing observed_bytes with the retained byte_length.
|
|
766
|
+
truncated INTEGER NOT NULL DEFAULT 0 CHECK (truncated IN (0, 1)),
|
|
767
|
+
created_at INTEGER NOT NULL,
|
|
768
|
+
expires_at INTEGER NOT NULL,
|
|
769
|
+
released_at INTEGER,
|
|
770
|
+
retired_at INTEGER,
|
|
771
|
+
CHECK (expires_at >= created_at),
|
|
772
|
+
CHECK ((state = 'retained') = (retired_at IS NULL)),
|
|
773
|
+
CHECK ((state = 'retained' AND text IS NOT NULL
|
|
774
|
+
AND length(CAST(text AS BLOB)) = byte_length)
|
|
775
|
+
OR (state != 'retained' AND text IS NULL AND byte_length = 0))
|
|
776
|
+
);
|
|
777
|
+
CREATE INDEX coding_command_logs_retention ON coding_command_logs(expires_at, command_id);
|
|
778
|
+
CREATE INDEX coding_command_logs_team_time ON coding_command_logs(team_id, created_at, command_id);
|
|
779
|
+
|
|
780
|
+
-- BAZ-042: bounded source snapshots — code evidence, not another conversation store.
|
|
781
|
+
-- A snapshot is identified by the content-addressed id of its manifest, so identical trees
|
|
782
|
+
-- collapse onto one row per Team. That row keeps the *first* capture's provenance and its
|
|
783
|
+
-- original window: capturing the same state again must not extend retention. Manifests hold
|
|
784
|
+
-- paths and digests only; no file content is stored here.
|
|
785
|
+
CREATE TABLE source_snapshots (
|
|
786
|
+
snapshot_id TEXT NOT NULL,
|
|
787
|
+
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
788
|
+
-- Operator captures have no turn: provenance is explicit rather than faked with sentinel ids.
|
|
789
|
+
captured_by TEXT NOT NULL CHECK (captured_by IN ('agent', 'operator')),
|
|
790
|
+
agent_id TEXT,
|
|
791
|
+
turn_id TEXT,
|
|
792
|
+
tool_call_id TEXT,
|
|
793
|
+
complete INTEGER NOT NULL CHECK (complete IN (0, 1)),
|
|
794
|
+
head TEXT,
|
|
795
|
+
base_oid TEXT NOT NULL,
|
|
796
|
+
entry_count INTEGER NOT NULL CHECK (entry_count BETWEEN 0 AND 4096),
|
|
797
|
+
captured_content_bytes INTEGER NOT NULL
|
|
798
|
+
CHECK (captured_content_bytes BETWEEN 0 AND 16777216),
|
|
799
|
+
manifest_json TEXT NOT NULL CHECK (length(CAST(manifest_json AS BLOB)) <= 2097152),
|
|
800
|
+
created_at INTEGER NOT NULL,
|
|
801
|
+
expires_at INTEGER NOT NULL,
|
|
802
|
+
CHECK (expires_at > created_at),
|
|
803
|
+
CHECK ((captured_by = 'agent') = (agent_id IS NOT NULL AND turn_id IS NOT NULL
|
|
804
|
+
AND tool_call_id IS NOT NULL)),
|
|
805
|
+
PRIMARY KEY (snapshot_id, team_id)
|
|
806
|
+
);
|
|
807
|
+
CREATE INDEX source_snapshots_retention ON source_snapshots(expires_at, snapshot_id);
|
|
808
|
+
CREATE INDEX source_snapshots_team_time ON source_snapshots(team_id, created_at, snapshot_id);
|
|
809
|
+
|
|
810
|
+
-- BAZ-044: specialist verification of a captured code change.
|
|
811
|
+
--
|
|
812
|
+
-- One typed request binds exactly one immutable change (a BAZ-042 snapshot) to a finite set of
|
|
813
|
+
-- captured commands and the BAZ-040 admitted environment, and one selected same-Team specialist.
|
|
814
|
+
-- This is a bounded dispatch-and-evidence record, not a workflow engine: there are no stages,
|
|
815
|
+
-- transformations, approver assignments, automatic retries or check substitution.
|
|
816
|
+
CREATE TABLE verification_requests (
|
|
817
|
+
id TEXT PRIMARY KEY,
|
|
818
|
+
team_id TEXT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
819
|
+
requester_kind TEXT NOT NULL CHECK (requester_kind IN ('agent', 'operator')),
|
|
820
|
+
requester_agent_id TEXT,
|
|
821
|
+
recipient_agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
822
|
+
-- Canonical messaging identity when the request rides the existing peer message path.
|
|
823
|
+
message_id TEXT REFERENCES messages(id) ON DELETE SET NULL,
|
|
824
|
+
-- BAZ-035 conversation identity of the source task, when there is one.
|
|
825
|
+
source_session_id TEXT,
|
|
826
|
+
-- BAZ-042 evidence identity. Deliberately not a foreign key: a snapshot has its own seven-day
|
|
827
|
+
-- window, and a request whose evidence is gone must report that rather than resolve to a
|
|
828
|
+
-- different tree.
|
|
829
|
+
snapshot_id TEXT NOT NULL,
|
|
830
|
+
snapshot_complete INTEGER NOT NULL CHECK (snapshot_complete IN (0, 1)),
|
|
831
|
+
head TEXT,
|
|
832
|
+
base_oid TEXT NOT NULL,
|
|
833
|
+
-- BAZ-040 admitted environment facts resolved at admission and frozen with the request.
|
|
834
|
+
environment_json TEXT NOT NULL CHECK (json_valid(environment_json)),
|
|
835
|
+
summary TEXT CHECK (summary IS NULL OR length(CAST(summary AS BLOB)) <= 2000),
|
|
836
|
+
state TEXT NOT NULL CHECK (state IN (
|
|
837
|
+
'pending', 'awaiting_approval', 'blocked', 'running',
|
|
838
|
+
'completed', 'failed', 'cancelled', 'uncertain'
|
|
839
|
+
)),
|
|
840
|
+
created_at INTEGER NOT NULL,
|
|
841
|
+
expires_at INTEGER NOT NULL,
|
|
842
|
+
CHECK (expires_at > created_at),
|
|
843
|
+
-- An operator request has no Agent requester; an Agent request must name one.
|
|
844
|
+
CHECK ((requester_kind = 'agent') = (requester_agent_id IS NOT NULL)),
|
|
845
|
+
-- A specialist never verifies its own request.
|
|
846
|
+
CHECK (requester_agent_id IS NULL OR requester_agent_id != recipient_agent_id)
|
|
847
|
+
);
|
|
848
|
+
CREATE INDEX verification_requests_team_time
|
|
849
|
+
ON verification_requests(team_id, created_at DESC, id);
|
|
850
|
+
CREATE INDEX verification_requests_recipient_dispatch
|
|
851
|
+
ON verification_requests(recipient_agent_id, state, created_at);
|
|
852
|
+
CREATE INDEX verification_requests_retention ON verification_requests(expires_at, id);
|
|
853
|
+
|
|
854
|
+
-- The captured contract: at most eight checks, each with an exact command, cwd, purpose and
|
|
855
|
+
-- timeout. Immutable once written, so a later attempt cannot reinterpret what was agreed.
|
|
856
|
+
CREATE TABLE verification_checks (
|
|
857
|
+
request_id TEXT NOT NULL REFERENCES verification_requests(id) ON DELETE CASCADE,
|
|
858
|
+
ordinal INTEGER NOT NULL CHECK (ordinal BETWEEN 0 AND 7),
|
|
859
|
+
command TEXT NOT NULL CHECK (length(CAST(command AS BLOB)) BETWEEN 1 AND 2000),
|
|
860
|
+
cwd TEXT NOT NULL CHECK (length(CAST(cwd AS BLOB)) <= 1000),
|
|
861
|
+
purpose TEXT NOT NULL CHECK (length(CAST(purpose AS BLOB)) BETWEEN 1 AND 500),
|
|
862
|
+
timeout_ms INTEGER NOT NULL CHECK (timeout_ms BETWEEN 1000 AND 300000),
|
|
863
|
+
PRIMARY KEY (request_id, ordinal)
|
|
864
|
+
);
|
|
865
|
+
|
|
866
|
+
-- Execution attempts. Claiming is transactional and leased so exactly one owner dispatches a
|
|
867
|
+
-- request; a claim left by an interrupted process becomes uncertain and is never automatically
|
|
868
|
+
-- replayed. An explicit rerun is a new attempt that links to the result it supersedes.
|
|
869
|
+
CREATE TABLE verification_attempts (
|
|
870
|
+
id TEXT PRIMARY KEY,
|
|
871
|
+
request_id TEXT NOT NULL REFERENCES verification_requests(id) ON DELETE CASCADE,
|
|
872
|
+
attempt_number INTEGER NOT NULL CHECK (attempt_number >= 1),
|
|
873
|
+
supersedes_attempt_id TEXT REFERENCES verification_attempts(id) ON DELETE SET NULL,
|
|
874
|
+
state TEXT NOT NULL CHECK (state IN (
|
|
875
|
+
'claimed', 'running', 'completed', 'failed', 'cancelled', 'uncertain'
|
|
876
|
+
)),
|
|
877
|
+
lease_owner TEXT,
|
|
878
|
+
lease_expires_at INTEGER,
|
|
879
|
+
started_at INTEGER,
|
|
880
|
+
finished_at INTEGER,
|
|
881
|
+
error TEXT CHECK (error IS NULL OR length(CAST(error AS BLOB)) <= 2000),
|
|
882
|
+
created_at INTEGER NOT NULL,
|
|
883
|
+
CHECK ((state IN ('claimed', 'running')) = (finished_at IS NULL)),
|
|
884
|
+
CHECK ((state IN ('claimed', 'running')) = (lease_owner IS NOT NULL)),
|
|
885
|
+
CHECK (state != 'claimed' OR started_at IS NULL),
|
|
886
|
+
UNIQUE (request_id, attempt_number)
|
|
887
|
+
);
|
|
888
|
+
CREATE UNIQUE INDEX verification_attempts_one_open_per_request
|
|
889
|
+
ON verification_attempts(request_id) WHERE finished_at IS NULL;
|
|
890
|
+
CREATE INDEX verification_attempts_lease ON verification_attempts(state, lease_expires_at);
|
|
891
|
+
|
|
892
|
+
-- Executor-owned outcomes, one row set per attempt. History is never rewritten: a rerun records
|
|
893
|
+
-- its own outcomes beside the previous attempt's, so the earlier receipt stays readable.
|
|
894
|
+
CREATE TABLE verification_check_outcomes (
|
|
895
|
+
attempt_id TEXT NOT NULL REFERENCES verification_attempts(id) ON DELETE CASCADE,
|
|
896
|
+
ordinal INTEGER NOT NULL CHECK (ordinal BETWEEN 0 AND 7),
|
|
897
|
+
state TEXT NOT NULL CHECK (state IN (
|
|
898
|
+
'not_executed', 'succeeded', 'failed', 'skipped', 'blocked',
|
|
899
|
+
'timed_out', 'cancelled', 'unknown'
|
|
900
|
+
)),
|
|
901
|
+
command_id TEXT REFERENCES coding_commands(id) ON DELETE SET NULL,
|
|
902
|
+
exit_code INTEGER,
|
|
903
|
+
started_at INTEGER,
|
|
904
|
+
finished_at INTEGER,
|
|
905
|
+
PRIMARY KEY (attempt_id, ordinal),
|
|
906
|
+
CHECK ((state = 'not_executed') = (finished_at IS NULL)),
|
|
907
|
+
-- A skipped, blocked or interrupted check must not borrow a receipt from another run. Stated
|
|
908
|
+
-- one-directionally on purpose: `command_id` is ON DELETE SET NULL, so a required-non-null rule here
|
|
909
|
+
-- would make a referenced receipt impossible to prune — and pruning runs on every command save, so
|
|
910
|
+
-- the failure would spread to every later receipt in the Team. An executed outcome whose receipt was
|
|
911
|
+
-- pruned therefore keeps its state and exit code with no receipt pointer.
|
|
912
|
+
CHECK (command_id IS NULL OR state IN ('succeeded', 'failed', 'timed_out', 'cancelled')),
|
|
913
|
+
CHECK (exit_code IS NULL OR state IN ('succeeded', 'failed'))
|
|
914
|
+
);
|
|
915
|
+
CREATE INDEX verification_check_outcomes_command ON verification_check_outcomes(command_id);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{h as r}from"./index-Bi-HxcPG.js";import{t as i}from"./Button-ByiV6fpd.js";import{n as a,t as o}from"./git-review-presentation-CzHQulDk.js";import{t as s}from"./ResultCard-Cps_lXVN.js";function c(e){let t=e.split(`
|
|
2
|
+
`).map(e=>e.trim()).find(e=>/^(?:[A-Za-z]*Error(?: \[[A-Z_]+\])?:|ERR_[A-Z_]+\b)/.test(e));return t?t.length>240?`${t.slice(0,237)}…`:t:null}function l(e){let t=e.split(`
|
|
3
|
+
`).find(e=>e.startsWith(`--- from `));if(!t)return`Teammate update received`;let n=/^--- from (.+?) \(message [0-9a-f-]+(?:, reply to [0-9a-f-]+)?\) ---$/.exec(t);if(!n)return`Teammate update received`;let r=n[1]?.replace(/ \([0-9a-f-]{36}\)$/,``).trim();return!r||/^[0-9a-f-]{36}$/.test(r)?`Teammate update received`:`Update from ${r.slice(0,100)}`}var u=e(n(),1),d=65536;async function f(e,t=fetch){let n=`/api/teams/${encodeURIComponent(e.teamId)}/coding-commands/${encodeURIComponent(e.commandId)}/log`;try{let e=await t(`${n}?limit=${d}`,{headers:{accept:`application/json`}});if(e.status===403)return{status:`not-shared`};if(e.status===404)return{status:`missing`};if(!e.ok)return{status:`unavailable`,message:`Request failed (${e.status}).`};let r=await e.json(),i=p(r);if(!i)return{status:`unavailable`,message:`Unexpected response from the daemon.`};if(h(r,`page`)===null)return{status:`not-shared`};let a=m(h(r,`page`));return a?{status:`available`,page:a,view:i}:{status:`unavailable`,message:`Unexpected response from the daemon.`}}catch{return{status:`unavailable`,message:`The daemon could not be reached.`}}}function p(e){let t=h(e,`view`);return!g(t)||typeof t.commandId!=`string`||typeof t.availability!=`string`||typeof t.byteLength!=`number`?null:t}function m(e){return!g(e)||typeof e.text!=`string`||typeof e.availability!=`string`||typeof e.offset!=`number`||typeof e.hasMore!=`boolean`||typeof e.byteLength!=`number`?null:e}function h(e,t){return g(e)?e[t]:void 0}function g(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _=t();function v({name:e,body:t,pending:n=!1,log:r}){if(!n&&t===`Coding context or command evidence retained privately. Captured transport output follows its communication approval; ask the Agent for the relevant result.`)return(0,_.jsxs)(`details`,{className:`py-1 text-xs font-sans`,"aria-label":`Private command details`,children:[(0,_.jsx)(`summary`,{className:`cursor-pointer`,children:`Detailed output isn’t included in this history view`}),(0,_.jsx)(`p`,{className:`mt-1`,children:`The Agent’s summary is shown in the conversation. Ask the Agent to summarize its retained command result if you need more detail.`}),r&&(0,_.jsx)(b,{reference:r})]});let i;try{i=JSON.parse(t)}catch{return(0,_.jsx)(`span`,{children:t})}if(!i||typeof i!=`object`)return(0,_.jsx)(`span`,{children:t});if(n){let t=i;return(0,_.jsxs)(`p`,{className:`py-1 break-words`,children:[e===`coding_command`?`Running`:`Inspecting`,`:`,` `,typeof t.command==`string`?t.command:typeof t.target==`string`?t.target:`command evidence`]})}if(e===`repository_context`){let e=i;return Array.isArray(e.instructions?.files)?(0,_.jsxs)(`details`,{className:`py-1`,children:[(0,_.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Repository: `,e.target,` ·`,` `,e.instructions.state===`complete`?`${e.instructions.files.length} instruction files`:`instructions unavailable`]}),e.instructions.files.map(e=>(0,_.jsx)(`p`,{children:e.path},e.path)),(0,_.jsxs)(`p`,{children:[e.commands?.candidates?.length??0,` suggested commands ·`,` `,e.git?.state===`available`?e.git.branch:`Git unavailable`]}),(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap break-words`,children:t})]}):(0,_.jsx)(`span`,{children:t})}if(e===`coding_log`){let e=i;return typeof e.text!=`string`||typeof e.availability!=`string`?(0,_.jsx)(`span`,{children:t}):(0,_.jsxs)(`details`,{className:`py-1`,"aria-label":`Retained command output`,children:[(0,_.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Retained output: `,e.availability,e.hasMore?` · more available`:``]}),(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap break-words`,children:e.text}),(0,_.jsxs)(`p`,{className:`text-xs`,children:[`bytes `,typeof e.offset==`number`?e.offset:0,`–`,(typeof e.offset==`number`?e.offset:0)+e.text.length,` of`,` `,typeof e.byteLength==`number`?e.byteLength:0]})]})}if(e===`coding_environment`){let e=i;return typeof e.posture==`string`?(0,_.jsxs)(`details`,{className:`py-1`,children:[(0,_.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Environment: `,e.posture,` · `,e.cwd]}),(0,_.jsx)(`p`,{className:`break-all`,children:e.imageId??`Host runtime`}),Array.isArray(e.restrictions)&&e.restrictions.filter(e=>typeof e==`string`).map(e=>(0,_.jsx)(`p`,{children:e},e))]}):(0,_.jsx)(`span`,{children:t})}let a=i,o=e===`coding_receipt`?a.receipt:i;if(!o||typeof o.state!=`string`||typeof o.input?.command!=`string`||typeof o.input?.cwd!=`string`)return(0,_.jsx)(`span`,{children:t});let s=o.state===`failed`&&typeof o.diagnostic==`string`?c(o.diagnostic):null;return(0,_.jsxs)(`div`,{className:`py-2`,"aria-label":`Coding command result`,children:[(0,_.jsxs)(`p`,{className:`font-sans`,children:[(0,_.jsx)(`strong`,{className:o.state===`succeeded`?`text-sapphire-deep`:`text-mocha`,children:o.state.replaceAll(`_`,` `)}),` `,`· `,o.input.purpose,typeof o.exitCode==`number`?` · exit ${o.exitCode}`:``,e===`coding_receipt`?` · ${a.applicability}`:``]}),(0,_.jsx)(`p`,{className:`whitespace-pre-wrap break-words`,children:o.input.command}),(0,_.jsxs)(`p`,{className:`text-xs`,children:[o.input.cwd,` · `,o.environment?.posture,` · result at execution time`]}),s&&(0,_.jsx)(`p`,{className:`mt-1 font-sans text-rose-baziu`,"aria-label":`Command failure summary`,children:s}),typeof o.reason==`string`&&(0,_.jsx)(`p`,{children:o.reason}),(0,_.jsxs)(`details`,{children:[(0,_.jsx)(`summary`,{className:`cursor-pointer`,children:`Output and evidence`}),(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap break-words`,children:o.diagnostic}),o.truncated&&(0,_.jsx)(`p`,{children:`Output truncated.`}),(0,_.jsxs)(`p`,{className:`break-all`,children:[`coding-receipt:`,o.id]}),(0,_.jsx)(y,{teamId:o.teamId,after:o.sourceAfter??null,before:o.sourceBefore??null}),o.environment?.imageId&&(0,_.jsx)(`p`,{className:`break-all`,children:o.environment.imageId})]})]})}function y({teamId:e,after:t,before:n}){let[s,c]=(0,u.useState)(null),[l,d]=(0,u.useState)(!1);async function f(){if(t){d(!0);try{c(await r({data:{teamId:e,snapshotId:t.id}}))}finally{d(!1)}}}let p=s?.status===`ok`?s:null,m=o(p);return(0,_.jsxs)(`p`,{className:a(p)?`text-rose-baziu`:void 0,children:[m,t?(0,_.jsxs)(_.Fragment,{children:[` · tested version `,(0,_.jsx)(`span`,{className:`break-all font-mono`,children:t.id.slice(0,12)}),t.complete?``:` (incomplete)`,p===null&&(0,_.jsxs)(_.Fragment,{children:[` `,(0,_.jsx)(i,{variant:`ghost`,disabled:l,onClick:()=>void f(),children:l?`Checking…`:`Check applicability`})]}),s?.status===`unavailable`&&(0,_.jsxs)(`span`,{children:[` · `,s.message]})]}):` · no source snapshot was captured for this result`,n&&(0,_.jsxs)(_.Fragment,{children:[` · started from `,(0,_.jsx)(`span`,{className:`break-all font-mono`,children:n.id.slice(0,12)})]})]})}function b({reference:e}){let[t,n]=(0,u.useState)(null),[r,a]=(0,u.useState)(!1);async function o(){a(!0);try{n(await f(e))}finally{a(!1)}}return t===null?(0,_.jsx)(`p`,{className:`mt-2`,children:(0,_.jsx)(i,{variant:`ghost`,disabled:r,onClick:()=>void o(),children:r?`Loading…`:`Show retained output`})}):t.status===`not-shared`?(0,_.jsx)(`p`,{className:`mt-2`,children:`This command’s output hasn’t been shared with the conversation yet.`}):t.status===`missing`?(0,_.jsx)(`p`,{className:`mt-2`,children:`This retained output is no longer available.`}):t.status===`unavailable`?(0,_.jsx)(`p`,{className:`mt-2`,role:`alert`,children:t.message}):(0,_.jsxs)(`div`,{className:`mt-2`,children:[(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-sm bg-[rgba(42,31,22,0.04)] p-2`,children:t.page.text}),(0,_.jsxs)(`p`,{children:[`Retained output: `,t.page.availability,t.page.hasMore?` · earlier output omitted`:``,` · bytes `,t.page.offset,`–`,t.page.offset+t.page.text.length,` of `,t.page.byteLength]})]})}function x(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e){if(Array.isArray(e))return e}function C(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function w(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
4
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function T(e,t){return S(e)||C(e,t)||E(e,t)||w()}function E(e,t){if(e){if(typeof e==`string`)return x(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?x(e,t):void 0}}var D=Object.entries,O=Object.setPrototypeOf,k=Object.isFrozen,ee=Object.getPrototypeOf,te=Object.getOwnPropertyDescriptor,A=Object.freeze,j=Object.seal,M=Object.create,N=typeof Reflect<`u`&&Reflect,ne=N.apply,re=N.construct;A||=function(e){return e},j||=function(e){return e},ne||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},re||=function(e){return new e(...[...arguments].slice(1))};var ie=z(Array.prototype.forEach),ae=z(Array.prototype.lastIndexOf),oe=z(Array.prototype.pop),se=z(Array.prototype.push),ce=z(Array.prototype.splice),P=Array.isArray,le=z(String.prototype.toLowerCase),ue=z(String.prototype.toString),de=z(String.prototype.match),fe=z(String.prototype.replace),pe=z(String.prototype.indexOf),me=z(String.prototype.trim),F=z(Number.prototype.toString),he=z(Boolean.prototype.toString),I=typeof BigInt>`u`?null:z(BigInt.prototype.toString),ge=typeof Symbol>`u`?null:z(Symbol.prototype.toString),L=z(Object.prototype.hasOwnProperty),_e=z(Object.prototype.toString),R=z(RegExp.prototype.test),ve=ye(TypeError);function z(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return ne(e,t,n)}}function ye(e){return function(){return re(e,[...arguments])}}function B(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:le;if(O&&O(e,null),!P(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(k(t)||(t[r]=e),i=e)}e[i]=!0}return e}function V(e){for(let t=0;t<e.length;t++)L(e,t)||(e[t]=null);return e}function H(e){let t=M(null);for(let r of D(e)){var n=T(r,2);let i=n[0],a=n[1];L(e,i)&&(P(a)?t[i]=V(a):a&&typeof a==`object`&&a.constructor===Object?t[i]=H(a):t[i]=a)}return t}function be(e){switch(typeof e){case`string`:return e;case`number`:return F(e);case`boolean`:return he(e);case`bigint`:return I?I(e):`0`;case`symbol`:return ge?ge(e):`Symbol()`;case`undefined`:return _e(e);case`function`:case`object`:{if(e===null)return _e(e);let t=e,n=U(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:_e(e)}return _e(e)}default:return _e(e)}}function U(e,t){for(;e!==null;){let n=te(e,t);if(n){if(n.get)return z(n.get);if(typeof n.value==`function`)return z(n.value)}e=ee(e)}function n(){return null}return n}function xe(e){try{return R(e,``),!0}catch{return!1}}var Se=A(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),Ce=A(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),we=A([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),Te=A([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),Ee=A(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),De=A([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Oe=A([`#text`]),ke=A(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Ae=A(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-rendering.textlength.type.u1.u2.unicode.values.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),je=A(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Me=A([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Ne=j(/{{[\w\W]*|^[\w\W]*}}/g),Pe=j(/<%[\w\W]*|^[\w\W]*%>/g),Fe=j(/\${[\w\W]*/g),Ie=j(/^data-[\-\w.\u00B7-\uFFFF]+$/),Le=j(/^aria-[\-\w]+$/),Re=j(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ze=j(/^(?:\w+script|data):/i),Be=j(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ve=j(/^html$/i),He=j(/^[a-z][.\w]*(-[.\w]+)+$/i),Ue=j(/<[/\w!]/g),We=j(/<[/\w]/g),Ge=j(/<\/no(script|embed|frames)/i),Ke=j(/\/>/i),qe={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Je=function(){return typeof window>`u`?null:window},Ye=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Xe=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Ze=function(e,t,n,r){return L(e,t)&&P(e[t])?B(r.base?H(r.base):{},e[t],r.transform):n};function Qe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Je(),t=e=>Qe(e);if(t.version=`3.4.11`,t.removed=[],!e||!e.document||e.document.nodeType!==qe.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=U(d,`cloneNode`),p=U(d,`remove`),m=U(d,`nextSibling`),h=U(d,`childNodes`),g=U(d,`parentNode`),_=U(d,`shadowRoot`),v=U(d,`attributes`),y=o&&o.prototype?U(o.prototype,`nodeType`):null,b=o&&o.prototype?U(o.prototype,`nodeName`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let x,S=``,C,w=!1,T=0,E=function(){if(T>0)throw ve(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},O=function(e){E(),T++;try{return x.createHTML(e)}finally{T--}},k=function(e){E(),T++;try{return x.createScriptURL(e)}finally{T--}},ee=function(){return w||=(C=Ye(u,i),!0),C},te=n,N=te.implementation,ne=te.createNodeIterator,re=te.createDocumentFragment,F=te.getElementsByTagName,he=r.importNode,I=Xe();t.isSupported=typeof D==`function`&&typeof g==`function`&&N&&N.createHTMLDocument!==void 0;let ge=Ne,_e=Pe,z=Fe,ye=Ie,V=Le,$e=ze,et=Be,tt=He,nt=Re,W=null,rt=B({},[...Se,...Ce,...we,...Ee,...Oe]),G=null,it=B({},[...ke,...Ae,...je,...Me]),K=Object.seal(M(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),at=null,ot=null,st=Object.seal(M(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),ct=!0,lt=!0,ut=!1,dt=!0,ft=!1,pt=!0,mt=!1,ht=!1,gt=null,_t=null,vt=!1,yt=!1,bt=!1,xt=!1,St=!0,Ct=!1,wt=`user-content-`,Tt=!0,Et=!1,Dt={},q=null,Ot=B({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),kt=null,At=B({},[`audio`,`video`,`img`,`source`,`image`,`track`]),jt=null,Mt=B({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Nt=`http://www.w3.org/1998/Math/MathML`,Pt=`http://www.w3.org/2000/svg`,Ft=`http://www.w3.org/1999/xhtml`,It=Ft,Lt=!1,Rt=null,zt=B({},[Nt,Pt,Ft],ue),Bt=A([`mi`,`mo`,`mn`,`ms`,`mtext`]),Vt=B({},Bt),Ht=A([`annotation-xml`]),Ut=B({},Ht),Wt=B({},[`title`,`style`,`font`,`a`,`script`]),Gt=null,Kt=[`application/xhtml+xml`,`text/html`],J=null,qt=null,Jt=n.createElement(`form`),Yt=function(e){return e instanceof RegExp||e instanceof Function},Xt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(qt&&qt===e)return;(!e||typeof e!=`object`)&&(e={}),e=H(e),Gt=Kt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,J=Gt===`application/xhtml+xml`?ue:le,W=Ze(e,`ALLOWED_TAGS`,rt,{transform:J}),G=Ze(e,`ALLOWED_ATTR`,it,{transform:J}),Rt=Ze(e,`ALLOWED_NAMESPACES`,zt,{transform:ue}),jt=Ze(e,`ADD_URI_SAFE_ATTR`,Mt,{transform:J,base:Mt}),kt=Ze(e,`ADD_DATA_URI_TAGS`,At,{transform:J,base:At}),q=Ze(e,`FORBID_CONTENTS`,Ot,{transform:J}),at=Ze(e,`FORBID_TAGS`,H({}),{transform:J}),ot=Ze(e,`FORBID_ATTR`,H({}),{transform:J}),Dt=L(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?H(e.USE_PROFILES):e.USE_PROFILES:!1,ct=e.ALLOW_ARIA_ATTR!==!1,lt=e.ALLOW_DATA_ATTR!==!1,ut=e.ALLOW_UNKNOWN_PROTOCOLS||!1,dt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ft=e.SAFE_FOR_TEMPLATES||!1,pt=e.SAFE_FOR_XML!==!1,mt=e.WHOLE_DOCUMENT||!1,yt=e.RETURN_DOM||!1,bt=e.RETURN_DOM_FRAGMENT||!1,xt=e.RETURN_TRUSTED_TYPE||!1,vt=e.FORCE_BODY||!1,St=e.SANITIZE_DOM!==!1,Ct=e.SANITIZE_NAMED_PROPS||!1,Tt=e.KEEP_CONTENT!==!1,Et=e.IN_PLACE||!1,nt=xe(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Re,It=typeof e.NAMESPACE==`string`?e.NAMESPACE:Ft,Vt=L(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?H(e.MATHML_TEXT_INTEGRATION_POINTS):B({},Bt),Ut=L(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?H(e.HTML_INTEGRATION_POINTS):B({},Ht);let t=L(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?H(e.CUSTOM_ELEMENT_HANDLING):M(null);if(K=M(null),L(t,`tagNameCheck`)&&Yt(t.tagNameCheck)&&(K.tagNameCheck=t.tagNameCheck),L(t,`attributeNameCheck`)&&Yt(t.attributeNameCheck)&&(K.attributeNameCheck=t.attributeNameCheck),L(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(K.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),j(K),ft&&(lt=!1),bt&&(yt=!0),Dt&&(W=B({},Oe),G=M(null),Dt.html===!0&&(B(W,Se),B(G,ke)),Dt.svg===!0&&(B(W,Ce),B(G,Ae),B(G,Me)),Dt.svgFilters===!0&&(B(W,we),B(G,Ae),B(G,Me)),Dt.mathMl===!0&&(B(W,Ee),B(G,je),B(G,Me))),st.tagCheck=null,st.attributeCheck=null,L(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?st.tagCheck=e.ADD_TAGS:P(e.ADD_TAGS)&&(W===rt&&(W=H(W)),B(W,e.ADD_TAGS,J))),L(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?st.attributeCheck=e.ADD_ATTR:P(e.ADD_ATTR)&&(G===it&&(G=H(G)),B(G,e.ADD_ATTR,J))),L(e,`ADD_URI_SAFE_ATTR`)&&P(e.ADD_URI_SAFE_ATTR)&&B(jt,e.ADD_URI_SAFE_ATTR,J),L(e,`FORBID_CONTENTS`)&&P(e.FORBID_CONTENTS)&&(q===Ot&&(q=H(q)),B(q,e.FORBID_CONTENTS,J)),L(e,`ADD_FORBID_CONTENTS`)&&P(e.ADD_FORBID_CONTENTS)&&(q===Ot&&(q=H(q)),B(q,e.ADD_FORBID_CONTENTS,J)),Tt&&(W[`#text`]=!0),mt&&B(W,[`html`,`head`,`body`]),W.table&&(B(W,[`tbody`]),delete at.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw ve(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw ve(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=x;x=e.TRUSTED_TYPES_POLICY;try{S=O(``)}catch(e){throw x=t,e}}else e.TRUSTED_TYPES_POLICY===null?(x=void 0,S=``):(x===void 0&&(x=ee()),x&&typeof S==`string`&&(S=O(``)));A&&A(e),qt=e},Zt=B({},[...Ce,...we,...Te]),Qt=B({},[...Ee,...De]),$t=function(e,t,n){return t.namespaceURI===Ft?e===`svg`:t.namespaceURI===Nt?e===`svg`&&(n===`annotation-xml`||Vt[n]):!!Zt[e]},en=function(e,t,n){return t.namespaceURI===Ft?e===`math`:t.namespaceURI===Pt?e===`math`&&Ut[n]:!!Qt[e]},tn=function(e,t,n){return t.namespaceURI===Pt&&!Ut[n]||t.namespaceURI===Nt&&!Vt[n]?!1:!Qt[e]&&(Wt[e]||!Zt[e])},nn=function(e){let t=g(e);(!t||!t.tagName)&&(t={namespaceURI:It,tagName:`template`});let n=le(e.tagName),r=le(t.tagName);return Rt[e.namespaceURI]?e.namespaceURI===Pt?$t(n,t,r):e.namespaceURI===Nt?en(n,t,r):e.namespaceURI===Ft?tn(n,t,r):!!(Gt===`application/xhtml+xml`&&Rt[e.namespaceURI]):!1},rn=function(e){se(t.removed,{element:e});try{g(e).removeChild(e)}catch{if(p(e),!g(e))throw ve(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},an=function(e){let t=h(e);if(t){let e=[];ie(t,t=>{se(e,t)}),ie(e,e=>{try{p(e)}catch{}})}let n=v(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;if(typeof i==`string`)try{e.removeAttribute(i)}catch{}}},on=function(e,n){try{se(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{se(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(yt||bt)try{rn(n)}catch{}else try{n.setAttribute(e,``)}catch{}},sn=function(e){let t=v(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;if(!(typeof i!=`string`||G[J(i)]))try{e.removeAttribute(i)}catch{}}},cn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();(y?y(e):e.nodeType)===qe.element&&sn(e);let n=h(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},ln=function(e){let t=null,r=null;if(vt)e=`<remove></remove>`+e;else{let t=de(e,/^[\r\n\t ]+/);r=t&&t[0]}Gt===`application/xhtml+xml`&&It===Ft&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=x?O(e):e;if(It===Ft)try{t=new l().parseFromString(i,Gt)}catch{}if(!t||!t.documentElement){t=N.createDocument(It,`template`,null);try{t.documentElement.innerHTML=Lt?S:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),It===Ft?F.call(t,mt?`html`:`body`)[0]:mt?t.documentElement:a},un=function(e){return ne.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Y=function(e){return e=fe(e,ge,` `),e=fe(e,_e,` `),e=fe(e,z,` `),e},dn=function(e){e.normalize();let t=ne.call(e.ownerDocument||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),n=t.nextNode();for(;n;)n.data=Y(n.data),n=t.nextNode();let r=e.querySelectorAll?.call(e,`template`);r&&ie(r,e=>{X(e.content)&&dn(e.content)})},fn=function(e){let t=b?b(e):null;return typeof t!=`string`||J(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==v(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==y(e)||e.childNodes!==h(e)},X=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return y(e)===qe.documentFragment}catch{return!1}},pn=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return typeof y(e)==`number`}catch{return!1}};function mn(e,n,r){e.length!==0&&ie(e,e=>{e.call(t,n,r,qt)})}let hn=function(e,t){return!!(pt&&e.hasChildNodes()&&!pn(e.firstElementChild)&&R(Ue,e.textContent)&&R(Ue,e.innerHTML)||pt&&e.namespaceURI===Ft&&t===`style`&&pn(e.firstElementChild)||e.nodeType===qe.processingInstruction||pt&&e.nodeType===qe.comment&&R(We,e.data))},gn=function(e,t){if(!at[t]&&yn(t)&&(K.tagNameCheck instanceof RegExp&&R(K.tagNameCheck,t)||K.tagNameCheck instanceof Function&&K.tagNameCheck(t)))return!1;if(Tt&&!q[t]){let t=g(e),n=h(e);if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=Et?n[i]:f(n[i],!0);t.insertBefore(r,m(e))}}}return rn(e),!0},_n=function(e){if(mn(I.beforeSanitizeElements,e,null),fn(e))return rn(e),!0;let n=J(b?b(e):e.nodeName);if(mn(I.uponSanitizeElement,e,{tagName:n,allowedTags:W}),hn(e,n))return rn(e),!0;if(at[n]||!(st.tagCheck instanceof Function&&st.tagCheck(n))&&!W[n])return gn(e,n);if((y?y(e):e.nodeType)===qe.element&&!nn(e)||(n===`noscript`||n===`noembed`||n===`noframes`)&&R(Ge,e.innerHTML))return rn(e),!0;if(ft&&e.nodeType===qe.text){let n=Y(e.textContent);e.textContent!==n&&(se(t.removed,{element:e.cloneNode()}),e.textContent=n)}return mn(I.afterSanitizeElements,e,null),!1},vn=function(e,t,r){if(ot[t]||St&&(t===`id`||t===`name`)&&(r in n||r in Jt))return!1;let i=G[t]||st.attributeCheck instanceof Function&&st.attributeCheck(t,e);if(!(lt&&R(ye,t))&&!(ct&&R(V,t))){if(!i){if(!(yn(e)&&(K.tagNameCheck instanceof RegExp&&R(K.tagNameCheck,e)||K.tagNameCheck instanceof Function&&K.tagNameCheck(e))&&(K.attributeNameCheck instanceof RegExp&&R(K.attributeNameCheck,t)||K.attributeNameCheck instanceof Function&&K.attributeNameCheck(t,e))||t===`is`&&K.allowCustomizedBuiltInElements&&(K.tagNameCheck instanceof RegExp&&R(K.tagNameCheck,r)||K.tagNameCheck instanceof Function&&K.tagNameCheck(r))))return!1}else if(!jt[t]&&!R(nt,fe(r,et,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&pe(r,`data:`)===0&&kt[e])&&!(ut&&!R($e,fe(r,et,``)))&&r)return!1}return!0},Z=B({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),yn=function(e){return!Z[le(e)]&&R(tt,e)},bn=function(e,t,n,r){if(x&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return O(r);case`TrustedScriptURL`:return k(r)}return r},Q=function(e,n,r,i){try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i),fn(e)?rn(e):oe(t.removed)}catch{on(n,e)}},xn=function(e){mn(I.beforeSanitizeAttributes,e,null);let t=e.attributes;if(!t||fn(e))return;let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:G,forceKeepAttr:void 0},r=t.length,i=J(e.nodeName);for(;r--;){let a=t[r],o=a.name,s=a.namespaceURI,c=a.value,l=J(o),u=c,d=o===`value`?u:me(u);if(n.attrName=l,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,mn(I.uponSanitizeAttribute,e,n),d=n.attrValue,Ct&&(l===`id`||l===`name`)&&pe(d,wt)!==0&&(on(o,e),d=wt+d),pt&&R(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,d)){on(o,e);continue}if(l===`attributename`&&de(d,`href`)){on(o,e);continue}if(!n.forceKeepAttr){if(!n.keepAttr){on(o,e);continue}if(!dt&&R(Ke,d)){on(o,e);continue}if(ft&&(d=Y(d)),!vn(i,l,d)){on(o,e);continue}d=bn(i,l,s,d),d!==u&&Q(e,o,s,d)}}mn(I.afterSanitizeAttributes,e,null)},Sn=function(e){let t=null,n=un(e);for(mn(I.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(mn(I.uponSanitizeShadowNode,t,null),_n(t),xn(t),X(t.content)&&Sn(t.content),(y?y(t):t.nodeType)===qe.element){let e=_(t);X(e)&&($(e),Sn(e))}mn(I.afterSanitizeShadowDOM,e,null)},$=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){Sn(e.shadow);continue}let n=e.node,r=(y?y(n):n.nodeType)===qe.element,i=h(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=b?b(n):null;if(typeof e==`string`&&J(e)===`template`){let e=n.content;X(e)&&t.push({node:e,shadow:null})}}if(r){let e=_(n);X(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Lt=!e,Lt&&(e=`<!-->`),typeof e!=`string`&&!pn(e)&&(e=be(e),typeof e!=`string`))throw ve(`dirty is not a string, aborting`);if(!t.isSupported)return e;ht?(W=gt,G=_t):Xt(n),(I.uponSanitizeElement.length>0||I.uponSanitizeAttribute.length>0)&&(W=H(W)),I.uponSanitizeAttribute.length>0&&(G=H(G)),t.removed=[];let c=Et&&typeof e!=`string`&&pn(e);if(c){let t=b?b(e):e.nodeName;if(typeof t==`string`){let e=J(t);if(!W[e]||at[e])throw ve(`root node is forbidden and cannot be sanitized in-place`)}if(fn(e))throw ve(`root node is clobbered and cannot be sanitized in-place`);try{$(e)}catch(t){throw an(e),t}}else if(pn(e))i=ln(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===qe.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),$(a);else{if(!yt&&!ft&&!mt&&e.indexOf(`<`)===-1)return x&&xt?O(e):e;if(i=ln(e),!i)return yt?null:xt?S:``}i&&vt&&rn(i.firstChild);let l=un(c?e:i);try{for(;o=l.nextNode();)_n(o),xn(o),X(o.content)&&Sn(o.content)}catch(t){throw c&&an(e),t}if(c)return ie(t.removed,e=>{e.element&&cn(e.element)}),ft&&dn(e),e;if(yt){if(ft&&dn(i),bt)for(s=re.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(G.shadowroot||G.shadowrootmode)&&(s=he.call(r,s,!0)),s}let u=mt?i.outerHTML:i.innerHTML;return mt&&W[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&R(Ve,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
5
|
+
`+u),ft&&(u=Y(u)),x&&xt?O(u):u},t.setConfig=function(){Xt(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),ht=!0,gt=W,_t=G},t.clearConfig=function(){qt=null,ht=!1,gt=null,_t=null,x=C,S=``},t.isValidAttribute=function(e,t,n){return qt||Xt({}),vn(J(e),J(t),n)},t.addHook=function(e,t){typeof t==`function`&&L(I,e)&&se(I[e],t)},t.removeHook=function(e,t){if(L(I,e)){if(t!==void 0){let n=ae(I[e],t);return n===-1?void 0:ce(I[e],n,1)[0]}return oe(I[e])}},t.removeHooks=function(e){L(I,e)&&(I[e]=[])},t.removeAllHooks=function(){I=Xe()},t}var $e=Qe();function et(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var tt=et();function nt(e){tt=e}var W={exec:()=>null};function rt(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function G(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(K.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var it=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),K={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:rt(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:rt(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:rt(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:rt(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:rt(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:rt(e=>RegExp(`^ {0,${e}}>`))},at=/^(?:[ \t]*(?:\n|$))+/,ot=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,st=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ct=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,lt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ut=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,dt=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ft=G(dt).replace(/bull/g,ut).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),pt=G(dt).replace(/bull/g,ut).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),mt=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ht=/^[^\n]+/,gt=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,_t=G(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,gt).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),vt=G(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,ut).getRegex(),yt=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,bt=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,xt=G(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,bt).replace(`tag`,yt).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),St=G(mt).replace(`hr`,ct).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,yt).getRegex(),Ct={blockquote:G(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,St).getRegex(),code:ot,def:_t,fences:st,heading:lt,hr:ct,html:xt,lheading:ft,list:vt,newline:at,paragraph:St,table:W,text:ht},wt=G(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,ct).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,yt).getRegex(),Tt={...Ct,lheading:pt,table:wt,paragraph:G(mt).replace(`hr`,ct).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,wt).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,yt).getRegex()},Et={...Ct,html:G(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,bt).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:W,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:G(mt).replace(`hr`,ct).replace(`heading`,` *#{1,6} *[^
|
|
6
|
+
]`).replace(`lheading`,ft).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Dt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,q=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ot=/^( {2,}|\\)\n(?!\s*$)/,kt=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,At=/[\p{P}\p{S}]/u,jt=/[\s\p{P}\p{S}]/u,Mt=/[^\s\p{P}\p{S}]/u,Nt=G(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,jt).getRegex(),Pt=/(?!~)[\p{P}\p{S}]/u,Ft=/(?!~)[\s\p{P}\p{S}]/u,It=/(?:[^\s\p{P}\p{S}]|~)/u,Lt=G(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,it?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),Rt=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,zt=G(Rt,`u`).replace(/punct/g,At).getRegex(),Bt=G(Rt,`u`).replace(/punct/g,Pt).getRegex(),Vt=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Ht=G(Vt,`gu`).replace(/notPunctSpace/g,Mt).replace(/punctSpace/g,jt).replace(/punct/g,At).getRegex(),Ut=G(Vt,`gu`).replace(/notPunctSpace/g,It).replace(/punctSpace/g,Ft).replace(/punct/g,Pt).getRegex(),Wt=G(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Mt).replace(/punctSpace/g,jt).replace(/punct/g,At).getRegex(),Gt=G(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,At).getRegex(),Kt=G(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Mt).replace(/punctSpace/g,jt).replace(/punct/g,At).getRegex(),J=G(/\\(punct)/,`gu`).replace(/punct/g,At).getRegex(),qt=G(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Jt=G(bt).replace(`(?:-->|$)`,`-->`).getRegex(),Yt=G(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,Jt).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Xt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Zt=G(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Xt).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Qt=G(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Xt).replace(`ref`,gt).getRegex(),$t=G(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,gt).getRegex(),en=G(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Qt).replace(`nolink`,$t).getRegex(),tn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,nn={_backpedal:W,anyPunctuation:J,autolink:qt,blockSkip:Lt,br:Ot,code:q,del:W,delLDelim:W,delRDelim:W,emStrongLDelim:zt,emStrongRDelimAst:Ht,emStrongRDelimUnd:Wt,escape:Dt,link:Zt,nolink:$t,punctuation:Nt,reflink:Qt,reflinkSearch:en,tag:Yt,text:kt,url:W},rn={...nn,link:G(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Xt).getRegex(),reflink:G(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Xt).getRegex()},an={...nn,emStrongRDelimAst:Ut,emStrongLDelim:Bt,delLDelim:Gt,delRDelim:Kt,url:G(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,tn).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:G(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,tn).getRegex()},on={...an,br:G(Ot).replace(`{2,}`,`*`).getRegex(),text:G(an.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},sn={normal:Ct,gfm:Tt,pedantic:Et},cn={normal:nn,gfm:an,breaks:on,pedantic:rn},ln={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},un=e=>ln[e];function Y(e,t){if(t){if(K.escapeTest.test(e))return e.replace(K.escapeReplace,un)}else if(K.escapeTestNoEncode.test(e))return e.replace(K.escapeReplaceNoEncode,un);return e}function dn(e){try{e=encodeURI(e).replace(K.percentDecode,`%`)}catch{return null}return e}function fn(e,t){let n=e.replace(K.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(K.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``);for(;r<n.length;r++)n[r]=n[r].trim().replace(K.slashPipe,`|`);return n}function X(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function pn(e){let t=e.split(`
|
|
7
|
+
`),n=t.length-1;for(;n>=0&&K.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
|
|
8
|
+
`)}function mn(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function hn(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function gn(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`);r.state.inLink=!0;let c={type:e[0].charAt(0)===`!`?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,c}function _n(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
9
|
+
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return r.length>=i.length?e.slice(i.length):e}).join(`
|
|
10
|
+
`)}var vn=class{options;rules;lexer;constructor(e){this.options=e||tt}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=this.options.pedantic?t[0]:pn(t[0]);return{type:`code`,raw:e,codeBlockStyle:`indented`,text:e.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=_n(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=X(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:X(t[0],`
|
|
11
|
+
`),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:X(t[0],`
|
|
12
|
+
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=X(t[0],`
|
|
13
|
+
`).split(`
|
|
14
|
+
`),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o;for(o=0;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
|
|
15
|
+
`),c=s.replace(this.rules.other.blockquoteSetextReplace,`
|
|
16
|
+
$1`).replace(this.rules.other.blockquoteSetextReplace2,``);n=n?`${n}
|
|
17
|
+
${s}`:s,r=r?`${r}
|
|
18
|
+
${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=l,e.length===0)break;let u=i.at(-1);if(u?.type===`code`)break;if(u?.type===`blockquote`){let t=u,a=t.raw+`
|
|
19
|
+
`+e.join(`
|
|
20
|
+
`),o=this.blockquote(a);i[i.length-1]=o,n=n.substring(0,n.length-t.raw.length)+o.raw,r=r.substring(0,r.length-t.text.length)+o.text;break}else if(u?.type===`list`){let t=u,a=t.raw+`
|
|
21
|
+
`+e.join(`
|
|
22
|
+
`),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
|
|
23
|
+
`);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=hn(t[2].split(`
|
|
24
|
+
`,1)[0],t[1].length),l=e.split(`
|
|
25
|
+
`,1)[0],u=!c.trim(),d=0;if(this.options.pedantic?(d=2,s=c.trimStart()):u?d=t[1].length+1:(d=c.search(this.rules.other.nonSpaceChar),d=d>4?1:d,s=c.slice(d),d+=t[1].length),u&&this.rules.other.blankLine.test(l)&&(r+=l+`
|
|
26
|
+
`,e=e.substring(l.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(d),n=this.rules.other.hrRegex(d),i=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),o=this.rules.other.htmlBeginRegex(d),f=this.rules.other.blockquoteBeginRegex(d);for(;e;){let p=e.split(`
|
|
27
|
+
`,1)[0],m;if(l=p,this.options.pedantic?(l=l.replace(this.rules.other.listReplaceNesting,` `),m=l):m=l.replace(this.rules.other.tabCharGlobal,` `),i.test(l)||a.test(l)||o.test(l)||f.test(l)||t.test(l)||n.test(l))break;if(m.search(this.rules.other.nonSpaceChar)>=d||!l.trim())s+=`
|
|
28
|
+
`+m.slice(d);else{if(u||c.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(c)||a.test(c)||n.test(c))break;s+=`
|
|
29
|
+
`+l}u=!l.trim(),r+=p+`
|
|
30
|
+
`,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items){this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]);let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&=!1;if(!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=pn(t[0]);return{type:`html`,block:!0,raw:e,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:X(t[0],`
|
|
31
|
+
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=fn(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
|
|
32
|
+
`):[],a={type:`table`,raw:X(t[0],`
|
|
33
|
+
`),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(fn(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:X(t[0],`
|
|
34
|
+
`),depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
|
|
35
|
+
`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=X(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=mn(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),gn(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return gn(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,c=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);(r=c.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,c=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=c.slice(1,-1);return{type:`em`,raw:c,text:e,tokens:this.lexer.inlineTokens(e)}}let l=c.slice(2,-2);return{type:`strong`,raw:c,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:t[0],escaped:e}}}},Z=class e{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||tt,this.options.tokenizer=this.options.tokenizer||new vn,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:K,block:sn.normal,inline:cn.normal};this.options.pedantic?(t.block=sn.pedantic,t.inline=cn.pedantic):this.options.gfm&&(t.block=sn.gfm,this.options.breaks?t.inline=cn.breaks:t.inline=cn.gfm),this.tokenizer.rules=t}static get rules(){return{block:sn,inline:cn}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(K.carriageReturn,`
|
|
36
|
+
`),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(K.tabCharGlobal,` `).replace(K.spaceLine,``));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(n=>(i=n.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let n=t.at(-1);i.raw.length===1&&n!==void 0?n.raw+=`
|
|
37
|
+
`:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
38
|
+
`)?``:`
|
|
39
|
+
`)+i.raw,n.text+=`
|
|
40
|
+
`+i.text,this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
41
|
+
`)?``:`
|
|
42
|
+
`)+i.raw,n.text+=`
|
|
43
|
+
`+i.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},t.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),t.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let t=1/0,n=e.slice(1),r;this.options.extensions.startBlock.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(a=e.substring(0,t+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let r=t.at(-1);n&&r?.type===`paragraph`?(r.raw+=(r.raw.endsWith(`
|
|
44
|
+
`)?``:`
|
|
45
|
+
`)+i.raw,r.text+=`
|
|
46
|
+
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
47
|
+
`)?``:`
|
|
48
|
+
`)+i.raw,n.text+=`
|
|
49
|
+
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,r=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)e.includes(r[0].slice(r[0].lastIndexOf(`[`)+1,-1))&&(n=n.slice(0,r.index)+`[`+`a`.repeat(r[0].length-2)+`]`+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+`++`+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+`[`+`a`.repeat(r[0].length-i-2)+`]`+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o=``,s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}a||(o=``),a=!1;let r;if(this.options.extensions?.inline?.some(n=>(r=n.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length);let n=t.at(-1);r.type===`text`&&n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(r=this.tokenizer.inlineText(i)){e=e.substring(r.raw.length),r.raw.slice(-1)!==`_`&&(o=r.raw.slice(-1)),a=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},yn=class{options;parser;constructor(e){this.options=e||tt}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(K.notSpaceStart)?.[0],i=e.replace(K.endingNewline,``)+`
|
|
50
|
+
`;return r?`<pre><code class="language-`+Y(r)+`">`+(n?i:Y(i,!0))+`</code></pre>
|
|
51
|
+
`:`<pre><code>`+(n?i:Y(i,!0))+`</code></pre>
|
|
52
|
+
`}blockquote({tokens:e}){return`<blockquote>
|
|
53
|
+
${this.parser.parse(e)}</blockquote>
|
|
54
|
+
`}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
|
55
|
+
`}hr(e){return`<hr>
|
|
56
|
+
`}list(e){let t=e.ordered,n=e.start,r=``;for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let i=t?`ol`:`ul`,a=t&&n!==1?` start="`+n+`"`:``;return`<`+i+a+`>
|
|
57
|
+
`+r+`</`+i+`>
|
|
58
|
+
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
|
|
59
|
+
`}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
|
|
60
|
+
`}table(e){let t=``,n=``;for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r=``;for(let t=0;t<e.rows.length;t++){let i=e.rows[t];n=``;for(let e=0;e<i.length;e++)n+=this.tablecell(i[e]);r+=this.tablerow({text:n})}return r&&=`<tbody>${r}</tbody>`,`<table>
|
|
61
|
+
<thead>
|
|
62
|
+
`+t+`</thead>
|
|
63
|
+
`+r+`</table>
|
|
64
|
+
`}tablerow({text:e}){return`<tr>
|
|
65
|
+
${e}</tr>
|
|
66
|
+
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
67
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Y(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=dn(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+Y(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=dn(e);if(i===null)return Y(n);e=i;let a=`<img src="${e}" alt="${Y(n)}"`;return t&&(a+=` title="${Y(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Y(e.text)}},bn=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},Q=class e{options;renderer;textRenderer;constructor(e){this.options=e||tt,this.options.renderer=this.options.renderer||new yn,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new bn}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},xn=class{options;block;constructor(e){this.options=e||tt}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?Z.lex:Z.lexInline}provideParser(e=this.block){return e?Q.parse:Q.parseInline}},Sn=new class{defaults=et();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=Q;Renderer=yn;TextRenderer=bn;Lexer=Z;Tokenizer=vn;Hooks=xn;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new yn(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new vn(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new xn;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];xn.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&xn.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Z.lex(e,t??this.defaults)}parser(e,t){return Q.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?Z.lex:Z.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?Q.parse:Q.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?Z.lex:Z.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?Q.parse:Q.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
68
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Y(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function $(e,t){return Sn.parse(e,t)}$.options=$.setOptions=function(e){return Sn.setOptions(e),$.defaults=Sn.defaults,nt($.defaults),$},$.getDefaults=et,$.defaults=tt,$.use=function(...e){return Sn.use(...e),$.defaults=Sn.defaults,nt($.defaults),$},$.walkTokens=function(e,t){return Sn.walkTokens(e,t)},$.parseInline=Sn.parseInline,$.Parser=Q,$.parser=Q.parse,$.Renderer=yn,$.TextRenderer=bn,$.Lexer=Z,$.lexer=Z.lex,$.Tokenizer=vn,$.Hooks=xn,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,Q.parse,Z.lex;var Cn=!1;function wn(){Cn||=($.setOptions({breaks:!0,gfm:!0}),$e.addHook(`afterSanitizeAttributes`,e=>{e.nodeName===`A`&&(e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`))}),!0)}function Tn(e,t){if(!e)return``;if(!t||typeof window>`u`)return En(e);try{wn();let t=$.parse(e,{async:!1});return $e.sanitize(t)}catch{return En(e)}}function En(e){return String(e).replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}function Dn({agentId:e,turnBusy:t,onCreated:n,renderHistory:r,initialConversationId:a}){let[o,s]=(0,u.useState)(null),[c,l]=(0,u.useState)(0),[d,f]=(0,u.useState)(0),[p,m]=(0,u.useState)(null),[h,g]=(0,u.useState)(null),[v,y]=(0,u.useState)(``),[b,x]=(0,u.useState)(``),[S,C]=(0,u.useState)(``),[w,T]=(0,u.useState)(!1),E=`bazilion:conversation-create:${e}`,D=(0,u.useRef)(null);(0,u.useEffect)(()=>{try{D.current=JSON.parse(sessionStorage.getItem(E)??`null`)}catch{D.current=null}},[E]);function O(){D.current=null,sessionStorage.removeItem(E)}let k=`/api/agents/${encodeURIComponent(e)}/conversations`;(0,u.useEffect)(()=>{if(!a)return;let e=new AbortController;return fetch(`${k}/${encodeURIComponent(a)}`,{signal:e.signal}).then(async t=>{if(!t.ok)throw Error(`Retained conversation is unavailable`);let n=await t.json();e.signal.aborted||(m(n.conversation),y(n.conversation.title))}).catch(t=>{e.signal.aborted||x(t.message)}),()=>e.abort()},[k,a]),(0,u.useEffect)(()=>{let e=new AbortController;return s(null),fetch(`${k}?limit=20&offset=${c}`,{signal:e.signal}).then(async t=>{if(!t.ok)throw Error(`Could not load conversations.`);let n=await t.json();e.signal.aborted||s(n)}).catch(t=>{e.signal.aborted||x(t.message)}),()=>e.abort()},[k,c,d]),(0,u.useEffect)(()=>{if(!p)return;let e=new AbortController;return g(null),C(``),fetch(`${k}/${encodeURIComponent(p.id)}`,{signal:e.signal}).then(async t=>{if(!t.ok)throw Error(`This conversation history is unavailable. You can still start a new conversation.`);let n=await t.json();e.signal.aborted||g(n.messages)}).catch(t=>{e.signal.aborted||C(t.message)}),()=>e.abort()},[k,p?.id]);async function ee(){if(!o||w||t)return;T(!0),x(``);let e=D.current??{requestId:crypto.randomUUID(),expectedSelection:o.selection};D.current=e;try{sessionStorage.setItem(E,JSON.stringify(e));let t=await fetch(k,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)}),r=await t.json();if(!t.ok)throw(t.status===409||t.status===400)&&O(),Error(r.error??`Could not create conversation.`);O(),m(null),l(0),f(e=>e+1),await n()}catch(e){x(e instanceof Error?e.message:`Could not create conversation.`)}finally{T(!1)}}async function te(){if(!(!p||w)){T(!0),x(``);try{let e=await fetch(`${k}/${encodeURIComponent(p.id)}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({title:v,expectedTitleRevision:p.titleRevision})}),t=await e.json();if(!e.ok)throw Error(t.error??`Could not rename conversation.`);m(t.conversation),f(e=>e+1)}catch(e){x(e instanceof Error?e.message:`Could not rename conversation.`)}finally{T(!1)}}}return(0,_.jsxs)(`section`,{"aria-live":`off`,className:`my-3 min-w-0 space-y-4 rounded-lg border border-fawn bg-ivory p-4`,"aria-label":`Conversation library`,children:[(0,_.jsxs)(`div`,{className:`flex flex-col items-start gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,_.jsx)(`h2`,{className:`m-0 text-lg`,children:`Conversations`}),(0,_.jsx)(i,{variant:`primary`,disabled:!o||w||t,onClick:()=>void ee(),children:`New conversation`})]}),(0,_.jsx)(`p`,{className:`m-0 text-sm`,children:`Starting a new conversation keeps previous history and saved files. Viewing history does not change the active conversation.`}),t&&(0,_.jsx)(`p`,{role:`status`,children:`Wait for the current turn to finish before starting a new conversation.`}),b&&(0,_.jsxs)(`p`,{role:`alert`,children:[b,` `,(0,_.jsx)(i,{variant:`ghost`,disabled:w,onClick:()=>{x(``),f(e=>e+1)},children:`Refresh library`})]}),o?(0,_.jsxs)(_.Fragment,{children:[!o.total&&(0,_.jsx)(`p`,{children:`No conversations yet.`}),(0,_.jsx)(`ul`,{className:`mt-4 grid list-none gap-2 p-0`,children:o.conversations.map(e=>(0,_.jsxs)(`li`,{className:`flex min-w-0 flex-col items-start gap-3 rounded border border-fawn p-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,_.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-2`,children:[(0,_.jsx)(`span`,{className:`min-w-0 break-words [overflow-wrap:anywhere]`,children:e.title}),e.id===o.selection.conversationId&&(0,_.jsx)(`strong`,{className:`shrink-0 rounded-full bg-frost px-2 py-0.5 text-xs`,children:`Active`})]}),(0,_.jsxs)(i,{variant:`ghost`,className:`max-w-full whitespace-normal break-words text-left sm:max-w-[50%]`,disabled:w,"aria-pressed":p?.id===e.id,onClick:()=>{m(e),y(e.title)},children:[`View `,e.title]})]},e.id))}),(0,_.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(i,{variant:`ghost`,disabled:w||c===0,onClick:()=>l(Math.max(0,c-20)),children:`Previous`}),(0,_.jsx)(i,{variant:`ghost`,disabled:w||c+o.conversations.length>=o.total,onClick:()=>l(c+20),children:`Next`}),(0,_.jsxs)(`span`,{className:`text-sm`,children:[o.total,` conversations`]})]})]}):(0,_.jsx)(`p`,{role:`status`,children:`Loading conversations…`}),p&&(0,_.jsxs)(`section`,{className:`space-y-4 border-t border-fawn pt-4`,"aria-label":`Retained conversation`,children:[(0,_.jsxs)(`div`,{className:`grid min-w-0 grid-cols-2 items-end gap-2 sm:grid-cols-[minmax(0,1fr)_auto_auto]`,children:[(0,_.jsxs)(`label`,{className:`col-span-2 m-0 grid min-w-0 gap-2 sm:col-span-1`,children:[`Conversation title`,(0,_.jsx)(`input`,{className:`h-11`,value:v,maxLength:200,onChange:e=>y(e.target.value)})]}),(0,_.jsx)(i,{variant:`ghost`,className:`h-11`,disabled:w||!v.trim(),onClick:()=>void te(),children:`Rename`}),(0,_.jsx)(i,{variant:`ghost`,className:`h-11`,disabled:w,onClick:()=>m(null),children:`Close history`})]}),(0,_.jsx)(`p`,{className:`m-0 text-sm`,children:`Viewing retained history. New messages still go to the active conversation.`}),S?(0,_.jsx)(`p`,{role:`alert`,children:S}):h===null?(0,_.jsx)(`p`,{role:`status`,children:`Loading history…`}):h.length?r(h):(0,_.jsx)(`p`,{children:`This conversation is empty.`})]})]})}async function On(e,t,n){return new Promise((r,i)=>{let a=indexedDB.open(`bazilion-queue-attempts`,1);a.onupgradeneeded=()=>{a.result.createObjectStore(`requests`,{keyPath:`input.requestId`}).createIndex(`agentId`,`agentId`)},a.onerror=()=>i(Error(`Local queue recovery storage is unavailable`)),a.onblocked=()=>i(Error(`Close other Bazilion tabs to open queue recovery storage`)),a.onsuccess=()=>{let o=a.result,s=o.transaction(`requests`,t===void 0?`readonly`:`readwrite`),c=s.objectStore(`requests`);if(t===null&&!n){o.close(),i(Error(`Queue request identity is required to clear recovery state`));return}let l=t===void 0?c.index(`agentId`).get(e):t===null?c.delete(n):c.put(t);s.oncomplete=()=>{o.close(),r(t===void 0?l.result??null:t)},s.onerror=s.onabort=()=>{o.close(),i(Error(`Unable to retain queue request locally; it was not acknowledged`))}}})}var kn=(0,u.forwardRef)(function({agentId:e,selection:t,onQueueMode:n,onViewConversation:r},a){let o=`/api/agents/${encodeURIComponent(e)}/queue`,[s,c]=(0,u.useState)(null),[l,d]=(0,u.useState)(``),[f,p]=(0,u.useState)(``),[m,h]=(0,u.useState)(!1),[g,v]=(0,u.useState)(!1),y=(0,u.useRef)(!1),[b,x]=(0,u.useState)(null),S=(0,u.useRef)(null),C=(0,u.useRef)(!1),w=(0,u.useRef)(!0),T=(0,u.useRef)(0);(0,u.useEffect)(()=>(w.current=!0,()=>{w.current=!1}),[]);let[E,D]=(0,u.useState)(null),[O,k]=(0,u.useState)(``),[ee,te]=(0,u.useState)([]),[A,j]=(0,u.useState)(!1),[M,N]=(0,u.useState)(0),ne=(0,u.useRef)(n);ne.current=n;async function re(){let e=++T.current,t=await fetch(`${o}?all=${+!!A}&offset=${M}`);if(!t.ok)throw Error(`Queue could not be loaded`);let n=await t.json(),r=A?await fetch(o):null,i=r?.ok?await r.json():n;return w.current&&e===T.current&&(c(n),y.current&&ne.current(i.total>0||i.control.paused||!!S.current)),n}(0,u.useEffect)(()=>{let t=!0;return On(e).then(e=>{t&&(S.current=e,x(e),y.current=!0,v(!0),re().catch(e=>d(e.message)))}).catch(e=>{t&&d(e.message)}),()=>{t=!1}},[e]),(0,u.useEffect)(()=>{re().catch(e=>d(e.message));let e=setInterval(()=>{re().catch(e=>d(e.message))},2e3);return()=>clearInterval(e)},[e,A,M]);async function ie(t){await On(e,null,t.input.requestId);let n=await On(e);S.current=n,x(n)}async function ae(t,n=!1){if(C.current||!g)return!1;if(S.current&&!n)return d(`Resolve the unacknowledged queue request before sending another.`),!1;C.current=!0,h(!0),d(``),p(``);try{await On(e,t),S.current=t,x(t);let n=await fetch(t.replacementId?`${o}/${encodeURIComponent(t.replacementId)}`:o,{method:t.replacementId?`PATCH`:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t.input)});if(!n.ok){let e=await n.json().catch(()=>({}));throw n.status>=400&&n.status<500&&await ie(t),Error(e.error??`Queue acknowledgement unavailable; retry this same request.`)}let r=await n.json();return await ie(t),p(`Follow-up ${r.status}.`),D(null),await re().catch(()=>d(`Input acknowledged; queue display could not refresh.`)),!0}catch(e){return d(e instanceof Error?e.message:`Queue request failed`),!1}finally{C.current=!1,h(!1)}}async function oe(e,t,n=`POST`){if(C.current)return!1;C.current=!0,h(!0),d(``);try{let r=await fetch(`${o}${e}`,{method:n,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!r.ok){let e=await r.json();throw Error(e.error??`Queue changed; refresh and try again`)}return await re(),!0}catch(e){return d(e instanceof Error?e.message:`Queue action failed`),await re().catch(()=>{}),!1}finally{C.current=!1,h(!1)}}(0,u.useImperativeHandle)(a,()=>({async enqueue(t,n,r){return r?ae({agentId:e,input:{requestId:crypto.randomUUID(),message:t,attachments:n,expectedSelection:r}}):(d(`Refresh conversation history before queuing input.`),!1)},async stop(){return s?oe(`/stop`,{expectedRevision:s.control.revision}):(d(`Load queue controls before stopping.`),!1)}}));async function se(e){try{let t=await fetch(`${o}/${encodeURIComponent(e.id)}/input`);if(!t.ok)throw Error(`Retained input is unavailable`);let n=await t.json();D(e),k(n.message),te(n.attachments)}catch(e){d(e instanceof Error?e.message:`Could not edit`)}}return(0,_.jsxs)(`section`,{"aria-label":`Follow-up queue`,className:`max-h-[45%] min-w-0 shrink-0 space-y-3 overflow-y-auto border-t border-frost px-5 py-4 text-sm`,children:[(0,_.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,_.jsxs)(`strong`,{className:`shrink-0`,children:[`Follow-ups `,s?.control.paused?`· Paused`:``]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[s&&(0,_.jsx)(i,{variant:`ghost`,disabled:m,onClick:()=>void oe(`/control`,{paused:!s.control.paused,expectedRevision:s.control.revision}),children:s.control.paused?`Resume queue`:`Pause queue`}),s&&(0,_.jsx)(i,{variant:`danger`,disabled:m,onClick:()=>void oe(`/stop`,{expectedRevision:s.control.revision}),children:`Stop and pause`}),(0,_.jsx)(i,{variant:`ghost`,onClick:()=>{j(!A),N(0)},children:A?`Pending`:`History`})]})]}),l&&(0,_.jsx)(`p`,{role:`alert`,className:`m-0 break-words text-danger`,children:l}),f&&(0,_.jsx)(`p`,{role:`status`,className:`m-0 text-mocha`,children:f}),b&&(0,_.jsxs)(`div`,{role:`status`,className:`flex min-w-0 flex-col gap-3 rounded-lg border border-frost bg-ivory p-3`,children:[(0,_.jsx)(`p`,{children:`A queue request has no confirmed acknowledgement. Retrying uses the same request and files.`}),(0,_.jsx)(`p`,{className:`truncate`,children:b.input.message}),(0,_.jsx)(i,{variant:`primary`,disabled:m,onClick:()=>void ae(b,!0),children:`Retry saved request`})]}),(0,_.jsxs)(`div`,{className:`min-w-0 space-y-3`,children:[s?.items.map(e=>(0,_.jsxs)(`article`,{className:`flex min-w-0 flex-col gap-3 rounded-lg border border-frost bg-ivory p-3`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(`strong`,{className:`rounded-full bg-frost px-2 py-1 text-xs capitalize`,children:e.status}),(0,_.jsx)(`span`,{className:`text-xs text-mocha`,children:e.source===`telegram`?`Telegram`:`Web / API`})]}),(0,_.jsx)(i,{variant:`ghost`,onClick:()=>r(e.conversationId),children:`View conversation`})]}),(0,_.jsx)(`p`,{className:`m-0 whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:e.text??`Input retention expired`}),e.attachments.map(e=>(0,_.jsxs)(`p`,{className:`m-0 break-all text-xs text-mocha`,children:[e.name??`Attachment`,` · `,e.byteLength,` bytes`]},e.id)),e.diagnostic&&(0,_.jsx)(`p`,{className:`m-0 break-words`,children:e.diagnostic}),e.approvalId&&(0,_.jsx)(`a`,{href:`/approvals`,children:`Review communication approval`}),e.status===`pending`&&(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(i,{variant:`ghost`,disabled:m||!!b,onClick:()=>void se(e),children:`Edit`}),(0,_.jsx)(i,{variant:`danger`,disabled:m,onClick:()=>void oe(`/${e.id}`,{expectedRevision:e.revision},`DELETE`),children:`Remove`})]}),e.status===`uncertain`&&(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`p`,{children:`This input may already have acted. Review its conversation before closing it. Closing never retries it.`}),(0,_.jsx)(i,{variant:`danger`,disabled:m,onClick:()=>void oe(`/${e.id}/reconcile`,{expectedRevision:e.revision,acknowledged:!0}),children:`Acknowledge and close`})]})]},e.id)),E&&(0,_.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-3 rounded-lg border border-frost bg-ivory p-3`,onSubmit:n=>{n.preventDefault();let r=t();r&&ae({agentId:e,replacementId:E.id,input:{requestId:crypto.randomUUID(),expectedRevision:E.revision,expectedSelection:r,message:O,attachments:ee}})},children:[(0,_.jsxs)(`label`,{className:`m-0 grid gap-2`,children:[`Edit queued input`,(0,_.jsx)(`textarea`,{"aria-label":`Edit queued input`,rows:3,className:`w-full resize-y`,value:O,onChange:e=>k(e.target.value)})]}),ee.map((e,t)=>(0,_.jsxs)(`div`,{children:[e.name??`Attachment`,` `,(0,_.jsx)(i,{variant:`ghost`,onClick:()=>te(e=>e.filter((e,n)=>n!==t)),children:`Remove attachment`})]},t)),(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(i,{variant:`primary`,type:`submit`,disabled:m||!!b,children:`Save replacement`}),(0,_.jsx)(i,{variant:`ghost`,onClick:()=>D(null),children:`Cancel edit`})]})]})]}),s&&(M>0||M+s.items.length<s.total)&&(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(i,{variant:`ghost`,disabled:M===0,onClick:()=>N(Math.max(0,M-20)),children:`Previous`}),(0,_.jsx)(i,{variant:`ghost`,disabled:M+s.items.length>=s.total,onClick:()=>N(M+20),children:`Next`})]})]})});function An({agentId:e}){let[t,n]=(0,u.useState)([]),[r,i]=(0,u.useState)(``);return(0,u.useEffect)(()=>{let t=!0,r=!1,a=async()=>{if(!r){r=!0;try{let r=await fetch(`/api/agents/${encodeURIComponent(e)}/questions`,{cache:`no-store`});if(!r.ok)throw Error(`Questions could not be refreshed`);let a=await r.json();t&&(n(a.questions),i(``))}catch(e){t&&(n([]),i(e instanceof Error?e.message:`Questions unavailable`))}finally{r=!1}}};a();let o=setInterval(()=>{a()},2e3);return()=>{t=!1,clearInterval(o)}},[e]),!t.length&&!r?null:(0,_.jsxs)(`section`,{"aria-label":`Agent questions`,className:`max-h-[40vh] min-w-0 shrink-0 space-y-3 overflow-y-auto border-t border-frost px-5 py-3`,children:[r&&(0,_.jsx)(`p`,{role:`status`,children:r}),t.filter(e=>e.status===`pending`||e.continuation===`unconfirmed`).map(e=>(0,_.jsx)(jn,{item:e},e.id)),t.some(e=>e.status!==`pending`&&e.continuation!==`unconfirmed`)&&(0,_.jsxs)(`details`,{children:[(0,_.jsx)(`summary`,{children:`Recent question outcomes`}),t.filter(e=>e.status!==`pending`&&e.continuation!==`unconfirmed`).map(e=>(0,_.jsx)(jn,{item:e},e.id))]})]})}function jn({item:e}){let t=`bazilion-question-answer:${e.agentId}:${e.id}`,[n,r]=(0,u.useState)(``),[a,o]=(0,u.useState)(``),[s,c]=(0,u.useState)(null),l=(0,u.useRef)(null),[d,f]=(0,u.useState)(!1),[p,m]=(0,u.useState)(!1),h=(0,u.useRef)(!1),[g,v]=(0,u.useState)(``),[y,b]=(0,u.useState)(``);(0,u.useEffect)(()=>{try{let e=sessionStorage.getItem(t);if(e){let t=JSON.parse(e);l.current=t,c(t)}f(!0)}catch{v(`Answer recovery storage is unavailable. Enable session storage before answering.`)}},[t]),(0,u.useEffect)(()=>{if(e.status!==`pending`)try{sessionStorage.removeItem(t),l.current=null,c(null)}catch{}},[e.status,t]);async function x(n){if(!(h.current||!d||e.status!==`pending`)){h.current=!0,m(!0),v(``);try{if(!l.current&&!n)throw Error(`Choose an answer first`);let r=l.current??{requestId:crypto.randomUUID(),conversationId:e.conversationId,answer:n};sessionStorage.setItem(t,JSON.stringify(r)),l.current=r,c(r);let i=await fetch(`/api/agents/${encodeURIComponent(e.agentId)}/questions/${encodeURIComponent(e.id)}/answer`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)}).catch(()=>{throw Error(`Answer acknowledgement unavailable. Retry the same answer.`)});if(!i.ok)throw i.status===409||i.status===404?Error(`This question is no longer answerable. Its outcome will refresh shortly.`):Error(`Answer acknowledgement unavailable. Retry the same answer.`);(await i.json()).kind===`held`?b(`Answer awaits communication approval. The Agent has not received it.`):(sessionStorage.removeItem(t),b(`Answer accepted. Waiting for saved conversation evidence that the Agent consumed it.`))}catch(e){v(e instanceof Error?e.message:`Answer failed`)}finally{h.current=!1,m(!1)}}}let S=!d||p||!!s||e.status!==`pending`||!!e.answerApprovalId;return(0,_.jsxs)(`article`,{className:`flex min-w-0 flex-col gap-3 rounded-lg border border-frost bg-ivory p-3`,children:[(0,_.jsx)(`p`,{className:`m-0 break-words font-medium`,children:e.question.prompt}),(0,_.jsxs)(`details`,{className:`text-xs text-mocha`,children:[(0,_.jsxs)(`summary`,{className:`cursor-pointer`,children:[`Question details · `,e.status]}),(0,_.jsxs)(`p`,{className:`mt-2 break-all`,children:[`Conversation `,e.conversationId,` · `,e.continuation]})]}),e.status===`pending`?(0,_.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-3`,onSubmit:e=>{e.preventDefault(),n===`other`?x({kind:`text`,text:a}):n!==``&&x({kind:`choice`,index:Number(n)})},children:[(0,_.jsxs)(`fieldset`,{disabled:S,className:`m-0 grid min-w-0 gap-2 border-0 p-0 sm:grid-cols-2`,children:[(0,_.jsx)(`legend`,{className:`sr-only`,children:`Answer this question`}),e.question.choices.map((t,i)=>(0,_.jsxs)(`label`,{className:`m-0 flex min-w-0 cursor-pointer items-center gap-2 rounded-md border border-frost px-3 py-2.5 has-[:checked]:border-sapphire has-[:checked]:bg-sapphire-glow`,children:[(0,_.jsx)(`input`,{className:`m-0 h-4 w-4 shrink-0 accent-sapphire`,type:`radio`,name:`question-${e.id}`,value:i,checked:n===String(i),onChange:()=>r(String(i))}),(0,_.jsxs)(`span`,{className:`min-w-0 break-words [overflow-wrap:anywhere]`,children:[t.label,e.question.recommendedIndex===i?` (Recommended)`:``,t.description&&(0,_.jsx)(`small`,{className:`block`,children:t.description})]})]},i)),(0,_.jsxs)(`label`,{className:`m-0 flex min-w-0 cursor-pointer items-center gap-2 rounded-md border border-frost px-3 py-2.5 has-[:checked]:border-sapphire has-[:checked]:bg-sapphire-glow`,children:[(0,_.jsx)(`input`,{className:`m-0 h-4 w-4 shrink-0 accent-sapphire`,type:`radio`,name:`question-${e.id}`,checked:n===`other`,onChange:()=>r(`other`)}),(0,_.jsx)(`span`,{children:`Other`})]}),n===`other`&&(0,_.jsxs)(`label`,{className:`m-0 grid gap-2 sm:col-span-2`,children:[`Your answer`,(0,_.jsx)(`textarea`,{rows:2,className:`w-full resize-y`,value:a,maxLength:4096,onChange:e=>o(e.target.value)})]})]}),s&&(0,_.jsxs)(`p`,{className:`break-words`,children:[`Saved answer: `,s.answer.kind===`choice`?e.question.choices[s.answer.index]?.label:s.answer.kind===`text`?s.answer.text:`Skip`]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,_.jsx)(i,{variant:`primary`,type:`submit`,disabled:S||!n||n===`other`&&(!a.trim()||new TextEncoder().encode(a).length>4096),children:`Send answer`}),(0,_.jsx)(i,{variant:`ghost`,disabled:S,onClick:()=>{x({kind:`skip`})},children:`Skip`}),s&&!e.answerApprovalId&&(0,_.jsx)(i,{variant:`ghost`,disabled:p,onClick:()=>{x()},children:`Retry same answer`})]}),(0,_.jsxs)(`p`,{className:`m-0 text-xs text-mocha`,children:[`Clarification does not grant permission. This question expires at `,new Date(e.expiresAt).toLocaleTimeString(),`.`]}),e.answerApprovalId&&(0,_.jsx)(`a`,{href:`/approvals`,children:`View communication approvals`})]}):(0,_.jsxs)(`p`,{children:[e.answer?.kind===`choice`?e.question.choices[e.answer.index]?.label:e.answer?.kind===`text`?e.answer.text:`No answer: ${e.noAnswerReason??e.status}`,`. `,e.continuation===`consumed`?`Saved in the originating conversation; task completion is separate.`:e.continuation===`interrupted`?`The waiting turn ended.`:`Consumption has not been confirmed.`]}),y&&(0,_.jsx)(`p`,{role:`status`,children:y}),g&&(0,_.jsx)(`p`,{role:`alert`,children:g})]})}var Mn=`[[bazilion:inbox-wake]]
|
|
69
|
+
`,Nn=`[conversation summary]`,Pn=40,Fn=1e4,In=320,Ln=200,Rn=()=>()=>{},zn=()=>!0,Bn=()=>!1;function Vn(e,t){let n=e.findIndex(e=>e.type===`command_approval`&&e.approval.id===t.id);if(n===-1)return[...e,{type:`command_approval`,approval:t}];let r=[...e];return r[n]={type:`command_approval`,approval:t},r}function Hn(e,t){return{message:e,attachments:t,bashApprovalMode:`interactive`,questionMode:`web`}}function Un(e){return`/api/shell-approvals?agentId=${encodeURIComponent(e)}`}var Wn=`slash commands:
|
|
70
|
+
/context — context breakdown (system prompt, tools, skills, history)
|
|
71
|
+
/compact [N] — summarize the head; keep the last N messages verbatim (default 10)
|
|
72
|
+
/new — open the retained conversation library
|
|
73
|
+
/help — show this list`;function Gn(e){if(!e)return``;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function Kn(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/(1024*1024)).toFixed(2)} MiB`}function qn(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let n=String(r.result),i=n.indexOf(`,`);t({name:e.name,data:i>=0?n.slice(i+1):n,mimeType:e.type||`application/octet-stream`})},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}var Jn=e=>e.startsWith(`image/`);function Yn(e){let t=[],n=null;for(let r of e)if(r.role===`user`)n=null,t.push({type:`user`,content:r.content,...r.images&&r.images.length>0?{images:r.images}:{}});else if(r.role===`assistant`){if(r.content&&(n=null,t.push({type:`assistant`,content:r.content})),r.toolCalls&&r.toolCalls.length>0){n||(n={type:`tool`,items:[]},t.push(n));for(let e of r.toolCalls)n.items.push({kind:`call`,id:e.id,name:e.name,body:e.arguments})}}else if(r.role===`tool`){n||(n={type:`tool`,items:[]},t.push(n));let e=r.content.startsWith(`Error:`)||r.content.startsWith(`error:`);n.items.push({kind:e?`error`:`result`,id:r.toolCallId??``,name:r.toolName??``,body:r.content,...r.codingLog?{codingLog:r.codingLog}:{}}),r.result&&(t.push({type:`result`,resultId:r.result.resultId}),n=null),r.images&&r.images.length>0&&(t.push({type:`images`,images:r.images}),n=null)}return t}function Xn({agentId:e,agentName:t,initialMessages:n,initialSessionHead:r}){let a=(0,u.useSyncExternalStore)(Rn,zn,Bn),[o,s]=(0,u.useState)(n),[c,l]=(0,u.useState)([]),d=(0,u.useRef)(new Map),[f,p]=(0,u.useState)([]),[m,h]=(0,u.useState)(!1),[g,v]=(0,u.useState)(!1),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(``),[C,w]=(0,u.useState)([]),[T,E]=(0,u.useState)(!1),[D,O]=(0,u.useState)(!1),[k,ee]=(0,u.useState)(!1),[te,A]=(0,u.useState)({}),[j,M]=(0,u.useState)({}),[N,ne]=(0,u.useState)(!1),[re,ie]=(0,u.useState)(),[ae,oe]=(0,u.useState)(!1),[se,ce]=(0,u.useState)(!1),P=(0,u.useRef)(null),[le,ue]=(0,u.useState)(r?.unavailable??!1),de=(0,u.useRef)(null),fe=(0,u.useRef)(null),pe=(0,u.useRef)(null),me=(0,u.useRef)(null),F=(0,u.useRef)(e),he=(0,u.useRef)(!1);F.current=e;let I=(0,u.useRef)(0),ge=(0,u.useRef)(0),L=(0,u.useRef)(r??{file:null,size:0}),_e=(0,u.useRef)(!1);_e.current=g;let R=g||k;(0,u.useEffect)(()=>{me.current?.abort(),me.current=null,he.current=!1,d.current.clear(),s(n),l([]),p([]),b(null),S(``),ce(!1),w([]),ue(r?.unavailable??!1),h(!1),v(!1),O(!1),ee(!1),A({}),M({}),L.current=r??{file:null,size:0}},[e]),(0,u.useEffect)(()=>{let t=new AbortController,n=!1;async function r(){try{let r=await fetch(Un(e),{signal:t.signal});if(!r.ok)return;let i=(await r.json()).approvals.filter(t=>t.agentId===e&&t.status===`pending`);if(n||i.length===0)return;sessionStorage.removeItem(`bz_pending_${e}`),he.current=!0,l(e=>i.reduce(Vn,e)),ee(!0)}catch(e){if(e.name===`AbortError`)return}}return r(),()=>{n=!0,t.abort()}},[e]);let ve=(0,u.useRef)(!0);(0,u.useLayoutEffect)(()=>{let e=de.current;e&&ve.current&&(e.scrollTop=e.scrollHeight)});function z(){let e=de.current;if(!e){ve.current=!0;return}ve.current=e.scrollHeight-e.scrollTop-e.clientHeight<Pn}(0,u.useLayoutEffect)(()=>{let e=pe.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,Ln)}px`)},[x]),(0,u.useEffect)(()=>{let t=`bz_pending_${e}`;function n(){document.visibilityState===`visible`&&sessionStorage.getItem(t)&&(sessionStorage.removeItem(t),O(!0))}return document.addEventListener(`visibilitychange`,n),()=>document.removeEventListener(`visibilitychange`,n)},[e]),(0,u.useEffect)(()=>{if(!r)return;let t=!1,n=null;async function i(){if(!t){if(!document.hidden&&!_e.current&&!D)try{let t=await fetch(`/api/agents/${encodeURIComponent(e)}/sessions/head`);if(t.ok){let e=await t.json();if(typeof e.size==`number`){let t=L.current;(e.unavailable!==t.unavailable||e.file!==t.file||e.size!==t.size)&&O(!0)}}}catch{}n=setTimeout(i,Fn)}}return n=setTimeout(i,Fn),()=>{t=!0,n&&clearTimeout(n)}},[e,r,D]);async function ye(){if(!_e.current)try{let t=await fetch(`/api/agents/${encodeURIComponent(e)}/sessions/messages`);if(!t.ok)throw Error(`Conversation history is unavailable. Your draft is preserved.`);let n=await t.json();if(F.current!==e)return;ue(n.head.unavailable??!1),s(n.messages),l([]),b(null),L.current=n.head,O(!1)}catch(e){V(e instanceof Error?e.message:`Could not refresh conversation`)}}async function B(){if(F.current===e)try{let t=await fetch(`/api/agents/${encodeURIComponent(e)}/sessions/head`);if(!t.ok)return;let n=await t.json();if(F.current===e&&typeof n.size==`number`){let e=L.current.selection;if(e?.conversationId&&e.conversationId!==n.selection?.conversationId){O(!0);return}ue(n.unavailable??!1),L.current=n}}catch{}}function V(e){z(),p(t=>[...t,{id:I.current++,content:e,afterIdx:ge.current}])}async function H(){try{let t=await fetch(`/api/agents/${encodeURIComponent(e)}/chat/context`);if(!t.ok){V(`/context failed: ${t.statusText}`);return}let n=await t.json(),r=(e,t)=>`${e.toLocaleString()} chars (~${t.toLocaleString()} tok)`,i=[];i.push(`context for ${n.agentId}`),i.push(`model: ${n.model}`),i.push(``),i.push(`system prompt: ${r(n.systemPrompt.chars,n.systemPrompt.tokens)}`);for(let e of n.systemPrompt.files)i.push(` - ${e.name}: ${e.chars.toLocaleString()} chars`);i.push(``),i.push(`tools: ${n.tools.count} (${n.tools.schemaChars.toLocaleString()} chars of schema)`);for(let e of n.tools.entries.slice(0,5))i.push(` - ${e.name}: ${e.schemaChars.toLocaleString()} chars`);if(n.skills.count>0){i.push(``),i.push(`skills: ${n.skills.count}`);for(let e of n.skills.entries.slice(0,10))i.push(` - ${e.name}: ${e.blockChars.toLocaleString()} chars`)}i.push(``),i.push(`history: ${n.history.messageEntries} messages / ${n.history.compactionEntries} compactions`),i.push(` ${r(n.history.chars,n.history.tokensEstimate)}`),i.push(` bytes on disk: ${Kn(n.history.bytes)}`),i.push(``),i.push(`TOTAL: ${r(n.totals.chars,n.totals.tokens)}`),V(i.join(`
|
|
74
|
+
`))}catch(e){V(`/context failed: ${e.message}`)}}async function be(t){if(o.length<2){V(`/compact: need ≥2 messages to compact`);return}let n,r=t.trim();if(r){let e=Number(r);Number.isFinite(e)&&e>=0&&(n=Math.floor(e))}Ce(),v(!0),h(!0);try{let t=await fetch(`/api/agents/${encodeURIComponent(e)}/chat/compact`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({keepTail:n,expectedSelection:L.current.selection})});if(!t.ok){let e=t.statusText;try{e=(await t.json()).error||e}catch{}V(`/compact failed: ${e}`);return}let r=await t.json();V(`/compact: ${r.before} → ${r.after} entries (${r.summarized} summarized, ${r.keptTail} kept verbatim; ~${r.tokensBefore.toLocaleString()} → ~${r.tokensAfter.toLocaleString()} tok). reloading…`),setTimeout(()=>window.location.reload(),400)}catch(e){V(`/compact failed: ${e.message}`)}finally{h(!1),v(!1)}}async function U(e){let t=e.trim();if(!t.startsWith(`/`))return!1;let n=t.split(/\s+/),r=(n[0]??``).toLowerCase(),i=n.slice(1).join(` `);switch(r){case`/help`:return V(Wn),!0;case`/context`:return await H(),!0;case`/new`:return ne(!0),!0;case`/compact`:return await be(i),!0;default:return!1}}function xe(){for(let e=o.length-1;e>=0;e--)if(o[e]?.role===`user`)return e;return-1}function Se(){if(c.length>0||R)return;let e=xe();if(e===-1)return;let t=o[e];t&&(b(e),S(t.content),pe.current?.focus())}function Ce(){b(null)}async function we(e){if(!e)return;let t=Array.from(e);if(t.length===0)return;let n=await Promise.all(t.map(qn));w(e=>[...e,...n].slice(0,16))}function Te(e){let t=Array.from(e.clipboardData.files);t.some(e=>e.type.startsWith(`image/`))&&(e.preventDefault(),we(t))}function Ee(e){Array.from(e.dataTransfer.types).includes(`Files`)&&(e.preventDefault(),E(!0))}function De(e){e.currentTarget===e.target&&E(!1)}function Oe(e){e.dataTransfer.files.length!==0&&(e.preventDefault(),E(!1),we(e.dataTransfer.files))}let ke=(0,u.useCallback)(async t=>{let n=C;if(!t.trim()&&n.length===0)return;if(!se){V(`Queue status is loading. Your draft is preserved.`);return}if(R||ae){await P.current?.enqueue(t,n,L.current.selection)&&F.current===e&&(S(e=>e===t?``:e),w(e=>e===n?[]:e));return}if(S(``),await U(t))return;w([]);let r=null;if(y!==null){let n=y;try{let i=await fetch(`/api/agents/${encodeURIComponent(e)}/chat/truncate`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({keepCount:n,expectedSelection:L.current.selection})});if(!i.ok){let e=i.statusText;try{e=(await i.json()).error||e}catch{}S(t),V(`Could not replace the last turn: ${e}`);return}r=o.slice(0,n),s(r),b(null)}catch(e){S(t),V(`Could not replace the last turn: ${e.message}`);return}}z();let i=n.filter(e=>Jn(e.mimeType)),a=n.filter(e=>!Jn(e.mimeType));l([{type:`user`,content:t,...i.length>0?{images:i}:{},...a.length>0?{files:a.map(e=>({name:e.name??`file`}))}:{}}]),ee(!1),A({}),M({}),he.current=!1,sessionStorage.setItem(`bz_pending_${e}`,`1`);let c=new AbortController;me.current=c,v(!0),h(!0);let u=!1;try{let r=await fetch(`/api/agents/${encodeURIComponent(e)}/chat`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...Hn(t,n),expectedSelection:L.current.selection}),signal:c.signal});if(r.status===202){let t=await r.json();l(e=>[...e,{type:`error`,content:`[approval pending] ${t.approvalId} · expires ${new Date(t.expiresAt).toLocaleString()} · review in /approvals`}]),sessionStorage.removeItem(`bz_pending_${e}`);return}if(r.status===409){S(t),w(n),l([]),O(!0),sessionStorage.removeItem(`bz_pending_${e}`),V(`Conversation changed. Refresh history, then review and send your preserved draft.`);return}if(!r.ok||!r.body){let e=r.statusText;try{e=(await r.json()).error||e}catch{}l(t=>[...t,{type:`error`,content:`[error] ${e}`}]);return}let i=r.headers.get(`x-bazilion-conversation-selection`);if(i)try{let e=JSON.parse(i);typeof e.conversationId==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0&&(L.current={...L.current,selection:e})}catch{}let a=r.body.getReader(),o=new TextDecoder,s=``;for(;;){let{done:e,value:t}=await a.read();if(e)break;s+=o.decode(t,{stream:!0});let n=s.split(`
|
|
75
|
+
`);s=n.pop()??``;for(let e of n){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}(t.kind===`done`||t.kind===`fatal`)&&(u=!0),Ae(t)}}if(s.trim())try{let e=JSON.parse(s);(e.kind===`done`||e.kind===`fatal`)&&(u=!0),Ae(e)}catch{}await B(),sessionStorage.removeItem(`bz_pending_${e}`)}catch(t){t.name!==`AbortError`&&l(e=>[...e,{type:`error`,content:`[network error] ${t.message}`}]),sessionStorage.removeItem(`bz_pending_${e}`)}finally{F.current===e&&me.current===c&&(!u&&he.current&&ee(!0),h(!1),v(!1),me.current=null)}},[e,y,o,R,ae,se,C]);function Ae(t){if(F.current!==e)return;if(t.kind===`fatal`){he.current=!1,l(e=>[...e.map(e=>e.type===`command_approval`&&e.approval.status===`pending`?{type:`command_approval`,approval:{...e.approval,status:`cancelled`}}:e),{type:`error`,content:`[fatal] ${t.error}`}]),ee(!1);return}if(t.kind===`done`){he.current=!1,s(t.messages),l([]),ee(!1),A({}),M({});return}if(t.kind!==`event`)return;let n=t.event;if(z(),n.type!==`user_message`){if(n.type===`assistant_delta`){h(!1),l(e=>{let t=[...e],r=t[t.length-1];return r?.type===`assistant`?t[t.length-1]={type:`assistant`,content:r.content+n.delta}:t.push({type:`assistant`,content:n.delta}),t});return}if(n.type===`assistant_message`){h(!1),l(e=>{let t=[...e];return t[t.length-1]?.type===`assistant`?t[t.length-1]={type:`assistant`,content:n.text}:t.push({type:`assistant`,content:n.text}),t});return}if(n.type===`command_approval`){if(n.approval.agentId!==e)return;he.current=!0,h(n.approval.status!==`pending`&&n.approval.status!==`cancelled`),l(e=>Vn(e,n.approval));return}if(n.type===`coding_progress`){l(e=>tr(e,n));return}if(n.type===`tool_call`||n.type===`tool_result`||n.type===`tool_error`){h(n.type!==`tool_call`);let e=n.type===`tool_call`?{kind:`call`,id:n.id,name:n.name,body:n.arguments}:n.type===`tool_result`?{kind:`result`,id:n.id,name:n.name,body:n.result}:{kind:`error`,id:n.id,name:n.name,body:n.error};if(n.type===`tool_result`&&[`repository_context`,`coding_environment`,`coding_command`,`coding_receipt`,`coding_log`,`source_snapshot`].includes(n.name))for(d.current.set(`${n.name}:${n.id}`,n.result);d.current.size>20;)d.current.delete(d.current.keys().next().value);let t=n.type===`tool_result`?n.images:void 0;l(r=>{let i=[...r.map(e=>e.type===`tool`?{...e,items:e.items.filter(e=>!(e.kind===`progress`&&e.id===n.id))}:e)],a=i[i.length-1];return a?.type===`tool`?i[i.length-1]={type:`tool`,items:[...a.items,e]}:i.push({type:`tool`,items:[e]}),t&&t.length>0&&i.push({type:`images`,images:t}),i});return}if(n.type===`file`){if(n.result){let e=n.result.resultId;l(t=>[...t,{type:`result`,resultId:e}]);return}l(e=>[...e,{type:`file`,name:n.name,mimeType:n.mimeType,data:n.data}]);return}n.type===`error`&&l(e=>[...e,{type:`error`,content:`[error] ${n.error}`}])}}async function je(t){if(F.current!==e)return null;try{let n=await fetch(Un(e));if(!n.ok)return null;let r=await n.json();if(F.current!==e)return null;let i=r.approvals.find(n=>n.id===t&&n.agentId===e);return i&&l(e=>Vn(e,i)),i??null}catch{return null}}async function Me(t,n){if(!(t.agentId!==e||t.status!==`pending`)){A(e=>({...e,[t.id]:!0})),M(e=>{let n={...e};return delete n[t.id],n});try{let r=await fetch(`/api/shell-approvals/${encodeURIComponent(t.id)}`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({decision:n})}),i=await r.json().catch(()=>null);if(F.current!==e)return;if(i?.approval?.agentId===e&&l(e=>Vn(e,i.approval)),!r.ok){let e=i?.error??`Decision failed (${r.status})`,n=er(e);if(n){l(e=>Vn(e,{...t,status:n}));return}throw Error(e)}}catch(n){let r=await je(t.id);if(F.current!==e)return;(!r||r.status===`pending`)&&M(e=>({...e,[t.id]:n instanceof Error?n.message:String(n)}))}finally{F.current===e&&A(e=>({...e,[t.id]:!1}))}}}async function Ne(){!await P.current?.stop()&&F.current===e&&V(`Stop was not confirmed. Check queue controls and try again; the active response may still be running.`)}function Pe(e){e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),ke(x))}let Fe=Yn(o.map(e=>{if(e.role!==`tool`||!e.toolCallId||!e.toolName)return e;let t=d.current.get(`${e.toolName}:${e.toolCallId}`);return t===void 0?e:{...e,content:t}}));ge.current=Fe.length+c.length;let Ie=(()=>{if(c.length>0||R)return-1;for(let e=Fe.length-1;e>=0;e--)if(Fe[e]?.type===`user`)return e;return-1})(),Le=(()=>{if(y===null)return-1;let e=0;for(let t=0;t<Fe.length;t++)if(Fe[t]?.type===`user`){if(e===o.slice(0,y+1).filter(e=>e.role===`user`).length-1)return t;e++}return Ie})();return(0,_.jsxs)(`div`,{className:`relative flex h-full flex-col overflow-hidden rounded-[16px] border border-frost bg-snow shadow-baziu-sm`,onDragOver:Ee,onDragLeave:De,onDrop:Oe,children:[T&&(0,_.jsx)(`div`,{className:`pointer-events-none absolute inset-0 z-10 flex items-center justify-center rounded-[16px] border-2 border-dashed border-sapphire bg-sapphire-glow/80 text-[0.95em] font-medium text-sapphire-deep`,children:`drop images or files to attach`}),(0,_.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-b border-frost px-4 py-2.5`,children:[(0,_.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,_.jsx)(`a`,{href:`/`,className:`inline-flex h-7 items-center rounded-md border border-frost px-2 text-xs font-semibold text-mocha lg:hidden`,children:`← agents`}),(0,_.jsx)(`h1`,{className:`truncate font-display text-[1.2rem] text-charcoal`,children:t})]}),(0,_.jsx)(`a`,{href:`/agents/${e}?mode=settings`,className:`shrink-0 text-xs text-mocha-light hover:text-sapphire`,children:`Manage agent →`})]}),(0,_.jsx)(`div`,{className:`mx-5 mt-2`,children:(0,_.jsx)(i,{variant:`ghost`,"aria-expanded":N,onClick:()=>ne(e=>!e),children:N?`Close conversations`:`Conversations`})}),le&&(0,_.jsx)(`p`,{role:`alert`,className:`mx-5 mt-2 text-sm`,children:`Selected conversation history is unavailable. Open Conversations to start a new one; retained history and files stay listed.`}),D&&(0,_.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"aria-atomic":`true`,className:`mx-5 mt-2 flex items-center gap-2 rounded-md border border-sapphire bg-frost px-4 py-2 text-[0.86em] text-mocha`,children:[(0,_.jsx)(`span`,{className:`h-2 w-2 flex-none rounded-full bg-sapphire`,"aria-hidden":`true`}),(0,_.jsx)(`span`,{className:`flex-1`,children:k?`the recovered turn has new activity — reload to see it`:`new activity from another source — reload to see it`}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>void ye(),className:`rounded-sm bg-sapphire px-3 py-1 text-[0.92em] text-snow hover:opacity-90`,children:`reload`}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>O(!1),className:`px-1 text-mocha-light hover:text-mocha`,"aria-label":`dismiss`,children:`×`})]}),(0,_.jsxs)(`div`,{ref:de,onScroll:z,role:`log`,"aria-label":`Conversation with ${t}`,"aria-live":`polite`,"aria-relevant":`additions`,"aria-busy":R,className:`min-h-0 flex-1 overflow-y-auto px-5 py-5 ${y===null?``:`is-editing`}`,children:[N&&(0,_.jsx)(Dn,{initialConversationId:re,agentId:e,turnBusy:R,onCreated:ye,renderHistory:e=>(0,_.jsx)(ar,{messages:e})},e),!le&&Fe.length===0&&c.length===0&&f.length===0&&(0,_.jsx)(`p`,{className:`py-12 text-center italic text-mocha-light`,children:`Start a conversation…`}),(()=>{let e=[],t=0,n=n=>{for(;t<f.length&&f[t].afterIdx<=n;){let n=f[t];e.push((0,_.jsx)(Zn,{entry:{type:`system`,content:n.content},markdownReady:a,onCommandApprovalDecision:Me},`y-${n.id}`)),t++}};n(0);for(let t=0;t<Fe.length;t++){let r=Fe[t];e.push((0,_.jsx)(Zn,{entry:r,markdownReady:a,isLastUser:t===Ie&&y===null,isWillDrop:Le!==-1&&t>=Le,onEdit:Se,onCommandApprovalDecision:Me,commandApprovalBusy:r.type===`command_approval`&&!!te[r.approval.id],commandApprovalError:r.type===`command_approval`?j[r.approval.id]:void 0},`s-${t}`)),n(t+1)}for(let t=0;t<c.length;t++){let r=c[t];e.push((0,_.jsx)(Zn,{entry:r,markdownReady:a,onCommandApprovalDecision:Me,commandApprovalBusy:r.type===`command_approval`&&!!te[r.approval.id],commandApprovalError:r.type===`command_approval`?j[r.approval.id]:void 0},`l-${t}`)),n(Fe.length+t+1)}for(;t<f.length;){let n=f[t];e.push((0,_.jsx)(Zn,{entry:{type:`system`,content:n.content},markdownReady:a,onCommandApprovalDecision:Me},`y-${n.id}`)),t++}return e})(),m&&(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-1 py-1 text-[0.85em] text-mocha-light`,children:[(0,_.jsx)(ir,{}),(0,_.jsx)(ir,{delay:`0.15s`}),(0,_.jsx)(ir,{delay:`0.3s`}),(0,_.jsx)(`span`,{children:`agent is thinking…`})]})]}),(0,_.jsx)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:R?`${t} is responding.`:`Conversation ready.`}),y!==null&&(0,_.jsxs)(`div`,{className:`flex items-center gap-2 border-t border-frost bg-sapphire-glow px-5 py-2 text-[0.85em] text-sapphire-deep`,children:[(0,_.jsx)(`span`,{children:`editing last message — submit to replace, or`}),(0,_.jsx)(`button`,{type:`button`,onClick:Ce,className:`ml-auto rounded-sm border border-sapphire-light bg-transparent px-2 py-0.5 text-[0.92em] text-sapphire-deep hover:bg-snow`,children:`cancel`})]}),C.length>0&&(0,_.jsx)(`div`,{className:`flex max-h-24 shrink-0 flex-wrap gap-2 overflow-y-auto border-t border-frost bg-ivory px-5 pt-3`,children:C.map((e,t)=>{let n=()=>w(e=>e.filter((e,n)=>n!==t));return Jn(e.mimeType)?(0,_.jsxs)(`div`,{className:`relative`,children:[(0,_.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.data}`,alt:`pending attachment`,className:`h-16 w-16 rounded-md border border-frost object-cover`}),(0,_.jsx)(`button`,{type:`button`,onClick:n,className:`absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full border border-frost bg-snow text-[0.7em] text-mocha hover:border-sapphire hover:text-sapphire`,"aria-label":`remove attachment`,children:`✕`})]},`${e.mimeType}-${t}`):(0,_.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-md border border-frost bg-snow px-2 py-1 text-[0.82em] text-mocha`,children:[(0,_.jsx)(`span`,{children:`📄`}),(0,_.jsx)(`span`,{className:`max-w-[160px] truncate`,children:e.name??`file`}),(0,_.jsx)(`button`,{type:`button`,onClick:n,className:`text-[0.85em] text-mocha hover:text-sapphire`,"aria-label":`remove attachment`,children:`✕`})]},`${e.name??`file`}-${t}`)})}),(0,_.jsx)(kn,{onViewConversation:e=>{ie(e),ne(!0)},ref:P,agentId:e,selection:()=>L.current.selection,onQueueMode:e=>{oe(e),ce(!0)}},e),(0,_.jsx)(An,{agentId:e},`questions-${e}`),(0,_.jsxs)(`form`,{className:`grid shrink-0 grid-cols-[auto_minmax(0,1fr)] items-end gap-2 border-t border-frost bg-ivory px-3 py-3 sm:grid-cols-[auto_minmax(0,1fr)_auto] sm:px-5`,onSubmit:e=>{e.preventDefault(),ke(x)},children:[(0,_.jsx)(`input`,{ref:fe,type:`file`,multiple:!0,className:`hidden`,onChange:e=>{we(e.target.files),e.target.value=``}}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>fe.current?.click(),title:`attach images or files`,"aria-label":`attach files`,className:`flex h-11 items-center justify-center rounded-md border-[1.5px] border-frost bg-snow px-3 py-2 text-[1em] text-mocha transition-colors hover:border-sapphire hover:text-sapphire disabled:cursor-not-allowed disabled:opacity-50`,children:`📎`}),(0,_.jsx)(`textarea`,{ref:pe,rows:1,value:x,onChange:e=>S(e.target.value),onKeyDown:Pe,onPaste:Te,placeholder:`Write a message…`,title:`Shift+Enter for a new line. Paste or attach files with the paperclip.`,autoComplete:`off`,"aria-label":`Message ${t}`,className:`max-h-[200px] min-h-11 min-w-0 flex-1 resize-none overflow-y-auto rounded-md border-[1.5px] border-frost bg-snow px-3 py-2 text-[0.93em] leading-[1.45] text-chocolate outline-none transition-colors focus:border-sapphire focus:shadow-[0_0_0_3px_var(--color-sapphire-glow)]`}),(0,_.jsxs)(`div`,{className:`col-span-2 flex flex-wrap justify-end gap-2 sm:col-span-1`,children:[(0,_.jsx)(i,{variant:`primary`,type:`submit`,className:`min-h-11 whitespace-normal text-center`,disabled:!x.trim()&&C.length===0,children:R||ae?`Queue follow-up`:`Send`}),R&&(0,_.jsx)(i,{variant:`danger`,className:`min-h-11`,onClick:()=>void Ne(),"aria-label":`Stop response and pause queue`,children:`Stop`})]})]})]})}function Zn({entry:e,markdownReady:t,isLastUser:n,isWillDrop:r,onEdit:i,onCommandApprovalDecision:a,commandApprovalBusy:o,commandApprovalError:c}){let u=r?`opacity-40 [&_.bubble-content]:line-through`:``;if(e.type===`user`){if(e.content.startsWith(Mn)){let t=e.content.slice(24);return(0,_.jsxs)(`details`,{className:`my-3 rounded-lg border border-fawn bg-ivory px-3 py-2 text-sm text-mocha ${u}`,"aria-label":`Teammate update`,children:[(0,_.jsx)(`summary`,{className:`cursor-pointer font-medium`,children:l(t)}),(0,_.jsx)(`p`,{className:`mt-2 text-xs`,children:`Original message and Agent instructions`}),(0,_.jsx)(`pre`,{className:`mt-1 max-h-64 overflow-auto whitespace-pre-wrap break-words text-xs`,children:t})]})}return(0,_.jsxs)(`div`,{className:`team relative my-4 flex flex-col items-end ${u}`,children:[(0,_.jsx)(`span`,{className:`sr-only`,children:`you`}),e.images&&e.images.length>0&&(0,_.jsx)(`div`,{className:`mb-1 flex max-w-[85%] flex-wrap justify-end gap-1`,children:e.images.map((e,t)=>(0,_.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.data}`,alt:`attachment`,className:`max-h-48 rounded-lg border border-sapphire-light`},t))}),e.files&&e.files.length>0&&(0,_.jsx)(`div`,{className:`mb-1 flex max-w-[85%] flex-wrap justify-end gap-1`,children:e.files.map((e,t)=>(0,_.jsxs)(`span`,{className:`flex items-center gap-1 rounded-md border border-sapphire-light bg-sapphire-glow px-2 py-1 text-[0.8em] text-chocolate`,children:[`📄 `,(0,_.jsx)(`span`,{className:`max-w-[180px] truncate`,children:e.name})]},t))}),e.content&&(0,_.jsx)(`div`,{className:`bubble-content max-w-[85%] whitespace-pre-wrap break-words rounded-[14px_14px_4px_14px] border border-sapphire-light bg-sapphire-glow px-3 py-2 text-chocolate`,children:e.content}),n&&i&&(0,_.jsx)(`button`,{type:`button`,onClick:i,title:`edit and resend — replaces the last turn`,className:`absolute left-1 top-1 rounded-sm border border-fawn bg-ivory px-2 py-0.5 text-[0.78em] font-medium text-mocha opacity-65 transition hover:border-sapphire hover:bg-sapphire-glow hover:text-sapphire hover:opacity-100 team-hover:opacity-100 team-focus-within:opacity-100`,children:`edit`})]})}if(e.type===`assistant`){if(e.content.startsWith(Nn)){let n=e.content.slice(22).trim();return(0,_.jsx)(`div`,{className:`my-3 border-y border-dashed border-frost py-2 text-[0.85em] italic text-mocha-light ${u}`,children:(0,_.jsxs)(`details`,{children:[(0,_.jsx)(`summary`,{className:`cursor-pointer select-none text-center [&::-webkit-details-marker]:hidden`,children:`— conversation summary (click to expand) —`}),(0,_.jsx)(`div`,{className:`md-content mt-2 rounded-sm bg-frost/40 p-2 not-italic`,dangerouslySetInnerHTML:{__html:Tn(n,t)}})]})})}return e.content.startsWith(`[error]`)||e.content.startsWith(`[fatal]`)||e.content.startsWith(`[network error]`)?(0,_.jsxs)(`div`,{className:`my-4 flex flex-col items-start ${u}`,children:[(0,_.jsx)(`span`,{className:`mb-1 text-[0.72em] font-semibold uppercase tracking-wider text-danger`,children:`error`}),(0,_.jsx)(`div`,{className:`bubble-content rounded-r-sm border-l-[3px] border-l-danger bg-danger/10 py-1 pl-3 pr-2 leading-[1.55]`,dangerouslySetInnerHTML:{__html:Tn(e.content,t)}})]}):(0,_.jsxs)(`div`,{className:`my-4 flex flex-col items-start ${u}`,children:[(0,_.jsx)(`span`,{className:`sr-only`,children:`agent`}),(0,_.jsx)(`div`,{className:`md-content bubble-content w-full leading-[1.55] text-chocolate`,dangerouslySetInnerHTML:{__html:Tn(e.content,t)}})]})}if(e.type===`tool`)return(0,_.jsx)(nr,{items:e.items,dropCls:u});if(e.type===`images`)return(0,_.jsx)(`div`,{className:`my-2 space-y-2 ${u}`,children:e.images.map((e,t)=>(0,_.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.data}`,alt:`screenshot`,className:`block max-w-full rounded-lg border border-fawn`},t))});if(e.type===`result`)return(0,_.jsx)(s,{resultId:e.resultId});if(e.type===`file`){let t=e.mimeType.startsWith(`image/`),n=`data:${e.mimeType};base64,${e.data}`;return(0,_.jsxs)(`div`,{className:`my-2 ${u}`,children:[t&&(0,_.jsx)(`img`,{src:n,alt:e.name,className:`mb-1 block max-w-full rounded-lg border border-fawn`}),(0,_.jsxs)(`a`,{href:n,download:e.name,className:`inline-flex items-center gap-2 rounded-md border border-fawn bg-ivory px-3 py-2 text-[0.88em] text-mocha hover:border-sapphire hover:text-sapphire`,children:[(0,_.jsx)(`span`,{children:`📄`}),(0,_.jsx)(`span`,{className:`max-w-[260px] truncate`,children:e.name}),(0,_.jsx)(`span`,{className:`text-[0.85em] opacity-70`,children:`download`})]})]})}return e.type===`command_approval`?(0,_.jsx)(Qn,{approval:e.approval,busy:o,error:c,onDecision:a}):e.type===`system`?(0,_.jsxs)(`div`,{className:`my-3 rounded-r-sm border-l-[3px] border-sapphire bg-sapphire-glow px-3 py-1 font-mono text-[0.88em] text-sapphire-deep ${u}`,children:[(0,_.jsx)(`span`,{className:`mr-2 font-semibold uppercase tracking-wider opacity-80`,children:`system`}),(0,_.jsx)(`span`,{className:`whitespace-pre-wrap`,children:e.content})]}):e.type===`error`?(0,_.jsx)(`div`,{className:`my-3 rounded-r-sm border-l-[3px] border-danger bg-danger/10 px-3 py-1 text-[0.92em] text-danger ${u}`,children:e.content}):null}function Qn({approval:e,busy:t=!1,error:n,onDecision:r}){let a=e.status===`pending`;return(0,_.jsxs)(`section`,{className:`my-3 rounded-lg border border-danger/50 bg-danger/5 p-4 text-chocolate`,"aria-label":`Shell command approval`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`p`,{className:`m-0 text-[0.72em] font-semibold uppercase tracking-wider text-danger`,children:`Shell command approval`}),(0,_.jsx)(`h2`,{className:`m-0 mt-1 font-body text-[0.95em] font-semibold`,children:a?`A risky command is waiting for you`:`Command decision recorded`})]}),(0,_.jsx)(`span`,{className:`rounded-full border border-danger/30 px-2 py-0.5 text-[0.75em] font-semibold uppercase tracking-wide text-danger`,children:e.status.replaceAll(`_`,` `)})]}),(0,_.jsx)(`pre`,{className:`mt-3 max-h-48 overflow-auto whitespace-pre-wrap break-words rounded-md border border-fawn bg-snow p-3 font-mono text-[0.82em] leading-[1.45] text-charcoal`,children:e.command}),(0,_.jsx)(`ul`,{className:`mt-3 space-y-1.5 pl-5 text-[0.84em] leading-[1.4] text-mocha`,children:e.risks.map(e=>(0,_.jsxs)(`li`,{children:[(0,_.jsx)(`span`,{className:`font-medium text-chocolate`,children:e.message}),` `,(0,_.jsx)(`code`,{className:`text-[0.9em]`,children:e.code})]},`${e.code}:${e.span.start}:${e.span.end}`))}),a?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(`p`,{className:`mt-3 text-[0.78em] text-mocha-light`,children:[`This approval expires`,` `,(0,_.jsx)(`time`,{dateTime:new Date(e.expiresAt).toISOString(),children:new Date(e.expiresAt).toLocaleString()}),`. Deny blocks only this command; cancel stops the whole turn.`]}),n&&(0,_.jsx)(`p`,{role:`alert`,className:`mt-2 rounded-md bg-danger/10 px-3 py-2 text-[0.82em] text-danger`,children:n}),r&&(0,_.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,_.jsx)(i,{variant:`primary`,disabled:t,onClick:()=>r(e,`deny`),children:`Deny`}),(0,_.jsx)(i,{variant:`danger`,disabled:t,onClick:()=>r(e,`allow`),children:`Allow once`})]})]}):(0,_.jsx)(`p`,{role:`status`,className:`mt-3 text-[0.84em] font-medium text-mocha`,children:$n(e.status)})]})}function $n(e){switch(e){case`pending`:return`Waiting for a decision.`;case`allowed`:return`Allowed once — the command may run for this tool call only.`;case`denied`:return`Denied — the command was not run.`;case`auto_denied`:return`Automatically denied — no interactive approval path was available.`;case`expired`:return`Expired — the command was not run.`;case`cancelled`:return`Cancelled — the command was not run.`}}function er(e){if(!e.startsWith(`shell approval already decided: `))return null;let t=e.slice(32);switch(t){case`allowed`:case`denied`:case`auto_denied`:case`expired`:case`cancelled`:return t;default:return null}}function tr(e,t){let n={kind:`progress`,id:t.id,name:`coding_command`,body:t.output,elapsedMs:t.elapsedMs,truncated:t.truncated};for(let r=e.length-1;r>=0;r--){let i=e[r];if(i?.type!==`tool`)continue;let a=i.items.findIndex(e=>e.id===t.id);if(a<0)continue;let o=[...i.items];o[a]=n;let s=[...e];return s[r]={type:`tool`,items:o},s}let r=e[e.length-1];return r?.type===`tool`?[...e.slice(0,-1),{type:`tool`,items:[...r.items,n]}]:[...e,{type:`tool`,items:[n]}]}function nr({items:e,dropCls:t}){let n=[`repository_context`,`coding_command`,`coding_environment`,`coding_receipt`,`coding_log`,`source_snapshot`,`send_message`],r=e.some(e=>n.includes(e.name)),i=e.filter(t=>!(t.kind===`call`&&n.includes(t.name)&&e.some(e=>e.id===t.id&&e.kind!==`call`))),[a,o]=(0,u.useState)(!1),s=(0,u.useRef)(null),[c,l]=(0,u.useState)(!1);return(0,u.useLayoutEffect)(()=>{let e=s.current;e&&l(e.scrollHeight>324)},[e.length]),(0,_.jsxs)(`div`,{className:`my-1.5 rounded-r-sm border-l-[3px] border-fawn bg-ivory px-3 py-2 font-mono text-[0.82em] leading-[1.5] text-mocha-light ${t}`,children:[(0,_.jsxs)(`div`,{ref:s,className:`relative overflow-hidden`,style:{maxHeight:a||r?`none`:`${In}px`},children:[i.map((e,t)=>(0,_.jsx)(rr,{item:e},t)),c&&!a&&!r&&(0,_.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 h-10`,style:{background:`linear-gradient(to bottom, rgba(247,240,229,0), var(--color-ivory))`}})]}),c&&!r&&(0,_.jsx)(`button`,{type:`button`,onClick:()=>o(e=>!e),className:`mt-2 rounded-sm border border-fawn bg-transparent px-2 py-0.5 text-[0.9em] text-mocha hover:border-sapphire hover:text-sapphire-deep`,children:a?`show less ↑`:`show more ↓`})]})}function rr({item:e}){if(e.name===`send_message`&&e.kind!==`error`)return(0,_.jsxs)(`details`,{className:`py-1 font-sans text-sm`,children:[(0,_.jsx)(`summary`,{className:`cursor-pointer`,children:e.kind===`call`?`Sending teammate message…`:e.body.startsWith(`sent message `)?`Teammate message sent`:`Teammate message status`}),(0,_.jsx)(`pre`,{className:`mt-1 max-h-64 overflow-auto whitespace-pre-wrap break-words text-xs`,children:e.body})]});if(e.kind===`progress`)return(0,_.jsxs)(`div`,{className:`py-1`,"aria-label":`Live coding progress`,children:[(0,_.jsxs)(`p`,{className:`font-sans`,children:[`Running coding command · `,Math.max(0,Math.round((e.elapsedMs??0)/1e3)),`s`]}),(0,_.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap break-words`,children:e.body}),e.truncated&&(0,_.jsx)(`p`,{children:`Earlier output omitted; the retained log holds more.`})]});if(e.kind!==`error`&&[`repository_context`,`coding_command`,`coding_environment`,`coding_receipt`,`coding_log`,`source_snapshot`].includes(e.name))return(0,_.jsx)(v,{name:e.name,body:e.body,pending:e.kind===`call`,log:e.codingLog});if(e.kind===`call`){let t=Gn(e.body),n=t.includes(`
|
|
76
|
+
`);return(0,_.jsxs)(`div`,{className:`whitespace-pre-wrap break-words py-0.5`,children:[(0,_.jsx)(`span`,{className:`mr-1 opacity-45`,children:`→`}),(0,_.jsx)(`span`,{className:`font-medium text-mocha`,children:e.name}),n?(0,_.jsx)(`pre`,{className:`ml-4 mt-0.5 rounded-sm bg-[rgba(42,31,22,0.04)] px-2 py-1 font-mono text-[0.95em] leading-[1.4] text-mocha`,children:t}):t?(0,_.jsxs)(`span`,{children:[` (`,t,`)`]}):null]})}return e.kind===`error`?(0,_.jsxs)(`div`,{className:`whitespace-pre-wrap break-words py-0.5 text-rose-baziu`,children:[(0,_.jsx)(`span`,{className:`mr-1 opacity-45`,children:`←`}),e.body]}):(0,_.jsxs)(`div`,{className:`whitespace-pre-wrap break-words py-0.5`,children:[(0,_.jsx)(`span`,{className:`mr-1 opacity-45`,children:`←`}),e.body]})}function ir({delay:e=`0s`}){return(0,_.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 animate-pulse rounded-full bg-mocha-light/60`,style:{animationDelay:e},"aria-hidden":`true`})}function ar({messages:e}){let t=(0,u.useSyncExternalStore)(Rn,zn,Bn);return(0,_.jsx)(`div`,{"aria-label":`Source conversation`,children:Yn(e).map((e,n)=>(0,_.jsx)(Zn,{entry:e,markdownReady:t},n))})}export{ar as n,Xn as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{$ as r,G as i,H as a,J as o,K as s,Q as c,U as l,W as u,X as d,Y as f,Z as p,et as m,nt as h,q as g,rt as _}from"./index-Bi-HxcPG.js";import{t as v}from"./Button-ByiV6fpd.js";var y=e(n(),1),b=t(),x=`Dialog`,[S,C]=r(x),[w,T]=S(x),E=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=y.useRef(null),c=y.useRef(null),[l,u]=p({prop:r,defaultProp:i??!1,onChange:a,caller:x});return(0,b.jsx)(w,{scope:t,triggerRef:s,contentRef:c,contentId:f(),titleId:f(),descriptionId:f(),open:l,onOpenChange:u,onOpenToggle:y.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};E.displayName=x;var D=`DialogTrigger`,O=y.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(D,n),a=_(t,i.triggerRef);return(0,b.jsx)(m.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":J(i.open),...r,ref:a,onClick:c(e.onClick,i.onOpenToggle)})});O.displayName=D;var k=`DialogPortal`,[A,j]=S(k,{forceMount:void 0}),M=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:a}=e,o=T(k,t);return(0,b.jsx)(A,{scope:t,forceMount:n,children:y.Children.map(r,e=>(0,b.jsx)(d,{present:n||o.open,children:(0,b.jsx)(i,{asChild:!0,container:a,children:e})}))})};M.displayName=k;var N=`DialogOverlay`,P=y.forwardRef((e,t)=>{let n=j(N,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=T(N,e.__scopeDialog);return a.modal?(0,b.jsx)(d,{present:r||a.open,children:(0,b.jsx)(I,{...i,ref:t})}):null});P.displayName=N;var F=h(`DialogOverlay.RemoveScroll`),I=y.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(N,n),a=_(t,o());return(0,b.jsx)(l,{as:F,allowPinchZoom:!0,shards:[i.contentRef],children:(0,b.jsx)(m.div,{"data-state":J(i.open),...r,ref:a,style:{pointerEvents:`auto`,...r.style}})})}),L=`DialogContent`,R=y.forwardRef((e,t)=>{let n=j(L,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=T(L,e.__scopeDialog);return(0,b.jsx)(d,{present:r||a.open,children:a.modal?(0,b.jsx)(z,{...i,ref:t}):(0,b.jsx)(B,{...i,ref:t})})});R.displayName=L;var z=y.forwardRef((e,t)=>{let n=T(L,e.__scopeDialog),r=y.useRef(null),i=_(t,n.contentRef,r);return y.useEffect(()=>{let e=r.current;if(e)return a(e)},[]),(0,b.jsx)(V,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:c(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault())})}),B=y.forwardRef((e,t)=>{let n=T(L,e.__scopeDialog),r=y.useRef(!1),i=y.useRef(!1);return(0,b.jsx)(V,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),V=y.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,c=T(L,n);return u(),(0,b.jsx)(b.Fragment,{children:(0,b.jsx)(s,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,b.jsx)(g,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":J(c.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>c.onOpenChange(!1)})})})}),H=`DialogTitle`,U=y.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(H,n);return(0,b.jsx)(m.h2,{id:i.titleId,...r,ref:t})});U.displayName=H;var W=`DialogDescription`,G=y.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(W,n);return(0,b.jsx)(m.p,{id:i.descriptionId,...r,ref:t})});G.displayName=W;var K=`DialogClose`,q=y.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=T(K,n);return(0,b.jsx)(m.button,{type:`button`,...r,ref:t,onClick:c(e.onClick,()=>i.onOpenChange(!1))})});q.displayName=K;function J(e){return e?`open`:`closed`}var Y=typeof document>`u`?y.useEffect:y.useLayoutEffect;function X(e){let t=e.activeElement;return!t||t===e.body||t===e.documentElement||!(`focus`in t)||typeof t.focus!=`function`?null:t}function Z(e,t){!e||!e.isConnected||e.ownerDocument!==t||e.focus({preventScroll:!0})}function Q({open:e,title:t,description:n,confirmLabel:r,confirmVariant:i=`danger`,onConfirm:a,onOpenChange:o}){let[s,c]=(0,y.useState)(!1),[l,u]=(0,y.useState)(null),d=(0,y.useRef)(null),f=(0,y.useRef)(!1);Y(()=>{e&&!f.current&&(d.current=X(document)),f.current=e},[e]),(0,y.useEffect)(()=>{e||(c(!1),u(null))},[e]);async function p(){c(!0),u(null);try{await a(),o(!1)}catch(e){u(e instanceof Error?e.message:String(e)),c(!1)}}return(0,b.jsx)(E,{open:e,onOpenChange:e=>{!e&&!s&&o(!1)},children:(0,b.jsxs)(M,{children:[(0,b.jsx)(P,{className:`fixed inset-0 z-50 bg-chocolate/35 backdrop-blur-[2px] data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`}),(0,b.jsxs)(R,{className:`fixed left-1/2 top-1/2 z-50 grid w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 gap-4 rounded-[16px] border border-frost bg-snow p-5 text-chocolate shadow-baziu-lg outline-none data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,onCloseAutoFocus:e=>{e.preventDefault();let t=d.current;d.current=null,Z(t,document)},onEscapeKeyDown:e=>{s&&e.preventDefault()},onPointerDownOutside:e=>{s&&e.preventDefault()},children:[(0,b.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,b.jsx)(U,{className:`font-serif text-xl text-chocolate`,children:t}),(0,b.jsx)(G,{asChild:!0,children:(0,b.jsx)(`div`,{className:`text-sm leading-6 text-mocha`,children:n})})]}),l&&(0,b.jsx)(`p`,{role:`alert`,className:`rounded-md bg-danger/10 px-3 py-2 text-sm text-danger`,children:l}),(0,b.jsxs)(`div`,{className:`flex flex-col-reverse gap-2 border-t border-frost pt-4 sm:flex-row sm:justify-end`,children:[(0,b.jsx)(v,{variant:`ghost`,disabled:s,onClick:()=>o(!1),children:`cancel`}),(0,b.jsx)(v,{variant:i,disabled:s,onClick:()=>void p(),children:s?`working…`:r})]})]})]})})}export{G as a,U as c,R as i,E as n,P as o,q as r,M as s,Q as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-bztXdkDj.js";import{t as i}from"./ConfirmDialog-
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-bztXdkDj.js";import{t as i}from"./ConfirmDialog-BzIiABOP.js";import{t as a}from"./Button-ByiV6fpd.js";var o=e(n(),1),s=t();function c({field:e}){let t=r(),n=(0,o.useId)(),c=`${n}-description`,[l,u]=(0,o.useState)(e.kind===`config`?e.value??``:``),[d,f]=(0,o.useState)(!1),[p,m]=(0,o.useState)(null),[h,g]=(0,o.useState)(null),[_,v]=(0,o.useState)(!1),y=e.kind===`secret`&&l.trim().length===0;async function b(n){if(n.preventDefault(),y){m(e.set?`Paste a replacement value, or use remove credential to explicitly clear the stored secret.`:`A secret value is required.`);return}f(!0),m(null);try{let n=await fetch(`/api/config/fields/${encodeURIComponent(e.envVar)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({value:l})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`${n.status} ${n.statusText}`)}g(Date.now()),e.kind===`secret`&&u(``),await t.invalidate()}catch(e){m(e.message)}finally{f(!1)}}async function x(){let n=await fetch(`/api/config/fields/${encodeURIComponent(e.envVar)}`,{method:`DELETE`});if(!n.ok&&n.status!==204){let e=await n.json().catch(()=>null);throw Error(e?.error??`${n.status} ${n.statusText}`)}u(``),m(null),g(Date.now()),await t.invalidate()}return(0,s.jsxs)(`form`,{onSubmit:b,className:`grid grid-cols-1 gap-2 border-b py-3 last:border-0 md:grid-cols-[12rem_minmax(0,1fr)_auto_auto] md:items-center`,children:[(0,s.jsxs)(`div`,{className:`min-w-0`,children:[(0,s.jsx)(`label`,{htmlFor:n,className:`text-sm font-medium text-foreground`,children:e.label}),e.description&&(0,s.jsx)(`div`,{id:c,className:`text-xs text-muted-foreground mt-0.5`,children:e.description}),(0,s.jsxs)(`details`,{className:`mt-1 text-xs text-muted-foreground`,children:[(0,s.jsx)(`summary`,{className:`cursor-pointer`,children:`Advanced identifier`}),(0,s.jsx)(`code`,{className:`mt-1 inline-block break-all font-mono`,children:e.envVar})]})]}),(0,s.jsx)(`div`,{className:`min-w-0`,children:e.kind===`config`?(0,s.jsx)(`input`,{id:n,type:`text`,"aria-describedby":e.description?c:void 0,value:l,onChange:e=>u(e.target.value),placeholder:e.placeholder??``,className:`w-full rounded-md border bg-background px-2 py-1.5 text-sm outline-none focus:ring-2 focus:ring-ring/30`}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`input`,{id:n,type:`password`,"aria-describedby":e.description?c:void 0,value:l,onChange:e=>u(e.target.value),placeholder:e.set?`(paste to replace stored value)`:e.placeholder??`paste key…`,autoComplete:`off`,className:`w-full rounded-md border bg-background px-2 py-1.5 text-sm outline-none focus:ring-2 focus:ring-ring/30`}),e.set&&(0,s.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Blank keeps the current credential. Removal is a separate explicit action.`})]})}),(0,s.jsxs)(`span`,{className:`text-xs`,children:[e.kind===`secret`&&e.set&&(0,s.jsx)(`span`,{className:`rounded-full bg-success/10 text-success px-1.5 py-0.5`,title:`preview: ${e.preview??``}`,children:`set`}),h&&Date.now()-h<2e3&&(0,s.jsx)(`span`,{role:`status`,className:`text-success ml-2`,children:`saved ✓`})]}),(0,s.jsxs)(`div`,{className:`flex flex-wrap gap-2 md:justify-self-end`,children:[(0,s.jsx)(a,{variant:`ghost`,type:`submit`,disabled:d||y,className:`text-xs`,children:`save`}),e.kind===`secret`&&e.set&&(0,s.jsx)(a,{variant:`danger`,className:`text-xs`,onClick:()=>v(!0),children:`remove`})]}),p&&(0,s.jsx)(`p`,{role:`alert`,className:`text-xs text-danger md:col-span-4`,children:p}),(0,s.jsx)(i,{open:_,title:`Remove ${e.label}?`,description:(0,s.jsxs)(`p`,{children:[`This permanently deletes the stored `,(0,s.jsx)(`code`,{className:`font-mono`,children:e.envVar}),` `,`credential. Features that use it will fail until you save a replacement.`]}),confirmLabel:`remove stored credential`,onConfirm:x,onOpenChange:v})]})}export{c as t};
|