@penclipai/server 2026.704.0 → 2026.714.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/process/execute.d.ts.map +1 -1
- package/dist/adapters/process/execute.js +1 -0
- package/dist/adapters/process/execute.js.map +1 -1
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +79 -51
- package/dist/adapters/registry.js.map +1 -1
- package/dist/adapters/utils.d.ts +5 -0
- package/dist/adapters/utils.d.ts.map +1 -1
- package/dist/adapters/utils.js.map +1 -1
- package/dist/agent-auth-jwt.d.ts +5 -1
- package/dist/agent-auth-jwt.d.ts.map +1 -1
- package/dist/agent-auth-jwt.js +72 -20
- package/dist/agent-auth-jwt.js.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -0
- package/dist/app.js.map +1 -1
- package/dist/built-ins/agents/reflection-coach/AGENTS.md +47 -0
- package/dist/built-ins/agents/reflection-coach/routines/recent-agent-reflection.md +77 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +208 -116
- package/dist/index.js.map +1 -1
- package/dist/middleware/api-compression.d.ts +8 -0
- package/dist/middleware/api-compression.d.ts.map +1 -0
- package/dist/middleware/api-compression.js +207 -0
- package/dist/middleware/api-compression.js.map +1 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +130 -3
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +27 -0
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/onboarding-assets/default/AGENTS.md +1 -0
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +11 -0
- package/dist/redaction.js.map +1 -1
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.js +4 -3
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/adapters.d.ts.map +1 -1
- package/dist/routes/adapters.js +2 -0
- package/dist/routes/adapters.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +222 -87
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/attention.d.ts +3 -0
- package/dist/routes/attention.d.ts.map +1 -0
- package/dist/routes/attention.js +24 -0
- package/dist/routes/attention.js.map +1 -0
- package/dist/routes/authz.d.ts.map +1 -1
- package/dist/routes/authz.js +29 -1
- package/dist/routes/authz.js.map +1 -1
- package/dist/routes/board-chat.d.ts.map +1 -1
- package/dist/routes/board-chat.js +4 -1
- package/dist/routes/board-chat.js.map +1 -1
- package/dist/routes/built-in-agents.d.ts +3 -0
- package/dist/routes/built-in-agents.d.ts.map +1 -0
- package/dist/routes/built-in-agents.js +267 -0
- package/dist/routes/built-in-agents.js.map +1 -0
- package/dist/routes/cases.d.ts +46 -0
- package/dist/routes/cases.d.ts.map +1 -0
- package/dist/routes/cases.js +1395 -0
- package/dist/routes/cases.js.map +1 -0
- package/dist/routes/companies.d.ts.map +1 -1
- package/dist/routes/companies.js +4 -1
- package/dist/routes/companies.js.map +1 -1
- package/dist/routes/company-skills.d.ts.map +1 -1
- package/dist/routes/company-skills.js +453 -33
- package/dist/routes/company-skills.js.map +1 -1
- package/dist/routes/environments.d.ts.map +1 -1
- package/dist/routes/environments.js +71 -8
- package/dist/routes/environments.js.map +1 -1
- package/dist/routes/execution-workspaces.d.ts.map +1 -1
- package/dist/routes/execution-workspaces.js +89 -3
- package/dist/routes/execution-workspaces.js.map +1 -1
- package/dist/routes/health.d.ts +2 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +30 -0
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/inbox-dismissals.d.ts.map +1 -1
- package/dist/routes/inbox-dismissals.js +80 -19
- package/dist/routes/inbox-dismissals.js.map +1 -1
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/issues.d.ts +25 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +1455 -46
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/openapi.d.ts.map +1 -1
- package/dist/routes/openapi.js +448 -11
- package/dist/routes/openapi.js.map +1 -1
- package/dist/routes/pipelines.js +2 -2
- package/dist/routes/pipelines.js.map +1 -1
- package/dist/routes/resource-memberships.d.ts.map +1 -1
- package/dist/routes/resource-memberships.js +13 -5
- package/dist/routes/resource-memberships.js.map +1 -1
- package/dist/routes/secrets.d.ts.map +1 -1
- package/dist/routes/secrets.js +261 -1
- package/dist/routes/secrets.js.map +1 -1
- package/dist/routes/sidebar-badges.d.ts.map +1 -1
- package/dist/routes/sidebar-badges.js +18 -2
- package/dist/routes/sidebar-badges.js.map +1 -1
- package/dist/routes/user-profiles.d.ts.map +1 -1
- package/dist/routes/user-profiles.js +5 -4
- package/dist/routes/user-profiles.js.map +1 -1
- package/dist/server-info.d.ts +2 -0
- package/dist/server-info.d.ts.map +1 -1
- package/dist/server-info.js +20 -5
- package/dist/server-info.js.map +1 -1
- package/dist/services/access.d.ts +4 -4
- package/dist/services/access.d.ts.map +1 -1
- package/dist/services/activity.d.ts +3 -3
- package/dist/services/activity.d.ts.map +1 -1
- package/dist/services/activity.js +5 -4
- package/dist/services/activity.js.map +1 -1
- package/dist/services/adapter-registry-bootstrap.reconcile.test.js +1 -0
- package/dist/services/adapter-registry-bootstrap.reconcile.test.js.map +1 -1
- package/dist/services/agent-secret-bindings.d.ts +15 -0
- package/dist/services/agent-secret-bindings.d.ts.map +1 -1
- package/dist/services/agent-secret-bindings.js +43 -0
- package/dist/services/agent-secret-bindings.js.map +1 -1
- package/dist/services/agents.d.ts +194 -133
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +107 -4
- package/dist/services/agents.js.map +1 -1
- package/dist/services/approvals.d.ts +10 -10
- package/dist/services/approvals.d.ts.map +1 -1
- package/dist/services/approvals.js +9 -1
- package/dist/services/approvals.js.map +1 -1
- package/dist/services/assets.d.ts +5 -5
- package/dist/services/attention.d.ts +11 -0
- package/dist/services/attention.d.ts.map +1 -0
- package/dist/services/attention.js +1024 -0
- package/dist/services/attention.js.map +1 -0
- package/dist/services/authorization.d.ts +15 -2
- package/dist/services/authorization.d.ts.map +1 -1
- package/dist/services/authorization.js +324 -8
- package/dist/services/authorization.js.map +1 -1
- package/dist/services/board-auth.d.ts +2 -2
- package/dist/services/budgets.d.ts.map +1 -1
- package/dist/services/budgets.js +8 -7
- package/dist/services/budgets.js.map +1 -1
- package/dist/services/built-in-agent-metadata.d.ts +9 -0
- package/dist/services/built-in-agent-metadata.d.ts.map +1 -0
- package/dist/services/built-in-agent-metadata.js +39 -0
- package/dist/services/built-in-agent-metadata.js.map +1 -0
- package/dist/services/built-in-agents.d.ts +394 -0
- package/dist/services/built-in-agents.d.ts.map +1 -0
- package/dist/services/built-in-agents.js +1426 -0
- package/dist/services/built-in-agents.js.map +1 -0
- package/dist/services/change-consent-gate.d.ts +18 -0
- package/dist/services/change-consent-gate.d.ts.map +1 -0
- package/dist/services/change-consent-gate.js +170 -0
- package/dist/services/change-consent-gate.js.map +1 -0
- package/dist/services/companies.d.ts +14 -8
- package/dist/services/companies.d.ts.map +1 -1
- package/dist/services/companies.js +6 -1
- package/dist/services/companies.js.map +1 -1
- package/dist/services/company-artifacts.d.ts +4 -1
- package/dist/services/company-artifacts.d.ts.map +1 -1
- package/dist/services/company-artifacts.js +9 -1
- package/dist/services/company-artifacts.js.map +1 -1
- package/dist/services/company-member-roles.d.ts.map +1 -1
- package/dist/services/company-member-roles.js +2 -0
- package/dist/services/company-member-roles.js.map +1 -1
- package/dist/services/company-portability.d.ts +1 -1
- package/dist/services/company-portability.d.ts.map +1 -1
- package/dist/services/company-portability.js +113 -8
- package/dist/services/company-portability.js.map +1 -1
- package/dist/services/company-search.d.ts.map +1 -1
- package/dist/services/company-search.js +843 -294
- package/dist/services/company-search.js.map +1 -1
- package/dist/services/company-skills.d.ts +64 -3
- package/dist/services/company-skills.d.ts.map +1 -1
- package/dist/services/company-skills.js +1205 -20
- package/dist/services/company-skills.js.map +1 -1
- package/dist/services/costs.d.ts +9 -8
- package/dist/services/costs.d.ts.map +1 -1
- package/dist/services/costs.js +9 -2
- package/dist/services/costs.js.map +1 -1
- package/dist/services/dashboard.d.ts +2 -0
- package/dist/services/dashboard.d.ts.map +1 -1
- package/dist/services/dashboard.js +60 -17
- package/dist/services/dashboard.js.map +1 -1
- package/dist/services/database-backup-health.d.ts +34 -0
- package/dist/services/database-backup-health.d.ts.map +1 -0
- package/dist/services/database-backup-health.js +104 -0
- package/dist/services/database-backup-health.js.map +1 -0
- package/dist/services/document-annotations.d.ts +169 -1
- package/dist/services/document-annotations.d.ts.map +1 -1
- package/dist/services/document-annotations.js +272 -1
- package/dist/services/document-annotations.js.map +1 -1
- package/dist/services/documents.d.ts +368 -0
- package/dist/services/documents.d.ts.map +1 -1
- package/dist/services/documents.js +2 -2
- package/dist/services/documents.js.map +1 -1
- package/dist/services/environment-config.d.ts.map +1 -1
- package/dist/services/environment-config.js +6 -0
- package/dist/services/environment-config.js.map +1 -1
- package/dist/services/environment-custom-image-runtime.d.ts +28 -0
- package/dist/services/environment-custom-image-runtime.d.ts.map +1 -1
- package/dist/services/environment-custom-image-runtime.js +106 -7
- package/dist/services/environment-custom-image-runtime.js.map +1 -1
- package/dist/services/environment-custom-images.d.ts +31 -1
- package/dist/services/environment-custom-images.d.ts.map +1 -1
- package/dist/services/environment-custom-images.js +110 -4
- package/dist/services/environment-custom-images.js.map +1 -1
- package/dist/services/environment-execution-target.d.ts.map +1 -1
- package/dist/services/environment-execution-target.js +1 -3
- package/dist/services/environment-execution-target.js.map +1 -1
- package/dist/services/environment-probe.d.ts +1 -0
- package/dist/services/environment-probe.d.ts.map +1 -1
- package/dist/services/environment-probe.js +99 -5
- package/dist/services/environment-probe.js.map +1 -1
- package/dist/services/environments.d.ts +3 -1
- package/dist/services/environments.d.ts.map +1 -1
- package/dist/services/environments.js +98 -3
- package/dist/services/environments.js.map +1 -1
- package/dist/services/execution-workspace-policy.d.ts +29 -3
- package/dist/services/execution-workspace-policy.d.ts.map +1 -1
- package/dist/services/execution-workspace-policy.js +44 -1
- package/dist/services/execution-workspace-policy.js.map +1 -1
- package/dist/services/execution-workspaces.d.ts +64 -1
- package/dist/services/execution-workspaces.d.ts.map +1 -1
- package/dist/services/execution-workspaces.js +634 -3
- package/dist/services/execution-workspaces.js.map +1 -1
- package/dist/services/external-objects.d.ts +26 -26
- package/dist/services/feedback.d.ts +2 -2
- package/dist/services/finance.d.ts +5 -5
- package/dist/services/goals.d.ts +8 -8
- package/dist/services/heartbeat-stop-metadata.d.ts +2 -2
- package/dist/services/heartbeat-stop-metadata.d.ts.map +1 -1
- package/dist/services/heartbeat-stop-metadata.js +4 -0
- package/dist/services/heartbeat-stop-metadata.js.map +1 -1
- package/dist/services/heartbeat-stop-metadata.test.js +9 -0
- package/dist/services/heartbeat-stop-metadata.test.js.map +1 -1
- package/dist/services/heartbeat.d.ts +133 -28
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +1963 -239
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/inbox-dismissals.d.ts +26 -0
- package/dist/services/inbox-dismissals.d.ts.map +1 -1
- package/dist/services/inbox-dismissals.js +33 -18
- package/dist/services/inbox-dismissals.js.map +1 -1
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-settings.d.ts +25 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +103 -5
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/issue-continuation-summary.js +1 -1
- package/dist/services/issue-continuation-summary.js.map +1 -1
- package/dist/services/issue-recovery-actions.d.ts +3 -0
- package/dist/services/issue-recovery-actions.d.ts.map +1 -1
- package/dist/services/issue-recovery-actions.js +9 -0
- package/dist/services/issue-recovery-actions.js.map +1 -1
- package/dist/services/issue-rewake-throttle.d.ts +92 -0
- package/dist/services/issue-rewake-throttle.d.ts.map +1 -0
- package/dist/services/issue-rewake-throttle.js +139 -0
- package/dist/services/issue-rewake-throttle.js.map +1 -0
- package/dist/services/issue-thread-interactions.d.ts +8 -1
- package/dist/services/issue-thread-interactions.d.ts.map +1 -1
- package/dist/services/issue-thread-interactions.js +231 -16
- package/dist/services/issue-thread-interactions.js.map +1 -1
- package/dist/services/issue-visibility.d.ts +4 -0
- package/dist/services/issue-visibility.d.ts.map +1 -0
- package/dist/services/issue-visibility.js +9 -0
- package/dist/services/issue-visibility.js.map +1 -0
- package/dist/services/issues.d.ts +225 -105
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +540 -18
- package/dist/services/issues.js.map +1 -1
- package/dist/services/local-service-supervisor.d.ts +3 -0
- package/dist/services/local-service-supervisor.d.ts.map +1 -1
- package/dist/services/local-service-supervisor.js +51 -0
- package/dist/services/local-service-supervisor.js.map +1 -1
- package/dist/services/pipeline-case-outputs.d.ts.map +1 -1
- package/dist/services/pipeline-case-outputs.js +2 -1
- package/dist/services/pipeline-case-outputs.js.map +1 -1
- package/dist/services/pipelines-aggregation.d.ts.map +1 -1
- package/dist/services/pipelines-aggregation.js +3 -2
- package/dist/services/pipelines-aggregation.js.map +1 -1
- package/dist/services/pipelines.d.ts +165 -165
- package/dist/services/pipelines.d.ts.map +1 -1
- package/dist/services/pipelines.js +6 -4
- package/dist/services/pipelines.js.map +1 -1
- package/dist/services/plugin-database.d.ts +2 -2
- package/dist/services/plugin-environment-driver.d.ts +1 -1
- package/dist/services/plugin-host-services.d.ts.map +1 -1
- package/dist/services/plugin-host-services.js +3 -1
- package/dist/services/plugin-host-services.js.map +1 -1
- package/dist/services/plugin-managed-routines.d.ts +1 -0
- package/dist/services/plugin-managed-routines.d.ts.map +1 -1
- package/dist/services/plugin-registry.d.ts +21 -21
- package/dist/services/productivity-review.d.ts +1 -0
- package/dist/services/productivity-review.d.ts.map +1 -1
- package/dist/services/productivity-review.js +6 -5
- package/dist/services/productivity-review.js.map +1 -1
- package/dist/services/projects.d.ts +9 -9
- package/dist/services/recovery/service.d.ts +82 -54
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +200 -35
- package/dist/services/recovery/service.js.map +1 -1
- package/dist/services/recovery/successful-run-handoff.d.ts +1 -0
- package/dist/services/recovery/successful-run-handoff.d.ts.map +1 -1
- package/dist/services/recovery/successful-run-handoff.js +2 -0
- package/dist/services/recovery/successful-run-handoff.js.map +1 -1
- package/dist/services/recovery/successful-run-handoff.test.js +20 -0
- package/dist/services/recovery/successful-run-handoff.test.js.map +1 -1
- package/dist/services/resource-memberships.d.ts +13 -10
- package/dist/services/resource-memberships.d.ts.map +1 -1
- package/dist/services/resource-memberships.js +89 -20
- package/dist/services/resource-memberships.js.map +1 -1
- package/dist/services/responsible-user-denial-run-outcomes.d.ts +60 -0
- package/dist/services/responsible-user-denial-run-outcomes.d.ts.map +1 -0
- package/dist/services/responsible-user-denial-run-outcomes.js +56 -0
- package/dist/services/responsible-user-denial-run-outcomes.js.map +1 -0
- package/dist/services/responsible-user-denial-run-outcomes.test.d.ts +2 -0
- package/dist/services/responsible-user-denial-run-outcomes.test.d.ts.map +1 -0
- package/dist/services/responsible-user-denial-run-outcomes.test.js +75 -0
- package/dist/services/responsible-user-denial-run-outcomes.test.js.map +1 -0
- package/dist/services/routines.d.ts +30 -8
- package/dist/services/routines.d.ts.map +1 -1
- package/dist/services/routines.js +241 -18
- package/dist/services/routines.js.map +1 -1
- package/dist/services/run-liveness.d.ts.map +1 -1
- package/dist/services/run-liveness.js +21 -0
- package/dist/services/run-liveness.js.map +1 -1
- package/dist/services/run-log-store.d.ts +1 -0
- package/dist/services/run-log-store.d.ts.map +1 -1
- package/dist/services/run-log-store.js +4 -0
- package/dist/services/run-log-store.js.map +1 -1
- package/dist/services/run-scratch.d.ts +42 -0
- package/dist/services/run-scratch.d.ts.map +1 -0
- package/dist/services/run-scratch.js +111 -0
- package/dist/services/run-scratch.js.map +1 -0
- package/dist/services/run-scratch.test.d.ts +2 -0
- package/dist/services/run-scratch.test.d.ts.map +1 -0
- package/dist/services/run-scratch.test.js +98 -0
- package/dist/services/run-scratch.test.js.map +1 -0
- package/dist/services/secrets.d.ts +1261 -64
- package/dist/services/secrets.d.ts.map +1 -1
- package/dist/services/secrets.js +1089 -96
- package/dist/services/secrets.js.map +1 -1
- package/dist/services/task-watchdogs.d.ts +1 -0
- package/dist/services/task-watchdogs.d.ts.map +1 -1
- package/dist/services/task-watchdogs.js +78 -9
- package/dist/services/task-watchdogs.js.map +1 -1
- package/dist/services/work-timeline.d.ts.map +1 -1
- package/dist/services/work-timeline.js +34 -2
- package/dist/services/work-timeline.js.map +1 -1
- package/dist/services/workspace-runtime-read-model.d.ts +30 -29
- package/dist/services/workspace-runtime-read-model.d.ts.map +1 -1
- package/dist/services/workspace-runtime-read-model.js.map +1 -1
- package/dist/services/workspace-runtime.d.ts +59 -13
- package/dist/services/workspace-runtime.d.ts.map +1 -1
- package/dist/services/workspace-runtime.js +1121 -102
- package/dist/services/workspace-runtime.js.map +1 -1
- package/dist/skills-catalog/catalog/bundled/paperclip-operations/reflection-coach/SKILL.md +202 -0
- package/dist/skills-catalog/catalog/bundled/product/paperclip-capsules/SKILL.md +1 -1
- package/dist/skills-catalog/catalog/bundled/product/wireframe/SKILL.md +1 -1
- package/dist/skills-catalog/catalog/optional/content/release-announcement/SKILL.md +90 -0
- package/dist/skills-catalog/catalog/optional/finance/ramp/SKILL.md +98 -0
- package/dist/skills-catalog/generated/catalog.json +84 -12
- package/dist/ui-branding.d.ts +7 -0
- package/dist/ui-branding.d.ts.map +1 -1
- package/dist/ui-branding.js +8 -2
- package/dist/ui-branding.js.map +1 -1
- package/dist/version.d.ts +14 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +114 -3
- package/dist/version.js.map +1 -1
- package/package.json +19 -20
- package/skills/paperclip/SKILL.md +45 -10
- package/skills/paperclip/references/api-reference.md +246 -1
- package/skills/paperclip/references/cases.md +295 -0
- package/skills/paperclip/references/company-skills.md +1 -1
- package/skills/paperclip-board/SKILL.md +3 -4
- package/skills/paperclip-converting-plans-to-tasks/SKILL.md +3 -7
- package/skills/para-memory-files/SKILL.md +3 -7
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BsFz2IiG.js → abnfDiagram-VRR7QNED-Cy91Tlk9.js} +1 -1
- package/ui-dist/assets/{arc-HZhAwbOs.js → arc-BBAQu311.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-BteMjuOn.js → architectureDiagram-ZJ3FMSHR-BrTSDi88.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-Iq66uZjf.js → blockDiagram-677ZJIJ3-e5uziFO5.js} +1 -1
- package/ui-dist/assets/{browser-ponyfill-BBsuyZJt.js → browser-ponyfill-D8l5pq-s.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-_nlglj7I.js → c4Diagram-LMCZKHZV-DQjqZvNw.js} +1 -1
- package/ui-dist/assets/channel-FQ5LRr4r.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-Cvz7WwSQ.js → chunk-2Q5K7J3B-ff7RVJIE.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-LLubniCS.js → chunk-32BRIVSS-DUJjWWOm.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-BOst5hcr.js → chunk-5VM5RSS4-0Yi4VBgb.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-D5WNShVm.js → chunk-EX3LRPZG-NKvQ4wVr.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-CA07x4av.js → chunk-JWPE2WC7-C9fJ6g-i.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-Clfi83rK.js → chunk-MOJQB5TN-DEFFsbL_.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-BhZ6p7YJ.js → chunk-RYQCIY6F-B3v41_7G.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-CdexJGoV.js → chunk-V7JOEXUC-DVUU3xAk.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-8vjmBhr1.js → chunk-VR4S4FIN-bemyw0k2.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-CqmCaplj.js → chunk-XXDRQBXY-CWvhgyeb.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-QaL1os8Q.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-QaL1os8Q.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-CY-zAygY.js → cose-bilkent-JH36ORCC-E-2cLOc1.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-BQSQ1HKr.js → cynefin-VYW2F7L2-CxotRukv.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-NJCuFrZL.js → cynefinDiagram-TSTJHNR4-AGQOPMl5.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-DAUPIc8g.js → dagre-VKFMJZFB-BxLGfVbk.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-DvMwJlCi.js → diagram-FQU43EPY-DWXO_O6m.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-DPY0Jz_y.js → diagram-G47NLZAW-C3WsiNNv.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-BpopeEhp.js → diagram-NH7WQ7WH-CbLSRXTf.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-Qpu05z9X.js → diagram-OA4YK3LP-hwvxJr04.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-DHnvw9XU.js → diagram-WEI45ONY-xwXsnT5Q.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-D61S54_7.js → ebnfDiagram-CCIWWBDH-G311pLCP.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-pplAN_x2.js → erDiagram-Q63AITRT-BnnuR_2P.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-BaBcbyDq.js → flowDiagram-23GEKE2U-CSHgefz-.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-BOJSII2b.js → ganttDiagram-NO4QXBWP-CERr9vTh.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-aYAaO4a2.js → gitGraphDiagram-IHSO6WYX-DHFHVLdn.js} +1 -1
- package/ui-dist/assets/{index-TmpY6Xh_.js → index-B-quLPan.js} +1 -1
- package/ui-dist/assets/{index-LHkZdu0h.js → index-B6QznFjN.js} +1 -1
- package/ui-dist/assets/{index-3EKATXgc.js → index-B7BUwUuV.js} +1 -1
- package/ui-dist/assets/{index-CvPPuNs1.js → index-BDiZss3L.js} +1 -1
- package/ui-dist/assets/{index-BaiskB3o.js → index-BHdxZ8mW.js} +1 -1
- package/ui-dist/assets/{index-CZxYajxF.js → index-BP3GWFFq.js} +1 -1
- package/ui-dist/assets/{index-B5YenxAQ.js → index-BPjK1nba.js} +1 -1
- package/ui-dist/assets/{index-BKVeJ3Jh.js → index-BUGIBR28.js} +1 -1
- package/ui-dist/assets/{index-BRgdHUNR.js → index-BVe5Mpsj.js} +1 -1
- package/ui-dist/assets/{index-Dceamza_.js → index-B_vsK1nr.js} +1 -1
- package/ui-dist/assets/{index-DrL6pHSJ.js → index-BbtsvYoS.js} +1 -1
- package/ui-dist/assets/{index-CemenVOf.js → index-CCptD5rH.js} +1 -1
- package/ui-dist/assets/{index-C-nKjFZh.js → index-CPd0SXS5.js} +1 -1
- package/ui-dist/assets/index-C_R8L9b5.js +676 -0
- package/ui-dist/assets/{index-B8H0SHw1.js → index-CuR0ldHA.js} +1 -1
- package/ui-dist/assets/{index-CKKytnOd.js → index-CvKZQ7p2.js} +1 -1
- package/ui-dist/assets/index-CyuYtn7U.css +1 -0
- package/ui-dist/assets/{index-D3ODiUup.js → index-DSwKPLnt.js} +1 -1
- package/ui-dist/assets/{index-CJlw4l9L.js → index-Daq0pXqe.js} +1 -1
- package/ui-dist/assets/{index-bUFCSEgv.js → index-DmsO--MD.js} +1 -1
- package/ui-dist/assets/{index-Da2kqT1M.js → index-DozP52ue.js} +1 -1
- package/ui-dist/assets/{index-C2JgdjPa.js → index-DxjbpC1V.js} +1 -1
- package/ui-dist/assets/{index-By0oeEvz.js → index-H1y6lR4h.js} +1 -1
- package/ui-dist/assets/{index-BT8b79Bd.js → index-ICaKahDe.js} +1 -1
- package/ui-dist/assets/{index-CjDqB1SX.js → index-q2ZXRiiu.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-C7_90qGq.js → infoDiagram-FWYZ7A6U-BX-kzcCv.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-T-nPPdTt.js → ishikawaDiagram-FXEZZL3T-CRO2OGCv.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-C3hqQN0R.js → journeyDiagram-5HDEW3XC-Di6QSKTh.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-CPoD9DUm.js → kanban-definition-HUTT4EX6-D9TB3XsU.js} +1 -1
- package/ui-dist/assets/{linear-D-S8yr3Z.js → linear-DNuyBs03.js} +1 -1
- package/ui-dist/assets/{mermaid.core-DhvH8shK.js → mermaid.core-CRXbfGc8.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-CxCIKrKo.js → mindmap-definition-LN4V7U3C-BVxJgBfB.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-D4G-PC6N.js → pegDiagram-2B236MQR-BuMRgd7M.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-N4X8UvqY.js → pieDiagram-ENE6RG2P-DFT7WuwK.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-CZohoDln.js → quadrantDiagram-ABIIQ3AL-HOLkwSzD.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-fMGQVhwF.js → railroadDiagram-RFXS5EU6-BND-mOri.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-CK0IuUmk.js → requirementDiagram-TGXJPOKE-BOa8A9lE.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-pSfb3CqG.js → sankeyDiagram-HTMAVEWB-B7cM3qvd.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-CbhkqIeq.js → sequenceDiagram-DBY2YBRQ-ClQvkzoo.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-B6vqqPx-.js → sizeCapture-X5ZJPWSS-D4r_s7na.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-DIJf9h5C.js → stateDiagram-2N3HPSRC-Cx0UQpxD.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-C8L1NW8Q.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-DIX_LV8O.js → swimlanes-5IMT3BWC-cGIUWMIm.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Dj9aJ1a_.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-CD-Pxb_g.js → timeline-definition-FHXFAJF6-BUHQ5Auj.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-BAZsWL0R.js → vennDiagram-L72KCM5P-TvbS6VWx.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-CnNyfwX5.js → wardleyDiagram-EHGQE667-VkQDXzb8.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-j9YgsD3Y.js → xychartDiagram-FW5EYKEG-ButPn9aQ.js} +1 -1
- package/ui-dist/fonts/InterVariable-Italic.woff2 +0 -0
- package/ui-dist/fonts/InterVariable.woff2 +0 -0
- package/ui-dist/fonts/NOTICE.md +17 -0
- package/ui-dist/index.html +2 -2
- package/ui-dist/locales/en/common.json +1002 -2
- package/ui-dist/locales/zh-CN/common.json +1003 -3
- package/ui-dist/assets/channel-CsiI2LYw.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-CBn1Jqo8.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CBn1Jqo8.js +0 -1
- package/ui-dist/assets/index-BsL8K1vL.css +0 -1
- package/ui-dist/assets/index-D__fTsb2.js +0 -643
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DpwLD7YL.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Cklauutg.js +0 -8
|
@@ -16,12 +16,17 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
16
16
|
status?: "open" | "resolved" | "all";
|
|
17
17
|
includeComments?: boolean;
|
|
18
18
|
}) => Promise<DocumentAnnotationThread[]>;
|
|
19
|
+
listThreadsForCaseDocument: (caseId: string, key: string, options?: {
|
|
20
|
+
status?: "open" | "resolved" | "all";
|
|
21
|
+
includeComments?: boolean;
|
|
22
|
+
}) => Promise<DocumentAnnotationThread[]>;
|
|
19
23
|
getThreadForIssueDocument: (issueId: string, key: string, threadId: string) => Promise<{
|
|
20
24
|
comments: DocumentAnnotationComment[];
|
|
21
25
|
id: string;
|
|
22
26
|
companyId: string;
|
|
23
27
|
issueId: string | null;
|
|
24
28
|
routineId?: string | null;
|
|
29
|
+
caseId?: string | null;
|
|
25
30
|
documentId: string;
|
|
26
31
|
documentKey: string;
|
|
27
32
|
status: import("@penclipai/shared").DocumentAnnotationThreadStatus;
|
|
@@ -53,6 +58,39 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
53
58
|
companyId: string;
|
|
54
59
|
issueId: string | null;
|
|
55
60
|
routineId?: string | null;
|
|
61
|
+
caseId?: string | null;
|
|
62
|
+
documentId: string;
|
|
63
|
+
documentKey: string;
|
|
64
|
+
status: import("@penclipai/shared").DocumentAnnotationThreadStatus;
|
|
65
|
+
anchorState: import("@penclipai/shared").DocumentAnnotationAnchorState;
|
|
66
|
+
anchorConfidence: import("@penclipai/shared").DocumentAnnotationAnchorConfidence;
|
|
67
|
+
originalRevisionId: string | null;
|
|
68
|
+
originalRevisionNumber: number;
|
|
69
|
+
currentRevisionId: string | null;
|
|
70
|
+
currentRevisionNumber: number;
|
|
71
|
+
selectedText: string;
|
|
72
|
+
prefixText: string;
|
|
73
|
+
suffixText: string;
|
|
74
|
+
normalizedStart: number;
|
|
75
|
+
normalizedEnd: number;
|
|
76
|
+
markdownStart: number;
|
|
77
|
+
markdownEnd: number;
|
|
78
|
+
anchorSelector: import("@penclipai/shared").DocumentAnnotationAnchorSelector;
|
|
79
|
+
createdByAgentId: string | null;
|
|
80
|
+
createdByUserId: string | null;
|
|
81
|
+
resolvedByAgentId: string | null;
|
|
82
|
+
resolvedByUserId: string | null;
|
|
83
|
+
resolvedAt: Date | null;
|
|
84
|
+
createdAt: Date;
|
|
85
|
+
updatedAt: Date;
|
|
86
|
+
} | null>;
|
|
87
|
+
getThreadForCaseDocument: (caseId: string, key: string, threadId: string) => Promise<{
|
|
88
|
+
comments: DocumentAnnotationComment[];
|
|
89
|
+
id: string;
|
|
90
|
+
companyId: string;
|
|
91
|
+
issueId: string | null;
|
|
92
|
+
routineId?: string | null;
|
|
93
|
+
caseId?: string | null;
|
|
56
94
|
documentId: string;
|
|
57
95
|
documentKey: string;
|
|
58
96
|
status: import("@penclipai/shared").DocumentAnnotationThreadStatus;
|
|
@@ -85,6 +123,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
85
123
|
threadId: string;
|
|
86
124
|
issueId: string | null;
|
|
87
125
|
routineId: string | null;
|
|
126
|
+
caseId: string | null;
|
|
88
127
|
documentId: string;
|
|
89
128
|
body: string;
|
|
90
129
|
authorType: "user" | "agent" | "system";
|
|
@@ -99,6 +138,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
99
138
|
companyId: string;
|
|
100
139
|
issueId: string | null;
|
|
101
140
|
routineId: string | null;
|
|
141
|
+
caseId: string | null;
|
|
102
142
|
documentId: string;
|
|
103
143
|
documentKey: string;
|
|
104
144
|
status: "resolved" | "open";
|
|
@@ -131,6 +171,55 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
131
171
|
threadId: string;
|
|
132
172
|
issueId: string | null;
|
|
133
173
|
routineId: string | null;
|
|
174
|
+
caseId: string | null;
|
|
175
|
+
documentId: string;
|
|
176
|
+
body: string;
|
|
177
|
+
authorType: "user" | "agent" | "system";
|
|
178
|
+
authorAgentId: string | null;
|
|
179
|
+
authorUserId: string | null;
|
|
180
|
+
createdByRunId: string | null;
|
|
181
|
+
issueCommentId: string | null;
|
|
182
|
+
createdAt: Date;
|
|
183
|
+
updatedAt: Date;
|
|
184
|
+
}[];
|
|
185
|
+
id: string;
|
|
186
|
+
companyId: string;
|
|
187
|
+
issueId: string | null;
|
|
188
|
+
routineId: string | null;
|
|
189
|
+
caseId: string | null;
|
|
190
|
+
documentId: string;
|
|
191
|
+
documentKey: string;
|
|
192
|
+
status: "resolved" | "open";
|
|
193
|
+
anchorState: "active" | "stale" | "orphaned";
|
|
194
|
+
anchorConfidence: "exact" | "duplicate" | "fuzzy" | "ambiguous" | "missing";
|
|
195
|
+
originalRevisionId: string | null;
|
|
196
|
+
originalRevisionNumber: number;
|
|
197
|
+
currentRevisionId: string | null;
|
|
198
|
+
currentRevisionNumber: number;
|
|
199
|
+
selectedText: string;
|
|
200
|
+
prefixText: string;
|
|
201
|
+
suffixText: string;
|
|
202
|
+
normalizedStart: number;
|
|
203
|
+
normalizedEnd: number;
|
|
204
|
+
markdownStart: number;
|
|
205
|
+
markdownEnd: number;
|
|
206
|
+
anchorSelector: import("@penclipai/shared").DocumentAnnotationAnchorSelector;
|
|
207
|
+
createdByAgentId: string | null;
|
|
208
|
+
createdByUserId: string | null;
|
|
209
|
+
resolvedByAgentId: string | null;
|
|
210
|
+
resolvedByUserId: string | null;
|
|
211
|
+
resolvedAt: Date | null;
|
|
212
|
+
createdAt: Date;
|
|
213
|
+
updatedAt: Date;
|
|
214
|
+
}>;
|
|
215
|
+
createCaseThread: (caseId: string, key: string, input: CreateDocumentAnnotationThread, actor: ActorInput) => Promise<{
|
|
216
|
+
comments: {
|
|
217
|
+
id: string;
|
|
218
|
+
companyId: string;
|
|
219
|
+
threadId: string;
|
|
220
|
+
issueId: string | null;
|
|
221
|
+
routineId: string | null;
|
|
222
|
+
caseId: string | null;
|
|
134
223
|
documentId: string;
|
|
135
224
|
body: string;
|
|
136
225
|
authorType: "user" | "agent" | "system";
|
|
@@ -145,6 +234,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
145
234
|
companyId: string;
|
|
146
235
|
issueId: string | null;
|
|
147
236
|
routineId: string | null;
|
|
237
|
+
caseId: string | null;
|
|
148
238
|
documentId: string;
|
|
149
239
|
documentKey: string;
|
|
150
240
|
status: "resolved" | "open";
|
|
@@ -176,6 +266,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
176
266
|
threadId: string;
|
|
177
267
|
issueId: string | null;
|
|
178
268
|
routineId: string | null;
|
|
269
|
+
caseId: string | null;
|
|
179
270
|
documentId: string;
|
|
180
271
|
body: string;
|
|
181
272
|
authorType: "user" | "agent" | "system";
|
|
@@ -192,6 +283,24 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
192
283
|
threadId: string;
|
|
193
284
|
issueId: string | null;
|
|
194
285
|
routineId: string | null;
|
|
286
|
+
caseId: string | null;
|
|
287
|
+
documentId: string;
|
|
288
|
+
body: string;
|
|
289
|
+
authorType: "user" | "agent" | "system";
|
|
290
|
+
authorAgentId: string | null;
|
|
291
|
+
authorUserId: string | null;
|
|
292
|
+
createdByRunId: string | null;
|
|
293
|
+
issueCommentId: string | null;
|
|
294
|
+
createdAt: Date;
|
|
295
|
+
updatedAt: Date;
|
|
296
|
+
}>;
|
|
297
|
+
addCaseComment: (caseId: string, key: string, threadId: string, input: CreateDocumentAnnotationComment, actor: ActorInput) => Promise<{
|
|
298
|
+
id: string;
|
|
299
|
+
companyId: string;
|
|
300
|
+
threadId: string;
|
|
301
|
+
issueId: string | null;
|
|
302
|
+
routineId: string | null;
|
|
303
|
+
caseId: string | null;
|
|
195
304
|
documentId: string;
|
|
196
305
|
body: string;
|
|
197
306
|
authorType: "user" | "agent" | "system";
|
|
@@ -208,6 +317,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
208
317
|
}>;
|
|
209
318
|
updateThread: (issueId: string, key: string, threadId: string, input: UpdateDocumentAnnotationThread, actor: ActorInput) => Promise<DocumentAnnotationThread>;
|
|
210
319
|
updateRoutineThread: (routineId: string, key: string, threadId: string, input: UpdateDocumentAnnotationThread, actor: ActorInput) => Promise<DocumentAnnotationThread>;
|
|
320
|
+
updateCaseThread: (caseId: string, key: string, threadId: string, input: UpdateDocumentAnnotationThread, actor: ActorInput) => Promise<DocumentAnnotationThread>;
|
|
211
321
|
remapOpenThreadsForDocument: (input: {
|
|
212
322
|
issueId: string;
|
|
213
323
|
key: string;
|
|
@@ -221,6 +331,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
221
331
|
companyId: string;
|
|
222
332
|
issueId: string | null;
|
|
223
333
|
routineId: string | null;
|
|
334
|
+
caseId: string | null;
|
|
224
335
|
documentId: string;
|
|
225
336
|
documentKey: string;
|
|
226
337
|
status: "resolved" | "open";
|
|
@@ -247,9 +358,9 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
247
358
|
updatedAt: Date;
|
|
248
359
|
};
|
|
249
360
|
snapshot: {
|
|
361
|
+
companyId: string;
|
|
250
362
|
id: string;
|
|
251
363
|
createdAt: Date;
|
|
252
|
-
companyId: string;
|
|
253
364
|
documentId: string;
|
|
254
365
|
failureReason: string | null;
|
|
255
366
|
anchorState: "active" | "stale" | "orphaned";
|
|
@@ -276,6 +387,7 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
276
387
|
companyId: string;
|
|
277
388
|
issueId: string | null;
|
|
278
389
|
routineId: string | null;
|
|
390
|
+
caseId: string | null;
|
|
279
391
|
documentId: string;
|
|
280
392
|
documentKey: string;
|
|
281
393
|
status: "resolved" | "open";
|
|
@@ -302,9 +414,65 @@ export declare function documentAnnotationService(db: Db): {
|
|
|
302
414
|
updatedAt: Date;
|
|
303
415
|
};
|
|
304
416
|
snapshot: {
|
|
417
|
+
companyId: string;
|
|
418
|
+
id: string;
|
|
419
|
+
createdAt: Date;
|
|
420
|
+
documentId: string;
|
|
421
|
+
failureReason: string | null;
|
|
422
|
+
anchorState: "active" | "stale" | "orphaned";
|
|
423
|
+
anchorConfidence: "exact" | "duplicate" | "fuzzy" | "ambiguous" | "missing";
|
|
424
|
+
threadId: string;
|
|
425
|
+
fromRevisionId: string | null;
|
|
426
|
+
fromRevisionNumber: number | null;
|
|
427
|
+
toRevisionId: string | null;
|
|
428
|
+
toRevisionNumber: number;
|
|
429
|
+
previousAnchor: DocumentAnnotationAnchorSnapshot;
|
|
430
|
+
nextAnchor: DocumentAnnotationAnchorSnapshot | null;
|
|
431
|
+
};
|
|
432
|
+
}[]>;
|
|
433
|
+
remapOpenThreadsForCaseDocument: (input: {
|
|
434
|
+
caseId: string;
|
|
435
|
+
key: string;
|
|
436
|
+
documentId: string;
|
|
437
|
+
nextRevisionId: string | null;
|
|
438
|
+
nextRevisionNumber: number;
|
|
439
|
+
nextBody: string;
|
|
440
|
+
}) => Promise<{
|
|
441
|
+
thread: {
|
|
305
442
|
id: string;
|
|
443
|
+
companyId: string;
|
|
444
|
+
issueId: string | null;
|
|
445
|
+
routineId: string | null;
|
|
446
|
+
caseId: string | null;
|
|
447
|
+
documentId: string;
|
|
448
|
+
documentKey: string;
|
|
449
|
+
status: "resolved" | "open";
|
|
450
|
+
anchorState: "active" | "stale" | "orphaned";
|
|
451
|
+
anchorConfidence: "exact" | "duplicate" | "fuzzy" | "ambiguous" | "missing";
|
|
452
|
+
originalRevisionId: string | null;
|
|
453
|
+
originalRevisionNumber: number;
|
|
454
|
+
currentRevisionId: string | null;
|
|
455
|
+
currentRevisionNumber: number;
|
|
456
|
+
selectedText: string;
|
|
457
|
+
prefixText: string;
|
|
458
|
+
suffixText: string;
|
|
459
|
+
normalizedStart: number;
|
|
460
|
+
normalizedEnd: number;
|
|
461
|
+
markdownStart: number;
|
|
462
|
+
markdownEnd: number;
|
|
463
|
+
anchorSelector: import("@penclipai/shared").DocumentAnnotationAnchorSelector;
|
|
464
|
+
createdByAgentId: string | null;
|
|
465
|
+
createdByUserId: string | null;
|
|
466
|
+
resolvedByAgentId: string | null;
|
|
467
|
+
resolvedByUserId: string | null;
|
|
468
|
+
resolvedAt: Date | null;
|
|
306
469
|
createdAt: Date;
|
|
470
|
+
updatedAt: Date;
|
|
471
|
+
};
|
|
472
|
+
snapshot: {
|
|
307
473
|
companyId: string;
|
|
474
|
+
id: string;
|
|
475
|
+
createdAt: Date;
|
|
308
476
|
documentId: string;
|
|
309
477
|
failureReason: string | null;
|
|
310
478
|
anchorState: "active" | "stale" | "orphaned";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-annotations.d.ts","sourceRoot":"","sources":["../../src/services/document-annotations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"document-annotations.d.ts","sourceRoot":"","sources":["../../src/services/document-annotations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAWxC,OAAO,EAGL,wBAAwB,EAExB,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,mBAAmB,CAAC;AAG3B,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AA8FF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,EAAE;2CA+JjC,MAAM,OACV,MAAM,YACF;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;+CA+BjE,MAAM,OACZ,MAAM,YACF;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;yCAgCpE,MAAM,OACT,MAAM,YACF;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;yCA+BnC,MAAM,OAAO,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAOjC,MAAM,OAAO,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAS3C,MAAM,OAAO,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAUnE,MAAM,OACV,MAAM,SACJ,8BAA8B,SAC9B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoFN,MAAM,OACZ,MAAM,SACJ,8BAA8B,SAC9B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAqFT,MAAM,OACT,MAAM,SACJ,8BAA8B,SAC9B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAuFR,MAAM,OACV,MAAM,YACD,MAAM,SACT,+BAA+B,SAC/B,UAAU;;;;;;;;;;;;;;;;;mCA+BN,MAAM,OACZ,MAAM,YACD,MAAM,SACT,+BAA+B,SAC/B,UAAU;;;;;;;;;;;;;;;;;6BAiCT,MAAM,OACT,MAAM,YACD,MAAM,SACT,+BAA+B,SAC/B,UAAU;;;;;;;;;;;;;;;;;8CAkCR,MAAM,kBACC,MAAM,SACf,UAAU,WACT,GAAG;;;;4BA8DF,MAAM,OACV,MAAM,YACD,MAAM,SACT,8BAA8B,SAC9B,UAAU;qCA8BN,MAAM,OACZ,MAAM,YACD,MAAM,SACT,8BAA8B,SAC9B,UAAU;+BAgCT,MAAM,OACT,MAAM,YACD,MAAM,SACT,8BAA8B,SAC9B,UAAU;yCA+BwB;QACzC,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;KAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAoEiD;QAChD,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;KAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAoE8C;QAC7C,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;KAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { and, asc, desc, eq, inArray, isNull, sql } from "drizzle-orm";
|
|
2
|
-
import { documentAnnotationAnchorSnapshots, documentAnnotationComments, documentAnnotationThreads, documents, issueComments, issueDocuments, routineDocuments, } from "@penclipai/db";
|
|
2
|
+
import { documentAnnotationAnchorSnapshots, documentAnnotationComments, documentAnnotationThreads, documents, caseDocuments, issueComments, issueDocuments, routineDocuments, } from "@penclipai/db";
|
|
3
3
|
import { anchorSnapshotToSelector, remapDocumentAnchor, selectorToAnchorSnapshot, verifyDocumentAnchorSelector, } from "@penclipai/shared";
|
|
4
4
|
import { conflict, notFound, unprocessable } from "../errors.js";
|
|
5
5
|
const threadSelect = {
|
|
@@ -7,6 +7,7 @@ const threadSelect = {
|
|
|
7
7
|
companyId: documentAnnotationThreads.companyId,
|
|
8
8
|
issueId: documentAnnotationThreads.issueId,
|
|
9
9
|
routineId: documentAnnotationThreads.routineId,
|
|
10
|
+
caseId: documentAnnotationThreads.caseId,
|
|
10
11
|
documentId: documentAnnotationThreads.documentId,
|
|
11
12
|
documentKey: documentAnnotationThreads.documentKey,
|
|
12
13
|
status: documentAnnotationThreads.status,
|
|
@@ -38,6 +39,7 @@ const commentSelect = {
|
|
|
38
39
|
threadId: documentAnnotationComments.threadId,
|
|
39
40
|
issueId: documentAnnotationComments.issueId,
|
|
40
41
|
routineId: documentAnnotationComments.routineId,
|
|
42
|
+
caseId: documentAnnotationComments.caseId,
|
|
41
43
|
documentId: documentAnnotationComments.documentId,
|
|
42
44
|
body: documentAnnotationComments.body,
|
|
43
45
|
authorType: documentAnnotationComments.authorType,
|
|
@@ -92,6 +94,22 @@ export function documentAnnotationService(db) {
|
|
|
92
94
|
.where(and(eq(routineDocuments.routineId, routineId), eq(routineDocuments.key, key), eq(routineDocuments.companyId, documents.companyId)))
|
|
93
95
|
.then((rows) => rows[0] ?? null);
|
|
94
96
|
}
|
|
97
|
+
async function getCaseDocument(caseId, key, dbOrTx = db) {
|
|
98
|
+
return dbOrTx
|
|
99
|
+
.select({
|
|
100
|
+
caseId: caseDocuments.caseId,
|
|
101
|
+
companyId: documents.companyId,
|
|
102
|
+
documentId: documents.id,
|
|
103
|
+
documentKey: caseDocuments.key,
|
|
104
|
+
latestBody: documents.latestBody,
|
|
105
|
+
latestRevisionId: documents.latestRevisionId,
|
|
106
|
+
latestRevisionNumber: documents.latestRevisionNumber,
|
|
107
|
+
})
|
|
108
|
+
.from(caseDocuments)
|
|
109
|
+
.innerJoin(documents, eq(caseDocuments.documentId, documents.id))
|
|
110
|
+
.where(and(eq(caseDocuments.caseId, caseId), eq(caseDocuments.key, key), eq(caseDocuments.companyId, documents.companyId)))
|
|
111
|
+
.then((rows) => rows[0] ?? null);
|
|
112
|
+
}
|
|
95
113
|
async function getThreadForIssue(issueId, documentKey, threadId, dbOrTx = db) {
|
|
96
114
|
return dbOrTx
|
|
97
115
|
.select(threadSelect)
|
|
@@ -106,6 +124,13 @@ export function documentAnnotationService(db) {
|
|
|
106
124
|
.where(and(eq(documentAnnotationThreads.id, threadId), eq(documentAnnotationThreads.companyId, companyId), eq(documentAnnotationThreads.routineId, routineId), eq(documentAnnotationThreads.documentId, documentId), eq(documentAnnotationThreads.documentKey, documentKey)))
|
|
107
125
|
.then((rows) => rows[0] ?? null);
|
|
108
126
|
}
|
|
127
|
+
async function getThreadForCase(caseId, documentKey, threadId, companyId, documentId, dbOrTx = db) {
|
|
128
|
+
return dbOrTx
|
|
129
|
+
.select(threadSelect)
|
|
130
|
+
.from(documentAnnotationThreads)
|
|
131
|
+
.where(and(eq(documentAnnotationThreads.id, threadId), eq(documentAnnotationThreads.companyId, companyId), eq(documentAnnotationThreads.caseId, caseId), eq(documentAnnotationThreads.documentId, documentId), eq(documentAnnotationThreads.documentKey, documentKey)))
|
|
132
|
+
.then((rows) => rows[0] ?? null);
|
|
133
|
+
}
|
|
109
134
|
async function commentsForThreads(threadIds, dbOrTx = db) {
|
|
110
135
|
if (threadIds.length === 0)
|
|
111
136
|
return [];
|
|
@@ -194,6 +219,37 @@ export function documentAnnotationService(db) {
|
|
|
194
219
|
comments: commentsByThread.get(thread.id) ?? [],
|
|
195
220
|
}));
|
|
196
221
|
},
|
|
222
|
+
listThreadsForCaseDocument: async (caseId, key, options = {}) => {
|
|
223
|
+
const doc = await getCaseDocument(caseId, key);
|
|
224
|
+
if (!doc)
|
|
225
|
+
throw notFound("Document not found");
|
|
226
|
+
const conditions = [
|
|
227
|
+
eq(documentAnnotationThreads.companyId, doc.companyId),
|
|
228
|
+
eq(documentAnnotationThreads.caseId, caseId),
|
|
229
|
+
eq(documentAnnotationThreads.documentId, doc.documentId),
|
|
230
|
+
];
|
|
231
|
+
if (options.status && options.status !== "all") {
|
|
232
|
+
conditions.push(eq(documentAnnotationThreads.status, options.status));
|
|
233
|
+
}
|
|
234
|
+
const threads = await db
|
|
235
|
+
.select(threadSelect)
|
|
236
|
+
.from(documentAnnotationThreads)
|
|
237
|
+
.where(and(...conditions))
|
|
238
|
+
.orderBy(desc(documentAnnotationThreads.updatedAt), desc(documentAnnotationThreads.id));
|
|
239
|
+
if (!options.includeComments)
|
|
240
|
+
return threads;
|
|
241
|
+
const comments = await commentsForThreads(threads.map((thread) => thread.id));
|
|
242
|
+
const commentsByThread = new Map();
|
|
243
|
+
for (const comment of comments) {
|
|
244
|
+
const existing = commentsByThread.get(comment.threadId) ?? [];
|
|
245
|
+
existing.push(comment);
|
|
246
|
+
commentsByThread.set(comment.threadId, existing);
|
|
247
|
+
}
|
|
248
|
+
return threads.map((thread) => ({
|
|
249
|
+
...thread,
|
|
250
|
+
comments: commentsByThread.get(thread.id) ?? [],
|
|
251
|
+
}));
|
|
252
|
+
},
|
|
197
253
|
getThreadForIssueDocument: async (issueId, key, threadId) => {
|
|
198
254
|
const thread = await getThreadForIssue(issueId, key, threadId);
|
|
199
255
|
if (!thread)
|
|
@@ -211,6 +267,16 @@ export function documentAnnotationService(db) {
|
|
|
211
267
|
const comments = await commentsForThreads([thread.id]);
|
|
212
268
|
return { ...thread, comments };
|
|
213
269
|
},
|
|
270
|
+
getThreadForCaseDocument: async (caseId, key, threadId) => {
|
|
271
|
+
const doc = await getCaseDocument(caseId, key);
|
|
272
|
+
if (!doc)
|
|
273
|
+
return null;
|
|
274
|
+
const thread = await getThreadForCase(caseId, key, threadId, doc.companyId, doc.documentId);
|
|
275
|
+
if (!thread)
|
|
276
|
+
return null;
|
|
277
|
+
const comments = await commentsForThreads([thread.id]);
|
|
278
|
+
return { ...thread, comments };
|
|
279
|
+
},
|
|
214
280
|
createThread: async (issueId, key, input, actor) => db.transaction(async (tx) => {
|
|
215
281
|
await tx.execute(sql `
|
|
216
282
|
select ${documents.id}
|
|
@@ -364,6 +430,85 @@ export function documentAnnotationService(db) {
|
|
|
364
430
|
.returning(commentSelect);
|
|
365
431
|
return { ...thread, comments: [comment] };
|
|
366
432
|
}),
|
|
433
|
+
createCaseThread: async (caseId, key, input, actor) => db.transaction(async (tx) => {
|
|
434
|
+
await tx.execute(sql `
|
|
435
|
+
select ${documents.id}
|
|
436
|
+
from ${caseDocuments}
|
|
437
|
+
inner join ${documents} on ${caseDocuments.documentId} = ${documents.id}
|
|
438
|
+
where ${and(eq(caseDocuments.caseId, caseId), eq(caseDocuments.key, key))}
|
|
439
|
+
for update of ${documents}
|
|
440
|
+
`);
|
|
441
|
+
const doc = await getCaseDocument(caseId, key, tx);
|
|
442
|
+
if (!doc)
|
|
443
|
+
throw notFound("Document not found");
|
|
444
|
+
if (input.baseRevisionId !== doc.latestRevisionId
|
|
445
|
+
|| input.baseRevisionNumber !== doc.latestRevisionNumber) {
|
|
446
|
+
throw conflict("Annotation anchor requires the current document revision", {
|
|
447
|
+
currentRevisionId: doc.latestRevisionId,
|
|
448
|
+
currentRevisionNumber: doc.latestRevisionNumber,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
const verification = verifyDocumentAnchorSelector({
|
|
452
|
+
markdown: doc.latestBody,
|
|
453
|
+
selector: input.selector,
|
|
454
|
+
});
|
|
455
|
+
if (!verification.ok || !verification.anchor) {
|
|
456
|
+
throw unprocessable("Annotation anchor does not match the current document revision", {
|
|
457
|
+
reason: verification.reason,
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
const now = new Date();
|
|
461
|
+
const [thread] = await tx
|
|
462
|
+
.insert(documentAnnotationThreads)
|
|
463
|
+
.values({
|
|
464
|
+
companyId: doc.companyId,
|
|
465
|
+
issueId: null,
|
|
466
|
+
routineId: null,
|
|
467
|
+
caseId,
|
|
468
|
+
documentId: doc.documentId,
|
|
469
|
+
documentKey: doc.documentKey,
|
|
470
|
+
status: "open",
|
|
471
|
+
anchorState: "active",
|
|
472
|
+
anchorConfidence: "exact",
|
|
473
|
+
originalRevisionId: doc.latestRevisionId,
|
|
474
|
+
originalRevisionNumber: doc.latestRevisionNumber,
|
|
475
|
+
currentRevisionId: doc.latestRevisionId,
|
|
476
|
+
currentRevisionNumber: doc.latestRevisionNumber,
|
|
477
|
+
selectedText: verification.anchor.selectedText,
|
|
478
|
+
prefixText: verification.anchor.prefixText,
|
|
479
|
+
suffixText: verification.anchor.suffixText,
|
|
480
|
+
normalizedStart: verification.anchor.normalizedStart,
|
|
481
|
+
normalizedEnd: verification.anchor.normalizedEnd,
|
|
482
|
+
markdownStart: verification.anchor.markdownStart,
|
|
483
|
+
markdownEnd: verification.anchor.markdownEnd,
|
|
484
|
+
anchorSelector: input.selector,
|
|
485
|
+
createdByAgentId: actor.agentId ?? null,
|
|
486
|
+
createdByUserId: actor.userId ?? null,
|
|
487
|
+
createdAt: now,
|
|
488
|
+
updatedAt: now,
|
|
489
|
+
})
|
|
490
|
+
.returning(threadSelect);
|
|
491
|
+
const [comment] = await tx
|
|
492
|
+
.insert(documentAnnotationComments)
|
|
493
|
+
.values({
|
|
494
|
+
companyId: doc.companyId,
|
|
495
|
+
threadId: thread.id,
|
|
496
|
+
issueId: null,
|
|
497
|
+
routineId: null,
|
|
498
|
+
caseId,
|
|
499
|
+
documentId: doc.documentId,
|
|
500
|
+
body: input.body,
|
|
501
|
+
authorType: actor.actorType,
|
|
502
|
+
authorAgentId: actor.agentId ?? null,
|
|
503
|
+
authorUserId: actor.userId ?? null,
|
|
504
|
+
createdByRunId: actor.runId ?? null,
|
|
505
|
+
issueCommentId: null,
|
|
506
|
+
createdAt: now,
|
|
507
|
+
updatedAt: now,
|
|
508
|
+
})
|
|
509
|
+
.returning(commentSelect);
|
|
510
|
+
return { ...thread, comments: [comment] };
|
|
511
|
+
}),
|
|
367
512
|
addComment: async (issueId, key, threadId, input, actor) => db.transaction(async (tx) => {
|
|
368
513
|
const thread = await getThreadForIssue(issueId, key, threadId, tx);
|
|
369
514
|
if (!thread)
|
|
@@ -425,6 +570,39 @@ export function documentAnnotationService(db) {
|
|
|
425
570
|
.where(eq(documentAnnotationThreads.id, thread.id));
|
|
426
571
|
return comment;
|
|
427
572
|
}),
|
|
573
|
+
addCaseComment: async (caseId, key, threadId, input, actor) => db.transaction(async (tx) => {
|
|
574
|
+
const doc = await getCaseDocument(caseId, key, tx);
|
|
575
|
+
if (!doc)
|
|
576
|
+
throw notFound("Document not found");
|
|
577
|
+
const thread = await getThreadForCase(caseId, key, threadId, doc.companyId, doc.documentId, tx);
|
|
578
|
+
if (!thread)
|
|
579
|
+
throw notFound("Annotation thread not found");
|
|
580
|
+
const now = new Date();
|
|
581
|
+
const [comment] = await tx
|
|
582
|
+
.insert(documentAnnotationComments)
|
|
583
|
+
.values({
|
|
584
|
+
companyId: thread.companyId,
|
|
585
|
+
threadId: thread.id,
|
|
586
|
+
issueId: null,
|
|
587
|
+
routineId: null,
|
|
588
|
+
caseId: thread.caseId,
|
|
589
|
+
documentId: thread.documentId,
|
|
590
|
+
body: input.body,
|
|
591
|
+
authorType: actor.actorType,
|
|
592
|
+
authorAgentId: actor.agentId ?? null,
|
|
593
|
+
authorUserId: actor.userId ?? null,
|
|
594
|
+
createdByRunId: actor.runId ?? null,
|
|
595
|
+
issueCommentId: null,
|
|
596
|
+
createdAt: now,
|
|
597
|
+
updatedAt: now,
|
|
598
|
+
})
|
|
599
|
+
.returning(commentSelect);
|
|
600
|
+
await tx
|
|
601
|
+
.update(documentAnnotationThreads)
|
|
602
|
+
.set({ updatedAt: now })
|
|
603
|
+
.where(eq(documentAnnotationThreads.id, thread.id));
|
|
604
|
+
return comment;
|
|
605
|
+
}),
|
|
428
606
|
cleanupForIssueCommentDeletion: async (issueId, issueCommentId, actor, dbOrTx = db) => {
|
|
429
607
|
const runCleanup = async (tx) => {
|
|
430
608
|
const linkedComments = await tx
|
|
@@ -530,6 +708,37 @@ export function documentAnnotationService(db) {
|
|
|
530
708
|
.returning(threadSelect);
|
|
531
709
|
return updated;
|
|
532
710
|
}),
|
|
711
|
+
updateCaseThread: async (caseId, key, threadId, input, actor) => db.transaction(async (tx) => {
|
|
712
|
+
const doc = await getCaseDocument(caseId, key, tx);
|
|
713
|
+
if (!doc)
|
|
714
|
+
throw notFound("Document not found");
|
|
715
|
+
const thread = await getThreadForCase(caseId, key, threadId, doc.companyId, doc.documentId, tx);
|
|
716
|
+
if (!thread)
|
|
717
|
+
throw notFound("Annotation thread not found");
|
|
718
|
+
if (!input.status || input.status === thread.status)
|
|
719
|
+
return thread;
|
|
720
|
+
const now = new Date();
|
|
721
|
+
const [updated] = await tx
|
|
722
|
+
.update(documentAnnotationThreads)
|
|
723
|
+
.set(input.status === "resolved"
|
|
724
|
+
? {
|
|
725
|
+
status: "resolved",
|
|
726
|
+
resolvedByAgentId: actor.agentId ?? null,
|
|
727
|
+
resolvedByUserId: actor.userId ?? null,
|
|
728
|
+
resolvedAt: now,
|
|
729
|
+
updatedAt: now,
|
|
730
|
+
}
|
|
731
|
+
: {
|
|
732
|
+
status: "open",
|
|
733
|
+
resolvedByAgentId: null,
|
|
734
|
+
resolvedByUserId: null,
|
|
735
|
+
resolvedAt: null,
|
|
736
|
+
updatedAt: now,
|
|
737
|
+
})
|
|
738
|
+
.where(eq(documentAnnotationThreads.id, thread.id))
|
|
739
|
+
.returning(threadSelect);
|
|
740
|
+
return updated;
|
|
741
|
+
}),
|
|
533
742
|
remapOpenThreadsForDocument: async (input) => db.transaction(async (tx) => {
|
|
534
743
|
const threads = await tx
|
|
535
744
|
.select(threadSelect)
|
|
@@ -654,6 +863,68 @@ export function documentAnnotationService(db) {
|
|
|
654
863
|
}
|
|
655
864
|
return changed;
|
|
656
865
|
}),
|
|
866
|
+
remapOpenThreadsForCaseDocument: async (input) => db.transaction(async (tx) => {
|
|
867
|
+
const threads = await tx
|
|
868
|
+
.select(threadSelect)
|
|
869
|
+
.from(documentAnnotationThreads)
|
|
870
|
+
.where(and(eq(documentAnnotationThreads.caseId, input.caseId), eq(documentAnnotationThreads.documentId, input.documentId), eq(documentAnnotationThreads.status, "open")));
|
|
871
|
+
const changed = [];
|
|
872
|
+
const now = new Date();
|
|
873
|
+
for (const thread of threads) {
|
|
874
|
+
if (thread.currentRevisionId === input.nextRevisionId)
|
|
875
|
+
continue;
|
|
876
|
+
const previousAnchor = snapshotFromThread(thread);
|
|
877
|
+
const remap = remapDocumentAnchor({
|
|
878
|
+
previousAnchor,
|
|
879
|
+
nextMarkdown: input.nextBody,
|
|
880
|
+
});
|
|
881
|
+
const nextAnchor = remap.anchor;
|
|
882
|
+
const nextSelector = nextAnchor ? anchorSnapshotToSelector(nextAnchor) : thread.anchorSelector;
|
|
883
|
+
const [updated] = await tx
|
|
884
|
+
.update(documentAnnotationThreads)
|
|
885
|
+
.set({
|
|
886
|
+
currentRevisionId: input.nextRevisionId,
|
|
887
|
+
currentRevisionNumber: input.nextRevisionNumber,
|
|
888
|
+
anchorState: remap.anchorState,
|
|
889
|
+
anchorConfidence: remap.confidence,
|
|
890
|
+
...(nextAnchor
|
|
891
|
+
? {
|
|
892
|
+
selectedText: nextAnchor.selectedText,
|
|
893
|
+
prefixText: nextAnchor.prefixText,
|
|
894
|
+
suffixText: nextAnchor.suffixText,
|
|
895
|
+
normalizedStart: nextAnchor.normalizedStart,
|
|
896
|
+
normalizedEnd: nextAnchor.normalizedEnd,
|
|
897
|
+
markdownStart: nextAnchor.markdownStart,
|
|
898
|
+
markdownEnd: nextAnchor.markdownEnd,
|
|
899
|
+
}
|
|
900
|
+
: {}),
|
|
901
|
+
anchorSelector: nextSelector,
|
|
902
|
+
updatedAt: now,
|
|
903
|
+
})
|
|
904
|
+
.where(eq(documentAnnotationThreads.id, thread.id))
|
|
905
|
+
.returning(threadSelect);
|
|
906
|
+
const [snapshot] = await tx
|
|
907
|
+
.insert(documentAnnotationAnchorSnapshots)
|
|
908
|
+
.values({
|
|
909
|
+
companyId: thread.companyId,
|
|
910
|
+
threadId: thread.id,
|
|
911
|
+
documentId: thread.documentId,
|
|
912
|
+
fromRevisionId: thread.currentRevisionId,
|
|
913
|
+
fromRevisionNumber: thread.currentRevisionNumber,
|
|
914
|
+
toRevisionId: input.nextRevisionId,
|
|
915
|
+
toRevisionNumber: input.nextRevisionNumber,
|
|
916
|
+
previousAnchor,
|
|
917
|
+
nextAnchor,
|
|
918
|
+
anchorState: remap.anchorState,
|
|
919
|
+
anchorConfidence: remap.confidence,
|
|
920
|
+
failureReason: remap.anchor ? null : remap.reason,
|
|
921
|
+
createdAt: now,
|
|
922
|
+
})
|
|
923
|
+
.returning();
|
|
924
|
+
changed.push({ thread: updated, snapshot });
|
|
925
|
+
}
|
|
926
|
+
return changed;
|
|
927
|
+
}),
|
|
657
928
|
selectorToAnchorSnapshot,
|
|
658
929
|
};
|
|
659
930
|
}
|