@semiont/make-meaning 0.5.2 → 0.5.4

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.
Files changed (94) hide show
  1. package/README.md +13 -0
  2. package/dist/annotation-assembly.d.ts +8 -0
  3. package/dist/annotation-assembly.d.ts.map +1 -0
  4. package/dist/annotation-context.d.ts +104 -0
  5. package/dist/annotation-context.d.ts.map +1 -0
  6. package/dist/annotation-operations.d.ts +41 -0
  7. package/dist/annotation-operations.d.ts.map +1 -0
  8. package/dist/batch-utils.d.ts +14 -0
  9. package/dist/batch-utils.d.ts.map +1 -0
  10. package/dist/bootstrap/entity-types.d.ts +26 -0
  11. package/dist/bootstrap/entity-types.d.ts.map +1 -0
  12. package/dist/browser.d.ts +45 -0
  13. package/dist/browser.d.ts.map +1 -0
  14. package/dist/clone-token-manager.d.ts +31 -0
  15. package/dist/clone-token-manager.d.ts.map +1 -0
  16. package/dist/config.d.ts +55 -0
  17. package/dist/config.d.ts.map +1 -0
  18. package/dist/embedding-store.d.ts +63 -0
  19. package/dist/embedding-store.d.ts.map +1 -0
  20. package/dist/event-enrichment.d.ts +5 -0
  21. package/dist/event-enrichment.d.ts.map +1 -0
  22. package/dist/exchange/backup-exporter.d.ts +43 -0
  23. package/dist/exchange/backup-exporter.d.ts.map +1 -0
  24. package/dist/exchange/backup-importer.d.ts +41 -0
  25. package/dist/exchange/backup-importer.d.ts.map +1 -0
  26. package/dist/exchange/index.d.ts +10 -0
  27. package/dist/exchange/index.d.ts.map +1 -0
  28. package/dist/exchange/linked-data-exporter.d.ts +42 -0
  29. package/dist/exchange/linked-data-exporter.d.ts.map +1 -0
  30. package/dist/exchange/linked-data-importer.d.ts +44 -0
  31. package/dist/exchange/linked-data-importer.d.ts.map +1 -0
  32. package/dist/exchange/manifest.d.ts +42 -0
  33. package/dist/exchange/manifest.d.ts.map +1 -0
  34. package/dist/exchange/replay.d.ts +37 -0
  35. package/dist/exchange/replay.d.ts.map +1 -0
  36. package/dist/exchange/tar.d.ts +34 -0
  37. package/dist/exchange/tar.d.ts.map +1 -0
  38. package/dist/gatherer.d.ts +45 -0
  39. package/dist/gatherer.d.ts.map +1 -0
  40. package/dist/generation/resource-generation.d.ts +20 -0
  41. package/dist/generation/resource-generation.d.ts.map +1 -0
  42. package/dist/graph/consumer.d.ts +104 -0
  43. package/dist/graph/consumer.d.ts.map +1 -0
  44. package/dist/graph-context.d.ts +56 -0
  45. package/dist/graph-context.d.ts.map +1 -0
  46. package/dist/handlers/annotation-assembly.d.ts +19 -0
  47. package/dist/handlers/annotation-assembly.d.ts.map +1 -0
  48. package/dist/handlers/annotation-lookups.d.ts +8 -0
  49. package/dist/handlers/annotation-lookups.d.ts.map +1 -0
  50. package/dist/handlers/bind-update-body.d.ts +19 -0
  51. package/dist/handlers/bind-update-body.d.ts.map +1 -0
  52. package/dist/handlers/index.d.ts +27 -0
  53. package/dist/handlers/index.d.ts.map +1 -0
  54. package/dist/handlers/job-commands.d.ts +5 -0
  55. package/dist/handlers/job-commands.d.ts.map +1 -0
  56. package/dist/index.d.ts +37 -1240
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +108 -27
  59. package/dist/index.js.map +1 -1
  60. package/dist/knowledge-base.d.ts +40 -0
  61. package/dist/knowledge-base.d.ts.map +1 -0
  62. package/dist/knowledge-system.d.ts +32 -0
  63. package/dist/knowledge-system.d.ts.map +1 -0
  64. package/dist/llm-context.d.ts +26 -0
  65. package/dist/llm-context.d.ts.map +1 -0
  66. package/dist/local-content-transport.d.ts +41 -0
  67. package/dist/local-content-transport.d.ts.map +1 -0
  68. package/dist/local-transport.d.ts +80 -0
  69. package/dist/local-transport.d.ts.map +1 -0
  70. package/dist/matcher.d.ts +60 -0
  71. package/dist/matcher.d.ts.map +1 -0
  72. package/dist/resource-context.d.ts +44 -0
  73. package/dist/resource-context.d.ts.map +1 -0
  74. package/dist/resource-operations.d.ts +38 -0
  75. package/dist/resource-operations.d.ts.map +1 -0
  76. package/dist/service.d.ts +21 -0
  77. package/dist/service.d.ts.map +1 -0
  78. package/dist/smelter-actor-state-unit.d.ts +31 -0
  79. package/dist/smelter-actor-state-unit.d.ts.map +1 -0
  80. package/dist/smelter-main.d.ts +16 -2
  81. package/dist/smelter-main.d.ts.map +1 -0
  82. package/dist/smelter-main.js +6 -2
  83. package/dist/smelter-main.js.map +1 -1
  84. package/dist/smelter.d.ts +95 -0
  85. package/dist/smelter.d.ts.map +1 -0
  86. package/dist/stower.d.ts +69 -0
  87. package/dist/stower.d.ts.map +1 -0
  88. package/dist/views/entity-types-reader.d.ts +12 -0
  89. package/dist/views/entity-types-reader.d.ts.map +1 -0
  90. package/dist/views/projection-validators.d.ts +80 -0
  91. package/dist/views/projection-validators.d.ts.map +1 -0
  92. package/dist/views/tag-schemas-reader.d.ts +14 -0
  93. package/dist/views/tag-schemas-reader.d.ts.map +1 -0
  94. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGvE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,OAAO,EACL,mBAAmB,EACnB,iCAAiC,EACjC,gCAAgC,EAChC,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1D,OAAO,EACL,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAC;AAGpC,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAG1C,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { FsJobQueue } from '@semiont/jobs';
2
2
  import { FilesystemViewStorage, resolveStorageUri, EventQuery, createEventStore } from '@semiont/event-sourcing';
3
- import { getPrimaryRepresentation, decodeRepresentation, getTargetSource, getBodySource, resourceId, getTargetSelector, getResourceEntityTypes, getResourceId, getTextPositionSelector, annotationId, errField, userId, generateUuid, CREATION_METHODS, getExactText, cloneToken, didToAgent, assembleAnnotation, jobId, entityType, baseUrl, busLog, BRIDGED_CHANNELS, applyBodyOperations, burstBuffer, findBodyItem } from '@semiont/core';
3
+ import { getPrimaryRepresentation, decodeRepresentation, getTargetSource, getBodySource, resourceId, getTargetSelector, getResourceEntityTypes, getResourceId, getTextPositionSelector, annotationId, errField, userId, generateUuid, getExactText, cloneToken, didToAgent, assembleAnnotation, jobId, entityType, baseUrl, busLog, BRIDGED_CHANNELS, applyBodyOperations, burstBuffer, findBodyItem } from '@semiont/core';
4
4
  export { applyBodyOperations, assembleAnnotation } from '@semiont/core';
5
5
  import { withActorSpan, recordBusEmit, withSpan, SpanKind, registerJobQueueProvider } from '@semiont/observability';
6
6
  import { createInferenceClient } from '@semiont/inference';
@@ -8,7 +8,7 @@ import { getGraphDatabase } from '@semiont/graph';
8
8
  import { WorkingTreeStore, deriveStorageUri, getExtensionForMimeType } from '@semiont/content';
9
9
  import { getEntityTypes, DEFAULT_ENTITY_TYPES } from '@semiont/ontology';
10
10
  import { promises } from 'fs';
11
- import * as path2 from 'path';
11
+ import * as path3 from 'path';
12
12
  import { createGzip, createGunzip } from 'zlib';
13
13
  import { pipeline, Readable } from 'stream';
14
14
  import { promisify } from 'util';
@@ -9953,7 +9953,6 @@ var GraphDBConsumer = class _GraphDBConsumer {
9953
9953
  archived: false,
9954
9954
  dateCreated: (/* @__PURE__ */ new Date()).toISOString(),
9955
9955
  wasAttributedTo: didToAgent(event.userId),
9956
- creationMethod: event.payload.creationMethod,
9957
9956
  ...event.payload.storageUri ? { storageUri: event.payload.storageUri } : {}
9958
9957
  };
9959
9958
  }
@@ -10673,7 +10672,6 @@ Summary:`;
10673
10672
  entityTypes: resource.entityTypes,
10674
10673
  representations: resource.representations,
10675
10674
  archived: resource.archived,
10676
- creationMethod: resource.creationMethod,
10677
10675
  wasAttributedTo: resource.wasAttributedTo,
10678
10676
  dateCreated: resource.dateCreated
10679
10677
  }
@@ -11347,6 +11345,7 @@ var Stower = class {
11347
11345
  pipe("mark:delete", (e) => this.handleMarkDelete(e)),
11348
11346
  pipe("mark:update-body", (e) => this.handleMarkUpdateBody(e)),
11349
11347
  pipe("frame:add-entity-type", (e) => this.handleAddEntityType(e)),
11348
+ pipe("frame:add-tag-schema", (e) => this.handleAddTagSchema(e)),
11350
11349
  pipe("mark:archive", (e) => this.handleMarkArchive(e)),
11351
11350
  pipe("mark:unarchive", (e) => this.handleMarkUnarchive(e)),
11352
11351
  pipe("mark:update-entity-types", (e) => this.handleUpdateEntityTypes(e)),
@@ -11370,8 +11369,6 @@ var Stower = class {
11370
11369
  const stored = await this.kb.content.register(event.storageUri, event.contentChecksum, { noGit: event.noGit });
11371
11370
  const checksum = stored.checksum;
11372
11371
  const byteSize = event.byteSize;
11373
- const validCreationMethods = Object.values(CREATION_METHODS);
11374
- const validatedCreationMethod = event.creationMethod && validCreationMethods.includes(event.creationMethod) ? event.creationMethod : CREATION_METHODS.API;
11375
11372
  const generatedFrom = event.generatedFrom?.resourceId && event.generatedFrom?.annotationId ? {
11376
11373
  resourceId: resourceId(event.generatedFrom.resourceId),
11377
11374
  annotationId: annotationId(event.generatedFrom.annotationId)
@@ -11387,7 +11384,6 @@ var Stower = class {
11387
11384
  contentChecksum: checksum,
11388
11385
  contentByteSize: byteSize,
11389
11386
  storageUri: event.storageUri,
11390
- creationMethod: validatedCreationMethod,
11391
11387
  entityTypes: event.entityTypes || [],
11392
11388
  language: event.language || void 0,
11393
11389
  isDraft: event.isDraft ?? false,
@@ -11402,7 +11398,6 @@ var Stower = class {
11402
11398
  name: event.name,
11403
11399
  archived: false,
11404
11400
  entityTypes: event.entityTypes || [],
11405
- creationMethod: validatedCreationMethod,
11406
11401
  storageUri: event.storageUri,
11407
11402
  currentChecksum: checksum,
11408
11403
  dateCreated: (/* @__PURE__ */ new Date()).toISOString(),
@@ -11634,6 +11629,24 @@ var Stower = class {
11634
11629
  });
11635
11630
  }
11636
11631
  }
11632
+ async handleAddTagSchema(event) {
11633
+ if (!event._userId) {
11634
+ throw new Error("frame:add-tag-schema missing _userId (gateway injection)");
11635
+ }
11636
+ try {
11637
+ await this.kb.eventStore.appendEvent({
11638
+ type: "frame:tag-schema-added",
11639
+ userId: userId(event._userId),
11640
+ version: 1,
11641
+ payload: { schema: event.schema }
11642
+ });
11643
+ } catch (error) {
11644
+ this.logger.error("Failed to add tag schema", { schemaId: event.schema?.id, error: errField(error) });
11645
+ this.eventBus.get("frame:tag-schema-add-failed").next({
11646
+ message: error instanceof Error ? error.message : String(error)
11647
+ });
11648
+ }
11649
+ }
11637
11650
  async handleUpdateEntityTypes(event) {
11638
11651
  if (!event._userId) {
11639
11652
  throw new Error("mark:update-entity-types missing _userId (gateway injection)");
@@ -11721,7 +11734,7 @@ var Stower = class {
11721
11734
  var import_rxjs5 = __toESM(require_cjs());
11722
11735
  var import_operators5 = __toESM(require_operators());
11723
11736
  async function readEntityTypesProjection(project) {
11724
- const entityTypesPath = path2.join(
11737
+ const entityTypesPath = path3.join(
11725
11738
  project.stateDir,
11726
11739
  "projections",
11727
11740
  "__system__",
@@ -11738,6 +11751,24 @@ async function readEntityTypesProjection(project) {
11738
11751
  throw error;
11739
11752
  }
11740
11753
  }
11754
+ async function readTagSchemasProjection(project) {
11755
+ const tagSchemasPath = path3.join(
11756
+ project.stateDir,
11757
+ "projections",
11758
+ "__system__",
11759
+ "tagschemas.json"
11760
+ );
11761
+ try {
11762
+ const content = await promises.readFile(tagSchemasPath, "utf-8");
11763
+ const projection = JSON.parse(content);
11764
+ return projection.tagSchemas || [];
11765
+ } catch (error) {
11766
+ if (error.code === "ENOENT") {
11767
+ return [];
11768
+ }
11769
+ throw error;
11770
+ }
11771
+ }
11741
11772
 
11742
11773
  // src/browser.ts
11743
11774
  var Browser = class {
@@ -11767,6 +11798,7 @@ var Browser = class {
11767
11798
  pipe("browse:annotation-history-requested", (e) => this.handleBrowseAnnotationHistory(e)).subscribe({ error: errorHandler }),
11768
11799
  pipe("browse:referenced-by-requested", (e) => this.handleReferencedBy(e)).subscribe({ error: errorHandler }),
11769
11800
  pipe("browse:entity-types-requested", (e) => this.handleEntityTypes(e)).subscribe({ error: errorHandler }),
11801
+ pipe("browse:tag-schemas-requested", (e) => this.handleTagSchemas(e)).subscribe({ error: errorHandler }),
11770
11802
  pipe("browse:directory-requested", (e) => this.handleBrowseDirectory(e)).subscribe({ error: errorHandler })
11771
11803
  );
11772
11804
  }
@@ -12011,14 +12043,29 @@ var Browser = class {
12011
12043
  });
12012
12044
  }
12013
12045
  }
12046
+ async handleTagSchemas(event) {
12047
+ try {
12048
+ const tagSchemas = await readTagSchemasProjection(this.project);
12049
+ this.eventBus.get("browse:tag-schemas-result").next({
12050
+ correlationId: event.correlationId,
12051
+ response: { tagSchemas }
12052
+ });
12053
+ } catch (error) {
12054
+ this.logger.error("Tag schemas read failed", { error: errField(error) });
12055
+ this.eventBus.get("browse:tag-schemas-failed").next({
12056
+ correlationId: event.correlationId,
12057
+ message: error instanceof Error ? error.message : String(error)
12058
+ });
12059
+ }
12060
+ }
12014
12061
  // ========================================================================
12015
12062
  // Filesystem read handler
12016
12063
  // ========================================================================
12017
12064
  async handleBrowseDirectory(event) {
12018
12065
  const { correlationId, path: reqPath, sort = "name" } = event;
12019
12066
  const projectRoot = this.project.root;
12020
- const resolved = path2.resolve(projectRoot, reqPath);
12021
- if (!resolved.startsWith(projectRoot + path2.sep) && resolved !== projectRoot) {
12067
+ const resolved = path3.resolve(projectRoot, reqPath);
12068
+ if (!resolved.startsWith(projectRoot + path3.sep) && resolved !== projectRoot) {
12022
12069
  this.eventBus.get("browse:directory-failed").next({
12023
12070
  correlationId,
12024
12071
  path: reqPath,
@@ -12042,12 +12089,12 @@ var Browser = class {
12042
12089
  const allViews = await this.views.getAll();
12043
12090
  const prefix = `file://${resolved}`;
12044
12091
  const viewsByUri = new Map(
12045
- allViews.filter((v) => v.resource.storageUri?.startsWith(prefix + "/") || v.resource.storageUri?.startsWith(prefix + path2.sep)).map((v) => [v.resource.storageUri, v])
12092
+ allViews.filter((v) => v.resource.storageUri?.startsWith(prefix + "/") || v.resource.storageUri?.startsWith(prefix + path3.sep)).map((v) => [v.resource.storageUri, v])
12046
12093
  );
12047
12094
  const entries = [];
12048
12095
  for (const dirent of visible) {
12049
- const entryPath = path2.join(resolved, dirent.name);
12050
- const relPath = path2.relative(projectRoot, entryPath);
12096
+ const entryPath = path3.join(resolved, dirent.name);
12097
+ const relPath = path3.relative(projectRoot, entryPath);
12051
12098
  if (dirent.isDirectory()) {
12052
12099
  let mtime = (/* @__PURE__ */ new Date(0)).toISOString();
12053
12100
  try {
@@ -12168,7 +12215,6 @@ var ResourceOperations = class {
12168
12215
  _userId: userId3,
12169
12216
  language: input.language,
12170
12217
  entityTypes: input.entityTypes,
12171
- creationMethod: input.creationMethod,
12172
12218
  generatedFrom: input.generatedFrom,
12173
12219
  generationPrompt: input.generationPrompt,
12174
12220
  generator: input.generator,
@@ -12345,8 +12391,7 @@ var CloneTokenManager = class {
12345
12391
  contentChecksum: stored.checksum,
12346
12392
  byteSize: stored.byteSize,
12347
12393
  format,
12348
- entityTypes: getResourceEntityTypes(sourceDoc),
12349
- creationMethod: CREATION_METHODS.CLONE
12394
+ entityTypes: getResourceEntityTypes(sourceDoc)
12350
12395
  },
12351
12396
  userId(event._userId),
12352
12397
  this.eventBus
@@ -12585,6 +12630,31 @@ function registerBindUpdateBodyHandler(eventBus, parentLogger) {
12585
12630
  logger.warn("Bind body-update failed after forwarding", { correlationId: cid, message });
12586
12631
  });
12587
12632
  }
12633
+
12634
+ // src/views/projection-validators.ts
12635
+ function resolveTagSchema(tagSchemas, schemaId) {
12636
+ if (typeof schemaId !== "string" || !schemaId) {
12637
+ return { error: "tag-annotation requires schemaId" };
12638
+ }
12639
+ const schema = tagSchemas.find((s) => s.id === schemaId);
12640
+ if (!schema) {
12641
+ return { error: `Tag schema not registered: ${schemaId}` };
12642
+ }
12643
+ return { schema };
12644
+ }
12645
+ function validateEntityTypes(registered, requested) {
12646
+ if (!requested || requested.length === 0) {
12647
+ return { ok: true };
12648
+ }
12649
+ const set = new Set(registered);
12650
+ const unknown = requested.filter((t) => !set.has(t));
12651
+ return unknown.length > 0 ? { ok: false, unknown } : { ok: true };
12652
+ }
12653
+ function entityTypesNotRegisteredMessage(unknown) {
12654
+ return `Entity type not registered: ${unknown.join(", ")}`;
12655
+ }
12656
+
12657
+ // src/handlers/job-commands.ts
12588
12658
  function parseDidUser(did) {
12589
12659
  const parts = did.split(":");
12590
12660
  const usersIdx = parts.indexOf("users");
@@ -12592,7 +12662,7 @@ function parseDidUser(did) {
12592
12662
  const email = decodeURIComponent(parts.slice(usersIdx + 1).join(":"));
12593
12663
  return { userId: did, email, domain };
12594
12664
  }
12595
- function registerJobCommandHandlers(eventBus, jobQueue, parentLogger) {
12665
+ function registerJobCommandHandlers(eventBus, jobQueue, project, parentLogger) {
12596
12666
  const logger = parentLogger.child({ component: "job-commands" });
12597
12667
  eventBus.get("job:create").subscribe(async (command) => {
12598
12668
  const { correlationId, jobType, resourceId: resId, params, _userId } = command;
@@ -12620,9 +12690,25 @@ function registerJobCommandHandlers(eventBus, jobQueue, parentLogger) {
12620
12690
  }
12621
12691
  };
12622
12692
  const jobParams = job.params;
12693
+ if ((jobType === "reference-annotation" || jobType === "generation") && Array.isArray(jobParams.entityTypes) && jobParams.entityTypes.length > 0) {
12694
+ const registered = await readEntityTypesProjection(project);
12695
+ const result = validateEntityTypes(registered, jobParams.entityTypes);
12696
+ if (!result.ok) {
12697
+ throw new Error(entityTypesNotRegisteredMessage(result.unknown));
12698
+ }
12699
+ }
12623
12700
  if (jobType === "reference-annotation" && jobParams.entityTypes) {
12624
12701
  jobParams.entityTypes = jobParams.entityTypes.map((et) => entityType(et));
12625
12702
  }
12703
+ if (jobType === "tag-annotation") {
12704
+ const schemas = await readTagSchemasProjection(project);
12705
+ const result = resolveTagSchema(schemas, jobParams.schemaId);
12706
+ if (result.error !== void 0) {
12707
+ throw new Error(result.error);
12708
+ }
12709
+ jobParams.schema = result.schema;
12710
+ delete jobParams.schemaId;
12711
+ }
12626
12712
  await jobQueue.createJob(job);
12627
12713
  logger.info("Job created via bus", { jobId: job.metadata.id, jobType, correlationId });
12628
12714
  eventBus.get("job:created").next({
@@ -12668,11 +12754,11 @@ function registerJobCommandHandlers(eventBus, jobQueue, parentLogger) {
12668
12754
  }
12669
12755
 
12670
12756
  // src/handlers/index.ts
12671
- function registerBusHandlers(eventBus, knowledgeSystem, jobQueue, logger) {
12757
+ function registerBusHandlers(eventBus, knowledgeSystem, jobQueue, project, logger) {
12672
12758
  registerAnnotationAssemblyHandler(eventBus, logger);
12673
12759
  registerAnnotationLookupHandlers(eventBus, knowledgeSystem.kb, knowledgeSystem.gatherer, logger);
12674
12760
  registerBindUpdateBodyHandler(eventBus, logger);
12675
- registerJobCommandHandlers(eventBus, jobQueue, logger);
12761
+ registerJobCommandHandlers(eventBus, jobQueue, project, logger);
12676
12762
  }
12677
12763
 
12678
12764
  // src/service.ts
@@ -12783,7 +12869,7 @@ async function startMakeMeaning(project, config, eventBus, logger, options) {
12783
12869
  const skipRebuild = options?.skipRebuild ?? process.env.SEMIONT_SKIP_REBUILD === "true";
12784
12870
  const { jobQueue, jobStatusSubscription } = await createJobQueue(project, eventBus, logger);
12785
12871
  const knowledgeSystem = await createKnowledgeSystemFromConfig(project, config, eventBus, logger, skipRebuild);
12786
- registerBusHandlers(eventBus, knowledgeSystem, jobQueue, logger);
12872
+ registerBusHandlers(eventBus, knowledgeSystem, jobQueue, project, logger);
12787
12873
  return {
12788
12874
  knowledgeSystem,
12789
12875
  jobQueue,
@@ -13276,7 +13362,6 @@ async function replayResourceCreated(event, eventBus, resolveBlob, contentStore,
13276
13362
  _userId: event.userId,
13277
13363
  language: payload.language,
13278
13364
  entityTypes: payload.entityTypes,
13279
- creationMethod: payload.creationMethod,
13280
13365
  isDraft: payload.isDraft,
13281
13366
  generatedFrom: payload.generatedFrom,
13282
13367
  generationPrompt: payload.generationPrompt
@@ -13457,7 +13542,6 @@ var SEMIONT_CONTEXT = [
13457
13542
  {
13458
13543
  "semiont": "https://semiont.org/vocab/",
13459
13544
  "entityTypes": "semiont:entityTypes",
13460
- "creationMethod": "semiont:creationMethod",
13461
13545
  "archived": "semiont:archived",
13462
13546
  "representations": { "@id": "semiont:representations", "@container": "@set" },
13463
13547
  "annotations": { "@id": "semiont:annotations", "@container": "@set" }
@@ -13579,7 +13663,6 @@ function buildResourceJsonLd(resource, annotations, sourceUrl) {
13579
13663
  if (primary.language) doc["inLanguage"] = primary.language;
13580
13664
  if (primary.mediaType) doc["encodingFormat"] = primary.mediaType;
13581
13665
  }
13582
- if (resource.creationMethod) doc["creationMethod"] = resource.creationMethod;
13583
13666
  if (resource.entityTypes && resource.entityTypes.length > 0) doc["entityTypes"] = resource.entityTypes;
13584
13667
  if (resource.archived) doc["archived"] = resource.archived;
13585
13668
  if (resource.wasDerivedFrom) doc["wasDerivedFrom"] = resource.wasDerivedFrom;
@@ -13747,7 +13830,6 @@ async function importResource(doc, userId3, eventBus, contentStore, resolveBlob,
13747
13830
  const representations = doc["representations"];
13748
13831
  const annotations = doc["annotations"];
13749
13832
  const entityTypes = doc["entityTypes"];
13750
- const creationMethod = doc["creationMethod"];
13751
13833
  let format = "text/markdown";
13752
13834
  let language;
13753
13835
  let contentChecksum;
@@ -13783,8 +13865,7 @@ async function importResource(doc, userId3, eventBus, contentStore, resolveBlob,
13783
13865
  format,
13784
13866
  _userId: userId3,
13785
13867
  language,
13786
- entityTypes: entityTypes ?? [],
13787
- creationMethod
13868
+ entityTypes: entityTypes ?? []
13788
13869
  });
13789
13870
  const created = await (0, import_rxjs13.firstValueFrom)(createResult$);
13790
13871
  const resourceId10 = resourceId(created.resourceId);