Record chat docx artifacts in packages

This commit is contained in:
john
2026-07-02 21:43:38 +08:00
parent 0e00ed52cd
commit b38dd5961f
5 changed files with 269 additions and 3 deletions
@@ -15,6 +15,8 @@ export function createConversationPackageRegistry({ store, service } = {}) {
requireMethod(store, 'listArtifacts', 'missing_conversation_package_store');
requireMethod(service, 'putConversationManifest', 'missing_mindspace_service');
requireMethod(service, 'buildConversationManifest', 'missing_mindspace_service');
requireMethod(service, 'putPackageObject', 'missing_mindspace_service');
requireMethod(service, 'getPackageObject', 'missing_mindspace_service');
return {
async ensurePackage(input) {
@@ -32,12 +34,35 @@ export function createConversationPackageRegistry({ store, service } = {}) {
return service.putConversationManifest({ packageRecord, artifacts });
},
async putObjectForSession({ userId, sessionId, title = null, relativePath, body }) {
const packageRecord = await store.upsertPackage({ userId, sessionId, title });
const writeResult = await service.putPackageObject({ packageRecord, relativePath, body });
return { packageRecord, writeResult };
},
async readManifestForSession({ userId, sessionId }) {
const packageRecord = await store.getPackageBySession(userId, sessionId);
if (!packageRecord) return null;
const artifacts = await store.listArtifacts(packageRecord.id);
return service.buildConversationManifest({ packageRecord, artifacts });
},
async readArtifactObject({ userId, sessionId, artifactId }) {
const packageRecord = await store.getPackageBySession(userId, sessionId);
if (!packageRecord) return null;
const artifacts = await store.listArtifacts(packageRecord.id);
const artifact = artifacts.find((item) => item.id === artifactId);
if (!artifact?.storageKey) return null;
const prefix = `${packageRecord.storagePrefix}/`;
if (!artifact.storageKey.startsWith(prefix)) {
throw registryError('conversation artifact storage key is outside package', 'invalid_artifact_storage_key');
}
const body = await service.getPackageObject({
packageRecord,
relativePath: artifact.storageKey.slice(prefix.length),
});
return { packageRecord, artifact, body };
},
};
}