@moldea.ai/core 7.0.3 → 7.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/README.md +2 -2
- package/dist/analysis-worker.js +40 -10
- package/dist/analysis-worker.js.map +1 -1
- package/dist/chunks/{core-DC9KYL1H.js → core-CMuQrqRI.js} +395 -64
- package/dist/chunks/core-CMuQrqRI.js.map +1 -0
- package/dist/chunks/{errors-Dw1ahMS1.js → errors-BhiLG9F0.js} +20 -4
- package/dist/chunks/errors-BhiLG9F0.js.map +1 -0
- package/dist/chunks/{lifecycle-h3DWn5vl.js → lifecycle-Bdi_ydtH.js} +2 -2
- package/dist/chunks/{lifecycle-h3DWn5vl.js.map → lifecycle-Bdi_ydtH.js.map} +1 -1
- package/dist/chunks/{options-AMqX7rx_.js → options-BVF3DQHm.js} +7 -3
- package/dist/chunks/options-BVF3DQHm.js.map +1 -0
- package/dist/chunks/{repository-rpc-ClAIx3-c.js → repository-rpc-CiKFu86B.js} +70 -16
- package/dist/chunks/repository-rpc-CiKFu86B.js.map +1 -0
- package/dist/chunks/{scope-DxhC1hq2.js → scope-DoNl6LhC.js} +3 -3
- package/dist/chunks/scope-DoNl6LhC.js.map +1 -0
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +7 -2
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/diagnostic-utilities/index.d.ts.map +1 -1
- package/dist/diagnostics/index.d.ts +2 -2
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/integration-validation/agents-inspection.d.ts +19 -0
- package/dist/integration-validation/agents-inspection.d.ts.map +1 -0
- package/dist/integration-validation/claude-inspection.d.ts +21 -0
- package/dist/integration-validation/claude-inspection.d.ts.map +1 -0
- package/dist/integration-validation/inspection.d.ts +9 -3
- package/dist/integration-validation/inspection.d.ts.map +1 -1
- package/dist/integration-validation/parser.d.ts +8 -0
- package/dist/integration-validation/parser.d.ts.map +1 -1
- package/dist/integration-validation/types.d.ts +18 -0
- package/dist/integration-validation/types.d.ts.map +1 -1
- package/dist/integration-validation/utilities.d.ts +33 -0
- package/dist/integration-validation/utilities.d.ts.map +1 -0
- package/dist/node-inspection/client.d.ts.map +1 -1
- package/dist/node-inspection/protocol.d.ts.map +1 -1
- package/dist/node-inspection/repository-rpc.d.ts +7 -5
- package/dist/node-inspection/repository-rpc.d.ts.map +1 -1
- package/dist/node-inspection/types.d.ts +22 -1
- package/dist/node-inspection/types.d.ts.map +1 -1
- package/dist/node-runner.js +2 -2
- package/dist/node.js +37 -10
- package/dist/node.js.map +1 -1
- package/dist/project-validation/index.d.ts +1 -1
- package/dist/project-validation/index.d.ts.map +1 -1
- package/dist/repository-inspection-session/index.d.ts +12 -3
- package/dist/repository-inspection-session/index.d.ts.map +1 -1
- package/dist/retained-memory/index.d.ts +5 -4
- package/dist/retained-memory/index.d.ts.map +1 -1
- package/dist/scope.js +2 -2
- package/dist/universal-project-inspection/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/chunks/core-DC9KYL1H.js.map +0 -1
- package/dist/chunks/errors-Dw1ahMS1.js.map +0 -1
- package/dist/chunks/options-AMqX7rx_.js.map +0 -1
- package/dist/chunks/repository-rpc-ClAIx3-c.js.map +0 -1
- package/dist/chunks/scope-DxhC1hq2.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors-Dw1ahMS1.js","names":[],"sources":["../../src/node-inspection/constants.ts","../../src/node-inspection/protocol.ts","../../src/node-inspection/errors.ts"],"sourcesContent":["// whole-attempt lifetime and bounded bridge ownership, independent of source file size\nexport const NODE_INSPECTION_LIFETIME_MS = 120_000;\nexport const NODE_INSPECTION_TERMINATION_GRACE_MS = 1_000;\nexport const NODE_INSPECTION_MAX_REQUESTS = 4;\nexport const NODE_INSPECTION_FILE_PAGE_BYTES = 65_536;\nexport const NODE_INSPECTION_MESSAGE_BYTES = 1_048_576;\nexport const NODE_INSPECTION_STDIO_BYTES = 32_768;\n\n// two UTF-16 bytes per serialized byte, two copies at each owner, for every RPC credit\nexport const NODE_INSPECTION_TRANSPORT_BYTES =\n NODE_INSPECTION_MAX_REQUESTS * NODE_INSPECTION_MESSAGE_BYTES * 2 * 2 * 3;\n\n// fixed profile qualified in the constrained CLI and actual-worker lanes\nexport const NODE_INSPECTION_OLD_GENERATION_MIB = 512;\nexport const NODE_INSPECTION_YOUNG_GENERATION_MIB = 24;\n\n// immutable execution identity for consumers that authenticate prepared inspection state\nexport const NODE_INSPECTION_PROFILE = Object.freeze({\n lifetimeMs: NODE_INSPECTION_LIFETIME_MS,\n terminationGraceMs: NODE_INSPECTION_TERMINATION_GRACE_MS,\n maxReaderRequests: NODE_INSPECTION_MAX_REQUESTS,\n maxFilePageBytes: NODE_INSPECTION_FILE_PAGE_BYTES,\n maxMessageBytes: NODE_INSPECTION_MESSAGE_BYTES,\n maxStdioBytes: NODE_INSPECTION_STDIO_BYTES,\n transportBytes: NODE_INSPECTION_TRANSPORT_BYTES,\n oldGenerationMiB: NODE_INSPECTION_OLD_GENERATION_MIB,\n youngGenerationMiB: NODE_INSPECTION_YOUNG_GENERATION_MIB,\n});\n","import { Buffer } from 'node:buffer';\n\nimport { isRepositoryPath } from '@moldea.ai/repository';\n\nimport type { ICoreResourceLimits } from '../contracts/index.js';\nimport { CoreOperationException } from '../exceptions/index.js';\n\nimport { NODE_INSPECTION_FILE_PAGE_BYTES, NODE_INSPECTION_MESSAGE_BYTES } from './constants.js';\nimport type { INodeInspectionMessage } from './types.js';\n\n/** Creates the safe failure for an untrusted or inconsistent private protocol record. */\nexport const createInspectionProcessFailure = (cause?: unknown): CoreOperationException =>\n new CoreOperationException({\n code: 'INSPECTION_PROCESS_FAILED',\n operation: 'create-project-inspection',\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst isRecord = (input: unknown): input is Record<string, unknown> =>\n input !== null && typeof input === 'object' && !Array.isArray(input);\nconst JSON_SHORT_ESCAPES = new Set([8, 9, 10, 12, 13]);\nconst isInteger = (input: unknown): input is number =>\n typeof input === 'number' && Number.isSafeInteger(input) && input >= 0;\nconst hasKeys = (\n input: Record<string, unknown>,\n required: string[],\n optional: string[] = [],\n): boolean =>\n required.every((key) => Object.hasOwn(input, key)) &&\n Object.keys(input).every((key) => required.includes(key) || optional.includes(key));\nconst isSnapshot = (input: unknown): boolean =>\n isRecord(input) &&\n hasKeys(input, ['id', 'sourceKind']) &&\n typeof input['id'] === 'string' &&\n input['id'].length > 0 &&\n typeof input['sourceKind'] === 'string' &&\n input['sourceKind'].length > 0;\nconst isOptionalString = (input: Record<string, unknown>, key: string): boolean =>\n !Object.hasOwn(input, key) || typeof input[key] === 'string';\nconst isPageInput = (input: unknown): boolean =>\n isRecord(input) &&\n hasKeys(input, ['maxItems', 'view'], ['cursor']) &&\n isInteger(input['maxItems']) &&\n input['maxItems'] > 0 &&\n ['all', 'diagnostics', 'coverage', 'metadata'].includes(String(input['view'])) &&\n isOptionalString(input, 'cursor');\nconst isLimits = (input: unknown): input is ICoreResourceLimits =>\n isRecord(input) &&\n hasKeys(input, [\n 'maxEntries',\n 'maxTotalBytesRead',\n 'maxFileBytes',\n 'maxManifestBytes',\n 'maxRetainedBytes',\n 'maxDiagnostics',\n 'maxCoverage',\n 'maxAcceptedWarnings',\n ]) &&\n Object.values(input).every((limit) => isInteger(limit) && limit > 0);\nconst isCounts = (input: unknown): boolean =>\n isRecord(input) &&\n hasKeys(input, [\n 'agents',\n 'context',\n 'decisions',\n 'mirrors',\n 'runtimes',\n 'unresolved',\n 'diagnostics',\n 'errors',\n 'warnings',\n 'acceptedWarnings',\n 'coverage',\n 'metadata',\n ]) &&\n Object.values(input).every(isInteger);\nconst isSummary = (input: unknown): boolean =>\n input === null ||\n (isRecord(input) &&\n hasKeys(input, ['counts', 'manifestDigest', 'manifestPath', 'projectDigest', 'projectPath']) &&\n isRecord(input['counts']) &&\n hasKeys(input['counts'], [\n 'agents',\n 'context',\n 'decisions',\n 'mirrors',\n 'runtimes',\n 'unresolved',\n ]) &&\n Object.values(input['counts']).every(isInteger) &&\n typeof input['manifestDigest'] === 'string' &&\n typeof input['projectDigest'] === 'string' &&\n isRepositoryPath(input['manifestPath']) &&\n isRepositoryPath(input['projectPath']));\nconst isInspectionBase = (input: Record<string, unknown>): boolean =>\n isCounts(input['counts']) &&\n isRecord(input['coverageCounts']) &&\n hasKeys(input['coverageCounts'], [\n 'bindings',\n 'exportsPassed',\n 'exportsFailed',\n 'exportsNotChecked',\n ]) &&\n Object.values(input['coverageCounts']).every(isInteger) &&\n typeof input['valid'] === 'boolean' &&\n (input['formatVersion'] === null || input['formatVersion'] === 1) &&\n typeof input['inspectionDigest'] === 'string' &&\n isSnapshot(input['source']) &&\n isSummary(input['summary']);\nconst INSPECTION_KEYS = [\n 'counts',\n 'coverageCounts',\n 'valid',\n 'formatVersion',\n 'inspectionDigest',\n 'source',\n 'summary',\n];\nconst isMetadata = (input: unknown): boolean =>\n isRecord(input) &&\n hasKeys(input, [...INSPECTION_KEYS, 'resourceUsage', 'maxAnalysisHeapBytes']) &&\n isInspectionBase(input) &&\n isInteger(input['maxAnalysisHeapBytes']) &&\n input['maxAnalysisHeapBytes'] > 0 &&\n isRecord(input['resourceUsage']) &&\n hasKeys(input['resourceUsage'], [\n 'canonicalBytes',\n 'peakRetainedBytes',\n 'preparedBytes',\n 'retainedBytes',\n 'totalBytesRead',\n ]) &&\n Object.values(input['resourceUsage']).every(isInteger);\nconst isPage = (input: unknown): boolean =>\n isRecord(input) &&\n hasKeys(input, [...INSPECTION_KEYS, 'page', 'view']) &&\n isInspectionBase(input) &&\n ['all', 'diagnostics', 'coverage', 'metadata'].includes(String(input['view'])) &&\n isRecord(input['page']) &&\n hasKeys(input['page'], ['isComplete', 'records', 'nextCursor', 'totalItems']) &&\n typeof input['page']['isComplete'] === 'boolean' &&\n isInteger(input['page']['totalItems']) &&\n (input['page']['nextCursor'] === null || typeof input['page']['nextCursor'] === 'string') &&\n Array.isArray(input['page']['records']) &&\n input['page']['records'].every(\n (record: unknown) =>\n isRecord(record) &&\n hasKeys(record, ['item', 'nextCursor']) &&\n (record['nextCursor'] === null || typeof record['nextCursor'] === 'string') &&\n isRecord(record['item']) &&\n typeof record['item']['kind'] === 'string' &&\n ['agent', 'diagnostic', 'coverage', 'metadata'].includes(record['item']['kind']) &&\n hasKeys(record['item'], ['kind', record['item']['kind']]) &&\n isRecord(record['item'][record['item']['kind']]),\n );\nconst isRequest = (input: unknown): boolean => {\n if (!isRecord(input)) return false;\n switch (input['method']) {\n case 'getEntry':\n return hasKeys(input, ['method', 'path']) && isRepositoryPath(input['path']);\n case 'listEntriesPage':\n return (\n hasKeys(input, ['method', 'maxEntries'], ['cursor', 'prefix']) &&\n isInteger(input['maxEntries']) &&\n input['maxEntries'] > 0 &&\n input['maxEntries'] <= 128 &&\n isOptionalString(input, 'cursor') &&\n (!Object.hasOwn(input, 'prefix') || isRepositoryPath(input['prefix']))\n );\n case 'readFilePage':\n return (\n hasKeys(input, ['method', 'path', 'maxBytes', 'offset']) &&\n isRepositoryPath(input['path']) &&\n isInteger(input['offset']) &&\n isInteger(input['maxBytes']) &&\n input['maxBytes'] > 0 &&\n input['maxBytes'] <= NODE_INSPECTION_FILE_PAGE_BYTES\n );\n default:\n return false;\n }\n};\n\n/** Validates closed control envelopes and their typed operation payloads on both bridges. */\nconst isMessage = (input: unknown): input is INodeInspectionMessage => {\n if (\n !isRecord(input) ||\n typeof input['attemptId'] !== 'string' ||\n !/^[a-f0-9]{32}$/.test(input['attemptId'])\n )\n return false;\n const keys = ['attemptId', 'kind'];\n switch (input['kind']) {\n case 'start':\n return (\n hasKeys(input, [...keys, 'snapshot', 'limits', 'deadline']) &&\n isSnapshot(input['snapshot']) &&\n isLimits(input['limits']) &&\n isInteger(input['deadline'])\n );\n case 'ready':\n return (\n hasKeys(input, [...keys, 'maxAnalysisHeapBytes']) &&\n isInteger(input['maxAnalysisHeapBytes']) &&\n input['maxAnalysisHeapBytes'] > 0\n );\n case 'run':\n case 'dispose':\n return hasKeys(input, keys);\n case 'prepared':\n return hasKeys(input, [...keys, 'inspection']) && isMetadata(input['inspection']);\n case 'read-page':\n return (\n hasKeys(input, [...keys, 'requestId', 'input']) &&\n isInteger(input['requestId']) &&\n isPageInput(input['input'])\n );\n case 'page':\n return (\n hasKeys(input, [...keys, 'requestId', 'result']) &&\n isInteger(input['requestId']) &&\n isPage(input['result'])\n );\n case 'reader-request':\n return (\n hasKeys(input, [...keys, 'requestId', 'request']) &&\n isInteger(input['requestId']) &&\n isRequest(input['request'])\n );\n case 'reader-response':\n return hasKeys(input, [...keys, 'requestId', 'result']) && isInteger(input['requestId']);\n case 'reader-failure':\n case 'failure':\n return (\n hasKeys(input, [\n ...keys,\n 'failure',\n ...(input['kind'] === 'reader-failure' ? ['requestId'] : []),\n ]) &&\n (input['kind'] !== 'reader-failure' || isInteger(input['requestId'])) &&\n isRecord(input['failure']) &&\n hasKeys(input['failure'], ['family', 'options']) &&\n ['configuration', 'operation', 'repository', 'path'].includes(\n String(input['failure']['family']),\n ) &&\n isRecord(input['failure']['options'])\n );\n default:\n return false;\n }\n};\n\n/** Counts escaped JSON bytes without first allocating a serialized oversized message. */\nconst countJsonBytes = (input: unknown, ancestors: WeakSet<object>, depth: number): number => {\n if (depth > 64) throw createInspectionProcessFailure();\n if (input === null) return 4;\n if (typeof input === 'boolean') return input ? 4 : 5;\n if (typeof input === 'number' && Number.isFinite(input)) return String(input).length;\n if (typeof input === 'string') {\n let bytes = 2;\n for (let index = 0; index < input.length; index++) {\n const code = input.charCodeAt(index);\n if (code === 34 || code === 92 || JSON_SHORT_ESCAPES.has(code)) bytes += 2;\n else if (code < 32) bytes += 6;\n else if (code < 128) bytes++;\n else if (code < 2048) bytes += 2;\n else if (\n code >= 0xd800 &&\n code <= 0xdbff &&\n index + 1 < input.length &&\n input.charCodeAt(index + 1) >= 0xdc00 &&\n input.charCodeAt(index + 1) <= 0xdfff\n ) {\n bytes += 4;\n index++;\n } else bytes += code >= 0xd800 && code <= 0xdfff ? 6 : 3;\n if (bytes > NODE_INSPECTION_MESSAGE_BYTES) return bytes;\n }\n return bytes;\n }\n if (typeof input !== 'object' || ancestors.has(input)) throw createInspectionProcessFailure();\n ancestors.add(input);\n let bytes = 2;\n let count = 0;\n if (Array.isArray(input)) {\n for (const element of input) {\n bytes += (count++ === 0 ? 0 : 1) + countJsonBytes(element, ancestors, depth + 1);\n if (bytes > NODE_INSPECTION_MESSAGE_BYTES) break;\n }\n } else {\n for (const key in input) {\n if (!Object.hasOwn(input, key)) continue;\n bytes +=\n (count++ === 0 ? 0 : 1) +\n countJsonBytes(key, ancestors, depth + 1) +\n 1 +\n countJsonBytes((input as Record<string, unknown>)[key], ancestors, depth + 1);\n if (bytes > NODE_INSPECTION_MESSAGE_BYTES) break;\n }\n }\n ancestors.delete(input);\n return bytes;\n};\n\n/**\n * Admits a complete bounded record before serialization; no record is truncated.\n * @returns One private JSON frame.\n * @throws\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n * - INSPECTION_PROCESS_FAILED: The isolated project inspection failed.\n */\nexport const encodeInspectionMessage = (message: INodeInspectionMessage): string => {\n const bytes = countJsonBytes(message, new WeakSet(), 0);\n if (bytes > NODE_INSPECTION_MESSAGE_BYTES)\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: 'maxInspectionMessageBytes',\n limitMaximum: NODE_INSPECTION_MESSAGE_BYTES,\n observedUsage: bytes,\n nextAction: null,\n operation: 'create-project-inspection',\n });\n if (!isMessage(message)) throw createInspectionProcessFailure();\n return JSON.stringify(message);\n};\n\n/**\n * Checks frame size before parsing and validates the closed message contract.\n * @returns A validated private message.\n * @throws\n * - INSPECTION_PROCESS_FAILED: The isolated project inspection failed.\n */\nexport const decodeInspectionMessage = (frame: unknown): INodeInspectionMessage => {\n if (typeof frame !== 'string' || Buffer.byteLength(frame) > NODE_INSPECTION_MESSAGE_BYTES)\n throw createInspectionProcessFailure();\n let message: unknown;\n try {\n message = JSON.parse(frame);\n } catch (cause) {\n throw createInspectionProcessFailure(cause);\n }\n if (!isMessage(message)) throw createInspectionProcessFailure();\n return message;\n};\n","import {\n RepositoryPathException,\n RepositorySourceException,\n isRepositoryPath,\n type IRepositoryOperation,\n type IRepositorySourceErrorCode,\n} from '@moldea.ai/repository';\n\nimport {\n CoreConfigurationException,\n CoreOperationException,\n isCoreConfigurationErrorCode,\n isCoreOperation,\n isCoreOperationErrorCode,\n} from '../exceptions/index.js';\n\nimport { createInspectionProcessFailure } from './protocol.js';\nimport type { INodeInspectionFailure } from './types.js';\n\n/** Serializes only documented exception fields, excluding native messages, causes and stacks. */\nexport const serializeInspectionFailure = (error: unknown): INodeInspectionFailure => {\n if (error instanceof CoreConfigurationException)\n return {\n family: 'configuration',\n options: {\n code: error.code,\n operation: error.operation,\n },\n };\n if (error instanceof CoreOperationException)\n return {\n family: 'operation',\n options: {\n code: error.code,\n operation: error.operation,\n ...(error.code !== 'RESOURCE_LIMIT_EXCEEDED'\n ? {}\n : {\n limit: error.limit,\n limitMaximum: error.limitMaximum,\n nextAction: error.nextAction,\n observedUsage: error.observedUsage,\n }),\n },\n };\n if (error instanceof RepositoryPathException) return { family: 'path', options: {} };\n if (error instanceof RepositorySourceException)\n return {\n family: 'repository',\n options: {\n code: error.code,\n operation: error.operation,\n path: error.path,\n retryable: error.retryable,\n ...(error.resource === null ? {} : { resource: error.resource }),\n },\n };\n return {\n family: 'operation',\n options: {\n code: 'INSPECTION_PROCESS_FAILED',\n operation: 'create-project-inspection',\n },\n };\n};\nconst REPOSITORY_CODES: IRepositorySourceErrorCode[] = [\n 'ENTRY_NOT_FOUND',\n 'ENTRY_NOT_FILE',\n 'ENTRY_NOT_DIRECTORY',\n 'INVALID_PAGE_REQUEST',\n 'ACCESS_DENIED',\n 'SOURCE_UNAVAILABLE',\n 'SNAPSHOT_CHANGED',\n 'PROVIDER_INCOMPLETE',\n 'INVALID_SOURCE_DATA',\n 'RESOURCE_LIMIT_EXCEEDED',\n 'ABORTED',\n];\nconst REPOSITORY_OPERATIONS: IRepositoryOperation[] = [\n 'create-reader',\n 'create-comparison',\n 'get-entry',\n 'read-file-page',\n 'list-entries-page',\n 'list-changes-page',\n];\nconst isNumber = (input: unknown): input is number =>\n typeof input === 'number' && Number.isSafeInteger(input) && input >= 0;\n\n/**\n * Reconstructs a documented typed failure after checking its safe transport fields.\n * @returns A package exception without a remote native cause or stack.\n * @throws\n * - INSPECTION_PROCESS_FAILED: The isolated project inspection failed.\n */\nexport const deserializeInspectionFailure = (failure: INodeInspectionFailure): Error => {\n const options = failure.options;\n const allowed =\n failure.family === 'configuration'\n ? ['code', 'operation']\n : failure.family === 'operation'\n ? ['code', 'operation', 'limit', 'limitMaximum', 'nextAction', 'observedUsage']\n : failure.family === 'repository'\n ? ['code', 'operation', 'path', 'retryable', 'resource']\n : [];\n if (Object.keys(options).some((key) => !allowed.includes(key)))\n throw createInspectionProcessFailure();\n if (\n (failure.family === 'operation' || failure.family === 'configuration') &&\n !isCoreOperation(options['operation'])\n )\n throw createInspectionProcessFailure();\n const scope = {\n operation: isCoreOperation(options['operation'])\n ? options['operation']\n : ('create-project-inspection' as const),\n };\n if (failure.family === 'path' && Object.keys(options).length === 0)\n return new RepositoryPathException();\n if (failure.family === 'configuration') {\n const code = options['code'];\n if (isCoreConfigurationErrorCode(code))\n return new CoreConfigurationException({ ...scope, code });\n }\n if (failure.family === 'operation') {\n const code = options['code'];\n if (\n isCoreOperationErrorCode(code) &&\n code !== 'RESOURCE_LIMIT_EXCEEDED' &&\n !['limit', 'limitMaximum', 'nextAction', 'observedUsage'].some((key) =>\n Object.hasOwn(options, key),\n )\n )\n return new CoreOperationException({ ...scope, code });\n if (\n options['code'] === 'RESOURCE_LIMIT_EXCEEDED' &&\n isNumber(options['limitMaximum']) &&\n options['limitMaximum'] > 0\n ) {\n if (\n options['limit'] === 'maxAnalysisHeapBytes' &&\n options['nextAction'] === 'review-inspection-capacity' &&\n options['observedUsage'] === null\n )\n return new CoreOperationException({\n ...scope,\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: 'maxAnalysisHeapBytes',\n limitMaximum: options['limitMaximum'],\n observedUsage: null,\n nextAction: 'review-inspection-capacity',\n });\n if (\n (options['limit'] === 'maxInspectionMessageBytes' ||\n options['limit'] === 'maxReaderRequests') &&\n options['nextAction'] === null &&\n isNumber(options['observedUsage'])\n )\n return new CoreOperationException({\n ...scope,\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: options['limit'],\n limitMaximum: options['limitMaximum'],\n nextAction: null,\n observedUsage: options['observedUsage'],\n });\n if (\n typeof options['limit'] === 'string' &&\n !['maxAnalysisHeapBytes', 'maxInspectionMessageBytes', 'maxReaderRequests'].includes(\n options['limit'],\n ) &&\n options['nextAction'] === 'reduce-input-or-increase-limit' &&\n isNumber(options['observedUsage'])\n )\n return new CoreOperationException({\n ...scope,\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: options['limit'],\n limitMaximum: options['limitMaximum'],\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage: options['observedUsage'],\n });\n }\n }\n if (failure.family === 'repository') {\n const code = REPOSITORY_CODES.find((candidate) => candidate === options['code']);\n const operation = REPOSITORY_OPERATIONS.find((candidate) => candidate === options['operation']);\n const resource = options['resource'];\n if (\n code !== undefined &&\n operation !== undefined &&\n typeof options['retryable'] === 'boolean' &&\n (options['path'] === null || isRepositoryPath(options['path'])) &&\n (resource === undefined ||\n (resource !== null &&\n typeof resource === 'object' &&\n Object.keys(resource).length === 3 &&\n 'dimension' in resource &&\n typeof resource.dimension === 'string' &&\n 'limit' in resource &&\n isNumber(resource.limit) &&\n 'observed' in resource &&\n isNumber(resource.observed)))\n ) {\n return new RepositorySourceException({\n code,\n operation,\n path: options['path'],\n retryable: options['retryable'],\n ...(resource === undefined\n ? {}\n : {\n resource: resource as {\n dimension: string;\n limit: number;\n observed: number;\n },\n }),\n });\n }\n }\n throw createInspectionProcessFailure();\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"options-AMqX7rx_.js","names":[],"sources":["../../src/constants/index.ts","../../src/format-validation/index.ts","../../src/immutable/index.ts","../../src/diagnostic-utilities/index.ts","../../src/options/index.ts"],"sourcesContent":["import type { ICoreResourceLimits } from '../contracts/index.js';\nimport type { IRepositoryFormatVersion } from '../format/index.js';\n\n// warning codes whose findings may be explicitly accepted in the manifest\nexport const ACCEPTABLE_WARNING_CODES = Object.freeze([\n 'MOLDEA_IMPACT_PATTERN_UNMATCHED',\n 'MOLDEA_INTEGRATION_BLOCK_MISSING',\n 'MOLDEA_INTEGRATION_SKILL_MISSING',\n 'MOLDEA_INTEGRATION_BLOCK_STALE',\n] as const);\n\n// runtime labels selecting guidance without asserting SDK compatibility\nexport const RECOGNIZED_RUNTIME_IDS = Object.freeze([\n 'amazon-bedrock',\n 'anthropic',\n 'cerebras',\n 'claude-agent-sdk',\n 'cloudflare-agents',\n 'cohere',\n 'convex-agent',\n 'cursor-sdk',\n 'custom',\n 'deep-agents',\n 'eve',\n 'genkit',\n 'github-copilot-sdk',\n 'google-adk',\n 'google-genai',\n 'groq',\n 'hugging-face',\n 'ibm-watsonx-ai',\n 'langchain',\n 'langgraph',\n 'livekit-agents',\n 'mastra',\n 'microsoft-foundry',\n 'mistral',\n 'node-llama-cpp',\n 'ollama',\n 'openai',\n 'openai-agents-sdk',\n 'openai-codex',\n 'opencode-sdk',\n 'openrouter',\n 'pi-agent',\n 'strands-agents',\n 'tanstack-ai',\n 'vercel-ai-sdk',\n 'voltagent',\n] as const);\n\n// repository-format major versions interpreted by this Core release\nexport const SUPPORTED_REPOSITORY_FORMAT_VERSIONS: readonly IRepositoryFormatVersion[] =\n Object.freeze([1]);\n\n// default safety budgets applied independently to each Core operation\nexport const DEFAULT_CORE_RESOURCE_LIMITS: ICoreResourceLimits = Object.freeze({\n maxDiagnostics: 10_000,\n maxEntries: 100_000,\n maxCoverage: 10_000,\n maxAcceptedWarnings: 256,\n maxFileBytes: 8_388_608,\n maxManifestBytes: 2_097_152,\n maxRetainedBytes: 536_870_912,\n maxTotalBytesRead: 134_217_728,\n});\n","import { isRepositoryPath, parseRepositoryPath, type IRepositoryPath } from '@moldea.ai/repository';\n\nconst STABLE_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;\nconst VARIABLE_ID_PATTERN = /^[A-Z][A-Z0-9_]*$/u;\nconst WINDOWS_RESERVED_ID_PATTERN = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/u;\nconst LINE_BREAK_CHARACTERS = ['\\n', '\\r', '\\u0085', '\\u2028', '\\u2029'] as const;\nconst UNSUPPORTED_GLOB_PATTERN = /[!?[\\]{}]/u;\n\nconst hasLineBreak = (value: string): boolean => {\n return LINE_BREAK_CHARACTERS.some((lineBreak) => value.includes(lineBreak));\n};\n\n/** Determines whether a code point belongs to the Repository Format version 1 whitespace set. */\nexport const isRepositoryFormatWhitespace = (codePoint: number): boolean => {\n return (\n (codePoint >= 0x0009 && codePoint <= 0x000d) ||\n codePoint === 0x0020 ||\n codePoint === 0x0085 ||\n codePoint === 0x00a0 ||\n codePoint === 0x1680 ||\n (codePoint >= 0x2000 && codePoint <= 0x200a) ||\n codePoint === 0x2028 ||\n codePoint === 0x2029 ||\n codePoint === 0x202f ||\n codePoint === 0x205f ||\n codePoint === 0x3000\n );\n};\n\n/** Compares strings by exact Unicode code-point order without locale behavior. */\nexport const compareExactStrings = (left: string, right: string): number => {\n const leftScalars = left[Symbol.iterator]();\n const rightScalars = right[Symbol.iterator]();\n\n while (true) {\n const leftScalar = leftScalars.next();\n const rightScalar = rightScalars.next();\n\n if (leftScalar.done === true) {\n return rightScalar.done === true ? 0 : -1;\n }\n\n if (rightScalar.done === true) {\n return 1;\n }\n\n const leftCodePoint = leftScalar.value.codePointAt(0) ?? 0;\n const rightCodePoint = rightScalar.value.codePointAt(0) ?? 0;\n\n if (leftCodePoint !== rightCodePoint) {\n return leftCodePoint < rightCodePoint ? -1 : 1;\n }\n }\n};\n\n/** Counts Unicode scalar values in valid JavaScript text. */\nexport const countUnicodeScalars = (value: string): number => {\n const scalars = value[Symbol.iterator]();\n let count = 0;\n\n while (scalars.next().done !== true) {\n count += 1;\n }\n\n return count;\n};\n\n/** Determines whether a JavaScript string contains only Unicode scalar values. */\nexport const isUnicodeScalarText = (value: string): boolean => {\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n if (index + 1 >= value.length) {\n return false;\n }\n\n const nextCodeUnit = value.charCodeAt(index + 1);\n\n if (nextCodeUnit < 0xdc00 || nextCodeUnit > 0xdfff) {\n return false;\n }\n\n index += 1;\n continue;\n }\n\n if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n return false;\n }\n }\n\n return true;\n};\n\n/** Determines whether a value contains at least one non-whitespace scalar. */\nexport const hasNonWhitespace = (value: string): boolean => {\n for (const scalar of value) {\n if (!isRepositoryFormatWhitespace(scalar.codePointAt(0) ?? 0)) {\n return true;\n }\n }\n\n return false;\n};\n\n/** Determines whether a value begins or ends with version 1 whitespace. */\nexport const hasSurroundingWhitespace = (value: string): boolean => {\n const firstCodePoint = value.codePointAt(0);\n const lastCodePoint = value.codePointAt(value.length - 1);\n\n return (\n (firstCodePoint !== undefined && isRepositoryFormatWhitespace(firstCodePoint)) ||\n (lastCodePoint !== undefined && isRepositoryFormatWhitespace(lastCodePoint))\n );\n};\n\n/** Removes only Repository Format version 1 whitespace from both edges. */\nexport const trimRepositoryFormatWhitespace = (value: string): string => {\n let start = 0;\n let end = value.length;\n\n while (start < end) {\n const codePoint = value.codePointAt(start);\n\n if (codePoint === undefined || !isRepositoryFormatWhitespace(codePoint)) {\n break;\n }\n\n start += codePoint > 0xffff ? 2 : 1;\n }\n\n while (end > start) {\n const codePoint = value.codePointAt(end - 1);\n\n if (codePoint === undefined || !isRepositoryFormatWhitespace(codePoint)) {\n break;\n }\n\n end -= 1;\n }\n\n return value.slice(start, end);\n};\n\n/** Determines whether a string is non-empty and contains no line break. */\nexport const isNonEmptySingleLine = (value: string): boolean => {\n return value.length > 0 && !hasLineBreak(value);\n};\n\n/** Determines whether a value satisfies stable moldea ID syntax. */\nexport const isStableId = (value: string): boolean => {\n return value.length <= 64 && STABLE_ID_PATTERN.test(value);\n};\n\n/** Determines whether an otherwise valid stable ID is filesystem-reserved. */\nexport const isReservedId = (value: string): boolean => WINDOWS_RESERVED_ID_PATTERN.test(value);\n\n/** Determines whether a value satisfies runtime-variable ID syntax. */\nexport const isVariableId = (value: string): boolean => {\n return value.length <= 64 && VARIABLE_ID_PATTERN.test(value);\n};\n\n/** Determines whether a parsed capability description satisfies version 1 limits. */\nexport const isCapabilityDescription = (value: string): boolean => {\n const scalarLength = countUnicodeScalars(value);\n\n return (\n scalarLength >= 1 &&\n scalarLength <= 1_000 &&\n !hasSurroundingWhitespace(value) &&\n !hasLineBreak(value) &&\n !value.includes('\\0') &&\n !value.includes('{{') &&\n !value.includes('}}')\n );\n};\n\n/** Parses a non-root repository-format logical path without throwing. */\nexport const parseManifestPath = (value: string): IRepositoryPath | null => {\n return value !== '/' && isRepositoryPath(value) ? parseRepositoryPath(value) : null;\n};\n\n/** Determines whether a path is the canonical manifest path. */\nexport const isCanonicalManifestPath = (path: IRepositoryPath): boolean => {\n return path === '/moldea/moldea.yaml';\n};\n\n/** Extracts the stable millisecond ID from one canonical immediate decision path. */\nexport const parseDecisionIdFromPath = (path: IRepositoryPath): string | null => {\n const match = /^\\/moldea\\/decisions\\/(\\d{13})-([a-z0-9]+(?:-[a-z0-9]+)*)\\.md$/u.exec(path);\n const id = match?.[1];\n const slug = match?.[2];\n\n return id !== undefined && slug !== undefined && isStableId(slug) ? id : null;\n};\n\n/** Determines whether a path is an allowed focused-context relationship key. */\nexport const isContextPath = (path: IRepositoryPath, allowProject: boolean): boolean => {\n if (allowProject && path === '/moldea/project.md') {\n return true;\n }\n\n return path.startsWith('/moldea/context/') && path.endsWith('.md');\n};\n\n/** Determines whether a path has the canonical immediate decision filename shape. */\nexport const isDecisionPath = (path: IRepositoryPath): boolean => {\n return parseDecisionIdFromPath(path) !== null;\n};\n\n/** Determines whether a path is canonical runtime guidance. */\nexport const isRuntimeGuidancePath = (path: IRepositoryPath): boolean => {\n return path.startsWith('/moldea/runtimes/') && path.endsWith('.md');\n};\n\n/** Determines whether a mirror path is outside canonical moldea content. */\nexport const isMirrorPath = (path: IRepositoryPath): boolean => {\n return path !== '/moldea' && !path.startsWith('/moldea/');\n};\n\n/** Determines whether an impact path contains prohibited glob metacharacters. */\nexport const hasUnsupportedGlobMetacharacter = (value: string): boolean => {\n return UNSUPPORTED_GLOB_PATTERN.test(value);\n};\n\n/** Determines whether a string satisfies the version 1 simple-glob grammar. */\nexport const isSimpleGlob = (value: string): boolean => {\n if (hasUnsupportedGlobMetacharacter(value) || value.includes('***')) {\n return false;\n }\n\n const segments = value.slice(1).split('/');\n\n if (segments.some((segment) => segment.includes('**') && segment !== '**')) {\n return false;\n }\n\n return value.includes('*') && isRepositoryPath(value.replaceAll('*', 'x'));\n};\n\n/** Determines whether a repository-reference symbol has the common safe shape. */\nexport const isRepositorySymbol = (value: string): boolean => {\n return isNonEmptySingleLine(value) && !value.includes('\\0');\n};\n\n/** Determines whether a canonical moldea reference incorrectly carries a symbol. */\nexport const isCanonicalMoldeaPath = (path: IRepositoryPath): boolean => {\n return path === '/moldea' || path.startsWith('/moldea/');\n};\n","/**\n * Recursively freezes a Core-owned value without cloning it.\n * @param value The detached acyclic value whose already-frozen objects are deeply frozen.\n * @returns The same value with every mutable reachable object frozen.\n */\nexport const freezeRecursively = <Value>(value: Value): Readonly<Value> => {\n if (typeof value !== 'object' || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const key of Reflect.ownKeys(value)) {\n const child = (value as Readonly<Record<PropertyKey, unknown>>)[key];\n freezeRecursively(child);\n }\n\n return Object.freeze(value);\n};\n\n/**\n * Creates a record that cannot collide with prototype-chain properties.\n * @param entries The own string-keyed entries to assign.\n * @returns A mutable null-prototype record for later normalization and freezing.\n */\nexport const createNullPrototypeRecord = <Value>(\n entries: Iterable<readonly [string, Value]>,\n): Record<string, Value> => {\n const record = Object.create(null) as Record<string, Value>;\n\n for (const [key, value] of entries) {\n record[key] = value;\n }\n\n return record;\n};\n","import type { IRepositoryPath } from '@moldea.ai/repository';\n\nimport { ACCEPTABLE_WARNING_CODES } from '../constants/index.js';\nimport type { ICoreResourceLimits } from '../contracts/index.js';\nimport type {\n ICoreDiagnostic,\n ICoreDiagnosticCode,\n IDiagnostic,\n IDiagnosticDetails,\n IDiagnosticEntity,\n ISourceRange,\n} from '../diagnostics/index.js';\nimport { CoreOperationException, type ICoreOperation } from '../exceptions/index.js';\nimport { compareExactStrings } from '../format-validation/index.js';\nimport { createNullPrototypeRecord, freezeRecursively } from '../immutable/index.js';\n\nconst CORE_DIAGNOSTIC_MESSAGES: Record<ICoreDiagnosticCode, string> = {\n MOLDEA_AGENT_DESCRIPTION_INVALID: 'The agent description is invalid.',\n MOLDEA_AGENT_DESCRIPTION_MISSING: 'The agent description is missing.',\n MOLDEA_AGENT_DIRECTORY_MISSING: 'The registered agent directory is missing.',\n MOLDEA_AGENT_DIRECTORY_UNREGISTERED: 'The agent directory is not registered.',\n MOLDEA_AGENT_HANDOFF_DESCRIPTION_INVALID: 'The agent handoff description is invalid.',\n MOLDEA_AGENT_IDENTITY_INVALID: 'The agent instruction identity is invalid.',\n MOLDEA_AGENT_INSTRUCTION_EMPTY: 'The agent instruction is empty.',\n MOLDEA_AGENT_INSTRUCTION_MISSING: 'The agent instruction is missing.',\n MOLDEA_CANONICAL_ASSET_SYMLINK: 'The canonical asset is a symlink.',\n MOLDEA_CANONICAL_PATH_UNRECOGNIZED: 'The canonical path is unrecognized.',\n MOLDEA_CAPABILITY_DESCRIPTION_INVALID: 'The capability description is invalid.',\n MOLDEA_CAPABILITY_DESCRIPTION_MISSING: 'The capability description is missing.',\n MOLDEA_CONTEXT_FILE_EMPTY: 'The focused context file is empty.',\n MOLDEA_CONTEXT_PATH_INVALID: 'The context relationship path is invalid.',\n MOLDEA_CONTEXT_RELATIONSHIP_EMPTY: 'The declared relationship has no bindings or impact paths.',\n MOLDEA_DECISION_BODY_EMPTY: 'The decision Markdown body is empty.',\n MOLDEA_DECISION_CREATED_AT_INVALID: 'The decision createdAt value is invalid.',\n MOLDEA_DECISION_FILENAME_INVALID: 'The decision path or filename is invalid.',\n MOLDEA_DECISION_FRONTMATTER_INVALID: 'The decision frontmatter is invalid.',\n MOLDEA_DECISION_FRONTMATTER_MISSING: 'The decision frontmatter or its delimiters are missing.',\n MOLDEA_DECISION_ID_DUPLICATE: 'The decision ID is duplicated.',\n MOLDEA_DECISION_PROPERTY_UNKNOWN: 'The decision frontmatter contains an unknown property.',\n MOLDEA_DECISION_REFERENCE_MISSING: 'The referenced decision does not exist.',\n MOLDEA_DECISION_RELATIONSHIP_INACTIVE: 'The referenced decision is not accepted.',\n MOLDEA_DECISION_SELF_SUPERSESSION: 'The decision supersedes itself.',\n MOLDEA_DECISION_STATUS_INVALID: 'The decision status is invalid.',\n MOLDEA_DECISION_SUPERSEDED_ORPHAN:\n 'The superseded decision has no active supersession relationship.',\n MOLDEA_DECISION_SUPERSESSION_CYCLE: 'The decision supersession graph contains a cycle.',\n MOLDEA_DECISION_SUPERSESSION_STATUS_INVALID:\n 'The decision supersession relationship has inconsistent statuses.',\n MOLDEA_DECISION_TIMESTAMP_MISMATCH:\n 'The decision filename timestamp and createdAt value do not match.',\n MOLDEA_ENTRY_TYPE_INVALID: 'The repository entry type is invalid.',\n MOLDEA_RUNTIME_ID_INVALID: 'The runtime ID is invalid.',\n MOLDEA_GLOB_INVALID: 'The impact pattern is invalid.',\n MOLDEA_ID_DUPLICATE: 'An ID is duplicated within its required scope.',\n MOLDEA_ID_INVALID: 'The ID is invalid.',\n MOLDEA_ID_RESERVED: 'The ID uses a reserved filesystem name.',\n MOLDEA_IMPACT_PATH_MISSING: 'The exact impact path does not exist.',\n MOLDEA_IMPACT_PATH_NOT_FILE: 'The exact impact path is not a regular file.',\n MOLDEA_MANIFEST_MISSING: 'The project manifest is missing.',\n MOLDEA_MANIFEST_PATH_INVALID: 'The manifest path is not the canonical manifest path.',\n MOLDEA_MANIFEST_PROPERTY_UNKNOWN: 'The manifest contains an unknown property.',\n MOLDEA_MANIFEST_ROOT_INVALID: 'The manifest root is not a mapping.',\n MOLDEA_MANIFEST_VALUE_INVALID: 'The manifest value is invalid.',\n MOLDEA_MANIFEST_VERSION_INVALID: 'The manifest version is not a valid integer major version.',\n MOLDEA_MANIFEST_VERSION_MISSING: 'The manifest version is missing.',\n MOLDEA_MANIFEST_VERSION_UNSUPPORTED: 'The manifest version is unsupported.',\n MOLDEA_MIRROR_PATH_DUPLICATE: 'The mirror path is assigned more than once.',\n MOLDEA_MIRROR_PATH_INSIDE_MOLDEA: 'The mirror path is inside /moldea.',\n MOLDEA_MIRROR_PATH_INVALID: 'The mirror path is invalid.',\n MOLDEA_MIRROR_MISSING: 'The declared mirror does not exist.',\n MOLDEA_MIRROR_NOT_FILE: 'The declared mirror is not a regular file.',\n MOLDEA_MIRROR_STALE: 'The declared mirror differs from its canonical instruction.',\n MOLDEA_MIRROR_SYMLINK: 'The declared mirror is a symlink.',\n MOLDEA_PATH_DUPLICATE: 'The path is duplicated.',\n MOLDEA_PATH_INVALID: 'The manifest logical path is invalid.',\n MOLDEA_PATTERN_DUPLICATE: 'The impact pattern is duplicated.',\n MOLDEA_PROJECT_FILE_EMPTY: 'The project file is empty.',\n MOLDEA_PROJECT_FILE_MISSING: 'The project file is missing.',\n MOLDEA_INTEGRATION_BLOCK_MISSING: 'The AGENTS.md moldea block is missing.',\n MOLDEA_INTEGRATION_SKILL_MISSING:\n 'The skill installation referenced by the AGENTS.md moldea block was not found.',\n MOLDEA_INTEGRATION_BLOCK_STALE: 'The AGENTS.md moldea block differs from its skill installation.',\n MOLDEA_IMPACT_PATTERN_UNMATCHED: 'The impact pattern matches no files.',\n MOLDEA_ACCEPTANCE_UNMATCHED: 'The warning acceptance matches no reported warning.',\n MOLDEA_REFERENCE_EXPORT_MISSING: 'The referenced export is missing.',\n MOLDEA_REFERENCE_MISSING: 'The referenced repository path does not exist.',\n MOLDEA_REFERENCE_NOT_FILE: 'The referenced repository path is not a regular file.',\n MOLDEA_REFERENCE_SYMLINK: 'The referenced repository path is a symlink.',\n MOLDEA_RUNTIME_GUIDANCE_EMPTY: 'The runtime guidance is empty.',\n MOLDEA_RUNTIME_GUIDANCE_MISSING: 'The referenced runtime guidance does not exist.',\n MOLDEA_SKILL_IMPLEMENTATION_MISSING: 'The registered skill implementation is missing.',\n MOLDEA_SYMBOL_FORBIDDEN: 'A canonical moldea reference must not include a symbol.',\n MOLDEA_SYMBOL_INVALID: 'The repository-reference symbol is invalid.',\n MOLDEA_TEXT_EMPTY: 'The required text document is empty.',\n MOLDEA_TEXT_INVALID_UNICODE:\n 'The text document contains an invalid Unicode scalar representation.',\n MOLDEA_TEXT_INVALID_UTF8: 'The text document is not valid UTF-8.',\n MOLDEA_TEXT_NUL_FORBIDDEN: 'The text document contains a forbidden NUL character.',\n MOLDEA_TOOL_IMPLEMENTATION_MISSING: 'The registered tool implementation is missing.',\n MOLDEA_VARIABLE_ID_INVALID: 'The runtime-variable ID is invalid.',\n MOLDEA_VARIABLE_PLACEHOLDER_MALFORMED:\n 'The agent instruction contains a malformed runtime-variable placeholder.',\n MOLDEA_VARIABLE_PROVIDER_UNDECLARED:\n 'A variable-provider binding exists for an undeclared variable.',\n MOLDEA_VARIABLE_UNDECLARED: 'The agent instruction references an undeclared runtime variable.',\n MOLDEA_VARIABLE_UNUSED: 'The declared runtime variable is unused by the agent instruction.',\n MOLDEA_YAML_DUPLICATE_KEY: 'The YAML document contains a duplicate mapping key.',\n MOLDEA_YAML_FEATURE_UNSUPPORTED: 'The YAML document uses an unsupported feature.',\n MOLDEA_YAML_MALFORMED: 'The YAML document is malformed.',\n MOLDEA_YAML_MULTIPLE_DOCUMENTS: 'The YAML stream contains more than one document.',\n};\n\nconst ENTITY_KEYS = [\n 'agentId',\n 'capabilityKind',\n 'capabilityId',\n 'decisionId',\n 'variableId',\n 'contextPath',\n 'integrationPath',\n] as const satisfies readonly (keyof IDiagnosticEntity)[];\n\n// private normalized diagnostic construction contracts\nexport interface ICoreDiagnosticInput {\n readonly code: ICoreDiagnosticCode;\n readonly details?: Readonly<Record<string, string | number | boolean | null>>;\n readonly entity?: IDiagnosticEntity | null;\n readonly path: IRepositoryPath | null;\n readonly pointer?: string | null;\n readonly range?: ISourceRange | null;\n readonly subject?: IRepositoryPath;\n readonly qualifier?: string | null;\n}\n\nexport interface ICoreDiagnosticCollector {\n add(input: ICoreDiagnosticInput): void;\n merge(input: ICoreDiagnosticInput): void;\n finalize(): readonly ICoreDiagnostic[];\n readonly size: number;\n}\n\ninterface ICoreDiagnosticBudget {\n count: number;\n}\n\nconst CORE_DIAGNOSTIC_BUDGET = Symbol('core-diagnostic-budget');\n\ntype ICoreOperationResourceLimits = ICoreResourceLimits & {\n readonly [CORE_DIAGNOSTIC_BUDGET]?: ICoreDiagnosticBudget;\n};\n\n/** Creates a detached limits view with one diagnostic budget for a complete Core operation. */\nexport const createCoreOperationResourceLimits = (\n limits: ICoreResourceLimits,\n): ICoreResourceLimits => {\n const operationLimits = limits as ICoreOperationResourceLimits;\n\n if (operationLimits[CORE_DIAGNOSTIC_BUDGET] !== undefined) {\n return limits;\n }\n\n return Object.freeze({\n ...limits,\n [CORE_DIAGNOSTIC_BUDGET]: { count: 0 },\n });\n};\n\n/** Registers raw diagnostics against the shared operation budget before normalization. */\nexport const registerCoreDiagnosticCandidates = (\n limits: ICoreResourceLimits,\n amount: number,\n operation: ICoreOperation,\n fallbackCount = 0,\n): number => {\n const budget = (limits as ICoreOperationResourceLimits)[CORE_DIAGNOSTIC_BUDGET];\n const currentCount = budget?.count ?? fallbackCount;\n\n if (amount > limits.maxDiagnostics - currentCount) {\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: 'maxDiagnostics',\n limitMaximum: limits.maxDiagnostics,\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage: currentCount + amount,\n operation,\n });\n }\n\n if (budget !== undefined) {\n budget.count += amount;\n }\n\n return fallbackCount + amount;\n};\n\nconst compareNullableStrings = (left: string | null, right: string | null): number => {\n if (left === null) {\n return right === null ? 0 : -1;\n }\n\n return right === null ? 1 : compareExactStrings(left, right);\n};\n\n/**\n * Normalizes trusted JSON-scalar diagnostic metadata.\n * @param details The optional detached metadata record.\n * @returns A frozen null-prototype record with canonical key order.\n */\nexport const normalizeDiagnosticDetails = (\n details: Readonly<Record<string, string | number | boolean | null>> | undefined,\n): IDiagnosticDetails => {\n const entries = Object.entries(details ?? {})\n .sort(([left], [right]) => compareExactStrings(left, right))\n .map(\n ([key, value]) =>\n [key, typeof value === 'number' && Object.is(value, -0) ? 0 : value] as const,\n );\n\n return freezeRecursively(createNullPrototypeRecord(entries));\n};\n\n/**\n * Normalizes a trusted diagnostic entity into canonical key order.\n * @param entity The optional diagnostic entity.\n * @returns The frozen normalized entity or `null`.\n */\nexport const normalizeDiagnosticEntity = (\n entity: IDiagnosticEntity | null | undefined,\n): IDiagnosticEntity | null => {\n if (entity === undefined || entity === null) {\n return null;\n }\n\n const entries = ENTITY_KEYS.flatMap((key) => {\n const value = entity[key];\n return value === undefined ? [] : ([[key, value]] as const);\n });\n\n return freezeRecursively(createNullPrototypeRecord(entries) as IDiagnosticEntity);\n};\n\n/** Serializes unordered diagnostic details with explicit exact-code-point key ordering. */\nexport const serializeDiagnosticDetails = (details: IDiagnosticDetails): string => {\n const entries = Object.entries(details).sort(([left], [right]) =>\n compareExactStrings(left, right),\n );\n\n return JSON.stringify(entries);\n};\n\nconst serializeDiagnostic = (diagnostic: IDiagnostic): string => {\n const entity =\n diagnostic.entity === null\n ? null\n : ENTITY_KEYS.map((key) => [key, diagnostic.entity?.[key] ?? null]);\n const range =\n diagnostic.range === null\n ? null\n : [\n diagnostic.range.start.line,\n diagnostic.range.start.column,\n diagnostic.range.start.offset,\n diagnostic.range.end.line,\n diagnostic.range.end.column,\n diagnostic.range.end.offset,\n ];\n\n return JSON.stringify([\n diagnostic.code,\n diagnostic.severity,\n diagnostic.severity === 'warning'\n ? [\n diagnostic.subject,\n diagnostic.qualifier,\n diagnostic.accepted ?? false,\n diagnostic.reason ?? null,\n ]\n : null,\n serializeDiagnosticDetails(diagnostic.details),\n entity,\n diagnostic.message,\n diagnostic.path,\n diagnostic.pointer,\n range,\n diagnostic.source,\n ]);\n};\n\nconst compareRanges = (left: ISourceRange | null, right: ISourceRange | null): number => {\n if (left === null) {\n return right === null ? 0 : -1;\n }\n\n if (right === null) {\n return 1;\n }\n\n return (\n left.start.line - right.start.line ||\n left.start.column - right.start.column ||\n left.start.offset - right.start.offset ||\n left.end.line - right.end.line ||\n left.end.column - right.end.column ||\n left.end.offset - right.end.offset\n );\n};\n\nconst readEntityValue = (\n entity: IDiagnosticEntity | null,\n key: keyof IDiagnosticEntity,\n): string => {\n return entity?.[key] ?? '';\n};\n\nconst compareDiagnostics = (left: IDiagnostic, right: IDiagnostic): number => {\n return (\n compareNullableStrings(left.path, right.path) ||\n compareRanges(left.range, right.range) ||\n compareNullableStrings(left.pointer, right.pointer) ||\n compareExactStrings(left.source, right.source) ||\n compareExactStrings(left.code, right.code) ||\n compareExactStrings(left.severity, right.severity) ||\n compareExactStrings(\n left.severity === 'warning'\n ? JSON.stringify([\n left.subject,\n left.qualifier,\n left.accepted ?? false,\n left.reason ?? null,\n ])\n : '',\n right.severity === 'warning'\n ? JSON.stringify([\n right.subject,\n right.qualifier,\n right.accepted ?? false,\n right.reason ?? null,\n ])\n : '',\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'agentId'),\n readEntityValue(right.entity, 'agentId'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'capabilityKind'),\n readEntityValue(right.entity, 'capabilityKind'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'capabilityId'),\n readEntityValue(right.entity, 'capabilityId'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'decisionId'),\n readEntityValue(right.entity, 'decisionId'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'variableId'),\n readEntityValue(right.entity, 'variableId'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'contextPath'),\n readEntityValue(right.entity, 'contextPath'),\n ) ||\n compareExactStrings(\n readEntityValue(left.entity, 'integrationPath'),\n readEntityValue(right.entity, 'integrationPath'),\n ) ||\n compareExactStrings(\n serializeDiagnosticDetails(left.details),\n serializeDiagnosticDetails(right.details),\n ) ||\n compareExactStrings(left.message, right.message)\n );\n};\n\n/** Classifies every catalog code by its documented validation responsibility. */\nconst getDiagnosticGroup = (code: ICoreDiagnosticCode): ICoreDiagnostic['group'] => {\n if (code.startsWith('MOLDEA_INTEGRATION_')) return 'integration';\n if (code.startsWith('MOLDEA_MIRROR_')) return 'mirrors';\n if (/^MOLDEA_(REFERENCE|IMPACT|SYMBOL|CONTEXT|DECISION|RUNTIME_GUIDANCE)_/.test(code))\n return 'references';\n if (code === 'MOLDEA_VARIABLE_ID_INVALID') return 'manifest';\n if (/^MOLDEA_(AGENT|VARIABLE|CAPABILITY|TOOL|SKILL|RUNTIME)_/.test(code)) return 'agents';\n if (/^MOLDEA_(MANIFEST_MISSING|PROJECT_FILE|ENTRY_TYPE|CANONICAL|TEXT)_/.test(code))\n return 'discovery';\n return 'manifest';\n};\n\n/**\n * Creates one normalized, immutable Core diagnostic.\n * @param input The trusted Core-owned diagnostic fields to normalize.\n * @returns A deeply immutable public diagnostic value.\n */\nexport const createCoreDiagnostic = (input: ICoreDiagnosticInput): ICoreDiagnostic => {\n const message = CORE_DIAGNOSTIC_MESSAGES[input.code];\n\n if (message === undefined) {\n throw new TypeError('The requested Core diagnostic is not implemented.');\n }\n\n const base = {\n code: input.code,\n details: normalizeDiagnosticDetails(input.details),\n entity: normalizeDiagnosticEntity(input.entity),\n message,\n path: input.path,\n pointer: input.pointer ?? null,\n range: input.range ?? null,\n group: getDiagnosticGroup(input.code),\n source: 'core' as const,\n };\n if (\n input.code === 'MOLDEA_IMPACT_PATTERN_UNMATCHED' ||\n input.code === 'MOLDEA_ACCEPTANCE_UNMATCHED' ||\n input.code === 'MOLDEA_INTEGRATION_BLOCK_MISSING' ||\n input.code === 'MOLDEA_INTEGRATION_SKILL_MISSING' ||\n input.code === 'MOLDEA_INTEGRATION_BLOCK_STALE'\n ) {\n if (input.subject === undefined) throw new TypeError('A warning subject is required.');\n return freezeRecursively({\n ...base,\n code: input.code,\n severity: 'warning' as const,\n subject: input.subject,\n qualifier: input.qualifier ?? null,\n acceptable: ACCEPTABLE_WARNING_CODES.some((code) => code === input.code),\n });\n }\n return freezeRecursively({ ...base, code: input.code, severity: 'error' as const });\n};\n\n/**\n * Deduplicates and sorts already-normalized Core diagnostics.\n * @param candidates The immutable diagnostics to combine.\n * @returns A frozen deterministic diagnostic collection.\n */\nexport const normalizeDiagnostics = (\n candidates: readonly IDiagnostic[],\n): readonly IDiagnostic[] => {\n const diagnostics = new Map<string, IDiagnostic>();\n\n for (const diagnostic of candidates) {\n const key = serializeDiagnostic(diagnostic);\n\n if (diagnostics.has(key)) {\n continue;\n }\n\n diagnostics.set(key, diagnostic);\n }\n\n return freezeRecursively([...diagnostics.values()].sort(compareDiagnostics));\n};\n\n/** Counts the complete normalized diagnostic result by severity once. */\nexport const countDiagnosticsBySeverity = (\n diagnostics: readonly IDiagnostic[],\n): {\n readonly errorCount: number;\n readonly warningCount: number;\n readonly acceptedWarningCount: number;\n readonly diagnosticCount: number;\n} => {\n let errorCount = 0;\n let warningCount = 0;\n let acceptedWarningCount = 0;\n\n for (const diagnostic of diagnostics) {\n if (diagnostic.severity === 'error') {\n errorCount += 1;\n } else if (diagnostic.accepted === true) {\n acceptedWarningCount += 1;\n } else {\n warningCount += 1;\n }\n }\n\n return { errorCount, warningCount, acceptedWarningCount, diagnosticCount: diagnostics.length };\n};\n\n/**\n * Creates a deterministic, deduplicating diagnostic collector for one operation.\n * @param limits The Core resource limits governing diagnostic output.\n * @param operation The operation reported by resource failures.\n * @returns A collector that freezes and sorts its final diagnostic array.\n */\nexport const createCoreDiagnosticCollector = (\n limits: ICoreResourceLimits,\n operation: ICoreOperation,\n): ICoreDiagnosticCollector => {\n const diagnostics = new Map<string, ICoreDiagnostic>();\n let proposalCount = 0;\n let fallbackRawCount = 0;\n\n const retain = (input: ICoreDiagnosticInput): void => {\n const diagnostic = createCoreDiagnostic(input);\n const key = serializeDiagnostic(diagnostic);\n\n proposalCount += 1;\n\n if (!diagnostics.has(key)) {\n diagnostics.set(key, diagnostic);\n }\n };\n\n return {\n add: (input): void => {\n fallbackRawCount = registerCoreDiagnosticCandidates(limits, 1, operation, fallbackRawCount);\n retain(input);\n },\n merge: retain,\n finalize: (): readonly ICoreDiagnostic[] => normalizeDiagnostics([...diagnostics.values()]),\n get size(): number {\n return proposalCount;\n },\n };\n};\n\n/**\n * Escapes one JSON Pointer reference token.\n * @param value The decoded mapping key or array index token.\n * @returns The RFC 6901 escaped token.\n */\nexport const escapeJsonPointerSegment = (value: string): string => {\n return value.replaceAll('~', '~0').replaceAll('/', '~1');\n};\n","import { DEFAULT_CORE_RESOURCE_LIMITS } from '../constants/index.js';\nimport type { ICoreOptions, ICoreResourceLimits } from '../contracts/index.js';\nimport { createCoreOperationResourceLimits } from '../diagnostic-utilities/index.js';\nimport { CoreConfigurationException } from '../exceptions/index.js';\nimport { freezeRecursively } from '../immutable/index.js';\n\n// complete immutable Core configuration\nexport interface ICoreOptionsSnapshot {\n readonly limits: ICoreResourceLimits;\n}\n\n/** Creates an operation-local options view with one shared raw-diagnostic budget. */\nexport const createCoreOperationOptionsSnapshot = (\n options: ICoreOptionsSnapshot,\n): ICoreOptionsSnapshot => {\n return Object.freeze({\n limits: createCoreOperationResourceLimits(options.limits),\n });\n};\n\nconst RESOURCE_LIMIT_KEYS = [\n 'maxEntries',\n 'maxTotalBytesRead',\n 'maxFileBytes',\n 'maxManifestBytes',\n 'maxRetainedBytes',\n 'maxDiagnostics',\n 'maxCoverage',\n 'maxAcceptedWarnings',\n] as const satisfies readonly (keyof ICoreResourceLimits)[];\n\nconst isRecord = (value: unknown): value is Readonly<Record<string, unknown>> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\n/**\n * Validates, copies, fills, and freezes all configured resource limits.\n * @param candidate The untrusted optional limit overrides.\n * @returns The complete frozen resource limits.\n * @throws\n * - INVALID_RESOURCE_LIMIT: A Core resource limit is invalid.\n */\nconst normalizeLimits = (candidate: unknown): ICoreResourceLimits => {\n if (candidate === undefined) {\n return DEFAULT_CORE_RESOURCE_LIMITS;\n }\n\n if (!isRecord(candidate)) {\n throw new CoreConfigurationException({\n code: 'INVALID_RESOURCE_LIMIT',\n operation: 'create-core',\n });\n }\n\n const knownKeys = new Set<string>(RESOURCE_LIMIT_KEYS);\n\n if (Object.keys(candidate).some((key) => !knownKeys.has(key))) {\n throw new CoreConfigurationException({\n code: 'INVALID_RESOURCE_LIMIT',\n operation: 'create-core',\n });\n }\n\n const normalized: ICoreResourceLimits = {\n ...DEFAULT_CORE_RESOURCE_LIMITS,\n };\n\n for (const key of RESOURCE_LIMIT_KEYS) {\n const value = candidate[key];\n\n if (value === undefined) {\n continue;\n }\n\n if (!Number.isSafeInteger(value) || (value as number) <= 0) {\n throw new CoreConfigurationException({\n code: 'INVALID_RESOURCE_LIMIT',\n operation: 'create-core',\n });\n }\n\n (normalized as Record<keyof ICoreResourceLimits, number>)[key] = value as number;\n }\n\n return freezeRecursively(normalized);\n};\n\n/**\n * Validates and snapshots caller-owned Core resource limits.\n * @returns A deeply frozen configuration snapshot.\n * @throws\n * - INVALID_RESOURCE_LIMIT: A Core resource limit is invalid.\n */\nexport const normalizeCoreOptions = (options: ICoreOptions | undefined): ICoreOptionsSnapshot => {\n if (\n options !== undefined &&\n (!isRecord(options) || Reflect.ownKeys(options).some((key) => key !== 'limits'))\n ) {\n throw new CoreConfigurationException({\n code: 'INVALID_RESOURCE_LIMIT',\n operation: 'create-core',\n });\n }\n return freezeRecursively({ limits: normalizeLimits(options?.['limits']) });\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository-rpc-ClAIx3-c.js","names":[],"sources":["../../src/node-inspection/repository-rpc.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\n\nimport {\n isRepositoryPath,\n parseRepositoryPath,\n RepositorySourceException,\n type IRepositoryEntry,\n type IRepositoryEntryPage,\n type IRepositoryFilePage,\n type IRepositoryReader,\n type IRepositorySnapshot,\n} from '@moldea.ai/repository';\n\nimport { NODE_INSPECTION_FILE_PAGE_BYTES } from './constants.js';\nimport type { INodeReaderRequest } from './types.js';\n\nconst invalidSource = (): never => {\n throw new RepositorySourceException({\n code: 'INVALID_SOURCE_DATA',\n operation: 'create-reader',\n path: null,\n retryable: false,\n });\n};\nconst isRecord = (input: unknown): input is Record<string, unknown> =>\n input !== null && typeof input === 'object' && !Array.isArray(input);\nconst isInteger = (input: unknown): input is number =>\n typeof input === 'number' && Number.isSafeInteger(input) && input >= 0;\nconst keysMatch = (input: Record<string, unknown>, keys: string[]): boolean =>\n Object.keys(input).length === keys.length && keys.every((key) => Object.hasOwn(input, key));\n\n/** Validates the immutable source identity without coercing unknown boundary fields. */\nconst parseSnapshot = (input: unknown): IRepositorySnapshot => {\n if (\n !isRecord(input) ||\n !keysMatch(input, ['id', 'sourceKind']) ||\n typeof input['id'] !== 'string' ||\n input['id'].length === 0 ||\n typeof input['sourceKind'] !== 'string' ||\n input['sourceKind'].length === 0\n )\n return invalidSource();\n return { id: input['id'], sourceKind: input['sourceKind'] };\n};\n\n/** Converts one validated metadata-only repository entry. */\nexport const parseRpcEntry = (input: unknown): IRepositoryEntry | null => {\n if (input === null) return null;\n if (\n !isRecord(input) ||\n !keysMatch(input, ['path', 'type', 'byteLength', 'contentIdentity']) ||\n !isRepositoryPath(input['path']) ||\n (input['type'] !== 'file' && input['type'] !== 'directory' && input['type'] !== 'symlink') ||\n (input['byteLength'] !== null && !isInteger(input['byteLength'])) ||\n (input['contentIdentity'] !== null && typeof input['contentIdentity'] !== 'string')\n )\n return invalidSource();\n return {\n path: input['path'],\n type: input['type'],\n byteLength: input['byteLength'],\n contentIdentity: input['contentIdentity'],\n };\n};\n\n/** Converts a bounded listing page while retaining snapshot and continuation contracts. */\nexport const parseRpcEntryPage = (input: unknown): IRepositoryEntryPage => {\n if (\n !isRecord(input) ||\n !keysMatch(input, ['entries', 'isComplete', 'nextCursor', 'snapshot']) ||\n !Array.isArray(input['entries']) ||\n input['entries'].length > 128 ||\n typeof input['isComplete'] !== 'boolean' ||\n (input['nextCursor'] !== null && typeof input['nextCursor'] !== 'string')\n )\n return invalidSource();\n const entries: IRepositoryEntry[] = [];\n for (const candidate of input['entries']) {\n const entry = parseRpcEntry(candidate);\n if (entry === null) return invalidSource();\n entries.push(entry);\n }\n return {\n entries,\n isComplete: input['isComplete'],\n nextCursor: input['nextCursor'],\n snapshot: parseSnapshot(input['snapshot']),\n };\n};\n\n/** Decodes only an admitted 64 KiB binary page, never a complete repository file. */\nexport const parseRpcFilePage = (input: unknown): IRepositoryFilePage => {\n if (\n !isRecord(input) ||\n !keysMatch(input, ['bytes', 'isComplete', 'nextOffset', 'offset', 'snapshot', 'totalBytes']) ||\n typeof input['bytes'] !== 'string' ||\n input['bytes'].length > Math.ceil(NODE_INSPECTION_FILE_PAGE_BYTES / 3) * 4 ||\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(input['bytes']) ||\n typeof input['isComplete'] !== 'boolean' ||\n !isInteger(input['offset']) ||\n !isInteger(input['totalBytes']) ||\n (input['nextOffset'] !== null && !isInteger(input['nextOffset']))\n )\n return invalidSource();\n const bytes = Buffer.from(input['bytes'], 'base64');\n if (\n bytes.byteLength > NODE_INSPECTION_FILE_PAGE_BYTES ||\n bytes.toString('base64') !== input['bytes']\n )\n return invalidSource();\n return {\n bytes,\n isComplete: input['isComplete'],\n nextOffset: input['nextOffset'],\n offset: input['offset'],\n snapshot: parseSnapshot(input['snapshot']),\n totalBytes: input['totalBytes'],\n };\n};\n\n/**\n * Calls the real reader with inspection cancellation and returns a bounded transport value.\n * Reader failures propagate unchanged to the parent inspection owner.\n * @returns A metadata value or encoded byte page after actual reader settlement.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - ENTRY_NOT_FOUND: The requested repository entry was not found.\n * - ENTRY_NOT_FILE: The requested repository entry is not a file.\n * - ENTRY_NOT_DIRECTORY: The requested repository entry is not a directory.\n * - INVALID_PAGE_REQUEST: The repository page request is invalid.\n * - ACCESS_DENIED: Access to the repository source was denied.\n * - SOURCE_UNAVAILABLE: The repository source is unavailable.\n * - SNAPSHOT_CHANGED: The repository snapshot changed during the operation.\n * - PROVIDER_INCOMPLETE: The repository provider cannot expose a complete result.\n * - INVALID_SOURCE_DATA: The repository source returned invalid data.\n * - RESOURCE_LIMIT_EXCEEDED: A named repository resource limit was exceeded.\n * - ABORTED: The repository operation was aborted.\n */\nexport const executeRepositoryRpc = async (\n reader: IRepositoryReader,\n request: INodeReaderRequest,\n signal: AbortSignal,\n): Promise<unknown> => {\n if (request.method === 'getEntry')\n return parseRpcEntry(await reader.getEntry(parseRepositoryPath(request.path), { signal }));\n if (request.method === 'listEntriesPage')\n return parseRpcEntryPage(\n await reader.listEntriesPage({\n maxEntries: request.maxEntries,\n signal,\n ...(request.prefix === undefined ? {} : { prefix: parseRepositoryPath(request.prefix) }),\n ...(request.cursor === undefined ? {} : { cursor: request.cursor }),\n }),\n );\n const page = await reader.readFilePage(parseRepositoryPath(request.path), {\n maxBytes: request.maxBytes,\n offset: request.offset,\n signal,\n });\n if (!(page.bytes instanceof Uint8Array) || page.bytes.byteLength > request.maxBytes)\n return invalidSource();\n const result = {\n ...page,\n bytes: Buffer.from(page.bytes.buffer, page.bytes.byteOffset, page.bytes.byteLength).toString(\n 'base64',\n ),\n };\n parseRpcFilePage(result);\n return result;\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope-DxhC1hq2.js","names":[],"sources":["../../src/text/index.ts","../../src/scope-matching/validations.ts","../../src/scope-matching/patterns.ts","../../src/scope-matching/matching.ts","../../src/manifest-validation/index.ts","../../src/source-location/index.ts","../../src/yaml/index.ts","../../src/manifest/index.ts","../../src/scope-matching/scope.ts"],"sourcesContent":["import { parseRepositoryPath, type IRepositoryPath } from '@moldea.ai/repository';\n\nimport type {\n IContentDigest,\n IContentDigestResult,\n ICoreResourceLimits,\n INormalizedText,\n ITextDocumentInput,\n ITextNormalizationResult,\n} from '../contracts/index.js';\nimport {\n createCoreDiagnosticCollector,\n type ICoreDiagnosticCollector,\n} from '../diagnostic-utilities/index.js';\nimport type { ICoreDiagnostic } from '../diagnostics/index.js';\nimport { CoreOperationException, type ICoreOperation } from '../exceptions/index.js';\nimport { freezeRecursively } from '../immutable/index.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });\n\nconst isRecord = (value: unknown): value is Readonly<Record<string, unknown>> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\n/**\n * Measures valid scalar UTF-8 bytes and stops once the operation budget is exceeded.\n * @param value The decoded string to measure without lossy replacement.\n * @param maximumByteLength The threshold after which measurement may stop early.\n * @returns The measured bytes, a value above the threshold, or `null` for invalid Unicode.\n */\nconst measureScalarUtf8ByteLength = (value: string, maximumByteLength: number): number | null => {\n let byteLength = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n if (index + 1 >= value.length) {\n return null;\n }\n\n const nextCodeUnit = value.charCodeAt(index + 1);\n\n if (nextCodeUnit < 0xdc00 || nextCodeUnit > 0xdfff) {\n return null;\n }\n\n byteLength += 4;\n\n if (byteLength > maximumByteLength) {\n return byteLength;\n }\n\n index += 1;\n continue;\n }\n\n if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n return null;\n }\n\n byteLength += codeUnit <= 0x7f ? 1 : codeUnit <= 0x7ff ? 2 : 3;\n\n if (byteLength > maximumByteLength) {\n return byteLength;\n }\n }\n\n return byteLength;\n};\n\nconst countUnicodeScalars = (value: string): number => {\n let count = 0;\n\n for (let index = 0; index < value.length; count += 1) {\n const codePoint = value.codePointAt(index);\n\n if (codePoint === undefined) {\n break;\n }\n\n index += codePoint > 0xffff ? 2 : 1;\n }\n\n return count;\n};\n\n/**\n * Collects every normalized NUL location or rejects when the diagnostic budget is exhausted.\n * @param value The normalized scalar text to inspect.\n * @param path The logical document path attached to each diagnostic.\n * @param diagnostics The operation collector receiving every NUL diagnostic.\n * @throws\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nconst collectNulDiagnostics = (\n value: string,\n path: IRepositoryPath,\n diagnostics: ICoreDiagnosticCollector,\n): void => {\n let column = 1;\n let line = 1;\n let offset = 0;\n\n for (const scalar of value) {\n if (scalar === '\\0') {\n diagnostics.add({\n code: 'MOLDEA_TEXT_NUL_FORBIDDEN',\n path,\n range: {\n end: { column: column + 1, line, offset: offset + 1 },\n start: { column, line, offset },\n },\n });\n }\n\n if (scalar === '\\n') {\n column = 1;\n line += 1;\n } else {\n column += 1;\n }\n\n offset += 1;\n }\n};\n\nconst invalidArgument = (operation: ICoreOperation): never => {\n throw new CoreOperationException({\n code: 'INVALID_ARGUMENT',\n operation,\n });\n};\n\nconst enforceFileLimit = (\n byteLength: number,\n limits: ICoreResourceLimits,\n operation: ICoreOperation,\n limit: 'maxFileBytes' | 'maxManifestBytes',\n): void => {\n if (byteLength <= limits[limit]) {\n return;\n }\n\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit,\n limitMaximum: limits[limit],\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage: byteLength,\n operation,\n });\n};\n\nconst invalidResult = (diagnostics: readonly ICoreDiagnostic[]): ITextNormalizationResult => {\n return freezeRecursively({\n diagnostics: [...diagnostics],\n text: null,\n valid: false,\n });\n};\n\n/**\n * Validates one public text input, enforces its source-byte budget, and decodes strict UTF-8.\n * @param input The untrusted public text-document input.\n * @param limits The immutable Core resource limits.\n * @param operation The public operation requesting the input.\n * @param limit The source-byte limit applied by the operation.\n * @param diagnostics The operation collector receiving text diagnostics.\n * @returns Decoded text or a frozen structural failure result.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - INVALID_ARGUMENT: The Core operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nconst readInput = (\n input: ITextDocumentInput,\n limits: ICoreResourceLimits,\n operation: ICoreOperation,\n limit: 'maxFileBytes' | 'maxManifestBytes',\n diagnostics: ICoreDiagnosticCollector,\n): { readonly path: IRepositoryPath; readonly value: string } | ITextNormalizationResult => {\n if (!isRecord(input)) {\n return invalidArgument(operation);\n }\n\n const pathCandidate = input['path'];\n const content = input['content'];\n\n if (\n typeof pathCandidate !== 'string' ||\n (typeof content !== 'string' && !(content instanceof Uint8Array))\n ) {\n return invalidArgument(operation);\n }\n\n const path = parseRepositoryPath(pathCandidate);\n\n if (typeof content === 'string') {\n const byteLength = measureScalarUtf8ByteLength(content, limits[limit]);\n\n if (byteLength === null) {\n diagnostics.add({ code: 'MOLDEA_TEXT_INVALID_UNICODE', path });\n return invalidResult(diagnostics.finalize());\n }\n\n enforceFileLimit(byteLength, limits, operation, limit);\n return { path, value: content };\n }\n\n enforceFileLimit(content.byteLength, limits, operation, limit);\n const bytes = new Uint8Array(content);\n\n try {\n return { path, value: decoder.decode(bytes) };\n } catch {\n diagnostics.add({ code: 'MOLDEA_TEXT_INVALID_UTF8', path });\n return invalidResult(diagnostics.finalize());\n }\n};\n\n/**\n * Validates and normalizes one text document under an operation-specific resource budget.\n * @param input The logical path and decoded string or exact source bytes.\n * @param limits The immutable Core resource limits.\n * @param operation The public Core operation requesting normalization.\n * @param limit The source-byte limit applied by the operation.\n * @returns A frozen normalized result or structural text diagnostics.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - INVALID_ARGUMENT: The Core operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const normalizeTextDocument = (\n input: ITextDocumentInput,\n limits: ICoreResourceLimits,\n operation: ICoreOperation,\n limit: 'maxFileBytes' | 'maxManifestBytes' = 'maxFileBytes',\n): ITextNormalizationResult => {\n const diagnostics = createCoreDiagnosticCollector(limits, operation);\n const decoded = readInput(input, limits, operation, limit, diagnostics);\n\n if ('valid' in decoded) {\n return decoded;\n }\n\n const withoutLeadingBom = decoded.value.startsWith('\\ufeff')\n ? decoded.value.slice(1)\n : decoded.value;\n const value = withoutLeadingBom.replace(/\\r\\n?/gu, '\\n');\n collectNulDiagnostics(value, decoded.path, diagnostics);\n\n if (diagnostics.size > 0) {\n return invalidResult(diagnostics.finalize());\n }\n\n const text: INormalizedText = freezeRecursively({\n scalarLength: countUnicodeScalars(value),\n utf8ByteLength: encoder.encode(value).byteLength,\n value,\n });\n\n return freezeRecursively({\n diagnostics: [],\n text,\n valid: true,\n });\n};\n\nconst toLowercaseHex = (bytes: Uint8Array): string => {\n let value = '';\n\n for (const byte of bytes) {\n value += byte.toString(16).padStart(2, '0');\n }\n\n return value;\n};\n\n/**\n * Calculates the canonical digest for already-normalized text.\n * @param text The validated normalized text to encode and hash.\n * @returns A promise resolving to the canonical lowercase SHA-256 digest.\n */\nexport const calculateNormalizedTextDigest = async (\n text: INormalizedText,\n): Promise<IContentDigest> => {\n const bytes = encoder.encode(text.value);\n const hash = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', bytes));\n\n return `sha256:${toLowercaseHex(hash)}` as IContentDigest;\n};\n\n/**\n * Calculates the normalized SHA-256 digest for one text document.\n * @param input The logical path and decoded string or exact source bytes.\n * @param limits The immutable Core resource limits.\n * @returns A promise resolving to a frozen digest result or structural text diagnostics.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - INVALID_ARGUMENT: The Core operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const calculateContentDigest = async (\n input: ITextDocumentInput,\n limits: ICoreResourceLimits,\n): Promise<IContentDigestResult> => {\n const normalized = normalizeTextDocument(input, limits, 'calculate-content-digest');\n\n if (!normalized.valid || normalized.text === null) {\n return freezeRecursively({\n diagnostics: normalized.diagnostics,\n digest: null,\n text: null,\n valid: false,\n });\n }\n\n const digest = await calculateNormalizedTextDigest(normalized.text);\n\n return freezeRecursively({\n diagnostics: [],\n digest,\n text: normalized.text,\n valid: true,\n });\n};\n","import { parseRepositoryPath, type IRepositoryPath } from '@moldea.ai/repository';\n\nimport { compareExactStrings } from '../format-validation/index.js';\n\nimport type { ICoreResourceLimits, ITextDocumentInput } from '../contracts/index.js';\nimport { CoreOperationException } from '../exceptions/index.js';\n\nimport type { IManifestScopeInput } from './types.js';\n\nconst isRecord = (value: unknown): value is Readonly<Record<string, unknown>> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\n/** Throws the stable invalid-argument failure for malformed scope input. */\nconst invalidArgument = (): never => {\n throw new CoreOperationException({\n code: 'INVALID_ARGUMENT',\n operation: 'match-manifest-scope',\n });\n};\n\n/** Throws the stable resource failure for an exhausted scope-input budget. */\nconst resourceLimitExceeded = (\n limit: 'maxEntries' | 'maxTotalBytesRead',\n limitMaximum: number,\n observedUsage: number,\n): never => {\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit,\n limitMaximum,\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage,\n operation: 'match-manifest-scope',\n });\n};\n\n/** Measures scalar UTF-8 bytes without allocating an encoded copy. */\nexport const measureUtf8ByteLength = (value: string): number => {\n let byteLength = 0;\n\n for (const scalar of value) {\n const codePoint = scalar.codePointAt(0) ?? 0;\n byteLength += codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n }\n\n return byteLength;\n};\n\nexport interface INormalizedManifestScopeInput {\n readonly manifest: ITextDocumentInput;\n readonly paths: readonly IRepositoryPath[];\n}\n\n/**\n * Validates and snapshots one public manifest-scope input.\n * @param input The untrusted manifest document and changed logical paths.\n * @param limits The immutable Core resource limits.\n * @returns The detached manifest input and sorted unique repository paths.\n * @throws\n * - INVALID_REPOSITORY_PATH: A changed repository path is invalid.\n * - INVALID_ARGUMENT: The scope operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: The changed-path count or byte budget was exceeded.\n */\nexport const normalizeManifestScopeInput = (\n input: IManifestScopeInput,\n limits: ICoreResourceLimits,\n): INormalizedManifestScopeInput => {\n if (!isRecord(input)) {\n return invalidArgument();\n }\n\n const manifest = input['manifest'];\n const pathCandidates = input['paths'];\n\n if (!isRecord(manifest) || !Array.isArray(pathCandidates)) {\n return invalidArgument();\n }\n\n if (pathCandidates.length > limits.maxEntries) {\n return resourceLimitExceeded('maxEntries', limits.maxEntries, pathCandidates.length);\n }\n\n const uniquePaths = new Set<IRepositoryPath>();\n let totalBytes = 0;\n\n for (const [index, candidate] of pathCandidates.entries()) {\n if (typeof candidate !== 'string') {\n return invalidArgument();\n }\n\n const path = parseRepositoryPath(candidate);\n totalBytes += measureUtf8ByteLength(path) + (index === 0 ? 0 : 1);\n\n if (totalBytes > limits.maxTotalBytesRead) {\n return resourceLimitExceeded('maxTotalBytesRead', limits.maxTotalBytesRead, totalBytes);\n }\n\n uniquePaths.add(path);\n }\n\n return {\n manifest,\n paths: [...uniquePaths].sort(compareExactStrings),\n };\n};\n","import type { IRepositoryPath } from '@moldea.ai/repository';\n\n/** Tests a single-segment wildcard without regular-expression interpretation. */\nconst matchesSegment = (pattern: string, value: string): boolean => {\n let patternIndex = 0;\n let valueIndex = 0;\n let starIndex = -1;\n let starValueIndex = -1;\n\n while (valueIndex < value.length) {\n if (pattern[patternIndex] === value[valueIndex]) {\n patternIndex += 1;\n valueIndex += 1;\n continue;\n }\n\n if (pattern[patternIndex] === '*') {\n starIndex = patternIndex;\n starValueIndex = valueIndex;\n patternIndex += 1;\n continue;\n }\n\n if (starIndex === -1) {\n return false;\n }\n\n patternIndex = starIndex + 1;\n starValueIndex += 1;\n valueIndex = starValueIndex;\n }\n\n while (pattern[patternIndex] === '*') {\n patternIndex += 1;\n }\n\n return patternIndex === pattern.length;\n};\n\n/** Matches validated simple-glob segments with zero-or-more-segment globstars. */\nexport const matchesRepositoryGlob = (\n patternSegments: readonly string[],\n path: IRepositoryPath,\n): boolean => {\n const pathSegments = path.slice(1).split('/');\n let reachable = new Uint8Array(pathSegments.length + 1);\n reachable[0] = 1;\n\n for (const patternSegment of patternSegments) {\n const next = new Uint8Array(pathSegments.length + 1);\n\n if (patternSegment === '**') {\n let canReach = false;\n\n for (let index = 0; index < reachable.length; index += 1) {\n canReach ||= reachable[index] === 1;\n next[index] = canReach ? 1 : 0;\n }\n } else {\n for (let index = 0; index < pathSegments.length; index += 1) {\n if (reachable[index] === 1 && matchesSegment(patternSegment, pathSegments[index] ?? '')) {\n next[index + 1] = 1;\n }\n }\n }\n\n reachable = next;\n }\n\n return reachable[pathSegments.length] === 1;\n};\n","import type { IRepositoryPath } from '@moldea.ai/repository';\n\nimport type { IContentDigest, ICoreResourceLimits } from '../contracts/index.js';\nimport { escapeJsonPointerSegment } from '../diagnostic-utilities/index.js';\nimport { CoreOperationException } from '../exceptions/index.js';\nimport { compareExactStrings, countUnicodeScalars } from '../format-validation/index.js';\nimport type {\n IAgentManifestEntry,\n IMoldeaManifestV1,\n IRepositoryReference,\n ISkillManifestEntry,\n IToolManifestEntry,\n IUnresolvedRequirementManifestEntry,\n} from '../format/index.js';\nimport { freezeRecursively } from '../immutable/index.js';\nimport { calculateNormalizedTextDigest } from '../text/index.js';\n\nimport type {\n IManifestScopeCounts,\n IManifestScopeDeclaration,\n IManifestScopeMatch,\n IManifestScopeOwner,\n IManifestScopeRelationshipField,\n} from './types.js';\nimport { measureUtf8ByteLength } from './validations.js';\nimport { matchesRepositoryGlob } from './patterns.js';\n\ninterface IManifestScopeRelationshipDeclaration {\n readonly owner: IManifestScopeOwner;\n readonly field: IManifestScopeRelationshipField;\n readonly pointer: string;\n readonly declaration: IManifestScopeDeclaration;\n}\n\ninterface ICompiledGlobDeclaration {\n readonly declaration: IManifestScopeRelationshipDeclaration;\n readonly segments: readonly string[];\n}\n\ninterface ICompiledManifestScope {\n readonly declarations: readonly IManifestScopeRelationshipDeclaration[];\n readonly exact: ReadonlyMap<IRepositoryPath, readonly IManifestScopeRelationshipDeclaration[]>;\n readonly globalGlobs: readonly ICompiledGlobDeclaration[];\n readonly globsByFirstSegment: ReadonlyMap<string, readonly ICompiledGlobDeclaration[]>;\n}\n\ntype IManifestCapability =\n | { readonly kind: 'skill'; readonly value: ISkillManifestEntry }\n | { readonly kind: 'tool'; readonly value: IToolManifestEntry };\n\nconst childPointer = (pointer: string, segment: string): string => {\n return `${pointer}/${escapeJsonPointerSegment(segment)}`;\n};\n\nconst createOwner = (\n kind: IManifestScopeOwner['kind'],\n id: string,\n agentId: string | null = null,\n): IManifestScopeOwner => ({ agentId, id, kind });\n\nconst compareOwners = (left: IManifestScopeOwner, right: IManifestScopeOwner): number => {\n return (\n compareExactStrings(left.kind, right.kind) ||\n compareExactStrings(left.agentId ?? '', right.agentId ?? '') ||\n compareExactStrings(left.id, right.id)\n );\n};\n\nconst getDeclarationValue = (declaration: IManifestScopeDeclaration): string => {\n return declaration.kind === 'exact' ? declaration.path : declaration.pattern;\n};\n\nconst compareDeclarations = (\n left: IManifestScopeRelationshipDeclaration,\n right: IManifestScopeRelationshipDeclaration,\n): number => {\n return (\n compareOwners(left.owner, right.owner) ||\n compareExactStrings(left.field, right.field) ||\n compareExactStrings(\n getDeclarationValue(left.declaration),\n getDeclarationValue(right.declaration),\n ) ||\n compareExactStrings(left.pointer, right.pointer)\n );\n};\n\n/** Adds one exact repository relationship to the normalized declaration collection. */\nconst addExactDeclaration = (\n declarations: IManifestScopeRelationshipDeclaration[],\n owner: IManifestScopeOwner,\n field: IManifestScopeRelationshipField,\n pointer: string,\n reference: IRepositoryReference | IRepositoryPath,\n): void => {\n declarations.push({\n declaration:\n typeof reference === 'string'\n ? { kind: 'exact', path: reference, symbol: null }\n : { kind: 'exact', path: reference.path, symbol: reference.symbol ?? null },\n field,\n owner,\n pointer,\n });\n};\n\n/** Adds repository references with their authored declaration pointers. */\nconst addReferenceDeclarations = (\n declarations: IManifestScopeRelationshipDeclaration[],\n references: readonly IRepositoryReference[] | undefined,\n owner: IManifestScopeOwner,\n field: IManifestScopeRelationshipField,\n pointer: string,\n): void => {\n for (const [index, reference] of (references ?? []).entries()) {\n addExactDeclaration(\n declarations,\n owner,\n field,\n childPointer(pointer, String(index)),\n reference,\n );\n }\n};\n\n/** Adds exact and simple-glob impact relationships in authored array order. */\nconst addAffectedByDeclarations = (\n declarations: IManifestScopeRelationshipDeclaration[],\n affectedBy: readonly string[] | undefined,\n owner: IManifestScopeOwner,\n pointer: string,\n): void => {\n for (const [index, pattern] of (affectedBy ?? []).entries()) {\n declarations.push({\n declaration: pattern.includes('*')\n ? { kind: 'glob', pattern }\n : { kind: 'exact', path: pattern as IRepositoryPath, symbol: null },\n field: 'affectedBy',\n owner,\n pointer: childPointer(pointer, String(index)),\n });\n }\n};\n\n/** Adds project-level or agent-level unresolved requirement references. */\nconst addUnresolvedDeclarations = (\n declarations: IManifestScopeRelationshipDeclaration[],\n requirements: Readonly<Record<string, IUnresolvedRequirementManifestEntry>> | undefined,\n pointer: string,\n agentId: string | null,\n): void => {\n for (const requirementId of Object.keys(requirements ?? {}).sort(compareExactStrings)) {\n const requirement = requirements?.[requirementId];\n\n if (requirement === undefined) {\n continue;\n }\n\n const owner = createOwner('unresolved', requirementId, agentId);\n addReferenceDeclarations(\n declarations,\n requirement.related,\n owner,\n 'related',\n childPointer(childPointer(pointer, requirementId), 'related'),\n );\n }\n};\n\n/** Adds exact and impact declarations owned by one tool or skill capability. */\nconst addCapabilityDeclarations = (\n declarations: IManifestScopeRelationshipDeclaration[],\n capabilityId: string,\n capability: IManifestCapability,\n agentId: string,\n pointer: string,\n): void => {\n const owner = createOwner(capability.kind, capabilityId, agentId);\n addExactDeclaration(\n declarations,\n owner,\n 'implementation',\n childPointer(pointer, 'implementation'),\n capability.value.implementation,\n );\n\n if (capability.value.registration !== undefined) {\n addExactDeclaration(\n declarations,\n owner,\n 'registration',\n childPointer(pointer, 'registration'),\n capability.value.registration,\n );\n }\n\n if (capability.kind === 'tool') {\n for (const field of ['inputSchema', 'outputSchema'] as const) {\n const reference = capability.value[field];\n\n if (reference !== undefined) {\n addExactDeclaration(declarations, owner, field, childPointer(pointer, field), reference);\n }\n }\n }\n\n addAffectedByDeclarations(\n declarations,\n capability.value.affectedBy,\n owner,\n childPointer(pointer, 'affectedBy'),\n );\n};\n\n/** Adds all exact and impact relationships owned by one registered agent. */\nconst addAgentDeclarations = (\n declarations: IManifestScopeRelationshipDeclaration[],\n agentId: string,\n agent: IAgentManifestEntry,\n): void => {\n const pointer = childPointer('/agents', agentId);\n const owner = createOwner('agent', agentId, agentId);\n const bindingsPointer = childPointer(pointer, 'bindings');\n\n for (const field of [\n 'runtimeAgent',\n 'inputSchema',\n 'outputSchema',\n 'instructionLoader',\n ] as const) {\n const reference = agent.bindings?.[field];\n\n if (reference !== undefined) {\n addExactDeclaration(\n declarations,\n owner,\n field,\n childPointer(bindingsPointer, field),\n reference,\n );\n }\n }\n\n for (const variableId of Object.keys(agent.bindings?.variableProviders ?? {}).sort(\n compareExactStrings,\n )) {\n const reference = agent.bindings?.variableProviders?.[variableId];\n\n if (reference !== undefined) {\n addExactDeclaration(\n declarations,\n owner,\n 'variableProvider',\n childPointer(childPointer(bindingsPointer, 'variableProviders'), variableId),\n reference,\n );\n }\n }\n\n addAffectedByDeclarations(\n declarations,\n agent.affectedBy,\n owner,\n childPointer(pointer, 'affectedBy'),\n );\n\n for (const capabilityId of Object.keys(agent.tools ?? {}).sort(compareExactStrings)) {\n const tool = agent.tools?.[capabilityId];\n\n if (tool !== undefined) {\n addCapabilityDeclarations(\n declarations,\n capabilityId,\n { kind: 'tool', value: tool },\n agentId,\n childPointer(childPointer(pointer, 'tools'), capabilityId),\n );\n }\n }\n\n for (const capabilityId of Object.keys(agent.skills ?? {}).sort(compareExactStrings)) {\n const skill = agent.skills?.[capabilityId];\n\n if (skill !== undefined) {\n addCapabilityDeclarations(\n declarations,\n capabilityId,\n { kind: 'skill', value: skill },\n agentId,\n childPointer(childPointer(pointer, 'skills'), capabilityId),\n );\n }\n }\n\n for (const [index, mirror] of (agent.mirrors ?? []).entries()) {\n addExactDeclaration(\n declarations,\n owner,\n 'mirrors',\n childPointer(childPointer(pointer, 'mirrors'), String(index)),\n mirror,\n );\n }\n\n addUnresolvedDeclarations(\n declarations,\n agent.unresolved,\n childPointer(pointer, 'unresolved'),\n agentId,\n );\n};\n\n/** Collects every version 1 declaration that can establish changed-path relevance. */\nexport const collectManifestScopeDeclarations = (\n manifest: IMoldeaManifestV1,\n): readonly IManifestScopeRelationshipDeclaration[] => {\n const declarations: IManifestScopeRelationshipDeclaration[] = [];\n\n for (const kind of ['context', 'decision'] as const) {\n const relationships = kind === 'context' ? manifest.context : manifest.decisions;\n\n for (const ownerId of Object.keys(relationships ?? {}).sort(compareExactStrings)) {\n const relationship = relationships?.[ownerId];\n\n if (relationship === undefined) {\n continue;\n }\n\n const owner = createOwner(kind, ownerId);\n const pointer = childPointer(kind === 'context' ? '/context' : '/decisions', ownerId);\n addReferenceDeclarations(\n declarations,\n relationship.bindings,\n owner,\n 'bindings',\n childPointer(pointer, 'bindings'),\n );\n addAffectedByDeclarations(\n declarations,\n relationship.affectedBy,\n owner,\n childPointer(pointer, 'affectedBy'),\n );\n }\n }\n\n addUnresolvedDeclarations(declarations, manifest.unresolved, '/unresolved', null);\n\n for (const agentId of Object.keys(manifest.agents ?? {}).sort(compareExactStrings)) {\n const agent = manifest.agents?.[agentId];\n\n if (agent !== undefined) {\n addAgentDeclarations(declarations, agentId, agent);\n }\n }\n\n return declarations.sort(compareDeclarations);\n};\n\n/** Builds exact and first-segment glob indexes once for one parsed manifest. */\nconst compileManifestScope = (\n manifest: IMoldeaManifestV1,\n limits: ICoreResourceLimits,\n): ICompiledManifestScope => {\n const declarations = collectManifestScopeDeclarations(manifest);\n\n if (declarations.length > limits.maxEntries) {\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: 'maxEntries',\n limitMaximum: limits.maxEntries,\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage: declarations.length,\n operation: 'match-manifest-scope',\n });\n }\n\n const exact = new Map<IRepositoryPath, IManifestScopeRelationshipDeclaration[]>();\n const globalGlobs: ICompiledGlobDeclaration[] = [];\n const globsByFirstSegment = new Map<string, ICompiledGlobDeclaration[]>();\n\n for (const declaration of declarations) {\n if (declaration.declaration.kind === 'exact') {\n const existing = exact.get(declaration.declaration.path) ?? [];\n existing.push(declaration);\n exact.set(declaration.declaration.path, existing);\n continue;\n }\n\n const segments = declaration.declaration.pattern.slice(1).split('/');\n const compiled = { declaration, segments };\n const firstSegment = segments[0] ?? '';\n\n if (firstSegment === '**' || firstSegment.includes('*')) {\n globalGlobs.push(compiled);\n } else {\n const existing = globsByFirstSegment.get(firstSegment) ?? [];\n existing.push(compiled);\n globsByFirstSegment.set(firstSegment, existing);\n }\n }\n\n return { declarations, exact, globalGlobs, globsByFirstSegment };\n};\n\nconst compareMatches = (left: IManifestScopeMatch, right: IManifestScopeMatch): number => {\n return (\n compareOwners(left.owner, right.owner) ||\n compareExactStrings(left.field, right.field) ||\n compareExactStrings(\n getDeclarationValue(left.declaration),\n getDeclarationValue(right.declaration),\n ) ||\n compareExactStrings(left.inputPath, right.inputPath) ||\n compareExactStrings(left.pointer, right.pointer)\n );\n};\n\nconst createMatch = (\n inputPath: IRepositoryPath,\n relationship: IManifestScopeRelationshipDeclaration,\n): IManifestScopeMatch => ({\n declaration: relationship.declaration,\n field: relationship.field,\n inputPath,\n owner: relationship.owner,\n pointer: relationship.pointer,\n});\n\n/** Adds one match without ever allocating beyond the operation entry budget. */\nconst addMatch = (\n matches: IManifestScopeMatch[],\n inputPath: IRepositoryPath,\n relationship: IManifestScopeRelationshipDeclaration,\n limits: ICoreResourceLimits,\n): void => {\n if (matches.length >= limits.maxEntries) {\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n limit: 'maxEntries',\n limitMaximum: limits.maxEntries,\n nextAction: 'reduce-input-or-increase-limit',\n observedUsage: matches.length + 1,\n operation: 'match-manifest-scope',\n });\n }\n\n matches.push(createMatch(inputPath, relationship));\n};\n\n/** Appends matches from one precompiled glob bucket without copying the bucket. */\nconst addGlobMatches = (\n matches: IManifestScopeMatch[],\n inputPath: IRepositoryPath,\n declarations: readonly ICompiledGlobDeclaration[],\n limits: ICoreResourceLimits,\n): void => {\n for (const compiled of declarations) {\n if (matchesRepositoryGlob(compiled.segments, inputPath)) {\n addMatch(matches, inputPath, compiled.declaration, limits);\n }\n }\n};\n\n/** Creates the canonical digest of the sorted unique changed-path set. */\nexport const calculateManifestScopeInputDigest = async (\n paths: readonly IRepositoryPath[],\n): Promise<IContentDigest> => {\n const value = paths.join('\\0');\n\n return calculateNormalizedTextDigest({\n scalarLength: countUnicodeScalars(value),\n utf8ByteLength: measureUtf8ByteLength(value),\n value,\n });\n};\n\n/**\n * Matches normalized changed paths against one valid version 1 manifest.\n * @param manifest The parsed and validated manifest value.\n * @param paths Sorted unique repository-logical changed paths.\n * @param limits The immutable Core operation limits.\n * @returns Frozen content-free matches and stable aggregate counts.\n * @throws\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const matchParsedManifestScope = (\n manifest: IMoldeaManifestV1,\n paths: readonly IRepositoryPath[],\n limits: ICoreResourceLimits,\n): { readonly counts: IManifestScopeCounts; readonly matches: readonly IManifestScopeMatch[] } => {\n const compiled = compileManifestScope(manifest, limits);\n const matches: IManifestScopeMatch[] = [];\n const matchedOwners = new Set<string>();\n const matchedPaths = new Set<IRepositoryPath>();\n\n for (const path of paths) {\n const firstSegment = path.slice(1).split('/', 1)[0] ?? '';\n const exactDeclarations = compiled.exact.get(path) ?? [];\n\n for (const relationship of exactDeclarations) {\n addMatch(matches, path, relationship, limits);\n }\n\n addGlobMatches(matches, path, compiled.globalGlobs, limits);\n addGlobMatches(matches, path, compiled.globsByFirstSegment.get(firstSegment) ?? [], limits);\n }\n\n matches.sort(compareMatches);\n\n for (const match of matches) {\n matchedOwners.add(`${match.owner.kind}\\0${match.owner.agentId ?? ''}\\0${match.owner.id}`);\n matchedPaths.add(match.inputPath);\n }\n\n return freezeRecursively({\n counts: {\n declarations: compiled.declarations.length,\n inputPaths: paths.length,\n matchedOwners: matchedOwners.size,\n matchedPaths: matchedPaths.size,\n matches: matches.length,\n },\n matches,\n });\n};\n","import type { IRepositoryPath } from '@moldea.ai/repository';\n\nimport type { ICoreResourceLimits } from '../contracts/index.js';\nimport { CoreOperationException, type ICoreOperation } from '../exceptions/index.js';\nimport { ACCEPTABLE_WARNING_CODES, RECOGNIZED_RUNTIME_IDS } from '../constants/index.js';\nimport {\n escapeJsonPointerSegment,\n type ICoreDiagnosticCollector,\n} from '../diagnostic-utilities/index.js';\nimport type { IDiagnosticEntity, ISourceRange } from '../diagnostics/index.js';\nimport {\n compareExactStrings,\n countUnicodeScalars,\n hasNonWhitespace,\n hasUnsupportedGlobMetacharacter,\n isCanonicalMoldeaPath,\n isCapabilityDescription,\n isContextPath,\n isDecisionPath,\n isMirrorPath,\n isNonEmptySingleLine,\n isRepositorySymbol,\n isReservedId,\n isRuntimeGuidancePath,\n isSimpleGlob,\n isStableId,\n isVariableId,\n parseManifestPath,\n} from '../format-validation/index.js';\nimport type {\n IAcceptedWarningManifestEntry,\n IAgentBindingsManifestEntry,\n IAgentManifestEntry,\n IRuntimeManifestEntry,\n IMoldeaManifestV1,\n IRelationshipManifestEntry,\n IRepositoryFormatVersion,\n IRepositoryReference,\n IRuntimeVariableManifestEntry,\n ISkillManifestEntry,\n IToolManifestEntry,\n IUnresolvedRequirementEffect,\n IUnresolvedRequirementManifestEntry,\n} from '../format/index.js';\nimport { createNullPrototypeRecord } from '../immutable/index.js';\nimport type { IYamlNode, IYamlScalarNode } from '../yaml/index.js';\n\ninterface IManifestValidationContext {\n readonly diagnostics: ICoreDiagnosticCollector;\n readonly mirrorPaths: Set<string>;\n readonly path: IRepositoryPath;\n readonly limits: ICoreResourceLimits;\n readonly operation: ICoreOperation;\n}\n\ninterface IMappingEntry {\n readonly key: IYamlScalarNode;\n readonly value: IYamlNode;\n}\n\nconst childPointer = (pointer: string, key: string): string => {\n return `${pointer}/${escapeJsonPointerSegment(key)}`;\n};\n\nconst addInvalidValue = (\n context: IManifestValidationContext,\n pointer: string,\n range: ISourceRange | null,\n reason: string,\n entity: IDiagnosticEntity | null = null,\n): void => {\n context.diagnostics.add({\n code: 'MOLDEA_MANIFEST_VALUE_INVALID',\n details: { reason },\n entity,\n path: context.path,\n pointer,\n range,\n });\n};\n\nconst readMapping = (\n node: IYamlNode,\n pointer: string,\n allowedProperties: ReadonlySet<string> | null,\n context: IManifestValidationContext,\n entity: IDiagnosticEntity | null = null,\n): ReadonlyMap<string, IMappingEntry> | null => {\n if (node.kind !== 'mapping') {\n addInvalidValue(context, pointer, node.range, 'mapping-required', entity);\n return null;\n }\n\n const entries = new Map<string, IMappingEntry>();\n\n for (const entry of node.entries) {\n if (entry.key.kind !== 'scalar' || typeof entry.key.value !== 'string') {\n addInvalidValue(context, pointer, entry.key.range, 'string-key-required', entity);\n continue;\n }\n\n const key = entry.key.value;\n\n if (allowedProperties !== null && !allowedProperties.has(key)) {\n context.diagnostics.add({\n code: 'MOLDEA_MANIFEST_PROPERTY_UNKNOWN',\n entity,\n path: context.path,\n pointer: childPointer(pointer, key),\n range: entry.key.range,\n });\n continue;\n }\n\n entries.set(key, { key: entry.key, value: entry.value });\n }\n\n return entries;\n};\n\nconst readString = (\n entry: IMappingEntry | undefined,\n pointer: string,\n context: IManifestValidationContext,\n options: {\n readonly entity?: IDiagnosticEntity;\n readonly required?: boolean;\n readonly singleLine?: boolean;\n } = {},\n): string | null => {\n if (entry === undefined) {\n if (options.required === true) {\n addInvalidValue(context, pointer, null, 'required', options.entity ?? null);\n }\n\n return null;\n }\n\n if (entry.value.kind !== 'scalar' || typeof entry.value.value !== 'string') {\n addInvalidValue(context, pointer, entry.value.range, 'string-required', options.entity ?? null);\n return null;\n }\n\n const value = entry.value.value;\n\n if (!hasNonWhitespace(value) || (options.singleLine === true && !isNonEmptySingleLine(value))) {\n addInvalidValue(context, pointer, entry.value.range, 'string-invalid', options.entity ?? null);\n return null;\n }\n\n return value;\n};\n\nconst validateStableId = (\n value: string,\n range: ISourceRange,\n pointer: string,\n context: IManifestValidationContext,\n entity: IDiagnosticEntity | null = null,\n): boolean => {\n if (!isStableId(value)) {\n context.diagnostics.add({\n code: 'MOLDEA_ID_INVALID',\n entity,\n path: context.path,\n pointer,\n range,\n });\n return false;\n }\n\n if (isReservedId(value)) {\n context.diagnostics.add({\n code: 'MOLDEA_ID_RESERVED',\n entity,\n path: context.path,\n pointer,\n range,\n });\n return false;\n }\n\n return true;\n};\n\nconst readReference = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n entity: IDiagnosticEntity | null = null,\n): IRepositoryReference | null => {\n const entries = readMapping(node, pointer, new Set(['path', 'symbol']), context, entity);\n\n if (entries === null) {\n return null;\n }\n\n const pathEntry = entries.get('path');\n\n if (pathEntry?.value.kind !== 'scalar' || typeof pathEntry.value.value !== 'string') {\n context.diagnostics.add({\n code: 'MOLDEA_PATH_INVALID',\n details: { reason: pathEntry === undefined ? 'missing' : 'type' },\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'path'),\n range: pathEntry?.value.range ?? null,\n });\n return null;\n }\n\n const path = parseManifestPath(pathEntry.value.value);\n\n if (path === null) {\n context.diagnostics.add({\n code: 'MOLDEA_PATH_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'path'),\n range: pathEntry.value.range,\n });\n return null;\n }\n\n const symbolEntry = entries.get('symbol');\n\n if (symbolEntry === undefined) {\n return { path };\n }\n\n if (\n symbolEntry.value.kind !== 'scalar' ||\n typeof symbolEntry.value.value !== 'string' ||\n !isRepositorySymbol(symbolEntry.value.value)\n ) {\n context.diagnostics.add({\n code: 'MOLDEA_SYMBOL_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'symbol'),\n range: symbolEntry.value.range,\n });\n return null;\n }\n\n if (isCanonicalMoldeaPath(path)) {\n context.diagnostics.add({\n code: 'MOLDEA_SYMBOL_FORBIDDEN',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'symbol'),\n range: symbolEntry.value.range,\n });\n return null;\n }\n\n return { path, symbol: symbolEntry.value.value };\n};\n\nconst readReferenceList = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n entity: IDiagnosticEntity | null = null,\n): readonly IRepositoryReference[] => {\n if (node.kind !== 'sequence' || node.items.length === 0) {\n addInvalidValue(context, pointer, node.range, 'non-empty-sequence-required', entity);\n return [];\n }\n\n const references: IRepositoryReference[] = [];\n const seen = new Set<string>();\n\n node.items.forEach((item, index) => {\n const reference = readReference(item, childPointer(pointer, String(index)), context, entity);\n\n if (reference === null) {\n return;\n }\n\n const key = `${reference.path}\\0${reference.symbol ?? ''}`;\n\n if (seen.has(key)) {\n context.diagnostics.add({\n code: 'MOLDEA_PATH_DUPLICATE',\n entity,\n path: context.path,\n pointer: childPointer(pointer, String(index)),\n range: item.range,\n });\n return;\n }\n\n seen.add(key);\n references.push(reference);\n });\n\n return references;\n};\n\nconst readAffectedBy = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n entity: IDiagnosticEntity | null = null,\n): readonly string[] => {\n if (node.kind !== 'sequence' || node.items.length === 0) {\n addInvalidValue(context, pointer, node.range, 'non-empty-sequence-required', entity);\n return [];\n }\n\n const values: string[] = [];\n const seen = new Set<string>();\n\n node.items.forEach((item, index) => {\n const itemPointer = childPointer(pointer, String(index));\n\n if (item.kind !== 'scalar' || typeof item.value !== 'string') {\n addInvalidValue(context, itemPointer, item.range, 'string-required', entity);\n return;\n }\n\n const isGlob = item.value.includes('*') || hasUnsupportedGlobMetacharacter(item.value);\n const isValid = isGlob ? isSimpleGlob(item.value) : parseManifestPath(item.value) !== null;\n\n if (!isValid) {\n context.diagnostics.add({\n code: isGlob ? 'MOLDEA_GLOB_INVALID' : 'MOLDEA_PATH_INVALID',\n entity,\n path: context.path,\n pointer: itemPointer,\n range: item.range,\n });\n return;\n }\n\n if (seen.has(item.value)) {\n context.diagnostics.add({\n code: isGlob ? 'MOLDEA_PATTERN_DUPLICATE' : 'MOLDEA_PATH_DUPLICATE',\n entity,\n path: context.path,\n pointer: itemPointer,\n range: item.range,\n });\n return;\n }\n\n seen.add(item.value);\n values.push(item.value);\n });\n\n return values;\n};\n\nconst readRelationship = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n): IRelationshipManifestEntry | null => {\n const entries = readMapping(node, pointer, new Set(['affectedBy', 'bindings']), context);\n\n if (entries === null) {\n return null;\n }\n\n const bindingsEntry = entries.get('bindings');\n const affectedByEntry = entries.get('affectedBy');\n\n if (bindingsEntry === undefined && affectedByEntry === undefined) {\n context.diagnostics.add({\n code: 'MOLDEA_CONTEXT_RELATIONSHIP_EMPTY',\n path: context.path,\n pointer,\n range: node.range,\n });\n }\n\n return {\n ...(bindingsEntry === undefined\n ? {}\n : {\n bindings: readReferenceList(\n bindingsEntry.value,\n childPointer(pointer, 'bindings'),\n context,\n ),\n }),\n ...(affectedByEntry === undefined\n ? {}\n : {\n affectedBy: readAffectedBy(\n affectedByEntry.value,\n childPointer(pointer, 'affectedBy'),\n context,\n ),\n }),\n };\n};\n\nconst readRelationshipRecord = (\n node: IYamlNode,\n pointer: string,\n kind: 'context' | 'decision',\n context: IManifestValidationContext,\n): Readonly<Record<string, IRelationshipManifestEntry>> | null => {\n const entries = readMapping(node, pointer, null, context);\n\n if (entries === null) {\n return null;\n }\n\n const normalized: Array<readonly [string, IRelationshipManifestEntry]> = [];\n\n for (const [key, entry] of [...entries].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const path = parseManifestPath(key);\n const validPath =\n path !== null && (kind === 'context' ? isContextPath(path, true) : isDecisionPath(path));\n\n if (!validPath) {\n context.diagnostics.add({\n code:\n kind === 'context' ? 'MOLDEA_CONTEXT_PATH_INVALID' : 'MOLDEA_DECISION_FILENAME_INVALID',\n path: context.path,\n pointer: childPointer(pointer, key),\n range: entry.key.range,\n });\n continue;\n }\n\n const relationship = readRelationship(entry.value, childPointer(pointer, key), context);\n\n if (relationship !== null) {\n normalized.push([key, relationship]);\n }\n }\n\n return createNullPrototypeRecord(normalized);\n};\n\nconst readPathList = (\n node: IYamlNode,\n pointer: string,\n kind: 'context' | 'decision' | 'mirror',\n context: IManifestValidationContext,\n entity: IDiagnosticEntity,\n): readonly IRepositoryPath[] => {\n if (node.kind !== 'sequence') {\n addInvalidValue(context, pointer, node.range, 'sequence-required', entity);\n return [];\n }\n\n const paths: IRepositoryPath[] = [];\n const seen = new Set<string>();\n\n node.items.forEach((item, index) => {\n const itemPointer = childPointer(pointer, String(index));\n\n if (item.kind !== 'scalar' || typeof item.value !== 'string') {\n addInvalidValue(context, itemPointer, item.range, 'string-required', entity);\n return;\n }\n\n const path = parseManifestPath(item.value);\n const valid =\n path !== null &&\n (kind === 'context'\n ? isContextPath(path, false)\n : kind === 'decision'\n ? isDecisionPath(path)\n : isMirrorPath(path));\n\n if (!valid || path === null) {\n const code =\n kind === 'context'\n ? 'MOLDEA_CONTEXT_PATH_INVALID'\n : kind === 'decision'\n ? 'MOLDEA_DECISION_FILENAME_INVALID'\n : path !== null && !isMirrorPath(path)\n ? 'MOLDEA_MIRROR_PATH_INSIDE_MOLDEA'\n : 'MOLDEA_MIRROR_PATH_INVALID';\n context.diagnostics.add({\n code,\n entity,\n path: context.path,\n pointer: itemPointer,\n range: item.range,\n });\n return;\n }\n\n if (seen.has(path)) {\n context.diagnostics.add({\n code: kind === 'mirror' ? 'MOLDEA_MIRROR_PATH_DUPLICATE' : 'MOLDEA_PATH_DUPLICATE',\n entity,\n path: context.path,\n pointer: itemPointer,\n range: item.range,\n });\n return;\n }\n\n if (kind === 'mirror' && context.mirrorPaths.has(path)) {\n context.diagnostics.add({\n code: 'MOLDEA_MIRROR_PATH_DUPLICATE',\n entity,\n path: context.path,\n pointer: itemPointer,\n range: item.range,\n });\n return;\n }\n\n seen.add(path);\n if (kind === 'mirror') {\n context.mirrorPaths.add(path);\n }\n paths.push(path);\n });\n\n return paths.sort(compareExactStrings);\n};\n\nconst readRuntime = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n): IRuntimeManifestEntry | null => {\n const entity = { agentId };\n const entries = readMapping(node, pointer, new Set(['guidance', 'id']), context, entity);\n\n if (entries === null) {\n return null;\n }\n\n const idEntry = entries.get('id');\n\n if (idEntry?.value.kind !== 'scalar' || typeof idEntry.value.value !== 'string') {\n context.diagnostics.add({\n code: 'MOLDEA_RUNTIME_ID_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'id'),\n range: idEntry?.value.range ?? null,\n });\n return null;\n }\n\n const id = idEntry.value.value;\n\n if (\n !isStableId(id) ||\n isReservedId(id) ||\n !(RECOGNIZED_RUNTIME_IDS as readonly string[]).includes(id)\n ) {\n context.diagnostics.add({\n code: 'MOLDEA_RUNTIME_ID_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'id'),\n range: idEntry.value.range,\n });\n }\n\n const guidanceEntry = entries.get('guidance');\n let guidance: IRepositoryPath | null = null;\n\n if (guidanceEntry !== undefined) {\n if (guidanceEntry.value.kind === 'scalar' && typeof guidanceEntry.value.value === 'string') {\n const candidate = parseManifestPath(guidanceEntry.value.value);\n\n if (candidate !== null && isRuntimeGuidancePath(candidate)) {\n guidance = candidate;\n } else {\n context.diagnostics.add({\n code: 'MOLDEA_PATH_INVALID',\n details: { reason: 'runtime-guidance' },\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'guidance'),\n range: guidanceEntry.value.range,\n });\n }\n } else {\n context.diagnostics.add({\n code: 'MOLDEA_PATH_INVALID',\n details: { reason: 'runtime-guidance' },\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'guidance'),\n range: guidanceEntry.value.range,\n });\n }\n }\n\n return { id, ...(guidance === null ? {} : { guidance }) };\n};\n\nconst readVariables = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n): Readonly<Record<string, IRuntimeVariableManifestEntry>> | null => {\n const entries = readMapping(node, pointer, null, context, { agentId });\n\n if (entries === null) {\n return null;\n }\n\n const normalized: Array<readonly [string, IRuntimeVariableManifestEntry]> = [];\n\n for (const [variableId, entry] of [...entries].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const entity = { agentId, variableId };\n\n if (!isVariableId(variableId)) {\n context.diagnostics.add({\n code: 'MOLDEA_VARIABLE_ID_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, variableId),\n range: entry.key.range,\n });\n }\n\n const variablePointer = childPointer(pointer, variableId);\n const variableEntries = readMapping(\n entry.value,\n variablePointer,\n new Set(['description']),\n context,\n entity,\n );\n\n if (variableEntries === null) {\n continue;\n }\n\n const description = readString(\n variableEntries.get('description'),\n childPointer(variablePointer, 'description'),\n context,\n { entity, required: true },\n );\n\n if (description !== null) {\n normalized.push([variableId, { description }]);\n }\n }\n\n return createNullPrototypeRecord(normalized);\n};\n\nconst readBindings = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n declaredVariables: ReadonlySet<string>,\n): IAgentBindingsManifestEntry | null => {\n const entity = { agentId };\n const entries = readMapping(\n node,\n pointer,\n new Set([\n 'inputSchema',\n 'instructionLoader',\n 'outputSchema',\n 'runtimeAgent',\n 'variableProviders',\n ]),\n context,\n entity,\n );\n\n if (entries === null) {\n return null;\n }\n\n const referenceProperty = (\n key: 'inputSchema' | 'instructionLoader' | 'outputSchema' | 'runtimeAgent',\n ) => {\n const entry = entries.get(key);\n return entry === undefined\n ? null\n : readReference(entry.value, childPointer(pointer, key), context, entity);\n };\n const inputSchema = referenceProperty('inputSchema');\n const instructionLoader = referenceProperty('instructionLoader');\n const outputSchema = referenceProperty('outputSchema');\n const runtimeAgent = referenceProperty('runtimeAgent');\n const providersEntry = entries.get('variableProviders');\n let variableProviders: Readonly<Record<string, IRepositoryReference>> | null = null;\n\n if (providersEntry !== undefined) {\n const providers = readMapping(\n providersEntry.value,\n childPointer(pointer, 'variableProviders'),\n null,\n context,\n entity,\n );\n\n if (providers !== null) {\n const normalized: Array<readonly [string, IRepositoryReference]> = [];\n\n for (const [variableId, providerEntry] of [...providers].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const variableEntity = { agentId, variableId };\n const providerPointer = childPointer(\n childPointer(pointer, 'variableProviders'),\n variableId,\n );\n\n if (!isVariableId(variableId)) {\n context.diagnostics.add({\n code: 'MOLDEA_VARIABLE_ID_INVALID',\n entity: variableEntity,\n path: context.path,\n pointer: providerPointer,\n range: providerEntry.key.range,\n });\n } else if (!declaredVariables.has(variableId)) {\n context.diagnostics.add({\n code: 'MOLDEA_VARIABLE_PROVIDER_UNDECLARED',\n entity: variableEntity,\n path: context.path,\n pointer: providerPointer,\n range: providerEntry.key.range,\n });\n }\n\n const reference = readReference(\n providerEntry.value,\n providerPointer,\n context,\n variableEntity,\n );\n\n if (reference !== null) {\n normalized.push([variableId, reference]);\n }\n }\n\n variableProviders = createNullPrototypeRecord(normalized);\n }\n }\n\n return {\n ...(runtimeAgent === null ? {} : { runtimeAgent }),\n ...(inputSchema === null ? {} : { inputSchema }),\n ...(outputSchema === null ? {} : { outputSchema }),\n ...(instructionLoader === null ? {} : { instructionLoader }),\n ...(variableProviders === null ? {} : { variableProviders }),\n };\n};\n\nconst readCapability = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n capabilityId: string,\n kind: 'tool' | 'skill',\n): IToolManifestEntry | ISkillManifestEntry | null => {\n const entity = { agentId, capabilityId, capabilityKind: kind } as const;\n const allowed =\n kind === 'tool'\n ? new Set([\n 'affectedBy',\n 'description',\n 'implementation',\n 'inputSchema',\n 'name',\n 'outputSchema',\n 'registration',\n ])\n : new Set(['affectedBy', 'description', 'implementation', 'name', 'registration']);\n const entries = readMapping(node, pointer, allowed, context, entity);\n\n if (entries === null) {\n return null;\n }\n\n const name = readString(entries.get('name'), childPointer(pointer, 'name'), context, {\n entity,\n required: true,\n singleLine: true,\n });\n const descriptionEntry = entries.get('description');\n let description: string | null = null;\n\n if (descriptionEntry === undefined) {\n context.diagnostics.add({\n code: 'MOLDEA_CAPABILITY_DESCRIPTION_MISSING',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'description'),\n });\n } else if (\n descriptionEntry.value.kind !== 'scalar' ||\n typeof descriptionEntry.value.value !== 'string' ||\n !isCapabilityDescription(descriptionEntry.value.value)\n ) {\n context.diagnostics.add({\n code: 'MOLDEA_CAPABILITY_DESCRIPTION_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'description'),\n range: descriptionEntry.value.range,\n });\n } else {\n description = descriptionEntry.value.value;\n }\n\n const implementationEntry = entries.get('implementation');\n let implementation: IRepositoryReference | null = null;\n\n if (implementationEntry === undefined) {\n context.diagnostics.add({\n code:\n kind === 'tool'\n ? 'MOLDEA_TOOL_IMPLEMENTATION_MISSING'\n : 'MOLDEA_SKILL_IMPLEMENTATION_MISSING',\n entity,\n path: context.path,\n pointer: childPointer(pointer, 'implementation'),\n });\n } else {\n implementation = readReference(\n implementationEntry.value,\n childPointer(pointer, 'implementation'),\n context,\n entity,\n );\n }\n\n const optionalReference = (key: 'inputSchema' | 'outputSchema' | 'registration') => {\n const entry = entries.get(key);\n return entry === undefined\n ? null\n : readReference(entry.value, childPointer(pointer, key), context, entity);\n };\n const registration = optionalReference('registration');\n const inputSchema = kind === 'tool' ? optionalReference('inputSchema') : null;\n const outputSchema = kind === 'tool' ? optionalReference('outputSchema') : null;\n const affectedByEntry = entries.get('affectedBy');\n const affectedBy =\n affectedByEntry === undefined\n ? null\n : readAffectedBy(affectedByEntry.value, childPointer(pointer, 'affectedBy'), context, entity);\n\n if (name === null || description === null || implementation === null) {\n return null;\n }\n\n return {\n name,\n description,\n implementation,\n ...(registration === null ? {} : { registration }),\n ...(inputSchema === null ? {} : { inputSchema }),\n ...(outputSchema === null ? {} : { outputSchema }),\n ...(affectedBy === null ? {} : { affectedBy }),\n };\n};\n\nconst readCapabilities = <Value extends IToolManifestEntry | ISkillManifestEntry>(\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n kind: 'tool' | 'skill',\n): Readonly<Record<string, Value>> | null => {\n const entries = readMapping(node, pointer, null, context, { agentId });\n\n if (entries === null) {\n return null;\n }\n\n const normalized: Array<readonly [string, Value]> = [];\n\n for (const [capabilityId, entry] of [...entries].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const entity = { agentId, capabilityId, capabilityKind: kind } as const;\n const capabilityPointer = childPointer(pointer, capabilityId);\n validateStableId(capabilityId, entry.key.range, capabilityPointer, context, entity);\n const capability = readCapability(\n entry.value,\n capabilityPointer,\n context,\n agentId,\n capabilityId,\n kind,\n );\n\n if (capability !== null) {\n normalized.push([capabilityId, capability as Value]);\n }\n }\n\n return createNullPrototypeRecord(normalized);\n};\n\nconst readUnresolved = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId?: string,\n): Readonly<Record<string, IUnresolvedRequirementManifestEntry>> | null => {\n const entries = readMapping(\n node,\n pointer,\n null,\n context,\n agentId === undefined ? null : { agentId },\n );\n\n if (entries === null) {\n return null;\n }\n\n const normalized: Array<readonly [string, IUnresolvedRequirementManifestEntry]> = [];\n\n for (const [requirementId, entry] of [...entries].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const entity = agentId === undefined ? null : { agentId };\n const requirementPointer = childPointer(pointer, requirementId);\n validateStableId(requirementId, entry.key.range, requirementPointer, context, entity);\n const requirementEntries = readMapping(\n entry.value,\n requirementPointer,\n new Set(['category', 'description', 'effect', 'reference', 'related', 'resolution']),\n context,\n entity,\n );\n\n if (requirementEntries === null) {\n continue;\n }\n\n const category = readString(\n requirementEntries.get('category'),\n childPointer(requirementPointer, 'category'),\n context,\n { ...(entity === null ? {} : { entity }), required: true },\n );\n\n if (category !== null && !isStableId(category)) {\n context.diagnostics.add({\n code: 'MOLDEA_ID_INVALID',\n entity,\n path: context.path,\n pointer: childPointer(requirementPointer, 'category'),\n range: requirementEntries.get('category')?.value.range ?? null,\n });\n }\n\n const effectEntry = requirementEntries.get('effect');\n let effect: IUnresolvedRequirementEffect | null = null;\n\n if (\n effectEntry?.value.kind === 'scalar' &&\n (effectEntry.value.value === 'blocking' ||\n effectEntry.value.value === 'warning' ||\n effectEntry.value.value === 'informational')\n ) {\n effect = effectEntry.value.value;\n } else {\n addInvalidValue(\n context,\n childPointer(requirementPointer, 'effect'),\n effectEntry?.value.range ?? null,\n effectEntry === undefined ? 'required' : 'enum',\n entity,\n );\n }\n\n const description = readString(\n requirementEntries.get('description'),\n childPointer(requirementPointer, 'description'),\n context,\n { ...(entity === null ? {} : { entity }), required: true },\n );\n const resolution = readString(\n requirementEntries.get('resolution'),\n childPointer(requirementPointer, 'resolution'),\n context,\n { ...(entity === null ? {} : { entity }), required: true },\n );\n const relatedEntry = requirementEntries.get('related');\n const related =\n relatedEntry === undefined\n ? null\n : readReferenceList(\n relatedEntry.value,\n childPointer(requirementPointer, 'related'),\n context,\n entity,\n );\n const reference = readString(\n requirementEntries.get('reference'),\n childPointer(requirementPointer, 'reference'),\n context,\n { ...(entity === null ? {} : { entity }), singleLine: true },\n );\n\n if (category !== null && effect !== null && description !== null && resolution !== null) {\n normalized.push([\n requirementId,\n {\n category,\n effect,\n description,\n resolution,\n ...(related === null ? {} : { related }),\n ...(reference === null ? {} : { reference }),\n },\n ]);\n }\n }\n\n return createNullPrototypeRecord(normalized);\n};\n\nconst findMappingProperty = (node: IYamlNode, property: string): IYamlNode | null => {\n if (node.kind !== 'mapping') {\n return null;\n }\n\n for (const entry of node.entries) {\n if (entry.key.kind === 'scalar' && entry.key.value === property) {\n return entry.value;\n }\n }\n\n return null;\n};\n\n/**\n * Detects a supported repository-format version without treating the remaining manifest as valid.\n * @param node The trustworthy strict-YAML manifest root.\n * @returns The supported parsed version when its declaration is independently unambiguous.\n */\nexport const detectSupportedManifestVersion = (\n node: IYamlNode,\n): IRepositoryFormatVersion | null => {\n if (node.kind !== 'mapping') {\n return null;\n }\n\n const versionNode = findMappingProperty(node, 'version');\n\n return versionNode?.kind === 'scalar' && versionNode.value === 1n ? 1 : null;\n};\n\nconst validateAgentOwnedIdUniqueness = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n): void => {\n const seen = new Set<string>();\n\n for (const property of ['tools', 'skills', 'unresolved']) {\n const record = findMappingProperty(node, property);\n\n if (record?.kind !== 'mapping') {\n continue;\n }\n\n for (const entry of record.entries) {\n if (entry.key.kind !== 'scalar' || typeof entry.key.value !== 'string') {\n continue;\n }\n\n if (seen.has(entry.key.value)) {\n context.diagnostics.add({\n code: 'MOLDEA_ID_DUPLICATE',\n entity: { agentId },\n path: context.path,\n pointer: childPointer(childPointer(pointer, property), entry.key.value),\n range: entry.key.range,\n });\n }\n\n seen.add(entry.key.value);\n }\n }\n};\n\nconst readAgent = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n agentId: string,\n): IAgentManifestEntry | null => {\n const entity = { agentId };\n const entries = readMapping(\n node,\n pointer,\n new Set([\n 'affectedBy',\n 'bindings',\n 'context',\n 'decisions',\n 'runtime',\n 'mirrors',\n 'skills',\n 'tools',\n 'unresolved',\n 'variables',\n ]),\n context,\n entity,\n );\n\n if (entries === null) {\n return null;\n }\n\n validateAgentOwnedIdUniqueness(node, pointer, context, agentId);\n const runtimeEntry = entries.get('runtime');\n let runtime: IRuntimeManifestEntry | null = null;\n\n if (runtimeEntry === undefined) {\n addInvalidValue(context, childPointer(pointer, 'runtime'), null, 'required', entity);\n } else {\n runtime = readRuntime(runtimeEntry.value, childPointer(pointer, 'runtime'), context, agentId);\n }\n\n const variablesEntry = entries.get('variables');\n const variables =\n variablesEntry === undefined\n ? null\n : readVariables(variablesEntry.value, childPointer(pointer, 'variables'), context, agentId);\n const declaredVariables = new Set(Object.keys(variables ?? {}));\n const bindingsEntry = entries.get('bindings');\n const bindings =\n bindingsEntry === undefined\n ? null\n : readBindings(\n bindingsEntry.value,\n childPointer(pointer, 'bindings'),\n context,\n agentId,\n declaredVariables,\n );\n const contextEntry = entries.get('context');\n const contextPaths =\n contextEntry === undefined\n ? null\n : readPathList(\n contextEntry.value,\n childPointer(pointer, 'context'),\n 'context',\n context,\n entity,\n );\n const decisionsEntry = entries.get('decisions');\n const decisions =\n decisionsEntry === undefined\n ? null\n : readPathList(\n decisionsEntry.value,\n childPointer(pointer, 'decisions'),\n 'decision',\n context,\n entity,\n );\n const toolsEntry = entries.get('tools');\n const tools =\n toolsEntry === undefined\n ? null\n : readCapabilities<IToolManifestEntry>(\n toolsEntry.value,\n childPointer(pointer, 'tools'),\n context,\n agentId,\n 'tool',\n );\n const skillsEntry = entries.get('skills');\n const skills =\n skillsEntry === undefined\n ? null\n : readCapabilities<ISkillManifestEntry>(\n skillsEntry.value,\n childPointer(pointer, 'skills'),\n context,\n agentId,\n 'skill',\n );\n const affectedByEntry = entries.get('affectedBy');\n const affectedBy =\n affectedByEntry === undefined\n ? null\n : readAffectedBy(affectedByEntry.value, childPointer(pointer, 'affectedBy'), context, entity);\n const mirrorsEntry = entries.get('mirrors');\n const mirrors =\n mirrorsEntry === undefined\n ? null\n : readPathList(\n mirrorsEntry.value,\n childPointer(pointer, 'mirrors'),\n 'mirror',\n context,\n entity,\n );\n const unresolvedEntry = entries.get('unresolved');\n const unresolved =\n unresolvedEntry === undefined\n ? null\n : readUnresolved(\n unresolvedEntry.value,\n childPointer(pointer, 'unresolved'),\n context,\n agentId,\n );\n\n if (runtime === null) {\n return null;\n }\n\n return {\n runtime,\n ...(contextPaths === null ? {} : { context: contextPaths }),\n ...(decisions === null ? {} : { decisions }),\n ...(variables === null ? {} : { variables }),\n ...(bindings === null ? {} : { bindings }),\n ...(tools === null ? {} : { tools }),\n ...(skills === null ? {} : { skills }),\n ...(affectedBy === null ? {} : { affectedBy }),\n ...(mirrors === null ? {} : { mirrors }),\n ...(unresolved === null ? {} : { unresolved }),\n };\n};\n\nconst readAgents = (\n node: IYamlNode,\n pointer: string,\n context: IManifestValidationContext,\n): Readonly<Record<string, IAgentManifestEntry>> | null => {\n const entries = readMapping(node, pointer, null, context);\n\n if (entries === null) {\n return null;\n }\n\n const normalized: Array<readonly [string, IAgentManifestEntry]> = [];\n\n for (const [agentId, entry] of [...entries].sort(([left], [right]) =>\n compareExactStrings(left, right),\n )) {\n const agentPointer = childPointer(pointer, agentId);\n validateStableId(agentId, entry.key.range, agentPointer, context, { agentId });\n const agent = readAgent(entry.value, agentPointer, context, agentId);\n\n if (agent !== null) {\n normalized.push([agentId, agent]);\n }\n }\n\n return createNullPrototypeRecord(normalized);\n};\n\n/**\n * Validates the closed warning-acceptance contract with field-specific diagnostics.\n * @returns Valid acceptance entries; diagnostics invalidate the complete manifest on any bad entry.\n * @throws\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nconst readAcceptedWarnings = (\n node: IYamlNode,\n context: IManifestValidationContext,\n): IAcceptedWarningManifestEntry[] | null => {\n const report = (\n entry: number | null,\n field: string,\n range: ISourceRange,\n reason: string,\n ): void => {\n context.diagnostics.add({\n code: 'MOLDEA_MANIFEST_VALUE_INVALID',\n path: context.path,\n pointer:\n entry === null\n ? '/acceptedWarnings'\n : `/acceptedWarnings/${entry}/${escapeJsonPointerSegment(field)}`,\n range,\n details: { entry, field, reason },\n });\n };\n if (node.kind !== 'sequence') {\n report(null, 'acceptedWarnings', node.range, 'sequence-required');\n return null;\n }\n if (node.items.length > context.limits.maxAcceptedWarnings)\n throw new CoreOperationException({\n code: 'RESOURCE_LIMIT_EXCEEDED',\n operation: context.operation,\n limit: 'maxAcceptedWarnings',\n limitMaximum: context.limits.maxAcceptedWarnings,\n observedUsage: node.items.length,\n nextAction: 'reduce-input-or-increase-limit',\n });\n const accepted: IAcceptedWarningManifestEntry[] = [];\n const identities = new Set<string>();\n for (const [index, item] of node.items.entries()) {\n if (item.kind !== 'mapping') {\n report(index, 'entry', item.range, 'mapping-required');\n continue;\n }\n const fields = new Map<string, IYamlNode>();\n let isValid = true;\n for (const entry of item.entries) {\n if (\n entry.key.kind !== 'scalar' ||\n typeof entry.key.value !== 'string' ||\n !['code', 'subject', 'qualifier', 'reason'].includes(entry.key.value)\n ) {\n report(\n index,\n entry.key.kind === 'scalar' && typeof entry.key.value === 'string'\n ? entry.key.value\n : 'key',\n entry.key.range,\n 'unknown-field',\n );\n isValid = false;\n } else fields.set(entry.key.value, entry.value);\n }\n const scalar = (field: string): string | null => {\n const value = fields.get(field);\n if (\n value?.kind !== 'scalar' ||\n typeof value.value !== 'string' ||\n !hasNonWhitespace(value.value)\n ) {\n report(\n index,\n field,\n value?.range ?? item.range,\n value === undefined ? 'required' : 'non-empty-string-required',\n );\n isValid = false;\n return null;\n }\n return value.value;\n };\n const code = scalar('code');\n const subjectText = scalar('subject');\n const reason = scalar('reason');\n const subject = subjectText === null ? null : parseManifestPath(subjectText);\n const qualifierNode = fields.get('qualifier');\n let qualifier: string | null = null;\n if (\n qualifierNode !== undefined &&\n !(qualifierNode.kind === 'scalar' && qualifierNode.value === null)\n ) {\n qualifier = scalar('qualifier');\n if (qualifier !== null && !isNonEmptySingleLine(qualifier)) {\n report(index, 'qualifier', qualifierNode.range, 'single-line-required');\n isValid = false;\n }\n }\n const acceptedCode = ACCEPTABLE_WARNING_CODES.find((candidate) => candidate === code);\n if (code !== null && acceptedCode === undefined) {\n report(index, 'code', fields.get('code')!.range, 'code-not-acceptable');\n isValid = false;\n }\n if (subjectText !== null && subject === null) {\n report(index, 'subject', fields.get('subject')!.range, 'repository-path-required');\n isValid = false;\n }\n if (reason !== null && countUnicodeScalars(reason) > 256) {\n report(index, 'reason', fields.get('reason')!.range, 'maximum-256-characters');\n isValid = false;\n }\n if (!isValid || acceptedCode === undefined || subject === null || reason === null) continue;\n const identity = JSON.stringify([acceptedCode, subject, qualifier]);\n if (identities.has(identity)) {\n report(index, 'code', fields.get('code')!.range, 'duplicate-identity');\n continue;\n }\n identities.add(identity);\n accepted.push({\n code: acceptedCode,\n subject,\n ...(qualifierNode === undefined ? {} : { qualifier }),\n reason,\n });\n }\n return accepted;\n};\n\n/**\n * Validates and normalizes a strict YAML document as a version 1 moldea manifest.\n * @param node The parser-neutral YAML root node.\n * @param path The canonical or caller-supplied logical manifest path.\n * @param diagnostics The operation diagnostic collector.\n * @param limits The immutable operation limits, including the acceptance-list bound.\n * @param operation The public operation receiving resource failures.\n * @returns The normalized manifest when its supported version can be interpreted.\n * @throws\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const validateManifest = (\n node: IYamlNode,\n path: IRepositoryPath,\n diagnostics: ICoreDiagnosticCollector,\n limits: ICoreResourceLimits,\n operation: ICoreOperation,\n): IMoldeaManifestV1 | null => {\n const context: IManifestValidationContext = {\n diagnostics,\n operation,\n limits,\n mirrorPaths: new Set(),\n path,\n };\n\n if (node.kind !== 'mapping') {\n diagnostics.add({ code: 'MOLDEA_MANIFEST_ROOT_INVALID', path, range: node.range });\n return null;\n }\n\n const versionNode = findMappingProperty(node, 'version');\n\n if (versionNode === null) {\n diagnostics.add({ code: 'MOLDEA_MANIFEST_VERSION_MISSING', path, pointer: '/version' });\n return null;\n }\n\n const isIntegerSyntax = versionNode.kind === 'scalar' && typeof versionNode.value === 'bigint';\n\n if (!isIntegerSyntax || versionNode.kind !== 'scalar' || versionNode.value <= 0n) {\n diagnostics.add({\n code: 'MOLDEA_MANIFEST_VERSION_INVALID',\n path,\n pointer: '/version',\n range: versionNode.range,\n });\n return null;\n }\n\n if (versionNode.value !== 1n) {\n diagnostics.add({\n code: 'MOLDEA_MANIFEST_VERSION_UNSUPPORTED',\n path,\n pointer: '/version',\n range: versionNode.range,\n });\n return null;\n }\n\n const entries = readMapping(\n node,\n '',\n new Set(['acceptedWarnings', 'agents', 'context', 'decisions', 'unresolved', 'version']),\n context,\n );\n\n if (entries === null) {\n return null;\n }\n\n const acceptedWarningsEntry = entries.get('acceptedWarnings');\n const acceptedWarnings =\n acceptedWarningsEntry === undefined\n ? null\n : readAcceptedWarnings(acceptedWarningsEntry.value, context);\n const contextEntry = entries.get('context');\n const contextRelationships =\n contextEntry === undefined\n ? null\n : readRelationshipRecord(contextEntry.value, '/context', 'context', context);\n const decisionsEntry = entries.get('decisions');\n const decisionRelationships =\n decisionsEntry === undefined\n ? null\n : readRelationshipRecord(decisionsEntry.value, '/decisions', 'decision', context);\n const unresolvedEntry = entries.get('unresolved');\n const unresolved =\n unresolvedEntry === undefined\n ? null\n : readUnresolved(unresolvedEntry.value, '/unresolved', context);\n const agentsEntry = entries.get('agents');\n const agents =\n agentsEntry === undefined ? null : readAgents(agentsEntry.value, '/agents', context);\n\n return {\n version: 1,\n ...(acceptedWarnings === null ? {} : { acceptedWarnings }),\n ...(contextRelationships === null ? {} : { context: contextRelationships }),\n ...(decisionRelationships === null ? {} : { decisions: decisionRelationships }),\n ...(unresolved === null ? {} : { unresolved }),\n ...(agents === null ? {} : { agents }),\n };\n};\n","import type { ISourcePosition, ISourceRange } from '../diagnostics/index.js';\n\n// scalar-aware normalized source lookup used by parsers and diagnostics\nexport interface ISourceLocator {\n locateRange(startOffset: number, endOffset: number): ISourceRange;\n}\n\nconst findLineIndex = (lineStarts: readonly number[], offset: number): number => {\n let lower = 0;\n let upper = lineStarts.length - 1;\n\n while (lower < upper) {\n const middle = Math.ceil((lower + upper) / 2);\n\n if ((lineStarts[middle] ?? 0) <= offset) {\n lower = middle;\n } else {\n upper = middle - 1;\n }\n }\n\n return lower;\n};\n\n/**\n * Creates an efficient UTF-16-offset to Unicode-scalar source locator.\n * @param value The already-normalized valid Unicode scalar text.\n * @returns A locator producing one-based lines and columns with zero-based scalar offsets.\n */\nexport const createSourceLocator = (value: string): ISourceLocator => {\n const scalarOffsets = new Uint32Array(value.length + 1);\n const lineStarts = [0];\n let scalarOffset = 0;\n\n for (let codeUnitOffset = 0; codeUnitOffset < value.length;) {\n const codePoint = value.codePointAt(codeUnitOffset);\n const width = codePoint !== undefined && codePoint > 0xffff ? 2 : 1;\n\n scalarOffsets[codeUnitOffset] = scalarOffset;\n\n for (let interiorOffset = 1; interiorOffset < width; interiorOffset += 1) {\n scalarOffsets[codeUnitOffset + interiorOffset] = scalarOffset;\n }\n\n codeUnitOffset += width;\n scalarOffset += 1;\n scalarOffsets[codeUnitOffset] = scalarOffset;\n\n if (codePoint === 0x0a) {\n lineStarts.push(codeUnitOffset);\n }\n }\n\n const locatePosition = (candidateOffset: number): ISourcePosition => {\n const codeUnitOffset = Math.max(0, Math.min(value.length, candidateOffset));\n const lineIndex = findLineIndex(lineStarts, codeUnitOffset);\n const lineStart = lineStarts[lineIndex] ?? 0;\n const positionScalarOffset = scalarOffsets[codeUnitOffset] ?? 0;\n const lineStartScalarOffset = scalarOffsets[lineStart] ?? 0;\n\n return {\n column: positionScalarOffset - lineStartScalarOffset + 1,\n line: lineIndex + 1,\n offset: positionScalarOffset,\n };\n };\n\n return Object.freeze({\n locateRange: (startOffset: number, endOffset: number): ISourceRange => ({\n end: locatePosition(endOffset),\n start: locatePosition(startOffset),\n }),\n });\n};\n","import { Parser, isAlias, isMap, isScalar, isSeq, parseAllDocuments, type ParsedNode } from 'yaml';\n\nimport type { IRepositoryPath } from '@moldea.ai/repository';\n\nimport type { ICoreDiagnosticCollector } from '../diagnostic-utilities/index.js';\nimport type { ISourceRange } from '../diagnostics/index.js';\nimport type { ISourceLocator } from '../source-location/index.js';\n\n// parser-neutral YAML nodes retained only inside Core\nexport type IYamlNode = IYamlMappingNode | IYamlSequenceNode | IYamlScalarNode;\n\nexport interface IYamlMappingEntry {\n readonly key: IYamlNode;\n readonly value: IYamlNode;\n}\n\nexport interface IYamlMappingNode {\n readonly kind: 'mapping';\n readonly entries: readonly IYamlMappingEntry[];\n readonly range: ISourceRange;\n}\n\nexport interface IYamlSequenceNode {\n readonly kind: 'sequence';\n readonly items: readonly IYamlNode[];\n readonly range: ISourceRange;\n}\n\nexport interface IYamlScalarNode {\n readonly kind: 'scalar';\n readonly range: ISourceRange;\n readonly source: string;\n readonly style: string | null;\n readonly value: string | number | bigint | boolean | null;\n}\n\nexport interface IStrictYamlParseResult {\n readonly valid: boolean;\n readonly value: IYamlNode | null;\n}\n\nconst CORE_TAGS = new Set([\n 'tag:yaml.org,2002:bool',\n 'tag:yaml.org,2002:float',\n 'tag:yaml.org,2002:int',\n 'tag:yaml.org,2002:map',\n 'tag:yaml.org,2002:null',\n 'tag:yaml.org,2002:seq',\n 'tag:yaml.org,2002:str',\n]);\n\nconst toRange = (\n range: readonly [number, number, number] | null | undefined,\n locator: ISourceLocator,\n): ISourceRange => {\n return locator.locateRange(range?.[0] ?? 0, range?.[1] ?? range?.[0] ?? 0);\n};\n\nconst addUnsupportedFeature = (\n diagnostics: ICoreDiagnosticCollector,\n path: IRepositoryPath,\n range: ISourceRange,\n reason: string,\n): void => {\n diagnostics.add({\n code: 'MOLDEA_YAML_FEATURE_UNSUPPORTED',\n details: { reason },\n path,\n range,\n });\n};\n\nconst isUnicodeScalarString = (value: string): boolean => {\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const nextCodeUnit = value.charCodeAt(index + 1);\n\n if (!(nextCodeUnit >= 0xdc00 && nextCodeUnit <= 0xdfff)) {\n return false;\n }\n\n index += 1;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n return false;\n }\n }\n\n return true;\n};\n\nconst isCoreTagCompatible = (node: ParsedNode): boolean => {\n switch (node.tag) {\n case 'tag:yaml.org,2002:bool':\n return isScalar(node) && typeof node.value === 'boolean';\n case 'tag:yaml.org,2002:float':\n return isScalar(node) && typeof node.value === 'number';\n case 'tag:yaml.org,2002:int':\n return isScalar(node) && typeof node.value === 'bigint';\n case 'tag:yaml.org,2002:map':\n return isMap(node);\n case 'tag:yaml.org,2002:null':\n return isScalar(node) && node.value === null;\n case 'tag:yaml.org,2002:seq':\n return isSeq(node);\n case 'tag:yaml.org,2002:str':\n return isScalar(node) && typeof node.value === 'string';\n default:\n return false;\n }\n};\n\nconst convertNode = (\n node: ParsedNode,\n path: IRepositoryPath,\n locator: ISourceLocator,\n diagnostics: ICoreDiagnosticCollector,\n): IYamlNode | null => {\n const range = toRange(node.range, locator);\n\n if (isAlias(node)) {\n addUnsupportedFeature(diagnostics, path, range, 'alias');\n return null;\n }\n\n if ('anchor' in node && typeof node.anchor === 'string') {\n addUnsupportedFeature(diagnostics, path, range, 'anchor');\n }\n\n if (node.tag !== undefined) {\n if (!CORE_TAGS.has(node.tag)) {\n addUnsupportedFeature(diagnostics, path, range, 'custom-tag');\n return null;\n }\n\n if (!isCoreTagCompatible(node)) {\n diagnostics.add({\n code: 'MOLDEA_YAML_MALFORMED',\n details: { reason: 'tag-value' },\n path,\n range,\n });\n return null;\n }\n }\n\n if (isScalar(node)) {\n const value = node.value;\n\n if (\n value !== null &&\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'bigint' &&\n typeof value !== 'boolean'\n ) {\n diagnostics.add({\n code: 'MOLDEA_YAML_MALFORMED',\n details: { reason: 'scalar-type' },\n path,\n range,\n });\n return null;\n }\n\n if (typeof value === 'string' && !isUnicodeScalarString(value)) {\n diagnostics.add({\n code: 'MOLDEA_YAML_MALFORMED',\n details: { reason: 'invalid-unicode' },\n path,\n range,\n });\n return null;\n }\n\n return {\n kind: 'scalar',\n range,\n source: node.source,\n style: node.type ?? null,\n value,\n };\n }\n\n if (isSeq(node)) {\n const items: IYamlNode[] = [];\n\n for (const item of node.items) {\n if (item === null) {\n items.push({ kind: 'scalar', range, source: '', style: null, value: null });\n continue;\n }\n\n const converted = convertNode(item, path, locator, diagnostics);\n\n if (converted !== null) {\n items.push(converted);\n }\n }\n\n return { items, kind: 'sequence', range };\n }\n\n if (isMap(node)) {\n const entries: IYamlMappingEntry[] = [];\n\n for (const pair of node.items) {\n const key = convertNode(pair.key, path, locator, diagnostics);\n const value =\n pair.value === null\n ? ({\n kind: 'scalar',\n range: key?.range ?? range,\n source: '',\n style: null,\n value: null,\n } satisfies IYamlScalarNode)\n : convertNode(pair.value, path, locator, diagnostics);\n\n if (key?.kind === 'scalar' && key.value === '<<' && key.style === 'PLAIN') {\n addUnsupportedFeature(diagnostics, path, key.range, 'merge-key');\n }\n\n if (key !== null && value !== null) {\n entries.push({ key, value });\n }\n }\n\n return { entries, kind: 'mapping', range };\n }\n\n diagnostics.add({\n code: 'MOLDEA_YAML_MALFORMED',\n details: { reason: 'node-type' },\n path,\n range,\n });\n return null;\n};\n\nconst addParserDiagnostic = (\n code: string,\n start: number,\n end: number,\n path: IRepositoryPath,\n locator: ISourceLocator,\n diagnostics: ICoreDiagnosticCollector,\n): void => {\n if (code === 'BAD_DIRECTIVE') {\n return;\n }\n\n if (code === 'DUPLICATE_KEY') {\n diagnostics.add({\n code: 'MOLDEA_YAML_DUPLICATE_KEY',\n path,\n range: locator.locateRange(start, end),\n });\n return;\n }\n\n if (code === 'TAG_RESOLVE_FAILED') {\n return;\n }\n\n diagnostics.add({\n code: 'MOLDEA_YAML_MALFORMED',\n details: { reason: code === 'RESOURCE_EXHAUSTION' ? 'resource-exhaustion' : 'syntax' },\n path,\n range: locator.locateRange(start, end),\n });\n};\n\n/**\n * Parses one normalized YAML 1.2 Core Schema document into parser-neutral nodes.\n * @param value The normalized manifest text.\n * @param path The logical source path used by diagnostics.\n * @param locator The scalar-aware source locator for the normalized text.\n * @param diagnostics The operation diagnostic collector.\n * @returns The private parsed tree only when the YAML substrate is trustworthy.\n */\nexport const parseStrictYaml = (\n value: string,\n path: IRepositoryPath,\n locator: ISourceLocator,\n diagnostics: ICoreDiagnosticCollector,\n): IStrictYamlParseResult => {\n const initialDiagnosticCount = diagnostics.size;\n\n for (const token of new Parser().parse(value)) {\n if (token.type === 'directive') {\n addUnsupportedFeature(\n diagnostics,\n path,\n locator.locateRange(token.offset, token.offset + token.source.length),\n 'directive',\n );\n }\n }\n\n const documents = parseAllDocuments(value, {\n intAsBigInt: true,\n keepSourceTokens: true,\n logLevel: 'silent',\n merge: false,\n prettyErrors: false,\n resolveKnownTags: false,\n schema: 'core',\n strict: true,\n uniqueKeys: true,\n version: '1.2',\n });\n\n if (documents.length > 1) {\n const secondDocument = documents[1];\n const range = secondDocument?.range;\n\n diagnostics.add({\n code: 'MOLDEA_YAML_MULTIPLE_DOCUMENTS',\n path,\n range: locator.locateRange(range?.[0] ?? 0, range?.[0] ?? 0),\n });\n }\n\n for (const document of documents) {\n for (const error of [...document.errors, ...document.warnings]) {\n addParserDiagnostic(error.code, error.pos[0], error.pos[1], path, locator, diagnostics);\n }\n }\n\n if (documents.length > 1 || diagnostics.size > initialDiagnosticCount) {\n return { valid: false, value: null };\n }\n\n const document = documents[0];\n\n if (document === undefined || document.contents === null) {\n return {\n valid: true,\n value: {\n kind: 'scalar',\n range: locator.locateRange(0, 0),\n source: '',\n style: null,\n value: null,\n },\n };\n }\n\n const parsedValue = convertNode(document.contents, path, locator, diagnostics);\n\n return {\n valid: parsedValue !== null && diagnostics.size === initialDiagnosticCount,\n value: diagnostics.size === initialDiagnosticCount ? parsedValue : null,\n };\n};\n","import { parseRepositoryPath } from '@moldea.ai/repository';\n\nimport { createCoreOperationOptionsSnapshot, type ICoreOptionsSnapshot } from '../options/index.js';\nimport type {\n IIndexedTextAsset,\n IManifestParseResult,\n ITextDocumentInput,\n} from '../contracts/index.js';\nimport { createCoreDiagnosticCollector } from '../diagnostic-utilities/index.js';\nimport type { ICoreOperation } from '../exceptions/index.js';\nimport { isCanonicalManifestPath } from '../format-validation/index.js';\nimport { freezeRecursively } from '../immutable/index.js';\nimport { detectSupportedManifestVersion, validateManifest } from '../manifest-validation/index.js';\nimport { createSourceLocator } from '../source-location/index.js';\nimport { calculateNormalizedTextDigest, normalizeTextDocument } from '../text/index.js';\nimport { parseStrictYaml } from '../yaml/index.js';\n\n// richer manifest parse state retained only by repository inspection\nexport interface IManifestDocumentInspectionResult extends IManifestParseResult {\n readonly formatVersion: 1 | null;\n}\n\n/**\n * Inspects one complete manifest while retaining an independently trustworthy supported version.\n * @param input The canonical logical path and exact manifest text or bytes.\n * @param options The immutable Core limit snapshot.\n * @param operation The owning public or repository-level operation for typed failures.\n * @returns Frozen inspection state with all-or-nothing manifest assets and values.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - INVALID_ARGUMENT: The Core operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const inspectManifestDocument = async (\n input: ITextDocumentInput,\n options: ICoreOptionsSnapshot,\n operation: Extract<\n ICoreOperation,\n 'parse-manifest' | 'match-manifest-scope' | 'validate-project'\n > = 'parse-manifest',\n): Promise<IManifestDocumentInspectionResult> => {\n options = createCoreOperationOptionsSnapshot(options);\n const normalized = normalizeTextDocument(input, options.limits, operation, 'maxManifestBytes');\n const path = parseRepositoryPath(input.path);\n const diagnostics = createCoreDiagnosticCollector(options.limits, operation);\n\n if (!isCanonicalManifestPath(path)) {\n diagnostics.add({ code: 'MOLDEA_MANIFEST_PATH_INVALID', path });\n }\n\n for (const diagnostic of normalized.diagnostics) {\n diagnostics.merge(diagnostic);\n }\n\n if (!normalized.valid || normalized.text === null) {\n return freezeRecursively({\n asset: null,\n diagnostics: diagnostics.finalize(),\n formatVersion: null,\n manifest: null,\n valid: false,\n });\n }\n\n const locator = createSourceLocator(normalized.text.value);\n const parsed = parseStrictYaml(normalized.text.value, path, locator, diagnostics);\n const formatVersion = parsed.value === null ? null : detectSupportedManifestVersion(parsed.value);\n const manifest =\n parsed.valid && parsed.value !== null\n ? validateManifest(parsed.value, path, diagnostics, options.limits, operation)\n : null;\n\n if (manifest === null || diagnostics.size > 0) {\n return freezeRecursively({\n asset: null,\n diagnostics: diagnostics.finalize(),\n formatVersion,\n manifest: null,\n valid: false,\n });\n }\n\n const digest = await calculateNormalizedTextDigest(normalized.text);\n const asset: IIndexedTextAsset = {\n content: normalized.text.value,\n digest,\n path,\n scalarLength: normalized.text.scalarLength,\n utf8ByteLength: normalized.text.utf8ByteLength,\n };\n\n return freezeRecursively({\n asset,\n diagnostics: diagnostics.finalize(),\n formatVersion,\n manifest,\n valid: true,\n });\n};\n\n/**\n * Parses and validates one complete version 1 manifest document.\n * @param input The canonical logical path and exact manifest text or bytes.\n * @param options The immutable Core limit snapshot.\n * @returns A frozen all-or-nothing manifest parse result.\n * @throws\n * - INVALID_REPOSITORY_PATH: The repository path is invalid.\n * - INVALID_ARGUMENT: The Core operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const parseManifestDocument = async (\n input: ITextDocumentInput,\n options: ICoreOptionsSnapshot,\n operation: Extract<ICoreOperation, 'parse-manifest' | 'match-manifest-scope'> = 'parse-manifest',\n): Promise<IManifestParseResult> => {\n const inspection = await inspectManifestDocument(input, options, operation);\n\n return freezeRecursively({\n asset: inspection.asset,\n diagnostics: inspection.diagnostics,\n manifest: inspection.manifest,\n valid: inspection.valid,\n });\n};\n","import type { ICoreOptionsSnapshot } from '../options/index.js';\nimport { freezeRecursively } from '../immutable/index.js';\nimport { parseManifestDocument } from '../manifest/index.js';\n\nimport { calculateManifestScopeInputDigest, matchParsedManifestScope } from './matching.js';\nimport type { IManifestScopeInput, IManifestScopeResult } from './types.js';\nimport { normalizeManifestScopeInput } from './validations.js';\n\n/**\n * Parses a manifest and matches its repository relationships against changed logical paths.\n * @param input The canonical manifest document and untrusted changed-path collection.\n * @param options The immutable Core operation options.\n * @returns A promise resolving to frozen content-free scope metadata and matches.\n * @throws\n * - INVALID_REPOSITORY_PATH: The manifest path or a changed repository path is invalid.\n * - INVALID_ARGUMENT: The scope operation received an invalid argument.\n * - RESOURCE_LIMIT_EXCEEDED: A Core resource limit was exceeded.\n */\nexport const matchManifestScope = async (\n input: IManifestScopeInput,\n options: ICoreOptionsSnapshot,\n): Promise<IManifestScopeResult> => {\n const normalized = normalizeManifestScopeInput(input, options.limits);\n const inputDigest = await calculateManifestScopeInputDigest(normalized.paths);\n const parsed = await parseManifestDocument(normalized.manifest, options, 'match-manifest-scope');\n\n if (!parsed.valid || parsed.asset === null || parsed.manifest === null) {\n return freezeRecursively({\n counts: {\n declarations: 0,\n inputPaths: normalized.paths.length,\n matchedOwners: 0,\n matchedPaths: 0,\n matches: 0,\n },\n diagnostics: parsed.diagnostics,\n inputDigest,\n manifestDigest: null,\n matches: [],\n relevant: false,\n valid: false,\n });\n }\n\n const matched = matchParsedManifestScope(parsed.manifest, normalized.paths, options.limits);\n\n return freezeRecursively({\n counts: matched.counts,\n diagnostics: [],\n inputDigest,\n manifestDigest: parsed.asset.digest,\n matches: matched.matches,\n relevant: matched.matches.length > 0,\n valid: true,\n });\n};\n"],"mappings":"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"}
|