@yadsh/dsh-qa-surface 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +235 -14
- package/compatibility.json +10 -1
- package/cordis.patch.yml +17 -0
- package/lib/account-remotes.js +10 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/credentials.js +12 -4
- package/lib/accounts/credentials.js.map +1 -1
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +38 -1
- package/lib/accounts/store.js.map +1 -1
- package/lib/approvals.js +179 -0
- package/lib/approvals.js.map +1 -0
- package/lib/cli.js +10 -0
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +29 -0
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +261 -48
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +138 -56
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +96 -0
- package/lib/client/QaSurfaceGuard.js.map +1 -0
- package/lib/client/QaTranscriptAdapter.js +11 -5
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/approvals.js +104 -0
- package/lib/client/approvals.js.map +1 -0
- package/lib/client/attestation.js +3 -0
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/components/QaApproval.js +23 -0
- package/lib/client/components/QaApproval.js.map +1 -0
- package/lib/client/components/QaChangelog.js +55 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +1 -1
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaHeader.js +2 -8
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +20 -7
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +24 -6
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaQuestions.js +96 -0
- package/lib/client/components/QaQuestions.js.map +1 -0
- package/lib/client/components/QaSidebar.js +2 -6
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +6 -5
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +21 -1
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/surface-utils.js +2 -0
- package/lib/client/components/surface-utils.js.map +1 -1
- package/lib/client/index.js +81 -22
- package/lib/client/index.js.map +1 -1
- package/lib/client/panels/PanelHost.js +209 -0
- package/lib/client/panels/PanelHost.js.map +1 -0
- package/lib/client/panels/PanelLauncher.js +39 -0
- package/lib/client/panels/PanelLauncher.js.map +1 -0
- package/lib/client/panels/contract.js +2 -0
- package/lib/client/panels/contract.js.map +1 -0
- package/lib/client/panels/index.js +2 -0
- package/lib/client/panels/index.js.map +1 -0
- package/lib/client/panels/registry.js +171 -0
- package/lib/client/panels/registry.js.map +1 -0
- package/lib/client/project-session-state.js +8 -3
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/questions.js +114 -0
- package/lib/client/questions.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/accounts.js +3 -1
- package/lib/client/settings/sections/accounts.js.map +1 -1
- package/lib/client/settings/sections/documents.js +88 -0
- package/lib/client/settings/sections/documents.js.map +1 -0
- package/lib/client/settings/sections/interface.js +2 -0
- package/lib/client/settings/sections/interface.js.map +1 -1
- package/lib/client/settings/sections/sources.js +2 -0
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/settings-extensions/contract.js +2 -0
- package/lib/client/settings-extensions/contract.js.map +1 -0
- package/lib/client/settings-extensions/index.js +2 -0
- package/lib/client/settings-extensions/index.js.map +1 -0
- package/lib/client/settings-extensions/registry.js +63 -0
- package/lib/client/settings-extensions/registry.js.map +1 -0
- package/lib/client/settlement.js +51 -5
- package/lib/client/settlement.js.map +1 -1
- package/lib/client/source-preview.js +24 -0
- package/lib/client/source-preview.js.map +1 -0
- package/lib/client/styles.js +199 -32
- package/lib/client/styles.js.map +1 -1
- package/lib/client/subagent-codenames.js +109 -0
- package/lib/client/subagent-codenames.js.map +1 -0
- package/lib/client/types.js +3 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/user-settings/GeneralSettingsPage.js +13 -0
- package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -0
- package/lib/client/user-settings/ProfileSettingsPage.js +59 -0
- package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -0
- package/lib/client/user-settings/SkillCatalog.js +23 -0
- package/lib/client/user-settings/SkillCatalog.js.map +1 -0
- package/lib/client/user-settings/SkillEditor.js +89 -0
- package/lib/client/user-settings/SkillEditor.js.map +1 -0
- package/lib/client/user-settings/SkillToolPicker.js +58 -0
- package/lib/client/user-settings/SkillToolPicker.js.map +1 -0
- package/lib/client/user-settings/SkillsSettingsPage.js +171 -0
- package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -0
- package/lib/client/user-settings/StartersSettingsPage.js +78 -0
- package/lib/client/user-settings/StartersSettingsPage.js.map +1 -0
- package/lib/client/user-settings/UserSettingsDialog.js +50 -0
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -0
- package/lib/client/user-settings/copy.js +84 -0
- package/lib/client/user-settings/copy.js.map +1 -0
- package/lib/client/user-settings/draft.js +127 -0
- package/lib/client/user-settings/draft.js.map +1 -0
- package/lib/client/user-settings/fields.js +24 -0
- package/lib/client/user-settings/fields.js.map +1 -0
- package/lib/client.js +6629 -1579
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +30 -0
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/basics.js +4 -2
- package/lib/config-resolvers/basics.js.map +1 -1
- package/lib/config-resolvers/defaults.js +27 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/lockdown.js +11 -0
- package/lib/config-resolvers/lockdown.js.map +1 -1
- package/lib/config-resolvers/session.js +2 -2
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config-resolvers/shared.js +9 -0
- package/lib/config-resolvers/shared.js.map +1 -1
- package/lib/config-resolvers/sources.js +2 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config-resolvers/tools.js +37 -0
- package/lib/config-resolvers/tools.js.map +1 -0
- package/lib/config-resolvers/ui.js +2 -0
- package/lib/config-resolvers/ui.js.map +1 -1
- package/lib/config.js +299 -2
- package/lib/config.js.map +1 -1
- package/lib/documents/artifacts/ids.js +43 -0
- package/lib/documents/artifacts/ids.js.map +1 -0
- package/lib/documents/artifacts/manifest.js +66 -0
- package/lib/documents/artifacts/manifest.js.map +1 -0
- package/lib/documents/artifacts/store.js +169 -0
- package/lib/documents/artifacts/store.js.map +1 -0
- package/lib/documents/capabilities.js +93 -0
- package/lib/documents/capabilities.js.map +1 -0
- package/lib/documents/config.js +302 -0
- package/lib/documents/config.js.map +1 -0
- package/lib/documents/defaults.js +78 -0
- package/lib/documents/defaults.js.map +1 -0
- package/lib/documents/errors.js +101 -0
- package/lib/documents/errors.js.map +1 -0
- package/lib/documents/index.js +80 -0
- package/lib/documents/index.js.map +1 -0
- package/lib/documents/inspect/facts.js +161 -0
- package/lib/documents/inspect/facts.js.map +1 -0
- package/lib/documents/inspect/zip.js +108 -0
- package/lib/documents/inspect/zip.js.map +1 -0
- package/lib/documents/markdown/directives.js +135 -0
- package/lib/documents/markdown/directives.js.map +1 -0
- package/lib/documents/markdown/frontmatter.js +35 -0
- package/lib/documents/markdown/frontmatter.js.map +1 -0
- package/lib/documents/markdown/normalize.js +113 -0
- package/lib/documents/markdown/normalize.js.map +1 -0
- package/lib/documents/orchestrator/assets.js +243 -0
- package/lib/documents/orchestrator/assets.js.map +1 -0
- package/lib/documents/orchestrator/convert-document.js +186 -0
- package/lib/documents/orchestrator/convert-document.js.map +1 -0
- package/lib/documents/orchestrator/create-document.js +292 -0
- package/lib/documents/orchestrator/create-document.js.map +1 -0
- package/lib/documents/orchestrator/extract-document.js +162 -0
- package/lib/documents/orchestrator/extract-document.js.map +1 -0
- package/lib/documents/orchestrator/inspect-document.js +89 -0
- package/lib/documents/orchestrator/inspect-document.js.map +1 -0
- package/lib/documents/orchestrator/runtime-deps.js +59 -0
- package/lib/documents/orchestrator/runtime-deps.js.map +1 -0
- package/lib/documents/orchestrator/scope.js +132 -0
- package/lib/documents/orchestrator/scope.js.map +1 -0
- package/lib/documents/providers/docling.js +247 -0
- package/lib/documents/providers/docling.js.map +1 -0
- package/lib/documents/providers/libreoffice.js +130 -0
- package/lib/documents/providers/libreoffice.js.map +1 -0
- package/lib/documents/providers/markitdown.js +89 -0
- package/lib/documents/providers/markitdown.js.map +1 -0
- package/lib/documents/providers/pandoc.js +161 -0
- package/lib/documents/providers/pandoc.js.map +1 -0
- package/lib/documents/providers/process.js +164 -0
- package/lib/documents/providers/process.js.map +1 -0
- package/lib/documents/providers/registry.js +152 -0
- package/lib/documents/providers/registry.js.map +1 -0
- package/lib/documents/providers/shared.js +75 -0
- package/lib/documents/providers/shared.js.map +1 -0
- package/lib/documents/runtime.js +114 -0
- package/lib/documents/runtime.js.map +1 -0
- package/lib/documents/security/file-types.js +188 -0
- package/lib/documents/security/file-types.js.map +1 -0
- package/lib/documents/security/limits.js +78 -0
- package/lib/documents/security/limits.js.map +1 -0
- package/lib/documents/security/mime.js +43 -0
- package/lib/documents/security/mime.js.map +1 -0
- package/lib/documents/security/paths.js +133 -0
- package/lib/documents/security/paths.js.map +1 -0
- package/lib/documents/templates/registry.js +147 -0
- package/lib/documents/templates/registry.js.map +1 -0
- package/lib/documents/templates/resolver.js +59 -0
- package/lib/documents/templates/resolver.js.map +1 -0
- package/lib/documents/tools/convert.js +125 -0
- package/lib/documents/tools/convert.js.map +1 -0
- package/lib/documents/tools/create.js +187 -0
- package/lib/documents/tools/create.js.map +1 -0
- package/lib/documents/tools/index.js +41 -0
- package/lib/documents/tools/index.js.map +1 -0
- package/lib/documents/tools/inspect.js +135 -0
- package/lib/documents/tools/inspect.js.map +1 -0
- package/lib/documents/tools/shared.js +88 -0
- package/lib/documents/tools/shared.js.map +1 -0
- package/lib/documents/tools/to-markdown.js +125 -0
- package/lib/documents/tools/to-markdown.js.map +1 -0
- package/lib/documents/types.js +12 -0
- package/lib/documents/types.js.map +1 -0
- package/lib/index.js +299 -24
- package/lib/index.js.map +1 -1
- package/lib/integration-principals.js +22 -0
- package/lib/integration-principals.js.map +1 -0
- package/lib/lockdown-policy.js +15 -3
- package/lib/lockdown-policy.js.map +1 -1
- package/lib/personal-skills/errors.js +9 -0
- package/lib/personal-skills/errors.js.map +1 -0
- package/lib/personal-skills/host.js +80 -0
- package/lib/personal-skills/host.js.map +1 -0
- package/lib/personal-skills/index.js +10 -0
- package/lib/personal-skills/index.js.map +1 -0
- package/lib/personal-skills/paths.js +127 -0
- package/lib/personal-skills/paths.js.map +1 -0
- package/lib/personal-skills/provider.js +109 -0
- package/lib/personal-skills/provider.js.map +1 -0
- package/lib/personal-skills/remotes.js +40 -0
- package/lib/personal-skills/remotes.js.map +1 -0
- package/lib/personal-skills/service.js +686 -0
- package/lib/personal-skills/service.js.map +1 -0
- package/lib/personal-skills/skill-file.js +278 -0
- package/lib/personal-skills/skill-file.js.map +1 -0
- package/lib/personal-skills/skill-format.js +202 -0
- package/lib/personal-skills/skill-format.js.map +1 -0
- package/lib/personal-skills/watcher.js +96 -0
- package/lib/personal-skills/watcher.js.map +1 -0
- package/lib/profile.js +6 -4
- package/lib/profile.js.map +1 -1
- package/lib/prompt-notes.js +19 -0
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/file-preview.js +68 -21
- package/lib/provenance/file-preview.js.map +1 -1
- package/lib/provenance/host-store.js +69 -20
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/index.js +1 -0
- package/lib/provenance/index.js.map +1 -1
- package/lib/provenance/normalize.js +3 -1
- package/lib/provenance/normalize.js.map +1 -1
- package/lib/provenance/reported.js +37 -12
- package/lib/provenance/reported.js.map +1 -1
- package/lib/provenance/snapshot-store.js +154 -0
- package/lib/provenance/snapshot-store.js.map +1 -0
- package/lib/qa-tools/activation-detector.js +53 -0
- package/lib/qa-tools/activation-detector.js.map +1 -0
- package/lib/qa-tools/activation-manager.js +111 -0
- package/lib/qa-tools/activation-manager.js.map +1 -0
- package/lib/qa-tools/catalog.js +108 -0
- package/lib/qa-tools/catalog.js.map +1 -0
- package/lib/qa-tools/durable-marker.js +115 -0
- package/lib/qa-tools/durable-marker.js.map +1 -0
- package/lib/qa-tools/index.js +83 -0
- package/lib/qa-tools/index.js.map +1 -0
- package/lib/qa-tools/lifecycle.js +64 -0
- package/lib/qa-tools/lifecycle.js.map +1 -0
- package/lib/qa-tools/types.js +2 -0
- package/lib/qa-tools/types.js.map +1 -0
- package/lib/questions.js +185 -0
- package/lib/questions.js.map +1 -0
- package/lib/resolve-config.js +5 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +104 -20
- package/lib/secure-session.js.map +1 -1
- package/lib/session-ownership.js +55 -0
- package/lib/session-ownership.js.map +1 -0
- package/lib/starters.js +117 -0
- package/lib/starters.js.map +1 -0
- package/lib/typert.host.js +1162 -77
- package/lib/typert.remote-client.d.ts +27 -1
- package/lib/typert.remote-client.js +879 -14
- package/lib/types/account-remotes.d.ts +3 -1
- package/lib/types/accounts/credentials.d.ts +6 -0
- package/lib/types/accounts/errors.d.ts +1 -1
- package/lib/types/accounts/file.d.ts +10 -0
- package/lib/types/accounts/store.d.ts +15 -1
- package/lib/types/approvals.d.ts +65 -0
- package/lib/types/client/QaAccountsController.d.ts +7 -1
- package/lib/types/client/QaSessionController.d.ts +50 -1
- package/lib/types/client/QaSurface.d.ts +21 -4
- package/lib/types/client/QaSurfaceGuard.d.ts +27 -0
- package/lib/types/client/QaTranscriptAdapter.d.ts +7 -0
- package/lib/types/client/approvals.d.ts +39 -0
- package/lib/types/client/components/QaApproval.d.ts +13 -0
- package/lib/types/client/components/QaComposer.d.ts +3 -1
- package/lib/types/client/components/QaHeader.d.ts +3 -1
- package/lib/types/client/components/QaModal.d.ts +5 -4
- package/lib/types/client/components/QaQuestions.d.ts +13 -0
- package/lib/types/client/components/QaSidebar.d.ts +8 -11
- package/lib/types/client/components/QaWidthHandle.d.ts +13 -0
- package/lib/types/client/index.d.ts +1 -0
- package/lib/types/client/panels/PanelHost.d.ts +18 -0
- package/lib/types/client/panels/PanelLauncher.d.ts +5 -0
- package/lib/types/client/panels/contract.d.ts +83 -0
- package/lib/types/client/panels/index.d.ts +3 -0
- package/lib/types/client/panels/registry.d.ts +40 -0
- package/lib/types/client/project-session-state.d.ts +13 -1
- package/lib/types/client/questions.d.ts +45 -0
- package/lib/types/client/settings/sections/documents.d.ts +13 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/settings-extensions/contract.d.ts +32 -0
- package/lib/types/client/settings-extensions/index.d.ts +3 -0
- package/lib/types/client/settings-extensions/registry.d.ts +15 -0
- package/lib/types/client/settlement.d.ts +41 -5
- package/lib/types/client/source-preview.d.ts +8 -0
- package/lib/types/client/styles.d.ts +2 -0
- package/lib/types/client/subagent-codenames.d.ts +18 -0
- package/lib/types/client/types.d.ts +82 -3
- package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +14 -0
- package/lib/types/client/user-settings/ProfileSettingsPage.d.ts +18 -0
- package/lib/types/client/user-settings/SkillCatalog.d.ts +16 -0
- package/lib/types/client/user-settings/SkillEditor.d.ts +42 -0
- package/lib/types/client/user-settings/SkillToolPicker.d.ts +17 -0
- package/lib/types/client/user-settings/SkillsSettingsPage.d.ts +15 -0
- package/lib/types/client/user-settings/StartersSettingsPage.d.ts +14 -0
- package/lib/types/client/user-settings/UserSettingsDialog.d.ts +43 -0
- package/lib/types/client/user-settings/copy.d.ts +25 -0
- package/lib/types/client/user-settings/draft.d.ts +51 -0
- package/lib/types/client/user-settings/fields.d.ts +43 -0
- package/lib/types/config-resolvers/shared.d.ts +7 -0
- package/lib/types/config-resolvers/tools.d.ts +6 -0
- package/lib/types/documents/artifacts/ids.d.ts +14 -0
- package/lib/types/documents/artifacts/manifest.d.ts +32 -0
- package/lib/types/documents/artifacts/store.d.ts +67 -0
- package/lib/types/documents/capabilities.d.ts +32 -0
- package/lib/types/documents/config.d.ts +27 -0
- package/lib/types/documents/defaults.d.ts +161 -0
- package/lib/types/documents/errors.d.ts +42 -0
- package/lib/types/documents/index.d.ts +63 -0
- package/lib/types/documents/inspect/facts.d.ts +43 -0
- package/lib/types/documents/inspect/zip.d.ts +28 -0
- package/lib/types/documents/markdown/directives.d.ts +39 -0
- package/lib/types/documents/markdown/frontmatter.d.ts +15 -0
- package/lib/types/documents/markdown/normalize.d.ts +30 -0
- package/lib/types/documents/orchestrator/assets.d.ts +55 -0
- package/lib/types/documents/orchestrator/convert-document.d.ts +25 -0
- package/lib/types/documents/orchestrator/create-document.d.ts +18 -0
- package/lib/types/documents/orchestrator/extract-document.d.ts +24 -0
- package/lib/types/documents/orchestrator/inspect-document.d.ts +12 -0
- package/lib/types/documents/orchestrator/runtime-deps.d.ts +43 -0
- package/lib/types/documents/orchestrator/scope.d.ts +52 -0
- package/lib/types/documents/providers/docling.d.ts +54 -0
- package/lib/types/documents/providers/libreoffice.d.ts +40 -0
- package/lib/types/documents/providers/markitdown.d.ts +28 -0
- package/lib/types/documents/providers/pandoc.d.ts +42 -0
- package/lib/types/documents/providers/process.d.ts +54 -0
- package/lib/types/documents/providers/registry.d.ts +68 -0
- package/lib/types/documents/providers/shared.d.ts +27 -0
- package/lib/types/documents/runtime.d.ts +59 -0
- package/lib/types/documents/security/file-types.d.ts +39 -0
- package/lib/types/documents/security/limits.d.ts +24 -0
- package/lib/types/documents/security/mime.d.ts +13 -0
- package/lib/types/documents/security/paths.d.ts +38 -0
- package/lib/types/documents/templates/registry.d.ts +50 -0
- package/lib/types/documents/templates/resolver.d.ts +30 -0
- package/lib/types/documents/tools/convert.d.ts +9 -0
- package/lib/types/documents/tools/create.d.ts +14 -0
- package/lib/types/documents/tools/index.d.ts +33 -0
- package/lib/types/documents/tools/inspect.d.ts +9 -0
- package/lib/types/documents/tools/shared.d.ts +77 -0
- package/lib/types/documents/tools/to-markdown.d.ts +12 -0
- package/lib/types/documents/types.d.ts +294 -0
- package/lib/types/index.d.ts +103 -5
- package/lib/types/integration-principals.d.ts +9 -0
- package/lib/types/lockdown-policy.d.ts +12 -2
- package/lib/types/personal-skills/errors.d.ts +11 -0
- package/lib/types/personal-skills/host.d.ts +42 -0
- package/lib/types/personal-skills/index.d.ts +10 -0
- package/lib/types/personal-skills/paths.d.ts +39 -0
- package/lib/types/personal-skills/provider.d.ts +33 -0
- package/lib/types/personal-skills/remotes.d.ts +35 -0
- package/lib/types/personal-skills/service.d.ts +131 -0
- package/lib/types/personal-skills/skill-file.d.ts +64 -0
- package/lib/types/personal-skills/skill-format.d.ts +100 -0
- package/lib/types/personal-skills/watcher.d.ts +39 -0
- package/lib/types/profile.d.ts +13 -0
- package/lib/types/prompt-notes.d.ts +9 -0
- package/lib/types/provenance/file-preview.d.ts +47 -4
- package/lib/types/provenance/host-store.d.ts +7 -1
- package/lib/types/provenance/index.d.ts +1 -0
- package/lib/types/provenance/reported.d.ts +9 -1
- package/lib/types/provenance/snapshot-store.d.ts +23 -0
- package/lib/types/qa-tools/activation-detector.d.ts +29 -0
- package/lib/types/qa-tools/activation-manager.d.ts +47 -0
- package/lib/types/qa-tools/catalog.d.ts +40 -0
- package/lib/types/qa-tools/durable-marker.d.ts +16 -0
- package/lib/types/qa-tools/index.d.ts +40 -0
- package/lib/types/qa-tools/lifecycle.d.ts +44 -0
- package/lib/types/qa-tools/types.d.ts +45 -0
- package/lib/types/questions.d.ts +83 -0
- package/lib/types/secure-session.d.ts +45 -4
- package/lib/types/session-ownership.d.ts +30 -0
- package/lib/types/starters.d.ts +45 -0
- package/lib/types/types.d.ts +282 -7
- package/lib/types/user-workspace.d.ts +5 -1
- package/lib/user-workspace.js +21 -6
- package/lib/user-workspace.js.map +1 -1
- package/package.json +22 -9
- package/scripts/repair-session-events.mjs +260 -0
- package/lib/client/components/QaProfile.js +0 -64
- package/lib/client/components/QaProfile.js.map +0 -1
- package/lib/types/client/components/QaProfile.d.ts +0 -25
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pandoc.js","sourceRoot":"","sources":["../../../src/documents/providers/pandoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardened child-process runner for document backends (§26.1, §28, §47).
|
|
3
|
+
*
|
|
4
|
+
* Every backend invocation goes through here. The contract mirrors the one the
|
|
5
|
+
* git tools use, because the threat is the same shape — a document is
|
|
6
|
+
* untrusted input and the backend is a powerful external program:
|
|
7
|
+
*
|
|
8
|
+
* - argv array only, built by the provider, never by the model, no shell;
|
|
9
|
+
* - an explicit environment allow-list, so ambient secrets and proxies do not
|
|
10
|
+
* reach the backend;
|
|
11
|
+
* - output is byte-capped and the process is killed when the cap or the
|
|
12
|
+
* timeout hits; a killed run is reported as `timedOut`/`truncated` rather
|
|
13
|
+
* than being confused with a backend that failed on its own;
|
|
14
|
+
* - the caller's abort signal terminates the child and its descendants.
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from "node:child_process";
|
|
17
|
+
import { DocumentError, sanitizeBackendOutput } from "../errors.js";
|
|
18
|
+
const DEFAULT_STDERR_MAX_BYTES = 16 * 1024;
|
|
19
|
+
const KILL_ESCALATION_MS = 500;
|
|
20
|
+
/**
|
|
21
|
+
* Ambient variables a document backend legitimately needs. Everything else —
|
|
22
|
+
* API keys, proxy settings, cloud credentials — is withheld: a converter
|
|
23
|
+
* parsing a hostile document should not be able to read the deployment's
|
|
24
|
+
* secrets out of its own environment (§26.5).
|
|
25
|
+
*/
|
|
26
|
+
export function buildProcessEnv(extra, source = process.env) {
|
|
27
|
+
const allowed = {};
|
|
28
|
+
for (const key of [
|
|
29
|
+
"PATH",
|
|
30
|
+
"HOME",
|
|
31
|
+
"USERPROFILE",
|
|
32
|
+
"LANG",
|
|
33
|
+
"LC_ALL",
|
|
34
|
+
"TMPDIR",
|
|
35
|
+
"TEMP",
|
|
36
|
+
"TMP",
|
|
37
|
+
"SystemRoot",
|
|
38
|
+
"windir",
|
|
39
|
+
"PATHEXT",
|
|
40
|
+
"COMSPEC",
|
|
41
|
+
"PROGRAMFILES",
|
|
42
|
+
"PROGRAMFILES(X86)",
|
|
43
|
+
"PROGRAMDATA",
|
|
44
|
+
"LOCALAPPDATA",
|
|
45
|
+
"APPDATA",
|
|
46
|
+
]) {
|
|
47
|
+
const value = source[key];
|
|
48
|
+
if (value !== undefined)
|
|
49
|
+
allowed[key] = value;
|
|
50
|
+
}
|
|
51
|
+
return { ...allowed, ...(extra ?? {}) };
|
|
52
|
+
}
|
|
53
|
+
export async function runProcess(program, argv, options) {
|
|
54
|
+
const args = [...(options.programPrefixArgs ?? []), ...argv];
|
|
55
|
+
return await new Promise((resolve, reject) => {
|
|
56
|
+
let child;
|
|
57
|
+
try {
|
|
58
|
+
child = spawn(program, [...args], {
|
|
59
|
+
...(options.cwd === undefined ? {} : { cwd: options.cwd }),
|
|
60
|
+
env: buildProcessEnv(options.env),
|
|
61
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
62
|
+
windowsHide: true,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
reject(new DocumentError("BACKEND_UNAVAILABLE", `${options.backend} could not be started: ${sanitizeBackendOutput(error.message)}`, { backend: options.backend }));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
let settled = false;
|
|
70
|
+
let stdoutBytes = 0;
|
|
71
|
+
let stderrBytes = 0;
|
|
72
|
+
let truncated = false;
|
|
73
|
+
let timedOut = false;
|
|
74
|
+
const stdoutChunks = [];
|
|
75
|
+
const stderrChunks = [];
|
|
76
|
+
const stdoutCap = Math.max(1, Math.floor(options.maxStdoutBytes));
|
|
77
|
+
const stderrCap = Math.max(1, Math.floor(options.maxStderrBytes ?? DEFAULT_STDERR_MAX_BYTES));
|
|
78
|
+
const kill = () => {
|
|
79
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
80
|
+
return;
|
|
81
|
+
child.kill();
|
|
82
|
+
const escalation = setTimeout(() => {
|
|
83
|
+
if (child.exitCode === null && child.signalCode === null)
|
|
84
|
+
child.kill("SIGKILL");
|
|
85
|
+
}, KILL_ESCALATION_MS);
|
|
86
|
+
escalation.unref?.();
|
|
87
|
+
};
|
|
88
|
+
const timer = setTimeout(() => {
|
|
89
|
+
timedOut = true;
|
|
90
|
+
kill();
|
|
91
|
+
}, Math.max(1, Math.floor(options.timeoutMs)));
|
|
92
|
+
timer.unref?.();
|
|
93
|
+
const onAbort = () => kill();
|
|
94
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
95
|
+
const detach = () => {
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
98
|
+
};
|
|
99
|
+
child.stdout?.on("data", (chunk) => {
|
|
100
|
+
if (stdoutBytes >= stdoutCap) {
|
|
101
|
+
truncated = true;
|
|
102
|
+
kill();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const remaining = stdoutCap - stdoutBytes;
|
|
106
|
+
if (chunk.length > remaining) {
|
|
107
|
+
stdoutChunks.push(chunk.subarray(0, remaining));
|
|
108
|
+
stdoutBytes = stdoutCap;
|
|
109
|
+
truncated = true;
|
|
110
|
+
kill();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
stdoutChunks.push(chunk);
|
|
114
|
+
stdoutBytes += chunk.length;
|
|
115
|
+
});
|
|
116
|
+
child.stderr?.on("data", (chunk) => {
|
|
117
|
+
if (stderrBytes >= stderrCap)
|
|
118
|
+
return;
|
|
119
|
+
const remaining = stderrCap - stderrBytes;
|
|
120
|
+
if (chunk.length > remaining) {
|
|
121
|
+
stderrChunks.push(chunk.subarray(0, remaining));
|
|
122
|
+
stderrBytes = stderrCap;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
stderrChunks.push(chunk);
|
|
126
|
+
stderrBytes += chunk.length;
|
|
127
|
+
});
|
|
128
|
+
child.on("error", (error) => {
|
|
129
|
+
if (settled)
|
|
130
|
+
return;
|
|
131
|
+
settled = true;
|
|
132
|
+
detach();
|
|
133
|
+
reject(new DocumentError("BACKEND_UNAVAILABLE", `${options.backend} could not be started: ${sanitizeBackendOutput(error.message)}`, { backend: options.backend }));
|
|
134
|
+
});
|
|
135
|
+
child.on("close", (code) => {
|
|
136
|
+
if (settled)
|
|
137
|
+
return;
|
|
138
|
+
settled = true;
|
|
139
|
+
detach();
|
|
140
|
+
resolve({
|
|
141
|
+
stdout: Buffer.concat(stdoutChunks).toString("utf8"),
|
|
142
|
+
stderr: Buffer.concat(stderrChunks).toString("utf8"),
|
|
143
|
+
exitCode: code,
|
|
144
|
+
truncated,
|
|
145
|
+
timedOut,
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/** Map a finished run that the provider expected to succeed onto an error. */
|
|
151
|
+
export function expectProcessOk(result, options) {
|
|
152
|
+
if (result.timedOut) {
|
|
153
|
+
throw new DocumentError("BACKEND_TIMEOUT", `${options.backend} exceeded its time budget while ${options.context}`, { backend: options.backend, details: { timeoutMs: true } });
|
|
154
|
+
}
|
|
155
|
+
if (result.exitCode === 0)
|
|
156
|
+
return;
|
|
157
|
+
const detail = sanitizeBackendOutput(result.stderr) ||
|
|
158
|
+
sanitizeBackendOutput(result.stdout);
|
|
159
|
+
throw new DocumentError(options.fallbackCode, `${options.backend} failed while ${options.context}${detail === "" ? "" : `: ${detail}`}`, {
|
|
160
|
+
backend: options.backend,
|
|
161
|
+
details: { exitCode: result.exitCode },
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/documents/providers/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend registry and selection (§22, §23, §14.3, §45).
|
|
3
|
+
*
|
|
4
|
+
* Tools never import a concrete provider: they ask the registry for the
|
|
5
|
+
* renderer, extractor or converter that fits the request, and the registry
|
|
6
|
+
* decides — from configuration and from what is actually available — which
|
|
7
|
+
* implementation that is. Swapping Docling for another extractor, or Typst for
|
|
8
|
+
* another PDF engine, is a change here and nowhere else.
|
|
9
|
+
*/
|
|
10
|
+
import { DocumentError } from "../errors.js";
|
|
11
|
+
import { DoclingExtractor } from "./docling.js";
|
|
12
|
+
import { LibreOfficePdfConverter } from "./libreoffice.js";
|
|
13
|
+
import { MarkItDownExtractor } from "./markitdown.js";
|
|
14
|
+
import { PandocDocxRenderer, PandocTypstPdfRenderer } from "./pandoc.js";
|
|
15
|
+
export function createProviders(config, seams = {}) {
|
|
16
|
+
const pandocOptions = {
|
|
17
|
+
executable: config.pandoc.executable,
|
|
18
|
+
timeoutMs: config.pandoc.timeoutMs,
|
|
19
|
+
...(seams.pandoc?.programPrefixArgs === undefined
|
|
20
|
+
? {}
|
|
21
|
+
: { programPrefixArgs: seams.pandoc.programPrefixArgs }),
|
|
22
|
+
...(seams.pandoc?.versionProbe === undefined
|
|
23
|
+
? {}
|
|
24
|
+
: { versionProbe: seams.pandoc.versionProbe }),
|
|
25
|
+
};
|
|
26
|
+
const pandoc = new PandocDocxRenderer(pandocOptions);
|
|
27
|
+
const docling = config.docling.enabled
|
|
28
|
+
? new DoclingExtractor({
|
|
29
|
+
baseUrl: config.docling.baseUrl,
|
|
30
|
+
timeoutMs: config.docling.timeoutMs,
|
|
31
|
+
maxResponseBytes: config.limits.maxResponseBytes,
|
|
32
|
+
maxImages: config.limits.maxExtractedImages,
|
|
33
|
+
...(seams.fetchImpl === undefined
|
|
34
|
+
? {}
|
|
35
|
+
: { fetchImpl: seams.fetchImpl }),
|
|
36
|
+
})
|
|
37
|
+
: undefined;
|
|
38
|
+
const markitdown = config.markitdown.enabled
|
|
39
|
+
? new MarkItDownExtractor({
|
|
40
|
+
executable: config.markitdown.executable,
|
|
41
|
+
timeoutMs: config.markitdown.timeoutMs,
|
|
42
|
+
maxStdoutBytes: config.limits.maxExtractedMarkdownBytes,
|
|
43
|
+
...(seams.markitdown?.programPrefixArgs === undefined
|
|
44
|
+
? {}
|
|
45
|
+
: { programPrefixArgs: seams.markitdown.programPrefixArgs }),
|
|
46
|
+
...(seams.markitdown?.versionProbe === undefined
|
|
47
|
+
? {}
|
|
48
|
+
: { versionProbe: seams.markitdown.versionProbe }),
|
|
49
|
+
})
|
|
50
|
+
: undefined;
|
|
51
|
+
return {
|
|
52
|
+
docx: pandoc,
|
|
53
|
+
typstPdf: config.typst.enabled
|
|
54
|
+
? new PandocTypstPdfRenderer(pandocOptions)
|
|
55
|
+
: undefined,
|
|
56
|
+
converter: new LibreOfficePdfConverter({
|
|
57
|
+
executable: config.libreoffice.executable,
|
|
58
|
+
timeoutMs: config.libreoffice.timeoutMs,
|
|
59
|
+
...(seams.libreoffice?.programPrefixArgs === undefined
|
|
60
|
+
? {}
|
|
61
|
+
: { programPrefixArgs: seams.libreoffice.programPrefixArgs }),
|
|
62
|
+
...(seams.libreoffice?.versionProbe === undefined
|
|
63
|
+
? {}
|
|
64
|
+
: { versionProbe: seams.libreoffice.versionProbe }),
|
|
65
|
+
}),
|
|
66
|
+
docling,
|
|
67
|
+
doclingHealth: docling === undefined
|
|
68
|
+
? undefined
|
|
69
|
+
: async () => await docling.health(),
|
|
70
|
+
markitdown,
|
|
71
|
+
markitdownHealth: markitdown === undefined
|
|
72
|
+
? undefined
|
|
73
|
+
: async () => await markitdown.health(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The PDF route (§14.3):
|
|
78
|
+
*
|
|
79
|
+
* ```text
|
|
80
|
+
* DOCX + PDF requested → office
|
|
81
|
+
* PDF only, template has Typst → typst
|
|
82
|
+
* otherwise → office
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* A deployment that asked for `typst` without enabling the engine is answered
|
|
86
|
+
* with `BACKEND_UNAVAILABLE` instead of silently rendering an office PDF in
|
|
87
|
+
* the wrong layout.
|
|
88
|
+
*/
|
|
89
|
+
export function selectPdfMode(options) {
|
|
90
|
+
const wantsDocx = options.formats.includes("docx");
|
|
91
|
+
const resolve = () => {
|
|
92
|
+
if (options.requested === "office")
|
|
93
|
+
return "office";
|
|
94
|
+
if (options.requested === "typst")
|
|
95
|
+
return "typst";
|
|
96
|
+
if (wantsDocx)
|
|
97
|
+
return "office";
|
|
98
|
+
return options.templateHasTypst ? "typst" : "office";
|
|
99
|
+
};
|
|
100
|
+
const mode = resolve();
|
|
101
|
+
if (mode === "typst" && !options.typstEnabled) {
|
|
102
|
+
throw new DocumentError("BACKEND_UNAVAILABLE", options.requested === "typst"
|
|
103
|
+
? "the Typst PDF route is not enabled in this deployment"
|
|
104
|
+
: "this template only provides a Typst layout, but the Typst PDF route is not enabled", { backend: "typst" });
|
|
105
|
+
}
|
|
106
|
+
return mode;
|
|
107
|
+
}
|
|
108
|
+
export function selectExtractor(providers, config, mode, format) {
|
|
109
|
+
const docling = providers.docling;
|
|
110
|
+
const markitdown = providers.markitdown;
|
|
111
|
+
if (mode === "fast") {
|
|
112
|
+
if (markitdown !== undefined && markitdown.supports(format)) {
|
|
113
|
+
return {
|
|
114
|
+
extractor: markitdown,
|
|
115
|
+
fallbacks: docling === undefined ? [] : [docling],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (docling === undefined) {
|
|
119
|
+
throw new DocumentError("BACKEND_UNAVAILABLE", "no document extractor is enabled in this deployment", { backend: "docling" });
|
|
120
|
+
}
|
|
121
|
+
return { extractor: docling, fallbacks: [] };
|
|
122
|
+
}
|
|
123
|
+
if (docling !== undefined && docling.supports(format)) {
|
|
124
|
+
const fallbacks = config.extraction.allowFallback &&
|
|
125
|
+
markitdown !== undefined &&
|
|
126
|
+
markitdown.supports(format)
|
|
127
|
+
? [markitdown]
|
|
128
|
+
: [];
|
|
129
|
+
return { extractor: docling, fallbacks };
|
|
130
|
+
}
|
|
131
|
+
if (markitdown !== undefined && markitdown.supports(format)) {
|
|
132
|
+
return { extractor: markitdown, fallbacks: [] };
|
|
133
|
+
}
|
|
134
|
+
throw new DocumentError("BACKEND_UNAVAILABLE", `no enabled extractor supports ${format.toUpperCase()} documents`, { backend: "docling" });
|
|
135
|
+
}
|
|
136
|
+
/** Run the selected extractor, falling back only when it is unreachable. */
|
|
137
|
+
export async function extractWithFallback(selection, input) {
|
|
138
|
+
try {
|
|
139
|
+
return { document: await selection.extractor.extract(input) };
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const unreachable = error instanceof DocumentError &&
|
|
143
|
+
(error.code === "BACKEND_UNAVAILABLE" ||
|
|
144
|
+
error.code === "BACKEND_TIMEOUT");
|
|
145
|
+
const next = selection.fallbacks[0];
|
|
146
|
+
if (!unreachable || next === undefined)
|
|
147
|
+
throw error;
|
|
148
|
+
const document = await next.extract(input);
|
|
149
|
+
return { document, fellBackFrom: selection.extractor.name };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/documents/providers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared plumbing of the document providers.
|
|
3
|
+
*
|
|
4
|
+
* Providers report what they wrote through {@link verifyOutput}: a backend
|
|
5
|
+
* that exits 0 but leaves no file behind is a failure, and one that leaves an
|
|
6
|
+
* empty file is a failure too — the caller must never be handed a path that
|
|
7
|
+
* looks like an artifact and is not.
|
|
8
|
+
*/
|
|
9
|
+
import { readFile, stat } from "node:fs/promises";
|
|
10
|
+
import { DocumentError, sanitizeBackendOutput } from "../errors.js";
|
|
11
|
+
export async function verifyOutput(outputPath, backend, code) {
|
|
12
|
+
const details = await stat(outputPath).catch(() => undefined);
|
|
13
|
+
if (details === undefined || !details.isFile()) {
|
|
14
|
+
throw new DocumentError(code, `${backend} reported success but produced no output`, { backend });
|
|
15
|
+
}
|
|
16
|
+
if (details.size === 0) {
|
|
17
|
+
throw new DocumentError(code, `${backend} produced an empty file`, {
|
|
18
|
+
backend,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return { path: outputPath, size: details.size };
|
|
22
|
+
}
|
|
23
|
+
/** `--metadata=key=value` pairs, sanitized of control characters. */
|
|
24
|
+
export function metadataArguments(metadata) {
|
|
25
|
+
if (metadata === undefined)
|
|
26
|
+
return [];
|
|
27
|
+
const args = [];
|
|
28
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
29
|
+
const cleanKey = key.replace(/[^A-Za-z0-9_-]+/gu, "-").slice(0, 40);
|
|
30
|
+
if (cleanKey === "")
|
|
31
|
+
continue;
|
|
32
|
+
// Newlines would let a value impersonate the next CLI argument in a log;
|
|
33
|
+
// argv itself is already structured, so collapsing is enough.
|
|
34
|
+
/* eslint-disable-next-line no-control-regex -- newlines and NULs must not survive into a log */
|
|
35
|
+
const cleanValue = value.replace(/[\r\n\u0000]+/gu, " ").slice(0, 4_000);
|
|
36
|
+
args.push(`--metadata=${cleanKey}=${cleanValue}`);
|
|
37
|
+
}
|
|
38
|
+
return args;
|
|
39
|
+
}
|
|
40
|
+
/** First line of a `--version` run, reduced to the version token. */
|
|
41
|
+
export function parseVersionOutput(stdout, program) {
|
|
42
|
+
const firstLine = sanitizeBackendOutput(stdout.split(/\r?\n/u)[0] ?? "", 200);
|
|
43
|
+
const match = /(\d+\.\d+(?:\.\d+)?)/u.exec(firstLine);
|
|
44
|
+
if (match !== null)
|
|
45
|
+
return match[1];
|
|
46
|
+
return firstLine === "" || firstLine === program ? undefined : firstLine;
|
|
47
|
+
}
|
|
48
|
+
export function backendInfo(provider, version) {
|
|
49
|
+
return version === undefined ? { provider } : { provider, version };
|
|
50
|
+
}
|
|
51
|
+
/** Read a text output produced by a backend, with a bounded size. */
|
|
52
|
+
export async function readTextOutput(filePath, backend, maxBytes) {
|
|
53
|
+
const details = await stat(filePath).catch(() => undefined);
|
|
54
|
+
if (details === undefined) {
|
|
55
|
+
throw new DocumentError("EXTRACTION_FAILED", `${backend} produced no output`, {
|
|
56
|
+
backend,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (details.size > maxBytes) {
|
|
60
|
+
const raw = await readFile(filePath);
|
|
61
|
+
return {
|
|
62
|
+
text: raw.subarray(0, maxBytes).toString("utf8"),
|
|
63
|
+
truncated: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { text: await readFile(filePath, "utf8"), truncated: false };
|
|
67
|
+
}
|
|
68
|
+
export function truncationWarning(backend, contentType) {
|
|
69
|
+
return {
|
|
70
|
+
code: "MARKDOWN_TRUNCATED",
|
|
71
|
+
message: `the extracted ${contentType} exceeded the configured inline budget and was truncated`,
|
|
72
|
+
backend,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/documents/providers/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime facade the tools talk to.
|
|
3
|
+
*
|
|
4
|
+
* One instance lives in the plugin and survives across calls, so the backend
|
|
5
|
+
* registry, the concurrency semaphores and the version caches are shared
|
|
6
|
+
* instead of rebuilt per request. The four operations are the whole surface:
|
|
7
|
+
* everything else in this subsystem is an implementation detail behind them.
|
|
8
|
+
*/
|
|
9
|
+
import { ArtifactStore } from "./artifacts/store.js";
|
|
10
|
+
import { applyDocumentsEnvOverrides, resolveDocumentsConfig, } from "./config.js";
|
|
11
|
+
import { documentCapabilities, documentHealth, } from "./capabilities.js";
|
|
12
|
+
import { DocumentError } from "./errors.js";
|
|
13
|
+
import { createProviders, } from "./providers/registry.js";
|
|
14
|
+
import { convertDocument } from "./orchestrator/convert-document.js";
|
|
15
|
+
import { createDocument } from "./orchestrator/create-document.js";
|
|
16
|
+
import { inspectDocument } from "./orchestrator/inspect-document.js";
|
|
17
|
+
import { toMarkdown } from "./orchestrator/extract-document.js";
|
|
18
|
+
import { createRuntimeDeps, silentDocumentLogger, } from "./orchestrator/runtime-deps.js";
|
|
19
|
+
import { loadScopeTemplates, resolveDocumentScope, } from "./orchestrator/scope.js";
|
|
20
|
+
import { loadTemplateRegistry } from "./templates/registry.js";
|
|
21
|
+
import { CONVERSION_ROUTES } from "./orchestrator/convert-document.js";
|
|
22
|
+
export class DocumentRuntime {
|
|
23
|
+
config;
|
|
24
|
+
providers;
|
|
25
|
+
deps;
|
|
26
|
+
seams;
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this.config = options.config;
|
|
29
|
+
this.seams = options.seams ?? {};
|
|
30
|
+
this.providers =
|
|
31
|
+
options.providers ?? createProviders(this.config, this.seams);
|
|
32
|
+
this.deps = createRuntimeDeps({
|
|
33
|
+
config: this.config,
|
|
34
|
+
providers: this.providers,
|
|
35
|
+
logger: options.logger ?? silentDocumentLogger,
|
|
36
|
+
...(options.now === undefined ? {} : { now: options.now }),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async create(input, scope) {
|
|
40
|
+
return await createDocument(this.deps, input, scope);
|
|
41
|
+
}
|
|
42
|
+
async toMarkdown(input, scope) {
|
|
43
|
+
return await toMarkdown(this.deps, input, scope);
|
|
44
|
+
}
|
|
45
|
+
async convert(input, scope) {
|
|
46
|
+
return await convertDocument(this.deps, input, scope);
|
|
47
|
+
}
|
|
48
|
+
async inspect(input, scope) {
|
|
49
|
+
return await inspectDocument(this.deps, input, scope);
|
|
50
|
+
}
|
|
51
|
+
async health(options = {}) {
|
|
52
|
+
const healthOptions = {
|
|
53
|
+
config: this.config,
|
|
54
|
+
providers: this.providers,
|
|
55
|
+
...(options.probeProcessBackends === undefined
|
|
56
|
+
? {}
|
|
57
|
+
: { probeProcessBackends: options.probeProcessBackends }),
|
|
58
|
+
};
|
|
59
|
+
return await documentHealth(healthOptions);
|
|
60
|
+
}
|
|
61
|
+
async capabilities(scope) {
|
|
62
|
+
const templates = scope === undefined
|
|
63
|
+
? await loadTemplateRegistry(undefined)
|
|
64
|
+
: await loadScopeTemplates(this.config, scope.workspaceRoot);
|
|
65
|
+
return documentCapabilities({
|
|
66
|
+
config: this.config,
|
|
67
|
+
providers: this.providers,
|
|
68
|
+
templates,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/** Routes this runtime advertises, in documentation order. */
|
|
72
|
+
routes() {
|
|
73
|
+
return CONVERSION_ROUTES;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Retention sweep (§41). Meaningful only for a pinned storage root: with the
|
|
77
|
+
* default per-workspace layout the plugin cannot enumerate workspaces, and a
|
|
78
|
+
* sweep that guessed would delete other projects' artifacts.
|
|
79
|
+
*/
|
|
80
|
+
async cleanup(options = {}) {
|
|
81
|
+
if (!this.config.retention.enabled || this.config.storage.root === null)
|
|
82
|
+
return undefined;
|
|
83
|
+
const store = new ArtifactStore({ root: this.config.storage.root });
|
|
84
|
+
const removed = await store.cleanup({
|
|
85
|
+
maxAgeDays: this.config.retention.maxAgeDays,
|
|
86
|
+
...(options.now === undefined ? {} : { now: options.now }),
|
|
87
|
+
});
|
|
88
|
+
if (removed.removed.length > 0) {
|
|
89
|
+
this.deps.logger.info("documents.retention", {
|
|
90
|
+
removed: removed.removed.length,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return removed;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Build a runtime from raw (schema-parsed) configuration. */
|
|
97
|
+
export function createDocumentRuntime(options) {
|
|
98
|
+
const withEnv = applyDocumentsEnvOverrides(options.config, options.env ?? process.env);
|
|
99
|
+
const resolved = resolveDocumentsConfig(withEnv);
|
|
100
|
+
if (!resolved.enabled) {
|
|
101
|
+
throw new DocumentError("BACKEND_UNAVAILABLE", "the document subsystem is disabled in this deployment");
|
|
102
|
+
}
|
|
103
|
+
return new DocumentRuntime({
|
|
104
|
+
config: resolved,
|
|
105
|
+
...(options.logger === undefined ? {} : { logger: options.logger }),
|
|
106
|
+
...(options.seams === undefined ? {} : { seams: options.seams }),
|
|
107
|
+
...(options.providers === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { providers: options.providers }),
|
|
110
|
+
...(options.now === undefined ? {} : { now: options.now }),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
export { resolveDocumentScope };
|
|
114
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/documents/runtime.ts"],"names":[],"mappings":"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"}
|