@jini-ai/cms 0.1.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/LICENSE +201 -0
- package/README.md +84 -0
- package/dist/content-types/agent-tools.d.ts +65 -0
- package/dist/content-types/agent-tools.d.ts.map +1 -0
- package/dist/content-types/agent-tools.js +172 -0
- package/dist/content-types/agent-tools.js.map +1 -0
- package/dist/content-types/cleanup.d.ts +118 -0
- package/dist/content-types/cleanup.d.ts.map +1 -0
- package/dist/content-types/cleanup.js +65 -0
- package/dist/content-types/cleanup.js.map +1 -0
- package/dist/content-types/errors.d.ts +90 -0
- package/dist/content-types/errors.d.ts.map +1 -0
- package/dist/content-types/errors.js +119 -0
- package/dist/content-types/errors.js.map +1 -0
- package/dist/content-types/field-defs.d.ts +25 -0
- package/dist/content-types/field-defs.d.ts.map +1 -0
- package/dist/content-types/field-defs.js +155 -0
- package/dist/content-types/field-defs.js.map +1 -0
- package/dist/content-types/index-provisioning.d.ts +94 -0
- package/dist/content-types/index-provisioning.d.ts.map +1 -0
- package/dist/content-types/index-provisioning.js +133 -0
- package/dist/content-types/index-provisioning.js.map +1 -0
- package/dist/content-types/index.d.ts +63 -0
- package/dist/content-types/index.d.ts.map +1 -0
- package/dist/content-types/index.js +36 -0
- package/dist/content-types/index.js.map +1 -0
- package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
- package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/content-types/lifecycle-dispatch.js +28 -0
- package/dist/content-types/lifecycle-dispatch.js.map +1 -0
- package/dist/content-types/lifecycle.d.ts +104 -0
- package/dist/content-types/lifecycle.d.ts.map +1 -0
- package/dist/content-types/lifecycle.js +143 -0
- package/dist/content-types/lifecycle.js.map +1 -0
- package/dist/content-types/list.d.ts +44 -0
- package/dist/content-types/list.d.ts.map +1 -0
- package/dist/content-types/list.js +13 -0
- package/dist/content-types/list.js.map +1 -0
- package/dist/content-types/repo.memory.d.ts +72 -0
- package/dist/content-types/repo.memory.d.ts.map +1 -0
- package/dist/content-types/repo.memory.js +71 -0
- package/dist/content-types/repo.memory.js.map +1 -0
- package/dist/content-types/tool-registrations.d.ts +65 -0
- package/dist/content-types/tool-registrations.d.ts.map +1 -0
- package/dist/content-types/tool-registrations.js +180 -0
- package/dist/content-types/tool-registrations.js.map +1 -0
- package/dist/content-types/types.d.ts +78 -0
- package/dist/content-types/types.d.ts.map +1 -0
- package/dist/content-types/types.js +32 -0
- package/dist/content-types/types.js.map +1 -0
- package/dist/content-types/write-service.d.ts +141 -0
- package/dist/content-types/write-service.d.ts.map +1 -0
- package/dist/content-types/write-service.js +180 -0
- package/dist/content-types/write-service.js.map +1 -0
- package/dist/core/commands/change-set.d.ts +98 -0
- package/dist/core/commands/change-set.d.ts.map +1 -0
- package/dist/core/commands/change-set.js +2 -0
- package/dist/core/commands/change-set.js.map +1 -0
- package/dist/core/commands/command.d.ts +168 -0
- package/dist/core/commands/command.d.ts.map +1 -0
- package/dist/core/commands/command.js +173 -0
- package/dist/core/commands/command.js.map +1 -0
- package/dist/core/index.d.ts +45 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +43 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ports.d.ts +139 -0
- package/dist/core/ports.d.ts.map +1 -0
- package/dist/core/ports.js +2 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/tools/registration-kit.d.ts +308 -0
- package/dist/core/tools/registration-kit.d.ts.map +1 -0
- package/dist/core/tools/registration-kit.js +381 -0
- package/dist/core/tools/registration-kit.js.map +1 -0
- package/dist/entries/agent-tools.d.ts +78 -0
- package/dist/entries/agent-tools.d.ts.map +1 -0
- package/dist/entries/agent-tools.js +158 -0
- package/dist/entries/agent-tools.js.map +1 -0
- package/dist/entries/errors.d.ts +43 -0
- package/dist/entries/errors.d.ts.map +1 -0
- package/dist/entries/errors.js +59 -0
- package/dist/entries/errors.js.map +1 -0
- package/dist/entries/field-validation.d.ts +70 -0
- package/dist/entries/field-validation.d.ts.map +1 -0
- package/dist/entries/field-validation.js +87 -0
- package/dist/entries/field-validation.js.map +1 -0
- package/dist/entries/index.d.ts +55 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +38 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/lifecycle-dispatch.d.ts +15 -0
- package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/entries/lifecycle-dispatch.js +16 -0
- package/dist/entries/lifecycle-dispatch.js.map +1 -0
- package/dist/entries/list.d.ts +47 -0
- package/dist/entries/list.d.ts.map +1 -0
- package/dist/entries/list.js +12 -0
- package/dist/entries/list.js.map +1 -0
- package/dist/entries/repo.memory.d.ts +64 -0
- package/dist/entries/repo.memory.d.ts.map +1 -0
- package/dist/entries/repo.memory.js +73 -0
- package/dist/entries/repo.memory.js.map +1 -0
- package/dist/entries/tool-registrations.d.ts +52 -0
- package/dist/entries/tool-registrations.d.ts.map +1 -0
- package/dist/entries/tool-registrations.js +141 -0
- package/dist/entries/tool-registrations.js.map +1 -0
- package/dist/entries/types.d.ts +55 -0
- package/dist/entries/types.d.ts.map +1 -0
- package/dist/entries/types.js +2 -0
- package/dist/entries/types.js.map +1 -0
- package/dist/entries/write-service.d.ts +202 -0
- package/dist/entries/write-service.d.ts.map +1 -0
- package/dist/entries/write-service.js +204 -0
- package/dist/entries/write-service.js.map +1 -0
- package/dist/identity/admin-crud-service.d.ts +252 -0
- package/dist/identity/admin-crud-service.d.ts.map +1 -0
- package/dist/identity/admin-crud-service.js +437 -0
- package/dist/identity/admin-crud-service.js.map +1 -0
- package/dist/identity/agent-tool-input.d.ts +58 -0
- package/dist/identity/agent-tool-input.d.ts.map +1 -0
- package/dist/identity/agent-tool-input.js +126 -0
- package/dist/identity/agent-tool-input.js.map +1 -0
- package/dist/identity/agent-tools.d.ts +101 -0
- package/dist/identity/agent-tools.d.ts.map +1 -0
- package/dist/identity/agent-tools.js +290 -0
- package/dist/identity/agent-tools.js.map +1 -0
- package/dist/identity/auth-service.d.ts +87 -0
- package/dist/identity/auth-service.d.ts.map +1 -0
- package/dist/identity/auth-service.js +141 -0
- package/dist/identity/auth-service.js.map +1 -0
- package/dist/identity/authorize.d.ts +90 -0
- package/dist/identity/authorize.d.ts.map +1 -0
- package/dist/identity/authorize.js +94 -0
- package/dist/identity/authorize.js.map +1 -0
- package/dist/identity/grant-service.d.ts +198 -0
- package/dist/identity/grant-service.d.ts.map +1 -0
- package/dist/identity/grant-service.js +361 -0
- package/dist/identity/grant-service.js.map +1 -0
- package/dist/identity/hasher.d.ts +39 -0
- package/dist/identity/hasher.d.ts.map +1 -0
- package/dist/identity/hasher.js +39 -0
- package/dist/identity/hasher.js.map +1 -0
- package/dist/identity/index.d.ts +59 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +51 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/password-policy.d.ts +58 -0
- package/dist/identity/password-policy.d.ts.map +1 -0
- package/dist/identity/password-policy.js +67 -0
- package/dist/identity/password-policy.js.map +1 -0
- package/dist/identity/permission-migrations.d.ts +86 -0
- package/dist/identity/permission-migrations.d.ts.map +1 -0
- package/dist/identity/permission-migrations.js +67 -0
- package/dist/identity/permission-migrations.js.map +1 -0
- package/dist/identity/permissions.d.ts +35 -0
- package/dist/identity/permissions.d.ts.map +1 -0
- package/dist/identity/permissions.js +603 -0
- package/dist/identity/permissions.js.map +1 -0
- package/dist/identity/ports.d.ts +201 -0
- package/dist/identity/ports.d.ts.map +1 -0
- package/dist/identity/ports.js +2 -0
- package/dist/identity/ports.js.map +1 -0
- package/dist/identity/repo.memory.d.ts +164 -0
- package/dist/identity/repo.memory.d.ts.map +1 -0
- package/dist/identity/repo.memory.js +224 -0
- package/dist/identity/repo.memory.js.map +1 -0
- package/dist/identity/seed.d.ts +42 -0
- package/dist/identity/seed.d.ts.map +1 -0
- package/dist/identity/seed.js +277 -0
- package/dist/identity/seed.js.map +1 -0
- package/dist/identity/tool-registrations.d.ts +50 -0
- package/dist/identity/tool-registrations.d.ts.map +1 -0
- package/dist/identity/tool-registrations.js +419 -0
- package/dist/identity/tool-registrations.js.map +1 -0
- package/dist/identity/types.d.ts +185 -0
- package/dist/identity/types.d.ts.map +1 -0
- package/dist/identity/types.js +64 -0
- package/dist/identity/types.js.map +1 -0
- package/dist/identity/username.d.ts +12 -0
- package/dist/identity/username.d.ts.map +1 -0
- package/dist/identity/username.js +14 -0
- package/dist/identity/username.js.map +1 -0
- package/dist/media/agent-tools.d.ts +66 -0
- package/dist/media/agent-tools.d.ts.map +1 -0
- package/dist/media/agent-tools.js +131 -0
- package/dist/media/agent-tools.js.map +1 -0
- package/dist/media/blob-gc-lock.d.ts +37 -0
- package/dist/media/blob-gc-lock.d.ts.map +1 -0
- package/dist/media/blob-gc-lock.js +55 -0
- package/dist/media/blob-gc-lock.js.map +1 -0
- package/dist/media/blob-gc.d.ts +246 -0
- package/dist/media/blob-gc.d.ts.map +1 -0
- package/dist/media/blob-gc.js +254 -0
- package/dist/media/blob-gc.js.map +1 -0
- package/dist/media/blob-key.d.ts +28 -0
- package/dist/media/blob-key.d.ts.map +1 -0
- package/dist/media/blob-key.js +11 -0
- package/dist/media/blob-key.js.map +1 -0
- package/dist/media/blob-store.fs.d.ts +23 -0
- package/dist/media/blob-store.fs.d.ts.map +1 -0
- package/dist/media/blob-store.fs.js +48 -0
- package/dist/media/blob-store.fs.js.map +1 -0
- package/dist/media/blob-store.memory.d.ts +22 -0
- package/dist/media/blob-store.memory.d.ts.map +1 -0
- package/dist/media/blob-store.memory.js +23 -0
- package/dist/media/blob-store.memory.js.map +1 -0
- package/dist/media/content-type-sniffer.d.ts +49 -0
- package/dist/media/content-type-sniffer.d.ts.map +1 -0
- package/dist/media/content-type-sniffer.js +141 -0
- package/dist/media/content-type-sniffer.js.map +1 -0
- package/dist/media/image-transformer.d.ts +45 -0
- package/dist/media/image-transformer.d.ts.map +1 -0
- package/dist/media/image-transformer.js +23 -0
- package/dist/media/image-transformer.js.map +1 -0
- package/dist/media/image-transformer.sharp.d.ts +26 -0
- package/dist/media/image-transformer.sharp.d.ts.map +1 -0
- package/dist/media/image-transformer.sharp.js +91 -0
- package/dist/media/image-transformer.sharp.js.map +1 -0
- package/dist/media/index.d.ts +43 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +31 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/media-service.d.ts +244 -0
- package/dist/media/media-service.d.ts.map +1 -0
- package/dist/media/media-service.js +345 -0
- package/dist/media/media-service.js.map +1 -0
- package/dist/media/ports.d.ts +142 -0
- package/dist/media/ports.d.ts.map +1 -0
- package/dist/media/ports.js +2 -0
- package/dist/media/ports.js.map +1 -0
- package/dist/media/rendition-service.d.ts +66 -0
- package/dist/media/rendition-service.d.ts.map +1 -0
- package/dist/media/rendition-service.js +135 -0
- package/dist/media/rendition-service.js.map +1 -0
- package/dist/media/repo.memory.d.ts +107 -0
- package/dist/media/repo.memory.d.ts.map +1 -0
- package/dist/media/repo.memory.js +131 -0
- package/dist/media/repo.memory.js.map +1 -0
- package/dist/media/tool-registrations.d.ts +42 -0
- package/dist/media/tool-registrations.d.ts.map +1 -0
- package/dist/media/tool-registrations.js +121 -0
- package/dist/media/tool-registrations.js.map +1 -0
- package/dist/media/transform-lock.d.ts +36 -0
- package/dist/media/transform-lock.d.ts.map +1 -0
- package/dist/media/transform-lock.js +50 -0
- package/dist/media/transform-lock.js.map +1 -0
- package/dist/media/transform-registry.d.ts +103 -0
- package/dist/media/transform-registry.d.ts.map +1 -0
- package/dist/media/transform-registry.js +87 -0
- package/dist/media/transform-registry.js.map +1 -0
- package/dist/media/transform-types.d.ts +82 -0
- package/dist/media/transform-types.d.ts.map +1 -0
- package/dist/media/transform-types.js +47 -0
- package/dist/media/transform-types.js.map +1 -0
- package/dist/media/types.d.ts +150 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +26 -0
- package/dist/media/types.js.map +1 -0
- package/dist/navigation/agent-tools.d.ts +90 -0
- package/dist/navigation/agent-tools.d.ts.map +1 -0
- package/dist/navigation/agent-tools.js +225 -0
- package/dist/navigation/agent-tools.js.map +1 -0
- package/dist/navigation/contracts.d.ts +98 -0
- package/dist/navigation/contracts.d.ts.map +1 -0
- package/dist/navigation/contracts.js +70 -0
- package/dist/navigation/contracts.js.map +1 -0
- package/dist/navigation/index.d.ts +39 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +30 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/menu-service.d.ts +256 -0
- package/dist/navigation/menu-service.d.ts.map +1 -0
- package/dist/navigation/menu-service.js +382 -0
- package/dist/navigation/menu-service.js.map +1 -0
- package/dist/navigation/ports.d.ts +147 -0
- package/dist/navigation/ports.d.ts.map +1 -0
- package/dist/navigation/ports.js +2 -0
- package/dist/navigation/ports.js.map +1 -0
- package/dist/navigation/read-model.d.ts +11 -0
- package/dist/navigation/read-model.d.ts.map +1 -0
- package/dist/navigation/read-model.js +27 -0
- package/dist/navigation/read-model.js.map +1 -0
- package/dist/navigation/reconcile.d.ts +57 -0
- package/dist/navigation/reconcile.d.ts.map +1 -0
- package/dist/navigation/reconcile.js +33 -0
- package/dist/navigation/reconcile.js.map +1 -0
- package/dist/navigation/repo.memory.d.ts +137 -0
- package/dist/navigation/repo.memory.d.ts.map +1 -0
- package/dist/navigation/repo.memory.js +95 -0
- package/dist/navigation/repo.memory.js.map +1 -0
- package/dist/navigation/resolver.d.ts +110 -0
- package/dist/navigation/resolver.d.ts.map +1 -0
- package/dist/navigation/resolver.js +131 -0
- package/dist/navigation/resolver.js.map +1 -0
- package/dist/navigation/tool-registrations.d.ts +43 -0
- package/dist/navigation/tool-registrations.d.ts.map +1 -0
- package/dist/navigation/tool-registrations.js +126 -0
- package/dist/navigation/tool-registrations.js.map +1 -0
- package/dist/navigation/types.d.ts +207 -0
- package/dist/navigation/types.d.ts.map +1 -0
- package/dist/navigation/types.js +14 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/presentation/index.d.ts +15 -0
- package/dist/presentation/index.d.ts.map +1 -0
- package/dist/presentation/index.js +15 -0
- package/dist/presentation/index.js.map +1 -0
- package/dist/presentation/presentation.d.ts +72 -0
- package/dist/presentation/presentation.d.ts.map +1 -0
- package/dist/presentation/presentation.js +51 -0
- package/dist/presentation/presentation.js.map +1 -0
- package/dist/presentation/repo.memory.d.ts +9 -0
- package/dist/presentation/repo.memory.d.ts.map +1 -0
- package/dist/presentation/repo.memory.js +21 -0
- package/dist/presentation/repo.memory.js.map +1 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/settings/agent-tools.d.ts +83 -0
- package/dist/settings/agent-tools.d.ts.map +1 -0
- package/dist/settings/agent-tools.js +200 -0
- package/dist/settings/agent-tools.js.map +1 -0
- package/dist/settings/agent-writable-preferences.d.ts +67 -0
- package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
- package/dist/settings/agent-writable-preferences.js +144 -0
- package/dist/settings/agent-writable-preferences.js.map +1 -0
- package/dist/settings/change-feed.d.ts +74 -0
- package/dist/settings/change-feed.d.ts.map +1 -0
- package/dist/settings/change-feed.js +61 -0
- package/dist/settings/change-feed.js.map +1 -0
- package/dist/settings/definitions-dispatch.d.ts +51 -0
- package/dist/settings/definitions-dispatch.d.ts.map +1 -0
- package/dist/settings/definitions-dispatch.js +86 -0
- package/dist/settings/definitions-dispatch.js.map +1 -0
- package/dist/settings/dictionaries/index.d.ts +45 -0
- package/dist/settings/dictionaries/index.d.ts.map +1 -0
- package/dist/settings/dictionaries/index.js +69 -0
- package/dist/settings/dictionaries/index.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
- package/dist/settings/ensure-definitions.d.ts +88 -0
- package/dist/settings/ensure-definitions.d.ts.map +1 -0
- package/dist/settings/ensure-definitions.js +91 -0
- package/dist/settings/ensure-definitions.js.map +1 -0
- package/dist/settings/errors.d.ts +36 -0
- package/dist/settings/errors.d.ts.map +1 -0
- package/dist/settings/errors.js +40 -0
- package/dist/settings/errors.js.map +1 -0
- package/dist/settings/index.d.ts +37 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +36 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/ports.d.ts +117 -0
- package/dist/settings/ports.d.ts.map +1 -0
- package/dist/settings/ports.js +2 -0
- package/dist/settings/ports.js.map +1 -0
- package/dist/settings/purge-service.d.ts +53 -0
- package/dist/settings/purge-service.d.ts.map +1 -0
- package/dist/settings/purge-service.js +105 -0
- package/dist/settings/purge-service.js.map +1 -0
- package/dist/settings/repo.memory.d.ts +119 -0
- package/dist/settings/repo.memory.d.ts.map +1 -0
- package/dist/settings/repo.memory.js +199 -0
- package/dist/settings/repo.memory.js.map +1 -0
- package/dist/settings/settings.d.ts +124 -0
- package/dist/settings/settings.d.ts.map +1 -0
- package/dist/settings/settings.js +238 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/tool-registrations.d.ts +56 -0
- package/dist/settings/tool-registrations.d.ts.map +1 -0
- package/dist/settings/tool-registrations.js +240 -0
- package/dist/settings/tool-registrations.js.map +1 -0
- package/dist/settings/types.d.ts +125 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/ui-tab-definitions.d.ts +41 -0
- package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
- package/dist/settings/ui-tab-definitions.js +148 -0
- package/dist/settings/ui-tab-definitions.js.map +1 -0
- package/dist/settings/write-service.d.ts +314 -0
- package/dist/settings/write-service.d.ts.map +1 -0
- package/dist/settings/write-service.js +677 -0
- package/dist/settings/write-service.js.map +1 -0
- package/dist/taxonomy/agent-tools.d.ts +76 -0
- package/dist/taxonomy/agent-tools.d.ts.map +1 -0
- package/dist/taxonomy/agent-tools.js +178 -0
- package/dist/taxonomy/agent-tools.js.map +1 -0
- package/dist/taxonomy/content-lookup.d.ts +45 -0
- package/dist/taxonomy/content-lookup.d.ts.map +1 -0
- package/dist/taxonomy/content-lookup.js +9 -0
- package/dist/taxonomy/content-lookup.js.map +1 -0
- package/dist/taxonomy/index.d.ts +38 -0
- package/dist/taxonomy/index.d.ts.map +1 -0
- package/dist/taxonomy/index.js +38 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/list.d.ts +39 -0
- package/dist/taxonomy/list.d.ts.map +1 -0
- package/dist/taxonomy/list.js +19 -0
- package/dist/taxonomy/list.js.map +1 -0
- package/dist/taxonomy/merge-term.d.ts +94 -0
- package/dist/taxonomy/merge-term.d.ts.map +1 -0
- package/dist/taxonomy/merge-term.js +65 -0
- package/dist/taxonomy/merge-term.js.map +1 -0
- package/dist/taxonomy/repo.memory.d.ts +160 -0
- package/dist/taxonomy/repo.memory.d.ts.map +1 -0
- package/dist/taxonomy/repo.memory.js +171 -0
- package/dist/taxonomy/repo.memory.js.map +1 -0
- package/dist/taxonomy/validation-chain.d.ts +114 -0
- package/dist/taxonomy/validation-chain.d.ts.map +1 -0
- package/dist/taxonomy/validation-chain.js +152 -0
- package/dist/taxonomy/validation-chain.js.map +1 -0
- package/dist/taxonomy/write-service.d.ts +387 -0
- package/dist/taxonomy/write-service.d.ts.map +1 -0
- package/dist/taxonomy/write-service.js +350 -0
- package/dist/taxonomy/write-service.js.map +1 -0
- package/dist/workspace/agent-tools.d.ts +67 -0
- package/dist/workspace/agent-tools.d.ts.map +1 -0
- package/dist/workspace/agent-tools.js +103 -0
- package/dist/workspace/agent-tools.js.map +1 -0
- package/dist/workspace/create.d.ts +116 -0
- package/dist/workspace/create.d.ts.map +1 -0
- package/dist/workspace/create.js +69 -0
- package/dist/workspace/create.js.map +1 -0
- package/dist/workspace/delete.d.ts +50 -0
- package/dist/workspace/delete.d.ts.map +1 -0
- package/dist/workspace/delete.js +24 -0
- package/dist/workspace/delete.js.map +1 -0
- package/dist/workspace/index.d.ts +27 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +27 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/repo.memory.d.ts +34 -0
- package/dist/workspace/repo.memory.d.ts.map +1 -0
- package/dist/workspace/repo.memory.js +50 -0
- package/dist/workspace/repo.memory.js.map +1 -0
- package/dist/workspace/tool-registrations.d.ts +38 -0
- package/dist/workspace/tool-registrations.d.ts.map +1 -0
- package/dist/workspace/tool-registrations.js +71 -0
- package/dist/workspace/tool-registrations.js.map +1 -0
- package/dist/workspace/update.d.ts +52 -0
- package/dist/workspace/update.d.ts.map +1 -0
- package/dist/workspace/update.js +41 -0
- package/dist/workspace/update.js.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Raised on a malformed identity input (blank username, etc.). */
|
|
2
|
+
export class IdentityValidationError extends Error {
|
|
3
|
+
}
|
|
4
|
+
/** Raised when a referenced principal/user/role/policy is not found. */
|
|
5
|
+
export class IdentityNotFoundError extends Error {
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Raised on a unique-constraint clash (duplicate `username` in a workspace, AC-19). Also
|
|
9
|
+
* raised by `deleteRole`/`deletePolicy` (`admin-crud-service.ts`) when the target still has
|
|
10
|
+
* live references (INV-09, AC-31) — the same 409 `RESOURCE_CONFLICT` shape, a `details.field`
|
|
11
|
+
* distinguishes the two cases at the route layer (errors.spec.md §3).
|
|
12
|
+
*/
|
|
13
|
+
export class IdentityConflictError extends Error {
|
|
14
|
+
}
|
|
15
|
+
/** Raised by `login()` on bad credentials, a disabled principal, or a blank field (AC-02). */
|
|
16
|
+
export class AuthInvalidCredentialsError extends Error {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* REQ-11/INV-08 — raised by `disablePrincipal` when the target is the seeded owner
|
|
20
|
+
* principal, or when disabling would drop the workspace's active owner-`*` count to zero. Maps to
|
|
21
|
+
* 409 `OWNER_REQUIRED` (errors.spec.md §2) — a pre-existing registered code that had no HTTP
|
|
22
|
+
* emission site until this amendment gave `DISABLE_PRINCIPAL` a route.
|
|
23
|
+
*/
|
|
24
|
+
export class OwnerRequiredError extends Error {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* REQ-03/INV-07 — raised by `writePolicyPermission` when the permission string is
|
|
28
|
+
* not in the registered catalog. Maps to 400 `PERMISSION_UNKNOWN` (errors.spec.md §2) — kept
|
|
29
|
+
* distinct from `IdentityValidationError` (plain `VALIDATION_ERROR`) so the route can emit the
|
|
30
|
+
* correct typed code without string-matching the message.
|
|
31
|
+
*/
|
|
32
|
+
export class PermissionUnknownError extends Error {
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Raised when a grant-writing transition's caller-permission gate fails
|
|
36
|
+
* (e.g. `ASSIGN_ROLE` called by a principal without `role.manage`). Maps to
|
|
37
|
+
* 403 `FORBIDDEN` (errors.spec.md §2) — distinct from `GrantExceedsIssuerError`,
|
|
38
|
+
* which is the INV-07 clamp on the *grant's contents*, not the base gate.
|
|
39
|
+
*/
|
|
40
|
+
export class IdentityForbiddenError extends Error {
|
|
41
|
+
permission;
|
|
42
|
+
reason;
|
|
43
|
+
constructor(message, permission, reason) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.permission = permission;
|
|
46
|
+
this.reason = reason;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Raised when a grant-writing transition (`ASSIGN_ROLE`, `ATTACH_POLICY`, and
|
|
51
|
+
* future `ISSUE_API_KEY`/`WRITE_POLICY_PERMISSION`) would confer a permission
|
|
52
|
+
* the caller does not itself hold unconstrained (INV-07 grant-authority
|
|
53
|
+
* clamp, feature.spec.md). Maps to 403 `GRANT_EXCEEDS_ISSUER`
|
|
54
|
+
* (errors.spec.md §2/§3) — `offendingPermissions` is the exact `details`
|
|
55
|
+
* payload shape that error code specifies.
|
|
56
|
+
*/
|
|
57
|
+
export class GrantExceedsIssuerError extends Error {
|
|
58
|
+
offendingPermissions;
|
|
59
|
+
constructor(message, offendingPermissions) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.offendingPermissions = offendingPermissions;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/identity/types.ts"],"names":[],"mappings":"AA6IA,mEAAmE;AACnE,MAAM,OAAO,uBAAwB,SAAQ,KAAK;CAAG;AACrD,wEAAwE;AACxE,MAAM,OAAO,qBAAsB,SAAQ,KAAK;CAAG;AACnD;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;CAAG;AACnD,8FAA8F;AAC9F,MAAM,OAAO,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,UAAU,CAAS;IACnB,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,UAAkB,EAAE,MAAc;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,oBAAoB,CAAW;IAExC,YAAY,OAAe,EAAE,oBAA8B;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Username normalization (behavior.spec §5.1).
|
|
3
|
+
*
|
|
4
|
+
* A `users` row is a duplicate within a workspace iff its `username` equals an
|
|
5
|
+
* existing user's after case-insensitive comparison and Unicode NFC
|
|
6
|
+
* normalization. Normalizing once at every write/lookup site (seed, login,
|
|
7
|
+
* future CREATE_USER) makes that comparison a direct equality check rather
|
|
8
|
+
* than a repeated ad hoc string transform.
|
|
9
|
+
*/
|
|
10
|
+
/** NFC-normalize, trim, and lowercase a username for storage/lookup. */
|
|
11
|
+
export declare function normalizeUsername(raw: string): string;
|
|
12
|
+
//# sourceMappingURL=username.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../src/identity/username.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Username normalization (behavior.spec §5.1).
|
|
3
|
+
*
|
|
4
|
+
* A `users` row is a duplicate within a workspace iff its `username` equals an
|
|
5
|
+
* existing user's after case-insensitive comparison and Unicode NFC
|
|
6
|
+
* normalization. Normalizing once at every write/lookup site (seed, login,
|
|
7
|
+
* future CREATE_USER) makes that comparison a direct equality check rather
|
|
8
|
+
* than a repeated ad hoc string transform.
|
|
9
|
+
*/
|
|
10
|
+
/** NFC-normalize, trim, and lowercase a username for storage/lookup. */
|
|
11
|
+
export function normalizeUsername(raw) {
|
|
12
|
+
return raw.normalize("NFC").trim().toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=username.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"username.js","sourceRoot":"","sources":["../../src/identity/username.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The Media agent-tool catalog — this domain's instance of the per-domain
|
|
3
|
+
* `agent-tools.ts` convention Forms/Identity already use.
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* A static, in-process catalog describing every agent-callable tool this domain exposes and the
|
|
7
|
+
* permission each carries. Every entry maps 1:1 onto a real exported function of
|
|
8
|
+
* `media/media-service.ts` — this catalog never names an operation the domain cannot perform.
|
|
9
|
+
*
|
|
10
|
+
* Deliberate absences (the point of a catalog, not an oversight):
|
|
11
|
+
* - There is NO `media_purge_asset`. `purgeMedia` is a HARD delete: it removes the `MediaRecord`
|
|
12
|
+
* row permanently and triggers the blob-GC tombstone pass (`tombstoneBlobIfUnreferenced`,
|
|
13
|
+
* `blob-gc.ts`) that can eventually reclaim the underlying bytes. It is gated behind
|
|
14
|
+
* `media.delete.force` — a separate, narrower permission a human admin UI itself treats as a
|
|
15
|
+
* distinct escalation tier from ordinary `media.delete` (mirrors `admin.menus.delete` vs
|
|
16
|
+
* `admin.menus.delete.force`). An assistant is reachable by prompt injection through ordinary
|
|
17
|
+
* operator content (a comment, a form submission) in a way a human clicking the admin "purge"
|
|
18
|
+
* button is not, so an irreversible, storage-reclaiming delete is left human-UI-only — the same
|
|
19
|
+
* discipline `identity/agent-tools.ts` applies to `resetUserPassword`.
|
|
20
|
+
* - There is NO named-transform-registry tool (`registerTransform`, `media/transform-registry.ts`).
|
|
21
|
+
* No admin HTTP route needs to expose it at all — it is a core-declared, boot-time/operational
|
|
22
|
+
* concept, not a human admin-UI operation. Wrapping it here would invent agent capability beyond
|
|
23
|
+
* what a host's admin surface itself exposes, which this catalog's own discipline forbids.
|
|
24
|
+
*
|
|
25
|
+
* How it relates to a host:
|
|
26
|
+
* A host's tool-registration layer maps these entries into `ToolRegistration`s (see
|
|
27
|
+
* `tool-registrations.ts`). Unlike Forms/Identity, `media-service.ts`'s functions perform NO
|
|
28
|
+
* internal `authorize()` call of their own (confirmed: none of `UploadMediaDeps`/
|
|
29
|
+
* `UpdateMediaMetadataDeps`/`TrashMediaDeps` carry an `authorize` field) — a host's admin HTTP
|
|
30
|
+
* routes check authorization inline, before calling the service function. `tool-registrations.ts`
|
|
31
|
+
* therefore performs that SAME inline authorize check itself (the identical permission string and
|
|
32
|
+
* `entityType: "media"` a host route would use) rather than relying on a domain-layer gate that
|
|
33
|
+
* does not exist for this library — a disclosed, deliberate divergence from the Forms/Identity/
|
|
34
|
+
* content-types pass-through-`ToolPolicy` reasoning, not an oversight.
|
|
35
|
+
*
|
|
36
|
+
* Architectural role:
|
|
37
|
+
* `media` domain declaration. Imports only the constants its own domain already enforces
|
|
38
|
+
* (`DEFAULT_MAX_UPLOAD_BYTES`/`DEFAULT_ALLOWED_MIME_TYPES` from `media-service.ts`), so the
|
|
39
|
+
* published JSON Schemas cannot drift from the validators.
|
|
40
|
+
*/
|
|
41
|
+
export type AgentToolSideEffect = "none" | "mutates-durable-state" | "mints-token";
|
|
42
|
+
export type AgentToolActorClassRule = "confirmer-must-equal-own-delegatedBy" | "user-only" | "none";
|
|
43
|
+
export interface AgentToolDefinition {
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
sideEffects: AgentToolSideEffect;
|
|
47
|
+
authorization: {
|
|
48
|
+
permission: string;
|
|
49
|
+
};
|
|
50
|
+
actorClassRule?: AgentToolActorClassRule;
|
|
51
|
+
/**
|
|
52
|
+
* JSON Schema for this tool's `input`, published to the model via `ToolDescriptor.inputSchema`
|
|
53
|
+
* (a host's tool-registration layer refuses to wire any tool lacking one).
|
|
54
|
+
*/
|
|
55
|
+
inputSchema?: Readonly<Record<string, unknown>>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The Media domain's fixed agent-tool catalog — the 4 operations a host's admin HTTP surface
|
|
59
|
+
* exposes that are safe to wrap, out of its 5 total (see file header for why `purge` is excluded).
|
|
60
|
+
*
|
|
61
|
+
* Ordered read-first, matching `identity/agent-tools.ts`'s convention: a model needs a `mediaId`
|
|
62
|
+
* before it can update or trash an asset, and `media_list_assets` is the only way to learn one for
|
|
63
|
+
* an existing asset (there is no dedicated get-by-id admin route to wrap instead).
|
|
64
|
+
*/
|
|
65
|
+
export declare const mediaAgentToolCatalog: AgentToolDefinition[];
|
|
66
|
+
//# sourceMappingURL=agent-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/media/agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAEnF,MAAM,MAAM,uBAAuB,GAAG,sCAAsC,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC;;;OAGG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;AAOD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAgFtD,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The Media agent-tool catalog — this domain's instance of the per-domain
|
|
3
|
+
* `agent-tools.ts` convention Forms/Identity already use.
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* A static, in-process catalog describing every agent-callable tool this domain exposes and the
|
|
7
|
+
* permission each carries. Every entry maps 1:1 onto a real exported function of
|
|
8
|
+
* `media/media-service.ts` — this catalog never names an operation the domain cannot perform.
|
|
9
|
+
*
|
|
10
|
+
* Deliberate absences (the point of a catalog, not an oversight):
|
|
11
|
+
* - There is NO `media_purge_asset`. `purgeMedia` is a HARD delete: it removes the `MediaRecord`
|
|
12
|
+
* row permanently and triggers the blob-GC tombstone pass (`tombstoneBlobIfUnreferenced`,
|
|
13
|
+
* `blob-gc.ts`) that can eventually reclaim the underlying bytes. It is gated behind
|
|
14
|
+
* `media.delete.force` — a separate, narrower permission a human admin UI itself treats as a
|
|
15
|
+
* distinct escalation tier from ordinary `media.delete` (mirrors `admin.menus.delete` vs
|
|
16
|
+
* `admin.menus.delete.force`). An assistant is reachable by prompt injection through ordinary
|
|
17
|
+
* operator content (a comment, a form submission) in a way a human clicking the admin "purge"
|
|
18
|
+
* button is not, so an irreversible, storage-reclaiming delete is left human-UI-only — the same
|
|
19
|
+
* discipline `identity/agent-tools.ts` applies to `resetUserPassword`.
|
|
20
|
+
* - There is NO named-transform-registry tool (`registerTransform`, `media/transform-registry.ts`).
|
|
21
|
+
* No admin HTTP route needs to expose it at all — it is a core-declared, boot-time/operational
|
|
22
|
+
* concept, not a human admin-UI operation. Wrapping it here would invent agent capability beyond
|
|
23
|
+
* what a host's admin surface itself exposes, which this catalog's own discipline forbids.
|
|
24
|
+
*
|
|
25
|
+
* How it relates to a host:
|
|
26
|
+
* A host's tool-registration layer maps these entries into `ToolRegistration`s (see
|
|
27
|
+
* `tool-registrations.ts`). Unlike Forms/Identity, `media-service.ts`'s functions perform NO
|
|
28
|
+
* internal `authorize()` call of their own (confirmed: none of `UploadMediaDeps`/
|
|
29
|
+
* `UpdateMediaMetadataDeps`/`TrashMediaDeps` carry an `authorize` field) — a host's admin HTTP
|
|
30
|
+
* routes check authorization inline, before calling the service function. `tool-registrations.ts`
|
|
31
|
+
* therefore performs that SAME inline authorize check itself (the identical permission string and
|
|
32
|
+
* `entityType: "media"` a host route would use) rather than relying on a domain-layer gate that
|
|
33
|
+
* does not exist for this library — a disclosed, deliberate divergence from the Forms/Identity/
|
|
34
|
+
* content-types pass-through-`ToolPolicy` reasoning, not an oversight.
|
|
35
|
+
*
|
|
36
|
+
* Architectural role:
|
|
37
|
+
* `media` domain declaration. Imports only the constants its own domain already enforces
|
|
38
|
+
* (`DEFAULT_MAX_UPLOAD_BYTES`/`DEFAULT_ALLOWED_MIME_TYPES` from `media-service.ts`), so the
|
|
39
|
+
* published JSON Schemas cannot drift from the validators.
|
|
40
|
+
*/
|
|
41
|
+
import { DEFAULT_ALLOWED_MIME_TYPES, DEFAULT_MAX_UPLOAD_BYTES } from "./media-service.js";
|
|
42
|
+
const MEDIA_ID_SCHEMA = {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "The media asset's id, as returned by media_upload_asset or media_list_assets.",
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The Media domain's fixed agent-tool catalog — the 4 operations a host's admin HTTP surface
|
|
48
|
+
* exposes that are safe to wrap, out of its 5 total (see file header for why `purge` is excluded).
|
|
49
|
+
*
|
|
50
|
+
* Ordered read-first, matching `identity/agent-tools.ts`'s convention: a model needs a `mediaId`
|
|
51
|
+
* before it can update or trash an asset, and `media_list_assets` is the only way to learn one for
|
|
52
|
+
* an existing asset (there is no dedicated get-by-id admin route to wrap instead).
|
|
53
|
+
*/
|
|
54
|
+
export const mediaAgentToolCatalog = [
|
|
55
|
+
{
|
|
56
|
+
name: "media_list_assets",
|
|
57
|
+
description: "Lists every media asset in the workspace (all statuses — active and trashed), with id, title, alt, caption, credit, sha256, and status. Read-only. Call this to find a mediaId before updating or trashing an asset.",
|
|
58
|
+
sideEffects: "none",
|
|
59
|
+
authorization: { permission: "media.read" },
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: "object",
|
|
62
|
+
additionalProperties: false,
|
|
63
|
+
required: [],
|
|
64
|
+
properties: {},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "media_upload_asset",
|
|
69
|
+
description: `Uploads a new media asset from base64-encoded bytes. Rejects a content type outside the allowed set ` +
|
|
70
|
+
`(${[...DEFAULT_ALLOWED_MIME_TYPES].join(", ")} — SVG is never accepted, even here: it requires a sanitizer ` +
|
|
71
|
+
`this build does not have) or a file over ${DEFAULT_MAX_UPLOAD_BYTES} bytes. Uploading the same bytes twice ` +
|
|
72
|
+
`always creates two separate library entries (the underlying blob is deduplicated, but each upload is its own asset).`,
|
|
73
|
+
sideEffects: "mutates-durable-state",
|
|
74
|
+
authorization: { permission: "media.upload" },
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: "object",
|
|
77
|
+
additionalProperties: false,
|
|
78
|
+
required: ["filename", "contentType", "dataBase64"],
|
|
79
|
+
properties: {
|
|
80
|
+
filename: { type: "string", minLength: 1, description: "Original filename. Its extension-stripped stem becomes the asset's initial title." },
|
|
81
|
+
contentType: {
|
|
82
|
+
type: "string",
|
|
83
|
+
enum: [...DEFAULT_ALLOWED_MIME_TYPES],
|
|
84
|
+
description: "The exact MIME type of the uploaded bytes. Only this fixed set is accepted.",
|
|
85
|
+
},
|
|
86
|
+
dataBase64: {
|
|
87
|
+
type: "string",
|
|
88
|
+
minLength: 1,
|
|
89
|
+
description: `The file's bytes, base64-encoded. Decoded size must be over 0 and at most ${DEFAULT_MAX_UPLOAD_BYTES} bytes.`,
|
|
90
|
+
},
|
|
91
|
+
alt: { type: "string", description: "Optional accessibility alt text." },
|
|
92
|
+
caption: { type: "string", description: "Optional display caption." },
|
|
93
|
+
credit: { type: "string", description: "Optional attribution/credit line." },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "media_update_metadata",
|
|
99
|
+
description: "Updates a media asset's editorial metadata (title/alt/caption/credit only). The asset's underlying bytes " +
|
|
100
|
+
"(sha256) are write-once and cannot be changed by this or any tool — to replace the file itself, upload a new asset.",
|
|
101
|
+
sideEffects: "mutates-durable-state",
|
|
102
|
+
authorization: { permission: "media.update" },
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: "object",
|
|
105
|
+
additionalProperties: false,
|
|
106
|
+
required: ["mediaId"],
|
|
107
|
+
properties: {
|
|
108
|
+
mediaId: MEDIA_ID_SCHEMA,
|
|
109
|
+
title: { type: "string", description: "New display title. Omit to leave unchanged; an empty/whitespace value is ignored (the existing title is kept)." },
|
|
110
|
+
alt: { type: "string", description: "New alt text. Omit to leave unchanged." },
|
|
111
|
+
caption: { type: "string", description: "New caption. Omit to leave unchanged." },
|
|
112
|
+
credit: { type: "string", description: "New credit line. Omit to leave unchanged." },
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "media_trash_asset",
|
|
118
|
+
description: "Soft-deletes (trashes) a media asset — the first, reversible-in-principle step of the deletion ladder. " +
|
|
119
|
+
"Idempotent: trashing an already-trashed asset is a no-op. This is the ONLY delete-adjacent tool in this " +
|
|
120
|
+
"catalog; there is no purge/force-delete tool (see this file's header for why).",
|
|
121
|
+
sideEffects: "mutates-durable-state",
|
|
122
|
+
authorization: { permission: "media.delete" },
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: "object",
|
|
125
|
+
additionalProperties: false,
|
|
126
|
+
required: ["mediaId"],
|
|
127
|
+
properties: { mediaId: MEDIA_ID_SCHEMA },
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
//# sourceMappingURL=agent-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/media/agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAmB1F,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,+EAA+E;CACpF,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,sNAAsN;QACxN,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;QAC3C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,sGAAsG;YACtG,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D;YAC7G,4CAA4C,wBAAwB,yCAAyC;YAC7G,sHAAsH;QACxH,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE;QAC7C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC;YACnD,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,mFAAmF,EAAE;gBAC5I,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,0BAA0B,CAAC;oBACrC,WAAW,EAAE,6EAA6E;iBAC3F;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,CAAC;oBACZ,WAAW,EAAE,6EAA6E,wBAAwB,SAAS;iBAC5H;gBACD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACxE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACrE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;aAC7E;SACF;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,2GAA2G;YAC3G,qHAAqH;QACvH,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE;QAC7C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,UAAU,EAAE;gBACV,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gHAAgH,EAAE;gBACxJ,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;gBAC9E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBACjF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;aACrF;SACF;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,yGAAyG;YACzG,0GAA0G;YAC1G,gFAAgF;QAClF,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE;QAC7C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,UAAU,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;SACzC;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file In-process, per-sha256 mutex for the blob-GC protocol
|
|
3
|
+
* (INV-1's "Serialization" clause).
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* The real protocol serializes every `asset_blobs` state transition
|
|
7
|
+
* under `BEGIN IMMEDIATE` (SQLite) / `SELECT … FOR UPDATE` (Postgres) so a
|
|
8
|
+
* dedup "skip write" decision and a concurrent GC delete can never observe
|
|
9
|
+
* inconsistent state. This library's media persistence is in-memory only (see
|
|
10
|
+
* `repo.memory.ts` file headers), so there is no database transaction to
|
|
11
|
+
* borrow. JS is single-threaded, but `async` functions still interleave at
|
|
12
|
+
* `await` points — that is exactly where the race the original design describes would
|
|
13
|
+
* happen: an uploader's dedup lookup and a GC delete-pass's row removal can
|
|
14
|
+
* both be mid-flight on the same sha256 at the same time. `withSha256Lock`
|
|
15
|
+
* closes that race for a single process by chaining critical sections keyed
|
|
16
|
+
* by sha256, so only one runs at a time per hash (different hashes still run
|
|
17
|
+
* fully concurrently).
|
|
18
|
+
*
|
|
19
|
+
* This is a real, if narrower, substitute for `BEGIN IMMEDIATE` — not a
|
|
20
|
+
* decorative comment. See `blob-gc.ts`'s file header for what this does NOT
|
|
21
|
+
* cover (cross-process safety, which needs a real DB transaction — a host's
|
|
22
|
+
* own SQLite adapter would supply that).
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Runs `criticalSection` exclusively with respect to any other call
|
|
26
|
+
* currently queued or running for the same `key` — calls for the same key
|
|
27
|
+
* are strictly ordered (FIFO); calls for different keys run fully
|
|
28
|
+
* concurrently. A rejection in one critical section does not poison the
|
|
29
|
+
* lock for later callers on the same key (each waits for its predecessor to
|
|
30
|
+
* *settle*, not to succeed).
|
|
31
|
+
*
|
|
32
|
+
* @complexity O(1) scheduling overhead per call; total wait time is bounded
|
|
33
|
+
* by the number of other calls currently queued for the same key.
|
|
34
|
+
* @overallScore 100
|
|
35
|
+
*/
|
|
36
|
+
export declare function withSha256Lock<T>(key: string, criticalSection: () => Promise<T>): Promise<T>;
|
|
37
|
+
//# sourceMappingURL=blob-gc-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-gc-lock.d.ts","sourceRoot":"","sources":["../../src/media/blob-gc-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAc5F"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file In-process, per-sha256 mutex for the blob-GC protocol
|
|
3
|
+
* (INV-1's "Serialization" clause).
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* The real protocol serializes every `asset_blobs` state transition
|
|
7
|
+
* under `BEGIN IMMEDIATE` (SQLite) / `SELECT … FOR UPDATE` (Postgres) so a
|
|
8
|
+
* dedup "skip write" decision and a concurrent GC delete can never observe
|
|
9
|
+
* inconsistent state. This library's media persistence is in-memory only (see
|
|
10
|
+
* `repo.memory.ts` file headers), so there is no database transaction to
|
|
11
|
+
* borrow. JS is single-threaded, but `async` functions still interleave at
|
|
12
|
+
* `await` points — that is exactly where the race the original design describes would
|
|
13
|
+
* happen: an uploader's dedup lookup and a GC delete-pass's row removal can
|
|
14
|
+
* both be mid-flight on the same sha256 at the same time. `withSha256Lock`
|
|
15
|
+
* closes that race for a single process by chaining critical sections keyed
|
|
16
|
+
* by sha256, so only one runs at a time per hash (different hashes still run
|
|
17
|
+
* fully concurrently).
|
|
18
|
+
*
|
|
19
|
+
* This is a real, if narrower, substitute for `BEGIN IMMEDIATE` — not a
|
|
20
|
+
* decorative comment. See `blob-gc.ts`'s file header for what this does NOT
|
|
21
|
+
* cover (cross-process safety, which needs a real DB transaction — a host's
|
|
22
|
+
* own SQLite adapter would supply that).
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Tracks the tail of the promise chain for each in-flight/queued key. An
|
|
26
|
+
* entry is removed once its own critical section is the last one queued and
|
|
27
|
+
* has settled, so the map stays bounded by the number of sha256 values with
|
|
28
|
+
* work currently in flight — not by the number ever seen.
|
|
29
|
+
*/
|
|
30
|
+
const lockTails = new Map();
|
|
31
|
+
/**
|
|
32
|
+
* Runs `criticalSection` exclusively with respect to any other call
|
|
33
|
+
* currently queued or running for the same `key` — calls for the same key
|
|
34
|
+
* are strictly ordered (FIFO); calls for different keys run fully
|
|
35
|
+
* concurrently. A rejection in one critical section does not poison the
|
|
36
|
+
* lock for later callers on the same key (each waits for its predecessor to
|
|
37
|
+
* *settle*, not to succeed).
|
|
38
|
+
*
|
|
39
|
+
* @complexity O(1) scheduling overhead per call; total wait time is bounded
|
|
40
|
+
* by the number of other calls currently queued for the same key.
|
|
41
|
+
* @overallScore 100
|
|
42
|
+
*/
|
|
43
|
+
export function withSha256Lock(key, criticalSection) {
|
|
44
|
+
const priorTail = lockTails.get(key) ?? Promise.resolve();
|
|
45
|
+
const run = priorTail.then(criticalSection, criticalSection);
|
|
46
|
+
const settledTail = run.then(() => undefined, () => undefined);
|
|
47
|
+
lockTails.set(key, settledTail);
|
|
48
|
+
void settledTail.then(() => {
|
|
49
|
+
if (lockTails.get(key) === settledTail) {
|
|
50
|
+
lockTails.delete(key);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return run;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=blob-gc-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-gc-lock.js","sourceRoot":"","sources":["../../src/media/blob-gc-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAI,GAAW,EAAE,eAAiC;IAC9E,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAkB,GAAG,CAAC,IAAI,CACzC,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChC,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
|