@yadsh/dsh-qa-surface 0.7.4 → 0.9.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/README.md +169 -12
- package/compatibility.json +5 -0
- package/lib/access/capability-catalog.js +32 -3
- package/lib/access/capability-catalog.js.map +1 -1
- package/lib/access/model.js +24 -4
- package/lib/access/model.js.map +1 -1
- package/lib/access/role-repository.js +199 -91
- package/lib/access/role-repository.js.map +1 -1
- package/lib/access/service.js +223 -7
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +2 -4
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +447 -0
- package/lib/accounts/database.js.map +1 -0
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/file.js +27 -90
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +224 -59
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/permissions.js +4 -0
- package/lib/admin/permissions.js.map +1 -1
- package/lib/admin/quality-store.js +270 -54
- package/lib/admin/quality-store.js.map +1 -1
- package/lib/admin/service.js +145 -7
- package/lib/admin/service.js.map +1 -1
- package/lib/admin/session-log.js +66 -5
- package/lib/admin/session-log.js.map +1 -1
- package/lib/cli.js +2 -1
- package/lib/cli.js.map +1 -1
- package/lib/client/QaSessionController.js +379 -39
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +94 -34
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +40 -0
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +26 -8
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/{format.js → copy.js} +1 -1
- package/lib/client/admin/copy.js.map +1 -0
- package/lib/client/admin/pages/Conversations.js +34 -8
- package/lib/client/admin/pages/Conversations.js.map +1 -1
- package/lib/client/admin/pages/Overview.js +1 -1
- package/lib/client/admin/pages/Overview.js.map +1 -1
- package/lib/client/admin/pages/Quality.js +1 -1
- package/lib/client/admin/pages/Quality.js.map +1 -1
- package/lib/client/admin/pages/Review.js +1 -1
- package/lib/client/admin/pages/Review.js.map +1 -1
- package/lib/client/admin/pages/Users.js +6 -2
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/shared.js +10 -1
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/admin/styles.js +2 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/audit/QaAuditDialog.js +74 -0
- package/lib/client/audit/QaAuditDialog.js.map +1 -0
- package/lib/client/audit/QaAuditRowBadge.js +17 -0
- package/lib/client/audit/QaAuditRowBadge.js.map +1 -0
- package/lib/client/audit/controller.js +39 -0
- package/lib/client/audit/controller.js.map +1 -0
- package/lib/client/audit/types.js +36 -0
- package/lib/client/audit/types.js.map +1 -0
- package/lib/client/audit/use-chat-audits.js +139 -0
- package/lib/client/audit/use-chat-audits.js.map +1 -0
- package/lib/client/components/Markdown.js +14 -206
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaChangelog.js +91 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +63 -3
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaHeader.js +1 -3
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +25 -4
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaQuestions.js +1 -1
- package/lib/client/components/QaQuestions.js.map +1 -1
- package/lib/client/components/QaSidebar.js +17 -3
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +3 -18
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +4 -8
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/source-icon.js +26 -0
- package/lib/client/components/source-icon.js.map +1 -0
- package/lib/client/components/thinking-phrases.js +2 -11
- package/lib/client/components/thinking-phrases.js.map +1 -1
- package/lib/client/components/use-now.js +21 -0
- package/lib/client/components/use-now.js.map +1 -0
- package/lib/client/index.js +33 -5
- package/lib/client/index.js.map +1 -1
- package/lib/client/lineage.js +18 -0
- package/lib/client/lineage.js.map +1 -0
- package/lib/client/markdown/CodeBlock.js +28 -0
- package/lib/client/markdown/CodeBlock.js.map +1 -0
- package/lib/client/markdown/blocks.js +342 -0
- package/lib/client/markdown/blocks.js.map +1 -0
- package/lib/client/markdown/highlight.js +1089 -0
- package/lib/client/markdown/highlight.js.map +1 -0
- package/lib/client/markdown/inline.js +377 -0
- package/lib/client/markdown/inline.js.map +1 -0
- package/lib/client/markdown/render.js +147 -0
- package/lib/client/markdown/render.js.map +1 -0
- package/lib/client/markdown/source-chip.js +55 -0
- package/lib/client/markdown/source-chip.js.map +1 -0
- package/lib/client/markdown/use-transient-flag.js +27 -0
- package/lib/client/markdown/use-transient-flag.js.map +1 -0
- package/lib/client/project-session-state.js +15 -2
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/prompt-content.js +26 -0
- package/lib/client/prompt-content.js.map +1 -1
- package/lib/client/role/RoleSelector.js +11 -2
- package/lib/client/role/RoleSelector.js.map +1 -1
- package/lib/client/role/preview.js +123 -0
- package/lib/client/role/preview.js.map +1 -0
- package/lib/client/settings/card.js +2 -2
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/sections/lockdown.js +1 -6
- package/lib/client/settings/sections/lockdown.js.map +1 -1
- package/lib/client/settings/sections/slash.js +57 -0
- package/lib/client/settings/sections/slash.js.map +1 -0
- package/lib/client/settings/sections/status.js +9 -1
- package/lib/client/settings/sections/status.js.map +1 -1
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/slash/SlashPalette.js +48 -0
- package/lib/client/slash/SlashPalette.js.map +1 -0
- package/lib/client/slash/copy.js +54 -0
- package/lib/client/slash/copy.js.map +1 -0
- package/lib/client/slash/slash-router.js +49 -0
- package/lib/client/slash/slash-router.js.map +1 -0
- package/lib/client/slash/useSlashNavigation.js +95 -0
- package/lib/client/slash/useSlashNavigation.js.map +1 -0
- package/lib/client/styles.js +124 -20
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js +11 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client.js +7615 -1567
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +15 -0
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/basics.js +11 -2
- package/lib/config-resolvers/basics.js.map +1 -1
- package/lib/config-resolvers/defaults.js +30 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/lockdown.js +8 -2
- package/lib/config-resolvers/lockdown.js.map +1 -1
- package/lib/config-resolvers/slash-commands.js +60 -0
- package/lib/config-resolvers/slash-commands.js.map +1 -0
- package/lib/config-resolvers/sources.js +16 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config.js +118 -2
- package/lib/config.js.map +1 -1
- package/lib/index.js +183 -11
- package/lib/index.js.map +1 -1
- package/lib/lockdown-policy.js +19 -0
- package/lib/lockdown-policy.js.map +1 -1
- package/lib/personal-skills/service.js +16 -3
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/provenance/host-store.js +25 -4
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/retention.js +25 -0
- package/lib/provenance/retention.js.map +1 -0
- package/lib/provenance/snapshot-store.js +290 -35
- package/lib/provenance/snapshot-store.js.map +1 -1
- package/lib/questions.js +98 -38
- package/lib/questions.js.map +1 -1
- package/lib/resolve-config.js +5 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +139 -21
- package/lib/secure-session.js.map +1 -1
- package/lib/slash/catalog.js +77 -0
- package/lib/slash/catalog.js.map +1 -0
- package/lib/slash/matcher.js +100 -0
- package/lib/slash/matcher.js.map +1 -0
- package/lib/slash/parser.js +79 -0
- package/lib/slash/parser.js.map +1 -0
- package/lib/slash/policy.js +72 -0
- package/lib/slash/policy.js.map +1 -0
- package/lib/slash/remotes.js +272 -0
- package/lib/slash/remotes.js.map +1 -0
- package/lib/typert.host.js +348 -56
- package/lib/typert.remote-client.d.ts +7 -1
- package/lib/typert.remote-client.js +274 -51
- package/lib/types/access/capability-catalog.d.ts +28 -1
- package/lib/types/access/role-repository.d.ts +38 -7
- package/lib/types/access/service.d.ts +106 -3
- package/lib/types/account-remotes.d.ts +8 -4
- package/lib/types/accounts/database.d.ts +84 -0
- package/lib/types/accounts/errors.d.ts +7 -1
- package/lib/types/accounts/file.d.ts +17 -39
- package/lib/types/accounts/store.d.ts +110 -19
- package/lib/types/admin/quality-store.d.ts +38 -2
- package/lib/types/admin/service.d.ts +34 -2
- package/lib/types/admin/session-log.d.ts +65 -1
- package/lib/types/client/QaSessionController.d.ts +84 -2
- package/lib/types/client/QaSurface.d.ts +14 -1
- package/lib/types/client/admin/{format.d.ts → copy.d.ts} +1 -1
- package/lib/types/client/admin/pages/Conversations.d.ts +4 -0
- package/lib/types/client/audit/QaAuditDialog.d.ts +21 -0
- package/lib/types/client/audit/QaAuditRowBadge.d.ts +18 -0
- package/lib/types/client/audit/controller.d.ts +27 -0
- package/lib/types/client/audit/types.d.ts +72 -0
- package/lib/types/client/audit/use-chat-audits.d.ts +20 -0
- package/lib/types/client/components/Markdown.d.ts +7 -8
- package/lib/types/client/components/QaComposer.d.ts +12 -2
- package/lib/types/client/components/QaQuestions.d.ts +7 -0
- package/lib/types/client/components/QaSidebar.d.ts +11 -1
- package/lib/types/client/components/QaSourcesPanel.d.ts +1 -3
- package/lib/types/client/components/source-icon.d.ts +12 -0
- package/lib/types/client/components/use-now.d.ts +8 -0
- package/lib/types/client/lineage.d.ts +15 -0
- package/lib/types/client/markdown/CodeBlock.d.ts +14 -0
- package/lib/types/client/markdown/blocks.d.ts +74 -0
- package/lib/types/client/markdown/highlight.d.ts +29 -0
- package/lib/types/client/markdown/inline.d.ts +40 -0
- package/lib/types/client/markdown/render.d.ts +13 -0
- package/lib/types/client/markdown/source-chip.d.ts +32 -0
- package/lib/types/client/markdown/use-transient-flag.d.ts +12 -0
- package/lib/types/client/project-session-state.d.ts +3 -1
- package/lib/types/client/prompt-content.d.ts +9 -1
- package/lib/types/client/role/RoleSelector.d.ts +11 -1
- package/lib/types/client/role/preview.d.ts +109 -0
- package/lib/types/client/settings/sections/slash.d.ts +16 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/slash/SlashPalette.d.ts +24 -0
- package/lib/types/client/slash/copy.d.ts +30 -0
- package/lib/types/client/slash/slash-router.d.ts +67 -0
- package/lib/types/client/slash/useSlashNavigation.d.ts +47 -0
- package/lib/types/client/styles.d.ts +9 -0
- package/lib/types/client/types.d.ts +16 -1
- package/lib/types/config-resolvers/slash-commands.d.ts +20 -0
- package/lib/types/index.d.ts +83 -2
- package/lib/types/lockdown-policy.d.ts +16 -0
- package/lib/types/personal-skills/service.d.ts +5 -0
- package/lib/types/provenance/host-store.d.ts +20 -3
- package/lib/types/provenance/retention.d.ts +46 -0
- package/lib/types/provenance/snapshot-store.d.ts +63 -7
- package/lib/types/questions.d.ts +13 -0
- package/lib/types/secure-session.d.ts +27 -1
- package/lib/types/slash/catalog.d.ts +56 -0
- package/lib/types/slash/matcher.d.ts +51 -0
- package/lib/types/slash/parser.d.ts +46 -0
- package/lib/types/slash/policy.d.ts +40 -0
- package/lib/types/slash/remotes.d.ts +35 -0
- package/lib/types/types.d.ts +254 -5
- package/package.json +9 -5
- package/scripts/attach-workspace-sessions.mjs +472 -0
- package/lib/client/admin/format.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/provenance/snapshot-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/provenance/snapshot-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,+BAA+B,GAEhC,MAAM,gBAAgB,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,YAAY;QACZ,WAAW;QACX,OAAO;KACR,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;QACf,MAAM;QACN,SAAS;QACT,SAAS;QACT,UAAU;QACV,WAAW;QACX,YAAY;KACb,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,iBAAiB,EAAE,CAAC;SACjB,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;SACD,MAAM,EAAE,CACZ;SACA,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,qDAAqD;AACrD,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChE,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,uEAAuE;AACvE,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC;CACnE,CAAC;KACD,MAAM,EAAE,CAAC;AAqBZ;;;GAGG;AACH,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AAUxB,4EAA4E;AAC5E,MAAM,OAAO,+BAA+B;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE1E,IAAI,CAAC,SAAiB;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7D,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CACxC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,MAAqB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAC/D,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,UAAU,gCAAgC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EACxD,YAAY,CACb,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,+BAA+B;IAC7C,OAAO,GAAG,gCAAgC,EAAE,OAAO,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,IAAY;IAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,aAAa,CAAC,MAAqB;IAC1C,OAAO,CACL,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;QACtC,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS,CAAC,SAAiB;IAClC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;AACrF,CAAC;AAED,iEAAiE;AACjE,SAAS,kBAAkB,CACzB,KAAoC,EACpC,UAA6B,EAC7B,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG;QACd,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QACpD,GAAG,UAAU;KACd,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC/D,CAAC;IACF,MAAM,SAAS,GAAkC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACrD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,UAAU;aACnB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAChC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;KACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,6BAA6B;IAKrB,aAAa;IACb,SAAS;IAET,cAAc;IAPzB,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,GAAG,CAAC,CAAC;IAExB,YACmB,aAAa,GAAW,gCAAgC,EAAE,EAC1D,SAAS,GAAgC,GAAG,EAAE,CAC7D,+BAA+B,EAChB,cAAc,GAAW,GAAG,aAAa,OAAO;6BAHhD,aAAa;yBACb,SAAS;8BAET,cAAc;IAC9B,CAAC;IAEJ,IAAI,CAAC,SAAiB;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO;YACL,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACtE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,GAAG,CAAC,MAAqB;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,KAAK,GAAkC,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;YAChD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QACvC,MAAM,OAAO,GAAG,kBAAkB,CAChC,KAAK,EACL,CAAC,GAAG,UAAU,CAAC,EACf,MAAM,CAAC,kBAAkB,CAC1B,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAa;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CACvB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAwC,EAAE,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;gBACpE,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GACV,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAwC,EAAE,CAAC;QAC1D,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,YAAY,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACpE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CACxC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CACnC,CAAC;YACF,MAAM,IAAI,GACR,cAAc,KAAK,CAAC,CAAC,IAAI,cAAc,GAAG,MAAM,CAAC,WAAW;gBAC1D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;gBACxC,CAAC,CAAC;oBACE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;oBAC7C,SAAS,CAAC,cAAc,CAAsC;iBAC/D,CAAC;YACR,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACK,iBAAiB;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAC/D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,cAAc,kEAAkE,EACpG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CACxB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAkC;gBAC5C,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;aAC3B,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACnE,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,cAAc,gFAAgF,CACnH,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAkC,CAAC;gBAClD,IAAI,aAAa,CAAC,MAAM,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;oBAClD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YAC7B,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,kBAAkB,CAChC,MAAM,EACN,CAAC,GAAG,UAAU,CAAC,EACf,MAAM,CAAC,kBAAkB,CAC1B,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QACD,UAAU,CACR,IAAI,CAAC,cAAc,EACnB,GAAG,IAAI,CAAC,cAAc,aAAa,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CACrF,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,SAAS,CAAC,SAAiB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,eAAe,QAAQ,mEAAmE,EAC1F,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CACxB,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,eAAe,QAAQ,oDAAoD,CAC5E,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CACb,eAAe,QAAQ,gFAAgF,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,OAAO,MAAM,CAAC,IAA4B,CAAC;IAC7C,CAAC;IAEO,UAAU,CAChB,SAAiB,EACjB,KAAoC,EACpC,UAA6B;QAE7B,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAc;YACvB,OAAO,EAAE,CAAC;YACV,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,UAAU;SACX,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACzD,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,WAAW,CAAC;QACnD,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,gBAAwB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACtD,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ;YAAE,OAAO;QACrE,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,wCAAwC;QAC1C,CAAC;IACH,CAAC;CACF"}
|
package/lib/questions.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
/** What the model reads when the deployment does not answer questions. */
|
|
3
3
|
export const QA_QUESTIONS_UNSUPPORTED = "questions are not answered in this assistant view; ask the user in plain text instead";
|
|
4
|
+
/**
|
|
5
|
+
* The harness tool that produces these requests. A deployment that parks
|
|
6
|
+
* questions still has to let the attested session call it: this plugin never
|
|
7
|
+
* adds the name to a tool policy on its own.
|
|
8
|
+
*/
|
|
9
|
+
export const QA_ASK_QUESTION_TOOL = "ask_user_question";
|
|
4
10
|
const CANCELLED_MESSAGE = "the user closed the question without answering; ask in plain text instead";
|
|
5
11
|
/**
|
|
6
12
|
* User questions in the QA view.
|
|
@@ -41,7 +47,18 @@ export class QaQuestionGate {
|
|
|
41
47
|
const claim = this.ctx.on.bind(this.ctx);
|
|
42
48
|
this.disposers.push(claim("user-questions/request", (request, next) => this.handle(request, next), { prepend: true }));
|
|
43
49
|
this.disposers.push(this.ctx.on("agent/disposed", ({ agent }) => {
|
|
44
|
-
this.settleOwner(String(agent.session.id));
|
|
50
|
+
this.settleOwner(String(agent.session.id), "disposed");
|
|
51
|
+
}));
|
|
52
|
+
// A turn that ended cannot be answered into any more, whatever the request
|
|
53
|
+
// arrived with. The harness hands the asking tool a signal, and a stopped
|
|
54
|
+
// turn aborts it, but a request that carried none — or one whose turn went
|
|
55
|
+
// idle by a path that never aborted it — would otherwise stay parked for
|
|
56
|
+
// the life of the process: the operator would keep a form nobody can
|
|
57
|
+
// answer, and the answer they did send would resolve a promise no one
|
|
58
|
+
// awaits. The asking agent's own status is the backstop for both.
|
|
59
|
+
this.disposers.push(this.ctx.on("agent/status", ({ agent, status }) => {
|
|
60
|
+
if (status === "idle")
|
|
61
|
+
this.settleAgent(String(agent.session.id), "idle");
|
|
45
62
|
}));
|
|
46
63
|
}
|
|
47
64
|
/** Questions of one chat, oldest first: what the QA view renders. */
|
|
@@ -58,90 +75,129 @@ export class QaQuestionGate {
|
|
|
58
75
|
* parked request is authoritative: a label the question never offered is
|
|
59
76
|
* dropped, and a free-text answer replaces the choice in a single-select
|
|
60
77
|
* rather than accompanying it, so the model only ever reads a real answer.
|
|
78
|
+
*
|
|
79
|
+
* The payload arrives over the wire from the browser, so its shape is
|
|
80
|
+
* untrusted: a non-array, a non-object entry, or a non-array/non-string
|
|
81
|
+
* selection is folded into the refusal/skip semantics instead of crashing
|
|
82
|
+
* the gate with a TypeError.
|
|
61
83
|
*/
|
|
62
84
|
answer(sessionId, requestId, answers) {
|
|
63
85
|
const entry = this.pending.get(requestId);
|
|
64
|
-
if (entry === undefined || entry.view.sessionId !== sessionId)
|
|
86
|
+
if (entry === undefined || entry.view.sessionId !== sessionId) {
|
|
87
|
+
this.logger.debug("question.refused", { sessionId, requestId });
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (!Array.isArray(answers)) {
|
|
91
|
+
this.logger.debug("question.refused", { sessionId, requestId });
|
|
65
92
|
return false;
|
|
93
|
+
}
|
|
94
|
+
// Every question of the request is answered here, including the ones the
|
|
95
|
+
// operator skipped, so the model never sees a partial form.
|
|
96
|
+
const byId = new Map(answers
|
|
97
|
+
.filter((answer) => typeof answer === "object" &&
|
|
98
|
+
answer !== null &&
|
|
99
|
+
typeof answer.id === "string")
|
|
100
|
+
.map((answer) => [answer.id, answer]));
|
|
101
|
+
const settled = entry.view.questions.map((question) => {
|
|
102
|
+
const given = byId.get(question.id);
|
|
103
|
+
// A question the browser omitted is a skip, not a silent choice.
|
|
104
|
+
if (given === undefined)
|
|
105
|
+
return { id: question.id, selected: [] };
|
|
106
|
+
const offered = new Set(question.options.map((option) => option.label));
|
|
107
|
+
const selected = (Array.isArray(given.selected) ? given.selected : [])
|
|
108
|
+
.filter((label) => typeof label === "string")
|
|
109
|
+
.filter((label) => offered.has(label));
|
|
110
|
+
const custom = typeof given.custom === "string" ? given.custom.trim() : "";
|
|
111
|
+
if (custom === "")
|
|
112
|
+
return { id: question.id, selected };
|
|
113
|
+
return question.multiSelect
|
|
114
|
+
? { id: question.id, selected, custom }
|
|
115
|
+
: { id: question.id, selected: [], custom };
|
|
116
|
+
});
|
|
117
|
+
// The answer itself never reaches the log: only its shape does, so a
|
|
118
|
+
// deployment can tell a form that was filled from one that was skipped
|
|
119
|
+
// without recording anything the operator typed.
|
|
66
120
|
this.logger.info("question.answered", {
|
|
67
121
|
sessionId,
|
|
68
122
|
requestId,
|
|
69
123
|
questions: entry.view.questions.length,
|
|
124
|
+
hasCustomAnswer: settled.some((answer) => answer.custom !== undefined),
|
|
70
125
|
});
|
|
71
|
-
// Every question of the request is answered here, including the ones the
|
|
72
|
-
// operator skipped, so the model never sees a partial form.
|
|
73
|
-
const byId = new Map(answers.map((answer) => [answer.id, answer]));
|
|
74
126
|
entry.settle({
|
|
75
127
|
kind: "answered",
|
|
76
|
-
answer: {
|
|
77
|
-
answers: entry.view.questions.map((question) => {
|
|
78
|
-
const given = byId.get(question.id);
|
|
79
|
-
// A question the browser omitted is a skip, not a silent choice.
|
|
80
|
-
if (given === undefined)
|
|
81
|
-
return { id: question.id, selected: [] };
|
|
82
|
-
const offered = new Set(question.options.map((option) => option.label));
|
|
83
|
-
const selected = given.selected.filter((label) => offered.has(label));
|
|
84
|
-
const custom = given.custom?.trim() ?? "";
|
|
85
|
-
if (custom === "")
|
|
86
|
-
return { id: question.id, selected };
|
|
87
|
-
return question.multiSelect
|
|
88
|
-
? { id: question.id, selected, custom }
|
|
89
|
-
: { id: question.id, selected: [], custom };
|
|
90
|
-
}),
|
|
91
|
-
},
|
|
128
|
+
answer: { answers: settled },
|
|
92
129
|
});
|
|
93
130
|
return true;
|
|
94
131
|
}
|
|
95
132
|
/** Close a request without answering it. */
|
|
96
133
|
cancel(sessionId, requestId) {
|
|
97
134
|
const entry = this.pending.get(requestId);
|
|
98
|
-
if (entry === undefined || entry.view.sessionId !== sessionId)
|
|
135
|
+
if (entry === undefined || entry.view.sessionId !== sessionId) {
|
|
136
|
+
this.logger.debug("question.refused", { sessionId, requestId });
|
|
99
137
|
return false;
|
|
138
|
+
}
|
|
100
139
|
this.logger.info("question.cancelled", { sessionId, requestId });
|
|
101
|
-
entry.settle({ kind: "cancelled" });
|
|
140
|
+
entry.settle({ kind: "cancelled", reason: "operator" });
|
|
102
141
|
return true;
|
|
103
142
|
}
|
|
104
143
|
/** Detach the listener and fail every parked request. Wired as an effect. */
|
|
105
144
|
dispose() {
|
|
106
145
|
for (const entry of [...this.pending.values()])
|
|
107
|
-
entry.settle(
|
|
146
|
+
entry.settle({ kind: "cancelled", reason: "disposed" });
|
|
108
147
|
this.pending.clear();
|
|
109
148
|
for (const dispose of this.disposers.splice(0))
|
|
110
149
|
dispose();
|
|
111
150
|
}
|
|
112
151
|
async handle(request, next) {
|
|
113
152
|
const session = request.agent?.session;
|
|
114
|
-
if (session === undefined)
|
|
153
|
+
if (session === undefined) {
|
|
154
|
+
this.logger.debug("question.delegated", { reason: "agentless" });
|
|
115
155
|
return next();
|
|
116
|
-
|
|
117
|
-
|
|
156
|
+
}
|
|
157
|
+
const askingId = String(session.id);
|
|
158
|
+
const sessionId = this.ownership.rootOf(askingId);
|
|
159
|
+
if (sessionId === undefined) {
|
|
160
|
+
// Another surface's chat, or one this deployment never attested: the
|
|
161
|
+
// chain keeps it, and no identifier of that chat is written here.
|
|
162
|
+
this.logger.debug("question.delegated", { reason: "unowned" });
|
|
118
163
|
return next();
|
|
164
|
+
}
|
|
119
165
|
if (!this.interactive()) {
|
|
120
166
|
this.logger.info("question.unsupported", { sessionId });
|
|
121
167
|
throw new Error(QA_QUESTIONS_UNSUPPORTED);
|
|
122
168
|
}
|
|
123
|
-
const outcome = await this.park(sessionId,
|
|
169
|
+
const outcome = await this.park(sessionId, askingId, request);
|
|
124
170
|
if (outcome.kind === "cancelled")
|
|
125
171
|
throw new Error(CANCELLED_MESSAGE);
|
|
126
172
|
return outcome.answer;
|
|
127
173
|
}
|
|
128
174
|
/** Park one request until the operator answers it, or the turn ends. */
|
|
129
|
-
park(sessionId,
|
|
175
|
+
park(sessionId, agentId, request) {
|
|
130
176
|
const signal = request.signal;
|
|
131
177
|
if (signal?.aborted === true)
|
|
132
|
-
return Promise.resolve(
|
|
178
|
+
return Promise.resolve({ kind: "cancelled", reason: "aborted" });
|
|
133
179
|
return new Promise((resolve) => {
|
|
134
180
|
const id = randomUUID();
|
|
135
|
-
const onAbort = () => finish(
|
|
181
|
+
const onAbort = () => finish({ kind: "cancelled", reason: "aborted" });
|
|
136
182
|
const finish = (outcome) => {
|
|
137
183
|
if (!this.pending.has(id))
|
|
138
184
|
return;
|
|
139
185
|
this.pending.delete(id);
|
|
140
186
|
signal?.removeEventListener("abort", onAbort);
|
|
187
|
+
// The operator's own cancel is already logged where it was decided;
|
|
188
|
+
// every other ending is the harness taking the question away.
|
|
189
|
+
if (outcome.kind === "cancelled" && outcome.reason !== "operator") {
|
|
190
|
+
this.logger.info("question.aborted", {
|
|
191
|
+
sessionId,
|
|
192
|
+
requestId: id,
|
|
193
|
+
reason: outcome.reason,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
141
196
|
resolve(outcome);
|
|
142
197
|
};
|
|
143
198
|
this.pending.set(id, {
|
|
144
|
-
ownerSessionId,
|
|
199
|
+
ownerSessionId: sessionId,
|
|
200
|
+
agentId,
|
|
145
201
|
view: {
|
|
146
202
|
id,
|
|
147
203
|
sessionId,
|
|
@@ -151,7 +207,7 @@ export class QaQuestionGate {
|
|
|
151
207
|
settle: finish,
|
|
152
208
|
});
|
|
153
209
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
154
|
-
this.logger.info("question.
|
|
210
|
+
this.logger.info("question.claimed", {
|
|
155
211
|
sessionId,
|
|
156
212
|
requestId: id,
|
|
157
213
|
questions: request.questions.length,
|
|
@@ -159,16 +215,20 @@ export class QaQuestionGate {
|
|
|
159
215
|
});
|
|
160
216
|
}
|
|
161
217
|
/** Fail the questions one session's agent owns; a disposed agent cannot ask. */
|
|
162
|
-
settleOwner(ownerSessionId) {
|
|
218
|
+
settleOwner(ownerSessionId, reason) {
|
|
163
219
|
for (const entry of [...this.pending.values()]) {
|
|
164
220
|
if (entry.ownerSessionId === ownerSessionId)
|
|
165
|
-
entry.settle(
|
|
221
|
+
entry.settle({ kind: "cancelled", reason });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** Fail the questions one agent parked; an idle agent cannot receive them. */
|
|
225
|
+
settleAgent(agentId, reason) {
|
|
226
|
+
for (const entry of [...this.pending.values()]) {
|
|
227
|
+
if (entry.agentId === agentId)
|
|
228
|
+
entry.settle({ kind: "cancelled", reason });
|
|
166
229
|
}
|
|
167
230
|
}
|
|
168
231
|
}
|
|
169
|
-
const CANCELLED_OUTCOME = Object.freeze({
|
|
170
|
-
kind: "cancelled",
|
|
171
|
-
});
|
|
172
232
|
function normalizeQuestion(question) {
|
|
173
233
|
return {
|
|
174
234
|
id: question.id,
|
package/lib/questions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"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"}
|
package/lib/resolve-config.js
CHANGED
|
@@ -4,6 +4,7 @@ import { normalizeRoutePath, resolveBasics, } from "./config-resolvers/basics.js
|
|
|
4
4
|
import { DEFAULT_QA_SURFACE_CONFIG } from "./config-resolvers/defaults.js";
|
|
5
5
|
import { resolveLockdown } from "./config-resolvers/lockdown.js";
|
|
6
6
|
import { resolveSession } from "./config-resolvers/session.js";
|
|
7
|
+
import { resolveSlashCommands } from "./config-resolvers/slash-commands.js";
|
|
7
8
|
import { resolveSources } from "./config-resolvers/sources.js";
|
|
8
9
|
import { uniquePhrases, uniqueQuestions } from "./config-resolvers/shared.js";
|
|
9
10
|
import { resolveTools } from "./config-resolvers/tools.js";
|
|
@@ -19,6 +20,9 @@ export function resolveConfig(input = {}) {
|
|
|
19
20
|
const session = resolveSession(input);
|
|
20
21
|
const ui = resolveUi(input);
|
|
21
22
|
const lockdown = resolveLockdown(input, ui);
|
|
23
|
+
// The master switch belongs to lockdown; the slash resolver receives its
|
|
24
|
+
// resolved value rather than reading the raw flag a second time.
|
|
25
|
+
const slashCommands = resolveSlashCommands(input, lockdown.allowSlashCommands);
|
|
22
26
|
const sources = resolveSources(input);
|
|
23
27
|
const attachments = resolveAttachments(input);
|
|
24
28
|
const tools = resolveTools(input);
|
|
@@ -33,6 +37,7 @@ export function resolveConfig(input = {}) {
|
|
|
33
37
|
thinkingPhrases: uniquePhrases(input.thinkingPhrases ?? DEFAULT_QA_SURFACE_CONFIG.thinkingPhrases),
|
|
34
38
|
interaction: basics.interaction,
|
|
35
39
|
lockdown,
|
|
40
|
+
slashCommands,
|
|
36
41
|
embedding: basics.embedding,
|
|
37
42
|
accounts,
|
|
38
43
|
entry: basics.entry,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAK,GAAoB,EAAE;IAE3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO;QACP,EAAE;QACF,kBAAkB,EAAE,eAAe,CACjC,KAAK,CAAC,kBAAkB,IAAI,yBAAyB,CAAC,kBAAkB,CACzE;QACD,eAAe,EAAE,aAAa,CAC5B,KAAK,CAAC,eAAe,IAAI,yBAAyB,CAAC,eAAe,CACnE;QACD,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO;QACP,WAAW;QACX,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAK,GAAoB,EAAE;IAE3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,aAAa,GAAG,oBAAoB,CACxC,KAAK,EACL,QAAQ,CAAC,kBAAkB,CAC5B,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO;QACP,EAAE;QACF,kBAAkB,EAAE,eAAe,CACjC,KAAK,CAAC,kBAAkB,IAAI,yBAAyB,CAAC,kBAAkB,CACzE;QACD,eAAe,EAAE,aAAa,CAC5B,KAAK,CAAC,eAAe,IAAI,yBAAyB,CAAC,eAAe,CACnE;QACD,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;QACR,aAAa;QACb,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO;QACP,WAAW;QACX,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
|
package/lib/secure-session.js
CHANGED
|
@@ -2,15 +2,21 @@
|
|
|
2
2
|
// the package root merges a conflicting host `sessions` service type.
|
|
3
3
|
import { SessionId } from "@deepseek-ai/dsh-session/types";
|
|
4
4
|
import { WorkspaceId } from "@deepseek-ai/dsh-workspace";
|
|
5
|
-
import { QaAccountsError } from "./accounts/store.js";
|
|
5
|
+
import { QA_SESSION_CLAIM_WINDOW_MS, QaAccountsError, } from "./accounts/store.js";
|
|
6
6
|
import { QaAttestationError } from "./attestation.js";
|
|
7
|
-
import { qaToolDenial, qaToolPolicyPlan } from "./lockdown-policy.js";
|
|
7
|
+
import { qaCeilingDenial, qaToolDenial, qaToolPolicyPlan, } from "./lockdown-policy.js";
|
|
8
8
|
import { installQaSkillPolicy } from "./enforcement/skill-policy.js";
|
|
9
9
|
import { installInheritableMask } from "./enforcement/tool-mask.js";
|
|
10
10
|
import { QA_REPORT_SOURCES_TOOL } from "./provenance/host-store.js";
|
|
11
|
+
import { QA_ASK_QUESTION_TOOL } from "./questions.js";
|
|
11
12
|
import { qaUserWorkspaceDenial } from "./user-workspace.js";
|
|
12
|
-
/**
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Grace period in which a fresh session may still be pinned to the QA preset
|
|
15
|
+
* (and, in the accounts store, claimed by whoever attests it first). One
|
|
16
|
+
* number on purpose: the adoption rule and the auto-claim rule must describe
|
|
17
|
+
* the same notion of "fresh".
|
|
18
|
+
*/
|
|
19
|
+
const FRESH_SESSION_BOOTSTRAP_WINDOW_MS = QA_SESSION_CLAIM_WINDOW_MS;
|
|
14
20
|
/**
|
|
15
21
|
* Compare session cwds the way the host records them: separator- and
|
|
16
22
|
* case-normalized on Windows, so a deployment path written with either
|
|
@@ -52,7 +58,17 @@ export class QaPolicyAdmission {
|
|
|
52
58
|
*/
|
|
53
59
|
attested = new Set();
|
|
54
60
|
workspaceAccess = new Map();
|
|
61
|
+
/**
|
|
62
|
+
* Every name reachable anywhere in one QA conversation, keyed by session id.
|
|
63
|
+
*
|
|
64
|
+
* The chat's agent and the agents delegated from it share one entry —
|
|
65
|
+
* children inherit it when their session is created — because the ceiling is
|
|
66
|
+
* a property of the conversation, not of one scope. See
|
|
67
|
+
* {@link qaCeilingDenial} for why a scoped restriction cannot express it.
|
|
68
|
+
*/
|
|
69
|
+
ceilings = new Map();
|
|
55
70
|
disposeWorkspaceGuard;
|
|
71
|
+
disposeCeilingGuard;
|
|
56
72
|
constructor(ctx, config, logger, accounts,
|
|
57
73
|
/**
|
|
58
74
|
* Names the QA tool catalog attached to one agent after its activation
|
|
@@ -83,6 +99,20 @@ export class QaPolicyAdmission {
|
|
|
83
99
|
}
|
|
84
100
|
return qaUserWorkspaceDenial(execution, access.root, this.attachmentRoot(), access);
|
|
85
101
|
});
|
|
102
|
+
// The workspace guard above covers the chat's own agents; this one covers
|
|
103
|
+
// every agent of the conversation, delegated children included. They are
|
|
104
|
+
// composed from the preset rather than from the parent agent, so no scoped
|
|
105
|
+
// restriction reaches them and their preset `toolFilter` would otherwise be
|
|
106
|
+
// their whole boundary (see {@link qaCeilingDenial}).
|
|
107
|
+
this.disposeCeilingGuard = ctx.tools.guard((execution) => {
|
|
108
|
+
const session = execution.agent?.session;
|
|
109
|
+
if (session === undefined)
|
|
110
|
+
return undefined;
|
|
111
|
+
const ceiling = this.ceilings.get(String(session.id));
|
|
112
|
+
if (ceiling === undefined)
|
|
113
|
+
return undefined;
|
|
114
|
+
return qaCeilingDenial(ceiling, execution.name);
|
|
115
|
+
});
|
|
86
116
|
ctx.on("session/created", (session) => {
|
|
87
117
|
const parent = session.header.parentSession;
|
|
88
118
|
if (parent === undefined)
|
|
@@ -91,10 +121,17 @@ export class QaPolicyAdmission {
|
|
|
91
121
|
if (access !== undefined) {
|
|
92
122
|
this.workspaceAccess.set(String(session.id), access);
|
|
93
123
|
}
|
|
124
|
+
// A child inherits the conversation's ceiling, and a grandchild inherits
|
|
125
|
+
// it through the child, so one lookup answers for any depth.
|
|
126
|
+
const ceiling = this.ceilings.get(String(parent));
|
|
127
|
+
if (ceiling !== undefined) {
|
|
128
|
+
this.ceilings.set(String(session.id), ceiling);
|
|
129
|
+
}
|
|
94
130
|
});
|
|
95
131
|
ctx.on("agent/disposed", ({ agent }) => {
|
|
96
132
|
this.appliedPolicies.delete(agent);
|
|
97
133
|
this.workspaceAccess.delete(String(agent.session.id));
|
|
134
|
+
this.ceilings.delete(String(agent.session.id));
|
|
98
135
|
});
|
|
99
136
|
}
|
|
100
137
|
/**
|
|
@@ -174,28 +211,69 @@ export class QaPolicyAdmission {
|
|
|
174
211
|
}
|
|
175
212
|
throw new QaAttestationError("agent-unavailable", "agent is unavailable");
|
|
176
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* The Host-registered facts of one session, for the accounts gate's bounded
|
|
216
|
+
* auto-claim. A session this process has not materialized (a chat of an
|
|
217
|
+
* earlier Host run, reached before its agent exists) yields no facts and
|
|
218
|
+
* keeps the historical unbounded claim.
|
|
219
|
+
*/
|
|
220
|
+
sessionFacts(sessionId) {
|
|
221
|
+
const registry = this.ctx.sessions;
|
|
222
|
+
const header = registry?.get(SessionId(sessionId))?.header;
|
|
223
|
+
if (header === undefined)
|
|
224
|
+
return {};
|
|
225
|
+
return {
|
|
226
|
+
...(header.createdAt === undefined
|
|
227
|
+
? {}
|
|
228
|
+
: { createdAt: header.createdAt }),
|
|
229
|
+
...(header.parentSession === undefined ? {} : { hasParent: true }),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Account identity and ownership are checked before any policy work: an
|
|
234
|
+
* invalid token must not learn whether a session exists or how the
|
|
235
|
+
* deployment composes. Independent of lockdown — a deployment may gate
|
|
236
|
+
* users without pinning the policy, and the gate itself no-ops while
|
|
237
|
+
* accounts are disabled.
|
|
238
|
+
*/
|
|
239
|
+
accessOwner(token, sessionId) {
|
|
240
|
+
if (this.accounts === undefined)
|
|
241
|
+
return undefined;
|
|
242
|
+
try {
|
|
243
|
+
return this.accounts.enforceSessionAccess(token, sessionId, this.sessionFacts(sessionId));
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
if (error instanceof QaAccountsError) {
|
|
247
|
+
throw new QaAttestationError(error.reason === "session-owned-elsewhere"
|
|
248
|
+
? "session-owned-elsewhere"
|
|
249
|
+
: "auth-required", error.message);
|
|
250
|
+
}
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
177
254
|
async secureSession(token, sessionId) {
|
|
178
255
|
const config = this.config();
|
|
179
256
|
const lockdown = config.lockdown;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
|
|
257
|
+
let sessionOwner = this.accessOwner(token, sessionId);
|
|
258
|
+
const agent = await this.liveAgent(sessionId);
|
|
259
|
+
// A delegated subagent session is an implementation detail of one answer
|
|
260
|
+
// of its parent chat: it has no QA owner, and its sources reach the
|
|
261
|
+
// parent through the provenance inheritance flow. Attesting it from the
|
|
262
|
+
// browser would pin a capability policy onto a conversation nobody can
|
|
263
|
+
// open, name or review, so it is refused whatever the lockdown state is.
|
|
264
|
+
if (agent.session.header.parentSession !== undefined) {
|
|
265
|
+
this.logger.warn("lockdown.subagent-attestation-refused", { sessionId });
|
|
266
|
+
throw new QaAttestationError("adoption-refused", "a delegated subagent session cannot be attested");
|
|
267
|
+
}
|
|
185
268
|
if (this.accounts !== undefined) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
: "auth-required", error.message);
|
|
194
|
-
}
|
|
195
|
-
throw error;
|
|
196
|
-
}
|
|
269
|
+
// The first check ran before the session was materialized, when its
|
|
270
|
+
// header could still be unknown — a delegated child from a previous
|
|
271
|
+
// run is then indistinguishable from a fresh chat, and the store had
|
|
272
|
+
// to leave the ownership claim deferred. Re-run it now that the
|
|
273
|
+
// header is known, so ownership is recorded only for a session that
|
|
274
|
+
// survived the refusal above.
|
|
275
|
+
sessionOwner = this.accessOwner(token, sessionId);
|
|
197
276
|
}
|
|
198
|
-
const agent = await this.liveAgent(sessionId);
|
|
199
277
|
const pins = this.deploymentPins(config);
|
|
200
278
|
if (!lockdown.enabled) {
|
|
201
279
|
this.attested.add(sessionId);
|
|
@@ -307,6 +385,29 @@ export class QaPolicyAdmission {
|
|
|
307
385
|
if (policy.unknown.length > 0) {
|
|
308
386
|
throw new QaAttestationError("unknown-tools", `unknown QA tool(s): ${policy.unknown.join(", ")}`);
|
|
309
387
|
}
|
|
388
|
+
// Questions are answered in the QA view only while the deployment asks for
|
|
389
|
+
// them, and only for a tool the attested session may actually call. Each
|
|
390
|
+
// half can be satisfied while the other is not — the model then has a way
|
|
391
|
+
// to ask that nobody answers, or a form nothing can raise — and neither is
|
|
392
|
+
// fatal, because the seam refuses the ask with a reason the model can act
|
|
393
|
+
// on. The mismatch is a warning on the operator's log rather than a
|
|
394
|
+
// refusal of the chat.
|
|
395
|
+
const questionsInteractive = config.interaction.questions === "interactive";
|
|
396
|
+
const questionToolAllowed = policy.allow.includes(QA_ASK_QUESTION_TOOL);
|
|
397
|
+
if (questionsInteractive && !questionToolAllowed) {
|
|
398
|
+
this.logger.warn("question.config-incomplete", {
|
|
399
|
+
sessionId,
|
|
400
|
+
tool: QA_ASK_QUESTION_TOOL,
|
|
401
|
+
reason: "not-allowed",
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
else if (!questionsInteractive && questionToolAllowed) {
|
|
405
|
+
this.logger.warn("question.config-incomplete", {
|
|
406
|
+
sessionId,
|
|
407
|
+
tool: QA_ASK_QUESTION_TOOL,
|
|
408
|
+
reason: "unsupported",
|
|
409
|
+
});
|
|
410
|
+
}
|
|
310
411
|
const fingerprint = JSON.stringify([
|
|
311
412
|
policy.allow,
|
|
312
413
|
capability?.policy.skills ?? [],
|
|
@@ -333,6 +434,21 @@ export class QaPolicyAdmission {
|
|
|
333
434
|
? this.dynamicToolNames(subject)
|
|
334
435
|
: []);
|
|
335
436
|
});
|
|
437
|
+
// The conversation's ceiling, which also bounds the agents delegated
|
|
438
|
+
// from this chat. A subrole reaches its own tools and the ones a skill
|
|
439
|
+
// may grant it — never further — so an expert that names a tool in its
|
|
440
|
+
// preset filter still cannot hold what the role cannot grant. The
|
|
441
|
+
// session's own policy list rides along for the names the admission
|
|
442
|
+
// appends to it (the provenance reporter), which a role does not list.
|
|
443
|
+
this.ceilings.set(sessionId, new Set([
|
|
444
|
+
...policy.allow,
|
|
445
|
+
...(capability === undefined
|
|
446
|
+
? [...this.principalScopedTools, ...this.knownDynamicToolNames()]
|
|
447
|
+
: [
|
|
448
|
+
...capability.policy.tools,
|
|
449
|
+
...capability.policy.grantableTools,
|
|
450
|
+
]),
|
|
451
|
+
]));
|
|
336
452
|
// A role snapshot cannot change for this session, but a restarted Host
|
|
337
453
|
// materializes a new Agent and therefore a fresh scoped loader.
|
|
338
454
|
prior?.disposeSkillPolicy();
|
|
@@ -477,8 +593,10 @@ export class QaPolicyAdmission {
|
|
|
477
593
|
this.appliedPolicies.clear();
|
|
478
594
|
this.attested.clear();
|
|
479
595
|
this.workspaceAccess.clear();
|
|
596
|
+
this.ceilings.clear();
|
|
480
597
|
this.principalScopedTools.clear();
|
|
481
598
|
this.disposeWorkspaceGuard();
|
|
599
|
+
this.disposeCeilingGuard();
|
|
482
600
|
}
|
|
483
601
|
}
|
|
484
602
|
//# sourceMappingURL=secure-session.js.map
|